@ampath-kenya/ngx-openmrs-formentry 2.12.21 → 2.12.23

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.
Files changed (25) hide show
  1. package/ampath-kenya-ngx-openmrs-formentry.metadata.json +1 -1
  2. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +5 -115
  3. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
  4. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -1
  5. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
  6. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +4 -4
  7. package/esm2015/form-entry/form-entry.module.js +2 -4
  8. package/esm2015/form-entry/form-factory/question.factory.js +1 -28
  9. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +2 -4
  10. package/esm2015/public_api.js +1 -2
  11. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +3 -3
  12. package/esm5/form-entry/form-entry.module.js +2 -4
  13. package/esm5/form-entry/form-factory/question.factory.js +1 -28
  14. package/esm5/form-entry/value-adapters/person-attribute.adapter.js +2 -4
  15. package/esm5/public_api.js +1 -2
  16. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +7 -113
  17. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
  18. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +6 -115
  19. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
  20. package/form-entry/form-factory/question.factory.d.ts +0 -1
  21. package/package.json +1 -4
  22. package/public_api.d.ts +0 -1
  23. package/esm2015/form-entry/value-adapters/person-address.adapter.js +0 -78
  24. package/esm5/form-entry/value-adapters/person-address.adapter.js +0 -82
  25. package/form-entry/value-adapters/person-address.adapter.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"ampath-kenya-ngx-openmrs-formentry.js.map","sources":["ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/debug-mode.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-errors.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relation.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/hider-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-alerts/alert-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/disabler-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-node.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/js-expression-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/conditional-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/control-relations.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/expression-runner/expression-runner.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-control.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-group.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-array.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-control-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/question-base.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-answered.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/future-date-restriction.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/js-expression-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/validations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/js-expression.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/utils/messages.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/validation.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/hiders-disablers.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/show-messages.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-control.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.css.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/data-sources.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/error-renderer/error-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-field-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/directives/historical-value-directive.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/diacritics.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option-list.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/secure.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/shared.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-picker/date-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/time-picker/time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/picker-modal/modal.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/pipes/moment.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/afe-ng-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-schema-compiler.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-area-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/ui-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/multi-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/interfaces/nested-questions.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/group-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/repeating-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/checkbox.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/time-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/file-upload-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/test-order-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/max-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/min-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/decimal-point-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/dummy-data-source.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/historical-encounter-data.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-expression-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/question.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs-adapter-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/order.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/encounter.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-attribute.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/appointments-overview/appointments-overview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-view/encounter-viewer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-pdf-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-container/encounter-container.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/question-control.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/file-preview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/remote-answer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-address.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-entry.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/pair.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/rendering-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/public_api.ts","ng://@ampath-kenya/ngx-openmrs-formentry/ampath-kenya-ngx-openmrs-formentry.ts"],"sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport class NodeBase {\n public children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) {}\n\n createChildNode() {}\n removeChildNode() {}\n}\n\nexport class LeafNode extends NodeBase {\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = '\"return ' + expression + '\"';\n }\n\n let funcDeclarationCode =\n 'var afeDynamicFunc = new Function(\"' +\n paramList +\n '\", ' +\n expression +\n ');';\n let funcCallCode =\n 'afeDynamicFunc.call(this ' +\n (argList === '' ? '' : ',' + argList) +\n ');';\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.info('results: ', expression, eval(funcDeclarationCode + funcCallCode));\n return eval(funcDeclarationCode + funcCallCode);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n showDate?: boolean;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n maxTime?: string;\n minTime?: string;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n .time-control{\n width:50%;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.time-control{\n width:100%;\n}\n\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n template: `<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <div class=\"dropdown dropdown-tabs forms-dropdown\">\n <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">\n <i class=\"fa fa-angle-double-down\"></i>\n </a>\n <ul\n class=\"dropdown-menu dropdown-menu-right forms-dropdown-menu\"\n role=\"menu\"\n aria-labelledby=\"dropdownMenu\"\n >\n <li\n *ngFor=\"let question of node.question.questions; let i = index\"\n (click)=\"clickTab(i)\"\n >\n {{ question.label }}\n </li>\n </ul>\n </div>\n <mat-tab-group\n (selectedIndexChange)=\"tabSelected($event)\"\n [selectedIndex]=\"activeTab\"\n >\n <mat-tab\n [label]=\"question.label\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <div (swipeLeft)=\"loadNextTab()\" (swipeRight)=\"loadPreviousTab()\">\n <form-renderer\n [node]=\"node.children[question.key]\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div style=\"text-align: center\">\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadPreviousTab()\"\n [ngClass]=\"{ disabled: isCurrentTabFirst() }\"\n >\n &lt;&lt;\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadNextTab()\"\n [ngClass]=\"{ disabled: isCurrentTabLast() }\"\n >\n &gt;&gt;\n </button>\n </div>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--<h2>{{node.question.label}}</h2>-->\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div class=\"panel panel-primary\">\n <div class=\"panel-heading\">\n <button\n type=\"button\"\n class=\"btn btn-primary pull-right\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n {{ isCollapsed ? 'Show' : 'Hide' }}\n </button>\n {{ node.question.label }}\n </div>\n <div class=\"panel-body\" [collapse]=\"isCollapsed\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">&times;</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n class=\"form-group\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"control-label\"\n [attr.for]=\"node.question.key\"\n >\n {{ node.question.required ? '*' : '' }} {{ node.question.label }}\n </label>\n <div [ngSwitch]=\"node.question.renderingType\">\n <select\n class=\"form-control\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option *ngFor=\"let o of node.question.options\" [ngValue]=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n\n <app-file-upload\n *ngSwitchCase=\"'file'\"\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </app-file-upload>\n <textarea\n [placeholder]=\"node.question.placeholder\"\n [rows]=\"node.question.rows\"\n class=\"form-control\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n </textarea>\n <!--\n <ng-select *ngSwitchCase=\"'remote-select'\" [items]=\"items$ | async\" bindLabel=\"label\" bindValue=\"value\" placeholder=\"{{node.question.placeholder}}\"\n [hideSelected]=\"true\" [loading]=\"itemsLoading\" [typeahead]=\"itemsInput$\" [formControlName]=\"node.question.key\" [id]=\"node.question.key + 'id'\">\n </ng-select>\n -->\n <remote-select\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></remote-select>\n <!-- \n <date-time-picker *ngSwitchCase=\"'date'\" [showTime]=\"node.question.showTime\" tabindex=\"0\" [weeks]='node.question.extras.questionOptions.weeksList'\n (onDateChange)=\"onDateChanged(node)\" [showWeeks]=\"node.question.showWeeksAdder\" [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"></date-time-picker>\n -->\n\n <ngx-date-time-picker\n *ngSwitchCase=\"'date'\"\n [showTime]=\"node.question.showTime\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n (onDateChange)=\"onDateChanged(node)\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n ></ngx-date-time-picker>\n <ngx-time-picker \n *ngSwitchCase=\"'time'\" \n id=\"node.question.key + 'id'\" \n [formControlName]=\"node.question.key\"\n ></ngx-time-picker>\n <ng-select\n *ngSwitchCase=\"'multi-select'\"\n [style.height]=\"'auto'\"\n [style.overflow-x]=\"'hidden'\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"true\"\n >\n </ng-select>\n <ng-select\n *ngSwitchCase=\"'single-select'\"\n [style.height]=\"auto\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"false\"\n >\n </ng-select>\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'number'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [step]=\"'any'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'decimal'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'text'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let o of node.question.options\">\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [value]=\"o.value\"\n />\n {{ o.label }}\n </label>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <checkbox\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue && node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\">Previous Value: </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{ node.question.historicalDisplay._date | timeAgo }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [node]=\"node\"\n [name]=\"'historyValue'\"\n class=\"btn btn-primary btn-small col-xs-3\"\n >\n Use Value\n </button>\n </div>\n </div>\n </div>\n <appointments-overview [node]=\"node\"></appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <p *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo }}\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">{{ node.question.label }}</h4>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button \"\n class=\"btn btn-primary\"\n (click)=\"node.createChildNode()\"\n >\n Add\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </div>\n</div>\n`,\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n\n // items$: Observable<any[]>;\n // itemsLoading = false;\n // itemsInput$ = new Subject<string>();\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n\n console.log('InfoId', infoId);\n }\n\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n template: `<div *ngIf=\"showErrors()\" class=\"container\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-warning\"\n *ngFor=\"let errorNode of errorNodes\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"error\" *ngIf=\"errorNode.control.valid == false\">\n <h4>{{ errorNode.question.label }}</h4>\n <span class=\"text-danger\"> {{ getControlError(errorNode) }}</span>\n </div>\n </li>\n </ul>\n</div>\n`,\n styles: [`ul{list-style:none}.list-group-item{padding:2px 15px;cursor:pointer}ul li:hover{background-color:#fff}h4{margin-top:7px;margin-bottom:7px}`]\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\n\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","export const STYLE = `\nng-select {\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle;\n width: 100%;\n}\nng-select * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nng-select > div {\n border: 1px solid #ddd;\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n width: 100%;\n}\nng-select > div.disabled {\n background-color: #eee;\n color: #aaa;\n cursor: default;\n pointer-events: none;\n}\nng-select > div > div.single {\n display: flex;\n height: 30px;\n width: 100%;\n}\nng-select > div > div.single > div.value,\nng-select > div > div.single > div.placeholder {\n flex: 1;\n line-height: 30px;\n overflow: hidden;\n padding: 0 10px;\n white-space: nowrap;\n}\nng-select > div > div.single > div.placeholder {\n color: #a9a9a9;\n}\nng-select > div > div.single > div.clear,\nng-select > div > div.single > div.toggle {\n color: #aaa;\n line-height: 30px;\n text-align: center;\n width: 30px;\n}\nng-select > div > div.single > div.clear:hover,\nng-select > div > div.single > div.toggle:hover {\n background-color: #ececec;\n}\nng-select > div > div.single > div.clear {\n font-size: 18px;\n}\nng-select > div > div.single > div.toggle {\n font-size: 14px;\n}\nng-select > div > div.multiple {\n display: flex;\n flex-flow: row wrap;\n height: 100%;\n min-height: 30px;\n padding: 0 10px;\n width: 100%;\n}\nng-select > div > div.multiple > div.option {\n background-color: #eee;\n border: 1px solid #aaa;\n border-radius: 4px;\n color: #333;\n cursor: default;\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 22px;\n margin: 3px 5px 3px 0;\n padding: 0 4px;\n}\nng-select > div > div.multiple > div.option span.deselect-option {\n color: #aaa;\n cursor: pointer;\n font-size: 14px;\n height: 20px;\n line-height: 20px;\n}\nng-select > div > div.multiple > div.option span.deselect-option:hover {\n color: #555;\n}\nng-select > div > div.multiple input {\n background-color: transparent;\n border: none;\n height: 30px;\n line-height: 30px;\n padding: 0;\n}\nng-select > div > div.multiple input:focus {\n outline: none;\n}\n`;\n","export const STYLE = `select-dropdown {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown > div {\n background-color: #fff;\n border: 1px solid #ccc;\n border-top: none;\n box-sizing: border-box;\n position: absolute;\n z-index: 1;\n}\nselect-dropdown > div .filter {\n padding: 3px;\n width: 100%;\n}\nselect-dropdown > div .filter input {\n border: 1px solid #eee;\n box-sizing: border-box;\n padding: 4px;\n width: 100%;\n}\nselect-dropdown > div .options {\n max-height: 200px;\n overflow-y: auto;\n}\nselect-dropdown > div .options ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nselect-dropdown > div .options ul li {\n padding: 4px 8px;\n cursor: pointer;\n user-select: none;\n}\nselect-dropdown .selected {\n background-color: #e0e0e0;\n}\nselect-dropdown .selected.highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .disabled {\n background-color: #fff;\n color: #9e9e9e;\n cursor: default;\n pointer-events: none;\n}`;\n","export class Option {\n value: string;\n label: string;\n\n disabled: boolean;\n highlighted: boolean;\n selected: boolean;\n shown: boolean;\n\n constructor(value: string, label: string) {\n this.value = value;\n this.label = label;\n\n this.disabled = false;\n this.highlighted = false;\n this.selected = false;\n this.shown = true;\n }\n\n show() {\n this.shown = true;\n }\n\n hide() {\n this.shown = false;\n }\n\n disable() {\n this.disabled = true;\n }\n\n enable() {\n this.disabled = false;\n }\n\n undecoratedCopy() {\n return {\n label: this.label,\n value: this.value\n };\n }\n}\n","export class Diacritics {\n static DIACRITICS = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n\n static strip(text: string): string {\n const match = (a: string): string => {\n return this.DIACRITICS[a] || a;\n };\n if (text) {\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n } else {\n return '';\n }\n }\n}\n","import { Option } from './option';\nimport { Diacritics } from './diacritics';\n\nexport class OptionList {\n private _options: Array<Option>;\n\n /* Consider using these for performance improvement. */\n // private _selection: Array<Option>;\n // private _filtered: Array<Option>;\n // private _value: Array<string>;\n\n private _highlightedOption: Option = null;\n // v0 and v1 are assumed not to be undefined or null.\n static equalValues(v0: Array<string>, v1: Array<string>): boolean {\n if (v0.length !== v1.length) {\n return false;\n }\n\n const a: Array<string> = v0.slice().sort();\n const b: Array<string> = v1.slice().sort();\n\n return a.every((v, i) => {\n return v === b[i];\n });\n }\n\n constructor(options: Array<any>) {\n if (typeof options === 'undefined' || options === null) {\n options = [];\n }\n\n this._options = options.map((option) => {\n const o: Option = new Option(option.value, option.label);\n if (option.disabled) {\n o.disable();\n }\n return o;\n });\n\n this.highlight();\n }\n\n /** Options. **/\n\n get options(): Array<Option> {\n return this._options;\n }\n\n getOptionsByValue(value: string): Array<Option> {\n return this.options.filter((option) => {\n return option.value === value;\n });\n }\n\n /** Value. **/\n\n get value(): Array<string> {\n return this.selection.map((selectedOption) => {\n return selectedOption.value;\n });\n }\n\n set value(v: Array<string>) {\n v = typeof v === 'undefined' || v === null ? [] : v;\n\n this.options.forEach((option) => {\n option.selected = v.indexOf(option.value) > -1;\n });\n }\n\n /** Selection. **/\n\n get selection(): Array<Option> {\n return this.options.filter((option) => {\n return option.selected;\n });\n }\n\n select(option: Option, multiple: boolean) {\n if (!multiple) {\n this.clearSelection();\n }\n option.selected = true;\n }\n\n deselect(option: Option) {\n option.selected = false;\n }\n\n clearSelection() {\n this.options.forEach((option) => {\n option.selected = false;\n });\n }\n\n /** Filter. **/\n\n get filtered(): Array<Option> {\n return this.options.filter((option) => {\n return option.shown;\n });\n }\n\n filter(term: string) {\n if (term.trim() === '') {\n this.resetFilter();\n } else {\n this.options.forEach((option) => {\n const l: string = Diacritics.strip(option.label).toUpperCase();\n const t: string = Diacritics.strip(term).toUpperCase();\n option.shown = l.indexOf(t) > -1;\n });\n }\n\n this.highlight();\n }\n\n resetFilter() {\n this.options.forEach((option) => {\n option.shown = true;\n });\n }\n\n /** Highlight. **/\n\n get highlightedOption(): Option {\n return this._highlightedOption;\n }\n\n highlight() {\n const option: Option = this.hasShownSelected()\n ? this.getFirstShownSelected()\n : this.getFirstShown();\n this.highlightOption(option);\n }\n\n highlightOption(option: Option) {\n this.clearHighlightedOption();\n\n if (option !== null) {\n option.highlighted = true;\n this._highlightedOption = option;\n }\n }\n\n highlightNextOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > -1 && index < shownOptions.length - 1) {\n this.highlightOption(shownOptions[index + 1]);\n }\n }\n\n highlightPreviousOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > 0) {\n this.highlightOption(shownOptions[index - 1]);\n }\n }\n\n private clearHighlightedOption() {\n if (this.highlightedOption !== null) {\n this.highlightedOption.highlighted = false;\n this._highlightedOption = null;\n }\n }\n\n private getHighlightedIndexFromList(options: Array<Option>) {\n for (let i = 0; i < options.length; i++) {\n if (options[i].highlighted) {\n return i;\n }\n }\n return -1;\n }\n\n getHighlightedIndex() {\n return this.getHighlightedIndexFromList(this.filtered);\n }\n\n /** Util. **/\n\n hasShown() {\n return this.options.some((option) => {\n return option.shown;\n });\n }\n\n hasSelected() {\n return this.options.some((option) => {\n return option.selected;\n });\n }\n\n hasShownSelected() {\n return this.options.some((option) => {\n return option.shown && option.selected;\n });\n }\n\n private getFirstShown(): Option {\n for (const option of this.options) {\n if (option.shown) {\n return option;\n }\n }\n return null;\n }\n\n private getFirstShownSelected(): Option {\n for (const option of this.options) {\n if (option.shown && option.selected) {\n return option;\n }\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { STYLE } from './select-dropdown.component.style';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\n@Component({\n selector: 'select-dropdown',\n template: `<div [ngStyle]=\"{ 'top.px': top, 'left.px': left, 'width.px': width }\">\n <div class=\"filter\" *ngIf=\"!multiple\">\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n (click)=\"onSingleFilterClick($event)\"\n (input)=\"onSingleFilterInput($event)\"\n (keydown)=\"onSingleFilterKeydown($event)\"\n />\n </div>\n\n <div class=\"options\" #optionsList>\n <ul (wheel)=\"onOptionsWheel($event)\">\n <li\n *ngFor=\"let option of optionList.filtered\"\n [ngClass]=\"{\n highlighted: option.highlighted,\n selected: option.selected,\n disabled: option.disabled\n }\"\n [ngStyle]=\"getOptionStyle(option)\"\n (click)=\"onOptionClick(option)\"\n (mouseover)=\"onOptionMouseover(option)\"\n >\n {{ option.label }}\n </li>\n <li *ngIf=\"!optionList.hasShown()\" class=\"message\">\n {{ notFoundMsg }}\n </li>\n </ul>\n </div>\n</div>\n`,\n styles: [STYLE],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectDropdownComponent\n implements AfterViewInit, OnChanges, OnInit {\n @Input() filterEnabled: boolean;\n @Input() highlightColor: string;\n @Input() highlightTextColor: string;\n @Input() left: number;\n @Input() multiple: boolean;\n @Input() notFoundMsg: string;\n @Input() optionList: OptionList;\n @Input() top: number;\n @Input() width: number;\n\n @Output() close = new EventEmitter<boolean>();\n @Output() optionClicked = new EventEmitter<Option>();\n @Output() singleFilterClick = new EventEmitter<null>();\n @Output() singleFilterInput = new EventEmitter<string>();\n @Output() singleFilterKeydown = new EventEmitter<any>();\n\n @ViewChild('filterInput') filterInput: any;\n @ViewChild('optionsList') optionsList: any;\n\n disabledColor = '#fff';\n disabledTextColor = '9e9e9e';\n\n /** Event handlers. **/\n\n // Angular life cycle hooks.\n\n ngOnInit() {\n this.optionsReset();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('optionList')) {\n this.optionsReset();\n }\n }\n\n ngAfterViewInit() {\n this.moveHighlightedIntoView();\n if (!this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n }\n\n // Filter input (single select).\n\n onSingleFilterClick(event: any) {\n this.singleFilterClick.emit(null);\n }\n\n onSingleFilterInput(event: any) {\n this.singleFilterInput.emit(event.target.value);\n }\n\n onSingleFilterKeydown(event: any) {\n this.singleFilterKeydown.emit(event);\n }\n\n // Options list.\n\n onOptionsWheel(event: any) {\n this.handleOptionsWheel(event);\n }\n\n onOptionMouseover(option: Option) {\n this.optionList.highlightOption(option);\n }\n\n onOptionClick(option: Option) {\n this.optionClicked.emit(option);\n }\n\n /** Initialization. **/\n\n private optionsReset() {\n this.optionList.resetFilter();\n this.optionList.highlight();\n }\n\n /** View. **/\n\n getOptionStyle(option: Option): any {\n if (option.highlighted) {\n return {\n 'background-color': this.highlightColor,\n color: this.highlightTextColor\n };\n } else {\n return {};\n }\n }\n\n clearFilterInput() {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n }\n }\n\n moveHighlightedIntoView() {\n const list = this.optionsList.nativeElement;\n const listHeight = list.offsetHeight;\n\n const itemIndex = this.optionList.getHighlightedIndex();\n\n if (itemIndex > -1) {\n const item = list.children[0].children[itemIndex];\n const itemHeight = item.offsetHeight;\n\n const itemTop = itemIndex * itemHeight;\n const itemBottom = itemTop + itemHeight;\n\n const viewTop = list.scrollTop;\n const viewBottom = viewTop + listHeight;\n\n if (itemBottom > viewBottom) {\n list.scrollTop = itemBottom - listHeight;\n } else if (itemTop < viewTop) {\n list.scrollTop = itemTop;\n }\n }\n }\n\n private handleOptionsWheel(e: any) {\n const div = this.optionsList.nativeElement;\n const atTop = div.scrollTop === 0;\n const atBottom = div.offsetHeight + div.scrollTop === div.scrollHeight;\n\n if (atTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (atBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n Input,\n OnChanges,\n OnInit,\n Output,\n EventEmitter,\n ExistingProvider,\n ViewChild,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { STYLE } from './select.component.style';\nimport { SelectDropdownComponent } from './select-dropdown.component';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\nexport const SELECT_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable:no-use-before-declare\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n};\n\n@Component({\n selector: 'ng-select',\n template: `<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{\n open: isOpen,\n focus: hasFocus,\n below: isBelow,\n disabled: disabled\n }\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\"\n (window:click)=\"onWindowClick()\"\n (window:resize)=\"onWindowResize()\"\n>\n <div class=\"single\" *ngIf=\"!multiple\">\n <div class=\"value\" *ngIf=\"optionList.hasSelected()\">\n {{ optionList.selection[0].label }}\n </div>\n <div class=\"placeholder\" *ngIf=\"!optionList.hasSelected()\">\n {{ placeholderView }}\n </div>\n <div\n class=\"clear\"\n *ngIf=\"allowClear\"\n (click)=\"onClearSelectionClick($event)\"\n >\n &#x2715;\n </div>\n <div class=\"toggle\" *ngIf=\"isOpen\">&#x25B2;</div>\n <div class=\"toggle\" *ngIf=\"!isOpen\">&#x25BC;</div>\n </div>\n\n <div class=\"multiple\" *ngIf=\"multiple\">\n <div class=\"option\" *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\" (click)=\"onDeselectOptionClick(option)\">\n &#x2715;\n </span>\n {{ option.label }}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{ 'width.px': filterInputWidth }\"\n (input)=\"onMultipleFilterInput($event)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n />\n </div>\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n (close)=\"onDropdownClose($event)\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterInput)=\"onSingleFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\"\n>\n</select-dropdown>\n`,\n styles: [STYLE],\n providers: [SELECT_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent\n implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit {\n /** Keys. **/\n\n private KEYS: any = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n };\n\n @Input() options: Array<any>;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() highlightColor = '#2196f3';\n @Input() highlightTextColor = '#fff';\n @Input() multiple = false;\n @Input() noFilter = 0;\n @Input() notFoundMsg = 'No results found';\n @Input() placeholder = '';\n\n @Output() opened: EventEmitter<null> = new EventEmitter<null>();\n @Output() closed: EventEmitter<null> = new EventEmitter<null>();\n @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n @Output() deselected: EventEmitter<any> = new EventEmitter<any>();\n @Output() typed: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild('selection') selectionSpan: any;\n @ViewChild('dropdown') dropdown: SelectDropdownComponent;\n @ViewChild('filterInput') filterInput: any;\n\n private _value: Array<any> = [];\n optionList: OptionList;\n\n // Selection state variables.\n hasSelected = false;\n\n // View state variables.\n filterEnabled = true;\n filterInputWidth = 1;\n hasFocus = false;\n isBelow = true;\n isDisabled = false;\n isOpen = false;\n placeholderView = '';\n\n clearClicked = false;\n selectContainerClicked = false;\n\n // Width and position for the dropdown container.\n width: number;\n top: number;\n left: number;\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n /** Event handlers. **/\n\n // Angular lifecycle hooks.\n\n ngOnInit() {\n this.placeholderView = this.placeholder;\n }\n\n ngAfterViewInit() {\n this.updateFilterWidth();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('options')) {\n this.updateOptionsList(changes['options'].isFirstChange());\n }\n if (changes.hasOwnProperty('noFilter')) {\n const numOptions: number = this.optionList.options.length;\n const minNumOptions: number = changes['noFilter'].currentValue;\n this.filterEnabled = numOptions >= minNumOptions;\n }\n }\n\n // Window.\n\n onWindowClick() {\n if (!this.selectContainerClicked) {\n this.closeDropdown();\n }\n this.clearClicked = false;\n this.selectContainerClicked = false;\n }\n\n onWindowResize() {\n this.updateWidth();\n }\n\n // Select container.\n\n onSelectContainerClick(event: any) {\n this.selectContainerClicked = true;\n if (!this.clearClicked) {\n this.toggleDropdown();\n }\n }\n\n onSelectContainerFocus() {\n this.onTouched();\n }\n\n onSelectContainerKeydown(event: any) {\n this.handleSelectContainerKeydown(event);\n }\n\n // Dropdown container.\n\n onDropdownOptionClicked(option: Option) {\n this.multiple ? this.toggleSelectOption(option) : this.selectOption(option);\n }\n\n onDropdownClose(focus: any) {\n this.closeDropdown(focus);\n }\n\n // Single filter input.\n\n onSingleFilterClick() {\n this.selectContainerClicked = true;\n }\n\n onSingleFilterInput(term: string) {\n setTimeout(() => {\n if (term.length > 2) {\n this.typed.emit(term);\n }\n }, 500);\n this.optionList.filter(term);\n }\n\n onSingleFilterKeydown(event: any) {\n this.handleSingleFilterKeydown(event);\n }\n\n // Multiple filter input.\n\n onMultipleFilterInput(event: any) {\n if (!this.isOpen) {\n this.openDropdown();\n }\n this.updateFilterWidth();\n setTimeout(() => {\n this.optionList.filter(event.target.value);\n });\n }\n\n onMultipleFilterKeydown(event: any) {\n this.handleMultipleFilterKeydown(event);\n }\n\n // Single clear select.\n\n onClearSelectionClick(event: any) {\n this.clearClicked = true;\n this.clearSelection();\n this.closeDropdown(true);\n }\n\n // Multiple deselect option.\n\n onDeselectOptionClick(option: Option) {\n this.clearClicked = true;\n this.deselectOption(option);\n }\n\n /** API. **/\n\n // TODO fix issues with global click/key handler that closes the dropdown.\n open() {\n this.openDropdown();\n }\n\n close() {\n this.closeDropdown();\n }\n\n clear() {\n this.clearSelection();\n }\n\n select(value: string) {\n this.optionList.getOptionsByValue(value).forEach((option) => {\n this.selectOption(option);\n });\n this.valueChanged();\n }\n\n /** ControlValueAccessor interface methods. **/\n\n writeValue(value: any) {\n this.value = value;\n }\n\n registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Value. **/\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this.multiple ? this._value : this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n\n if (!OptionList.equalValues(v, this._value)) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n private valueChanged() {\n this._value = this.optionList.value;\n\n this.hasSelected = this._value.length > 0;\n this.placeholderView = this.hasSelected ? '' : this.placeholder;\n this.updateFilterWidth();\n\n this.onChange(this.value);\n }\n\n /** Initialization. **/\n\n private updateOptionsList(firstTime: boolean) {\n let v: Array<string>;\n\n if (!firstTime) {\n v = this.optionList.value;\n }\n\n this.optionList = new OptionList(this.options);\n\n if (!firstTime) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n /** Dropdown. **/\n\n private toggleDropdown() {\n if (!this.isDisabled) {\n this.isOpen ? this.closeDropdown(true) : this.openDropdown();\n }\n }\n\n private openDropdown() {\n if (!this.isOpen) {\n this.updateWidth();\n this.updatePosition();\n this.isOpen = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n this.opened.emit(null);\n }\n }\n /* tslint:disable */\n private closeDropdown(focus: boolean = false) {\n if (this.isOpen) {\n this.clearFilterInput();\n this.isOpen = false;\n if (focus) {\n this.focus();\n }\n this.closed.emit(null);\n }\n }\n /* tslint:enable */\n /** Select. **/\n\n private selectOption(option: Option) {\n if (!option.selected) {\n this.optionList.select(option, this.multiple);\n this.valueChanged();\n this.selected.emit(option.undecoratedCopy());\n // Is this not allready done when setting the value??\n /*setTimeout(() => {\n if (this.multiple) {\n this.updateFilterWidth();\n }\n });*/\n }\n }\n\n private deselectOption(option: Option) {\n if (option.selected) {\n this.optionList.deselect(option);\n this.valueChanged();\n this.deselected.emit(option.undecoratedCopy());\n setTimeout(() => {\n if (this.multiple) {\n // this.updateFilterWidth();\n this.updatePosition();\n this.optionList.highlight();\n if (this.isOpen) {\n this.dropdown.moveHighlightedIntoView();\n }\n }\n });\n }\n }\n\n private clearSelection() {\n const selection: Array<Option> = this.optionList.selection;\n if (selection.length > 0) {\n this.optionList.clearSelection();\n this.valueChanged();\n\n if (selection.length === 1) {\n this.deselected.emit(selection[0].undecoratedCopy());\n } else {\n this.deselected.emit(\n selection.map((option) => {\n return option.undecoratedCopy();\n })\n );\n }\n }\n }\n\n private toggleSelectOption(option: Option) {\n option.selected ? this.deselectOption(option) : this.selectOption(option);\n }\n\n private selectHighlightedOption() {\n const option: Option = this.optionList.highlightedOption;\n if (option !== null) {\n this.selectOption(option);\n this.closeDropdown(true);\n }\n }\n\n private deselectLast() {\n const sel: Array<Option> = this.optionList.selection;\n\n if (sel.length > 0) {\n const option: Option = sel[sel.length - 1];\n this.deselectOption(option);\n this.setMultipleFilterInput(option.label + ' ');\n }\n }\n\n /** Filter. **/\n\n private clearFilterInput() {\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n } else {\n this.dropdown.clearFilterInput();\n }\n }\n\n private setMultipleFilterInput(value: string) {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = value;\n }\n }\n\n private handleSelectContainerKeydown(event: any) {\n const key = event.which;\n\n if (this.isOpen) {\n if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) {\n this.closeDropdown(true);\n } else if (key === this.KEYS.TAB) {\n this.closeDropdown();\n } else if (key === this.KEYS.ENTER) {\n this.selectHighlightedOption();\n } else if (key === this.KEYS.UP) {\n this.optionList.highlightPreviousOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n } else if (key === this.KEYS.DOWN) {\n this.optionList.highlightNextOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n }\n } else {\n if (\n key === this.KEYS.ENTER ||\n key === this.KEYS.SPACE ||\n (key === this.KEYS.DOWN && event.altKey)\n ) {\n /* FIREFOX HACK:\n *\n * The setTimeout is added to prevent the enter keydown event\n * to be triggered for the filter input field, which causes\n * the dropdown to be closed again.\n */\n setTimeout(() => {\n this.openDropdown();\n });\n }\n }\n }\n\n private handleMultipleFilterKeydown(event: any) {\n const key = event.which;\n\n if (key === this.KEYS.BACKSPACE) {\n if (\n this.hasSelected &&\n this.filterEnabled &&\n this.filterInput.nativeElement.value === ''\n ) {\n this.deselectLast();\n }\n }\n }\n\n private handleSingleFilterKeydown(event: any) {\n const key = event.which;\n\n if (\n key === this.KEYS.ESC ||\n key === this.KEYS.TAB ||\n key === this.KEYS.UP ||\n key === this.KEYS.DOWN ||\n key === this.KEYS.ENTER\n ) {\n this.handleSelectContainerKeydown(event);\n }\n }\n\n /** View. **/\n\n focus() {\n this.hasFocus = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n } else {\n this.selectionSpan.nativeElement.focus();\n }\n }\n\n blur() {\n this.hasFocus = false;\n this.selectionSpan.nativeElement.blur();\n }\n\n updateWidth() {\n this.width = this.selectionSpan.nativeElement.offsetWidth;\n }\n\n updatePosition() {\n const e = this.selectionSpan.nativeElement;\n this.left = e.offsetLeft;\n this.top = e.offsetTop + e.offsetHeight;\n }\n\n updateFilterWidth() {\n if (typeof this.filterInput !== 'undefined') {\n const value: string = this.filterInput.nativeElement.value;\n this.filterInputWidth =\n value.length === 0\n ? 1 + this.placeholderView.length * 10\n : 1 + value.length * 10;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { SelectComponent } from './select.component';\nimport { SelectDropdownComponent } from './select-dropdown.component';\n\n@NgModule({\n declarations: [SelectComponent, SelectDropdownComponent],\n exports: [SelectComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class SelectModule {}\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { of } from 'rxjs';\n\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n// import { FileUploadResourceService } from '../../etl-api/file-upload-resource.service';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n Renderer2,\n ChangeDetectorRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport { SecurePipe } from './secure.pipe';\n@Component({\n selector: 'app-file-upload',\n template: `<lib-file-uploader\n [srcUrl]=\"pdfUrl\"\n [formEntry]=\"formEntryMode\"\n [(ngModel)]=\"fileUuid\"\n (_onClear)=\"clearValue()\"\n (uploadData)=\"onFileChange($event)\"\n>\n</lib-file-uploader>\n<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!pdfUploaded\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this.dataSource.fetchFile\"\n alt=\"\"\n />\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true\n }\n ],\n styles: [\n `\n img {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n `\n ]\n})\nexport class FileUploadComponent implements OnInit, ControlValueAccessor {\n uploading = false;\n fileUuid = null;\n pdfUploaded = false;\n formEntryMode = true;\n pdfUrl: string;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.fileUuid) {\n this.checkFileType();\n }\n }\n public onFileChange(fileList) {\n for (const file of fileList) {\n this.upload(file);\n }\n }\n upload(data) {\n if (this.dataSource) {\n this.uploading = true;\n this.dataSource.fileUpload(data).subscribe(\n (result) => {\n this.fileUuid = result.image;\n this.checkFileType();\n this.propagateChange(this.fileUuid);\n this.uploading = false;\n },\n (error) => {\n this.uploading = false;\n }\n );\n }\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value !== this.fileUuid) {\n this.fileUuid = value;\n this.checkFileType();\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (_: any) => {};\n\n public clearValue() {\n this.fileUuid = null;\n this.pdfUploaded = false;\n this.pdfUrl = null;\n this.propagateChange(this.fileUuid);\n }\n\n public getPdfUrl(fileUuid: string) {\n this.dataSource.fetchFile(fileUuid, 'pdf').subscribe((file) => {\n this.pdfUploaded = true;\n this.pdfUrl = file.changingThisBreaksApplicationSecurity;\n });\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.getPdfUrl(this.fileUuid);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxFileUploaderModule } from 'ngx-file-uploader';\n\nimport { SharedModule } from '../../shared.module';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { FileUploadComponent } from './file-upload.component';\nimport { WebcamModule } from 'ngx-webcam';\n\n@NgModule({\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n SharedModule,\n WebcamModule,\n NgxFileUploaderModule\n ],\n exports: [FileUploadComponent],\n declarations: [FileUploadComponent],\n providers: []\n})\nexport class RemoteFileUploadModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelDatePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">\n <div class=\"picker-header-nav\">\n <span class=\"nav-prev\" (click)=\"prev()\"></span>\n </div>\n <div class=\"picker-header-content\">\n <div class=\"content\">\n <span (click)=\"showMonthSelection()\" class=\"month\">{{\n calendarDate | moment: 'MMMM'\n }}</span>\n <span class=\"seperator\">|</span>\n <span (click)=\"showYearSelection()\" class=\"year\">{{\n calendarDate | moment: 'YYYY'\n }}</span>\n </div>\n </div>\n <div class=\"picker-header-nav\">\n <span class=\"nav-next\" (click)=\"next()\"></span>\n </div>\n </div>\n <div class=\"picker-calendar\">\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span class=\"picker-weekday\" *ngFor=\"let day of dayNames\">{{\n day\n }}</span>\n </div>\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span\n class=\"picker-day\"\n (click)=\"selectDay(day)\"\n [ngClass]=\"{\n 'out-focus': day.month() != calendarDate.month(),\n today: day.isSame(today),\n selected: day.isSame(selectedDate)\n }\"\n *ngFor=\"let day of calendarDays\"\n >\n {{ day | moment: 'D' }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayMonths\">\n <span\n class=\"picker-month\"\n *ngFor=\"let month of monthsShort\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{\n selected: month === currentMonth\n }\"\n >\n {{ month }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayYears\">\n <span\n class=\"picker-year\"\n *ngFor=\"let year of displayYearRange\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{\n selected: year === currentYear\n }\"\n >\n {{ year }}\n </span>\n </div>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-today\" (click)=\"selectToday()\">\n <span class=\"text\">Today</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearPickDate()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelDatePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:666px}.picker-box{font-family:'Open Sans';min-width:400px!important;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;display:flex;height:2.5rem;width:100%}.picker-header-nav{position:relative;cursor:pointer;width:calc(100% / 8)}.picker-header-nav>*{position:absolute;top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.picker-header-nav .nav-next::before,.picker-header-nav .nav-prev::before{content:' ';border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker-header-nav .nav-next::before{border-right:0;border-left:.75em solid #000}.picker-header-content{width:calc(100% * 6 / 8);text-align:center}.picker-header-content .month{font-size:1.778rem;line-height:2.5rem;margin-right:.5rem;font-weight:700}.picker-header-content .year{font-style:italic;color:#999}.picker-calendar{width:100%}.picker-calendar .picker-calendar-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.625rem}.picker-calendar .picker-weekday{font-weight:700;text-align:left;color:#999;width:calc(100% / 7)}.picker-calendar .picker-day,.picker-calendar .picker-month,.picker-calendar .picker-year{font-size:1.333rem;line-height:2.5rem;position:relative;height:2.5rem;text-align:center;cursor:pointer;width:calc(100% / 7)}.picker-calendar .picker-day:hover,.picker-calendar .picker-month:hover,.picker-calendar .picker-year:hover{background:#b1dcfb}.picker-calendar .out-focus{color:#ddd}.picker-calendar .out-focus:hover{color:#000}.picker-calendar .selected{background:#0089ec;color:#fff}.picker-calendar .selected:hover{background:#0089ec}.picker-calendar .today::before{content:' ';position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker-footer{cursor:pointer}.picker-footer .picker-action{text-align:center;width:calc(100% / 3)}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-today::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-today::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelTimePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">Time Picker</div>\n <div class=\"picker-table\">\n <ul class=\"picker-table-time\">\n <li class=\"picker-table-number hour\">\n <span class=\"arrow up\" (click)=\"increaseHour()\"></span>\n {{ time | moment: hourFormat }}\n <span class=\"arrow down\" (click)=\"decreaseHour()\"></span>\n </li>\n <li class=\"picker-table-separator\">:</li>\n <li class=\"picker-table-number minute\">\n <span class=\"arrow up\" (click)=\"increaseMinute()\"></span>\n {{ time | moment: 'mm' }}\n <span class=\"arrow down\" (click)=\"decreaseMinute()\"></span>\n </li>\n <li *ngIf=\"showSecond\" class=\"picker-table-separator\">:</li>\n <li *ngIf=\"showSecond\" class=\"picker-table-number second\">\n <span class=\"arrow up\" (click)=\"increaseSecond()\"></span>\n {{ time | moment: 'ss' }}\n <span class=\"arrow down\" (click)=\"decreaseSecond()\"></span>\n </li>\n <li *ngIf=\"use12Hour\" class=\"picker-table-meridiem meridiem\">\n {{ time | moment: 'A' }}\n </li>\n </ul>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-now\" (click)=\"selectNow()\">\n <span class=\"text\">Now</span>\n </div>\n <div class=\"picker-action action-confirm\" (click)=\"selectTime()\">\n <span class=\"text\">Confirm</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearTime()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelTimePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:40rem;font-family:'Open Sans'}.picker-box{width:100%;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;height:2.5rem;width:100%}.picker-header{text-align:center}.picker-table{width:100%;margin:2.5rem 0}.picker-table-time{font-size:2.37rem;line-height:2.5rem;list-style:none;margin:0;padding:0;display:flex;justify-content:center;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-table-meridiem,.picker-table-number,.picker-table-separator{text-align:center}.picker-table-meridiem,.picker-table-number{position:relative;width:20%}.arrow{position:absolute;left:50%;border:solid #777;border-width:0 .2rem .2rem 0;display:inline-block;padding:.25rem;cursor:pointer}.arrow.up{top:-1rem;-webkit-transform:translateX(-50%) rotate(-135deg);transform:translateX(-50%) rotate(-135deg)}.arrow.down{bottom:-1rem;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.arrow:hover{border-color:#1975d2}.picker-table-separator{width:calc(20% / 3)}.picker-footer{display:flex;justify-content:center;width:100%;cursor:pointer}.picker-footer .picker-action{width:25%;text-align:center}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-confirm::before,.picker-footer .action-now::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-now::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-confirm::before{width:1rem;height:1rem;border-radius:100%;background-color:#00b5ad}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n template: `<section class=\"x-modal\">\n <section class=\"modal-overlay\" (click)=\"closeModal()\"></section>\n <section class=\"modal-main\" id=\"section-modal-main\">\n <ng-content></ng-content>\n </section>\n</section>\n`,\n styles: [`:host{z-index:9999999999}*,::after,::before{box-sizing:border-box}.modal-main{position:absolute;left:19.6%;right:auto;top:auto;z-index:111;background-color:#fff;border:1px solid #d7dad7;border-radius:6px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);box-shadow:0 5px 15px rgba(0,0,0,.3)}`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n template: `<div class=\"row\">\n <div *ngIf=\"!showTime\" class=\"col-xs-12 col-md-12\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-8 col-md-8\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-4 col-md-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n </div>\n</div>\n<date-picker\n *ngIf=\"showDatePicker\"\n [initDate]=\"value\"\n (onSelectDate)=\"setDate($event)\"\n (onDatePickerCancel)=\"toggleDatePicker($event)\"\n></date-picker>\n\n<time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"setTime($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n></time-picker>\n`,\n styles: [`input[readonly]{background-color:#fff}.up{bottom:100%!important;top:auto!important}.glyphicon{top:1px}`],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Moment } from 'moment/moment';\n\nimport {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormControl\n} from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'LL'\n },\n display: {\n dateInput: 'LL',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY'\n }\n};\n\n@Component({\n selector: 'ngx-date-time-picker',\n template: `<div>\n <div class=\"row\">\n <div [class]=\"getDatePickerCssClass()\">\n <div class=\"input-group\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n class=\"form-control\"\n [value]=\"value\"\n placeholder=\"Choose a date\"\n (dateChange)=\"onDateSelect($event)\"\n (click)=\"picker.open()\"\n readonly\n />\n <mat-datepicker #picker disabled=\"false\"></mat-datepicker>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n class=\"input-group-btn\"\n ></mat-datepicker-toggle>\n </div>\n </div>\n <div [class]=\"getWeekPickerCssClass()\" *ngIf=\"showWeeks\">\n <mat-select\n placeholder=\"Select Weeks\"\n class=\"form-control\"\n name=\"weeks\"\n (selectionChange)=\"weekSelect($event)\"\n >\n <mat-option *ngFor=\"let count of weeks\" [value]=\"count\">\n {{ count }} Weeks\n </mat-option>\n </mat-select>\n </div>\n <div [class]=\"getTimePickerCssClass()\" *ngIf=\"showTime\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n <time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"onTimeSelect($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n ></time-picker>\n </div>\n </div>\n</div>\n`,\n styles: [`#time-section{display:inline-block}#ngx-atp-time-picker,#ngx-mat-form-field{width:100%}.up{bottom:100%!important;top:auto!important}.time-btn{margin-top:-20px}`],\n providers: [\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n { provide: DateAdapter, useClass: MomentDateAdapter },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class NgxDateTimePickerComponent\n implements OnInit, ControlValueAccessor {\n // public date = new FormControl(moment());\n public selectedTime = moment().format();\n public selectedDate = moment().format();\n public loadInitial = false;\n public value;\n public showTimePicker = false;\n @Input() weeks: number[] = [0, 2, 4, 6, 8, 12, 16, 24];\n @Input() modelValue: any;\n @Input() showTime = false;\n @Input() showWeeks = true;\n @Output() onDateChange = new EventEmitter<any>();\n public onChange: any = () => {};\n public onTouched: any = () => {};\n public ngOnInit() {}\n\n public writeValue(value) {\n this.value = value;\n }\n\n public registerOnChange(fn) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn) {}\n\n public onTimeSelect($event) {\n const setDate = moment(this.selectedDate);\n const setTime = $event;\n this.setDateTime(setDate, setTime);\n }\n\n public onDateSelect($event) {\n const setDate = moment($event.value);\n const setTime = this.selectedTime;\n const dateString = this.setDateTime(setDate, setTime);\n\n const selectedDate = $event.value;\n this.value = dateString;\n }\n\n public toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n\n public setCurrentTime() {\n const setDate = moment(this.selectedDate);\n const currentTime = moment().format('HH:mm:ss');\n this.setDateTime(setDate, currentTime);\n }\n\n public weekSelect($event) {\n const dateToUse = moment().format();\n const nextWeekDate = moment(dateToUse).add($event.value, 'weeks');\n const nextWeekTime = dateToUse;\n this.setDateTime(nextWeekDate, nextWeekTime);\n }\n\n public selectionChange($event) {\n console.log('Week selected', $event);\n }\n\n public getWeekPickerCssClass() {\n if (this.showTime) {\n return 'col-sm-2 form-group';\n }\n return 'col-sm-3 form-group';\n }\n\n public getDatePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n\n if (this.showTime === true) {\n return 'col-sm-8 form-group';\n }\n return 'col-sm-12 form-group';\n }\n\n public getTimePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n return 'col-sm-4 form-group';\n }\n\n public setDateTime(setDate, setTime) {\n const newDate = moment(setDate).format('DD-MM-YYYY');\n let newTime;\n if (this.showTime) {\n newTime = moment(setTime).format('HH:mm:ss');\n } else {\n newTime = '00:00:00';\n }\n const newDateTime = moment(newDate + '' + newTime, 'DD-MM-YYYY HH:mm:ss');\n const dateTimeString = moment(newDateTime).format();\n this.selectedDate = dateTimeString;\n this.selectedTime = dateTimeString;\n this.value = dateTimeString;\n this.onChange(this.value);\n\n return dateTimeString;\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule, MatInputModule } from '@angular/material';\nimport { NgxDateTimePickerComponent } from './ngx-date-time-picker.component';\n// import { AmazingTimePickerModule } from 'amazing-time-picker';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n DateTimePickerModule,\n // AmazingTimePickerModule,\n MatSelectModule\n ],\n declarations: [NgxDateTimePickerComponent],\n exports: [\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n NgxDateTimePickerComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TimeQuestionOptions } from './interfaces/time-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TimeQuestion extends QuestionBase {\n constructor(options: TimeQuestionOptions) {\n super(options);\n this.renderingType = 'time';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","export class DecimalPointValidationModel {\n type: string;\n message: string;\n decimalPlace = 0;\n failsWhenExpression = '';\n\n constructor(validations: any) {\n this.type = 'js_expression';\n this.decimalPlace = validations.decimalPlace;\n }\n setFailExpression(): void {\n this.failsWhenExpression = `!isEmpty(myValue) && String(myValue).split('.')[1].length !== ${this.decimalPlace}`;\n }\n setMessage() {\n this.message = `Value must be to ${this.decimalPlace} decimal places`;\n }\n setValuesAndExpressions() {\n this.setMessage();\n this.setFailExpression();\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { TimeQuestion } from './../question-models/time-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DecimalPointValidationModel } from '../question-models/decimal-point-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\n\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDecimalQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'decimal';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTimeQuestion(schemaQuestion: any): TimeQuestion {\n const question = new TimeQuestion({ type: '', key: '' });\n question.renderingType = 'time';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n toPersonAddressQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAddress';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'amrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toSiblingLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'siblingLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNonAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'nonAmrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'decimal':\n return this.toDecimalQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'time':\n return this.toTimeQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'amrsLocations':\n return this.toAmrsLocationsQuestion(schema);\n case 'nonAmrsLocations':\n return this.toNonAmrsLocationsQuestion(schema);\n case 'siblingLocations':\n return this.toSiblingLocationsQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'decimal':\n const decimalModel = new DecimalPointValidationModel(validator);\n decimalModel.setValuesAndExpressions();\n validators.push(decimalModel);\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n if (renderingType === 'number' || renderingType === 'decimal') {\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\n\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n console.log('valuePayload', valuePayload);\n\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to memoent value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format(\n 'YYYY-MM-DD HH:mm:ss'\n );\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n if (element.value && element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n node.control.uuid = payload['uuid'];\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n node.control.uuid = payload['uuid'];\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n (rootNode.question.extras.type === 'personAttribute' ||\n rootNode.question.extras.type === 'amrsLocations' ||\n rootNode.question.extras.type === 'nonAmrsLocations' ||\n rootNode.question.extras.type === 'siblingLocations')\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { SelectComponent } from '../../components/select/select.component';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'remote-select',\n template: `<div>\n <ng-select\n [id]=\"componentID\"\n [noFilter]=\"0\"\n (selected)=\"selected($event)\"\n (deselected)=\"removed($event)\"\n [options]=\"items\"\n [allowClear]=\"true\"\n [placeholder]=\"placeholder\"\n [notFoundMsg]=\"notFoundMsg\"\n (typed)=\"typed($event)\"\n tabindex=\"0\"\n >\n </ng-select>\n <div *ngIf=\"loading\">resolving....</div>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n characters = [];\n @ViewChild(SelectComponent) private selectC: SelectComponent;\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n // console.log('updating items', results, this.selectC.value);\n this.restoreSelectedValue(this.selectC.value, results);\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n public typed(value: any): void {\n this.search(value);\n }\n search(value: string) {\n if (this.dataSource) {\n this.searchText = value;\n this.notFoundMsg = 'Loading.........';\n this.dataSource.searchOptions(value).subscribe(\n (result) => {\n if (result.length > 0) {\n const existing = _.map(this.value, _.clone);\n const concat = existing.concat(result);\n this.items = _.uniqBy(concat, 'value');\n }\n this.notFoundMsg = '';\n },\n (error) => {\n this.notFoundMsg = 'Errored';\n }\n );\n }\n }\n\n restoreSelectedValue(value, results) {\n let found = false;\n _.each(results, (item) => {\n if (item.value === value) {\n setTimeout(() => {\n this.selectC.select(value);\n this.selectC.value = value;\n });\n found = true;\n }\n });\n if (!found) {\n // console.log('not found after loading items', value, results);\n setTimeout(() => {\n this.selectC.select('');\n this.selectC.value = '';\n });\n }\n }\n\n canSearch(searchText: string) {\n return (\n (searchText.length - this.searchText.length >= 2 ||\n (searchText.length - this.searchText.length <= 2 &&\n searchText !== '')) &&\n this.loading === false\n );\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n setTimeout(() => {\n this.selectC.select(result.value);\n this.selectC.value = result.value;\n });\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n removed(event) {\n console.log('Removed');\n this.propagateChange('');\n }\n selected(event) {\n this.propagateChange(event.value);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { RemoteSelectComponent } from './remote-select.component';\n\n@NgModule({\n imports: [CommonModule, SelectModule, FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class RemoteSelectModule {}\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\ninterface DailyScheduled {\n date: string;\n count: {\n scheduled: number;\n };\n}\ninterface WeeeklyScheduleReport {\n reports: {\n attended: any;\n hasNotReturned: any;\n scheduled: any;\n };\n results: DailyScheduled[];\n totals: {\n attended: number;\n hasNotReturned: number;\n scheduled: number;\n };\n}\ninterface DayCount {\n date: string;\n count: number;\n}\n\n@Component({\n selector: 'appointments-overview',\n template: `<div *ngIf=\"showAppointments\" class=\"appointments\">\n <p *ngIf=\"loadingAppointments\">\n <span *ngIf=\"!appointmentsLoaded && errorLoadingAppointments\"\n >Error checking appointments</span\n >\n <span *ngIf=\"loadingAppointments\"\n ><span class=\"fa fa-spinner fa-spin\"></span>Checking appointments...</span\n >\n </p>\n <div *ngIf=\"appointmentsLoaded && !errorLoadingAppointments\">\n <table\n *ngIf=\"appointments.length > 0\"\n class=\"table table-stripped table-bordered\"\n >\n <thead>\n <tr>\n <th\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span>{{ appointment.date }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span\n ><strong\n ><em>{{ appointment.count }}</em></strong\n ></span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n`,\n styles: [`.appointments{margin-top:12px;font-size:12px;color:#999}.appointments p{padding-top:12px}.appointments th{border-bottom:0!important;color:#333}.appointments td span,.appointments th span{display:block}.appointments td.active,.appointments th.active{background-color:#3c8dbc;color:#fff!important;padding:0}.appointments td.active span,.appointments th.active span{padding:4px}.appointments span.fa{display:inline-block;margin-right:7px}`]\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n department: 'HIV',\n groupBy: 'groupByPerson,groupByAttendedDate,groupByRtcDate'\n })\n .subscribe(\n (data: WeeeklyScheduleReport) => {\n const _data: DayCount[] = [];\n const weeklyMap = new Map();\n // create the weeks schedule with zero appointments\n for (let i = 0; i < 5; i++) {\n const scheduleDate = moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('YYYY-MM-DD');\n const scheduledObj: DailyScheduled = {\n date: scheduleDate,\n count: {\n scheduled: 0\n }\n };\n weeklyMap.set(scheduleDate, scheduledObj);\n }\n\n const results: DailyScheduled[] = data.results || [];\n // replace placeholder schedules with actual schedules in the map obj\n results.forEach((scheduled: DailyScheduled) => {\n weeklyMap.set(scheduled.date, scheduled);\n });\n // retrieve scheduled obj from map to data array\n weeklyMap.forEach((value: DailyScheduled, key: string) => {\n const dayCount: DayCount = {\n date: key,\n count: value.count.scheduled || 0\n };\n _data.push(dayCount);\n });\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n\n this.appointments = _data;\n },\n (error: any) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GroupNode,\n LeafNode,\n ArrayNode,\n NodeBase\n} from '../form-entry/form-factory/form-node';\nimport * as _ from 'lodash';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\nimport { Observable } from 'rxjs';\nimport { SelectOption } from '../form-entry/question-models/interfaces/select-option';\nconst comma = ', ';\nconst newLine = '\\n';\n\n@Injectable()\nexport class EncounterViewerService implements DataSource {\n constructor() {}\n public resolveSelectedValue(value: any): Observable<SelectOption> {\n return;\n }\n public searchOptions(searchText: any): Observable<SelectOption[]> {\n return;\n }\n public fileUpload(data: any): Observable<any> {\n return;\n }\n public fetchFile(url: any): Observable<any> {\n return;\n }\n\n public resolveSelectedValueFromSchema(\n answerUuid: string,\n schema: any\n ): string {\n let label;\n if (schema.pages) {\n _.forEach(schema.pages, (page) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, page);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.sections) {\n _.forEach(schema.sections, (section) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, section);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.questions) {\n _.forEach(schema.questions, (question) => {\n if (question.questions) {\n const l = this.resolveSelectedValueFromSchema(answerUuid, question);\n if (l) {\n label = l;\n }\n } else {\n if (question.questionOptions.answers) {\n _.forEach(question.questionOptions.answers, (answer) => {\n if (answer.concept === answerUuid) {\n label = answer.label;\n }\n });\n } else if (question.questionOptions.selectableOrders) {\n _.forEach(question.questionOptions.selectableOrders, (order) => {\n if (order.concept === answerUuid) {\n label = order.label;\n }\n });\n }\n }\n });\n }\n return label;\n }\n\n public hasAnswer(node: NodeBase) {\n let answered = false;\n if (node.initialValue) {\n answered = true;\n }\n return answered;\n }\n\n public questionsAnswered(node: any, answered?: boolean[]) {\n const $answered = answered || [];\n if (node.question.renderingType === 'page') {\n _.forEach(node.children, (childNode: any) => {\n this.questionsAnswered(childNode, $answered);\n });\n } else if (node.question.renderingType === 'section') {\n _.forEach(node.children, (childNode) => {\n if (childNode.question.renderingType === 'group') {\n _.forEach(childNode.children, (child) => {\n const ans = this.questionsAnswered(child, $answered);\n if (ans) {\n $answered.push(ans);\n }\n });\n } else if (this.hasAnswer(childNode)) {\n $answered.push(true);\n }\n });\n } else {\n return this.hasAnswer(node);\n }\n\n if ($answered.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n public isDate(val: any) {\n if (Date.parse(val)) {\n return true;\n } else {\n return false;\n }\n }\n public convertTime(unixTimestamp: number) {\n const a = new Date(unixTimestamp);\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n const year = a.getFullYear();\n const month = months[a.getMonth()];\n const date = a.getDate();\n const hour = a.getHours();\n const min = a.getMinutes();\n const sec = a.getSeconds();\n const suffix = hour < 12 ? 'AM' : 'PM';\n let time;\n if (hour === 0 && min === 0) {\n time = date + ' ' + month + ' ' + year;\n } else {\n time =\n date +\n ' ' +\n month +\n ' ' +\n year +\n ' ' +\n hour +\n ':' +\n min +\n suffix +\n ' (EAT)';\n }\n return time;\n }\n}\n","import { Component, OnInit, Input, Inject } from '@angular/core';\nimport {\n NodeBase,\n GroupNode,\n LeafNode\n} from '../../form-entry/form-factory/form-node';\nimport { QuestionBase } from '../../form-entry/question-models/question-base';\nimport * as _ from 'lodash';\n\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { DataSources } from '../../form-entry/data-sources/data-sources';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\n\nimport { EncounterViewerService } from '../encounter-viewer.service';\n\n@Component({\n selector: 'encounter-viewer',\n template: `<div class=\"viewer\">\n <div *ngIf=\"rootNode.question.renderingType === 'form'\" class=\"form\">\n <div *ngFor=\"let question of rootNode.question.questions; let i = index\">\n <div *ngIf=\"questionsAnswered(rootNode.children[question.key])\">\n <div [attr.id]=\"'page' + i\" class=\"panel panel-default\">\n <p class=\"page-label panel-heading text-primary\">\n {{ question.label }}\n </p>\n <div class=\"panel-body\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentComponent]=\"this\"\n [parentGroup]=\"rootNode.control\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.renderingType === 'page'\" class=\"page\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n\n <div\n *ngIf=\"\n rootNode.question.renderingType === 'section' &&\n questionsAnswered(rootNode)\n \"\n class=\"section\"\n >\n <div class=\"panel panel-primary\">\n <p class=\"panel-heading section-label\">{{ rootNode.question.label }}</p>\n </div>\n <div *ngFor=\"let question of rootNode.question.questions\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [parentComponent]=\"this\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n </div>\n\n <!--Leaf Controls-->\n <div style=\"margin-left: 10px\">\n <form *ngIf=\"rootNode.question.controlType === 0\" [formGroup]=\"parentGroup\">\n <div *ngIf=\"rootNode.control.value\">\n <div class=\"question-answer\">\n <label\n *ngIf=\"rootNode.question.label\"\n [attr.for]=\"rootNode.question.key\"\n style=\"font-weight: 400\"\n >\n {{ rootNode.question.label }}\n </label>\n <span *ngIf=\"checkForColon(rootNode.question.label)\">:</span>\n <div\n [ngSwitch]=\"rootNode.question.renderingType\"\n style=\"display: inline-block; font-weight: bold\"\n >\n <div *ngSwitchCase=\"'file'\">\n <file-preview\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"fileDataSource\"\n ></file-preview>\n </div>\n <div *ngSwitchCase=\"'remote-select'\">\n <remote-answer\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"remoteDataSource\"\n ></remote-answer>\n </div>\n <div *ngSwitchDefault style=\"display: inline-block\">\n <question-control\n [schema]=\"_schema\"\n [value]=\"rootNode.control.value\"\n [dataSource]=\"customDataSource\"\n ></question-control>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <!--Array Controls-->\n <div\n *ngIf=\"rootNode.question.controlType === 1 && questionsAnswered(rootNode)\"\n >\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'repeating'\">\n <div [ngSwitch]=\"rootNode.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <label>{{ rootNode.question.label }}:</label>\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\">\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.controlType === 2\">\n <!--GROUP-->\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n <div *ngSwitchCase=\"'field-set'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n</div>\n`,\n styles: [`.page-label{font-size:20px;font-weight:700}.section-label{font-size:18px;font-weight:500}.panel-primary{border:none!important}.question-answer{font-size:16px}.panel{margin-bottom:5px}div.section{margin-bottom:15px!important}.line-breaker{white-space:pre-line}hr{margin:10px}`]\n})\nexport class EncounterViewerComponent implements OnInit {\n public rootNode: NodeBase;\n public enc: any;\n public fileDataSource: DataSource;\n public remoteDataSource: DataSource;\n public customDataSource: DataSource;\n public _schema;\n @Input() public parentGroup: AfeFormGroup;\n @Input() public parentComponent: EncounterViewerComponent;\n @Input() set node(rootNode: NodeBase) {\n this.rootNode = rootNode;\n }\n\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n\n @Input() public set encounter(enc: any) {\n this.enc = enc;\n }\n @Input() set form(form: any) {\n this.rootNode = form.rootNode;\n this._schema = form.schema;\n console.log(this.getQuestionNodes(this.traverse(this.rootNode)));\n }\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private dataSources: DataSources\n ) {}\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n arrays.push(page.page);\n }\n return merged.concat.apply([], arrays);\n }\n public ngOnInit() {\n if (this.rootNode) {\n }\n if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'file'\n ) {\n this.fileDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'remote-select'\n ) {\n this.remoteDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else {\n this.customDataSource = this.encounterViewerService;\n }\n }\n\n public questionsAnswered(node: any) {\n const $answered = this.encounterViewerService.questionsAnswered(node);\n return $answered;\n }\n\n public questionAnswered(node: NodeBase) {\n const answered = this.encounterViewerService.hasAnswer(node);\n return answered;\n }\n\n public checkForColon(questionLabel: string) {\n if (questionLabel.indexOf(':') === -1) {\n return true;\n } else {\n return false;\n }\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({ page: page });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({ section: section });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n } else {\n console.log('Console.log', o);\n }\n }\n return questions;\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Form } from '../form-entry/form-factory/form';\nimport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { DataSources } from '../form-entry/data-sources/data-sources';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\nimport { combineLatest, BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\n\nimport * as moment_ from 'moment';\nimport * as _ from 'lodash';\nimport * as pdfMake from 'pdfmake/build/pdfmake.js';\nimport 'pdfmake/build/vfs_fonts.js';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\n\nconst moment = moment_;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncounterPdfViewerService {\n private remoteDataSource: DataSource;\n public error: boolean;\n public errorMessage: string;\n public showLoader: boolean;\n public subscribedAnswers: any = {\n questions: {\n stack: []\n },\n answers: []\n };\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private obsValueAdapter: ObsValueAdapter,\n private dataSources: DataSources\n ) {}\n\n getPages(\n pages: any,\n form: Form,\n remoteSelectsOnly?: boolean,\n remoteAns?: any\n ): any[] {\n const content = [];\n let remoteQuestions = [];\n\n for (const page of pages) {\n if (remoteSelectsOnly) {\n remoteQuestions = remoteQuestions.concat(\n this.getSections(page.page, form, false, remoteAns)\n );\n } else {\n for (const question of form.rootNode.question.questions) {\n if (\n page.label ===\n form.rootNode.children[question.key].question.label &&\n this.encounterViewerService.questionsAnswered(\n form.rootNode.children[question.key]\n )\n ) {\n content.push({\n style: 'tableExample',\n table: {\n widths: ['*'],\n headerRows: 1,\n keepWithHeaderRows: 1,\n body: [\n [{ text: page.label, style: 'tableHeader' }],\n [\n {\n style: 'tableExample',\n table: {\n widths: ['*'],\n body: this.getSections(page.page, form, true, remoteAns)\n },\n layout: 'noBorders',\n margin: [5, 0, 0, 0]\n }\n ]\n ]\n },\n layout: {\n hLineWidth: function (i, node) {\n return i === 0 || i === node.table.body.length ? 0.5 : 0.5;\n },\n vLineWidth: function (i, node) {\n return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;\n },\n hLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n },\n vLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n }\n }\n });\n }\n }\n }\n }\n return remoteSelectsOnly ? remoteQuestions : content;\n }\n\n getSections(sections: any, form: Form, resolve: any, remoteAns: any): any[] {\n const content = [];\n const answeredSections = [];\n let questions: Array<Observable<any>> = [];\n\n sections.map((s) => {\n if (this.encounterViewerService.questionsAnswered(s.node)) {\n answeredSections.push(s);\n }\n });\n\n for (const section of answeredSections) {\n questions = questions.concat(this.getRemoteSectionData(section.section));\n }\n\n if (resolve && remoteAns) {\n for (const section of answeredSections) {\n content.push([\n {\n table: {\n widths: ['*'],\n body: [\n [{ text: section.label, style: 'tableSubheader' }],\n [this.getSectionData(section.section, remoteAns, form)]\n ]\n },\n layout: 'noBorders'\n }\n ]);\n }\n return content;\n } else {\n return questions;\n }\n }\n\n private appendResolvedAnswer(\n resolvedAnswer: any,\n questions: any,\n node?: any\n ) {\n if (resolvedAnswer) {\n questions.stack.push({\n text: [\n `${node ? node.question.label : 'Question label'}${\n node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : ''\n } `,\n { text: `${resolvedAnswer}`, bold: true }\n ],\n style: 'answers'\n });\n }\n }\n\n // get remote selects only\n getRemoteSectionData(section: any): any {\n const questions: Array<Observable<any>> = [];\n this.subscribedAnswers.questions.stack = [];\n\n for (const node of section) {\n if (node.question.renderingType === 'remote-select') {\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n if (node.control.value !== '') {\n if (this.remoteDataSource) {\n questions.push(\n this.remoteDataSource.resolveSelectedValue(node.control.value)\n );\n }\n }\n }\n }\n return questions;\n }\n\n // merge remote selects\n getSectionData(section: any, remoteAns: any[], form: Form): any {\n const questions = {\n stack: []\n };\n\n let resolvedAnswer = '';\n\n for (const node of section) {\n switch (node.question.renderingType) {\n case 'group':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'field-set':\n if (node.children) {\n const groupMembers = [];\n const result = Object.keys(node.children).map(\n (key) => node.children[key]\n );\n\n if (result) {\n groupMembers.push(result);\n questions.stack.push(\n this.getSectionData(groupMembers[0], remoteAns, form)\n );\n }\n }\n break;\n\n case 'repeating':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'remote-select':\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n for (const ans of remoteAns) {\n if (ans.value === node.control.value) {\n this.appendResolvedAnswer(ans.label, questions, node);\n }\n }\n break;\n\n default:\n const answer = node.control.value;\n if (answer) {\n resolvedAnswer = this.resolveValue(answer, form);\n this.appendResolvedAnswer(resolvedAnswer, questions, node);\n }\n }\n }\n\n return questions;\n }\n\n resolveValue(answer: any, form: Form, arrayElement?: boolean): any {\n if (answer !== '') {\n if (this.isUuid(answer)) {\n const val = this.encounterViewerService.resolveSelectedValueFromSchema(\n answer,\n form.schema\n );\n if (!arrayElement) {\n if (val) {\n return val.toUpperCase();\n } else {\n return answer;\n }\n } else {\n return val;\n }\n } else if (_.isArray(answer)) {\n const arr = [];\n _.forEach(answer, (elem) => {\n arr.push(this.resolveValue(elem, form, true));\n });\n return arr.toString();\n } else if (this.isDate(answer)) {\n if (!arrayElement) {\n return this.encounterViewerService.convertTime(answer);\n } else {\n return this.encounterViewerService.convertTime(answer);\n }\n } else if (typeof answer === 'object') {\n const values = [];\n const result = Object.keys(answer).map((key) => [key, answer[key]]);\n\n values.push(result);\n return values;\n } else {\n return answer;\n }\n }\n }\n\n generatePdfDefinition(form: Form): any {\n const docDefinition$ = new BehaviorSubject<any>({});\n const remoteSelects = this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n true\n );\n\n combineLatest(remoteSelects).subscribe((remoteAns) => {\n if (remoteAns) {\n const docDefinition = {\n pageSize: 'A4',\n content: this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n false,\n remoteAns\n ),\n styles: {\n answers: {\n fontSize: 8\n },\n banner: {\n fontSize: 9,\n bold: true,\n margin: [50, 15, 30, 0]\n },\n bannerItem: {\n margin: [2, 2, 2, 2]\n },\n bannerLabel: {\n color: '#2f4f4f'\n },\n confidential: {\n color: 'red',\n fontSize: 8,\n bold: true,\n margin: [60, 0, 0, 0]\n },\n footer: {\n alignment: 'center',\n fontSize: 8,\n bold: true\n },\n header: {\n fontSize: 9,\n bold: true,\n margin: [5, 5, 5, 5]\n },\n pageNumber: {\n color: '#2f4f4f',\n fontSize: 6\n },\n tableExample: {\n fontSize: 10,\n margin: [5, 0, 0, 5]\n },\n tableHeader: {\n fillColor: '#f5f5f5',\n width: ['100%'],\n borderColor: '#333',\n fontSize: 9,\n bold: true,\n margin: [5, 0, 5, 0]\n },\n tableSubheader: {\n fillColor: '#337ab7',\n width: ['100%'],\n fontSize: 9,\n color: 'white',\n margin: [5, 0, 5, 0]\n },\n timestamp: {\n bold: true,\n color: '#2f4f4f'\n }\n },\n defaultStyle: {\n fontSize: 7\n }\n };\n docDefinition$.next(docDefinition);\n }\n });\n\n return docDefinition$;\n }\n\n displayPdf(form) {\n const pdf = pdfMake;\n let patient;\n pdf.vfs = pdfMake.vfs;\n\n if (form.dataSourcesContainer.dataSources._dataSources) {\n patient =\n form.dataSourcesContainer.dataSources._dataSources['patientInfo'];\n }\n\n this.generatePdfDefinition(form).subscribe(\n (docDefinition) => {\n if (!_.isEmpty(docDefinition)) {\n if (typeof patient !== 'undefined') {\n const banner = [];\n\n if (patient.name) {\n banner.push({\n text: [\n { text: 'Name: ', style: 'bannerLabel' },\n { text: `${this.titleize(patient.name)}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.nid) {\n banner.push({\n text: [\n { text: 'ID: ', style: 'bannerLabel' },\n { text: `${patient.nid}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.birthdate) {\n banner.push({\n text: [\n { text: 'DOB: ', style: 'bannerLabel' },\n {\n text: `${moment(patient.birthdate).format('l')} (${\n patient.age\n } yo)`\n }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mui) {\n banner.push({\n text: [\n { text: 'MUI: ', style: 'bannerLabel' },\n { text: `${patient.mui}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mhn) {\n banner.push({\n text: [\n { text: 'MTRH No: ', style: 'bannerLabel' },\n { text: `${patient.mhn}` }\n ],\n style: 'bannerItem'\n });\n }\n\n docDefinition.header = {\n style: 'banner',\n table: {\n body: [banner]\n },\n layout: 'noBorders'\n };\n }\n\n docDefinition.footer = (currentPage, pageCount) => {\n return {\n style: 'footer',\n widths: ['*', 'auto'],\n table: {\n body: [\n [\n {\n text:\n 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +\n \"Patients' personal health information should be kept private.\",\n style: 'confidential'\n },\n ''\n ],\n [\n {\n text: `Generated on ${new Date().toUTCString()}`,\n style: 'timestamp'\n },\n {\n text: `${currentPage.toString()} of ${pageCount}`,\n style: 'pageNumber'\n }\n ]\n ]\n },\n layout: 'noBorders'\n };\n };\n\n const win = window.open('', '_blank');\n pdf.createPdf(docDefinition).open({}, win);\n }\n },\n (error) => {\n console.log('Error: ', error);\n }\n );\n }\n\n isDate(val: any) {\n return moment(val, moment.ISO_8601, true).isValid();\n }\n\n isUuid(value: string) {\n return (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n );\n }\n\n titleize(str) {\n return str.replace(\n /\\w\\S*/g,\n (s) => s.charAt(0).toUpperCase() + s.substr(1).toLowerCase()\n );\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Form } from '../../form-entry/form-factory/form';\nimport { NodeBase } from '../../form-entry/form-factory/form-node';\nimport { EncounterAdapter } from '../../form-entry/value-adapters/encounter.adapter';\n\nimport { EncounterPdfViewerService } from '../encounter-pdf-viewer.service';\n\n@Component({\n selector: 'encounter-renderer',\n template: `<a\n type=\"button\"\n style=\"display: block; font-size: 28px; cursor: pointer\"\n class=\"text-right\"\n (click)=\"displayPdf()\"\n>\n <span class=\"glyphicon text-primary glyphicon-print\"></span>\n</a>\n<encounter-viewer\n class=\"card\"\n [form]=\"$form\"\n [encounter]=\"$enc\"\n></encounter-viewer>\n`,\n styles: [`.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}`]\n})\nexport class EncounterContainerComponent implements OnInit {\n public $form: Form;\n public $enc: any;\n\n @Input() public set form(form) {\n this.$form = form;\n }\n @Input() public set encounter(enc) {\n this.$enc = enc;\n }\n\n constructor(\n private encAdapter: EncounterAdapter,\n private encounterPdfViewerService: EncounterPdfViewerService\n ) {}\n\n ngOnInit() {}\n\n displayPdf() {\n this.encounterPdfViewerService.displayPdf(this.$form);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'question-control',\n styles: [`input{border:none;box-shadow:none;color:#000;background:#fff!important;padding-top:23px;display:block;position:relative}`],\n template: `<div>\n {{ innerValue }}\n</div>\n`\n})\nexport class QuestionControlComponent implements OnInit {\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n @Input() public set value(value) {\n this._value = value;\n }\n @Input() public set dataSource(dataSource: any) {\n this._dataSource = dataSource;\n }\n // The internal data model\n public innerValue: any = '';\n private _value: any;\n private _schema: any;\n private _dataSource: EncounterViewerService;\n constructor() {}\n\n ngOnInit() {\n this.writeValue(this._value);\n }\n public isUuid(value: string) {\n if (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n // Current time string.\n\n public writeValue(v: any, arrayElement?: boolean) {\n if (v !== this.innerValue) {\n if (this.isUuid(v)) {\n if (!arrayElement) {\n const val = this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n if (val) {\n this.innerValue = val.toUpperCase();\n } else {\n this.innerValue = v;\n }\n } else {\n return this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n }\n } else if (_.isArray(v)) {\n const arr = [];\n _.forEach(v, (el) => {\n arr.push(this.writeValue(el, true));\n });\n this.innerValue = arr;\n } else if (this.isDate(v)) {\n if (!arrayElement) {\n this.innerValue = this._dataSource.convertTime(v);\n } else {\n return this._dataSource.convertTime(v);\n }\n } else {\n if (!arrayElement) {\n this.innerValue = v;\n } else {\n return v;\n }\n }\n }\n }\n\n public isDate(str: string) {\n return this._dataSource.isDate(str) && !_.isNumber(str);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'file-preview',\n styles: [``],\n template: `<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!resultsIsPdf\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this._dataSource.fetchFile\"\n alt=\"image\"\n />\n </div>\n <a *ngIf=\"resultsIsPdf\" (click)=\"getUrl()\" style=\"cursor: pointer\"\n ><u>Open PDF</u></a\n > `,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilePreviewComponent),\n multi: true\n }\n ]\n})\nexport class FilePreviewComponent implements ControlValueAccessor, OnInit {\n @Input() public source: any;\n public fileUuid = null;\n public pdfUrl: any;\n public resultsIsPdf = false;\n public _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor(private encounterService: EncounterViewerService) {}\n ngOnInit() {}\n // get accessor\n get value(): any {\n return this.fileUuid;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n this.checkFileType();\n }\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.resultsIsPdf = true;\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {\n // const files = event.srcElement.files;\n // const fileToLoad = files[0];\n // const fileReader = new FileReader();\n // fileReader.onload = (fileLoadedEvent) => {\n // const data = fileReader.result;\n // const fileType = data.substring('data:image/'.length, data.indexOf(';base64'));\n // const payload = {\n // data,\n // extension: fileType\n // };\n // };\n // fileReader.readAsDataURL(fileToLoad);\n }\n public getUrl() {\n this.dataSource.fetchFile(this.fileUuid, 'pdf').subscribe((file) => {\n window.open(file.changingThisBreaksApplicationSecurity, '_blank');\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'remote-answer',\n styles: [],\n template: `\n <div *ngIf=\"innerValue\">\n {{ innerValue }}\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteAnswerComponent),\n multi: true\n }\n ]\n})\nexport class RemoteAnswerComponent implements ControlValueAccessor {\n @Input() public source: any;\n public innerValue = null;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor() {}\n // get accessor\n get value(): any {\n return this.innerValue;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.innerValue) {\n if (this._dataSource) {\n this._dataSource.resolveSelectedValue(v).subscribe((ans) => {\n this.innerValue = ans.label;\n });\n } else {\n this.innerValue = v;\n }\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EncounterViewerComponent } from './encounter-view/encounter-viewer.component';\nimport { EncounterContainerComponent } from './encounter-container/encounter-container.component';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { EncounterPdfViewerService } from './encounter-pdf-viewer.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionControlComponent } from './display-controls/question-control.component';\nimport { FilePreviewComponent } from './display-controls/file-preview.component';\nimport { RemoteAnswerComponent } from './display-controls/remote-answer.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SharedModule } from '../shared.module';\n@NgModule({\n declarations: [\n EncounterViewerComponent,\n EncounterContainerComponent,\n QuestionControlComponent,\n FilePreviewComponent,\n RemoteAnswerComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n HttpClientModule,\n SharedModule\n ],\n providers: [EncounterViewerService, EncounterPdfViewerService],\n exports: [EncounterContainerComponent, HttpClientModule]\n})\nexport class EncounterViewerModule {}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n template: `<div *ngFor=\"let option of options; let i = index\">\n <label class=\"form-control no-border\">\n <input\n type=\"checkbox\"\n id=\"i + 'id'\"\n (change)=\"selectOpt(option, $event)\"\n value=\"option.value\"\n [checked]=\"option.checked\"\n />\n {{ option.label }}\n </label>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ],\n styles: [\n `\n .no-border {\n border: 0;\n box-shadow: none;\n }\n `\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Component, OnInit, forwardRef } from '@angular/core';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-time-picker',\n template: `<input\n type=\"time\"\n class=\"form-control\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onTimeSelect($event)\"\n/>\n`,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => NgxTimePickerComponent)\n }\n ]\n})\nexport class NgxTimePickerComponent implements OnInit, ControlValueAccessor {\n public value: string = moment().format('HH:mm:ss');\n public onChange: any = () => {};\n public onTouched: any = () => {};\n\n public ngOnInit() {}\n\n public writeValue(value: any): void {\n this.value = this.formatTimeValue(value);\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public onTimeSelect($event: string): void {\n const timeValue = this.formatTimeValue($event);\n this.value = timeValue;\n this.onChange(timeValue);\n }\n\n public formatTimeValue(timeInputString: string): string {\n /*\n Allows processing of data that comes in as date-time\n or just time i.e '1970-03-01 12:32:21' or '12:32:21'\n or '12:32' or '1970-01-01T13:03:00.000+0300'\n */\n let timeArray = [];\n let dateArray = [];\n let timeValue = '';\n\n if (typeof timeInputString === 'undefined' || timeInputString === null) {\n } else {\n timeArray = timeInputString.split(':');\n dateArray = timeInputString.split('-');\n }\n if (timeArray.length === 1 && moment(timeInputString).isValid()) {\n timeValue = moment(timeInputString).format('HH:mm:ss');\n } else if (timeArray.length > 1 && timeArray.length < 2) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length > 1) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length <= 1) {\n timeValue = moment(timeInputString, 'HH:mm:ss').format('HH:mm:ss');\n } else {\n timeValue = moment().format('HH:mm:ss');\n }\n return timeValue;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTimePickerComponent } from './ngx-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n declarations: [NgxTimePickerComponent],\n exports: [NgxTimePickerComponent],\n providers: []\n})\nexport class NgxTimePickerModule {}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAddressAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAddressNodes(rootNode);\n const element = {};\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n element[node.question.extras.questionOptions.addressType] =\n node.control.value;\n element['uuid'] = node.control.uuid;\n payload.push(element);\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n const nodes = this.getPersonAddressNodes(rootNode);\n nodes.forEach((node) => {\n Object.keys(payload).forEach((key, value) => {\n if (key === node.question.extras.questionOptions.addressType) {\n if (value) {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n } else {\n node.control.setValue(payload[key]);\n node.initialValue = payload[key];\n node.control.uuid = payload['uuid'];\n }\n }\n });\n });\n }\n\n getPersonAddressNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAddressNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAddressNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (\n rootNode.question.extras &&\n rootNode.question.extras.type === 'personAddress'\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAddressNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAddressNodes(child, array);\n });\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { MatTabsModule, MatIconModule, MatCardModule } from '@angular/material';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { SelectModule } from '../components/select/select.module';\n// import { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-date-time-picker/ngx-date-time-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { RemoteSelectModule } from '../components/remote-select/remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { EncounterViewerModule } from '../encounter-viewer/encounter-viewer.module';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { TimeAgoPipe } from 'time-ago-pipe';\nimport { NgxTimePickerModule } from '../components/ngx-time-picker/ngx-time-picker.module';\nimport { PersonAddressAdapter } from './value-adapters/person-address.adapter';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollapseModule,\n // NgSelectModule,\n SelectModule,\n DateTimePickerModule,\n RemoteSelectModule,\n // NoopAnimationsModule,\n RemoteFileUploadModule,\n EncounterViewerModule,\n CheckboxModule,\n MatIconModule,\n MatTabsModule,\n MatCardModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule,\n SharedModule\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService,\n PersonAddressAdapter\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n EncounterViewerModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule\n ]\n})\nexport class FormEntryModule {}\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n","/*\n * Public API Surface of ngx-formentry\n */\nexport { FormEntryModule } from './form-entry/form-entry.module';\n// export { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { AfeFormControl } from './abstract-controls-extension/afe-form-control';\nexport { AfeFormGroup } from './abstract-controls-extension/afe-form-group';\nexport { AfeFormArray } from './abstract-controls-extension/afe-form-array';\nexport { AfeControlType } from './abstract-controls-extension/afe-control-type';\nexport { EncounterPdfViewerService } from './encounter-viewer/encounter-pdf-viewer.service';\nexport { ControlRelationsFactory } from './form-entry/form-factory/control-relations.factory';\nexport { FormControlService } from './form-entry/form-factory/form-control.service';\nexport { FormFactory } from './form-entry/form-factory/form.factory';\nexport { Form } from './form-entry/form-factory/form';\nexport { QuestionFactory } from './form-entry/form-factory/question.factory';\nexport { ValidationFactory } from './form-entry/form-factory/validation.factory';\nexport { FormSchemaCompiler } from './form-entry/services/form-schema-compiler.service';\nexport { HistoricalEncounterDataService } from './form-entry/services/historical-encounter-data.service';\nexport { FormErrorsService } from './form-entry/services/form-errors.service';\nexport { EncounterAdapter } from './form-entry/value-adapters/encounter.adapter';\nexport { PersonAttribuAdapter } from './form-entry/value-adapters/person-attribute.adapter';\nexport { PersonAddressAdapter } from './form-entry/value-adapters/person-address.adapter';\nexport { OrderValueAdapter } from './form-entry/value-adapters/order.adapter';\nexport { ObsValueAdapter } from './form-entry/value-adapters/obs.adapter';\nexport { ObsAdapterHelper } from './form-entry/value-adapters/obs-adapter-helper';\nexport { ValueAdapter } from './form-entry/value-adapters/value.adapter';\nexport { DataSources } from './form-entry/data-sources/data-sources';\nexport { CheckBoxQuestion } from './form-entry/question-models/checkbox.model';\nexport { ConditionalValidationModel } from './form-entry/question-models/conditional-validation.model';\nexport { DateQuestion } from './form-entry/question-models/date-question';\nexport { DateValidationModel } from './form-entry/question-models/date-validation.model';\nexport { FileUploadQuestion } from './form-entry/question-models/file-upload-question';\nexport { QuestionGroup } from './form-entry/question-models/group-question';\nexport { JsExpressionValidationModel } from './form-entry/question-models/js-expression-validation.model';\nexport { MaxValidationModel } from './form-entry/question-models/max-validation.model';\nexport { MinValidationModel } from './form-entry/question-models/min-validation.model';\nexport { MultiSelectQuestion } from './form-entry/question-models/multi-select-question';\nexport { Pair } from './form-entry/question-models/pair.model';\nexport { QuestionBase } from './form-entry/question-models/question-base';\nexport { RenderingType } from './form-entry/question-models/rendering-type';\nexport { RepeatingQuestion } from './form-entry/question-models/repeating-question';\nexport { Option } from './form-entry/question-models/select-option';\nexport { SelectQuestion } from './form-entry/question-models/select-question';\nexport { TestOrderQuestion } from './form-entry/question-models/test-order-question';\nexport { TextAreaInputQuestion } from './form-entry/question-models/text-area-input-question';\nexport { TextInputQuestion } from './form-entry/question-models/text-input-question';\nexport { UiSelectQuestion } from './form-entry/question-models/ui-select-question';\nexport { ValidationModel } from './form-entry/question-models/validation.model';\nexport { BaseOptions } from './form-entry/question-models/interfaces/base-options';\nexport { RepeatingQuestionOptions } from './form-entry/question-models/interfaces/repeating-question-options';\nexport { GroupQuestionOptions } from './form-entry/question-models/interfaces/group-question-options';\nexport { NestedQuestion } from './form-entry/question-models/interfaces/nested-questions';\nexport { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { NgxDateTimePickerModule } from './components/ngx-date-time-picker/ngx-date-time-picker.module';\nexport { JsExpressionHelper } from './form-entry/helpers/js-expression-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {AfeNgSelectComponent as ɵbg} from './components/afe-ng-select.component';\nexport {AppointmentsOverviewComponent as ɵbh} from './components/appointments-overview/appointments-overview.component';\nexport {CheckboxControlComponent as ɵz} from './components/check-box/checkbox.component';\nexport {CheckboxModule as ɵy} from './components/check-box/checkbox.module';\nexport {DatePickerComponent as ɵg} from './components/date-time-picker/date-picker/date-picker.component';\nexport {DateTimePickerComponent as ɵk} from './components/date-time-picker/date-time-picker.component';\nexport {ModalComponent as ɵi} from './components/date-time-picker/picker-modal/modal.component';\nexport {MomentPipe as ɵj} from './components/date-time-picker/pipes/moment.pipe';\nexport {TimePickerComponent as ɵh} from './components/date-time-picker/time-picker/time-picker.component';\nexport {FileUploadComponent as ɵq} from './components/file-upload/file-upload.component';\nexport {RemoteFileUploadModule as ɵn} from './components/file-upload/file-upload.module';\nexport {SecurePipe as ɵp} from './components/file-upload/secure.pipe';\nexport {MY_FORMATS as ɵba,NgxDateTimePickerComponent as ɵbb} from './components/ngx-date-time-picker/ngx-date-time-picker.component';\nexport {NgxTimePickerComponent as ɵbd} from './components/ngx-time-picker/ngx-time-picker.component';\nexport {NgxTimePickerModule as ɵbc} from './components/ngx-time-picker/ngx-time-picker.module';\nexport {RemoteSelectComponent as ɵm} from './components/remote-select/remote-select.component';\nexport {RemoteSelectModule as ɵl} from './components/remote-select/remote-select.module';\nexport {SelectDropdownComponent as ɵe} from './components/select/select-dropdown.component';\nexport {STYLE as ɵf} from './components/select/select-dropdown.component.style';\nexport {SELECT_VALUE_ACCESSOR as ɵb,SelectComponent as ɵc} from './components/select/select.component';\nexport {STYLE as ɵd} from './components/select/select.component.style';\nexport {SelectModule as ɵa} from './components/select/select.module';\nexport {FilePreviewComponent as ɵw} from './encounter-viewer/display-controls/file-preview.component';\nexport {QuestionControlComponent as ɵv} from './encounter-viewer/display-controls/question-control.component';\nexport {RemoteAnswerComponent as ɵx} from './encounter-viewer/display-controls/remote-answer.component';\nexport {EncounterContainerComponent as ɵu} from './encounter-viewer/encounter-container/encounter-container.component';\nexport {EncounterViewerComponent as ɵs} from './encounter-viewer/encounter-view/encounter-viewer.component';\nexport {EncounterViewerModule as ɵr} from './encounter-viewer/encounter-viewer.module';\nexport {EncounterViewerService as ɵt} from './encounter-viewer/encounter-viewer.service';\nexport {HistoricalValueDirective as ɵbi} from './form-entry/directives/historical-value-directive';\nexport {ErrorRendererComponent as ɵbk} from './form-entry/error-renderer/error-renderer.component';\nexport {ExpressionRunner as ɵbm} from './form-entry/expression-runner/expression-runner';\nexport {HidersDisablersFactory as ɵbl} from './form-entry/form-factory/hiders-disablers.factory';\nexport {AlertsFactory as ɵbo} from './form-entry/form-factory/show-messages.factory';\nexport {FormRendererComponent as ɵbe} from './form-entry/form-renderer/form-renderer.component';\nexport {DEFAULT_STYLES as ɵbf} from './form-entry/form-renderer/form-renderer.component.css';\nexport {HistoricalFieldHelperService as ɵbj} from './form-entry/helpers/historical-field-helper-service';\nexport {CheckboxOptions as ɵbp} from './form-entry/question-models/interfaces/checkbox-options';\nexport {DateQuestionOptions as ɵbq} from './form-entry/question-models/interfaces/date-question-options';\nexport {FileUploadQuestionOptions as ɵbr} from './form-entry/question-models/interfaces/file-upload-question-options';\nexport {MultiSelectQuestionOptions as ɵbt} from './form-entry/question-models/interfaces/multi-select-options';\nexport {SelectOption as ɵbu} from './form-entry/question-models/interfaces/select-option';\nexport {SelectQuestionOptions as ɵbs} from './form-entry/question-models/interfaces/select-question-options';\nexport {TestOrderQuestionOptions as ɵbv} from './form-entry/question-models/interfaces/test-order-question-options';\nexport {TextAreaQuestionOptions as ɵbx} from './form-entry/question-models/interfaces/text-area-question-options';\nexport {TextQuestionOptions as ɵbw} from './form-entry/question-models/interfaces/text-question-options';\nexport {UiSelectQuestionOptions as ɵby} from './form-entry/question-models/interfaces/ui-select-question-options';\nexport {DebugModeService as ɵbn} from './form-entry/services/debug-mode.service';\nexport {SharedModule as ɵo} from './shared.module';"],"names":["tslib_1.__extends","isEmpty","_.first","_.forEach","_.last","_.findIndex","_.filter","_.isArray","_.each","_.isUndefined","STYLE","tslib_1.__values","moment","_.chunk","Option","_.isEmpty","_.includes","_.sortBy","_.isNil","_.extend","_.has","_.find","_.intersection","first","_.isEqual","_.map","_.clone","_.uniqBy","pdfMake.vfs","_.isNumber","noop"],"mappings":"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;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAYJ,iBAAC;CAAA,IAAA;;ACl1BD;IAuBE,oBAAY,OAAmB;;;;;QAfvB,uBAAkB,GAAW,IAAI,CAAC;QAgBxC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE;YACtD,OAAO,GAAG,EAAE,CAAC;SACd;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM;YACjC,IAAM,CAAC,GAAW,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnB,CAAC,CAAC,OAAO,EAAE,CAAC;aACb;YACD,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;;IA3BM,sBAAW,GAAlB,UAAmB,EAAiB,EAAE,EAAiB;QACrD,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;YAC3B,OAAO,KAAK,CAAC;SACd;QAED,IAAM,CAAC,GAAkB,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAM,CAAC,GAAkB,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QAE3C,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAoBD,sBAAI,+BAAO;;aAAX;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;SACtB;;;OAAA;IAED,sCAAiB,GAAjB,UAAkB,KAAa;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM;YAChC,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;SAC/B,CAAC,CAAC;KACJ;IAID,sBAAI,6BAAK;;aAAT;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,cAAc;gBACvC,OAAO,cAAc,CAAC,KAAK,CAAC;aAC7B,CAAC,CAAC;SACJ;aAED,UAAU,CAAgB;YACxB,CAAC,GAAG,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAEpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;gBAC1B,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aAChD,CAAC,CAAC;SACJ;;;OARA;IAYD,sBAAI,iCAAS;;aAAb;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM;gBAChC,OAAO,MAAM,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAC;SACJ;;;OAAA;IAED,2BAAM,GAAN,UAAO,MAAc,EAAE,QAAiB;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;KACxB;IAED,6BAAQ,GAAR,UAAS,MAAc;QACrB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;KACzB;IAED,mCAAc,GAAd;QACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YAC1B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB,CAAC,CAAC;KACJ;IAID,sBAAI,gCAAQ;;aAAZ;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM;gBAChC,OAAO,MAAM,CAAC,KAAK,CAAC;aACrB,CAAC,CAAC;SACJ;;;OAAA;IAED,2BAAM,GAAN,UAAO,IAAY;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;gBAC1B,IAAM,CAAC,GAAW,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC/D,IAAM,CAAC,GAAW,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACvD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAClC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,gCAAW,GAAX;QACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YAC1B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB,CAAC,CAAC;KACJ;IAID,sBAAI,yCAAiB;;aAArB;YACE,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAChC;;;OAAA;IAED,8BAAS,GAAT;QACE,IAAM,MAAM,GAAW,IAAI,CAAC,gBAAgB,EAAE;cAC1C,IAAI,CAAC,qBAAqB,EAAE;cAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KAC9B;IAED,oCAAe,GAAf,UAAgB,MAAc;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;SAClC;KACF;IAED,wCAAmB,GAAnB;QACE,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,IAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/C;KACF;IAED,4CAAuB,GAAvB;QACE,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,IAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/C;KACF;IAEO,2CAAsB,GAA9B;QACE,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;KACF;IAEO,gDAA2B,GAAnC,UAAoC,OAAsB;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAC1B,OAAO,CAAC,CAAC;aACV;SACF;QACD,OAAO,CAAC,CAAC,CAAC;KACX;IAED,wCAAmB,GAAnB;QACE,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACxD;;IAID,6BAAQ,GAAR;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM;YAC9B,OAAO,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC,CAAC;KACJ;IAED,gCAAW,GAAX;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM;YAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC;SACxB,CAAC,CAAC;KACJ;IAED,qCAAgB,GAAhB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM;YAC9B,OAAO,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC;SACxC,CAAC,CAAC;KACJ;IAEO,kCAAa,GAArB;;YACE,KAAqB,IAAA,KAAAC,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA;gBAA5B,IAAM,MAAM,WAAA;gBACf,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,OAAO,MAAM,CAAC;iBACf;aACF;;;;;;;;;QACD,OAAO,IAAI,CAAC;;KACb;IAEO,0CAAqB,GAA7B;;YACE,KAAqB,IAAA,KAAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA;gBAA5B,IAAM,MAAM,WAAA;gBACf,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACnC,OAAO,MAAM,CAAC;iBACf;aACF;;;;;;;;;QACD,OAAO,IAAI,CAAC;;KACb;IACH,iBAAC;CAAA,IAAA;;;IC5MD;QAkDY,UAAK,GAAG,IAAI,YAAY,EAAW,CAAC;QACpC,kBAAa,GAAG,IAAI,YAAY,EAAU,CAAC;QAC3C,sBAAiB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAC7C,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAC/C,wBAAmB,GAAG,IAAI,YAAY,EAAO,CAAC;QAKxD,kBAAa,GAAG,MAAM,CAAC;QACvB,sBAAiB,GAAG,QAAQ,CAAC;KAgH9B;;;IA1GC,0CAAQ,GAAR;QACE,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,6CAAW,GAAX,UAAY,OAAY;QACtB,IAAI,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;YACxC,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;IAED,iDAAe,GAAf;QACE,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;YACxC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACxC;KACF;;IAID,qDAAmB,GAAnB,UAAoB,KAAU;QAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;IAED,qDAAmB,GAAnB,UAAoB,KAAU;QAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjD;IAED,uDAAqB,GAArB,UAAsB,KAAU;QAC9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;;IAID,gDAAc,GAAd,UAAe,KAAU;QACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAChC;IAED,mDAAiB,GAAjB,UAAkB,MAAc;QAC9B,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACzC;IAED,+CAAa,GAAb,UAAc,MAAc;QAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjC;;IAIO,8CAAY,GAApB;QACE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;KAC7B;;IAID,gDAAc,GAAd,UAAe,MAAc;QAC3B,IAAI,MAAM,CAAC,WAAW,EAAE;YACtB,OAAO;gBACL,kBAAkB,EAAE,IAAI,CAAC,cAAc;gBACvC,KAAK,EAAE,IAAI,CAAC,kBAAkB;aAC/B,CAAC;SACH;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;IAED,kDAAgB,GAAhB;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3C;KACF;IAED,yDAAuB,GAAvB;QACE,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAC5C,IAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QAErC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAExD,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;YAClB,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClD,IAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YAErC,IAAM,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;YACvC,IAAM,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;YAExC,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAM,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;YAExC,IAAI,UAAU,GAAG,UAAU,EAAE;gBAC3B,IAAI,CAAC,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;aAC1C;iBAAM,IAAI,OAAO,GAAG,OAAO,EAAE;gBAC5B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;aAC1B;SACF;KACF;IAEO,oDAAkB,GAA1B,UAA2B,CAAM;QAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAC3C,IAAM,KAAK,GAAG,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC;QAClC,IAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,YAAY,CAAC;QAEvE,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,CAAC,CAAC,cAAc,EAAE,CAAC;SACpB;aAAM,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,CAAC,CAAC,cAAc,EAAE,CAAC;SACpB;KACF;;gBA3KF,SAAS,SAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,k9BAgCX;oBACC,MAAM,EAAE,CAACD,OAAK,CAAC;oBACf,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC;;;gCAGE,KAAK;iCACL,KAAK;qCACL,KAAK;uBACL,KAAK;2BACL,KAAK;8BACL,KAAK;6BACL,KAAK;sBACL,KAAK;wBACL,KAAK;wBAEL,MAAM;gCACN,MAAM;oCACN,MAAM;oCACN,MAAM;sCACN,MAAM;8BAEN,SAAS,SAAC,aAAa;8BACvB,SAAS,SAAC,aAAa;;IAmH1B,8BAAC;CAAA;;ICzKY,qBAAqB,GAAqB;IACrD,OAAO,EAAE,iBAAiB;;IAE1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,eAAe,GAAA,CAAC;IAC9C,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF;IAAA;;QAiFU,SAAI,GAAQ;YAClB,SAAS,EAAE,CAAC;YACZ,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,EAAE;SACT,CAAC;QAIO,eAAU,GAAG,KAAK,CAAC;QACnB,aAAQ,GAAG,KAAK,CAAC;QACjB,mBAAc,GAAG,SAAS,CAAC;QAC3B,uBAAkB,GAAG,MAAM,CAAC;QAC5B,aAAQ,GAAG,KAAK,CAAC;QACjB,aAAQ,GAAG,CAAC,CAAC;QACb,gBAAW,GAAG,kBAAkB,CAAC;QACjC,gBAAW,GAAG,EAAE,CAAC;QAEhB,WAAM,GAAuB,IAAI,YAAY,EAAQ,CAAC;QACtD,WAAM,GAAuB,IAAI,YAAY,EAAQ,CAAC;QACtD,aAAQ,GAAsB,IAAI,YAAY,EAAO,CAAC;QACtD,eAAU,GAAsB,IAAI,YAAY,EAAO,CAAC;QACxD,UAAK,GAAsB,IAAI,YAAY,EAAO,CAAC;QAMrD,WAAM,GAAe,EAAE,CAAC;;QAIhC,gBAAW,GAAG,KAAK,CAAC;;QAGpB,kBAAa,GAAG,IAAI,CAAC;QACrB,qBAAgB,GAAG,CAAC,CAAC;QACrB,aAAQ,GAAG,KAAK,CAAC;QACjB,YAAO,GAAG,IAAI,CAAC;QACf,eAAU,GAAG,KAAK,CAAC;QACnB,WAAM,GAAG,KAAK,CAAC;QACf,oBAAe,GAAG,EAAE,CAAC;QAErB,iBAAY,GAAG,KAAK,CAAC;QACrB,2BAAsB,GAAG,KAAK,CAAC;QAOvB,aAAQ,GAAG,UAAC,CAAM,KAAO,CAAC;QAC1B,cAAS,GAAG,eAAQ,CAAC;KAkb9B;;;IA5aC,kCAAQ,GAAR;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC;KACzC;IAED,yCAAe,GAAf;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,qCAAW,GAAX,UAAY,OAAY;QACtB,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;SAC5D;QACD,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACtC,IAAM,UAAU,GAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1D,IAAM,aAAa,GAAW,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;YAC/D,IAAI,CAAC,aAAa,GAAG,UAAU,IAAI,aAAa,CAAC;SAClD;KACF;;IAID,uCAAa,GAAb;QACE,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;KACrC;IAED,wCAAc,GAAd;QACE,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;IAID,gDAAsB,GAAtB,UAAuB,KAAU;QAC/B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;KACF;IAED,gDAAsB,GAAtB;QACE,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,kDAAwB,GAAxB,UAAyB,KAAU;QACjC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;KAC1C;;IAID,iDAAuB,GAAvB,UAAwB,MAAc;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC7E;IAED,yCAAe,GAAf,UAAgB,KAAU;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC3B;;IAID,6CAAmB,GAAnB;QACE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;KACpC;IAED,6CAAmB,GAAnB,UAAoB,IAAY;QAAhC,iBAOC;QANC,UAAU,CAAC;YACT,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;SACF,EAAE,GAAG,CAAC,CAAC;QACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,+CAAqB,GAArB,UAAsB,KAAU;QAC9B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;KACvC;;IAID,+CAAqB,GAArB,UAAsB,KAAU;QAAhC,iBAQC;QAPC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,UAAU,CAAC;YACT,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC5C,CAAC,CAAC;KACJ;IAED,iDAAuB,GAAvB,UAAwB,KAAU;QAChC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;KACzC;;IAID,+CAAqB,GAArB,UAAsB,KAAU;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1B;;IAID,+CAAqB,GAArB,UAAsB,MAAc;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KAC7B;;;IAKD,8BAAI,GAAJ;QACE,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,+BAAK,GAAL;QACE,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,+BAAK,GAAL;QACE,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,gCAAM,GAAN,UAAO,KAAa;QAApB,iBAKC;QAJC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM;YACtD,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;;IAID,oCAAU,GAAV,UAAW,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,0CAAgB,GAAhB,UAAiB,EAAoB;QACnC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,2CAAiB,GAAjB,UAAkB,EAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAED,0CAAgB,GAAhB,UAAiB,UAAmB;QAClC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAID,sBAAI,kCAAK;;aAAT;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACrD;SACF;aAED,UAAU,CAAM;YACd,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBACtD,CAAC,GAAG,EAAE,CAAC;aACR;iBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBAChC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACT;iBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC5B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;aAC5D;YAED,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;SACF;;;OAfA;IAiBO,sCAAY,GAApB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAEpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAChE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;;IAIO,2CAAiB,GAAzB,UAA0B,SAAkB;QAC1C,IAAI,CAAgB,CAAC;QAErB,IAAI,CAAC,SAAS,EAAE;YACd,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;SAC3B;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;;IAIO,wCAAc,GAAtB;QACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9D;KACF;IAEO,sCAAY,GAApB;QACE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;gBACvC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;aACxC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;KACF;;IAEO,uCAAa,GAArB,UAAsB,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QAC1C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;KACF;;;IAIO,sCAAY,GAApB,UAAqB,MAAc;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;;;;;;;SAO9C;KACF;IAEO,wCAAc,GAAtB,UAAuB,MAAc;QAArC,iBAgBC;QAfC,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;YAC/C,UAAU,CAAC;gBACT,IAAI,KAAI,CAAC,QAAQ,EAAE;;oBAEjB,KAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,KAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;oBAC5B,IAAI,KAAI,CAAC,MAAM,EAAE;wBACf,KAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;qBACzC;iBACF;aACF,CAAC,CAAC;SACJ;KACF;IAEO,wCAAc,GAAtB;QACE,IAAM,SAAS,GAAkB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;aACtD;iBAAM;gBACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC,GAAG,CAAC,UAAC,MAAM;oBACnB,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC;iBACjC,CAAC,CACH,CAAC;aACH;SACF;KACF;IAEO,4CAAkB,GAA1B,UAA2B,MAAc;QACvC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC3E;IAEO,iDAAuB,GAA/B;QACE,IAAM,MAAM,GAAW,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACzD,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC1B;KACF;IAEO,sCAAY,GAApB;QACE,IAAM,GAAG,GAAkB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAErD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,IAAM,MAAM,GAAW,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;SACjD;KACF;;IAIO,0CAAgB,GAAxB;QACE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;SAClC;KACF;IAEO,gDAAsB,GAA9B,UAA+B,KAAa;QAC1C,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;SAC9C;KACF;IAEO,sDAA4B,GAApC,UAAqC,KAAU;QAA/C,iBAwCC;QAvCC,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;gBACnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC1B;iBAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;iBAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAClC,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAChC;iBAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC;gBAC1C,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,KAAK,CAAC,cAAc,EAAE,CAAC;iBACxB;aACF;iBAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,KAAK,CAAC,cAAc,EAAE,CAAC;iBACxB;aACF;SACF;aAAM;YACL,IACE,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;gBACvB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;iBACtB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CACzC,EAAE;;;;;;;gBAOA,UAAU,CAAC;oBACT,KAAI,CAAC,YAAY,EAAE,CAAC;iBACrB,CAAC,CAAC;aACJ;SACF;KACF;IAEO,qDAA2B,GAAnC,UAAoC,KAAU;QAC5C,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC/B,IACE,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,KAAK,EAC3C,EAAE;gBACA,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;SACF;KACF;IAEO,mDAAyB,GAAjC,UAAkC,KAAU;QAC1C,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IACE,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;YACrB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;YACpB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI;YACtB,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KACpB,EAAE;YACA,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;SAC1C;KACF;;IAID,+BAAK,GAAL;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACxC;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC1C;KACF;IAED,8BAAI,GAAJ;QACE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KACzC;IAED,qCAAW,GAAX;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC;KAC3D;IAED,wCAAc,GAAd;QACE,IAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC;KACzC;IAED,2CAAiB,GAAjB;QACE,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;YAC3C,IAAM,KAAK,GAAW,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;YAC3D,IAAI,CAAC,gBAAgB;gBACnB,KAAK,CAAC,MAAM,KAAK,CAAC;sBACd,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE;sBACpC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;SAC7B;KACF;;gBAzjBF,SAAS,SAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,8kEAsEX;oBACC,MAAM,EAAE,CAAC,KAAK,CAAC;oBACf,SAAS,EAAE,CAAC,qBAAqB,CAAC;oBAClC,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC;;;0BAeE,KAAK;6BAEL,KAAK;2BACL,KAAK;iCACL,KAAK;qCACL,KAAK;2BACL,KAAK;2BACL,KAAK;8BACL,KAAK;8BACL,KAAK;yBAEL,MAAM;yBACN,MAAM;2BACN,MAAM;6BACN,MAAM;wBACN,MAAM;gCAEN,SAAS,SAAC,WAAW;2BACrB,SAAS,SAAC,UAAU;8BACpB,SAAS,SAAC,aAAa;;IA4c1B,sBAAC;CAAA;;;IC7kBD;KAK4B;;gBAL3B,QAAQ,SAAC;oBACR,YAAY,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;oBACxD,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;iBACrC;;IAC0B,mBAAC;CAAA;;ACE5B;;;AAIA;IAeE,oBACU,IAAuB,EACvB,SAAuB;QADvB,SAAI,GAAJ,IAAI,CAAmB;QACvB,cAAS,GAAT,SAAS,CAAc;QAZzB,iBAAY,GAAQ,IAAI,CAAC;QACzB,yBAAoB,GAAQ,IAAI,CAAC;QACjC,kBAAa,GAAiB,IAAI,CAAC;QACnC,SAAI,GAAoB,IAAI,CAAC;QAG7B,YAAO,GAAyB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,WAAM,GAAoB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACtD,0BAAqB,GAAiB,IAAI,CAAC;KAK/C;IAEJ,gCAAW,GAAX;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,8BAAS,GAAT,UAAU,GAAW,EAAE,OAAO;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACjC;IAEO,sCAAiB,GAAzB,UAA0B,GAAW;QAArC,iBAcC;QAbC,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,GAAG,EAAE;YAC5B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC;gBACzD,IAAM,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;gBAC3D,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC9B,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAEO,mCAAc,GAAtB,UAAuB,GAAoB;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACtB;YACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;QACD,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,oBAAoB,EAAE;YACnD,OAAO,IAAI,CAAC,oBAAoB,CAAC;SAClC;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC7C;IAEO,+BAAU,GAAlB,UAAmB,GAAoB;QACrC,IAAM,KAAK,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC;YACjC,IAAI,EAAE,UAAU,KAAK;gBACnB,OAAO,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC7C;YACD,KAAK,EAAE,UAAC,CAAM;gBACZ,MAAM,CAAC,CAAC;aACT;SACF,CAAC,CAAC;KACJ;IAEO,6BAAQ,GAAhB;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;SAC1C;QAED,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAEO,uCAAkB,GAA1B,UAA2B,KAAU,EAAE,KAAa;QAClD,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;YACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;SAC1B;KACF;;gBArGF,IAAI,SAAC;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,KAAK;iBACZ;;;gBAhBC,iBAAiB;gBAQV,YAAY;;IA2GrB,iBAAC;CAAA;;;ICpHD;KAM4B;;gBAN3B,QAAQ,SAAC;oBACR,YAAY,EAAE,CAAC,UAAU,CAAC;oBAC1B,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,SAAS,EAAE,CAAC,WAAW,CAAC;iBACzB;;IAC0B,mBAAC;CAAA;;;ICqD1B,6BAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;QAdvC,cAAS,GAAG,KAAK,CAAC;QAClB,aAAQ,GAAG,IAAI,CAAC;QAChB,gBAAW,GAAG,KAAK,CAAC;QACpB,kBAAa,GAAG,IAAI,CAAC;;;;QAkEb,oBAAe,GAAG,UAAC,CAAM,KAAO,CAAC;KAvDE;IAR3C,sBACW,2CAAU;aADrB;YAEE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;aACD,UAAsB,CAAa;YACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;;;OAHA;IAOD,sCAAQ,GAAR;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;KACF;IACM,0CAAY,GAAnB,UAAoB,QAAQ;;YAC1B,KAAmB,IAAA,aAAAC,SAAA,QAAQ,CAAA,kCAAA;gBAAtB,IAAM,IAAI,qBAAA;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACnB;;;;;;;;;;KACF;IACD,oCAAM,GAAN,UAAO,IAAI;QAAX,iBAeC;QAdC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CACxC,UAAC,MAAM;gBACL,KAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC7B,KAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,KAAI,CAAC,eAAe,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB,EACD,UAAC,KAAK;gBACJ,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB,CACF,CAAC;SACH;KACF;;IAGM,wCAAU,GAAjB,UAAkB,KAAU;QAC1B,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;KACF;;;IAGM,8CAAgB,GAAvB,UAAwB,EAAO;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;;IAGM,+CAAiB,GAAxB,eAA6B;;IAE7B,sCAAQ,GAAR,UAAS,KAAK;QACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;;;KAIhC;IAOM,wCAAU,GAAjB;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrC;IAEM,uCAAS,GAAhB,UAAiB,QAAgB;QAAjC,iBAKC;QAJC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,UAAC,IAAI;YACxD,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,KAAI,CAAC,MAAM,GAAG,IAAI,CAAC,qCAAqC,CAAC;SAC1D,CAAC,CAAC;KACJ;IACM,2CAAa,GAApB;QACE,IAAM,EAAE,GAAG,OAAO,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/B;KACF;;gBA9HF,SAAS,SAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,+XAgBX;oBACC,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,mBAAmB,GAAA,CAAC;4BAClD,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,MAAM,EAAE;wBACN,gHAMC;qBACF;iBACF;;;gBA1CC,SAAS;;;6BAkDR,KAAK;;IAoFR,0BAAC;CAAA;;;IC/HD;KAasC;;gBAbrC,QAAQ,SAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,qBAAqB;qBACtB;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,SAAS,EAAE,EAAE;iBACd;;IACoC,6BAAC;CAAA;;ACzBtC;;;AAIA,AAGA,IAAMC,QAAM,GAAG,OAAO,CAAC;AACvB,AAKA;;;AAIA;IAmHE;QAnBgB,WAAM,GAAG,IAAI,CAAC;QACd,eAAU,GAAG,IAAI,CAAC;QAClB,iBAAY,GAAG,IAAI,CAAC;QACnB,uBAAkB,GAAG,IAAI,YAAY,EAAW,CAAC;QACjD,iBAAY,GAAG,IAAI,YAAY,EAAO,CAAC;QAOjD,oBAAe,GAAG,KAAK,CAAC;QACxB,mBAAc,GAAG,KAAK,CAAC;QACvB,sBAAiB,GAAG,CAAC,CAAC;QAGtB,gBAAW,GAAkBA,QAAM,CAAC,WAAW,EAAE,CAAC;KAGzC;IAET,sCAAQ,GAAf;QAAA,iBAWC;QAVC,IAAI,CAAC,SAAS,EAAE,CAAC;;QAEjBJ,IAAM,CAAC,IAAI,CAAC,aAAa,EAAE,UAAC,CAAC,EAAE,CAAC;YAC9B,KAAI,CAAC,WAAW,GAAG,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;gBACtC,KAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;aAC5B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,kCAAI,GAAX;QACE,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;aAC5B;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACpE;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAChE;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,gDAAkB,GAAzB;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;IAEM,+CAAiB,GAAxB;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;IAEM,kCAAI,GAAX;QACE,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;aACxD;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;SACtE;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3D;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,uCAAS,GAAhB,UAAiB,GAAW;QAC1B,IAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EACzC,MAAM,CACP,CAAC;QACF,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACzD,IAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAEM,yCAAW,GAAlB,UAAmB,KAAa;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,wCAAU,GAAjB,UAAkB,IAAY;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEM,yCAAW,GAAlB;QACE,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAACI,QAAM,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAEM,2CAAa,GAApB;QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAEM,8CAAgB,GAAvB;QACE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO;KACR;IAES,2CAAa,GAAvB;QACE,IAAM,WAAW,GAAGA,QAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;;QAEpE,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,IAAI,EAAE,EAAE;YACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;QAED,IAAI,CAAC,aAAa,GAAGC,KAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KACzC;IAES,uCAAS,GAAnB;;QAEED,QAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAE3B,IAAI,CAAC,KAAK,GAAGA,QAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAACA,QAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAGA,QAAM,EAAE,CAAC,IAAI,EAAE,CAAC;;QAGnC,IAAI,CAAC,QAAQ,GAAGA,QAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;QAG3C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,YAAY;gBACf,IAAI,CAAC,YAAY,KAAK,QAAQ;sBAC1BA,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;sBACtCA,QAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC/D;aAAM;YACL,IAAI,CAAC,YAAY,GAAGA,QAAM,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAES,8CAAgB,GAA1B;QACE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAM,KAAK,GACT,CAAC;aACA,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;iBAC/C,CAAC,GAAGA,QAAM,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,CAAC;gBAC1C,CAAC,CAAC,CAAC;QACP,IAAM,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;QAEvB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACpC,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;IAES,qDAAuB,GAAjC,UAAkC,GAAW;QAC3C,QAAQ,IAAI,CAAC,YAAY;YACvB,KAAK,IAAI;gBACP,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;YAEtB,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAErC,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YAEb,KAAK,MAAM;gBACT,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;YAEtB,KAAK,OAAO;gBACV,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;YAEvB,KAAK,KAAK;gBACR,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YAE3B,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;YAExB;gBACE,OAAO,GAAG,CAAC;SACd;KACF;;gBA7RF,SAAS,SAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,w6FAuFX;oBACC,MAAM,EAAE,CAAC,s1FAAs1F,CAAC;iBACj2F;;;;2BAIE,KAAK;yBACL,KAAK;6BACL,KAAK;+BACL,KAAK;qCACL,MAAM;+BACN,MAAM;;IA0LT,0BAAC;CAAA;;AC/SD;;;AAIA,AAGA,IAAMA,QAAM,GAAG,OAAO,CAAC;;;;AASvB;IA6DE;QATS,eAAU,GAAG,IAAI,CAAC;QAClB,eAAU,GAAG,SAAS,CAAC;QACvB,cAAS,GAAG,KAAK,CAAC;QAClB,iBAAY,GAAG,IAAI,CAAC;QACnB,iBAAY,GAAG,IAAI,YAAY,EAAO,CAAC;QACvC,uBAAkB,GAAG,IAAI,YAAY,EAAW,CAAC;QAC3D,eAAU,GAAG,IAAI,CAAC;KAGF;IAEhB,sCAAQ,GAAR;QACE,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;cACrBA,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;cACtCA,QAAM,EAAE,CAAC;;QAGb,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI;gBACP,IAAI,CAAC,YAAY,KAAK,QAAQ;sBAC1BA,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;sBACtCA,QAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,GAAGA,QAAM,EAAE,CAAC;SACtB;KACF;IAED,0CAAY,GAAZ;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAC3C;IAED,0CAAY,GAAZ;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAChD;IAED,4CAAc,GAAd;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAC3C;IAED,4CAAc,GAAd;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAChD;IAED,4CAAc,GAAd;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAC3C;IAED,4CAAc,GAAd;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KAChD;IAED,wCAAU,GAAV;QACE,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAED,uCAAS,GAAT;QACE,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAACA,QAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAED,uCAAS,GAAT;QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;KACR;IAED,8CAAgB,GAAhB;QACE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO;KACR;IAES,qDAAuB,GAAjC,UAAkC,IAAY;QAC5C,QAAQ,IAAI,CAAC,YAAY;YACvB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAEvB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC;YAEd,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAEvB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YAExB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAE5B,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEzB;gBACE,OAAO,IAAI,CAAC;SACf;KACF;;gBA7JF,SAAS,SAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,28DA6CX;oBACC,MAAM,EAAE,CAAC,utEAAutE,CAAC;iBACluE;;;;2BAEE,KAAK;6BACL,KAAK;6BACL,KAAK;4BACL,KAAK;+BACL,KAAK;+BACL,MAAM;qCACN,MAAM;;IAqGT,0BAAC;CAAA;;AC9KD;;;AAIA,AAUA;;;AAIA;IAgBE;QAFU,mBAAc,GAAG,IAAI,YAAY,EAAW,CAAC;KAEvC;IAEhB,iCAAQ,GAAR,eAAa;IAEb,mCAAU,GAAV;QACE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;;gBAtBF,SAAS,SAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,QAAQ,EAAE,4NAMX;oBACC,MAAM,EAAE,CAAC,mTAAmT,CAAC;oBAC7T,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,UAAU,EAAE,EAAE;iBACf;;;;iCAEE,MAAM;;IAST,qBAAC;CAAA;;ACzCD;;;AAIA;IAGA;KAKC;IAHC,8BAAS,GAAT,UAAU,MAAc,EAAE,MAAe;QACvC,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACvE;;gBAJF,IAAI,SAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;;IAKxB,iBAAC;CAAA;;ACDD,IAAM,MAAM,GAAG,OAAO,CAAC;AAEvB;IA8HE;QAVS,aAAQ,GAAG,IAAI,CAAC;QAChB,aAAQ,GAAG,KAAK,CAAC;QACjB,cAAS,GAAG,KAAK,CAAC;QAClB,UAAK,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,iBAAY,GAAG,IAAI,YAAY,EAAO,CAAC;QAC1C,mBAAc,GAAG,KAAK,CAAC;QACvB,mBAAc,GAAG,KAAK,CAAC;QAC9B,aAAQ,GAAQ,eAAQ,CAAC;QACzB,cAAS,GAAQ,eAAQ,CAAC;KAEV;IAEhB,0CAAQ,GAAR,eAAa;IAEb,+CAAa,GAAb,UAAc,KAAK;QACjB,IAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC;IACD,yCAAO,GAAP,UAAQ,IAAS;QACf,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;KACF;IAED,yCAAO,GAAP,UAAQ,IAAS;QACf,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;QACD,OAAO;KACR;IAED,kDAAgB,GAAhB,UAAiB,MAAe;QAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;;;;;;;;;;;QAW7B,OAAO;KACR;IAED,kDAAgB,GAAhB,UAAiB,MAAe;QAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,OAAO;KACR;IACD,sBAAI,0CAAK;aAAT;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;aAED,UAAU,GAAG;YACX,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;;;OAPA;IASD,kDAAgB,GAAhB,UAAiB,EAAE;QACjB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,mDAAiB,GAAjB,UAAkB,EAAE;QAClB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAED,4CAAU,GAAV,UAAW,KAAK;QACd,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;SACrC;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;KACF;;gBApMF,SAAS,SAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,m7FAsGX;oBACC,MAAM,EAAE,CAAC,wGAAwG,CAAC;oBAClH,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,uBAAuB,GAAA,CAAC;4BACtD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;;6BAEE,KAAK;2BACL,KAAK;2BACL,KAAK;4BACL,KAAK;wBACL,KAAK;+BACL,MAAM;;IA6ET,8BAAC;CAAA;;AClND;;;AAIA;IASA;KAkBoC;;gBAlBnC,QAAQ,SAAC;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;oBACpC,YAAY,EAAE;wBACZ,mBAAmB;wBACnB,mBAAmB;wBACnB,cAAc;wBACd,UAAU;wBACV,uBAAuB;qBACxB;oBACD,OAAO,EAAE;wBACP,mBAAmB;wBACnB,mBAAmB;wBACnB,cAAc;wBACd,UAAU;wBACV,uBAAuB;qBACxB;oBACD,SAAS,EAAE,EAAE;iBACd;;IACkC,2BAAC;CAAA;;ACbpC,IAAMA,QAAM,GAAG,OAAO,CAAC;AAEvB,IAAa,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,SAAS,EAAE,IAAI;KAChB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,UAAU;QAC1B,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,WAAW;KAChC;CACF,CAAC;AAEF;IAAA;;QAsES,iBAAY,GAAGA,QAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QACjC,iBAAY,GAAGA,QAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QACjC,gBAAW,GAAG,KAAK,CAAC;QAEpB,mBAAc,GAAG,KAAK,CAAC;QACrB,UAAK,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9C,aAAQ,GAAG,KAAK,CAAC;QACjB,cAAS,GAAG,IAAI,CAAC;QAChB,iBAAY,GAAG,IAAI,YAAY,EAAO,CAAC;QAC1C,aAAQ,GAAQ,eAAQ,CAAC;QACzB,cAAS,GAAQ,eAAQ,CAAC;KAoGlC;IAnGQ,6CAAQ,GAAf,eAAoB;IAEb,+CAAU,GAAjB,UAAkB,KAAK;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAEM,qDAAgB,GAAvB,UAAwB,EAAE;QACxB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAEM,sDAAiB,GAAxB,UAAyB,EAAE,KAAI;IAExB,iDAAY,GAAnB,UAAoB,MAAM;QACxB,IAAM,OAAO,GAAGA,QAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAM,OAAO,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACpC;IAEM,iDAAY,GAAnB,UAAoB,MAAM;QACxB,IAAM,OAAO,GAAGA,QAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtD,IAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;KACzB;IAEM,qDAAgB,GAAvB,UAAwB,MAAe;QACrC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,OAAO;KACR;IAEM,mDAAc,GAArB;QACE,IAAM,OAAO,GAAGA,QAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAM,WAAW,GAAGA,QAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACxC;IAEM,+CAAU,GAAjB,UAAkB,MAAM;QACtB,IAAM,SAAS,GAAGA,QAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QACpC,IAAM,YAAY,GAAGA,QAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClE,IAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;KAC9C;IAEM,oDAAe,GAAtB,UAAuB,MAAM;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KACtC;IAEM,0DAAqB,GAA5B;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,qBAAqB,CAAC;SAC9B;QACD,OAAO,qBAAqB,CAAC;KAC9B;IAEM,0DAAqB,GAA5B;QACE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO,qBAAqB,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAC3B,OAAO,qBAAqB,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC1B,OAAO,qBAAqB,CAAC;SAC9B;QACD,OAAO,sBAAsB,CAAC;KAC/B;IAEM,0DAAqB,GAA5B;QACE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO,qBAAqB,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAC3B,OAAO,qBAAqB,CAAC;SAC9B;QACD,OAAO,qBAAqB,CAAC;KAC9B;IAEM,gDAAW,GAAlB,UAAmB,OAAO,EAAE,OAAO;QACjC,IAAM,OAAO,GAAGA,QAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,GAAGA,QAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC9C;aAAM;YACL,OAAO,GAAG,UAAU,CAAC;SACtB;QACD,IAAM,WAAW,GAAGA,QAAM,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAC1E,IAAM,cAAc,GAAGA,QAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,OAAO,cAAc,CAAC;KACvB;;gBApLF,SAAS,SAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,QAAQ,EAAE,mlDAqDX;oBACC,MAAM,EAAE,CAAC,iKAAiK,CAAC;oBAC3K,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;wBACnD,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE;wBACrD;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,0BAA0B,GAAA,CAAC;4BACzD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;wBASE,KAAK;6BACL,KAAK;2BACL,KAAK;4BACL,KAAK;+BACL,MAAM;;IAsGT,iCAAC;CAAA;;ACrND;;;AAIA;IAWA;KAuBuC;;gBAvBtC,QAAQ,SAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;wBACd,oBAAoB;;wBAEpB,eAAe;qBAChB;oBACD,YAAY,EAAE,CAAC,0BAA0B,CAAC;oBAC1C,OAAO,EAAE;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;wBACd,0BAA0B;qBAC3B;oBACD,SAAS,EAAE,EAAE;iBACd;;IACqC,8BAAC;CAAA;;;IClCrC,gBAAY,OAAqB;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;KAC5B;IACH,aAAC;CAAA;;;ICDD;QAwBE,qBAAgB,GAAQ,EAAE,CAAC;QAE3B,WAAM,GAAQ,EAAE,CAAC;QACjB,oBAAe,GAAG,UAAC,CAAM,KAAO,CAAC;KA0ElC;IAxEC,8CAAe,GAAf,UAAgB,KAAK;QAArB,iBAKC;;QAHC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAC,OAAO;YACpC,KAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;SACjC,CAAC,CAAC;KACJ;IAED,yCAAU,GAAV,UAAW,GAAQ,KAAU;IAC7B,+CAAgB,GAAhB,UAAiB,EAAO;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,gDAAiB,GAAjB,UAAkB,EAAO,KAAU;IAEnC,0CAAW,GAAX,UAAY,OAAY,KAAI;IAE5B,uCAAQ,GAAR;QAAA,iBAUC;QATC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAC7D,UAAC,MAAM;oBACL,KAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC;iBACxC,CACF,CAAC;aACH;SACF;KACF;IAED,sCAAO,GAAP,UAAQ,UAAkB;QAA1B,iBAqBC;QApBC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAW,EAAE,CAAC,CAAC;QAEjD,IAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEpE,iBAAiB,CAAC,SAAS,CACzB,UAAC,OAAO;;YAEN,IAAM,aAAa,GAAa,IAAI,KAAK,EAAU,CAAC;YAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,aAAa,CAAC,IAAI,CAAC,IAAIE,QAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;YACD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAClC,EACD,UAAC,KAAK;YACJ,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC3B,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;IAED,4CAAa,GAAb,UAAc,KAAK,KAAI;IACvB,oDAAqB,GAArB,UAAsB,KAAU;QAAhC,iBAeC;QAdC,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,CAAC;QACvD,IAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAErE,gBAAgB,CAAC,SAAS,CACxB,UAAC,MAAM;;YAEL,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjC,EACD,UAAC,KAAK;YACJ,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACjC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;KAC1C;IAED,2CAAY,GAAZ;QACE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,EAAU,CAAC,CAAC;KACxC;;gBApGF,SAAS,SAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,qMAMI;oBACd,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,oBAAoB,GAAA,CAAC;4BACnD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;6BAKE,KAAK;2BACL,KAAK;yBACL,KAAK;;IA8ER,2BAAC;CAAA;;;ICvGC;KAAgB;IAET,8CAAiB,GAAxB,UACE,UAAkB,EAClB,oBAAgC;;QAGhC,IAAM,QAAQ,GAAW,IAAI,CAAC,kBAAkB,CAC9C,UAAU,EACV,oBAAoB,CACrB,CAAC;QACF,IAAIC,OAAS,CAAC,QAAQ,CAAC,EAAE;YACvB,OAAO,UAAU,CAAC;SACnB;;QAGD,IAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAIA,OAAS,CAAC,YAAY,CAAC,EAAE;YAC3B,OAAO,UAAU,CAAC;SACnB;;QAGD,IAAI,CAAC,uCAAuC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC;KACnB;IAEO,6CAAgB,GAAxB,UACE,WAAuB,EACvB,YAAoB;QAEpB,IAAIA,OAAS,CAAC,WAAW,CAAC,IAAIA,OAAS,CAAC,YAAY,CAAC,EAAE;YACrD,OAAO;SACR;QACD,IAAI,WAAW,GAAQ,EAAE,CAAC;QAC1BP,IAAM,CAAC,WAAW,EAAE,UAAC,MAAW;YAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;gBAChC,WAAW,GAAG,MAAM,CAAC;aACtB;SACF,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;KACpB;IAEO,mDAAsB,GAA9B,UAA+B,MAAW,EAAE,SAAiB;QAC3D,IAAIO,OAAS,CAAC,MAAM,CAAC,IAAIA,OAAS,CAAC,SAAS,CAAC,EAAE;YAC7C,OAAO;SACR;QACD,IAAI,SAAS,GAAW,EAAE,CAAC;QAC3BP,IAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAC,IAAI;YACxB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,SAAS,GAAG,IAAI,CAAC;aAClB;SACF,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;KAClB;IAEO,wEAA2C,GAAnD,UACE,MAAc,EACd,SAAiB,EACjB,YAAoB;QAEpB,IAAIO,OAAS,CAAC,MAAM,CAAC,IAAIA,OAAS,CAAC,SAAS,CAAC,IAAIA,OAAS,CAAC,YAAY,CAAC,EAAE;YACxE,OAAO;SACR;QACD,IAAM,SAAS,GAAQ,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtE,IAAIA,OAAS,CAAC,SAAS,CAAC,EAAE;YACxB,OAAO;SACR;QACD,IAAI,YAAY,GAAW,EAAE,CAAC;QAC9BP,IAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAC,OAAO;YACjC,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,EAAE;gBAClC,YAAY,GAAG,OAAO,CAAC;aACxB;SACF,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;KACrB;IAEO,oDAAuB,GAA/B,UAAgC,MAAW,EAAE,UAAkB;QAC7D,IAAIO,OAAS,CAAC,MAAM,CAAC,IAAIA,OAAS,CAAC,UAAU,CAAC,EAAE;YAC9C,OAAO;SACR;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,QAAQ,SAAY,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,CAACA,OAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBACzB,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;iBAChE;gBACD,IAAI,CAACA,OAAS,CAAC,QAAQ,CAAC,EAAE;oBACxB,MAAM;iBACP;aACF;YACD,OAAO,QAAQ,CAAC;SACjB;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACrC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;gBACnD,OAAO,MAAM,CAAC;aACf;iBAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE;gBACnD,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;gBACrE,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;aAC3D;iBAAM;gBACL,OAAO;aACR;SACF;aAAM;YACL,OAAO;SACR;KACF;IAEO,kEAAqC,GAA7C,UACE,MAAW,EACX,UAAkB;QAElB,IAAIA,OAAS,CAAC,MAAM,CAAC,IAAIA,OAAS,CAAC,UAAU,CAAC,EAAE;YAC9C,OAAO;SACR;QACD,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;KACvE;IAEO,0DAA6B,GAArC,UACE,MAAW,EACX,MAAW,EACX,UAAkB;QAElB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,aAAa,SAAY,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,CAACA,OAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBACzB,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAChD,MAAM,EACN,MAAM,CAAC,CAAC,CAAC,EACT,UAAU,CACX,CAAC;iBACH;gBACD,IAAI,CAACA,OAAS,CAAC,aAAa,CAAC,EAAE;oBAC7B,MAAM;iBACP;aACF;YAED,OAAO,aAAa,CAAC;SACtB;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACrC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;gBACnD,OAAO,MAAM,CAAC;aACf;iBAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE;gBACnD,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;gBACrE,OAAO,IAAI,CAAC,6BAA6B,CACvC,QAAQ,EACR,QAAQ,EACR,UAAU,CACX,CAAC;aACH;iBAAM;gBACL,OAAO;aACR;SACF;aAAM;YACL,OAAO;SACR;KACF;;IAGO,wDAA2B,GAAnC,UAAoC,MAAc;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IACEC,QAAU,CAAC,UAAU,EAAE,OAAO,CAAC;gBAC/BA,QAAU,CAAC,UAAU,EAAE,UAAU,CAAC;gBAClCA,QAAU,CAAC,UAAU,EAAE,WAAW,CACpC,EAAE;gBACA,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAEO,mDAAsB,GAA9B,UAA+B,MAAc,EAAE,EAAO;QACpD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAC5B;IAEO,qDAAwB,GAAhC,UAAiC,MAAc;QAC7C,IAAM,iBAAiB,GAAe,EAAE,CAAC;QACzC,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC1D,OAAO,iBAAiB,CAAC;KAC1B;IAEO,sDAAyB,GAAjC,UACE,SAAc,EACd,YAA2B;QAE3B,IAAID,OAAS,CAAC,SAAS,CAAC,EAAE;YACxB,OAAO;SACR;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAACA,OAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC5B,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;iBAC5D;aACF;SACF;aAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACxC,IAAI,CAACA,OAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;gBACnC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC9B;iBAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,EAAE;gBACtD,IAAM,QAAQ,GACZ,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC;gBAC/D,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;aACxD;SACF;KACF;IAEO,kDAAqB,GAA7B,UACE,iBAAyB,EACzB,eAAuB;QAEvB,KAAK,IAAM,MAAM,IAAI,eAAe,EAAE;YACpC,IAAIA,OAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE;gBACxC,iBAAiB,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;aACrD;SACF;QACD,OAAO,iBAAiB,CAAC;KAC1B;IAEO,oEAAuC,GAA/C,UACE,qBAA6B,EAC7B,iBAA6B;QAF/B,iBAsBC;QAlBCP,IAAM,CAAC,iBAAiB,EAAE,UAAC,WAAW;YACpC,IAAM,gBAAgB,GAAW,KAAI,CAAC,mBAAmB,CACvD,WAAW,CAAC,SAAS,EACrB,qBAAqB,CACtB,CAAC;YAEF,IAAIO,OAAS,CAAC,gBAAgB,CAAC,EAAE;gBAC/B,OAAO,CAAC,KAAK,CACX,+CAA+C,EAC/C,WAAW,CAAC,SAAS,CACtB,CAAC;aACH;iBAAM;gBACL,WAAW,GAAG,KAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBACxE,WAAW,GAAG,KAAI,CAAC,sCAAsC,CAAC,WAAW,CAAC,CAAC;gBACvE,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;aACjC;SACF,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC;KAC1B;IAEO,kDAAqB,GAA7B,UAA8B,KAAiB,EAAE,MAAc;QAC7D,IAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;YACxB,OAAO;SACR;QAED,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;KAChC;IAEO,mEAAsC,GAA9C,UAA+C,WAAgB;QAA/D,iBAoBC;QAnBC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE;YACzDP,IAAM,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,UAAC,kBAAkB;gBAChE,IAAM,cAAc,GAAe,KAAI,CAAC,qCAAqC,CAC3E,WAAW,EACX,kBAAkB,CACnB,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;oBAClC,OAAO;iBACR;gBACD,IAAM,QAAQ,GAAG,KAAI,CAAC,uBAAuB,CAC3C,cAAc,EACd,kBAAkB,CACnB,CAAC;gBAEF,KAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;aACtD,CAAC,CAAC;SACJ;QACD,OAAO,WAAW,CAAC;KACpB;IAEO,gDAAmB,GAA3B,UACE,aAAkB,EAClB,qBAA6B;QAE7B,IAAIO,OAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,CAAC,KAAK,CACX,gDAAgD,EAChD,aAAa,CACd,CAAC;YACF,OAAO;SACR;QACD,IAAIA,OAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;YACxD,OAAO,CAAC,KAAK,CACX,+CAA+C,EAC/C,aAAa,CACd,CAAC;YACF,OAAO;SACR;QACD,IAAI,CAACA,OAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,uBAAuB,CACjC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,EACzC,aAAa,CAAC,UAAU,CACzB,CAAC;SACH;QAED,IAAI,CAACA,OAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAACA,OAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;YACvE,OAAO,IAAI,CAAC,2CAA2C,CACrD,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,EACzC,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,OAAO,CACtB,CAAC;SACH;QACD,IAAI,CAACA,OAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,sBAAsB,CAChC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,EACzC,aAAa,CAAC,IAAI,CACnB,CAAC;SACH;QACD,OAAO,CAAC,KAAK,CACX,0CAA0C,EAC1C,aAAa,CAAC,SAAS,CACxB,CAAC;KACH;IAEO,+CAAkB,GAA1B,UACE,UAAe,EACf,sBAAkC;QAFpC,iBAmBC;QAfC,IAAM,eAAe,GAAe,UAAU,CAAC,eAAe,CAAC;QAE/D,IAAIA,OAAS,CAAC,eAAe,CAAC,EAAE;YAC9B,OAAO;SACR;QAED,IAAM,qBAAqB,GAAW,EAAE,CAAC;QAEzCP,IAAM,CAAC,eAAe,EAAE,UAAC,SAAc;YACrC,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,gBAAgB,CAC5D,sBAAsB,EACtB,SAAS,CAAC,QAAQ,CACnB,CAAC;SACH,CAAC,CAAC;QACH,OAAO,qBAAqB,CAAC;KAC9B;;gBA/UF,UAAU;;;IAgVX,yBAAC;CAAA;;;IC/UsCR,qCAAY;IAEjD,2BAAY,OAA4B;QAAxC,YACE,kBAAM,OAAO,CAAC,SAGf;QAFC,KAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC7C,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,wBAAC;CAAA,CAPsC,YAAY;;;ICARA,yCAAiB;IAI1D,+BAAY,OAAgC;QAA5C,YACE,kBAAM,OAAO,CAAC,SAMf;QALC,KAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC7C,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;QAC9C,KAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,KAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,4BAAC;CAAA,CAZ0C,iBAAiB;;;ICAxBA,kCAAY;IAI9C,wBAAY,OAA8B;QAA1C,YACE,kBAAM,OAAO,CAAC,SAKf;QAJC,KAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;QACjD,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;;KAC5C;IACH,qBAAC;CAAA,CAXmC,YAAY;;;ICAVA,oCAAY;IAIhD,0BAAY,OAAgC;QAA5C,YACE,kBAAM,OAAO,CAAC,SAIf;QAHC,KAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACjC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,uBAAC;CAAA,CAVqC,YAAY;;;ICAhBA,gCAAY;IAG5C,sBAAY,OAA4B;QAAxC,YACE,kBAAM,OAAO,CAAC,SAGf;QAND,cAAQ,GAAG,IAAI,CAAC;QAChB,oBAAc,GAAG,KAAK,CAAC;QAGrB,KAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,mBAAC;CAAA,CARiC,YAAY;;;ICALA,uCAAc;IAGrD,6BAAY,OAAmC;QAA/C,YACE,kBAAM,OAAO,CAAC,SAIf;QAHC,KAAI,CAAC,aAAa,GAAG,cAAc,AAAmB,CAAC;QACvD,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,0BAAC;CAAA,CATwC,cAAc;;;ICDVA,kCAAY;IAEvD,wBAAY,OAAoB;eAC9B,kBAAM,OAAO,CAAC;KACf;IACH,qBAAC;CAAA,CAL4C,YAAY;;;ICGtBA,iCAAc;IAI/C,uBAAY,OAA6B;QAAzC,YACE,kBAAM,OAAO,CAAC,SAIf;QAPD,gBAAU,GAAG,IAAI,CAAC;QAIhB,KAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;;KAChD;IACH,oBAAC;CAAA,CAVkC,cAAc;;;ICAVA,qCAAc;IAGnD,2BAAY,OAAiC;QAA7C,YACE,kBAAM,OAAO,CAAC,SAIf;QAHC,KAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACjC,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;;KAChD;IACH,wBAAC;CAAA,CATsC,cAAc;;;ICFfA,oCAAY;IAGhD,0BAAY,OAAwB;QAApC,YACE,kBAAM,OAAO,CAAC,SAIf;QAHC,KAAI,CAAC,aAAa,GAAG,UAAU,AAAW,CAAC;QAC3C,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,uBAAC;CAAA,CATqC,YAAY;;ACAlD;IAAkCA,gCAAY;IAC1C,sBAAY,OAA4B;QAAxC,YACI,kBAAM,OAAO,CAAC,SAGjB;QAFG,KAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KACpD;IACL,mBAAC;CAAA,CANiC,YAAY,GAM7C;;;ICNuCA,sCAAY;IAIlD,4BAAY,OAAkC;QAA9C,YACE,kBAAM,OAAO,CAAC,SAIf;QARD,cAAQ,GAAG,IAAI,CAAC;QAChB,oBAAc,GAAG,KAAK,CAAC;QAIrB,KAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,yBAAC;CAAA,CAVuC,YAAY;;;ICAbA,qCAAY;IAMjD,2BAAY,OAAiC;QAA7C,YACE,kBAAM,OAAO,CAAC,SAQf;QAPC,KAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,KAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,KAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAC1C,KAAI,CAAC,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC;;KAClD;IACH,wBAAC;CAAA,CAhBsC,YAAY;;;ICFVA,uCAAe;IAGtD,6BAAY,WAAgB;QAA5B,YACE,kBAAM,WAAW,CAAC,SAInB;QAPD,sBAAgB,GAAG,KAAK,CAAC;QAKvB,KAAI,CAAC,gBAAgB;YACnB,WAAW,CAAC,gBAAgB,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;;KAC1D;IACH,0BAAC;CAAA,CATwC,eAAe;;;ICAhBA,sCAAe;IAGrD,4BAAY,WAAgB;QAA5B,YACE,kBAAM,WAAW,CAAC,SAGnB;QAFC,IAAM,GAAG,GAAQ,WAAW,CAAC,GAAG,CAAC;QACjC,KAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;;KACjB;IACH,yBAAC;CAAA,CARuC,eAAe;;;ICAfA,sCAAe;IAGrD,4BAAY,WAAgB;QAA5B,YACE,kBAAM,WAAW,CAAC,SAGnB;QAFC,IAAM,GAAG,GAAQ,WAAW,CAAC,GAAG,CAAC;QACjC,KAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;;KACjB;IACH,yBAAC;CAAA,CARuC,eAAe;;ACFvD;IAME,qCAAY,WAAgB;QAH5B,iBAAY,GAAG,CAAC,CAAC;QACjB,wBAAmB,GAAG,EAAE,CAAC;QAGvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;KAC9C;IACD,uDAAiB,GAAjB;QACE,IAAI,CAAC,mBAAmB,GAAG,mEAAiE,IAAI,CAAC,YAAc,CAAC;KACjH;IACD,gDAAU,GAAV;QACE,IAAI,CAAC,OAAO,GAAG,sBAAoB,IAAI,CAAC,YAAY,oBAAiB,CAAC;KACvE;IACD,6DAAuB,GAAvB;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IACH,kCAAC;CAAA,IAAA;;AChBD;IAKE;QAFA,sBAAiB,GAAG,KAAK,CAAC;KAEV;IAEhB,8CAAoB,GAApB,UAAqB,KAAK;QACxB,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,GAAG;YAC7C,IAAM,MAAM,GAAG,IAAIc,QAAM,CAAC;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf,CAAC,CAAC;QAEH,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,KAAK,KAAK,KAAK,GAAA,CAAC,CAAC;QAEzE,IAAM,IAAI,GAAyB,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;SAChD;QAED,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5B;IACD,oCAAU,GAAV,UAAW,GAAG;QACZ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;KAC1B;IACD,mCAAS,GAAT,UAAU,GAAG;QACX,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;KAC1B;IACD,uCAAa,GAAb,UAAc,UAAU;QACtB,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,GAAG;YAC7C,IAAM,MAAM,GAAG,IAAIA,QAAM,CAAC;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf,CAAC,CAAC;QAEH,aAAa,GAAG,aAAa,CAAC,MAAM,CAClC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAA,CACpD,CAAC;QAEF,IAAM,IAAI,GAAyB,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;SAChD;QAED,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5B;IAED,oCAAU,GAAV;QACE,OAAO;YACL;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,MAAM;aACd;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,gBAAgB;aACxB;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,YAAY;aACpB;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,iBAAiB;aACzB;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,qBAAqB;aAC7B;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,2CAA2C;aACnD;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,wBAAwB;aAChC;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,wBAAwB;aAChC;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,SAAS;aACjB;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,OAAO;aACf;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,QAAQ;aAChB;YACD;gBACE,OAAO,EAAE,sCAAsC;gBAC/C,KAAK,EAAE,SAAS;aACjB;SACF,CAAC;KACH;IACH,sBAAC;CAAA,IAAA;;AChHD,IAAMF,QAAM,GAAG,OAAO,CAAC;AAEvB;IAGE;QADA,gBAAW,GAAQ,EAAE,CAAC;KACN;IAEhB,2DAAkB,GAAlB,UAAmB,IAAY,EAAE,UAAe;QAAhD,iBAgCC;QA/BC,IAAM,QAAQ,GAAQ;YACpB,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,UAAC,GAAW,EAAE,KAAS;gBAAT,sBAAA,EAAA,SAAS;gBAC/B,IAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,OAAO,KAAI,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC5D;gBACD,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;aAClC;YACD,aAAa,EAAE;gBACb,OAAO,QAAQ,CAAC,IAAI,CAAC;aACtB;YACD,eAAe,EAAE,UAAC,KAAS;gBAAT,sBAAA,EAAA,SAAS;gBACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC7B;SACF,CAAC;QAEF,IAAIL,OAAS,CAAC,UAAU,CAAC,EAAE;YACzB,IAAM,OAAK,GAAe,EAAE,CAAC;YAC7BC,IAAM,CAAC,UAAU,EAAE,UAAC,SAAS;gBAC3B,OAAK,CAAC,IAAI,CAAC,KAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;aACjD,CAAC,CAAC;;YAGH,QAAQ,CAAC,IAAI,GAAGS,MAAQ,CAAC,OAAK,EAAE,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC;SAChE;aAAM;;YAEL,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;SAC1D;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAChC;IAED,kDAAS,GAAT,UAAU,IAAI,EAAE,MAAM;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;KACjC;IAED,kDAAS,GAAT,UAAU,IAAY;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;KACvC;IAED,sDAAa,GAAb,UAAc,IAAmB,EAAE,MAAW;QAC5C,IAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACjB,SAAS,EAAEL,QAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;aACzD,CAAC;SACH;KACF;IAED,qDAAY,GAAZ,UAAa,IAAI,EAAE,MAAM,EAAE,OAAO;QAAlC,iBAsBC;QArBC,IAAIM,KAAO,CAAC,MAAM,CAAC,EAAE;YACnB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACpB,IAAI,CAACA,KAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B;YACD,OAAO;SACR;QAED,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAIX,OAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACpDC,IAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAC,WAAW;gBAC9B,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC3D,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;SAC3D;KACF;IAEO,4DAAmB,GAA3B,UAA4B,SAAc;QACxC,IAAIU,KAAO,CAAC,SAAS,CAAC,EAAE;YACtB,OAAO;SACR;;QAED,IAAM,aAAa,GAAQ;YACzB,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;SAC/C,CAAC;QAEF,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE;YACjD,aAAa,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;SAClD;QAED,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAC/C,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SAChD;QAED,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE;YACzC,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1C;QAED,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE;YAC3D,aAAa,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;SAC5D;QAED,IAAI,SAAS,CAAC,QAAQ,EAAE;YACtB,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACpC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;SACxC;;QAGD,IAAI,SAAS,CAAC,GAAG,EAAE;YACjB,IAAM,YAAY,GAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;;YAG5DC,MAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACvC;QAED,OAAO,aAAa,CAAC;KACtB;IAEO,sDAAa,GAArB,UAAsB,GAAQ;QAA9B,iBAgCC;QA/BC,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,IAAI,CAAC;SACb;QAED,IAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,IAAIZ,OAAS,CAAC,GAAG,CAAC,EAAE;YAClBC,IAAM,CAAC,GAAG,EAAE,UAAC,SAAS;gBACpB,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;aAC1D,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf;aAAM,IAAI,GAAG,CAAC,YAAY,EAAE;YAC3B,IAAM,OAAK,GAAQ,EAAE,CAAC;YACtBA,IAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAC,MAAM;gBAC9B,KAAI,CAAC,YAAY,CAAC,OAAK,EAAE,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;aACtD,CAAC,CAAC;;YAGH,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAID,OAAS,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;gBACnE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAK,CAAC,CAAC;aACtC;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAK,CAAC,CAAC;aACpC;YACD,OAAO,MAAM,CAAC;SACf;aAAM;YACL,IAAI,GAAG,CAAC,KAAK,YAAY,MAAM,EAAE;gBAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;aAC3C;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;aACtC;YACD,OAAO,MAAM,CAAC;SACf;KACF;IAEO,qDAAY,GAApB,UAAqB,QAAa,EAAE,KAAU;QAC5C,KAAK,IAAM,GAAG,IAAI,KAAK,EAAE;YACvB,IAAIa,GAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;;gBAExB,IAAI,CAACb,OAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC7B,IAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC3B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACxB;;gBAGD,IAAIA,OAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;oBACzB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvD;qBAAM;oBACL,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChC;aACF;iBAAM;gBACL,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;aAC5B;SACF;QACD,OAAO,QAAQ,CAAC;KACjB;;gBAnLF,UAAU;;;IAoLX,qCAAC;CAAA;;AChLD;IAEE;KAAgB;IAET,0CAAQ,GAAf,UACE,IAAY,EACZ,WAAgB,EAChB,qBAA0B;QAE1B,IAAM,EAAE,GAAG,IAAI,8BAA8B,EAAE,CAAC;QAChD,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5D,IAAM,IAAI,GAAQ;YAChB,EAAE,EAAE,EAAE;SACP,CAAC;QAEF,IAAI,qBAAqB,EAAE;YACzB,KAAK,IAAM,CAAC,IAAI,qBAAqB,EAAE;gBACrC,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE;oBAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBACpC;aACF;SACF;QAED,IAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,IAAM,OAAO,GAAmB,IAAI,cAAc,EAAE,CAAC;QACrD,IAAM,MAAM,GAAqB,IAAI,gBAAgB,EAAE,CAAC;QACxD,IAAM,QAAQ,GAAa,MAAM,CAAC,WAAW,CAC3C,IAAI,EACJ,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,IAAI,CACL,CAAC;QAEF,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC;KACvB;IAEM,sDAAoB,GAA3B,UACE,IAAY,EACZ,WAAgB,EAChB,eAAoB;QAEpB,IAAM,eAAe,GAAG;YACtB,SAAS,EAAE,eAAe;SAC3B,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;KAC1D;;gBA9CF,UAAU;;;IA+CX,8BAAC;CAAA,IAAA;;ACtDD,IAAMK,QAAM,GAAG,OAAO,CAAC;AAEvB;IA6BE;QAFA,gBAAW,GAAQ,EAAE,CAAC;QACtB,4BAAuB,GAA4B,IAAI,uBAAuB,EAAE,CAAC;KACjE;IAEhB,6CAAmB,GAAnB,UAAoB,UAAe,EAAE,IAAW;QAC9C,IAAI,IAAI,EAAE;YACR,IAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;YAC1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;KAC7C;IAED,0CAAgB,GAAhB,UAAiB,cAAmB;QAClC,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,UAC5D,GAAG;YAEH,OAAO;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC;SACH,CAAC,CAAC;QAEH,IAAM,OAAO,GAAQ,QAAQ,CAAC,OAAO,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;YACnB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QAClE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,2CAAiB,GAAjB,UAAkB,cAAmB;QACnC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;QAClC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC;QAClE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;QACxE,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,0CAAgB,GAAhB,UAAiB,cAAmB;QAClC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;QAClC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;QACxE,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,2CAAiB,GAAjB,UAAkB,cAAmB;QACnC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;QACnC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;QACxE,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,wCAAc,GAAd,UAAe,cAAmB;QAChC,IAAI,cAAc,CAAC,IAAI,KAAK,mBAAmB,EAAE;YAC/C,OAAO,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;SACzD;QACD,IAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAAC,eAAe,CAAC,QAAmB,CAAC;QACvE,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC,SAAS;cAC9D,IAAI;cACJ,KAAK,CAAC;QAEV,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,wCAAc,GAAd,UAAe,cAAmB;QAChC,IAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,qDAA2B,GAA3B,UAA4B,cAAmB;QAC7C,IAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,eAAe,CAAC,SAAS;cAC9D,IAAI;cACJ,KAAK,CAAC;QAEV,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QACF,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,4CAAkB,GAAlB,UAAmB,cAAmB;QACpC,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,GAAG;YAChE,OAAO;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC;SACH,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9B,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QAClE,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,iDAAuB,GAAvB,UAAwB,cAAmB;QACzC,IAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC;YACvC,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,UAC5D,GAAG;YAEH,OAAO;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC;SACH,CAAC,CAAC;QACH,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAC5C,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,4CAAkB,GAAlB,UAAmB,cAAmB;QACpC,IAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;YACzC,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC;QAClE,QAAQ,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;QAChD,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC;QACpD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;QAExE,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,wCAAc,GAAd,UAAe,cAAmB;QAChC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC;QAClE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;QACxE,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,8CAAoB,GAApB,UAAqB,cAAmB;QACtC,IAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,wCAAc,GAAd,UAAe,cAAmB;QAChC,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;QAC7B,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,2CAAiB,GAAjB,UAAkB,cAAmB;QACnC,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,+CAAqB,GAArB,UAAsB,cAAmB;QACvC,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU;YACjB,cAAc,CAAC,eAAe,CAAC,UAAU,IAAI,gBAAgB,CAAC;QAChE,QAAQ,CAAC,iBAAiB,GAAG;YAC3B,OAAO,EAAE,cAAc,CAAC,eAAe,CAAC,OAAO;SAChD,CAAC;QACF,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,6CAAmB,GAAnB,UAAoB,cAAmB;QACrC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,yBAAyB,CACjD,cAAc,CAAC,SAAS,CACzB,CAAC;QACF,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAI,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE;YACvC,IAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;SAC7B;QAED,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,yCAAe,GAAf,UAAgB,cAAmB;QACjC,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,yBAAyB,CACjD,cAAc,CAAC,SAAS,CACzB,CAAC;QACF,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,wCAAc,GAAd,UAAe,cAAmB;QAAlC,iBAWC;QAVC,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC;QACpC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC;QAC3C,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO;YACtC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;SAC1D,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;KACjB;IAED,6CAAmB,GAAnB,UAAoB,cAAmB;QAAvC,iBAaC;QAZC,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC;QACpC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;QACnD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,OAAO;YACnC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;SACvD,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;KACjB;IAED,2CAAiB,GAAjB,UAAkB,cAAmB;QACnC,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC;QACpC,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;QACnC,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC;QAC3C,QAAQ,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;QAC1E,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC;KACjB;IAED,mDAAyB,GAAzB,UAA0B,cAAmB;QAC3C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,iBAAiB,CAAC;QAExC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IACD,iDAAuB,GAAvB,UAAwB,cAAmB;QACzC,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,eAAe,CAAC;QAEtC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,qDAA2B,GAA3B,UAA4B,cAAmB;QAC7C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,4CAAkB,GAAlB,UAAmB,cAAmB;QACpC,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACtD,QAAQ,CAAC,aAAa,GAAG,WAAW,CAAC;QACrC,OAAO,QAAQ,CAAC;KACjB;IAED,qDAA2B,GAA3B,UAA4B,cAAmB;QAC7C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QAC7C,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QAEjC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,iDAAuB,GAAvB,UAAwB,cAAmB;QACzC,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QAC7C,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,eAAe,CAAC;QAEtC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,oDAA0B,GAA1B,UAA2B,cAAmB;QAC5C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QAC7C,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,kBAAkB,CAAC;QAEzC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,oDAA0B,GAA1B,UAA2B,cAAmB;QAC5C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,cAAc,EAAE,eAAc;YAC9B,eAAe,EAAE,eAAc;SAChC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QAC7C,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC;QACzC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,kBAAkB,CAAC;QAEzC,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC;KACjB;IAED,6CAAmB,GAAnB,UAAoB,cAAmB;QACrC,IAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,gBAAgB,EAAE,EAAE;YACpB,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACjC,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CACpE,UAAU,GAAG;YACX,OAAO;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC;SACH,CACF,CAAC;QAEF,IAAM,QAAQ,GAAQ;YACpB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,EAAE,EAAE,KAAK;SACV,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC;KACjB;IAED,4CAAkB,GAAlB,UAAmB,MAAW;QAC5B,IAAM,aAAa,GAAG,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,OAAO,aAAa,CAAC;KACtB;IAED,sCAAY,GAAZ,UAAa,MAAW,EAAE,UAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC9B,UAAU,GAAG,EAAE,CAAC;SACjB;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,KAAK,IAAM,QAAQ,IAAI,MAAM,EAAE;gBAC7B,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;iBACjD;aACF;SACF;QAED,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAClE,IAAI,MAAM,CAAC,eAAe,EAAE;gBAC1B,IACE,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,OAAO;oBAC5C,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,WACvC,EAAE;;oBAEA,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CACvD,CAAC;iBACH;qBAAM,IAAI,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,WAAW,EAAE,CAC5D;qBAAM;oBACL,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CACvD,CAAC;iBACH;aACF;iBAAM;gBACL,KAAK,IAAM,CAAC,IAAI,MAAM,EAAE;oBACtB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;wBAC5B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;qBAC1C;iBACF;aACF;SACF;KACF;IAED,mDAAyB,GAAzB,UAA0B,MAAW;QACnC,IAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;KACjB;IAED,iCAAO,GAAP,UAAQ,MAAW,EAAE,UAAkB;QACrC,IAAI,UAAU,KAAK,oBAAoB,EAAE;YACvC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;SAC1B;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;SACpC;QAED,IACE,MAAM,CAAC,eAAe;aACrB,MAAM,CAAC,eAAe,CAAC,QAAQ,KAAK,IAAI;gBACvC,MAAM,CAAC,eAAe,CAAC,QAAQ,KAAK,MAAM,CAC9C,EAAE;YACA,MAAM,GAAG,IAAI,CAAC,+CAA+C,CAAC,MAAM,CAAC,CAAC;YACtE,UAAU,GAAG,WAAW,CAAC;SAC1B;QAED,QAAQ,UAAU;YAChB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC1C,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAChD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,wBAAwB;gBAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC9C,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC3C;gBACE,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,UAAU,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SACtC;KACF;IAED,yEAA+C,GAA/C,UAAgD,cAAmB;QACjE,IAAM,SAAS,GAAQ,EAAE,CAAC;QAC1B,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC;QAC/B,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACvC,SAAS,CAAC,EAAE,GAAG,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC;QAC9C,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;QAC/B,SAAS,CAAC,eAAe,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC;QAC3E,SAAS,CAAC,eAAe,CAAC,SAAS,GAAG,WAAW,CAAC;QAClD,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QACzB,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC;QAE1B,IAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;QAClE,SAAS,CAAC,IAAI,GAAG,mBAAmB,CAAC;QACrC,OAAO,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC1C,OAAO,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC;QAClD,SAAS,CAAC,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC;QAE7C,IAAM,SAAS,GAAQ,EAAE,CAAC;QAC1B,SAAS,CAAC,IAAI,GAAG,mBAAmB,CAAC;QACrC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;QAC/C,SAAS,CAAC,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;QAC/B,SAAS,CAAC,eAAe,CAAC,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC;QAC3E,SAAS,CAAC,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC;QAC7C,SAAS,CAAC,eAAe,CAAC,QAAQ,GAAG,aAAa,CAAC;QACnD,IAAM,WAAW,GAAS,MAAc,CAAC,MAAM,CAC7C,EAAE,EACF,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAChD,CAAC;QACF,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;QAC9C,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAElC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpC,OAAO,SAAS,CAAC;KAClB;IAED,wCAAc,GAAd,UAAe,QAAa,EAAE,MAAW,EAAE,WAAyB;QAClE,KAAK,IAAM,QAAQ,IAAI,MAAM,EAAE;YAC7B,IACE,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;gBACjC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC/C,EAAE;gBACA,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;aACpD;SACF;KACF;IAED,uCAAa,GAAb,UAAc,cAAmB;QAC/B,IAAM,UAAU,GAA2B,EAAE,CAAC;QAE9C,IAAI,cAAc,CAAC,UAAU,EAAE;;YAE7BT,OAAS,CAAC,cAAc,CAAC,UAAU,EAAE,UAAC,SAAc;gBAClD,QAAQ,SAAS,CAAC,IAAI;oBACpB,KAAK,MAAM;wBACT,UAAU,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;wBACpD,MAAM;oBACR,KAAK,eAAe;wBAClB,UAAU,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC5D,MAAM;oBACR,KAAK,SAAS;wBACZ,IAAM,YAAY,GAAG,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;wBAChE,YAAY,CAAC,uBAAuB,EAAE,CAAC;wBACvC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC9B,MAAM;oBACR,KAAK,qBAAqB;wBACxB,UAAU,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC3D,MAAM;oBACR;wBACE,UAAU,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;wBAChD,MAAM;iBACT;aACF,CAAC,CAAC;SACJ;QAED,IAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC;QACvD,IAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC,SAAS,GAAG,EAAE,CAAC;QACvE,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,SAAS,EAAE;YAC7D,IAAI,eAAe,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE;gBAC9C,UAAU,CAAC,IAAI,CACb,IAAI,kBAAkB,CAAC;oBACrB,IAAI,EAAE,KAAK;oBACX,GAAG,EAAE,eAAe,CAAC,GAAG;iBACzB,CAAC,CACH,CAAC;gBACF,UAAU,CAAC,IAAI,CACb,IAAI,kBAAkB,CAAC;oBACrB,IAAI,EAAE,KAAK;oBACX,GAAG,EAAE,eAAe,CAAC,GAAG;iBACzB,CAAC,CACH,CAAC;aACH;SACF;;QAGD,IAAI,OAAO,cAAc,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC/C,IAAM,QAAQ,GAAQ,cAAc,CAAC,QAAQ,CAAC;YAE9C,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBAC3C,UAAU,CAAC,IAAI,CACb,IAAI,0BAA0B,CAAC;oBAC7B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;oBACjD,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;oBAC3D,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CACH,CAAC;aACH;SACF;QAED,OAAO,UAAU,CAAC;KACnB;IAED,kDAAwB,GAAxB,UAAyB,cAAmB,EAAE,QAAsB;QAClE,IACE,cAAc,CAAC,oBAAoB;YACnC,cAAc,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAC/C,EAAE;YACA,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,cAAc,CAAC,2BAA2B,KAAK,SAAS,EAAE;gBAC5D,QAAQ,CAAC,2BAA2B,CAClC,cAAc,CAAC,2BAA2B,KAAK,MAAM,CACtD,CAAC;aACH;iBAAM;gBACL,QAAQ,CAAC,2BAA2B,EAAE,CAAC;aACxC;YACD,IAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CACrD,cAAc,CAAC,oBAAoB,EACnC,IAAI,CAAC,WAAW,EAChB,SAAS,CACV,CAAC;YACF,QAAQ,CAAC,mBAAmB,GAAG,SAAS,CAAC;;;;YAKzC,IAAI,cAAc,CAAC,8BAA8B,IAAI,SAAS,EAAE;gBAC9D,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAClE,cAAc,CAAC,8BAA8B,EAC7C,IAAI,CAAC,WAAW,EAChB,SAAS,CACV,CAAC;gBAEF,IAAI,UAAU,EAAE;oBACd,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;iBACzC;gBACD,OAAO;aACR;YAED,IAAI,cAAc,CAAC,qBAAqB,IAAI,SAAS,EAAE;;;;gBAIrD,IAAM,OAAO,GAAGS,QAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAM,gBAAgB,GAAGA,QAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,+BAA+B,CAAC,EAAE;oBACpE,IACE,gBAAgB,IAAI,cAAc,CAAC,+BACrC,EAAE;wBACA,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;qBACzC;iBACF;qBAAM;oBACL,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;iBACzC;aACF;SACF;KACF;IAED,+CAAqB,GAArB,UAAsB,cAAmB,EAAE,QAAsB;QAC/D,IACE,cAAc,CAAC,eAAe;YAC9B,OAAO,cAAc,CAAC,eAAe,CAAC,SAAS,KAAK,QACtD,EAAE;YACA,QAAQ,CAAC,mBAAmB;gBAC1B,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,mBAAmB,CAAC;SAChE;KACF;IAED,0CAAgB,GAAhB,UAAiB,cAAmB,EAAE,QAAsB;QAC1D,IAAI,cAAc,CAAC,KAAK,EAAE;YACxB,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;SACvC;;;;;;KAMF;IAED,kDAAwB,GAAxB,UAAyB,cAAmB,EAAE,QAAsB;QAClE,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;YAC5B,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;SAC3C;QAED,IAAI,OAAO,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE;YAC9C,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,qBAAqB,CAAC;SACjE;QAED,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE;YACzB,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;SACrC;QACD,IAAI,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC3C,IAAI,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC1C,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACxD;SACF;KACF;IACO,oCAAU,GAAlB,UAAmB,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC5B,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC;gBACC,CAAC,GAAG,GAAG;sBACH,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;sBACnB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SACrE;QACD,OAAO,GAAG,GAAG,CAAC,CAAC;KAChB;IACH,sBAAC;CAAA;;;IC3lCC,qBACS,cAAkC,EAClC,eAAgC,EAChC,uBAAgD;QAFhD,mBAAc,GAAd,cAAc,CAAoB;QAClC,oBAAe,GAAf,eAAe,CAAiB;QAChC,4BAAuB,GAAvB,uBAAuB,CAAyB;QATlD,OAAE,GAAQ;YACf,QAAQ,EAAE;gBACR,OAAO,EAAE,CAAC;aACX;SACF,CAAC;KAME;IAEJ,gCAAU,GAAV,UAAW,MAAW,EAAE,UAAgB;QACtC,IAAM,IAAI,GAAS,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,UAAU,EAAE;YACd,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;gBAC5B,IAAI,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAClC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAC1C,GAAG,EACH,UAAU,CAAC,GAAG,CAAC,EACf,KAAK,CACN,CAAC;iBACH;aACF;SACF;QACD,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAc,CAAC;QAEzE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,uCAAuC,EAAE,CAAC;QAC/C,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;KACb;IAED,oCAAc,GAAd,UAAe,QAAmB;QAChC,WAAW,CAAC,6BAA6B,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;QAGtD,WAAW,CAAC,6BAA6B,GAAG,IAAI,CAAC;KAClD;IAED,gCAAU,GAAV,UACE,QAAuC,EACvC,UAAsB,EACtB,aAA4B,EAC5B,IAAW;QAEX,IAAI,IAAI,GAAa,IAAI,CAAC;QAC1B,IAAI,QAAQ,YAAY,cAAc,EAAE;YACtC,IAAI,QAAQ,YAAY,iBAAiB,EAAE;gBACzC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;aACxE;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;aACxE;SACF;aAAM;YACL,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;SACvE;QACD,OAAO,IAAI,CAAC;KACb;IAED,oCAAc,GAAd,UACE,QAAsB,EACtB,UAAqB,EACrB,aAA4B,EAC5B,IAAW;QAEX,IAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC3D,QAAQ,EACR,aAAa,EACb,KAAK,EACL,IAAI,CACL,CAAC;QACF,OAAO,IAAI,QAAQ,CACjB,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS,CACzC,CAAC;KACH;IAED,qCAAe,GAAf,UACE,QAAwB,EACxB,UAAsB,EACtB,aAA4B,EAC5B,IAAW;QAEX,IAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC3D,QAAQ,EACR,aAAa,EACb,KAAK,EACL,IAAI,CACW,CAAC;QAClB,IAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS,CACzC,CAAC;QACF,IAAI,CAAC,kBAAkB,CACrB,QAAQ,EACR,SAAS,EACT,YAAY,IAAI,aAAa,EAC7B,IAAI,CACL,CAAC;QACF,OAAO,SAAS,CAAC;KAClB;IAED,qCAAe,GAAf,UACE,QAAwB,EACxB,UAAsB,EACtB,aAA4B,EAC5B,IAAW;QAJb,iBA6BC;QAvBC,IAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC3D,QAAQ,EACR,aAAa,EACb,KAAK,EACL,IAAI,CACW,CAAC;QAClB,IAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS,CACzC,CAAC;QACF,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACtD,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEtD,SAAS,CAAC,2BAA2B,CAAC,UAAC,IAAe;YACpD,WAAW,CAAC,6BAA6B,GAAG,KAAK,CAAC;YAClD,KAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC3D,WAAW,CAAC,6BAA6B,GAAG,IAAI,CAAC;SAClD,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;KAClB;IAED,wCAAkB,GAAlB,UACE,QAAwB,EACxB,IAAe,EACf,aAA4B,EAC5B,IAAW;QAJb,iBAWC;QALC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,OAAO;YACjC,IAAM,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,0CAAoB,GAApB,UACE,QAA2B,EAC3B,IAAe,EACf,OAAqB;QAErB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC7C,OAAO,GAAG,IAAI,CAAC;SAChB;QACD,IAAM,aAAa,GAAkB,IAAI,aAAa,CAAC;YACrD,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;YAChD,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,WAAW,KAAK,cAAc,CAAC,IAAI,EAAE;YAChD,aAAa,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;SAClD;QAED,IAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,YAAY,YAAY,EAAE;YACxC,IAAM,WAAW,GAAG,IAAI,CAAC,OAAuB,CAAC;YACjD,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;SACpE;QAED,OAAO,KAAK,CAAC;KACd;IAED,0CAAoB,GAApB,UAAqB,KAAa,EAAE,IAAe;QACjD,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YACvD,IAAI,IAAI,CAAC,OAAO,YAAY,YAAY,EAAE;gBACxC,IAAM,OAAO,GAAG,IAAI,CAAC,OAAuB,CAAC;gBAC7C,IAAM,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CACnD,YAAY,CAAC,OAAO,CACrB,CAAC;gBACF,IAAI,oBAAoB,IAAI,CAAC,EAAE;oBAC7B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;iBACxC;aACF;SACF;KACF;;gBA1MF,UAAU;;;gBAZF,kBAAkB;gBAClB,eAAe;gBAMf,uBAAuB;;IAgNhC,kBAAC;CAAA;;AC9ND,IAAMA,QAAM,GAAG,OAAO,CAAC;AAEvB;IAQE;KAAgB;IAEhB,kDAAuB,GAAvB,UAAwB,IAAc,EAAE,QAAoB;QAA5D,iBA2CC;QA1CC,IAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,KAAK,CAAC;SACd;QAED,IACE,IAAI,YAAY,QAAQ;aACvB,IAAI,YAAY,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAC3E,EAAE;YACAJ,IAAM,CAAC,QAAQ,EAAE,UAAC,IAAI;gBACpB,IACE,IAAI,CAAC,OAAO;oBACZ,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAC7D,EAAE;oBACA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;aACF,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC;SACd;;QAID,IAAM,mBAAmB,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClCA,IAAM,CAAC,QAAQ,EAAE,UAAC,GAAG;gBACnB,IACE,GAAG,CAAC,OAAO;oBACX,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;oBACjE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;oBAC/B,KAAI,CAAC,UAAU,CACb,mBAAmB,EACnB,KAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAEzC,EAAE;oBACA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACjB;aACF,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;IAED,wDAA6B,GAA7B,UAA8B,IAAc;QAC1C,IAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1DA,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAC,QAAQ;gBAC9C,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE;oBAChE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;iBAC9C;aACF,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;IAED,sDAA2B,GAA3B,UAA4B,mBAAmB;QAC7C,IAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE;YACnDA,IAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,UAAC,MAAM;gBAC9C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACjC,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;IAED,oCAAS,GAAT,UAAU,IAAc;QACtB,QACE,IAAI,CAAC,QAAQ,CAAC,MAAM;aACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;gBAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;gBACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa;gBAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,EACpD;KACH;IAED,qCAAU,GAAV,UAAW,aAAyB,EAAE,WAAuB;QAC3D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC;SACb;QACD,OAAO,WAAW,CAAC,KAAK,CAAC,UAAC,OAAO;YAC/B,OAAO,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5C,CAAC,CAAC;KACJ;IAED,gDAAqB,GAArB,UAAsB,IAAc,EAAE,GAAe;QACnD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;;YAGxB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;;gBAExD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACzD;iBAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACxC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;aACpD;SACF;KACF;IAED,qDAA0B,GAA1B,UAA2B,IAAc,EAAE,GAAe;QACxD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YAExB,IAAM,QAAQ,GAAG,EAAE,CAAC;;gBACpB,KAAgB,IAAA,QAAAG,SAAA,GAAG,CAAA,wBAAA;oBAAd,IAAM,CAAC,gBAAA;oBACV,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC7B;;;;;;;;;YAED,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC9C;;KACF;IAED,iDAAsB,GAAtB,UAAuB,IAAc,EAAE,GAAe;QACpD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,UAAU,SAAU,CAAC;YACzB,IAAI,SAAS,SAAU,CAAC;YAExB,IAAM,WAAW,GAAG,IAAiB,CAAC;;YAEtC,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACpC,IACG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;qBAClE,QAAQ,KAAK,OAClB,EAAE;oBACA,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;iBACtC;gBAED,IACG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;qBAClE,QAAQ,KAAK,aAClB,EAAE;oBACA,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;iBACrC;aACF;;YAGD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;;YAG5C,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;YACjD,IAAI,CAAC,uBAAuB,CAC1B,SAAS,EACT,UAAU,CAAC,YAAY,CAAC,WAAW,CACpC,CAAC;SACH;KACF;IAED,+CAAoB,GAApB,UAAqB,IAAc,EAAE,GAAe;QAClD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,SAAS,GAAG,IAAiB,CAAC;YACpC,SAAS,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;;YAEhC,KAAK,IAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;gBAClC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aAC/D;SACF;KACF;IAED,wDAA6B,GAA7B,UAA8B,IAAc,EAAE,GAAe;QAC3D,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,SAAS,GAAG,IAAiB,CAAC;YACpC,SAAS,CAAC,YAAY,GAAG,GAAG,CAAC;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAM,WAAW,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;gBAChD,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD;SACF;KACF;IAED,uCAAY,GAAZ,UAAa,IAAc,EAAE,GAAe;QAC1C,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/B,KAAK,SAAS;gBACZ,IAAI,IAAI,YAAY,SAAS,EAAE;oBAC7B,IAAM,SAAS,GAAG,IAAiB,CAAC;;oBAEpC,KAAK,IAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;wBAClC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBAC/C;oBACD,MAAM;iBACP;gBACD,IAAI,IAAI,YAAY,SAAS,EAAE;oBAC7B,IAAM,SAAS,GAAG,IAAiB,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBAC/C;oBACD,MAAM;iBACP;gBACD,MAAM;YACR,KAAK,QAAQ;;gBAEX,IAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;gBAG7D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC/C,MAAM;YAER,KAAK,aAAa;;gBAEhB,IAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;gBAG/D,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACtD,MAAM;YAER,KAAK,SAAS;;gBAEZ,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;gBAG3D,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC9C,MAAM;YAER,KAAK,OAAO;gBACV,IAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAEzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBAC3C;gBAED,MAAM;YACR,KAAK,gBAAgB;gBACnB,IAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAElE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChC,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;iBAC7D;gBAED,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM;SACT;KACF;IAED,kDAAuB,GAAvB,UAAwB,IAAc,EAAE,KAAK;QAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;;;QAK7B,IACE,IAAI,CAAC,QAAQ,CAAC,qBAAqB;YACnC,IAAI,CAAC,YAAY,KAAK,SACxB,EAAE;YACA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SACzC;KACF;IAED,yCAAc,GAAd,UAAe,IAAc;QAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACxB,IACE,IAAI,YAAY,QAAQ;iBACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,eAAe;oBACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,UAAU;oBAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,cAAc,CACrE,EAAE;gBACA,OAAO,aAAa,CAAC;aACtB;YAED,IAAI,IAAI,YAAY,QAAQ,EAAE;gBAC5B,OAAO,QAAQ,CAAC;aACjB;YAED,IACE,IAAI,YAAY,SAAS;gBACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAChC,EAAE;gBACA,OAAO,SAAS,CAAC;aAClB;YAED,IACE,IAAI,YAAY,SAAS;gBACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;gBACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,WACrD,EAAE;gBACA,OAAO,gBAAgB,CAAC;aACzB;YAED,IACE,IAAI,YAAY,SAAS;gBACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,UAChC,EAAE;gBACA,OAAO,OAAO,CAAC;aAChB;YAED,OAAO,YAAY,CAAC;SACrB;QACD,OAAO,SAAS,CAAC;KAClB;;IAGD,8CAAmB,GAAnB,UAAoB,IAAc;;QAEhC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpC,IAAI,IAAI,CAAC,YAAY,EAAE;;gBAErB,OAAO;oBACL,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;oBAC5B,MAAM,EAAE,IAAI;iBACb,CAAC;aACH;YACD,OAAO,IAAI,CAAC;SACb;;QAGD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAC3D,OAAO,IAAI,CAAC;SACb;;;QAID,IAAM,GAAG,GAAQ;YACf,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;YACrD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC1B,CAAC;;QAGF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,MAAM,EAAE;YAC7D,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC9D;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;SACnC;QAED,OAAO,GAAG,CAAC;KACZ;IAED,+CAAoB,GAApB,UAAqB,IAAc;QACjC,IAAI,UAAoB,CAAC;QACzB,IAAI,SAAmB,CAAC;QAExB,IAAM,WAAW,GAAG,IAAiB,CAAC;;QAEtC,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;YACpC,IACG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAClE,QAAQ,KAAK,OAClB,EAAE;gBACA,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACtC;YAED,IACG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAClE,QAAQ,KAAK,aAClB,EAAE;gBACA,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACrC;SACF;QAED,IAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;;QAG1C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CACxD,SAAS,CAAC,OAAO,CAAC,KAAK,CACxB,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;SACxB;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;;YAEzD,IACE,CAAC,IAAI,CAAC,aAAa,CACjB,IAAI,CAAC,YAAY,CAAC,WAAW,EAC7B,SAAS,CAAC,OAAO,CAAC,KAAK,CAE3B,EAAE;gBACA,IAAM,OAAO,GAAQ;oBACnB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;iBAC7B,CAAC;gBACF,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAChD,SAAS,CAAC,OAAO,CAAC,KAAK,CACxB,CAAC;gBACF,OAAO,OAAO,CAAC;aAChB;SACF;QACD,OAAO,IAAI,CAAC;KACb;IAED,mDAAwB,GAAxB,UAAyB,IAAc;QACrC,IAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,IAAM,aAAa,GAAG,EAAE,CAAC;;QAGzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACpCH,IAAM,CAAC,IAAI,CAAC,YAAY,EAAE,UAAC,IAAI;gBAC7B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACrC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBACnD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,MAAM,EAAE,IAAI;yBACb,CAAC,CAAC;qBACJ;iBACF;qBAAM;;oBAEL,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC;SACJ;;QAGD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrCA,IAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAC,IAAI;gBAC9B,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACnC,OAAO,CAAC,IAAI,CAAC;wBACX,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;wBACrD,KAAK,EAAE,IAAI;qBACZ,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;KAChB;IAED,0CAAe,GAAf,UAAgB,IAAc;QAA9B,iBA2BC;QA1BC,IAAM,WAAW,GAAc,IAAiB,CAAC;QAEjD,IAAI,eAAe,GAAG,EAAE,CAAC;QACzBA,IAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAC,KAAK;YACjC,IAAM,OAAO,GAAG,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACnD;SACF,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO,IAAI,CAAC;SACb;QAED,IAAM,YAAY,GAAQ;YACxB,YAAY,EAAE,eAAe;SAC9B,CAAC;QAEF,IAAI,WAAW,CAAC,YAAY,EAAE;YAC5B,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;SACnD;aAAM;YACL,YAAY,CAAC,OAAO;gBAClB,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;SACvD;QAED,OAAO,YAAY,CAAC;KACrB;IAED,mDAAwB,GAAxB,UAAyB,IAAc;QAAvC,iBAkCC;QAjCC,IAAM,WAAW,GAAc,IAAiB,CAAC;QAEjD,IAAI,eAAe,GAAG,EAAE,CAAC;QAEzB,IAAM,wBAAwB,GAAG,EAAE,CAAC;QACpCA,IAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAC,KAAK;YACjC,IAAM,OAAO,GAAG,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACnD;YACD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;gBACjD,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACxD;SACF,CAAC,CAAC;;;QAIH,IAAI,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;YACvEA,IAAM,CAAC,WAAW,CAAC,YAAY,EAAE,UAAC,GAAG;gBACnC,IAAI,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAM,WAAW,GAAG;wBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,MAAM,EAAE,IAAI;qBACb,CAAC;oBACF,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBACnC;aACF,CAAC,CAAC;SACJ;QAED,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,eAAe,CAAC;KACxB;IAED,4CAAiB,GAAjB,UAAkB,IAAc;QAC9B,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/B,KAAK,SAAS;gBACZ,IAAI,IAAI,YAAY,SAAS,EAAE;oBAC7B,IAAM,SAAS,GAAG,IAAiB,CAAC;;oBAEpC,KAAK,IAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;wBAClC,IAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAC5C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CACtB,CAAC;wBACF,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;4BAChE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;yBAC3C;qBACF;oBACD,MAAM;iBACP;gBACD,IAAI,IAAI,YAAY,SAAS,EAAE;oBAC7B,IAAM,SAAS,GAAG,IAAiB,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClD,IAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAC7C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CACtB,CAAC;wBACF,IACE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;4BAC/B,gBAAgB,CAAC,MAAM,GAAG,CAC5B,EAAE;4BACA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;yBAC5C;qBACF;oBACD,MAAM;iBACP;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,SAAS,KAAK,IAAI,EAAE;oBACtB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACzB;gBACD,MAAM;YAER,KAAK,aAAa;gBAChB,IAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAE3D,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;iBAC1C;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,UAAU,KAAK,IAAI,EAAE;oBACvB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC1B;gBACD,MAAM;YAER,KAAK,OAAO;gBACV,IAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE;oBACrC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC1B;gBACD,MAAM;YACR,KAAK,gBAAgB;gBACnB,IAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAChE,IACE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBAClC,mBAAmB,CAAC,MAAM,GAAG,CAC/B,EAAE;oBACA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;iBAC/C;gBACD,MAAM;YACR;gBACE,MAAM;SACT;QAED,OAAO,OAAO,CAAC;KAChB;IAED,iDAAsB,GAAtB,UAAuB,IAAc;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;;gBAE3D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;aAC5D;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,MAAM,EAAE;gBAC7D,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACzE;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;SACvD;QACD,OAAO,KAAK,CAAC;KACd;IAED,wCAAa,GAAb,UAAc,KAAK,EAAE,KAAK;QACxB,OAAOI,QAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACpC;IAED,kCAAO,GAAP,UAAQ,KAAK;QACX,IACE,KAAK,KAAK,EAAE;YACZ,KAAK,KAAK,IAAI;YACd,KAAK,KAAK,SAGZ,EAAE;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,kDAAuB,GAAvB,UAAwB,QAAgB;QACtC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1B,OAAO,SAAS,CAAC;SAClB;aAAM;;YAEL,IAAM,YAAY,GAAGA,QAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;SAC5C;KACF;IACH,uBAAC;CAAA;;;IC3mBC,yBAAoB,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;KAAI;IAEhD,6CAAmB,GAAnB,UAAoB,IAAU;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;;;;;;;KAQrD;IAED,sCAAY,GAAZ,UAAa,IAAU,EAAE,OAAO;QAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;;;;;;;KASlD;;;IAKD,mCAAS,GAAT,UAAU,KAAK,EAAE,OAAQ,EAAE,UAAW;QACpC,IAAI,KAAK,EAAE;oCACE,IAAI;gBACb,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC5B,OAAK,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAChC,IACE,IAAI,CAAC,QAAQ,CAAC,qBAAqB;wBACnC,IAAI,CAAC,YAAY,KAAK,SACxB,EAAE;wBACA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;qBACzC;iBACF;qBAAM,IACL,CAAC,IAAI,CAAC,QAAQ;oBACZ,IAAI,CAAC,QAAQ,CAAC,MAAM;oBACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,OAAO;oBACzC,UACF,EAAE;oBACA,IAAM,QAAQ,GAAGS,IAAM,CAAC,OAAO,EAAE,UAAC,CAAM;wBACtC,QACE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;4BAC/D,CAAC,CAAC,YAAY,EACd;qBACH,CAAC,CAAC;oBACH,IAAI,QAAQ,EAAE;wBACZ,IAAI,IAAI,CAAC,IAAI,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC;yBACtC;wBAED,OAAK,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;qBAC1D;oBACD,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;wBAC9B,OAAK,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;qBAC9D;iBACF;qBAAM,IACL,IAAI,YAAY,SAAS;oBACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAChC,EAAE;oBACA,OAAK,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;iBACxC;qBAAM,IACL,IAAI,CAAC,QAAQ;oBACb,IAAI,CAAC,QAAQ,CAAC,MAAM;oBACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,WAAW;oBAC3C,CAAC,UACH,EAAE;oBACA,OAAK,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;iBAC5C;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;iBACpC;aACF;;;gBA/CD,KAAmB,IAAA,UAAAV,SAAA,KAAK,CAAA,4BAAA;oBAAnB,IAAM,IAAI,kBAAA;4BAAJ,IAAI;iBA+Cd;;;;;;;;;SACF;;KACF;IAED,qCAAW,GAAX,UAAY,IAAI,EAAE,OAAO;QACvB,IACE,CAAC,IAAI,CAAC,QAAQ;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM;aACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;iBACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB;oBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,eAAe;YACpE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,UAAU;YAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,cACrD,EAAE;YACA,IAAM,GAAG,GAAGU,IAAM,CAAC,OAAO,EAAE,UAAC,CAAM;gBACjC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;aACxE,CAAC,CAAC;YACH,IAAI,GAAG,EAAE;gBACP,IAAI,GAAG,CAAC,KAAK,YAAY,MAAM,EAAE;oBAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;iBACvC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;iBACvC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aAChE;SACF;aAAM;YACL,IAAM,QAAQ,GAAGf,MAAQ,CAAC,OAAO,EAAE,UAAC,CAAM;gBACxC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;aACxE,CAAC,CAAC;YACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC;aACjC;SACF;KACF;IAED,4CAAkB,GAAlB,UAAmB,IAAI,EAAE,OAAO;QAC9B,IAAI,UAAe,CAAC;QACpB,IAAI,SAAc,CAAC;;QAGnB,KAAK,IAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IACG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAC3D,QAAQ,KAAK,OAClB,EAAE;gBACA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC/B;YAED,IACG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAC3D,QAAQ,KAAK,aAClB,EAAE;gBACA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC9B;SACF;;QAED,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;;QAGtC,IAAM,GAAG,GAAGe,IAAM,CAAC,OAAO,EAAE,UAAC,CAAM;YACjC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;SACxE,CAAC,CAAC;QAEH,IAAI,GAAG,EAAE;YACP,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;YACzE,SAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzD,SAAsB,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;SAC1D;KACF;IAED,8CAAoB,GAApB,UAAqB,QAAQ;QAC3B,IAAM,MAAM,GAAG,EAAE,CAAC;;YAClB,KAAgB,IAAA,aAAAV,SAAA,QAAQ,CAAA,kCAAA;gBAAnB,IAAM,CAAC,qBAAA;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC3B;;;;;;;;;QACD,OAAO,MAAM,CAAC;;KACf;IAED,iDAAuB,GAAvB,UAAwB,IAAI,EAAE,OAAO;QACnC,IAAM,iBAAiB,GAAGL,MAAQ,CAAC,OAAO,EAAE,UAAC,CAAM;YACjD,IAAM,KAAK,GACT,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;YAClE,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE;gBAC3B,IAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAC,CAAC;oBAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;iBACvB,CAAC,CAAC;gBAEH,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC;oBACpD,OAAO,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;iBACzC,CAAC,CAAC;gBAEH,SAAS,GAAGgB,YAAc,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC7D;YACD,OAAO,KAAK,IAAI,SAAS,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;aAC7B;SACF;QACD,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;gCACH,KAAK;YACd,IAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG;gBAC5D,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC5B,CAAC,CAAC;YACH,IAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,YAAY,EAAE,QAAQ;gBACtB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;SACT;;YAXD,KAAoB,IAAA,KAAAX,SAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA,gBAAA;gBAAjC,IAAM,KAAK,WAAA;wBAAL,KAAK;aAWf;;;;;;;;;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;;KACjD;IAED,0CAAgB,GAAhB,UAAiB,KAAK;QACpB,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAM,MAAM,GAAG,EAAE,CAAC;;YAClB,KAAmB,IAAA,UAAAA,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;;oBACb,KAAsB,IAAA,KAAAA,SAAA,IAAI,CAAC,IAAI,CAAA,gBAAA;wBAA1B,IAAM,OAAO,WAAA;wBAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;qBAC9B;;;;;;;;;aACF;;;;;;;;;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;;KACxC;IAED,wCAAc,GAAd,UAAe,KAAK;QAClB,IAAM,QAAQ,GAAG,EAAE,CAAC;;YACpB,KAAmB,IAAA,UAAAA,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;gBACb,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAClC,CAAC,CAAC;aACJ;;;;;;;;;QACD,OAAO,QAAQ,CAAC;;KACjB;IAED,sCAAY,GAAZ,UAAa,GAAG,EAAE,UAAU;QAC1B,IACE,GAAG,CAAC,QAAQ;YACZ,GAAG,CAAC,QAAQ,CAAC,MAAM;YACnB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,OACpD,EAAE;YACA,IAAM,OAAO,GAAGL,MAAQ,CACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EACpC,UAAC,CAAM;gBACL,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;aACvB,CACF,CAAC;YAEF,IAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC;gBAClC,OAAO,CAAC,CAAC,MAAM,CAAC;aACjB,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBACtD,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI;oBAChC,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;aACJ;iBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;oBACzB,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI;wBAChC,YAAY,EAAE,OAAO;qBACtB,CAAC,CAAC;iBACJ;qBAAM;oBACL,UAAU,CAAC,IAAI,CAAC;wBACd,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;wBACpD,YAAY,EAAE,OAAO;qBACtB,CAAC,CAAC;iBACJ;aACF;SACF;KACF;IAED,yCAAe,GAAf,UAAgB,KAAK;QACnB,IAAI,OAAO,GAAG,EAAE,CAAC;;YACjB,KAAqB,IAAA,KAAAK,SAAA,KAAK,CAAC,YAAY,CAAA,gBAAA;gBAAlC,IAAM,MAAM,WAAA;gBACf,IAAI,KAAK,GAAQ,EAAE,CAAC;gBACpB,IAAI,MAAM,CAAC,KAAK,YAAY,MAAM,EAAE;oBAClC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC3B;qBAAM,IAAI,MAAM,CAAC,KAAK,EAAE;oBACvB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;iBACtB;qBAAM,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChE,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;iBACvC;gBACD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;aACpD;;;;;;;;;QACD,OAAO,OAAO,CAAC;;KAChB;IAED,uCAAa,GAAb,UAAc,IAAI,EAAE,KAAK;QACvB,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAM,GAAG,IAAI,KAAK,EAAE;YACvB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC7B,IAAM,aAAa,GAAQU,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;oBACzD,GAAG,EAAE,GAAG;iBACT,CAAC,CAAC;gBACH,IAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9B,IAAI,UAAU,YAAY,MAAM,EAAE,CACjC;qBAAM,IAAI,UAAU,KAAK,EAAE,EAAE;oBAC5B,OAAO,CACL,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,GAAG,GAAG,GAAG,UAAU,CAChE,GAAG,UAAU,CAAC;iBAChB;aACF;SACF;QACD,OAAO,OAAO,CAAC;KAChB;IAED,gDAAsB,GAAtB,UAAuB,IAAI,EAAE,UAAU;QACrC,IAAM,aAAa,GAAG,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;gBAC1B,KAAoB,IAAA,KAAAV,SAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAA,gBAAA;oBAArC,IAAM,KAAK,WAAA;oBACd,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;qBACnC,CAAC,CAAC;iBACJ;;;;;;;;;SACF;QACD,IAAM,cAAc,GAAG,EAAE,CAAC;;YAC1B,KAAoB,IAAA,KAAAA,SAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,gBAAA;gBAAtC,IAAM,KAAK,WAAA;gBACd,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;aACjE;;;;;;;;;QACD,IAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACxE,IAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACvE,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;QAClE,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;;gBACvD,KAAgB,IAAA,eAAAA,SAAA,UAAU,CAAA,sCAAA;oBAArB,IAAM,CAAC,uBAAA;oBACV,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACpB;;;;;;;;;YACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;aAC9D;SACF;aAAM;YACL,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SAC9D;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAC5B,KAAgB,IAAA,kBAAAA,SAAA,aAAa,CAAA,4CAAA;oBAAxB,IAAM,CAAC,0BAAA;oBACV,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACpB;;;;;;;;;SACF;;KACF;IAED,6CAAmB,GAAnB,UAAoBY,QAAK,EAAE,MAAM;QAC/B,IAAM,MAAM,GAAGA,QAAK,CAAC,MAAM,CAAC,UAAU,GAAG;YACvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI;gBAChC,OAAOC,OAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACzC,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;KACf;IAED,2CAAiB,GAAjB,UAAkB,OAAO,EAAE,YAAY;QACrC,IAAM,UAAU,GAAG,EAAE,CAAC;;YACtB,KAAkB,IAAA,YAAAb,SAAA,OAAO,CAAA,gCAAA;gBAApB,IAAM,GAAG,oBAAA;gBACZ,IAAM,YAAY,GAAG,EAAE,CAAC;;gBAExB,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;oBACzB,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;iBACvD;gBACD,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;;aAExE;;;;;;;;;QACD,OAAO,UAAU,CAAC;;KACnB;IAED,+CAAqB,GAArB,UAAsB,OAAO;QAC3B,IAAM,UAAU,GAAG,EAAE,CAAC;;YACtB,KAAgB,IAAA,YAAAA,SAAA,OAAO,CAAA,gCAAA;gBAAlB,IAAM,CAAC,oBAAA;gBACV,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACjD;;;;;;;;;QACD,OAAO,UAAU,CAAC;;KACnB;IAED,sCAAY,GAAZ,UAAa,QAAgB;QAC3B,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACpD;IAED,oCAAU,GAAV,UAAW,GAAG,EAAE,UAAU;QACxB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;YACtC,IAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;gBACpD,KAAK,EACH,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,MAAM;oBACxD,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;sBAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;sBACpC,GAAG,CAAC,OAAO,CAAC,KAAK;aACxB,CAAC;YAEF,IACE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,eAAe;gBACjE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,UAAU;gBAC5D,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,cACpD,EAAE;gBACA,IAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,EAC3C,GAAG,CAAC,OAAO,CAAC,KAAK,CAClB,CAAC;gBACF,IAAI,GAAG,CAAC,YAAY,EAAE;oBACpB,IAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAC,CAAC;wBAC3C,OAAO;4BACL,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;yBACxD,CAAC;qBACH,CAAC,CAAC;oBACH,IAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC;wBACjC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;qBACrB,CAAC,CAAC;oBACH,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CACzC,aAAa,EACb,aAAa,CACd,CAAC;oBACF,IAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;oBACtE,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBAC1D,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;iBACnD;qBAAM;oBACL,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;iBACnD;aACF;iBAAM;gBACL,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,QAAQ,EAAE;oBAC1D,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;iBAC9D;qBAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE;oBAC3D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC3B;aACF;SACF;KACF;IAED,2CAAiB,GAAjB,UAAkB,IAAI,EAAE,UAAU;QAChC,IAAI,UAAe,CAAC;QACpB,IAAI,SAAc,CAAC;;QAGnB,KAAK,IAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IACG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAC3D,QAAQ,KAAK,OAClB,EAAE;gBACA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC/B;YAED,IACG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe;iBAC3D,QAAQ,KAAK,aAClB,EAAE;gBACA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC9B;SACF;QAED,IAAI,UAAU,EAAE;;YAEd,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;;YAGxC,IAAM,cAAc,GAClB,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;YACxE,IACE,cAAc;iBACb,CAAC,cAAc,CAAC,OAAO;oBACtB,cAAc,CAAC,OAAO;wBACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;qBAC7C,UAAU,CAAC,YAAY;wBACtB,cAAc,CAAC,IAAI,KAAK,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAC9D,EAAE;gBACA,IACE,SAAS,CAAC,YAAY;oBACtB,SAAS,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,YAAY,CAAC,KACrD,EAAE;oBACA,cAAc,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;iBACtD;aACF;SACF;KACF;IAED,sDAA4B,GAA5B,UAA6B,MAAM,EAAE,UAAU;;YAC7C,KAAoB,IAAA,WAAAA,SAAA,MAAM,CAAA,8BAAA;gBAArB,IAAM,KAAK,mBAAA;gBACd,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACrD;;;;;;;;;;KACF;IAED,kDAAwB,GAAxB,UAAyB,MAAM,EAAE,UAAU;;YACzC,KAAoB,IAAA,WAAAA,SAAA,MAAM,CAAA,8BAAA;gBAArB,IAAM,KAAK,mBAAA;gBACd,IAAI,KAAK,CAAC,KAAK,YAAY,MAAM,EAAE;oBACjC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC9B;qBAAM;oBACL,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxB;aACF;;;;;;;;;;KACF;IAED,yCAAe,GAAf,UAAgB,QAAQ,EAAE,YAAY,EAAE,UAAU;QAChD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE;YACtD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/D;aAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE;YAC9D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACxE;KACF;IAED,iCAAO,GAAP,UAAQ,KAAK;QACX,IACE,KAAK,KAAK,EAAE;YACZ,KAAK,KAAK,IAAI;YACd,KAAK,KAAK,SAGZ,EAAE;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,kCAAQ,GAAR,UAAS,CAAC,EAAE,IAAK;QACf,IAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,QAAQ,EAAE;YACd,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,EAAE;gBAC/B,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,CAAC,CAAC,QAAQ,YAAY,MAAM,EAAE;gBAChC,KAAK,IAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE;oBAC5B,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBAClC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa;4BAC5C,KAAK,MAAM;gCACT,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC5C,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,IAAI;oCACV,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK;iCACtC,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,SAAS;gCACZ,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC/C,SAAS,CAAC,IAAI,CAAC;oCACb,OAAO,EAAE,OAAO;oCAChB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACrB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK;iCACtC,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,OAAO;gCACV,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC1C,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ;oCAClC,YAAY,EAAE,EAAE;iCACjB,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,WAAW;gCACd,IAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAC1D,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ;oCAClC,YAAY,EAAE,GAAG;iCAClB,CAAC,CAAC;gCACH,MAAM;4BACR;gCACE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAChC,MAAM;yBACT;qBACF;iBACF;aACF;SACF;QACD,OAAO,SAAS,CAAC;KAClB;IAED,4CAAkB,GAAlB,UAAmB,OAAO,EAAE,MAAM;QAChC,IAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;;gBAC7B,KAAoB,IAAA,WAAAA,SAAA,MAAM,CAAA,8BAAA;oBAArB,IAAM,KAAK,mBAAA;oBACd,IAAM,GAAG,GAAG;wBACV,OAAO,EAAE,OAAO;wBAChB,KAAK,EAAE,KAAK;qBACb,CAAC;oBACF,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC1B;;;;;;;;;SACF;QACD,OAAO,cAAc,CAAC;;KACvB;IAED,+BAAK,GAAL,UAAM,IAAI;QACR,QACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAC3C;KACH;IAED,uCAAa,GAAb,UAAc,KAAK;QACjB,IAAM,UAAU,GAAG,EAAE,CAAC;;YACtB,KAAmB,IAAA,UAAAA,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;gBACb,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACpB,KACG,IAAI,CAAC,YAAY;wBAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,OAAO,GAC1D;wBACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBACrC;yBAAM,KACJ,IAAI,CAAC,YAAY;wBAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,KAAK,WAAW,GAC9D;wBACA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBAC/C;yBAAM,IACL,IAAI,YAAY,SAAS;wBACxB,IAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,aAC/C,EAAE;wBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBAC1C;yBAAM;wBACL,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBACnC;iBACF;aACF;;;;;;;;;QACD,OAAO,UAAU,CAAC;;KACnB;;gBA5lBF,UAAU;;;gBAFF,gBAAgB;;IA+lBzB,sBAAC;CAAA;;;ICnmBD;QAEE,mBAAc,GAAG,EAAE,CAAC;QACZ,aAAQ,GAAG,EAAE,CAAC;KAwMvB;IAtMC,+CAAmB,GAAnB,UAAoB,IAAU;QAC5B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;KAC7D;IAED,wCAAY,GAAZ,UAAa,IAAU,EAAE,OAAO;QAC9B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;KAC3D;IAEO,6CAAiB,GAAzB,UAA0B,IAAU;QAClC,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;YACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;SACvD;KACF;IAEO,gDAAoB,GAA5B,UAA6B,UAAU,EAAE,IAAU;QACjD,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gCAC1C,SAAS;YAClB,IAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;YAChD,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,GAAG,CAAC,UAAU,GAAG;oBAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;iBACnC,CAAC,CAAC;aACJ;YAED,KAAK,IAAM,KAAK,IAAI,eAAe,EAAE;gBACnC,IAAI,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;oBACzC,IAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAElE,IAAM,YAAY,GAAG,OAAK,mBAAmB,CAC3C,UAAU,EACV,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC1B,CAAC;oBAEF,IACE,MAAM,CAAC,UAAU,CAAC,KAAK,UAAU;wBACjC,YAAY,CAAC,OAAO,KAAK,EAC3B,EAAE;wBACA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;qBAC5B;oBACD,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;oBACxC,IAAI,YAAY,CAAC,WAAW,KAAK,EAAE,EAAE;wBACnC,OAAO,YAAY,CAAC,WAAW,CAAC;qBACjC;oBACD,IAAI,YAAY,CAAC,IAAI,KAAK,EAAE,EAAE;wBAC5B,OAAO,YAAY,CAAC,IAAI,CAAC;qBAC1B;iBACF;aACF;SACF;;;YAjCD,KAAwB,IAAA,eAAAA,SAAA,UAAU,CAAA,sCAAA;gBAA7B,IAAM,SAAS,uBAAA;wBAAT,SAAS;aAiCnB;;;;;;;;;QAED,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;;KAChE;IAEO,8CAAkB,GAA1B,UAA2B,IAAU;QACnC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACrD,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC;gBACpD,OAAO;oBACL,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;oBACvB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,SAAS,EAAE,CAAC,CAAC,IAAI;oBACjB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU;iBACnC,CAAC;aACH,CAAC,CAAC;YAEH,QAAQ,cAAc,GAAGL,MAAQ,CAAC,cAAc,EAAE,UAAC,KAAU;gBAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE;oBAC7C,OAAO,KAAK,CAAC;iBACd;qBAAM;oBACL,OAAO,IAAI,CAAC;iBACb;aACF,CAAC,EAAE;SACL;aAAM;YACL,OAAO;SACR;KACF;IAEO,2CAAe,GAAvB,UAAwB,IAAI,EAAE,cAAc;QAC1C,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;;YACvC,KAAwB,IAAA,eAAAK,SAAA,UAAU,CAAA,sCAAA;gBAA7B,IAAM,SAAS,uBAAA;gBAClB,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;aACrD;;;;;;;;;;KACF;IAEO,sDAA0B,GAAlC,UAAmC,aAAa,EAAE,OAAO;QACvD,KAAK,IAAM,KAAK,IAAI,aAAa,EAAE;YACjC,IAAI,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACvC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5D;SACF;QACD,OAAO,OAAO,CAAC;KAChB;IAEO,+CAAmB,GAA3B,UAA4B,YAAY,EAAE,cAAc;QACtD,IAAM,KAAK,GAAG;YACZ,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;SAChB,CAAC;QACF,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;QAC7B,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QACtD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC;;QAGpE,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;YACxB,OAAO,KAAK,CAAC,OAAO,CAAC;SACtB;QAED,OAAO,KAAK,CAAC;KACd;IAEO,6CAAiB,GAAzB,UAA0B,cAAc,EAAE,cAAc;QACtD,IAAM,YAAY,GAAG,EAAE,CAAC;QACxB,IAAI,cAAc,EAAE;YAClB,KAAK,IAAM,KAAK,IAAI,cAAc,EAAE;gBAClC,IAAI,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;oBACxC,IAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;oBAC3D,IAAM,aAAa,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;oBAC3D,IAAI,aAAa,KAAK,oBAAoB,EAAE;wBAC1C,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;qBACpD;iBACF;aACF;SACF;;QAED,OAAO,YAAY,CAAC;KACrB;IAEO,+CAAmB,GAA3B,UAA4B,IAAI,EAAE,MAAM;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;;YAC9B,KAAoB,IAAA,WAAAA,SAAA,MAAM,CAAA,8BAAA;gBAArB,IAAM,KAAK,mBAAA;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAM,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;gBACzC,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClC,SAAS,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;gBAClC,SAAS,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;;gBAE7C,KAAK,EAAE,CAAC;aACT;;;;;;;;;;KACF;IAEO,uDAA2B,GAAnC,UAAoC,QAAQ;QAC1C,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,IAAI,QAAQ,CAAC,QAAQ,YAAY,MAAM,EAAE;gBACvC,KAAK,IAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE;oBACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBACzC,QAAQ,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa;4BACnD,KAAK,MAAM;gCACT,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCACzD,MAAM;4BACR,KAAK,SAAS;gCACZ,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCACzD,MAAM;4BACR,KAAK,OAAO;gCACV,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAEzD,MAAM;4BACR,KAAK,WAAW;gCACd,IAAI,QAAQ,CAAC,QAAQ,EAAE;;oCAErB,KAAK,IAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE;wCACpC,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;wCAClD,IACE,QAAQ,CAAC,MAAM;4CACf,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,WAC3B,EAAE;4CACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;yCACnD;qCACF;iCACF;gCACD,MAAM;4BACR;gCACE,MAAM;yBACT;qBACF;iBACF;aACF;SACF;KACF;;gBA1MF,UAAU;;IA2MX,wBAAC;CAAA;;ACpMD,IAAMC,QAAM,GAAG,OAAO,CAAC;AAEvB;IAEE,0BACS,aAAgC,EAChC,UAA2B;QAD3B,kBAAa,GAAb,aAAa,CAAmB;QAChC,eAAU,GAAV,UAAU,CAAiB;KAChC;IAEJ,uCAAY,GAAZ,UAAa,IAAU,EAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAChD;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACjD;KACF;IAED,uCAAY,GAAZ,UAAa,QAAkB,EAAE,OAAO;QACtC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE;YAC7C,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE/C,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;gBAC/B,KAAK,mBAAmB;oBACtB,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE;;wBAEhC,IAAI,CAAC,OAAO,CAAC,QAAQ,CACnBA,QAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,CAC9C,CAAC;wBACF,IAAI,CAAC,YAAY,GAAGA,QAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;qBACnE;oBACD,MAAM;gBACR,KAAK,mBAAmB;oBACtB,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;wBAC5C,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CACzC,EAAE;wBACA,IAAM,eAAa,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC5C,IAAI,eAAa,IAAI,eAAa,CAAC,IAAI,EAAE;;4BAEvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;4BAC1C,UAAU,CAAC;gCACT,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;6BAC3C,CAAC,CAAC;4BACH,IAAI,CAAC,YAAY,GAAG,eAAa,CAAC,IAAI,CAAC;yBACxC;qBACF;oBACD,MAAM;gBACR,KAAK,mBAAmB;oBACtB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;wBACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;qBAC9C;oBACD,MAAM;gBACR;oBACE,MAAM;aACT;SACF,CAAC,CAAC;KACJ;IAED,8CAAmB,GAAnB,UAAoB,IAAU;QAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/C,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEvE,OAAO,OAAO,CAAC;KAChB;IAED,8CAAmB,GAAnB,UAAoB,QAAkB;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI;gBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;gBAChC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EACzB,EAAE;gBACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;oBAC/B,KAAK,mBAAmB;wBACtB,IAAM,SAAS,GAAGA,QAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CACpD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,IAAI,OAAO,CACvD,CAAC;wBACF,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC,MAAM,CAC7C,qBAAqB,CACtB,CAAC;wBACF,MAAM;oBACR,KAAK,mBAAmB;wBACtB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;4BACnD,IAAM,SAAS,GAAG,EAAE,CAAC;4BACrB,SAAS,CAAC,IAAI,CAAC;gCACb,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gCAC5B,aAAa,EAAE,sCAAsC;6BACtD,CAAC,CAAC;4BACH,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC;yBAC3C;wBACD,MAAM;oBACR,KAAK,mBAAmB;wBACtB,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;wBACzC,MAAM;oBACR;wBACE,MAAM;iBACT;aACF;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;KAChB;IAED,4CAAiB,GAAjB,UAAkB,QAAkB;QAClC,IAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;KAChB;IAED,qDAA0B,GAA1B,UAA2B,IAAU,EAAE,OAAO;QAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;SAC3E;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;YAC9C,IAAI,CAAC,2BAA2B,CAC9B,OAAO,EACP,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAC3C,CAAC;SACH;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,uBAAuB,CAC1B,OAAO,EACP,IAAI,CAAC,mBAAmB,CAAC,aAAa,CACvC,CAAC;SACH;KACF;IAED,gDAAqB,GAArB,UAAsB,OAAO,EAAE,WAAmB;QAChD,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;KAClC;IAED,8CAAmB,GAAnB,UAAoB,OAAO,EAAE,SAAiB;QAC5C,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;KAC9B;IAED,sDAA2B,GAA3B,UAA4B,OAAO,EAAE,iBAAyB;QAC5D,OAAO,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC;KAC9C;IAED,6CAAkB,GAAlB,UAAmB,OAAO,EAAE,QAAgB;QAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;KAC5B;IAED,kDAAuB,GAAvB,UAAwB,OAAO,EAAE,aAAqB;QACpD,OAAO,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;KACjC;IAEO,6CAAkB,GAA1B,UAA2B,QAAkB,EAAE,KAAsB;QAArE,iBAqBC;QApBC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;YACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;;YAEnC,KAAK,IAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;oBACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iBAClD;aACF;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;gBAC1B,KAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACvC,CAAC,CAAC;SACJ;KACF;IAEO,2CAAgB,GAAxB,UAAyB,IAAc;QACrC,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM;aACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB;gBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB;gBACjD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CACrD,EAAE;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;;gBA7MF,UAAU;;;gBANF,iBAAiB;gBADjB,eAAe;;IAqNxB,uBAAC;CAAA;;;ICnNC;KAAgB;IAEhB,kDAAmB,GAAnB,UAAoB,IAAU;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChD;IAED,kDAAmB,GAAnB,UAAoB,QAAkB;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI;gBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;gBAChC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;gBACzB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,CAAC,KACrC,EAAE;gBACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,KAAK,IAAI,EAAE;oBAC/D,OAAO,CAAC,IAAI,CAAC;wBACX,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa;wBACjE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;qBAC1B,CAAC,CAAC;iBACJ;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC;wBACX,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa;wBACjE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;qBACnC,CAAC,CAAC;iBACJ;aACF;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;KAChB;IAED,2CAAY,GAAZ,UAAa,IAAU,EAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC3C;IAED,2CAAY,GAAZ,UAAa,QAAkB,EAAE,OAAO;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACpD;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAErD,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,OAAO,CAAC,OAAO,CAAC,UAAC,OAAO;gBACtB,IACE,OAAO,CAAC,aAAa,CAAC,IAAI;oBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,aACvC,EAAE;oBACA,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;wBACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC1C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;wBACvC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;qBACrC;yBAAM;wBACL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;wBAClC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;qBACrC;iBACF;aACF,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAED,sDAAuB,GAAvB,UAAwB,QAAkB;QACxC,IAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;KAChB;IAEO,wDAAyB,GAAjC,UACE,QAAkB,EAClB,KAAsB;QAFxB,iBA8BC;QA1BC,IACE,QAAQ,CAAC,QAAQ,CAAC,MAAM;aACvB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBAClD,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe;gBACjD,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;gBACpD,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,CACxD,EAAE;YACA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;;YAEnC,KAAK,IAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;oBACxC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iBACzD;aACF;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;gBAC1B,KAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC9C,CAAC,CAAC;SACJ;KACF;;gBArGF,UAAU;;;IAsGX,2BAAC;CAAA;;;ICzCC,+BAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;;QAxB9B,gBAAW,GAAG,WAAW,CAAC;QAEnC,UAAK,GAAG,EAAE,CAAC;QACX,UAAK,GAAG,EAAE,CAAC;QACX,YAAO,GAAG,KAAK,CAAC;QAChB,eAAU,GAAG,EAAE,CAAC;QAChB,gBAAW,GAAG,gBAAgB,CAAC;QACrB,SAAI,GAAsB,IAAI,YAAY,EAAO,CAAC;QAE5D,eAAU,GAAG,EAAE,CAAC;;;;QAoIR,oBAAe,GAAG,UAAC,MAAW,KAAO,CAAC;KArHH;IAX3C,sBACW,6CAAU;aADrB;YAEE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;aACD,UAAsB,CAAa;YACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE;gBAC9D,IAAI,CAAC,gCAAgC,EAAE,CAAC;aACzC;SACF;;;OANA;IAUD,wCAAQ,GAAR,eAAa;IAEb,gEAAgC,GAAhC;QAAA,iBAYC;QAXC,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAC,OAAO;YACvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,KAAI,CAAC,KAAK,GAAG,OAAO,CAAC;gBACrB,KAAI,CAAC,WAAW,GAAG,EAAE,CAAC;;gBAEtB,KAAI,CAAC,oBAAoB,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACxD;iBAAM;gBACL,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gBAC/B,KAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aACjB;SACF,CAAC,CAAC;KACJ;IAEM,qCAAK,GAAZ,UAAa,KAAU;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACpB;IACD,sCAAM,GAAN,UAAO,KAAa;QAApB,iBAkBC;QAjBC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,CAC5C,UAAC,MAAM;gBACL,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,IAAM,QAAQ,GAAGa,GAAK,CAAC,KAAI,CAAC,KAAK,EAAEC,KAAO,CAAC,CAAC;oBAC5C,IAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACvC,KAAI,CAAC,KAAK,GAAGC,MAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACxC;gBACD,KAAI,CAAC,WAAW,GAAG,EAAE,CAAC;aACvB,EACD,UAAC,KAAK;gBACJ,KAAI,CAAC,WAAW,GAAG,SAAS,CAAC;aAC9B,CACF,CAAC;SACH;KACF;IAED,oDAAoB,GAApB,UAAqB,KAAK,EAAE,OAAO;QAAnC,iBAkBC;QAjBC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClBnB,IAAM,CAAC,OAAO,EAAE,UAAC,IAAI;YACnB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACxB,UAAU,CAAC;oBACT,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3B,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;iBAC5B,CAAC,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC;aACd;SACF,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,EAAE;;YAEV,UAAU,CAAC;gBACT,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;aACzB,CAAC,CAAC;SACJ;KACF;IAED,yCAAS,GAAT,UAAU,UAAkB;QAC1B,QACE,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;aAC7C,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;gBAC9C,UAAU,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,KAAK,KAAK,EACtB;KACH;;IAGM,0CAAU,GAAjB,UAAkB,KAAU;QAA5B,iBAmBC;QAlBC,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;YACzB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,SAAS,CACnD,UAAC,MAAW;oBACV,KAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtB,UAAU,CAAC;wBACT,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClC,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;qBACnC,CAAC,CAAC;oBACH,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACtB,EACD,UAAC,KAAK;oBACJ,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACtB,CACF,CAAC;aACH;SACF;KACF;;;IAGM,gDAAgB,GAAvB,UAAwB,EAAO;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;;IAGM,iDAAiB,GAAxB,eAA6B;;IAE7B,wCAAQ,GAAR,UAAS,KAAK;QACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;;;KAIhC;IACD,uCAAO,GAAP,UAAQ,KAAK;QACX,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;KAC1B;IACD,wCAAQ,GAAR,UAAS,KAAK;QACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACnC;;gBArKF,SAAS,SAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,0YAgBX;oBACC,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,qBAAqB,GAAA,CAAC;4BACpD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;gBAhCC,SAAS;;;8BAmCR,KAAK;8BACL,KAAK;uBAML,MAAM;0BAGN,SAAS,SAAC,eAAe;6BAGzB,KAAK;;IAiIR,4BAAC;CAAA;;;ICjLD;KAMkC;;gBANjC,QAAQ,SAAC;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC;oBAClD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,SAAS,EAAE,EAAE;iBACd;;IACgC,yBAAC;CAAA;;ACTlC,IAAMI,QAAM,GAAG,OAAO,CAAC;AA0BvB;IAsDE;QANA,qBAAgB,GAAG,KAAK,CAAC;QACzB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,6BAAwB,GAAG,KAAK,CAAC;QACjC,uBAAkB,GAAG,KAAK,CAAC;QAC3B,iBAAY,GAAe,EAAE,CAAC;QAC9B,UAAK,GAAG,EAAE,CAAC;KACK;IAEhB,gDAAQ,GAAR,eAAa;IAEb,mDAAW,GAAX;QAAA,iBA6FC;QA5FC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,CAAC;YACzC,KAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YACvB,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;iBAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;oBAC3C,sCAAsC;oBACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;wBAC1C,sCAAsC,CAC5C,EAAE;;gBAEA,IAAI,CAAC,KAAI,CAAC,gBAAgB,EAAE;oBAC1B,KAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAChC,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,IAAI,UAAU,SAAA,CAAC;oBACf,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;wBAC3D,UAAU;4BACR,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW;iCACvC,8BAA8B,CAAC;qBACrC;oBACD,IAAM,YAAY,GAChB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;oBAC/D,IAAI,UAAU,IAAI,YAAY,EAAE;wBAC9B,IAAM,SAAS,GAAGA,QAAM,CAAC,CAAC,CAAC;6BACxB,OAAO,CAAC,MAAM,CAAC;6BACf,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;6BACb,MAAM,CAAC,YAAY,CAAC,CAAC;wBACxB,IAAM,OAAO,GAAGA,QAAM,CAAC,CAAC,CAAC;6BACtB,KAAK,CAAC,MAAM,CAAC;6BACb,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;6BAClB,MAAM,CAAC,YAAY,CAAC,CAAC;wBACxB,KAAI,CAAC,KAAK,GAAGA,QAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC5C,UAAU;6BACP,kBAAkB,CAAC;4BAClB,SAAS,EAAE,SAAS;4BACpB,OAAO,EAAE,OAAO;4BAChB,KAAK,EAAE,CAAC;4BACR,aAAa,EAAE,YAAY;4BAC3B,UAAU,EAAE,KAAK;4BACjB,OAAO,EAAE,kDAAkD;yBAC5D,CAAC;6BACD,SAAS,CACR,UAAC,IAA2B;4BAC1B,IAAM,KAAK,GAAe,EAAE,CAAC;4BAC7B,IAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;;4BAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCAC1B,IAAM,YAAY,GAAGA,QAAM,CAAC,CAAC,CAAC;qCAC3B,OAAO,CAAC,MAAM,CAAC;qCACf,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;qCACb,MAAM,CAAC,YAAY,CAAC,CAAC;gCACxB,IAAM,YAAY,GAAmB;oCACnC,IAAI,EAAE,YAAY;oCAClB,KAAK,EAAE;wCACL,SAAS,EAAE,CAAC;qCACb;iCACF,CAAC;gCACF,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;6BAC3C;4BAED,IAAM,OAAO,GAAqB,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;;4BAErD,OAAO,CAAC,OAAO,CAAC,UAAC,SAAyB;gCACxC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;6BAC1C,CAAC,CAAC;;4BAEH,SAAS,CAAC,OAAO,CAAC,UAAC,KAAqB,EAAE,GAAW;gCACnD,IAAM,QAAQ,GAAa;oCACzB,IAAI,EAAE,GAAG;oCACT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC;iCAClC,CAAC;gCACF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;6BACtB,CAAC,CAAC;4BACH,KAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BAC/B,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;4BAEjC,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC;yBAC3B,EACD,UAAC,KAAU;4BACT,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;4BACjC,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;4BACrC,KAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;4BAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBACtB,CACF,CAAC;qBACL;yBAAM;wBACL,KAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBAC9B,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;qBACtC;iBACF;aACF;SACF,CAAC,CAAC;KACJ;IAED,uDAAe,GAAf;QACE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;;gBAhKF,SAAS,SAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ,EAAE,yrCAyCX;oBACC,MAAM,EAAE,CAAC,qbAAqb,CAAC;iBAChc;;;;uBAEE,KAAK;;IAkHR,oCAAC;CAAA;;;IChLC;KAAgB;IACT,qDAAoB,GAA3B,UAA4B,KAAU;QACpC,OAAO;KACR;IACM,8CAAa,GAApB,UAAqB,UAAe;QAClC,OAAO;KACR;IACM,2CAAU,GAAjB,UAAkB,IAAS;QACzB,OAAO;KACR;IACM,0CAAS,GAAhB,UAAiB,GAAQ;QACvB,OAAO;KACR;IAEM,+DAA8B,GAArC,UACE,UAAkB,EAClB,MAAW;QAFb,iBAgDC;QA5CC,IAAI,KAAK,CAAC;QACV,IAAI,MAAM,CAAC,KAAK,EAAE;YAChBT,OAAS,CAAC,MAAM,CAAC,KAAK,EAAE,UAAC,IAAI;gBAC3B,IAAM,CAAC,GAAG,KAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,EAAE;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;aACF,CAAC,CAAC;SACJ;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnBA,OAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAC,OAAO;gBACjC,IAAM,CAAC,GAAG,KAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,EAAE;oBACL,KAAK,GAAG,CAAC,CAAC;iBACX;aACF,CAAC,CAAC;SACJ;QAED,IAAI,MAAM,CAAC,SAAS,EAAE;YACpBA,OAAS,CAAC,MAAM,CAAC,SAAS,EAAE,UAAC,QAAQ;gBACnC,IAAI,QAAQ,CAAC,SAAS,EAAE;oBACtB,IAAM,CAAC,GAAG,KAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACpE,IAAI,CAAC,EAAE;wBACL,KAAK,GAAG,CAAC,CAAC;qBACX;iBACF;qBAAM;oBACL,IAAI,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE;wBACpCA,OAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,UAAC,MAAM;4BACjD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;gCACjC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;6BACtB;yBACF,CAAC,CAAC;qBACJ;yBAAM,IAAI,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE;wBACpDA,OAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,UAAC,KAAK;4BACzD,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;gCAChC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;6BACrB;yBACF,CAAC,CAAC;qBACJ;iBACF;aACF,CAAC,CAAC;SACJ;QACD,OAAO,KAAK,CAAC;KACd;IAEM,0CAAS,GAAhB,UAAiB,IAAc;QAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,QAAQ,GAAG,IAAI,CAAC;SACjB;QACD,OAAO,QAAQ,CAAC;KACjB;IAEM,kDAAiB,GAAxB,UAAyB,IAAS,EAAE,QAAoB;QAAxD,iBA4BC;QA3BC,IAAM,SAAS,GAAG,QAAQ,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,MAAM,EAAE;YAC1CA,OAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAC,SAAc;gBACtC,KAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aAC9C,CAAC,CAAC;SACJ;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE;YACpDA,OAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAC,SAAS;gBACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,KAAK,OAAO,EAAE;oBAChDA,OAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAC,KAAK;wBAClC,IAAM,GAAG,GAAG,KAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;wBACrD,IAAI,GAAG,EAAE;4BACP,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACrB;qBACF,CAAC,CAAC;iBACJ;qBAAM,IAAI,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;oBACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;aACF,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;IAEM,uCAAM,GAAb,UAAc,GAAQ;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACnB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;IACM,4CAAW,GAAlB,UAAmB,aAAqB;QACtC,IAAM,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,IAAM,MAAM,GAAG;YACb,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;SACN,CAAC;QACF,IAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACzB,IAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAM,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAM,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE;YAC3B,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;SACxC;aAAM;YACL,IAAI;gBACF,IAAI;oBACJ,GAAG;oBACH,KAAK;oBACL,GAAG;oBACH,IAAI;oBACJ,GAAG;oBACH,IAAI;oBACJ,GAAG;oBACH,GAAG;oBACH,MAAM;oBACN,QAAQ,CAAC;SACZ;QACD,OAAO,IAAI,CAAC;KACb;;gBAxJF,UAAU;;;IAyJX,6BAAC;CAAA;;;ICkCC,kCACU,sBAA8C,EAC9C,WAAwB;QADxB,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,gBAAW,GAAX,WAAW,CAAa;KAC9B;IApBJ,sBAAa,0CAAI;aAAjB,UAAkB,QAAkB;YAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;;;OAAA;IAED,sBAAoB,4CAAM;aAA1B,UAA2B,MAAW;YACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB;;;OAAA;IAED,sBAAoB,+CAAS;aAA7B,UAA8B,GAAQ;YACpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAChB;;;OAAA;IACD,sBAAa,0CAAI;aAAjB,UAAkB,IAAS;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAClE;;;OAAA;IAOD,mDAAgB,GAAhB,UAAiB,KAAK;QACpB,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAM,MAAM,GAAG,EAAE,CAAC;;YAClB,KAAmB,IAAA,UAAAQ,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;gBACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;;;;;;;;;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;;KACxC;IACM,2CAAQ,GAAf;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAClB;QACD,IACE,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,KAAK,MAC3C,EAAE;YACA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAClC,CAAC;SACH;aAAM,IACL,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,KAAK,eAC3C,EAAE;YACA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAClC,CAAC;SACH;aAAM;YACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC;SACrD;KACF;IAEM,oDAAiB,GAAxB,UAAyB,IAAS;QAChC,IAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;KAClB;IAEM,mDAAgB,GAAvB,UAAwB,IAAc;QACpC,IAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC;KACjB;IAEM,gDAAa,GAApB,UAAqB,aAAqB;QACxC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YACrC,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;IAED,2CAAQ,GAAR,UAAS,CAAC,EAAE,IAAK;QACf,IAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,QAAQ,EAAE;YACd,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,EAAE;gBAC/B,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,CAAC,CAAC,QAAQ,YAAY,MAAM,EAAE;gBAChC,KAAK,IAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE;oBAC5B,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBAClC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa;4BAC5C,KAAK,MAAM;gCACT,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC5C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gCAC/B,MAAM;4BACR,KAAK,SAAS;gCACZ,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC/C,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gCACrC,MAAM;4BACR,KAAK,OAAO;gCACV,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC1C,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ;oCAClC,YAAY,EAAE,EAAE;iCACjB,CAAC,CAAC;gCACH,MAAM;4BACR,KAAK,WAAW;gCACd,IAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAC1D,SAAS,CAAC,IAAI,CAAC;oCACb,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ;oCAClC,YAAY,EAAE,GAAG;iCAClB,CAAC,CAAC;gCACH,MAAM;4BACR;gCACE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAChC,MAAM;yBACT;qBACF;iBACF;aACF;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;aAC/B;SACF;QACD,OAAO,SAAS,CAAC;KAClB;IAED,iDAAc,GAAd,UAAe,KAAK;QAClB,IAAM,QAAQ,GAAG,EAAE,CAAC;;YACpB,KAAmB,IAAA,UAAAA,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;gBACb,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAClC,CAAC,CAAC;aACJ;;;;;;;;;QACD,OAAO,QAAQ,CAAC;;KACjB;;gBA1SF,SAAS,SAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,k/KA2JX;oBACC,MAAM,EAAE,CAAC,oRAAoR,CAAC;iBAC/R;;;gBAjKQ,sBAAsB;gBAHtB,WAAW;;;8BA4KjB,KAAK;kCACL,KAAK;uBACL,KAAK;yBAIL,KAAK;4BAIL,KAAK;uBAGL,KAAK;;IAuHR,+BAAC;CAAA;;ACzSD,IAAMC,QAAM,GAAG,OAAO,CAAC;AAEvB;IAeE,mCACU,sBAA8C,EAC9C,eAAgC,EAChC,WAAwB;QAFxB,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,oBAAe,GAAf,eAAe,CAAiB;QAChC,gBAAW,GAAX,WAAW,CAAa;QAV3B,sBAAiB,GAAQ;YAC9B,SAAS,EAAE;gBACT,KAAK,EAAE,EAAE;aACV;YACD,OAAO,EAAE,EAAE;SACZ,CAAC;KAME;IAEJ,4CAAQ,GAAR,UACE,KAAU,EACV,IAAU,EACV,iBAA2B,EAC3B,SAAe;QAEf,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,eAAe,GAAG,EAAE,CAAC;;YAEzB,KAAmB,IAAA,UAAAD,SAAA,KAAK,CAAA,4BAAA;gBAAnB,IAAM,IAAI,kBAAA;gBACb,IAAI,iBAAiB,EAAE;oBACrB,eAAe,GAAG,eAAe,CAAC,MAAM,CACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CACpD,CAAC;iBACH;qBAAM;;wBACL,KAAuB,IAAA,KAAAA,SAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAA,gBAAA;4BAAlD,IAAM,QAAQ,WAAA;4BACjB,IACE,IAAI,CAAC,KAAK;gCACR,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK;gCACrD,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAC3C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAExC,EAAE;gCACA,OAAO,CAAC,IAAI,CAAC;oCACX,KAAK,EAAE,cAAc;oCACrB,KAAK,EAAE;wCACL,MAAM,EAAE,CAAC,GAAG,CAAC;wCACb,UAAU,EAAE,CAAC;wCACb,kBAAkB,EAAE,CAAC;wCACrB,IAAI,EAAE;4CACJ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;4CAC5C;gDACE;oDACE,KAAK,EAAE,cAAc;oDACrB,KAAK,EAAE;wDACL,MAAM,EAAE,CAAC,GAAG,CAAC;wDACb,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;qDACzD;oDACD,MAAM,EAAE,WAAW;oDACnB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;iDACrB;6CACF;yCACF;qCACF;oCACD,MAAM,EAAE;wCACN,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI;4CAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;yCAC5D;wCACD,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI;4CAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;yCAC9D;wCACD,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI;4CAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;kDAC1C,MAAM;kDACN,MAAM,CAAC;yCACZ;wCACD,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI;4CAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;kDAC1C,MAAM;kDACN,MAAM,CAAC;yCACZ;qCACF;iCACF,CAAC,CAAC;6BACJ;yBACF;;;;;;;;;iBACF;aACF;;;;;;;;;QACD,OAAO,iBAAiB,GAAG,eAAe,GAAG,OAAO,CAAC;;KACtD;IAED,+CAAW,GAAX,UAAY,QAAa,EAAE,IAAU,EAAE,OAAY,EAAE,SAAc;QAAnE,iBAkCC;QAjCC,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,IAAI,SAAS,GAA2B,EAAE,CAAC;QAE3C,QAAQ,CAAC,GAAG,CAAC,UAAC,CAAC;YACb,IAAI,KAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACzD,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC1B;SACF,CAAC,CAAC;;YAEH,KAAsB,IAAA,qBAAAA,SAAA,gBAAgB,CAAA,kDAAA;gBAAjC,IAAM,OAAO,6BAAA;gBAChB,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;aAC1E;;;;;;;;;QAED,IAAI,OAAO,IAAI,SAAS,EAAE;;gBACxB,KAAsB,IAAA,qBAAAA,SAAA,gBAAgB,CAAA,kDAAA;oBAAjC,IAAM,OAAO,6BAAA;oBAChB,OAAO,CAAC,IAAI,CAAC;wBACX;4BACE,KAAK,EAAE;gCACL,MAAM,EAAE,CAAC,GAAG,CAAC;gCACb,IAAI,EAAE;oCACJ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;oCAClD,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;iCACxD;6BACF;4BACD,MAAM,EAAE,WAAW;yBACpB;qBACF,CAAC,CAAC;iBACJ;;;;;;;;;YACD,OAAO,OAAO,CAAC;SAChB;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;;KACF;IAEO,wDAAoB,GAA5B,UACE,cAAmB,EACnB,SAAc,EACd,IAAU;QAEV,IAAI,cAAc,EAAE;YAClB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE;oBACJ,MAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,gBAAgB,KAC9C,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,OAC5D;oBACH,EAAE,IAAI,EAAE,KAAG,cAAgB,EAAE,IAAI,EAAE,IAAI,EAAE;iBAC1C;gBACD,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;SACJ;KACF;;IAGD,wDAAoB,GAApB,UAAqB,OAAY;QAC/B,IAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;;YAE5C,KAAmB,IAAA,YAAAA,SAAA,OAAO,CAAA,gCAAA;gBAArB,IAAM,IAAI,oBAAA;gBACb,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,eAAe,EAAE;oBACnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CACzB,CAAC;oBACF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;wBAC7B,IAAI,IAAI,CAAC,gBAAgB,EAAE;4BACzB,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAC/D,CAAC;yBACH;qBACF;iBACF;aACF;;;;;;;;;QACD,OAAO,SAAS,CAAC;;KAClB;;IAGD,kDAAc,GAAd,UAAe,OAAY,EAAE,SAAgB,EAAE,IAAU;QACvD,IAAM,SAAS,GAAG;YAChB,KAAK,EAAE,EAAE;SACV,CAAC;QAEF,IAAI,cAAc,GAAG,EAAE,CAAC;gCAEb,IAAI;YACb,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa;gBACjC,KAAK,OAAO;oBACV,IAAI,IAAI,CAAC,YAAY,EAAE;wBACrB,SAAS,CAAC,KAAK,CAAC,IAAI,CAClB,OAAK,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CACxD,CAAC;qBACH;oBACD,MAAM;gBAER,KAAK,WAAW;oBACd,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACjB,IAAM,YAAY,GAAG,EAAE,CAAC;wBACxB,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAC3C,UAAC,GAAG,IAAK,OAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAA,CAC5B,CAAC;wBAEF,IAAI,MAAM,EAAE;4BACV,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAC1B,SAAS,CAAC,KAAK,CAAC,IAAI,CAClB,OAAK,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CACtD,CAAC;yBACH;qBACF;oBACD,MAAM;gBAER,KAAK,WAAW;oBACd,IAAI,IAAI,CAAC,YAAY,EAAE;wBACrB,SAAS,CAAC,KAAK,CAAC,IAAI,CAClB,OAAK,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CACxD,CAAC;qBACH;oBACD,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAK,gBAAgB,GAAG,OAAK,WAAW,CAAC,WAAW,CAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CACzB,CAAC;;wBACF,KAAkB,IAAA,cAAAA,SAAA,SAAS,CAAA,oCAAA;4BAAtB,IAAM,GAAG,sBAAA;4BACZ,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gCACpC,OAAK,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;6BACvD;yBACF;;;;;;;;;oBACD,MAAM;gBAER;oBACE,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,IAAI,MAAM,EAAE;wBACV,cAAc,GAAG,OAAK,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;wBACjD,OAAK,oBAAoB,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;qBAC5D;aACJ;;;;;YAnDH,KAAmB,IAAA,YAAAA,SAAA,OAAO,CAAA,gCAAA;gBAArB,IAAM,IAAI,oBAAA;wBAAJ,IAAI;aAoDd;;;;;;;;;QAED,OAAO,SAAS,CAAC;;KAClB;IAED,gDAAY,GAAZ,UAAa,MAAW,EAAE,IAAU,EAAE,YAAsB;QAA5D,iBAsCC;QArCC,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CACpE,MAAM,EACN,IAAI,CAAC,MAAM,CACZ,CAAC;gBACF,IAAI,CAAC,YAAY,EAAE;oBACjB,IAAI,GAAG,EAAE;wBACP,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;qBAC1B;yBAAM;wBACL,OAAO,MAAM,CAAC;qBACf;iBACF;qBAAM;oBACL,OAAO,GAAG,CAAC;iBACZ;aACF;iBAAM,IAAIJ,OAAS,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAM,KAAG,GAAG,EAAE,CAAC;gBACfJ,OAAS,CAAC,MAAM,EAAE,UAAC,IAAI;oBACrB,KAAG,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC/C,CAAC,CAAC;gBACH,OAAO,KAAG,CAAC,QAAQ,EAAE,CAAC;aACvB;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC9B,IAAI,CAAC,YAAY,EAAE;oBACjB,OAAO,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACxD;qBAAM;oBACL,OAAO,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACxD;aACF;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACrC,IAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAC;gBAEpE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,OAAO,MAAM,CAAC;aACf;iBAAM;gBACL,OAAO,MAAM,CAAC;aACf;SACF;KACF;IAED,yDAAqB,GAArB,UAAsB,IAAU;QAAhC,iBAsFC;QArFC,IAAM,cAAc,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;QACpD,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5C,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,aAAa,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAC,SAAS;YAC/C,IAAI,SAAS,EAAE;gBACb,IAAM,aAAa,GAAG;oBACpB,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,KAAI,CAAC,QAAQ,CACpB,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5C,IAAI,EACJ,KAAK,EACL,SAAS,CACV;oBACD,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,QAAQ,EAAE,CAAC;yBACZ;wBACD,MAAM,EAAE;4BACN,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;yBACxB;wBACD,UAAU,EAAE;4BACV,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACrB;wBACD,WAAW,EAAE;4BACX,KAAK,EAAE,SAAS;yBACjB;wBACD,YAAY,EAAE;4BACZ,KAAK,EAAE,KAAK;4BACZ,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE;4BACN,SAAS,EAAE,QAAQ;4BACnB,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,IAAI;yBACX;wBACD,MAAM,EAAE;4BACN,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACrB;wBACD,UAAU,EAAE;4BACV,KAAK,EAAE,SAAS;4BAChB,QAAQ,EAAE,CAAC;yBACZ;wBACD,YAAY,EAAE;4BACZ,QAAQ,EAAE,EAAE;4BACZ,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACrB;wBACD,WAAW,EAAE;4BACX,SAAS,EAAE,SAAS;4BACpB,KAAK,EAAE,CAAC,MAAM,CAAC;4BACf,WAAW,EAAE,MAAM;4BACnB,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACrB;wBACD,cAAc,EAAE;4BACd,SAAS,EAAE,SAAS;4BACpB,KAAK,EAAE,CAAC,MAAM,CAAC;4BACf,QAAQ,EAAE,CAAC;4BACX,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACrB;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,IAAI;4BACV,KAAK,EAAE,SAAS;yBACjB;qBACF;oBACD,YAAY,EAAE;wBACZ,QAAQ,EAAE,CAAC;qBACZ;iBACF,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACpC;SACF,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;KACvB;IAED,8CAAU,GAAV,UAAW,IAAI;QAAf,iBAsHC;QArHC,IAAM,GAAG,GAAG,OAAO,CAAC;QACpB,IAAI,OAAO,CAAC;QACZ,GAAG,CAAC,GAAG,GAAGyB,GAAW,CAAC;QAEtB,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,YAAY,EAAE;YACtD,OAAO;gBACL,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;SACrE;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,SAAS,CACxC,UAAC,aAAa;YACZ,IAAI,CAACb,OAAS,CAAC,aAAa,CAAC,EAAE;gBAC7B,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;oBAClC,IAAM,MAAM,GAAG,EAAE,CAAC;oBAElB,IAAI,OAAO,CAAC,IAAI,EAAE;wBAChB,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE;gCACJ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;gCACxC,EAAE,IAAI,EAAE,KAAG,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAG,EAAE;6BAC3C;4BACD,KAAK,EAAE,YAAY;yBACpB,CAAC,CAAC;qBACJ;oBAED,IAAI,OAAO,CAAC,GAAG,EAAE;wBACf,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE;gCACJ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;gCACtC,EAAE,IAAI,EAAE,KAAG,OAAO,CAAC,GAAK,EAAE;6BAC3B;4BACD,KAAK,EAAE,YAAY;yBACpB,CAAC,CAAC;qBACJ;oBAED,IAAI,OAAO,CAAC,SAAS,EAAE;wBACrB,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE;gCACJ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE;gCACvC;oCACE,IAAI,EAAKH,QAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAC5C,OAAO,CAAC,GAAG,SACP;iCACP;6BACF;4BACD,KAAK,EAAE,YAAY;yBACpB,CAAC,CAAC;qBACJ;oBAED,IAAI,OAAO,CAAC,GAAG,EAAE;wBACf,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE;gCACJ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE;gCACvC,EAAE,IAAI,EAAE,KAAG,OAAO,CAAC,GAAK,EAAE;6BAC3B;4BACD,KAAK,EAAE,YAAY;yBACpB,CAAC,CAAC;qBACJ;oBAED,IAAI,OAAO,CAAC,GAAG,EAAE;wBACf,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE;gCACJ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE;gCAC3C,EAAE,IAAI,EAAE,KAAG,OAAO,CAAC,GAAK,EAAE;6BAC3B;4BACD,KAAK,EAAE,YAAY;yBACpB,CAAC,CAAC;qBACJ;oBAED,aAAa,CAAC,MAAM,GAAG;wBACrB,KAAK,EAAE,QAAQ;wBACf,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,MAAM,CAAC;yBACf;wBACD,MAAM,EAAE,WAAW;qBACpB,CAAC;iBACH;gBAED,aAAa,CAAC,MAAM,GAAG,UAAC,WAAW,EAAE,SAAS;oBAC5C,OAAO;wBACL,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;wBACrB,KAAK,EAAE;4BACL,IAAI,EAAE;gCACJ;oCACE;wCACE,IAAI,EACF,gFAAgF;4CAChF,+DAA+D;wCACjE,KAAK,EAAE,cAAc;qCACtB;oCACD,EAAE;iCACH;gCACD;oCACE;wCACE,IAAI,EAAE,kBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAI;wCAChD,KAAK,EAAE,WAAW;qCACnB;oCACD;wCACE,IAAI,EAAK,WAAW,CAAC,QAAQ,EAAE,YAAO,SAAW;wCACjD,KAAK,EAAE,YAAY;qCACpB;iCACF;6BACF;yBACF;wBACD,MAAM,EAAE,WAAW;qBACpB,CAAC;iBACH,CAAC;gBAEF,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACtC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;aAC5C;SACF,EACD,UAAC,KAAK;YACJ,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC/B,CACF,CAAC;KACH;IAED,0CAAM,GAAN,UAAO,GAAQ;QACb,OAAOA,QAAM,CAAC,GAAG,EAAEA,QAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;KACrD;IAED,0CAAM,GAAN,UAAO,KAAa;QAClB,QACE,KAAK,CAAC,MAAM,KAAK,EAAE;YACnB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACzB;KACH;IAED,4CAAQ,GAAR,UAAS,GAAG;QACV,OAAO,GAAG,CAAC,OAAO,CAChB,QAAQ,EACR,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAA,CAC7D,CAAC;KACH;;gBAjfF,UAAU,SAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;gBAjBQ,sBAAsB;gBADtB,eAAe;gBAEf,WAAW;;;oCALpB;CAqgBC;;;ICjeC,qCACU,UAA4B,EAC5B,yBAAoD;QADpD,eAAU,GAAV,UAAU,CAAkB;QAC5B,8BAAyB,GAAzB,yBAAyB,CAA2B;KAC1D;IAVJ,sBAAoB,6CAAI;aAAxB,UAAyB,IAAI;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;;;OAAA;IACD,sBAAoB,kDAAS;aAA7B,UAA8B,GAAG;YAC/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SACjB;;;OAAA;IAOD,8CAAQ,GAAR,eAAa;IAEb,gDAAU,GAAV;QACE,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvD;;gBAtCF,SAAS,SAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,6TAaX;oBACC,MAAM,EAAE,CAAC,4EAA4E,CAAC;iBACvF;;;gBArBQ,gBAAgB;gBAEhB,yBAAyB;;;uBAwB/B,KAAK;4BAGL,KAAK;;IAcR,kCAAC;CAAA;;;ICnBC;;QAJO,eAAU,GAAQ,EAAE,CAAC;KAIZ;IAdhB,sBAAoB,4CAAM;aAA1B,UAA2B,MAAW;YACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB;;;OAAA;IACD,sBAAoB,2CAAK;aAAzB,UAA0B,KAAK;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;;;OAAA;IACD,sBAAoB,gDAAU;aAA9B,UAA+B,UAAe;YAC5C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;SAC/B;;;OAAA;IAQD,2CAAQ,GAAR;QACE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9B;IACM,yCAAM,GAAb,UAAc,KAAa;QACzB,IACE,KAAK,CAAC,MAAM,KAAK,EAAE;YACnB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAC1B,EAAE;YACA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;;IAGM,6CAAU,GAAjB,UAAkB,CAAM,EAAE,YAAsB;QAAhD,iBAuCC;QAtCC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;YACzB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAClB,IAAI,CAAC,YAAY,EAAE;oBACjB,IAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,8BAA8B,CACzD,CAAC,EACD,IAAI,CAAC,OAAO,CACb,CAAC;oBACF,IAAI,GAAG,EAAE;wBACP,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;qBACrC;yBAAM;wBACL,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;qBACrB;iBACF;qBAAM;oBACL,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CACpD,CAAC,EACD,IAAI,CAAC,OAAO,CACb,CAAC;iBACH;aACF;iBAAM,IAAIL,OAAS,CAAC,CAAC,CAAC,EAAE;gBACvB,IAAM,KAAG,GAAG,EAAE,CAAC;gBACfJ,OAAS,CAAC,CAAC,EAAE,UAAC,EAAE;oBACd,KAAG,CAAC,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBACrC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,KAAG,CAAC;aACvB;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,YAAY,EAAE;oBACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACnD;qBAAM;oBACL,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACxC;aACF;iBAAM;gBACL,IAAI,CAAC,YAAY,EAAE;oBACjB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;iBACrB;qBAAM;oBACL,OAAO,CAAC,CAAC;iBACV;aACF;SACF;KACF;IAEM,yCAAM,GAAb,UAAc,GAAW;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC0B,QAAU,CAAC,GAAG,CAAC,CAAC;KACzD;;gBApFF,SAAS,SAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,MAAM,EAAE,CAAC,0HAA0H,CAAC;oBACpI,QAAQ,EAAE,qCAGX;iBACA;;;;yBAEE,KAAK;wBAGL,KAAK;6BAGL,KAAK;;IAsER,+BAAC;CAAA;;AC7ED,IAAM,IAAI,GAAG,eAAQ,CAAC;;IA0CpB,8BAAoB,gBAAwC;QAAxC,qBAAgB,GAAhB,gBAAgB,CAAwB;QAfrD,aAAQ,GAAG,IAAI,CAAC;QAEhB,iBAAY,GAAG,KAAK,CAAC;;;QAWpB,sBAAiB,GAAe,IAAI,CAAC;QACrC,qBAAgB,GAAqB,IAAI,CAAC;KACc;IAXhE,sBACW,4CAAU;aADrB;YAEE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;aACD,UAAsB,CAAa;YACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;;;OAHA;IASD,uCAAQ,GAAR,eAAa;IAEb,sBAAI,uCAAK;;aAAT;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;SACtB;;aAGD,UAAU,CAAM;YACd,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;gBACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;aACnB;SACF;;;OAPA;;IAUM,yCAAU,GAAjB,UAAkB,CAAM;QACtB,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;KACF;IACM,4CAAa,GAApB;QACE,IAAM,EAAE,GAAG,OAAO,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;KACF;;IAGM,+CAAgB,GAAvB,UAAwB,EAAO;QAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC5B;;IAGM,gDAAiB,GAAxB,UAAyB,EAAO;QAC9B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC7B;IAEM,qCAAM,GAAb;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAEM,uCAAQ,GAAf,UAAgB,KAAU;;;;;;;;;;;;;KAazB;IACM,qCAAM,GAAb;QACE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,UAAC,IAAI;YAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;SACnE,CAAC,CAAC;KACJ;;gBApGF,SAAS,SAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,CAAC,EAAE,CAAC;oBACZ,QAAQ,EAAE,wUAUL;oBAEL,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,oBAAoB,GAAA,CAAC;4BACnD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;gBA1BQ,sBAAsB;;;yBA4B5B,KAAK;6BAKL,KAAK;;IAwER,2BAAC;CAAA;;ACxGD,IAAMC,MAAI,GAAG,eAAQ,CAAC;;IAiCpB;QAbO,eAAU,GAAG,IAAI,CAAC;;;QAWjB,sBAAiB,GAAeA,MAAI,CAAC;QACrC,qBAAgB,GAAqBA,MAAI,CAAC;KAClC;IAXhB,sBACW,6CAAU;aADrB;YAEE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;aACD,UAAsB,CAAa;YACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;;;OAHA;IAUD,sBAAI,wCAAK;;aAAT;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;;aAGD,UAAU,CAAM;YACd,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;gBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aACrB;SACF;;;OAPA;;IAUM,0CAAU,GAAjB,UAAkB,CAAM;QAAxB,iBAUC;QATC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;YACzB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAC,GAAG;oBACrD,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aACrB;SACF;KACF;;IAGM,gDAAgB,GAAvB,UAAwB,EAAO;QAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC5B;;IAGM,iDAAiB,GAAxB,UAAyB,EAAO;QAC9B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC7B;IAEM,sCAAM,GAAb;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAEM,wCAAQ,GAAf,UAAgB,KAAU,KAAI;;gBAvE/B,SAAS,SAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,MAAM,EAAE,EAAE;oBACV,QAAQ,EAAE,0EAIT;oBACD,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,qBAAqB,GAAA,CAAC;4BACpD,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF;;;;yBAEE,KAAK;6BAGL,KAAK;;IAoDR,4BAAC;CAAA;;;ICzED;KAkBqC;;gBAlBpC,QAAQ,SAAC;oBACR,YAAY,EAAE;wBACZ,wBAAwB;wBACxB,2BAA2B;wBAC3B,wBAAwB;wBACxB,oBAAoB;wBACpB,qBAAqB;qBACtB;oBACD,OAAO,EAAE;wBACP,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,gBAAgB;wBAChB,YAAY;qBACb;oBACD,SAAS,EAAE,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;oBAC9D,OAAO,EAAE,CAAC,2BAA2B,EAAE,gBAAgB,CAAC;iBACzD;;IACmC,4BAAC;CAAA;;;IClBrC;QAkCS,WAAM,GAAe,EAAE,CAAC;QAyDvB,aAAQ,GAAG,UAAC,MAAW,KAAO,CAAC;QAC/B,cAAS,GAAG,eAAQ,CAAC;KAC9B;IAzDQ,2CAAQ,GAAf;QAAA,iBAOC;QANC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM;YACrC,IAAI,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1C;YACD,OAAO,MAAM,CAAC;SACf,CAAC,CAAC;KACJ;IAEM,kDAAe,GAAtB,eAA2B;IAEpB,6CAAU,GAAjB,UAAkB,KAAU;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAEM,mDAAgB,GAAvB,UAAwB,EAAoB;QAC1C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAEM,oDAAiB,GAAxB,UAAyB,EAAc;QACrC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAED,sBAAI,2CAAK;aAAT;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACtC;SACF;aAED,UAAU,CAAM;YACd,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBACtD,CAAC,GAAG,EAAE,CAAC;aACR;iBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBAChC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACT;iBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC5B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;aAC5D;SACF;;;OAVA;IAYM,4CAAS,GAAhB,UAAiB,MAAM,EAAE,KAAK;QAA9B,iBAYC;QAXC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,CAAC;gBACrB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;oBAC5B,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC1B;aACF,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;;gBAzFF,SAAS,SAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,qUAYX;oBACC,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,wBAAwB,GAAA,CAAC;4BACvD,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,MAAM,EAAE;wBACN,oFAKC;qBACF;iBACF;;;0BAEE,KAAK;2BACL,KAAK;;IA4DR,+BAAC;CAAA;;;ICnGD;KAK8B;;gBAL7B,QAAQ,SAAC;oBACR,YAAY,EAAE,CAAC,wBAAwB,CAAC;oBACxC,OAAO,EAAE,CAAC,wBAAwB,CAAC;oBACnC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;iBACrC;;IAC4B,qBAAC;CAAA;;ACR9B,IAAMlB,QAAM,GAAG,OAAO,CAAC;AAEvB;IAAA;QAmBS,UAAK,GAAWA,QAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,aAAQ,GAAQ,eAAQ,CAAC;QACzB,cAAS,GAAQ,eAAQ,CAAC;KAoDlC;IAlDQ,yCAAQ,GAAf,eAAoB;IAEb,2CAAU,GAAjB,UAAkB,KAAU;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC1C;IAEM,iDAAgB,GAAvB,UAAwB,EAAO;QAC7B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAEM,kDAAiB,GAAxB,UAAyB,EAAO,KAAU;IAEnC,6CAAY,GAAnB,UAAoB,MAAc;QAChC,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC1B;IAEM,gDAAe,GAAtB,UAAuB,eAAuB;;;;;;QAM5C,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,IAAI,OAAO,eAAe,KAAK,WAAW,IAAI,eAAe,KAAK,IAAI,EAAE,CACvE;aAAM;YACL,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAIA,QAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/D,SAAS,GAAGA,QAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACxD;aAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,SAAS,GAAGA,QAAM,CAAC,eAAe,EAAEA,QAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAC9D,UAAU,CACX,CAAC;SACH;aAAM,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxD,SAAS,GAAGA,QAAM,CAAC,eAAe,EAAEA,QAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAC9D,UAAU,CACX,CAAC;SACH;aAAM,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YACzD,SAAS,GAAGA,QAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACpE;aAAM;YACL,SAAS,GAAGA,QAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACzC;QACD,OAAO,SAAS,CAAC;KAClB;;gBAxEF,SAAS,SAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,4HAMX;oBACC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACZ,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,KAAK,EAAE,IAAI;4BACX,WAAW,EAAE,UAAU,CAAC,cAAM,OAAA,sBAAsB,GAAA,CAAC;yBACtD;qBACF;iBACF;;IAwDD,6BAAC;CAAA;;;ICzED;KAMmC;;gBANlC,QAAQ,SAAC;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC;oBACzD,YAAY,EAAE,CAAC,sBAAsB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,SAAS,EAAE,EAAE;iBACd;;IACiC,0BAAC;CAAA;;;ICHjC;KAAgB;IAEhB,kDAAmB,GAAnB,UAAoB,IAAU;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChD;IAED,kDAAmB,GAAnB,UAAoB,QAAkB;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI;gBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;gBAChC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;gBACzB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,CAAC,KACrC,EAAE;gBACA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC;oBACvD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACvB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;KAChB;IAED,2CAAY,GAAZ,UAAa,IAAU,EAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC3C;IAED,2CAAY,GAAZ,UAAa,QAAkB,EAAE,OAAO;QACtC,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;YACjB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,KAAK;gBACtC,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE;oBAC5D,IAAI,KAAK,EAAE;wBACT,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;qBACrC;yBAAM;wBACL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;qBACrC;iBACF;aACF,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAED,oDAAqB,GAArB,UAAsB,QAAkB;QACtC,IAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;KAChB;IAEO,qDAAsB,GAA9B,UAA+B,QAAkB,EAAE,KAAsB;QAAzE,iBAwBC;QAvBC,IACE,QAAQ,CAAC,QAAQ,CAAC,MAAM;YACxB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,eACpC,EAAE;YACA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;;YAEnC,KAAK,IAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;oBACxC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iBACtD;aACF;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,IAAI,GAAG,QAAqB,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;gBAC1B,KAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC3C,CAAC,CAAC;SACJ;KACF;;gBAjFF,UAAU;;;IAkFX,2BAAC;CAAA;;;IC7CD;KA6D+B;;gBA7D9B,QAAQ,SAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;;wBAEd,YAAY;wBACZ,oBAAoB;wBACpB,kBAAkB;;wBAElB,sBAAsB;wBACtB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,uBAAuB;wBACvB,mBAAmB;wBACnB,YAAY;qBACb;oBACD,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,oBAAoB;wBACpB,6BAA6B;wBAC7B,wBAAwB;wBACxB,sBAAsB;wBACtB,WAAW;qBACZ;oBACD,SAAS,EAAE;wBACT,WAAW;wBACX,kBAAkB;wBAClB,iBAAiB;wBACjB,iBAAiB;wBACjB,sBAAsB;wBACtB,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,4BAA4B;wBAC5B,kBAAkB;wBAClB,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,uBAAuB;wBACvB,gBAAgB;wBAChB,eAAe;wBACf,gBAAgB;wBAChB,oBAAoB;wBACpB,iBAAiB;wBACjB,gBAAgB;wBAChB,oBAAoB;qBACrB;oBACD,OAAO,EAAE;wBACP,qBAAqB;wBACrB,oBAAoB;wBACpB,sBAAsB;wBACtB,oBAAoB;wBACpB,qBAAqB;wBACrB,uBAAuB;wBACvB,mBAAmB;qBACpB;iBACF;;IAC6B,sBAAC;CAAA;;;ICnG7B,cAAY,GAAW,EAAE,KAAU;QACjC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IACH,WAAC;CAAA;;ICTW,aAMX;AAND,WAAY,aAAa;IACvB,iDAAI,CAAA;IACJ,iDAAI,CAAA;IACJ,uDAAO,CAAA;IACP,qDAAM,CAAA;IACN,yDAAQ,CAAA;CACT,EANW,aAAa,KAAb,aAAa,QAMxB;;ACND;;GAEG;;ACFH;;GAEG;;;;"}
1
+ {"version":3,"file":"ampath-kenya-ngx-openmrs-formentry.js.map","sources":["ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/debug-mode.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-errors.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relation.ts","ng://@ampath-kenya/ngx-openmrs-formentry/change-tracking/control-relations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/hider-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-alerts/alert-helpers.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/control-hiders-disablers/disabler-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-node.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/js-expression-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/conditional-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/control-relations.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/expression-runner/expression-runner.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-control.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-group.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-form-array.ts","ng://@ampath-kenya/ngx-openmrs-formentry/abstract-controls-extension/afe-control-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/question-base.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/conditional-answered.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/required.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/min-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/max-date.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/future-date-restriction.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/js-expression-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/validations.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/validators/js-expression.validator.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/utils/messages.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/validation.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/hiders-disablers.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/show-messages.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form-control.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.css.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/data-sources.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-renderer/form-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/error-renderer/error-renderer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-field-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/directives/historical-value-directive.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.style.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/diacritics.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/option-list.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select-dropdown.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/select/select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/secure.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/shared.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/file-upload/file-upload.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-picker/date-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/time-picker/time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/picker-modal/modal.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/pipes/moment.pipe.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/date-time-picker/date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-date-time-picker/ngx-date-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-option.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/afe-ng-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/form-schema-compiler.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/text-area-input-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/ui-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/multi-select-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/interfaces/nested-questions.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/group-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/repeating-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/checkbox.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/time-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/file-upload-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/test-order-question.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/date-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/max-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/min-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/decimal-point-validation.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/data-sources/dummy-data-source.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/services/historical-encounter-data.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/helpers/historical-expression-helper-service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/question.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-factory/form.factory.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs-adapter-helper.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/obs.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/order.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/encounter.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/value-adapters/person-attribute.adapter.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/remote-select/remote-select.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/appointments-overview/appointments-overview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-view/encounter-viewer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-pdf-viewer.service.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-container/encounter-container.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/question-control.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/file-preview.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/display-controls/remote-answer.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/encounter-viewer/encounter-viewer.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/check-box/checkbox.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.component.ts","ng://@ampath-kenya/ngx-openmrs-formentry/components/ngx-time-picker/ngx-time-picker.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/form-entry.module.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/pair.model.ts","ng://@ampath-kenya/ngx-openmrs-formentry/form-entry/question-models/rendering-type.ts","ng://@ampath-kenya/ngx-openmrs-formentry/public_api.ts","ng://@ampath-kenya/ngx-openmrs-formentry/ampath-kenya-ngx-openmrs-formentry.ts"],"sourcesContent":["/*\nThis service checks if the debug mode on ng2-amrs\nhas been enabled by checking cookies.\nIf the debug mode has been enabled then\nit returns true and all fields are displayed\nfor use by testers\n*/\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DebugModeService {\n public cookieKey = 'formDebug';\n\n constructor() {}\n public debugEnabled(): boolean {\n // check if the hidefield\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { AfeFormControl } from '../../public_api';\nimport { AfeFormArray, AfeFormGroup } from '../../abstract-controls-extension';\n\n@Injectable()\nexport class FormErrorsService {\n // Observable string sources\n public static control: AfeFormControl | AfeFormArray | AfeFormGroup = null;\n public static tab: number = null;\n public announceErrorFieldSource = new Subject<string>();\n public announceErrorField$: Observable<\n any\n > = this.announceErrorFieldSource.asObservable();\n public announceErrorField(error: string) {\n this.announceErrorFieldSource.next(error);\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n// import { CanHide } from '../form-entry/control-hiders-disablers/can-hide';\n// import { CanDisable } from '../form-entry/control-hiders-disablers/can-disable';\n\nexport class ControlRelation {\n private _control: AbstractControl;\n private _relatedTo: AbstractControl;\n private _lastUpdateValue: any;\n\n constructor(control: AbstractControl, relatedTo: AbstractControl) {\n this._control = control;\n this._relatedTo = relatedTo;\n this._registerForChangesFromRelatedControl();\n }\n\n get control(): AbstractControl {\n return this._control;\n }\n\n get relatedTo(): AbstractControl {\n return this._relatedTo;\n }\n\n get lastUpdateValue(): any {\n return this._lastUpdateValue;\n }\n\n updateControlBasedOnRelation(newValue: any): boolean {\n if (newValue !== this._lastUpdateValue) {\n this._lastUpdateValue = newValue;\n\n if ((this._control as any).updateCalculatedValue) {\n (this._control as any).updateCalculatedValue();\n }\n\n this._control.updateValueAndValidity();\n if ((this._control as any).updateHiddenState) {\n (this._control as any).updateHiddenState();\n }\n\n if ((this._control as any).updateDisabledState) {\n (this._control as any).updateDisabledState();\n }\n\n if ((this._control as any).updateAlert) {\n (this._control as any).updateAlert();\n }\n return true;\n }\n return false;\n }\n\n private _registerForChangesFromRelatedControl() {\n this._relatedTo.valueChanges.subscribe((value) => {\n this.updateControlBasedOnRelation(value);\n });\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { ControlRelation } from './control-relation';\n\nexport class ControlRelations {\n private _relationFor: AbstractControl;\n private _relations: ControlRelation[];\n private _otherRelations: any = [];\n\n constructor(\n relationFor: AbstractControl,\n relatedTo?: AbstractControl | AbstractControl[]\n ) {\n this._relationFor = relationFor;\n this._relations = [];\n\n if (relatedTo) {\n this.addRelatedControls(relatedTo);\n }\n }\n\n get relationsFor(): AbstractControl {\n return this._relationFor;\n }\n\n get relations(): ControlRelation[] {\n return this._relations;\n }\n\n get otherRelations() {\n return this._otherRelations;\n }\n\n addRelatedControls(relatedTo: AbstractControl | AbstractControl[]) {\n if (relatedTo instanceof AbstractControl) {\n this.relations.push(new ControlRelation(this._relationFor, relatedTo));\n }\n\n if (relatedTo instanceof Array) {\n for (let i = 0; i < relatedTo.length; i++) {\n this.relations.push(\n new ControlRelation(this._relationFor, relatedTo[i])\n );\n }\n }\n }\n}\n","import { CanHide, Hider } from './can-hide';\nexport class HiderHelper {\n public hideControl(control: CanHide) {\n control.hidden = true;\n if (control.disable) {\n control.disable();\n }\n }\n\n public showControl(control: CanHide) {\n control.hidden = false;\n }\n\n public setHiderForControl(control: CanHide, hider: Hider) {\n control.hiders.push(hider);\n }\n\n public clearHidersForControl(control: CanHide) {\n control.hiders.splice(0);\n control.hidden = false;\n }\n\n public evaluateControlHiders(control: CanHide) {\n let hiddenValue = false;\n control.hiders.forEach((hider) => {\n hider.reEvaluateHidingExpression();\n if (hider.toHide === true) {\n hiddenValue = true;\n }\n });\n\n control.hidden = hiddenValue;\n if (control.hidden && control.disable) {\n control.disable();\n // control.setValue(null);\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanHide) {\n if (control.updateHiddenState) {\n control.valueChanges.subscribe((val) => {\n control.updateHiddenState();\n });\n }\n }\n}\n","import { CanGenerateAlert, Alert } from './can-generate-alert';\nexport class AlertHelper {\n public hideAlert(control: Alert) {\n control.shown = false;\n }\n\n public showAlert(control: Alert) {\n control.shown = true;\n }\n\n public setAlertsForControl(control: CanGenerateAlert, alert: Alert) {\n control.alerts.push(alert);\n }\n\n public clearAlertsForControl(control: CanGenerateAlert) {\n control.alerts.splice(0);\n control.alert = '';\n }\n\n public evaluateControlAlerts(control: CanGenerateAlert) {\n let messageValue = '';\n control.alerts.forEach((message) => {\n message.reEvaluateAlertExpression();\n if (message.shown === true) {\n messageValue = message.alertMessage;\n } else {\n messageValue = '';\n }\n });\n\n control.alert = messageValue;\n // if (control.message && control.disable) {\n // control.disable();\n // // control.setValue(null);\n // }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanGenerateAlert) {\n if (control.updateAlert) {\n control.valueChanges.subscribe((val) => {\n control.updateAlert();\n });\n }\n }\n}\n","import { CanDisable, Disabler } from './can-disable';\nexport class DisablerHelper {\n public setDisablerForControl(control: CanDisable, disabler: Disabler) {\n control.disablers.push(disabler);\n }\n\n public clearDisablersForControl(control: CanDisable) {\n control.disablers.splice(0);\n control.disable();\n }\n\n public evaluateControlDisablers(control: CanDisable) {\n let toDisable = false;\n control.disablers.forEach((hider) => {\n hider.reEvaluateDisablingExpression();\n if (hider.toDisable === true) {\n toDisable = true;\n }\n });\n\n // console.log('Control', control);\n\n if (toDisable) {\n control.disable();\n } else {\n control.enable();\n }\n }\n\n public setUpReEvaluationWhenValueChanges(control: CanDisable) {\n if (control.updateDisabledState) {\n control.valueChanges.subscribe((val) => {\n control.updateDisabledState();\n });\n }\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\nimport { FormFactory } from './form.factory';\nimport { Form } from './form';\n\n// import { AfeControlType, AfeFormArray, AfeFormGroup, AfeFormControl } from '../../abstract-controls-extension';\nimport { QuestionBase, RepeatingQuestion } from '../question-models/models';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nexport interface ChildNodeCreatedListener {\n addChildNodeCreatedListener(func: any);\n\n fireChildNodeCreatedListener(node: GroupNode);\n}\n\nexport type CreateArrayChildNodeFunction = (\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n) => GroupNode;\n\nexport interface RemoveArrayChildNodeFunction {\n (index: number, node: ArrayNode);\n}\n\nexport class NodeBase {\n public children?: any;\n private _control: AfeFormControl | AfeFormArray | AfeFormGroup;\n private _questionModel: QuestionBase;\n private _form: Form;\n private _path: string;\n\n public initialValue: any;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n this._control = control;\n this._questionModel = question;\n this._form = form;\n this._path = parentPath ? parentPath + '.' + question.key : question.key;\n }\n\n public get question(): QuestionBase {\n return this._questionModel;\n }\n\n public get control(): AfeFormControl | AfeFormArray | AfeFormGroup {\n return this._control;\n }\n\n public get form(): Form {\n return this._form;\n }\n\n public get path(): string {\n return this._path;\n }\n removeAt(index: number) {}\n\n createChildNode() {}\n removeChildNode() {}\n}\n\nexport class LeafNode extends NodeBase {\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n }\n}\n\nexport class GroupNode extends NodeBase {\n private _children: any;\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = {};\n }\n\n public get children(): any {\n return this._children;\n }\n\n public setChild(key: string, node: NodeBase) {\n this.children[key] = node;\n }\n}\n\nexport class ArrayNode extends NodeBase implements ChildNodeCreatedListener {\n private childNodeCreatedEvents: any[] = [];\n private _children: GroupNode[];\n public createChildFunc: CreateArrayChildNodeFunction;\n public removeChildFunc: RemoveArrayChildNodeFunction;\n\n constructor(\n question: QuestionBase,\n control?: AfeFormControl | AfeFormArray | AfeFormGroup,\n parentControl?: AfeFormControl | AfeFormArray | AfeFormGroup,\n private formFactory?: FormFactory,\n form?: Form,\n parentPath?: string\n ) {\n super(question, control, form, parentPath);\n this._children = [];\n this.childNodeCreatedEvents = [];\n }\n\n public get children(): GroupNode[] {\n return this._children;\n }\n\n public createChildNode(): GroupNode {\n if (this.createChildFunc) {\n const g: GroupNode = this.createChildFunc(\n this.question as RepeatingQuestion,\n this,\n this.formFactory\n );\n this.fireChildNodeCreatedListener(g);\n return g;\n }\n return null;\n }\n\n public removeAt(index: number) {\n const removePrompt = confirm('Are you sure you want to remove?');\n if (removePrompt) {\n if (this.removeChildFunc) {\n this.removeChildFunc(index, this);\n }\n }\n }\n\n addChildNodeCreatedListener(func: any) {\n this.childNodeCreatedEvents.push(func);\n }\n\n fireChildNodeCreatedListener(node: GroupNode) {\n for (let i = 0; i < this.childNodeCreatedEvents.length; i++) {\n const func: any = this.childNodeCreatedEvents[i];\n func(node);\n }\n }\n}\n","export class ValidationModel {\n type: string;\n\n message: string;\n\n constructor(validations: any) {\n this.type = validations.type;\n this.message = validations.message || null;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class JsExpressionValidationModel extends ValidationModel {\n failsWhenExpression: string;\n\n constructor(validations: any) {\n super(validations);\n this.failsWhenExpression = validations.failsWhenExpression;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class ConditionalValidationModel extends ValidationModel {\n referenceQuestionId: string;\n referenceQuestionAnswers: any;\n\n constructor(validations: any) {\n super(validations);\n this.referenceQuestionId = validations.referenceQuestionId;\n this.referenceQuestionAnswers = validations.referenceQuestionAnswers;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// import { ControlRelation } from '../../change-tracking/control-relation';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\nimport { Form } from './form';\n\n@Injectable()\nexport class ControlRelationsFactory {\n constructor() {}\n\n buildRelations(rootNode: GroupNode) {\n const controlsStore: any = this.mapControlIds(rootNode, {});\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key)) {\n const nodeBase: NodeBase = controlsStore[key];\n\n this.setRelations(controlsStore, nodeBase);\n }\n }\n }\n\n buildArrayNodeRelations(node: GroupNode) {\n const form: Form = node.form;\n\n if (!form) {\n return;\n }\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for controls in the same array\n this.buildRelations(node);\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const child: NodeBase = rootControlsStore[key];\n\n if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n this.setRelations(arrayControlStore, child);\n }\n }\n }\n }\n\n // define relations for controls outside the group to controls in this group\n this.createRelationsToArrayControls(node);\n\n // fire relations\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const child: NodeBase = arrayControlStore[id];\n const control: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n control.updateHiddenState();\n control.updateAlert();\n }\n }\n }\n\n createRelationsToArrayControls(node: GroupNode) {\n const form: Form = node.form;\n\n const rootNode: GroupNode = form.rootNode;\n\n // build relations for control outside the array\n const rootControlsStore: any = this.mapControlIds(rootNode, {});\n const arrayControlStore: any = this.mapControlIds(node, {});\n\n // loop through form controls\n for (const key in rootControlsStore) {\n if (rootControlsStore.hasOwnProperty(key)) {\n const rChild: NodeBase = rootControlsStore[key];\n\n const parentNodePath = node.path.substring(\n 0,\n node.path.lastIndexOf('.')\n );\n\n if (rChild.path.indexOf(parentNodePath + '.') === -1) {\n // loop through controls in the array group\n for (const id in arrayControlStore) {\n if (arrayControlStore.hasOwnProperty(id)) {\n const aChild: NodeBase = arrayControlStore[id];\n const aChildId = aChild.question.key;\n if (this.hasRelation(aChildId, rChild.question)) {\n const nodes: Array<NodeBase> = node.form.searchNodeByPath(\n rootNode,\n parentNodePath,\n []\n );\n if (nodes.length > 0) {\n const an = nodes[0] as ArrayNode;\n const rootControl = rChild.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (\n rootControl.controlRelations.otherRelations.indexOf(an) ===\n -1\n ) {\n rootControl.controlRelations.otherRelations.push(an);\n }\n\n (aChild.control as\n | AfeFormControl\n | AfeFormArray).addValueChangeListener((value) => {\n if ((rootControl as any).updateCalculatedValue) {\n (rootControl as any).updateCalculatedValue();\n }\n\n rootControl.updateValueAndValidity();\n if ((rootControl as any).updateHiddenState) {\n (rootControl as any).updateHiddenState();\n }\n\n if ((rootControl as any).updateAlert) {\n (rootControl as any).updateAlert();\n }\n\n if ((rootControl as any).updateDisabledState) {\n (rootControl as any).updateDisabledState();\n }\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n getRelationsForControl(\n id,\n node: GroupNode\n ): Array<AfeFormControl | AfeFormArray> {\n const relations: Array<AfeFormControl | AfeFormArray> = new Array<\n AfeFormControl | AfeFormArray\n >();\n\n const nodeBaseArray: Array<NodeBase> = node.form.searchNodeByQuestionId(id);\n\n if (nodeBaseArray.length > 0) {\n const nodeBase: NodeBase = nodeBaseArray[0];\n\n const controlList: any = this.mapControlIds(node, {});\n\n for (const key in controlList) {\n if (controlList.hasOwnProperty(key)) {\n if (\n this.hasRelation(controlList[key].question.key, nodeBase.question)\n ) {\n relations.push(controlList[key].control);\n }\n }\n }\n }\n return relations;\n }\n\n mapControlIds(node: GroupNode, controlsStore: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.mapControlIds(child, controlsStore);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n } else if (child instanceof ArrayNode) {\n const questionBase: QuestionBase = (child as ArrayNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n controlsStore[questionBase.key] = child;\n }\n }\n }\n }\n\n return controlsStore;\n }\n\n setRelations(controlsStore: any, nodeBase: NodeBase) {\n const questionBase: QuestionBase = nodeBase.question;\n\n const id = questionBase.key;\n\n for (const key in controlsStore) {\n if (controlsStore.hasOwnProperty(key) && key !== id) {\n const node: NodeBase = controlsStore[key];\n const question: QuestionBase = node.question;\n\n if (this.hasRelation(id, question, nodeBase)) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n\n // add conditional required and conditional answered relations\n if (typeof question.required === 'object') {\n const required: any = question.required;\n\n if (required.type === 'conditionalRequired') {\n if (required.referenceQuestionId === id) {\n this.addRelationToControl(\n node.control as AfeFormControl | AfeFormArray,\n nodeBase.control as AfeFormControl | AfeFormArray\n );\n }\n }\n }\n }\n }\n }\n\n hasRelation(id: string, questionBase: QuestionBase, nodeBase?: NodeBase) {\n let hasRelation = false;\n\n if (questionBase.validators && questionBase.validators.length > 0) {\n questionBase.validators.forEach((element) => {\n if (element instanceof JsExpressionValidationModel) {\n const model: JsExpressionValidationModel = element as JsExpressionValidationModel;\n\n const failsWhenExpression: string = model.failsWhenExpression;\n if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (\n element instanceof ConditionalValidationModel &&\n element.type === 'conditionalAnswered' &&\n element.referenceQuestionId === id\n ) {\n hasRelation = true;\n }\n });\n }\n\n // add hiders and disablers relations\n if (!hasRelation) {\n if (typeof questionBase.hide === 'string') {\n const hide: string = questionBase.hide as string;\n\n if (hide.length > 0 && hide.indexOf(id) !== -1) {\n hasRelation = true;\n }\n } else if (typeof questionBase.hide === 'object') {\n const hideObj: any = questionBase.hide;\n\n if (hideObj.field === id) {\n hasRelation = true;\n }\n }\n\n if (questionBase.alert && typeof questionBase.alert === 'object') {\n hasRelation = true;\n }\n\n if (typeof questionBase.disable === 'string') {\n const disable: string = questionBase.disable as string;\n\n if (disable.length > 0 && disable.indexOf(id) !== -1) {\n hasRelation = true;\n }\n }\n }\n\n // add calculate expressions relations\n if (\n !hasRelation &&\n questionBase.calculateExpression &&\n questionBase.calculateExpression.length > 0 &&\n questionBase.calculateExpression.indexOf(id) !== -1\n ) {\n hasRelation = true;\n }\n\n return hasRelation;\n }\n\n addRelationToControl(\n control: AfeFormControl | AfeFormArray,\n related: AfeFormControl | AfeFormArray\n ) {\n // let relations = control.controlRelations.relations;\n //\n // let hasRelation = false;\n //\n // relations.forEach(element => {\n //\n // let controlRelation: ControlRelation = element as ControlRelation;\n //\n // let relation: AfeFormControl | AfeFormArray = controlRelation.control as AfeFormControl | AfeFormArray;\n //\n // if ( control.uuid !== undefined && control.uuid === relation.uuid ) {\n // hasRelation = true;\n // }\n // });\n\n // if ( !hasRelation ) {\n control.controlRelations.addRelatedControls(related);\n // }\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension/control-extensions';\nimport { ArrayNode } from '../form-factory/form-node';\nimport { ControlRelationsFactory } from '../form-factory/control-relations.factory';\nimport { Form } from '../form-factory/form';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nexport class ExpressionRunner {\n getRunnable(\n expression: string,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n helper: any,\n dataDependencies: any,\n form?: Form\n ): Runnable {\n const runner = this;\n const runnable: Runnable = {\n run: () => {\n /* tslint:disable */\n let scope: any = {};\n if (control.uuid) {\n scope[control.uuid] = control.value;\n }\n window['moment'] = moment;\n // scope.moment = moment;\n scope['myValue'] = control.value;\n runner.getControlRelationValueString(control, scope);\n runner.getHelperMethods(helper, scope);\n runner.getDataDependencies(dataDependencies, scope);\n\n if (form) {\n // console.error('Form defined', form);\n runner.getDataDependencies(\n form.dataSourcesContainer.dataSources,\n scope\n );\n }\n\n let paramList = '';\n let argList = '';\n for (let o in scope) {\n paramList = paramList === '' ? paramList + o : paramList + ',' + o;\n argList =\n argList === ''\n ? argList + \"scope['\" + o + \"']\"\n : argList + \",scope['\" + o + \"']\";\n }\n\n // prevent more than one return statements\n if (expression.indexOf('return') === -1) {\n expression = '\"return ' + expression + '\"';\n }\n\n let funcDeclarationCode =\n 'var afeDynamicFunc = new Function(\"' +\n paramList +\n '\", ' +\n expression +\n ');';\n let funcCallCode =\n 'afeDynamicFunc.call(this ' +\n (argList === '' ? '' : ',' + argList) +\n ');';\n\n try {\n if (Object.keys(scope).indexOf('undefined') >= 0) {\n console.warn('Missing reference found', expression, scope);\n return false;\n }\n //console.info('results: ', expression, eval(funcDeclarationCode + funcCallCode));\n return eval(funcDeclarationCode + funcCallCode);\n } catch (e) {\n // if (window['error_count']) {\n // window['error_count'] = window['error_count'] + 1;\n // } else {\n // window['error_count'] = 1;\n // }\n // console.error(window['error_count'] + ' Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n // console.error('Error running expression:' + expression + '. ',\n // e, control, 'Effective Expression', (funcDeclarationCode + funcCallCode));\n\n // Uncomment the line above during debugging\n // console.error('Error running expression:' + expression, scope);\n\n return false;\n }\n /* tslint:enable */\n }\n };\n return runnable;\n }\n\n private getControlRelationValueString(\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n scope: any\n ) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n if (relation.relatedTo) {\n const related = relation.relatedTo as any;\n const relatedAsControl = relation.relatedTo as AbstractControl;\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n scope[related.uuid] = relation.relatedTo.value;\n } else {\n scope[related.uuid] =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.otherRelations &&\n control.controlRelations.otherRelations.length > 0\n ) {\n control.controlRelations.otherRelations.forEach((node) => {\n if (node instanceof ArrayNode) {\n const arrayNode: ArrayNode = node as ArrayNode;\n const uuid = control.uuid;\n\n const controlRelationsFactory: ControlRelationsFactory = new ControlRelationsFactory();\n let relationsForControl: Array<AfeFormControl | AfeFormArray> = [];\n // get all related controls\n arrayNode.children.forEach((child) => {\n relationsForControl = relationsForControl.concat(\n controlRelationsFactory.getRelationsForControl(uuid, child)\n );\n });\n\n this.setControlArrayValues(\n control as AfeFormControl | AfeFormArray,\n relationsForControl,\n scope\n );\n }\n });\n }\n }\n\n private setControlArrayValues(\n control: AfeFormControl | AfeFormArray,\n relationsForControl: Array<AfeFormControl | AfeFormArray>,\n scope: any\n ) {\n const keys: Array<string> = this._getFormControlKeys(relationsForControl);\n\n keys.forEach((key) => {\n const values: any = this._getValuesForKey(key, relationsForControl);\n scope[key] = values;\n });\n }\n\n private _getFormControlKeys(\n array: Array<AfeFormControl | AfeFormArray>\n ): Array<string> {\n const keys: Array<string> = [];\n array.forEach((control) => {\n if (keys.indexOf(control.uuid) === -1) {\n keys.push(control.uuid);\n }\n });\n\n return keys;\n }\n\n private _getValuesForKey(\n key: string,\n array: Array<AfeFormControl | AfeFormArray>\n ): any {\n const values: any = [];\n\n array.forEach((control) => {\n if (control.uuid === key) {\n values.push(control.value);\n }\n });\n\n return values;\n }\n\n private getHelperMethods(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n\n private getDataDependencies(obj: any, scope?: any) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n scope[key] = obj[key];\n }\n }\n }\n}\n\nexport interface Runnable {\n run();\n}\n","import {\n FormControl,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControlOptions\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { CanCalculate } from '../form-entry/control-calculators/can-calculate';\nimport { ExpressionRunner } from '../form-entry/expression-runner/expression-runner';\n\nclass AfeFormControl\n extends FormControl\n implements\n CanHide,\n CanDisable,\n CanCalculate,\n CanGenerateAlert,\n ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n public uuid: string;\n public pathFromRoot: string;\n\n hidden = false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n calculator: Function;\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n constructor(\n formState?: any,\n validator?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(formState, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue('');\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n setCalculatorFn(newCalculator: Function) {\n this.calculator = newCalculator;\n }\n\n updateCalculatedValue() {\n if (this.calculator) {\n const _val = this.calculator.call(ExpressionRunner, {});\n this.setValue(_val);\n }\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\nexport { AfeFormControl };\n","import {\n FormGroup,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\n\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\n\nexport class AfeFormGroup\n extends FormGroup\n implements CanHide, CanDisable, CanGenerateAlert {\n private _controlRelations: ControlRelations;\n\n public uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.disablers = [];\n this.alerts = [];\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue({});\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","import {\n FormArray,\n ValidatorFn,\n AsyncValidatorFn,\n AbstractControl\n} from '@angular/forms';\n\nimport { ControlRelations } from '../change-tracking/control-relations';\nimport { ValueChangeListener } from './value-change.listener';\nimport {\n CanHide,\n Hider\n} from '../form-entry/control-hiders-disablers/can-hide';\nimport {\n CanGenerateAlert,\n Alert\n} from '../form-entry/control-alerts/can-generate-alert';\nimport {\n CanDisable,\n Disabler\n} from '../form-entry/control-hiders-disablers/can-disable';\nimport { HiderHelper } from '../form-entry/control-hiders-disablers/hider-helpers';\nimport { AlertHelper } from '../form-entry/control-alerts/alert-helpers';\nimport { DisablerHelper } from '../form-entry/control-hiders-disablers/disabler-helper';\n\nexport class AfeFormArray\n extends FormArray\n implements CanHide, CanDisable, CanGenerateAlert, ValueChangeListener {\n private _controlRelations: ControlRelations;\n private _valueChangeListener: any;\n private _previousValue;\n private _uuid: string;\n public pathFromRoot: string;\n\n hidden: false;\n hiders: Hider[];\n\n alert: string;\n alerts: Alert[];\n\n disablers: Disabler[];\n\n private hiderHelper: HiderHelper = new HiderHelper();\n private AlertHelper: AlertHelper = new AlertHelper();\n private disablerHelper: DisablerHelper = new DisablerHelper();\n\n constructor(\n controls: AbstractControl[],\n validator?: ValidatorFn,\n asyncValidator?: AsyncValidatorFn\n ) {\n super(controls, validator, asyncValidator);\n this._controlRelations = new ControlRelations(this);\n this.hiders = [];\n this.alerts = [];\n this.disablers = [];\n\n this.valueChanges.subscribe((value) => {\n if (this._previousValue !== value) {\n this.fireValueChangeListener(value);\n this._previousValue = value;\n }\n });\n }\n\n get uuid(): string {\n return this._uuid;\n }\n set uuid(val: string) {\n this._uuid = val;\n }\n\n get controlRelations(): ControlRelations {\n return this._controlRelations;\n }\n\n hide() {\n this.hiderHelper.hideControl(this);\n }\n\n show() {\n this.hiderHelper.showControl(this);\n }\n\n disable(param?: { onlySelf?: boolean; emitEvent?: boolean }) {\n super.disable(param);\n super.setValue([]);\n }\n\n setHidingFn(newHider: Hider) {\n this.hiderHelper.setHiderForControl(this, newHider);\n }\n\n clearHidingFns() {\n this.hiderHelper.clearHidersForControl(this);\n }\n\n updateHiddenState() {\n this.hiderHelper.evaluateControlHiders(this);\n }\n\n setDisablingFn(newDisabler: Disabler) {\n this.disablerHelper.setDisablerForControl(this, newDisabler);\n }\n\n clearDisablingFns() {\n this.disablerHelper.clearDisablersForControl(this);\n }\n\n updateDisabledState() {\n this.disablerHelper.evaluateControlDisablers(this);\n }\n\n setAlertFn(newHider: Alert) {\n this.AlertHelper.setAlertsForControl(this, newHider);\n }\n\n clearMessageFns() {\n this.AlertHelper.clearAlertsForControl(this);\n }\n\n updateAlert() {\n this.AlertHelper.evaluateControlAlerts(this);\n }\n\n addValueChangeListener(func: any) {\n this._valueChangeListener = func;\n }\n\n fireValueChangeListener(value: any) {\n if (this.alerts.length > 0) {\n this.updateAlert();\n }\n if (\n this._valueChangeListener &&\n typeof this._valueChangeListener === 'function'\n ) {\n this._valueChangeListener(value);\n }\n }\n\n setValue(value: any) {\n super.setValue(value);\n }\n}\n","export enum AfeControlType {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n None\n}\n","import { BaseOptions } from './interfaces/base-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\nimport { ValidationModel } from './validation.model';\n\nexport class QuestionBase implements BaseOptions {\n type: string;\n order?: number;\n questionOptions?: any;\n questions?: any;\n placeholder?: any;\n hidden?: any;\n showTime?: any;\n showWeek?: any;\n showDate?: boolean;\n historicalDisplay?: any;\n rows?: any;\n showWeeksAdder?: any;\n key: string;\n alert?: any;\n\n label?: string;\n renderingType: string;\n\n defaultValue?: any;\n originalValue?: any;\n enableHistoricalValue?: boolean;\n showHistoricalValueDate?: boolean;\n historicalDataValue?: any;\n extras?: any;\n dataSource?: string;\n dataSourceOptions?: any;\n\n controlType?: AfeControlType;\n validators?: Array<ValidationModel>;\n required?: boolean;\n hide?: string | boolean;\n disable?: string | boolean;\n calculateExpression?: string;\n options?: any;\n maxTime?: string;\n minTime?: string;\n\n constructor(options: BaseOptions) {\n this.defaultValue = options.defaultValue;\n this.originalValue = options.originalValue;\n this.extras = options.extras;\n this.renderingType = options.type;\n this.key = options.key || '';\n this.label = options.label || '';\n this.validators = options.validators || [];\n this.required = options.required;\n this.hide = options.hide;\n this.disable = options.disable;\n this.alert = options.alert;\n this.historicalDataValue = options.historicalDataValue;\n this.calculateExpression = options.calculateExpression;\n }\n\n setHistoricalValue(v: boolean) {\n this.enableHistoricalValue = v;\n }\n showHistoricalEncounterDate(v?: boolean) {\n this.showHistoricalValueDate = v === undefined ? true : v;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalRequiredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let isRequired: boolean;\n\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (relatedAsControl && Array.isArray(relatedAsControl.value)) {\n relationValue = relation.relatedTo.value;\n } else {\n relationValue =\n relation.relatedTo.value && relation.relatedTo.value.value\n ? relation.relatedTo.value.value\n : relation.relatedTo.value;\n }\n }\n });\n }\n\n if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) !== -1\n ) {\n isRequired = true;\n }\n\n if (isRequired && !value) {\n return { conditional_required: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\nexport class ConditionalAnsweredValidator {\n constructor() {}\n\n validate(model: ConditionalValidationModel) {\n return (control: AfeFormControl): { [key: string]: any } => {\n const value = control.value;\n let relationValue = null;\n const referenceQuestionId: string = model.referenceQuestionId;\n const referenceQuestionAnswers: any = model.referenceQuestionAnswers;\n let successCondition: any = true;\n\n if (value) {\n if (\n control &&\n control.controlRelations &&\n control.controlRelations.relations\n ) {\n control.controlRelations.relations.forEach((relation) => {\n const relatedAsControl = relation.relatedTo as any;\n if (relatedAsControl.uuid === referenceQuestionId) {\n if (Array.isArray(relatedAsControl.value)) {\n relationValue = relatedAsControl.value;\n } else {\n relationValue =\n relatedAsControl.value &&\n typeof relatedAsControl.value === 'object' &&\n relatedAsControl.value.value\n ? relatedAsControl.value.value\n : relatedAsControl.value;\n }\n }\n\n if (!relationValue) {\n successCondition = false;\n } else if (\n typeof referenceQuestionAnswers === 'object' &&\n referenceQuestionAnswers.indexOf(relationValue) === -1\n ) {\n successCondition = false;\n }\n });\n }\n }\n\n if (!successCondition) {\n return { conditional_answered: { message: model.message } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class RequiredValidator {\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value: any = control.value;\n const isEmpty: boolean =\n value == null || (typeof value === 'string' && value.length === 0);\n\n return isEmpty ? { required: true } : null;\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class DateValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n\n if (value && value.length !== 0) {\n // YYYY-MM-DD or DD-MM-YYYY\n const test: boolean = !/Invalid|NaN/.test(new Date(value).toString());\n\n return test ? null : { date: true };\n } else {\n return null;\n }\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MinValidator {\n validate(min: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v >= min\n ? null\n : { min: { requiredValue: min, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\nexport class MaxValidator {\n validate(max: number) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n const v: number = control.value;\n return v <= max\n ? null\n : { max: { requiredValue: max, actualValue: v } };\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MinDateValidator {\n validate(min: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() < min.getTime()\n ? { mindate: { requiredDate: min, actualDate: newDate } }\n : null;\n } else {\n return { mindate: { requiredDate: min } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class MaxDateValidator {\n validate(max: Date) {\n return (control: AfeFormControl): { [key: string]: any } => {\n if (control.hidden) {\n return null;\n }\n\n if (control.value && control.value.length !== 0) {\n if (!new DateValidator().validate(control.value)) {\n const newDate: Date = new Date(control.value);\n\n return newDate.getTime() > max.getTime()\n ? { maxdate: { requiredDate: max, actualDate: newDate } }\n : null;\n } else {\n return { maxdate: { requiredDate: max } };\n }\n }\n\n return null;\n };\n }\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { DateValidator } from './date.validator';\n\nexport class FutureDateRestrictionValidator {\n constructor() {}\n\n validate(control: AfeFormControl) {\n if (control.hidden) {\n return null;\n }\n\n const value = control.value;\n const now: Date = new Date();\n\n if (value && value.length !== 0) {\n if (!new DateValidator().validate(value)) {\n const d: Date = new Date(value);\n\n return d.getTime() > now.getTime()\n ? { futureDateRestriction: true }\n : null;\n }\n }\n\n return null;\n }\n}\n","import * as _ from 'lodash';\nexport class JsExpressionHelper {\n calcBMI(height, weight) {\n let r;\n if (height && weight) {\n r = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n return height && weight ? parseFloat(r) : null;\n }\n\n calcBSA(height: number, weight: number) {\n let result;\n if (height && weight) {\n result = Math.sqrt((height * weight) / 3600).toFixed(2);\n }\n return height && weight ? parseFloat(result) : null;\n }\n\n calcBMIForAgeZscore(bmiForAgeRef, height, weight) {\n let bmi;\n const maxAgeInDays = 1856;\n if (height && weight) {\n bmi = (weight / (((height / 100) * height) / 100)).toFixed(1);\n }\n const refSectionObject = _.first(bmiForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (bmi < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= bmi) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return bmi && refSectionObject ? formattedSDValue : null;\n }\n calcWeightForHeightZscore(weightForHeightRef, height, weight) {\n let refSection;\n let formattedSDValue;\n if (height && weight) {\n height = parseFloat(height).toFixed(1);\n }\n const standardHeightMin = 45;\n const standardMaxHeight = 110;\n if (height < standardHeightMin || height > standardMaxHeight) {\n formattedSDValue = -4;\n } else {\n refSection = _.filter(weightForHeightRef, (refObject) => {\n return parseFloat(refObject['Length']).toFixed(1) === height;\n });\n }\n\n const refSectionObject = _.first(refSection);\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (weight < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= weight) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight ? formattedSDValue : null;\n }\n\n calcHeightForAgeZscore(heightForAgeRef, height, weight) {\n const refSectionObject = _.first(heightForAgeRef);\n let formattedSDValue;\n if (refSectionObject) {\n const refObjectValues = Object.keys(refSectionObject)\n .map((key) => refSectionObject[key])\n .map((x) => x);\n const refObjectKeys = Object.keys(refSectionObject);\n const minimumValue = refObjectValues[1];\n const minReferencePoint = [];\n if (height < minimumValue) {\n minReferencePoint.push(minimumValue);\n } else {\n _.forEach(refObjectValues, (value) => {\n if (value <= height) {\n minReferencePoint.push(value);\n }\n });\n }\n const lastReferenceValue = _.last(minReferencePoint);\n const lastValueIndex = _.findIndex(refObjectValues, (o) => {\n return o === lastReferenceValue;\n });\n const SDValue = refObjectKeys[lastValueIndex];\n formattedSDValue = SDValue.replace('SD', '');\n if (formattedSDValue.includes('neg')) {\n formattedSDValue = formattedSDValue.substring(1, 0);\n formattedSDValue = '-' + formattedSDValue;\n }\n\n if (\n formattedSDValue === 'S' ||\n formattedSDValue === 'L' ||\n formattedSDValue === 'M' ||\n formattedSDValue === '-5'\n ) {\n formattedSDValue = '-4';\n }\n }\n\n return height && weight && refSectionObject ? formattedSDValue : null;\n }\n\n isEmpty(val) {\n if (\n val === undefined ||\n val === null ||\n val === '' ||\n val === 'null' ||\n val === 'undefined'\n ) {\n return true;\n }\n\n if (Array.isArray(val) && val.length === 0) {\n return true;\n }\n return false;\n }\n\n arrayContains(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n\n let contains = true;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) === -1) {\n contains = false;\n }\n }\n\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n extractRepeatingGroupValues(key, array) {\n const values = array.map(function (item) {\n return item[key];\n });\n return values;\n }\n formatDate(value, format, offset) {\n format = format || 'yyyy-MM-dd';\n offset = offset || '+0300';\n\n if (!(value instanceof Date)) {\n value = new Date(value);\n if (value === null || value === undefined) {\n throw new Error(\n 'DateFormatException: value passed ' + 'is not a valid date'\n );\n }\n }\n\n return value; // TODO implement this\n // return $filter('date')(value, format, offset);\n }\n\n arrayContainsAny(array, members) {\n if (Array.isArray(members)) {\n if (members.length === 0) {\n return true;\n }\n let contains = false;\n\n for (let i = 0; i < members.length; i++) {\n const val = members[i];\n if (array.indexOf(val) !== -1) {\n contains = true;\n }\n }\n return contains;\n } else {\n return array.indexOf(members) !== -1;\n }\n }\n\n get helperFunctions() {\n const helper = this;\n return {\n arrayContainsAny: helper.arrayContainsAny,\n calcBMI: helper.calcBMI,\n calcBMIForAgeZscore: helper.calcBMIForAgeZscore,\n calcWeightForHeightZscore: helper.calcWeightForHeightZscore,\n calcHeightForAgeZscore: helper.calcHeightForAgeZscore,\n isEmpty: helper.isEmpty,\n arrayContains: helper.arrayContains,\n extractRepeatingGroupValues: helper.extractRepeatingGroupValues\n };\n }\n}\n","export class Validations {\n public static JSExpressionValidatorsEnabled = false;\n\n constructor() {}\n}\n","import { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { ExpressionRunner } from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { Validations } from './validations';\n\nexport class JsExpressionValidator {\n constructor() {}\n\n validate(model: JsExpressionValidationModel, form?: any) {\n // convert helper functions to string\n return (control: AfeFormControl): { [key: string]: any } => {\n if (!Validations.JSExpressionValidatorsEnabled) {\n return null;\n }\n\n const expression = model.failsWhenExpression;\n const helper = new JsExpressionHelper();\n const dataDependencies = {};\n\n const helperFunctions = helper.helperFunctions;\n const runnable = new ExpressionRunner().getRunnable(\n expression,\n control,\n helperFunctions,\n dataDependencies,\n form\n );\n\n if (runnable.run()) {\n return {\n js_expression: { expression: expression, message: model.message }\n };\n }\n\n return null;\n };\n }\n}\n","export class Messages {\n public static readonly REQUIRED_FIELD_MSG = 'This field is required!';\n\n public static readonly INVALID_DATE_MSG = 'Provided date is invalid!';\n\n public static readonly FUTURE_DATE_RESTRICTION_MSG =\n 'Future date is not allowed!';\n\n public static readonly MIN_LENGTH_MSG = 'Min Length should be {minLength}';\n\n public static readonly MAX_LENGTH_MSG = 'Max Length should be {maxLength}';\n\n public static readonly MAX_DATE_MSG = 'Max Date should be {maxDate}';\n\n public static readonly MIN_DATE_MSG = 'Min Date should be {minDate}';\n\n public static readonly MAX_MSG = 'Max value should be {max}';\n\n public static readonly MIN_MSG = 'Min value should be {min}';\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport * as _ from 'lodash';\n\nimport { ConditionalRequiredValidator } from '../validators/conditional-required.validator';\nimport { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';\nimport { RequiredValidator } from '../validators/required.validator';\nimport { DateValidator } from '../validators/date.validator';\nimport { MinValidator } from '../validators/min.validator';\nimport { MaxValidator } from '../validators/max.validator';\nimport { MinDateValidator } from '../validators/min-date.validator';\nimport { MaxDateValidator } from '../validators/max-date.validator';\nimport { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';\nimport { JsExpressionValidator } from '../validators/js-expression.validator';\nimport { QuestionBase } from '../question-models/question-base';\nimport { Messages } from '../utils/messages';\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\n\n@Injectable()\nexport class ValidationFactory {\n constructor() {}\n\n getValidators(question: QuestionBase, form?: any) {\n const list: Array<any> = [];\n\n if (question.validators) {\n _.forEach(question.validators, (validator: ValidationModel) => {\n switch (validator.type) {\n case 'date':\n list.push(this.dateValidator);\n const allowFutureDates: boolean = (<DateValidationModel>validator)\n .allowFutureDates;\n\n if (!allowFutureDates) {\n list.push(this.futureDateRestrictionValidator);\n }\n break;\n case 'js_expression':\n list.push(\n this.jsExpressionValidator.validate(\n <JsExpressionValidationModel>validator,\n form\n )\n );\n break;\n case 'max':\n list.push(\n this.getMaxValueValidator((<MaxValidationModel>validator).max)\n );\n break;\n case 'min':\n list.push(\n this.getMinValueValidator((<MinValidationModel>validator).min)\n );\n break;\n case 'conditionalRequired':\n list.push(\n this.conditionalRequiredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n case 'conditionalAnswered':\n list.push(\n this.conditionalAnsweredValidator.validate(\n <ConditionalValidationModel>validator\n )\n );\n break;\n }\n });\n }\n\n if (\n question.required &&\n typeof question.required === 'string' &&\n question.required === 'true'\n ) {\n list.push(this.requiredValidator);\n } else {\n // TODO - handle custom required validator\n }\n\n return list;\n }\n\n get conditionalRequiredValidator(): ConditionalRequiredValidator {\n return new ConditionalRequiredValidator();\n }\n\n get conditionalAnsweredValidator(): ConditionalAnsweredValidator {\n return new ConditionalAnsweredValidator();\n }\n\n get requiredValidator(): any {\n return new RequiredValidator().validate;\n }\n\n get dateValidator(): any {\n return new DateValidator().validate;\n }\n\n get futureDateRestrictionValidator(): any {\n return new FutureDateRestrictionValidator().validate;\n }\n\n get maxDateValidator(): any {\n return new MaxDateValidator().validate;\n }\n\n get minDateValidator(): any {\n return new MinDateValidator().validate;\n }\n\n get minLengthValidator(): any {\n return Validators.minLength;\n }\n\n get maxLengthValidator() {\n return Validators.maxLength;\n }\n\n public getMinValueValidator(min: number): any {\n return new MinValidator().validate(min);\n }\n\n public getMaxValueValidator(max: number): any {\n return new MaxValidator().validate(max);\n }\n\n get jsExpressionValidator() {\n return new JsExpressionValidator();\n }\n\n public errors(errors: any, question: QuestionBase): Array<string> {\n const messages: Array<string> = [];\n\n for (const property in errors) {\n if (errors.hasOwnProperty(property)) {\n switch (property) {\n case 'required':\n messages.push(Messages.REQUIRED_FIELD_MSG);\n break;\n case 'date':\n messages.push(Messages.INVALID_DATE_MSG);\n break;\n case 'futureDateRestriction':\n messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);\n break;\n case 'minlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{minLength}',\n errors.minlength.requiredLength\n )\n );\n break;\n case 'maxlength':\n messages.push(\n Messages.MIN_LENGTH_MSG.replace(\n '{maxLength}',\n errors.maxlength.requiredLength\n )\n );\n break;\n case 'maxdate':\n messages.push(\n Messages.MAX_DATE_MSG.replace(\n '{maxDate}',\n errors.maxdate.requiredDate\n )\n );\n break;\n case 'mindate':\n messages.push(\n Messages.MIN_DATE_MSG.replace(\n '{minDate}',\n errors.mindate.requiredDate\n )\n );\n break;\n case 'max':\n messages.push(\n Messages.MAX_MSG.replace('{max}', errors.max.requiredValue)\n );\n break;\n case 'min':\n messages.push(\n Messages.MIN_MSG.replace('{min}', errors.min.requiredValue)\n );\n break;\n case 'js_expression':\n messages.push(errors['js_expression'].message);\n break;\n case 'conditional_required':\n messages.push(errors['conditional_required'].message);\n break;\n case 'conditional_answered':\n messages.push(errors['conditional_answered'].message);\n break;\n }\n }\n }\n\n return messages;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Disabler } from '../control-hiders-disablers/can-disable';\nimport { Hider } from '../control-hiders-disablers/can-hide';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n// Add ability to display all fields for debugging\nimport { DebugModeService } from './../services/debug-mode.service';\n\n@Injectable()\nexport class HidersDisablersFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper,\n private _debugModeService: DebugModeService\n ) {}\n\n getJsExpressionDisabler(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Disabler {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.disable as string,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const disabler: Disabler = {\n toDisable: false,\n disableWhenExpression: question.disable as string,\n reEvaluateDisablingExpression: () => {\n const result = runnable.run();\n disabler.toDisable = result;\n }\n };\n return disabler;\n }\n\n getJsExpressionHider(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Hider {\n const hide: any = question.hide;\n const value: string =\n typeof hide === 'object'\n ? this.convertHideObjectToString(hide)\n : (question.hide as string);\n\n // check if debugging has been enabled\n\n const debugEnabled = this._debugModeService.debugEnabled();\n\n const runnable: Runnable = this.expressionRunner.getRunnable(\n value,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n\n const hider: Hider = {\n toHide: false,\n hideWhenExpression: value,\n reEvaluateHidingExpression: () => {\n /* if debug is enabled then hiders to be false\n else run the normal eveluator i.e runnable.run()\n */\n if (debugEnabled === true) {\n hider.toHide = false;\n } else {\n hider.toHide = runnable.run();\n }\n }\n };\n return hider;\n }\n\n convertHideObjectToString(hide: any) {\n if (hide.value instanceof Array) {\n const arrayStr: string = \"'\" + hide.value.join(\"','\") + \"'\";\n const exp = '!arrayContains([' + arrayStr + '],' + hide.field + ')';\n return exp;\n }\n\n return '';\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Alert } from '../control-alerts/can-generate-alert';\n\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup\n} from '../../abstract-controls-extension';\nimport { QuestionBase } from '../question-models/question-base';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\nimport { Form } from './form';\n\n@Injectable()\nexport class AlertsFactory {\n constructor(\n private expressionRunner: ExpressionRunner,\n private expressionHelper: JsExpressionHelper\n ) {}\n getJsExpressionshowAlert(\n question: QuestionBase,\n control: AfeFormControl | AfeFormArray | AfeFormGroup,\n form?: Form\n ): Alert {\n const runnable: Runnable = this.expressionRunner.getRunnable(\n question.alert.alertWhenExpression,\n control,\n this.expressionHelper.helperFunctions,\n {},\n form\n );\n const showAlert: Alert = {\n shown: false,\n alertWhenExpression: question.alert.alertWhenExpression,\n alertMessage: question.alert.message,\n reEvaluateAlertExpression: () => {\n const result = runnable.run();\n showAlert.shown = result;\n }\n };\n return showAlert;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport {\n AfeFormControl,\n AfeFormArray,\n AfeFormGroup,\n AfeControlType\n} from '../../abstract-controls-extension';\n\nimport { NestedQuestion } from '../question-models/interfaces/nested-questions';\n\nimport { QuestionBase } from '../question-models/question-base';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { HidersDisablersFactory } from './hiders-disablers.factory';\nimport { AlertsFactory } from './show-messages.factory';\nimport { Form } from './form';\nimport {\n ExpressionRunner,\n Runnable\n} from '../expression-runner/expression-runner';\nimport { JsExpressionHelper } from '../helpers/js-expression-helper';\n\n@Injectable()\nexport class FormControlService {\n controls = [];\n validationFactory: ValidationFactory;\n hidersDisablersFactory: HidersDisablersFactory;\n\n constructor(\n validationFactory: ValidationFactory,\n hidersDisablersFactory: HidersDisablersFactory,\n private alertsFactory: AlertsFactory\n ) {\n this.validationFactory = validationFactory;\n this.hidersDisablersFactory = hidersDisablersFactory;\n }\n\n generateControlModel(\n questionModel: QuestionBase | NestedQuestion,\n parentControl: AfeFormGroup,\n generateChildren: boolean,\n form?: Form\n ): AfeFormControl | AfeFormArray | AfeFormGroup {\n if (questionModel instanceof QuestionBase) {\n if (questionModel.controlType === AfeControlType.AfeFormArray) {\n return this.generateFormArray(questionModel, parentControl, form);\n }\n if (questionModel.controlType === AfeControlType.AfeFormGroup) {\n return this.generateFormGroupModel(\n questionModel,\n generateChildren,\n parentControl,\n form\n );\n }\n\n if (questionModel.controlType === AfeControlType.AfeFormControl) {\n return this.generateFormControl(questionModel, parentControl, form);\n }\n }\n return null;\n }\n\n generateFormGroupModel(\n question: QuestionBase,\n generateChildren: boolean,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormGroup {\n const formGroup = new AfeFormGroup({});\n this.wireHidersDisablers(question, formGroup, form);\n this.wireAlerts(question, formGroup, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formGroup);\n }\n\n const asGroup = question as QuestionGroup;\n\n if (generateChildren && asGroup && asGroup.questions.length > 0) {\n this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);\n }\n\n return formGroup;\n }\n\n _generateFormGroupChildrenModel(\n questions: QuestionBase[],\n parentControl: AfeFormGroup,\n form?: Form\n ) {\n if (questions.length > 0) {\n questions.forEach((element) => {\n const generated = this.generateControlModel(\n element,\n parentControl,\n true,\n form\n );\n if (generated !== null) {\n parentControl.addControl(element.key, generated);\n }\n });\n }\n }\n\n generateFormArray(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormArray {\n const validators = this.validationFactory.getValidators(question, form);\n let formArray: AfeFormArray;\n if (validators && validators.length > 0) {\n formArray = new AfeFormArray([], validators[0]);\n } else {\n formArray = new AfeFormArray([]);\n }\n formArray.uuid = question.key;\n this.wireHidersDisablers(question, formArray, form);\n this.wireAlerts(question, formArray, form);\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, formArray);\n }\n\n return formArray;\n }\n\n generateFormControl(\n question: QuestionBase,\n parentControl?: AfeFormGroup,\n form?: Form\n ): AfeFormControl {\n const value = question.defaultValue || '';\n const validators = this.validationFactory.getValidators(question, form);\n\n const control = new AfeFormControl(value, validators);\n control.uuid = question.key;\n this.wireHidersDisablers(question, control, form);\n this.wireAlerts(question, control, form);\n this.wireCalculator(\n question,\n control,\n form ? form.dataSourcesContainer.dataSources : null\n );\n\n if (parentControl instanceof AfeFormGroup) {\n parentControl.setControl(question.key, control);\n }\n\n return control;\n }\n\n private wireAlerts(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.alert && question.alert !== '') {\n const alert = this.alertsFactory.getJsExpressionshowAlert(\n question,\n control,\n form\n );\n control.setAlertFn(alert);\n }\n }\n private wireHidersDisablers(\n question: QuestionBase,\n control: AfeFormArray | AfeFormGroup | AfeFormControl,\n form?: Form\n ) {\n if (question.hide && question.hide !== '') {\n const hider = this.hidersDisablersFactory.getJsExpressionHider(\n question,\n control,\n form\n );\n control.setHidingFn(hider);\n }\n\n if (question.disable && question.disable !== '') {\n const disable = this.hidersDisablersFactory.getJsExpressionDisabler(\n question,\n control,\n form\n );\n control.setDisablingFn(disable);\n }\n }\n\n private wireCalculator(\n question: QuestionBase,\n control: AfeFormControl,\n dataSource?: any\n ) {\n if (question.calculateExpression && question.calculateExpression !== '') {\n const helper: JsExpressionHelper = new JsExpressionHelper();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n question.calculateExpression,\n control,\n helper.helperFunctions,\n dataSource\n );\n // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class\n control.setCalculatorFn(runnable.run);\n }\n }\n}\n","export const DEFAULT_STYLES = `a {\n color: white;\n text-decoration: none;\n font-size: 12px;\n text-transform: uppercase;\n }\n\n ul {\n list-style-type: none;\n margin: 2px auto;\n position: relative;\n }\n\n li {\n display: block;\n padding: 10px 20px;\n white-space: nowrap;\n transition: all 0.3s ease-in;\n border-bottom: 4px solid transparent;\n }\n\n li:hover {\n border-bottom: 4px solid white;\n opacity: 0.7;\n cursor: pointer;\n }\n\n .owl-theme .owl-controls .owl-nav {\n position: absolute;\n width: 100%;\n top: 0;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"] {\n position: absolute;\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav [class*=\"owl-\"]:hover {\n background: none;\n color: black;\n }\n\n .owl-theme .owl-controls .owl-nav .owl-next {\n right: 0;\n transform: translate(120%);\n }\n\n .owl-theme .owl-controls .owl-nav .owl-prev {\n left: 0;\n transform: translate(-120%);\n }\n\n .slick-initialized .swipe-tab-content {\n position: relative;\n min-height: 365px;\n }\n @media screen and (min-width: 767px) {\n .slick-initialized .swipe-tab-content {\n min-height: 500px;\n }\n .time-control{\n width:50%;\n }\n }\n .slick-initialized .swipe-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n background: none;\n border: 0;\n color: #757575;\n cursor: pointer;\n text-align: center;\n border-bottom: 2px solid rgba(51, 122, 183, 0);\n transition: all 0.5s;\n }\n .slick-initialized .swipe-tab:hover {\n color: #337AB7;\n }\n .slick-initialized .swipe-tab.active-tab {\n border-bottom-color: #337AB7;\n color: #337AB7;\n font-weight: bold;\n }\n\n .disabled {\n opacity: .5;\n pointer-events: none;\n }\n\n .select2-container {\n margin-top: -5px;\n }\n\n .btn {\n padding: 0px 12px !important;\n }\n\n .form-tooltip{\n color:rgb(51, 122, 183);\n display: inline-block;\n }\n .question-info{\n opacity:0;\n height:0px;\n display: none;\n transition-duration: opacity 1s ease-out;\n transtion-delay: 0.5s;\n padding-top: 2px;\n padding-bottom: 2px;\n color: #696969;\n border-style: ridge;\n border-width: 1px;\n border-color: #337ab7;\n margin-top: 2px;\n }\n .hide-info{\n display:none;\n height:0px;\n }\n .form-tooltip:hover ~ .question-info {\n display:block;\n opacity:1;\n height:auto;\n }\n .form-tooltip .tooltipcontent::after {\n content: \" \";\n position: absolute;\n bottom: 100%; /* At the top of the tooltip */\n right: 0%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #337ab7;\n border-left-color: transparent;\n }\n\n ng-select.form-control {\n padding-top: 0;\n height: auto;\n padding-bottom: 0;\n }\n\n .forms-dropdown-menu {\n max-height: 450px;\n overflow-y: scroll;\n }\n .no-border {\n border: 0;\n box-shadow: none;\n}\n.time-control{\n width:100%;\n}\n\n `;\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DataSources {\n private _dataSources: any = {};\n constructor() {}\n\n get dataSources(): any {\n return this._dataSources;\n }\n\n registerDataSource(key: string, dataSource: any, unWrap = false) {\n if (unWrap) {\n // tslint:disable-next-line:forin\n for (const o in dataSource) {\n console.log('registering', o, dataSource[o]);\n this.registerDataSource(o, dataSource[o], false);\n }\n }\n if (this.dataSources[key]) {\n console.warn('Overriding registered data source', key);\n }\n this._dataSources[key] = dataSource;\n }\n\n clearDataSource(key: string) {\n delete this._dataSources[key];\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Inject,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport 'hammerjs';\nimport { DEFAULT_STYLES } from './form-renderer.component.css';\nimport { DOCUMENT } from '@angular/common';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, LeafNode, GroupNode } from '../form-factory/form-node';\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { FormErrorsService } from '../services/form-errors.service';\nimport { QuestionGroup } from '../question-models/group-question';\n// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';\n// import * as _ from 'lodash';\n\n// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';\n// import { QuestionBase } from '../question-models';\n\n@Component({\n selector: 'form-renderer',\n template: `<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <div class=\"dropdown dropdown-tabs forms-dropdown\">\n <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">\n <i class=\"fa fa-angle-double-down\"></i>\n </a>\n <ul\n class=\"dropdown-menu dropdown-menu-right forms-dropdown-menu\"\n role=\"menu\"\n aria-labelledby=\"dropdownMenu\"\n >\n <li\n *ngFor=\"let question of node.question.questions; let i = index\"\n (click)=\"clickTab(i)\"\n >\n {{ question.label }}\n </li>\n </ul>\n </div>\n <mat-tab-group\n (selectedIndexChange)=\"tabSelected($event)\"\n [selectedIndex]=\"activeTab\"\n >\n <mat-tab\n [label]=\"question.label\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <div (swipeLeft)=\"loadNextTab()\" (swipeRight)=\"loadPreviousTab()\">\n <form-renderer\n [node]=\"node.children[question.key]\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div style=\"text-align: center\">\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadPreviousTab()\"\n [ngClass]=\"{ disabled: isCurrentTabFirst() }\"\n >\n &lt;&lt;\n </button>\n <button\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"loadNextTab()\"\n [ngClass]=\"{ disabled: isCurrentTabLast() }\"\n >\n &gt;&gt;\n </button>\n </div>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--<h2>{{node.question.label}}</h2>-->\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div class=\"panel panel-primary\">\n <div class=\"panel-heading\">\n <button\n type=\"button\"\n class=\"btn btn-primary pull-right\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n {{ isCollapsed ? 'Show' : 'Hide' }}\n </button>\n {{ node.question.label }}\n </div>\n <div class=\"panel-body\" [collapse]=\"isCollapsed\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n ></form-renderer>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">&times;</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n class=\"form-group\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"control-label\"\n [attr.for]=\"node.question.key\"\n >\n {{ node.question.required ? '*' : '' }} {{ node.question.label }}\n </label>\n <div [ngSwitch]=\"node.question.renderingType\">\n <select\n class=\"form-control\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option *ngFor=\"let o of node.question.options\" [ngValue]=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n\n <app-file-upload\n *ngSwitchCase=\"'file'\"\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </app-file-upload>\n <textarea\n [placeholder]=\"node.question.placeholder\"\n [rows]=\"node.question.rows\"\n class=\"form-control\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n </textarea>\n <!--\n <ng-select *ngSwitchCase=\"'remote-select'\" [items]=\"items$ | async\" bindLabel=\"label\" bindValue=\"value\" placeholder=\"{{node.question.placeholder}}\"\n [hideSelected]=\"true\" [loading]=\"itemsLoading\" [typeahead]=\"itemsInput$\" [formControlName]=\"node.question.key\" [id]=\"node.question.key + 'id'\">\n </ng-select>\n -->\n <remote-select\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></remote-select>\n <!-- \n <date-time-picker *ngSwitchCase=\"'date'\" [showTime]=\"node.question.showTime\" tabindex=\"0\" [weeks]='node.question.extras.questionOptions.weeksList'\n (onDateChange)=\"onDateChanged(node)\" [showWeeks]=\"node.question.showWeeksAdder\" [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"></date-time-picker>\n -->\n\n <ngx-date-time-picker\n *ngSwitchCase=\"'date'\"\n [showTime]=\"node.question.showTime\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n (onDateChange)=\"onDateChanged(node)\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n ></ngx-date-time-picker>\n <ngx-time-picker \n *ngSwitchCase=\"'time'\" \n id=\"node.question.key + 'id'\" \n [formControlName]=\"node.question.key\"\n ></ngx-time-picker>\n <ng-select\n *ngSwitchCase=\"'multi-select'\"\n [style.height]=\"'auto'\"\n [style.overflow-x]=\"'hidden'\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"true\"\n >\n </ng-select>\n <ng-select\n *ngSwitchCase=\"'single-select'\"\n [style.height]=\"auto\"\n tabindex=\"0\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [options]=\"node.question.options\"\n [multiple]=\"false\"\n >\n </ng-select>\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'number'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [step]=\"'any'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchCase=\"'decimal'\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"'text'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n />\n <input\n class=\"form-control\"\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let o of node.question.options\">\n <label class=\"form-control no-border\">\n <input\n type=\"radio\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [value]=\"o.value\"\n />\n {{ o.label }}\n </label>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <checkbox\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue && node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\">Previous Value: </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{ node.question.historicalDisplay._date | timeAgo }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [node]=\"node\"\n [name]=\"'historyValue'\"\n class=\"btn btn-primary btn-small col-xs-3\"\n >\n Use Value\n </button>\n </div>\n </div>\n </div>\n <appointments-overview [node]=\"node\"></appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <p *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo }}\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">{{ node.question.label }}</h4>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n ></form-renderer>\n <button\n type=\"button \"\n class=\"btn btn-sm btn-danger\"\n (click)=\"node.removeAt(i)\"\n >\n Remove\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button \"\n class=\"btn btn-primary\"\n (click)=\"node.createChildNode()\"\n >\n Add\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n ></form-renderer>\n </div>\n </div>\n</div>\n`,\n styles: ['../../style/app.css', DEFAULT_STYLES]\n})\nexport class FormRendererComponent implements OnInit {\n @Input() public parentComponent: FormRendererComponent;\n @Input() public node: NodeBase;\n @Input() public parentGroup: AfeFormGroup;\n public childComponents: FormRendererComponent[] = [];\n public showTime: boolean;\n public showWeeks: boolean;\n public activeTab: number;\n public dataSource: DataSource;\n public isCollapsed = false;\n public auto: any;\n\n // items$: Observable<any[]>;\n // itemsLoading = false;\n // itemsInput$ = new Subject<string>();\n\n constructor(\n private validationFactory: ValidationFactory,\n private dataSources: DataSources,\n private formErrorsService: FormErrorsService,\n @Inject(DOCUMENT) private document: any\n ) {\n this.activeTab = 0;\n }\n\n public ngOnInit() {\n this.setUpRemoteSelect();\n this.setUpFileUpload();\n if (this.node && this.node.form) {\n const tab = this.node.form.valueProcessingInfo.lastFormTab;\n if (tab && tab !== this.activeTab) {\n this.activeTab = tab;\n }\n }\n if (this.node && this.node.question.renderingType === 'form') {\n this.formErrorsService.announceErrorField$.subscribe((error) => {\n this.scrollToControl(error);\n });\n }\n\n if (this.node && this.node.question.renderingType === 'section') {\n this.isCollapsed = !(this.node.question as QuestionGroup).isExpanded;\n }\n\n if (this.parentComponent) {\n this.parentComponent.addChildComponent(this);\n }\n }\n\n public addChildComponent(child: FormRendererComponent) {\n this.childComponents.push(child);\n }\n\n public setUpRemoteSelect() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'remote-select'\n ) {\n // let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n /*\n let defaltValues = of([]);\n if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {\n defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(\n catchError(() => of([])), // empty list on error\n );\n }\n this.items$ = concat(\n defaltValues,\n this.itemsInput$.pipe(\n debounceTime(200),\n distinctUntilChanged(),\n tap(() => this.itemsLoading = true),\n switchMap(term => this.dataSource.searchOptions(term).pipe(\n catchError(() => of([])), // empty list on error\n tap(() => {\n this.itemsLoading = false\n })\n ))\n )\n );\n */\n if (this.dataSource && this.node.question.dataSourceOptions) {\n this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;\n }\n }\n }\n\n public setUpFileUpload() {\n if (\n this.node &&\n this.node.question.extras &&\n this.node.question.renderingType === 'file'\n ) {\n this.dataSource = this.dataSources.dataSources[\n this.node.question.dataSource\n ];\n // console.log('Key', this.node.question);\n // console.log('Data source', this.dataSource);\n }\n }\n\n checkSection(node: NodeBase) {\n if (node.question.renderingType === 'section') {\n let groupChildrenHidden = false;\n const allSectionControlsHidden = Object.keys(node.children).every((k) => {\n const innerNode = node.children[k];\n if (innerNode instanceof GroupNode) {\n groupChildrenHidden = Object.keys(innerNode.children).every(\n (i) => innerNode.children[i].control.hidden\n );\n }\n return node.children[k].control.hidden || groupChildrenHidden;\n });\n return !allSectionControlsHidden;\n }\n return true;\n }\n\n public clickTab(tabNumber) {\n this.activeTab = tabNumber;\n }\n\n public loadPreviousTab() {\n if (!this.isCurrentTabFirst()) {\n this.clickTab(this.activeTab - 1);\n document.body.scrollTop = 0;\n }\n }\n\n public isCurrentTabFirst() {\n return this.activeTab === 0;\n }\n\n public isCurrentTabLast() {\n return this.activeTab === this.node.question['questions'].length - 1;\n }\n\n public loadNextTab() {\n if (!this.isCurrentTabLast()) {\n this.clickTab(this.activeTab + 1);\n document.body.scrollTop = 0;\n }\n }\n public tabSelected($event) {\n this.activeTab = $event;\n this.setPreviousTab();\n }\n public setPreviousTab() {\n if (this.node && this.node.form) {\n this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;\n }\n }\n public hasErrors() {\n return this.node.control.touched && !this.node.control.valid;\n }\n\n public errors() {\n return this.getErrors(this.node);\n }\n\n public scrollToControl(error: string) {\n const tab: number = +error.split(',')[0];\n const elSelector = error.split(',')[1] + 'id';\n\n // the tab components\n const tabComponent: FormRendererComponent = this.childComponents[tab];\n\n this.clickTab(tab);\n\n setTimeout(() => {\n // expand all sections\n tabComponent.childComponents.forEach((section) => {\n section.isCollapsed = false;\n\n setTimeout(() => {\n const element: any = this.document.getElementById(elSelector);\n if (element !== null && element.focus) {\n element.focus();\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n });\n }, 200);\n }\n\n public onDateChanged(node: LeafNode) {\n // console.log('Node', node);\n this.node = node;\n }\n\n public upload(event) {\n // console.log('Event', event);\n // console.log('Data', this.dataSource);\n }\n\n public toggleInformation(infoId) {\n const e = document.getElementById(infoId);\n\n if (e.style.display === 'block') {\n e.style.display = 'none';\n } else {\n e.style.display = 'block';\n }\n\n console.log('InfoId', infoId);\n }\n\n private getErrors(node: NodeBase) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n}\n","import * as _ from 'lodash';\n\nimport { FormFactory } from './form.factory';\nimport { QuestionFactory } from './question.factory';\nimport { DataSources } from '../data-sources/data-sources';\nimport { NodeBase, GroupNode, LeafNode, ArrayNode } from './form-node';\nimport { QuestionBase } from '../question-models/question-base';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\nimport { AfeFormArray } from '../../abstract-controls-extension/afe-form-array';\n\nexport class Form {\n public rootNode: GroupNode;\n public valueProcessingInfo: any = {};\n public existingOrders: any = {};\n private _dataSourcesContainer: DataSources;\n private _showErrors = false;\n constructor(\n public schema: any,\n public formFactory: FormFactory,\n public questionFactory: QuestionFactory\n ) {\n this._dataSourcesContainer = new DataSources();\n }\n\n get dataSourcesContainer(): DataSources {\n return this._dataSourcesContainer;\n }\n\n searchNodeByPath(node: GroupNode, path, found: Array<NodeBase>) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n this.searchNodeByPath(child, path, found);\n } else if (child instanceof LeafNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n } else if (child instanceof ArrayNode) {\n if (path === child.path) {\n found.push(child);\n return found;\n }\n\n const aChild: ArrayNode = child as ArrayNode;\n\n aChild.children.forEach((aChildNode) => {\n this.searchNodeByPath(aChildNode, path, found);\n });\n }\n }\n }\n\n return found;\n }\n\n searchNodeByQuestionId(\n questionId: string,\n questionType?: string\n ): Array<NodeBase> {\n const found = [];\n if (questionType) {\n this.searchNodeByQuestionType(this.rootNode, questionType, found);\n } else {\n this.findNodesByQuestionId(this.rootNode, questionId, found);\n }\n return found;\n }\n\n searchNodeByQuestionType(\n rootNode: any,\n questionType: string,\n found: Array<NodeBase>\n ) {\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.searchNodeByQuestionType(\n nodeAsGroup.children[o],\n questionType,\n found\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.searchNodeByQuestionType(node, questionType, found);\n });\n }\n\n if (rootNode instanceof LeafNode) {\n const questionBase: QuestionBase = rootNode.question;\n\n if (\n questionBase.extras &&\n questionBase.extras.type &&\n questionBase.extras.type === questionType\n ) {\n found.push(rootNode);\n }\n }\n }\n\n private findNodesByQuestionId(\n rootNode: NodeBase,\n questionId: string,\n results: Array<NodeBase>\n ) {\n if (rootNode.question.key === questionId) {\n results.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this.findNodesByQuestionId(\n nodeAsGroup.children[o],\n questionId,\n results\n );\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this.findNodesByQuestionId(node, questionId, results);\n });\n }\n }\n\n get valid() {\n return this.rootNode.control.valid;\n }\n\n set showErrors(show: boolean) {\n this._showErrors = show;\n }\n\n get showErrors() {\n return this._showErrors;\n }\n\n markInvalidControls(node: GroupNode, invalidControlNodes?: any) {\n const children: NodeBase = node.children;\n\n for (const key in children) {\n if (children.hasOwnProperty(key)) {\n const child: NodeBase = children[key];\n\n if (child instanceof GroupNode) {\n this.markInvalidControls(child, invalidControlNodes);\n } else if (child instanceof LeafNode) {\n const questionBase: QuestionBase = (child as LeafNode).question;\n\n if (questionBase.key && questionBase.key.length > 0) {\n const c: AfeFormControl | AfeFormArray = child.control as\n | AfeFormControl\n | AfeFormArray;\n\n if (!c.valid && !c.disabled) {\n if (invalidControlNodes) {\n invalidControlNodes.push(child);\n }\n\n c.markAsTouched();\n }\n }\n } else if (child instanceof ArrayNode) {\n const arrayNode: ArrayNode = child as ArrayNode;\n\n if (\n arrayNode &&\n arrayNode.children &&\n arrayNode.children.length > 0\n ) {\n _.forEach(arrayNode.children, (groupNode: any) => {\n this.markInvalidControls(groupNode, invalidControlNodes);\n });\n }\n }\n }\n }\n\n return invalidControlNodes;\n }\n\n updateHiddenDisabledStateForAllControls() {\n this._updateHiddenDisabledStateForAllControls(this.rootNode);\n }\n\n updateAlertsForAllControls() {\n this._updateAlertsForAllControls(this.rootNode);\n }\n\n private _updateAlertsForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateAlert) {\n (rootNode.control as any).updateAlert();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateAlertsForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateAlertsForAllControls(node);\n });\n }\n }\n private _updateHiddenDisabledStateForAllControls(rootNode: NodeBase) {\n if (rootNode.control) {\n if ((rootNode.control as any).updateDisabledState) {\n (rootNode.control as any).updateDisabledState();\n }\n\n if ((rootNode.control as any).updateHiddenState) {\n (rootNode.control as any).updateHiddenState();\n }\n }\n\n if (rootNode instanceof GroupNode) {\n const nodeAsGroup = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n this._updateHiddenDisabledStateForAllControls(nodeAsGroup.children[o]);\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const nodeAsArray = rootNode as ArrayNode;\n\n nodeAsArray.children.forEach((node) => {\n this._updateHiddenDisabledStateForAllControls(node);\n });\n }\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { Form } from '../form-factory/form';\nimport { ValidationFactory } from '../form-factory/validation.factory';\nimport { NodeBase, LeafNode } from '../form-factory/form-node';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { FormErrorsService } from '../services/form-errors.service';\n\n@Component({\n selector: 'error-renderer',\n template: `<div *ngIf=\"showErrors()\" class=\"container\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-warning\"\n *ngFor=\"let errorNode of errorNodes\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"error\" *ngIf=\"errorNode.control.valid == false\">\n <h4>{{ errorNode.question.label }}</h4>\n <span class=\"text-danger\"> {{ getControlError(errorNode) }}</span>\n </div>\n </li>\n </ul>\n</div>\n`,\n styles: [`ul{list-style:none}.list-group-item{padding:2px 15px;cursor:pointer}ul li:hover{background-color:#fff}h4{margin-top:7px;margin-bottom:7px}`]\n})\nexport class ErrorRendererComponent implements OnInit {\n @Input() form: Form;\n\n constructor(\n private validationFactory: ValidationFactory,\n private formErrorsService: FormErrorsService\n ) {}\n\n ngOnInit() {}\n\n showErrors() {\n return !this.form.valid && this.form.showErrors;\n }\n\n get errorNodes() {\n const invalidControls = this.form.markInvalidControls(\n this.form.rootNode,\n []\n );\n return invalidControls;\n }\n\n getControlError(node: LeafNode) {\n const errors: any = node.control.errors;\n\n if (errors) {\n return this.validationFactory.errors(errors, node.question);\n }\n\n return [];\n }\n\n announceErrorField(errorNode: LeafNode) {\n const nodes: Array<NodeBase> = this.form.searchNodeByQuestionId(\n errorNode.path.substring(0, errorNode.path.indexOf('.'))\n );\n\n _.forEach(nodes, (node: NodeBase) => {\n if (node.question.renderingType === 'page') {\n const pageIndex: number = this.getPageIndex(node);\n this.formErrorsService.announceErrorField(\n pageIndex + ',' + errorNode.question.key\n );\n }\n });\n }\n\n getPageIndex(node: NodeBase) {\n const questionGroup: QuestionGroup = this.form.rootNode\n .question as QuestionGroup;\n return questionGroup.questions.indexOf(node.question);\n }\n}\n","import * as _ from 'lodash';\nimport { QuestionBase } from '../question-models/question-base';\n\nexport class HistoricalFieldHelperService {\n public getDisplayTextFromOptions(\n question: QuestionBase,\n valueProperty: string,\n displayProperty: string\n ): string {\n let displayText = '';\n const historicalValue = question.historicalDataValue;\n if (_.isArray(historicalValue.value)) {\n let valueConverted = 0;\n _.each(historicalValue.value, (val) => {\n _.each(question.options, (option) => {\n if (option[valueProperty] === val) {\n if (valueConverted === 0) {\n displayText = displayText + option[displayProperty];\n } else {\n displayText = displayText + ', ' + option[displayProperty];\n }\n valueConverted++;\n }\n });\n });\n } else {\n _.each(question.options, (option) => {\n if (option[valueProperty] === historicalValue.value) {\n displayText = option[displayProperty];\n }\n });\n }\n return displayText;\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport { HistoricalFieldHelperService } from '../helpers/historical-field-helper-service';\nimport * as _ from 'lodash';\nimport { NodeBase } from '../form-factory/form-node';\n\n@Directive({\n selector: `[node]`\n})\nexport class HistoricalValueDirective {\n @Input() _node: NodeBase;\n @Output() _nodeChange = new EventEmitter<Object>();\n\n historicalDisplay: string;\n\n constructor(private historicalFieldHelper: HistoricalFieldHelperService) {}\n\n @HostListener('click', ['$event'])\n setValue(e) {\n if (e.target.name === 'historyValue') {\n if (\n this._node &&\n (!this.compareString(this._node.question.renderingType, 'page') ||\n !this.compareString(this._node.question.renderingType, 'section'))\n ) {\n this._node.control.setValue(\n this._node.question.historicalDataValue.value\n );\n\n this._node.question[\n 'historicalValue'\n ] = this._node.question.historicalDataValue;\n e.stopPropagation();\n this._nodeChange.emit(this._node);\n }\n }\n }\n private compareString(a, b) {\n if (a === b) {\n return true;\n } else {\n return false;\n }\n }\n @Input()\n set node(node: NodeBase) {\n if (node) {\n this._node = node;\n if (\n this._node.question.enableHistoricalValue &&\n !_.isUndefined(this._node.question.historicalDataValue)\n ) {\n const display: any = { text: '', _date: '' };\n if (\n this._node.question.renderingType === 'select' ||\n this._node.question.renderingType === 'multi-select' ||\n this._node.question.renderingType === 'single-select'\n ) {\n display.text = this.historicalFieldHelper.getDisplayTextFromOptions(\n this._node.question,\n 'value',\n 'label'\n );\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n } else if (!_.isUndefined(this._node.question.historicalDataValue)) {\n display.text = this._node.question.historicalDataValue.value;\n display._date = this._node.question.historicalDataValue.valueDate;\n\n this._node.question['historicalDisplay'] = display;\n }\n }\n }\n }\n}\n","export const STYLE = `\nng-select {\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle;\n width: 100%;\n}\nng-select * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nng-select > div {\n border: 1px solid #ddd;\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n width: 100%;\n}\nng-select > div.disabled {\n background-color: #eee;\n color: #aaa;\n cursor: default;\n pointer-events: none;\n}\nng-select > div > div.single {\n display: flex;\n height: 30px;\n width: 100%;\n}\nng-select > div > div.single > div.value,\nng-select > div > div.single > div.placeholder {\n flex: 1;\n line-height: 30px;\n overflow: hidden;\n padding: 0 10px;\n white-space: nowrap;\n}\nng-select > div > div.single > div.placeholder {\n color: #a9a9a9;\n}\nng-select > div > div.single > div.clear,\nng-select > div > div.single > div.toggle {\n color: #aaa;\n line-height: 30px;\n text-align: center;\n width: 30px;\n}\nng-select > div > div.single > div.clear:hover,\nng-select > div > div.single > div.toggle:hover {\n background-color: #ececec;\n}\nng-select > div > div.single > div.clear {\n font-size: 18px;\n}\nng-select > div > div.single > div.toggle {\n font-size: 14px;\n}\nng-select > div > div.multiple {\n display: flex;\n flex-flow: row wrap;\n height: 100%;\n min-height: 30px;\n padding: 0 10px;\n width: 100%;\n}\nng-select > div > div.multiple > div.option {\n background-color: #eee;\n border: 1px solid #aaa;\n border-radius: 4px;\n color: #333;\n cursor: default;\n display: inline-block;\n flex-shrink: 0;\n font-size: 14px;\n line-height: 22px;\n margin: 3px 5px 3px 0;\n padding: 0 4px;\n}\nng-select > div > div.multiple > div.option span.deselect-option {\n color: #aaa;\n cursor: pointer;\n font-size: 14px;\n height: 20px;\n line-height: 20px;\n}\nng-select > div > div.multiple > div.option span.deselect-option:hover {\n color: #555;\n}\nng-select > div > div.multiple input {\n background-color: transparent;\n border: none;\n height: 30px;\n line-height: 30px;\n padding: 0;\n}\nng-select > div > div.multiple input:focus {\n outline: none;\n}\n`;\n","export const STYLE = `select-dropdown {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown * {\n box-sizing: border-box;\n font-family: Sans-Serif;\n}\nselect-dropdown > div {\n background-color: #fff;\n border: 1px solid #ccc;\n border-top: none;\n box-sizing: border-box;\n position: absolute;\n z-index: 1;\n}\nselect-dropdown > div .filter {\n padding: 3px;\n width: 100%;\n}\nselect-dropdown > div .filter input {\n border: 1px solid #eee;\n box-sizing: border-box;\n padding: 4px;\n width: 100%;\n}\nselect-dropdown > div .options {\n max-height: 200px;\n overflow-y: auto;\n}\nselect-dropdown > div .options ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nselect-dropdown > div .options ul li {\n padding: 4px 8px;\n cursor: pointer;\n user-select: none;\n}\nselect-dropdown .selected {\n background-color: #e0e0e0;\n}\nselect-dropdown .selected.highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .highlighted {\n background-color: #2196F3;\n color: #fff;\n}\nselect-dropdown .disabled {\n background-color: #fff;\n color: #9e9e9e;\n cursor: default;\n pointer-events: none;\n}`;\n","export class Option {\n value: string;\n label: string;\n\n disabled: boolean;\n highlighted: boolean;\n selected: boolean;\n shown: boolean;\n\n constructor(value: string, label: string) {\n this.value = value;\n this.label = label;\n\n this.disabled = false;\n this.highlighted = false;\n this.selected = false;\n this.shown = true;\n }\n\n show() {\n this.shown = true;\n }\n\n hide() {\n this.shown = false;\n }\n\n disable() {\n this.disabled = true;\n }\n\n enable() {\n this.disabled = false;\n }\n\n undecoratedCopy() {\n return {\n label: this.label,\n value: this.value\n };\n }\n}\n","export class Diacritics {\n static DIACRITICS = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n\n static strip(text: string): string {\n const match = (a: string): string => {\n return this.DIACRITICS[a] || a;\n };\n if (text) {\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n } else {\n return '';\n }\n }\n}\n","import { Option } from './option';\nimport { Diacritics } from './diacritics';\n\nexport class OptionList {\n private _options: Array<Option>;\n\n /* Consider using these for performance improvement. */\n // private _selection: Array<Option>;\n // private _filtered: Array<Option>;\n // private _value: Array<string>;\n\n private _highlightedOption: Option = null;\n // v0 and v1 are assumed not to be undefined or null.\n static equalValues(v0: Array<string>, v1: Array<string>): boolean {\n if (v0.length !== v1.length) {\n return false;\n }\n\n const a: Array<string> = v0.slice().sort();\n const b: Array<string> = v1.slice().sort();\n\n return a.every((v, i) => {\n return v === b[i];\n });\n }\n\n constructor(options: Array<any>) {\n if (typeof options === 'undefined' || options === null) {\n options = [];\n }\n\n this._options = options.map((option) => {\n const o: Option = new Option(option.value, option.label);\n if (option.disabled) {\n o.disable();\n }\n return o;\n });\n\n this.highlight();\n }\n\n /** Options. **/\n\n get options(): Array<Option> {\n return this._options;\n }\n\n getOptionsByValue(value: string): Array<Option> {\n return this.options.filter((option) => {\n return option.value === value;\n });\n }\n\n /** Value. **/\n\n get value(): Array<string> {\n return this.selection.map((selectedOption) => {\n return selectedOption.value;\n });\n }\n\n set value(v: Array<string>) {\n v = typeof v === 'undefined' || v === null ? [] : v;\n\n this.options.forEach((option) => {\n option.selected = v.indexOf(option.value) > -1;\n });\n }\n\n /** Selection. **/\n\n get selection(): Array<Option> {\n return this.options.filter((option) => {\n return option.selected;\n });\n }\n\n select(option: Option, multiple: boolean) {\n if (!multiple) {\n this.clearSelection();\n }\n option.selected = true;\n }\n\n deselect(option: Option) {\n option.selected = false;\n }\n\n clearSelection() {\n this.options.forEach((option) => {\n option.selected = false;\n });\n }\n\n /** Filter. **/\n\n get filtered(): Array<Option> {\n return this.options.filter((option) => {\n return option.shown;\n });\n }\n\n filter(term: string) {\n if (term.trim() === '') {\n this.resetFilter();\n } else {\n this.options.forEach((option) => {\n const l: string = Diacritics.strip(option.label).toUpperCase();\n const t: string = Diacritics.strip(term).toUpperCase();\n option.shown = l.indexOf(t) > -1;\n });\n }\n\n this.highlight();\n }\n\n resetFilter() {\n this.options.forEach((option) => {\n option.shown = true;\n });\n }\n\n /** Highlight. **/\n\n get highlightedOption(): Option {\n return this._highlightedOption;\n }\n\n highlight() {\n const option: Option = this.hasShownSelected()\n ? this.getFirstShownSelected()\n : this.getFirstShown();\n this.highlightOption(option);\n }\n\n highlightOption(option: Option) {\n this.clearHighlightedOption();\n\n if (option !== null) {\n option.highlighted = true;\n this._highlightedOption = option;\n }\n }\n\n highlightNextOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > -1 && index < shownOptions.length - 1) {\n this.highlightOption(shownOptions[index + 1]);\n }\n }\n\n highlightPreviousOption() {\n const shownOptions = this.filtered;\n const index = this.getHighlightedIndexFromList(shownOptions);\n\n if (index > 0) {\n this.highlightOption(shownOptions[index - 1]);\n }\n }\n\n private clearHighlightedOption() {\n if (this.highlightedOption !== null) {\n this.highlightedOption.highlighted = false;\n this._highlightedOption = null;\n }\n }\n\n private getHighlightedIndexFromList(options: Array<Option>) {\n for (let i = 0; i < options.length; i++) {\n if (options[i].highlighted) {\n return i;\n }\n }\n return -1;\n }\n\n getHighlightedIndex() {\n return this.getHighlightedIndexFromList(this.filtered);\n }\n\n /** Util. **/\n\n hasShown() {\n return this.options.some((option) => {\n return option.shown;\n });\n }\n\n hasSelected() {\n return this.options.some((option) => {\n return option.selected;\n });\n }\n\n hasShownSelected() {\n return this.options.some((option) => {\n return option.shown && option.selected;\n });\n }\n\n private getFirstShown(): Option {\n for (const option of this.options) {\n if (option.shown) {\n return option;\n }\n }\n return null;\n }\n\n private getFirstShownSelected(): Option {\n for (const option of this.options) {\n if (option.shown && option.selected) {\n return option;\n }\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { STYLE } from './select-dropdown.component.style';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\n@Component({\n selector: 'select-dropdown',\n template: `<div [ngStyle]=\"{ 'top.px': top, 'left.px': left, 'width.px': width }\">\n <div class=\"filter\" *ngIf=\"!multiple\">\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n (click)=\"onSingleFilterClick($event)\"\n (input)=\"onSingleFilterInput($event)\"\n (keydown)=\"onSingleFilterKeydown($event)\"\n />\n </div>\n\n <div class=\"options\" #optionsList>\n <ul (wheel)=\"onOptionsWheel($event)\">\n <li\n *ngFor=\"let option of optionList.filtered\"\n [ngClass]=\"{\n highlighted: option.highlighted,\n selected: option.selected,\n disabled: option.disabled\n }\"\n [ngStyle]=\"getOptionStyle(option)\"\n (click)=\"onOptionClick(option)\"\n (mouseover)=\"onOptionMouseover(option)\"\n >\n {{ option.label }}\n </li>\n <li *ngIf=\"!optionList.hasShown()\" class=\"message\">\n {{ notFoundMsg }}\n </li>\n </ul>\n </div>\n</div>\n`,\n styles: [STYLE],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectDropdownComponent\n implements AfterViewInit, OnChanges, OnInit {\n @Input() filterEnabled: boolean;\n @Input() highlightColor: string;\n @Input() highlightTextColor: string;\n @Input() left: number;\n @Input() multiple: boolean;\n @Input() notFoundMsg: string;\n @Input() optionList: OptionList;\n @Input() top: number;\n @Input() width: number;\n\n @Output() close = new EventEmitter<boolean>();\n @Output() optionClicked = new EventEmitter<Option>();\n @Output() singleFilterClick = new EventEmitter<null>();\n @Output() singleFilterInput = new EventEmitter<string>();\n @Output() singleFilterKeydown = new EventEmitter<any>();\n\n @ViewChild('filterInput') filterInput: any;\n @ViewChild('optionsList') optionsList: any;\n\n disabledColor = '#fff';\n disabledTextColor = '9e9e9e';\n\n /** Event handlers. **/\n\n // Angular life cycle hooks.\n\n ngOnInit() {\n this.optionsReset();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('optionList')) {\n this.optionsReset();\n }\n }\n\n ngAfterViewInit() {\n this.moveHighlightedIntoView();\n if (!this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n }\n\n // Filter input (single select).\n\n onSingleFilterClick(event: any) {\n this.singleFilterClick.emit(null);\n }\n\n onSingleFilterInput(event: any) {\n this.singleFilterInput.emit(event.target.value);\n }\n\n onSingleFilterKeydown(event: any) {\n this.singleFilterKeydown.emit(event);\n }\n\n // Options list.\n\n onOptionsWheel(event: any) {\n this.handleOptionsWheel(event);\n }\n\n onOptionMouseover(option: Option) {\n this.optionList.highlightOption(option);\n }\n\n onOptionClick(option: Option) {\n this.optionClicked.emit(option);\n }\n\n /** Initialization. **/\n\n private optionsReset() {\n this.optionList.resetFilter();\n this.optionList.highlight();\n }\n\n /** View. **/\n\n getOptionStyle(option: Option): any {\n if (option.highlighted) {\n return {\n 'background-color': this.highlightColor,\n color: this.highlightTextColor\n };\n } else {\n return {};\n }\n }\n\n clearFilterInput() {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n }\n }\n\n moveHighlightedIntoView() {\n const list = this.optionsList.nativeElement;\n const listHeight = list.offsetHeight;\n\n const itemIndex = this.optionList.getHighlightedIndex();\n\n if (itemIndex > -1) {\n const item = list.children[0].children[itemIndex];\n const itemHeight = item.offsetHeight;\n\n const itemTop = itemIndex * itemHeight;\n const itemBottom = itemTop + itemHeight;\n\n const viewTop = list.scrollTop;\n const viewBottom = viewTop + listHeight;\n\n if (itemBottom > viewBottom) {\n list.scrollTop = itemBottom - listHeight;\n } else if (itemTop < viewTop) {\n list.scrollTop = itemTop;\n }\n }\n }\n\n private handleOptionsWheel(e: any) {\n const div = this.optionsList.nativeElement;\n const atTop = div.scrollTop === 0;\n const atBottom = div.offsetHeight + div.scrollTop === div.scrollHeight;\n\n if (atTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (atBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n Input,\n OnChanges,\n OnInit,\n Output,\n EventEmitter,\n ExistingProvider,\n ViewChild,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { STYLE } from './select.component.style';\nimport { SelectDropdownComponent } from './select-dropdown.component';\nimport { Option } from './option';\nimport { OptionList } from './option-list';\n\nexport const SELECT_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable:no-use-before-declare\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n};\n\n@Component({\n selector: 'ng-select',\n template: `<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{\n open: isOpen,\n focus: hasFocus,\n below: isBelow,\n disabled: disabled\n }\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\"\n (window:click)=\"onWindowClick()\"\n (window:resize)=\"onWindowResize()\"\n>\n <div class=\"single\" *ngIf=\"!multiple\">\n <div class=\"value\" *ngIf=\"optionList.hasSelected()\">\n {{ optionList.selection[0].label }}\n </div>\n <div class=\"placeholder\" *ngIf=\"!optionList.hasSelected()\">\n {{ placeholderView }}\n </div>\n <div\n class=\"clear\"\n *ngIf=\"allowClear\"\n (click)=\"onClearSelectionClick($event)\"\n >\n &#x2715;\n </div>\n <div class=\"toggle\" *ngIf=\"isOpen\">&#x25B2;</div>\n <div class=\"toggle\" *ngIf=\"!isOpen\">&#x25BC;</div>\n </div>\n\n <div class=\"multiple\" *ngIf=\"multiple\">\n <div class=\"option\" *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\" (click)=\"onDeselectOptionClick(option)\">\n &#x2715;\n </span>\n {{ option.label }}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{ 'width.px': filterInputWidth }\"\n (input)=\"onMultipleFilterInput($event)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n />\n </div>\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n (close)=\"onDropdownClose($event)\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterInput)=\"onSingleFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\"\n>\n</select-dropdown>\n`,\n styles: [STYLE],\n providers: [SELECT_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent\n implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit {\n /** Keys. **/\n\n private KEYS: any = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n };\n\n @Input() options: Array<any>;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() highlightColor = '#2196f3';\n @Input() highlightTextColor = '#fff';\n @Input() multiple = false;\n @Input() noFilter = 0;\n @Input() notFoundMsg = 'No results found';\n @Input() placeholder = '';\n\n @Output() opened: EventEmitter<null> = new EventEmitter<null>();\n @Output() closed: EventEmitter<null> = new EventEmitter<null>();\n @Output() selected: EventEmitter<any> = new EventEmitter<any>();\n @Output() deselected: EventEmitter<any> = new EventEmitter<any>();\n @Output() typed: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild('selection') selectionSpan: any;\n @ViewChild('dropdown') dropdown: SelectDropdownComponent;\n @ViewChild('filterInput') filterInput: any;\n\n private _value: Array<any> = [];\n optionList: OptionList;\n\n // Selection state variables.\n hasSelected = false;\n\n // View state variables.\n filterEnabled = true;\n filterInputWidth = 1;\n hasFocus = false;\n isBelow = true;\n isDisabled = false;\n isOpen = false;\n placeholderView = '';\n\n clearClicked = false;\n selectContainerClicked = false;\n\n // Width and position for the dropdown container.\n width: number;\n top: number;\n left: number;\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n\n /** Event handlers. **/\n\n // Angular lifecycle hooks.\n\n ngOnInit() {\n this.placeholderView = this.placeholder;\n }\n\n ngAfterViewInit() {\n this.updateFilterWidth();\n }\n\n ngOnChanges(changes: any) {\n if (changes.hasOwnProperty('options')) {\n this.updateOptionsList(changes['options'].isFirstChange());\n }\n if (changes.hasOwnProperty('noFilter')) {\n const numOptions: number = this.optionList.options.length;\n const minNumOptions: number = changes['noFilter'].currentValue;\n this.filterEnabled = numOptions >= minNumOptions;\n }\n }\n\n // Window.\n\n onWindowClick() {\n if (!this.selectContainerClicked) {\n this.closeDropdown();\n }\n this.clearClicked = false;\n this.selectContainerClicked = false;\n }\n\n onWindowResize() {\n this.updateWidth();\n }\n\n // Select container.\n\n onSelectContainerClick(event: any) {\n this.selectContainerClicked = true;\n if (!this.clearClicked) {\n this.toggleDropdown();\n }\n }\n\n onSelectContainerFocus() {\n this.onTouched();\n }\n\n onSelectContainerKeydown(event: any) {\n this.handleSelectContainerKeydown(event);\n }\n\n // Dropdown container.\n\n onDropdownOptionClicked(option: Option) {\n this.multiple ? this.toggleSelectOption(option) : this.selectOption(option);\n }\n\n onDropdownClose(focus: any) {\n this.closeDropdown(focus);\n }\n\n // Single filter input.\n\n onSingleFilterClick() {\n this.selectContainerClicked = true;\n }\n\n onSingleFilterInput(term: string) {\n setTimeout(() => {\n if (term.length > 2) {\n this.typed.emit(term);\n }\n }, 500);\n this.optionList.filter(term);\n }\n\n onSingleFilterKeydown(event: any) {\n this.handleSingleFilterKeydown(event);\n }\n\n // Multiple filter input.\n\n onMultipleFilterInput(event: any) {\n if (!this.isOpen) {\n this.openDropdown();\n }\n this.updateFilterWidth();\n setTimeout(() => {\n this.optionList.filter(event.target.value);\n });\n }\n\n onMultipleFilterKeydown(event: any) {\n this.handleMultipleFilterKeydown(event);\n }\n\n // Single clear select.\n\n onClearSelectionClick(event: any) {\n this.clearClicked = true;\n this.clearSelection();\n this.closeDropdown(true);\n }\n\n // Multiple deselect option.\n\n onDeselectOptionClick(option: Option) {\n this.clearClicked = true;\n this.deselectOption(option);\n }\n\n /** API. **/\n\n // TODO fix issues with global click/key handler that closes the dropdown.\n open() {\n this.openDropdown();\n }\n\n close() {\n this.closeDropdown();\n }\n\n clear() {\n this.clearSelection();\n }\n\n select(value: string) {\n this.optionList.getOptionsByValue(value).forEach((option) => {\n this.selectOption(option);\n });\n this.valueChanged();\n }\n\n /** ControlValueAccessor interface methods. **/\n\n writeValue(value: any) {\n this.value = value;\n }\n\n registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Value. **/\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this.multiple ? this._value : this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n\n if (!OptionList.equalValues(v, this._value)) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n private valueChanged() {\n this._value = this.optionList.value;\n\n this.hasSelected = this._value.length > 0;\n this.placeholderView = this.hasSelected ? '' : this.placeholder;\n this.updateFilterWidth();\n\n this.onChange(this.value);\n }\n\n /** Initialization. **/\n\n private updateOptionsList(firstTime: boolean) {\n let v: Array<string>;\n\n if (!firstTime) {\n v = this.optionList.value;\n }\n\n this.optionList = new OptionList(this.options);\n\n if (!firstTime) {\n this.optionList.value = v;\n this.valueChanged();\n }\n }\n\n /** Dropdown. **/\n\n private toggleDropdown() {\n if (!this.isDisabled) {\n this.isOpen ? this.closeDropdown(true) : this.openDropdown();\n }\n }\n\n private openDropdown() {\n if (!this.isOpen) {\n this.updateWidth();\n this.updatePosition();\n this.isOpen = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n }\n this.opened.emit(null);\n }\n }\n /* tslint:disable */\n private closeDropdown(focus: boolean = false) {\n if (this.isOpen) {\n this.clearFilterInput();\n this.isOpen = false;\n if (focus) {\n this.focus();\n }\n this.closed.emit(null);\n }\n }\n /* tslint:enable */\n /** Select. **/\n\n private selectOption(option: Option) {\n if (!option.selected) {\n this.optionList.select(option, this.multiple);\n this.valueChanged();\n this.selected.emit(option.undecoratedCopy());\n // Is this not allready done when setting the value??\n /*setTimeout(() => {\n if (this.multiple) {\n this.updateFilterWidth();\n }\n });*/\n }\n }\n\n private deselectOption(option: Option) {\n if (option.selected) {\n this.optionList.deselect(option);\n this.valueChanged();\n this.deselected.emit(option.undecoratedCopy());\n setTimeout(() => {\n if (this.multiple) {\n // this.updateFilterWidth();\n this.updatePosition();\n this.optionList.highlight();\n if (this.isOpen) {\n this.dropdown.moveHighlightedIntoView();\n }\n }\n });\n }\n }\n\n private clearSelection() {\n const selection: Array<Option> = this.optionList.selection;\n if (selection.length > 0) {\n this.optionList.clearSelection();\n this.valueChanged();\n\n if (selection.length === 1) {\n this.deselected.emit(selection[0].undecoratedCopy());\n } else {\n this.deselected.emit(\n selection.map((option) => {\n return option.undecoratedCopy();\n })\n );\n }\n }\n }\n\n private toggleSelectOption(option: Option) {\n option.selected ? this.deselectOption(option) : this.selectOption(option);\n }\n\n private selectHighlightedOption() {\n const option: Option = this.optionList.highlightedOption;\n if (option !== null) {\n this.selectOption(option);\n this.closeDropdown(true);\n }\n }\n\n private deselectLast() {\n const sel: Array<Option> = this.optionList.selection;\n\n if (sel.length > 0) {\n const option: Option = sel[sel.length - 1];\n this.deselectOption(option);\n this.setMultipleFilterInput(option.label + ' ');\n }\n }\n\n /** Filter. **/\n\n private clearFilterInput() {\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.value = '';\n } else {\n this.dropdown.clearFilterInput();\n }\n }\n\n private setMultipleFilterInput(value: string) {\n if (this.filterEnabled) {\n this.filterInput.nativeElement.value = value;\n }\n }\n\n private handleSelectContainerKeydown(event: any) {\n const key = event.which;\n\n if (this.isOpen) {\n if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) {\n this.closeDropdown(true);\n } else if (key === this.KEYS.TAB) {\n this.closeDropdown();\n } else if (key === this.KEYS.ENTER) {\n this.selectHighlightedOption();\n } else if (key === this.KEYS.UP) {\n this.optionList.highlightPreviousOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n } else if (key === this.KEYS.DOWN) {\n this.optionList.highlightNextOption();\n this.dropdown.moveHighlightedIntoView();\n if (!this.filterEnabled) {\n event.preventDefault();\n }\n }\n } else {\n if (\n key === this.KEYS.ENTER ||\n key === this.KEYS.SPACE ||\n (key === this.KEYS.DOWN && event.altKey)\n ) {\n /* FIREFOX HACK:\n *\n * The setTimeout is added to prevent the enter keydown event\n * to be triggered for the filter input field, which causes\n * the dropdown to be closed again.\n */\n setTimeout(() => {\n this.openDropdown();\n });\n }\n }\n }\n\n private handleMultipleFilterKeydown(event: any) {\n const key = event.which;\n\n if (key === this.KEYS.BACKSPACE) {\n if (\n this.hasSelected &&\n this.filterEnabled &&\n this.filterInput.nativeElement.value === ''\n ) {\n this.deselectLast();\n }\n }\n }\n\n private handleSingleFilterKeydown(event: any) {\n const key = event.which;\n\n if (\n key === this.KEYS.ESC ||\n key === this.KEYS.TAB ||\n key === this.KEYS.UP ||\n key === this.KEYS.DOWN ||\n key === this.KEYS.ENTER\n ) {\n this.handleSelectContainerKeydown(event);\n }\n }\n\n /** View. **/\n\n focus() {\n this.hasFocus = true;\n if (this.multiple && this.filterEnabled) {\n this.filterInput.nativeElement.focus();\n } else {\n this.selectionSpan.nativeElement.focus();\n }\n }\n\n blur() {\n this.hasFocus = false;\n this.selectionSpan.nativeElement.blur();\n }\n\n updateWidth() {\n this.width = this.selectionSpan.nativeElement.offsetWidth;\n }\n\n updatePosition() {\n const e = this.selectionSpan.nativeElement;\n this.left = e.offsetLeft;\n this.top = e.offsetTop + e.offsetHeight;\n }\n\n updateFilterWidth() {\n if (typeof this.filterInput !== 'undefined') {\n const value: string = this.filterInput.nativeElement.value;\n this.filterInputWidth =\n value.length === 0\n ? 1 + this.placeholderView.length * 10\n : 1 + value.length * 10;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { SelectComponent } from './select.component';\nimport { SelectDropdownComponent } from './select-dropdown.component';\n\n@NgModule({\n declarations: [SelectComponent, SelectDropdownComponent],\n exports: [SelectComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class SelectModule {}\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n WrappedValue,\n ChangeDetectorRef\n} from '@angular/core';\nimport { of } from 'rxjs';\n\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DomSanitizer } from '@angular/platform-browser';\n// import { FileUploadResourceService } from '../../etl-api/file-upload-resource.service';\n\n// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML.\n// tslint:disable-next-line:use-pipe-transform-interface\n@Pipe({\n name: 'secure',\n pure: false\n})\nexport class SecurePipe implements PipeTransform, OnDestroy {\n private _latestValue: any = null;\n private _latestReturnedValue: any = null;\n private _subscription: Subscription = null;\n private _obj: Observable<any> = null;\n private getfile;\n private previousUrl: string;\n private _result: BehaviorSubject<any> = new BehaviorSubject(null);\n private result: Observable<any> = this._result.asObservable();\n private _internalSubscription: Subscription = null;\n\n constructor(\n private _ref: ChangeDetectorRef,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnDestroy(): void {\n if (this._subscription) {\n this._dispose();\n }\n }\n\n transform(url: string, getfile): any {\n this.getfile = getfile;\n const obj = this.internalTransform(url);\n return this.asyncTrasnform(obj);\n }\n\n private internalTransform(url: string): Observable<any> {\n if (!url) {\n return this.result;\n }\n\n if (this.previousUrl !== url) {\n this.previousUrl = url;\n this._internalSubscription = this.getfile(url).subscribe((m) => {\n const sanitized = this.sanitizer.bypassSecurityTrustUrl(m);\n this._result.next(sanitized);\n });\n }\n\n return this.result;\n }\n\n private asyncTrasnform(obj: Observable<any>): any {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.asyncTrasnform(obj);\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n\n private _subscribe(obj: Observable<any>) {\n const _this = this;\n this._obj = obj;\n\n this._subscription = obj.subscribe({\n next: function (value) {\n return _this._updateLatestValue(obj, value);\n },\n error: (e: any) => {\n throw e;\n }\n });\n }\n\n private _dispose() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n if (this._internalSubscription) {\n this._internalSubscription.unsubscribe();\n }\n\n this._internalSubscription = null;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n\n private _updateLatestValue(async: any, value: Object) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurePipe } from './components/file-upload/secure.pipe';\nimport { DataSources } from './form-entry/data-sources/data-sources';\n@NgModule({\n declarations: [SecurePipe],\n imports: [CommonModule],\n exports: [SecurePipe],\n providers: [DataSources]\n})\nexport class SharedModule {}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n Renderer2,\n ChangeDetectorRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport { SecurePipe } from './secure.pipe';\n@Component({\n selector: 'app-file-upload',\n template: `<lib-file-uploader\n [srcUrl]=\"pdfUrl\"\n [formEntry]=\"formEntryMode\"\n [(ngModel)]=\"fileUuid\"\n (_onClear)=\"clearValue()\"\n (uploadData)=\"onFileChange($event)\"\n>\n</lib-file-uploader>\n<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!pdfUploaded\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this.dataSource.fetchFile\"\n alt=\"\"\n />\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true\n }\n ],\n styles: [\n `\n img {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n `\n ]\n})\nexport class FileUploadComponent implements OnInit, ControlValueAccessor {\n uploading = false;\n fileUuid = null;\n pdfUploaded = false;\n formEntryMode = true;\n pdfUrl: string;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.fileUuid) {\n this.checkFileType();\n }\n }\n public onFileChange(fileList) {\n for (const file of fileList) {\n this.upload(file);\n }\n }\n upload(data) {\n if (this.dataSource) {\n this.uploading = true;\n this.dataSource.fileUpload(data).subscribe(\n (result) => {\n this.fileUuid = result.image;\n this.checkFileType();\n this.propagateChange(this.fileUuid);\n this.uploading = false;\n },\n (error) => {\n this.uploading = false;\n }\n );\n }\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value !== this.fileUuid) {\n this.fileUuid = value;\n this.checkFileType();\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (_: any) => {};\n\n public clearValue() {\n this.fileUuid = null;\n this.pdfUploaded = false;\n this.pdfUrl = null;\n this.propagateChange(this.fileUuid);\n }\n\n public getPdfUrl(fileUuid: string) {\n this.dataSource.fetchFile(fileUuid, 'pdf').subscribe((file) => {\n this.pdfUploaded = true;\n this.pdfUrl = file.changingThisBreaksApplicationSecurity;\n });\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.getPdfUrl(this.fileUuid);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { NgxFileUploaderModule } from 'ngx-file-uploader';\n\nimport { SharedModule } from '../../shared.module';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { FileUploadComponent } from './file-upload.component';\nimport { WebcamModule } from 'ngx-webcam';\n\n@NgModule({\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n SharedModule,\n WebcamModule,\n NgxFileUploaderModule\n ],\n exports: [FileUploadComponent],\n declarations: [FileUploadComponent],\n providers: []\n})\nexport class RemoteFileUploadModule {}\n","/**\n * date-picker.component\n */\n\nimport { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport * as _ from 'lodash';\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./date-picker.component.css');\n// const myDpTpl: string = require('./date-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'date-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelDatePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">\n <div class=\"picker-header-nav\">\n <span class=\"nav-prev\" (click)=\"prev()\"></span>\n </div>\n <div class=\"picker-header-content\">\n <div class=\"content\">\n <span (click)=\"showMonthSelection()\" class=\"month\">{{\n calendarDate | moment: 'MMMM'\n }}</span>\n <span class=\"seperator\">|</span>\n <span (click)=\"showYearSelection()\" class=\"year\">{{\n calendarDate | moment: 'YYYY'\n }}</span>\n </div>\n </div>\n <div class=\"picker-header-nav\">\n <span class=\"nav-next\" (click)=\"next()\"></span>\n </div>\n </div>\n <div class=\"picker-calendar\">\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span class=\"picker-weekday\" *ngFor=\"let day of dayNames\">{{\n day\n }}</span>\n </div>\n <div\n class=\"picker-calendar-row\"\n *ngIf=\"!onDisplayMonths && !onDisplayYears\"\n >\n <span\n class=\"picker-day\"\n (click)=\"selectDay(day)\"\n [ngClass]=\"{\n 'out-focus': day.month() != calendarDate.month(),\n today: day.isSame(today),\n selected: day.isSame(selectedDate)\n }\"\n *ngFor=\"let day of calendarDays\"\n >\n {{ day | moment: 'D' }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayMonths\">\n <span\n class=\"picker-month\"\n *ngFor=\"let month of monthsShort\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{\n selected: month === currentMonth\n }\"\n >\n {{ month }}\n </span>\n </div>\n <div class=\"picker-calendar-row\" *ngIf=\"onDisplayYears\">\n <span\n class=\"picker-year\"\n *ngFor=\"let year of displayYearRange\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{\n selected: year === currentYear\n }\"\n >\n {{ year }}\n </span>\n </div>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-today\" (click)=\"selectToday()\">\n <span class=\"text\">Today</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearPickDate()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelDatePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:666px}.picker-box{font-family:'Open Sans';min-width:400px!important;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;display:flex;height:2.5rem;width:100%}.picker-header-nav{position:relative;cursor:pointer;width:calc(100% / 8)}.picker-header-nav>*{position:absolute;top:50%;right:auto;bottom:auto;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.picker-header-nav .nav-next::before,.picker-header-nav .nav-prev::before{content:' ';border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker-header-nav .nav-next::before{border-right:0;border-left:.75em solid #000}.picker-header-content{width:calc(100% * 6 / 8);text-align:center}.picker-header-content .month{font-size:1.778rem;line-height:2.5rem;margin-right:.5rem;font-weight:700}.picker-header-content .year{font-style:italic;color:#999}.picker-calendar{width:100%}.picker-calendar .picker-calendar-row{display:flex;flex-wrap:wrap;width:100%;margin-bottom:.625rem}.picker-calendar .picker-weekday{font-weight:700;text-align:left;color:#999;width:calc(100% / 7)}.picker-calendar .picker-day,.picker-calendar .picker-month,.picker-calendar .picker-year{font-size:1.333rem;line-height:2.5rem;position:relative;height:2.5rem;text-align:center;cursor:pointer;width:calc(100% / 7)}.picker-calendar .picker-day:hover,.picker-calendar .picker-month:hover,.picker-calendar .picker-year:hover{background:#b1dcfb}.picker-calendar .out-focus{color:#ddd}.picker-calendar .out-focus:hover{color:#000}.picker-calendar .selected{background:#0089ec;color:#fff}.picker-calendar .selected:hover{background:#0089ec}.picker-calendar .today::before{content:' ';position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker-footer{cursor:pointer}.picker-footer .picker-action{text-align:center;width:calc(100% / 3)}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-today::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-today::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class DatePickerComponent implements OnInit {\n public dayNames: Array<string>;\n\n @Input() public initDate: any;\n @Input() public locale = 'en';\n @Input() public viewFormat = 'll';\n @Input() public returnObject = 'js';\n @Output() public onDatePickerCancel = new EventEmitter<boolean>();\n @Output() public onSelectDate = new EventEmitter<any>();\n\n public calendarDate: Moment;\n public selectedDate: Moment;\n public currentMonth: any;\n public today: Moment;\n public currentYear: number;\n public onDisplayMonths = false;\n public onDisplayYears = false;\n public displayYearsIndex = 0;\n public displayYearRange: Array<number>;\n public fullYearRange: Array<any>;\n public monthsShort: Array<string> = moment.monthsShort();\n public calendarDays: Array<Moment>;\n\n constructor() {}\n\n public ngOnInit(): void {\n this.initValue();\n // default to current year range\n _.each(this.fullYearRange, (v, i) => {\n this.currentYear = this.calendarDate.clone().startOf('year').year();\n if (v.indexOf(this.currentYear) !== -1) {\n this.displayYearsIndex = i;\n }\n });\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n this.generateCalendar();\n }\n\n public prev(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex--;\n if (this.displayYearsIndex < 0) {\n this.displayYearsIndex = 0;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex];\n } else {\n this.calendarDate = this.calendarDate.clone().subtract(1, 'M');\n }\n this.generateCalendar();\n }\n\n public showMonthSelection(): void {\n this.onDisplayMonths = true;\n this.onDisplayYears = false;\n }\n\n public showYearSelection(): void {\n this.onDisplayYears = true;\n this.onDisplayMonths = false;\n }\n\n public next(): void {\n if (this.onDisplayYears) {\n this.displayYearsIndex++;\n if (this.displayYearsIndex >= this.fullYearRange.length) {\n this.displayYearsIndex = this.fullYearRange.length - 1;\n }\n this.displayYearRange = this.fullYearRange[this.displayYearsIndex++];\n } else {\n this.calendarDate = this.calendarDate.clone().add(1, 'M');\n }\n this.generateCalendar();\n }\n\n public selectDay(day: Moment): void {\n const daysDifference = day.diff(\n this.calendarDate.clone().startOf('date'),\n 'days'\n );\n day = this.calendarDate.clone().add(daysDifference, 'd');\n const selectedDay = this.parseToReturnObjectType(day);\n this.onSelectDate.emit(selectedDay);\n this.cancelDatePicker();\n return;\n }\n\n public selectMonth(month: string) {\n this.calendarDate = this.calendarDate.clone().month(month);\n this.onDisplayMonths = false;\n this.generateCalendar();\n }\n\n public selectYear(year: number) {\n this.calendarDate = this.calendarDate.clone().year(year);\n this.onDisplayYears = false;\n this.generateCalendar();\n }\n\n public selectToday(): void {\n const today = this.parseToReturnObjectType(moment());\n this.onSelectDate.emit(today);\n this.cancelDatePicker();\n return;\n }\n\n public clearPickDate(): void {\n this.onSelectDate.emit(null);\n this.cancelDatePicker();\n return;\n }\n\n public cancelDatePicker(): void {\n this.onDatePickerCancel.emit(false);\n return;\n }\n\n protected generateYears(): void {\n const currentYear = moment().year();\n const startYr = this.calendarDate.clone().subtract(100, 'y').year();\n // const endYr = this.calendarDate.clone().add(10, 'y').year();\n const years = [];\n for (let year = startYr; year <= currentYear; year++) {\n years.push(year);\n }\n\n this.fullYearRange = _.chunk(years, 14);\n }\n\n protected initValue() {\n // set moment locale (default is en)\n moment.locale(this.locale);\n // set today value\n this.today = moment().startOf('date');\n this.currentMonth = this.monthsShort[moment().month()];\n this.currentYear = moment().year();\n\n // set week days name array\n this.dayNames = moment.weekdaysShort(true);\n\n // check if the input initDate has value\n if (this.initDate) {\n this.calendarDate =\n this.returnObject === 'string'\n ? moment(this.initDate, this.viewFormat)\n : moment(this.initDate);\n this.selectedDate = this.calendarDate.clone().startOf('date');\n } else {\n this.calendarDate = moment();\n }\n this.generateYears();\n }\n\n protected generateCalendar(): void {\n this.calendarDays = [];\n const start =\n 0 -\n ((this.calendarDate.clone().startOf('month').day() +\n (7 - moment.localeData().firstDayOfWeek())) %\n 7);\n const end = 41 + start; // iterator ending point\n\n for (let i = start; i <= end; i += 1) {\n const day = this.calendarDate.clone().startOf('month').add(i, 'days');\n this.calendarDays.push(day);\n }\n }\n\n protected parseToReturnObjectType(day: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return day.toDate();\n\n case 'string':\n return day.format(this.viewFormat);\n\n case 'moment':\n return day;\n\n case 'json':\n return day.toJSON();\n\n case 'array':\n return day.toArray();\n\n case 'iso':\n return day.toISOString();\n\n case 'object':\n return day.toObject();\n\n default:\n return day;\n }\n }\n}\n","/**\n * time-picker.component\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\nimport { Moment } from 'moment/moment';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./time-picker.component.css');\n// const myDpTpl: string = require('./time-picker.component.html');\n// webpack2_\n\n@Component({\n selector: 'time-picker',\n template: `<picker-modal (onOverlayClick)=\"cancelTimePicker()\">\n <div class=\"picker-wrap\">\n <div class=\"picker-box\">\n <div class=\"picker-header\">Time Picker</div>\n <div class=\"picker-table\">\n <ul class=\"picker-table-time\">\n <li class=\"picker-table-number hour\">\n <span class=\"arrow up\" (click)=\"increaseHour()\"></span>\n {{ time | moment: hourFormat }}\n <span class=\"arrow down\" (click)=\"decreaseHour()\"></span>\n </li>\n <li class=\"picker-table-separator\">:</li>\n <li class=\"picker-table-number minute\">\n <span class=\"arrow up\" (click)=\"increaseMinute()\"></span>\n {{ time | moment: 'mm' }}\n <span class=\"arrow down\" (click)=\"decreaseMinute()\"></span>\n </li>\n <li *ngIf=\"showSecond\" class=\"picker-table-separator\">:</li>\n <li *ngIf=\"showSecond\" class=\"picker-table-number second\">\n <span class=\"arrow up\" (click)=\"increaseSecond()\"></span>\n {{ time | moment: 'ss' }}\n <span class=\"arrow down\" (click)=\"decreaseSecond()\"></span>\n </li>\n <li *ngIf=\"use12Hour\" class=\"picker-table-meridiem meridiem\">\n {{ time | moment: 'A' }}\n </li>\n </ul>\n </div>\n <div class=\"picker-footer\">\n <div class=\"picker-action action-now\" (click)=\"selectNow()\">\n <span class=\"text\">Now</span>\n </div>\n <div class=\"picker-action action-confirm\" (click)=\"selectTime()\">\n <span class=\"text\">Confirm</span>\n </div>\n <div class=\"picker-action action-clear\" (click)=\"clearTime()\">\n <span class=\"text\">Clear</span>\n </div>\n <div class=\"picker-action action-close\" (click)=\"cancelTimePicker()\">\n <span class=\"text\">Close</span>\n </div>\n </div>\n </div>\n </div>\n</picker-modal>\n`,\n styles: [`*,::after,::before{box-sizing:border-box}.picker-wrap{width:95vw;max-width:40rem;font-family:'Open Sans'}.picker-box{width:100%;padding:.625rem 1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-footer,.picker-header{font-size:1.333rem;line-height:2.5rem;height:2.5rem;width:100%}.picker-header{text-align:center}.picker-table{width:100%;margin:2.5rem 0}.picker-table-time{font-size:2.37rem;line-height:2.5rem;list-style:none;margin:0;padding:0;display:flex;justify-content:center;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker-table-meridiem,.picker-table-number,.picker-table-separator{text-align:center}.picker-table-meridiem,.picker-table-number{position:relative;width:20%}.arrow{position:absolute;left:50%;border:solid #777;border-width:0 .2rem .2rem 0;display:inline-block;padding:.25rem;cursor:pointer}.arrow.up{top:-1rem;-webkit-transform:translateX(-50%) rotate(-135deg);transform:translateX(-50%) rotate(-135deg)}.arrow.down{bottom:-1rem;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.arrow:hover{border-color:#1975d2}.picker-table-separator{width:calc(20% / 3)}.picker-footer{display:flex;justify-content:center;width:100%;cursor:pointer}.picker-footer .picker-action{width:25%;text-align:center}.picker-footer .picker-action:hover{background-color:#b1dcfb}.picker-footer .picker-action .text{padding-left:.8rem}.picker-footer .action-clear::before,.picker-footer .action-close::before,.picker-footer .action-confirm::before,.picker-footer .action-now::before{content:' ';position:relative;display:inline-block;height:0;width:0}.picker-footer .action-now::before{border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker-footer .action-confirm::before{width:1rem;height:1rem;border-radius:100%;background-color:#00b5ad}.picker-footer .action-clear::before{top:-.5rem;width:1rem;border-top:3px solid #e20}.picker-footer .action-close::before{width:1rem;height:1rem;background:linear-gradient(to bottom,transparent 35%,#777 35%,#777 65%,transparent 65%),linear-gradient(to right,transparent 35%,#777 35%,#777 65%,transparent 65%);-webkit-transform:rotate(45deg);transform:rotate(45deg)}`]\n})\nexport class TimePickerComponent implements OnInit {\n @Input() initTime: any;\n @Input() showSecond = true;\n @Input() viewFormat = 'hh:mm A';\n @Input() use12Hour = false;\n @Input() returnObject = 'js';\n @Output() onSelectTime = new EventEmitter<any>();\n @Output() onTimePickerCancel = new EventEmitter<boolean>();\n hourFormat = 'HH';\n public time: Moment;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.use12Hour) {\n this.hourFormat = 'hh';\n }\n this.time = this.initTime\n ? moment(this.initTime, this.viewFormat)\n : moment();\n\n // check if the input initDate has value\n if (this.initTime) {\n this.time =\n this.returnObject === 'string'\n ? moment(this.initTime, this.viewFormat)\n : moment(this.initTime);\n } else {\n this.time = moment();\n }\n }\n\n increaseHour(): void {\n this.time = this.time.clone().add(1, 'h');\n }\n\n decreaseHour(): void {\n this.time = this.time.clone().subtract(1, 'h');\n }\n\n increaseMinute() {\n this.time = this.time.clone().add(1, 'm');\n }\n\n decreaseMinute() {\n this.time = this.time.clone().subtract(1, 'm');\n }\n\n increaseSecond(): void {\n this.time = this.time.clone().add(1, 's');\n }\n\n decreaseSecond(): void {\n this.time = this.time.clone().subtract(1, 's');\n }\n\n selectTime(): void {\n const selectTime = this.parseToReturnObjectType(this.time);\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n selectNow(): void {\n const selectTime = this.parseToReturnObjectType(moment());\n this.onSelectTime.emit(selectTime);\n this.cancelTimePicker();\n return;\n }\n\n clearTime(): void {\n this.onSelectTime.emit(null);\n this.cancelTimePicker();\n return;\n }\n\n cancelTimePicker(): void {\n this.onTimePickerCancel.emit(false);\n return;\n }\n\n protected parseToReturnObjectType(time: Moment): any {\n switch (this.returnObject) {\n case 'js':\n return time.toDate();\n\n case 'string':\n return time.format(this.viewFormat);\n\n case 'moment':\n return time;\n\n case 'json':\n return time.toJSON();\n\n case 'array':\n return time.toArray();\n\n case 'iso':\n return time.toISOString();\n\n case 'object':\n return time.toObject();\n\n default:\n return time;\n }\n }\n}\n","/**\n * modal.component\n */\n\nimport {\n Component,\n Output,\n OnInit,\n EventEmitter,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n// webpack1_\ndeclare let require: any;\n// const myDpStyles: string = require('./modal.component.css');\n// const myDpTpl: string = require('./modal.component.html');\n// webpack2_\n\n@Component({\n selector: 'picker-modal',\n template: `<section class=\"x-modal\">\n <section class=\"modal-overlay\" (click)=\"closeModal()\"></section>\n <section class=\"modal-main\" id=\"section-modal-main\">\n <ng-content></ng-content>\n </section>\n</section>\n`,\n styles: [`:host{z-index:9999999999}*,::after,::before{box-sizing:border-box}.modal-main{position:absolute;left:19.6%;right:auto;top:auto;z-index:111;background-color:#fff;border:1px solid #d7dad7;border-radius:6px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);box-shadow:0 5px 15px rgba(0,0,0,.3)}`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: []\n})\nexport class ModalComponent implements OnInit {\n @Output() onOverlayClick = new EventEmitter<boolean>();\n\n constructor() {}\n\n ngOnInit() {}\n\n closeModal() {\n this.onOverlayClick.emit(false);\n }\n}\n","/**\n * moment.pipe\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Moment } from 'moment/moment';\n\n@Pipe({ name: 'moment' })\nexport class MomentPipe implements PipeTransform {\n transform(moment: Moment, format?: string): string {\n return format ? moment.format(format) : moment.format('MMM DD, YYYY');\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as moment_ from 'moment';\n\nconst Moment = moment_;\n\n@Component({\n selector: 'date-time-picker',\n template: `<div class=\"row\">\n <div *ngIf=\"!showTime\" class=\"col-xs-12 col-md-12\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-8 col-md-8\">\n <input\n *ngIf=\"!showWeeks\"\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div *ngIf=\"showWeeks\" class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control\"\n class=\"form-control\"\n [value]=\"value | date: 'mediumDate'\"\n (focus)=\"toggleDatePicker(true)\"\n readonly\n placeholder=\"Select Date\"\n />\n <div class=\"input-group-btn\">\n <button\n type=\"button\"\n class=\"btn btn-default dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n Weeks <span class=\"caret\"></span>\n </button>\n <ul class=\"dropdown-menu up\">\n <li (click)=\"weeksSelected(count)\" *ngFor=\"let count of weeks\">\n <span> {{ count }} Weeks</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"col-xs-4 col-md-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n </div>\n</div>\n<date-picker\n *ngIf=\"showDatePicker\"\n [initDate]=\"value\"\n (onSelectDate)=\"setDate($event)\"\n (onDatePickerCancel)=\"toggleDatePicker($event)\"\n></date-picker>\n\n<time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"setTime($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n></time-picker>\n`,\n styles: [`input[readonly]{background-color:#fff}.up{bottom:100%!important;top:auto!important}.glyphicon{top:1px}`],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor {\n @Input() modelValue: any;\n @Input() showDate = true;\n @Input() showTime = false;\n @Input() showWeeks = false;\n @Input() weeks: number[] = [2, 4, 6, 8, 12, 16, 24];\n @Output() onDateChange = new EventEmitter<any>();\n public showDatePicker = false;\n public showTimePicker = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor() {}\n\n ngOnInit() {}\n\n weeksSelected(count) {\n const now = new Date();\n const nextDate = now.setDate(now.getDate() + count * 7);\n this.value = Moment(nextDate).format();\n }\n setDate(date: any): void {\n if (date && date !== '') {\n this.value = Moment(date).format();\n } else {\n this.value = date;\n }\n }\n\n setTime(time: any): void {\n if (time && time !== '') {\n this.value = Moment(time).format();\n } else {\n this.value = time;\n }\n return;\n }\n\n toggleDatePicker(status: boolean): void {\n this.showDatePicker = status;\n /*setTimeout(function() {\n let _body = document.getElementById('content-wrapper').getBoundingClientRect(),\n elem = document.getElementById('section-modal-main');\n if (elem) {\n let elemBox = elem.getBoundingClientRect();\n if (elemBox.bottom > _body.bottom) {\n elem.style.bottom = '36px';\n }\n }\n }, 0);*/\n return;\n }\n\n toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n get value() {\n return this.modelValue;\n }\n\n set value(val) {\n this.modelValue = val;\n this.onDateChange.emit(val);\n this.onChange(val);\n this.onTouched();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n writeValue(value) {\n if (value instanceof Date) {\n this.value = Moment(value).format();\n } else {\n this.value = value;\n }\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { TimePickerComponent } from './time-picker/time-picker.component';\nimport { ModalComponent } from './picker-modal/modal.component';\nimport { MomentPipe } from './pipes/moment.pipe';\nimport { DateTimePickerComponent } from './date-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n exports: [\n DatePickerComponent,\n TimePickerComponent,\n ModalComponent,\n MomentPipe,\n DateTimePickerComponent\n ],\n providers: []\n})\nexport class DateTimePickerModule {}\n","import { Moment } from 'moment/moment';\n\nimport {\n Component,\n OnInit,\n Input,\n forwardRef,\n EventEmitter,\n Output\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormControl\n} from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'LL'\n },\n display: {\n dateInput: 'LL',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY'\n }\n};\n\n@Component({\n selector: 'ngx-date-time-picker',\n template: `<div>\n <div class=\"row\">\n <div [class]=\"getDatePickerCssClass()\">\n <div class=\"input-group\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n class=\"form-control\"\n [value]=\"value\"\n placeholder=\"Choose a date\"\n (dateChange)=\"onDateSelect($event)\"\n (click)=\"picker.open()\"\n readonly\n />\n <mat-datepicker #picker disabled=\"false\"></mat-datepicker>\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n class=\"input-group-btn\"\n ></mat-datepicker-toggle>\n </div>\n </div>\n <div [class]=\"getWeekPickerCssClass()\" *ngIf=\"showWeeks\">\n <mat-select\n placeholder=\"Select Days\"\n class=\"form-control\"\n name=\"weeks\"\n (selectionChange)=\"weekSelect($event)\"\n >\n <mat-option *ngFor=\"let count of weeks\" [value]=\"count\">\n {{ count }} Days\n </mat-option>\n </mat-select>\n </div>\n <div [class]=\"getTimePickerCssClass()\" *ngIf=\"showTime\">\n <input\n type=\"text\"\n class=\"form-control\"\n [value]=\"value | date: 'shortTime'\"\n (focus)=\"toggleTimePicker(true)\"\n readonly\n placeholder=\"Select Time\"\n />\n <time-picker\n *ngIf=\"showTimePicker\"\n [initTime]=\"value\"\n [use12Hour]=\"true\"\n (onSelectTime)=\"onTimeSelect($event)\"\n (onTimePickerCancel)=\"toggleTimePicker($event)\"\n ></time-picker>\n </div>\n </div>\n</div>\n`,\n styles: [`#time-section{display:inline-block}#ngx-atp-time-picker,#ngx-mat-form-field{width:100%}.up{bottom:100%!important;top:auto!important}.time-btn{margin-top:-20px}`],\n providers: [\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n { provide: DateAdapter, useClass: MomentDateAdapter },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateTimePickerComponent),\n multi: true\n }\n ]\n})\nexport class NgxDateTimePickerComponent\n implements OnInit, ControlValueAccessor {\n // public date = new FormControl(moment());\n public selectedTime = moment().format();\n public selectedDate = moment().format();\n public loadInitial = false;\n public value;\n public showTimePicker = false;\n @Input() weeks: number[] = [0, 2, 4, 6, 8, 12, 16, 24];\n @Input() modelValue: any;\n @Input() showTime = false;\n @Input() showWeeks = true;\n @Output() onDateChange = new EventEmitter<any>();\n public onChange: any = () => {};\n public onTouched: any = () => {};\n public ngOnInit() {}\n\n public writeValue(value) {\n this.value = value;\n }\n\n public registerOnChange(fn) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn) {}\n\n public onTimeSelect($event) {\n const setDate = moment(this.selectedDate);\n const setTime = $event;\n this.setDateTime(setDate, setTime);\n }\n\n public onDateSelect($event) {\n const setDate = moment($event.value);\n const setTime = this.selectedTime;\n const dateString = this.setDateTime(setDate, setTime);\n\n const selectedDate = $event.value;\n this.value = dateString;\n }\n\n public toggleTimePicker(status: boolean): void {\n this.showTimePicker = status;\n return;\n }\n\n public setCurrentTime() {\n const setDate = moment(this.selectedDate);\n const currentTime = moment().format('HH:mm:ss');\n this.setDateTime(setDate, currentTime);\n }\n\n public weekSelect($event) {\n const dateToUse = moment().format();\n const nextWeekDate = moment(dateToUse).add($event.value, 'days');\n const nextWeekTime = dateToUse;\n this.setDateTime(nextWeekDate, nextWeekTime);\n }\n\n public selectionChange($event) {\n console.log('Week selected', $event);\n }\n\n public getWeekPickerCssClass() {\n if (this.showTime) {\n return 'col-sm-2 form-group';\n }\n return 'col-sm-3 form-group';\n }\n\n public getDatePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n\n if (this.showTime === true) {\n return 'col-sm-8 form-group';\n }\n return 'col-sm-12 form-group';\n }\n\n public getTimePickerCssClass() {\n if (this.showTime && this.showWeeks) {\n return 'col-sm-5 form-group';\n }\n\n if (this.showWeeks === true) {\n return 'col-sm-9 form-group';\n }\n return 'col-sm-4 form-group';\n }\n\n public setDateTime(setDate, setTime) {\n const newDate = moment(setDate).format('DD-MM-YYYY');\n let newTime;\n if (this.showTime) {\n newTime = moment(setTime).format('HH:mm:ss');\n } else {\n newTime = '00:00:00';\n }\n const newDateTime = moment(newDate + '' + newTime, 'DD-MM-YYYY HH:mm:ss');\n const dateTimeString = moment(newDateTime).format();\n this.selectedDate = dateTimeString;\n this.selectedTime = dateTimeString;\n this.value = dateTimeString;\n this.onChange(this.value);\n\n return dateTimeString;\n }\n}\n","/**\n * date-time-picker.module\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule, MatInputModule } from '@angular/material';\nimport { NgxDateTimePickerComponent } from './ngx-date-time-picker.component';\n// import { AmazingTimePickerModule } from 'amazing-time-picker';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n DateTimePickerModule,\n // AmazingTimePickerModule,\n MatSelectModule\n ],\n declarations: [NgxDateTimePickerComponent],\n exports: [\n MatDatepickerModule,\n MatFormFieldModule,\n MatNativeDateModule,\n MatInputModule,\n NgxDateTimePickerComponent\n ],\n providers: []\n})\nexport class NgxDateTimePickerModule {}\n","import { SelectOption } from './interfaces/select-option';\nexport class Option {\n label: string;\n value: any;\n constructor(options: SelectOption) {\n this.label = options.label;\n this.value = options.value;\n }\n}\n","import { Component, Input, forwardRef, OnInit, OnChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { Option } from '../form-entry/question-models/select-option';\n\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\n@Component({\n selector: 'afe-ng-select',\n template: `<ng-select\n (searchInputText)=\"getChangingText($event)\"\n (ngModelChange)=\"onValueChange($event)\"\n [options]=\"question_options\"\n [multiple]=\"multiple\"\n >\n </ng-select> `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfeNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class AfeNgSelectComponent\n implements ControlValueAccessor, OnInit, OnChanges {\n subject: BehaviorSubject<Option[]>;\n subjectOption: BehaviorSubject<Option>;\n @Input() dataSource: DataSource;\n @Input() multiple: boolean;\n @Input() extras: any;\n question_options: any = [];\n selected_question_option: any;\n errors: any = [];\n propagateChange = (_: any) => {};\n\n getChangingText(event) {\n // console.log(event);\n this.getData(event).subscribe((options) => {\n this.question_options = options;\n });\n }\n\n writeValue(obj: any): void {}\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n ngOnChanges(changes: any) {}\n\n ngOnInit() {\n if (this.extras) {\n if (this.extras.originalValue) {\n this.resolveSelectedOption(this.extras.originalValue).subscribe(\n (option) => {\n this.selected_question_option = option;\n }\n );\n }\n }\n }\n\n getData(searchText: string): Observable<Option[]> {\n this.subject = new BehaviorSubject<Option[]>([]);\n\n const OptionsObservable = this.dataSource.searchOptions(searchText);\n\n OptionsObservable.subscribe(\n (options) => {\n // console.log('options', options);\n const mappedOptions: Option[] = new Array<Option>();\n\n for (let i = 0; i < options.length; i++) {\n mappedOptions.push(new Option(options[i]));\n }\n this.subject.next(mappedOptions);\n },\n (error) => {\n this.subject.error(error);\n }\n );\n\n return this.subject.asObservable();\n }\n\n onValueChange(event) {}\n resolveSelectedOption(value: any): Observable<Option> {\n this.subjectOption = new BehaviorSubject<Option>(null);\n const OptionObservable = this.dataSource.resolveSelectedValue(value);\n\n OptionObservable.subscribe(\n (option) => {\n // console.log('option', option);\n this.subjectOption.next(option);\n },\n (error) => {\n this.subjectOption.error(error);\n }\n );\n\n return this.subjectOption.asObservable();\n }\n\n resetOptions() {\n this.subject.next(new Array<Option>());\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FormSchemaCompiler {\n constructor() {}\n\n public compileFormSchema(\n formSchema: Object,\n referencedComponents: Array<any>\n ): Object {\n // get all referenced forms\n const refForms: Object = this.getReferencedForms(\n formSchema,\n referencedComponents\n );\n if (_.isEmpty(refForms)) {\n return formSchema;\n }\n\n // get all place-holders from the form schema\n const placeHolders = this.getAllPlaceholderObjects(formSchema);\n if (_.isEmpty(placeHolders)) {\n return formSchema;\n }\n\n // replace all placeHolders\n this.replaceAllPlaceholdersWithActualObjects(refForms, placeHolders);\n return formSchema;\n }\n\n private findSchemaByName(\n schemaArray: Array<any>,\n nameOfSchema: string\n ): Object {\n if (_.isEmpty(schemaArray) || _.isEmpty(nameOfSchema)) {\n return;\n }\n let foundSchema: any = {};\n _.each(schemaArray, (schema: any) => {\n if (schema.name === nameOfSchema) {\n foundSchema = schema;\n }\n });\n return foundSchema;\n }\n\n private getPageInSchemaByLabel(schema: any, pageLabel: string): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel)) {\n return;\n }\n let foundPage: Object = {};\n _.each(schema.pages, (page) => {\n if (page.label === pageLabel) {\n foundPage = page;\n }\n });\n return foundPage;\n }\n\n private getSectionInSchemaByPageLabelBySectionLabel(\n schema: Object,\n pageLabel: string,\n sectionLabel: string\n ): Object {\n if (_.isEmpty(schema) || _.isEmpty(pageLabel) || _.isEmpty(sectionLabel)) {\n return;\n }\n const foundPage: any = this.getPageInSchemaByLabel(schema, pageLabel);\n if (_.isEmpty(foundPage)) {\n return;\n }\n let foundSection: Object = {};\n _.each(foundPage.sections, (section) => {\n if (section.label === sectionLabel) {\n foundSection = section;\n }\n });\n return foundSection;\n }\n\n private getQuestionByIdInSchema(schema: any, questionId: string): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n if (Array.isArray(schema)) {\n let question: Array<any>;\n for (let i = 0; i < schema.length; i++) {\n if (!_.isEmpty(schema[i])) {\n question = this.getQuestionByIdInSchema(schema[i], questionId);\n }\n if (!_.isEmpty(question)) {\n break;\n }\n }\n return question;\n } else if (typeof schema === 'object') {\n if (this.isQuestionObjectWithId(schema, questionId)) {\n return schema;\n } else if (this.isSchemaSubObjectExpandable(schema)) {\n const toExpand = schema.pages || schema.sections || schema.questions;\n return this.getQuestionByIdInSchema(toExpand, questionId);\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n private getQuestionsArrayByQuestionIdInSchema(\n schema: any,\n questionId: string\n ): Array<any> {\n if (_.isEmpty(schema) || _.isEmpty(questionId)) {\n return;\n }\n return this.getQuestionsArrayByQuestionId(schema, schema, questionId);\n }\n\n private getQuestionsArrayByQuestionId(\n parent: any,\n object: any,\n questionId: string\n ): Array<any> {\n if (Array.isArray(object)) {\n let returnedValue: Array<any>;\n for (let i = 0; i < object.length; i++) {\n if (!_.isEmpty(object[i])) {\n returnedValue = this.getQuestionsArrayByQuestionId(\n object,\n object[i],\n questionId\n );\n }\n if (!_.isEmpty(returnedValue)) {\n break;\n }\n }\n\n return returnedValue;\n } else if (typeof object === 'object') {\n if (this.isQuestionObjectWithId(object, questionId)) {\n return parent;\n } else if (this.isSchemaSubObjectExpandable(object)) {\n const toExpand = object.pages || object.sections || object.questions;\n return this.getQuestionsArrayByQuestionId(\n toExpand,\n toExpand,\n questionId\n );\n } else {\n return;\n }\n } else {\n return;\n }\n }\n\n // object is page or section or question\n private isSchemaSubObjectExpandable(object: Object): Boolean {\n if (typeof object === 'object') {\n const objectKeys = Object.keys(object);\n if (\n _.includes(objectKeys, 'pages') ||\n _.includes(objectKeys, 'sections') ||\n _.includes(objectKeys, 'questions')\n ) {\n return true;\n }\n }\n return false;\n }\n\n private isQuestionObjectWithId(object: Object, id: any): Boolean {\n return object['id'] === id;\n }\n\n private getAllPlaceholderObjects(schema: Object): Array<any> {\n const referencedObjects: Array<any> = [];\n this.extractPlaceholderObjects(schema, referencedObjects);\n return referencedObjects;\n }\n\n private extractPlaceholderObjects(\n subSchema: any,\n objectsArray: Array<Object>\n ): void {\n if (_.isEmpty(subSchema)) {\n return;\n }\n if (Array.isArray(subSchema)) {\n for (let i = 0; i < subSchema.length; i++) {\n if (!_.isEmpty(subSchema[i])) {\n this.extractPlaceholderObjects(subSchema[i], objectsArray);\n }\n }\n } else if (typeof subSchema === 'object') {\n if (!_.isEmpty(subSchema.reference)) {\n objectsArray.push(subSchema);\n } else if (this.isSchemaSubObjectExpandable(subSchema)) {\n const toExpand =\n subSchema.pages || subSchema.sections || subSchema.questions;\n this.extractPlaceholderObjects(toExpand, objectsArray);\n }\n }\n }\n\n private fillPlaceholderObject(\n placeHolderObject: Object,\n referenceObject: Object\n ): Object {\n for (const member in referenceObject) {\n if (_.isEmpty(placeHolderObject[member])) {\n placeHolderObject[member] = referenceObject[member];\n }\n }\n return placeHolderObject;\n }\n\n private replaceAllPlaceholdersWithActualObjects(\n keyValReferencedForms: Object,\n placeHoldersArray: Array<any>\n ): Array<any> {\n _.each(placeHoldersArray, (placeHolder) => {\n const referencedObject: Object = this.getReferencedObject(\n placeHolder.reference,\n keyValReferencedForms\n );\n\n if (_.isEmpty(referencedObject)) {\n console.error(\n 'Form compile: Error finding referenced object',\n placeHolder.reference\n );\n } else {\n placeHolder = this.fillPlaceholderObject(placeHolder, referencedObject);\n placeHolder = this.removeExcludedQuestionsFromPlaceholder(placeHolder);\n delete placeHolder['reference'];\n }\n });\n return placeHoldersArray;\n }\n\n private removeObjectFromArray(array: Array<any>, object: Object): void {\n const indexOfObject = array.indexOf(object);\n if (indexOfObject === -1) {\n return;\n }\n\n array.splice(indexOfObject, 1);\n }\n\n private removeExcludedQuestionsFromPlaceholder(placeHolder: any): Object {\n if (Array.isArray(placeHolder.reference.excludeQuestions)) {\n _.each(placeHolder.reference.excludeQuestions, (excludedQuestionId) => {\n const questionsArray: Array<any> = this.getQuestionsArrayByQuestionIdInSchema(\n placeHolder,\n excludedQuestionId\n );\n\n if (!Array.isArray(questionsArray)) {\n return;\n }\n const question = this.getQuestionByIdInSchema(\n questionsArray,\n excludedQuestionId\n );\n\n this.removeObjectFromArray(questionsArray, question);\n });\n }\n return placeHolder;\n }\n\n private getReferencedObject(\n referenceData: any,\n keyValReferencedForms: Object\n ): Object {\n if (_.isEmpty(referenceData.form)) {\n console.error(\n 'Form compile: reference missing form attribute',\n referenceData\n );\n return;\n }\n if (_.isEmpty(keyValReferencedForms[referenceData.form])) {\n console.error(\n 'Form compile: referenced form alias not found',\n referenceData\n );\n return;\n }\n if (!_.isEmpty(referenceData.questionId)) {\n return this.getQuestionByIdInSchema(\n keyValReferencedForms[referenceData.form],\n referenceData.questionId\n );\n }\n\n if (!_.isEmpty(referenceData.page) && !_.isEmpty(referenceData.section)) {\n return this.getSectionInSchemaByPageLabelBySectionLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page,\n referenceData.section\n );\n }\n if (!_.isEmpty(referenceData.page)) {\n return this.getPageInSchemaByLabel(\n keyValReferencedForms[referenceData.form],\n referenceData.page\n );\n }\n console.error(\n 'Form compile: Unsupported reference type',\n referenceData.reference\n );\n }\n\n private getReferencedForms(\n formSchema: any,\n formSchemasLookupArray: Array<any>\n ): Object {\n const referencedForms: Array<any> = formSchema.referencedForms;\n\n if (_.isEmpty(referencedForms)) {\n return;\n }\n\n const keyValReferencedForms: Object = {};\n\n _.each(referencedForms, (reference: any) => {\n keyValReferencedForms[reference.alias] = this.findSchemaByName(\n formSchemasLookupArray,\n reference.formName\n );\n });\n return keyValReferencedForms;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TextQuestionOptions } from './interfaces/text-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextInputQuestion extends QuestionBase {\n placeholder: string;\n constructor(options: TextQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { TextInputQuestion } from './text-input-question';\nimport { TextAreaQuestionOptions } from './interfaces/text-area-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TextAreaInputQuestion extends TextInputQuestion {\n isExpanded: boolean;\n rows: number;\n\n constructor(options: TextAreaQuestionOptions) {\n super(options);\n this.placeholder = options.placeholder || '';\n this.isExpanded = options.isExpanded || false;\n this.rows = options.rows || 18;\n this.renderingType = 'textarea';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { SelectQuestionOptions } from './interfaces/select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class SelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n dataSource?: any;\n\n constructor(options: SelectQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n this.dataSource = options.dataSource || '';\n }\n}\n","import { QuestionBase } from './question-base';\nimport { UiSelectQuestionOptions } from './interfaces/ui-select-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class UiSelectQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n searchFunction: Function;\n resolveFunction: Function;\n constructor(options: UiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'ui-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { DateQuestionOptions } from './interfaces/date-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class DateQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n constructor(options: DateQuestionOptions) {\n super(options);\n this.renderingType = 'date';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { SelectQuestion } from './select-question';\nimport { MultiSelectQuestionOptions } from './interfaces/multi-select-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class MultiSelectQuestion extends SelectQuestion {\n options: { key: string; value: string }[];\n\n constructor(options: MultiSelectQuestionOptions) {\n super(options);\n this.renderingType = 'multi-select' || 'single-select';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from '../question-base';\nimport { BaseOptions } from './base-options';\n\nexport abstract class NestedQuestion extends QuestionBase {\n abstract questions: QuestionBase[];\n constructor(options: BaseOptions) {\n super(options);\n }\n}\n","import { QuestionBase } from './question-base';\nimport { GroupQuestionOptions } from './interfaces/group-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class QuestionGroup extends NestedQuestion {\n questions: QuestionBase[];\n isExpanded = true;\n\n constructor(options: GroupQuestionOptions) {\n super(options);\n this.renderingType = 'group';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormGroup;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { RepeatingQuestionOptions } from './interfaces/repeating-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { NestedQuestion } from './interfaces/nested-questions';\n\nexport class RepeatingQuestion extends NestedQuestion {\n questions: QuestionBase[];\n\n constructor(options: RepeatingQuestionOptions) {\n super(options);\n this.renderingType = 'repeating';\n this.questions = options.questions || [];\n this.controlType = AfeControlType.AfeFormArray;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { CheckboxOptions } from './interfaces/checkbox-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class CheckBoxQuestion extends QuestionBase {\n options: { key: string; value: string }[];\n\n constructor(options: CheckboxOptions) {\n super(options);\n this.renderingType = 'checkbox' || 'radio';\n this.options = options.options || [];\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TimeQuestionOptions } from './interfaces/time-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TimeQuestion extends QuestionBase {\n constructor(options: TimeQuestionOptions) {\n super(options);\n this.renderingType = 'time';\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { FileUploadQuestionOptions } from './interfaces/file-upload-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class FileUploadQuestion extends QuestionBase {\n showTime = true;\n showWeeksAdder = false;\n dataSource?: any;\n constructor(options: FileUploadQuestionOptions) {\n super(options);\n this.renderingType = 'file';\n this.dataSource = options.dataSource;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { QuestionBase } from './question-base';\nimport { TestOrderQuestionOptions } from './interfaces/test-order-question-options';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nexport class TestOrderQuestion extends QuestionBase {\n orderType: string;\n selectableOrders: { concept: string; label: string }[];\n orderSettingUuid: string;\n rendering: string;\n options: any[];\n constructor(options: TestOrderQuestionOptions) {\n super(options);\n this.renderingType = 'select';\n this.orderType = options.orderType;\n this.selectableOrders = options.selectableOrders;\n this.options = options.options;\n this.orderSettingUuid = options.orderSettingUuid;\n this.rendering = options.orderSettingUuid;\n this.controlType = AfeControlType.AfeFormControl;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class DateValidationModel extends ValidationModel {\n allowFutureDates = false;\n\n constructor(validations: any) {\n super(validations);\n\n this.allowFutureDates =\n validations.allowFutureDates === 'true' ? true : false;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MaxValidationModel extends ValidationModel {\n max: number;\n\n constructor(validations: any) {\n super(validations);\n const max: any = validations.max;\n this.max = +max;\n }\n}\n","import { ValidationModel } from './validation.model';\n\nexport class MinValidationModel extends ValidationModel {\n min: number;\n\n constructor(validations: any) {\n super(validations);\n const min: any = validations.min;\n this.min = +min;\n }\n}\n","export class DecimalPointValidationModel {\n type: string;\n message: string;\n decimalPlace = 0;\n failsWhenExpression = '';\n\n constructor(validations: any) {\n this.type = 'js_expression';\n this.decimalPlace = validations.decimalPlace;\n }\n setFailExpression(): void {\n this.failsWhenExpression = `!isEmpty(myValue) && String(myValue).split('.')[1].length !== ${this.decimalPlace}`;\n }\n setMessage() {\n this.message = `Value must be to ${this.decimalPlace} decimal places`;\n }\n setValuesAndExpressions() {\n this.setMessage();\n this.setFailExpression();\n }\n}\n","import { Option } from '../question-models/select-option';\nimport { DataSource } from '../question-models/interfaces/data-source';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\n\nexport class DummyDataSource implements DataSource {\n options: Observable<Option[]>;\n option: Observable<Option>;\n returnErrorOnNext = false;\n\n constructor() {}\n\n resolveSelectedValue(value): Observable<Option> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter((option) => option.value === value);\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions[0]);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n fileUpload(url) {\n return of({ image: '' });\n }\n fetchFile(url) {\n return of({ image: '' });\n }\n searchOptions(searchText): Observable<Option[]> {\n let selectOptions = this.sampleData();\n\n selectOptions = selectOptions.map(function (obj) {\n const option = new Option({\n label: obj.label,\n value: obj.concept\n });\n return option;\n });\n\n selectOptions = selectOptions.filter(\n (option) => option.label.indexOf(searchText) !== -1\n );\n\n const test: BehaviorSubject<any> = new BehaviorSubject<any>([]);\n if (!this.returnErrorOnNext) {\n test.next(selectOptions);\n } else {\n test.error(new Error('Error loading Options'));\n }\n\n return test.asObservable();\n }\n\n sampleData(): any {\n return [\n {\n concept: 'a899e0ac-1350-11df-a1f1-0026b9348838',\n label: 'None'\n },\n {\n concept: 'a8ad1276-1350-11df-a1f1-0026b9348838',\n label: 'Breathlessness'\n },\n {\n concept: 'a892e4b4-1350-11df-a1f1-0026b9348838',\n label: 'Chest pain'\n },\n {\n concept: 'a8afc8b8-1350-11df-a1f1-0026b9348838',\n label: 'Cough = 2 weeks'\n },\n {\n concept: 'd7adae14-c386-49cc-8f7c-765d8ceec566',\n label: 'Fever for = 2 weeks'\n },\n {\n concept: '3f57aafc-7162-41da-a51b-6a804cb6f5e8',\n label: 'New exposure to household contact with TB'\n },\n {\n concept: 'a89807f0-1350-11df-a1f1-0026b9348838',\n label: 'Noticeable Weight loss'\n },\n {\n concept: 'e1862fef-68ed-4df4-90dd-a00152f719aa',\n label: 'Night sweats = 2 weeks'\n },\n {\n concept: 'a8ad462e-1350-11df-a1f1-0026b9348838',\n label: 'Abdomen'\n },\n {\n concept: 'f218c60e-4b54-475a-a4fa-facab9216da8',\n label: 'Groin'\n },\n {\n concept: 'a8a774b0-1350-11df-a1f1-0026b9348838',\n label: 'Joints'\n },\n {\n concept: '4639388c-ee31-4dcf-abb4-ad71253493bb',\n label: 'Neck Kw'\n }\n ];\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class HistoricalEncounterDataService {\n dataSources: any = {};\n constructor() {}\n\n registerEncounters(name: string, encounters: any) {\n const encStore: any = {\n data: [],\n getValue: (key: string, index = 0): any => {\n const pathArray = key.split('.');\n if (pathArray.length > 0) {\n return this.getFirstValue(pathArray, encStore.data[index]);\n }\n return encStore.data[index][key];\n },\n getAllObjects: () => {\n return encStore.data;\n },\n getSingleObject: (index = 0) => {\n return encStore.data[index];\n }\n };\n\n if (_.isArray(encounters)) {\n const group: Array<any> = [];\n _.each(encounters, (encounter) => {\n group.push(this._transformEncounter(encounter));\n });\n\n // Sort them in reverse chronological order\n encStore.data = _.sortBy(group, 'encounterDatetime').reverse();\n } else {\n // Assume a single openmrs rest encounter object.\n encStore.data.push(this._transformEncounter(encounters));\n }\n\n this.putObject(name, encStore);\n }\n\n putObject(name, object): void {\n this.dataSources[name] = object;\n }\n\n getObject(name: string): any {\n return this.dataSources[name] || null;\n }\n\n getFirstValue(path: Array<string>, object: any): any {\n const answers = [];\n\n this.getAllValues(path, object, answers);\n\n if (answers.length > 0) {\n return {\n value: answers[0],\n valueDate: moment(object.encounterDatetime).format('ll')\n };\n }\n }\n\n getAllValues(path, object, answers) {\n if (_.isNil(object)) {\n return;\n }\n\n if (path.length <= 1) {\n if (!_.isNil(object[path[0]])) {\n answers.push(object[path[0]]);\n }\n return;\n }\n\n const newpath = path.splice(1);\n const key = path[0];\n\n if (_.isArray(object[key]) && object[key].length > 0) {\n _.each(object[key], (childObject) => {\n this.getAllValues(newpath.slice(0), childObject, answers);\n });\n } else {\n this.getAllValues(newpath.slice(0), object[key], answers);\n }\n }\n\n private _transformEncounter(encounter: any) {\n if (_.isNil(encounter)) {\n return;\n }\n // Transform encounter Level details to key value pairs.\n const prevEncounter: any = {\n encounterDatetime: encounter.encounterDatetime\n };\n\n if (encounter.location && encounter.location.uuid) {\n prevEncounter.location = encounter.location.uuid;\n }\n\n if (encounter.patient && encounter.patient.uuid) {\n prevEncounter.patient = encounter.patient.uuid;\n }\n\n if (encounter.form && encounter.form.uuid) {\n prevEncounter.form = encounter.form.uuid;\n }\n\n if (encounter.encounterType && encounter.encounterType.uuid) {\n prevEncounter.encounterType = encounter.encounterType.uuid;\n }\n\n if (encounter.provider) {\n const provider = encounter.provider;\n prevEncounter.provider = provider.uuid;\n }\n\n // Deal with obs.\n if (encounter.obs) {\n const processedObs: any = this._transformObs(encounter.obs);\n\n // add in individual processed obs to prevEncounter\n _.extend(prevEncounter, processedObs);\n }\n\n return prevEncounter;\n }\n\n private _transformObs(obs: any): any {\n if (!obs) {\n return null;\n }\n\n const obsRep: any = {};\n if (_.isArray(obs)) {\n _.each(obs, (singleObs) => {\n this._augumentObs(obsRep, this._transformObs(singleObs));\n });\n return obsRep;\n } else if (obs.groupMembers) {\n const group: any = {};\n _.each(obs.groupMembers, (member) => {\n this._augumentObs(group, this._transformObs(member));\n });\n\n // Handle already existing data\n if (obsRep[obs.concept.uuid] && _.isArray(obsRep[obs.concept.uuid])) {\n obsRep[obs.concept.uuid].push(group);\n } else {\n obsRep[obs.concept.uuid] = [group];\n }\n return obsRep;\n } else {\n if (obs.value instanceof Object) {\n obsRep[obs.concept.uuid] = obs.value.uuid;\n } else {\n obsRep[obs.concept.uuid] = obs.value;\n }\n return obsRep;\n }\n }\n\n private _augumentObs(existing: any, toAdd: any): any {\n for (const key in toAdd) {\n if (_.has(existing, key)) {\n // check if not an array yet\n if (!_.isArray(existing[key])) {\n const temp = existing[key];\n existing[key] = [temp];\n }\n\n // Check whether the incoming is array (for group members)\n if (_.isArray(toAdd[key])) {\n Array.prototype.push.apply(existing[key], toAdd[key]);\n } else {\n existing[key].push(toAdd[key]);\n }\n } else {\n existing[key] = toAdd[key];\n }\n }\n return existing;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { HistoricalEncounterDataService } from '../services/historical-encounter-data.service';\nimport { JsExpressionHelper } from './js-expression-helper';\nimport {\n Runnable,\n ExpressionRunner\n} from '../expression-runner/expression-runner';\nimport { AfeFormControl } from '../../abstract-controls-extension/afe-form-control';\n\n@Injectable()\nexport class HistoricalHelperService {\n constructor() {}\n\n public evaluate(\n expr: string,\n dataSources: any,\n additionalScopevalues: any\n ): any {\n const HD = new HistoricalEncounterDataService();\n HD.registerEncounters('prevEnc', dataSources['rawPrevEnc']);\n const deps: any = {\n HD: HD\n };\n\n if (additionalScopevalues) {\n for (const o in additionalScopevalues) {\n if (additionalScopevalues[o]) {\n deps[o] = additionalScopevalues[o];\n }\n }\n }\n\n const helper = new JsExpressionHelper();\n const control: AfeFormControl = new AfeFormControl();\n const runner: ExpressionRunner = new ExpressionRunner();\n const runnable: Runnable = runner.getRunnable(\n expr,\n control,\n helper.helperFunctions,\n deps\n );\n\n return runnable.run();\n }\n\n public evaluatePrecondition(\n expr: string,\n dataSources: any,\n historicalValue: any\n ): any {\n const additionalScope = {\n histValue: historicalValue\n };\n\n return this.evaluate(expr, dataSources, additionalScope);\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport { TextInputQuestion } from '../question-models/text-input-question';\nimport { TextAreaInputQuestion } from '../question-models/text-area-input-question';\nimport { SelectQuestion } from '../question-models/select-question';\nimport { UiSelectQuestion } from '../question-models/ui-select-question';\nimport { DateQuestion } from '../question-models/date-question';\nimport { TimeQuestion } from './../question-models/time-question';\nimport { MultiSelectQuestion } from '../question-models/multi-select-question';\nimport { QuestionGroup } from '../question-models/group-question';\nimport { RepeatingQuestion } from '../question-models/repeating-question';\nimport { QuestionBase } from '../question-models/question-base';\nimport { FileUploadQuestion } from '../question-models/file-upload-question';\nimport { TestOrderQuestion } from '../question-models/test-order-question';\nimport { AfeControlType } from '../../abstract-controls-extension/afe-control-type';\n\nimport { ValidationModel } from '../question-models/validation.model';\nimport { DateValidationModel } from '../question-models/date-validation.model';\nimport { MaxValidationModel } from '../question-models/max-validation.model';\nimport { MinValidationModel } from '../question-models/min-validation.model';\nimport { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';\nimport { ConditionalValidationModel } from '../question-models/conditional-validation.model';\nimport { DecimalPointValidationModel } from '../question-models/decimal-point-validation.model';\nimport { DummyDataSource } from '../data-sources/dummy-data-source';\nimport { HistoricalHelperService } from '../helpers/historical-expression-helper-service';\nimport { Form } from './form';\nimport { CheckBoxQuestion } from '../question-models/models';\n\nexport class QuestionFactory {\n dataSources: any = {};\n historicalHelperService: HistoricalHelperService = new HistoricalHelperService();\n constructor() {}\n\n createQuestionModel(formSchema: any, form?: Form): QuestionBase {\n if (form) {\n const dataSources = form.dataSourcesContainer.dataSources;\n this.dataSources = dataSources;\n }\n return this.toFormQuestionModel(formSchema);\n }\n\n toSelectQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n\n const options: any = question.options;\n options.splice(0, 0, {\n label: '',\n value: ''\n });\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumericQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNumberQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'number';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDecimalQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'decimal';\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n question.validators = this.addValidators(schemaQuestion);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDateQuestion(schemaQuestion: any): DateQuestion {\n if (schemaQuestion.type === 'encounterDatetime') {\n return this.toEncounterDatetimeQuestion(schemaQuestion);\n }\n const question = new DateQuestion({ type: '', key: '' });\n question.renderingType = 'date';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showTime = schemaQuestion.questionOptions.showTime as boolean;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTimeQuestion(schemaQuestion: any): TimeQuestion {\n const question = new TimeQuestion({ type: '', key: '' });\n question.renderingType = 'time';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterDatetimeQuestion(schemaQuestion: any): DateQuestion {\n const question = new DateQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.renderingType = 'date';\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.showWeeksAdder = schemaQuestion.questionOptions.weeksList\n ? true\n : false;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n question.showTime = true;\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toCheckBoxQuestion(schemaQuestion: any): CheckBoxQuestion {\n const question = new CheckBoxQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.answers.map((obj) => {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.options.splice(0, 0);\n\n question.renderingType = schemaQuestion.questionOptions.rendering;\n const mappings: any = {\n label: 'label',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toMultiCheckboxQuestion(schemaQuestion: any): MultiSelectQuestion {\n const question = new MultiSelectQuestion({\n renderType: '',\n options: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.options = schemaQuestion.questionOptions.answers.map(function (\n obj\n ) {\n return {\n label: obj.label,\n value: obj.concept\n };\n });\n question.validators = this.addValidators(schemaQuestion);\n question.dataSource = new DummyDataSource();\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextAreaQuestion(schemaQuestion: any): TextAreaInputQuestion {\n const question = new TextAreaInputQuestion({\n isExpanded: false,\n rows: 18,\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.isExpanded = schemaQuestion.isExpanded;\n question.rows = schemaQuestion.questionOptions.rows;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTextQuestion(schemaQuestion: any): TextInputQuestion {\n const question = new TextInputQuestion({\n placeholder: '',\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'text';\n question.placeholder = schemaQuestion.questionOptions.placeholder;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.placeholder = schemaQuestion.questionOptions.placeholder || '';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFileUploadQuestion(schemaQuestion: any): FileUploadQuestion {\n const question = new FileUploadQuestion({ type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'file';\n question.dataSource = 'file';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toDrugQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'drug';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toProblemQuestion(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'problem';\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toConceptAnswerSelect(schemaQuestion: any): SelectQuestion {\n const question = new SelectQuestion({ options: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource =\n schemaQuestion.questionOptions.dataSource || 'conceptAnswers';\n question.dataSourceOptions = {\n concept: schemaQuestion.questionOptions.concept\n };\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toRepeatingQuestion(schemaQuestion: any): RepeatingQuestion {\n const question = new RepeatingQuestion({\n questions: [],\n type: '',\n key: ''\n });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n if (schemaQuestion.type === 'testOrder') {\n const testOrder = this.toTestOrderQuestion(schemaQuestion);\n const orders = [];\n orders.push(testOrder);\n question.questions = orders;\n }\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toGroupQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.questions = this.getChildrenQuestionModels(\n schemaQuestion.questions\n );\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toPageQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'page';\n question.controlType = AfeControlType.None;\n question.questions = [];\n schemaQuestion.sections.forEach((element) => {\n question.questions.push(this.toSectionQuestion(element));\n });\n return question;\n }\n\n toFormQuestionModel(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'form';\n question.controlType = AfeControlType.AfeFormGroup;\n question.extras = schemaQuestion;\n question.questions = [];\n schemaQuestion.pages.forEach((element) => {\n question.questions.push(this.toPageQuestion(element));\n });\n\n return question;\n }\n\n toSectionQuestion(schemaQuestion: any): QuestionGroup {\n const question = new QuestionGroup({ questions: [], type: '', key: '' });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.label;\n question.renderingType = 'section';\n question.controlType = AfeControlType.None;\n question.isExpanded = schemaQuestion.isExpanded === 'true' ? true : false;\n question.questions = this.getSchemaQuestions(schemaQuestion.questions);\n return question;\n }\n\n toPersonAttributeQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'personAttribute';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toEncounterProviderQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'provider';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toFieldSetQuestion(schemaQuestion: any): QuestionGroup {\n const toReturn = this.toGroupQuestion(schemaQuestion);\n toReturn.renderingType = 'field-set';\n return toReturn;\n }\n\n toEncounterLocationQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'location';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'amrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toSiblingLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'siblingLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toNonAmrsLocationsQuestion(schemaQuestion: any): UiSelectQuestion {\n const question = new UiSelectQuestion({\n options: [],\n type: '',\n key: '',\n searchFunction: function () {},\n resolveFunction: function () {}\n });\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.renderingType = schemaQuestion.type;\n question.renderingType = 'remote-select';\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.dataSource = 'nonAmrsLocations';\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n\n this.copyProperties(mappings, schemaQuestion, question);\n this.addDisableOrHideProperty(schemaQuestion, question);\n this.addAlertProperty(schemaQuestion, question);\n this.addHistoricalExpressions(schemaQuestion, question);\n this.addCalculatorProperty(schemaQuestion, question);\n return question;\n }\n\n toTestOrderQuestion(schemaQuestion: any): TestOrderQuestion {\n const question = new TestOrderQuestion({\n type: '',\n key: '',\n orderType: '',\n selectableOrders: [],\n orderSettingUuid: '',\n label: '',\n rendering: ''\n });\n\n question.label = schemaQuestion.label;\n question.key = schemaQuestion.id;\n question.validators = this.addValidators(schemaQuestion);\n question.extras = schemaQuestion;\n question.options = schemaQuestion.questionOptions.selectableOrders.map(\n function (obj) {\n return {\n label: obj.label,\n value: obj.concept\n };\n }\n );\n\n const mappings: any = {\n label: 'label',\n required: 'required',\n id: 'key'\n };\n this.copyProperties(mappings, schemaQuestion, question);\n return question;\n }\n\n getSchemaQuestions(schema: any): any {\n const listQuestions = new Array();\n this.getQuestions(schema, listQuestions);\n return listQuestions;\n }\n\n getQuestions(schema: any, foundArray: any): any {\n if (!Array.isArray(foundArray)) {\n foundArray = [];\n }\n if (Array.isArray(schema)) {\n for (const property in schema) {\n if (schema.hasOwnProperty(property)) {\n this.getQuestions(schema[property], foundArray);\n }\n }\n }\n\n if (schema && !Array.isArray(schema) && typeof schema === 'object') {\n if (schema.questionOptions) {\n if (\n schema.questionOptions.rendering === 'group' ||\n schema.questionOptions.rendering === 'repeating'\n ) {\n // schema.questions = this.getGroupMembers(schema.questions);\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n } else if (schema.questionOptions.rendering === 'field-set') {\n } else {\n foundArray.push(\n this.toModel(schema, schema.questionOptions.rendering)\n );\n }\n } else {\n for (const o in schema) {\n if (schema.hasOwnProperty(o)) {\n this.getQuestions(schema[o], foundArray);\n }\n }\n }\n }\n }\n\n getChildrenQuestionModels(schema: any): any {\n const children = [];\n this.getQuestions(schema, children);\n return children;\n }\n\n toModel(schema: any, renderType: string): any {\n if (renderType === 'ui-select-extended') {\n renderType = schema.type;\n }\n if (!schema.id) {\n schema['id'] = this.generateId(10);\n }\n\n if (\n schema.questionOptions &&\n (schema.questionOptions.showDate === true ||\n schema.questionOptions.showDate === 'true')\n ) {\n schema = this.convertOldVersionComplexObsQuestionToNewVersion(schema);\n renderType = 'field-set';\n }\n\n switch (renderType) {\n case 'select':\n return this.toSelectQuestion(schema);\n case 'single-select':\n return this.toSelectQuestion(schema);\n case 'multi-select':\n return this.toSelectQuestion(schema);\n case 'numeric':\n return this.toNumericQuestion(schema);\n case 'number':\n return this.toNumberQuestion(schema);\n case 'decimal':\n return this.toDecimalQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'date':\n return this.toDateQuestion(schema);\n case 'time':\n return this.toTimeQuestion(schema);\n case 'multiCheckbox':\n return this.toMultiCheckboxQuestion(schema);\n case 'drug':\n return this.toDrugQuestion(schema);\n case 'problem':\n return this.toProblemQuestion(schema);\n case 'group':\n return this.toGroupQuestion(schema);\n case 'field-set':\n return this.toFieldSetQuestion(schema);\n case 'repeating':\n return this.toRepeatingQuestion(schema);\n case 'personAttribute':\n return this.toPersonAttributeQuestion(schema);\n case 'text':\n return this.toTextQuestion(schema);\n case 'textarea':\n return this.toTextAreaQuestion(schema);\n case 'select-concept-answers':\n return this.toConceptAnswerSelect(schema);\n case 'encounterLocation':\n return this.toEncounterLocationQuestion(schema);\n case 'amrsLocations':\n return this.toAmrsLocationsQuestion(schema);\n case 'nonAmrsLocations':\n return this.toNonAmrsLocationsQuestion(schema);\n case 'siblingLocations':\n return this.toSiblingLocationsQuestion(schema);\n case 'encounterDatetime':\n return this.toEncounterDatetimeQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'radio':\n return this.toCheckBoxQuestion(schema);\n case 'checkbox':\n return this.toCheckBoxQuestion(schema);\n case 'encounterProvider':\n return this.toEncounterProviderQuestion(schema);\n case 'file':\n return this.toFileUploadQuestion(schema);\n default:\n console.warn('New Schema Question Type found.........' + renderType);\n return this.toTextQuestion(schema);\n }\n }\n\n convertOldVersionComplexObsQuestionToNewVersion(schemaQuestion: any) {\n const converted: any = {};\n converted.type = 'complex-obs';\n converted.label = schemaQuestion.label;\n converted.id = 'complex_' + schemaQuestion.id;\n converted.questionOptions = {};\n converted.questionOptions.concept = schemaQuestion.questionOptions.concept;\n converted.questionOptions.rendering = 'field-set';\n converted.questions = [];\n converted.validators = [];\n\n const mainField: any = JSON.parse(JSON.stringify(schemaQuestion));\n mainField.type = 'complex-obs-child';\n delete mainField.questionOptions.showDate;\n delete mainField.questionOptions.shownDateOptions;\n mainField.questionOptions.obsField = 'value';\n\n const dateField: any = {};\n dateField.type = 'complex-obs-child';\n dateField.label = 'Date of ' + mainField.label;\n dateField.id = 'date_' + mainField.id;\n dateField.questionOptions = {};\n dateField.questionOptions.concept = schemaQuestion.questionOptions.concept;\n dateField.questionOptions.rendering = 'date';\n dateField.questionOptions.obsField = 'obsDatetime';\n const dateOptions: any = (Object as any).assign(\n {},\n schemaQuestion.questionOptions.shownDateOptions\n );\n dateField.validators = dateOptions.validators;\n dateField.hide = dateOptions.hide;\n\n converted.questions.push(mainField);\n converted.questions.push(dateField);\n\n return converted;\n }\n\n copyProperties(mappings: any, source: any, destination: QuestionBase) {\n for (const property in source) {\n if (\n mappings.hasOwnProperty(property) &&\n destination.hasOwnProperty(mappings[property])\n ) {\n destination[mappings[property]] = source[property];\n }\n }\n }\n\n addValidators(schemaQuestion: any): Array<ValidationModel> {\n const validators: Array<ValidationModel> = [];\n\n if (schemaQuestion.validators) {\n // TODO - add more validator types\n _.forEach(schemaQuestion.validators, (validator: any) => {\n switch (validator.type) {\n case 'date':\n validators.push(new DateValidationModel(validator));\n break;\n case 'js_expression':\n validators.push(new JsExpressionValidationModel(validator));\n break;\n case 'decimal':\n const decimalModel = new DecimalPointValidationModel(validator);\n decimalModel.setValuesAndExpressions();\n validators.push(decimalModel);\n break;\n case 'conditionalAnswered':\n validators.push(new ConditionalValidationModel(validator));\n break;\n default:\n validators.push(new ValidationModel(validator));\n break;\n }\n });\n }\n\n const questionOptions = schemaQuestion.questionOptions;\n const renderingType = questionOptions ? questionOptions.rendering : '';\n if (renderingType === 'number' || renderingType === 'decimal') {\n if (questionOptions.max && questionOptions.min) {\n validators.push(\n new MaxValidationModel({\n type: 'max',\n max: questionOptions.max\n })\n );\n validators.push(\n new MinValidationModel({\n type: 'min',\n min: questionOptions.min\n })\n );\n }\n }\n\n // add conditional required validators\n if (typeof schemaQuestion.required === 'object') {\n const required: any = schemaQuestion.required;\n\n if (required.type === 'conditionalRequired') {\n validators.push(\n new ConditionalValidationModel({\n referenceQuestionId: required.referenceQuestionId,\n referenceQuestionAnswers: required.referenceQuestionAnswers,\n type: required.type,\n message: required.message\n })\n );\n }\n }\n\n return validators;\n }\n\n addHistoricalExpressions(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.historicalExpression &&\n schemaQuestion.historicalExpression.length > 0\n ) {\n question.setHistoricalValue(true);\n if (schemaQuestion.showHistoricalEncounterDate !== undefined) {\n question.showHistoricalEncounterDate(\n schemaQuestion.showHistoricalEncounterDate === 'true'\n );\n } else {\n question.showHistoricalEncounterDate();\n }\n const origValue = this.historicalHelperService.evaluate(\n schemaQuestion.historicalExpression,\n this.dataSources,\n undefined\n );\n question.historicalDataValue = origValue;\n // console.info('historical value', origValue);\n // console.info('historical data question :::', question);\n // console.info('schema data question :::', schemaQuestion);\n\n if (schemaQuestion.historicalPrepopulateCondition && origValue) {\n const toPopulate = this.historicalHelperService.evaluatePrecondition(\n schemaQuestion.historicalPrepopulateCondition,\n this.dataSources,\n origValue\n );\n\n if (toPopulate) {\n question.defaultValue = origValue.value;\n }\n return; // don't try to evaluate the other option\n }\n\n if (schemaQuestion.historicalPrepopulate && origValue) {\n // sample schema options for this branch\n // \"historicalPrepopulate\":true,\n // \"allowedHistoricalValueAgeInDays\": 40000,\n const valDate = moment(origValue.valueDate);\n const differenceInDays = moment().diff(valDate, 'days');\n if (Number.isInteger(schemaQuestion.allowedHistoricalValueAgeInDays)) {\n if (\n differenceInDays <= schemaQuestion.allowedHistoricalValueAgeInDays\n ) {\n question.defaultValue = origValue.value;\n }\n } else {\n question.defaultValue = origValue.value;\n }\n }\n }\n }\n\n addCalculatorProperty(schemaQuestion: any, question: QuestionBase): any {\n if (\n schemaQuestion.questionOptions &&\n typeof schemaQuestion.questionOptions.calculate === 'object'\n ) {\n question.calculateExpression =\n schemaQuestion.questionOptions.calculate.calculateExpression;\n }\n }\n\n addAlertProperty(schemaQuestion: any, question: QuestionBase): any {\n if (schemaQuestion.alert) {\n question.alert = schemaQuestion.alert;\n }\n // if (typeof schemaQuestion.message === 'object') {\n // if (schemaQuestion.message.alertWhenExpression) {\n // question.message = schemaQuestion.message.alertWhenExpression;\n // }\n // }\n }\n\n addDisableOrHideProperty(schemaQuestion: any, question: QuestionBase): any {\n if (!!schemaQuestion.disable) {\n question.disable = schemaQuestion.disable;\n }\n\n if (typeof schemaQuestion.disable === 'object') {\n question.disable = schemaQuestion.disable.disableWhenExpression;\n }\n\n if (!!schemaQuestion.hide) {\n question.hide = schemaQuestion.hide;\n }\n if (typeof schemaQuestion.hide === 'object') {\n if (schemaQuestion.hide.hideWhenExpression) {\n question.hide = schemaQuestion.hide.hideWhenExpression;\n }\n }\n }\n private generateId(x) {\n let s = '_';\n while (s.length < x && x > 0) {\n const r = Math.random();\n s +=\n r < 0.1\n ? Math.floor(r * 100)\n : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65));\n }\n return '_' + s;\n }\n}\n","import { Injectable } from '@angular/core';\n// import { AbstractControl } from '@angular/forms';\n\nimport { LeafNode, GroupNode, ArrayNode, NodeBase } from './form-node';\nimport {\n QuestionBase,\n NestedQuestion,\n RepeatingQuestion,\n QuestionGroup\n} from '../question-models/models';\nimport { FormControlService } from './form-control.service';\nimport { QuestionFactory } from './question.factory';\nimport {\n AfeFormGroup,\n AfeControlType,\n AfeFormArray\n} from '../../abstract-controls-extension';\nimport { ControlRelationsFactory } from './control-relations.factory';\nimport { Validations } from '../validators/validations';\n\nimport { Form } from './form';\n\n@Injectable()\nexport class FormFactory {\n public hd: any = {\n getValue: () => {\n return 20;\n }\n };\n\n constructor(\n public controlService: FormControlService,\n public questionFactroy: QuestionFactory,\n public controlRelationsFactory: ControlRelationsFactory\n ) {}\n\n createForm(schema: any, dataSource?: any): Form {\n const form: Form = new Form(schema, this, this.questionFactroy);\n if (dataSource) {\n for (const key in dataSource) {\n if (dataSource.hasOwnProperty(key)) {\n form.dataSourcesContainer.registerDataSource(\n key,\n dataSource[key],\n false\n );\n }\n }\n }\n const question = this.questionFactroy.createQuestionModel(schema, form);\n form.rootNode = this.createNode(question, null, null, form) as GroupNode;\n\n this.buildRelations(form.rootNode);\n form.updateHiddenDisabledStateForAllControls();\n form.updateAlertsForAllControls();\n return form;\n }\n\n buildRelations(rootNode: GroupNode) {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildRelations(rootNode);\n\n // enable js expression validations\n Validations.JSExpressionValidatorsEnabled = true;\n }\n\n createNode(\n question: QuestionBase | NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): NodeBase {\n let node: NodeBase = null;\n if (question instanceof NestedQuestion) {\n if (question instanceof RepeatingQuestion) {\n node = this.createArrayNode(question, parentNode, parentControl, form);\n } else {\n node = this.createGroupNode(question, parentNode, parentControl, form);\n }\n } else {\n node = this.createLeafNode(question, parentNode, parentControl, form);\n }\n return node;\n }\n\n createLeafNode(\n question: QuestionBase,\n parentNode: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): LeafNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n );\n return new LeafNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n }\n\n createGroupNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): GroupNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const groupNode = new GroupNode(\n question,\n controlModel,\n null,\n form,\n parentNode ? parentNode.path : undefined\n );\n this.createNodeChildren(\n question,\n groupNode,\n controlModel || parentControl,\n form\n );\n return groupNode;\n }\n\n createArrayNode(\n question: NestedQuestion,\n parentNode?: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): ArrayNode {\n const controlModel = this.controlService.generateControlModel(\n question,\n parentControl,\n false,\n form\n ) as AfeFormGroup;\n const arrayNode = new ArrayNode(\n question,\n controlModel,\n parentControl,\n this,\n form,\n parentNode ? parentNode.path : undefined\n );\n arrayNode.createChildFunc = this.createArrayNodeChild;\n arrayNode.removeChildFunc = this.removeArrayNodeChild;\n\n arrayNode.addChildNodeCreatedListener((node: GroupNode) => {\n Validations.JSExpressionValidatorsEnabled = false;\n this.controlRelationsFactory.buildArrayNodeRelations(node);\n Validations.JSExpressionValidatorsEnabled = true;\n });\n return arrayNode;\n }\n\n createNodeChildren(\n question: NestedQuestion,\n node: GroupNode,\n parentControl?: AfeFormGroup,\n form?: Form\n ): any {\n question.questions.forEach((element) => {\n const child = this.createNode(element, node, parentControl, form);\n node.setChild(element.key, child);\n });\n return node.children;\n }\n\n createArrayNodeChild(\n question: RepeatingQuestion,\n node: ArrayNode,\n factory?: FormFactory\n ): GroupNode {\n if (factory === null || factory === undefined) {\n factory = this;\n }\n const groupQuestion: QuestionGroup = new QuestionGroup({\n key: node.path + '.' + node.children.length + '',\n type: 'group',\n extras: question.extras,\n label: '',\n questions: question.questions\n });\n\n if (question.controlType === AfeControlType.None) {\n groupQuestion.controlType = question.controlType;\n }\n\n const group = factory.createGroupNode(groupQuestion, null, null, node.form);\n node.children.push(group);\n\n if (node.control instanceof AfeFormArray) {\n const nodeControl = node.control as AfeFormArray;\n nodeControl.setControl(nodeControl.controls.length, group.control);\n }\n\n return group;\n }\n\n removeArrayNodeChild(index: number, node: ArrayNode) {\n const nodeToRemove = node.children[index];\n\n node.children.splice(index, 1);\n if (node.control !== null || node.control !== undefined) {\n if (node.control instanceof AfeFormArray) {\n const control = node.control as AfeFormArray;\n const controlIndexToRemove = control.controls.indexOf(\n nodeToRemove.control\n );\n if (controlIndexToRemove >= 0) {\n control.removeAt(controlIndexToRemove);\n }\n }\n }\n }\n}\n","import * as _ from 'lodash';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\nimport {\n NodeBase,\n ArrayNode,\n GroupNode,\n LeafNode\n} from '../form-factory/form-node';\n\nexport class ObsAdapterHelper {\n constructor() {}\n\n findObsAnswerToQuestion(node: NodeBase, obsArray: Array<any>): Array<any> {\n const found = [];\n\n if (!this.isObsNode(node)) {\n return found;\n }\n\n if (\n node instanceof LeafNode ||\n (node instanceof GroupNode && node.question.extras.type === 'complex-obs')\n ) {\n _.each(obsArray, (item) => {\n if (\n item.concept &&\n item.concept.uuid === node.question.extras.questionOptions.concept\n ) {\n found.push(item);\n }\n });\n\n return found;\n }\n\n // At this point the node is either a group or a repeating node\n\n const childQuestionsUuids = this.getChildQuestionsConceptUuids(node);\n if (childQuestionsUuids.length > 0) {\n _.each(obsArray, (obs) => {\n if (\n obs.concept &&\n obs.concept.uuid === node.question.extras.questionOptions.concept &&\n Array.isArray(obs.groupMembers) &&\n this.isSubsetOf(\n childQuestionsUuids,\n this.getGroupMembersConceptUuids(obs)\n )\n ) {\n found.push(obs);\n }\n });\n }\n\n return found;\n }\n\n getChildQuestionsConceptUuids(node: NodeBase): Array<string> {\n const found = [];\n\n if (node.question.extras && node.question.extras.questions) {\n _.each(node.question.extras.questions, (question) => {\n if (question.questionOptions && question.questionOptions.concept) {\n found.push(question.questionOptions.concept);\n }\n });\n }\n\n return found;\n }\n\n getGroupMembersConceptUuids(obsWithGroupMembers): Array<string> {\n const found = [];\n\n if (Array.isArray(obsWithGroupMembers.groupMembers)) {\n _.each(obsWithGroupMembers.groupMembers, (member) => {\n found.push(member.concept.uuid);\n });\n }\n\n return found;\n }\n\n isObsNode(node: NodeBase): boolean {\n return (\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs' ||\n node.question.extras.type === 'complex-obs-child')\n );\n }\n\n isSubsetOf(supersetArray: Array<any>, subsetArray: Array<any>): boolean {\n if (subsetArray.length === 0 && supersetArray.length === 0) {\n return true;\n }\n return subsetArray.every((element): boolean => {\n return supersetArray.indexOf(element) >= 0;\n });\n }\n\n setSimpleObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const obsToUse = obs[0];\n\n // set initial value\n node.initialValue = obsToUse;\n\n if (!this.isEmpty(obsToUse.value) && obsToUse.value.uuid) {\n // answer to the obs is a concept, use uuid value\n this.setNodeFormControlValue(node, obsToUse.value.uuid);\n } else if (!this.isEmpty(obsToUse.value)) {\n this.setNodeFormControlValue(node, obsToUse.value);\n }\n }\n }\n\n setMultiselectObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n node.initialValue = obs;\n\n const obsUuids = [];\n for (const m of obs) {\n obsUuids.push(m.value.uuid);\n }\n\n this.setNodeFormControlValue(node, obsUuids);\n }\n }\n\n setComplexObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n // set the obs value here\n this.setNodeValue(valueField, obs);\n node.initialValue = valueField.initialValue;\n\n // set the date value here\n dateField.initialValue = valueField.initialValue;\n this.setNodeFormControlValue(\n dateField,\n valueField.initialValue.obsDatetime\n );\n }\n }\n\n setGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const groupNode = node as GroupNode;\n groupNode.initialValue = obs[0];\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs[0].groupMembers);\n }\n }\n }\n\n setRepeatingGroupObsNodeValue(node: NodeBase, obs: Array<any>) {\n if (node && obs.length > 0) {\n const arrayNode = node as ArrayNode;\n arrayNode.initialValue = obs;\n\n for (let i = 0; i < obs.length; i++) {\n const createdNode = arrayNode.createChildNode();\n this.setGroupObsNodeValue(createdNode, [obs[i]]);\n }\n }\n }\n\n setNodeValue(node: NodeBase, obs: Array<any>) {\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n this.setNodeValue(groupNode.children[o], obs);\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n this.setNodeValue(arrayNode.children[i], obs);\n }\n break;\n }\n break;\n case 'simple':\n // search asnwering obs at this point\n const answeringObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setSimpleObsNodeValue(node, answeringObs);\n break;\n\n case 'multiselect':\n // search asnwering obs at this point\n const multiselectObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setMultiselectObsNodeValue(node, multiselectObs);\n break;\n\n case 'complex':\n // search asnwering obs at this point\n const complexObs = this.findObsAnswerToQuestion(node, obs);\n\n // set answer here\n this.setComplexObsNodeValue(node, complexObs);\n break;\n\n case 'group':\n const groupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (groupObs.length > 0) {\n this.setGroupObsNodeValue(node, groupObs);\n }\n\n break;\n case 'repeatingGroup':\n const repeatingGroupObs = this.findObsAnswerToQuestion(node, obs);\n\n if (repeatingGroupObs.length > 0) {\n this.setRepeatingGroupObsNodeValue(node, repeatingGroupObs);\n }\n\n break;\n default:\n console.error('Unknown obs node', node);\n break;\n }\n }\n\n setNodeFormControlValue(node: NodeBase, value) {\n node.control.setValue(value);\n // TODO: Determine if we need this call\n // node.control.updateValueAndValidity();\n\n // TODO: Remove this hack and put it in appropriate place\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n }\n\n getObsNodeType(node: NodeBase): string {\n if (this.isObsNode(node)) {\n if (\n node instanceof LeafNode &&\n (node.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n node.question.extras.questionOptions.rendering === 'checkbox' ||\n node.question.extras.questionOptions.rendering === 'multi-select')\n ) {\n return 'multiselect';\n }\n\n if (node instanceof LeafNode) {\n return 'simple';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n return 'complex';\n }\n\n if (\n node instanceof ArrayNode &&\n node.question.extras.type === 'obsGroup' &&\n node.question.extras.questionOptions.rendering === 'repeating'\n ) {\n return 'repeatingGroup';\n }\n\n if (\n node instanceof GroupNode &&\n node.question.extras.type === 'obsGroup'\n ) {\n return 'group';\n }\n\n return 'unknownObs';\n }\n return 'unknown';\n }\n\n // PAYLOAD GENERATION FUNCTIONS\n getSimpleObsPayload(node: NodeBase): any {\n // check for empty values first\n if (this.isEmpty(node.control.value)) {\n if (node.initialValue) {\n // Handle case for existing voided obs\n return {\n uuid: node.initialValue.uuid,\n voided: true\n };\n }\n return null;\n }\n\n // check for exisiting, unchanged values\n if (node.initialValue && !this.simpleNodeValueChanged(node)) {\n return null;\n }\n\n // all numbers, text, concepts answers are handled in the same way\n // no need for further formatting in this case\n const obs: any = {\n concept: node.question.extras.questionOptions.concept,\n value: node.control.value\n };\n\n // handle date fields\n if (node.question.extras.questionOptions.rendering === 'date') {\n obs.value = this.toOpenMrsDateTimeString(node.control.value);\n }\n\n if (node.initialValue) {\n // for existing cases, delete concept property, and add uuid\n delete obs.concept;\n obs.uuid = node.initialValue.uuid;\n }\n\n return obs;\n }\n\n getComplexObsPayload(node: NodeBase) {\n let valueField: LeafNode; // essential memmber\n let dateField: LeafNode; // other member to be manipulated by user\n\n const nodeAsGroup = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in nodeAsGroup.children) {\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = nodeAsGroup.children[o];\n }\n\n if (\n (nodeAsGroup.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = nodeAsGroup.children[o];\n }\n }\n\n const valuePayload = this.getObsNodePayload(valueField);\n console.log('valuePayload', valuePayload);\n\n // set obs datetime for the generated payload\n if (valuePayload.length > 0) {\n valuePayload[0].obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return valuePayload[0];\n } else if (valuePayload.length === 0 && node.initialValue) {\n // determine if date changed\n if (\n !this.areDatesEqual(\n node.initialValue.obsDatetime,\n dateField.control.value\n )\n ) {\n const payload: any = {\n uuid: node.initialValue.uuid\n };\n payload.obsDatetime = this.toOpenMrsDateTimeString(\n dateField.control.value\n );\n return payload;\n }\n }\n return null;\n }\n\n getMultiselectObsPayload(node: NodeBase): Array<any> {\n const payload: Array<any> = [];\n\n const existingUuids = [];\n\n // add voided obs i.e. deleted options\n if (Array.isArray(node.initialValue)) {\n _.each(node.initialValue, (item) => {\n existingUuids.push(item.value.uuid);\n if (Array.isArray(node.control.value)) {\n if (node.control.value.indexOf(item.value.uuid) < 0) {\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n } else {\n // every value was deleted\n payload.push({\n uuid: item.uuid,\n voided: true\n });\n }\n });\n }\n\n // add new obs i.e they didn't exisit originally\n if (Array.isArray(node.control.value)) {\n _.each(node.control.value, (item) => {\n if (existingUuids.indexOf(item) < 0) {\n payload.push({\n concept: node.question.extras.questionOptions.concept,\n value: item\n });\n }\n });\n }\n\n return payload;\n }\n\n getGroupPayload(node: NodeBase) {\n const nodeAsGroup: GroupNode = node as GroupNode;\n\n let childrenPayload = [];\n _.each(nodeAsGroup.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n });\n\n if (childrenPayload.length === 0) {\n return null;\n }\n\n const groupPayload: any = {\n groupMembers: childrenPayload\n };\n\n if (nodeAsGroup.initialValue) {\n groupPayload.uuid = nodeAsGroup.initialValue.uuid;\n } else {\n groupPayload.concept =\n nodeAsGroup.question.extras.questionOptions.concept;\n }\n\n return groupPayload;\n }\n\n getRepeatingGroupPayload(node: NodeBase) {\n const nodeAsArray: ArrayNode = node as ArrayNode;\n\n let childrenPayload = [];\n\n const groupsUuidsAfterEditting = [];\n _.each(nodeAsArray.children, (child) => {\n const payload = this.getObsNodePayload(child);\n if (payload.length > 0) {\n childrenPayload = childrenPayload.concat(payload);\n }\n if (child.initialValue && child.initialValue.uuid) {\n groupsUuidsAfterEditting.push(child.initialValue.uuid);\n }\n });\n\n // void deleted groups\n // console.log('groupsUuidsAfterEditting', groupsUuidsAfterEditting);\n if (nodeAsArray.initialValue && Array.isArray(nodeAsArray.initialValue)) {\n _.each(nodeAsArray.initialValue, (obs) => {\n if (groupsUuidsAfterEditting.indexOf(obs.uuid) < 0) {\n const voidedGroup = {\n uuid: obs.uuid,\n voided: true\n };\n childrenPayload.push(voidedGroup);\n }\n });\n }\n\n if (childrenPayload.length <= 0) {\n return null;\n }\n return childrenPayload;\n }\n\n getObsNodePayload(node: NodeBase): Array<any> {\n let payload = [];\n\n switch (this.getObsNodeType(node)) {\n case 'unknown':\n if (node instanceof GroupNode) {\n const groupNode = node as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in groupNode.children) {\n const groupNodePayoad = this.getObsNodePayload(\n groupNode.children[o]\n );\n if (Array.isArray(groupNodePayoad) && groupNodePayoad.length > 0) {\n payload = payload.concat(groupNodePayoad);\n }\n }\n break;\n }\n if (node instanceof ArrayNode) {\n const arrayNode = node as ArrayNode;\n for (let i = 0; i < arrayNode.children.length; i++) {\n const arrayNodePayload = this.getObsNodePayload(\n arrayNode.children[i]\n );\n if (\n Array.isArray(arrayNodePayload) &&\n arrayNodePayload.length > 0\n ) {\n payload = payload.concat(arrayNodePayload);\n }\n }\n break;\n }\n break;\n case 'simple':\n const simpleObs = this.getSimpleObsPayload(node);\n if (simpleObs !== null) {\n payload.push(simpleObs);\n }\n break;\n\n case 'multiselect':\n const multiselectObs = this.getMultiselectObsPayload(node);\n\n if (Array.isArray(multiselectObs) && multiselectObs.length > 0) {\n payload = payload.concat(multiselectObs);\n }\n break;\n\n case 'complex':\n const complexObs = this.getComplexObsPayload(node);\n if (complexObs !== null) {\n payload.push(complexObs);\n }\n break;\n\n case 'group':\n const groupedObs = this.getGroupPayload(node);\n if (groupedObs && groupedObs !== null) {\n payload.push(groupedObs);\n }\n break;\n case 'repeatingGroup':\n const repeatingGroupedObs = this.getRepeatingGroupPayload(node);\n if (\n Array.isArray(repeatingGroupedObs) &&\n repeatingGroupedObs.length > 0\n ) {\n payload = payload.concat(repeatingGroupedObs);\n }\n break;\n default:\n break;\n }\n\n return payload;\n }\n\n simpleNodeValueChanged(node: NodeBase): boolean {\n if (node.initialValue) {\n if (node.initialValue.value && node.initialValue.value.uuid) {\n // question whose answer is a concept\n return node.control.value !== node.initialValue.value.uuid;\n }\n\n if (node.question.extras.questionOptions.rendering === 'date') {\n return !this.areDatesEqual(node.control.value, node.initialValue.value);\n }\n return node.control.value !== node.initialValue.value;\n }\n return false;\n }\n\n areDatesEqual(date1, date2) {\n return moment(date1).isSame(date2);\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n toOpenMrsDateTimeString(datetime: string): string {\n if (this.isEmpty(datetime)) {\n return undefined;\n } else {\n // transform value to memoent value to avoid error\n const formattedVal = moment(datetime).format();\n const val = formattedVal.substring(0, 19).replace('T', ' ');\n return this.isEmpty(val) ? undefined : val;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'rxjs';\n\nimport * as _ from 'lodash';\n\nimport { LeafNode, GroupNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport { ObsAdapterHelper } from './obs-adapter-helper';\n\n@Injectable()\nexport class ObsValueAdapter implements ValueAdapter {\n constructor(private helper: ObsAdapterHelper) {}\n\n generateFormPayload(form: Form) {\n return this.helper.getObsNodePayload(form.rootNode);\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Get obs Payload\n // return this.getObsPayload(questionNodes);\n }\n\n populateForm(form: Form, payload) {\n this.helper.setNodeValue(form.rootNode, payload);\n\n // TODO: Get rid of the section below when the helper is stable.\n // // Traverse to get all nodes\n // let pages = this.traverse(form.rootNode);\n // // Extract actual question nodes\n // let questionNodes = this.getQuestionNodes(pages);\n // // Extract set obs\n // this.setValues(questionNodes, payload);\n }\n\n // TODO: Get rid of all the functions below as they will not be needed\n // once the helper is stable\n\n setValues(nodes, payload?, forcegroup?) {\n if (nodes) {\n for (const node of nodes) {\n if (node instanceof LeafNode) {\n this.setObsValue(node, payload);\n if (\n node.question.enableHistoricalValue &&\n node.initialValue !== undefined\n ) {\n node.question.setHistoricalValue(false);\n }\n } else if (\n (node.question &&\n node.question.extras &&\n node.question.renderingType === 'group') ||\n forcegroup\n ) {\n const groupObs = _.find(payload, (o: any) => {\n return (\n o.concept.uuid === node.question.extras.questionOptions.concept &&\n o.groupMembers\n );\n });\n if (groupObs) {\n if (node.node) {\n node.node['initialValue'] = groupObs;\n }\n\n this.setValues(node.groupMembers, groupObs.groupMembers);\n }\n if (forcegroup && node.payload) {\n this.setValues(node.groupMembers, node.payload.groupMembers);\n }\n } else if (\n node instanceof GroupNode &&\n node.question.extras.type === 'complex-obs'\n ) {\n this.setComplexObsValue(node, payload);\n } else if (\n node.question &&\n node.question.extras &&\n node.question.renderingType === 'repeating' &&\n !forcegroup\n ) {\n this.setRepeatingGroupValues(node, payload);\n node.node.control.updateValueAndValidity();\n } else {\n throw new Error('not implemented');\n }\n }\n }\n }\n\n setObsValue(node, payload) {\n if (\n (node.question &&\n node.question.extras &&\n (node.question.extras.type === 'obs' ||\n (node.question.extras.type === 'complex-obs-child' &&\n node.question.extras.questionOptions.obsField === 'value')) &&\n node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||\n node.question.extras.questionOptions.rendering !== 'checkbox' ||\n node.question.extras.questionOptions.rendering !== 'multi-select'\n ) {\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (obs) {\n if (obs.value instanceof Object) {\n node.control.setValue(obs.value.uuid);\n node.control.updateValueAndValidity();\n } else {\n node.control.setValue(obs.value);\n node.control.updateValueAndValidity();\n }\n node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };\n }\n } else {\n const multiObs = _.filter(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n if (multiObs && multiObs.length > 0) {\n node.control.setValue(this.getMultiselectValues(multiObs));\n node.control.updateValueAndValidity();\n node['initialValue'] = multiObs;\n }\n }\n }\n\n setComplexObsValue(node, payload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n // set the usual obs value\n this.setObsValue(valueField, payload);\n\n // set the obs date\n const obs = _.find(payload, (o: any) => {\n return o.concept.uuid === node.question.extras.questionOptions.concept;\n });\n\n if (obs) {\n dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };\n (dateField as LeafNode).control.setValue(obs.obsDatetime);\n (dateField as LeafNode).control.updateValueAndValidity();\n }\n }\n\n getMultiselectValues(multiObs) {\n const values = [];\n for (const m of multiObs) {\n values.push(m.value.uuid);\n }\n return values;\n }\n\n setRepeatingGroupValues(node, payload) {\n const groupRepeatingObs = _.filter(payload, (o: any) => {\n const found =\n o.concept.uuid === node.question.extras.questionOptions.concept;\n let intersect = false;\n if (found && o.groupMembers) {\n const obs = o.groupMembers.map((a) => {\n return a.concept.uuid;\n });\n\n const schemaQuestions = node.question.questions.map((a) => {\n return a.extras.questionOptions.concept;\n });\n\n intersect = _.intersection(obs, schemaQuestions).length > 0;\n }\n return found && intersect;\n });\n if (groupRepeatingObs.length > 0) {\n node.node['initialValue'] = groupRepeatingObs;\n for (let i = 0; i < groupRepeatingObs.length; i++) {\n node.node.createChildNode();\n }\n }\n const groups = [];\n let index = 0;\n for (const child of node.node.children) {\n const children = Object.keys(child.children).map(function (key) {\n return child.children[key];\n });\n const groupPayload = groupRepeatingObs[index];\n groups.push({\n question: node.question,\n groupMembers: children,\n payload: groupPayload\n });\n index++;\n }\n this.setValues(groups, groupRepeatingObs, true);\n }\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n for (const section of page.page) {\n arrays.push(section.section);\n }\n }\n return merged.concat.apply([], arrays);\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n\n processGroup(obs, obsPayload) {\n if (\n obs.question &&\n obs.question.extras &&\n obs.question.extras.questionOptions.rendering === 'group'\n ) {\n const members = _.filter(\n this.getObsPayload(obs.groupMembers),\n (o: any) => {\n return o.value !== '';\n }\n );\n\n const mappedMembers = members.map((a) => {\n return a.voided;\n });\n if (members.length > 0 && mappedMembers.every(Boolean)) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n voided: true\n });\n } else if (members.length > 0) {\n if (obs.node.initialValue) {\n obsPayload.push({\n uuid: obs.node.initialValue.uuid,\n groupMembers: members\n });\n } else {\n obsPayload.push({\n concept: obs.question.extras.questionOptions.concept,\n groupMembers: members\n });\n }\n }\n }\n }\n\n mapInitialGroup(group) {\n let current = {};\n for (const member of group.groupMembers) {\n let value: any = '';\n if (member.value instanceof Object) {\n value = member.value.uuid;\n } else if (member.value) {\n value = member.value;\n } else if (member.groupMembers && member.groupMembers.length > 0) {\n current = this.mapInitialGroup(group);\n }\n current[member.concept.uuid + ':' + value] = value;\n }\n return current;\n }\n\n mapModelGroup(node, value) {\n const current = {};\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n const groupQuestion: any = _.find(node.question.questions, {\n key: key\n });\n const modelValue = value[key];\n if (modelValue instanceof Object) {\n } else if (modelValue !== '') {\n current[\n groupQuestion.extras.questionOptions.concept + ':' + modelValue\n ] = modelValue;\n }\n }\n }\n return current;\n }\n\n processRepeatingGroups(node, obsPayload) {\n const initialValues = [];\n if (node.node.initialValue) {\n for (const group of node.node.initialValue) {\n initialValues.push({\n uuid: group.uuid,\n value: this.mapInitialGroup(group)\n });\n }\n }\n const repeatingModel = [];\n for (const value of node.node.control.value) {\n repeatingModel.push({ value: this.mapModelGroup(node, value) });\n }\n const deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);\n const newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);\n const groupConcept = node.question.extras.questionOptions.concept;\n let newObsPayload = [];\n if (deleted.length > 0) {\n const deletedObs = this.createGroupDeletedObs(deleted);\n for (const d of deletedObs) {\n obsPayload.push(d);\n }\n if (newObs.length > 0) {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n } else {\n newObsPayload = this.createGroupNewObs(newObs, groupConcept);\n }\n\n if (newObsPayload.length > 0) {\n for (const p of newObsPayload) {\n obsPayload.push(p);\n }\n }\n }\n\n leftOuterJoinArrays(first, second) {\n const unique = first.filter(function (obj) {\n return !second.some(function (obj2) {\n return _.isEqual(obj.value, obj2.value);\n });\n });\n return unique;\n }\n\n createGroupNewObs(payload, groupConcept) {\n const newPayload = [];\n for (const obs of payload) {\n const groupPayload = [];\n /* tslint:disable */\n for (let key in obs.value) {\n let concept = key.split(':')[0];\n let value = key.split(':')[1];\n groupPayload.push({ concept: concept, value: value });\n }\n newPayload.push({ concept: groupConcept, groupMembers: groupPayload });\n /* tslint:enable */\n }\n return newPayload;\n }\n\n createGroupDeletedObs(payload) {\n const deletedObs = [];\n for (const d of payload) {\n deletedObs.push({ uuid: d.uuid, voided: true });\n }\n return deletedObs;\n }\n\n getExactTime(datetime: string) {\n return datetime.substring(0, 19).replace('T', ' ');\n }\n\n processObs(obs, obsPayload) {\n if (obs.control && obs.question.extras) {\n const obsValue = {\n concept: obs.question.extras.questionOptions.concept,\n value:\n obs.question.extras.questionOptions.rendering === 'date' &&\n !this.isEmpty(obs.control.value)\n ? this.getExactTime(obs.control.value)\n : obs.control.value\n };\n\n if (\n obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||\n obs.question.extras.questionOptions.rendering === 'checkbox' ||\n obs.question.extras.questionOptions.rendering === 'multi-select'\n ) {\n const multis = this.processMultiSelect(\n obs.question.extras.questionOptions.concept,\n obs.control.value\n );\n if (obs.initialValue) {\n const mappedInitial = obs.initialValue.map((a) => {\n return {\n uuid: a.uuid,\n value: { concept: a.concept.uuid, value: a.value.uuid }\n };\n });\n const mappedCurrent = multis.map((a) => {\n return { value: a };\n });\n const deletedObs = this.leftOuterJoinArrays(\n mappedInitial,\n mappedCurrent\n );\n const newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);\n this.processDeletedMultiSelectObs(deletedObs, obsPayload);\n this.processNewMultiSelectObs(newObs, obsPayload);\n } else {\n this.processNewMultiSelectObs(multis, obsPayload);\n }\n } else {\n if (obs.initialValue && obs.initialValue.value && obsValue) {\n this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);\n } else if (obsValue.value !== '' && obsValue.value !== null) {\n obsPayload.push(obsValue);\n }\n }\n }\n }\n\n processComplexObs(node, obsPayload) {\n let valueField: any;\n let dateField: any;\n\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'value'\n ) {\n valueField = node.children[o];\n }\n\n if (\n (node.children[o] as LeafNode).question.extras.questionOptions\n .obsField === 'obsDatetime'\n ) {\n dateField = node.children[o];\n }\n }\n\n if (valueField) {\n // process obs as usual\n this.processObs(valueField, obsPayload);\n\n // obtain the last inserted obs and set the obsDatetime\n const createdPayload =\n obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;\n if (\n createdPayload &&\n ((createdPayload.concept &&\n createdPayload.concept ===\n node.question.extras.questionOptions.concept) ||\n (valueField.initialValue &&\n createdPayload.uuid === valueField.initialValue.obsUuid))\n ) {\n if (\n dateField.initialValue &&\n dateField.control.value !== dateField.initialValue.value\n ) {\n createdPayload.obsDatetime = dateField.control.value;\n }\n }\n }\n }\n\n processDeletedMultiSelectObs(values, obsPayload) {\n for (const value of values) {\n obsPayload.push({ uuid: value.uuid, voided: true });\n }\n }\n\n processNewMultiSelectObs(values, obsPayload) {\n for (const multi of values) {\n if (multi.value instanceof Object) {\n obsPayload.push(multi.value);\n } else {\n obsPayload.push(multi);\n }\n }\n }\n\n updateOrVoidObs(obsValue, initialValue, obsPayload) {\n if (this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, voided: true });\n } else if (!this.isEmpty(obsValue.value) && initialValue.value) {\n obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });\n }\n }\n\n isEmpty(value): boolean {\n if (\n value === '' ||\n value === null ||\n value === undefined\n // || value === [] ||\n // value === {}\n ) {\n return true;\n }\n return false;\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({\n page: page,\n label: o.children[key].question.label\n });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({\n section: section,\n node: o.children[key],\n label: o.children[key].question.label\n });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n }\n }\n return questions;\n }\n\n processMultiSelect(concept, values) {\n const multiSelectObs = [];\n if (values && values !== null) {\n for (const value of values) {\n const obs = {\n concept: concept,\n value: value\n };\n multiSelectObs.push(obs);\n }\n }\n return multiSelectObs;\n }\n\n isObs(node) {\n return (\n node.question.extras.type === 'obs' ||\n node.question.extras.type === 'obsGroup' ||\n node.question.extras.type === 'complex-obs'\n );\n }\n\n getObsPayload(nodes) {\n const obsPayload = [];\n for (const node of nodes) {\n if (this.isObs(node)) {\n if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'group')\n ) {\n this.processGroup(node, obsPayload);\n } else if (\n (node.groupMembers,\n node.question.extras.questionOptions.rendering === 'repeating')\n ) {\n this.processRepeatingGroups(node, obsPayload);\n } else if (\n node instanceof GroupNode &&\n (node as GroupNode).question.extras.type === 'complex-obs'\n ) {\n this.processComplexObs(node, obsPayload);\n } else {\n this.processObs(node, obsPayload);\n }\n }\n }\n return obsPayload;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\nimport * as _ from 'lodash';\n@Injectable()\nexport class OrderValueAdapter implements ValueAdapter {\n formOrderNodes = [];\n private provider = '';\n\n generateFormPayload(form: Form) {\n this.formOrderNodes = [];\n this._setOrderProvider(form);\n this._findTestOrderQuestionNodes(form.rootNode);\n return this._createOrdersPayload(this.formOrderNodes, form);\n }\n\n populateForm(form: Form, payload) {\n form.existingOrders = payload;\n this.formOrderNodes = [];\n this._findTestOrderQuestionNodes(form.rootNode);\n const existingOrders = this._getExistingOrders(form);\n this._setOrderValues(this.formOrderNodes, existingOrders);\n }\n\n private _setOrderProvider(form: Form) {\n if (form.valueProcessingInfo.providerUuid) {\n this.provider = form.valueProcessingInfo.providerUuid;\n }\n }\n\n private _createOrdersPayload(orderNodes, form: Form) {\n const payload = [];\n const selectedOrders = [];\n let deletedOrders = [];\n const existingOrders = this._getExistingOrders(form);\n for (const orderNode of orderNodes) {\n const orderNodeValues = orderNode.control.value;\n const orders = [];\n if (existingOrders) {\n existingOrders.map(function (obj) {\n orders[obj.concept] = obj.concept;\n });\n }\n\n for (const order in orderNodeValues) {\n if (orderNodeValues.hasOwnProperty(order)) {\n const orderValue = orderNodeValues[order][orderNode.question.key];\n\n const payloadOrder = this._createPayloadOrder(\n orderValue,\n orderNode.question.extras\n );\n\n if (\n orders[orderValue] !== orderValue &&\n payloadOrder.concept !== ''\n ) {\n payload.push(payloadOrder);\n }\n selectedOrders[orderValue] = orderValue;\n if (payloadOrder.orderNumber === '') {\n delete payloadOrder.orderNumber;\n }\n if (payloadOrder.uuid === '') {\n delete payloadOrder.uuid;\n }\n }\n }\n }\n\n deletedOrders = this._getDeletedOrders(selectedOrders, existingOrders);\n return this._addDeletedOrdersToPayload(deletedOrders, payload);\n }\n\n private _getExistingOrders(form: Form) {\n if (form.existingOrders && form.existingOrders.orders) {\n let existingOrders = form.existingOrders.orders.map((o) => {\n return {\n concept: o.concept.uuid,\n orderNumber: o.orderNumber,\n orderUuid: o.uuid,\n voided: o.voided,\n dateVoided: o.auditInfo.dateVoided\n };\n });\n\n return (existingOrders = _.filter(existingOrders, (order: any) => {\n if (order.voided === true || order.dateVoided) {\n return false;\n } else {\n return true;\n }\n }));\n } else {\n return;\n }\n }\n\n private _setOrderValues(node, existingOrders) {\n this._findTestOrderQuestionNodes(node);\n\n const orderNodes = this.formOrderNodes;\n for (const orderNode of orderNodes) {\n this._setOrderNodeValues(orderNode, existingOrders);\n }\n }\n\n private _addDeletedOrdersToPayload(deletedOrders, payload): any {\n for (const order in deletedOrders) {\n if (deletedOrders.hasOwnProperty(order)) {\n payload.push({ uuid: deletedOrders[order], voided: true });\n }\n }\n return payload;\n }\n\n private _createPayloadOrder(orderConcept, quesitonExtras): any {\n const order = {\n concept: '',\n type: '',\n orderer: '',\n careSetting: ''\n };\n order.concept = orderConcept;\n order.type = quesitonExtras.questionOptions.orderType;\n order.orderer = this.provider;\n order.careSetting = quesitonExtras.questionOptions.orderSettingUuid;\n\n // delete orderer if provider not provided\n if (order.orderer === '') {\n delete order.orderer;\n }\n\n return order;\n }\n\n private _getDeletedOrders(selectedOrders, existingOrders): any {\n const deleteOrders = [];\n if (selectedOrders) {\n for (const order in existingOrders) {\n if (existingOrders.hasOwnProperty(order)) {\n const existingOrderConcept = existingOrders[order].concept;\n const selectedOrder = selectedOrders[existingOrderConcept];\n if (selectedOrder !== existingOrderConcept) {\n deleteOrders.push(existingOrders[order].orderUuid);\n }\n }\n }\n }\n // console.log('Deleted Orders ', deleteOrders);\n return deleteOrders;\n }\n\n private _setOrderNodeValues(node, orders) {\n let index = 0;\n node['initialValue'] = orders;\n for (const order of orders) {\n node.createChildNode();\n const value = {};\n value[node.question.key] = order.concept;\n const childNode = node.children[index];\n childNode.control.setValue(value);\n childNode['initialValue'] = value;\n childNode['orderNumber'] = order.orderNumber;\n // console.log('Set Value', node.children[index].control.value, node, childNode);\n index++;\n }\n }\n\n private _findTestOrderQuestionNodes(formNode) {\n if (formNode.children) {\n if (formNode.children instanceof Object) {\n for (const key in formNode.children) {\n if (formNode.children.hasOwnProperty(key)) {\n switch (formNode.children[key].question.renderingType) {\n case 'page':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'section':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n break;\n case 'group':\n this._findTestOrderQuestionNodes(formNode.children[key]);\n\n break;\n case 'repeating':\n if (formNode.children) {\n // tslint:disable-next-line:forin\n for (const node in formNode.children) {\n const question = formNode.children[node].question;\n if (\n question.extras &&\n question.extras.type === 'testOrder'\n ) {\n this.formOrderNodes.push(formNode.children[node]);\n }\n }\n }\n break;\n default:\n break;\n }\n }\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\n\nimport { ValueAdapter } from './value.adapter';\nimport { ObsValueAdapter } from './obs.adapter';\nimport { OrderValueAdapter } from './order.adapter';\n\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\n@Injectable()\nexport class EncounterAdapter implements ValueAdapter {\n constructor(\n public ordersAdapter: OrderValueAdapter,\n public obsAdapter: ObsValueAdapter\n ) {}\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n\n if (Array.isArray(payload.orders)) {\n this.ordersAdapter.populateForm(form, payload);\n }\n if (Array.isArray(payload.obs)) {\n this.obsAdapter.populateForm(form, payload.obs);\n }\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (payload === undefined || payload === null) {\n throw new Error('Expected payload');\n }\n\n const nodes = this.getEncounterNodes(rootNode);\n\n nodes.forEach((node) => {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n if (payload['encounterDatetime']) {\n // console.log('date', payload['encounterDatetime']);\n node.control.setValue(\n moment(payload['encounterDatetime']).toDate()\n );\n node.initialValue = moment(payload['encounterDatetime']).toDate();\n }\n break;\n case 'encounterProvider':\n if (\n Array.isArray(payload['encounterProviders']) &&\n payload['encounterProviders'].length > 0\n ) {\n const firstProvider: any =\n payload['encounterProviders'][0].provider;\n if (firstProvider && firstProvider.uuid) {\n // Very weird work around for an issue with setting the value\n node.control.setValue(firstProvider.uuid);\n setTimeout(() => {\n node.control.setValue(firstProvider.uuid);\n });\n node.initialValue = firstProvider.uuid;\n }\n }\n break;\n case 'encounterLocation':\n if (payload['location'] && payload['location'].uuid) {\n node.control.setValue(payload['location'].uuid);\n node.initialValue = payload['location'].uuid;\n }\n break;\n default:\n break;\n }\n });\n }\n\n generateFormPayload(form: Form) {\n const payload = this.generateNodePayload(form.rootNode);\n\n this.setNonFilledPayloadMembers(form, payload);\n\n payload['obs'] = this.obsAdapter.generateFormPayload(form) || [];\n\n payload['orders'] = this.ordersAdapter.generateFormPayload(form) || [];\n\n return payload;\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getEncounterNodes(rootNode);\n const payload = {};\n\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== ''\n ) {\n switch (node.question.extras.type) {\n case 'encounterDatetime':\n const dateValue = moment(node.control.value).utcOffset(\n rootNode.form.valueProcessingInfo.utcOffset || '+0300'\n );\n payload['encounterDatetime'] = dateValue.format(\n 'YYYY-MM-DD HH:mm:ss'\n );\n break;\n case 'encounterProvider':\n if (node.control.value && node.control.value !== '') {\n const providers = [];\n providers.push({\n provider: node.control.value,\n encounterRole: 'a0b03050-c99b-11e0-9572-0800200c9a66' // unknown provider role in the encounter as default\n });\n payload['encounterProviders'] = providers;\n }\n break;\n case 'encounterLocation':\n payload['location'] = node.control.value;\n break;\n default:\n break;\n }\n }\n });\n\n return payload;\n }\n\n getEncounterNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getEncounterNodes(rootNode, results);\n return results;\n }\n\n setNonFilledPayloadMembers(form: Form, payload) {\n if (form.valueProcessingInfo.patientUuid) {\n this.setPayloadPatientUuid(payload, form.valueProcessingInfo.patientUuid);\n }\n\n if (form.valueProcessingInfo.visitUuid) {\n this.setPayloadVisitUuid(payload, form.valueProcessingInfo.visitUuid);\n }\n\n if (form.valueProcessingInfo.encounterTypeUuid) {\n this.setPayloadEncounterTypeUuid(\n payload,\n form.valueProcessingInfo.encounterTypeUuid\n );\n }\n\n if (form.valueProcessingInfo.formUuid) {\n this.setPayloadFormUuid(payload, form.valueProcessingInfo.formUuid);\n }\n\n if (form.valueProcessingInfo.encounterUuid) {\n this.setPayloadEncounterUuid(\n payload,\n form.valueProcessingInfo.encounterUuid\n );\n }\n }\n\n setPayloadPatientUuid(payload, patientUuid: string) {\n payload['patient'] = patientUuid;\n }\n\n setPayloadVisitUuid(payload, visitUuid: string) {\n payload['visit'] = visitUuid;\n }\n\n setPayloadEncounterTypeUuid(payload, encounterTypeUuid: string) {\n payload['encounterType'] = encounterTypeUuid;\n }\n\n setPayloadFormUuid(payload, formUuid: string) {\n payload['form'] = formUuid;\n }\n\n setPayloadEncounterUuid(payload, encounterUuid: string) {\n payload['uuid'] = encounterUuid;\n }\n\n private _getEncounterNodes(rootNode: NodeBase, array: Array<NodeBase>) {\n if (this._isEncounterNode(rootNode)) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getEncounterNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getEncounterNodes(child, array);\n });\n }\n }\n\n private _isEncounterNode(node: NodeBase): boolean {\n if (\n node.question.extras &&\n (node.question.extras.type === 'encounterDatetime' ||\n node.question.extras.type === 'encounterProvider' ||\n node.question.extras.type === 'encounterLocation')\n ) {\n return true;\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { NodeBase, GroupNode, ArrayNode } from '../form-factory/form-node';\nimport { Form } from '../form-factory/form';\nimport { ValueAdapter } from './value.adapter';\n\n@Injectable()\nexport class PersonAttribuAdapter implements ValueAdapter {\n constructor() {}\n\n generateFormPayload(form: Form) {\n return this.generateNodePayload(form.rootNode);\n }\n\n generateNodePayload(rootNode: NodeBase) {\n const nodes = this.getPersonAttributeNodes(rootNode);\n const payload = [];\n nodes.forEach((node) => {\n if (\n node.control.value !== null &&\n node.control.value !== undefined &&\n node.control.value !== '' &&\n node.initialValue !== node.control.value\n ) {\n if (node.question.extras.questionOptions.isSimpleValue === true) {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n value: node.control.value\n });\n } else {\n payload.push({\n attributeType: node.question.extras.questionOptions.attributeType,\n hydratedObject: node.control.value\n });\n }\n }\n });\n return payload;\n }\n\n populateForm(form: Form, payload) {\n this.populateNode(form.rootNode, payload);\n }\n\n populateNode(rootNode: NodeBase, payload) {\n if (!Array.isArray(payload)) {\n throw new Error('Expected an array of attributes');\n }\n\n const nodes = this.getPersonAttributeNodes(rootNode);\n\n nodes.forEach((node) => {\n payload.forEach((element) => {\n if (\n element.attributeType.uuid ===\n node.question.extras.questionOptions.attributeType\n ) {\n if (element.value.uuid) {\n node.control.setValue(element.value.uuid);\n node.initialValue = element.value.uuid;\n } else {\n node.control.setValue(element.value);\n node.initialValue = element.value;\n }\n }\n });\n });\n }\n\n getPersonAttributeNodes(rootNode: NodeBase): Array<NodeBase> {\n const results: Array<NodeBase> = [];\n this._getPersonAttributesNodes(rootNode, results);\n return results;\n }\n\n private _getPersonAttributesNodes(\n rootNode: NodeBase,\n array: Array<NodeBase>\n ) {\n if (\n rootNode.question.extras &&\n (rootNode.question.extras.type === 'personAttribute' ||\n rootNode.question.extras.type === 'amrsLocations' ||\n rootNode.question.extras.type === 'nonAmrsLocations' ||\n rootNode.question.extras.type === 'siblingLocations')\n ) {\n array.push(rootNode);\n }\n\n if (rootNode instanceof GroupNode) {\n const node = rootNode as GroupNode;\n // tslint:disable-next-line:forin\n for (const o in node.children) {\n if (node.children[o] instanceof NodeBase) {\n this._getPersonAttributesNodes(node.children[o], array);\n }\n }\n }\n\n if (rootNode instanceof ArrayNode) {\n const node = rootNode as ArrayNode;\n node.children.forEach((child) => {\n this._getPersonAttributesNodes(child, array);\n });\n }\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n ViewChild,\n Output,\n EventEmitter,\n Renderer2\n} from '@angular/core';\nimport { SelectComponent } from '../../components/select/select.component';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n@Component({\n selector: 'remote-select',\n template: `<div>\n <ng-select\n [id]=\"componentID\"\n [noFilter]=\"0\"\n (selected)=\"selected($event)\"\n (deselected)=\"removed($event)\"\n [options]=\"items\"\n [allowClear]=\"true\"\n [placeholder]=\"placeholder\"\n [notFoundMsg]=\"notFoundMsg\"\n (typed)=\"typed($event)\"\n tabindex=\"0\"\n >\n </ng-select>\n <div *ngIf=\"loading\">resolving....</div>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteSelectComponent),\n multi: true\n }\n ]\n})\nexport class RemoteSelectComponent implements OnInit, ControlValueAccessor {\n // @Input() dataSource: DataSource;\n @Input() placeholder = 'Search...';\n @Input() componentID: string;\n items = [];\n value = [];\n loading = false;\n searchText = '';\n notFoundMsg = 'match no found';\n @Output() done: EventEmitter<any> = new EventEmitter<any>();\n\n characters = [];\n @ViewChild(SelectComponent) private selectC: SelectComponent;\n\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n if (this._dataSource && this._dataSource.dataFromSourceChanged) {\n this.subscribeToDataSourceDataChanges();\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n subscribeToDataSourceDataChanges() {\n this._dataSource.dataFromSourceChanged.subscribe((results) => {\n if (results.length > 0) {\n this.items = results;\n this.notFoundMsg = '';\n // console.log('updating items', results, this.selectC.value);\n this.restoreSelectedValue(this.selectC.value, results);\n } else {\n this.notFoundMsg = 'Not found';\n this.items = [];\n }\n });\n }\n\n public typed(value: any): void {\n this.search(value);\n }\n search(value: string) {\n if (this.dataSource) {\n this.searchText = value;\n this.notFoundMsg = 'Loading.........';\n this.dataSource.searchOptions(value).subscribe(\n (result) => {\n if (result.length > 0) {\n const existing = _.map(this.value, _.clone);\n const concat = existing.concat(result);\n this.items = _.uniqBy(concat, 'value');\n }\n this.notFoundMsg = '';\n },\n (error) => {\n this.notFoundMsg = 'Errored';\n }\n );\n }\n }\n\n restoreSelectedValue(value, results) {\n let found = false;\n _.each(results, (item) => {\n if (item.value === value) {\n setTimeout(() => {\n this.selectC.select(value);\n this.selectC.value = value;\n });\n found = true;\n }\n });\n if (!found) {\n // console.log('not found after loading items', value, results);\n setTimeout(() => {\n this.selectC.select('');\n this.selectC.value = '';\n });\n }\n }\n\n canSearch(searchText: string) {\n return (\n (searchText.length - this.searchText.length >= 2 ||\n (searchText.length - this.searchText.length <= 2 &&\n searchText !== '')) &&\n this.loading === false\n );\n }\n\n // this is the initial value set to the component\n public writeValue(value: any) {\n if (value && value !== '') {\n if (this.dataSource) {\n this.loading = true;\n this.dataSource.resolveSelectedValue(value).subscribe(\n (result: any) => {\n this.items = [result];\n setTimeout(() => {\n this.selectC.select(result.value);\n this.selectC.value = result.value;\n });\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n }\n }\n // registers 'fn' that will be fired when changes are made\n // this is how we emit the changes back to the form\n public registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n // not used, used for touch input\n public registerOnTouched() {}\n // change events from the textarea\n onChange(event) {\n this.propagateChange(event.id);\n // .....\n // update the form\n // this.propagateChange(this.data);\n }\n removed(event) {\n console.log('Removed');\n this.propagateChange('');\n }\n selected(event) {\n this.propagateChange(event.value);\n }\n\n // the method set in registerOnChange, it is just\n // a placeholder for a method that takes one parameter,\n // we use it to emit changes back to the form\n private propagateChange = (change: any) => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\n// import { SelectModule } from 'ng2-select/ng2-select';\nimport { SelectModule } from '../../components/select/select.module';\nimport { RemoteSelectComponent } from './remote-select.component';\n\n@NgModule({\n imports: [CommonModule, SelectModule, FormsModule],\n exports: [RemoteSelectComponent],\n declarations: [RemoteSelectComponent],\n providers: []\n})\nexport class RemoteSelectModule {}\n","import { Component, OnInit, OnChanges, Input } from '@angular/core';\n\nimport { LeafNode } from '../../form-entry/form-factory/form-node';\nimport * as moment_ from 'moment';\n\nconst moment = moment_;\n\ninterface DailyScheduled {\n date: string;\n count: {\n scheduled: number;\n };\n}\ninterface WeeeklyScheduleReport {\n reports: {\n attended: any;\n hasNotReturned: any;\n scheduled: any;\n };\n results: DailyScheduled[];\n totals: {\n attended: number;\n hasNotReturned: number;\n scheduled: number;\n };\n}\ninterface DayCount {\n date: string;\n count: number;\n}\n\n@Component({\n selector: 'appointments-overview',\n template: `<div *ngIf=\"showAppointments\" class=\"appointments\">\n <p *ngIf=\"loadingAppointments\">\n <span *ngIf=\"!appointmentsLoaded && errorLoadingAppointments\"\n >Error checking appointments</span\n >\n <span *ngIf=\"loadingAppointments\"\n ><span class=\"fa fa-spinner fa-spin\"></span>Checking appointments...</span\n >\n </p>\n <div *ngIf=\"appointmentsLoaded && !errorLoadingAppointments\">\n <table\n *ngIf=\"appointments.length > 0\"\n class=\"table table-stripped table-bordered\"\n >\n <thead>\n <tr>\n <th\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span>{{ appointment.date }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td\n *ngFor=\"let appointment of appointments\"\n [ngClass]=\"{ active: appointment.date === today }\"\n >\n <span\n ><strong\n ><em>{{ appointment.count }}</em></strong\n ></span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n`,\n styles: [`.appointments{margin-top:12px;font-size:12px;color:#999}.appointments p{padding-top:12px}.appointments th{border-bottom:0!important;color:#333}.appointments td span,.appointments th span{display:block}.appointments td.active,.appointments th.active{background-color:#3c8dbc;color:#fff!important;padding:0}.appointments td.active span,.appointments th.active span{padding:4px}.appointments span.fa{display:inline-block;margin-right:7px}`]\n})\nexport class AppointmentsOverviewComponent implements OnInit, OnChanges {\n @Input() node: LeafNode;\n showAppointments = false;\n loadingAppointments = false;\n errorLoadingAppointments = false;\n appointmentsLoaded = false;\n appointments: Array<any> = [];\n today = '';\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.node.control.valueChanges.subscribe((v) => {\n this.resetProperties();\n const node = this.node;\n if (\n node.question.extras.questionOptions.concept &&\n (node.question.extras.questionOptions.concept ===\n 'a8a666ba-1350-11df-a1f1-0026b9348838' ||\n node.question.extras.questionOptions.concept ===\n 'a89d2398-1350-11df-a1f1-0026b9348838')\n ) {\n // console.log('what change is here', this.showAppointments);\n if (!this.showAppointments) {\n this.loadingAppointments = true;\n this.showAppointments = true;\n let dataSource;\n if (node.form && node.form.dataSourcesContainer.dataSources) {\n dataSource =\n node.form.dataSourcesContainer.dataSources\n .monthlyScheduleResourceService;\n }\n const locationUuid =\n node.form.dataSourcesContainer.dataSources.userLocation.uuid;\n if (dataSource && locationUuid) {\n const startDate = moment(v)\n .startOf('week')\n .add(1, 'day')\n .format('YYYY-MM-DD');\n const endDate = moment(v)\n .endOf('week')\n .subtract(1, 'day')\n .format('YYYY-MM-DD');\n this.today = moment(v).format('DD-MM-YYYY');\n dataSource\n .getMonthlySchedule({\n startDate: startDate,\n endDate: endDate,\n limit: 5,\n locationUuids: locationUuid,\n department: 'HIV',\n groupBy: 'groupByPerson,groupByAttendedDate,groupByRtcDate'\n })\n .subscribe(\n (data: WeeeklyScheduleReport) => {\n const _data: DayCount[] = [];\n const weeklyMap = new Map();\n // create the weeks schedule with zero appointments\n for (let i = 0; i < 5; i++) {\n const scheduleDate = moment(v)\n .startOf('week')\n .add(i, 'day')\n .format('YYYY-MM-DD');\n const scheduledObj: DailyScheduled = {\n date: scheduleDate,\n count: {\n scheduled: 0\n }\n };\n weeklyMap.set(scheduleDate, scheduledObj);\n }\n\n const results: DailyScheduled[] = data.results || [];\n // replace placeholder schedules with actual schedules in the map obj\n results.forEach((scheduled: DailyScheduled) => {\n weeklyMap.set(scheduled.date, scheduled);\n });\n // retrieve scheduled obj from map to data array\n weeklyMap.forEach((value: DailyScheduled, key: string) => {\n const dayCount: DayCount = {\n date: key,\n count: value.count.scheduled || 0\n };\n _data.push(dayCount);\n });\n this.appointmentsLoaded = true;\n this.loadingAppointments = false;\n\n this.appointments = _data;\n },\n (error: any) => {\n this.loadingAppointments = false;\n this.errorLoadingAppointments = true;\n this.showAppointments = false;\n console.error(error);\n }\n );\n } else {\n this.showAppointments = false;\n this.errorLoadingAppointments = true;\n }\n }\n }\n });\n }\n\n resetProperties() {\n this.loadingAppointments = false;\n this.appointmentsLoaded = false;\n this.errorLoadingAppointments = false;\n this.showAppointments = false;\n this.appointments = [];\n this.today = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GroupNode,\n LeafNode,\n ArrayNode,\n NodeBase\n} from '../form-entry/form-factory/form-node';\nimport * as _ from 'lodash';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\nimport { Observable } from 'rxjs';\nimport { SelectOption } from '../form-entry/question-models/interfaces/select-option';\nconst comma = ', ';\nconst newLine = '\\n';\n\n@Injectable()\nexport class EncounterViewerService implements DataSource {\n constructor() {}\n public resolveSelectedValue(value: any): Observable<SelectOption> {\n return;\n }\n public searchOptions(searchText: any): Observable<SelectOption[]> {\n return;\n }\n public fileUpload(data: any): Observable<any> {\n return;\n }\n public fetchFile(url: any): Observable<any> {\n return;\n }\n\n public resolveSelectedValueFromSchema(\n answerUuid: string,\n schema: any\n ): string {\n let label;\n if (schema.pages) {\n _.forEach(schema.pages, (page) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, page);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.sections) {\n _.forEach(schema.sections, (section) => {\n const l = this.resolveSelectedValueFromSchema(answerUuid, section);\n if (l) {\n label = l;\n }\n });\n }\n\n if (schema.questions) {\n _.forEach(schema.questions, (question) => {\n if (question.questions) {\n const l = this.resolveSelectedValueFromSchema(answerUuid, question);\n if (l) {\n label = l;\n }\n } else {\n if (question.questionOptions.answers) {\n _.forEach(question.questionOptions.answers, (answer) => {\n if (answer.concept === answerUuid) {\n label = answer.label;\n }\n });\n } else if (question.questionOptions.selectableOrders) {\n _.forEach(question.questionOptions.selectableOrders, (order) => {\n if (order.concept === answerUuid) {\n label = order.label;\n }\n });\n }\n }\n });\n }\n return label;\n }\n\n public hasAnswer(node: NodeBase) {\n let answered = false;\n if (node.initialValue) {\n answered = true;\n }\n return answered;\n }\n\n public questionsAnswered(node: any, answered?: boolean[]) {\n const $answered = answered || [];\n if (node.question.renderingType === 'page') {\n _.forEach(node.children, (childNode: any) => {\n this.questionsAnswered(childNode, $answered);\n });\n } else if (node.question.renderingType === 'section') {\n _.forEach(node.children, (childNode) => {\n if (childNode.question.renderingType === 'group') {\n _.forEach(childNode.children, (child) => {\n const ans = this.questionsAnswered(child, $answered);\n if (ans) {\n $answered.push(ans);\n }\n });\n } else if (this.hasAnswer(childNode)) {\n $answered.push(true);\n }\n });\n } else {\n return this.hasAnswer(node);\n }\n\n if ($answered.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n public isDate(val: any) {\n if (Date.parse(val)) {\n return true;\n } else {\n return false;\n }\n }\n public convertTime(unixTimestamp: number) {\n const a = new Date(unixTimestamp);\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ];\n const year = a.getFullYear();\n const month = months[a.getMonth()];\n const date = a.getDate();\n const hour = a.getHours();\n const min = a.getMinutes();\n const sec = a.getSeconds();\n const suffix = hour < 12 ? 'AM' : 'PM';\n let time;\n if (hour === 0 && min === 0) {\n time = date + ' ' + month + ' ' + year;\n } else {\n time =\n date +\n ' ' +\n month +\n ' ' +\n year +\n ' ' +\n hour +\n ':' +\n min +\n suffix +\n ' (EAT)';\n }\n return time;\n }\n}\n","import { Component, OnInit, Input, Inject } from '@angular/core';\nimport {\n NodeBase,\n GroupNode,\n LeafNode\n} from '../../form-entry/form-factory/form-node';\nimport { QuestionBase } from '../../form-entry/question-models/question-base';\nimport * as _ from 'lodash';\n\nimport { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';\nimport { DataSources } from '../../form-entry/data-sources/data-sources';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\n\nimport { EncounterViewerService } from '../encounter-viewer.service';\n\n@Component({\n selector: 'encounter-viewer',\n template: `<div class=\"viewer\">\n <div *ngIf=\"rootNode.question.renderingType === 'form'\" class=\"form\">\n <div *ngFor=\"let question of rootNode.question.questions; let i = index\">\n <div *ngIf=\"questionsAnswered(rootNode.children[question.key])\">\n <div [attr.id]=\"'page' + i\" class=\"panel panel-default\">\n <p class=\"page-label panel-heading text-primary\">\n {{ question.label }}\n </p>\n <div class=\"panel-body\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentComponent]=\"this\"\n [parentGroup]=\"rootNode.control\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.renderingType === 'page'\" class=\"page\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n\n <div\n *ngIf=\"\n rootNode.question.renderingType === 'section' &&\n questionsAnswered(rootNode)\n \"\n class=\"section\"\n >\n <div class=\"panel panel-primary\">\n <p class=\"panel-heading section-label\">{{ rootNode.question.label }}</p>\n </div>\n <div *ngFor=\"let question of rootNode.question.questions\">\n <encounter-viewer\n [node]=\"rootNode.children[question.key]\"\n [parentComponent]=\"this\"\n [schema]=\"_schema\"\n [parentGroup]=\"parentGroup\"\n ></encounter-viewer>\n </div>\n </div>\n\n <!--Leaf Controls-->\n <div style=\"margin-left: 10px\">\n <form *ngIf=\"rootNode.question.controlType === 0\" [formGroup]=\"parentGroup\">\n <div *ngIf=\"rootNode.control.value\">\n <div class=\"question-answer\">\n <label\n *ngIf=\"rootNode.question.label\"\n [attr.for]=\"rootNode.question.key\"\n style=\"font-weight: 400\"\n >\n {{ rootNode.question.label }}\n </label>\n <span *ngIf=\"checkForColon(rootNode.question.label)\">:</span>\n <div\n [ngSwitch]=\"rootNode.question.renderingType\"\n style=\"display: inline-block; font-weight: bold\"\n >\n <div *ngSwitchCase=\"'file'\">\n <file-preview\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"fileDataSource\"\n ></file-preview>\n </div>\n <div *ngSwitchCase=\"'remote-select'\">\n <remote-answer\n [formControlName]=\"rootNode.question.key\"\n [id]=\"rootNode.question.key + 'id'\"\n [dataSource]=\"remoteDataSource\"\n ></remote-answer>\n </div>\n <div *ngSwitchDefault style=\"display: inline-block\">\n <question-control\n [schema]=\"_schema\"\n [value]=\"rootNode.control.value\"\n [dataSource]=\"customDataSource\"\n ></question-control>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <!--Array Controls-->\n <div\n *ngIf=\"rootNode.question.controlType === 1 && questionsAnswered(rootNode)\"\n >\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'repeating'\">\n <div [ngSwitch]=\"rootNode.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <label>{{ rootNode.question.label }}:</label>\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\">\n <div *ngFor=\"let child of rootNode.children; let i = index\">\n <encounter-viewer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"rootNode.question.controlType === 2\">\n <!--GROUP-->\n <div [ngSwitch]=\"rootNode.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n <div *ngSwitchCase=\"'field-set'\">\n <encounter-viewer\n *ngFor=\"let question of rootNode.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"rootNode.children[question.key]\"\n [parentGroup]=\"rootNode.control\"\n [schema]=\"_schema\"\n ></encounter-viewer>\n </div>\n </div>\n </div>\n</div>\n`,\n styles: [`.page-label{font-size:20px;font-weight:700}.section-label{font-size:18px;font-weight:500}.panel-primary{border:none!important}.question-answer{font-size:16px}.panel{margin-bottom:5px}div.section{margin-bottom:15px!important}.line-breaker{white-space:pre-line}hr{margin:10px}`]\n})\nexport class EncounterViewerComponent implements OnInit {\n public rootNode: NodeBase;\n public enc: any;\n public fileDataSource: DataSource;\n public remoteDataSource: DataSource;\n public customDataSource: DataSource;\n public _schema;\n @Input() public parentGroup: AfeFormGroup;\n @Input() public parentComponent: EncounterViewerComponent;\n @Input() set node(rootNode: NodeBase) {\n this.rootNode = rootNode;\n }\n\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n\n @Input() public set encounter(enc: any) {\n this.enc = enc;\n }\n @Input() set form(form: any) {\n this.rootNode = form.rootNode;\n this._schema = form.schema;\n console.log(this.getQuestionNodes(this.traverse(this.rootNode)));\n }\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private dataSources: DataSources\n ) {}\n\n getQuestionNodes(pages) {\n const merged = [];\n const arrays = [];\n for (const page of pages) {\n arrays.push(page.page);\n }\n return merged.concat.apply([], arrays);\n }\n public ngOnInit() {\n if (this.rootNode) {\n }\n if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'file'\n ) {\n this.fileDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else if (\n this.rootNode &&\n this.rootNode.question.extras &&\n this.rootNode.question.renderingType === 'remote-select'\n ) {\n this.remoteDataSource = this.dataSources.dataSources[\n this.rootNode.question.dataSource\n ];\n } else {\n this.customDataSource = this.encounterViewerService;\n }\n }\n\n public questionsAnswered(node: any) {\n const $answered = this.encounterViewerService.questionsAnswered(node);\n return $answered;\n }\n\n public questionAnswered(node: NodeBase) {\n const answered = this.encounterViewerService.hasAnswer(node);\n return answered;\n }\n\n public checkForColon(questionLabel: string) {\n if (questionLabel.indexOf(':') === -1) {\n return true;\n } else {\n return false;\n }\n }\n\n traverse(o, type?) {\n const questions = [];\n if (o.children) {\n if (o.children instanceof Array) {\n const returned = this.repeatingGroup(o.children);\n return returned;\n }\n if (o.children instanceof Object) {\n for (const key in o.children) {\n if (o.children.hasOwnProperty(key)) {\n switch (o.children[key].question.renderingType) {\n case 'page':\n const page = this.traverse(o.children[key]);\n questions.push({ page: page });\n break;\n case 'section':\n const section = this.traverse(o.children[key]);\n questions.push({ section: section });\n break;\n case 'group':\n const qs = this.traverse(o.children[key]);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: qs\n });\n break;\n case 'repeating':\n const rep = this.repeatingGroup(o.children[key].children);\n questions.push({\n node: o.children[key],\n question: o.children[key].question,\n groupMembers: rep\n });\n break;\n default:\n questions.push(o.children[key]);\n break;\n }\n }\n }\n } else {\n console.log('Console.log', o);\n }\n }\n return questions;\n }\n\n repeatingGroup(nodes) {\n const toReturn = [];\n for (const node of nodes) {\n toReturn.push({\n question: node.question,\n groupMembers: this.traverse(node)\n });\n }\n return toReturn;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Form } from '../form-entry/form-factory/form';\nimport { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { DataSources } from '../form-entry/data-sources/data-sources';\nimport { DataSource } from '../form-entry/question-models/interfaces/data-source';\n\nimport { combineLatest, BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\n\nimport * as moment_ from 'moment';\nimport * as _ from 'lodash';\nimport * as pdfMake from 'pdfmake/build/pdfmake.js';\nimport 'pdfmake/build/vfs_fonts.js';\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\n\nconst moment = moment_;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EncounterPdfViewerService {\n private remoteDataSource: DataSource;\n public error: boolean;\n public errorMessage: string;\n public showLoader: boolean;\n public subscribedAnswers: any = {\n questions: {\n stack: []\n },\n answers: []\n };\n\n constructor(\n private encounterViewerService: EncounterViewerService,\n private obsValueAdapter: ObsValueAdapter,\n private dataSources: DataSources\n ) {}\n\n getPages(\n pages: any,\n form: Form,\n remoteSelectsOnly?: boolean,\n remoteAns?: any\n ): any[] {\n const content = [];\n let remoteQuestions = [];\n\n for (const page of pages) {\n if (remoteSelectsOnly) {\n remoteQuestions = remoteQuestions.concat(\n this.getSections(page.page, form, false, remoteAns)\n );\n } else {\n for (const question of form.rootNode.question.questions) {\n if (\n page.label ===\n form.rootNode.children[question.key].question.label &&\n this.encounterViewerService.questionsAnswered(\n form.rootNode.children[question.key]\n )\n ) {\n content.push({\n style: 'tableExample',\n table: {\n widths: ['*'],\n headerRows: 1,\n keepWithHeaderRows: 1,\n body: [\n [{ text: page.label, style: 'tableHeader' }],\n [\n {\n style: 'tableExample',\n table: {\n widths: ['*'],\n body: this.getSections(page.page, form, true, remoteAns)\n },\n layout: 'noBorders',\n margin: [5, 0, 0, 0]\n }\n ]\n ]\n },\n layout: {\n hLineWidth: function (i, node) {\n return i === 0 || i === node.table.body.length ? 0.5 : 0.5;\n },\n vLineWidth: function (i, node) {\n return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;\n },\n hLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n },\n vLineColor: function (i, node) {\n return i === 0 || i === node.table.body.length\n ? '#ddd'\n : '#ddd';\n }\n }\n });\n }\n }\n }\n }\n return remoteSelectsOnly ? remoteQuestions : content;\n }\n\n getSections(sections: any, form: Form, resolve: any, remoteAns: any): any[] {\n const content = [];\n const answeredSections = [];\n let questions: Array<Observable<any>> = [];\n\n sections.map((s) => {\n if (this.encounterViewerService.questionsAnswered(s.node)) {\n answeredSections.push(s);\n }\n });\n\n for (const section of answeredSections) {\n questions = questions.concat(this.getRemoteSectionData(section.section));\n }\n\n if (resolve && remoteAns) {\n for (const section of answeredSections) {\n content.push([\n {\n table: {\n widths: ['*'],\n body: [\n [{ text: section.label, style: 'tableSubheader' }],\n [this.getSectionData(section.section, remoteAns, form)]\n ]\n },\n layout: 'noBorders'\n }\n ]);\n }\n return content;\n } else {\n return questions;\n }\n }\n\n private appendResolvedAnswer(\n resolvedAnswer: any,\n questions: any,\n node?: any\n ) {\n if (resolvedAnswer) {\n questions.stack.push({\n text: [\n `${node ? node.question.label : 'Question label'}${\n node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : ''\n } `,\n { text: `${resolvedAnswer}`, bold: true }\n ],\n style: 'answers'\n });\n }\n }\n\n // get remote selects only\n getRemoteSectionData(section: any): any {\n const questions: Array<Observable<any>> = [];\n this.subscribedAnswers.questions.stack = [];\n\n for (const node of section) {\n if (node.question.renderingType === 'remote-select') {\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n if (node.control.value !== '') {\n if (this.remoteDataSource) {\n questions.push(\n this.remoteDataSource.resolveSelectedValue(node.control.value)\n );\n }\n }\n }\n }\n return questions;\n }\n\n // merge remote selects\n getSectionData(section: any, remoteAns: any[], form: Form): any {\n const questions = {\n stack: []\n };\n\n let resolvedAnswer = '';\n\n for (const node of section) {\n switch (node.question.renderingType) {\n case 'group':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'field-set':\n if (node.children) {\n const groupMembers = [];\n const result = Object.keys(node.children).map(\n (key) => node.children[key]\n );\n\n if (result) {\n groupMembers.push(result);\n questions.stack.push(\n this.getSectionData(groupMembers[0], remoteAns, form)\n );\n }\n }\n break;\n\n case 'repeating':\n if (node.groupMembers) {\n questions.stack.push(\n this.getSectionData(node.groupMembers, remoteAns, form)\n );\n }\n break;\n\n case 'remote-select':\n this.remoteDataSource = this.dataSources.dataSources[\n node.question.dataSource\n ];\n for (const ans of remoteAns) {\n if (ans.value === node.control.value) {\n this.appendResolvedAnswer(ans.label, questions, node);\n }\n }\n break;\n\n default:\n const answer = node.control.value;\n if (answer) {\n resolvedAnswer = this.resolveValue(answer, form);\n this.appendResolvedAnswer(resolvedAnswer, questions, node);\n }\n }\n }\n\n return questions;\n }\n\n resolveValue(answer: any, form: Form, arrayElement?: boolean): any {\n if (answer !== '') {\n if (this.isUuid(answer)) {\n const val = this.encounterViewerService.resolveSelectedValueFromSchema(\n answer,\n form.schema\n );\n if (!arrayElement) {\n if (val) {\n return val.toUpperCase();\n } else {\n return answer;\n }\n } else {\n return val;\n }\n } else if (_.isArray(answer)) {\n const arr = [];\n _.forEach(answer, (elem) => {\n arr.push(this.resolveValue(elem, form, true));\n });\n return arr.toString();\n } else if (this.isDate(answer)) {\n if (!arrayElement) {\n return this.encounterViewerService.convertTime(answer);\n } else {\n return this.encounterViewerService.convertTime(answer);\n }\n } else if (typeof answer === 'object') {\n const values = [];\n const result = Object.keys(answer).map((key) => [key, answer[key]]);\n\n values.push(result);\n return values;\n } else {\n return answer;\n }\n }\n }\n\n generatePdfDefinition(form: Form): any {\n const docDefinition$ = new BehaviorSubject<any>({});\n const remoteSelects = this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n true\n );\n\n combineLatest(remoteSelects).subscribe((remoteAns) => {\n if (remoteAns) {\n const docDefinition = {\n pageSize: 'A4',\n content: this.getPages(\n this.obsValueAdapter.traverse(form.rootNode),\n form,\n false,\n remoteAns\n ),\n styles: {\n answers: {\n fontSize: 8\n },\n banner: {\n fontSize: 9,\n bold: true,\n margin: [50, 15, 30, 0]\n },\n bannerItem: {\n margin: [2, 2, 2, 2]\n },\n bannerLabel: {\n color: '#2f4f4f'\n },\n confidential: {\n color: 'red',\n fontSize: 8,\n bold: true,\n margin: [60, 0, 0, 0]\n },\n footer: {\n alignment: 'center',\n fontSize: 8,\n bold: true\n },\n header: {\n fontSize: 9,\n bold: true,\n margin: [5, 5, 5, 5]\n },\n pageNumber: {\n color: '#2f4f4f',\n fontSize: 6\n },\n tableExample: {\n fontSize: 10,\n margin: [5, 0, 0, 5]\n },\n tableHeader: {\n fillColor: '#f5f5f5',\n width: ['100%'],\n borderColor: '#333',\n fontSize: 9,\n bold: true,\n margin: [5, 0, 5, 0]\n },\n tableSubheader: {\n fillColor: '#337ab7',\n width: ['100%'],\n fontSize: 9,\n color: 'white',\n margin: [5, 0, 5, 0]\n },\n timestamp: {\n bold: true,\n color: '#2f4f4f'\n }\n },\n defaultStyle: {\n fontSize: 7\n }\n };\n docDefinition$.next(docDefinition);\n }\n });\n\n return docDefinition$;\n }\n\n displayPdf(form) {\n const pdf = pdfMake;\n let patient;\n pdf.vfs = pdfMake.vfs;\n\n if (form.dataSourcesContainer.dataSources._dataSources) {\n patient =\n form.dataSourcesContainer.dataSources._dataSources['patientInfo'];\n }\n\n this.generatePdfDefinition(form).subscribe(\n (docDefinition) => {\n if (!_.isEmpty(docDefinition)) {\n if (typeof patient !== 'undefined') {\n const banner = [];\n\n if (patient.name) {\n banner.push({\n text: [\n { text: 'Name: ', style: 'bannerLabel' },\n { text: `${this.titleize(patient.name)}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.nid) {\n banner.push({\n text: [\n { text: 'ID: ', style: 'bannerLabel' },\n { text: `${patient.nid}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.birthdate) {\n banner.push({\n text: [\n { text: 'DOB: ', style: 'bannerLabel' },\n {\n text: `${moment(patient.birthdate).format('l')} (${\n patient.age\n } yo)`\n }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mui) {\n banner.push({\n text: [\n { text: 'MUI: ', style: 'bannerLabel' },\n { text: `${patient.mui}` }\n ],\n style: 'bannerItem'\n });\n }\n\n if (patient.mhn) {\n banner.push({\n text: [\n { text: 'MTRH No: ', style: 'bannerLabel' },\n { text: `${patient.mhn}` }\n ],\n style: 'bannerItem'\n });\n }\n\n docDefinition.header = {\n style: 'banner',\n table: {\n body: [banner]\n },\n layout: 'noBorders'\n };\n }\n\n docDefinition.footer = (currentPage, pageCount) => {\n return {\n style: 'footer',\n widths: ['*', 'auto'],\n table: {\n body: [\n [\n {\n text:\n 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +\n \"Patients' personal health information should be kept private.\",\n style: 'confidential'\n },\n ''\n ],\n [\n {\n text: `Generated on ${new Date().toUTCString()}`,\n style: 'timestamp'\n },\n {\n text: `${currentPage.toString()} of ${pageCount}`,\n style: 'pageNumber'\n }\n ]\n ]\n },\n layout: 'noBorders'\n };\n };\n\n const win = window.open('', '_blank');\n pdf.createPdf(docDefinition).open({}, win);\n }\n },\n (error) => {\n console.log('Error: ', error);\n }\n );\n }\n\n isDate(val: any) {\n return moment(val, moment.ISO_8601, true).isValid();\n }\n\n isUuid(value: string) {\n return (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n );\n }\n\n titleize(str) {\n return str.replace(\n /\\w\\S*/g,\n (s) => s.charAt(0).toUpperCase() + s.substr(1).toLowerCase()\n );\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Form } from '../../form-entry/form-factory/form';\nimport { NodeBase } from '../../form-entry/form-factory/form-node';\nimport { EncounterAdapter } from '../../form-entry/value-adapters/encounter.adapter';\n\nimport { EncounterPdfViewerService } from '../encounter-pdf-viewer.service';\n\n@Component({\n selector: 'encounter-renderer',\n template: `<a\n type=\"button\"\n style=\"display: block; font-size: 28px; cursor: pointer\"\n class=\"text-right\"\n (click)=\"displayPdf()\"\n>\n <span class=\"glyphicon text-primary glyphicon-print\"></span>\n</a>\n<encounter-viewer\n class=\"card\"\n [form]=\"$form\"\n [encounter]=\"$enc\"\n></encounter-viewer>\n`,\n styles: [`.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}`]\n})\nexport class EncounterContainerComponent implements OnInit {\n public $form: Form;\n public $enc: any;\n\n @Input() public set form(form) {\n this.$form = form;\n }\n @Input() public set encounter(enc) {\n this.$enc = enc;\n }\n\n constructor(\n private encAdapter: EncounterAdapter,\n private encounterPdfViewerService: EncounterPdfViewerService\n ) {}\n\n ngOnInit() {}\n\n displayPdf() {\n this.encounterPdfViewerService.displayPdf(this.$form);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'question-control',\n styles: [`input{border:none;box-shadow:none;color:#000;background:#fff!important;padding-top:23px;display:block;position:relative}`],\n template: `<div>\n {{ innerValue }}\n</div>\n`\n})\nexport class QuestionControlComponent implements OnInit {\n @Input() public set schema(schema: any) {\n this._schema = schema;\n }\n @Input() public set value(value) {\n this._value = value;\n }\n @Input() public set dataSource(dataSource: any) {\n this._dataSource = dataSource;\n }\n // The internal data model\n public innerValue: any = '';\n private _value: any;\n private _schema: any;\n private _dataSource: EncounterViewerService;\n constructor() {}\n\n ngOnInit() {\n this.writeValue(this._value);\n }\n public isUuid(value: string) {\n if (\n value.length === 36 &&\n value.indexOf(' ') === -1 &&\n value.indexOf('.') === -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n // Current time string.\n\n public writeValue(v: any, arrayElement?: boolean) {\n if (v !== this.innerValue) {\n if (this.isUuid(v)) {\n if (!arrayElement) {\n const val = this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n if (val) {\n this.innerValue = val.toUpperCase();\n } else {\n this.innerValue = v;\n }\n } else {\n return this._dataSource.resolveSelectedValueFromSchema(\n v,\n this._schema\n );\n }\n } else if (_.isArray(v)) {\n const arr = [];\n _.forEach(v, (el) => {\n arr.push(this.writeValue(el, true));\n });\n this.innerValue = arr;\n } else if (this.isDate(v)) {\n if (!arrayElement) {\n this.innerValue = this._dataSource.convertTime(v);\n } else {\n return this._dataSource.convertTime(v);\n }\n } else {\n if (!arrayElement) {\n this.innerValue = v;\n } else {\n return v;\n }\n }\n }\n }\n\n public isDate(str: string) {\n return this._dataSource.isDate(str) && !_.isNumber(str);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EncounterViewerService } from '../encounter-viewer.service';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'file-preview',\n styles: [``],\n template: `<div *ngIf=\"fileUuid\">\n <img\n *ngIf=\"!resultsIsPdf\"\n class=\"img-responsive\"\n [src]=\"fileUuid | secure: this._dataSource.fetchFile\"\n alt=\"image\"\n />\n </div>\n <a *ngIf=\"resultsIsPdf\" (click)=\"getUrl()\" style=\"cursor: pointer\"\n ><u>Open PDF</u></a\n > `,\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilePreviewComponent),\n multi: true\n }\n ]\n})\nexport class FilePreviewComponent implements ControlValueAccessor, OnInit {\n @Input() public source: any;\n public fileUuid = null;\n public pdfUrl: any;\n public resultsIsPdf = false;\n public _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor(private encounterService: EncounterViewerService) {}\n ngOnInit() {}\n // get accessor\n get value(): any {\n return this.fileUuid;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.fileUuid) {\n this.fileUuid = v;\n this.checkFileType();\n }\n }\n public checkFileType() {\n const re = /pdf/gi;\n if (this.fileUuid.search(re) !== -1) {\n this.resultsIsPdf = true;\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {\n // const files = event.srcElement.files;\n // const fileToLoad = files[0];\n // const fileReader = new FileReader();\n // fileReader.onload = (fileLoadedEvent) => {\n // const data = fileReader.result;\n // const fileType = data.substring('data:image/'.length, data.indexOf(';base64'));\n // const payload = {\n // data,\n // extension: fileType\n // };\n // };\n // fileReader.readAsDataURL(fileToLoad);\n }\n public getUrl() {\n this.dataSource.fetchFile(this.fileUuid, 'pdf').subscribe((file) => {\n window.open(file.changingThisBreaksApplicationSecurity, '_blank');\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n forwardRef,\n OnChanges,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nconst noop = () => {};\n\n@Component({\n selector: 'remote-answer',\n styles: [],\n template: `\n <div *ngIf=\"innerValue\">\n {{ innerValue }}\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RemoteAnswerComponent),\n multi: true\n }\n ]\n})\nexport class RemoteAnswerComponent implements ControlValueAccessor {\n @Input() public source: any;\n public innerValue = null;\n private _dataSource: DataSource;\n @Input()\n public get dataSource(): DataSource {\n return this._dataSource;\n }\n public set dataSource(v: DataSource) {\n this._dataSource = v;\n }\n // Placeholders for the callbacks which are later providesd\n // by the Control Value Accessor\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n constructor() {}\n // get accessor\n get value(): any {\n return this.innerValue;\n }\n\n // set accessor including call the onchange callback\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n }\n }\n // Current time string.\n\n public writeValue(v: any) {\n if (v !== this.innerValue) {\n if (this._dataSource) {\n this._dataSource.resolveSelectedValue(v).subscribe((ans) => {\n this.innerValue = ans.label;\n });\n } else {\n this.innerValue = v;\n }\n }\n }\n\n // From ControlValueAccessor interface\n public registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n // From ControlValueAccessor interface\n public registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public onBlur() {\n this.onTouchedCallback();\n }\n\n public onChange(event: any) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EncounterViewerComponent } from './encounter-view/encounter-viewer.component';\nimport { EncounterContainerComponent } from './encounter-container/encounter-container.component';\nimport { EncounterViewerService } from './encounter-viewer.service';\nimport { EncounterPdfViewerService } from './encounter-pdf-viewer.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { QuestionControlComponent } from './display-controls/question-control.component';\nimport { FilePreviewComponent } from './display-controls/file-preview.component';\nimport { RemoteAnswerComponent } from './display-controls/remote-answer.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { SharedModule } from '../shared.module';\n@NgModule({\n declarations: [\n EncounterViewerComponent,\n EncounterContainerComponent,\n QuestionControlComponent,\n FilePreviewComponent,\n RemoteAnswerComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n HttpClientModule,\n SharedModule\n ],\n providers: [EncounterViewerService, EncounterPdfViewerService],\n exports: [EncounterContainerComponent, HttpClientModule]\n})\nexport class EncounterViewerModule {}\n","import {\n Component,\n Input,\n forwardRef,\n OnInit,\n AfterViewInit\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DataSource } from '../../form-entry/question-models/interfaces/data-source';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'checkbox',\n template: `<div *ngFor=\"let option of options; let i = index\">\n <label class=\"form-control no-border\">\n <input\n type=\"checkbox\"\n id=\"i + 'id'\"\n (change)=\"selectOpt(option, $event)\"\n value=\"option.value\"\n [checked]=\"option.checked\"\n />\n {{ option.label }}\n </label>\n</div>\n`,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlComponent),\n multi: true\n }\n ],\n styles: [\n `\n .no-border {\n border: 0;\n box-shadow: none;\n }\n `\n ]\n})\nexport class CheckboxControlComponent implements OnInit, AfterViewInit {\n @Input() public options: Array<any>;\n @Input() public selected: Array<any>;\n public _value: Array<any> = [];\n\n public ngOnInit() {\n this.options = this.options.map((option) => {\n if (this.selected.indexOf(option.value) !== -1) {\n Object.assign(option, { checked: true });\n }\n return option;\n });\n }\n\n public ngAfterViewInit() {}\n\n public writeValue(value: any) {\n this.value = value;\n }\n\n public registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n get value(): any {\n if (this._value.length === 0) {\n return '';\n } else {\n return this._value || this._value[0];\n }\n }\n\n set value(v: any) {\n if (typeof v === 'undefined' || v === null || v === '') {\n v = [];\n } else if (typeof v === 'string') {\n v = [v];\n } else if (!Array.isArray(v)) {\n throw new TypeError('Value must be a string or an array.');\n }\n }\n\n public selectOpt(option, event) {\n if (event.target.checked) {\n this._value.push(option.value);\n } else {\n this.options.forEach((o) => {\n if (o.value === option.value) {\n this._value.splice(o, 1);\n }\n });\n }\n\n this.onChange(this.value);\n }\n\n private onChange = (change: any) => {};\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxControlComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [CheckboxControlComponent],\n exports: [CheckboxControlComponent],\n imports: [CommonModule, FormsModule]\n})\nexport class CheckboxModule {}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Component, OnInit, forwardRef } from '@angular/core';\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\n@Component({\n selector: 'ngx-time-picker',\n template: `<input\n type=\"time\"\n class=\"form-control\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onTimeSelect($event)\"\n/>\n`,\n styles: [``],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => NgxTimePickerComponent)\n }\n ]\n})\nexport class NgxTimePickerComponent implements OnInit, ControlValueAccessor {\n public value: string = moment().format('HH:mm:ss');\n public onChange: any = () => {};\n public onTouched: any = () => {};\n\n public ngOnInit() {}\n\n public writeValue(value: any): void {\n this.value = this.formatTimeValue(value);\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public onTimeSelect($event: string): void {\n const timeValue = this.formatTimeValue($event);\n this.value = timeValue;\n this.onChange(timeValue);\n }\n\n public formatTimeValue(timeInputString: string): string {\n /*\n Allows processing of data that comes in as date-time\n or just time i.e '1970-03-01 12:32:21' or '12:32:21'\n or '12:32' or '1970-01-01T13:03:00.000+0300'\n */\n let timeArray = [];\n let dateArray = [];\n let timeValue = '';\n\n if (typeof timeInputString === 'undefined' || timeInputString === null) {\n } else {\n timeArray = timeInputString.split(':');\n dateArray = timeInputString.split('-');\n }\n if (timeArray.length === 1 && moment(timeInputString).isValid()) {\n timeValue = moment(timeInputString).format('HH:mm:ss');\n } else if (timeArray.length > 1 && timeArray.length < 2) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length > 1) {\n timeValue = moment(timeInputString, moment.defaultFormat).format(\n 'HH:mm:ss'\n );\n } else if (timeArray.length >= 2 && dateArray.length <= 1) {\n timeValue = moment(timeInputString, 'HH:mm:ss').format('HH:mm:ss');\n } else {\n timeValue = moment().format('HH:mm:ss');\n }\n return timeValue;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTimePickerComponent } from './ngx-time-picker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n declarations: [NgxTimePickerComponent],\n exports: [NgxTimePickerComponent],\n providers: []\n})\nexport class NgxTimePickerModule {}\n","import { NgModule } from '@angular/core';\nimport { MatTabsModule, MatIconModule, MatCardModule } from '@angular/material';\n// import { NoopAnimationsModule} from '@angular/platform-browser/animations';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormBuilder } from '@angular/forms';\nimport { DebugModeService } from '../form-entry/services/debug-mode.service';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { FormErrorsService } from './services/form-errors.service';\nimport { FormControlService } from './form-factory/form-control.service';\nimport { ValidationFactory } from './form-factory/validation.factory';\nimport { FormRendererComponent } from './form-renderer/form-renderer.component';\nimport { ErrorRendererComponent } from './error-renderer/error-renderer.component';\nimport { HistoricalValueDirective } from './directives/historical-value-directive';\nimport { HistoricalFieldHelperService } from './helpers/historical-field-helper-service';\nimport { SelectModule } from '../components/select/select.module';\n// import { NgSelectModule } from '@ng-select/ng-select';\nimport { RemoteFileUploadModule } from '../components/file-upload/file-upload.module';\nimport { DateTimePickerModule } from '../components/date-time-picker/date-time-picker.module';\nimport { NgxDateTimePickerModule } from '../components/ngx-date-time-picker/ngx-date-time-picker.module';\nimport { AfeNgSelectComponent } from '../components/afe-ng-select.component';\nimport { HidersDisablersFactory } from './form-factory/hiders-disablers.factory';\nimport { AlertsFactory } from './form-factory/show-messages.factory';\nimport { ExpressionRunner } from './expression-runner/expression-runner';\nimport { JsExpressionHelper } from './helpers/js-expression-helper';\nimport { FormSchemaCompiler } from './services/form-schema-compiler.service';\nimport { FormFactory } from './form-factory/form.factory';\nimport { QuestionFactory } from './form-factory/question.factory';\nimport { ControlRelationsFactory } from './form-factory/control-relations.factory';\nimport { EncounterAdapter } from './value-adapters/encounter.adapter';\nimport { PersonAttribuAdapter } from './value-adapters/person-attribute.adapter';\nimport { OrderValueAdapter } from './value-adapters/order.adapter';\nimport { ObsAdapterHelper } from './value-adapters/obs-adapter-helper';\nimport { ObsValueAdapter } from './value-adapters/obs.adapter';\nimport { RemoteSelectModule } from '../components/remote-select/remote-select.module';\nimport { AppointmentsOverviewComponent } from '../components/appointments-overview/appointments-overview.component';\nimport { EncounterViewerModule } from '../encounter-viewer/encounter-viewer.module';\nimport { CheckboxModule } from '../components/check-box/checkbox.module';\nimport { SharedModule } from '../shared.module';\nimport { TimeAgoPipe } from 'time-ago-pipe';\nimport { NgxTimePickerModule } from '../components/ngx-time-picker/ngx-time-picker.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollapseModule,\n // NgSelectModule,\n SelectModule,\n DateTimePickerModule,\n RemoteSelectModule,\n // NoopAnimationsModule,\n RemoteFileUploadModule,\n EncounterViewerModule,\n CheckboxModule,\n MatIconModule,\n MatTabsModule,\n MatCardModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule,\n SharedModule\n ],\n declarations: [\n FormRendererComponent,\n AfeNgSelectComponent,\n AppointmentsOverviewComponent,\n HistoricalValueDirective,\n ErrorRendererComponent,\n TimeAgoPipe\n ],\n providers: [\n FormBuilder,\n FormControlService,\n FormErrorsService,\n ValidationFactory,\n HidersDisablersFactory,\n AlertsFactory,\n ExpressionRunner,\n JsExpressionHelper,\n HistoricalFieldHelperService,\n FormSchemaCompiler,\n FormFactory,\n QuestionFactory,\n ValidationFactory,\n ControlRelationsFactory,\n ObsAdapterHelper,\n ObsValueAdapter,\n EncounterAdapter,\n PersonAttribuAdapter,\n OrderValueAdapter,\n DebugModeService\n ],\n exports: [\n FormRendererComponent,\n AfeNgSelectComponent,\n ErrorRendererComponent,\n DateTimePickerModule,\n EncounterViewerModule,\n NgxDateTimePickerModule,\n NgxTimePickerModule\n ]\n})\nexport class FormEntryModule {}\n","export class Pair {\n key: string;\n\n value: any;\n\n constructor(key: string, value: any) {\n this.key = key;\n this.value = value;\n }\n}\n","export enum RenderingType {\n Form,\n Page,\n Section,\n Select,\n DropDown\n}\n","/*\n * Public API Surface of ngx-formentry\n */\nexport { FormEntryModule } from './form-entry/form-entry.module';\n// export { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { AfeFormControl } from './abstract-controls-extension/afe-form-control';\nexport { AfeFormGroup } from './abstract-controls-extension/afe-form-group';\nexport { AfeFormArray } from './abstract-controls-extension/afe-form-array';\nexport { AfeControlType } from './abstract-controls-extension/afe-control-type';\nexport { EncounterPdfViewerService } from './encounter-viewer/encounter-pdf-viewer.service';\nexport { ControlRelationsFactory } from './form-entry/form-factory/control-relations.factory';\nexport { FormControlService } from './form-entry/form-factory/form-control.service';\nexport { FormFactory } from './form-entry/form-factory/form.factory';\nexport { Form } from './form-entry/form-factory/form';\nexport { QuestionFactory } from './form-entry/form-factory/question.factory';\nexport { ValidationFactory } from './form-entry/form-factory/validation.factory';\nexport { FormSchemaCompiler } from './form-entry/services/form-schema-compiler.service';\nexport { HistoricalEncounterDataService } from './form-entry/services/historical-encounter-data.service';\nexport { FormErrorsService } from './form-entry/services/form-errors.service';\nexport { EncounterAdapter } from './form-entry/value-adapters/encounter.adapter';\nexport { PersonAttribuAdapter } from './form-entry/value-adapters/person-attribute.adapter';\nexport { OrderValueAdapter } from './form-entry/value-adapters/order.adapter';\nexport { ObsValueAdapter } from './form-entry/value-adapters/obs.adapter';\nexport { ObsAdapterHelper } from './form-entry/value-adapters/obs-adapter-helper';\nexport { ValueAdapter } from './form-entry/value-adapters/value.adapter';\nexport { DataSources } from './form-entry/data-sources/data-sources';\nexport { CheckBoxQuestion } from './form-entry/question-models/checkbox.model';\nexport { ConditionalValidationModel } from './form-entry/question-models/conditional-validation.model';\nexport { DateQuestion } from './form-entry/question-models/date-question';\nexport { DateValidationModel } from './form-entry/question-models/date-validation.model';\nexport { FileUploadQuestion } from './form-entry/question-models/file-upload-question';\nexport { QuestionGroup } from './form-entry/question-models/group-question';\nexport { JsExpressionValidationModel } from './form-entry/question-models/js-expression-validation.model';\nexport { MaxValidationModel } from './form-entry/question-models/max-validation.model';\nexport { MinValidationModel } from './form-entry/question-models/min-validation.model';\nexport { MultiSelectQuestion } from './form-entry/question-models/multi-select-question';\nexport { Pair } from './form-entry/question-models/pair.model';\nexport { QuestionBase } from './form-entry/question-models/question-base';\nexport { RenderingType } from './form-entry/question-models/rendering-type';\nexport { RepeatingQuestion } from './form-entry/question-models/repeating-question';\nexport { Option } from './form-entry/question-models/select-option';\nexport { SelectQuestion } from './form-entry/question-models/select-question';\nexport { TestOrderQuestion } from './form-entry/question-models/test-order-question';\nexport { TextAreaInputQuestion } from './form-entry/question-models/text-area-input-question';\nexport { TextInputQuestion } from './form-entry/question-models/text-input-question';\nexport { UiSelectQuestion } from './form-entry/question-models/ui-select-question';\nexport { ValidationModel } from './form-entry/question-models/validation.model';\nexport { BaseOptions } from './form-entry/question-models/interfaces/base-options';\nexport { RepeatingQuestionOptions } from './form-entry/question-models/interfaces/repeating-question-options';\nexport { GroupQuestionOptions } from './form-entry/question-models/interfaces/group-question-options';\nexport { NestedQuestion } from './form-entry/question-models/interfaces/nested-questions';\nexport { DateTimePickerModule } from './components/date-time-picker/date-time-picker.module';\nexport { NgxDateTimePickerModule } from './components/ngx-date-time-picker/ngx-date-time-picker.module';\nexport { JsExpressionHelper } from './form-entry/helpers/js-expression-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {AfeNgSelectComponent as ɵbg} from './components/afe-ng-select.component';\nexport {AppointmentsOverviewComponent as ɵbh} from './components/appointments-overview/appointments-overview.component';\nexport {CheckboxControlComponent as ɵz} from './components/check-box/checkbox.component';\nexport {CheckboxModule as ɵy} from './components/check-box/checkbox.module';\nexport {DatePickerComponent as ɵg} from './components/date-time-picker/date-picker/date-picker.component';\nexport {DateTimePickerComponent as ɵk} from './components/date-time-picker/date-time-picker.component';\nexport {ModalComponent as ɵi} from './components/date-time-picker/picker-modal/modal.component';\nexport {MomentPipe as ɵj} from './components/date-time-picker/pipes/moment.pipe';\nexport {TimePickerComponent as ɵh} from './components/date-time-picker/time-picker/time-picker.component';\nexport {FileUploadComponent as ɵq} from './components/file-upload/file-upload.component';\nexport {RemoteFileUploadModule as ɵn} from './components/file-upload/file-upload.module';\nexport {SecurePipe as ɵp} from './components/file-upload/secure.pipe';\nexport {MY_FORMATS as ɵba,NgxDateTimePickerComponent as ɵbb} from './components/ngx-date-time-picker/ngx-date-time-picker.component';\nexport {NgxTimePickerComponent as ɵbd} from './components/ngx-time-picker/ngx-time-picker.component';\nexport {NgxTimePickerModule as ɵbc} from './components/ngx-time-picker/ngx-time-picker.module';\nexport {RemoteSelectComponent as ɵm} from './components/remote-select/remote-select.component';\nexport {RemoteSelectModule as ɵl} from './components/remote-select/remote-select.module';\nexport {SelectDropdownComponent as ɵe} from './components/select/select-dropdown.component';\nexport {STYLE as ɵf} from './components/select/select-dropdown.component.style';\nexport {SELECT_VALUE_ACCESSOR as ɵb,SelectComponent as ɵc} from './components/select/select.component';\nexport {STYLE as ɵd} from './components/select/select.component.style';\nexport {SelectModule as ɵa} from './components/select/select.module';\nexport {FilePreviewComponent as ɵw} from './encounter-viewer/display-controls/file-preview.component';\nexport {QuestionControlComponent as ɵv} from './encounter-viewer/display-controls/question-control.component';\nexport {RemoteAnswerComponent as ɵx} from './encounter-viewer/display-controls/remote-answer.component';\nexport {EncounterContainerComponent as ɵu} from './encounter-viewer/encounter-container/encounter-container.component';\nexport {EncounterViewerComponent as ɵs} from './encounter-viewer/encounter-view/encounter-viewer.component';\nexport {EncounterViewerModule as ɵr} from './encounter-viewer/encounter-viewer.module';\nexport {EncounterViewerService as ɵt} from './encounter-viewer/encounter-viewer.service';\nexport {HistoricalValueDirective as ɵbi} from './form-entry/directives/historical-value-directive';\nexport {ErrorRendererComponent as ɵbk} from './form-entry/error-renderer/error-renderer.component';\nexport {ExpressionRunner as ɵbm} from './form-entry/expression-runner/expression-runner';\nexport {HidersDisablersFactory as ɵbl} from './form-entry/form-factory/hiders-disablers.factory';\nexport {AlertsFactory as ɵbo} from './form-entry/form-factory/show-messages.factory';\nexport {FormRendererComponent as ɵbe} from './form-entry/form-renderer/form-renderer.component';\nexport {DEFAULT_STYLES as ɵbf} from './form-entry/form-renderer/form-renderer.component.css';\nexport {HistoricalFieldHelperService as ɵbj} from './form-entry/helpers/historical-field-helper-service';\nexport {CheckboxOptions as ɵbp} from './form-entry/question-models/interfaces/checkbox-options';\nexport {DateQuestionOptions as ɵbq} from './form-entry/question-models/interfaces/date-question-options';\nexport {FileUploadQuestionOptions as ɵbr} from './form-entry/question-models/interfaces/file-upload-question-options';\nexport {MultiSelectQuestionOptions as ɵbt} from './form-entry/question-models/interfaces/multi-select-options';\nexport {SelectOption as ɵbu} from './form-entry/question-models/interfaces/select-option';\nexport {SelectQuestionOptions as ɵbs} from './form-entry/question-models/interfaces/select-question-options';\nexport {TestOrderQuestionOptions as ɵbv} from './form-entry/question-models/interfaces/test-order-question-options';\nexport {TextAreaQuestionOptions as ɵbx} from './form-entry/question-models/interfaces/text-area-question-options';\nexport {TextQuestionOptions as ɵbw} from './form-entry/question-models/interfaces/text-question-options';\nexport {UiSelectQuestionOptions as ɵby} from './form-entry/question-models/interfaces/ui-select-question-options';\nexport {DebugModeService as ɵbn} from './form-entry/services/debug-mode.service';\nexport {SharedModule as ɵo} from './shared.module';"],"names":["tslib_1.__extends","isEmpty","_.first","_.forEach","_.last","_.findIndex","_.filter","_.isArray","_.each","_.isUndefined","STYLE","tslib_1.__values","moment","_.chunk","Option","_.isEmpty","_.includes","_.sortBy","_.isNil","_.extend","_.has","_.find","_.intersection","first","_.isEqual","_.map","_.clone","_.uniqBy","pdfMake.vfs","_.isNumber","noop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAQA;IAME;QAFO,cAAS,GAAG,WAAW,CAAC;KAEf;IACT,uCAAY,GAAnB;;QAEE,OAAO,KAAK,CAAC;KACd;;gBARF,UAAU;;;IASX,uBAAC;CAAA;;;ICZD;QAKS,6BAAwB,GAAG,IAAI,OAAO,EAAU,CAAC;QACjD,wBAAmB,GAEtB,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;KAIlD;IAHQ,8CAAkB,GAAzB,UAA0B,KAAa;QACrC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3C;;IARa,yBAAO,GAAiD,IAAI,CAAC;IAC7D,qBAAG,GAAW,IAAI,CAAC;;gBAJlC,UAAU;;IAYX,wBAAC;CAAA;;ACjBD;;AAGA;IAKE,yBAAY,OAAwB,EAAE,SAA0B;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,qCAAqC,EAAE,CAAC;KAC9C;IAED,sBAAI,oCAAO;aAAX;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;SACtB;;;OAAA;IAED,sBAAI,sCAAS;aAAb;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;;;OAAA;IAED,sBAAI,4CAAe;aAAnB;YACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAC9B;;;OAAA;IAED,sDAA4B,GAA5B,UAA6B,QAAa;QACxC,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB,EAAE;YACtC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;YAEjC,IAAK,IAAI,CAAC,QAAgB,CAAC,qBAAqB,EAAE;gBAC/C,IAAI,CAAC,QAAgB,CAAC,qBAAqB,EAAE,CAAC;aAChD;YAED,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACvC,IAAK,IAAI,CAAC,QAAgB,CAAC,iBAAiB,EAAE;gBAC3C,IAAI,CAAC,QAAgB,CAAC,iBAAiB,EAAE,CAAC;aAC5C;YAED,IAAK,IAAI,CAAC,QAAgB,CAAC,mBAAmB,EAAE;gBAC7C,IAAI,CAAC,QAAgB,CAAC,mBAAmB,EAAE,CAAC;aAC9C;YAED,IAAK,IAAI,CAAC,QAAgB,CAAC,WAAW,EAAE;gBACrC,IAAI,CAAC,QAAgB,CAAC,WAAW,EAAE,CAAC;aACtC;YACD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAEO,+DAAqC,GAA7C;QAAA,iBAIC;QAHC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,KAAK;YAC3C,KAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CAAC;KACJ;IACH,sBAAC;CAAA,IAAA;;ACtDD;IAKE,0BACE,WAA4B,EAC5B,SAA+C;QAJzC,oBAAe,GAAQ,EAAE,CAAC;QAMhC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SACpC;KACF;IAED,sBAAI,0CAAY;aAAhB;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;OAAA;IAED,sBAAI,uCAAS;aAAb;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;;;OAAA;IAED,sBAAI,4CAAc;aAAlB;YACE,OAAO,IAAI,CAAC,eAAe,CAAC;SAC7B;;;OAAA;IAED,6CAAkB,GAAlB,UAAmB,SAA8C;QAC/D,IAAI,SAAS,YAAY,eAAe,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,SAAS,YAAY,KAAK,EAAE;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;aACH;SACF;KACF;IACH,uBAAC;CAAA,IAAA;;AC7CD;IAAA;KA4CC;IA3CQ,iCAAW,GAAlB,UAAmB,OAAgB;QACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;KACF;IAEM,iCAAW,GAAlB,UAAmB,OAAgB;QACjC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;KACxB;IAEM,wCAAkB,GAAzB,UAA0B,OAAgB,EAAE,KAAY;QACtD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAEM,2CAAqB,GAA5B,UAA6B,OAAgB;QAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;KACxB;IAEM,2CAAqB,GAA5B,UAA6B,OAAgB;QAC3C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK;YAC3B,KAAK,CAAC,0BAA0B,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;gBACzB,WAAW,GAAG,IAAI,CAAC;aACpB;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE,CAAC;;SAEnB;KACF;IAEM,uDAAiC,GAAxC,UAAyC,OAAgB;QACvD,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,GAAG;gBACjC,OAAO,CAAC,iBAAiB,EAAE,CAAC;aAC7B,CAAC,CAAC;SACJ;KACF;IACH,kBAAC;CAAA,IAAA;;AC5CD;IAAA;KA2CC;IA1CQ,+BAAS,GAAhB,UAAiB,OAAc;QAC7B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;KACvB;IAEM,+BAAS,GAAhB,UAAiB,OAAc;QAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;KACtB;IAEM,yCAAmB,GAA1B,UAA2B,OAAyB,EAAE,KAAY;QAChE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAEM,2CAAqB,GAA5B,UAA6B,OAAyB;QACpD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;KACpB;IAEM,2CAAqB,GAA5B,UAA6B,OAAyB;QACpD,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,OAAO;YAC7B,OAAO,CAAC,yBAAyB,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;gBAC1B,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;aACrC;iBAAM;gBACL,YAAY,GAAG,EAAE,CAAC;aACnB;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;;;;;KAK9B;IAEM,uDAAiC,GAAxC,UAAyC,OAAyB;QAChE,IAAI,OAAO,CAAC,WAAW,EAAE;YACvB,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,GAAG;gBACjC,OAAO,CAAC,WAAW,EAAE,CAAC;aACvB,CAAC,CAAC;SACJ;KACF;IACH,kBAAC;CAAA,IAAA;;AC3CD;IAAA;KAmCC;IAlCQ,8CAAqB,GAA5B,UAA6B,OAAmB,EAAE,QAAkB;QAClE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClC;IAEM,iDAAwB,GAA/B,UAAgC,OAAmB;QACjD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,OAAO,EAAE,CAAC;KACnB;IAEM,iDAAwB,GAA/B,UAAgC,OAAmB;QACjD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,KAAK;YAC9B,KAAK,CAAC,6BAA6B,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE;gBAC5B,SAAS,GAAG,IAAI,CAAC;aAClB;SACF,CAAC,CAAC;;QAIH,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,CAAC,MAAM,EAAE,CAAC;SAClB;KACF;IAEM,0DAAiC,GAAxC,UAAyC,OAAmB;QAC1D,IAAI,OAAO,CAAC,mBAAmB,EAAE;YAC/B,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,GAAG;gBACjC,OAAO,CAAC,mBAAmB,EAAE,CAAC;aAC/B,CAAC,CAAC;SACJ;KACF;IACH,qBAAC;CAAA,IAAA;;ACRD;IASE,kBACE,QAAsB,EACtB,OAAsD,EACtD,IAAW,EACX,UAAmB;QAEnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;KAC1E;IAED,sBAAW,8BAAQ;aAAnB;YACE,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;IAED,sBAAW,6BAAO;aAAlB;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;SACtB;;;OAAA;IAED,sBAAW,0BAAI;aAAf;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;IAED,sBAAW,0BAAI;aAAf;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;IACD,2BAAQ,GAAR,UAAS,KAAa,KAAI;IAE1B,kCAAe,GAAf,eAAoB;IACpB,kCAAe,GAAf,eAAoB;IACtB,eAAC;CAAA,IAAA;AAED;IAA8BA,4BAAQ;IACpC,kBACE,QAAsB,EACtB,OAAsD,EACtD,aAA4D,EAC5D,IAAW,EACX,UAAmB;eAEnB,kBAAM,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC;KAC3C;IACH,eAAC;CAAA,CAV6B,QAAQ,GAUrC;AAED;IAA+BA,6BAAQ;IAErC,mBACE,QAAsB,EACtB,OAAsD,EACtD,aAA4D,EAC5D,IAAW,EACX,UAAmB;QALrB,YAOE,kBAAM,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAE3C;QADC,KAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;KACrB;IAED,sBAAW,+BAAQ;aAAnB;YACE,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IAEM,4BAAQ,GAAf,UAAgB,GAAW,EAAE,IAAc;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAC3B;IACH,gBAAC;CAAA,CApB8B,QAAQ,GAoBtC;AAED;IAA+BA,6BAAQ;IAMrC,mBACE,QAAsB,EACtB,OAAsD,EACtD,aAA4D,EACpD,WAAyB,EACjC,IAAW,EACX,UAAmB;QANrB,YAQE,kBAAM,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAG3C;QAPS,iBAAW,GAAX,WAAW,CAAc;QAT3B,4BAAsB,GAAU,EAAE,CAAC;QAczC,KAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,KAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;;KAClC;IAED,sBAAW,+BAAQ;aAAnB;YACE,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IAEM,mCAAe,GAAtB;QACE,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAM,CAAC,GAAc,IAAI,CAAC,eAAe,CACvC,IAAI,CAAC,QAA6B,EAClC,IAAI,EACJ,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;SACV;QACD,OAAO,IAAI,CAAC;KACb;IAEM,4BAAQ,GAAf,UAAgB,KAAa;QAC3B,IAAM,YAAY,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACjE,IAAI,YAAY,EAAE;YAChB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACnC;SACF;KACF;IAED,+CAA2B,GAA3B,UAA4B,IAAS;QACnC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;IAED,gDAA4B,GAA5B,UAA6B,IAAe;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3D,IAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ;KACF;IACH,gBAAC;CAAA,CAvD8B,QAAQ,GAuDtC;;;IC1JC,yBAAY,WAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC;KAC5C;IACH,sBAAC;CAAA;;;ICPgDA,+CAAe;IAG9D,qCAAY,WAAgB;QAA5B,YACE,kBAAM,WAAW,CAAC,SAEnB;QADC,KAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC;;KAC5D;IACH,kCAAC;CAAA,CAPgD,eAAe;;;ICAhBA,8CAAe;IAI7D,oCAAY,WAAgB;QAA5B,YACE,kBAAM,WAAW,CAAC,SAGnB;QAFC,KAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC;QAC3D,KAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,wBAAwB,CAAC;;KACtE;IACH,iCAAC;CAAA,CAT+C,eAAe;;;ICW7D;KAAgB;IAEhB,gDAAc,GAAd,UAAe,QAAmB;QAChC,IAAM,aAAa,GAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5D,KAAK,IAAM,GAAG,IAAI,aAAa,EAAE;YAC/B,IAAI,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACrC,IAAM,QAAQ,GAAa,aAAa,CAAC,GAAG,CAAC,CAAC;gBAE9C,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC5C;SACF;KACF;IAED,yDAAuB,GAAvB,UAAwB,IAAe;QACrC,IAAM,IAAI,GAAS,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAM,QAAQ,GAAc,IAAI,CAAC,QAAQ,CAAC;;QAG1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;QAG1B,IAAM,iBAAiB,GAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChE,IAAM,iBAAiB,GAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE5D,KAAK,IAAM,GAAG,IAAI,iBAAiB,EAAE;YACnC,IAAI,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzC,IAAM,KAAK,GAAa,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAE/C,IAAI,KAAK,YAAY,QAAQ,EAAE;oBAC7B,IAAM,YAAY,GAAkB,KAAkB,CAAC,QAAQ,CAAC;oBAEhE,IAAI,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;qBAC7C;iBACF;aACF;SACF;;QAGD,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;;QAG1C,KAAK,IAAM,EAAE,IAAI,iBAAiB,EAAE;YAClC,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;gBACxC,IAAM,KAAK,GAAa,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAM,OAAO,GAAkC,KAAK,CAAC,OAErC,CAAC;gBACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,OAAO,CAAC,WAAW,EAAE,CAAC;aACvB;SACF;KACF;IAED,gEAA8B,GAA9B,UAA+B,IAAe;QAC5C,IAAM,IAAI,GAAS,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAM,QAAQ,GAAc,IAAI,CAAC,QAAQ,CAAC;;QAG1C,IAAM,iBAAiB,GAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChE,IAAM,iBAAiB,GAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;QAG5D,KAAK,IAAM,GAAG,IAAI,iBAAiB,EAAE;YACnC,IAAI,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzC,IAAM,MAAM,GAAa,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAEhD,IAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CACxC,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAC3B,CAAC;gBAEF,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;4CAEzC,EAAE;wBACX,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;4BACxC,IAAM,MAAM,GAAa,iBAAiB,CAAC,EAAE,CAAC,CAAC;4BAC/C,IAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;4BACrC,IAAI,OAAK,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gCAC/C,IAAM,KAAK,GAAoB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACvD,QAAQ,EACR,cAAc,EACd,EAAE,CACH,CAAC;gCACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oCACpB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAc,CAAC;oCACjC,IAAM,aAAW,GAAG,MAAM,CAAC,OAEX,CAAC;oCAEjB,IACE,aAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wCACvD,CAAC,CACH,EAAE;wCACA,aAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qCACtD;oCAEA,MAAM,CAAC,OAES,CAAC,sBAAsB,CAAC,UAAC,KAAK;wCAC7C,IAAK,aAAmB,CAAC,qBAAqB,EAAE;4CAC7C,aAAmB,CAAC,qBAAqB,EAAE,CAAC;yCAC9C;wCAED,aAAW,CAAC,sBAAsB,EAAE,CAAC;wCACrC,IAAK,aAAmB,CAAC,iBAAiB,EAAE;4CACzC,aAAmB,CAAC,iBAAiB,EAAE,CAAC;yCAC1C;wCAED,IAAK,aAAmB,CAAC,WAAW,EAAE;4CACnC,aAAmB,CAAC,WAAW,EAAE,CAAC;yCACpC;wCAED,IAAK,aAAmB,CAAC,mBAAmB,EAAE;4CAC3C,aAAmB,CAAC,mBAAmB,EAAE,CAAC;yCAC5C;qCACF,CAAC,CAAC;iCACJ;6BACF;yBACF;qBACF;;;oBA9CD,KAAK,IAAM,EAAE,IAAI,iBAAiB;gCAAvB,EAAE;qBA8CZ;iBACF;aACF;SACF;KACF;IAED,wDAAsB,GAAtB,UACE,EAAE,EACF,IAAe;QAEf,IAAM,SAAS,GAAyC,IAAI,KAAK,EAE9D,CAAC;QAEJ,IAAM,aAAa,GAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAM,QAAQ,GAAa,aAAa,CAAC,CAAC,CAAC,CAAC;YAE5C,IAAM,WAAW,GAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAEtD,KAAK,IAAM,GAAG,IAAI,WAAW,EAAE;gBAC7B,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACnC,IACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CACnE,EAAE;wBACA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;qBAC1C;iBACF;aACF;SACF;QACD,OAAO,SAAS,CAAC;KAClB;IAED,+CAAa,GAAb,UAAc,IAAe,EAAE,aAAkB;QAC/C,IAAM,QAAQ,GAAa,IAAI,CAAC,QAAQ,CAAC;QAEzC,KAAK,IAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAM,KAAK,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAEtC,IAAI,KAAK,YAAY,SAAS,EAAE;oBAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;iBAC1C;qBAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;oBACpC,IAAM,YAAY,GAAkB,KAAkB,CAAC,QAAQ,CAAC;oBAEhE,IAAI,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;qBACzC;iBACF;qBAAM,IAAI,KAAK,YAAY,SAAS,EAAE;oBACrC,IAAM,YAAY,GAAkB,KAAmB,CAAC,QAAQ,CAAC;oBAEjE,IAAI,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;qBACzC;iBACF;aACF;SACF;QAED,OAAO,aAAa,CAAC;KACtB;IAED,8CAAY,GAAZ,UAAa,aAAkB,EAAE,QAAkB;QACjD,IAAM,YAAY,GAAiB,QAAQ,CAAC,QAAQ,CAAC;QAErD,IAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;QAE5B,KAAK,IAAM,GAAG,IAAI,aAAa,EAAE;YAC/B,IAAI,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE;gBACnD,IAAM,IAAI,GAAa,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAM,QAAQ,GAAiB,IAAI,CAAC,QAAQ,CAAC;gBAE7C,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBAC5C,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,OAAwC,EAC7C,QAAQ,CAAC,OAAwC,CAClD,CAAC;iBACH;;gBAGD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBACzC,IAAM,QAAQ,GAAQ,QAAQ,CAAC,QAAQ,CAAC;oBAExC,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE;wBAC3C,IAAI,QAAQ,CAAC,mBAAmB,KAAK,EAAE,EAAE;4BACvC,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,OAAwC,EAC7C,QAAQ,CAAC,OAAwC,CAClD,CAAC;yBACH;qBACF;iBACF;aACF;SACF;KACF;IAED,6CAAW,GAAX,UAAY,EAAU,EAAE,YAA0B,EAAE,QAAmB;QACrE,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACjE,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,OAAO;gBACtC,IAAI,OAAO,YAAY,2BAA2B,EAAE;oBAClD,IAAM,KAAK,GAAgC,OAAsC,CAAC;oBAElF,IAAM,mBAAmB,GAAW,KAAK,CAAC,mBAAmB,CAAC;oBAC9D,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;wBACjE,WAAW,GAAG,IAAI,CAAC;qBACpB;iBACF;qBAAM,IACL,OAAO,YAAY,0BAA0B;oBAC7C,OAAO,CAAC,IAAI,KAAK,qBAAqB;oBACtC,OAAO,CAAC,mBAAmB,KAAK,EAClC,EAAE;oBACA,WAAW,GAAG,IAAI,CAAC;iBACpB;aACF,CAAC,CAAC;SACJ;;QAGD,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzC,IAAM,IAAI,GAAW,YAAY,CAAC,IAAc,CAAC;gBAEjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC9C,WAAW,GAAG,IAAI,CAAC;iBACpB;aACF;iBAAM,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChD,IAAM,OAAO,GAAQ,YAAY,CAAC,IAAI,CAAC;gBAEvC,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;oBACxB,WAAW,GAAG,IAAI,CAAC;iBACpB;aACF;YAED,IAAI,YAAY,CAAC,KAAK,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAChE,WAAW,GAAG,IAAI,CAAC;aACpB;YAED,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAC5C,IAAM,OAAO,GAAW,YAAY,CAAC,OAAiB,CAAC;gBAEvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;oBACpD,WAAW,GAAG,IAAI,CAAC;iBACpB;aACF;SACF;;QAGD,IACE,CAAC,WAAW;YACZ,YAAY,CAAC,mBAAmB;YAChC,YAAY,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;YAC3C,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CACpD,EAAE;YACA,WAAW,GAAG,IAAI,CAAC;SACpB;QAED,OAAO,WAAW,CAAC;KACpB;IAED,sDAAoB,GAApB,UACE,OAAsC,EACtC,OAAsC;;;;;;;;;;;;;;;;QAkBtC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;;KAEtD;;gBAtTF,UAAU;;;IAuTX,8BAAC;CAAA;;ACvTD,IAAM,MAAM,GAAG,OAAO,CAAC;AACvB;IAAA;KAqMC;IApMC,sCAAW,GAAX,UACE,UAAkB,EAClB,OAAqD,EACrD,MAAW,EACX,gBAAqB,EACrB,IAAW;QAEX,IAAM,MAAM,GAAG,IAAI,CAAC;QACpB,IAAM,QAAQ,GAAa;YACzB,GAAG,EAAE;;gBAEH,IAAI,KAAK,GAAQ,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,IAAI,EAAE;oBAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;iBACrC;gBACD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;;gBAE1B,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;gBACjC,MAAM,CAAC,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACvC,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBAEpD,IAAI,IAAI,EAAE;;oBAER,MAAM,CAAC,mBAAmB,CACxB,IAAI,CAAC,oBAAoB,CAAC,WAAW,EACrC,KAAK,CACN,CAAC;iBACH;gBAED,IAAI,SAAS,GAAG,EAAE,CAAC;gBACnB,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;oBACnB,SAAS,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;oBACnE,OAAO;wBACL,OAAO,KAAK,EAAE;8BACV,OAAO,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI;8BAC9B,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;iBACvC;;gBAGD,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;oBACvC,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC;iBAC5C;gBAED,IAAI,mBAAmB,GACrB,qCAAqC;oBACrC,SAAS;oBACT,KAAK;oBACL,UAAU;oBACV,IAAI,CAAC;gBACP,IAAI,YAAY,GACd,2BAA2B;qBAC1B,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,CAAC;oBACrC,IAAI,CAAC;gBAEP,IAAI;oBACF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;wBAChD,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;wBAC3D,OAAO,KAAK,CAAC;qBACd;;oBAED,OAAO,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,CAAC;iBACjD;gBAAC,OAAO,CAAC,EAAE;;;;;;;;;;;;oBAcV,OAAO,KAAK,CAAC;iBACd;;aAEF;SACF,CAAC;QACF,OAAO,QAAQ,CAAC;KACjB;IAEO,wDAA6B,GAArC,UACE,OAAqD,EACrD,KAAU;QAFZ,iBAqDC;QAjDC,IACE,OAAO;YACP,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,gBAAgB,CAAC,SAC3B,EAAE;YACA,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;gBAClD,IAAI,QAAQ,CAAC,SAAS,EAAE;oBACtB,IAAM,OAAO,GAAG,QAAQ,CAAC,SAAgB,CAAC;oBAC1C,IAAM,gBAAgB,GAAG,QAAQ,CAAC,SAA4B,CAAC;oBAC/D,IAAI,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAC7D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;qBAChD;yBAAM;wBACL,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;4BACjB,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;kCACtD,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;kCAC9B,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;qBAChC;iBACF;aACF,CAAC,CAAC;SACJ;QAED,IACE,OAAO;YACP,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,gBAAgB,CAAC,cAAc;YACvC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,GAAG,CACnD,EAAE;YACA,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,IAAI;gBACnD,IAAI,IAAI,YAAY,SAAS,EAAE;oBAC7B,IAAM,SAAS,GAAc,IAAiB,CAAC;oBAC/C,IAAM,MAAI,GAAG,OAAO,CAAC,IAAI,CAAC;oBAE1B,IAAM,yBAAuB,GAA4B,IAAI,uBAAuB,EAAE,CAAC;oBACvF,IAAI,qBAAmB,GAAyC,EAAE,CAAC;;oBAEnE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;wBAC/B,qBAAmB,GAAG,qBAAmB,CAAC,MAAM,CAC9C,yBAAuB,CAAC,sBAAsB,CAAC,MAAI,EAAE,KAAK,CAAC,CAC5D,CAAC;qBACH,CAAC,CAAC;oBAEH,KAAI,CAAC,qBAAqB,CACxB,OAAwC,EACxC,qBAAmB,EACnB,KAAK,CACN,CAAC;iBACH;aACF,CAAC,CAAC;SACJ;KACF;IAEO,gDAAqB,GAA7B,UACE,OAAsC,EACtC,mBAAyD,EACzD,KAAU;QAHZ,iBAWC;QANC,IAAM,IAAI,GAAkB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QAE1E,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG;YACf,IAAM,MAAM,GAAQ,KAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACpE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ;IAEO,8CAAmB,GAA3B,UACE,KAA2C;QAE3C,IAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,UAAC,OAAO;YACpB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACzB;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;KACb;IAEO,2CAAgB,GAAxB,UACE,GAAW,EACX,KAA2C;QAE3C,IAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,UAAC,OAAO;YACpB,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE;gBACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC5B;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACf;IAEO,2CAAgB,GAAxB,UAAyB,GAAQ,EAAE,KAAW;QAC5C,KAAK,IAAM,GAAG,IAAI,GAAG,EAAE;YACrB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACvB;SACF;KACF;IAEO,8CAAmB,GAA3B,UAA4B,GAAQ,EAAE,KAAW;QAC/C,KAAK,IAAM,GAAG,IAAI,GAAG,EAAE;YACrB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACvB;SACF;KACF;IACH,uBAAC;CAAA;;;ICrLSA,kCAAW;IAuBnB,wBACE,SAAe,EACf,SAAuE,EACvE,cAA6D;QAH/D,YAKE,kBAAM,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,SAY5C;QA3BD,YAAM,GAAG,KAAK,CAAC;QAOP,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAC7C,oBAAc,GAAmB,IAAI,cAAc,EAAE,CAAC;QACtD,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAOnD,KAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,KAAI,CAAC,CAAC;QACpD,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,KAAK;YAChC,IAAI,KAAI,CAAC,cAAc,KAAK,KAAK,EAAE;gBACjC,KAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBACpC,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC7B;SACF,CAAC,CAAC;;KACJ;IAED,sBAAI,4CAAgB;aAApB;YACE,OAAO,IAAI,CAAC,iBAAiB,CAAC;SAC/B;;;OAAA;IAED,gCAAO,GAAP,UAAQ,KAAmD;QACzD,iBAAM,OAAO,YAAC,KAAK,CAAC,CAAC;QACrB,iBAAM,QAAQ,YAAC,EAAE,CAAC,CAAC;KACpB;IAED,6BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,6BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,oCAAW,GAAX,UAAY,QAAe;QACzB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACrD;IAED,wCAAe,GAAf,UAAgB,aAAuB;QACrC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;KACjC;IAED,8CAAqB,GAArB;QACE,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACrB;KACF;IAED,uCAAc,GAAd;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,0CAAiB,GAAjB;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,uCAAc,GAAd,UAAe,WAAqB;QAClC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KAC9D;IAED,0CAAiB,GAAjB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,4CAAmB,GAAnB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,mCAAU,GAAV,UAAW,QAAe;QACxB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtD;IAED,wCAAe,GAAf;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,oCAAW,GAAX;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,+CAAsB,GAAtB,UAAuB,IAAS;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;KAClC;IAED,gDAAuB,GAAvB,UAAwB,KAAU;QAChC,IACE,IAAI,CAAC,oBAAoB;YACzB,OAAO,IAAI,CAAC,oBAAoB,KAAK,UACvC,EAAE;YACA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAClC;KACF;IAED,iCAAQ,GAAR,UAAS,KAAU;QACjB,iBAAM,QAAQ,YAAC,KAAK,CAAC,CAAC;KACvB;IACH,qBAAC;CAAA,CA1HS,WAAW;;;ICFXA,gCAAS;IAkBjB,sBACE,QAA4C,EAC5C,SAAuB,EACvB,cAAiC;QAHnC,YAKE,kBAAM,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,SAK3C;QAdO,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAC7C,oBAAc,GAAmB,IAAI,cAAc,EAAE,CAAC;QACtD,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAQnD,KAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,KAAI,CAAC,CAAC;QACpD,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;KAClB;IAED,sBAAI,0CAAgB;aAApB;YACE,OAAO,IAAI,CAAC,iBAAiB,CAAC;SAC/B;;;OAAA;IAED,2BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,2BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,8BAAO,GAAP,UAAQ,KAAmD;QACzD,iBAAM,OAAO,YAAC,KAAK,CAAC,CAAC;QACrB,iBAAM,QAAQ,YAAC,EAAE,CAAC,CAAC;KACpB;IAED,kCAAW,GAAX,UAAY,QAAe;QACzB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACrD;IAED,qCAAc,GAAd;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,wCAAiB,GAAjB;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,qCAAc,GAAd,UAAe,WAAqB;QAClC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KAC9D;IAED,wCAAiB,GAAjB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,0CAAmB,GAAnB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,iCAAU,GAAV,UAAW,QAAe;QACxB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtD;IAED,sCAAe,GAAf;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,kCAAW,GAAX;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IACD,+BAAQ,GAAR,UAAS,KAAU;QACjB,iBAAM,QAAQ,YAAC,KAAK,CAAC,CAAC;KACvB;IACH,mBAAC;CAAA,CArFS,SAAS;;;ICATA,gCAAS;IAoBjB,sBACE,QAA2B,EAC3B,SAAuB,EACvB,cAAiC;QAHnC,YAKE,kBAAM,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,SAY3C;QArBO,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAC7C,iBAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;QAC7C,oBAAc,GAAmB,IAAI,cAAc,EAAE,CAAC;QAQ5D,KAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,KAAI,CAAC,CAAC;QACpD,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAC,KAAK;YAChC,IAAI,KAAI,CAAC,cAAc,KAAK,KAAK,EAAE;gBACjC,KAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBACpC,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC7B;SACF,CAAC,CAAC;;KACJ;IAED,sBAAI,8BAAI;aAAR;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;aACD,UAAS,GAAW;YAClB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SAClB;;;OAHA;IAKD,sBAAI,0CAAgB;aAApB;YACE,OAAO,IAAI,CAAC,iBAAiB,CAAC;SAC/B;;;OAAA;IAED,2BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,2BAAI,GAAJ;QACE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,8BAAO,GAAP,UAAQ,KAAmD;QACzD,iBAAM,OAAO,YAAC,KAAK,CAAC,CAAC;QACrB,iBAAM,QAAQ,YAAC,EAAE,CAAC,CAAC;KACpB;IAED,kCAAW,GAAX,UAAY,QAAe;QACzB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACrD;IAED,qCAAc,GAAd;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,wCAAiB,GAAjB;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,qCAAc,GAAd,UAAe,WAAqB;QAClC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KAC9D;IAED,wCAAiB,GAAjB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,0CAAmB,GAAnB;QACE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpD;IAED,iCAAU,GAAV,UAAW,QAAe;QACxB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtD;IAED,sCAAe,GAAf;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,kCAAW,GAAX;QACE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,6CAAsB,GAAtB,UAAuB,IAAS;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;KAClC;IAED,8CAAuB,GAAvB,UAAwB,KAAU;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;QACD,IACE,IAAI,CAAC,oBAAoB;YACzB,OAAO,IAAI,CAAC,oBAAoB,KAAK,UACvC,EAAE;YACA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAClC;KACF;IAED,+BAAQ,GAAR,UAAS,KAAU;QACjB,iBAAM,QAAQ,YAAC,KAAK,CAAC,CAAC;KACvB;IACH,mBAAC;CAAA,CAtHS,SAAS;;IC1BP,cAKX;AALD,WAAY,cAAc;IACxB,uEAAc,CAAA;IACd,mEAAY,CAAA;IACZ,mEAAY,CAAA;IACZ,mDAAI,CAAA;CACL,EALW,cAAc,KAAd,cAAc,QAKzB;;;ICqCC,sBAAY,OAAoB;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;KACxD;IAED,yCAAkB,GAAlB,UAAmB,CAAU;QAC3B,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;KAChC;IACD,kDAA2B,GAA3B,UAA4B,CAAW;QACrC,IAAI,CAAC,uBAAuB,GAAG,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;KAC3D;IACH,mBAAC;CAAA;;AC7DD;IACE;KAAgB;IAEhB,+CAAQ,GAAR,UAAS,KAAiC;;QAExC,OAAO,UAAC,OAAuB;YAC7B,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAM,mBAAmB,GAAW,KAAK,CAAC,mBAAmB,CAAC;YAC9D,IAAM,wBAAwB,GAAQ,KAAK,CAAC,wBAAwB,CAAC;YACrE,IAAI,UAAmB,CAAC;YAExB,IACE,OAAO;gBACP,OAAO,CAAC,gBAAgB;gBACxB,OAAO,CAAC,gBAAgB,CAAC,SAC3B,EAAE;gBACA,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;oBAClD,IAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAgB,CAAC;oBACnD,IAAI,gBAAgB,CAAC,IAAI,KAAK,mBAAmB,EAAE;wBACjD,IAAI,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;4BAC7D,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;yBAC1C;6BAAM;4BACL,aAAa;gCACX,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;sCACtD,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;sCAC9B,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;yBAChC;qBACF;iBACF,CAAC,CAAC;aACJ;YAED,IACE,OAAO,wBAAwB,KAAK,QAAQ;gBAC5C,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CACvD,EAAE;gBACA,UAAU,GAAG,IAAI,CAAC;aACnB;YAED,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE;gBACxB,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;aAC7D;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,mCAAC;CAAA,IAAA;;AC9CD;IACE;KAAgB;IAEhB,+CAAQ,GAAR,UAAS,KAAiC;QACxC,OAAO,UAAC,OAAuB;YAC7B,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAM,mBAAmB,GAAW,KAAK,CAAC,mBAAmB,CAAC;YAC9D,IAAM,wBAAwB,GAAQ,KAAK,CAAC,wBAAwB,CAAC;YACrE,IAAI,gBAAgB,GAAQ,IAAI,CAAC;YAEjC,IAAI,KAAK,EAAE;gBACT,IACE,OAAO;oBACP,OAAO,CAAC,gBAAgB;oBACxB,OAAO,CAAC,gBAAgB,CAAC,SAC3B,EAAE;oBACA,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;wBAClD,IAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAgB,CAAC;wBACnD,IAAI,gBAAgB,CAAC,IAAI,KAAK,mBAAmB,EAAE;4BACjD,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;gCACzC,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC;6BACxC;iCAAM;gCACL,aAAa;oCACX,gBAAgB,CAAC,KAAK;wCACtB,OAAO,gBAAgB,CAAC,KAAK,KAAK,QAAQ;wCAC1C,gBAAgB,CAAC,KAAK,CAAC,KAAK;0CACxB,gBAAgB,CAAC,KAAK,CAAC,KAAK;0CAC5B,gBAAgB,CAAC,KAAK,CAAC;6BAC9B;yBACF;wBAED,IAAI,CAAC,aAAa,EAAE;4BAClB,gBAAgB,GAAG,KAAK,CAAC;yBAC1B;6BAAM,IACL,OAAO,wBAAwB,KAAK,QAAQ;4BAC5C,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CACvD,EAAE;4BACA,gBAAgB,GAAG,KAAK,CAAC;yBAC1B;qBACF,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,CAAC,gBAAgB,EAAE;gBACrB,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;aAC7D;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,mCAAC;CAAA,IAAA;;ACpDD;IAAA;KAYC;IAXC,oCAAQ,GAAR,UAAS,OAAuB;QAC9B,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAM,KAAK,GAAQ,OAAO,CAAC,KAAK,CAAC;QACjC,IAAMC,UAAO,GACX,KAAK,IAAI,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAErE,OAAOA,UAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;KAC5C;IACH,wBAAC;CAAA,IAAA;;ACZD;IACE;KAAgB;IAEhB,gCAAQ,GAAR,UAAS,OAAuB;QAC9B,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE5B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;YAE/B,IAAM,IAAI,GAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEtE,OAAO,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACrC;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;IACH,oBAAC;CAAA,IAAA;;ACnBD;IAAA;KAgBC;IAfC,+BAAQ,GAAR,UAAS,GAAW;QAClB,OAAO,UAAC,OAAuB;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/C,IAAM,CAAC,GAAW,OAAO,CAAC,KAAK,CAAC;gBAChC,OAAO,CAAC,IAAI,GAAG;sBACX,IAAI;sBACJ,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;aACrD;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,mBAAC;CAAA,IAAA;;AChBD;IAAA;KAiBC;IAhBC,+BAAQ,GAAR,UAAS,GAAW;QAClB,OAAO,UAAC,OAAuB;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,OAAO,IAAI,CAAC;aACb;YAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/C,IAAM,CAAC,GAAW,OAAO,CAAC,KAAK,CAAC;gBAChC,OAAO,CAAC,IAAI,GAAG;sBACX,IAAI;sBACJ,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;aACrD;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,mBAAC;CAAA,IAAA;;AChBD;IAAA;KAsBC;IArBC,mCAAQ,GAAR,UAAS,GAAS;QAChB,OAAO,UAAC,OAAuB;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,OAAO,IAAI,CAAC;aACb;YAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/C,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAChD,IAAM,OAAO,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAE9C,OAAO,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE;0BACpC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;0BACvD,IAAI,CAAC;iBACV;qBAAM;oBACL,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;iBAC3C;aACF;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,uBAAC;CAAA,IAAA;;ACtBD;IAAA;KAsBC;IArBC,mCAAQ,GAAR,UAAS,GAAS;QAChB,OAAO,UAAC,OAAuB;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,OAAO,IAAI,CAAC;aACb;YAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/C,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAChD,IAAM,OAAO,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAE9C,OAAO,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE;0BACpC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;0BACvD,IAAI,CAAC;iBACV;qBAAM;oBACL,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;iBAC3C;aACF;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,uBAAC;CAAA,IAAA;;ACtBD;IACE;KAAgB;IAEhB,iDAAQ,GAAR,UAAS,OAAuB;QAC9B,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAM,GAAG,GAAS,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACxC,IAAM,CAAC,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE;sBAC9B,EAAE,qBAAqB,EAAE,IAAI,EAAE;sBAC/B,IAAI,CAAC;aACV;SACF;QAED,OAAO,IAAI,CAAC;KACb;IACH,qCAAC;CAAA,IAAA;;;ICzBD;KA+PC;IA9PC,oCAAO,GAAP,UAAQ,MAAM,EAAE,MAAM;QACpB,IAAI,CAAC,CAAC;QACN,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC7D;QACD,OAAO,MAAM,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KAChD;IAED,oCAAO,GAAP,UAAQ,MAAc,EAAE,MAAc;QACpC,IAAI,MAAM,CAAC;QACX,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACzD;QACD,OAAO,MAAM,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;KACrD;IAED,gDAAmB,GAAnB,UAAoB,YAAY,EAAE,MAAM,EAAE,MAAM;QAC9C,IAAI,GAAG,CAAC;QAER,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC/D;QACD,IAAM,gBAAgB,GAAGC,KAAO,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,gBAAgB,CAAC;QACrB,IAAI,gBAAgB,EAAE;YACpB,IAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBAClD,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,gBAAgB,CAAC,GAAG,CAAC,GAAA,CAAC;iBACnC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAA,CAAC,CAAC;YACjB,IAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpD,IAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACxC,IAAM,mBAAiB,GAAG,EAAE,CAAC;YAC7B,IAAI,GAAG,GAAG,YAAY,EAAE;gBACtB,mBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACtC;iBAAM;gBACLC,OAAS,CAAC,eAAe,EAAE,UAAC,KAAK;oBAC/B,IAAI,KAAK,IAAI,GAAG,EAAE;wBAChB,mBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/B;iBACF,CAAC,CAAC;aACJ;YACD,IAAM,oBAAkB,GAAGC,IAAM,CAAC,mBAAiB,CAAC,CAAC;YACrD,IAAM,cAAc,GAAGC,SAAW,CAAC,eAAe,EAAE,UAAC,CAAC;gBACpD,OAAO,CAAC,KAAK,oBAAkB,CAAC;aACjC,CAAC,CAAC;YACH,IAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9C,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACpC,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,gBAAgB,GAAG,GAAG,GAAG,gBAAgB,CAAC;aAC3C;YAED,IACE,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,IACvB,EAAE;gBACA,gBAAgB,GAAG,IAAI,CAAC;aACzB;SACF;QAED,OAAO,GAAG,IAAI,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAAC;KAC1D;IACD,sDAAyB,GAAzB,UAA0B,kBAAkB,EAAE,MAAM,EAAE,MAAM;QAC1D,IAAI,UAAU,CAAC;QACf,IAAI,gBAAgB,CAAC;QACrB,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACxC;QACD,IAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,IAAM,iBAAiB,GAAG,GAAG,CAAC;QAC9B,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,iBAAiB,EAAE;YAC5D,gBAAgB,GAAG,CAAC,CAAC,CAAC;SACvB;aAAM;YACL,UAAU,GAAGC,MAAQ,CAAC,kBAAkB,EAAE,UAAC,SAAS;gBAClD,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;aAC9D,CAAC,CAAC;SACJ;QAED,IAAM,gBAAgB,GAAGJ,KAAO,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,gBAAgB,EAAE;YACpB,IAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBAClD,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,gBAAgB,CAAC,GAAG,CAAC,GAAA,CAAC;iBACnC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAA,CAAC,CAAC;YACjB,IAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpD,IAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACxC,IAAM,mBAAiB,GAAG,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,YAAY,EAAE;gBACzB,mBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACtC;iBAAM;gBACLC,OAAS,CAAC,eAAe,EAAE,UAAC,KAAK;oBAC/B,IAAI,KAAK,IAAI,MAAM,EAAE;wBACnB,mBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/B;iBACF,CAAC,CAAC;aACJ;YACD,IAAM,oBAAkB,GAAGC,IAAM,CAAC,mBAAiB,CAAC,CAAC;YACrD,IAAM,cAAc,GAAGC,SAAW,CAAC,eAAe,EAAE,UAAC,CAAC;gBACpD,OAAO,CAAC,KAAK,oBAAkB,CAAC;aACjC,CAAC,CAAC;YACH,IAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9C,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACpC,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,gBAAgB,GAAG,GAAG,GAAG,gBAAgB,CAAC;aAC3C;YACD,IACE,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,IACvB,EAAE;gBACA,gBAAgB,GAAG,IAAI,CAAC;aACzB;SACF;QAED,OAAO,MAAM,IAAI,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;KACnD;IAED,mDAAsB,GAAtB,UAAuB,eAAe,EAAE,MAAM,EAAE,MAAM;QACpD,IAAM,gBAAgB,GAAGH,KAAO,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,gBAAgB,CAAC;QACrB,IAAI,gBAAgB,EAAE;YACpB,IAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;iBAClD,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,gBAAgB,CAAC,GAAG,CAAC,GAAA,CAAC;iBACnC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,GAAA,CAAC,CAAC;YACjB,IAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpD,IAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACxC,IAAM,mBAAiB,GAAG,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,YAAY,EAAE;gBACzB,mBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACtC;iBAAM;gBACLC,OAAS,CAAC,eAAe,EAAE,UAAC,KAAK;oBAC/B,IAAI,KAAK,IAAI,MAAM,EAAE;wBACnB,mBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/B;iBACF,CAAC,CAAC;aACJ;YACD,IAAM,oBAAkB,GAAGC,IAAM,CAAC,mBAAiB,CAAC,CAAC;YACrD,IAAM,cAAc,GAAGC,SAAW,CAAC,eAAe,EAAE,UAAC,CAAC;gBACpD,OAAO,CAAC,KAAK,oBAAkB,CAAC;aACjC,CAAC,CAAC;YACH,IAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9C,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACpC,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,gBAAgB,GAAG,GAAG,GAAG,gBAAgB,CAAC;aAC3C;YAED,IACE,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,GAAG;gBACxB,gBAAgB,KAAK,IACvB,EAAE;gBACA,gBAAgB,GAAG,IAAI,CAAC;aACzB;SACF;QAED,OAAO,MAAM,IAAI,MAAM,IAAI,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAAC;KACvE;IAED,oCAAO,GAAP,UAAQ,GAAG;QACT,IACE,GAAG,KAAK,SAAS;YACjB,GAAG,KAAK,IAAI;YACZ,GAAG,KAAK,EAAE;YACV,GAAG,KAAK,MAAM;YACd,GAAG,KAAK,WACV,EAAE;YACA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,0CAAa,GAAb,UAAc,KAAK,EAAE,OAAO;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC;aACb;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7B,QAAQ,GAAG,KAAK,CAAC;iBAClB;aACF;YAED,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACtC;KACF;IACD,wDAA2B,GAA3B,UAA4B,GAAG,EAAE,KAAK;QACpC,IAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;KACf;IACD,uCAAU,GAAV,UAAW,KAAK,EAAE,MAAM,EAAE,MAAM;QAC9B,MAAM,GAAG,MAAM,IAAI,YAAY,CAAC;QAChC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;QAE3B,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAC5B,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;gBACzC,MAAM,IAAI,KAAK,CACb,oCAAoC,GAAG,qBAAqB,CAC7D,CAAC;aACH;SACF;QAED,OAAO,KAAK,CAAC;;KAEd;IAED,6CAAgB,GAAhB,UAAiB,KAAK,EAAE,OAAO;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7B,QAAQ,GAAG,IAAI,CAAC;iBACjB;aACF;YACD,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACtC;KACF;IAED,sBAAI,+CAAe;aAAnB;YACE,IAAM,MAAM,GAAG,IAAI,CAAC;YACpB,OAAO;gBACL,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,yBAAyB,EAAE,MAAM,CAAC,yBAAyB;gBAC3D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;aAChE,CAAC;SACH;;;OAAA;IACH,yBAAC;CAAA;;AChQD;IAGE;KAAgB;IAFF,yCAA6B,GAAG,KAAK,CAAC;IAGtD,kBAAC;CAAA,IAAA;;ACED;IACE;KAAgB;IAEhB,wCAAQ,GAAR,UAAS,KAAkC,EAAE,IAAU;;QAErD,OAAO,UAAC,OAAuB;YAC7B,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE;gBAC9C,OAAO,IAAI,CAAC;aACb;YAED,IAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC;YAC7C,IAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAM,gBAAgB,GAAG,EAAE,CAAC;YAE5B,IAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YAC/C,IAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC,WAAW,CACjD,UAAU,EACV,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,IAAI,CACL,CAAC;YAEF,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO;oBACL,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;iBAClE,CAAC;aACH;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IACH,4BAAC;CAAA,IAAA;;ACtCD;IAAA;KAmBC;IAlBwB,2BAAkB,GAAG,yBAAyB,CAAC;IAE/C,yBAAgB,GAAG,2BAA2B,CAAC;IAE/C,oCAA2B,GAChD,6BAA6B,CAAC;IAET,uBAAc,GAAG,kCAAkC,CAAC;IAEpD,uBAAc,GAAG,kCAAkC,CAAC;IAEpD,qBAAY,GAAG,8BAA8B,CAAC;IAE9C,qBAAY,GAAG,8BAA8B,CAAC;IAE9C,gBAAO,GAAG,2BAA2B,CAAC;IAEtC,gBAAO,GAAG,2BAA2B,CAAC;IAC/D,eAAC;CAAA,IAAA;;;ICMC;KAAgB;IAEhB,yCAAa,GAAb,UAAc,QAAsB,EAAE,IAAU;QAAhD,iBA8DC;QA7DC,IAAM,IAAI,GAAe,EAAE,CAAC;QAE5B,IAAI,QAAQ,CAAC,UAAU,EAAE;YACvBF,OAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAC,SAA0B;gBACxD,QAAQ,SAAS,CAAC,IAAI;oBACpB,KAAK,MAAM;wBACT,IAAI,CAAC,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,CAAC;wBAC9B,IAAM,gBAAgB,GAAkC,SAAU;6BAC/D,gBAAgB,CAAC;wBAEpB,IAAI,CAAC,gBAAgB,EAAE;4BACrB,IAAI,CAAC,IAAI,CAAC,KAAI,CAAC,8BAA8B,CAAC,CAAC;yBAChD;wBACD,MAAM;oBACR,KAAK,eAAe;wBAClB,IAAI,CAAC,IAAI,CACP,KAAI,CAAC,qBAAqB,CAAC,QAAQ,CACJ,SAAS,EACtC,IAAI,CACL,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,KAAK;wBACR,IAAI,CAAC,IAAI,CACP,KAAI,CAAC,oBAAoB,CAAsB,SAAU,CAAC,GAAG,CAAC,CAC/D,CAAC;wBACF,MAAM;oBACR,KAAK,KAAK;wBACR,IAAI,CAAC,IAAI,CACP,KAAI,CAAC,oBAAoB,CAAsB,SAAU,CAAC,GAAG,CAAC,CAC/D,CAAC;wBACF,MAAM;oBACR,KAAK,qBAAqB;wBACxB,IAAI,CAAC,IAAI,CACP,KAAI,CAAC,4BAA4B,CAAC,QAAQ,CACZ,SAAS,CACtC,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,qBAAqB;wBACxB,IAAI,CAAC,IAAI,CACP,KAAI,CAAC,4BAA4B,CAAC,QAAQ,CACZ,SAAS,CACtC,CACF,CAAC;wBACF,MAAM;iBACT;aACF,CAAC,CAAC;SACJ;QAED,IACE,QAAQ,CAAC,QAAQ;YACjB,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YACrC,QAAQ,CAAC,QAAQ,KAAK,MACxB,EAAE;YACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACnC,AAEA;QAED,OAAO,IAAI,CAAC;KACb;IAED,sBAAI,2DAA4B;aAAhC;YACE,OAAO,IAAI,4BAA4B,EAAE,CAAC;SAC3C;;;OAAA;IAED,sBAAI,2DAA4B;aAAhC;YACE,OAAO,IAAI,4BAA4B,EAAE,CAAC;SAC3C;;;OAAA;IAED,sBAAI,gDAAiB;aAArB;YACE,OAAO,IAAI,iBAAiB,EAAE,CAAC,QAAQ,CAAC;SACzC;;;OAAA;IAED,sBAAI,4CAAa;aAAjB;YACE,OAAO,IAAI,aAAa,EAAE,CAAC,QAAQ,CAAC;SACrC;;;OAAA;IAED,sBAAI,6DAA8B;aAAlC;YACE,OAAO,IAAI,8BAA8B,EAAE,CAAC,QAAQ,CAAC;SACtD;;;OAAA;IAED,sBAAI,+CAAgB;aAApB;YACE,OAAO,IAAI,gBAAgB,EAAE,CAAC,QAAQ,CAAC;SACxC;;;OAAA;IAED,sBAAI,+CAAgB;aAApB;YACE,OAAO,IAAI,gBAAgB,EAAE,CAAC,QAAQ,CAAC;SACxC;;;OAAA;IAED,sBAAI,iDAAkB;aAAtB;YACE,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;;;OAAA;IAED,sBAAI,iDAAkB;aAAtB;YACE,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;;;OAAA;IAEM,gDAAoB,GAA3B,UAA4B,GAAW;QACrC,OAAO,IAAI,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACzC;IAEM,gDAAoB,GAA3B,UAA4B,GAAW;QACrC,OAAO,IAAI,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACzC;IAED,sBAAI,oDAAqB;aAAzB;YACE,OAAO,IAAI,qBAAqB,EAAE,CAAC;SACpC;;;OAAA;IAEM,kCAAM,GAAb,UAAc,MAAW,EAAE,QAAsB;QAC/C,IAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,KAAK,IAAM,QAAQ,IAAI,MAAM,EAAE;YAC7B,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;gBACnC,QAAQ,QAAQ;oBACd,KAAK,UAAU;wBACb,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;wBAC3C,MAAM;oBACR,KAAK,MAAM;wBACT,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wBACzC,MAAM;oBACR,KAAK,uBAAuB;wBAC1B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;wBACpD,MAAM;oBACR,KAAK,WAAW;wBACd,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,cAAc,CAAC,OAAO,CAC7B,aAAa,EACb,MAAM,CAAC,SAAS,CAAC,cAAc,CAChC,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,WAAW;wBACd,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,cAAc,CAAC,OAAO,CAC7B,aAAa,EACb,MAAM,CAAC,SAAS,CAAC,cAAc,CAChC,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,SAAS;wBACZ,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,YAAY,CAAC,OAAO,CAC3B,WAAW,EACX,MAAM,CAAC,OAAO,CAAC,YAAY,CAC5B,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,SAAS;wBACZ,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,YAAY,CAAC,OAAO,CAC3B,WAAW,EACX,MAAM,CAAC,OAAO,CAAC,YAAY,CAC5B,CACF,CAAC;wBACF,MAAM;oBACR,KAAK,KAAK;wBACR,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAC5D,CAAC;wBACF,MAAM;oBACR,KAAK,KAAK;wBACR,QAAQ,CAAC,IAAI,CACX,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAC5D,CAAC;wBACF,MAAM;oBACR,KAAK,eAAe;wBAClB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC/C,MAAM;oBACR,KAAK,sBAAsB;wBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC;wBACtD,MAAM;oBACR,KAAK,sBAAsB;wBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC;wBACtD,MAAM;iBACT;aACF;SACF;QAED,OAAO,QAAQ,CAAC;KACjB;;gBA3LF,UAAU;;;IA4LX,wBAAC;CAAA;;;IC7LC,gCACU,gBAAkC,EAClC,gBAAoC,EACpC,iBAAmC;QAFnC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,qBAAgB,GAAhB,gBAAgB,CAAoB;QACpC,sBAAiB,GAAjB,iBAAiB,CAAkB;KACzC;IAEJ,wDAAuB,GAAvB,UACE,QAAsB,EACtB,OAAqD,EACrD,IAAW;QAEX,IAAM,QAAQ,GAAa,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC1D,QAAQ,CAAC,OAAiB,EAC1B,OAAO,EACP,IAAI,CAAC,gBAAgB,CAAC,eAAe,EACrC,EAAE,EACF,IAAI,CACL,CAAC;QACF,IAAM,QAAQ,GAAa;YACzB,SAAS,EAAE,KAAK;YAChB,qBAAqB,EAAE,QAAQ,CAAC,OAAiB;YACjD,6BAA6B,EAAE;gBAC7B,IAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC9B,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;aAC7B;SACF,CAAC;QACF,OAAO,QAAQ,CAAC;KACjB;IAED,qDAAoB,GAApB,UACE,QAAsB,EACtB,OAAqD,EACrD,IAAW;QAEX,IAAM,IAAI,GAAQ,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ;cACpB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;cACnC,QAAQ,CAAC,IAAe,CAAC;;QAIhC,IAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAE3D,IAAM,QAAQ,GAAa,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC1D,KAAK,EACL,OAAO,EACP,IAAI,CAAC,gBAAgB,CAAC,eAAe,EACrC,EAAE,EACF,IAAI,CACL,CAAC;QAEF,IAAM,KAAK,GAAU;YACnB,MAAM,EAAE,KAAK;YACb,kBAAkB,EAAE,KAAK;YACzB,0BAA0B,EAAE;;;;gBAI1B,IAAI,YAAY,KAAK,IAAI,EAAE;oBACzB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;iBACtB;qBAAM;oBACL,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;iBAC/B;aACF;SACF,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IAED,0DAAyB,GAAzB,UAA0B,IAAS;QACjC,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,EAAE;YAC/B,IAAM,QAAQ,GAAW,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;YAC5D,IAAM,GAAG,GAAG,kBAAkB,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;YACpE,OAAO,GAAG,CAAC;SACZ;QAED,OAAO,EAAE,CAAC;KACX;;gBA/EF,UAAU;;;gBAdT,gBAAgB;gBAST,kBAAkB;gBAGlB,gBAAgB;;IAkFzB,6BAAC;CAAA;;;ICjFC,uBACU,gBAAkC,EAClC,gBAAoC;QADpC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,qBAAgB,GAAhB,gBAAgB,CAAoB;KAC1C;IACJ,gDAAwB,GAAxB,UACE,QAAsB,EACtB,OAAqD,EACrD,IAAW;QAEX,IAAM,QAAQ,GAAa,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC1D,QAAQ,CAAC,KAAK,CAAC,mBAAmB,EAClC,OAAO,EACP,IAAI,CAAC,gBAAgB,CAAC,eAAe,EACrC,EAAE,EACF,IAAI,CACL,CAAC;QACF,IAAM,SAAS,GAAU;YACvB,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC,mBAAmB;YACvD,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO;YACpC,yBAAyB,EAAE;gBACzB,IAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC9B,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC;aAC1B;SACF,CAAC;QACF,OAAO,SAAS,CAAC;KAClB;;gBA5BF,UAAU;;;gBAZT,gBAAgB;gBAST,kBAAkB;;IAgC3B,oBAAC;CAAA;;;IChBC,4BACE,iBAAoC,EACpC,sBAA8C,EACtC,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAPtC,aAAQ,GAAG,EAAE,CAAC;QASZ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;KACtD;IAED,iDAAoB,GAApB,UACE,aAA4C,EAC5C,aAA2B,EAC3B,gBAAyB,EACzB,IAAW;QAEX,IAAI,aAAa,YAAY,YAAY,EAAE;YACzC,IAAI,aAAa,CAAC,WAAW,KAAK,cAAc,CAAC,YAAY,EAAE;gBAC7D,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;aACnE;YACD,IAAI,aAAa,CAAC,WAAW,KAAK,cAAc,CAAC,YAAY,EAAE;gBAC7D,OAAO,IAAI,CAAC,sBAAsB,CAChC,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,IAAI,CACL,CAAC;aACH;YAED,IAAI,aAAa,CAAC,WAAW,KAAK,cAAc,CAAC,cAAc,EAAE;gBAC/D,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;aACrE;SACF;QACD,OAAO,IAAI,CAAC;KACb;IAED,mDAAsB,GAAtB,UACE,QAAsB,EACtB,gBAAyB,EACzB,aAA4B,EAC5B,IAAW;QAEX,IAAM,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,aAAa,YAAY,YAAY,EAAE;YACzC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SACnD;QAED,IAAM,OAAO,GAAG,QAAyB,CAAC;QAE1C,IAAI,gBAAgB,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/D,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;SAC1E;QAED,OAAO,SAAS,CAAC;KAClB;IAED,4DAA+B,GAA/B,UACE,SAAyB,EACzB,aAA2B,EAC3B,IAAW;QAHb,iBAkBC;QAbC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,SAAS,CAAC,OAAO,CAAC,UAAC,OAAO;gBACxB,IAAM,SAAS,GAAG,KAAI,CAAC,oBAAoB,CACzC,OAAO,EACP,aAAa,EACb,IAAI,EACJ,IAAI,CACL,CAAC;gBACF,IAAI,SAAS,KAAK,IAAI,EAAE;oBACtB,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iBAClD;aACF,CAAC,CAAC;SACJ;KACF;IAED,8CAAiB,GAAjB,UACE,QAAsB,EACtB,aAA4B,EAC5B,IAAW;QAEX,IAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxE,IAAI,SAAuB,CAAC;QAC5B,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACjD;aAAM;YACL,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;SAClC;QACD,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,aAAa,YAAY,YAAY,EAAE;YACzC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SACnD;QAED,OAAO,SAAS,CAAC;KAClB;IAED,gDAAmB,GAAnB,UACE,QAAsB,EACtB,aAA4B,EAC5B,IAAW;QAEX,IAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;QAC1C,IAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAExE,IAAM,OAAO,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CACjB,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,IAAI,CACpD,CAAC;QAEF,IAAI,aAAa,YAAY,YAAY,EAAE;YACzC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,OAAO,OAAO,CAAC;KAChB;IAEO,uCAAU,GAAlB,UACE,QAAsB,EACtB,OAAqD,EACrD,IAAW;QAEX,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE,EAAE;YAC3C,IAAM,OAAK,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CACvD,QAAQ,EACR,OAAO,EACP,IAAI,CACL,CAAC;YACF,OAAO,CAAC,UAAU,CAAC,OAAK,CAAC,CAAC;SAC3B;KACF;IACO,gDAAmB,GAA3B,UACE,QAAsB,EACtB,OAAqD,EACrD,IAAW;QAEX,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,EAAE;YACzC,IAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAC5D,QAAQ,EACR,OAAO,EACP,IAAI,CACL,CAAC;YACF,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC5B;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,EAAE,EAAE;YAC/C,IAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CACjE,QAAQ,EACR,OAAO,EACP,IAAI,CACL,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SACjC;KACF;IAEO,2CAAc,GAAtB,UACE,QAAsB,EACtB,OAAuB,EACvB,UAAgB;QAEhB,IAAI,QAAQ,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB,KAAK,EAAE,EAAE;YACvE,IAAM,MAAM,GAAuB,IAAI,kBAAkB,EAAE,CAAC;YAC5D,IAAM,MAAM,GAAqB,IAAI,gBAAgB,EAAE,CAAC;YACxD,IAAM,QAAQ,GAAa,MAAM,CAAC,WAAW,CAC3C,QAAQ,CAAC,mBAAmB,EAC5B,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,UAAU,CACX,CAAC;;YAEF,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACvC;KACF;;gBAzLF,UAAU;;;gBAVF,iBAAiB;gBACjB,sBAAsB;gBACtB,aAAa;;IAkMtB,yBAAC;CAAA;;IClNY,cAAc,GAAG,8+GAgKzB;;;IC3JH;QADQ,iBAAY,GAAQ,EAAE,CAAC;KACf;IAEhB,sBAAI,oCAAW;aAAf;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;OAAA;IAED,wCAAkB,GAAlB,UAAmB,GAAW,EAAE,UAAe,EAAE,MAAc;QAAd,uBAAA,EAAA,cAAc;QAC7D,IAAI,MAAM,EAAE;;YAEV,KAAK,IAAM,CAAC,IAAI,UAAU,EAAE;gBAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aAClD;SACF;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;SACxD;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;KACrC;IAED,qCAAe,GAAf,UAAgB,GAAW;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KAC/B;;gBAzBF,UAAU;;;IA0BX,kBAAC;CAAA;;ACVD;;;;AAMA;;;;IA6cE,+BACU,iBAAoC,EACpC,WAAwB,EACxB,iBAAoC,EAClB,QAAa;QAH/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,gBAAW,GAAX,WAAW,CAAa;QACxB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAClB,aAAQ,GAAR,QAAQ,CAAK;QAhBlC,oBAAe,GAA4B,EAAE,CAAC;QAK9C,gBAAW,GAAG,KAAK,CAAC;QAazB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IAEM,wCAAQ,GAAf;QAAA,iBAsBC;QArBC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;YAC3D,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE;gBACjC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;aACtB;SACF;QACD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,MAAM,EAAE;YAC5D,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAC,KAAK;gBACzD,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE;YAC/D,IAAI,CAAC,WAAW,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,QAA0B,CAAC,UAAU,CAAC;SACtE;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC9C;KACF;IAEM,iDAAiB,GAAxB,UAAyB,KAA4B;QACnD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC;IAEM,iDAAiB,GAAxB;QACE,IACE,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,eACvC,EAAE;;YAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAC9B,CAAC;;;;;;;;;;;;;;;;;;;;;;;YAuBF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBAC3D,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;aAC1E;SACF;KACF;IAEM,+CAAe,GAAtB;QACE,IACE,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,MACvC,EAAE;YACA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAC9B,CAAC;;;SAGH;KACF;IAED,4CAAY,GAAZ,UAAa,IAAc;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE;YAC7C,IAAI,qBAAmB,GAAG,KAAK,CAAC;YAChC,IAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC;gBAClE,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,SAAS,YAAY,SAAS,EAAE;oBAClC,qBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CACzD,UAAC,CAAC,IAAK,OAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAA,CAC5C,CAAC;iBACH;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,qBAAmB,CAAC;aAC/D,CAAC,CAAC;YACH,OAAO,CAAC,wBAAwB,CAAC;SAClC;QACD,OAAO,IAAI,CAAC;KACb;IAEM,wCAAQ,GAAf,UAAgB,SAAS;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAEM,+CAAe,GAAtB;QACE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SAC7B;KACF;IAEM,iDAAiB,GAAxB;QACE,OAAO,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;KAC7B;IAEM,gDAAgB,GAAvB;QACE,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KACtE;IAEM,2CAAW,GAAlB;QACE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SAC7B;KACF;IACM,2CAAW,GAAlB,UAAmB,MAAM;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IACM,8CAAc,GAArB;QACE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;SACpE;KACF;IACM,yCAAS,GAAhB;QACE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC9D;IAEM,sCAAM,GAAb;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC;IAEM,+CAAe,GAAtB,UAAuB,KAAa;QAApC,iBAuBC;QAtBC,IAAM,GAAG,GAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;QAG9C,IAAM,YAAY,GAA0B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEnB,UAAU,CAAC;;YAET,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,UAAC,OAAO;gBAC3C,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;gBAE5B,UAAU,CAAC;oBACT,IAAM,OAAO,GAAQ,KAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBAC9D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;wBACrC,OAAO,CAAC,KAAK,EAAE,CAAC;wBAChB,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;qBACjE;iBACF,EAAE,GAAG,CAAC,CAAC;aACT,CAAC,CAAC;SACJ,EAAE,GAAG,CAAC,CAAC;KACT;IAEM,6CAAa,GAApB,UAAqB,IAAc;;QAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAEM,sCAAM,GAAb,UAAc,KAAK;;;KAGlB;IAEM,iDAAiB,GAAxB,UAAyB,MAAM;QAC7B,IAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;YAC/B,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;SAC1B;aAAM;YACL,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SAC3B;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC/B;IAEO,yCAAS,GAAjB,UAAkB,IAAc;QAC9B,IAAM,MAAM,GAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7D;QAED,OAAO,EAAE,CAAC;KACX;;gBAxpBF,SAAS,SAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,mscAwbX;oBACC,MAAM,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC;iBAChD;;;gBAtcQ,iBAAiB;gBAHjB,WAAW;gBAKX,iBAAiB;gDAydrB,MAAM,SAAC,QAAQ;;;kCAnBjB,KAAK;uBACL,KAAK;8BACL,KAAK;;IAyNR,4BAAC;CAAA;;;ICjqBC,cACS,MAAW,EACX,WAAwB,EACxB,eAAgC;QAFhC,WAAM,GAAN,MAAM,CAAK;QACX,gBAAW,GAAX,WAAW,CAAa;QACxB,oBAAe,GAAf,eAAe,CAAiB;QAPlC,wBAAmB,GAAQ,EAAE,CAAC;QAC9B,mBAAc,GAAQ,EAAE,CAAC;QAExB,gBAAW,GAAG,KAAK,CAAC;QAM1B,IAAI,CAAC,qBAAqB,GAAG,IAAI,WAAW,EAAE,CAAC;KAChD;IAED,sBAAI,sCAAoB;aAAxB;YACE,OAAO,IAAI,CAAC,qBAAqB,CAAC;SACnC;;;OAAA;IAED,+BAAgB,GAAhB,UAAiB,IAAe,EAAE,IAAI,EAAE,KAAsB;QAA9D,iBAmCC;QAlCC,IAAM,QAAQ,GAAa,IAAI,CAAC,QAAQ,CAAC;QAEzC,KAAK,IAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAM,KAAK,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAEtC,IAAI,KAAK,YAAY,SAAS,EAAE;oBAC9B,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;wBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClB,OAAO,KAAK,CAAC;qBACd;oBAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC3C;qBAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;oBACpC,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;wBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClB,OAAO,KAAK,CAAC;qBACd;iBACF;qBAAM,IAAI,KAAK,YAAY,SAAS,EAAE;oBACrC,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;wBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClB,OAAO,KAAK,CAAC;qBACd;oBAED,IAAM,MAAM,GAAc,KAAkB,CAAC;oBAE7C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,UAAU;wBACjC,KAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;qBAChD,CAAC,CAAC;iBACJ;aACF;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,qCAAsB,GAAtB,UACE,UAAkB,EAClB,YAAqB;QAErB,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;SACnE;aAAM;YACL,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;SAC9D;QACD,OAAO,KAAK,CAAC;KACd;IAED,uCAAwB,GAAxB,UACE,QAAa,EACb,YAAoB,EACpB,KAAsB;QAHxB,iBAoCC;QA/BC,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;;YAE1C,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,wBAAwB,CAC3B,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EACvB,YAAY,EACZ,KAAK,CACN,CAAC;aACH;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;YAE1C,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI;gBAChC,KAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;aAC1D,CAAC,CAAC;SACJ;QAED,IAAI,QAAQ,YAAY,QAAQ,EAAE;YAChC,IAAM,YAAY,GAAiB,QAAQ,CAAC,QAAQ,CAAC;YAErD,IACE,YAAY,CAAC,MAAM;gBACnB,YAAY,CAAC,MAAM,CAAC,IAAI;gBACxB,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,YAC/B,EAAE;gBACA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtB;SACF;KACF;IAEO,oCAAqB,GAA7B,UACE,QAAkB,EAClB,UAAkB,EAClB,OAAwB;QAH1B,iBA4BC;QAvBC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,UAAU,EAAE;YACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxB;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;;YAE1C,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,qBAAqB,CACxB,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EACvB,UAAU,EACV,OAAO,CACR,CAAC;aACH;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;YAE1C,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI;gBAChC,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;aACvD,CAAC,CAAC;SACJ;KACF;IAED,sBAAI,uBAAK;aAAT;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SACpC;;;OAAA;IAED,sBAAI,4BAAU;aAId;YACE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;aAND,UAAe,IAAa;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;;;OAAA;IAMD,kCAAmB,GAAnB,UAAoB,IAAe,EAAE,mBAAyB;QAA9D,iBA0CC;QAzCC,IAAM,QAAQ,GAAa,IAAI,CAAC,QAAQ,CAAC;QAEzC,KAAK,IAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAM,KAAK,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAEtC,IAAI,KAAK,YAAY,SAAS,EAAE;oBAC9B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;iBACtD;qBAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;oBACpC,IAAM,YAAY,GAAkB,KAAkB,CAAC,QAAQ,CAAC;oBAEhE,IAAI,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,IAAM,CAAC,GAAkC,KAAK,CAAC,OAE/B,CAAC;wBAEjB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;4BAC3B,IAAI,mBAAmB,EAAE;gCACvB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;6BACjC;4BAED,CAAC,CAAC,aAAa,EAAE,CAAC;yBACnB;qBACF;iBACF;qBAAM,IAAI,KAAK,YAAY,SAAS,EAAE;oBACrC,IAAM,SAAS,GAAc,KAAkB,CAAC;oBAEhD,IACE,SAAS;wBACT,SAAS,CAAC,QAAQ;wBAClB,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAC9B,EAAE;wBACAA,OAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAC,SAAc;4BAC3C,KAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;yBAC1D,CAAC,CAAC;qBACJ;iBACF;aACF;SACF;QAED,OAAO,mBAAmB,CAAC;KAC5B;IAED,sDAAuC,GAAvC;QACE,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D;IAED,yCAA0B,GAA1B;QACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACjD;IAEO,0CAA2B,GAAnC,UAAoC,QAAkB;QAAtD,iBAsBC;QArBC,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,IAAK,QAAQ,CAAC,OAAe,CAAC,WAAW,EAAE;gBACxC,QAAQ,CAAC,OAAe,CAAC,WAAW,EAAE,CAAC;aACzC;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;;YAE1C,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;YAE1C,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI;gBAChC,KAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;aACxC,CAAC,CAAC;SACJ;KACF;IACO,uDAAwC,GAAhD,UAAiD,QAAkB;QAAnE,iBA0BC;QAzBC,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,IAAK,QAAQ,CAAC,OAAe,CAAC,mBAAmB,EAAE;gBAChD,QAAQ,CAAC,OAAe,CAAC,mBAAmB,EAAE,CAAC;aACjD;YAED,IAAK,QAAQ,CAAC,OAAe,CAAC,iBAAiB,EAAE;gBAC9C,QAAQ,CAAC,OAAe,CAAC,iBAAiB,EAAE,CAAC;aAC/C;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;;YAE1C,KAAK,IAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,wCAAwC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aACxE;SACF;QAED,IAAI,QAAQ,YAAY,SAAS,EAAE;YACjC,IAAM,WAAW,GAAG,QAAqB,CAAC;YAE1C,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI;gBAChC,KAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,CAAC;aACrD,CAAC,CAAC;SACJ;KACF;IACH,WAAC;CAAA;;;ICrOC,gCACU,iBAAoC,EACpC,iBAAoC;QADpC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,sBAAiB,GAAjB,iBAAiB,CAAmB;KAC1C;IAEJ,yCAAQ,GAAR,eAAa;IAEb,2CAAU,GAAV;QACE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;KACjD;IAED,sBAAI,8CAAU;aAAd;YACE,IAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,EAAE,CACH,CAAC;YACF,OAAO,eAAe,CAAC;SACxB;;;OAAA;IAED,gDAAe,GAAf,UAAgB,IAAc;QAC5B,IAAM,MAAM,GAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7D;QAED,OAAO,EAAE,CAAC;KACX;IAED,mDAAkB,GAAlB,UAAmB,SAAmB;QAAtC,iBAaC;QAZC,IAAM,KAAK,GAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAC7D,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACzD,CAAC;QAEFA,OAAS,CAAC,KAAK,EAAE,UAAC,IAAc;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,MAAM,EAAE;gBAC1C,IAAM,SAAS,GAAW,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,KAAI,CAAC,iBAAiB,CAAC,kBAAkB,CACvC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CACzC,CAAC;aACH;SACF,CAAC,CAAC;KACJ;IAED,6CAAY,GAAZ,UAAa,IAAc;QACzB,IAAM,aAAa,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ;aACpD,QAAyB,CAAC;QAC7B,OAAO,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvD;;gBAtEF,SAAS,SAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,0eAcX;oBACC,MAAM,EAAE,CAAC,4IAA4I,CAAC;iBACvJ;;;gBAvBQ,iBAAiB;gBAGjB,iBAAiB;;;uBAsBvB,KAAK;;IAmDR,6BAAC;CAAA;;;IC7ED;KA+BC;IA9BQ,gEAAyB,GAAhC,UACE,QAAsB,EACtB,aAAqB,EACrB,eAAuB;QAEvB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAM,eAAe,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QACrD,IAAII,OAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YACpC,IAAI,gBAAc,GAAG,CAAC,CAAC;YACvBC,IAAM,CAAC,eAAe,CAAC,KAAK,EAAE,UAAC,GAAG;gBAChCA,IAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAC,MAAM;oBAC9B,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;wBACjC,IAAI,gBAAc,KAAK,CAAC,EAAE;4BACxB,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;yBACrD;6BAAM;4BACL,WAAW,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;yBAC5D;wBACD,gBAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;aAAM;YACLA,IAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAC,MAAM;gBAC9B,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,eAAe,CAAC,KAAK,EAAE;oBACnD,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;iBACvC;aACF,CAAC,CAAC;SACJ;QACD,OAAO,WAAW,CAAC;KACpB;IACH,mCAAC;CAAA;;;ICbC,kCAAoB,qBAAmD;QAAnD,0BAAqB,GAArB,qBAAqB,CAA8B;QAJ7D,gBAAW,GAAG,IAAI,YAAY,EAAU,CAAC;KAIwB;IAG3E,2CAAQ,GADR,UACS,CAAC;QACR,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE;YACpC,IACE,IAAI,CAAC,KAAK;iBACT,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;oBAC7D,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CACrE,EAAE;gBACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAC9C,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,iBAAiB,CAClB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC5C,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnC;SACF;KACF;IACO,gDAAa,GAArB,UAAsB,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;IACD,sBACI,0CAAI;aADR,UACS,IAAc;YACrB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IACE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB;oBACzC,CAACC,WAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CACxD,EAAE;oBACA,IAAM,OAAO,GAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;oBAC7C,IACE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,KAAK,QAAQ;wBAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,KAAK,cAAc;wBACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,KAAK,eACxC,EAAE;wBACA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CACjE,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,OAAO,EACP,OAAO,CACR,CAAC;wBACF,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC;wBAElE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;qBACpD;yBAAM,IAAI,CAACA,WAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;wBAClE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC;wBAC7D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC;wBAElE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;qBACpD;iBACF;aACF;SACF;;;OAAA;;gBApEF,SAAS,SAAC;oBACT,QAAQ,EAAE,QAAQ;iBACnB;;;gBANQ,4BAA4B;;;wBAQlC,KAAK;8BACL,MAAM;2BAMN,YAAY,SAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;uBA2BhC,KAAK;;IA+BR,+BAAC;CAAA;;ICjFY,KAAK,GAAG,mnEAmGpB;;ICnGYC,OAAK,GAAG,koCAwDnB;;ACxDF;IASE,gBAAY,KAAa,EAAE,KAAa;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;IAED,qBAAI,GAAJ;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;IAED,qBAAI,GAAJ;QACE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,wBAAO,GAAP;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAED,uBAAM,GAAN;QACE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAED,gCAAe,GAAf;QACE,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;KACH;IACH,aAAC;CAAA,IAAA;;ACzCD;IAAA;KAq1BC;IAVQ,gBAAK,GAAZ,UAAa,IAAY;QAAzB,iBASC;QARC,IAAM,KAAK,GAAG,UAAC,CAAS;YACtB,OAAO,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChC,CAAC;QACF,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;SACjD;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;IAn1BM,qBAAU,GAAG;QAClB,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG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"}