@signaltree/ng-forms 4.0.12 → 4.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaltree-ng-forms-src-audit.mjs","sources":["../tmp-esm2022/src/audit/audit.js"],"sourcesContent":["import { getChanges } from '@signaltree/shared';\nexport function createAuditMiddleware(auditLog, getMetadata) {\n return {\n id: 'audit',\n after: (_action, _payload, oldState, newState) => {\n const changes = getChanges(oldState, newState);\n if (Object.keys(changes).length > 0) {\n auditLog.push({\n timestamp: Date.now(),\n changes,\n metadata: getMetadata?.(),\n });\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
{"version":3,"file":"signaltree-ng-forms-src-audit.mjs","sources":["../tmp-esm2022/src/audit/audit.js"],"sourcesContent":["import { getChanges } from '@signaltree/shared';\nexport function createAuditMiddleware(auditLog, getMetadata) {\n return {\n id: 'audit',\n after: (_action, _payload, oldState, newState) => {\n const changes = getChanges(oldState, newState);\n if (Object.keys(changes).length > 0) {\n auditLog.push({\n timestamp: Date.now(),\n changes,\n metadata: getMetadata?.(),\n });\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvYXVkaXQvYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBd0RoRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQXlCLEVBQ3pCLFdBQTZDO0lBRTdDLE9BQU87UUFDTCxFQUFFLEVBQUUsT0FBTztRQUNYLEtBQUssRUFBRSxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQVcsRUFBRSxRQUFXLEVBQUUsRUFBRTtZQUN0RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ3JCLE9BQU87b0JBQ1AsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2hhbmdlcyB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJ0BzaWduYWx0cmVlL2NvcmUnO1xuLyoqXG4gKiBBdWRpdCBsb2cgZW50cnkgcmVjb3JkaW5nIGZvcm0gY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RW50cnk8VCA9IHVua25vd24+IHtcbiAgLyoqIFRpbWVzdGFtcCB3aGVuIGNoYW5nZSBvY2N1cnJlZCAqL1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgLyoqIENoYW5nZWQgZmllbGRzIGFuZCB0aGVpciBuZXcgdmFsdWVzICovXG4gIGNoYW5nZXM6IFBhcnRpYWw8VD47XG4gIC8qKiBPcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgY2hhbmdlICovXG4gIG1ldGFkYXRhPzoge1xuICAgIC8qKiBVc2VyIElEIHdobyBtYWRlIHRoZSBjaGFuZ2UgKi9cbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgLyoqIFNvdXJjZSBvZiB0aGUgY2hhbmdlIChlLmcuLCAndWknLCAnYXBpJywgJ2ltcG9ydCcpICovXG4gICAgc291cmNlPzogc3RyaW5nO1xuICAgIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXVkaXQgbWlkZGxld2FyZSBmb3IgZm9ybSBjaGFuZ2UgdHJhY2tpbmcuXG4gKiBBdXRvbWF0aWNhbGx5IGxvZ3MgYWxsIGZvcm0gc3RhdGUgY2hhbmdlcyB3aXRoIHRpbWVzdGFtcHMgYW5kIG9wdGlvbmFsIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSBhdWRpdExvZyAtIEFycmF5IHRvIGNvbGxlY3QgYXVkaXQgZW50cmllc1xuICogQHBhcmFtIGdldE1ldGFkYXRhIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gcHJvdmlkZSBtZXRhZGF0YSBmb3IgZWFjaCBjaGFuZ2VcbiAqIEByZXR1cm5zIE1pZGRsZXdhcmUgdGhhdCByZWNvcmRzIGZvcm0gY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhdWRpdExvZzogQXVkaXRFbnRyeTxNeUZvcm1EYXRhPltdID0gW107XG4gKlxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKFxuICogICB7IG5hbWU6ICcnLCBlbWFpbDogJycgfSxcbiAqICAge1xuICogICAgIG1pZGRsZXdhcmU6IFtcbiAqICAgICAgIGNyZWF0ZUF1ZGl0TWlkZGxld2FyZShhdWRpdExvZywgKCkgPT4gKHtcbiAqICAgICAgICAgdXNlcklkOiBjdXJyZW50VXNlci5pZCxcbiAqICAgICAgICAgc291cmNlOiAnZm9ybS1lZGl0b3InXG4gKiAgICAgICB9KSlcbiAqICAgICBdXG4gKiAgIH1cbiAqICk7XG4gKlxuICogZm9ybS4kLm5hbWUuc2V0KCdKb2huJyk7XG4gKlxuICogY29uc29sZS5sb2coYXVkaXRMb2cpO1xuICogLy8gW3tcbiAqIC8vICAgdGltZXN0YW1wOiAxMjM0NTY3ODkwLFxuICogLy8gICBjaGFuZ2VzOiB7IG5hbWU6ICdKb2huJyB9LFxuICogLy8gICBtZXRhZGF0YTogeyB1c2VySWQ6ICcxMjMnLCBzb3VyY2U6ICdmb3JtLWVkaXRvcicgfVxuICogLy8gfV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaXRNaWRkbGV3YXJlPFQ+KFxuICBhdWRpdExvZzogQXVkaXRFbnRyeTxUPltdLFxuICBnZXRNZXRhZGF0YT86ICgpID0+IEF1ZGl0RW50cnk8VD5bJ21ldGFkYXRhJ11cbik6IE1pZGRsZXdhcmU8VD4ge1xuICByZXR1cm4ge1xuICAgIGlkOiAnYXVkaXQnLFxuICAgIGFmdGVyOiAoX2FjdGlvbjogc3RyaW5nLCBfcGF5bG9hZDogdW5rbm93biwgb2xkU3RhdGU6IFQsIG5ld1N0YXRlOiBUKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gZ2V0Q2hhbmdlcyhvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXVkaXRMb2cucHVzaCh7XG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGNoYW5nZXMsXG4gICAgICAgICAgbWV0YWRhdGE6IGdldE1ldGFkYXRhPy4oKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ=="],"names":[],"mappings":";;AACO,SAAS,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC7D,IAAI,OAAO;AACX,QAAQ,EAAE,EAAE,OAAO;AACnB,QAAQ,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAC1D,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAgB,QAAQ,CAAC,IAAI,CAAC;AAC9B,oBAAoB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACzC,oBAAoB,OAAO;AAC3B,oBAAoB,QAAQ,EAAE,WAAW,IAAI;AAC7C,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ,CAAC;AACT,KAAK;AACL;;;;"}
|
|
@@ -809,8 +809,8 @@ class SignalValueDirective {
|
|
|
809
809
|
setDisabledState(isDisabled) {
|
|
810
810
|
this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);
|
|
811
811
|
}
|
|
812
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
813
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
812
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
813
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.11", type: SignalValueDirective, isStandalone: true, selector: "[signalTreeSignalValue]", inputs: { signalTreeSignalValue: "signalTreeSignalValue" }, outputs: { signalTreeSignalValueChange: "signalTreeSignalValueChange" }, host: { listeners: { "input": "handleChange($event)", "change": "handleChange($event)", "blur": "handleBlur()" } }, providers: [
|
|
814
814
|
{
|
|
815
815
|
provide: NG_VALUE_ACCESSOR,
|
|
816
816
|
useExisting: forwardRef(() => SignalValueDirective),
|
|
@@ -818,7 +818,7 @@ class SignalValueDirective {
|
|
|
818
818
|
},
|
|
819
819
|
], ngImport: i0 });
|
|
820
820
|
}
|
|
821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
821
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: SignalValueDirective, decorators: [{
|
|
822
822
|
type: Directive,
|
|
823
823
|
args: [{
|
|
824
824
|
selector: '[signalTreeSignalValue]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaltree-ng-forms.mjs","sources":["../tmp-esm2022/core/ng-forms.js","../tmp-esm2022/core/validators.js","../tmp-esm2022/core/async-validators.js","../tmp-esm2022/history/history.js"],"sourcesContent":["import { computed, effect, inject, signal, DestroyRef, Directive, ElementRef, Renderer2, HostListener, Input, Output, EventEmitter, isSignal, forwardRef, } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { signalTree } from '@signaltree/core';\nimport { deepClone, matchPath, mergeDeep, parsePath } from '@signaltree/shared';\nimport { firstValueFrom, isObservable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class FormValidationError extends Error {\n errors;\n asyncErrors;\n constructor(errors, asyncErrors) {\n super('Form validation failed');\n this.errors = errors;\n this.asyncErrors = asyncErrors;\n this.name = 'FormValidationError';\n }\n}\nconst SYNC_ERROR_KEY = 'signaltree';\nconst ASYNC_ERROR_KEY = 'signaltreeAsync';\nexport function createFormTree(initialValues, config = {}) {\n const { validators: baseValidators = {}, asyncValidators: baseAsyncValidators = {}, destroyRef: providedDestroyRef, fieldConfigs = {}, conditionals = [], persistKey, storage, persistDebounceMs = 100, validationBatchMs = 0, ...treeConfig } = config;\n const syncValidators = normalizeSyncValidators(baseValidators, fieldConfigs);\n const asyncValidators = normalizeAsyncValidators(baseAsyncValidators, fieldConfigs);\n const { values: hydratedInitialValues } = hydrateInitialValues(initialValues, persistKey, storage);\n const initialSnapshot = deepClone(hydratedInitialValues);\n const valuesTree = signalTree(hydratedInitialValues, treeConfig);\n assertTreeNode(valuesTree.state);\n const flattenedState = valuesTree.state;\n enhanceArraysRecursively(flattenedState);\n const formGroup = createAbstractControl(hydratedInitialValues, '', syncValidators, asyncValidators);\n const destroyRef = providedDestroyRef ?? tryInjectDestroyRef();\n const cleanupCallbacks = [];\n const errors = signal({}, ...(ngDevMode ? [{ debugName: \"errors\" }] : []));\n const asyncErrors = signal({}, ...(ngDevMode ? [{ debugName: \"asyncErrors\" }] : []));\n const touched = signal({}, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const asyncValidating = signal({}, ...(ngDevMode ? [{ debugName: \"asyncValidating\" }] : []));\n const dirty = signal(formGroup.dirty, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const valid = signal(formGroup.valid && !formGroup.pending, ...(ngDevMode ? [{ debugName: \"valid\" }] : []));\n const submitting = signal(false, ...(ngDevMode ? [{ debugName: \"submitting\" }] : []));\n const refreshRunner = () => {\n const snapshot = collectControlSnapshot(formGroup);\n errors.set(snapshot.syncErrors);\n asyncErrors.set(snapshot.asyncErrors);\n touched.set(snapshot.touched);\n asyncValidating.set(snapshot.pending);\n dirty.set(formGroup.dirty);\n valid.set(formGroup.valid && !formGroup.pending);\n };\n let refreshTimer = null;\n const refreshAggregates = (immediate = false) => {\n if (immediate || validationBatchMs <= 0) {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n refreshRunner();\n return;\n }\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n refreshTimer = setTimeout(() => {\n refreshTimer = null;\n refreshRunner();\n }, validationBatchMs);\n };\n refreshAggregates(true);\n const persistController = createPersistController(formGroup, persistKey, storage, persistDebounceMs, cleanupCallbacks);\n persistController.persistImmediately();\n const fieldErrorKeys = new Set([\n ...Object.keys(syncValidators),\n ...Object.keys(asyncValidators),\n ]);\n const fieldErrors = {};\n const fieldAsyncErrors = {};\n fieldErrorKeys.forEach((fieldPath) => {\n fieldErrors[fieldPath] = computed(() => errors()[fieldPath]);\n fieldAsyncErrors[fieldPath] = computed(() => asyncErrors()[fieldPath]);\n });\n const fieldConfigLookup = (path) => resolveFieldConfig(fieldConfigs, path);\n const connectControlRecursive = (control, path) => {\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n connectControlRecursive(child, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n const arraySignal = getSignalAtPath(flattenedState, path);\n if (arraySignal) {\n connectFormArrayAndSignal(control, arraySignal, path, syncValidators, asyncValidators, cleanupCallbacks, connectControlRecursive);\n }\n control.controls.forEach((child, index) => {\n connectControlRecursive(child, joinPath(path, String(index)));\n });\n return;\n }\n const signalAtPath = getSignalAtPath(flattenedState, path);\n if (signalAtPath) {\n connectControlAndSignal(control, signalAtPath, cleanupCallbacks, fieldConfigLookup(path));\n }\n };\n connectControlRecursive(formGroup, '');\n const conditionalState = new Map();\n const applyConditionals = conditionals.length > 0\n ? () => {\n const values = formGroup.getRawValue();\n conditionals.forEach(({ when, fields }) => {\n let visible = true;\n try {\n visible = when(values);\n }\n catch {\n visible = true;\n }\n fields.forEach((fieldPath) => {\n const control = formGroup.get(fieldPath);\n if (!control) {\n return;\n }\n const previous = conditionalState.get(fieldPath);\n if (previous === visible) {\n return;\n }\n conditionalState.set(fieldPath, visible);\n if (visible) {\n control.enable({ emitEvent: false });\n }\n else {\n control.disable({ emitEvent: false });\n }\n });\n });\n }\n : () => undefined;\n applyConditionals();\n const aggregateSubscriptions = [];\n aggregateSubscriptions.push(formGroup.valueChanges.subscribe(() => {\n refreshAggregates();\n persistController.schedulePersist();\n applyConditionals();\n }));\n aggregateSubscriptions.push(formGroup.statusChanges.subscribe(() => refreshAggregates()));\n if (formGroup.events) {\n aggregateSubscriptions.push(formGroup.events.subscribe(() => refreshAggregates()));\n }\n cleanupCallbacks.push(() => {\n aggregateSubscriptions.forEach((sub) => sub.unsubscribe());\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n });\n if (destroyRef) {\n destroyRef.onDestroy(() => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n });\n }\n const setValue = (field, value) => {\n const targetSignal = getSignalAtPath(flattenedState, field);\n const control = formGroup.get(field);\n if (targetSignal && 'set' in targetSignal) {\n targetSignal.set(value);\n }\n else if (control) {\n control.setValue(value, { emitEvent: true });\n }\n if (control) {\n const untypedControl = control;\n untypedControl.markAsTouched();\n untypedControl.markAsDirty();\n untypedControl.updateValueAndValidity({ emitEvent: true });\n }\n refreshAggregates(true);\n persistController.schedulePersist();\n };\n const setValues = (values) => {\n Object.entries(values).forEach(([key, value]) => {\n setValue(key, value);\n });\n };\n const reset = () => {\n formGroup.reset(initialSnapshot);\n submitting.set(false);\n refreshAggregates(true);\n persistController.persistImmediately();\n applyConditionals();\n };\n const validate = async (field) => {\n if (field) {\n const control = formGroup.get(field);\n if (!control) {\n return;\n }\n control.markAsTouched();\n control.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(control);\n refreshAggregates(true);\n return;\n }\n formGroup.markAllAsTouched();\n formGroup.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(formGroup);\n refreshAggregates(true);\n };\n const submit = async (submitFn) => {\n submitting.set(true);\n try {\n await validate();\n if (!valid()) {\n throw new FormValidationError(errors(), asyncErrors());\n }\n const currentValues = formGroup.getRawValue();\n const result = await submitFn(currentValues);\n return result;\n }\n finally {\n submitting.set(false);\n refreshAggregates(true);\n }\n };\n const destroy = () => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n };\n const formTree = {\n state: flattenedState,\n $: flattenedState,\n form: formGroup,\n errors,\n asyncErrors,\n touched,\n asyncValidating,\n dirty,\n valid,\n submitting,\n unwrap: () => valuesTree(),\n setValue,\n setValues,\n reset,\n submit,\n validate,\n getFieldError: (field) => fieldErrors[field] || computed(() => undefined),\n getFieldAsyncError: (field) => fieldAsyncErrors[field] || computed(() => undefined),\n getFieldTouched: (field) => computed(() => formGroup.get(field)?.touched ?? false),\n isFieldValid: (field) => computed(() => {\n const control = formGroup.get(field);\n return !!control && control.valid && !control.pending;\n }),\n isFieldAsyncValidating: (field) => computed(() => !!formGroup.get(field)?.pending),\n fieldErrors,\n fieldAsyncErrors,\n values: valuesTree,\n destroy,\n };\n return formTree;\n}\nexport function createVirtualFormArray(items, visibleRange, controlFactory = (value) => new FormControl(value)) {\n const start = Math.max(0, visibleRange.start);\n const end = Math.max(start, visibleRange.end);\n const controls = items\n .slice(start, end)\n .map((item, offset) => controlFactory(item, start + offset));\n return new FormArray(controls);\n}\nfunction enhanceArraysRecursively(obj, visited = new WeakSet()) {\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n for (const key in obj) {\n const value = obj[key];\n if (isSignal(value)) {\n const signalValue = value();\n if (Array.isArray(signalValue)) {\n obj[key] = enhanceArray(value);\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)) {\n enhanceArraysRecursively(value, visited);\n }\n }\n}\nconst enhanceArray = (arraySignal) => {\n const enhanced = arraySignal;\n enhanced.push = (item) => {\n arraySignal.update((arr) => [...arr, item]);\n };\n enhanced.removeAt = (index) => {\n arraySignal.update((arr) => arr.filter((_, i) => i !== index));\n };\n enhanced.setAt = (index, value) => {\n arraySignal.update((arr) => arr.map((item, i) => (i === index ? value : item)));\n };\n enhanced.insertAt = (index, item) => {\n arraySignal.update((arr) => [\n ...arr.slice(0, index),\n item,\n ...arr.slice(index),\n ]);\n };\n enhanced.move = (from, to) => {\n arraySignal.update((arr) => {\n const newArr = [...arr];\n const [item] = newArr.splice(from, 1);\n if (item !== undefined) {\n newArr.splice(to, 0, item);\n }\n return newArr;\n });\n };\n enhanced.clear = () => {\n arraySignal.set([]);\n };\n return enhanced;\n};\nfunction getSignalAtPath(node, path) {\n if (!path) {\n return null;\n }\n const segments = parsePath(path);\n let current = node;\n for (const segment of segments) {\n if (!current || typeof current !== 'object') {\n return null;\n }\n current = current[segment];\n }\n if (isSignal(current)) {\n return current;\n }\n return null;\n}\nfunction joinPath(parent, segment) {\n return parent ? `${parent}.${segment}` : segment;\n}\nfunction wrapSyncValidator(validator) {\n return (control) => {\n const result = validator(control.value);\n return result ? { [SYNC_ERROR_KEY]: result } : null;\n };\n}\nfunction wrapAsyncValidator(validator) {\n return async (control) => {\n try {\n const maybeAsync = validator(control.value);\n const resolved = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n return resolved ? { [ASYNC_ERROR_KEY]: resolved } : null;\n }\n catch {\n return { [ASYNC_ERROR_KEY]: 'Validation error' };\n }\n };\n}\nfunction createAbstractControl(value, path, validators, asyncValidators) {\n const syncValidator = findValidator(validators, path);\n const asyncValidator = findValidator(asyncValidators, path);\n const syncFns = syncValidator\n ? [wrapSyncValidator(syncValidator)]\n : undefined;\n const asyncFns = asyncValidator\n ? [wrapAsyncValidator(asyncValidator)]\n : undefined;\n if (Array.isArray(value)) {\n const controls = value.map((item, index) => createAbstractControl(item, joinPath(path, String(index)), validators, asyncValidators));\n return new FormArray(controls, syncFns, asyncFns);\n }\n if (isPlainObject(value)) {\n const controls = {};\n for (const [key, child] of Object.entries(value)) {\n controls[key] = createAbstractControl(child, joinPath(path, key), validators, asyncValidators);\n }\n return new FormGroup(controls, {\n validators: syncFns,\n asyncValidators: asyncFns,\n });\n }\n return new FormControl(value, {\n validators: syncFns,\n asyncValidators: asyncFns,\n nonNullable: false,\n });\n}\nfunction connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldConfig) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n let versionCounter = 0;\n let lastControlVersion = 0;\n let controlDebounceTimer = null;\n const debounceMs = fieldConfig?.debounceMs ?? 0;\n const originalSet = valueSignal.set.bind(valueSignal);\n const originalUpdate = valueSignal.update.bind(valueSignal);\n const applyControlValue = (value) => {\n updatingFromSignal = true;\n if (!Object.is(control.value, value)) {\n const untypedControl = control;\n untypedControl.setValue(value, { emitEvent: true });\n untypedControl.markAsDirty();\n }\n updatingFromSignal = false;\n };\n valueSignal.set = (value) => {\n const currentVersion = ++versionCounter;\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n if (lastControlVersion > currentVersion) {\n return;\n }\n applyControlValue(value);\n };\n valueSignal.update = (updater) => {\n const next = updater(valueSignal());\n valueSignal.set(next);\n };\n const pushUpdateFromControl = (value) => {\n updatingFromControl = true;\n lastControlVersion = ++versionCounter;\n originalSet(value);\n updatingFromControl = false;\n };\n const handleControlChange = (value) => {\n if (updatingFromSignal) {\n return;\n }\n if (debounceMs > 0) {\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n controlDebounceTimer = setTimeout(() => {\n controlDebounceTimer = null;\n pushUpdateFromControl(value);\n }, debounceMs);\n return;\n }\n pushUpdateFromControl(value);\n };\n const subscription = control.valueChanges.subscribe((value) => {\n handleControlChange(value);\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n valueSignal.set = originalSet;\n valueSignal.update = originalUpdate;\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n });\n}\nfunction connectFormArrayAndSignal(formArray, arraySignal, path, validators, asyncValidators, cleanupCallbacks, connectControlRecursive) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n const originalSet = arraySignal.set.bind(arraySignal);\n const originalUpdate = arraySignal.update.bind(arraySignal);\n arraySignal.set = (value) => {\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n updatingFromSignal = true;\n syncFormArrayFromValue(formArray, value, path, validators, asyncValidators, connectControlRecursive);\n formArray.markAsDirty();\n updatingFromSignal = false;\n };\n arraySignal.update = (updater) => {\n const next = updater(arraySignal());\n arraySignal.set(next);\n };\n const subscription = formArray.valueChanges.subscribe((value) => {\n if (updatingFromSignal) {\n return;\n }\n updatingFromControl = true;\n originalSet(value);\n updatingFromControl = false;\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n arraySignal.set = originalSet;\n arraySignal.update = originalUpdate;\n });\n syncFormArrayFromValue(formArray, arraySignal(), path, validators, asyncValidators, connectControlRecursive);\n}\nfunction syncFormArrayFromValue(formArray, nextValue, path, validators, asyncValidators, connectControlRecursive) {\n if (!Array.isArray(nextValue)) {\n nextValue = [];\n }\n while (formArray.length > nextValue.length) {\n formArray.removeAt(formArray.length - 1);\n }\n nextValue.forEach((item, index) => {\n const childPath = joinPath(path, String(index));\n const existing = formArray.at(index);\n if (!existing) {\n const control = createAbstractControl(item, childPath, validators, asyncValidators);\n formArray.insert(index, control);\n connectControlRecursive(control, childPath);\n return;\n }\n if (existing instanceof FormArray) {\n syncFormArrayFromValue(existing, Array.isArray(item) ? item : [], childPath, validators, asyncValidators, connectControlRecursive);\n return;\n }\n if (existing instanceof FormGroup) {\n if (isPlainObject(item)) {\n existing.setValue(item, {\n emitEvent: false,\n });\n }\n return;\n }\n if (!Object.is(existing.value, item)) {\n const untypedExisting = existing;\n untypedExisting.setValue(item, { emitEvent: false });\n }\n });\n}\nfunction collectControlSnapshot(control) {\n const snapshot = {\n syncErrors: {},\n asyncErrors: {},\n touched: {},\n pending: {},\n };\n traverseControls(control, (currentPath, currentControl) => {\n if (!currentPath) {\n return;\n }\n if (currentControl.touched) {\n snapshot.touched[currentPath] = true;\n }\n if (currentControl.pending) {\n snapshot.pending[currentPath] = true;\n }\n const errors = currentControl.errors;\n if (!errors) {\n return;\n }\n const syncMessage = errors[SYNC_ERROR_KEY];\n if (typeof syncMessage === 'string') {\n snapshot.syncErrors[currentPath] = syncMessage;\n }\n const asyncMessage = errors[ASYNC_ERROR_KEY];\n if (typeof asyncMessage === 'string') {\n snapshot.asyncErrors[currentPath] = asyncMessage;\n }\n }, '');\n return snapshot;\n}\nfunction traverseControls(control, visitor, path = '') {\n visitor(path, control);\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n traverseControls(child, visitor, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n control.controls.forEach((child, index) => {\n traverseControls(child, visitor, joinPath(path, String(index)));\n });\n }\n}\nfunction waitForPending(control) {\n if (!control.pending) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const subscription = control.statusChanges.subscribe(() => {\n if (!control.pending) {\n subscription.unsubscribe();\n resolve();\n }\n });\n });\n}\nfunction isPlainObject(value) {\n return (!!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]');\n}\nfunction tryInjectDestroyRef() {\n try {\n return inject(DestroyRef);\n }\n catch {\n return null;\n }\n}\nfunction normalizeSyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.validators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = (value) => {\n for (const validator of validators) {\n const result = validator(value);\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction normalizeAsyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.asyncValidators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = async (value) => {\n for (const validator of validators) {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction toValidatorArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n return Object.values(input);\n}\nfunction hydrateInitialValues(initialValues, persistKey, storage) {\n const baseClone = deepClone(initialValues);\n if (!persistKey || !storage) {\n return { values: baseClone };\n }\n try {\n const storedRaw = storage.getItem(persistKey);\n if (!storedRaw) {\n return { values: baseClone };\n }\n const parsed = JSON.parse(storedRaw);\n const merged = mergeDeep(baseClone, parsed);\n return { values: merged };\n }\n catch {\n return { values: baseClone };\n }\n}\nfunction assertTreeNode(state) {\n if (!state || typeof state !== 'object') {\n throw new Error('Invalid state structure for form tree');\n }\n}\nfunction resolveFieldConfig(fieldConfigs, path) {\n if (fieldConfigs[path]) {\n return fieldConfigs[path];\n }\n const keys = Object.keys(fieldConfigs);\n let match;\n for (const key of keys) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!match || match.key.length < key.length) {\n match = { key, config: fieldConfigs[key] };\n }\n }\n }\n if (match) {\n return match.config;\n }\n return fieldConfigs['*'];\n}\nfunction findValidator(map, path) {\n if (map[path]) {\n return map[path];\n }\n let candidate;\n for (const key of Object.keys(map)) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!candidate || candidate.key.length < key.length) {\n candidate = { key, value: map[key] };\n }\n }\n }\n if (candidate) {\n return candidate.value;\n }\n return map['*'];\n}\nfunction createPersistController(formGroup, persistKey, storage, debounceMs, cleanupCallbacks) {\n if (!persistKey || !storage) {\n return {\n schedulePersist: () => undefined,\n persistImmediately: () => undefined,\n };\n }\n let timer = null;\n const persist = () => {\n try {\n const payload = JSON.stringify(formGroup.getRawValue());\n storage.setItem(persistKey, payload);\n }\n catch {\n }\n };\n const schedulePersist = () => {\n if (debounceMs <= 0) {\n persist();\n return;\n }\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n timer = null;\n persist();\n }, debounceMs);\n };\n cleanupCallbacks.push(() => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n return {\n schedulePersist,\n persistImmediately: persist,\n };\n}\nexport class SignalValueDirective {\n signalTreeSignalValue;\n signalTreeSignalValueChange = new EventEmitter();\n elementRef = inject(ElementRef);\n renderer = inject(Renderer2);\n onChange = () => {\n };\n onTouched = () => {\n };\n ngOnInit() {\n effect(() => {\n const value = this.signalTreeSignalValue();\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n });\n }\n handleChange(event) {\n const target = event.target;\n const value = target?.value;\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n this.signalTreeSignalValueChange.emit(value);\n this.onChange(value);\n }\n }\n handleBlur() {\n this.onTouched();\n }\n writeValue(value) {\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.7\", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.7\", type: SignalValueDirective, isStandalone: true, selector: \"[signalTreeSignalValue]\", inputs: { signalTreeSignalValue: \"signalTreeSignalValue\" }, outputs: { signalTreeSignalValueChange: \"signalTreeSignalValueChange\" }, host: { listeners: { \"input\": \"handleChange($event)\", \"change\": \"handleChange($event)\", \"blur\": \"handleBlur()\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.7\", ngImport: i0, type: SignalValueDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[signalTreeSignalValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ],\n standalone: true,\n }]\n }], propDecorators: { signalTreeSignalValue: [{\n type: Input\n }], signalTreeSignalValueChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['input', ['$event']]\n }, {\n type: HostListener,\n args: ['change', ['$event']]\n }], handleBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\nexport const SIGNAL_FORM_DIRECTIVES = [SignalValueDirective];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvY29yZS9uZy1mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUdOLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosUUFBUSxFQUNSLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7O0FBc0c5RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUUxQjtJQUNBO0lBRmxCLFlBQ2tCLE1BQThCLEVBQzlCLFdBQW1DO1FBRW5ELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBSGhCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUduRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUtELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQVUxQyxNQUFNLFVBQVUsY0FBYyxDQUM1QixhQUFnQixFQUNoQixTQUE2QixFQUFFO0lBRS9CLE1BQU0sRUFDSixVQUFVLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFDL0IsZUFBZSxFQUFFLG1CQUFtQixHQUFHLEVBQUUsRUFDekMsVUFBVSxFQUFFLGtCQUFrQixFQUM5QixZQUFZLEdBQUcsRUFBRSxFQUNqQixZQUFZLEdBQUcsRUFBRSxFQUNqQixVQUFVLEVBQ1YsT0FBTyxFQUNQLGlCQUFpQixHQUFHLEdBQUcsRUFDdkIsaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixHQUFHLFVBQVUsRUFDZCxHQUFHLE1BQU0sQ0FBQztJQUVYLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3RSxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FDOUMsbUJBQW1CLEVBQ25CLFlBQVksQ0FDYixDQUFDO0lBRUYsTUFBTSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxHQUFHLG9CQUFvQixDQUM1RCxhQUFhLEVBQ2IsVUFBVSxFQUNWLE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFekQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLGNBQWMsQ0FBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUV4Qyx3QkFBd0IsQ0FDdEIsY0FBb0QsQ0FDckQsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUNyQyxxQkFBcUIsRUFDckIsRUFBRSxFQUNGLGNBQWMsRUFDZCxlQUFlLENBQ0gsQ0FBQztJQUVmLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDL0QsTUFBTSxnQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBeUIsRUFBRSxrREFBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBeUIsRUFBRSx1REFBQyxDQUFDO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBMEIsRUFBRSxtREFBQyxDQUFDO0lBQ3BELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBMEIsRUFBRSwyREFBQyxDQUFDO0lBQzVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxpREFBQyxDQUFDO0lBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8saURBQUMsQ0FBQztJQUM1RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxzREFBQyxDQUFDO0lBRWpDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUN6QixNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0lBRUYsSUFBSSxZQUFZLEdBQXlDLElBQUksQ0FBQztJQUM5RCxNQUFNLGlCQUFpQixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxFQUFFO1FBQzlDLElBQUksU0FBUyxJQUFJLGlCQUFpQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBQ0QsYUFBYSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsWUFBWSxHQUFHLElBQUksQ0FBQztZQUNwQixhQUFhLEVBQUUsQ0FBQztRQUNsQixDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUMvQyxTQUFTLEVBQ1QsVUFBVSxFQUNWLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsZ0JBQWdCLENBQ2pCLENBQUM7SUFDRixpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBRXZDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQzdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDOUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUNoQyxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBK0MsRUFBRSxDQUFDO0lBQ25FLE1BQU0sZ0JBQWdCLEdBQStDLEVBQUUsQ0FBQztJQUV4RSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDbkMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzdELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3pDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV6QyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBd0IsRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUN6RSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUN4RCx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLHlCQUF5QixDQUN2QixPQUFPLEVBQ1AsV0FBMkMsRUFDM0MsSUFBSSxFQUNKLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHVCQUF1QixDQUN4QixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4Qyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsdUJBQXVCLENBQ3JCLE9BQXNCLEVBQ3RCLFlBQXVDLEVBQ3ZDLGdCQUFnQixFQUNoQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FDeEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRix1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQixHQUNyQixZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDckIsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQU8sQ0FBQztZQUM1QyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUM7b0JBQ0gsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDakIsQ0FBQztnQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDYixPQUFPO29CQUNULENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsT0FBTztvQkFDVCxDQUFDO29CQUNELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ1osT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUV0QixpQkFBaUIsRUFBRSxDQUFDO0lBRXBCLE1BQU0sc0JBQXNCLEdBQW1CLEVBQUUsQ0FBQztJQUNsRCxzQkFBc0IsQ0FBQyxJQUFJLENBQ3pCLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNwQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLGlCQUFpQixFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNGLHNCQUFzQixDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUM3RCxDQUFDO0lBQ0YsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckIsc0JBQXNCLENBQUMsSUFBSSxDQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN4QixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ2pELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxJQUFJLFlBQVksSUFBSSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7WUFDekMsWUFBd0MsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBMkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLGNBQWMsR0FBRyxPQUEwQixDQUFDO1lBQ2xELGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQixjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBa0IsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM5QyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFpQixFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLEtBQWMsRUFBaUIsRUFBRTtRQUN2RCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixNQUFNLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQ2xCLFFBQXlDLEVBQ3ZCLEVBQUU7UUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsRUFBRSxDQUFDO1lBRWpCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFPLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQWdCO1FBQzVCLEtBQUssRUFBRSxjQUFjO1FBQ3JCLENBQUMsRUFBRSxjQUFjO1FBQ2pCLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTTtRQUNOLFdBQVc7UUFDWCxPQUFPO1FBQ1AsZUFBZTtRQUNmLEtBQUs7UUFDTCxLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUU7UUFDMUIsUUFBUTtRQUNSLFNBQVM7UUFDVCxLQUFLO1FBQ0wsTUFBTTtRQUNOLFFBQVE7UUFDUixhQUFhLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUMvQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNqRCxrQkFBa0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ3BDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDdEQsZUFBZSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDakMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztRQUN4RCxZQUFZLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUM5QixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDeEQsQ0FBQyxDQUFDO1FBQ0osc0JBQXNCLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUN4QyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ2pELFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsTUFBTSxFQUFFLFVBQVU7UUFDbEIsT0FBTztLQUNSLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxLQUFVLEVBQ1YsWUFBNEMsRUFDNUMsaUJBQStELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdkUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO0lBRXhCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUMsTUFBTSxRQUFRLEdBQUcsS0FBSztTQUNuQixLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUNqQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRS9ELE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQy9CLEdBQTRCLEVBQzVCLFVBQVUsSUFBSSxPQUFPLEVBQVU7SUFFL0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTztJQUNULENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxXQUFXLEdBQUksS0FBeUIsRUFBRSxDQUFDO1lBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMvQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQWtDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN6QixLQUFLLEtBQUssSUFBSTtZQUNkLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDckIsQ0FBQztZQUNELHdCQUF3QixDQUFDLEtBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FDbkIsV0FBZ0MsRUFDUixFQUFFO0lBQzFCLE1BQU0sUUFBUSxHQUFHLFdBQXFDLENBQUM7SUFFdkQsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQU8sRUFBRSxFQUFFO1FBQzFCLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDcEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBUSxFQUFFLEVBQUU7UUFDM0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBTyxFQUFFLEVBQUU7UUFDN0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDMUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDdEIsSUFBSTtZQUNKLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsRUFBRTtRQUMzQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsU0FBUyxlQUFlLENBQ3RCLElBQWlCLEVBQ2pCLElBQVk7SUFFWixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFDO0lBRTVCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEdBQUksT0FBbUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLE9BQWtDLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLE1BQWMsRUFBRSxPQUFlO0lBQy9DLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixTQUE0QztJQUU1QyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDakIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3pCLFNBQTRDO0lBRTVDLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3ZCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxDQUFDO1lBQ3JCLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzVCLEtBQWMsRUFDZCxJQUFZLEVBQ1osVUFBNEIsRUFDNUIsZUFBa0M7SUFFbEMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTVELE1BQU0sT0FBTyxHQUFHLGFBQWE7UUFDM0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNkLE1BQU0sUUFBUSxHQUFHLGNBQWM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDekMscUJBQXFCLENBQ25CLElBQUksRUFDSixRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3QixVQUFVLEVBQ1YsZUFBZSxDQUNoQixDQUNGLENBQUM7UUFDRixPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQW9DLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FDbkMsS0FBSyxFQUNMLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ25CLFVBQVUsRUFDVixlQUFlLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFDN0IsVUFBVSxFQUFFLE9BQU87WUFDbkIsZUFBZSxFQUFFLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFO1FBQzVCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLGVBQWUsRUFBRSxRQUFRO1FBQ3pCLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM5QixPQUFvQixFQUNwQixXQUFvQyxFQUNwQyxnQkFBbUMsRUFDbkMsV0FBeUI7SUFFekIsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDaEMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDL0IsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLElBQUksb0JBQW9CLEdBQXlDLElBQUksQ0FBQztJQUN0RSxNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUVoRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1RCxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDM0Msa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxPQUEwQixDQUFDO1lBQ2xELGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEQsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUYsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sY0FBYyxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3hDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGtCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQy9DLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixrQkFBa0IsR0FBRyxFQUFFLGNBQWMsQ0FBQztRQUN0QyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUM3QyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQixJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3pCLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxvQkFBb0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNyQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM1RCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDekIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQ3BDLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FDaEMsU0FBb0IsRUFDcEIsV0FBeUMsRUFDekMsSUFBWSxFQUNaLFVBQTRCLEVBQzVCLGVBQWtDLEVBQ2xDLGdCQUFtQyxFQUNuQyx1QkFBeUU7SUFFekUsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDaEMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFL0IsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFNUQsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQWdCLEVBQUUsRUFBRTtRQUNyQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLHNCQUFzQixDQUNwQixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksRUFDSixVQUFVLEVBQ1YsZUFBZSxFQUNmLHVCQUF1QixDQUN4QixDQUFDO1FBQ0YsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDLENBQUM7SUFFRixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDcEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzlELElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixXQUFXLENBQUMsS0FBa0IsQ0FBQyxDQUFDO1FBQ2hDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVILGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDekIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsc0JBQXNCLENBQ3BCLFNBQVMsRUFDVCxXQUFXLEVBQUUsRUFDYixJQUFJLEVBQ0osVUFBVSxFQUNWLGVBQWUsRUFDZix1QkFBdUIsQ0FDeEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUM3QixTQUFvQixFQUNwQixTQUFvQixFQUNwQixJQUFZLEVBQ1osVUFBNEIsRUFDNUIsZUFBa0MsRUFDbEMsdUJBQXlFO0lBRXpFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUNuQyxJQUFJLEVBQ0osU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLENBQ2hCLENBQUM7WUFDRixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUNsQyxzQkFBc0IsQ0FDcEIsUUFBUSxFQUNSLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUMvQixTQUFTLEVBQ1QsVUFBVSxFQUNWLGVBQWUsRUFDZix1QkFBdUIsQ0FDeEIsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxRQUFRLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUErQixFQUFFO29CQUNqRCxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sZUFBZSxHQUFHLFFBQTJCLENBQUM7WUFDcEQsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBU0QsU0FBUyxzQkFBc0IsQ0FBQyxPQUF3QjtJQUN0RCxNQUFNLFFBQVEsR0FBb0I7UUFDaEMsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtRQUNmLE9BQU8sRUFBRSxFQUFFO1FBQ1gsT0FBTyxFQUFFLEVBQUU7S0FDWixDQUFDO0lBRUYsZ0JBQWdCLENBQ2QsT0FBTyxFQUNQLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO1FBQzlCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQWlDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixPQUF3QixFQUN4QixPQUF5RCxFQUN6RCxJQUFJLEdBQUcsRUFBRTtJQUVULE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdkIsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN4RCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQXdCO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1FBQ1AsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFBaUIsQ0FDNUQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLElBQXNCLEVBQ3RCLFlBQXlDO0lBRXpDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXBELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBcUIsRUFBRSxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7WUFDcEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsSUFBdUIsRUFDdkIsWUFBeUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW9ELENBQUM7SUFFNUUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNuQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQWMsRUFBRSxFQUFFO1lBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxDQUFDO2dCQUNyQixJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBSSxLQUErQjtJQUMxRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLGFBQWdCLEVBQ2hCLFVBQW1CLEVBQ25CLE9BQTZEO0lBRTdELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBZSxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMvQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFJLEtBQWM7SUFDdkMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixZQUF5QyxFQUN6QyxJQUFZO0lBRVosSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLEtBQXVELENBQUM7SUFFNUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFJLEdBQXNCLEVBQUUsSUFBWTtJQUM1RCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksU0FBZ0QsQ0FBQztJQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BELFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQU9ELFNBQVMsdUJBQXVCLENBQzlCLFNBQW9CLEVBQ3BCLFVBQThCLEVBQzlCLE9BQXdFLEVBQ3hFLFVBQWtCLEVBQ2xCLGdCQUFtQztJQUVuQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNMLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1lBQ2hDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUssR0FBeUMsSUFBSSxDQUFDO0lBRXZELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxNQUFNLENBQUM7UUFFVCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFO1FBQzNCLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN0QixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN6QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxlQUFlO1FBQ2Ysa0JBQWtCLEVBQUUsT0FBTztLQUM1QixDQUFDO0FBQ0osQ0FBQztBQW9CRCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLHFCQUFxQixDQUEyQjtJQUMvQywyQkFBMkIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRTVELFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3QixRQUFRLEdBQTZCLEdBQUcsRUFBRTtJQUVsRCxDQUFDLENBQUM7SUFDTSxTQUFTLEdBQWUsR0FBRyxFQUFFO0lBRXJDLENBQUMsQ0FBQztJQUVGLFFBQVE7UUFDTixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQ2hELE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDNUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFHRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBNEI7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsVUFBVSxFQUNWLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQzt1R0ExRFUsb0JBQW9COzJGQUFwQixvQkFBb0IsK1RBVHBCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzsyRkFHVSxvQkFBb0I7a0JBWGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQUVFLEtBQUs7O3NCQUNMLE1BQU07O3NCQW1CTixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2hDLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFXakMsWUFBWTt1QkFBQyxNQUFNOztBQWdDdEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL3R5cGVzL3NpZ25hbHRyZWUtY29yZS5kLnRzXCIgLz5cbmltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICBTaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBEZXN0cm95UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGFibGUsXG4gIGlzU2lnbmFsLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvckZuIGFzIEFuZ3VsYXJBc3luY1ZhbGlkYXRvckZuLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm4gYXMgQW5ndWxhclZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBzaWduYWxUcmVlIH0gZnJvbSAnQHNpZ25hbHRyZWUvY29yZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUsIG1hdGNoUGF0aCwgbWVyZ2VEZWVwLCBwYXJzZVBhdGggfSBmcm9tICdAc2lnbmFsdHJlZS9zaGFyZWQnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBBbmd1bGFyIEZvcm1zIEludGVncmF0aW9uIGZvciBTaWduYWxUcmVlXG4gKlxuICogUHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBBbmd1bGFyIGZvcm0gaW50ZWdyYXRpb24gaW5jbHVkaW5nIEZvcm1UcmVlLFxuICogZGlyZWN0aXZlcywgdmFsaWRhdG9ycywgZW5oYW5jZWQgYXJyYXkgb3BlcmF0aW9ucywgYW5kIFJ4SlMgYnJpZGdlLlxuICovXG5cbi8vIFJlLWV4cG9ydCBjb3JlIHR5cGVzIG5lZWRlZCBmb3IgZm9ybXNcbmltcG9ydCB0eXBlIHsgU2lnbmFsVHJlZSwgVHJlZUNvbmZpZywgVHJlZU5vZGUgfSBmcm9tICdAc2lnbmFsdHJlZS9jb3JlJztcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGT1JNIFRSRUUgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjxUPiA9IChcbiAgdmFsdWU6IFRcbikgPT4gT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VkQXJyYXlTaWduYWw8VD4gPSBXcml0YWJsZVNpZ25hbDxUW10+ICYge1xuICBwdXNoOiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgcmVtb3ZlQXQ6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICBzZXRBdDogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSA9PiB2b2lkO1xuICBpbnNlcnRBdDogKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpID0+IHZvaWQ7XG4gIG1vdmU6IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHZvaWQ7XG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRWYWxpZGF0b3IgPSAodmFsdWU6IHVua25vd24pID0+IHN0cmluZyB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRDb25maWcge1xuICBkZWJvdW5jZU1zPzogbnVtYmVyO1xuICB2YWxpZGF0b3JzPzogUmVjb3JkPHN0cmluZywgRmllbGRWYWxpZGF0b3I+IHwgRmllbGRWYWxpZGF0b3JbXTtcbiAgYXN5bmNWYWxpZGF0b3JzPzpcbiAgICB8IFJlY29yZDxzdHJpbmcsIEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj5cbiAgICB8IEFycmF5PEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uYWxGaWVsZDxUPiB7XG4gIHdoZW46ICh2YWx1ZXM6IFQpID0+IGJvb2xlYW47XG4gIGZpZWxkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVRyZWVPcHRpb25zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgZXh0ZW5kcyBUcmVlQ29uZmlnIHtcbiAgdmFsaWRhdG9ycz86IFN5bmNWYWxpZGF0b3JNYXA7XG4gIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yTWFwO1xuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcbiAgZmllbGRDb25maWdzPzogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+O1xuICBjb25kaXRpb25hbHM/OiBBcnJheTxDb25kaXRpb25hbEZpZWxkPFQ+PjtcbiAgcGVyc2lzdEtleT86IHN0cmluZztcbiAgc3RvcmFnZT86IFBpY2s8U3RvcmFnZSwgJ2dldEl0ZW0nIHwgJ3NldEl0ZW0nIHwgJ3JlbW92ZUl0ZW0nPjtcbiAgcGVyc2lzdERlYm91bmNlTXM/OiBudW1iZXI7XG4gIHZhbGlkYXRpb25CYXRjaE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZvcm0gdHJlZSB0eXBlIHRoYXQgZmxhdHRlbnMgdGhlIHN0YXRlIGFjY2VzcyB3aGlsZSBtYWludGFpbmluZyBmb3JtLXNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVRyZWU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcbiAgLy8gRmxhdHRlbmVkIHN0YXRlIGFjY2VzcyAtIGRpcmVjdCBhY2Nlc3MgdG8gZm9ybSB2YWx1ZXMgYXMgc2lnbmFsc1xuICBzdGF0ZTogVHJlZU5vZGU8VD47XG4gICQ6IFRyZWVOb2RlPFQ+OyAvLyBBbGlhcyBmb3Igc3RhdGVcblxuICAvLyBVbmRlcmx5aW5nIEFuZ3VsYXIgZm9ybSBzdHJ1Y3R1cmVcbiAgZm9ybTogRm9ybUdyb3VwO1xuXG4gIC8vIEZvcm0tc3BlY2lmaWMgc2lnbmFsc1xuICBlcnJvcnM6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBhc3luY0Vycm9yczogV3JpdGFibGVTaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIHRvdWNoZWQ6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcbiAgYXN5bmNWYWxpZGF0aW5nOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG4gIGRpcnR5OiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgdmFsaWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuICBzdWJtaXR0aW5nOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcblxuICAvLyBGb3JtIG1ldGhvZHNcbiAgdW53cmFwKCk6IFQ7XG4gIHNldFZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG4gIHN1Ym1pdDxUUmVzdWx0PihzdWJtaXRGbjogKHZhbHVlczogVCkgPT4gUHJvbWlzZTxUUmVzdWx0Pik6IFByb21pc2U8VFJlc3VsdD47XG4gIHZhbGlkYXRlKGZpZWxkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBGaWVsZC1sZXZlbCBoZWxwZXJzXG4gIGdldEZpZWxkRXJyb3IoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBnZXRGaWVsZEFzeW5jRXJyb3IoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBnZXRGaWVsZFRvdWNoZWQoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj47XG4gIGlzRmllbGRBc3luY1ZhbGlkYXRpbmcoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcblxuICAvLyBEaXJlY3QgYWNjZXNzIHRvIGZpZWxkIGVycm9yc1xuICBmaWVsZEVycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuICBmaWVsZEFzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPj47XG5cbiAgLy8gS2VlcCB2YWx1ZXMgdHJlZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICB2YWx1ZXM6IFNpZ25hbFRyZWU8VD47XG5cbiAgLy8gQ2xlYW51cCBoZWxwZXJzIHRvIHRlYXIgZG93biBzdWJzY3JpcHRpb25zIGNyZWF0ZWQgZm9yIGJyaWRnZSBsYXllclxuICBkZXN0cm95KCk6IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRm9ybVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgKSB7XG4gICAgc3VwZXIoJ0Zvcm0gdmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnRm9ybVZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxudHlwZSBTeW5jVmFsaWRhdG9yTWFwID0gUmVjb3JkPHN0cmluZywgKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmcgfCBudWxsPjtcbnR5cGUgQXN5bmNWYWxpZGF0b3JNYXAgPSBSZWNvcmQ8c3RyaW5nLCBGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj4+O1xuXG5jb25zdCBTWU5DX0VSUk9SX0tFWSA9ICdzaWduYWx0cmVlJztcbmNvbnN0IEFTWU5DX0VSUk9SX0tFWSA9ICdzaWduYWx0cmVlQXN5bmMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVRJTElUWSBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGT1JNIFRSRUUgSU1QTEVNRU5UQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBpbml0aWFsVmFsdWVzOiBULFxuICBjb25maWc6IEZvcm1UcmVlT3B0aW9uczxUPiA9IHt9XG4pOiBGb3JtVHJlZTxUPiB7XG4gIGNvbnN0IHtcbiAgICB2YWxpZGF0b3JzOiBiYXNlVmFsaWRhdG9ycyA9IHt9LFxuICAgIGFzeW5jVmFsaWRhdG9yczogYmFzZUFzeW5jVmFsaWRhdG9ycyA9IHt9LFxuICAgIGRlc3Ryb3lSZWY6IHByb3ZpZGVkRGVzdHJveVJlZixcbiAgICBmaWVsZENvbmZpZ3MgPSB7fSxcbiAgICBjb25kaXRpb25hbHMgPSBbXSxcbiAgICBwZXJzaXN0S2V5LFxuICAgIHN0b3JhZ2UsXG4gICAgcGVyc2lzdERlYm91bmNlTXMgPSAxMDAsXG4gICAgdmFsaWRhdGlvbkJhdGNoTXMgPSAwLFxuICAgIC4uLnRyZWVDb25maWdcbiAgfSA9IGNvbmZpZztcblxuICBjb25zdCBzeW5jVmFsaWRhdG9ycyA9IG5vcm1hbGl6ZVN5bmNWYWxpZGF0b3JzKGJhc2VWYWxpZGF0b3JzLCBmaWVsZENvbmZpZ3MpO1xuICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBub3JtYWxpemVBc3luY1ZhbGlkYXRvcnMoXG4gICAgYmFzZUFzeW5jVmFsaWRhdG9ycyxcbiAgICBmaWVsZENvbmZpZ3NcbiAgKTtcblxuICBjb25zdCB7IHZhbHVlczogaHlkcmF0ZWRJbml0aWFsVmFsdWVzIH0gPSBoeWRyYXRlSW5pdGlhbFZhbHVlcyhcbiAgICBpbml0aWFsVmFsdWVzLFxuICAgIHBlcnNpc3RLZXksXG4gICAgc3RvcmFnZVxuICApO1xuICBjb25zdCBpbml0aWFsU25hcHNob3QgPSBkZWVwQ2xvbmUoaHlkcmF0ZWRJbml0aWFsVmFsdWVzKTtcblxuICBjb25zdCB2YWx1ZXNUcmVlID0gc2lnbmFsVHJlZShoeWRyYXRlZEluaXRpYWxWYWx1ZXMsIHRyZWVDb25maWcpO1xuICBhc3NlcnRUcmVlTm9kZTxUPih2YWx1ZXNUcmVlLnN0YXRlKTtcbiAgY29uc3QgZmxhdHRlbmVkU3RhdGUgPSB2YWx1ZXNUcmVlLnN0YXRlO1xuXG4gIGVuaGFuY2VBcnJheXNSZWN1cnNpdmVseShcbiAgICBmbGF0dGVuZWRTdGF0ZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk7XG5cbiAgY29uc3QgZm9ybUdyb3VwID0gY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICAgIGh5ZHJhdGVkSW5pdGlhbFZhbHVlcyxcbiAgICAnJyxcbiAgICBzeW5jVmFsaWRhdG9ycyxcbiAgICBhc3luY1ZhbGlkYXRvcnNcbiAgKSBhcyBGb3JtR3JvdXA7XG5cbiAgY29uc3QgZGVzdHJveVJlZiA9IHByb3ZpZGVkRGVzdHJveVJlZiA/PyB0cnlJbmplY3REZXN0cm95UmVmKCk7XG4gIGNvbnN0IGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgY29uc3QgYXN5bmNFcnJvcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICBjb25zdCB0b3VjaGVkID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSk7XG4gIGNvbnN0IGFzeW5jVmFsaWRhdGluZyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuICBjb25zdCBkaXJ0eSA9IHNpZ25hbChmb3JtR3JvdXAuZGlydHkpO1xuICBjb25zdCB2YWxpZCA9IHNpZ25hbChmb3JtR3JvdXAudmFsaWQgJiYgIWZvcm1Hcm91cC5wZW5kaW5nKTtcbiAgY29uc3Qgc3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgcmVmcmVzaFJ1bm5lciA9ICgpID0+IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGNvbGxlY3RDb250cm9sU25hcHNob3QoZm9ybUdyb3VwKTtcbiAgICBlcnJvcnMuc2V0KHNuYXBzaG90LnN5bmNFcnJvcnMpO1xuICAgIGFzeW5jRXJyb3JzLnNldChzbmFwc2hvdC5hc3luY0Vycm9ycyk7XG4gICAgdG91Y2hlZC5zZXQoc25hcHNob3QudG91Y2hlZCk7XG4gICAgYXN5bmNWYWxpZGF0aW5nLnNldChzbmFwc2hvdC5wZW5kaW5nKTtcbiAgICBkaXJ0eS5zZXQoZm9ybUdyb3VwLmRpcnR5KTtcbiAgICB2YWxpZC5zZXQoZm9ybUdyb3VwLnZhbGlkICYmICFmb3JtR3JvdXAucGVuZGluZyk7XG4gIH07XG5cbiAgbGV0IHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmVmcmVzaEFnZ3JlZ2F0ZXMgPSAoaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICBpZiAoaW1tZWRpYXRlIHx8IHZhbGlkYXRpb25CYXRjaE1zIDw9IDApIHtcbiAgICAgIGlmIChyZWZyZXNoVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgICAgIHJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICByZWZyZXNoUnVubmVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgfVxuXG4gICAgcmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgcmVmcmVzaFJ1bm5lcigpO1xuICAgIH0sIHZhbGlkYXRpb25CYXRjaE1zKTtcbiAgfTtcblxuICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcblxuICBjb25zdCBwZXJzaXN0Q29udHJvbGxlciA9IGNyZWF0ZVBlcnNpc3RDb250cm9sbGVyKFxuICAgIGZvcm1Hcm91cCxcbiAgICBwZXJzaXN0S2V5LFxuICAgIHN0b3JhZ2UsXG4gICAgcGVyc2lzdERlYm91bmNlTXMsXG4gICAgY2xlYW51cENhbGxiYWNrc1xuICApO1xuICBwZXJzaXN0Q29udHJvbGxlci5wZXJzaXN0SW1tZWRpYXRlbHkoKTtcblxuICBjb25zdCBmaWVsZEVycm9yS2V5cyA9IG5ldyBTZXQoW1xuICAgIC4uLk9iamVjdC5rZXlzKHN5bmNWYWxpZGF0b3JzKSxcbiAgICAuLi5PYmplY3Qua2V5cyhhc3luY1ZhbGlkYXRvcnMpLFxuICBdKTtcblxuICBjb25zdCBmaWVsZEVycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+ID0ge307XG4gIGNvbnN0IGZpZWxkQXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PiA9IHt9O1xuXG4gIGZpZWxkRXJyb3JLZXlzLmZvckVhY2goKGZpZWxkUGF0aCkgPT4ge1xuICAgIGZpZWxkRXJyb3JzW2ZpZWxkUGF0aF0gPSBjb21wdXRlZCgoKSA9PiBlcnJvcnMoKVtmaWVsZFBhdGhdKTtcbiAgICBmaWVsZEFzeW5jRXJyb3JzW2ZpZWxkUGF0aF0gPSBjb21wdXRlZCgoKSA9PiBhc3luY0Vycm9ycygpW2ZpZWxkUGF0aF0pO1xuICB9KTtcblxuICBjb25zdCBmaWVsZENvbmZpZ0xvb2t1cCA9IChwYXRoOiBzdHJpbmcpID0+XG4gICAgcmVzb2x2ZUZpZWxkQ29uZmlnKGZpZWxkQ29uZmlncywgcGF0aCk7XG5cbiAgY29uc3QgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykuZm9yRWFjaCgoW2tleSwgY2hpbGRdKSA9PiB7XG4gICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGNoaWxkLCBqb2luUGF0aChwYXRoLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBjb25zdCBhcnJheVNpZ25hbCA9IGdldFNpZ25hbEF0UGF0aChmbGF0dGVuZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyYXlTaWduYWwpIHtcbiAgICAgICAgY29ubmVjdEZvcm1BcnJheUFuZFNpZ25hbChcbiAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgIGFycmF5U2lnbmFsIGFzIEVuaGFuY2VkQXJyYXlTaWduYWw8dW5rbm93bj4sXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzeW5jVmFsaWRhdG9ycyxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMsXG4gICAgICAgICAgY2xlYW51cENhbGxiYWNrcyxcbiAgICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZShjaGlsZCwgam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsQXRQYXRoID0gZ2V0U2lnbmFsQXRQYXRoKGZsYXR0ZW5lZFN0YXRlLCBwYXRoKTtcbiAgICBpZiAoc2lnbmFsQXRQYXRoKSB7XG4gICAgICBjb25uZWN0Q29udHJvbEFuZFNpZ25hbChcbiAgICAgICAgY29udHJvbCBhcyBGb3JtQ29udHJvbCxcbiAgICAgICAgc2lnbmFsQXRQYXRoIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+LFxuICAgICAgICBjbGVhbnVwQ2FsbGJhY2tzLFxuICAgICAgICBmaWVsZENvbmZpZ0xvb2t1cChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUoZm9ybUdyb3VwLCAnJyk7XG5cbiAgY29uc3QgY29uZGl0aW9uYWxTdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICBjb25zdCBhcHBseUNvbmRpdGlvbmFscyA9XG4gICAgY29uZGl0aW9uYWxzLmxlbmd0aCA+IDBcbiAgICAgID8gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpIGFzIFQ7XG4gICAgICAgICAgY29uZGl0aW9uYWxzLmZvckVhY2goKHsgd2hlbiwgZmllbGRzIH0pID0+IHtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZpc2libGUgPSB3aGVuKHZhbHVlcyk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgdmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGRQYXRoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkUGF0aCk7XG4gICAgICAgICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGNvbmRpdGlvbmFsU3RhdGUuZ2V0KGZpZWxkUGF0aCk7XG4gICAgICAgICAgICAgIGlmIChwcmV2aW91cyA9PT0gdmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25kaXRpb25hbFN0YXRlLnNldChmaWVsZFBhdGgsIHZpc2libGUpO1xuICAgICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgOiAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgYXBwbHlDb25kaXRpb25hbHMoKTtcblxuICBjb25zdCBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXMoKTtcbiAgICAgIHBlcnNpc3RDb250cm9sbGVyLnNjaGVkdWxlUGVyc2lzdCgpO1xuICAgICAgYXBwbHlDb25kaXRpb25hbHMoKTtcbiAgICB9KVxuICApO1xuICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hBZ2dyZWdhdGVzKCkpXG4gICk7XG4gIGlmIChmb3JtR3JvdXAuZXZlbnRzKSB7XG4gICAgYWdncmVnYXRlU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgZm9ybUdyb3VwLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4gcmVmcmVzaEFnZ3JlZ2F0ZXMoKSlcbiAgICApO1xuICB9XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIGlmIChyZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZWZyZXNoVGltZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRlc3Ryb3lSZWYpIHtcbiAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBjbGVhbnVwQ2FsbGJhY2tzLnNwbGljZSgwKS5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzZXRWYWx1ZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IHRhcmdldFNpZ25hbCA9IGdldFNpZ25hbEF0UGF0aChmbGF0dGVuZWRTdGF0ZSwgZmllbGQpO1xuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcblxuICAgIGlmICh0YXJnZXRTaWduYWwgJiYgJ3NldCcgaW4gdGFyZ2V0U2lnbmFsKSB7XG4gICAgICAodGFyZ2V0U2lnbmFsIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+KS5zZXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbCkge1xuICAgICAgKGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sKS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHVudHlwZWRDb250cm9sID0gY29udHJvbCBhcyBBYnN0cmFjdENvbnRyb2w7XG4gICAgICB1bnR5cGVkQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB1bnR5cGVkQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdW50eXBlZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICBwZXJzaXN0Q29udHJvbGxlci5zY2hlZHVsZVBlcnNpc3QoKTtcbiAgfTtcblxuICBjb25zdCBzZXRWYWx1ZXMgPSAodmFsdWVzOiBQYXJ0aWFsPFQ+KSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHNldFZhbHVlKGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIGZvcm1Hcm91cC5yZXNldChpbml0aWFsU25hcHNob3QpO1xuICAgIHN1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICBwZXJzaXN0Q29udHJvbGxlci5wZXJzaXN0SW1tZWRpYXRlbHkoKTtcbiAgICBhcHBseUNvbmRpdGlvbmFscygpO1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlID0gYXN5bmMgKGZpZWxkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgICAgYXdhaXQgd2FpdEZvclBlbmRpbmcoY29udHJvbCk7XG4gICAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgIGF3YWl0IHdhaXRGb3JQZW5kaW5nKGZvcm1Hcm91cCk7XG4gICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gIH07XG5cbiAgY29uc3Qgc3VibWl0ID0gYXN5bmMgPFRSZXN1bHQ+KFxuICAgIHN1Ym1pdEZuOiAodmFsdWVzOiBUKSA9PiBQcm9taXNlPFRSZXN1bHQ+XG4gICk6IFByb21pc2U8VFJlc3VsdD4gPT4ge1xuICAgIHN1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZSgpO1xuXG4gICAgICBpZiAoIXZhbGlkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZvcm1WYWxpZGF0aW9uRXJyb3IoZXJyb3JzKCksIGFzeW5jRXJyb3JzKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgYXMgVDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdEZuKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgY2xlYW51cENhbGxiYWNrcy5zcGxpY2UoMCkuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1UcmVlOiBGb3JtVHJlZTxUPiA9IHtcbiAgICBzdGF0ZTogZmxhdHRlbmVkU3RhdGUsXG4gICAgJDogZmxhdHRlbmVkU3RhdGUsXG4gICAgZm9ybTogZm9ybUdyb3VwLFxuICAgIGVycm9ycyxcbiAgICBhc3luY0Vycm9ycyxcbiAgICB0b3VjaGVkLFxuICAgIGFzeW5jVmFsaWRhdGluZyxcbiAgICBkaXJ0eSxcbiAgICB2YWxpZCxcbiAgICBzdWJtaXR0aW5nLFxuICAgIHVud3JhcDogKCkgPT4gdmFsdWVzVHJlZSgpLFxuICAgIHNldFZhbHVlLFxuICAgIHNldFZhbHVlcyxcbiAgICByZXNldCxcbiAgICBzdWJtaXQsXG4gICAgdmFsaWRhdGUsXG4gICAgZ2V0RmllbGRFcnJvcjogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBmaWVsZEVycm9yc1tmaWVsZF0gfHwgY29tcHV0ZWQoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICBnZXRGaWVsZEFzeW5jRXJyb3I6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgZmllbGRBc3luY0Vycm9yc1tmaWVsZF0gfHwgY29tcHV0ZWQoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICBnZXRGaWVsZFRvdWNoZWQ6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgY29tcHV0ZWQoKCkgPT4gZm9ybUdyb3VwLmdldChmaWVsZCk/LnRvdWNoZWQgPz8gZmFsc2UpLFxuICAgIGlzRmllbGRWYWxpZDogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgcmV0dXJuICEhY29udHJvbCAmJiBjb250cm9sLnZhbGlkICYmICFjb250cm9sLnBlbmRpbmc7XG4gICAgICB9KSxcbiAgICBpc0ZpZWxkQXN5bmNWYWxpZGF0aW5nOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGNvbXB1dGVkKCgpID0+ICEhZm9ybUdyb3VwLmdldChmaWVsZCk/LnBlbmRpbmcpLFxuICAgIGZpZWxkRXJyb3JzLFxuICAgIGZpZWxkQXN5bmNFcnJvcnMsXG4gICAgdmFsdWVzOiB2YWx1ZXNUcmVlLFxuICAgIGRlc3Ryb3ksXG4gIH07XG5cbiAgcmV0dXJuIGZvcm1UcmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmlydHVhbEZvcm1BcnJheTxUPihcbiAgaXRlbXM6IFRbXSxcbiAgdmlzaWJsZVJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0sXG4gIGNvbnRyb2xGYWN0b3J5OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IEFic3RyYWN0Q29udHJvbCA9ICh2YWx1ZSkgPT5cbiAgICBuZXcgRm9ybUNvbnRyb2wodmFsdWUpXG4pOiBGb3JtQXJyYXkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHZpc2libGVSYW5nZS5zdGFydCk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWF4KHN0YXJ0LCB2aXNpYmxlUmFuZ2UuZW5kKTtcblxuICBjb25zdCBjb250cm9scyA9IGl0ZW1zXG4gICAgLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgLm1hcCgoaXRlbSwgb2Zmc2V0KSA9PiBjb250cm9sRmFjdG9yeShpdGVtLCBzdGFydCArIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzKTtcbn1cblxuZnVuY3Rpb24gZW5oYW5jZUFycmF5c1JlY3Vyc2l2ZWx5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2aXNpdGVkID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpXG4pOiB2b2lkIHtcbiAgaWYgKHZpc2l0ZWQuaGFzKG9iaikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmlzaXRlZC5hZGQob2JqKTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHNpZ25hbFZhbHVlID0gKHZhbHVlIGFzIFNpZ25hbDx1bmtub3duPikoKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNpZ25hbFZhbHVlKSkge1xuICAgICAgICBvYmpba2V5XSA9IGVuaGFuY2VBcnJheSh2YWx1ZSBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duW10+KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICkge1xuICAgICAgZW5oYW5jZUFycmF5c1JlY3Vyc2l2ZWx5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB2aXNpdGVkKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZW5oYW5jZUFycmF5ID0gPFU+KFxuICBhcnJheVNpZ25hbDogV3JpdGFibGVTaWduYWw8VVtdPlxuKTogRW5oYW5jZWRBcnJheVNpZ25hbDxVPiA9PiB7XG4gIGNvbnN0IGVuaGFuY2VkID0gYXJyYXlTaWduYWwgYXMgRW5oYW5jZWRBcnJheVNpZ25hbDxVPjtcblxuICBlbmhhbmNlZC5wdXNoID0gKGl0ZW06IFUpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gWy4uLmFyciwgaXRlbV0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLnJlbW92ZUF0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gYXJyLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgfTtcblxuICBlbmhhbmNlZC5zZXRBdCA9IChpbmRleDogbnVtYmVyLCB2YWx1ZTogVSkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PlxuICAgICAgYXJyLm1hcCgoaXRlbSwgaSkgPT4gKGkgPT09IGluZGV4ID8gdmFsdWUgOiBpdGVtKSlcbiAgICApO1xuICB9O1xuXG4gIGVuaGFuY2VkLmluc2VydEF0ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFUpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gW1xuICAgICAgLi4uYXJyLnNsaWNlKDAsIGluZGV4KSxcbiAgICAgIGl0ZW0sXG4gICAgICAuLi5hcnIuc2xpY2UoaW5kZXgpLFxuICAgIF0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLm1vdmUgPSAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0FyciA9IFsuLi5hcnJdO1xuICAgICAgY29uc3QgW2l0ZW1dID0gbmV3QXJyLnNwbGljZShmcm9tLCAxKTtcbiAgICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3QXJyLnNwbGljZSh0bywgMCwgaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyO1xuICAgIH0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLmNsZWFyID0gKCkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnNldChbXSk7XG4gIH07XG5cbiAgcmV0dXJuIGVuaGFuY2VkO1xufTtcblxuZnVuY3Rpb24gZ2V0U2lnbmFsQXRQYXRoPFQ+KFxuICBub2RlOiBUcmVlTm9kZTxUPixcbiAgcGF0aDogc3RyaW5nXG4pOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPiB8IG51bGwge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlZ21lbnRzID0gcGFyc2VQYXRoKHBhdGgpO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IG5vZGU7XG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgaWYgKCFjdXJyZW50IHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChjdXJyZW50KSkge1xuICAgIHJldHVybiBjdXJyZW50IGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKHBhcmVudDogc3RyaW5nLCBzZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGFyZW50ID8gYCR7cGFyZW50fS4ke3NlZ21lbnR9YCA6IHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHdyYXBTeW5jVmFsaWRhdG9yKFxuICB2YWxpZGF0b3I6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHwgbnVsbFxuKTogQW5ndWxhclZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiByZXN1bHQgPyB7IFtTWU5DX0VSUk9SX0tFWV06IHJlc3VsdCB9IDogbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gd3JhcEFzeW5jVmFsaWRhdG9yKFxuICB2YWxpZGF0b3I6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPlxuKTogQW5ndWxhckFzeW5jVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gYXN5bmMgKGNvbnRyb2wpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWF5YmVBc3luYyA9IHZhbGlkYXRvcihjb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gaXNPYnNlcnZhYmxlKG1heWJlQXN5bmMpXG4gICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWF5YmVBc3luYylcbiAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgcmV0dXJuIHJlc29sdmVkID8geyBbQVNZTkNfRVJST1JfS0VZXTogcmVzb2x2ZWQgfSA6IG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBbQVNZTkNfRVJST1JfS0VZXTogJ1ZhbGlkYXRpb24gZXJyb3InIH07XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gIHZhbHVlOiB1bmtub3duLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXBcbik6IEFic3RyYWN0Q29udHJvbCB7XG4gIGNvbnN0IHN5bmNWYWxpZGF0b3IgPSBmaW5kVmFsaWRhdG9yKHZhbGlkYXRvcnMsIHBhdGgpO1xuICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IGZpbmRWYWxpZGF0b3IoYXN5bmNWYWxpZGF0b3JzLCBwYXRoKTtcblxuICBjb25zdCBzeW5jRm5zID0gc3luY1ZhbGlkYXRvclxuICAgID8gW3dyYXBTeW5jVmFsaWRhdG9yKHN5bmNWYWxpZGF0b3IpXVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhc3luY0ZucyA9IGFzeW5jVmFsaWRhdG9yXG4gICAgPyBbd3JhcEFzeW5jVmFsaWRhdG9yKGFzeW5jVmFsaWRhdG9yKV1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjb250cm9scyA9IHZhbHVlLm1hcCgoaXRlbSwgaW5kZXgpID0+XG4gICAgICBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGpvaW5QYXRoKHBhdGgsIFN0cmluZyhpbmRleCkpLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnNcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzLCBzeW5jRm5zLCBhc3luY0Zucyk7XG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICBjb25zdCBjb250cm9sczogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgY29udHJvbHNba2V5XSA9IGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIGpvaW5QYXRoKHBhdGgsIGtleSksXG4gICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIHtcbiAgICAgIHZhbGlkYXRvcnM6IHN5bmNGbnMsXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IGFzeW5jRm5zLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSwge1xuICAgIHZhbGlkYXRvcnM6IHN5bmNGbnMsXG4gICAgYXN5bmNWYWxpZGF0b3JzOiBhc3luY0ZucyxcbiAgICBub25OdWxsYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0Q29udHJvbEFuZFNpZ25hbChcbiAgY29udHJvbDogRm9ybUNvbnRyb2wsXG4gIHZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPixcbiAgY2xlYW51cENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4sXG4gIGZpZWxkQ29uZmlnPzogRmllbGRDb25maWdcbik6IHZvaWQge1xuICBsZXQgdXBkYXRpbmdGcm9tQ29udHJvbCA9IGZhbHNlO1xuICBsZXQgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG4gIGxldCB2ZXJzaW9uQ291bnRlciA9IDA7XG4gIGxldCBsYXN0Q29udHJvbFZlcnNpb24gPSAwO1xuICBsZXQgY29udHJvbERlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGRlYm91bmNlTXMgPSBmaWVsZENvbmZpZz8uZGVib3VuY2VNcyA/PyAwO1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gdmFsdWVTaWduYWwuc2V0LmJpbmQodmFsdWVTaWduYWwpO1xuICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IHZhbHVlU2lnbmFsLnVwZGF0ZS5iaW5kKHZhbHVlU2lnbmFsKTtcblxuICBjb25zdCBhcHBseUNvbnRyb2xWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IHRydWU7XG4gICAgaWYgKCFPYmplY3QuaXMoY29udHJvbC52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICBjb25zdCB1bnR5cGVkQ29udHJvbCA9IGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sO1xuICAgICAgdW50eXBlZENvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgdW50eXBlZENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG4gIH07XG5cbiAgdmFsdWVTaWduYWwuc2V0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFZlcnNpb24gPSArK3ZlcnNpb25Db3VudGVyO1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICBpZiAodXBkYXRpbmdGcm9tQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobGFzdENvbnRyb2xWZXJzaW9uID4gY3VycmVudFZlcnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwbHlDb250cm9sVmFsdWUodmFsdWUpO1xuICB9O1xuXG4gIHZhbHVlU2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVyKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIodmFsdWVTaWduYWwoKSk7XG4gICAgdmFsdWVTaWduYWwuc2V0KG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hVcGRhdGVGcm9tQ29udHJvbCA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSB0cnVlO1xuICAgIGxhc3RDb250cm9sVmVyc2lvbiA9ICsrdmVyc2lvbkNvdW50ZXI7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUpO1xuICAgIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb250cm9sQ2hhbmdlID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHVwZGF0aW5nRnJvbVNpZ25hbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkZWJvdW5jZU1zID4gMCkge1xuICAgICAgaWYgKGNvbnRyb2xEZWJvdW5jZVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChjb250cm9sRGVib3VuY2VUaW1lcik7XG4gICAgICB9XG4gICAgICBjb250cm9sRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb250cm9sRGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgICAgIHB1c2hVcGRhdGVGcm9tQ29udHJvbCh2YWx1ZSk7XG4gICAgICB9LCBkZWJvdW5jZU1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdXNoVXBkYXRlRnJvbUNvbnRyb2wodmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICBoYW5kbGVDb250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgfSk7XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB2YWx1ZVNpZ25hbC5zZXQgPSBvcmlnaW5hbFNldDtcbiAgICB2YWx1ZVNpZ25hbC51cGRhdGUgPSBvcmlnaW5hbFVwZGF0ZTtcbiAgICBpZiAoY29udHJvbERlYm91bmNlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChjb250cm9sRGVib3VuY2VUaW1lcik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdEZvcm1BcnJheUFuZFNpZ25hbChcbiAgZm9ybUFycmF5OiBGb3JtQXJyYXksXG4gIGFycmF5U2lnbmFsOiBFbmhhbmNlZEFycmF5U2lnbmFsPHVua25vd24+LFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+LFxuICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZTogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogc3RyaW5nKSA9PiB2b2lkXG4pOiB2b2lkIHtcbiAgbGV0IHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgbGV0IHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gYXJyYXlTaWduYWwuc2V0LmJpbmQoYXJyYXlTaWduYWwpO1xuICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGFycmF5U2lnbmFsLnVwZGF0ZS5iaW5kKGFycmF5U2lnbmFsKTtcblxuICBhcnJheVNpZ25hbC5zZXQgPSAodmFsdWU6IHVua25vd25bXSkgPT4ge1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICBpZiAodXBkYXRpbmdGcm9tQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGluZ0Zyb21TaWduYWwgPSB0cnVlO1xuICAgIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgICBmb3JtQXJyYXksXG4gICAgICB2YWx1ZSxcbiAgICAgIHBhdGgsXG4gICAgICB2YWxpZGF0b3JzLFxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmVcbiAgICApO1xuICAgIGZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuICB9O1xuXG4gIGFycmF5U2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVyKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIoYXJyYXlTaWduYWwoKSk7XG4gICAgYXJyYXlTaWduYWwuc2V0KG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgIGlmICh1cGRhdGluZ0Zyb21TaWduYWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUgYXMgdW5rbm93bltdKTtcbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH0pO1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgYXJyYXlTaWduYWwuc2V0ID0gb3JpZ2luYWxTZXQ7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlID0gb3JpZ2luYWxVcGRhdGU7XG4gIH0pO1xuXG4gIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgZm9ybUFycmF5LFxuICAgIGFycmF5U2lnbmFsKCksXG4gICAgcGF0aCxcbiAgICB2YWxpZGF0b3JzLFxuICAgIGFzeW5jVmFsaWRhdG9ycyxcbiAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICApO1xufVxuXG5mdW5jdGlvbiBzeW5jRm9ybUFycmF5RnJvbVZhbHVlKFxuICBmb3JtQXJyYXk6IEZvcm1BcnJheSxcbiAgbmV4dFZhbHVlOiB1bmtub3duW10sXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsaWRhdG9yczogU3luY1ZhbGlkYXRvck1hcCxcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvck1hcCxcbiAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmU6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IHN0cmluZykgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShuZXh0VmFsdWUpKSB7XG4gICAgbmV4dFZhbHVlID0gW107XG4gIH1cblxuICB3aGlsZSAoZm9ybUFycmF5Lmxlbmd0aCA+IG5leHRWYWx1ZS5sZW5ndGgpIHtcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoZm9ybUFycmF5Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgbmV4dFZhbHVlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRQYXRoID0gam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xuXG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgY29uc3QgY29udHJvbCA9IGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICAgICAgaXRlbSxcbiAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4LCBjb250cm9sKTtcbiAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGNvbnRyb2wsIGNoaWxkUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0aW5nIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBzeW5jRm9ybUFycmF5RnJvbVZhbHVlKFxuICAgICAgICBleGlzdGluZyxcbiAgICAgICAgQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbXSxcbiAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnMsXG4gICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZyBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoaXRlbSkpIHtcbiAgICAgICAgZXhpc3Rpbmcuc2V0VmFsdWUoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LmlzKGV4aXN0aW5nLnZhbHVlLCBpdGVtKSkge1xuICAgICAgY29uc3QgdW50eXBlZEV4aXN0aW5nID0gZXhpc3RpbmcgYXMgQWJzdHJhY3RDb250cm9sO1xuICAgICAgdW50eXBlZEV4aXN0aW5nLnNldFZhbHVlKGl0ZW0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgQ29udHJvbFNuYXBzaG90IHtcbiAgc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHRvdWNoZWQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBwZW5kaW5nOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuZnVuY3Rpb24gY29sbGVjdENvbnRyb2xTbmFwc2hvdChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBDb250cm9sU25hcHNob3Qge1xuICBjb25zdCBzbmFwc2hvdDogQ29udHJvbFNuYXBzaG90ID0ge1xuICAgIHN5bmNFcnJvcnM6IHt9LFxuICAgIGFzeW5jRXJyb3JzOiB7fSxcbiAgICB0b3VjaGVkOiB7fSxcbiAgICBwZW5kaW5nOiB7fSxcbiAgfTtcblxuICB0cmF2ZXJzZUNvbnRyb2xzKFxuICAgIGNvbnRyb2wsXG4gICAgKGN1cnJlbnRQYXRoLCBjdXJyZW50Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Q29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgIHNuYXBzaG90LnRvdWNoZWRbY3VycmVudFBhdGhdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRDb250cm9sLnBlbmRpbmcpIHtcbiAgICAgICAgc25hcHNob3QucGVuZGluZ1tjdXJyZW50UGF0aF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjdXJyZW50Q29udHJvbC5lcnJvcnMgYXMgVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG4gICAgICBpZiAoIWVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN5bmNNZXNzYWdlID0gZXJyb3JzW1NZTkNfRVJST1JfS0VZXTtcbiAgICAgIGlmICh0eXBlb2Ygc3luY01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNuYXBzaG90LnN5bmNFcnJvcnNbY3VycmVudFBhdGhdID0gc3luY01lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFzeW5jTWVzc2FnZSA9IGVycm9yc1tBU1lOQ19FUlJPUl9LRVldO1xuICAgICAgaWYgKHR5cGVvZiBhc3luY01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNuYXBzaG90LmFzeW5jRXJyb3JzW2N1cnJlbnRQYXRoXSA9IGFzeW5jTWVzc2FnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiB0cmF2ZXJzZUNvbnRyb2xzKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIHZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdm9pZCxcbiAgcGF0aCA9ICcnXG4pOiB2b2lkIHtcbiAgdmlzaXRvcihwYXRoLCBjb250cm9sKTtcblxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNoaWxkXSkgPT4ge1xuICAgICAgdHJhdmVyc2VDb250cm9scyhjaGlsZCwgdmlzaXRvciwgam9pblBhdGgocGF0aCwga2V5KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgdHJhdmVyc2VDb250cm9scyhjaGlsZCwgdmlzaXRvciwgam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JQZW5kaW5nKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWNvbnRyb2wucGVuZGluZykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBlbmRpbmcpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgISF2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICApO1xufVxuXG5mdW5jdGlvbiB0cnlJbmplY3REZXN0cm95UmVmKCk6IERlc3Ryb3lSZWYgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTeW5jVmFsaWRhdG9ycyhcbiAgYmFzZTogU3luY1ZhbGlkYXRvck1hcCxcbiAgZmllbGRDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZz5cbik6IFN5bmNWYWxpZGF0b3JNYXAge1xuICBjb25zdCBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KCk7XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgdmFsaWRhdG9yXSBvZiBPYmplY3QuZW50cmllcyhiYXNlKSkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYnVja2V0cy5nZXQocGF0aCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaCh2YWxpZGF0b3IpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3BhdGgsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRDb25maWdzKSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0b1ZhbGlkYXRvckFycmF5KGNvbmZpZy52YWxpZGF0b3JzKTtcbiAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IGJ1Y2tldHMuZ2V0KHBhdGgpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2goLi4udmFsaWRhdG9ycyk7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZDogU3luY1ZhbGlkYXRvck1hcCA9IHt9O1xuICBidWNrZXRzLmZvckVhY2goKHZhbGlkYXRvcnMsIHBhdGgpID0+IHtcbiAgICBub3JtYWxpemVkW3BhdGhdID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4geyAuLi5iYXNlLCAuLi5ub3JtYWxpemVkIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFzeW5jVmFsaWRhdG9ycyhcbiAgYmFzZTogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGZpZWxkQ29uZmlnczogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+XG4pOiBBc3luY1ZhbGlkYXRvck1hcCB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8Rm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+Pj4oKTtcblxuICBmb3IgKGNvbnN0IFtwYXRoLCB2YWxpZGF0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGJhc2UpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHZhbGlkYXRvcik7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZENvbmZpZ3MpKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRvVmFsaWRhdG9yQXJyYXkoY29uZmlnLmFzeW5jVmFsaWRhdG9ycyk7XG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKC4uLnZhbGlkYXRvcnMpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IEFzeW5jVmFsaWRhdG9yTWFwID0ge307XG4gIGJ1Y2tldHMuZm9yRWFjaCgodmFsaWRhdG9ycywgcGF0aCkgPT4ge1xuICAgIG5vcm1hbGl6ZWRbcGF0aF0gPSBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgbWF5YmVBc3luYyA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzT2JzZXJ2YWJsZShtYXliZUFzeW5jKVxuICAgICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWF5YmVBc3luYylcbiAgICAgICAgICA6IGF3YWl0IG1heWJlQXN5bmM7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4geyAuLi5iYXNlLCAuLi5ub3JtYWxpemVkIH07XG59XG5cbmZ1bmN0aW9uIHRvVmFsaWRhdG9yQXJyYXk8VD4oaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBUPiB8IFRbXSk6IFRbXSB7XG4gIGlmICghaW5wdXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGlucHV0KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUluaXRpYWxWYWx1ZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgaW5pdGlhbFZhbHVlczogVCxcbiAgcGVyc2lzdEtleT86IHN0cmluZyxcbiAgc3RvcmFnZT86IFBpY2s8U3RvcmFnZSwgJ2dldEl0ZW0nIHwgJ3NldEl0ZW0nIHwgJ3JlbW92ZUl0ZW0nPlxuKTogeyB2YWx1ZXM6IFQgfSB7XG4gIGNvbnN0IGJhc2VDbG9uZSA9IGRlZXBDbG9uZShpbml0aWFsVmFsdWVzKTtcblxuICBpZiAoIXBlcnNpc3RLZXkgfHwgIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4geyB2YWx1ZXM6IGJhc2VDbG9uZSB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdG9yZWRSYXcgPSBzdG9yYWdlLmdldEl0ZW0ocGVyc2lzdEtleSk7XG4gICAgaWYgKCFzdG9yZWRSYXcpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlczogYmFzZUNsb25lIH07XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RvcmVkUmF3KSBhcyBQYXJ0aWFsPFQ+O1xuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlRGVlcChiYXNlQ2xvbmUsIHBhcnNlZCk7XG4gICAgcmV0dXJuIHsgdmFsdWVzOiBtZXJnZWQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgdmFsdWVzOiBiYXNlQ2xvbmUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRUcmVlTm9kZTxUPihzdGF0ZTogdW5rbm93bik6IGFzc2VydHMgc3RhdGUgaXMgVHJlZU5vZGU8VD4ge1xuICBpZiAoIXN0YXRlIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUgc3RydWN0dXJlIGZvciBmb3JtIHRyZWUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRmllbGRDb25maWcoXG4gIGZpZWxkQ29uZmlnczogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+LFxuICBwYXRoOiBzdHJpbmdcbik6IEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpZWxkQ29uZmlnc1twYXRoXSkge1xuICAgIHJldHVybiBmaWVsZENvbmZpZ3NbcGF0aF07XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmllbGRDb25maWdzKTtcbiAgbGV0IG1hdGNoOiB7IGtleTogc3RyaW5nOyBjb25maWc6IEZpZWxkQ29uZmlnIH0gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICgha2V5LmluY2x1ZGVzKCcqJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobWF0Y2hQYXRoKGtleSwgcGF0aCkpIHtcbiAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2gua2V5Lmxlbmd0aCA8IGtleS5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2ggPSB7IGtleSwgY29uZmlnOiBmaWVsZENvbmZpZ3Nba2V5XSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaC5jb25maWc7XG4gIH1cblxuICByZXR1cm4gZmllbGRDb25maWdzWycqJ107XG59XG5cbmZ1bmN0aW9uIGZpbmRWYWxpZGF0b3I8VD4obWFwOiBSZWNvcmQ8c3RyaW5nLCBUPiwgcGF0aDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmIChtYXBbcGF0aF0pIHtcbiAgICByZXR1cm4gbWFwW3BhdGhdO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IFQgfSB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWFwKSkge1xuICAgIGlmICgha2V5LmluY2x1ZGVzKCcqJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobWF0Y2hQYXRoKGtleSwgcGF0aCkpIHtcbiAgICAgIGlmICghY2FuZGlkYXRlIHx8IGNhbmRpZGF0ZS5rZXkubGVuZ3RoIDwga2V5Lmxlbmd0aCkge1xuICAgICAgICBjYW5kaWRhdGUgPSB7IGtleSwgdmFsdWU6IG1hcFtrZXldIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZSkge1xuICAgIHJldHVybiBjYW5kaWRhdGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gbWFwWycqJ107XG59XG5cbmludGVyZmFjZSBQZXJzaXN0Q29udHJvbGxlciB7XG4gIHNjaGVkdWxlUGVyc2lzdDogKCkgPT4gdm9pZDtcbiAgcGVyc2lzdEltbWVkaWF0ZWx5OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQZXJzaXN0Q29udHJvbGxlcihcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAsXG4gIHBlcnNpc3RLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RvcmFnZTogUGljazxTdG9yYWdlLCAnZ2V0SXRlbScgfCAnc2V0SXRlbScgfCAncmVtb3ZlSXRlbSc+IHwgdW5kZWZpbmVkLFxuICBkZWJvdW5jZU1zOiBudW1iZXIsXG4gIGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+XG4pOiBQZXJzaXN0Q29udHJvbGxlciB7XG4gIGlmICghcGVyc2lzdEtleSB8fCAhc3RvcmFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlZHVsZVBlcnNpc3Q6ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIHBlcnNpc3RJbW1lZGlhdGVseTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgcGVyc2lzdCA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgIHN0b3JhZ2Uuc2V0SXRlbShwZXJzaXN0S2V5LCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cgcGVyc2lzdGVuY2UgZXJyb3JzIHRvIGF2b2lkIGJyZWFraW5nIGZvcm0gdXBkYXRlc1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzY2hlZHVsZVBlcnNpc3QgPSAoKSA9PiB7XG4gICAgaWYgKGRlYm91bmNlTXMgPD0gMCkge1xuICAgICAgcGVyc2lzdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG5cbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgcGVyc2lzdCgpO1xuICAgIH0sIGRlYm91bmNlTXMpO1xuICB9O1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzY2hlZHVsZVBlcnNpc3QsXG4gICAgcGVyc2lzdEltbWVkaWF0ZWx5OiBwZXJzaXN0LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5HVUxBUiBESVJFQ1RJVkVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2ltcGxlIGRpcmVjdGl2ZSBmb3IgdHdvLXdheSBiaW5kaW5nIHdpdGggc2lnbmFsc1xuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2lnbmFsVHJlZVNpZ25hbFZhbHVlXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2lnbmFsVmFsdWVEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2lnbmFsVmFsdWVEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgc2lnbmFsVHJlZVNpZ25hbFZhbHVlITogV3JpdGFibGVTaWduYWw8dW5rbm93bj47XG4gIEBPdXRwdXQoKSBzaWduYWxUcmVlU2lnbmFsVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIEVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZSgpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQ/LnZhbHVlO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgdGhpcy5zaWduYWxUcmVlU2lnbmFsVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgaGFuZGxlQmx1cigpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgaXNEaXNhYmxlZFxuICAgICk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVYUE9SVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBTSUdOQUxfRk9STV9ESVJFQ1RJVkVTID0gW1NpZ25hbFZhbHVlRGlyZWN0aXZlXTtcbiJdfQ==","export function required(message = 'Required') {\n return (value) => (!value ? message : null);\n}\nexport function email(message = 'Invalid email') {\n return (value) => {\n const strValue = value;\n return strValue && !strValue.includes('@') ? message : null;\n };\n}\nexport function minLength(min, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Min ${min} characters`;\n return strValue && strValue.length < min ? errorMsg : null;\n };\n}\nexport function maxLength(max, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Max ${max} characters`;\n return strValue && strValue.length > max ? errorMsg : null;\n };\n}\nexport function pattern(regex, message = 'Invalid format') {\n return (value) => {\n const strValue = value;\n return strValue && !regex.test(strValue) ? message : null;\n };\n}\nexport function min(min, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at least ${min}`;\n return numValue < min ? errorMsg : null;\n };\n}\nexport function max(max, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at most ${max}`;\n return numValue > max ? errorMsg : null;\n };\n}\nexport function compose(validators) {\n return (value) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) {\n return error;\n }\n }\n return null;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVU7SUFDM0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBaUJELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBTyxHQUFHLGVBQWU7SUFDN0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUNwRCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxPQUFnQjtJQUNyRCxPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBZSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3BELE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxPQUFPLENBQ3JCLEtBQWEsRUFDYixPQUFPLEdBQUcsZ0JBQWdCO0lBRTFCLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsT0FBTyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWdCO0lBQy9DLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDL0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQTRCO0lBQ2xELE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVHJlZS1zaGFrZWFibGUgdmFsaWRhdG9yIGZ1bmN0aW9ucyBmb3IgZm9ybSBmaWVsZHNcbiAqXG4gKiBUaGVzZSB2YWxpZGF0b3JzIGFyZSBleHBvcnRlZCBhcyBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0byBlbmFibGVcbiAqIHRyZWUtc2hha2luZy4gT25seSB0aGUgdmFsaWRhdG9ycyB5b3UgYWN0dWFsbHkgdXNlIHdpbGwgYmUgaW5jbHVkZWRcbiAqIGluIHlvdXIgYnVuZGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL25nLWZvcm1zJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVxdWlyZWQgZmllbGQgdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBDdXN0b20gZXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogXCJSZXF1aXJlZFwiKVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlcnJvciBtZXNzYWdlIGlmIHZhbHVlIGlzIGZhbHN5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIG5hbWU6IHJlcXVpcmVkKCksXG4gKiAgICAgZW1haWw6IHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlID0gJ1JlcXVpcmVkJyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKCF2YWx1ZSA/IG1lc3NhZ2UgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVtYWlsIGZvcm1hdCB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZW1haWxcIilcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgQCBzeW1ib2xcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgZW1haWw6IGVtYWlsKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2UgPSAnSW52YWxpZCBlbWFpbCcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXN0clZhbHVlLmluY2x1ZGVzKCdAJykgPyBtZXNzYWdlIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWluaW11bSBsZW5ndGggdmFsaWRhdG9yIGZvciBzdHJpbmdzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBwYXNzd29yZDogbWluTGVuZ3RoKDgpLFxuICogICAgIGRlc2NyaXB0aW9uOiBtaW5MZW5ndGgoMTAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGF0IGxlYXN0IDEwIGNoYXJhY3RlcnMnKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNaW4gJHttaW59IGNoYXJhY3RlcnNgO1xuICAgIHJldHVybiBzdHJWYWx1ZSAmJiBzdHJWYWx1ZS5sZW5ndGggPCBtaW4gPyBlcnJvck1zZyA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1heGltdW0gbGVuZ3RoIHZhbGlkYXRvciBmb3Igc3RyaW5nc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICB1c2VybmFtZTogbWF4TGVuZ3RoKDIwKSxcbiAqICAgICBiaW86IG1heExlbmd0aCg1MDAsICdCaW8gbXVzdCBiZSB1bmRlciA1MDAgY2hhcmFjdGVycycpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhMZW5ndGgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE1heCAke21heH0gY2hhcmFjdGVyc2A7XG4gICAgcmV0dXJuIHN0clZhbHVlICYmIHN0clZhbHVlLmxlbmd0aCA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnZXggcGF0dGVybiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gcmVnZXggLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0XG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZm9ybWF0XCIpXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB0ZXN0cyB2YWx1ZSBhZ2FpbnN0IHJlZ2V4XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIHBob25lOiBwYXR0ZXJuKC9eXFxkezN9LVxcZHszfS1cXGR7NH0kLywgJ1Bob25lIG11c3QgYmUgaW4gZm9ybWF0OiAxMjMtNDU2LTc4OTAnKSxcbiAqICAgICB6aXBDb2RlOiBwYXR0ZXJuKC9eXFxkezV9JC8sICdaaXAgY29kZSBtdXN0IGJlIDUgZGlnaXRzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdHRlcm4oXG4gIHJlZ2V4OiBSZWdFeHAsXG4gIG1lc3NhZ2UgPSAnSW52YWxpZCBmb3JtYXQnXG4pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXJlZ2V4LnRlc3Qoc3RyVmFsdWUpID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1pbmltdW0gdmFsdWUgdmFsaWRhdG9yIGZvciBudW1iZXJzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIG51bWVyaWMgbWluaW11bVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBhZ2U6IG1pbigxOCwgJ011c3QgYmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1pbigxKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSB2YWx1ZSBhcyBudW1iZXI7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNdXN0IGJlIGF0IGxlYXN0ICR7bWlufWA7XG4gICAgcmV0dXJuIG51bVZhbHVlIDwgbWluID8gZXJyb3JNc2cgOiBudWxsO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXhpbXVtIHZhbHVlIHZhbGlkYXRvciBmb3IgbnVtYmVyc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBudW1lcmljIG1heGltdW1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgYWdlOiBtYXgoMTIwLCAnTXVzdCBiZSB1bmRlciAxMjAgeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1heCgxMDApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE11c3QgYmUgYXQgbW9zdCAke21heH1gO1xuICAgIHJldHVybiBudW1WYWx1ZSA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSB2YWxpZGF0b3JzIGludG8gYSBzaW5nbGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHZhbGlkYXRvcnMgLSBBcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIENvbWJpbmVkIHZhbGlkYXRvciB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiBjb21wb3NlKFtcbiAqICAgICAgIHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpLFxuICogICAgICAgZW1haWwoJ0ludmFsaWQgZW1haWwgZm9ybWF0JyksXG4gKiAgICAgICBwYXR0ZXJuKC9AY29tcGFueVxcLmNvbSQvLCAnTXVzdCBiZSBhIGNvbXBhbnkgZW1haWwnKVxuICogICAgIF0pXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlKHZhbGlkYXRvcnM6IEZpZWxkVmFsaWRhdG9yW10pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cbiJdfQ==","import { firstValueFrom, isObservable } from 'rxjs';\nexport function unique(checkFn, message = 'Already exists') {\n return async (value) => {\n if (!value)\n return null;\n const exists = await checkFn(value);\n return exists ? message : null;\n };\n}\nexport function debounce(validator, delayMs) {\n let timeoutId;\n return async (value) => {\n return new Promise((resolve) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(async () => {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n resolve(result);\n }, delayMs);\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL2FzeW5jLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUErQnBELE1BQU0sVUFBVSxNQUFNLENBQ3BCLE9BQTZDLEVBQzdDLE9BQU8sR0FBRyxnQkFBZ0I7SUFFMUIsT0FBTyxLQUFLLEVBQUUsS0FBYyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixTQUE0QyxFQUM1QyxPQUFlO0lBRWYsSUFBSSxTQUF3QyxDQUFDO0lBRTdDLE9BQU8sS0FBSyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDaEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUNyQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNsQyxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmVlLXNoYWtlYWJsZSBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zIGZvciBmb3JtIGZpZWxkc1xuICovXG5cbmltcG9ydCB0eXBlIHsgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSAnLi9uZy1mb3Jtcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhc3luYyB1bmlxdWVuZXNzIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSBjaGVja0ZuIC0gQXN5bmMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdmFsdWUgYWxyZWFkeSBleGlzdHNcbiAqIEBwYXJhbSBtZXNzYWdlIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IFwiQWxyZWFkeSBleGlzdHNcIilcbiAqIEByZXR1cm5zIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiB1bmlxdWUoXG4gKiAgICAgICBhc3luYyAoZW1haWwpID0+IHtcbiAqICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jaGVjay1lbWFpbD9lbWFpbD0ke2VtYWlsfWApO1xuICogICAgICAgICBjb25zdCB7IGV4aXN0cyB9ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICogICAgICAgICByZXR1cm4gZXhpc3RzO1xuICogICAgICAgfSxcbiAqICAgICAgICdUaGlzIGVtYWlsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCdcbiAqICAgICApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoXG4gIGNoZWNrRm46ICh2YWx1ZTogdW5rbm93bikgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgbWVzc2FnZSA9ICdBbHJlYWR5IGV4aXN0cydcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBjaGVja0ZuKHZhbHVlKTtcbiAgICByZXR1cm4gZXhpc3RzID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBhc3luYyB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIGFzeW5jIHZhbGlkYXRvciB0byBkZWJvdW5jZVxuICogQHBhcmFtIGRlbGF5TXMgLSBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvblxuICogQHJldHVybnMgRGVib3VuY2VkIGFzeW5jIHZhbGlkYXRvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIHVzZXJuYW1lOiBkZWJvdW5jZShcbiAqICAgICAgIHVuaXF1ZShjaGVja1VzZXJuYW1lLCAnVXNlcm5hbWUgdGFrZW4nKSxcbiAqICAgICAgIDUwMCAvLyBXYWl0IDUwMG1zIGFmdGVyIHVzZXIgc3RvcHMgdHlwaW5nXG4gKiAgICAgKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2UoXG4gIHZhbGlkYXRvcjogRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+LFxuICBkZWxheU1zOiBudW1iZXJcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LCBkZWxheU1zKTtcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==","import { signal } from '@angular/core';\nimport { deepClone, snapshotsEqual } from '@signaltree/shared';\nexport function withFormHistory(formTree, options = {}) {\n const capacity = Math.max(1, options.capacity ?? 10);\n const historySignal = signal({\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n }, ...(ngDevMode ? [{ debugName: \"historySignal\" }] : []));\n let recording = true;\n let suppressUpdates = 0;\n let internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n const subscription = formTree.form.valueChanges.subscribe(() => {\n if (suppressUpdates > 0) {\n suppressUpdates--;\n return;\n }\n if (!recording) {\n internalHistory = {\n ...internalHistory,\n present: deepClone(formTree.form.getRawValue()),\n };\n return;\n }\n const snapshot = deepClone(formTree.form.getRawValue());\n if (snapshotsEqual(internalHistory.present, snapshot)) {\n internalHistory = {\n ...internalHistory,\n present: snapshot,\n };\n historySignal.set(cloneHistory(internalHistory));\n return;\n }\n const updatedPast = [...internalHistory.past, internalHistory.present];\n if (updatedPast.length > capacity) {\n updatedPast.shift();\n }\n internalHistory = {\n past: updatedPast,\n present: snapshot,\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n });\n const originalDestroy = formTree.destroy;\n formTree.destroy = () => {\n subscription.unsubscribe();\n originalDestroy();\n };\n const undo = () => {\n const history = historySignal();\n if (history.past.length === 0) {\n return;\n }\n const previous = deepClone(history.past[history.past.length - 1]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(previous);\n recording = true;\n internalHistory = {\n past: history.past.slice(0, -1),\n present: previous,\n future: [history.present, ...history.future],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const redo = () => {\n const history = historySignal();\n if (history.future.length === 0) {\n return;\n }\n const next = deepClone(history.future[0]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(next);\n recording = true;\n internalHistory = {\n past: [...history.past, history.present],\n present: next,\n future: history.future.slice(1),\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const clearHistory = () => {\n internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n function cloneHistory(state) {\n return {\n past: state.past.map((entry) => deepClone(entry)),\n present: deepClone(state.present),\n future: state.future.map((entry) => deepClone(entry)),\n };\n }\n return Object.assign(formTree, {\n undo,\n redo,\n clearHistory,\n history: historySignal.asReadonly(),\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9oaXN0b3J5L2hpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBNEMvRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFxQixFQUNyQixVQUFpQyxFQUFFO0lBT25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFpQjtRQUMzQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLHlEQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksZUFBZSxHQUFtQjtRQUNwQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQzdELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2Ys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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBzbmFwc2hvdHNFcXVhbCB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzIGluIHNlY29uZGFyeSBlbnRyeSBwb2ludHNcbmludGVyZmFjZSBGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZm9ybTogYW55OyAvLyBGb3JtR3JvdXBcbiAgdW53cmFwKCk6IFQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogRm9ybSBoaXN0b3J5IHN0YXRlIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1IaXN0b3J5PFQ+IHtcbiAgcGFzdDogVFtdO1xuICBwcmVzZW50OiBUO1xuICBmdXR1cmU6IFRbXTtcbn1cblxuLyoqXG4gKiBFbmhhbmNlcyBhIEZvcm1UcmVlIHdpdGggdW5kby9yZWRvIGNhcGFiaWxpdGllcy5cbiAqIFByb3ZpZGVzIGZvcm0tc3BlY2lmaWMgaGlzdG9yeSBtYW5hZ2VtZW50IHdpdGggY2FwYWNpdHkgbGltaXRzIGFuZCBjaGFuZ2UgdHJhY2tpbmcuXG4gKlxuICogQHBhcmFtIGZvcm1UcmVlIC0gVGhlIGZvcm0gdHJlZSB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2FwYWNpdHkgLSBNYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGVudHJpZXMgKGRlZmF1bHQ6IDEwKVxuICogQHJldHVybnMgRXh0ZW5kZWQgRm9ybVRyZWUgd2l0aCB1bmRvLCByZWRvLCBhbmQgaGlzdG9yeSBhY2Nlc3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKHsgbmFtZTogJycsIGVtYWlsOiAnJyB9KTtcbiAqIGNvbnN0IGZvcm1XaXRoSGlzdG9yeSA9IHdpdGhGb3JtSGlzdG9yeShmb3JtLCB7IGNhcGFjaXR5OiAyMCB9KTtcbiAqXG4gKiBmb3JtLiQubmFtZS5zZXQoJ0pvaG4nKTtcbiAqIGZvcm0uJC5lbWFpbC5zZXQoJ2pvaG5AZXhhbXBsZS5jb20nKTtcbiAqXG4gKiBmb3JtV2l0aEhpc3RvcnkudW5kbygpOyAvLyBSZXZlcnRzIGVtYWlsIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnVuZG8oKTsgLy8gUmV2ZXJ0cyBuYW1lIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnJlZG8oKTsgLy8gUmVhcHBsaWVzIG5hbWUgY2hhbmdlXG4gKlxuICogY29uc29sZS5sb2coZm9ybVdpdGhIaXN0b3J5Lmhpc3RvcnkoKS5wYXN0Lmxlbmd0aCk7IC8vIDFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZvcm1IaXN0b3J5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGZvcm1UcmVlOiBGb3JtVHJlZTxUPixcbiAgb3B0aW9uczogeyBjYXBhY2l0eT86IG51bWJlciB9ID0ge31cbik6IEZvcm1UcmVlPFQ+ICYge1xuICB1bmRvOiAoKSA9PiB2b2lkO1xuICByZWRvOiAoKSA9PiB2b2lkO1xuICBjbGVhckhpc3Rvcnk6ICgpID0+IHZvaWQ7XG4gIGhpc3Rvcnk6IFNpZ25hbDxGb3JtSGlzdG9yeTxUPj47XG59IHtcbiAgY29uc3QgY2FwYWNpdHkgPSBNYXRoLm1heCgxLCBvcHRpb25zLmNhcGFjaXR5ID8/IDEwKTtcbiAgY29uc3QgaGlzdG9yeVNpZ25hbCA9IHNpZ25hbDxGb3JtSGlzdG9yeTxUPj4oe1xuICAgIHBhc3Q6IFtdLFxuICAgIHByZXNlbnQ6IGRlZXBDbG9uZShmb3JtVHJlZS5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVCksXG4gICAgZnV0dXJlOiBbXSxcbiAgfSk7XG5cbiAgbGV0IHJlY29yZGluZyA9IHRydWU7XG4gIGxldCBzdXBwcmVzc1VwZGF0ZXMgPSAwO1xuICBsZXQgaW50ZXJuYWxIaXN0b3J5OiBGb3JtSGlzdG9yeTxUPiA9IHtcbiAgICBwYXN0OiBbXSxcbiAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgIGZ1dHVyZTogW10sXG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ybVRyZWUuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBpZiAoc3VwcHJlc3NVcGRhdGVzID4gMCkge1xuICAgICAgc3VwcHJlc3NVcGRhdGVzLS07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmcpIHtcbiAgICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxIaXN0b3J5LFxuICAgICAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpO1xuICAgIGlmIChzbmFwc2hvdHNFcXVhbChpbnRlcm5hbEhpc3RvcnkucHJlc2VudCwgc25hcHNob3QpKSB7XG4gICAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICAgIC4uLmludGVybmFsSGlzdG9yeSxcbiAgICAgICAgcHJlc2VudDogc25hcHNob3QsXG4gICAgICB9O1xuICAgICAgaGlzdG9yeVNpZ25hbC5zZXQoY2xvbmVIaXN0b3J5KGludGVybmFsSGlzdG9yeSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUGFzdCA9IFsuLi5pbnRlcm5hbEhpc3RvcnkucGFzdCwgaW50ZXJuYWxIaXN0b3J5LnByZXNlbnRdO1xuICAgIGlmICh1cGRhdGVkUGFzdC5sZW5ndGggPiBjYXBhY2l0eSkge1xuICAgICAgdXBkYXRlZFBhc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgaW50ZXJuYWxIaXN0b3J5ID0ge1xuICAgICAgcGFzdDogdXBkYXRlZFBhc3QsXG4gICAgICBwcmVzZW50OiBzbmFwc2hvdCxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGZvcm1UcmVlLmRlc3Ryb3k7XG4gIGZvcm1UcmVlLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgb3JpZ2luYWxEZXN0cm95KCk7XG4gIH07XG5cbiAgY29uc3QgdW5kbyA9ICgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gaGlzdG9yeVNpZ25hbCgpO1xuICAgIGlmIChoaXN0b3J5LnBhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gZGVlcENsb25lKGhpc3RvcnkucGFzdFtoaXN0b3J5LnBhc3QubGVuZ3RoIC0gMV0pO1xuICAgIHJlY29yZGluZyA9IGZhbHNlO1xuICAgIHN1cHByZXNzVXBkYXRlcysrO1xuICAgIGZvcm1UcmVlLnNldFZhbHVlcyhwcmV2aW91cyk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBoaXN0b3J5LnBhc3Quc2xpY2UoMCwgLTEpLFxuICAgICAgcHJlc2VudDogcHJldmlvdXMsXG4gICAgICBmdXR1cmU6IFtoaXN0b3J5LnByZXNlbnQsIC4uLmhpc3RvcnkuZnV0dXJlXSxcbiAgICB9O1xuICAgIGhpc3RvcnlTaWduYWwuc2V0KGNsb25lSGlzdG9yeShpbnRlcm5hbEhpc3RvcnkpKTtcbiAgfTtcblxuICBjb25zdCByZWRvID0gKCkgPT4ge1xuICAgIGNvbnN0IGhpc3RvcnkgPSBoaXN0b3J5U2lnbmFsKCk7XG4gICAgaWYgKGhpc3RvcnkuZnV0dXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gZGVlcENsb25lKGhpc3RvcnkuZnV0dXJlWzBdKTtcbiAgICByZWNvcmRpbmcgPSBmYWxzZTtcbiAgICBzdXBwcmVzc1VwZGF0ZXMrKztcbiAgICBmb3JtVHJlZS5zZXRWYWx1ZXMobmV4dCk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBbLi4uaGlzdG9yeS5wYXN0LCBoaXN0b3J5LnByZXNlbnRdLFxuICAgICAgcHJlc2VudDogbmV4dCxcbiAgICAgIGZ1dHVyZTogaGlzdG9yeS5mdXR1cmUuc2xpY2UoMSksXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgIHBhc3Q6IFtdLFxuICAgICAgcHJlc2VudDogZGVlcENsb25lKGZvcm1UcmVlLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBUKSxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2xvbmVIaXN0b3J5KHN0YXRlOiBGb3JtSGlzdG9yeTxUPik6IEZvcm1IaXN0b3J5PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFzdDogc3RhdGUucGFzdC5tYXAoKGVudHJ5KSA9PiBkZWVwQ2xvbmUoZW50cnkpKSxcbiAgICAgIHByZXNlbnQ6IGRlZXBDbG9uZShzdGF0ZS5wcmVzZW50KSxcbiAgICAgIGZ1dHVyZTogc3RhdGUuZnV0dXJlLm1hcCgoZW50cnkpID0+IGRlZXBDbG9uZShlbnRyeSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihmb3JtVHJlZSwge1xuICAgIHVuZG8sXG4gICAgcmVkbyxcbiAgICBjbGVhckhpc3RvcnksXG4gICAgaGlzdG9yeTogaGlzdG9yeVNpZ25hbC5hc1JlYWRvbmx5KCksXG4gIH0pO1xufVxuIl19"],"names":[],"mappings":";;;;;;;AAMO,MAAM,mBAAmB,SAAS,KAAK,CAAC;AAC/C,IAAI,MAAM;AACV,IAAI,WAAW;AACf,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE;AACrC,QAAQ,KAAK,CAAC,wBAAwB,CAAC;AACvC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,IAAI,CAAC,IAAI,GAAG,qBAAqB;AACzC,IAAI;AACJ;AACA,MAAM,cAAc,GAAG,YAAY;AACnC,MAAM,eAAe,GAAG,iBAAiB;AAClC,SAAS,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,EAAE,EAAE;AAC3D,IAAI,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,EAAE,EAAE,eAAe,EAAE,mBAAmB,GAAG,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,GAAG,EAAE,iBAAiB,GAAG,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM;AAC3P,IAAI,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,EAAE,YAAY,CAAC;AAChF,IAAI,MAAM,eAAe,GAAG,wBAAwB,CAAC,mBAAmB,EAAE,YAAY,CAAC;AACvF,IAAI,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC;AACtG,IAAI,MAAM,eAAe,GAAG,SAAS,CAAC,qBAAqB,CAAC;AAC5D,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,qBAAqB,EAAE,UAAU,CAAC;AACpE,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;AACpC,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK;AAC3C,IAAI,wBAAwB,CAAC,cAAc,CAAC;AAC5C,IAAI,MAAM,SAAS,GAAG,qBAAqB,CAAC,qBAAqB,EAAE,EAAE,EAAE,cAAc,EAAE,eAAe,CAAC;AACvG,IAAI,MAAM,UAAU,GAAG,kBAAkB,IAAI,mBAAmB,EAAE;AAClE,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAC/B,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChF,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChG,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzF,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzF,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,QAAQ,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAC1D,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvC,QAAQ,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7C,QAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrC,QAAQ,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7C,QAAQ,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,QAAQ,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,IAAI,CAAC;AACL,IAAI,IAAI,YAAY,GAAG,IAAI;AAC3B,IAAI,MAAM,iBAAiB,GAAG,CAAC,SAAS,GAAG,KAAK,KAAK;AACrD,QAAQ,IAAI,SAAS,IAAI,iBAAiB,IAAI,CAAC,EAAE;AACjD,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,YAAY,CAAC,YAAY,CAAC;AAC1C,gBAAgB,YAAY,GAAG,IAAI;AACnC,YAAY;AACZ,YAAY,aAAa,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,YAAY,CAAC,YAAY,CAAC;AACtC,QAAQ;AACR,QAAQ,YAAY,GAAG,UAAU,CAAC,MAAM;AACxC,YAAY,YAAY,GAAG,IAAI;AAC/B,YAAY,aAAa,EAAE;AAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;AAC7B,IAAI,CAAC;AACL,IAAI,iBAAiB,CAAC,IAAI,CAAC;AAC3B,IAAI,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AAC1H,IAAI,iBAAiB,CAAC,kBAAkB,EAAE;AAC1C,IAAI,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;AACnC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;AACvC,KAAK,CAAC;AACN,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAC/B,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AAC1C,QAAQ,WAAW,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;AACpE,QAAQ,gBAAgB,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;AAC9E,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,iBAAiB,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC;AAC9E,IAAI,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK;AACvD,QAAQ,IAAI,OAAO,YAAY,SAAS,EAAE;AAC1C,YAAY,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACvE,gBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnE,YAAY,CAAC,CAAC;AACd,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,OAAO,YAAY,SAAS,EAAE;AAC1C,YAAY,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;AACrE,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,CAAC;AACjJ,YAAY;AACZ,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACvD,gBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,YAAY,CAAC,CAAC;AACd,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;AAClE,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrG,QAAQ;AACR,IAAI,CAAC;AACL,IAAI,uBAAuB,CAAC,SAAS,EAAE,EAAE,CAAC;AAC1C,IAAI,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAE;AACtC,IAAI,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG;AACpD,UAAU,MAAM;AAChB,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE;AAClD,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;AACvD,gBAAgB,IAAI,OAAO,GAAG,IAAI;AAClC,gBAAgB,IAAI;AACpB,oBAAoB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1C,gBAAgB;AAChB,gBAAgB,MAAM;AACtB,oBAAoB,OAAO,GAAG,IAAI;AAClC,gBAAgB;AAChB,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AAC9C,oBAAoB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5D,oBAAoB,IAAI,CAAC,OAAO,EAAE;AAClC,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;AACpE,oBAAoB,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC9C,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;AAC5D,oBAAoB,IAAI,OAAO,EAAE;AACjC,wBAAwB,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,oBAAoB;AACpB,yBAAyB;AACzB,wBAAwB,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC7D,oBAAoB;AACpB,gBAAgB,CAAC,CAAC;AAClB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,UAAU,MAAM,SAAS;AACzB,IAAI,iBAAiB,EAAE;AACvB,IAAI,MAAM,sBAAsB,GAAG,EAAE;AACrC,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM;AACvE,QAAQ,iBAAiB,EAAE;AAC3B,QAAQ,iBAAiB,CAAC,eAAe,EAAE;AAC3C,QAAQ,iBAAiB,EAAE;AAC3B,IAAI,CAAC,CAAC,CAAC;AACP,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC;AAC7F,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE;AAC1B,QAAQ,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC;AAC1F,IAAI;AACJ,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM;AAChC,QAAQ,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;AAClE,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,YAAY,CAAC,YAAY,CAAC;AACtC,QAAQ;AACR,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,UAAU,EAAE;AACpB,QAAQ,UAAU,CAAC,SAAS,CAAC,MAAM;AACnC,YAAY,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC5D,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AACvC,QAAQ,MAAM,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC;AACnE,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,QAAQ,IAAI,YAAY,IAAI,KAAK,IAAI,YAAY,EAAE;AACnD,YAAY,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,QAAQ;AACR,aAAa,IAAI,OAAO,EAAE;AAC1B,YAAY,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACxD,QAAQ;AACR,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,MAAM,cAAc,GAAG,OAAO;AAC1C,YAAY,cAAc,CAAC,aAAa,EAAE;AAC1C,YAAY,cAAc,CAAC,WAAW,EAAE;AACxC,YAAY,cAAc,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtE,QAAQ;AACR,QAAQ,iBAAiB,CAAC,IAAI,CAAC;AAC/B,QAAQ,iBAAiB,CAAC,eAAe,EAAE;AAC3C,IAAI,CAAC;AACL,IAAI,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK;AAClC,QAAQ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACzD,YAAY,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;AAChC,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC;AACL,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,QAAQ,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC;AACxC,QAAQ,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAQ,iBAAiB,CAAC,IAAI,CAAC;AAC/B,QAAQ,iBAAiB,CAAC,kBAAkB,EAAE;AAC9C,QAAQ,iBAAiB,EAAE;AAC3B,IAAI,CAAC;AACL,IAAI,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK;AACtC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,CAAC,aAAa,EAAE;AACnC,YAAY,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/D,YAAY,iBAAiB,CAAC,IAAI,CAAC;AACnC,YAAY,MAAM,cAAc,CAAC,OAAO,CAAC;AACzC,YAAY,iBAAiB,CAAC,IAAI,CAAC;AACnC,YAAY;AACZ,QAAQ;AACR,QAAQ,SAAS,CAAC,gBAAgB,EAAE;AACpC,QAAQ,SAAS,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7D,QAAQ,iBAAiB,CAAC,IAAI,CAAC;AAC/B,QAAQ,MAAM,cAAc,CAAC,SAAS,CAAC;AACvC,QAAQ,iBAAiB,CAAC,IAAI,CAAC;AAC/B,IAAI,CAAC;AACL,IAAI,MAAM,MAAM,GAAG,OAAO,QAAQ,KAAK;AACvC,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAQ,IAAI;AACZ,YAAY,MAAM,QAAQ,EAAE;AAC5B,YAAY,IAAI,CAAC,KAAK,EAAE,EAAE;AAC1B,gBAAgB,MAAM,IAAI,mBAAmB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC;AACtE,YAAY;AACZ,YAAY,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,EAAE;AACzD,YAAY,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;AACxD,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR,gBAAgB;AAChB,YAAY,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,YAAY,iBAAiB,CAAC,IAAI,CAAC;AACnC,QAAQ;AACR,IAAI,CAAC;AACL,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,QAAQ,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AACxD,IAAI,CAAC;AACL,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,KAAK,EAAE,cAAc;AAC7B,QAAQ,CAAC,EAAE,cAAc;AACzB,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,MAAM;AACd,QAAQ,WAAW;AACnB,QAAQ,OAAO;AACf,QAAQ,eAAe;AACvB,QAAQ,KAAK;AACb,QAAQ,KAAK;AACb,QAAQ,UAAU;AAClB,QAAQ,MAAM,EAAE,MAAM,UAAU,EAAE;AAClC,QAAQ,QAAQ;AAChB,QAAQ,SAAS;AACjB,QAAQ,KAAK;AACb,QAAQ,MAAM;AACd,QAAQ,QAAQ;AAChB,QAAQ,aAAa,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,SAAS,CAAC;AACjF,QAAQ,kBAAkB,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,SAAS,CAAC;AAC3F,QAAQ,eAAe,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1F,QAAQ,YAAY,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM;AAChD,YAAY,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,YAAY,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;AACjE,QAAQ,CAAC,CAAC;AACV,QAAQ,sBAAsB,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;AAC1F,QAAQ,WAAW;AACnB,QAAQ,gBAAgB;AACxB,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,OAAO,QAAQ;AACnB;AACO,SAAS,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,GAAG,CAAC,KAAK,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAChH,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;AACjD,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;AACjD,IAAI,MAAM,QAAQ,GAAG;AACrB,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG;AACzB,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AACpE,IAAI,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;AAClC;AACA,SAAS,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE;AAChE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1B,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACpB,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AAC9B,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAY,MAAM,WAAW,GAAG,KAAK,EAAE;AACvC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC5C,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;AAC9C,YAAY;AACZ,QAAQ;AACR,aAAa,IAAI,OAAO,KAAK,KAAK,QAAQ;AAC1C,YAAY,KAAK,KAAK,IAAI;AAC1B,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnC,YAAY,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC;AACpD,QAAQ;AACR,IAAI;AACJ;AACA,MAAM,YAAY,GAAG,CAAC,WAAW,KAAK;AACtC,IAAI,MAAM,QAAQ,GAAG,WAAW;AAChC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK;AAC9B,QAAQ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;AACnD,IAAI,CAAC;AACL,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAK;AACnC,QAAQ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AACtE,IAAI,CAAC;AACL,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AACvC,QAAQ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACvF,IAAI,CAAC;AACL,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK;AACzC,QAAQ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK;AACpC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AAClC,YAAY,IAAI;AAChB,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/B,SAAS,CAAC;AACV,IAAI,CAAC;AACL,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK;AAClC,QAAQ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK;AACpC,YAAY,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;AACnC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,YAAY,IAAI,IAAI,KAAK,SAAS,EAAE;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AAC1C,YAAY;AACZ,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC;AACL,IAAI,QAAQ,CAAC,KAAK,GAAG,MAAM;AAC3B,QAAQ,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,IAAI,CAAC;AACL,IAAI,OAAO,QAAQ;AACnB,CAAC;AACD,SAAS,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE;AACrC,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;AACpC,IAAI,IAAI,OAAO,GAAG,IAAI;AACtB,IAAI,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACpC,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACrD,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAClC,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3B,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE;AACnC,IAAI,OAAO,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO;AACpD;AACA,SAAS,iBAAiB,CAAC,SAAS,EAAE;AACtC,IAAI,OAAO,CAAC,OAAO,KAAK;AACxB,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/C,QAAQ,OAAO,MAAM,GAAG,EAAE,CAAC,cAAc,GAAG,MAAM,EAAE,GAAG,IAAI;AAC3D,IAAI,CAAC;AACL;AACA,SAAS,kBAAkB,CAAC,SAAS,EAAE;AACvC,IAAI,OAAO,OAAO,OAAO,KAAK;AAC9B,QAAQ,IAAI;AACZ,YAAY,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AACvD,YAAY,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU;AACpD,kBAAkB,MAAM,cAAc,CAAC,UAAU;AACjD,kBAAkB,MAAM,UAAU;AAClC,YAAY,OAAO,QAAQ,GAAG,EAAE,CAAC,eAAe,GAAG,QAAQ,EAAE,GAAG,IAAI;AACpE,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,EAAE,CAAC,eAAe,GAAG,kBAAkB,EAAE;AAC5D,QAAQ;AACR,IAAI,CAAC;AACL;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE;AACzE,IAAI,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;AACzD,IAAI,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC;AAC/D,IAAI,MAAM,OAAO,GAAG;AACpB,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAC3C,UAAU,SAAS;AACnB,IAAI,MAAM,QAAQ,GAAG;AACrB,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC;AAC7C,UAAU,SAAS;AACnB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAC5I,QAAQ,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;AACzD,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AAC9B,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1D,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC;AAC1G,QAAQ;AACR,QAAQ,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE;AACvC,YAAY,UAAU,EAAE,OAAO;AAC/B,YAAY,eAAe,EAAE,QAAQ;AACrC,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE;AAClC,QAAQ,UAAU,EAAE,OAAO;AAC3B,QAAQ,eAAe,EAAE,QAAQ;AACjC,QAAQ,WAAW,EAAE,KAAK;AAC1B,KAAK,CAAC;AACN;AACA,SAAS,uBAAuB,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE;AACtF,IAAI,IAAI,mBAAmB,GAAG,KAAK;AACnC,IAAI,IAAI,kBAAkB,GAAG,KAAK;AAClC,IAAI,IAAI,cAAc,GAAG,CAAC;AAC1B,IAAI,IAAI,kBAAkB,GAAG,CAAC;AAC9B,IAAI,IAAI,oBAAoB,GAAG,IAAI;AACnC,IAAI,MAAM,UAAU,GAAG,WAAW,EAAE,UAAU,IAAI,CAAC;AACnD,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACzD,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/D,IAAI,MAAM,iBAAiB,GAAG,CAAC,KAAK,KAAK;AACzC,QAAQ,kBAAkB,GAAG,IAAI;AACjC,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC9C,YAAY,MAAM,cAAc,GAAG,OAAO;AAC1C,YAAY,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/D,YAAY,cAAc,CAAC,WAAW,EAAE;AACxC,QAAQ;AACR,QAAQ,kBAAkB,GAAG,KAAK;AAClC,IAAI,CAAC;AACL,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK;AACjC,QAAQ,MAAM,cAAc,GAAG,EAAE,cAAc;AAC/C,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,IAAI,mBAAmB,EAAE;AACjC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,kBAAkB,GAAG,cAAc,EAAE;AACjD,YAAY;AACZ,QAAQ;AACR,QAAQ,iBAAiB,CAAC,KAAK,CAAC;AAChC,IAAI,CAAC;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK;AACtC,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAQ,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,IAAI,CAAC;AACL,IAAI,MAAM,qBAAqB,GAAG,CAAC,KAAK,KAAK;AAC7C,QAAQ,mBAAmB,GAAG,IAAI;AAClC,QAAQ,kBAAkB,GAAG,EAAE,cAAc;AAC7C,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,mBAAmB,GAAG,KAAK;AACnC,IAAI,CAAC;AACL,IAAI,MAAM,mBAAmB,GAAG,CAAC,KAAK,KAAK;AAC3C,QAAQ,IAAI,kBAAkB,EAAE;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,UAAU,GAAG,CAAC,EAAE;AAC5B,YAAY,IAAI,oBAAoB,EAAE;AACtC,gBAAgB,YAAY,CAAC,oBAAoB,CAAC;AAClD,YAAY;AACZ,YAAY,oBAAoB,GAAG,UAAU,CAAC,MAAM;AACpD,gBAAgB,oBAAoB,GAAG,IAAI;AAC3C,gBAAgB,qBAAqB,CAAC,KAAK,CAAC;AAC5C,YAAY,CAAC,EAAE,UAAU,CAAC;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,qBAAqB,CAAC,KAAK,CAAC;AACpC,IAAI,CAAC;AACL,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AACnE,QAAQ,mBAAmB,CAAC,KAAK,CAAC;AAClC,IAAI,CAAC,CAAC;AACN,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM;AAChC,QAAQ,YAAY,CAAC,WAAW,EAAE;AAClC,QAAQ,WAAW,CAAC,GAAG,GAAG,WAAW;AACrC,QAAQ,WAAW,CAAC,MAAM,GAAG,cAAc;AAC3C,QAAQ,IAAI,oBAAoB,EAAE;AAClC,YAAY,YAAY,CAAC,oBAAoB,CAAC;AAC9C,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,SAAS,yBAAyB,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE;AACzI,IAAI,IAAI,mBAAmB,GAAG,KAAK;AACnC,IAAI,IAAI,kBAAkB,GAAG,KAAK;AAClC,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACzD,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/D,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK;AACjC,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,IAAI,mBAAmB,EAAE;AACjC,YAAY;AACZ,QAAQ;AACR,QAAQ,kBAAkB,GAAG,IAAI;AACjC,QAAQ,sBAAsB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,CAAC;AAC5G,QAAQ,SAAS,CAAC,WAAW,EAAE;AAC/B,QAAQ,kBAAkB,GAAG,KAAK;AAClC,IAAI,CAAC;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK;AACtC,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAQ,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,IAAI,CAAC;AACL,IAAI,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AACrE,QAAQ,IAAI,kBAAkB,EAAE;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,mBAAmB,GAAG,IAAI;AAClC,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,mBAAmB,GAAG,KAAK;AACnC,IAAI,CAAC,CAAC;AACN,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM;AAChC,QAAQ,YAAY,CAAC,WAAW,EAAE;AAClC,QAAQ,WAAW,CAAC,GAAG,GAAG,WAAW;AACrC,QAAQ,WAAW,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI,CAAC,CAAC;AACN,IAAI,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,CAAC;AAChH;AACA,SAAS,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE;AAClH,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACnC,QAAQ,SAAS,GAAG,EAAE;AACtB,IAAI;AACJ,IAAI,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AAChD,QAAQ,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;AACvC,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvD,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;AAC5C,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC;AAC/F,YAAY,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AAC5C,YAAY,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC;AACvD,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,QAAQ,YAAY,SAAS,EAAE;AAC3C,YAAY,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,CAAC;AAC9I,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,QAAQ,YAAY,SAAS,EAAE;AAC3C,YAAY,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxC,oBAAoB,SAAS,EAAE,KAAK;AACpC,iBAAiB,CAAC;AAClB,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAC9C,YAAY,MAAM,eAAe,GAAG,QAAQ;AAC5C,YAAY,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChE,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,SAAS,sBAAsB,CAAC,OAAO,EAAE;AACzC,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,UAAU,EAAE,EAAE;AACtB,QAAQ,WAAW,EAAE,EAAE;AACvB,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,OAAO,EAAE,EAAE;AACnB,KAAK;AACL,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,cAAc,KAAK;AAC/D,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,cAAc,CAAC,OAAO,EAAE;AACpC,YAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;AAChD,QAAQ;AACR,QAAQ,IAAI,cAAc,CAAC,OAAO,EAAE;AACpC,YAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;AAChD,QAAQ;AACR,QAAQ,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;AAC5C,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AAClD,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AAC7C,YAAY,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW;AAC1D,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AAC9C,YAAY,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY;AAC5D,QAAQ;AACR,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,IAAI,OAAO,QAAQ;AACnB;AACA,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AACvD,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAC1B,IAAI,IAAI,OAAO,YAAY,SAAS,EAAE;AACtC,QAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACnE,YAAY,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjE,QAAQ,CAAC,CAAC;AACV,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,OAAO,YAAY,SAAS,EAAE;AACtC,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACnD,YAAY,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,SAAS,cAAc,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC1B,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE;AAChC,IAAI;AACJ,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACpC,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM;AACnE,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAClC,gBAAgB,YAAY,CAAC,WAAW,EAAE;AAC1C,gBAAgB,OAAO,EAAE;AACzB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,CAAC;AACN;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,IAAI,QAAQ,CAAC,CAAC,KAAK;AACnB,QAAQ,OAAO,KAAK,KAAK,QAAQ;AACjC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7B,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB;AACnE;AACA,SAAS,mBAAmB,GAAG;AAC/B,IAAI,IAAI;AACR,QAAQ,OAAO,MAAM,CAAC,UAAU,CAAC;AACjC,IAAI;AACJ,IAAI,MAAM;AACV,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,SAAS,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE;AACrD,IAAI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1D,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChD,QAAQ,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnC,IAAI;AACJ,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/D,QAAQ,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9D,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChD,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AACpC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnC,IAAI;AACJ,IAAI,MAAM,UAAU,GAAG,EAAE;AACzB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,KAAK;AAC1C,QAAQ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK;AACtC,YAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAChD,gBAAgB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC;AAC/C,gBAAgB,IAAI,MAAM,EAAE;AAC5B,oBAAoB,OAAO,MAAM;AACjC,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC;AACT,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE;AACrC;AACA,SAAS,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE;AACtD,IAAI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1D,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChD,QAAQ,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnC,IAAI;AACJ,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/D,QAAQ,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC;AACnE,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChD,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AACpC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnC,IAAI;AACJ,IAAI,MAAM,UAAU,GAAG,EAAE;AACzB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,KAAK;AAC1C,QAAQ,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,KAAK;AAC5C,YAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAChD,gBAAgB,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;AACnD,gBAAgB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU;AACtD,sBAAsB,MAAM,cAAc,CAAC,UAAU;AACrD,sBAAsB,MAAM,UAAU;AACtC,gBAAgB,IAAI,MAAM,EAAE;AAC5B,oBAAoB,OAAO,MAAM;AACjC,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC;AACT,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE;AACrC;AACA,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/B;AACA,SAAS,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE;AAClE,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC;AAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AACpC,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AACrD,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AACxC,QAAQ;AACR,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5C,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;AACnD,QAAQ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;AACjC,IAAI;AACJ,IAAI,MAAM;AACV,QAAQ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AACpC,IAAI;AACJ;AACA,SAAS,cAAc,CAAC,KAAK,EAAE;AAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7C,QAAQ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AAChE,IAAI;AACJ;AACA,SAAS,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAE;AAChD,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC;AACjC,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,IAAI,IAAI,KAAK;AACb,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AAClC,YAAY,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE;AACzD,gBAAgB,KAAK,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE;AAC1D,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,KAAK,EAAE;AACf,QAAQ,OAAO,KAAK,CAAC,MAAM;AAC3B,IAAI;AACJ,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC;AAC5B;AACA,SAAS,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE;AAClC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;AACnB,QAAQ,OAAO,GAAG,CAAC,IAAI,CAAC;AACxB,IAAI;AACJ,IAAI,IAAI,SAAS;AACjB,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACxC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AAClC,YAAY,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE;AACjE,gBAAgB,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACpD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,SAAS,EAAE;AACnB,QAAQ,OAAO,SAAS,CAAC,KAAK;AAC9B,IAAI;AACJ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC;AACnB;AACA,SAAS,uBAAuB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE;AAC/F,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO;AACf,YAAY,eAAe,EAAE,MAAM,SAAS;AAC5C,YAAY,kBAAkB,EAAE,MAAM,SAAS;AAC/C,SAAS;AACT,IAAI;AACJ,IAAI,IAAI,KAAK,GAAG,IAAI;AACpB,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACnE,YAAY,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;AAChD,QAAQ;AACR,QAAQ,MAAM;AACd,QAAQ;AACR,IAAI,CAAC;AACL,IAAI,MAAM,eAAe,GAAG,MAAM;AAClC,QAAQ,IAAI,UAAU,IAAI,CAAC,EAAE;AAC7B,YAAY,OAAO,EAAE;AACrB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,YAAY,CAAC,KAAK,CAAC;AAC/B,QAAQ;AACR,QAAQ,KAAK,GAAG,UAAU,CAAC,MAAM;AACjC,YAAY,KAAK,GAAG,IAAI;AACxB,YAAY,OAAO,EAAE;AACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;AACtB,IAAI,CAAC;AACL,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM;AAChC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,YAAY,CAAC,KAAK,CAAC;AAC/B,QAAQ;AACR,IAAI,CAAC,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,eAAe;AACvB,QAAQ,kBAAkB,EAAE,OAAO;AACnC,KAAK;AACL;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,qBAAqB;AACzB,IAAI,2BAA2B,GAAG,IAAI,YAAY,EAAE;AACpD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACnC,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,IAAI,QAAQ,GAAG,MAAM;AACrB,IAAI,CAAC;AACL,IAAI,SAAS,GAAG,MAAM;AACtB,IAAI,CAAC;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACtD,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC;AACpF,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AACnC,QAAQ,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK;AACnC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjD,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;AACxD,YAAY,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,IAAI;AACJ,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjD,QAAQ;AACR,IAAI;AACJ,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B,IAAI;AACJ,IAAI,iBAAiB,CAAC,EAAE,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,IAAI;AACJ,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;AACxF,IAAI;AACJ,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAC9K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,EAAE,OAAO,EAAE,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE;AAC9a,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnE,gBAAgB,KAAK,EAAE,IAAI;AAC3B,aAAa;AACb,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1B;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,yBAAyB;AACvD,oBAAoB,SAAS,EAAE;AAC/B,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AAC/E,4BAA4B,KAAK,EAAE,IAAI;AACvC,yBAAyB;AACzB,qBAAqB;AACrB,oBAAoB,UAAU,EAAE,IAAI;AACpC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,qBAAqB,EAAE,CAAC;AACtD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,2BAA2B,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;AAC1C,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,MAAM;AAC7B,aAAa,CAAC,EAAE,EAAE,CAAC;AACP,MAAC,sBAAsB,GAAG,CAAC,oBAAoB;;AC90BpD,SAAS,QAAQ,CAAC,OAAO,GAAG,UAAU,EAAE;AAC/C,IAAI,OAAO,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;AAC/C;AACO,SAAS,KAAK,CAAC,OAAO,GAAG,eAAe,EAAE;AACjD,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,OAAO,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI;AACnE,IAAI,CAAC;AACL;AACO,SAAS,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;AACxC,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC;AAC3D,QAAQ,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI;AAClE,IAAI,CAAC;AACL;AACO,SAAS,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;AACxC,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC;AAC3D,QAAQ,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI;AAClE,IAAI,CAAC;AACL;AACO,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,EAAE;AAC3D,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,GAAG,IAAI;AACjE,IAAI,CAAC;AACL;AACO,SAAS,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC7D,QAAQ,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI;AAC/C,IAAI,CAAC;AACL;AACO,SAAS,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC5D,QAAQ,OAAO,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI;AAC/C,IAAI,CAAC;AACL;AACO,SAAS,OAAO,CAAC,UAAU,EAAE;AACpC,IAAI,OAAO,CAAC,KAAK,KAAK;AACtB,QAAQ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAC5C,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC1C,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI,CAAC;AACL;;ACpDO,SAAS,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,EAAE;AAC5D,IAAI,OAAO,OAAO,KAAK,KAAK;AAC5B,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAQ,OAAO,MAAM,GAAG,OAAO,GAAG,IAAI;AACtC,IAAI,CAAC;AACL;AACO,SAAS,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE;AAC7C,IAAI,IAAI,SAAS;AACjB,IAAI,OAAO,OAAO,KAAK,KAAK;AAC5B,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACxC,YAAY,YAAY,CAAC,SAAS,CAAC;AACnC,YAAY,SAAS,GAAG,UAAU,CAAC,YAAY;AAC/C,gBAAgB,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;AACnD,gBAAgB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU;AACtD,sBAAsB,MAAM,cAAc,CAAC,UAAU;AACrD,sBAAsB,MAAM,UAAU;AACtC,gBAAgB,OAAO,CAAC,MAAM,CAAC;AAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;AACvB,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC;AACL;;ACrBO,SAAS,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE;AACxD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AACxD,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC;AACjC,QAAQ,IAAI,EAAE,EAAE;AAChB,QAAQ,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACvD,QAAQ,MAAM,EAAE,EAAE;AAClB,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9D,IAAI,IAAI,SAAS,GAAG,IAAI;AACxB,IAAI,IAAI,eAAe,GAAG,CAAC;AAC3B,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,IAAI,EAAE,EAAE;AAChB,QAAQ,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACvD,QAAQ,MAAM,EAAE,EAAE;AAClB,KAAK;AACL,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM;AACpE,QAAQ,IAAI,eAAe,GAAG,CAAC,EAAE;AACjC,YAAY,eAAe,EAAE;AAC7B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,eAAe,GAAG;AAC9B,gBAAgB,GAAG,eAAe;AAClC,gBAAgB,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/D,aAAa;AACb,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/D,QAAQ,IAAI,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;AAC/D,YAAY,eAAe,GAAG;AAC9B,gBAAgB,GAAG,eAAe;AAClC,gBAAgB,OAAO,EAAE,QAAQ;AACjC,aAAa;AACb,YAAY,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAC5D,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,WAAW,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC;AAC9E,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,QAAQ,EAAE;AAC3C,YAAY,WAAW,CAAC,KAAK,EAAE;AAC/B,QAAQ;AACR,QAAQ,eAAe,GAAG;AAC1B,YAAY,IAAI,EAAE,WAAW;AAC7B,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,MAAM,EAAE,EAAE;AACtB,SAAS;AACT,QAAQ,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO;AAC5C,IAAI,QAAQ,CAAC,OAAO,GAAG,MAAM;AAC7B,QAAQ,YAAY,CAAC,WAAW,EAAE;AAClC,QAAQ,eAAe,EAAE;AACzB,IAAI,CAAC;AACL,IAAI,MAAM,IAAI,GAAG,MAAM;AACvB,QAAQ,MAAM,OAAO,GAAG,aAAa,EAAE;AACvC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzE,QAAQ,SAAS,GAAG,KAAK;AACzB,QAAQ,eAAe,EAAE;AACzB,QAAQ,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;AACpC,QAAQ,SAAS,GAAG,IAAI;AACxB,QAAQ,eAAe,GAAG;AAC1B,YAAY,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AACxD,SAAS;AACT,QAAQ,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,CAAC;AACL,IAAI,MAAM,IAAI,GAAG,MAAM;AACvB,QAAQ,MAAM,OAAO,GAAG,aAAa,EAAE;AACvC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,QAAQ,SAAS,GAAG,KAAK;AACzB,QAAQ,eAAe,EAAE;AACzB,QAAQ,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,QAAQ,SAAS,GAAG,IAAI;AACxB,QAAQ,eAAe,GAAG;AAC1B,YAAY,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;AACpD,YAAY,OAAO,EAAE,IAAI;AACzB,YAAY,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,SAAS;AACT,QAAQ,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,CAAC;AACL,IAAI,MAAM,YAAY,GAAG,MAAM;AAC/B,QAAQ,eAAe,GAAG;AAC1B,YAAY,IAAI,EAAE,EAAE;AACpB,YAAY,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3D,YAAY,MAAM,EAAE,EAAE;AACtB,SAAS;AACT,QAAQ,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,CAAC;AACL,IAAI,SAAS,YAAY,CAAC,KAAK,EAAE;AACjC,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,YAAY,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC7C,YAAY,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;AACjE,SAAS;AACT,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AACnC,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,YAAY;AACpB,QAAQ,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE;AAC3C,KAAK,CAAC;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"signaltree-ng-forms.mjs","sources":["../tmp-esm2022/core/ng-forms.js","../tmp-esm2022/core/validators.js","../tmp-esm2022/core/async-validators.js","../tmp-esm2022/history/history.js"],"sourcesContent":["import { computed, effect, inject, signal, DestroyRef, Directive, ElementRef, Renderer2, HostListener, Input, Output, EventEmitter, isSignal, forwardRef, } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { signalTree } from '@signaltree/core';\nimport { deepClone, matchPath, mergeDeep, parsePath } from '@signaltree/shared';\nimport { firstValueFrom, isObservable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class FormValidationError extends Error {\n errors;\n asyncErrors;\n constructor(errors, asyncErrors) {\n super('Form validation failed');\n this.errors = errors;\n this.asyncErrors = asyncErrors;\n this.name = 'FormValidationError';\n }\n}\nconst SYNC_ERROR_KEY = 'signaltree';\nconst ASYNC_ERROR_KEY = 'signaltreeAsync';\nexport function createFormTree(initialValues, config = {}) {\n const { validators: baseValidators = {}, asyncValidators: baseAsyncValidators = {}, destroyRef: providedDestroyRef, fieldConfigs = {}, conditionals = [], persistKey, storage, persistDebounceMs = 100, validationBatchMs = 0, ...treeConfig } = config;\n const syncValidators = normalizeSyncValidators(baseValidators, fieldConfigs);\n const asyncValidators = normalizeAsyncValidators(baseAsyncValidators, fieldConfigs);\n const { values: hydratedInitialValues } = hydrateInitialValues(initialValues, persistKey, storage);\n const initialSnapshot = deepClone(hydratedInitialValues);\n const valuesTree = signalTree(hydratedInitialValues, treeConfig);\n assertTreeNode(valuesTree.state);\n const flattenedState = valuesTree.state;\n enhanceArraysRecursively(flattenedState);\n const formGroup = createAbstractControl(hydratedInitialValues, '', syncValidators, asyncValidators);\n const destroyRef = providedDestroyRef ?? tryInjectDestroyRef();\n const cleanupCallbacks = [];\n const errors = signal({}, ...(ngDevMode ? [{ debugName: \"errors\" }] : []));\n const asyncErrors = signal({}, ...(ngDevMode ? [{ debugName: \"asyncErrors\" }] : []));\n const touched = signal({}, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const asyncValidating = signal({}, ...(ngDevMode ? [{ debugName: \"asyncValidating\" }] : []));\n const dirty = signal(formGroup.dirty, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const valid = signal(formGroup.valid && !formGroup.pending, ...(ngDevMode ? [{ debugName: \"valid\" }] : []));\n const submitting = signal(false, ...(ngDevMode ? [{ debugName: \"submitting\" }] : []));\n const refreshRunner = () => {\n const snapshot = collectControlSnapshot(formGroup);\n errors.set(snapshot.syncErrors);\n asyncErrors.set(snapshot.asyncErrors);\n touched.set(snapshot.touched);\n asyncValidating.set(snapshot.pending);\n dirty.set(formGroup.dirty);\n valid.set(formGroup.valid && !formGroup.pending);\n };\n let refreshTimer = null;\n const refreshAggregates = (immediate = false) => {\n if (immediate || validationBatchMs <= 0) {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n refreshRunner();\n return;\n }\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n refreshTimer = setTimeout(() => {\n refreshTimer = null;\n refreshRunner();\n }, validationBatchMs);\n };\n refreshAggregates(true);\n const persistController = createPersistController(formGroup, persistKey, storage, persistDebounceMs, cleanupCallbacks);\n persistController.persistImmediately();\n const fieldErrorKeys = new Set([\n ...Object.keys(syncValidators),\n ...Object.keys(asyncValidators),\n ]);\n const fieldErrors = {};\n const fieldAsyncErrors = {};\n fieldErrorKeys.forEach((fieldPath) => {\n fieldErrors[fieldPath] = computed(() => errors()[fieldPath]);\n fieldAsyncErrors[fieldPath] = computed(() => asyncErrors()[fieldPath]);\n });\n const fieldConfigLookup = (path) => resolveFieldConfig(fieldConfigs, path);\n const connectControlRecursive = (control, path) => {\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n connectControlRecursive(child, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n const arraySignal = getSignalAtPath(flattenedState, path);\n if (arraySignal) {\n connectFormArrayAndSignal(control, arraySignal, path, syncValidators, asyncValidators, cleanupCallbacks, connectControlRecursive);\n }\n control.controls.forEach((child, index) => {\n connectControlRecursive(child, joinPath(path, String(index)));\n });\n return;\n }\n const signalAtPath = getSignalAtPath(flattenedState, path);\n if (signalAtPath) {\n connectControlAndSignal(control, signalAtPath, cleanupCallbacks, fieldConfigLookup(path));\n }\n };\n connectControlRecursive(formGroup, '');\n const conditionalState = new Map();\n const applyConditionals = conditionals.length > 0\n ? () => {\n const values = formGroup.getRawValue();\n conditionals.forEach(({ when, fields }) => {\n let visible = true;\n try {\n visible = when(values);\n }\n catch {\n visible = true;\n }\n fields.forEach((fieldPath) => {\n const control = formGroup.get(fieldPath);\n if (!control) {\n return;\n }\n const previous = conditionalState.get(fieldPath);\n if (previous === visible) {\n return;\n }\n conditionalState.set(fieldPath, visible);\n if (visible) {\n control.enable({ emitEvent: false });\n }\n else {\n control.disable({ emitEvent: false });\n }\n });\n });\n }\n : () => undefined;\n applyConditionals();\n const aggregateSubscriptions = [];\n aggregateSubscriptions.push(formGroup.valueChanges.subscribe(() => {\n refreshAggregates();\n persistController.schedulePersist();\n applyConditionals();\n }));\n aggregateSubscriptions.push(formGroup.statusChanges.subscribe(() => refreshAggregates()));\n if (formGroup.events) {\n aggregateSubscriptions.push(formGroup.events.subscribe(() => refreshAggregates()));\n }\n cleanupCallbacks.push(() => {\n aggregateSubscriptions.forEach((sub) => sub.unsubscribe());\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n });\n if (destroyRef) {\n destroyRef.onDestroy(() => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n });\n }\n const setValue = (field, value) => {\n const targetSignal = getSignalAtPath(flattenedState, field);\n const control = formGroup.get(field);\n if (targetSignal && 'set' in targetSignal) {\n targetSignal.set(value);\n }\n else if (control) {\n control.setValue(value, { emitEvent: true });\n }\n if (control) {\n const untypedControl = control;\n untypedControl.markAsTouched();\n untypedControl.markAsDirty();\n untypedControl.updateValueAndValidity({ emitEvent: true });\n }\n refreshAggregates(true);\n persistController.schedulePersist();\n };\n const setValues = (values) => {\n Object.entries(values).forEach(([key, value]) => {\n setValue(key, value);\n });\n };\n const reset = () => {\n formGroup.reset(initialSnapshot);\n submitting.set(false);\n refreshAggregates(true);\n persistController.persistImmediately();\n applyConditionals();\n };\n const validate = async (field) => {\n if (field) {\n const control = formGroup.get(field);\n if (!control) {\n return;\n }\n control.markAsTouched();\n control.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(control);\n refreshAggregates(true);\n return;\n }\n formGroup.markAllAsTouched();\n formGroup.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(formGroup);\n refreshAggregates(true);\n };\n const submit = async (submitFn) => {\n submitting.set(true);\n try {\n await validate();\n if (!valid()) {\n throw new FormValidationError(errors(), asyncErrors());\n }\n const currentValues = formGroup.getRawValue();\n const result = await submitFn(currentValues);\n return result;\n }\n finally {\n submitting.set(false);\n refreshAggregates(true);\n }\n };\n const destroy = () => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n };\n const formTree = {\n state: flattenedState,\n $: flattenedState,\n form: formGroup,\n errors,\n asyncErrors,\n touched,\n asyncValidating,\n dirty,\n valid,\n submitting,\n unwrap: () => valuesTree(),\n setValue,\n setValues,\n reset,\n submit,\n validate,\n getFieldError: (field) => fieldErrors[field] || computed(() => undefined),\n getFieldAsyncError: (field) => fieldAsyncErrors[field] || computed(() => undefined),\n getFieldTouched: (field) => computed(() => formGroup.get(field)?.touched ?? false),\n isFieldValid: (field) => computed(() => {\n const control = formGroup.get(field);\n return !!control && control.valid && !control.pending;\n }),\n isFieldAsyncValidating: (field) => computed(() => !!formGroup.get(field)?.pending),\n fieldErrors,\n fieldAsyncErrors,\n values: valuesTree,\n destroy,\n };\n return formTree;\n}\nexport function createVirtualFormArray(items, visibleRange, controlFactory = (value) => new FormControl(value)) {\n const start = Math.max(0, visibleRange.start);\n const end = Math.max(start, visibleRange.end);\n const controls = items\n .slice(start, end)\n .map((item, offset) => controlFactory(item, start + offset));\n return new FormArray(controls);\n}\nfunction enhanceArraysRecursively(obj, visited = new WeakSet()) {\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n for (const key in obj) {\n const value = obj[key];\n if (isSignal(value)) {\n const signalValue = value();\n if (Array.isArray(signalValue)) {\n obj[key] = enhanceArray(value);\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)) {\n enhanceArraysRecursively(value, visited);\n }\n }\n}\nconst enhanceArray = (arraySignal) => {\n const enhanced = arraySignal;\n enhanced.push = (item) => {\n arraySignal.update((arr) => [...arr, item]);\n };\n enhanced.removeAt = (index) => {\n arraySignal.update((arr) => arr.filter((_, i) => i !== index));\n };\n enhanced.setAt = (index, value) => {\n arraySignal.update((arr) => arr.map((item, i) => (i === index ? value : item)));\n };\n enhanced.insertAt = (index, item) => {\n arraySignal.update((arr) => [\n ...arr.slice(0, index),\n item,\n ...arr.slice(index),\n ]);\n };\n enhanced.move = (from, to) => {\n arraySignal.update((arr) => {\n const newArr = [...arr];\n const [item] = newArr.splice(from, 1);\n if (item !== undefined) {\n newArr.splice(to, 0, item);\n }\n return newArr;\n });\n };\n enhanced.clear = () => {\n arraySignal.set([]);\n };\n return enhanced;\n};\nfunction getSignalAtPath(node, path) {\n if (!path) {\n return null;\n }\n const segments = parsePath(path);\n let current = node;\n for (const segment of segments) {\n if (!current || typeof current !== 'object') {\n return null;\n }\n current = current[segment];\n }\n if (isSignal(current)) {\n return current;\n }\n return null;\n}\nfunction joinPath(parent, segment) {\n return parent ? `${parent}.${segment}` : segment;\n}\nfunction wrapSyncValidator(validator) {\n return (control) => {\n const result = validator(control.value);\n return result ? { [SYNC_ERROR_KEY]: result } : null;\n };\n}\nfunction wrapAsyncValidator(validator) {\n return async (control) => {\n try {\n const maybeAsync = validator(control.value);\n const resolved = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n return resolved ? { [ASYNC_ERROR_KEY]: resolved } : null;\n }\n catch {\n return { [ASYNC_ERROR_KEY]: 'Validation error' };\n }\n };\n}\nfunction createAbstractControl(value, path, validators, asyncValidators) {\n const syncValidator = findValidator(validators, path);\n const asyncValidator = findValidator(asyncValidators, path);\n const syncFns = syncValidator\n ? [wrapSyncValidator(syncValidator)]\n : undefined;\n const asyncFns = asyncValidator\n ? [wrapAsyncValidator(asyncValidator)]\n : undefined;\n if (Array.isArray(value)) {\n const controls = value.map((item, index) => createAbstractControl(item, joinPath(path, String(index)), validators, asyncValidators));\n return new FormArray(controls, syncFns, asyncFns);\n }\n if (isPlainObject(value)) {\n const controls = {};\n for (const [key, child] of Object.entries(value)) {\n controls[key] = createAbstractControl(child, joinPath(path, key), validators, asyncValidators);\n }\n return new FormGroup(controls, {\n validators: syncFns,\n asyncValidators: asyncFns,\n });\n }\n return new FormControl(value, {\n validators: syncFns,\n asyncValidators: asyncFns,\n nonNullable: false,\n });\n}\nfunction connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldConfig) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n let versionCounter = 0;\n let lastControlVersion = 0;\n let controlDebounceTimer = null;\n const debounceMs = fieldConfig?.debounceMs ?? 0;\n const originalSet = valueSignal.set.bind(valueSignal);\n const originalUpdate = valueSignal.update.bind(valueSignal);\n const applyControlValue = (value) => {\n updatingFromSignal = true;\n if (!Object.is(control.value, value)) {\n const untypedControl = control;\n untypedControl.setValue(value, { emitEvent: true });\n untypedControl.markAsDirty();\n }\n updatingFromSignal = false;\n };\n valueSignal.set = (value) => {\n const currentVersion = ++versionCounter;\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n if (lastControlVersion > currentVersion) {\n return;\n }\n applyControlValue(value);\n };\n valueSignal.update = (updater) => {\n const next = updater(valueSignal());\n valueSignal.set(next);\n };\n const pushUpdateFromControl = (value) => {\n updatingFromControl = true;\n lastControlVersion = ++versionCounter;\n originalSet(value);\n updatingFromControl = false;\n };\n const handleControlChange = (value) => {\n if (updatingFromSignal) {\n return;\n }\n if (debounceMs > 0) {\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n controlDebounceTimer = setTimeout(() => {\n controlDebounceTimer = null;\n pushUpdateFromControl(value);\n }, debounceMs);\n return;\n }\n pushUpdateFromControl(value);\n };\n const subscription = control.valueChanges.subscribe((value) => {\n handleControlChange(value);\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n valueSignal.set = originalSet;\n valueSignal.update = originalUpdate;\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n });\n}\nfunction connectFormArrayAndSignal(formArray, arraySignal, path, validators, asyncValidators, cleanupCallbacks, connectControlRecursive) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n const originalSet = arraySignal.set.bind(arraySignal);\n const originalUpdate = arraySignal.update.bind(arraySignal);\n arraySignal.set = (value) => {\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n updatingFromSignal = true;\n syncFormArrayFromValue(formArray, value, path, validators, asyncValidators, connectControlRecursive);\n formArray.markAsDirty();\n updatingFromSignal = false;\n };\n arraySignal.update = (updater) => {\n const next = updater(arraySignal());\n arraySignal.set(next);\n };\n const subscription = formArray.valueChanges.subscribe((value) => {\n if (updatingFromSignal) {\n return;\n }\n updatingFromControl = true;\n originalSet(value);\n updatingFromControl = false;\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n arraySignal.set = originalSet;\n arraySignal.update = originalUpdate;\n });\n syncFormArrayFromValue(formArray, arraySignal(), path, validators, asyncValidators, connectControlRecursive);\n}\nfunction syncFormArrayFromValue(formArray, nextValue, path, validators, asyncValidators, connectControlRecursive) {\n if (!Array.isArray(nextValue)) {\n nextValue = [];\n }\n while (formArray.length > nextValue.length) {\n formArray.removeAt(formArray.length - 1);\n }\n nextValue.forEach((item, index) => {\n const childPath = joinPath(path, String(index));\n const existing = formArray.at(index);\n if (!existing) {\n const control = createAbstractControl(item, childPath, validators, asyncValidators);\n formArray.insert(index, control);\n connectControlRecursive(control, childPath);\n return;\n }\n if (existing instanceof FormArray) {\n syncFormArrayFromValue(existing, Array.isArray(item) ? item : [], childPath, validators, asyncValidators, connectControlRecursive);\n return;\n }\n if (existing instanceof FormGroup) {\n if (isPlainObject(item)) {\n existing.setValue(item, {\n emitEvent: false,\n });\n }\n return;\n }\n if (!Object.is(existing.value, item)) {\n const untypedExisting = existing;\n untypedExisting.setValue(item, { emitEvent: false });\n }\n });\n}\nfunction collectControlSnapshot(control) {\n const snapshot = {\n syncErrors: {},\n asyncErrors: {},\n touched: {},\n pending: {},\n };\n traverseControls(control, (currentPath, currentControl) => {\n if (!currentPath) {\n return;\n }\n if (currentControl.touched) {\n snapshot.touched[currentPath] = true;\n }\n if (currentControl.pending) {\n snapshot.pending[currentPath] = true;\n }\n const errors = currentControl.errors;\n if (!errors) {\n return;\n }\n const syncMessage = errors[SYNC_ERROR_KEY];\n if (typeof syncMessage === 'string') {\n snapshot.syncErrors[currentPath] = syncMessage;\n }\n const asyncMessage = errors[ASYNC_ERROR_KEY];\n if (typeof asyncMessage === 'string') {\n snapshot.asyncErrors[currentPath] = asyncMessage;\n }\n }, '');\n return snapshot;\n}\nfunction traverseControls(control, visitor, path = '') {\n visitor(path, control);\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n traverseControls(child, visitor, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n control.controls.forEach((child, index) => {\n traverseControls(child, visitor, joinPath(path, String(index)));\n });\n }\n}\nfunction waitForPending(control) {\n if (!control.pending) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const subscription = control.statusChanges.subscribe(() => {\n if (!control.pending) {\n subscription.unsubscribe();\n resolve();\n }\n });\n });\n}\nfunction isPlainObject(value) {\n return (!!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]');\n}\nfunction tryInjectDestroyRef() {\n try {\n return inject(DestroyRef);\n }\n catch {\n return null;\n }\n}\nfunction normalizeSyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.validators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = (value) => {\n for (const validator of validators) {\n const result = validator(value);\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction normalizeAsyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.asyncValidators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = async (value) => {\n for (const validator of validators) {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction toValidatorArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n return Object.values(input);\n}\nfunction hydrateInitialValues(initialValues, persistKey, storage) {\n const baseClone = deepClone(initialValues);\n if (!persistKey || !storage) {\n return { values: baseClone };\n }\n try {\n const storedRaw = storage.getItem(persistKey);\n if (!storedRaw) {\n return { values: baseClone };\n }\n const parsed = JSON.parse(storedRaw);\n const merged = mergeDeep(baseClone, parsed);\n return { values: merged };\n }\n catch {\n return { values: baseClone };\n }\n}\nfunction assertTreeNode(state) {\n if (!state || typeof state !== 'object') {\n throw new Error('Invalid state structure for form tree');\n }\n}\nfunction resolveFieldConfig(fieldConfigs, path) {\n if (fieldConfigs[path]) {\n return fieldConfigs[path];\n }\n const keys = Object.keys(fieldConfigs);\n let match;\n for (const key of keys) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!match || match.key.length < key.length) {\n match = { key, config: fieldConfigs[key] };\n }\n }\n }\n if (match) {\n return match.config;\n }\n return fieldConfigs['*'];\n}\nfunction findValidator(map, path) {\n if (map[path]) {\n return map[path];\n }\n let candidate;\n for (const key of Object.keys(map)) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!candidate || candidate.key.length < key.length) {\n candidate = { key, value: map[key] };\n }\n }\n }\n if (candidate) {\n return candidate.value;\n }\n return map['*'];\n}\nfunction createPersistController(formGroup, persistKey, storage, debounceMs, cleanupCallbacks) {\n if (!persistKey || !storage) {\n return {\n schedulePersist: () => undefined,\n persistImmediately: () => undefined,\n };\n }\n let timer = null;\n const persist = () => {\n try {\n const payload = JSON.stringify(formGroup.getRawValue());\n storage.setItem(persistKey, payload);\n }\n catch {\n }\n };\n const schedulePersist = () => {\n if (debounceMs <= 0) {\n persist();\n return;\n }\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n timer = null;\n persist();\n }, debounceMs);\n };\n cleanupCallbacks.push(() => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n return {\n schedulePersist,\n persistImmediately: persist,\n };\n}\nexport class SignalValueDirective {\n signalTreeSignalValue;\n signalTreeSignalValueChange = new EventEmitter();\n elementRef = inject(ElementRef);\n renderer = inject(Renderer2);\n onChange = () => {\n };\n onTouched = () => {\n };\n ngOnInit() {\n effect(() => {\n const value = this.signalTreeSignalValue();\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n });\n }\n handleChange(event) {\n const target = event.target;\n const value = target?.value;\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n this.signalTreeSignalValueChange.emit(value);\n this.onChange(value);\n }\n }\n handleBlur() {\n this.onTouched();\n }\n writeValue(value) {\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.11\", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.11\", type: SignalValueDirective, isStandalone: true, selector: \"[signalTreeSignalValue]\", inputs: { signalTreeSignalValue: \"signalTreeSignalValue\" }, outputs: { signalTreeSignalValueChange: \"signalTreeSignalValueChange\" }, host: { listeners: { \"input\": \"handleChange($event)\", \"change\": \"handleChange($event)\", \"blur\": \"handleBlur()\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.11\", ngImport: i0, type: SignalValueDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[signalTreeSignalValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ],\n standalone: true,\n }]\n }], propDecorators: { signalTreeSignalValue: [{\n type: Input\n }], signalTreeSignalValueChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['input', ['$event']]\n }, {\n type: HostListener,\n args: ['change', ['$event']]\n }], handleBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\nexport const SIGNAL_FORM_DIRECTIVES = [SignalValueDirective];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvY29yZS9uZy1mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUdOLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osUUFBUSxFQUNSLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7O0FBc0c5RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUUxQjtJQUNBO0lBRmxCLFlBQ2tCLE1BQThCLEVBQzlCLFdBQW1DO1FBRW5ELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBSGhCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUduRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUtELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQVUxQyxNQUFNLFVBQVUsY0FBYyxDQUM1QixhQUFnQixFQUNoQixTQUE2QixFQUFFO0lBRS9CLE1BQU0sRUFD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RUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQUVFLEtBQUs7O3NCQUNMLE1BQU07O3NCQW1CTixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2hDLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFXakMsWUFBWTt1QkFBQyxNQUFNOztBQWdDdEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaXNTaWduYWwsXG4gIGZvcndhcmRSZWYsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEFzeW5jVmFsaWRhdG9yRm4gYXMgQW5ndWxhckFzeW5jVmFsaWRhdG9yRm4sXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbiBhcyBBbmd1bGFyVmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHNpZ25hbFRyZWUgfSBmcm9tICdAc2lnbmFsdHJlZS9jb3JlJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgbWF0Y2hQYXRoLCBtZXJnZURlZXAsIHBhcnNlUGF0aCB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuZ3VsYXIgRm9ybXMgSW50ZWdyYXRpb24gZm9yIFNpZ25hbFRyZWVcbiAqXG4gKiBQcm92aWRlcyBjb21wcmVoZW5zaXZlIEFuZ3VsYXIgZm9ybSBpbnRlZ3JhdGlvbiBpbmNsdWRpbmcgRm9ybVRyZWUsXG4gKiBkaXJlY3RpdmVzLCB2YWxpZGF0b3JzLCBlbmhhbmNlZCBhcnJheSBvcGVyYXRpb25zLCBhbmQgUnhKUyBicmlkZ2UuXG4gKi9cblxuLy8gUmUtZXhwb3J0IGNvcmUgdHlwZXMgbmVlZGVkIGZvciBmb3Jtc1xuaW1wb3J0IHR5cGUgeyBTaWduYWxUcmVlLCBUcmVlQ29uZmlnLCBUcmVlTm9kZSB9IGZyb20gJ0BzaWduYWx0cmVlL2NvcmUnO1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZPUk0gVFJFRSBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPFQ+ID0gKFxuICB2YWx1ZTogVFxuKSA9PiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHwgUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcblxuZXhwb3J0IHR5cGUgRW5oYW5jZWRBcnJheVNpZ25hbDxUPiA9IFdyaXRhYmxlU2lnbmFsPFRbXT4gJiB7XG4gIHB1c2g6IChpdGVtOiBUKSA9PiB2b2lkO1xuICByZW1vdmVBdDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNldEF0OiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IFQpID0+IHZvaWQ7XG4gIGluc2VydEF0OiAoaW5kZXg6IG51bWJlciwgaXRlbTogVCkgPT4gdm9pZDtcbiAgbW92ZTogKGZyb206IG51bWJlciwgdG86IG51bWJlcikgPT4gdm9pZDtcbiAgY2xlYXI6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFZhbGlkYXRvciA9ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHwgbnVsbDtcblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZENvbmZpZyB7XG4gIGRlYm91bmNlTXM/OiBudW1iZXI7XG4gIHZhbGlkYXRvcnM/OiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcj4gfCBGaWVsZFZhbGlkYXRvcltdO1xuICBhc3luY1ZhbGlkYXRvcnM/OlxuICAgIHwgUmVjb3JkPHN0cmluZywgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+PlxuICAgIHwgQXJyYXk8Rm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25hbEZpZWxkPFQ+IHtcbiAgd2hlbjogKHZhbHVlczogVCkgPT4gYm9vbGVhbjtcbiAgZmllbGRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtVHJlZU9wdGlvbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PlxuICBleHRlbmRzIFRyZWVDb25maWcge1xuICB2YWxpZGF0b3JzPzogU3luY1ZhbGlkYXRvck1hcDtcbiAgYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JNYXA7XG4gIGRlc3Ryb3lSZWY/OiBEZXN0cm95UmVmO1xuICBmaWVsZENvbmZpZ3M/OiBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZz47XG4gIGNvbmRpdGlvbmFscz86IEFycmF5PENvbmRpdGlvbmFsRmllbGQ8VD4+O1xuICBwZXJzaXN0S2V5Pzogc3RyaW5nO1xuICBzdG9yYWdlPzogUGljazxTdG9yYWdlLCAnZ2V0SXRlbScgfCAnc2V0SXRlbScgfCAncmVtb3ZlSXRlbSc+O1xuICBwZXJzaXN0RGVib3VuY2VNcz86IG51bWJlcjtcbiAgdmFsaWRhdGlvbkJhdGNoTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRm9ybSB0cmVlIHR5cGUgdGhhdCBmbGF0dGVucyB0aGUgc3RhdGUgYWNjZXNzIHdoaWxlIG1haW50YWluaW5nIGZvcm0tc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgdHlwZSBGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICAvLyBGbGF0dGVuZWQgc3RhdGUgYWNjZXNzIC0gZGlyZWN0IGFjY2VzcyB0byBmb3JtIHZhbHVlcyBhcyBzaWduYWxzXG4gIHN0YXRlOiBUcmVlTm9kZTxUPjtcbiAgJDogVHJlZU5vZGU8VD47IC8vIEFsaWFzIGZvciBzdGF0ZVxuXG4gIC8vIFVuZGVybHlpbmcgQW5ndWxhciBmb3JtIHN0cnVjdHVyZVxuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgLy8gRm9ybS1zcGVjaWZpYyBzaWduYWxzXG4gIGVycm9yczogV3JpdGFibGVTaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGFzeW5jRXJyb3JzOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgdG91Y2hlZDogV3JpdGFibGVTaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+O1xuICBhc3luY1ZhbGlkYXRpbmc6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcbiAgZGlydHk6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuICB2YWxpZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG4gIHN1Ym1pdHRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8vIEZvcm0gbWV0aG9kc1xuICB1bndyYXAoKTogVDtcbiAgc2V0VmFsdWUoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBzZXRWYWx1ZXModmFsdWVzOiBQYXJ0aWFsPFQ+KTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcbiAgc3VibWl0PFRSZXN1bHQ+KHN1Ym1pdEZuOiAodmFsdWVzOiBUKSA9PiBQcm9taXNlPFRSZXN1bHQ+KTogUHJvbWlzZTxUUmVzdWx0PjtcbiAgdmFsaWRhdGUoZmllbGQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIEZpZWxkLWxldmVsIGhlbHBlcnNcbiAgZ2V0RmllbGRFcnJvcihmaWVsZDogc3RyaW5nKTogU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldEZpZWxkQXN5bmNFcnJvcihmaWVsZDogc3RyaW5nKTogU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldEZpZWxkVG91Y2hlZChmaWVsZDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPjtcbiAgaXNGaWVsZEFzeW5jVmFsaWRhdGluZyhmaWVsZDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuXG4gIC8vIERpcmVjdCBhY2Nlc3MgdG8gZmllbGQgZXJyb3JzXG4gIGZpZWxkRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPj47XG4gIGZpZWxkQXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PjtcblxuICAvLyBLZWVwIHZhbHVlcyB0cmVlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIHZhbHVlczogU2lnbmFsVHJlZTxUPjtcblxuICAvLyBDbGVhbnVwIGhlbHBlcnMgdG8gdGVhciBkb3duIHN1YnNjcmlwdGlvbnMgY3JlYXRlZCBmb3IgYnJpZGdlIGxheWVyXG4gIGRlc3Ryb3koKTogdm9pZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHB1YmxpYyByZWFkb25seSBhc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICApIHtcbiAgICBzdXBlcignRm9ybSB2YWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdGb3JtVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG50eXBlIFN5bmNWYWxpZGF0b3JNYXAgPSBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IHVua25vd24pID0+IHN0cmluZyB8IG51bGw+O1xudHlwZSBBc3luY1ZhbGlkYXRvck1hcCA9IFJlY29yZDxzdHJpbmcsIEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj47XG5cbmNvbnN0IFNZTkNfRVJST1JfS0VZID0gJ3NpZ25hbHRyZWUnO1xuY29uc3QgQVNZTkNfRVJST1JfS0VZID0gJ3NpZ25hbHRyZWVBc3luYyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVVElMSVRZIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZPUk0gVFJFRSBJTVBMRU1FTlRBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1UcmVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGluaXRpYWxWYWx1ZXM6IFQsXG4gIGNvbmZpZzogRm9ybVRyZWVPcHRpb25zPFQ+ID0ge31cbik6IEZvcm1UcmVlPFQ+IHtcbiAgY29uc3Qge1xuICAgIHZhbGlkYXRvcnM6IGJhc2VWYWxpZGF0b3JzID0ge30sXG4gICAgYXN5bmNWYWxpZGF0b3JzOiBiYXNlQXN5bmNWYWxpZGF0b3JzID0ge30sXG4gICAgZGVzdHJveVJlZjogcHJvdmlkZWREZXN0cm95UmVmLFxuICAgIGZpZWxkQ29uZmlncyA9IHt9LFxuICAgIGNvbmRpdGlvbmFscyA9IFtdLFxuICAgIHBlcnNpc3RLZXksXG4gICAgc3RvcmFnZSxcbiAgICBwZXJzaXN0RGVib3VuY2VNcyA9IDEwMCxcbiAgICB2YWxpZGF0aW9uQmF0Y2hNcyA9IDAsXG4gICAgLi4udHJlZUNvbmZpZ1xuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHN5bmNWYWxpZGF0b3JzID0gbm9ybWFsaXplU3luY1ZhbGlkYXRvcnMoYmFzZVZhbGlkYXRvcnMsIGZpZWxkQ29uZmlncyk7XG4gIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IG5vcm1hbGl6ZUFzeW5jVmFsaWRhdG9ycyhcbiAgICBiYXNlQXN5bmNWYWxpZGF0b3JzLFxuICAgIGZpZWxkQ29uZmlnc1xuICApO1xuXG4gIGNvbnN0IHsgdmFsdWVzOiBoeWRyYXRlZEluaXRpYWxWYWx1ZXMgfSA9IGh5ZHJhdGVJbml0aWFsVmFsdWVzKFxuICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgcGVyc2lzdEtleSxcbiAgICBzdG9yYWdlXG4gICk7XG4gIGNvbnN0IGluaXRpYWxTbmFwc2hvdCA9IGRlZXBDbG9uZShoeWRyYXRlZEluaXRpYWxWYWx1ZXMpO1xuXG4gIGNvbnN0IHZhbHVlc1RyZWUgPSBzaWduYWxUcmVlKGh5ZHJhdGVkSW5pdGlhbFZhbHVlcywgdHJlZUNvbmZpZyk7XG4gIGFzc2VydFRyZWVOb2RlPFQ+KHZhbHVlc1RyZWUuc3RhdGUpO1xuICBjb25zdCBmbGF0dGVuZWRTdGF0ZSA9IHZhbHVlc1RyZWUuc3RhdGU7XG5cbiAgZW5oYW5jZUFycmF5c1JlY3Vyc2l2ZWx5KFxuICAgIGZsYXR0ZW5lZFN0YXRlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTtcblxuICBjb25zdCBmb3JtR3JvdXAgPSBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gICAgaHlkcmF0ZWRJbml0aWFsVmFsdWVzLFxuICAgICcnLFxuICAgIHN5bmNWYWxpZGF0b3JzLFxuICAgIGFzeW5jVmFsaWRhdG9yc1xuICApIGFzIEZvcm1Hcm91cDtcblxuICBjb25zdCBkZXN0cm95UmVmID0gcHJvdmlkZWREZXN0cm95UmVmID8/IHRyeUluamVjdERlc3Ryb3lSZWYoKTtcbiAgY29uc3QgY2xlYW51cENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICBjb25zdCBhc3luY0Vycm9ycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG4gIGNvbnN0IHRvdWNoZWQgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcbiAgY29uc3QgYXN5bmNWYWxpZGF0aW5nID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSk7XG4gIGNvbnN0IGRpcnR5ID0gc2lnbmFsKGZvcm1Hcm91cC5kaXJ0eSk7XG4gIGNvbnN0IHZhbGlkID0gc2lnbmFsKGZvcm1Hcm91cC52YWxpZCAmJiAhZm9ybUdyb3VwLnBlbmRpbmcpO1xuICBjb25zdCBzdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCByZWZyZXNoUnVubmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gY29sbGVjdENvbnRyb2xTbmFwc2hvdChmb3JtR3JvdXApO1xuICAgIGVycm9ycy5zZXQoc25hcHNob3Quc3luY0Vycm9ycyk7XG4gICAgYXN5bmNFcnJvcnMuc2V0KHNuYXBzaG90LmFzeW5jRXJyb3JzKTtcbiAgICB0b3VjaGVkLnNldChzbmFwc2hvdC50b3VjaGVkKTtcbiAgICBhc3luY1ZhbGlkYXRpbmcuc2V0KHNuYXBzaG90LnBlbmRpbmcpO1xuICAgIGRpcnR5LnNldChmb3JtR3JvdXAuZGlydHkpO1xuICAgIHZhbGlkLnNldChmb3JtR3JvdXAudmFsaWQgJiYgIWZvcm1Hcm91cC5wZW5kaW5nKTtcbiAgfTtcblxuICBsZXQgcmVmcmVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBjb25zdCByZWZyZXNoQWdncmVnYXRlcyA9IChpbW1lZGlhdGUgPSBmYWxzZSkgPT4ge1xuICAgIGlmIChpbW1lZGlhdGUgfHwgdmFsaWRhdGlvbkJhdGNoTXMgPD0gMCkge1xuICAgICAgaWYgKHJlZnJlc2hUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQocmVmcmVzaFRpbWVyKTtcbiAgICAgICAgcmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJlZnJlc2hSdW5uZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQocmVmcmVzaFRpbWVyKTtcbiAgICB9XG5cbiAgICByZWZyZXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgICByZWZyZXNoUnVubmVyKCk7XG4gICAgfSwgdmFsaWRhdGlvbkJhdGNoTXMpO1xuICB9O1xuXG4gIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuXG4gIGNvbnN0IHBlcnNpc3RDb250cm9sbGVyID0gY3JlYXRlUGVyc2lzdENvbnRyb2xsZXIoXG4gICAgZm9ybUdyb3VwLFxuICAgIHBlcnNpc3RLZXksXG4gICAgc3RvcmFnZSxcbiAgICBwZXJzaXN0RGVib3VuY2VNcyxcbiAgICBjbGVhbnVwQ2FsbGJhY2tzXG4gICk7XG4gIHBlcnNpc3RDb250cm9sbGVyLnBlcnNpc3RJbW1lZGlhdGVseSgpO1xuXG4gIGNvbnN0IGZpZWxkRXJyb3JLZXlzID0gbmV3IFNldChbXG4gICAgLi4uT2JqZWN0LmtleXMoc3luY1ZhbGlkYXRvcnMpLFxuICAgIC4uLk9iamVjdC5rZXlzKGFzeW5jVmFsaWRhdG9ycyksXG4gIF0pO1xuXG4gIGNvbnN0IGZpZWxkRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPj4gPSB7fTtcbiAgY29uc3QgZmllbGRBc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+ID0ge307XG5cbiAgZmllbGRFcnJvcktleXMuZm9yRWFjaCgoZmllbGRQYXRoKSA9PiB7XG4gICAgZmllbGRFcnJvcnNbZmllbGRQYXRoXSA9IGNvbXB1dGVkKCgpID0+IGVycm9ycygpW2ZpZWxkUGF0aF0pO1xuICAgIGZpZWxkQXN5bmNFcnJvcnNbZmllbGRQYXRoXSA9IGNvbXB1dGVkKCgpID0+IGFzeW5jRXJyb3JzKClbZmllbGRQYXRoXSk7XG4gIH0pO1xuXG4gIGNvbnN0IGZpZWxkQ29uZmlnTG9va3VwID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICByZXNvbHZlRmllbGRDb25maWcoZmllbGRDb25maWdzLCBwYXRoKTtcblxuICBjb25zdCBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChba2V5LCBjaGlsZF0pID0+IHtcbiAgICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUoY2hpbGQsIGpvaW5QYXRoKHBhdGgsIGtleSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGFycmF5U2lnbmFsID0gZ2V0U2lnbmFsQXRQYXRoKGZsYXR0ZW5lZFN0YXRlLCBwYXRoKTtcbiAgICAgIGlmIChhcnJheVNpZ25hbCkge1xuICAgICAgICBjb25uZWN0Rm9ybUFycmF5QW5kU2lnbmFsKFxuICAgICAgICAgIGNvbnRyb2wsXG4gICAgICAgICAgYXJyYXlTaWduYWwgYXMgRW5oYW5jZWRBcnJheVNpZ25hbDx1bmtub3duPixcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLFxuICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycyxcbiAgICAgICAgICBjbGVhbnVwQ2FsbGJhY2tzLFxuICAgICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGNoaWxkLCBqb2luUGF0aChwYXRoLCBTdHJpbmcoaW5kZXgpKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYWxBdFBhdGggPSBnZXRTaWduYWxBdFBhdGgoZmxhdHRlbmVkU3RhdGUsIHBhdGgpO1xuICAgIGlmIChzaWduYWxBdFBhdGgpIHtcbiAgICAgIGNvbm5lY3RDb250cm9sQW5kU2lnbmFsKFxuICAgICAgICBjb250cm9sIGFzIEZvcm1Db250cm9sLFxuICAgICAgICBzaWduYWxBdFBhdGggYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4sXG4gICAgICAgIGNsZWFudXBDYWxsYmFja3MsXG4gICAgICAgIGZpZWxkQ29uZmlnTG9va3VwKHBhdGgpXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZShmb3JtR3JvdXAsICcnKTtcblxuICBjb25zdCBjb25kaXRpb25hbFN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIGNvbnN0IGFwcGx5Q29uZGl0aW9uYWxzID1cbiAgICBjb25kaXRpb25hbHMubGVuZ3RoID4gMFxuICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgYXMgVDtcbiAgICAgICAgICBjb25kaXRpb25hbHMuZm9yRWFjaCgoeyB3aGVuLCBmaWVsZHMgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IHZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmlzaWJsZSA9IHdoZW4odmFsdWVzKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICB2aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZFBhdGgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGRQYXRoKTtcbiAgICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gY29uZGl0aW9uYWxTdGF0ZS5nZXQoZmllbGRQYXRoKTtcbiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSB2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbmRpdGlvbmFsU3RhdGUuc2V0KGZpZWxkUGF0aCwgdmlzaWJsZSk7XG4gICAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBhcHBseUNvbmRpdGlvbmFscygpO1xuXG4gIGNvbnN0IGFnZ3JlZ2F0ZVN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIGFnZ3JlZ2F0ZVN1YnNjcmlwdGlvbnMucHVzaChcbiAgICBmb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICByZWZyZXNoQWdncmVnYXRlcygpO1xuICAgICAgcGVyc2lzdENvbnRyb2xsZXIuc2NoZWR1bGVQZXJzaXN0KCk7XG4gICAgICBhcHBseUNvbmRpdGlvbmFscygpO1xuICAgIH0pXG4gICk7XG4gIGFnZ3JlZ2F0ZVN1YnNjcmlwdGlvbnMucHVzaChcbiAgICBmb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gcmVmcmVzaEFnZ3JlZ2F0ZXMoKSlcbiAgKTtcbiAgaWYgKGZvcm1Hcm91cC5ldmVudHMpIHtcbiAgICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBmb3JtR3JvdXAuZXZlbnRzLnN1YnNjcmliZSgoKSA9PiByZWZyZXNoQWdncmVnYXRlcygpKVxuICAgICk7XG4gIH1cblxuICBjbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgIGFnZ3JlZ2F0ZVN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgaWYgKHJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGVzdHJveVJlZikge1xuICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNsZWFudXBDYWxsYmFja3Muc3BsaWNlKDApLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNldFZhbHVlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0U2lnbmFsID0gZ2V0U2lnbmFsQXRQYXRoKGZsYXR0ZW5lZFN0YXRlLCBmaWVsZCk7XG4gICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuXG4gICAgaWYgKHRhcmdldFNpZ25hbCAmJiAnc2V0JyBpbiB0YXJnZXRTaWduYWwpIHtcbiAgICAgICh0YXJnZXRTaWduYWwgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4pLnNldCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sKSB7XG4gICAgICAoY29udHJvbCBhcyBBYnN0cmFjdENvbnRyb2wpLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgY29uc3QgdW50eXBlZENvbnRyb2wgPSBjb250cm9sIGFzIEFic3RyYWN0Q29udHJvbDtcbiAgICAgIHVudHlwZWRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHVudHlwZWRDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICB1bnR5cGVkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgIHBlcnNpc3RDb250cm9sbGVyLnNjaGVkdWxlUGVyc2lzdCgpO1xuICB9O1xuXG4gIGNvbnN0IHNldFZhbHVlcyA9ICh2YWx1ZXM6IFBhcnRpYWw8VD4pID0+IHtcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgZm9ybUdyb3VwLnJlc2V0KGluaXRpYWxTbmFwc2hvdCk7XG4gICAgc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgIHBlcnNpc3RDb250cm9sbGVyLnBlcnNpc3RJbW1lZGlhdGVseSgpO1xuICAgIGFwcGx5Q29uZGl0aW9uYWxzKCk7XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGUgPSBhc3luYyAoZmllbGQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgICBhd2FpdCB3YWl0Rm9yUGVuZGluZyhjb250cm9sKTtcbiAgICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgYXdhaXQgd2FpdEZvclBlbmRpbmcoZm9ybUdyb3VwKTtcbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBzdWJtaXQgPSBhc3luYyA8VFJlc3VsdD4oXG4gICAgc3VibWl0Rm46ICh2YWx1ZXM6IFQpID0+IFByb21pc2U8VFJlc3VsdD5cbiAgKTogUHJvbWlzZTxUUmVzdWx0PiA9PiB7XG4gICAgc3VibWl0dGluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHZhbGlkYXRlKCk7XG5cbiAgICAgIGlmICghdmFsaWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRm9ybVZhbGlkYXRpb25FcnJvcihlcnJvcnMoKSwgYXN5bmNFcnJvcnMoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSBhcyBUO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VibWl0Rm4oY3VycmVudFZhbHVlcyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICBjbGVhbnVwQ2FsbGJhY2tzLnNwbGljZSgwKS5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG4gIH07XG5cbiAgY29uc3QgZm9ybVRyZWU6IEZvcm1UcmVlPFQ+ID0ge1xuICAgIHN0YXRlOiBmbGF0dGVuZWRTdGF0ZSxcbiAgICAkOiBmbGF0dGVuZWRTdGF0ZSxcbiAgICBmb3JtOiBmb3JtR3JvdXAsXG4gICAgZXJyb3JzLFxuICAgIGFzeW5jRXJyb3JzLFxuICAgIHRvdWNoZWQsXG4gICAgYXN5bmNWYWxpZGF0aW5nLFxuICAgIGRpcnR5LFxuICAgIHZhbGlkLFxuICAgIHN1Ym1pdHRpbmcsXG4gICAgdW53cmFwOiAoKSA9PiB2YWx1ZXNUcmVlKCksXG4gICAgc2V0VmFsdWUsXG4gICAgc2V0VmFsdWVzLFxuICAgIHJlc2V0LFxuICAgIHN1Ym1pdCxcbiAgICB2YWxpZGF0ZSxcbiAgICBnZXRGaWVsZEVycm9yOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGZpZWxkRXJyb3JzW2ZpZWxkXSB8fCBjb21wdXRlZCgoKSA9PiB1bmRlZmluZWQpLFxuICAgIGdldEZpZWxkQXN5bmNFcnJvcjogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBmaWVsZEFzeW5jRXJyb3JzW2ZpZWxkXSB8fCBjb21wdXRlZCgoKSA9PiB1bmRlZmluZWQpLFxuICAgIGdldEZpZWxkVG91Y2hlZDogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBjb21wdXRlZCgoKSA9PiBmb3JtR3JvdXAuZ2V0KGZpZWxkKT8udG91Y2hlZCA/PyBmYWxzZSksXG4gICAgaXNGaWVsZFZhbGlkOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICByZXR1cm4gISFjb250cm9sICYmIGNvbnRyb2wudmFsaWQgJiYgIWNvbnRyb2wucGVuZGluZztcbiAgICAgIH0pLFxuICAgIGlzRmllbGRBc3luY1ZhbGlkYXRpbmc6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgY29tcHV0ZWQoKCkgPT4gISFmb3JtR3JvdXAuZ2V0KGZpZWxkKT8ucGVuZGluZyksXG4gICAgZmllbGRFcnJvcnMsXG4gICAgZmllbGRBc3luY0Vycm9ycyxcbiAgICB2YWx1ZXM6IHZhbHVlc1RyZWUsXG4gICAgZGVzdHJveSxcbiAgfTtcblxuICByZXR1cm4gZm9ybVRyZWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaXJ0dWFsRm9ybUFycmF5PFQ+KFxuICBpdGVtczogVFtdLFxuICB2aXNpYmxlUmFuZ2U6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSxcbiAgY29udHJvbEZhY3Rvcnk6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gQWJzdHJhY3RDb250cm9sID0gKHZhbHVlKSA9PlxuICAgIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSlcbik6IEZvcm1BcnJheSB7XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdmlzaWJsZVJhbmdlLnN0YXJ0KTtcbiAgY29uc3QgZW5kID0gTWF0aC5tYXgoc3RhcnQsIHZpc2libGVSYW5nZS5lbmQpO1xuXG4gIGNvbnN0IGNvbnRyb2xzID0gaXRlbXNcbiAgICAuc2xpY2Uoc3RhcnQsIGVuZClcbiAgICAubWFwKChpdGVtLCBvZmZzZXQpID0+IGNvbnRyb2xGYWN0b3J5KGl0ZW0sIHN0YXJ0ICsgb2Zmc2V0KSk7XG5cbiAgcmV0dXJuIG5ldyBGb3JtQXJyYXkoY29udHJvbHMpO1xufVxuXG5mdW5jdGlvbiBlbmhhbmNlQXJyYXlzUmVjdXJzaXZlbHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHZpc2l0ZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KClcbik6IHZvaWQge1xuICBpZiAodmlzaXRlZC5oYXMob2JqKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2aXNpdGVkLmFkZChvYmopO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgY29uc3Qgc2lnbmFsVmFsdWUgPSAodmFsdWUgYXMgU2lnbmFsPHVua25vd24+KSgpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2lnbmFsVmFsdWUpKSB7XG4gICAgICAgIG9ialtrZXldID0gZW5oYW5jZUFycmF5KHZhbHVlIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd25bXT4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgKSB7XG4gICAgICBlbmhhbmNlQXJyYXlzUmVjdXJzaXZlbHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHZpc2l0ZWQpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBlbmhhbmNlQXJyYXkgPSA8VT4oXG4gIGFycmF5U2lnbmFsOiBXcml0YWJsZVNpZ25hbDxVW10+XG4pOiBFbmhhbmNlZEFycmF5U2lnbmFsPFU+ID0+IHtcbiAgY29uc3QgZW5oYW5jZWQgPSBhcnJheVNpZ25hbCBhcyBFbmhhbmNlZEFycmF5U2lnbmFsPFU+O1xuXG4gIGVuaGFuY2VkLnB1c2ggPSAoaXRlbTogVSkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PiBbLi4uYXJyLCBpdGVtXSk7XG4gIH07XG5cbiAgZW5oYW5jZWQucmVtb3ZlQXQgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PiBhcnIuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpO1xuICB9O1xuXG4gIGVuaGFuY2VkLnNldEF0ID0gKGluZGV4OiBudW1iZXIsIHZhbHVlOiBVKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+XG4gICAgICBhcnIubWFwKChpdGVtLCBpKSA9PiAoaSA9PT0gaW5kZXggPyB2YWx1ZSA6IGl0ZW0pKVxuICAgICk7XG4gIH07XG5cbiAgZW5oYW5jZWQuaW5zZXJ0QXQgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogVSkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PiBbXG4gICAgICAuLi5hcnIuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgaXRlbSxcbiAgICAgIC4uLmFyci5zbGljZShpbmRleCksXG4gICAgXSk7XG4gIH07XG5cbiAgZW5oYW5jZWQubW92ZSA9IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4ge1xuICAgICAgY29uc3QgbmV3QXJyID0gWy4uLmFycl07XG4gICAgICBjb25zdCBbaXRlbV0gPSBuZXdBcnIuc3BsaWNlKGZyb20sIDEpO1xuICAgICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdBcnIuc3BsaWNlKHRvLCAwLCBpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdBcnI7XG4gICAgfSk7XG4gIH07XG5cbiAgZW5oYW5jZWQuY2xlYXIgPSAoKSA9PiB7XG4gICAgYXJyYXlTaWduYWwuc2V0KFtdKTtcbiAgfTtcblxuICByZXR1cm4gZW5oYW5jZWQ7XG59O1xuXG5mdW5jdGlvbiBnZXRTaWduYWxBdFBhdGg8VD4oXG4gIG5vZGU6IFRyZWVOb2RlPFQ+LFxuICBwYXRoOiBzdHJpbmdcbik6IFdyaXRhYmxlU2lnbmFsPHVua25vd24+IHwgbnVsbCB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBwYXJzZVBhdGgocGF0aCk7XG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gbm9kZTtcblxuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICBpZiAoIWN1cnJlbnQgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gKGN1cnJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdO1xuICB9XG5cbiAgaWYgKGlzU2lnbmFsKGN1cnJlbnQpKSB7XG4gICAgcmV0dXJuIGN1cnJlbnQgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj47XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gam9pblBhdGgocGFyZW50OiBzdHJpbmcsIHNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJlbnQgPyBgJHtwYXJlbnR9LiR7c2VnbWVudH1gIDogc2VnbWVudDtcbn1cblxuZnVuY3Rpb24gd3JhcFN5bmNWYWxpZGF0b3IoXG4gIHZhbGlkYXRvcjogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmcgfCBudWxsXG4pOiBBbmd1bGFyVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHsgW1NZTkNfRVJST1JfS0VZXTogcmVzdWx0IH0gOiBudWxsO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3cmFwQXN5bmNWYWxpZGF0b3IoXG4gIHZhbGlkYXRvcjogRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+XG4pOiBBbmd1bGFyQXN5bmNWYWxpZGF0b3JGbiB7XG4gIHJldHVybiBhc3luYyAoY29udHJvbCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYXliZUFzeW5jID0gdmFsaWRhdG9yKGNvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgPyBhd2FpdCBmaXJzdFZhbHVlRnJvbShtYXliZUFzeW5jKVxuICAgICAgICA6IGF3YWl0IG1heWJlQXN5bmM7XG4gICAgICByZXR1cm4gcmVzb2x2ZWQgPyB7IFtBU1lOQ19FUlJPUl9LRVldOiByZXNvbHZlZCB9IDogbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IFtBU1lOQ19FUlJPUl9LRVldOiAnVmFsaWRhdGlvbiBlcnJvcicgfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgdmFsdWU6IHVua25vd24sXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsaWRhdG9yczogU3luY1ZhbGlkYXRvck1hcCxcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvck1hcFxuKTogQWJzdHJhY3RDb250cm9sIHtcbiAgY29uc3Qgc3luY1ZhbGlkYXRvciA9IGZpbmRWYWxpZGF0b3IodmFsaWRhdG9ycywgcGF0aCk7XG4gIGNvbnN0IGFzeW5jVmFsaWRhdG9yID0gZmluZFZhbGlkYXRvcihhc3luY1ZhbGlkYXRvcnMsIHBhdGgpO1xuXG4gIGNvbnN0IHN5bmNGbnMgPSBzeW5jVmFsaWRhdG9yXG4gICAgPyBbd3JhcFN5bmNWYWxpZGF0b3Ioc3luY1ZhbGlkYXRvcildXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFzeW5jRm5zID0gYXN5bmNWYWxpZGF0b3JcbiAgICA/IFt3cmFwQXN5bmNWYWxpZGF0b3IoYXN5bmNWYWxpZGF0b3IpXVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNvbnRyb2xzID0gdmFsdWUubWFwKChpdGVtLCBpbmRleCkgPT5cbiAgICAgIGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICAgICAgaXRlbSxcbiAgICAgICAgam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSksXG4gICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yc1xuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBGb3JtQXJyYXkoY29udHJvbHMsIHN5bmNGbnMsIGFzeW5jRm5zKTtcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBjb250cm9sc1trZXldID0gY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgam9pblBhdGgocGF0aCwga2V5KSxcbiAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChjb250cm9scywge1xuICAgICAgdmFsaWRhdG9yczogc3luY0ZucyxcbiAgICAgIGFzeW5jVmFsaWRhdG9yczogYXN5bmNGbnMsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHZhbHVlLCB7XG4gICAgdmFsaWRhdG9yczogc3luY0ZucyxcbiAgICBhc3luY1ZhbGlkYXRvcnM6IGFzeW5jRm5zLFxuICAgIG5vbk51bGxhYmxlOiBmYWxzZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3RDb250cm9sQW5kU2lnbmFsKFxuICBjb250cm9sOiBGb3JtQ29udHJvbCxcbiAgdmFsdWVTaWduYWw6IFdyaXRhYmxlU2lnbmFsPHVua25vd24+LFxuICBjbGVhbnVwQ2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPixcbiAgZmllbGRDb25maWc/OiBGaWVsZENvbmZpZ1xuKTogdm9pZCB7XG4gIGxldCB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIGxldCB1cGRhdGluZ0Zyb21TaWduYWwgPSBmYWxzZTtcbiAgbGV0IHZlcnNpb25Db3VudGVyID0gMDtcbiAgbGV0IGxhc3RDb250cm9sVmVyc2lvbiA9IDA7XG4gIGxldCBjb250cm9sRGVib3VuY2VUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgZGVib3VuY2VNcyA9IGZpZWxkQ29uZmlnPy5kZWJvdW5jZU1zID8/IDA7XG5cbiAgY29uc3Qgb3JpZ2luYWxTZXQgPSB2YWx1ZVNpZ25hbC5zZXQuYmluZCh2YWx1ZVNpZ25hbCk7XG4gIGNvbnN0IG9yaWdpbmFsVXBkYXRlID0gdmFsdWVTaWduYWwudXBkYXRlLmJpbmQodmFsdWVTaWduYWwpO1xuXG4gIGNvbnN0IGFwcGx5Q29udHJvbFZhbHVlID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgdXBkYXRpbmdGcm9tU2lnbmFsID0gdHJ1ZTtcbiAgICBpZiAoIU9iamVjdC5pcyhjb250cm9sLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHVudHlwZWRDb250cm9sID0gY29udHJvbCBhcyBBYnN0cmFjdENvbnRyb2w7XG4gICAgICB1bnR5cGVkQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB1bnR5cGVkQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB1cGRhdGluZ0Zyb21TaWduYWwgPSBmYWxzZTtcbiAgfTtcblxuICB2YWx1ZVNpZ25hbC5zZXQgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9ICsrdmVyc2lvbkNvdW50ZXI7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUpO1xuICAgIGlmICh1cGRhdGluZ0Zyb21Db250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsYXN0Q29udHJvbFZlcnNpb24gPiBjdXJyZW50VmVyc2lvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBseUNvbnRyb2xWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgdmFsdWVTaWduYWwudXBkYXRlID0gKHVwZGF0ZXIpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gdXBkYXRlcih2YWx1ZVNpZ25hbCgpKTtcbiAgICB2YWx1ZVNpZ25hbC5zZXQobmV4dCk7XG4gIH07XG5cbiAgY29uc3QgcHVzaFVwZGF0ZUZyb21Db250cm9sID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgdXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgbGFzdENvbnRyb2xWZXJzaW9uID0gKyt2ZXJzaW9uQ291bnRlcjtcbiAgICBvcmlnaW5hbFNldCh2YWx1ZSk7XG4gICAgdXBkYXRpbmdGcm9tQ29udHJvbCA9IGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbnRyb2xDaGFuZ2UgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAodXBkYXRpbmdGcm9tU2lnbmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRlYm91bmNlTXMgPiAwKSB7XG4gICAgICBpZiAoY29udHJvbERlYm91bmNlVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRyb2xEZWJvdW5jZVRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2xEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnRyb2xEZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgICAgcHVzaFVwZGF0ZUZyb21Db250cm9sKHZhbHVlKTtcbiAgICAgIH0sIGRlYm91bmNlTXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1c2hVcGRhdGVGcm9tQ29udHJvbCh2YWx1ZSk7XG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgIGhhbmRsZUNvbnRyb2xDaGFuZ2UodmFsdWUpO1xuICB9KTtcblxuICBjbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHZhbHVlU2lnbmFsLnNldCA9IG9yaWdpbmFsU2V0O1xuICAgIHZhbHVlU2lnbmFsLnVwZGF0ZSA9IG9yaWdpbmFsVXBkYXRlO1xuICAgIGlmIChjb250cm9sRGVib3VuY2VUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KGNvbnRyb2xEZWJvdW5jZVRpbWVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0Rm9ybUFycmF5QW5kU2lnbmFsKFxuICBmb3JtQXJyYXk6IEZvcm1BcnJheSxcbiAgYXJyYXlTaWduYWw6IEVuaGFuY2VkQXJyYXlTaWduYWw8dW5rbm93bj4sXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsaWRhdG9yczogU3luY1ZhbGlkYXRvck1hcCxcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvck1hcCxcbiAgY2xlYW51cENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4sXG4gIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuICBsZXQgdXBkYXRpbmdGcm9tQ29udHJvbCA9IGZhbHNlO1xuICBsZXQgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ2luYWxTZXQgPSBhcnJheVNpZ25hbC5zZXQuYmluZChhcnJheVNpZ25hbCk7XG4gIGNvbnN0IG9yaWdpbmFsVXBkYXRlID0gYXJyYXlTaWduYWwudXBkYXRlLmJpbmQoYXJyYXlTaWduYWwpO1xuXG4gIGFycmF5U2lnbmFsLnNldCA9ICh2YWx1ZTogdW5rbm93bltdKSA9PiB7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUpO1xuICAgIGlmICh1cGRhdGluZ0Zyb21Db250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IHRydWU7XG4gICAgc3luY0Zvcm1BcnJheUZyb21WYWx1ZShcbiAgICAgIGZvcm1BcnJheSxcbiAgICAgIHZhbHVlLFxuICAgICAgcGF0aCxcbiAgICAgIHZhbGlkYXRvcnMsXG4gICAgICBhc3luY1ZhbGlkYXRvcnMsXG4gICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICAgICk7XG4gICAgZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gICAgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG4gIH07XG5cbiAgYXJyYXlTaWduYWwudXBkYXRlID0gKHVwZGF0ZXIpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gdXBkYXRlcihhcnJheVNpZ25hbCgpKTtcbiAgICBhcnJheVNpZ25hbC5zZXQobmV4dCk7XG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ybUFycmF5LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHVwZGF0aW5nRnJvbVNpZ25hbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gdHJ1ZTtcbiAgICBvcmlnaW5hbFNldCh2YWx1ZSBhcyB1bmtub3duW10pO1xuICAgIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgfSk7XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBhcnJheVNpZ25hbC5zZXQgPSBvcmlnaW5hbFNldDtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUgPSBvcmlnaW5hbFVwZGF0ZTtcbiAgfSk7XG5cbiAgc3luY0Zvcm1BcnJheUZyb21WYWx1ZShcbiAgICBmb3JtQXJyYXksXG4gICAgYXJyYXlTaWduYWwoKSxcbiAgICBwYXRoLFxuICAgIHZhbGlkYXRvcnMsXG4gICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gIGZvcm1BcnJheTogRm9ybUFycmF5LFxuICBuZXh0VmFsdWU6IHVua25vd25bXSxcbiAgcGF0aDogc3RyaW5nLFxuICB2YWxpZGF0b3JzOiBTeW5jVmFsaWRhdG9yTWFwLFxuICBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yTWFwLFxuICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZTogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogc3RyaW5nKSA9PiB2b2lkXG4pOiB2b2lkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG5leHRWYWx1ZSkpIHtcbiAgICBuZXh0VmFsdWUgPSBbXTtcbiAgfVxuXG4gIHdoaWxlIChmb3JtQXJyYXkubGVuZ3RoID4gbmV4dFZhbHVlLmxlbmd0aCkge1xuICAgIGZvcm1BcnJheS5yZW1vdmVBdChmb3JtQXJyYXkubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBuZXh0VmFsdWUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBjaGlsZFBhdGggPSBqb2luUGF0aChwYXRoLCBTdHJpbmcoaW5kZXgpKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGZvcm1BcnJheS5hdChpbmRleCk7XG5cbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICAgICAgICBpdGVtLFxuICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXgsIGNvbnRyb2wpO1xuICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUoY29udHJvbCwgY2hpbGRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmcgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgICAgIGV4aXN0aW5nLFxuICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbSA6IFtdLFxuICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgIGFzeW5jVmFsaWRhdG9ycyxcbiAgICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0aW5nIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChpdGVtKSkge1xuICAgICAgICBleGlzdGluZy5zZXRWYWx1ZShpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QuaXMoZXhpc3RpbmcudmFsdWUsIGl0ZW0pKSB7XG4gICAgICBjb25zdCB1bnR5cGVkRXhpc3RpbmcgPSBleGlzdGluZyBhcyBBYnN0cmFjdENvbnRyb2w7XG4gICAgICB1bnR5cGVkRXhpc3Rpbmcuc2V0VmFsdWUoaXRlbSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmludGVyZmFjZSBDb250cm9sU25hcHNob3Qge1xuICBzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBhc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgdG91Y2hlZDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIHBlbmRpbmc6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0Q29udHJvbFNuYXBzaG90KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IENvbnRyb2xTbmFwc2hvdCB7XG4gIGNvbnN0IHNuYXBzaG90OiBDb250cm9sU25hcHNob3QgPSB7XG4gICAgc3luY0Vycm9yczoge30sXG4gICAgYXN5bmNFcnJvcnM6IHt9LFxuICAgIHRvdWNoZWQ6IHt9LFxuICAgIHBlbmRpbmc6IHt9LFxuICB9O1xuXG4gIHRyYXZlcnNlQ29udHJvbHMoXG4gICAgY29udHJvbCxcbiAgICAoY3VycmVudFBhdGgsIGN1cnJlbnRDb250cm9sKSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRQYXRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgc25hcHNob3QudG91Y2hlZFtjdXJyZW50UGF0aF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudENvbnRyb2wucGVuZGluZykge1xuICAgICAgICBzbmFwc2hvdC5wZW5kaW5nW2N1cnJlbnRQYXRoXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IGN1cnJlbnRDb250cm9sLmVycm9ycyBhcyBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcbiAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3luY01lc3NhZ2UgPSBlcnJvcnNbU1lOQ19FUlJPUl9LRVldO1xuICAgICAgaWYgKHR5cGVvZiBzeW5jTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc25hcHNob3Quc3luY0Vycm9yc1tjdXJyZW50UGF0aF0gPSBzeW5jTWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXN5bmNNZXNzYWdlID0gZXJyb3JzW0FTWU5DX0VSUk9SX0tFWV07XG4gICAgICBpZiAodHlwZW9mIGFzeW5jTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc25hcHNob3QuYXN5bmNFcnJvcnNbY3VycmVudFBhdGhdID0gYXN5bmNNZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG4gICAgJydcbiAgKTtcblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIHRyYXZlcnNlQ29udHJvbHMoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgdmlzaXRvcjogKHBhdGg6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkLFxuICBwYXRoID0gJydcbik6IHZvaWQge1xuICB2aXNpdG9yKHBhdGgsIGNvbnRyb2wpO1xuXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykuZm9yRWFjaCgoW2tleSwgY2hpbGRdKSA9PiB7XG4gICAgICB0cmF2ZXJzZUNvbnRyb2xzKGNoaWxkLCB2aXNpdG9yLCBqb2luUGF0aChwYXRoLCBrZXkpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICB0cmF2ZXJzZUNvbnRyb2xzKGNoaWxkLCB2aXNpdG9yLCBqb2luUGF0aChwYXRoLCBTdHJpbmcoaW5kZXgpKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FpdEZvclBlbmRpbmcoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghY29udHJvbC5wZW5kaW5nKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGVuZGluZykge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICAhIXZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRyeUluamVjdERlc3Ryb3lSZWYoKTogRGVzdHJveVJlZiB8IG51bGwge1xuICB0cnkge1xuICAgIHJldHVybiBpbmplY3QoRGVzdHJveVJlZik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN5bmNWYWxpZGF0b3JzKFxuICBiYXNlOiBTeW5jVmFsaWRhdG9yTWFwLFxuICBmaWVsZENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIEZpZWxkQ29uZmlnPlxuKTogU3luY1ZhbGlkYXRvck1hcCB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPHN0cmluZywgRmllbGRWYWxpZGF0b3JbXT4oKTtcblxuICBmb3IgKGNvbnN0IFtwYXRoLCB2YWxpZGF0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGJhc2UpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHZhbGlkYXRvcik7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZENvbmZpZ3MpKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRvVmFsaWRhdG9yQXJyYXkoY29uZmlnLnZhbGlkYXRvcnMpO1xuICAgIGlmICh2YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gYnVja2V0cy5nZXQocGF0aCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaCguLi52YWxpZGF0b3JzKTtcbiAgICBidWNrZXRzLnNldChwYXRoLCBleGlzdGluZyk7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkOiBTeW5jVmFsaWRhdG9yTWFwID0ge307XG4gIGJ1Y2tldHMuZm9yRWFjaCgodmFsaWRhdG9ycywgcGF0aCkgPT4ge1xuICAgIG5vcm1hbGl6ZWRbcGF0aF0gPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmJhc2UsIC4uLm5vcm1hbGl6ZWQgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXN5bmNWYWxpZGF0b3JzKFxuICBiYXNlOiBBc3luY1ZhbGlkYXRvck1hcCxcbiAgZmllbGRDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZz5cbik6IEFzeW5jVmFsaWRhdG9yTWFwIHtcbiAgY29uc3QgYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj4+PigpO1xuXG4gIGZvciAoY29uc3QgW3BhdGgsIHZhbGlkYXRvcl0gb2YgT2JqZWN0LmVudHJpZXMoYmFzZSkpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGJ1Y2tldHMuZ2V0KHBhdGgpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2godmFsaWRhdG9yKTtcbiAgICBidWNrZXRzLnNldChwYXRoLCBleGlzdGluZyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtwYXRoLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkQ29uZmlncykpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdG9WYWxpZGF0b3JBcnJheShjb25maWcuYXN5bmNWYWxpZGF0b3JzKTtcbiAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IGJ1Y2tldHMuZ2V0KHBhdGgpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2goLi4udmFsaWRhdG9ycyk7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZDogQXN5bmNWYWxpZGF0b3JNYXAgPSB7fTtcbiAgYnVja2V0cy5mb3JFYWNoKCh2YWxpZGF0b3JzLCBwYXRoKSA9PiB7XG4gICAgbm9ybWFsaXplZFtwYXRoXSA9IGFzeW5jICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCBtYXliZUFzeW5jID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNPYnNlcnZhYmxlKG1heWJlQXN5bmMpXG4gICAgICAgICAgPyBhd2FpdCBmaXJzdFZhbHVlRnJvbShtYXliZUFzeW5jKVxuICAgICAgICAgIDogYXdhaXQgbWF5YmVBc3luYztcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmJhc2UsIC4uLm5vcm1hbGl6ZWQgfTtcbn1cblxuZnVuY3Rpb24gdG9WYWxpZGF0b3JBcnJheTxUPihpbnB1dD86IFJlY29yZDxzdHJpbmcsIFQ+IHwgVFtdKTogVFtdIHtcbiAgaWYgKCFpbnB1dCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlSW5pdGlhbFZhbHVlczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBpbml0aWFsVmFsdWVzOiBULFxuICBwZXJzaXN0S2V5Pzogc3RyaW5nLFxuICBzdG9yYWdlPzogUGljazxTdG9yYWdlLCAnZ2V0SXRlbScgfCAnc2V0SXRlbScgfCAncmVtb3ZlSXRlbSc+XG4pOiB7IHZhbHVlczogVCB9IHtcbiAgY29uc3QgYmFzZUNsb25lID0gZGVlcENsb25lKGluaXRpYWxWYWx1ZXMpO1xuXG4gIGlmICghcGVyc2lzdEtleSB8fCAhc3RvcmFnZSkge1xuICAgIHJldHVybiB7IHZhbHVlczogYmFzZUNsb25lIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHN0b3JlZFJhdyA9IHN0b3JhZ2UuZ2V0SXRlbShwZXJzaXN0S2V5KTtcbiAgICBpZiAoIXN0b3JlZFJhdykge1xuICAgICAgcmV0dXJuIHsgdmFsdWVzOiBiYXNlQ2xvbmUgfTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdG9yZWRSYXcpIGFzIFBhcnRpYWw8VD47XG4gICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VEZWVwKGJhc2VDbG9uZSwgcGFyc2VkKTtcbiAgICByZXR1cm4geyB2YWx1ZXM6IG1lcmdlZCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyB2YWx1ZXM6IGJhc2VDbG9uZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFRyZWVOb2RlPFQ+KHN0YXRlOiB1bmtub3duKTogYXNzZXJ0cyBzdGF0ZSBpcyBUcmVlTm9kZTxUPiB7XG4gIGlmICghc3RhdGUgfHwgdHlwZW9mIHN0YXRlICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIGZvcm0gdHJlZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGaWVsZENvbmZpZyhcbiAgZmllbGRDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZz4sXG4gIHBhdGg6IHN0cmluZ1xuKTogRmllbGRDb25maWcgfCB1bmRlZmluZWQge1xuICBpZiAoZmllbGRDb25maWdzW3BhdGhdKSB7XG4gICAgcmV0dXJuIGZpZWxkQ29uZmlnc1twYXRoXTtcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWVsZENvbmZpZ3MpO1xuICBsZXQgbWF0Y2g6IHsga2V5OiBzdHJpbmc7IGNvbmZpZzogRmllbGRDb25maWcgfSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFrZXkuaW5jbHVkZXMoJyonKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChtYXRjaFBhdGgoa2V5LCBwYXRoKSkge1xuICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5rZXkubGVuZ3RoIDwga2V5Lmxlbmd0aCkge1xuICAgICAgICBtYXRjaCA9IHsga2V5LCBjb25maWc6IGZpZWxkQ29uZmlnc1trZXldIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoLmNvbmZpZztcbiAgfVxuXG4gIHJldHVybiBmaWVsZENvbmZpZ3NbJyonXTtcbn1cblxuZnVuY3Rpb24gZmluZFZhbGlkYXRvcjxUPihtYXA6IFJlY29yZDxzdHJpbmcsIFQ+LCBwYXRoOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG1hcFtwYXRoXSkge1xuICAgIHJldHVybiBtYXBbcGF0aF07XG4gIH1cblxuICBsZXQgY2FuZGlkYXRlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVCB9IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtYXApKSB7XG4gICAgaWYgKCFrZXkuaW5jbHVkZXMoJyonKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChtYXRjaFBhdGgoa2V5LCBwYXRoKSkge1xuICAgICAgaWYgKCFjYW5kaWRhdGUgfHwgY2FuZGlkYXRlLmtleS5sZW5ndGggPCBrZXkubGVuZ3RoKSB7XG4gICAgICAgIGNhbmRpZGF0ZSA9IHsga2V5LCB2YWx1ZTogbWFwW2tleV0gfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2FuZGlkYXRlKSB7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBtYXBbJyonXTtcbn1cblxuaW50ZXJmYWNlIFBlcnNpc3RDb250cm9sbGVyIHtcbiAgc2NoZWR1bGVQZXJzaXN0OiAoKSA9PiB2b2lkO1xuICBwZXJzaXN0SW1tZWRpYXRlbHk6ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBlcnNpc3RDb250cm9sbGVyKFxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCxcbiAgcGVyc2lzdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzdG9yYWdlOiBQaWNrPFN0b3JhZ2UsICdnZXRJdGVtJyB8ICdzZXRJdGVtJyB8ICdyZW1vdmVJdGVtJz4gfCB1bmRlZmluZWQsXG4gIGRlYm91bmNlTXM6IG51bWJlcixcbiAgY2xlYW51cENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD5cbik6IFBlcnNpc3RDb250cm9sbGVyIHtcbiAgaWYgKCFwZXJzaXN0S2V5IHx8ICFzdG9yYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVkdWxlUGVyc2lzdDogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgcGVyc2lzdEltbWVkaWF0ZWx5OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBwZXJzaXN0ID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgc3RvcmFnZS5zZXRJdGVtKHBlcnNpc3RLZXksIHBheWxvYWQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU3dhbGxvdyBwZXJzaXN0ZW5jZSBlcnJvcnMgdG8gYXZvaWQgYnJlYWtpbmcgZm9ybSB1cGRhdGVzXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNjaGVkdWxlUGVyc2lzdCA9ICgpID0+IHtcbiAgICBpZiAoZGVib3VuY2VNcyA8PSAwKSB7XG4gICAgICBwZXJzaXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cblxuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBwZXJzaXN0KCk7XG4gICAgfSwgZGVib3VuY2VNcyk7XG4gIH07XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHNjaGVkdWxlUGVyc2lzdCxcbiAgICBwZXJzaXN0SW1tZWRpYXRlbHk6IHBlcnNpc3QsXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBTkdVTEFSIERJUkVDVElWRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTaW1wbGUgZGlyZWN0aXZlIGZvciB0d28td2F5IGJpbmRpbmcgd2l0aCBzaWduYWxzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzaWduYWxUcmVlU2lnbmFsVmFsdWVdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTaWduYWxWYWx1ZURpcmVjdGl2ZSksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduYWxWYWx1ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuICBASW5wdXQoKSBzaWduYWxUcmVlU2lnbmFsVmFsdWUhOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPjtcbiAgQE91dHB1dCgpIHNpZ25hbFRyZWVTaWduYWxWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bj4oKTtcblxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgLy8gRW1wdHkgaW1wbGVtZW50YXRpb24gZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIH07XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIEVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2lnbmFsVHJlZVNpZ25hbFZhbHVlKCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldD8udmFsdWU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2lnbmFsVHJlZVNpZ25hbFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBoYW5kbGVCbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2lnbmFsVHJlZVNpZ25hbFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICBpc0Rpc2FibGVkXG4gICAgKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVhQT1JUU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IFNJR05BTF9GT1JNX0RJUkVDVElWRVMgPSBbU2lnbmFsVmFsdWVEaXJlY3RpdmVdO1xuIl19","export function required(message = 'Required') {\n return (value) => (!value ? message : null);\n}\nexport function email(message = 'Invalid email') {\n return (value) => {\n const strValue = value;\n return strValue && !strValue.includes('@') ? message : null;\n };\n}\nexport function minLength(min, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Min ${min} characters`;\n return strValue && strValue.length < min ? errorMsg : null;\n };\n}\nexport function maxLength(max, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Max ${max} characters`;\n return strValue && strValue.length > max ? errorMsg : null;\n };\n}\nexport function pattern(regex, message = 'Invalid format') {\n return (value) => {\n const strValue = value;\n return strValue && !regex.test(strValue) ? message : null;\n };\n}\nexport function min(min, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at least ${min}`;\n return numValue < min ? errorMsg : null;\n };\n}\nexport function max(max, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at most ${max}`;\n return numValue > max ? errorMsg : null;\n };\n}\nexport function compose(validators) {\n return (value) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) {\n return error;\n }\n }\n return null;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVU7SUFDM0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBaUJELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBTyxHQUFHLGVBQWU7SUFDN0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUNwRCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxPQUFnQjtJQUNyRCxPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBZSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3BELE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxPQUFPLENBQ3JCLEtBQWEsRUFDYixPQUFPLEdBQUcsZ0JBQWdCO0lBRTFCLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsT0FBTyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWdCO0lBQy9DLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDL0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQTRCO0lBQ2xELE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVHJlZS1zaGFrZWFibGUgdmFsaWRhdG9yIGZ1bmN0aW9ucyBmb3IgZm9ybSBmaWVsZHNcbiAqXG4gKiBUaGVzZSB2YWxpZGF0b3JzIGFyZSBleHBvcnRlZCBhcyBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0byBlbmFibGVcbiAqIHRyZWUtc2hha2luZy4gT25seSB0aGUgdmFsaWRhdG9ycyB5b3UgYWN0dWFsbHkgdXNlIHdpbGwgYmUgaW5jbHVkZWRcbiAqIGluIHlvdXIgYnVuZGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL25nLWZvcm1zJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVxdWlyZWQgZmllbGQgdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBDdXN0b20gZXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogXCJSZXF1aXJlZFwiKVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlcnJvciBtZXNzYWdlIGlmIHZhbHVlIGlzIGZhbHN5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIG5hbWU6IHJlcXVpcmVkKCksXG4gKiAgICAgZW1haWw6IHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlID0gJ1JlcXVpcmVkJyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKCF2YWx1ZSA/IG1lc3NhZ2UgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVtYWlsIGZvcm1hdCB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZW1haWxcIilcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgQCBzeW1ib2xcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgZW1haWw6IGVtYWlsKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2UgPSAnSW52YWxpZCBlbWFpbCcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXN0clZhbHVlLmluY2x1ZGVzKCdAJykgPyBtZXNzYWdlIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWluaW11bSBsZW5ndGggdmFsaWRhdG9yIGZvciBzdHJpbmdzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBwYXNzd29yZDogbWluTGVuZ3RoKDgpLFxuICogICAgIGRlc2NyaXB0aW9uOiBtaW5MZW5ndGgoMTAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGF0IGxlYXN0IDEwIGNoYXJhY3RlcnMnKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNaW4gJHttaW59IGNoYXJhY3RlcnNgO1xuICAgIHJldHVybiBzdHJWYWx1ZSAmJiBzdHJWYWx1ZS5sZW5ndGggPCBtaW4gPyBlcnJvck1zZyA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1heGltdW0gbGVuZ3RoIHZhbGlkYXRvciBmb3Igc3RyaW5nc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICB1c2VybmFtZTogbWF4TGVuZ3RoKDIwKSxcbiAqICAgICBiaW86IG1heExlbmd0aCg1MDAsICdCaW8gbXVzdCBiZSB1bmRlciA1MDAgY2hhcmFjdGVycycpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhMZW5ndGgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE1heCAke21heH0gY2hhcmFjdGVyc2A7XG4gICAgcmV0dXJuIHN0clZhbHVlICYmIHN0clZhbHVlLmxlbmd0aCA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnZXggcGF0dGVybiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gcmVnZXggLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0XG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZm9ybWF0XCIpXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB0ZXN0cyB2YWx1ZSBhZ2FpbnN0IHJlZ2V4XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIHBob25lOiBwYXR0ZXJuKC9eXFxkezN9LVxcZHszfS1cXGR7NH0kLywgJ1Bob25lIG11c3QgYmUgaW4gZm9ybWF0OiAxMjMtNDU2LTc4OTAnKSxcbiAqICAgICB6aXBDb2RlOiBwYXR0ZXJuKC9eXFxkezV9JC8sICdaaXAgY29kZSBtdXN0IGJlIDUgZGlnaXRzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdHRlcm4oXG4gIHJlZ2V4OiBSZWdFeHAsXG4gIG1lc3NhZ2UgPSAnSW52YWxpZCBmb3JtYXQnXG4pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXJlZ2V4LnRlc3Qoc3RyVmFsdWUpID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1pbmltdW0gdmFsdWUgdmFsaWRhdG9yIGZvciBudW1iZXJzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIG51bWVyaWMgbWluaW11bVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBhZ2U6IG1pbigxOCwgJ011c3QgYmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1pbigxKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSB2YWx1ZSBhcyBudW1iZXI7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNdXN0IGJlIGF0IGxlYXN0ICR7bWlufWA7XG4gICAgcmV0dXJuIG51bVZhbHVlIDwgbWluID8gZXJyb3JNc2cgOiBudWxsO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXhpbXVtIHZhbHVlIHZhbGlkYXRvciBmb3IgbnVtYmVyc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBudW1lcmljIG1heGltdW1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgYWdlOiBtYXgoMTIwLCAnTXVzdCBiZSB1bmRlciAxMjAgeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1heCgxMDApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE11c3QgYmUgYXQgbW9zdCAke21heH1gO1xuICAgIHJldHVybiBudW1WYWx1ZSA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSB2YWxpZGF0b3JzIGludG8gYSBzaW5nbGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHZhbGlkYXRvcnMgLSBBcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIENvbWJpbmVkIHZhbGlkYXRvciB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiBjb21wb3NlKFtcbiAqICAgICAgIHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpLFxuICogICAgICAgZW1haWwoJ0ludmFsaWQgZW1haWwgZm9ybWF0JyksXG4gKiAgICAgICBwYXR0ZXJuKC9AY29tcGFueVxcLmNvbSQvLCAnTXVzdCBiZSBhIGNvbXBhbnkgZW1haWwnKVxuICogICAgIF0pXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlKHZhbGlkYXRvcnM6IEZpZWxkVmFsaWRhdG9yW10pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cbiJdfQ==","import { firstValueFrom, isObservable } from 'rxjs';\nexport function unique(checkFn, message = 'Already exists') {\n return async (value) => {\n if (!value)\n return null;\n const exists = await checkFn(value);\n return exists ? message : null;\n };\n}\nexport function debounce(validator, delayMs) {\n let timeoutId;\n return async (value) => {\n return new Promise((resolve) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(async () => {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n resolve(result);\n }, delayMs);\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL2FzeW5jLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUErQnBELE1BQU0sVUFBVSxNQUFNLENBQ3BCLE9BQTZDLEVBQzdDLE9BQU8sR0FBRyxnQkFBZ0I7SUFFMUIsT0FBTyxLQUFLLEVBQUUsS0FBYyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixTQUE0QyxFQUM1QyxPQUFlO0lBRWYsSUFBSSxTQUF3QyxDQUFDO0lBRTdDLE9BQU8sS0FBSyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDaEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUNyQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNsQyxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmVlLXNoYWtlYWJsZSBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zIGZvciBmb3JtIGZpZWxkc1xuICovXG5cbmltcG9ydCB0eXBlIHsgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSAnLi9uZy1mb3Jtcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhc3luYyB1bmlxdWVuZXNzIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSBjaGVja0ZuIC0gQXN5bmMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdmFsdWUgYWxyZWFkeSBleGlzdHNcbiAqIEBwYXJhbSBtZXNzYWdlIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IFwiQWxyZWFkeSBleGlzdHNcIilcbiAqIEByZXR1cm5zIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiB1bmlxdWUoXG4gKiAgICAgICBhc3luYyAoZW1haWwpID0+IHtcbiAqICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jaGVjay1lbWFpbD9lbWFpbD0ke2VtYWlsfWApO1xuICogICAgICAgICBjb25zdCB7IGV4aXN0cyB9ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICogICAgICAgICByZXR1cm4gZXhpc3RzO1xuICogICAgICAgfSxcbiAqICAgICAgICdUaGlzIGVtYWlsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCdcbiAqICAgICApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoXG4gIGNoZWNrRm46ICh2YWx1ZTogdW5rbm93bikgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgbWVzc2FnZSA9ICdBbHJlYWR5IGV4aXN0cydcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBjaGVja0ZuKHZhbHVlKTtcbiAgICByZXR1cm4gZXhpc3RzID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBhc3luYyB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIGFzeW5jIHZhbGlkYXRvciB0byBkZWJvdW5jZVxuICogQHBhcmFtIGRlbGF5TXMgLSBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvblxuICogQHJldHVybnMgRGVib3VuY2VkIGFzeW5jIHZhbGlkYXRvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIHVzZXJuYW1lOiBkZWJvdW5jZShcbiAqICAgICAgIHVuaXF1ZShjaGVja1VzZXJuYW1lLCAnVXNlcm5hbWUgdGFrZW4nKSxcbiAqICAgICAgIDUwMCAvLyBXYWl0IDUwMG1zIGFmdGVyIHVzZXIgc3RvcHMgdHlwaW5nXG4gKiAgICAgKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2UoXG4gIHZhbGlkYXRvcjogRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+LFxuICBkZWxheU1zOiBudW1iZXJcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LCBkZWxheU1zKTtcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==","import { signal } from '@angular/core';\nimport { deepClone, snapshotsEqual } from '@signaltree/shared';\nexport function withFormHistory(formTree, options = {}) {\n const capacity = Math.max(1, options.capacity ?? 10);\n const historySignal = signal({\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n }, ...(ngDevMode ? [{ debugName: \"historySignal\" }] : []));\n let recording = true;\n let suppressUpdates = 0;\n let internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n const subscription = formTree.form.valueChanges.subscribe(() => {\n if (suppressUpdates > 0) {\n suppressUpdates--;\n return;\n }\n if (!recording) {\n internalHistory = {\n ...internalHistory,\n present: deepClone(formTree.form.getRawValue()),\n };\n return;\n }\n const snapshot = deepClone(formTree.form.getRawValue());\n if (snapshotsEqual(internalHistory.present, snapshot)) {\n internalHistory = {\n ...internalHistory,\n present: snapshot,\n };\n historySignal.set(cloneHistory(internalHistory));\n return;\n }\n const updatedPast = [...internalHistory.past, internalHistory.present];\n if (updatedPast.length > capacity) {\n updatedPast.shift();\n }\n internalHistory = {\n past: updatedPast,\n present: snapshot,\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n });\n const originalDestroy = formTree.destroy;\n formTree.destroy = () => {\n subscription.unsubscribe();\n originalDestroy();\n };\n const undo = () => {\n const history = historySignal();\n if (history.past.length === 0) {\n return;\n }\n const previous = deepClone(history.past[history.past.length - 1]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(previous);\n recording = true;\n internalHistory = {\n past: history.past.slice(0, -1),\n present: previous,\n future: [history.present, ...history.future],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const redo = () => {\n const history = historySignal();\n if (history.future.length === 0) {\n return;\n }\n const next = deepClone(history.future[0]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(next);\n recording = true;\n internalHistory = {\n past: [...history.past, history.present],\n present: next,\n future: history.future.slice(1),\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const clearHistory = () => {\n internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n function cloneHistory(state) {\n return {\n past: state.past.map((entry) => deepClone(entry)),\n present: deepClone(state.present),\n future: state.future.map((entry) => deepClone(entry)),\n };\n }\n return Object.assign(formTree, {\n undo,\n redo,\n clearHistory,\n history: historySignal.asReadonly(),\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9oaXN0b3J5L2hpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBNEMvRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFxQixFQUNyQixVQUFpQyxFQUFFO0lBT25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFpQjtRQUMzQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLHlEQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksZUFBZSxHQUFtQjtRQUNwQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQzdELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2Ys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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBzbmFwc2hvdHNFcXVhbCB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzIGluIHNlY29uZGFyeSBlbnRyeSBwb2ludHNcbmludGVyZmFjZSBGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZm9ybTogYW55OyAvLyBGb3JtR3JvdXBcbiAgdW53cmFwKCk6IFQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogRm9ybSBoaXN0b3J5IHN0YXRlIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1IaXN0b3J5PFQ+IHtcbiAgcGFzdDogVFtdO1xuICBwcmVzZW50OiBUO1xuICBmdXR1cmU6IFRbXTtcbn1cblxuLyoqXG4gKiBFbmhhbmNlcyBhIEZvcm1UcmVlIHdpdGggdW5kby9yZWRvIGNhcGFiaWxpdGllcy5cbiAqIFByb3ZpZGVzIGZvcm0tc3BlY2lmaWMgaGlzdG9yeSBtYW5hZ2VtZW50IHdpdGggY2FwYWNpdHkgbGltaXRzIGFuZCBjaGFuZ2UgdHJhY2tpbmcuXG4gKlxuICogQHBhcmFtIGZvcm1UcmVlIC0gVGhlIGZvcm0gdHJlZSB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2FwYWNpdHkgLSBNYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGVudHJpZXMgKGRlZmF1bHQ6IDEwKVxuICogQHJldHVybnMgRXh0ZW5kZWQgRm9ybVRyZWUgd2l0aCB1bmRvLCByZWRvLCBhbmQgaGlzdG9yeSBhY2Nlc3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKHsgbmFtZTogJycsIGVtYWlsOiAnJyB9KTtcbiAqIGNvbnN0IGZvcm1XaXRoSGlzdG9yeSA9IHdpdGhGb3JtSGlzdG9yeShmb3JtLCB7IGNhcGFjaXR5OiAyMCB9KTtcbiAqXG4gKiBmb3JtLiQubmFtZS5zZXQoJ0pvaG4nKTtcbiAqIGZvcm0uJC5lbWFpbC5zZXQoJ2pvaG5AZXhhbXBsZS5jb20nKTtcbiAqXG4gKiBmb3JtV2l0aEhpc3RvcnkudW5kbygpOyAvLyBSZXZlcnRzIGVtYWlsIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnVuZG8oKTsgLy8gUmV2ZXJ0cyBuYW1lIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnJlZG8oKTsgLy8gUmVhcHBsaWVzIG5hbWUgY2hhbmdlXG4gKlxuICogY29uc29sZS5sb2coZm9ybVdpdGhIaXN0b3J5Lmhpc3RvcnkoKS5wYXN0Lmxlbmd0aCk7IC8vIDFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZvcm1IaXN0b3J5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGZvcm1UcmVlOiBGb3JtVHJlZTxUPixcbiAgb3B0aW9uczogeyBjYXBhY2l0eT86IG51bWJlciB9ID0ge31cbik6IEZvcm1UcmVlPFQ+ICYge1xuICB1bmRvOiAoKSA9PiB2b2lkO1xuICByZWRvOiAoKSA9PiB2b2lkO1xuICBjbGVhckhpc3Rvcnk6ICgpID0+IHZvaWQ7XG4gIGhpc3Rvcnk6IFNpZ25hbDxGb3JtSGlzdG9yeTxUPj47XG59IHtcbiAgY29uc3QgY2FwYWNpdHkgPSBNYXRoLm1heCgxLCBvcHRpb25zLmNhcGFjaXR5ID8/IDEwKTtcbiAgY29uc3QgaGlzdG9yeVNpZ25hbCA9IHNpZ25hbDxGb3JtSGlzdG9yeTxUPj4oe1xuICAgIHBhc3Q6IFtdLFxuICAgIHByZXNlbnQ6IGRlZXBDbG9uZShmb3JtVHJlZS5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVCksXG4gICAgZnV0dXJlOiBbXSxcbiAgfSk7XG5cbiAgbGV0IHJlY29yZGluZyA9IHRydWU7XG4gIGxldCBzdXBwcmVzc1VwZGF0ZXMgPSAwO1xuICBsZXQgaW50ZXJuYWxIaXN0b3J5OiBGb3JtSGlzdG9yeTxUPiA9IHtcbiAgICBwYXN0OiBbXSxcbiAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgIGZ1dHVyZTogW10sXG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ybVRyZWUuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBpZiAoc3VwcHJlc3NVcGRhdGVzID4gMCkge1xuICAgICAgc3VwcHJlc3NVcGRhdGVzLS07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmcpIHtcbiAgICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxIaXN0b3J5LFxuICAgICAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpO1xuICAgIGlmIChzbmFwc2hvdHNFcXVhbChpbnRlcm5hbEhpc3RvcnkucHJlc2VudCwgc25hcHNob3QpKSB7XG4gICAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICAgIC4uLmludGVybmFsSGlzdG9yeSxcbiAgICAgICAgcHJlc2VudDogc25hcHNob3QsXG4gICAgICB9O1xuICAgICAgaGlzdG9yeVNpZ25hbC5zZXQoY2xvbmVIaXN0b3J5KGludGVybmFsSGlzdG9yeSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUGFzdCA9IFsuLi5pbnRlcm5hbEhpc3RvcnkucGFzdCwgaW50ZXJuYWxIaXN0b3J5LnByZXNlbnRdO1xuICAgIGlmICh1cGRhdGVkUGFzdC5sZW5ndGggPiBjYXBhY2l0eSkge1xuICAgICAgdXBkYXRlZFBhc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgaW50ZXJuYWxIaXN0b3J5ID0ge1xuICAgICAgcGFzdDogdXBkYXRlZFBhc3QsXG4gICAgICBwcmVzZW50OiBzbmFwc2hvdCxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGZvcm1UcmVlLmRlc3Ryb3k7XG4gIGZvcm1UcmVlLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgb3JpZ2luYWxEZXN0cm95KCk7XG4gIH07XG5cbiAgY29uc3QgdW5kbyA9ICgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gaGlzdG9yeVNpZ25hbCgpO1xuICAgIGlmIChoaXN0b3J5LnBhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gZGVlcENsb25lKGhpc3RvcnkucGFzdFtoaXN0b3J5LnBhc3QubGVuZ3RoIC0gMV0pO1xuICAgIHJlY29yZGluZyA9IGZhbHNlO1xuICAgIHN1cHByZXNzVXBkYXRlcysrO1xuICAgIGZvcm1UcmVlLnNldFZhbHVlcyhwcmV2aW91cyk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBoaXN0b3J5LnBhc3Quc2xpY2UoMCwgLTEpLFxuICAgICAgcHJlc2VudDogcHJldmlvdXMsXG4gICAgICBmdXR1cmU6IFtoaXN0b3J5LnByZXNlbnQsIC4uLmhpc3RvcnkuZnV0dXJlXSxcbiAgICB9O1xuICAgIGhpc3RvcnlTaWduYWwuc2V0KGNsb25lSGlzdG9yeShpbnRlcm5hbEhpc3RvcnkpKTtcbiAgfTtcblxuICBjb25zdCByZWRvID0gKCkgPT4ge1xuICAgIGNvbnN0IGhpc3RvcnkgPSBoaXN0b3J5U2lnbmFsKCk7XG4gICAgaWYgKGhpc3RvcnkuZnV0dXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gZGVlcENsb25lKGhpc3RvcnkuZnV0dXJlWzBdKTtcbiAgICByZWNvcmRpbmcgPSBmYWxzZTtcbiAgICBzdXBwcmVzc1VwZGF0ZXMrKztcbiAgICBmb3JtVHJlZS5zZXRWYWx1ZXMobmV4dCk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBbLi4uaGlzdG9yeS5wYXN0LCBoaXN0b3J5LnByZXNlbnRdLFxuICAgICAgcHJlc2VudDogbmV4dCxcbiAgICAgIGZ1dHVyZTogaGlzdG9yeS5mdXR1cmUuc2xpY2UoMSksXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgIHBhc3Q6IFtdLFxuICAgICAgcHJlc2VudDogZGVlcENsb25lKGZvcm1UcmVlLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBUKSxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2xvbmVIaXN0b3J5KHN0YXRlOiBGb3JtSGlzdG9yeTxUPik6IEZvcm1IaXN0b3J5PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFzdDogc3RhdGUucGFzdC5tYXAoKGVudHJ5KSA9PiBkZWVwQ2xvbmUoZW50cnkpKSxcbiAgICAgIHByZXNlbnQ6IGRlZXBDbG9uZShzdGF0ZS5wcmVzZW50KSxcbiAgICAgIGZ1dHVyZTogc3RhdGUuZnV0dXJlLm1hcCgoZW50cnkpID0+IGRlZXBDbG9uZShlbnRyeSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihmb3JtVHJlZSwge1xuICAgIHVuZG8sXG4gICAgcmVkbyxcbiAgICBjbGVhckhpc3RvcnksXG4gICAgaGlzdG9yeTogaGlzdG9yeVNpZ25hbC5hc1JlYWRvbmx5KCksXG4gIH0pO1xufVxuIl19"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaltree/ng-forms",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.15",
|
|
4
4
|
"description": "Complete Angular forms integration for SignalTree. FormTree creation, custom directives, validators, form state tracking, and RxJS bridge.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/core": "^20.3.0",
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
"@signaltree/core": "^4.0.0",
|
|
9
9
|
"rxjs": "^7.0.0"
|
|
10
10
|
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"@signaltree/shared": "workspace:*",
|
|
13
|
-
"tslib": "^2.3.0"
|
|
14
|
-
},
|
|
15
11
|
"sideEffects": false,
|
|
16
12
|
"module": "fesm2022/signaltree-ng-forms.mjs",
|
|
17
13
|
"typings": "index.d.ts",
|
|
@@ -35,5 +31,8 @@
|
|
|
35
31
|
"types": "./src/rxjs/index.d.ts",
|
|
36
32
|
"default": "./fesm2022/signaltree-ng-forms-src-rxjs.mjs"
|
|
37
33
|
}
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"tslib": "^2.3.0"
|
|
38
37
|
}
|
|
39
38
|
}
|