@fundamental-ngx/platform 0.46.0-rc.2 → 0.46.0-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
- package/esm2022/form/auto-complete/auto-complete.directive.mjs +4 -3
- package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -6
- package/esm2022/form/checkbox/checkbox.module.mjs +5 -8
- package/esm2022/form/checkbox-group/checkbox-group.module.mjs +5 -7
- package/esm2022/form/combobox/combobox/combobox.component.mjs +36 -14
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +19 -4
- package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -9
- package/esm2022/form/combobox/combobox.module.mjs +5 -51
- package/esm2022/form/combobox/commons/base-combobox.mjs +9 -1
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -3
- package/esm2022/form/form-group/fdp-form.module.mjs +10 -42
- package/esm2022/form/form-group/form-field/form-field.component.mjs +47 -12
- package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +4 -3
- package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +4 -3
- package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +4 -3
- package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
- package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +3 -3
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +8 -6
- package/esm2022/form/form-group/form-group.component.mjs +25 -10
- package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +6 -3
- package/esm2022/form/input/fdp-input.module.mjs +5 -11
- package/esm2022/form/input/input.component.mjs +5 -4
- package/esm2022/form/input-group/addon-body.component.mjs +6 -4
- package/esm2022/form/input-group/addon.component.mjs +4 -4
- package/esm2022/form/input-group/input-group.component.mjs +9 -10
- package/esm2022/form/input-group/input-group.module.mjs +5 -29
- package/esm2022/form/input-group/input.component.mjs +4 -3
- package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +5 -5
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +9 -1
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +44 -19
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +24 -5
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -10
- package/esm2022/form/multi-combobox/multi-combobox.module.mjs +5 -65
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +11 -7
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -9
- package/esm2022/form/multi-input/multi-input.component.mjs +39 -20
- package/esm2022/form/multi-input/multi-input.module.mjs +5 -51
- package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +6 -5
- package/esm2022/form/platform-file-uploader/platform-file-uploader.module.mjs +5 -11
- package/esm2022/form/radio-group/radio/radio.component.mjs +10 -9
- package/esm2022/form/radio-group/radio-group.component.mjs +6 -6
- package/esm2022/form/radio-group/radio-group.module.mjs +5 -32
- package/esm2022/form/select/option/option.component.mjs +6 -3
- package/esm2022/form/select/select/select.component.mjs +20 -11
- package/esm2022/form/select/select.module.mjs +5 -54
- package/esm2022/form/step-input/number/number-step-input.component.mjs +25 -14
- package/esm2022/form/step-input/step-input-control.directive.mjs +4 -3
- package/esm2022/form/step-input/step-input-decrement.directive.mjs +4 -3
- package/esm2022/form/step-input/step-input-increment.directive.mjs +4 -3
- package/esm2022/form/step-input/step-input.module.mjs +13 -35
- package/esm2022/form/switch/switch/switch.component.mjs +4 -3
- package/esm2022/form/switch/switch.module.mjs +5 -11
- package/esm2022/form/text-area/text-area.component.mjs +12 -11
- package/esm2022/form/text-area/text-area.module.mjs +5 -32
- package/esm2022/form/time-picker/time-picker.component.mjs +5 -5
- package/esm2022/form/time-picker/time-picker.module.mjs +5 -11
- package/esm2022/list/list.component.mjs +3 -3
- package/esm2022/search-field/search-field.component.mjs +3 -3
- package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +18 -9
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +8 -5
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +18 -10
- package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +22 -10
- package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +5 -6
- package/esm2022/settings-generator/settings-generator.component.mjs +3 -3
- package/esm2022/settings-generator/settings-generator.module.mjs +12 -54
- package/esm2022/shared/form/base.input.mjs +43 -13
- package/esm2022/shared/form/form-field.mjs +1 -1
- package/esm2022/slider/slider.component.mjs +4 -4
- package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +3 -3
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +3 -3
- package/esm2022/split-menu-button/split-menu-button.component.mjs +3 -3
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +3 -3
- package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
- package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +11 -11
- package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +5 -5
- package/esm2022/table/components/table-toolbar/table-toolbar.mjs +1 -1
- package/esm2022/table/table.component.mjs +14 -5
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +3 -3
- package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -3
- package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +41 -18
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +20 -8
- package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +10 -8
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +5 -5
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +12 -9
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +5 -5
- package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +4 -3
- package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +4 -3
- package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +4 -3
- package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +4 -3
- package/esm2022/wizard-generator/wizard-generator.module.mjs +13 -56
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +541 -635
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +69 -80
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +42 -12
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +423 -414
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +226 -228
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/auto-complete/auto-complete.directive.d.ts +1 -1
- package/form/auto-complete/auto-complete.module.d.ts +1 -2
- package/form/checkbox/checkbox.module.d.ts +2 -5
- package/form/checkbox-group/checkbox-group.module.d.ts +2 -4
- package/form/combobox/combobox/combobox.component.d.ts +1 -1
- package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +1 -1
- package/form/combobox/combobox-mobile/combobox-mobile.module.d.ts +1 -5
- package/form/combobox/combobox.module.d.ts +1 -12
- package/form/combobox/commons/base-combobox.d.ts +2 -0
- package/form/form-group/fdp-form.module.d.ts +1 -9
- package/form/form-group/form-field/form-field.component.d.ts +12 -3
- package/form/form-group/form-field-error/form-field-error-description.directive.d.ts +1 -1
- package/form/form-group/form-field-error/form-field-error-heading.directive.d.ts +1 -1
- package/form/form-group/form-field-error/form-field-error.directive.d.ts +1 -1
- package/form/form-group/form-field-extras/form-field-extras.component.d.ts +1 -1
- package/form/form-group/form-field-group/form-field-group.component.d.ts +1 -1
- package/form/form-group/form-group-header/form-group-header.component.d.ts +1 -1
- package/form/form-group/form-group.component.d.ts +1 -1
- package/form/form-group/pipes/field-group-row-value.pipe.d.ts +1 -1
- package/form/input/fdp-input.module.d.ts +1 -6
- package/form/input/input.component.d.ts +1 -1
- package/form/input-group/addon-body.component.d.ts +1 -1
- package/form/input-group/addon.component.d.ts +1 -1
- package/form/input-group/input-group.component.d.ts +1 -1
- package/form/input-group/input-group.module.d.ts +1 -5
- package/form/input-group/input.component.d.ts +1 -1
- package/form/input-message-group-with-template/input-message-group-with-template.component.d.ts +1 -1
- package/form/multi-combobox/commons/base-multi-combobox.d.ts +2 -0
- package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +1 -1
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +1 -1
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.d.ts +1 -6
- package/form/multi-combobox/multi-combobox.module.d.ts +1 -15
- package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +1 -1
- package/form/multi-input/multi-input-mobile/multi-input-mobile.module.d.ts +1 -5
- package/form/multi-input/multi-input.component.d.ts +1 -1
- package/form/multi-input/multi-input.module.d.ts +1 -11
- package/form/platform-file-uploader/platform-file-uploader.component.d.ts +1 -1
- package/form/platform-file-uploader/platform-file-uploader.module.d.ts +1 -6
- package/form/radio-group/radio/radio.component.d.ts +1 -1
- package/form/radio-group/radio-group.component.d.ts +1 -1
- package/form/radio-group/radio-group.module.d.ts +1 -7
- package/form/select/option/option.component.d.ts +1 -1
- package/form/select/select/select.component.d.ts +3 -1
- package/form/select/select.module.d.ts +1 -12
- package/form/step-input/number/number-step-input.component.d.ts +1 -1
- package/form/step-input/step-input-control.directive.d.ts +1 -1
- package/form/step-input/step-input-decrement.directive.d.ts +1 -1
- package/form/step-input/step-input-increment.directive.d.ts +1 -1
- package/form/step-input/step-input.module.d.ts +1 -7
- package/form/switch/switch/switch.component.d.ts +1 -1
- package/form/switch/switch.module.d.ts +1 -6
- package/form/text-area/text-area.component.d.ts +1 -1
- package/form/text-area/text-area.module.d.ts +1 -7
- package/form/time-picker/time-picker.component.d.ts +1 -1
- package/form/time-picker/time-picker.module.d.ts +1 -6
- package/fundamental-ngx-platform-v0.46.0-rc.21.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/settings-generator/controls/theme-selector-list/theme-selector-list.component.d.ts +2 -2
- package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.d.ts +1 -1
- package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.d.ts +1 -1
- package/settings-generator/settings-generator-content/settings-generator-content.component.d.ts +1 -1
- package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +1 -1
- package/settings-generator/settings-generator.component.d.ts +1 -1
- package/settings-generator/settings-generator.module.d.ts +9 -20
- package/shared/form/base.input.d.ts +42 -27
- package/shared/form/form-field.d.ts +22 -7
- package/table/components/table-p13-dialog/table-p13-dialog.component.d.ts +7 -7
- package/table/components/table-toolbar/table-toolbar.component.d.ts +3 -3
- package/table/components/table-toolbar/table-toolbar.d.ts +4 -1
- package/table/table.component.d.ts +9 -3
- package/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.d.ts +5 -4
- package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +1 -1
- package/wizard-generator/components/wizard-generator/wizard-generator.component.d.ts +1 -1
- package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
- package/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.d.ts +1 -1
- package/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.d.ts +1 -1
- package/wizard-generator/directives/wizard-generator-finish-button.directive.d.ts +1 -1
- package/wizard-generator/directives/wizard-generator-go-next-button.directive.d.ts +1 -1
- package/wizard-generator/directives/wizard-generator-review-button.directive.d.ts +1 -1
- package/wizard-generator/directives/wizard-generator-summary-step.directive.d.ts +1 -1
- package/wizard-generator/wizard-generator.module.d.ts +12 -24
- package/fundamental-ngx-platform-v0.46.0-rc.2.tgz +0 -0
|
@@ -350,7 +350,7 @@ export class FormGeneratorComponent {
|
|
|
350
350
|
useFactory: (formGenerator) => formGenerator.doCheck$,
|
|
351
351
|
deps: [FormGeneratorComponent]
|
|
352
352
|
}
|
|
353
|
-
], viewQueries: [{ propertyName: "ngForm", first: true, predicate: NgForm, descendants: true }, { propertyName: "formGroup", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "fields", predicate: FormGeneratorFieldComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<fd-busy-indicator *ngIf=\"_firstLoadingDone; else loadingTemplate\" [loading]=\"formLoading\" [block]=\"true\">\n <fdp-form-group\n *ngIf=\"form\"\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n <ng-container *ngFor=\"let error of _errorModels; trackBy: _errorsTrackBy\">\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n <ng-container *ngIf=\"_isAdvancedError(directiveError); else simpleErrorTemplate\">\n <ng-container *ngIf=\"directiveError.heading\">\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"directiveError.description\">\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n </ng-container>\n </ng-container>\n <ng-template #simpleErrorTemplate>\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n </ng-template>\n </span>\n </ng-container>\n <ng-container *ngFor=\"let field of formControlItems; trackBy: _trackFn\">\n <ng-container\n *ngTemplateOutlet=\"\n field.type === 'field' ? fieldRenderer : groupRenderer;\n context: { field: field, formFieldName: field.formItem.name, rank: field.formItem?.rank || 0 }\n \"\n ></ng-container>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n <ng-container *ngFor=\"let groupField of field | getOrderedFieldControls; trackBy: _groupTrackFn\">\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-container>\n </fdp-form-field-group>\n </ng-template>\n </ng-container>\n <fdp-form-field *ngIf=\"!noAdditionalContent\" [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n </fdp-form-group>\n</fd-busy-indicator>\n\n<ng-template #loadingTemplate>\n <fd-skeleton width=\"100%\" height=\"100px\" style=\"
|
|
353
|
+
], viewQueries: [{ propertyName: "ngForm", first: true, predicate: NgForm, descendants: true }, { propertyName: "formGroup", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "fields", predicate: FormGeneratorFieldComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<fd-busy-indicator *ngIf=\"_firstLoadingDone; else loadingTemplate\" [loading]=\"formLoading\" [block]=\"true\">\n <fdp-form-group\n *ngIf=\"form\"\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n <ng-container *ngFor=\"let error of _errorModels; trackBy: _errorsTrackBy\">\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n <ng-container *ngIf=\"_isAdvancedError(directiveError); else simpleErrorTemplate\">\n <ng-container *ngIf=\"directiveError.heading\">\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"directiveError.description\">\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n </ng-container>\n </ng-container>\n <ng-template #simpleErrorTemplate>\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n </ng-template>\n </span>\n </ng-container>\n <ng-container *ngFor=\"let field of formControlItems; trackBy: _trackFn\">\n <ng-container\n *ngTemplateOutlet=\"\n field.type === 'field' ? fieldRenderer : groupRenderer;\n context: { field: field, formFieldName: field.formItem.name, rank: field.formItem?.rank || 0 }\n \"\n ></ng-container>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n <ng-container *ngFor=\"let groupField of field | getOrderedFieldControls; trackBy: _groupTrackFn\">\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-container>\n </fdp-form-field-group>\n </ng-template>\n </ng-container>\n <fdp-form-field *ngIf=\"!noAdditionalContent\" [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n </fdp-form-group>\n</fd-busy-indicator>\n\n<ng-template #loadingTemplate>\n <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: BusyIndicatorModule }, { kind: "component", type: i2.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "ngmodule", type: FdpFormGroupModule }, { kind: "component", type: i3.FormGroupComponent, selector: "fdp-form-group", inputs: ["id", "name", "editable", "noLabelLayout", "class", "hint", "inlineColumnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "formGroup", "topTitle", "mainTitle", "hideMainTItle", "object", "i18Strings", "useForm", "columnLayout", "unifiedLayout"], outputs: ["onSubmit"] }, { kind: "component", type: i4.FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "component", type: i5.FormFieldGroupComponent, selector: "fdp-form-field-group", inputs: ["label", "formName", "formGroupContainer", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "hintOptions"] }, { kind: "directive", type: i6.FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: i7.FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: i8.FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: DynamicFormControlFieldDirective, selector: "[fdpDynamicFormControlField]", inputs: ["fdpDynamicFormControlField", "fdpDynamicFormControlFieldShow"] }, { kind: "component", type: FormGeneratorFieldComponent, selector: "fdp-form-generator-field", inputs: ["field", "form", "i18n", "formFieldName", "formGroupNamePath", "rank", "shouldShow", "hintOptions"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i10.SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "pipe", type: GetOrderedFieldControlsPipe, name: "getOrderedFieldControls" }, { kind: "pipe", type: GetHintOptionsPipe, name: "getHintOptions" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
354
354
|
}
|
|
355
355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: FormGeneratorComponent, decorators: [{
|
|
356
356
|
type: Component,
|
|
@@ -373,7 +373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
373
373
|
SkeletonModule,
|
|
374
374
|
GetOrderedFieldControlsPipe,
|
|
375
375
|
GetHintOptionsPipe
|
|
376
|
-
], template: "<fd-busy-indicator *ngIf=\"_firstLoadingDone; else loadingTemplate\" [loading]=\"formLoading\" [block]=\"true\">\n <fdp-form-group\n *ngIf=\"form\"\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n <ng-container *ngFor=\"let error of _errorModels; trackBy: _errorsTrackBy\">\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n <ng-container *ngIf=\"_isAdvancedError(directiveError); else simpleErrorTemplate\">\n <ng-container *ngIf=\"directiveError.heading\">\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"directiveError.description\">\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n </ng-container>\n </ng-container>\n <ng-template #simpleErrorTemplate>\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n </ng-template>\n </span>\n </ng-container>\n <ng-container *ngFor=\"let field of formControlItems; trackBy: _trackFn\">\n <ng-container\n *ngTemplateOutlet=\"\n field.type === 'field' ? fieldRenderer : groupRenderer;\n context: { field: field, formFieldName: field.formItem.name, rank: field.formItem?.rank || 0 }\n \"\n ></ng-container>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n <ng-container *ngFor=\"let groupField of field | getOrderedFieldControls; trackBy: _groupTrackFn\">\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-container>\n </fdp-form-field-group>\n </ng-template>\n </ng-container>\n <fdp-form-field *ngIf=\"!noAdditionalContent\" [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n </fdp-form-group>\n</fd-busy-indicator>\n\n<ng-template #loadingTemplate>\n <fd-skeleton width=\"100%\" height=\"100px\" style=\"
|
|
376
|
+
], template: "<fd-busy-indicator *ngIf=\"_firstLoadingDone; else loadingTemplate\" [loading]=\"formLoading\" [block]=\"true\">\n <fdp-form-group\n *ngIf=\"form\"\n [hint]=\"hint\"\n [mainTitle]=\"mainTitle\"\n [hideMainTItle]=\"hideMainTItle\"\n [formGroup]=\"form\"\n [columnLayout]=\"columnLayout\"\n [labelColumnLayout]=\"labelColumnLayout\"\n [fieldColumnLayout]=\"fieldColumnLayout\"\n [gapColumnLayout]=\"gapColumnLayout\"\n [unifiedLayout]=\"unifiedLayout\"\n [inlineColumnLayout]=\"inlineColumnLayout\"\n [useForm]=\"true\"\n >\n <ng-container *ngFor=\"let error of _errorModels; trackBy: _errorsTrackBy\">\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n <ng-container *ngIf=\"_isAdvancedError(directiveError); else simpleErrorTemplate\">\n <ng-container *ngIf=\"directiveError.heading\">\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"directiveError.description\">\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n </ng-container>\n </ng-container>\n <ng-template #simpleErrorTemplate>\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n </ng-template>\n </span>\n </ng-container>\n <ng-container *ngFor=\"let field of formControlItems; trackBy: _trackFn\">\n <ng-container\n *ngTemplateOutlet=\"\n field.type === 'field' ? fieldRenderer : groupRenderer;\n context: { field: field, formFieldName: field.formItem.name, rank: field.formItem?.rank || 0 }\n \"\n ></ng-container>\n <ng-template\n #fieldRenderer\n let-field=\"field\"\n let-formFieldName=\"formFieldName\"\n let-formGroupName=\"formGroupName\"\n let-rank=\"rank\"\n >\n <ng-container\n *fdpDynamicFormControlField=\"field; show: shouldShowFields[field.formItem.name] !== false\"\n >\n <fdp-form-generator-field\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [shouldShow]=\"shouldShowFields[field.formItem.name] !== false\"\n [field]=\"field\"\n [formFieldName]=\"formFieldName\"\n [formGroupNamePath]=\"formGroupName\"\n [rank]=\"rank\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-template>\n <ng-template #groupRenderer>\n <fdp-form-field-group\n [hintOptions]=\"field.formItem.guiOptions | getHintOptions\"\n [label]=\"field.formItem.message || ''\"\n [labelColumnLayout]=\"field.formItem.guiOptions?.labelColumnLayout\"\n [fieldColumnLayout]=\"field.formItem.guiOptions?.fieldColumnLayout\"\n [gapColumnLayout]=\"field.formItem.guiOptions?.gapColumnLayout\"\n [formName]=\"field.formItem.name\"\n >\n <ng-container *ngFor=\"let groupField of field | getOrderedFieldControls; trackBy: _groupTrackFn\">\n <ng-container\n *fdpDynamicFormControlField=\"\n groupField;\n show: shouldShowFields[groupField.formItem.name!] !== false\n \"\n >\n <fdp-form-generator-field\n [hintOptions]=\"groupField.formItem.guiOptions | getHintOptions\"\n [form]=\"form\"\n [field]=\"groupField\"\n [shouldShow]=\"shouldShowFields[groupField.formItem.name!] !== false\"\n [formFieldName]=\"groupField.formItem.name\"\n [formGroupNamePath]=\"field.formItem.name\"\n [rank]=\"groupField.formItem.rank || 0\"\n ></fdp-form-generator-field>\n </ng-container>\n </ng-container>\n </fdp-form-field-group>\n </ng-template>\n </ng-container>\n <fdp-form-field *ngIf=\"!noAdditionalContent\" [column]=\"1\" [rank]=\"formControlItems.length + 1\">\n <!-- For user-defined elements, like submit button -->\n <ng-content></ng-content>\n </fdp-form-field>\n </fdp-form-group>\n</fd-busy-indicator>\n\n<ng-template #loadingTemplate>\n <fd-skeleton width=\"100%\" height=\"100px\" [style.padding.rem]=\"1\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n</ng-template>\n" }]
|
|
377
377
|
}], ctorParameters: function () { return [{ type: i1.FormGeneratorService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
378
378
|
type: Inject,
|
|
379
379
|
args: [FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS]
|
|
@@ -417,4 +417,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
417
417
|
type: ViewChildren,
|
|
418
418
|
args: [FormGeneratorFieldComponent]
|
|
419
419
|
}] } });
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFnQixZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRyxPQUFPLEVBTUgsWUFBWSxFQUNmLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFjakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixF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c0JBRGhCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVNOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFRTixXQUFXO3NCQURWLE1BQU07Z0JBUVAsYUFBYTtzQkFEWixNQUFNO2dCQU9QLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFPUCxNQUFNO3NCQURMLFNBQVM7dUJBQUMsTUFBTTtnQkFLakIsU0FBUztzQkFEUixTQUFTO3VCQUFDLGtCQUFrQjtnQkFLN0IsTUFBTTtzQkFETCxZQUFZO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5MYXlvdXQsXG4gICAgRmllbGRIaW50T3B0aW9ucyxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgSGludE9wdGlvbnMsXG4gICAgSGludElucHV0LFxuICAgIEZEUF9ET19DSEVDS1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtSXRlbSxcbiAgICBEeW5hbWljRm9ybUl0ZW1NYXAsXG4gICAgRHluYW1pY0Zvcm1JdGVtVmFsaWRhdGlvbk9iamVjdCxcbiAgICBEeW5hbWljRm9ybVZhbHVlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZHluYW1pYy1mb3JtLWl0ZW0nO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljRm9ybUNvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sR3JvdXAsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2xzXG59IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sJztcbmltcG9ydCB7IER5bmFtaWNGb3JtR3JvdXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2R5bmFtaWMtZm9ybS1ncm91cCc7XG5pbXBvcnQgeyBEZWZhdWx0R2FwTGF5b3V0LCBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dCwgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGRFBfRk9STV9HRU5FUkFUT1JfREVGQVVMVF9ISU5UX09QVElPTlMgfSBmcm9tICcuLi9mb3JtLWdlbmVyYXRvci50b2tlbnMnO1xuaW1wb3J0IHsgZGVmYXVsdEZvcm1HZW5lcmF0b3JIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZ2VuZXJhdG9yLWhpbnQtb3B0aW9ucyc7XG5pbXBvcnQgeyBnZXRQYXJlbnRJdGVtLCBpc0Zvcm1GaWVsZEl0ZW0sIG1hcEZvcm1JdGVtcywgdHJhbnNmb3JtRm9ybUl0ZW0gfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEdldE9yZGVyZWRGaWVsZENvbnRyb2xzUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1vcmRlcmVkLWZvcm0tY29udHJvbHMucGlwZSc7XG5pbXBvcnQgeyBTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBGb3JtR3JvdXBNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2ZkcC1mb3JtLm1vZHVsZSc7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdldEhpbnRPcHRpb25zUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1oaW50LW9wdGlvbnMucGlwZSc7XG5cbmxldCBmb3JtVW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBGb3JtR2VuZXJhdG9yQWNjZXB0YWJsZUl0ZW1zID0gRHluYW1pY0Zvcm1JdGVtW10gfCBPYnNlcnZhYmxlPER5bmFtaWNGb3JtSXRlbVtdPjtcblxuZXhwb3J0IGNvbnN0IEZEUF9GT1JNX0lHTk9SRURfU1RBVFVTRVM6IEZvcm1Db250cm9sU3RhdHVzW10gPSBbJ0lOVkFMSUQnLCAnUEVORElORycsICdESVNBQkxFRCddO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym1pdEZvcm1FdmVudFJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEluZGljYXRvciBpZiB2YWxpZGF0aW9uIGhhcyBiZWVuIHBhc3NlZC5cbiAgICAgKi9cbiAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3JtYXR0ZWQgZm9ybSB2YWx1ZS5cbiAgICAgKi9cbiAgICB2YWx1ZTogRHluYW1pY0Zvcm1WYWx1ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gR2VuZXJhdG9yIGNvbXBvbmVudCByZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBjb21wb25lbnRcbiAqIHdoaWNoIGluY2x1ZGVzIEBzZWUgRm9ybUdyb3VwIGluc2lkZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1nZW5lcmF0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX0RPX0NIRUNLLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKGZvcm1HZW5lcmF0b3I6IEZvcm1HZW5lcmF0b3JDb21wb25lbnQpID0+IGZvcm1HZW5lcmF0b3IuZG9DaGVjayQsXG4gICAgICAgICAgICBkZXBzOiBbRm9ybUdlbmVyYXRvckNvbXBvbmVudF1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JNb2R1bGUsXG4gICAgICAgIEZkcEZvcm1Hcm91cE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybUdlbmVyYXRvckZpZWxkQ29tcG9uZW50LFxuICAgICAgICBTa2VsZXRvbk1vZHVsZSxcbiAgICAgICAgR2V0T3JkZXJlZEZpZWxkQ29udHJvbHNQaXBlLFxuICAgICAgICBHZXRIaW50T3B0aW9uc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBVbmlxdWUgZm9ybSBuYW1lICovXG4gICAgQElucHV0KClcbiAgICBmb3JtTmFtZSA9IGBmZHAtZm9ybS1nZW5lcmF0b3ItJHtmb3JtVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3Qgb2YgQHNlZSBEeW5hbWljRm9ybUl0ZW0gcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIGl0ZW1zXG4gICAgICogdG8gYmUgcmVuZGVyZWQgaW4gdGhlIGZvcm0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybUl0ZW1zKGZvcm1JdGVtczogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcykge1xuICAgICAgICBpZiAoIWZvcm1JdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybUl0ZW1zID0gaXNPYnNlcnZhYmxlKGZvcm1JdGVtcykgPyBmb3JtSXRlbXMgOiBvZihmb3JtSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX29uRm9ybUl0ZW1zQ2hhbmdlKGZvcm1JdGVtcyk7XG4gICAgfVxuICAgIGdldCBmb3JtSXRlbXMoKTogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcm0gbWFpbiB0aXRsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5UaXRsZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBtYWluIHRpdGxlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZU1haW5USXRsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSGludCBmb3IgdGhlIG1haW4gdGl0bGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpbnQ6IEhpbnRJbnB1dDtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTcGVjaWZ5IHRoZSBjb2x1bW4gbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmBcbiAgICAgKiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgY2FuIGJlIGRpZmZlcmVudCBmb3IgZWFjaCBzaXplLlxuICAgICAqIGVnOiBYTDItTDItTTItUzEgd291bGQgY3JlYXRlIDItY29sdW1uIGxheW91dHMgZm9yIFhMLCBMLFxuICAgICAqIGFuZCBNIHNpemVzIGFuZCBzaW5nbGUtY29sdW1uIGxheW91dCBmb3IgUyBzaXplLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uTGF5b3V0OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBsYWJlbCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpZWxkQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZ2FwIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRHYXBMYXlvdXQ7XG5cbiAgICAvKiogV2hldGhlciBhbGwgZm9ybSBpdGVtcyBzaG91bGQgaGF2ZSBpZGVudGljYWwgbGF5b3V0IHByb3ZpZGVkIGZvciBmb3JtIGdyb3VwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5pZmllZExheW91dCA9IHRydWU7XG5cbiAgICAvKiogSW5saW5lIGNvbHVtbiBsYXlvdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlubGluZUNvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVtb3ZlcyBleHRyYSBlbXB0eSByb3cuXG4gICAgICogVE9ETzogcmVtb3ZlIGFmdGVyICM3NTMzIGhhcyBiZWVuIGZpeGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9BZGRpdGlvbmFsQ29udGVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAgICAqIGFuZCBhbGwgY29udHJvbHMgYXJlIGluIHBsYWNlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1DcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUdyb3VwPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkXG4gICAgICogYW5kIHN1Ym1pdHRlZC4gQ29udGFpbnMgZm9ybVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1TdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtVmFsdWU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hpY2ggbm90aWZpZXMgcGFyZW50IGNvbXBvbmVudCB0aGF0IHRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8U3VibWl0Rm9ybUV2ZW50UmVzdWx0PigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIGZvcm0gaW5zdGFuY2UuIEBzZWUgTmdGb3JtXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChOZ0Zvcm0pXG4gICAgbmdGb3JtOiBOZ0Zvcm07XG5cbiAgICAvKiogSW5uZXIgZm9ybSBncm91cCBkaXJlY3RpdmUuICovXG4gICAgQFZpZXdDaGlsZChGb3JtR3JvdXBEaXJlY3RpdmUpXG4gICAgZm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmU7XG5cbiAgICAvKiogSW5uZXIgZm9ybSBmaWVsZHMgKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudClcbiAgICBmaWVsZHM6IFF1ZXJ5TGlzdDxGb3JtR2VuZXJhdG9yRmllbGRDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkb0NoZWNrJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQXJyYXkgb2YgZm9ybSBmaWVsZCBjb250cm9scy4gKi9cbiAgICBnZXQgZm9ybUZpZWxkcygpOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgPy50b0FycmF5KClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiAhIWZpZWxkLmZpZWxkUmVuZGVyZXI/LmNvbnRyb2wpXG4gICAgICAgICAgICAubWFwKChmaWVsZCkgPT4gZmllbGQuZmllbGRSZW5kZXJlci5jb250cm9sISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIER5bmFtaWNhbGx5IGdlbmVyYXRlZCBmb3JtLiBAc2VlIEZvcm1HZW5lcmF0b3JTZXJ2aWNlXG4gICAgICovXG4gICAgZm9ybTogRHluYW1pY0Zvcm1Hcm91cDtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiB0aGUgZm9ybSBjb250cm9scy5cbiAgICAgKi9cbiAgICBmb3JtQ29udHJvbEl0ZW1zOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbFtdO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIGZsYWdzIHJlcHJlc2VudGluZyBpZiBwYXJ0aWN1bGFyIGZvcm0gaXRlbSBzaG91bGQgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBzaG91bGRTaG93RmllbGRzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRmxhZyByZXByZXNlbnRpbmcgdGhhdCBmb3JtIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBmb3JtTG9hZGluZyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgZm9ybSBsb2FkaW5nIHN0YXRlLlxuICAgICAqL1xuICAgIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBsYXN0IGZvcm0gc3VibWlzc2lvbiBzdGF0dXMuXG4gICAgICovXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyQgPSBuZXcgU3ViamVjdDxTdWJtaXRGb3JtRXZlbnRSZXN1bHQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgbGFzdCBmb3JtIHN1Ym1pc3Npb24gdmFsdWUuXG4gICAgICovXG4gICAgZm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RHluYW1pY0Zvcm1WYWx1ZT4oe30pO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhpbnRPcHRpb25zOiBIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Vycm9yTW9kZWxzOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtSXRlbXM6IEZvcm1HZW5lcmF0b3JBY2NlcHRhYmxlSXRlbXM7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdTdWJtaXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWFwcGVkRm9ybWl0ZW1zOiBNYXA8c3RyaW5nLCBEeW5hbWljRm9ybUl0ZW1NYXA+ID0gbmV3IE1hcCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZmdTZXJ2aWNlOiBGb3JtR2VuZXJhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0dFTkVSQVRPUl9ERUZBVUxUX0hJTlRfT1BUSU9OUykgX3Byb3ZpZGVkSGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZvcm1HZW5lcmF0b3JIaW50T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLl9wcm92aWRlZEhpbnRPcHRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZXJyb3JNb2RlbHMgPSB0aGlzLl9nZXRFcnJvcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmhpbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyBmb3JtIGl0ZW1zIHZpc2liaWxpdHkgd2l0aCAnd2hlbicgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGFzeW5jIF9vblN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRvQ2hlY2skLm5leHQoKTtcblxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuZ2V0Rm9ybVZhbHVlKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkU3RhdHVzLmVtaXQoeyBzdWNjZXNzOiAhdGhpcy5mb3JtLmludmFsaWQsIHZhbHVlOiBmb3JtVmFsdWUgfSk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZFN0YXR1cyQubmV4dCh7IHN1Y2Nlc3M6ICF0aGlzLmZvcm0uaW52YWxpZCwgdmFsdWU6IGZvcm1WYWx1ZSB9KTtcblxuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1TdWJtaXR0ZWQuZW1pdChmb3JtVmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZSQubmV4dChmb3JtVmFsdWUpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IGNvbnRyb2wgdG8gYW4gZXhpc3RpbmcgZm9ybS5cbiAgICAgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIGNvbmZpZ3VyYXRpb24gdG8gYWRkLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQ29udHJvbChjb250cm9sOiBEeW5hbWljRm9ybUl0ZW0sIHBhdGg/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtSXRlbXMoY29udHJvbCwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5hZGRDb250cm9sKGNvbnRyb2wsIHRoaXMuZm9ybSwgcGF0aCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbEl0ZW1zID0gdGhpcy5fZ2V0T3JkZXJlZENvbnRyb2xzKHRoaXMuZm9ybS5jb250cm9scyk7XG5cbiAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBieSB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBjb250cm9sLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgcmVtb3ZlQ29udHJvbChuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZSwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5yZW1vdmVDb250cm9sKG5hbWUsIHRoaXMuZm9ybSwgcGF0aCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyh0aGlzLmZvcm0uY29udHJvbHMpO1xuXG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfdHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aW5kZXh9XyR7dmFsdWUuZm9ybUl0ZW0ubmFtZX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyb3VwVHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIER5bmFtaWNGb3JtQ29udHJvbEdyb3VwKS5mb3JtSXRlbS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIFByb2dyYW1tYXRpY2FsbHkgc3VibWl0IGZvcm0uXG4gICAgICogVGhpcyBtZXRob2QgYWxzbyBjYWxscyB2YWxpZGF0aW9uIGZvciB0aGUgZm9ybSBpdGVtcy5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm9uU3VibWl0KG5ldyBFdmVudCgnc3VibWl0JykpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQWR2YW5jZWRFcnJvcihlcnJvcjogYW55KTogZXJyb3IgaXMgRHluYW1pY0Zvcm1JdGVtVmFsaWRhdGlvbk9iamVjdCB7XG4gICAgICAgIHJldHVybiBlcnJvci5oZWFkaW5nICYmIGVycm9yLmRlc2NyaXB0aW9uICYmIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JzVHJhY2tCeShfOiBudW1iZXIsIGVycm9yOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2dlbmVyYXRlRm9ybSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdlbmVyYXRlRm9ybSh0aGlzLmZvcm1OYW1lLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1WYWx1ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyhmb3JtLmNvbnRyb2xzKTtcblxuICAgICAgICB0aGlzLnNob3VsZFNob3dGaWVsZHMgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuY2hlY2tWaXNpYmxlRm9ybUl0ZW1zKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5fZm9ybVZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ3JlYXRlZC5lbWl0KHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3JkZXJlZENvbnRyb2xzKGNvbnRyb2xzOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbHMpOiAoRHluYW1pY0Zvcm1Db250cm9sIHwgRHluYW1pY0Zvcm1Db250cm9sR3JvdXApW10ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb250cm9scykuc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PiAoYS5mb3JtSXRlbT8ucmFuayA/PyAtSW5maW5pdHkpIC0gKGIuZm9ybUl0ZW0/LnJhbmsgPz8gLUluZmluaXR5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RXJyb3JzKCk6IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSB7XG4gICAgICAgIGNvbnN0IHJldHVybkVycm9yczogeyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdID0gW107XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFcnJvcnMgPSB0aGlzLl9mZ1NlcnZpY2UudmFsaWRhdGlvbkVycm9ySGludHM7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZ2lzdGVyZWRFcnJvcnMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtlcnJvclR5cGUsIGVycm9yVmFsdWVdID0gdHlwZTtcblxuICAgICAgICAgICAgcmV0dXJuRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXJyb3JWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5FcnJvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1N1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdTdWJtaXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAubmdTdWJtaXRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzIS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpID0+IHN0YXR1cyAhPT0gJ1BFTkRJTkcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX29uU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9TdWJtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25Gb3JtSXRlbXNDaGFuZ2UoaXRlbXM6IE9ic2VydmFibGU8RHluYW1pY0Zvcm1JdGVtW10+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgaXRlbXMucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpKSkuc3Vic2NyaWJlKChmb3JtSXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21hcHBlZEZvcm1pdGVtcyA9IG1hcEZvcm1JdGVtcyhmb3JtSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVGb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlSYW5rKGl0ZW1zOiBEeW5hbWljRm9ybUl0ZW1bXSk6IER5bmFtaWNGb3JtSXRlbVtdIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJhbmsgPSBpdGVtLnJhbmsgfHwgaW5kZXg7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXRlbXMgPSB0aGlzLl9hcHBseVJhbmsoaXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkQ29udHJvbFRvRm9ybUl0ZW1zKGl0ZW06IER5bmFtaWNGb3JtSXRlbSwgcGF0aD86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zLnNldChpdGVtLm5hbWUsIHRyYW5zZm9ybUZvcm1JdGVtKGl0ZW0sIHRoaXMuX21hcHBlZEZvcm1pdGVtcy5zaXplKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gZ2V0UGFyZW50SXRlbShwYXRoLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIGlmICghcGFyZW50SXRlbSB8fCBpc0Zvcm1GaWVsZEl0ZW0ocGFyZW50SXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudEl0ZW0uaXRlbXMgPSBwYXJlbnRJdGVtLml0ZW1zIHx8IG5ldyBNYXAoKTtcbiAgICAgICAgcGFyZW50SXRlbS5pdGVtcy5zZXQoaXRlbS5uYW1lLCB0cmFuc2Zvcm1Gb3JtSXRlbShpdGVtLCBwYXJlbnRJdGVtLml0ZW1zLnNpemUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXBwZWRGb3JtaXRlbXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGdldFBhcmVudEl0ZW0ocGF0aCwgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zKTtcblxuICAgICAgICBpZiAoIXBhcmVudEl0ZW0gfHwgaXNGb3JtRmllbGRJdGVtKHBhcmVudEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRJdGVtLml0ZW1zPy5kZWxldGUobmFtZSk7XG4gICAgfVxufVxuIiwiPGZkLWJ1c3ktaW5kaWNhdG9yICpuZ0lmPVwiX2ZpcnN0TG9hZGluZ0RvbmU7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCIgW2xvYWRpbmddPVwiZm9ybUxvYWRpbmdcIiBbYmxvY2tdPVwidHJ1ZVwiPlxuICAgIDxmZHAtZm9ybS1ncm91cFxuICAgICAgICAqbmdJZj1cImZvcm1cIlxuICAgICAgICBbaGludF09XCJoaW50XCJcbiAgICAgICAgW21haW5UaXRsZV09XCJtYWluVGl0bGVcIlxuICAgICAgICBbaGlkZU1haW5USXRsZV09XCJoaWRlTWFpblRJdGxlXCJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgW2NvbHVtbkxheW91dF09XCJjb2x1bW5MYXlvdXRcIlxuICAgICAgICBbbGFiZWxDb2x1bW5MYXlvdXRdPVwibGFiZWxDb2x1bW5MYXlvdXRcIlxuICAgICAgICBbZmllbGRDb2x1bW5MYXlvdXRdPVwiZmllbGRDb2x1bW5MYXlvdXRcIlxuICAgICAgICBbZ2FwQ29sdW1uTGF5b3V0XT1cImdhcENvbHVtbkxheW91dFwiXG4gICAgICAgIFt1bmlmaWVkTGF5b3V0XT1cInVuaWZpZWRMYXlvdXRcIlxuICAgICAgICBbaW5saW5lQ29sdW1uTGF5b3V0XT1cImlubGluZUNvbHVtbkxheW91dFwiXG4gICAgICAgIFt1c2VGb3JtXT1cInRydWVcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgX2Vycm9yTW9kZWxzOyB0cmFja0J5OiBfZXJyb3JzVHJhY2tCeVwiPlxuICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yPVwiZXJyb3IudHlwZTsgbGV0IGRpcmVjdGl2ZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9pc0FkdmFuY2VkRXJyb3IoZGlyZWN0aXZlRXJyb3IpOyBlbHNlIHNpbXBsZUVycm9yVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpcmVjdGl2ZUVycm9yLmhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yOyB0eXBlOiBkaXJlY3RpdmVFcnJvci50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsaWRhdGlvbkVycm9yLmhlYWRpbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXJlY3RpdmVFcnJvci5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb249XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsaWRhdGlvbkVycm9yLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlRXJyb3JUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9ySGVhZGluZz1cImxldCB2YWxpZGF0aW9uRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVycm9yLnZhbHVlID8gZXJyb3IudmFsdWUgOiB2YWxpZGF0aW9uRXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtQ29udHJvbEl0ZW1zOyB0cmFja0J5OiBfdHJhY2tGblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdmaWVsZCcgPyBmaWVsZFJlbmRlcmVyIDogZ3JvdXBSZW5kZXJlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmaWVsZDogZmllbGQsIGZvcm1GaWVsZE5hbWU6IGZpZWxkLmZvcm1JdGVtLm5hbWUsIHJhbms6IGZpZWxkLmZvcm1JdGVtPy5yYW5rIHx8IDAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAjZmllbGRSZW5kZXJlclxuICAgICAgICAgICAgICAgIGxldC1maWVsZD1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICBsZXQtZm9ybUZpZWxkTmFtZT1cImZvcm1GaWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgIGxldC1mb3JtR3JvdXBOYW1lPVwiZm9ybUdyb3VwTmFtZVwiXG4gICAgICAgICAgICAgICAgbGV0LXJhbms9XCJyYW5rXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpmZHBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZD1cImZpZWxkOyBzaG93OiBzaG91bGRTaG93RmllbGRzW2ZpZWxkLmZvcm1JdGVtLm5hbWVdICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGludE9wdGlvbnNdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucyB8IGdldEhpbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZFNob3ddPVwic2hvdWxkU2hvd0ZpZWxkc1tmaWVsZC5mb3JtSXRlbS5uYW1lXSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtRmllbGROYW1lXT1cImZvcm1GaWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVQYXRoXT1cImZvcm1Hcm91cE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JhbmtdPVwicmFua1wiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkcC1mb3JtLWdlbmVyYXRvci1maWVsZD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwUmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgPGZkcC1mb3JtLWZpZWxkLWdyb3VwXG4gICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zIHwgZ2V0SGludE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQuZm9ybUl0ZW0ubWVzc2FnZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5sYWJlbENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5maWVsZENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgIFtnYXBDb2x1bW5MYXlvdXRdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucz8uZ2FwQ29sdW1uTGF5b3V0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1OYW1lXT1cImZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBGaWVsZCBvZiBmaWVsZCB8IGdldE9yZGVyZWRGaWVsZENvbnRyb2xzOyB0cmFja0J5OiBfZ3JvdXBUcmFja0ZuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZkcER5bmFtaWNGb3JtQ29udHJvbEZpZWxkPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IHNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJncm91cEZpZWxkLmZvcm1JdGVtLmd1aU9wdGlvbnMgfCBnZXRIaW50T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZ3JvdXBGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1GaWVsZE5hbWVdPVwiZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVQYXRoXT1cImZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmFua109XCJncm91cEZpZWxkLmZvcm1JdGVtLnJhbmsgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQtZ3JvdXA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZkcC1mb3JtLWZpZWxkICpuZ0lmPVwiIW5vQWRkaXRpb25hbENvbnRlbnRcIiBbY29sdW1uXT1cIjFcIiBbcmFua109XCJmb3JtQ29udHJvbEl0ZW1zLmxlbmd0aCArIDFcIj5cbiAgICAgICAgICAgIDwhLS0gRm9yIHVzZXItZGVmaW5lZCBlbGVtZW50cywgbGlrZSBzdWJtaXQgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICAgIDwvZmRwLWZvcm0tZ3JvdXA+XG48L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwcHhcIiBzdHlsZT1cInBhZGRpbmc6IDFyZW1cIj5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjM1JVwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiNjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiODBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cbiAgICA8L2ZkLXNrZWxldG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFnQixZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRyxPQUFPLEVBTUgsWUFBWSxFQUNmLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFjakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFFcEUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBSXJCLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUF3QixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFhakc7OztHQUdHO0FBNkJILE1BQU0sT0FBTyxzQkFBc0I7SUFLL0I7OztPQUdHO0lBQ0gsSUFDSSxTQUFTLENBQUMsU0FBdUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNaLE9BQU87U0FDVjtRQUVELFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFxR0Qsb0NBQW9DO0lBQ3BDLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU07WUFDZCxFQUFFLE9BQU8sRUFBRTthQUNWLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO2FBQ2pELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBOEVELGNBQWM7SUFDZCxZQUNZLFVBQWdDLEVBQ2hDLEdBQXNCLEVBQ21CLG9CQUFzQztRQUYvRSxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWhObEMsb0NBQW9DO1FBRXBDLGFBQVEsR0FBRyxzQkFBc0IsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQTBCbEQ7O1dBRUc7UUFFSCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWtCdEI7O1dBRUc7UUFFSCxzQkFBaUIsR0FBaUIsMEJBQTBCLENBQUM7UUFFN0Q7O1dBRUc7UUFFSCxzQkFBaUIsR0FBaUIsMEJBQTBCLENBQUM7UUFFN0Q7O1dBRUc7UUFFSCxvQkFBZSxHQUFpQixnQkFBZ0IsQ0FBQztRQUVqRCxtRkFBbUY7UUFFbkYsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsMkJBQTJCO1FBRTNCLHVCQUFrQixHQUFpQiwwQkFBMEIsQ0FBQztRQUU5RDs7OztXQUlHO1FBRUgsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCOzs7V0FHRztRQUVILGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFbkQ7OztXQUdHO1FBRUgsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUVyRDs7V0FFRztRQUVILHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBZ0JoRSxjQUFjO1FBQ2QsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFtQi9COztXQUVHO1FBQ0gscUJBQWdCLEdBQStCLEVBQUUsQ0FBQztRQUVsRDs7V0FFRztRQUNILGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5COztXQUVHO1FBQ0gsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxRDs7V0FFRztRQUNILHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBRTVEOztXQUVHO1FBQ0gsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUV2RDs7O1dBR0c7UUFDSCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFPMUIsY0FBYztRQUNkLGlCQUFZLEdBQW1DLEVBQUUsQ0FBQztRQVlsRCxjQUFjO1FBQ04sY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFeEM7OztXQUdHO1FBQ2MsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVFsRSxjQUFjO1FBQ04scUJBQWdCLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7UUFRbEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3ZCLEdBQUcsK0JBQStCO1lBQ2xDLEdBQUcsb0JBQW9CO1NBQzFCLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxXQUFXLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUc7b0JBQ2YsR0FBRyxJQUFJLENBQUMsbUJBQW1CO29CQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ3JCLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHO29CQUNmLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtvQkFDM0IsR0FBRyxJQUFJLENBQUMsSUFBSTtpQkFDZixDQUFDO2FBQ0w7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxzQkFBc0I7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVsRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQXdCLEVBQUUsSUFBZTtRQUN0RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBWSxFQUFFLElBQWM7UUFDNUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFhLEVBQUUsS0FBOEI7UUFDbEQsT0FBTyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO0lBQ2QsYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUE4QjtRQUN2RCxPQUFRLEtBQWlDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjO0lBQ2QsZ0JBQWdCLENBQUMsS0FBVTtRQUN2QixPQUFPLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRCxjQUFjO0lBQ2QsY0FBYyxDQUFDLENBQVMsRUFBRSxLQUFtQztRQUN6RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGFBQWE7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RixJQUFJLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkQsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRTlCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FBQyxRQUFrQztRQUMxRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzlFLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLFVBQVU7UUFDZCxNQUFNLFlBQVksR0FBbUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztRQUM5RCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDOUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFckMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLLEVBQUUsVUFBVTthQUNwQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZTtRQUNuQixJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTthQUMvQyxJQUFJLENBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYyxDQUFDLElBQUksQ0FDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQ2hDLE1BQU0sQ0FBQyxDQUFDLE1BQXlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFDM0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzlCLENBQ0osQ0FDSjthQUNBLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLEtBQW9DO1FBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sVUFBVSxDQUFDLEtBQXdCO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7WUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCLENBQUMsSUFBcUIsRUFBRSxJQUFlO1FBQ2pFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFVBQVUsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDNUMsT0FBTztTQUNWO1FBRUQsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxjQUFjO0lBQ04sdUJBQXVCLENBQUMsSUFBWSxFQUFFLElBQWU7UUFDekQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsVUFBVSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1QyxPQUFPO1NBQ1Y7UUFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQTFkUSxzQkFBc0IsdUZBa05uQix1Q0FBdUM7a0dBbE4xQyxzQkFBc0IsOGpCQXZCcEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsWUFBWTtnQkFDckIsVUFBVSxFQUFFLENBQUMsYUFBcUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVE7Z0JBQzdFLElBQUksRUFBRSxDQUFDLHNCQUFzQixDQUFDO2FBQ2pDO1NBQ0osa0VBNkhVLE1BQU0sNEVBSU4sa0JBQWtCLDREQUlmLDJCQUEyQixxRUM5TjdDLHF4TEFpSEEsNENEckJRLElBQUksNEZBQ0osbUJBQW1CLHNNQUNuQixrQkFBa0IsNitDQUNsQixXQUFXLDBMQUNYLG1CQUFtQixnTEFDbkIsS0FBSyxtSEFDTCxnQkFBZ0Isb0pBQ2hCLGdDQUFnQyxtSkFDaEMsMkJBQTJCLGtMQUMzQixjQUFjLHFLQUNkLDJCQUEyQiwyREFDM0Isa0JBQWtCOzsyRkFHYixzQkFBc0I7a0JBNUJsQyxTQUFTOytCQUNJLG9CQUFvQixpQkFFZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixVQUFVLEVBQUUsQ0FBQyxhQUFxQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUTs0QkFDN0UsSUFBSSxFQUFFLHdCQUF3Qjt5QkFDakM7cUJBQ0osY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixnQ0FBZ0M7d0JBQ2hDLDJCQUEyQjt3QkFDM0IsY0FBYzt3QkFDZCwyQkFBMkI7d0JBQzNCLGtCQUFrQjtxQkFDckI7OzBCQW9OSSxNQUFNOzJCQUFDLHVDQUF1Qzs0Q0EvTW5ELFFBQVE7c0JBRFAsS0FBSztnQkFRRixTQUFTO3NCQURaLEtBQUs7Z0JBa0JOLFNBQVM7c0JBRFIsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBUU4sSUFBSTtzQkFESCxLQUFLO2dCQVVOLFlBQVk7c0JBRFgsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVNOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFRTixXQUFXO3NCQURWLE1BQU07Z0JBUVAsYUFBYTtzQkFEWixNQUFNO2dCQU9QLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFPUCxNQUFNO3NCQURMLFNBQVM7dUJBQUMsTUFBTTtnQkFLakIsU0FBUztzQkFEUixTQUFTO3VCQUFDLGtCQUFrQjtnQkFLN0IsTUFBTTtzQkFETCxZQUFZO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5MYXlvdXQsXG4gICAgRmllbGRIaW50T3B0aW9ucyxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgSGludE9wdGlvbnMsXG4gICAgSGludElucHV0LFxuICAgIEZEUF9ET19DSEVDS1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkL2Zvcm0tZ2VuZXJhdG9yLWZpZWxkLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtSXRlbSxcbiAgICBEeW5hbWljRm9ybUl0ZW1NYXAsXG4gICAgRHluYW1pY0Zvcm1JdGVtVmFsaWRhdGlvbk9iamVjdCxcbiAgICBEeW5hbWljRm9ybVZhbHVlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZHluYW1pYy1mb3JtLWl0ZW0nO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljRm9ybUNvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sR3JvdXAsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wsXG4gICAgRHluYW1pY0Zvcm1Hcm91cENvbnRyb2xzXG59IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sJztcbmltcG9ydCB7IER5bmFtaWNGb3JtR3JvdXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2R5bmFtaWMtZm9ybS1ncm91cCc7XG5pbXBvcnQgeyBEZWZhdWx0R2FwTGF5b3V0LCBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dCwgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGRFBfRk9STV9HRU5FUkFUT1JfREVGQVVMVF9ISU5UX09QVElPTlMgfSBmcm9tICcuLi9mb3JtLWdlbmVyYXRvci50b2tlbnMnO1xuaW1wb3J0IHsgZGVmYXVsdEZvcm1HZW5lcmF0b3JIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZ2VuZXJhdG9yLWhpbnQtb3B0aW9ucyc7XG5pbXBvcnQgeyBnZXRQYXJlbnRJdGVtLCBpc0Zvcm1GaWVsZEl0ZW0sIG1hcEZvcm1JdGVtcywgdHJhbnNmb3JtRm9ybUl0ZW0gfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEdldE9yZGVyZWRGaWVsZENvbnRyb2xzUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1vcmRlcmVkLWZvcm0tY29udHJvbHMucGlwZSc7XG5pbXBvcnQgeyBTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uL2R5bmFtaWMtZm9ybS1jb250cm9sLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBGb3JtR3JvdXBNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3JtLWdyb3VwL2ZkcC1mb3JtLm1vZHVsZSc7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdldEhpbnRPcHRpb25zUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1oaW50LW9wdGlvbnMucGlwZSc7XG5cbmxldCBmb3JtVW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBGb3JtR2VuZXJhdG9yQWNjZXB0YWJsZUl0ZW1zID0gRHluYW1pY0Zvcm1JdGVtW10gfCBPYnNlcnZhYmxlPER5bmFtaWNGb3JtSXRlbVtdPjtcblxuZXhwb3J0IGNvbnN0IEZEUF9GT1JNX0lHTk9SRURfU1RBVFVTRVM6IEZvcm1Db250cm9sU3RhdHVzW10gPSBbJ0lOVkFMSUQnLCAnUEVORElORycsICdESVNBQkxFRCddO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym1pdEZvcm1FdmVudFJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEluZGljYXRvciBpZiB2YWxpZGF0aW9uIGhhcyBiZWVuIHBhc3NlZC5cbiAgICAgKi9cbiAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3JtYXR0ZWQgZm9ybSB2YWx1ZS5cbiAgICAgKi9cbiAgICB2YWx1ZTogRHluYW1pY0Zvcm1WYWx1ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gR2VuZXJhdG9yIGNvbXBvbmVudCByZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBjb21wb25lbnRcbiAqIHdoaWNoIGluY2x1ZGVzIEBzZWUgRm9ybUdyb3VwIGluc2lkZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1nZW5lcmF0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX0RPX0NIRUNLLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKGZvcm1HZW5lcmF0b3I6IEZvcm1HZW5lcmF0b3JDb21wb25lbnQpID0+IGZvcm1HZW5lcmF0b3IuZG9DaGVjayQsXG4gICAgICAgICAgICBkZXBzOiBbRm9ybUdlbmVyYXRvckNvbXBvbmVudF1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JNb2R1bGUsXG4gICAgICAgIEZkcEZvcm1Hcm91cE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybUdlbmVyYXRvckZpZWxkQ29tcG9uZW50LFxuICAgICAgICBTa2VsZXRvbk1vZHVsZSxcbiAgICAgICAgR2V0T3JkZXJlZEZpZWxkQ29udHJvbHNQaXBlLFxuICAgICAgICBHZXRIaW50T3B0aW9uc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBVbmlxdWUgZm9ybSBuYW1lICovXG4gICAgQElucHV0KClcbiAgICBmb3JtTmFtZSA9IGBmZHAtZm9ybS1nZW5lcmF0b3ItJHtmb3JtVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3Qgb2YgQHNlZSBEeW5hbWljRm9ybUl0ZW0gcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIGl0ZW1zXG4gICAgICogdG8gYmUgcmVuZGVyZWQgaW4gdGhlIGZvcm0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybUl0ZW1zKGZvcm1JdGVtczogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcykge1xuICAgICAgICBpZiAoIWZvcm1JdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybUl0ZW1zID0gaXNPYnNlcnZhYmxlKGZvcm1JdGVtcykgPyBmb3JtSXRlbXMgOiBvZihmb3JtSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX29uRm9ybUl0ZW1zQ2hhbmdlKGZvcm1JdGVtcyk7XG4gICAgfVxuICAgIGdldCBmb3JtSXRlbXMoKTogRm9ybUdlbmVyYXRvckFjY2VwdGFibGVJdGVtcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcm0gbWFpbiB0aXRsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5UaXRsZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBtYWluIHRpdGxlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZU1haW5USXRsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSGludCBmb3IgdGhlIG1haW4gdGl0bGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpbnQ6IEhpbnRJbnB1dDtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTcGVjaWZ5IHRoZSBjb2x1bW4gbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmBcbiAgICAgKiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgY2FuIGJlIGRpZmZlcmVudCBmb3IgZWFjaCBzaXplLlxuICAgICAqIGVnOiBYTDItTDItTTItUzEgd291bGQgY3JlYXRlIDItY29sdW1uIGxheW91dHMgZm9yIFhMLCBMLFxuICAgICAqIGFuZCBNIHNpemVzIGFuZCBzaW5nbGUtY29sdW1uIGxheW91dCBmb3IgUyBzaXplLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uTGF5b3V0OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBsYWJlbCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpZWxkQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQgPSBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZ2FwIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dCA9IERlZmF1bHRHYXBMYXlvdXQ7XG5cbiAgICAvKiogV2hldGhlciBhbGwgZm9ybSBpdGVtcyBzaG91bGQgaGF2ZSBpZGVudGljYWwgbGF5b3V0IHByb3ZpZGVkIGZvciBmb3JtIGdyb3VwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5pZmllZExheW91dCA9IHRydWU7XG5cbiAgICAvKiogSW5saW5lIGNvbHVtbiBsYXlvdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlubGluZUNvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0ID0gRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVtb3ZlcyBleHRyYSBlbXB0eSByb3cuXG4gICAgICogVE9ETzogcmVtb3ZlIGFmdGVyICM3NTMzIGhhcyBiZWVuIGZpeGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9BZGRpdGlvbmFsQ29udGVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAgICAqIGFuZCBhbGwgY29udHJvbHMgYXJlIGluIHBsYWNlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1DcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUdyb3VwPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHdoaWNoIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnQgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkXG4gICAgICogYW5kIHN1Ym1pdHRlZC4gQ29udGFpbnMgZm9ybVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1TdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtVmFsdWU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hpY2ggbm90aWZpZXMgcGFyZW50IGNvbXBvbmVudCB0aGF0IHRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8U3VibWl0Rm9ybUV2ZW50UmVzdWx0PigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIGZvcm0gaW5zdGFuY2UuIEBzZWUgTmdGb3JtXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChOZ0Zvcm0pXG4gICAgbmdGb3JtOiBOZ0Zvcm07XG5cbiAgICAvKiogSW5uZXIgZm9ybSBncm91cCBkaXJlY3RpdmUuICovXG4gICAgQFZpZXdDaGlsZChGb3JtR3JvdXBEaXJlY3RpdmUpXG4gICAgZm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmU7XG5cbiAgICAvKiogSW5uZXIgZm9ybSBmaWVsZHMgKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvcm1HZW5lcmF0b3JGaWVsZENvbXBvbmVudClcbiAgICBmaWVsZHM6IFF1ZXJ5TGlzdDxGb3JtR2VuZXJhdG9yRmllbGRDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkb0NoZWNrJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQXJyYXkgb2YgZm9ybSBmaWVsZCBjb250cm9scy4gKi9cbiAgICBnZXQgZm9ybUZpZWxkcygpOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgPy50b0FycmF5KClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiAhIWZpZWxkLmZpZWxkUmVuZGVyZXI/LmNvbnRyb2wpXG4gICAgICAgICAgICAubWFwKChmaWVsZCkgPT4gZmllbGQuZmllbGRSZW5kZXJlci5jb250cm9sISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIER5bmFtaWNhbGx5IGdlbmVyYXRlZCBmb3JtLiBAc2VlIEZvcm1HZW5lcmF0b3JTZXJ2aWNlXG4gICAgICovXG4gICAgZm9ybTogRHluYW1pY0Zvcm1Hcm91cDtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdCBvZiB0aGUgZm9ybSBjb250cm9scy5cbiAgICAgKi9cbiAgICBmb3JtQ29udHJvbEl0ZW1zOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbFtdO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIGZsYWdzIHJlcHJlc2VudGluZyBpZiBwYXJ0aWN1bGFyIGZvcm0gaXRlbSBzaG91bGQgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBzaG91bGRTaG93RmllbGRzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRmxhZyByZXByZXNlbnRpbmcgdGhhdCBmb3JtIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBmb3JtTG9hZGluZyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgZm9ybSBsb2FkaW5nIHN0YXRlLlxuICAgICAqL1xuICAgIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBsYXN0IGZvcm0gc3VibWlzc2lvbiBzdGF0dXMuXG4gICAgICovXG4gICAgZm9ybVN1Ym1pdHRlZFN0YXR1cyQgPSBuZXcgU3ViamVjdDxTdWJtaXRGb3JtRXZlbnRSZXN1bHQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgbGFzdCBmb3JtIHN1Ym1pc3Npb24gdmFsdWUuXG4gICAgICovXG4gICAgZm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RHluYW1pY0Zvcm1WYWx1ZT4oe30pO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhpbnRPcHRpb25zOiBIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Vycm9yTW9kZWxzOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtSXRlbXM6IEZvcm1HZW5lcmF0b3JBY2NlcHRhYmxlSXRlbXM7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdTdWJtaXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWFwcGVkRm9ybWl0ZW1zOiBNYXA8c3RyaW5nLCBEeW5hbWljRm9ybUl0ZW1NYXA+ID0gbmV3IE1hcCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZmdTZXJ2aWNlOiBGb3JtR2VuZXJhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0dFTkVSQVRPUl9ERUZBVUxUX0hJTlRfT1BUSU9OUykgX3Byb3ZpZGVkSGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZvcm1HZW5lcmF0b3JIaW50T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLl9wcm92aWRlZEhpbnRPcHRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZXJyb3JNb2RlbHMgPSB0aGlzLl9nZXRFcnJvcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmhpbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyBmb3JtIGl0ZW1zIHZpc2liaWxpdHkgd2l0aCAnd2hlbicgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGFzeW5jIF9vblN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRvQ2hlY2skLm5leHQoKTtcblxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuZ2V0Rm9ybVZhbHVlKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkU3RhdHVzLmVtaXQoeyBzdWNjZXNzOiAhdGhpcy5mb3JtLmludmFsaWQsIHZhbHVlOiBmb3JtVmFsdWUgfSk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZFN0YXR1cyQubmV4dCh7IHN1Y2Nlc3M6ICF0aGlzLmZvcm0uaW52YWxpZCwgdmFsdWU6IGZvcm1WYWx1ZSB9KTtcblxuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1TdWJtaXR0ZWQuZW1pdChmb3JtVmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZSQubmV4dChmb3JtVmFsdWUpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IGNvbnRyb2wgdG8gYW4gZXhpc3RpbmcgZm9ybS5cbiAgICAgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIGNvbmZpZ3VyYXRpb24gdG8gYWRkLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQ29udHJvbChjb250cm9sOiBEeW5hbWljRm9ybUl0ZW0sIHBhdGg/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtSXRlbXMoY29udHJvbCwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5hZGRDb250cm9sKGNvbnRyb2wsIHRoaXMuZm9ybSwgcGF0aCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbEl0ZW1zID0gdGhpcy5fZ2V0T3JkZXJlZENvbnRyb2xzKHRoaXMuZm9ybS5jb250cm9scyk7XG5cbiAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBieSB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBjb250cm9sLlxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICovXG4gICAgYXN5bmMgcmVtb3ZlQ29udHJvbChuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZSwgcGF0aCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5yZW1vdmVDb250cm9sKG5hbWUsIHRoaXMuZm9ybSwgcGF0aCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyh0aGlzLmZvcm0uY29udHJvbHMpO1xuXG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0ZpZWxkcyA9IGF3YWl0IHRoaXMuX2ZnU2VydmljZS5jaGVja1Zpc2libGVGb3JtSXRlbXModGhpcy5mb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfdHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aW5kZXh9XyR7dmFsdWUuZm9ybUl0ZW0ubmFtZX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyb3VwVHJhY2tGbihpbmRleDogbnVtYmVyLCB2YWx1ZTogRHluYW1pY0Zvcm1Hcm91cENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIER5bmFtaWNGb3JtQ29udHJvbEdyb3VwKS5mb3JtSXRlbS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIFByb2dyYW1tYXRpY2FsbHkgc3VibWl0IGZvcm0uXG4gICAgICogVGhpcyBtZXRob2QgYWxzbyBjYWxscyB2YWxpZGF0aW9uIGZvciB0aGUgZm9ybSBpdGVtcy5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm9uU3VibWl0KG5ldyBFdmVudCgnc3VibWl0JykpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQWR2YW5jZWRFcnJvcihlcnJvcjogYW55KTogZXJyb3IgaXMgRHluYW1pY0Zvcm1JdGVtVmFsaWRhdGlvbk9iamVjdCB7XG4gICAgICAgIHJldHVybiBlcnJvci5oZWFkaW5nICYmIGVycm9yLmRlc2NyaXB0aW9uICYmIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JzVHJhY2tCeShfOiBudW1iZXIsIGVycm9yOiB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueSB9KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVycm9yLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2dlbmVyYXRlRm9ybSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdlbmVyYXRlRm9ybSh0aGlzLmZvcm1OYW1lLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1WYWx1ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xJdGVtcyA9IHRoaXMuX2dldE9yZGVyZWRDb250cm9scyhmb3JtLmNvbnRyb2xzKTtcblxuICAgICAgICB0aGlzLnNob3VsZFNob3dGaWVsZHMgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuY2hlY2tWaXNpYmxlRm9ybUl0ZW1zKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgdGhpcy5fZm9ybVZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRTaG93RmllbGRzID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmNoZWNrVmlzaWJsZUZvcm1JdGVtcyh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtQ3JlYXRlZC5lbWl0KHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0aGlzLmZvcm1Mb2FkaW5nKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3JkZXJlZENvbnRyb2xzKGNvbnRyb2xzOiBEeW5hbWljRm9ybUdyb3VwQ29udHJvbHMpOiAoRHluYW1pY0Zvcm1Db250cm9sIHwgRHluYW1pY0Zvcm1Db250cm9sR3JvdXApW10ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb250cm9scykuc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PiAoYS5mb3JtSXRlbT8ucmFuayA/PyAtSW5maW5pdHkpIC0gKGIuZm9ybUl0ZW0/LnJhbmsgPz8gLUluZmluaXR5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RXJyb3JzKCk6IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSB7XG4gICAgICAgIGNvbnN0IHJldHVybkVycm9yczogeyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdID0gW107XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFcnJvcnMgPSB0aGlzLl9mZ1NlcnZpY2UudmFsaWRhdGlvbkVycm9ySGludHM7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZ2lzdGVyZWRFcnJvcnMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtlcnJvclR5cGUsIGVycm9yVmFsdWVdID0gdHlwZTtcblxuICAgICAgICAgICAgcmV0dXJuRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXJyb3JWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5FcnJvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1N1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdTdWJtaXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX25nU3VibWl0U3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAubmdTdWJtaXRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzIS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpID0+IHN0YXR1cyAhPT0gJ1BFTkRJTkcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX29uU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9TdWJtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25Gb3JtSXRlbXNDaGFuZ2UoaXRlbXM6IE9ic2VydmFibGU8RHluYW1pY0Zvcm1JdGVtW10+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgaXRlbXMucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpKSkuc3Vic2NyaWJlKChmb3JtSXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21hcHBlZEZvcm1pdGVtcyA9IG1hcEZvcm1JdGVtcyhmb3JtSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVGb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlSYW5rKGl0ZW1zOiBEeW5hbWljRm9ybUl0ZW1bXSk6IER5bmFtaWNGb3JtSXRlbVtdIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJhbmsgPSBpdGVtLnJhbmsgfHwgaW5kZXg7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXRlbXMgPSB0aGlzLl9hcHBseVJhbmsoaXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkQ29udHJvbFRvRm9ybUl0ZW1zKGl0ZW06IER5bmFtaWNGb3JtSXRlbSwgcGF0aD86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zLnNldChpdGVtLm5hbWUsIHRyYW5zZm9ybUZvcm1JdGVtKGl0ZW0sIHRoaXMuX21hcHBlZEZvcm1pdGVtcy5zaXplKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gZ2V0UGFyZW50SXRlbShwYXRoLCB0aGlzLl9tYXBwZWRGb3JtaXRlbXMpO1xuXG4gICAgICAgIGlmICghcGFyZW50SXRlbSB8fCBpc0Zvcm1GaWVsZEl0ZW0ocGFyZW50SXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudEl0ZW0uaXRlbXMgPSBwYXJlbnRJdGVtLml0ZW1zIHx8IG5ldyBNYXAoKTtcbiAgICAgICAgcGFyZW50SXRlbS5pdGVtcy5zZXQoaXRlbS5uYW1lLCB0cmFuc2Zvcm1Gb3JtSXRlbShpdGVtLCBwYXJlbnRJdGVtLml0ZW1zLnNpemUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUNvbnRyb2xGcm9tSXRlbXMobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXBwZWRGb3JtaXRlbXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGdldFBhcmVudEl0ZW0ocGF0aCwgdGhpcy5fbWFwcGVkRm9ybWl0ZW1zKTtcblxuICAgICAgICBpZiAoIXBhcmVudEl0ZW0gfHwgaXNGb3JtRmllbGRJdGVtKHBhcmVudEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRJdGVtLml0ZW1zPy5kZWxldGUobmFtZSk7XG4gICAgfVxufVxuIiwiPGZkLWJ1c3ktaW5kaWNhdG9yICpuZ0lmPVwiX2ZpcnN0TG9hZGluZ0RvbmU7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCIgW2xvYWRpbmddPVwiZm9ybUxvYWRpbmdcIiBbYmxvY2tdPVwidHJ1ZVwiPlxuICAgIDxmZHAtZm9ybS1ncm91cFxuICAgICAgICAqbmdJZj1cImZvcm1cIlxuICAgICAgICBbaGludF09XCJoaW50XCJcbiAgICAgICAgW21haW5UaXRsZV09XCJtYWluVGl0bGVcIlxuICAgICAgICBbaGlkZU1haW5USXRsZV09XCJoaWRlTWFpblRJdGxlXCJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgW2NvbHVtbkxheW91dF09XCJjb2x1bW5MYXlvdXRcIlxuICAgICAgICBbbGFiZWxDb2x1bW5MYXlvdXRdPVwibGFiZWxDb2x1bW5MYXlvdXRcIlxuICAgICAgICBbZmllbGRDb2x1bW5MYXlvdXRdPVwiZmllbGRDb2x1bW5MYXlvdXRcIlxuICAgICAgICBbZ2FwQ29sdW1uTGF5b3V0XT1cImdhcENvbHVtbkxheW91dFwiXG4gICAgICAgIFt1bmlmaWVkTGF5b3V0XT1cInVuaWZpZWRMYXlvdXRcIlxuICAgICAgICBbaW5saW5lQ29sdW1uTGF5b3V0XT1cImlubGluZUNvbHVtbkxheW91dFwiXG4gICAgICAgIFt1c2VGb3JtXT1cInRydWVcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgX2Vycm9yTW9kZWxzOyB0cmFja0J5OiBfZXJyb3JzVHJhY2tCeVwiPlxuICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yPVwiZXJyb3IudHlwZTsgbGV0IGRpcmVjdGl2ZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9pc0FkdmFuY2VkRXJyb3IoZGlyZWN0aXZlRXJyb3IpOyBlbHNlIHNpbXBsZUVycm9yVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpcmVjdGl2ZUVycm9yLmhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpmZHBGb3JtRmllbGRFcnJvckhlYWRpbmc9XCJsZXQgdmFsaWRhdGlvbkVycm9yOyB0eXBlOiBkaXJlY3RpdmVFcnJvci50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsaWRhdGlvbkVycm9yLmhlYWRpbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXJlY3RpdmVFcnJvci5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb249XCJsZXQgdmFsaWRhdGlvbkVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsaWRhdGlvbkVycm9yLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlRXJyb3JUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKmZkcEZvcm1GaWVsZEVycm9ySGVhZGluZz1cImxldCB2YWxpZGF0aW9uRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVycm9yLnZhbHVlID8gZXJyb3IudmFsdWUgOiB2YWxpZGF0aW9uRXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtQ29udHJvbEl0ZW1zOyB0cmFja0J5OiBfdHJhY2tGblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdmaWVsZCcgPyBmaWVsZFJlbmRlcmVyIDogZ3JvdXBSZW5kZXJlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmaWVsZDogZmllbGQsIGZvcm1GaWVsZE5hbWU6IGZpZWxkLmZvcm1JdGVtLm5hbWUsIHJhbms6IGZpZWxkLmZvcm1JdGVtPy5yYW5rIHx8IDAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAjZmllbGRSZW5kZXJlclxuICAgICAgICAgICAgICAgIGxldC1maWVsZD1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICBsZXQtZm9ybUZpZWxkTmFtZT1cImZvcm1GaWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgIGxldC1mb3JtR3JvdXBOYW1lPVwiZm9ybUdyb3VwTmFtZVwiXG4gICAgICAgICAgICAgICAgbGV0LXJhbms9XCJyYW5rXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpmZHBEeW5hbWljRm9ybUNvbnRyb2xGaWVsZD1cImZpZWxkOyBzaG93OiBzaG91bGRTaG93RmllbGRzW2ZpZWxkLmZvcm1JdGVtLm5hbWVdICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGludE9wdGlvbnNdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucyB8IGdldEhpbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZFNob3ddPVwic2hvdWxkU2hvd0ZpZWxkc1tmaWVsZC5mb3JtSXRlbS5uYW1lXSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtRmllbGROYW1lXT1cImZvcm1GaWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVQYXRoXT1cImZvcm1Hcm91cE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JhbmtdPVwicmFua1wiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkcC1mb3JtLWdlbmVyYXRvci1maWVsZD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwUmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgPGZkcC1mb3JtLWZpZWxkLWdyb3VwXG4gICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zIHwgZ2V0SGludE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQuZm9ybUl0ZW0ubWVzc2FnZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5sYWJlbENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZENvbHVtbkxheW91dF09XCJmaWVsZC5mb3JtSXRlbS5ndWlPcHRpb25zPy5maWVsZENvbHVtbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgIFtnYXBDb2x1bW5MYXlvdXRdPVwiZmllbGQuZm9ybUl0ZW0uZ3VpT3B0aW9ucz8uZ2FwQ29sdW1uTGF5b3V0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1OYW1lXT1cImZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBGaWVsZCBvZiBmaWVsZCB8IGdldE9yZGVyZWRGaWVsZENvbnRyb2xzOyB0cmFja0J5OiBfZ3JvdXBUcmFja0ZuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZkcER5bmFtaWNGb3JtQ29udHJvbEZpZWxkPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IHNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50T3B0aW9uc109XCJncm91cEZpZWxkLmZvcm1JdGVtLmd1aU9wdGlvbnMgfCBnZXRIaW50T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZ3JvdXBGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG91bGRTaG93XT1cInNob3VsZFNob3dGaWVsZHNbZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lIV0gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1GaWVsZE5hbWVdPVwiZ3JvdXBGaWVsZC5mb3JtSXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVQYXRoXT1cImZpZWxkLmZvcm1JdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmFua109XCJncm91cEZpZWxkLmZvcm1JdGVtLnJhbmsgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWZvcm0tZ2VuZXJhdG9yLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZmRwLWZvcm0tZmllbGQtZ3JvdXA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZkcC1mb3JtLWZpZWxkICpuZ0lmPVwiIW5vQWRkaXRpb25hbENvbnRlbnRcIiBbY29sdW1uXT1cIjFcIiBbcmFua109XCJmb3JtQ29udHJvbEl0ZW1zLmxlbmd0aCArIDFcIj5cbiAgICAgICAgICAgIDwhLS0gRm9yIHVzZXItZGVmaW5lZCBlbGVtZW50cywgbGlrZSBzdWJtaXQgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2ZkcC1mb3JtLWZpZWxkPlxuICAgIDwvZmRwLWZvcm0tZ3JvdXA+XG48L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwcHhcIiBbc3R5bGUucGFkZGluZy5yZW1dPVwiMVwiPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuXG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIjM1JVwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuXG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI2MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI4MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgIDwvZmQtc2tlbGV0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { FormModule as FdFormModule } from '@fundamental-ngx/core/form';
|
|
5
|
-
import { IconModule } from '@fundamental-ngx/core/icon';
|
|
6
|
-
import { InlineHelpModule } from '@fundamental-ngx/core/inline-help';
|
|
7
|
-
import { PopoverModule } from '@fundamental-ngx/core/popover';
|
|
8
2
|
import { FormGroupComponent } from './form-group.component';
|
|
9
3
|
import { FormFieldComponent } from './form-field/form-field.component';
|
|
10
4
|
import { InputMessageGroupWithTemplate } from '../input-message-group-with-template/input-message-group-with-template.component';
|
|
11
5
|
import { FormFieldGroupComponent } from './form-field-group/form-field-group.component';
|
|
12
6
|
import { FormFieldControlExtrasComponent } from './form-field-extras/form-field-extras.component';
|
|
13
7
|
import { FormGroupHeaderComponent } from './form-group-header/form-group-header.component';
|
|
14
|
-
import { LinkModule } from '@fundamental-ngx/core/link';
|
|
15
8
|
import { FieldGroupRowValuePipe } from './pipes/field-group-row-value.pipe';
|
|
16
|
-
import { ContentDensityModule } from '@fundamental-ngx/core/content-density';
|
|
17
9
|
import { FormFieldErrorDirective } from './form-field-error/form-field-error.directive';
|
|
18
10
|
import { FormFieldErrorHeadingDirective } from './form-field-error/form-field-error-heading.directive';
|
|
19
11
|
import { FormFieldErrorDescriptionDirective } from './form-field-error/form-field-error-description.directive';
|
|
@@ -32,7 +24,7 @@ const EXPORTABLE_DECLARATIONS = [
|
|
|
32
24
|
];
|
|
33
25
|
export class FdpFormGroupModule {
|
|
34
26
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
35
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule,
|
|
27
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
|
|
36
28
|
FormFieldComponent,
|
|
37
29
|
InputMessageGroupWithTemplate,
|
|
38
30
|
FormFieldGroupComponent,
|
|
@@ -41,15 +33,7 @@ export class FdpFormGroupModule {
|
|
|
41
33
|
FieldGroupRowValuePipe,
|
|
42
34
|
FormFieldErrorDirective,
|
|
43
35
|
FormFieldErrorHeadingDirective,
|
|
44
|
-
FormFieldErrorDescriptionDirective],
|
|
45
|
-
FormsModule,
|
|
46
|
-
ReactiveFormsModule,
|
|
47
|
-
FdFormModule,
|
|
48
|
-
InlineHelpModule,
|
|
49
|
-
PopoverModule,
|
|
50
|
-
IconModule,
|
|
51
|
-
LinkModule,
|
|
52
|
-
ContentDensityModule], exports: [FormGroupComponent,
|
|
36
|
+
FormFieldErrorDescriptionDirective], exports: [FormGroupComponent,
|
|
53
37
|
FormFieldComponent,
|
|
54
38
|
InputMessageGroupWithTemplate,
|
|
55
39
|
FormFieldGroupComponent,
|
|
@@ -58,33 +42,17 @@ export class FdpFormGroupModule {
|
|
|
58
42
|
FieldGroupRowValuePipe,
|
|
59
43
|
FormFieldErrorDirective,
|
|
60
44
|
FormFieldErrorHeadingDirective,
|
|
61
|
-
FormFieldErrorDescriptionDirective
|
|
62
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule, imports: [
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
InlineHelpModule,
|
|
67
|
-
PopoverModule,
|
|
68
|
-
IconModule,
|
|
69
|
-
LinkModule,
|
|
70
|
-
ContentDensityModule, ContentDensityModule] }); }
|
|
45
|
+
FormFieldErrorDescriptionDirective] }); }
|
|
46
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
|
|
47
|
+
FormFieldComponent,
|
|
48
|
+
InputMessageGroupWithTemplate,
|
|
49
|
+
FormGroupHeaderComponent] }); }
|
|
71
50
|
}
|
|
72
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: FdpFormGroupModule, decorators: [{
|
|
73
52
|
type: NgModule,
|
|
74
53
|
args: [{
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
CommonModule,
|
|
78
|
-
FormsModule,
|
|
79
|
-
ReactiveFormsModule,
|
|
80
|
-
FdFormModule,
|
|
81
|
-
InlineHelpModule,
|
|
82
|
-
PopoverModule,
|
|
83
|
-
IconModule,
|
|
84
|
-
LinkModule,
|
|
85
|
-
ContentDensityModule
|
|
86
|
-
],
|
|
87
|
-
exports: [...EXPORTABLE_DECLARATIONS, ContentDensityModule]
|
|
54
|
+
imports: [...EXPORTABLE_DECLARATIONS],
|
|
55
|
+
exports: [...EXPORTABLE_DECLARATIONS]
|
|
88
56
|
}]
|
|
89
57
|
}] });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmRwLWZvcm0ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1ncm91cC9mZHAtZm9ybS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUNqSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7QUFFL0csTUFBTSx1QkFBdUIsR0FBRztJQUM1QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLDZCQUE2QjtJQUM3Qix1QkFBdUI7SUFDdkIsK0JBQStCO0lBQy9CLHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLDhCQUE4QjtJQUM5QixrQ0FBa0M7Q0FDckMsQ0FBQztBQU1GLE1BQU0sT0FBTyxrQkFBa0I7OEdBQWxCLGtCQUFrQjsrR0FBbEIsa0JBQWtCLFlBaEIzQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3Qix1QkFBdUI7WUFDdkIsK0JBQStCO1lBQy9CLHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCLDhCQUE4QjtZQUM5QixrQ0FBa0MsYUFUbEMsa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQiw2QkFBNkI7WUFDN0IsdUJBQXVCO1lBQ3ZCLCtCQUErQjtZQUMvQix3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2Qiw4QkFBOEI7WUFDOUIsa0NBQWtDOytHQU96QixrQkFBa0IsWUFoQjNCLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsNkJBQTZCO1lBRzdCLHdCQUF3Qjs7MkZBV2Ysa0JBQWtCO2tCQUo5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7aUJBQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlIH0gZnJvbSAnLi4vaW5wdXQtbWVzc2FnZS1ncm91cC13aXRoLXRlbXBsYXRlL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0tZmllbGQtZ3JvdXAvZm9ybS1maWVsZC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1maWVsZC1leHRyYXMvZm9ybS1maWVsZC1leHRyYXMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1Hcm91cEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1ncm91cC1oZWFkZXIvZm9ybS1ncm91cC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpZWxkR3JvdXBSb3dWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpZWxkLWdyb3VwLXJvdy12YWx1ZS5waXBlJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9ySGVhZGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC1lcnJvci9mb3JtLWZpZWxkLWVycm9yLWhlYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtZXJyb3IvZm9ybS1maWVsZC1lcnJvci1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuXG5jb25zdCBFWFBPUlRBQkxFX0RFQ0xBUkFUSU9OUyA9IFtcbiAgICBGb3JtR3JvdXBDb21wb25lbnQsXG4gICAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgIElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlLFxuICAgIEZvcm1GaWVsZEdyb3VwQ29tcG9uZW50LFxuICAgIEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQsXG4gICAgRm9ybUdyb3VwSGVhZGVyQ29tcG9uZW50LFxuICAgIEZpZWxkR3JvdXBSb3dWYWx1ZVBpcGUsXG4gICAgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUsXG4gICAgRm9ybUZpZWxkRXJyb3JIZWFkaW5nRGlyZWN0aXZlLFxuICAgIEZvcm1GaWVsZEVycm9yRGVzY3JpcHRpb25EaXJlY3RpdmVcbl07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogWy4uLkVYUE9SVEFCTEVfREVDTEFSQVRJT05TXSxcbiAgICBleHBvcnRzOiBbLi4uRVhQT1JUQUJMRV9ERUNMQVJBVElPTlNdXG59KVxuZXhwb3J0IGNsYXNzIEZkcEZvcm1Hcm91cE1vZHVsZSB7fVxuIl19
|