@fundamental-ngx/platform 0.47.0-rc.8 → 0.47.0
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/action-button-group/action-button-group.component.d.ts +6 -0
- package/button/button.component.d.ts +4 -0
- package/esm2022/action-button-group/action-button-group.component.mjs +11 -2
- package/esm2022/button/button.component.mjs +6 -1
- package/esm2022/feed-input/feed-input.component.mjs +10 -2
- package/esm2022/form/combobox/combobox/combobox.component.mjs +2 -2
- package/esm2022/form/datetime-picker/datetime-picker.component.mjs +3 -3
- package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +5 -6
- package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +5 -6
- package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +6 -7
- package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +5 -6
- package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +6 -6
- package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +5 -6
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +14 -15
- package/esm2022/form/form-group/form-field/form-field.component.mjs +6 -8
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +6 -8
- package/esm2022/form/form-group/form-group.component.mjs +17 -19
- package/esm2022/form/input/input.component.mjs +2 -2
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +11 -13
- package/esm2022/form/multi-input/index.mjs +8 -0
- package/esm2022/form/multi-input/multi-input.component.mjs +5 -5
- package/esm2022/form/radio-group/radio/radio.component.mjs +10 -12
- package/esm2022/form/select/select/select.component.mjs +7 -8
- package/esm2022/form/step-input/number/number-step-input.component.mjs +7 -8
- package/esm2022/form/switch/switch/index.mjs +2 -0
- package/esm2022/form/switch/switch/switch.component.mjs +7 -8
- package/esm2022/form/text-area/text-area.component.mjs +2 -2
- package/esm2022/form/time-picker/time-picker.component.mjs +9 -10
- package/esm2022/info-label/info-label.component.mjs +8 -2
- package/esm2022/link/link.component.mjs +7 -1
- package/esm2022/list/object-list-item/object-list-item-row.component.mjs +7 -7
- package/esm2022/menu/menu-item.component.mjs +4 -1
- package/esm2022/menu/menu.component.mjs +7 -2
- package/esm2022/menu-button/menu-button.component.mjs +7 -1
- package/esm2022/message-popover/message-popover.component.mjs +8 -10
- package/esm2022/object-attribute/index.mjs +4 -3
- package/esm2022/object-marker/object-marker.component.mjs +11 -2
- package/esm2022/object-status/object-status.component.mjs +9 -3
- package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +6 -7
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +5 -7
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +8 -9
- package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +10 -12
- package/esm2022/settings-generator/settings-generator.module.mjs +6 -10
- package/esm2022/shared/form/base.input.mjs +12 -10
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +2 -2
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +3 -3
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -4
- package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +2 -2
- package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
- package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +27 -0
- package/esm2022/table-helpers/pipes/index.mjs +2 -1
- package/esm2022/upload-collection/dialogs/new-folder/new-folder.component.mjs +2 -2
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +2 -2
- package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +2 -2
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +2 -2
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +14 -16
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +8 -10
- package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +9 -10
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +4 -5
- package/feed-input/feed-input.component.d.ts +5 -0
- package/fesm2022/fundamental-ngx-platform-action-button-group.mjs +10 -1
- package/fesm2022/fundamental-ngx-platform-action-button-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-button.mjs +5 -0
- package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +9 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +460 -467
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-info-label.mjs +7 -1
- package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +6 -0
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs +6 -0
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +9 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +9 -11
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-attribute.mjs +1 -60
- package/fesm2022/fundamental-ngx-platform-object-attribute.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs +10 -1
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-status.mjs +8 -2
- package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +118 -124
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +7 -5
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +26 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +12 -9
- 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 +2 -2
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +175 -179
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/form-generator/form-generator/form-generator.component.d.ts +4 -4
- package/form/form-group/form-group-header/form-group-header.component.d.ts +1 -1
- package/form/form-group/form-group.component.d.ts +3 -3
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +2 -2
- package/form/multi-input/index.d.ts +7 -0
- package/form/radio-group/radio/radio.component.d.ts +2 -2
- package/form/switch/switch/index.d.ts +1 -0
- package/form/time-picker/time-picker.component.d.ts +2 -2
- package/fundamental-ngx-platform-v0.47.0.tgz +0 -0
- package/info-label/info-label.component.d.ts +5 -0
- package/link/link.component.d.ts +4 -0
- package/menu/menu-item.component.d.ts +3 -0
- package/menu/menu.component.d.ts +4 -0
- package/menu-button/menu-button.component.d.ts +4 -0
- package/object-attribute/index.d.ts +3 -2
- package/object-marker/object-marker.component.d.ts +6 -0
- package/object-status/object-status.component.d.ts +6 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/settings-generator/settings-generator.module.d.ts +8 -9
- package/shared/form/base.input.d.ts +5 -5
- package/table/components/table-header-row/table-header-row.component.d.ts +3 -1
- package/table-helpers/pipes/column-sorting-direction.pipe.d.ts +12 -0
- package/table-helpers/pipes/index.d.ts +1 -0
- 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/esm2022/object-attribute/object-attribute.component.mjs +0 -45
- package/esm2022/object-attribute/object-attribute.module.mjs +0 -16
- package/fundamental-ngx-platform-v0.47.0-rc.8.tgz +0 -0
- package/object-attribute/README.md +0 -25
- package/object-attribute/object-attribute.component.d.ts +0 -26
- package/object-attribute/object-attribute.module.d.ts +0 -7
|
@@ -7,8 +7,8 @@ import { BehaviorSubject, Subject, Subscription, combineLatest, filter, tap } fr
|
|
|
7
7
|
import { map, startWith, switchMap, takeUntil } from 'rxjs/operators';
|
|
8
8
|
import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
9
9
|
import { FormItemComponent, FormLabelComponent, FormMessageComponent } from '@fundamental-ngx/core/form';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { IconComponent } from '@fundamental-ngx/core/icon';
|
|
11
|
+
import { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';
|
|
12
12
|
import { LinkComponent } from '@fundamental-ngx/core/link';
|
|
13
13
|
import { FormFieldGroup, FormGroupContainer, RESPONSIVE_BREAKPOINTS_CONFIG, ResponsiveBreakPointConfig, ResponsiveBreakpointsService } from '@fundamental-ngx/platform/shared';
|
|
14
14
|
import { getFormState } from '../../helpers';
|
|
@@ -23,8 +23,6 @@ import { FormFieldLayoutService } from '../services/form-field-layout.service';
|
|
|
23
23
|
import * as i0 from "@angular/core";
|
|
24
24
|
import * as i1 from "@fundamental-ngx/platform/shared";
|
|
25
25
|
import * as i2 from "../services/form-field-layout.service";
|
|
26
|
-
import * as i3 from "@fundamental-ngx/core/icon";
|
|
27
|
-
import * as i4 from "@fundamental-ngx/core/inline-help";
|
|
28
26
|
let defaultId = 0;
|
|
29
27
|
const formFieldProvider = {
|
|
30
28
|
provide: FD_FORM_FIELD,
|
|
@@ -593,7 +591,7 @@ export class FormFieldComponent {
|
|
|
593
591
|
});
|
|
594
592
|
}
|
|
595
593
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupContainer, optional: true }, { token: i1.FormFieldGroup, optional: true }, { token: RESPONSIVE_BREAKPOINTS_CONFIG, optional: true }, { token: i1.ResponsiveBreakpointsService }, { token: FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT }, { token: FDP_FORM_FIELD_HINT_LAYOUT_CONFIG }, { token: i2.FormFieldLayoutService, self: true }, { token: i2.FormFieldLayoutService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
596
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FormFieldComponent, isStandalone: true, selector: "fdp-form-field", inputs: { label: "label", id: "id", hint: "hint", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: "required", editable: "editable", columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }, { propertyName: "innerErrorRenderers", first: true, predicate: ["innerErrorRenderers"], descendants: true }, { propertyName: "_inputMessageGroupCmp", predicate: InputMessageGroupWithTemplate, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message *ngFor=\"let error of groupedErrors\" [type]=\"error.directive.type\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\" type=\"error\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <ng-container *ngFor=\"let error of groupedErrors\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group", inputs: ["triggers"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "
|
|
594
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FormFieldComponent, isStandalone: true, selector: "fdp-form-field", inputs: { label: "label", id: "id", hint: "hint", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: "required", editable: "editable", columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }, { propertyName: "innerErrorRenderers", first: true, predicate: ["innerErrorRenderers"], descendants: true }, { propertyName: "_inputMessageGroupCmp", predicate: InputMessageGroupWithTemplate, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message *ngFor=\"let error of groupedErrors\" [type]=\"error.directive.type\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\" type=\"error\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <ng-container *ngFor=\"let error of groupedErrors\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group", inputs: ["triggers"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
597
595
|
}
|
|
598
596
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
599
597
|
type: Component,
|
|
@@ -606,8 +604,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
606
604
|
FormMessageComponent,
|
|
607
605
|
FormLabelComponent,
|
|
608
606
|
LinkComponent,
|
|
609
|
-
|
|
610
|
-
|
|
607
|
+
IconComponent,
|
|
608
|
+
InlineHelpDirective,
|
|
611
609
|
AsyncPipe
|
|
612
610
|
], template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message *ngFor=\"let error of groupedErrors\" [type]=\"error.directive.type\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\" type=\"error\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <ng-container *ngFor=\"let error of groupedErrors\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"] }]
|
|
613
611
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupContainer, decorators: [{
|
|
@@ -699,4 +697,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
699
697
|
type: ViewChildren,
|
|
700
698
|
args: [InputMessageGroupWithTemplate]
|
|
701
699
|
}] } });
|
|
702
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUdILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULElBQUksRUFFSixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFnQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFPSCxjQUFjLEVBQ2Qsa0JBQWtCLEVBS2xCLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQy9CLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxRkFBcUYsQ0FBQztBQUNwSSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUNILGlDQUFpQyxFQUNqQyxtQ0FBbUMsRUFFdEMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7OztBQUUvRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEIsTUFBTSxpQkFBaUIsR0FBYTtJQUNoQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0NBQ3BELENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFhO0lBQ3JDLE9BQU8sRUFBRSw0QkFBNEI7SUFDckMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztDQUNwRCxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBc0JILE1BQU0sT0FBTyxrQkFBa0I7SUE4QzNCLCtEQUErRDtJQUMvRCxJQUNJLFlBQVksQ0FBQyxNQUFnQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLGlCQUFpQixDQUFDLEtBQStCO1FBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ0ksaUJBQWlCLENBQUMsS0FBK0I7UUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxlQUFlLENBQUMsS0FBK0I7UUFDL0MsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQVNELDhDQUE4QztJQUM5QyxJQUNJLFFBQVEsQ0FBQyxLQUFtQjtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxRQUFRLENBQUMsS0FBbUI7UUFDNUIsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUN4QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxPQUFPLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFXLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQTJERCw2RUFBNkU7SUFDN0UsSUFBSSxlQUFlO1FBQ2YsT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUErRkQsK0RBQStEO0lBQy9ELElBQVksc0JBQXNCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekUsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQzdELE9BQU8sZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ3BELHdFQUF3RTtZQUN4RSxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxDQUNILENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQzlHLENBQUM7SUFDTixDQUFDO0lBV0QsY0FBYztJQUNkLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQy9FLENBQUM7SUFnQkQsY0FBYztJQUNkLFlBQ1ksR0FBc0IsRUFDbEIsa0JBQXNDLEVBQzdCLGNBQThCLEVBRzFDLGtDQUE4RCxFQUM5RCw2QkFBMkQsRUFDdkIsb0JBQXNDLEVBQ2hDLGlCQUFtQyxFQUM5RSwyQkFBbUQsRUFDbkMsNkJBQXFEO1FBVnJFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRVQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBRzFDLHVDQUFrQyxHQUFsQyxrQ0FBa0MsQ0FBNEI7UUFDOUQsa0NBQTZCLEdBQTdCLDZCQUE2QixDQUE4QjtRQUVqQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBblgxRjs7V0FFRztRQUVILE9BQUUsR0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFNdEM7O1dBRUc7UUFFSCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0Qjs7V0FFRztRQUVILGVBQVUsR0FBdUIsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFvSTVEOztXQUVHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix3REFBd0Q7UUFFeEQsVUFBSyxHQUFHLEtBQUssQ0FBQztRQVNkLHNEQUFzRDtRQUd0RCxhQUFRLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFNUQsOENBQThDO1FBRzlDLG1CQUFjLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFzRHBFOztXQUVHO1FBQ0gsZ0JBQVcsR0FBcUIsMkJBQTBELENBQUM7UUFFM0YsY0FBYztRQUNkLHFCQUFnQixHQUFnQixFQUFFLENBQUM7UUFFbkMsc0JBQXNCO1FBQ3RCLGtCQUFhLEdBQXFDLEVBQUUsQ0FBQztRQUVyRCxxREFBcUQ7UUFDckQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUXBDLGNBQWM7UUFDSixhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRS9CLGNBQWM7UUFDSixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSzNCLGNBQWM7UUFDSixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGNBQWM7UUFDSixnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFNUMsY0FBYztRQUNOLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQVd2QyxjQUFjO1FBQ04sbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFtQjNCLGNBQWM7UUFDTiw4QkFBeUIsR0FBZ0IsRUFBRSxDQUFDO1FBNEVoRCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDdkIsR0FBRywyQkFBMkI7WUFDOUIsR0FBRyxvQkFBb0I7U0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyw2QkFBNkIsSUFBSSwyQkFBMkIsQ0FBQztRQUM1RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRSwyRUFBMkU7UUFDM0Usc0NBQXNDO1FBQ3RDLGlEQUFpRDtRQUNqRCwyQ0FBMkM7UUFDM0Msa0VBQWtFO1FBQ2xFLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGtDQUFrQyxJQUFJLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUMxRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLHlCQUF5QixDQUNuRixJQUFJLENBQUMsMkJBQTJCLENBQ25DLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0I7UUFDbEIseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsY0FBYztJQUNkLHlDQUF5QyxDQUFDLFNBQW9CO1FBQzFELElBQUksSUFBSSxDQUFDLGlDQUFpQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsaUNBQWlDLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQVcsRUFBUSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0I7YUFDckYsSUFBSSxDQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFDcEUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzlCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osa0ZBQWtGO1FBQ2xGLElBQUksQ0FBQyxXQUFXO1lBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBaUI7Z0JBQ2pFLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRTtZQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixJQUFJLENBQUMsbUJBQW1CO2lCQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDakMsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDaEYsQ0FBQyxDQUFDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN6QixHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUNyRyxDQUNKLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQzNDLElBQUksRUFDSixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDN0YsQ0FBQztTQUNMO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzFDLElBQUksQ0FBQyxtQkFBbUI7aUJBQ25CLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDOUUsQ0FBQyxDQUFDLE9BQU87d0JBQ1QsQ0FBQyxDQUFDLE9BQU8sQ0FBQztpQkFDakI7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDN0M7WUFDTCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM5QjtpQkFDQSxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2Qsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztJQUNkLGVBQWU7UUFDWCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsY0FBYztJQUNkLFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxnQkFBa0M7UUFDdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsZ0JBQTRDLENBQUM7UUFFNUQsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDNUYsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsNkVBQTZFO1lBQzdFLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILGdDQUFnQztRQUNoQyxJQUFJLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7WUFDM0MsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtZQUN0QyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBRW5ELE1BQU0sb0JBQW9CLEdBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdkcsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3QztZQUVELElBQUksb0JBQW9CLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1lBRUQseURBQXlEO1lBQ3pELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckI7WUFFRDs7Ozs7Ozs7ZUFRRztZQUNILE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUN4QixPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILDBCQUEwQixDQUFDLGdCQUFrQztRQUN6RCxJQUFJLGdCQUFnQixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNQLHNGQUFzRjtRQUN0RixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMxQixPQUFPO2lCQUNWO2dCQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO29CQUNwQixTQUFTO29CQUNULEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztpQkFDakMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDakQ7UUFFRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLFVBQWdDO1FBQy9DLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUUxRCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0RCxJQUFJLENBQUMscUNBQXFDLEdBQUcsVUFBVSxDQUFDLE9BQU87YUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFdBQXdCO1FBQ2pDLE9BQU8sT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU87YUFDN0IsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUMzQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM5QjthQUNBLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNmLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxPQUFRLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO0lBQ04scUJBQXFCO1FBQ3pCLElBQ0ksSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ25DO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1NBQ3hGO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixjQUFjO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pELE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHNCQUFzQixDQUFDLE9BQXdCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFO1lBQzdELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMkJBQTJCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUV0QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDL0M7U0FDSjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sVUFBVTtRQUNkLElBQUk7WUFDQSxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO1lBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsd0JBQWdDO1FBQ2xELElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzdCLFFBQVEsd0JBQXdCLEVBQUU7Z0JBQzlCLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ2xDLE1BQU07Z0JBQ1YsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQkFDbkMsTUFBTTtnQkFDVixLQUFLLEdBQUc7b0JBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNuQyxNQUFNO2dCQUNWLEtBQUssSUFBSTtvQkFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1Y7b0JBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQzFDO1NBQ0o7UUFFRCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWM7SUFDTixrQkFBa0I7UUFDdEIsK0RBQStEO1FBQy9ELElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxZQUFZLFdBQVcsRUFBRTtZQUNuRSxJQUFJLENBQUMsV0FBVyxHQUFHO2dCQUNmLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtnQkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ3JCLENBQUM7U0FDTDthQUFNLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHO2dCQUNmLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtnQkFDM0IsR0FBRyxJQUFJLENBQUMsSUFBSTthQUNmLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUN4QixTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTMwQlEsa0JBQWtCLG1KQXNYZiw2QkFBNkIseUVBRzdCLG1DQUFtQyxhQUNuQyxpQ0FBaUM7a0dBMVhwQyxrQkFBa0Isd21CQWhCaEIsQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyx1RUFrTmhFLCtCQUErQiwyQkFBVSxVQUFVLHVEQWVoRCx1QkFBdUIsNFFBUjdCLDZCQUE2QiwyQkFBVSxVQUFVLHFLQVk5Qyw2QkFBNkIscUVDcFUvQyw0ekxBd0lBLCtQRHRDUSxpQkFBaUIsK0ZBQ2pCLElBQUksNkZBQ0osZ0JBQWdCLG9KQUNoQiw2QkFBNkIsMEZBQzdCLEtBQUssbUhBQ0wsb0JBQW9CLDZHQUNwQixrQkFBa0IscVBBQ2xCLGFBQWEsaUpBQ2IsVUFBVSx3TEFDVixnQkFBZ0IsMlJBQ2hCLFNBQVM7OzJGQUdKLGtCQUFrQjtrQkFyQjlCLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxjQUNsRSxJQUFJLFdBQ1A7d0JBQ0wsaUJBQWlCO3dCQUNqQixJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsNkJBQTZCO3dCQUM3QixLQUFLO3dCQUNMLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixTQUFTO3FCQUNaOzswQkFxWEksUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyw2QkFBNkI7OzBCQUdwQyxNQUFNOzJCQUFDLG1DQUFtQzs7MEJBQzFDLE1BQU07MkJBQUMsaUNBQWlDOzswQkFDeEMsSUFBSTs7MEJBQ0osUUFBUTs7MEJBQUksUUFBUTs0Q0F2WHpCLEtBQUs7c0JBREosS0FBSztnQkFPTixFQUFFO3NCQURELEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQU9OLGFBQWE7c0JBRFosS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBUU4sSUFBSTtzQkFESCxLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS0YsWUFBWTtzQkFEZixLQUFLO2dCQWtCRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBa0JGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFtQkYsZUFBZTtzQkFEbEIsS0FBSztnQkFvQk4sVUFBVTtzQkFEVCxLQUFLO2dCQUtGLFFBQVE7c0JBRFgsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBaUJGLE9BQU87c0JBRFYsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQVFOLGtCQUFrQjtzQkFEakIsS0FBSzs7UUFLTiwrREFBK0Q7UUFDL0QsUUFBUTtzQkFGUCxNQUFNOztRQU1QLCtEQUErRDtRQUMvRCxjQUFjO3NCQUZiLE1BQU07Z0JBU1AsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS3ZDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTVDLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFJckIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLOUQsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkFLeEIsb0JBQW9CO3NCQUQzQixlQUFlO3VCQUFDLHVCQUF1QjtnQkFLdkIscUJBQXFCO3NCQURyQyxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFByb3ZpZGVyLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZvcm1GaWVsZENvbnRyb2wsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbXBvbmVudCwgRm9ybUxhYmVsQ29tcG9uZW50LCBGb3JtTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbmxpbmVIZWxwTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lubGluZS1oZWxwJztcbmltcG9ydCB7IExpbmtDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGluayc7XG5pbXBvcnQge1xuICAgIENvbHVtbixcbiAgICBDb2x1bW5MYXlvdXQsXG4gICAgRmllbGRIaW50SW5wdXQsXG4gICAgRmllbGRIaW50T3B0aW9ucyxcbiAgICBGb3JtRXJyb3IsXG4gICAgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0LFxuICAgIEZvcm1GaWVsZEdyb3VwLFxuICAgIEZvcm1Hcm91cENvbnRhaW5lcixcbiAgICBIaW50Q29udGVudCxcbiAgICBMYWJlbExheW91dCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgUkVTUE9OU0lWRV9CUkVBS1BPSU5UU19DT05GSUcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBnZXRGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW5wdXQtbWVzc2FnZS1ncm91cC13aXRoLXRlbXBsYXRlL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdEZvcm1GaWVsZEhpbnRPcHRpb25zIH0gZnJvbSAnLi4vY29uZmlnL2RlZmF1bHQtZm9ybS1maWVsZC1oaW50LW9wdGlvbnMnO1xuaW1wb3J0IHsgRk9STV9HUk9VUF9DSElMRF9GSUVMRF9UT0tFTiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEZEUF9GT1JNX0ZJRUxEX0hJTlRfTEFZT1VUX0NPTkZJRyxcbiAgICBGRFBfRk9STV9GSUVMRF9ISU5UX09QVElPTlNfREVGQVVMVCxcbiAgICBIaW50TGF5b3V0Q29uZmlnXG59IGZyb20gJy4uL2ZkcC1mb3JtLnRva2Vucyc7XG5pbXBvcnQgeyBGb3JtRmllbGRFcnJvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tZmllbGQtZXJyb3IvZm9ybS1maWVsZC1lcnJvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQtZXh0cmFzL2Zvcm0tZmllbGQtZXh0cmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZW5lcmF0ZUNvbHVtbkNsYXNzLCBub3JtYWxpemVDb2x1bW5MYXlvdXQgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEZvcm1GaWVsZExheW91dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWZpZWxkLWxheW91dC5zZXJ2aWNlJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG5cbmNvbnN0IGZvcm1GaWVsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGRF9GT1JNX0ZJRUxELFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbmNvbnN0IGZvcm1Hcm91cENoaWxkUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4sXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUZpZWxkQ29tcG9uZW50KVxufTtcblxuLyoqXG4gKiBGb3JtIEZpZWxkIHJlcHJlc2VudCBhY3R1YWwgcm93IGFuZCBhZ2dyZWdhdGVzIGNvbW1vbiBiZWhhdmlvciBmb3IgdGhlIGlucHV0IGZpZWxkIHN1Y2ggYXNcbiAqIGVycm9yLCBsYWJlbCBvciBoaW50LlxuICogSGludCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBsaXN0ZW5pbmcgZm9yIEZpZWxkQ29udHJvbCBjaGFuZ2VzIGFuZCB0cmlnZ2VyIG5lY2Vzc2FyeVxuICogY2hhbmdlIGRldGVjdGlvblxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdmb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbZm9ybUZpZWxkUHJvdmlkZXIsIGZvcm1Hcm91cENoaWxkUHJvdmlkZXIsIEZvcm1GaWVsZExheW91dFNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGb3JtSXRlbUNvbXBvbmVudCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgRm9ybUxhYmVsQ29tcG9uZW50LFxuICAgICAgICBMaW5rQ29tcG9uZW50LFxuICAgICAgICBJY29uTW9kdWxlLFxuICAgICAgICBJbmxpbmVIZWxwTW9kdWxlLFxuICAgICAgICBBc3luY1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgUGxhdGZvcm1Gb3JtRmllbGQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogRm9ybSBmaWVsZCBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN1ZmZpeCBmb3IgaWRzIG9mIGNvbnRyb2wgZWxlbWVudHMgaW5zaWRlIHRoaXMgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICgrK2RlZmF1bHRJZCkudG9TdHJpbmcoKTtcblxuICAgIC8qKiBIaW50IHRvIGJlIHBsYWNlZCBuZXh0IHRvIGxhYmVsICovXG4gICAgQElucHV0KClcbiAgICBoaW50OiBOdWxsYWJsZTxGaWVsZEhpbnRJbnB1dD47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBmb3JtIGZpZWxkIGxhYmVsIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0xhYmVsTGF5b3V0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiB2YWxpZGF0b3JzIGFwcGxpZWQgdG8gdGhlIGZvcm0gZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yXTtcblxuICAgIC8qKlxuICAgICAqIFJhbmsgaXMgdXNlZCBmb3Igb3JkZXJpbmcuXG4gICAgICogRmlyc3QgbG93ZXIgbnVtYmVyLCB0aGVuIC0gaGlnaGVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5rOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGZpZWxkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0gQ29udGFpbmVyIGNvbHVtbiBpdCBiZWxvbmdzIHRvICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW46IG51bWJlcjtcblxuICAgIC8qKiBvYmplY3QgZm9yIHBsYWNpbmcgZmllbGQgaW4gY29sdW1uIGluIGVhY2ggc2NyZWVuIGxheW91dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbkxheW91dChsYXlvdXQ6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIWxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbHVtbkxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgbGFiZWwncyBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQ29sdW1uTGF5b3V0KHZhbHVlOiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaWVsZENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGdhcCBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdhcENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dENsYXNzID0gZ2VuZXJhdGVDb2x1bW5DbGFzcyh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICB9XG5cbiAgICBnZXQgZ2FwQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYXBDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRpb25zIHRlbXBsYXRlIHJlZmVyZW5jZS5cbiAgICAgKiBUaGlzIGlzIGluIG1vc3Qgb2YgdGhlIGNhc2VzIHNldCBmcm9tIHBhcmVudCBjb250YWluZXIgKGZvcm0tZ3JvdXApXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpMThTdHJpbmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFNldCB3aGVuIGZvcm0gZmllbGQgaXMgYSBtYW5kYXRvcnkgb25lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJlcXVpcmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBmaWVsZCBpcyBlZGl0YWJsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVkaXRhYmxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRhYmxlICE9PSBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRhYmxlID0gbmV3VmFsO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm0gZmllbGQgY3VzdG9tIHdpZHRoIGluIGNvbHVtbnMgbXVzdCBiZSBiZXR3ZWVuIDEgLSAxMlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbnModmFsdWU6IENvbHVtbikge1xuICAgICAgICB0aGlzLl9jb2x1bW5zID0gPENvbHVtbj5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbnMoKTogQ29sdW1uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWFya3MgZmllbGQgYXMgZGlzYWJsZWQuIHVzZWQgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBsYWJlbCB0ZXh0IHNob3VsZCBiZSBhcHBlbmRlZCB3aXRoIGNvbG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZvcm0gR3JvdXAgQ29udGFpbmVyIHRvIGJpbmQgdGhlIEZvcm0tRmllbGQgdG8uXG4gICAgICogVGhpcyB3aWxsIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgaW5qZWN0ZWQgYnkgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1Hcm91cENvbnRhaW5lcjogRm9ybUdyb3VwQ29udGFpbmVyO1xuXG4gICAgLyoqIEVtaXRzIHdoZW5ldmVyIGZvcm1GaWVsZENvbnRyb2wncyBzdGF0ZSBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgY29sdW1uIGxheW91dCBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Db2x1bW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtIGZpZWxkIHRlbXBsYXRlIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICByZW5kZXJlcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChGb3JtRmllbGRDb250cm9sRXh0cmFzQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBmb3JtRmllbGRFeHRyYXM/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGFiZWxDb2wnKSBsYWJlbENvbD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbnB1dE1lc3NhZ2VHcm91cDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lubmVyRXJyb3JSZW5kZXJlcnMnKVxuICAgIGlubmVyRXJyb3JSZW5kZXJlcnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBfZXJyb3JEaXJlY3RpdmVRdWVyeTogUXVlcnlMaXN0PEZvcm1FcnJvcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRNZXNzYWdlR3JvdXBDbXA6IFF1ZXJ5TGlzdDxJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZT47XG5cbiAgICAvKiogQ29tYmluZWQgRXJyb3IgZGlyZWN0aXZlcyBmcm9tIGZpZWxkIGl0c2VsZiBhbmQgcGFyZW50IGZvcm0gY29udGFpbmVyLiAqL1xuICAgIGdldCBlcnJvckRpcmVjdGl2ZXMoKTogRm9ybUVycm9yW10ge1xuICAgICAgICByZXR1cm4gdW5pcUJ5KFsuLi50aGlzLl9lcnJvckRpcmVjdGl2ZXMsIC4uLnRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc10sICdlcnJvcicpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNIb3Jpem9udGFsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIENoaWxkIEZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICBjb250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbGFiZWxDb2x1bW5MYXlvdXRDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZmllbGRDb2x1bW5MYXlvdXRDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2FwQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGhpbnQgYW5kIGhpbnQgcGxhY2VtZW50IGNvZXJjZWQgdG8gdGhlIEZpZWxkSGludE9wdGlvbnNcbiAgICAgKi9cbiAgICBoaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucyA9IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyBhcyB1bmtub3duIGFzIEZpZWxkSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lcnJvckRpcmVjdGl2ZXM6IEZvcm1FcnJvcltdID0gW107XG5cbiAgICAvKiogR3JvdXBlZCBlcnJvcnMuICovXG4gICAgZ3JvdXBlZEVycm9yczogRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0W10gPSBbXTtcblxuICAgIC8qKiBFdmVudCBlbWl0ZWQgd2hlbiBlcnJvcnMgb2JqZWN0IGJlaW5nIGNoYW5nZWQuICovXG4gICAgZXJyb3JzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT3B0aW9uYWwgRm9ybUNvbnRyb2xcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2NvbHVtbnM6IENvbHVtbiA9IDY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZWRpdGFibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gY29sdW1uIG51bWJlciBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyAqL1xuICAgIHByaXZhdGUgX3hsQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xnQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21kQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NDb2x1bW5OdW1iZXIgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbExheW91dDogTGFiZWxMYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhYmVsQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpZWxkQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZXJyb3JEaXJlY3RpdmVzQ2RyOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiB3aGV0aGVyIGxhYmVsIGFuZCBjb250cm9sIGFyZSB2ZXJ0aWNhbGx5IGFsaWduZWQgKi9cbiAgICBwcml2YXRlIGdldCBfaXNIb3Jpem9udGFsQWxpZ25tZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRNZXNzYWdlR3JvdXAgfHwgIXRoaXMubGFiZWxDb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dE1lc3NhZ2VHcm91cFkgPSB0aGlzLmlucHV0TWVzc2FnZUdyb3VwLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xSZWN0ID0gdGhpcy5sYWJlbENvbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBsYWJlbENvbEJvdHRvbVkgPSBsYWJlbENvbFJlY3QueSArIGxhYmVsQ29sUmVjdC5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBsYWJlbENvbEJvdHRvbVkgPiBpbnB1dE1lc3NhZ2VHcm91cFk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFN1bSBvZiBleHRyYSBoZWlnaHRzIGluc2lkZSBmb3JtIGNvbnRyb2wgYW5kIGZvcm1GaWVsZEV4dHJhcy5cbiAgICAgKiBMYWJlbCB3aWxsIGJlIHNoaWZ0ZWQgYnkgdGhpcyBudW1iZXIgaW4gb3JkZXIgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIHRoZSBjb250cm9sXG4gICAgICovXG4gICAgZ2V0IF9jb250cm9sRXh0cmFzSGVpZ2h0UHgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLm5vTGFiZWxMYXlvdXQgfHwgIXRoaXMuX2lzSG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICAgICAgLy8gcHJvY2VlZCBvbmx5IGlmIDEuIHRoZXJlJ3MgYSBsYWJlbDsgMi4gY29udHJvbCBoYXMgdmVydGljYWwgYWxpZ25tZW50XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMuZm9ybUZpZWxkRXh0cmFzPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwKSArICh0aGlzLmNvbnRyb2w/LmV4dHJhQ29udGVudEhlaWdodFB4ID8/IDApIHx8IG51bGxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhYmVsQ29sdW1uTGF5b3V0JDogQmVoYXZpb3JTdWJqZWN0PENvbHVtbkxheW91dD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0JDogQmVoYXZpb3JTdWJqZWN0PENvbHVtbkxheW91dD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9ncm91cEhvc3QoKTogRm9ybUdyb3VwQ29udGFpbmVyIHwgRm9ybUZpZWxkR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRmllbGRHcm91cCA/IHRoaXMuZm9ybUZpZWxkR3JvdXAgOiB0aGlzLmZvcm1Hcm91cENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIGJlIHVwZGF0ZWQgZHVyaW5nIG9uQ2hhbmdlcyBhbmQgcmVzaXplLCByZXN1bHRpbmcgY29ycmVjdCBwbGFjZW1lbnQgb2YgdGhlXG4gICAgICogaGludCByZXNwZWN0aW5nIHBhc3NlZCBjb25maWdzIGFuZCBnaXZlbiBicmVha3BvaW50IG9mIHNjcmVlbi5cbiAgICAgKi9cbiAgICBoaW50VGFyZ2V0Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9icmVha1BvaW50T2JzZXJ2ZXI6IE9ic2VydmFibGU8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgZm9ybUdyb3VwQ29udGFpbmVyOiBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGZvcm1GaWVsZEdyb3VwOiBGb3JtRmllbGRHcm91cCxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChSRVNQT05TSVZFX0JSRUFLUE9JTlRTX0NPTkZJRylcbiAgICAgICAgcmVhZG9ubHkgX2RlZmF1bHRSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZzogUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcsXG4gICAgICAgIHJlYWRvbmx5IF9yZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlOiBSZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0ZJRUxEX0hJTlRfT1BUSU9OU19ERUZBVUxUKSBfcHJvdmlkZWRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucyxcbiAgICAgICAgQEluamVjdChGRFBfRk9STV9GSUVMRF9ISU5UX0xBWU9VVF9DT05GSUcpIHByaXZhdGUgX2hpbnRMYXlvdXRDb25maWc6IEhpbnRMYXlvdXRDb25maWcsXG4gICAgICAgIEBTZWxmKCkgX3NlbGZGb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBfcGFyZW50Rm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMsXG4gICAgICAgICAgICAuLi5fcHJvdmlkZWRIaW50T3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlID0gX3BhcmVudEZvcm1GaWVsZExheW91dFNlcnZpY2UgfHwgX3NlbGZGb3JtRmllbGRMYXlvdXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2dhcENvbHVtbkxheW91dCk7XG4gICAgICAgIC8vIGZvcm1Hcm91cENvbnRhaW5lciBjYW4gYmUgaW5qZWN0ZWQgb25seSBpZiBjdXJyZW50IGZvcm0tZmllbGQgaXMgbG9jYXRlZFxuICAgICAgICAvLyBpbnNpZ2h0IGZvcm1Hcm91cENvbnRhaW5lciBjb250ZW50LlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSB0aGUgZm9ybUdyb3VwQ29udGFpbmVyXG4gICAgICAgIC8vIHdpbGwgYmUgdW5kZWZpbmVkIChrbm93biBhbmd1bGFyIGlzc3VlKSxcbiAgICAgICAgLy8gaW4gc3VjaCBjYXNlIGZvcm1Hcm91cENvbnRhaW5lciBjYW4gYmUgcG9pbnRlZCBleHBsaWNpdGx5IHVzaW5nXG4gICAgICAgIC8vIGNvbXBvbmVudCBpbnB1dCBhbm5vdGF0aW9uXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyID0gZm9ybUdyb3VwQ29udGFpbmVyO1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyA9IF9kZWZhdWx0UmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcgfHwgbmV3IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlciA9IHRoaXMuX3Jlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2Uub2JzZXJ2ZUJyZWFrcG9pbnRCeUNvbmZpZyhcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpbml0aWFsIHZhbHVlcyBmb3IgbGFiZWwsIGZpZWxkIGFuZCBnYXAgY29sdW1uc1xuICAgICAqL1xuICAgIHNldERlZmF1bHRDb2x1bW5MYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIC8vIElmIGxheW91dCBhbHJlYWR5IGRlZmluZWQsIG5vIG5lZWQgdG8gc2V0IGRlZmF1bHQgb25lLlxuICAgICAgICBpZiAodGhpcy5sYWJlbENvbHVtbkxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQgPyB0aGlzIDogdGhpcy5fZ3JvdXBIb3N0KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsaXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcyhnZXRTb3VyY2U6ICgpID0+IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRMYXlvdXRzID0gKHNvdXJjZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID0gc291cmNlLmxhYmVsQ29sdW1uTGF5b3V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZENvbHVtbkxheW91dCA9IHNvdXJjZS5maWVsZENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZ2FwQ29sdW1uTGF5b3V0ID0gc291cmNlLmdhcENvbHVtbkxheW91dDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLm5lZWRzSW5saW5lSGVscFBsYWNlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5nZXRGaXhlZExheW91dHMoZ2V0U291cmNlKCkpKSxcbiAgICAgICAgICAgICAgICB0YXAoc2V0TGF5b3V0cyksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcHJvdmlkZXMgY2FwYWJpbGl0eSB0byBtYWtlIGEgZmllbGQgZGlzYWJsZWQuIHVzZWZ1bCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgICAgICAgICh0aGlzLmZvcm1Hcm91cENvbnRhaW5lcj8uZm9ybUdyb3VwPy5nZXQodGhpcy5pZCkgYXMgRm9ybUNvbnRyb2wpID8/XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiAodGhpcy5jb2x1bW5zIDwgMSB8fCB0aGlzLmNvbHVtbnMgPiAxMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW2NvbHVtbnNdIGFjY2VwdHMgbnVtYmVycyBiZXR3ZWVuIDEgLSAxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJyZWFrUG9pbnROYW1lKSA9PiB0aGlzLl91cGRhdGVMYXlvdXQoYnJlYWtQb2ludE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FkZFRvRm9ybUdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5pc0hvcml6b250YWwkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIG1hcChub3JtYWxpemVDb2x1bW5MYXlvdXQpKSxcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JC5waXBlKG1hcCgoZykgPT4gbm9ybWFsaXplQ29sdW1uTGF5b3V0KGcgfHwgeyBTOiAwIH0pKSlcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2xhYmVsLCBmaWVsZCwgZ2FwXSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXIucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChicmVha3BvaW50TmFtZSkgPT4gbGFiZWxbYnJlYWtwb2ludE5hbWVdICsgZmllbGRbYnJlYWtwb2ludE5hbWVdICsgZ2FwW2JyZWFrcG9pbnROYW1lXSA8PSAxMilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnRPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLnNldE5lZWRzSW5saW5lSGVscChcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICh0aGlzLmhpbnRPcHRpb25zLnRhcmdldCA9PT0gJ2lucHV0JyB8fCB0aGlzLmhpbnRPcHRpb25zLnRhcmdldCA9PT0gJ2F1dG8nKSAmJiAhIXRoaXMuaGludFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oaW50ICYmIGNoYW5nZXMuaGludC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoc2l6ZU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpbnRPcHRpb25zLnRhcmdldCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50VGFyZ2V0ID0gdGhpcy5faGludExheW91dENvbmZpZy5oaW50T25JbnB1dEJyZWFrcG9pbnRzLmluY2x1ZGVzKHNpemVOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdpbnB1dCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnRUYXJnZXQgPSB0aGlzLmhpbnRPcHRpb25zLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Fzc2lnbkVycm9yRGlyZWN0aXZlcygpO1xuXG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlUXVlcnkuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnbkVycm9yRGlyZWN0aXZlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVFcnJvckhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Gb3JtTWVzc2FnZSgpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5yZW1vdmVFbnRyeSh0aGlzKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbUZvcm1Hcm91cCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlICYmICEhdGhpcy5jb250cm9sPy5jb250cm9sSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB1bmRlcmx5aW5nIGZvcm0gY29udHJvbFxuICAgICAqIEBwYXJhbSBmb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgcmVnaXN0ZXJGb3JtRmllbGRDb250cm9sKGZvcm1GaWVsZENvbnRyb2w6IEZvcm1GaWVsZENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0Zvcm0gZmllbGQgY2FuIGNvbnRhaW4gb25seSBvbmUgRm9ybUZpZWxkQ29udHJvbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gZm9ybUZpZWxkQ29udHJvbCBhcyBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2w7XG5cbiAgICAgICAgZm9ybUZpZWxkQ29udHJvbC5zdGF0ZUNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNhbGwgZXhwbGljaXRseSBkZXRlY3RDaGFuZ2VzKCkgaW5zdGVhZCBvZiBtYXJrRm9yQ2hlY2sgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gbW9kaWZpZWQgdmFsaWRhdGlvbiBzdGF0ZSBvZiB0aGUgY29udHJvbCBwYXNzZXMgb3ZlciBjaGVja2VkIHBoYXNlXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoJ3N0YXRlQ2hhbmdlcycpO1xuICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWZyZXNoIFVJIHdoZW4gdmFsdWUgY2hhbmdlc1xuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy52YWx1ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZENvbnRyb2wubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoJ3ZhbHVlQ2hhbmdlcycpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2w/Lm5nQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1GaWVsZENvbnRyb2wubmdDb250cm9sLmNvbnRyb2w7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1JlcXVpcmVkVmFsaWRhdG9yID1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvcnMuaW5jbHVkZXMoVmFsaWRhdG9ycy5yZXF1aXJlZCkgfHwgdGhpcy52YWxpZGF0b3JzLmluY2x1ZGVzKFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIWhhc1JlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNSZXF1aXJlZFZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBmb3JtIGNvbnRyb2wgaXMgZGlzYWJsZWQsIGluIHJlYWN0aXZlIGZvcm0gYXBwcm9hY2hcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlcmUgaXMgYSBjYXNlIHdoZW4gYSBcImZvcm0tZ3JvdXBcIiBpbml0aWFsIHN0YXRlIGlzIFZBTElELFxuICAgICAgICAgICAgICogYW5kIG9uIHRoZSBuZXh0IGxvb3AgYSBjaGlsZCBmb3JtLWZpbGVkIGV4dGVuZHMgaXQgYW5kIG1ha2VcbiAgICAgICAgICAgICAqIHRoZSBmb3JtLWdyb3VwIElOVkFMSUQuXG4gICAgICAgICAgICAgKiBJbiBzdWNoIGNhc2Ugd2UgZ2V0IHRoZSBlcnJvclxuICAgICAgICAgICAgICogXCJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yLiBQcmV2aW91cyB2YWx1ZSBpcyBuZy12YWxpZCwgY3VycmVudCB2YWx1ZSBpcyBuZy1pbnZhbGlkXCIuXG4gICAgICAgICAgICAgKiBUbyBmaXggaXQgd2UgaGF2ZSB0byBwb3N0cG9uZSBhZGRpbmcgZm9ybS1maWVsZCB2YWxpZGF0b3JzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHRoaXMudmFsaWRhdG9ycykpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fYWRkQ29udHJvbFRvRm9ybUdyb3VwKGZvcm1GaWVsZENvbnRyb2w/Lm5nQ29udHJvbD8uY29udHJvbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnJlZ2lzdGVyIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICB1bnJlZ2lzdGVyRm9ybUZpZWxkQ29udHJvbChmb3JtRmllbGRDb250cm9sOiBGb3JtRmllbGRDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sICE9PSB0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udHJvbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fcmVtb3ZlQ29udHJvbEZyb21Gb3JtR3JvdXAoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHcm91cHNcbiAgICAgKi9cbiAgICBncm91cEVycm9ycygpOiB2b2lkIHtcbiAgICAgICAgLy8gUXVldWUgdGFzayBiZWNhdXNlIGZpcmluZyBpdCByaWdodCBhd2F5IG1heSBjYXVzZSBlcnJvciB3aXRoIHNob3dpbmcgZW1wdHkgbWVzc2FnZS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRFcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnM7XG4gICAgICAgICAgICBpZiAoIWVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lcnJvckRpcmVjdGl2ZXMuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcnNbZGlyZWN0aXZlLmVycm9yXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkRXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcnNbZGlyZWN0aXZlLmVycm9yXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVycm9yc0NoYW5nZSQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgcHJpb3JpdGl6ZWQgY29udHJvbCBzdGF0ZSBiYXNlZCBvbiB0aGUgZXJyb3IgdHlwZXMgaXQgaGFzLlxuICAgICAqL1xuICAgIGdldFByaW9yaXR5U3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwZWRFcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNFcnJvcnMoKSA/ICdlcnJvcicgOiAnZGVmYXVsdCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Rm9ybVN0YXRlKHRoaXMuZ3JvdXBlZEVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5kaXJlY3RpdmUudHlwZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgZXJyb3IgZGlyZWN0aXZlcy5cbiAgICAgKi9cbiAgICBzZXRFcnJvckRpcmVjdGl2ZXMoZGlyZWN0aXZlczogUXVlcnlMaXN0PEZvcm1FcnJvcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICghZGlyZWN0aXZlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzID0gZGlyZWN0aXZlcy50b0FycmF5KCk7XG5cbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uID0gZGlyZWN0aXZlcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBjb250ZW50IG9mIHRoZSBwcm92aWRlZCBoaW50IGlzIGEgc3RyaW5nLlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpc1N0cmluZ0hpbnQoaGludE9wdGlvbnM6IEhpbnRDb250ZW50KTogaGludE9wdGlvbnMgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBoaW50T3B0aW9ucyA9PT0gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3RlbnMgdG8gZm9ybSBtZXNzYWdlIGNvbXBvbmVudCBjaGFuZ2VzIGFuZCBwYXNzZXMgaXRzIGluc3RhbmNlIHRvIHRoZSBmb3JtIGNvbnRyb2wgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvRm9ybU1lc3NhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0TWVzc2FnZUdyb3VwQ21wLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5faW5wdXRNZXNzYWdlR3JvdXBDbXAuZmlyc3QpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2whLmZvcm1NZXNzYWdlID0gY29tcG9uZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWxpZGF0ZUVycm9ySGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZWRpdGFibGUgJiZcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCAmJlxuICAgICAgICAgICAgdGhpcy5faGFzVmFsaWRhdG9ycygpICYmXG4gICAgICAgICAgICAhdGhpcy5pMThTdHJpbmdzICYmXG4gICAgICAgICAgICB0aGlzLmVycm9yRGlyZWN0aXZlcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gc3RyaW5ncyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBhbnkgcHJvdmlkZWQgdmFsaWRhdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhc1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnMgJiYgdGhpcy52YWxpZGF0b3JzLmxlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFkZCBGb3JtRmllbGQgdG8gRm9ybUdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWRkVG9Gb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIgfHwgdGhpcy5mb3JtRmllbGRHcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIuYWRkRm9ybUZpZWxkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmUgRm9ybUZpZWxkIGZyb20gRm9ybUdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlRnJvbUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLnJlbW92ZUZvcm1GaWVsZCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWRkIEZvcm1Db250cm9sIGZyb20gRm9ybUdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWRkQ29udHJvbFRvRm9ybUdyb3VwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyIHx8ICEhdGhpcy5mb3JtRmllbGRHcm91cD8uZm9ybU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5hZGRGb3JtQ29udHJvbCh0aGlzLmlkLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVtb3ZlIEZvcm1Db250cm9sIGZyb20gRm9ybUdyb3VwXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQ29udHJvbEZyb21Gb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5yZW1vdmVGb3JtQ29udHJvbCh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTmVlZCB0byBiZSBhYmxlIHRvIHNldCB0aGVzZSBwcm9wZXJ0aWVzIG9uIGV2ZXJ5IGxldmVsLlxuICAgICAqICAtIEdsb2JhbCBGb3JtR3JvdXAgTGV2ZWwgYXMgd2VsbCBlYWNoIGZpZWxkXG4gICAgICpcbiAgICAgKiAgVG9kbzogdXNlIG1vcmUgZWxlZ2FudCB3YXkgdG8gc2V0IHRoZXNlIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgdGhpcy5fZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5pZCA9IHRoaXMuaWQ7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldExheW91dCgpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDb2x1bW5MYXlvdXQodGhpcy5jb2x1bW5MYXlvdXQsIDEpO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5MYXlvdXQgPSBub3JtYWxpemVkO1xuICAgICAgICAgICAgdGhpcy5fc0NvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ1MnXTtcbiAgICAgICAgICAgIHRoaXMuX21kQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnTSddO1xuICAgICAgICAgICAgdGhpcy5fbGdDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydMJ107XG4gICAgICAgICAgICB0aGlzLl94bENvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ1hMJ107XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbHVtbkxheW91dEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTGF5b3V0KGN1cnJlbnRCcmVha2luZ1BvaW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbHVtbkxheW91dEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudEJyZWFraW5nUG9pbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fc0NvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fbWRDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbiA9IHRoaXMuX2xnQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdYTCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5feGxDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5feGxDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWl0IGNvbHVtbiBjaGFuZ2UsIHNvIGZvcm0tZ3JvdXAga25vd3MgaXQgYW5kIHJlLWFycmFuZ2VzIHRoZSBmaWVsZHNcbiAgICAgICAgdGhpcy5vbkNvbHVtbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlSGludE9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIHBsYWNlbWVudCBpcyBoZXJlIHNldCB1cCBiZWNhdXNlIGhpbnRQbGFjZW1lbnQgaXMgZGVwcmVjYXRlZFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGludCA9PT0gJ3N0cmluZycgfHwgdGhpcy5oaW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5oaW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hc3NpZ25FcnJvckRpcmVjdGl2ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzID0gdGhpcy5fZXJyb3JEaXJlY3RpdmVRdWVyeS50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0NkciA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXMuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHIuYWRkKFxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5kZXRlY3RDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNyZW5kZXJlcj5cbiAgICA8ZGl2IFtob3Jpem9udGFsXT1cInRydWVcIiBmZC1mb3JtLWl0ZW0gY2xhc3M9XCJmZC1yb3dcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICAgICAgI2xhYmVsQ29sXG4gICAgICAgICAgICBbY2xhc3NdPVwiX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3NcIlxuICAgICAgICAgICAgKm5nSWY9XCIhbm9MYWJlbExheW91dFwiXG4gICAgICAgICAgICBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCJfY29udHJvbEV4dHJhc0hlaWdodFB4XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndpdGhGb3JtTWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2FwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIiBbaWRdPVwiJ2ZkcC1mb3JtLWhpbnQtJyArIGlkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0cmluZ0hpbnQoaGludE9wdGlvbnMuY29udGVudCk7IGVsc2UgaGludFRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyBoaW50T3B0aW9ucy5jb250ZW50IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2hpbnRUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGhpbnRPcHRpb25zLmNvbnRlbnQpXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3dpdGhGb3JtTWVzc2FnZT5cbiAgICA8ZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICBbY2xhc3NdPVwiX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3NcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ2ZkcC1mb3JtLWxhYmVsLScgKyBpZFwiXG4gICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyaWdnZXJJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFcnJvcnMoKSAmJiBncm91cGVkRXJyb3JzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgKm5nRm9yPVwibGV0IGVycm9yIG9mIGdyb3VwZWRFcnJvcnNcIiBbdHlwZV09XCJlcnJvci5kaXJlY3RpdmUudHlwZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdJZl09XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZiAmJiBlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cImVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlICpuZ0lmPVwiZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDAgJiYgaGFzRXJyb3JzKCkgJiYgaTE4U3RyaW5nc1wiIHR5cGU9XCJlcnJvclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImkxOFN0cmluZ3M7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb250cm9sPy5uZ0NvbnRyb2w/LmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG4gICAgPC9mZHAtaW5wdXQtbWVzc2FnZS1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5uZXJFcnJvclJlbmRlcmVycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXJyb3JzKCkgJiYgZ3JvdXBlZEVycm9ycy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yIG9mIGdyb3VwZWRFcnJvcnNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ0lmXT1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZiAmJiBlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nSWZdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGVkRXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBoYXNFcnJvcnMoKSAmJiBpMThTdHJpbmdzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpMThTdHJpbmdzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGludFRhcmdldCA9PT0gJ2xhYmVsJzsgZWxzZSB3aXRob3V0SGludFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtJyArIGlkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJlZGl0YWJsZSAmJiByZXF1aXJlZFwiXG4gICAgICAgICAgICBmZC1mb3JtLWxhYmVsXG4gICAgICAgICAgICBbaW5saW5lSGVscENvbnRlbnRdPVwiaGludE9wdGlvbnMuY29udGVudFwiXG4gICAgICAgICAgICBbaW5saW5lSGVscEJvZHlQbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucGxhY2VtZW50IHx8ICd0b3AnXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwUGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBvc2l0aW9uIHx8ICdhZnRlcidcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBHbHlwaF09XCJoaW50T3B0aW9ucy5nbHlwaCB8fCAnJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscFRyaWdnZXJzXT1cImhpbnRPcHRpb25zLnRyaWdnZXIgfHwgW11cIlxuICAgICAgICAgICAgW2FsaWduTGFiZWxFbmRdPVwiISEoaXNIb3Jpem9udGFsJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbY29sb25dPVwiY29sb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLWNvbnRlbnQtJyArIGlkXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICN3aXRob3V0SGludD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLScgKyBpZFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiZWRpdGFibGUgJiYgcmVxdWlyZWRcIlxuICAgICAgICAgICAgZmQtZm9ybS1sYWJlbFxuICAgICAgICAgICAgW2NvbG9uXT1cImNvbG9uXCJcbiAgICAgICAgICAgIFthbGlnbkxhYmVsRW5kXT1cIiEhKGlzSG9yaXpvbnRhbCQgfCBhc3luYylcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLWNvbnRlbnQtJyArIGlkXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZ2FwVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhpbnRUYXJnZXQgPT09ICdpbnB1dCcgJiYgaGludE9wdGlvbnMuY29udGVudDsgZWxzZSB3aXRob3V0SGludFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY29sIGZkLWZvcm0tZmllbGQtaW5saW5lLWhlbHAtY29udGFpbmVyXCIgW2NsYXNzXT1cIl9nYXBDb2x1bW5MYXlvdXRDbGFzc1wiPlxuICAgICAgICAgICAgPHNwYW4gZmQtbGluayBbdW5kZWNvcmF0ZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgICAgIFtmZC1pbmxpbmUtaGVscF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImhpbnRPcHRpb25zLmdseXBoXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJoaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3dpdGhvdXRIaW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY29sXCIgW2NsYXNzXT1cIl9nYXBDb2x1bW5MYXlvdXRDbGFzc1wiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
700
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUdILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULElBQUksRUFFSixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFnQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUss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QyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBSXJCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSzlELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBS3hCLG9CQUFvQjtzQkFEM0IsZUFBZTt1QkFBQyx1QkFBdUI7Z0JBS3ZCLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGb3JtRmllbGRDb250cm9sLCBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db21wb25lbnQsIEZvcm1MYWJlbENvbXBvbmVudCwgRm9ybU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5saW5lSGVscERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbmxpbmUtaGVscCc7XG5pbXBvcnQgeyBMaW5rQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpbmsnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZpZWxkSGludElucHV0LFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgRm9ybUVycm9yLFxuICAgIEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dCxcbiAgICBGb3JtRmllbGRHcm91cCxcbiAgICBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgSGludENvbnRlbnQsXG4gICAgTGFiZWxMYXlvdXQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIFJFU1BPTlNJVkVfQlJFQUtQT0lOVFNfQ09ORklHLFxuICAgIFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnLFxuICAgIFJlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0Rm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZmllbGQtaGludC1vcHRpb25zJztcbmltcG9ydCB7IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBGRFBfRk9STV9GSUVMRF9ISU5UX0xBWU9VVF9DT05GSUcsXG4gICAgRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQsXG4gICAgSGludExheW91dENvbmZpZ1xufSBmcm9tICcuLi9mZHAtZm9ybS50b2tlbnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWV4dHJhcy9mb3JtLWZpZWxkLWV4dHJhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb2x1bW5DbGFzcywgbm9ybWFsaXplQ29sdW1uTGF5b3V0IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1maWVsZC1sYXlvdXQuc2VydmljZSc7XG5cbmxldCBkZWZhdWx0SWQgPSAwO1xuXG5jb25zdCBmb3JtRmllbGRQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogRkRfRk9STV9GSUVMRCxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtRmllbGRDb21wb25lbnQpXG59O1xuXG5jb25zdCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGT1JNX0dST1VQX0NISUxEX0ZJRUxEX1RPS0VOLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbi8qKlxuICogRm9ybSBGaWVsZCByZXByZXNlbnQgYWN0dWFsIHJvdyBhbmQgYWdncmVnYXRlcyBjb21tb24gYmVoYXZpb3IgZm9yIHRoZSBpbnB1dCBmaWVsZCBzdWNoIGFzXG4gKiBlcnJvciwgbGFiZWwgb3IgaGludC5cbiAqIEhpbnQgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgbGlzdGVuaW5nIGZvciBGaWVsZENvbnRyb2wgY2hhbmdlcyBhbmQgdHJpZ2dlciBuZWNlc3NhcnlcbiAqIGNoYW5nZSBkZXRlY3Rpb25cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWZvcm0tZmllbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2Zvcm1GaWVsZFByb3ZpZGVyLCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyLCBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRm9ybUl0ZW1Db21wb25lbnQsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgRm9ybU1lc3NhZ2VDb21wb25lbnQsXG4gICAgICAgIEZvcm1MYWJlbENvbXBvbmVudCxcbiAgICAgICAgTGlua0NvbXBvbmVudCxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgSW5saW5lSGVscERpcmVjdGl2ZSxcbiAgICAgICAgQXN5bmNQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIFBsYXRmb3JtRm9ybUZpZWxkLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgLyoqIEZvcm0gZmllbGQgbGFiZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTdWZmaXggZm9yIGlkcyBvZiBjb250cm9sIGVsZW1lbnRzIGluc2lkZSB0aGlzIGZvcm0gZmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAoKytkZWZhdWx0SWQpLnRvU3RyaW5nKCk7XG5cbiAgICAvKiogSGludCB0byBiZSBwbGFjZWQgbmV4dCB0byBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGludDogTnVsbGFibGU8RmllbGRIaW50SW5wdXQ+O1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZW4gZm9ybSBmaWVsZCBsYWJlbCBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9MYWJlbExheW91dCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgdmFsaWRhdG9ycyBhcHBsaWVkIHRvIHRoZSBmb3JtIGZpZWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW1ZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcl07XG5cbiAgICAvKipcbiAgICAgKiBSYW5rIGlzIHVzZWQgZm9yIG9yZGVyaW5nLlxuICAgICAqIEZpcnN0IGxvd2VyIG51bWJlciwgdGhlbiAtIGhpZ2hlclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuazogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8qKiBGb3JtIENvbnRhaW5lciBjb2x1bW4gaXQgYmVsb25ncyB0byAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uOiBudW1iZXI7XG5cbiAgICAvKiogb2JqZWN0IGZvciBwbGFjaW5nIGZpZWxkIGluIGNvbHVtbiBpbiBlYWNoIHNjcmVlbiBsYXlvdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5MYXlvdXQobGF5b3V0OiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb2x1bW5MYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldExheW91dCgpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5MYXlvdXQoKTogQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGxhYmVsJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYWJlbENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3MgPSBnZW5lcmF0ZUNvbHVtbkNsYXNzKHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIGdldCBsYWJlbENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBmaWVsZCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmllbGRDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3MgPSBnZW5lcmF0ZUNvbHVtbkNsYXNzKHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIGdldCBmaWVsZENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBnYXAgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBnYXBDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQgPSBub3JtYWxpemVDb2x1bW5MYXlvdXQodmFsdWUpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JC5uZXh0KHRoaXMuX2dhcENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGdhcENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2FwQ29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0aW9ucyB0ZW1wbGF0ZSByZWZlcmVuY2UuXG4gICAgICogVGhpcyBpcyBpbiBtb3N0IG9mIHRoZSBjYXNlcyBzZXQgZnJvbSBwYXJlbnQgY29udGFpbmVyIChmb3JtLWdyb3VwKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaTE4U3RyaW5nczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBTZXQgd2hlbiBmb3JtIGZpZWxkIGlzIGEgbWFuZGF0b3J5IG9uZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgZmllbGQgaXMgZWRpdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBlZGl0YWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0YWJsZSAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIGZpZWxkIGN1c3RvbSB3aWR0aCBpbiBjb2x1bW5zIG11c3QgYmUgYmV0d2VlbiAxIC0gMTJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5zKHZhbHVlOiBDb2x1bW4pIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IDxDb2x1bW4+Y29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5zKCk6IENvbHVtbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1hcmtzIGZpZWxkIGFzIGRpc2FibGVkLiB1c2VkIGluIHJlYWN0aXZlIGZvcm0gYXBwcm9hY2guXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGFiZWwgdGV4dCBzaG91bGQgYmUgYXBwZW5kZWQgd2l0aCBjb2xvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIEdyb3VwIENvbnRhaW5lciB0byBiaW5kIHRoZSBGb3JtLUZpZWxkIHRvLlxuICAgICAqIFRoaXMgd2lsbCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIGluamVjdGVkIGJ5IGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JtR3JvdXBDb250YWluZXI6IEZvcm1Hcm91cENvbnRhaW5lcjtcblxuICAgIC8qKiBFbWl0cyB3aGVuZXZlciBmb3JtRmllbGRDb250cm9sJ3Mgc3RhdGUgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW5ldmVyIGNvbHVtbiBsYXlvdXQgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uQ29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9ybSBmaWVsZCB0ZW1wbGF0ZSByZWZlcmVuY2VcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdyZW5kZXJlcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcmVuZGVyZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgZm9ybUZpZWxkRXh0cmFzPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xhYmVsQ29sJykgbGFiZWxDb2w/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5wdXRNZXNzYWdlR3JvdXA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbm5lckVycm9yUmVuZGVyZXJzJylcbiAgICBpbm5lckVycm9yUmVuZGVyZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlUXVlcnk6IFF1ZXJ5TGlzdDxGb3JtRXJyb3I+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0TWVzc2FnZUdyb3VwQ21wOiBRdWVyeUxpc3Q8SW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGU+O1xuXG4gICAgLyoqIENvbWJpbmVkIEVycm9yIGRpcmVjdGl2ZXMgZnJvbSBmaWVsZCBpdHNlbGYgYW5kIHBhcmVudCBmb3JtIGNvbnRhaW5lci4gKi9cbiAgICBnZXQgZXJyb3JEaXJlY3RpdmVzKCk6IEZvcm1FcnJvcltdIHtcbiAgICAgICAgcmV0dXJuIHVuaXFCeShbLi4udGhpcy5fZXJyb3JEaXJlY3RpdmVzLCAuLi50aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNdLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzSG9yaXpvbnRhbCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBDaGlsZCBGb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgY29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dhcENvbHVtbkxheW91dENsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBoaW50IGFuZCBoaW50IHBsYWNlbWVudCBjb2VyY2VkIHRvIHRoZSBGaWVsZEhpbnRPcHRpb25zXG4gICAgICovXG4gICAgaGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMgPSBkZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMgYXMgdW5rbm93biBhcyBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEdyb3VwZWQgZXJyb3JzLiAqL1xuICAgIGdyb3VwZWRFcnJvcnM6IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dFtdID0gW107XG5cbiAgICAvKiogRXZlbnQgZW1pdGVkIHdoZW4gZXJyb3JzIG9iamVjdCBiZWluZyBjaGFuZ2VkLiAqL1xuICAgIGVycm9yc0NoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wdGlvbmFsIEZvcm1Db250cm9sXG4gICAgICovXG4gICAgcHVibGljIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBDb2x1bW4gPSA2O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2VkaXRhYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9mb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbHVtbkxheW91dEVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIGNvbHVtbiBudW1iZXIgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMgKi9cbiAgICBwcml2YXRlIF94bENvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sZ0NvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tZENvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zQ29sdW1uTnVtYmVyID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnOiBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFiZWxMYXlvdXQ6IExhYmVsTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlczogRm9ybUVycm9yW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlc0NkcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciBsYWJlbCBhbmQgY29udHJvbCBhcmUgdmVydGljYWxseSBhbGlnbmVkICovXG4gICAgcHJpdmF0ZSBnZXQgX2lzSG9yaXpvbnRhbEFsaWdubWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0TWVzc2FnZUdyb3VwIHx8ICF0aGlzLmxhYmVsQ29sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlR3JvdXBZID0gdGhpcy5pbnB1dE1lc3NhZ2VHcm91cC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ29sUmVjdCA9IHRoaXMubGFiZWxDb2wubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xCb3R0b21ZID0gbGFiZWxDb2xSZWN0LnkgKyBsYWJlbENvbFJlY3QuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gbGFiZWxDb2xCb3R0b21ZID4gaW5wdXRNZXNzYWdlR3JvdXBZO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdW0gb2YgZXh0cmEgaGVpZ2h0cyBpbnNpZGUgZm9ybSBjb250cm9sIGFuZCBmb3JtRmllbGRFeHRyYXMuXG4gICAgICogTGFiZWwgd2lsbCBiZSBzaGlmdGVkIGJ5IHRoaXMgbnVtYmVyIGluIG9yZGVyIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIGdldCBfY29udHJvbEV4dHJhc0hlaWdodFB4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5ub0xhYmVsTGF5b3V0IHx8ICF0aGlzLl9pc0hvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIC8vIHByb2NlZWQgb25seSBpZiAxLiB0aGVyZSdzIGEgbGFiZWw7IDIuIGNvbnRyb2wgaGFzIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLmZvcm1GaWVsZEV4dHJhcz8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMCkgKyAodGhpcy5jb250cm9sPy5leHRyYUNvbnRlbnRIZWlnaHRQeCA/PyAwKSB8fCBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmllbGRDb2x1bW5MYXlvdXQkOiBCZWhhdmlvclN1YmplY3Q8Q29sdW1uTGF5b3V0PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dhcENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfZ3JvdXBIb3N0KCk6IEZvcm1Hcm91cENvbnRhaW5lciB8IEZvcm1GaWVsZEdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkR3JvdXAgPyB0aGlzLmZvcm1GaWVsZEdyb3VwIDogdGhpcy5mb3JtR3JvdXBDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1cGRhdGVkIGR1cmluZyBvbkNoYW5nZXMgYW5kIHJlc2l6ZSwgcmVzdWx0aW5nIGNvcnJlY3QgcGxhY2VtZW50IG9mIHRoZVxuICAgICAqIGhpbnQgcmVzcGVjdGluZyBwYXNzZWQgY29uZmlncyBhbmQgZ2l2ZW4gYnJlYWtwb2ludCBvZiBzY3JlZW4uXG4gICAgICovXG4gICAgaGludFRhcmdldD86IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnJlYWtQb2ludE9ic2VydmVyOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0SGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIGZvcm1Hcm91cENvbnRhaW5lcjogRm9ybUdyb3VwQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSByZWFkb25seSBmb3JtRmllbGRHcm91cDogRm9ybUZpZWxkR3JvdXAsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoUkVTUE9OU0lWRV9CUkVBS1BPSU5UU19DT05GSUcpXG4gICAgICAgIHJlYWRvbmx5IF9kZWZhdWx0UmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnLFxuICAgICAgICByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZTogUmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZSxcbiAgICAgICAgQEluamVjdChGRFBfRk9STV9GSUVMRF9ISU5UX09QVElPTlNfREVGQVVMVCkgX3Byb3ZpZGVkSGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9MQVlPVVRfQ09ORklHKSBwcml2YXRlIF9oaW50TGF5b3V0Q29uZmlnOiBIaW50TGF5b3V0Q29uZmlnLFxuICAgICAgICBAU2VsZigpIF9zZWxmRm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgX3BhcmVudEZvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZvcm1GaWVsZEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgLi4uX3Byb3ZpZGVkSGludE9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZSA9IF9wYXJlbnRGb3JtRmllbGRMYXlvdXRTZXJ2aWNlIHx8IF9zZWxmRm9ybUZpZWxkTGF5b3V0U2VydmljZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICAvLyBmb3JtR3JvdXBDb250YWluZXIgY2FuIGJlIGluamVjdGVkIG9ubHkgaWYgY3VycmVudCBmb3JtLWZpZWxkIGlzIGxvY2F0ZWRcbiAgICAgICAgLy8gaW5zaWdodCBmb3JtR3JvdXBDb250YWluZXIgY29udGVudC5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UgdGhlIGZvcm1Hcm91cENvbnRhaW5lclxuICAgICAgICAvLyB3aWxsIGJlIHVuZGVmaW5lZCAoa25vd24gYW5ndWxhciBpc3N1ZSksXG4gICAgICAgIC8vIGluIHN1Y2ggY2FzZSBmb3JtR3JvdXBDb250YWluZXIgY2FuIGJlIHBvaW50ZWQgZXhwbGljaXRseSB1c2luZ1xuICAgICAgICAvLyBjb21wb25lbnQgaW5wdXQgYW5ub3RhdGlvblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lciA9IGZvcm1Hcm91cENvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcgPSBfZGVmYXVsdFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnIHx8IG5ldyBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZygpO1xuICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXIgPSB0aGlzLl9yZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlLm9ic2VydmVCcmVha3BvaW50QnlDb25maWcoXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaW5pdGlhbCB2YWx1ZXMgZm9yIGxhYmVsLCBmaWVsZCBhbmQgZ2FwIGNvbHVtbnNcbiAgICAgKi9cbiAgICBzZXREZWZhdWx0Q29sdW1uTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBsYXlvdXQgYWxyZWFkeSBkZWZpbmVkLCBubyBuZWVkIHRvIHNldCBkZWZhdWx0IG9uZS5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlblRvSW5saW5lSGVscFBsYWNlUmVxdWlyZW1lbnRDaGFuZ2VzKCgpID0+ICh0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID8gdGhpcyA6IHRoaXMuX2dyb3VwSG9zdCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoZ2V0U291cmNlOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2V0TGF5b3V0cyA9IChzb3VyY2U6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYWJlbENvbHVtbkxheW91dCA9IHNvdXJjZS5sYWJlbENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZmllbGRDb2x1bW5MYXlvdXQgPSBzb3VyY2UuZmllbGRDb2x1bW5MYXlvdXQ7XG4gICAgICAgICAgICB0aGlzLmdhcENvbHVtbkxheW91dCA9IHNvdXJjZS5nYXBDb2x1bW5MYXlvdXQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uID0gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5uZWVkc0lubGluZUhlbHBQbGFjZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2UuZ2V0Rml4ZWRMYXlvdXRzKGdldFNvdXJjZSgpKSksXG4gICAgICAgICAgICAgICAgdGFwKHNldExheW91dHMpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIHByb3ZpZGVzIGNhcGFiaWxpdHkgdG8gbWFrZSBhIGZpZWxkIGRpc2FibGVkLiB1c2VmdWwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaC5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICAgICAgICAodGhpcy5mb3JtR3JvdXBDb250YWluZXI/LmZvcm1Hcm91cD8uZ2V0KHRoaXMuaWQpIGFzIEZvcm1Db250cm9sKSA/P1xuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgKHRoaXMuY29sdW1ucyA8IDEgfHwgdGhpcy5jb2x1bW5zID4gMTIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tjb2x1bW5zXSBhY2NlcHRzIG51bWJlcnMgYmV0d2VlbiAxIC0gMTInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc0NvbHVtbkxheW91dEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChicmVha1BvaW50TmFtZSkgPT4gdGhpcy5fdXBkYXRlTGF5b3V0KGJyZWFrUG9pbnROYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hZGRUb0Zvcm1Hcm91cCgpO1xuXG4gICAgICAgIHRoaXMuaXNIb3Jpem9udGFsJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCBtYXAobm9ybWFsaXplQ29sdW1uTGF5b3V0KSksXG4gICAgICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIG1hcChub3JtYWxpemVDb2x1bW5MYXlvdXQpKSxcbiAgICAgICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQucGlwZShtYXAoKGcpID0+IG5vcm1hbGl6ZUNvbHVtbkxheW91dChnIHx8IHsgUzogMCB9KSkpXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtsYWJlbCwgZmllbGQsIGdhcF0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoYnJlYWtwb2ludE5hbWUpID0+IGxhYmVsW2JyZWFrcG9pbnROYW1lXSArIGZpZWxkW2JyZWFrcG9pbnROYW1lXSArIGdhcFticmVha3BvaW50TmFtZV0gPD0gMTIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxpc3RlblRvSW5saW5lSGVscFBsYWNlUmVxdWlyZW1lbnRDaGFuZ2VzKCgpID0+IHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5oaW50KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5zZXROZWVkc0lubGluZUhlbHAoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAodGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdpbnB1dCcgfHwgdGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdhdXRvJykgJiYgISF0aGlzLmhpbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCAmJiBjaGFuZ2VzLmhpbnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKHNpemVOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludFRhcmdldCA9IHRoaXMuX2hpbnRMYXlvdXRDb25maWcuaGludE9uSW5wdXRCcmVha3BvaW50cy5pbmNsdWRlcyhzaXplTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnaW5wdXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50VGFyZ2V0ID0gdGhpcy5oaW50T3B0aW9ucy50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hc3NpZ25FcnJvckRpcmVjdGl2ZXMoKTtcblxuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZVF1ZXJ5LmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25FcnJvckRpcmVjdGl2ZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybU1lc3NhZ2UoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2UucmVtb3ZlRW50cnkodGhpcyk7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21Gb3JtR3JvdXAoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZSAmJiAhIXRoaXMuY29udHJvbD8uY29udHJvbEludmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdW5kZXJseWluZyBmb3JtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkQ29udHJvbFxuICAgICAqL1xuICAgIHJlZ2lzdGVyRm9ybUZpZWxkQ29udHJvbChmb3JtRmllbGRDb250cm9sOiBGb3JtRmllbGRDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdGb3JtIGZpZWxkIGNhbiBjb250YWluIG9ubHkgb25lIEZvcm1GaWVsZENvbnRyb2wnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udHJvbCA9IGZvcm1GaWVsZENvbnRyb2wgYXMgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sO1xuXG4gICAgICAgIGZvcm1GaWVsZENvbnRyb2wuc3RhdGVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb250cm9sUHJvcGVydGllcygpO1xuICAgICAgICAgICAgLy8gbmVlZCB0byBjYWxsIGV4cGxpY2l0bHkgZGV0ZWN0Q2hhbmdlcygpIGluc3RlYWQgb2YgbWFya0ZvckNoZWNrIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIG1vZGlmaWVkIHZhbGlkYXRpb24gc3RhdGUgb2YgdGhlIGNvbnRyb2wgcGFzc2VzIG92ZXIgY2hlY2tlZCBwaGFzZVxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCdzdGF0ZUNoYW5nZXMnKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFcnJvcnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBVSSB3aGVuIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2w/Lm5nQ29udHJvbD8udmFsdWVDaGFuZ2VzKSB7XG4gICAgICAgICAgICBmb3JtRmllbGRDb250cm9sLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCd2YWx1ZUNoYW5nZXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtRmllbGRDb250cm9sLm5nQ29udHJvbC5jb250cm9sO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNSZXF1aXJlZFZhbGlkYXRvciA9XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JzLmluY2x1ZGVzKFZhbGlkYXRvcnMucmVxdWlyZWQpIHx8IHRoaXMudmFsaWRhdG9ycy5pbmNsdWRlcyhWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICFoYXNSZXF1aXJlZFZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgZm9ybSBjb250cm9sIGlzIGRpc2FibGVkLCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZXJlIGlzIGEgY2FzZSB3aGVuIGEgXCJmb3JtLWdyb3VwXCIgaW5pdGlhbCBzdGF0ZSBpcyBWQUxJRCxcbiAgICAgICAgICAgICAqIGFuZCBvbiB0aGUgbmV4dCBsb29wIGEgY2hpbGQgZm9ybS1maWxlZCBleHRlbmRzIGl0IGFuZCBtYWtlXG4gICAgICAgICAgICAgKiB0aGUgZm9ybS1ncm91cCBJTlZBTElELlxuICAgICAgICAgICAgICogSW4gc3VjaCBjYXNlIHdlIGdldCB0aGUgZXJyb3JcbiAgICAgICAgICAgICAqIFwiRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci4gUHJldmlvdXMgdmFsdWUgaXMgbmctdmFsaWQsIGN1cnJlbnQgdmFsdWUgaXMgbmctaW52YWxpZFwiLlxuICAgICAgICAgICAgICogVG8gZml4IGl0IHdlIGhhdmUgdG8gcG9zdHBvbmUgYWRkaW5nIGZvcm0tZmllbGQgdmFsaWRhdG9yc1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZSh0aGlzLnZhbGlkYXRvcnMpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2FkZENvbnRyb2xUb0Zvcm1Hcm91cChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LmNvbnRyb2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5yZWdpc3RlciB1bmRlcmx5aW5nIGZvcm0gY29udHJvbFxuICAgICAqIEBwYXJhbSBmb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgdW5yZWdpc3RlckZvcm1GaWVsZENvbnRyb2woZm9ybUZpZWxkQ29udHJvbDogRm9ybUZpZWxkQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbCAhPT0gdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3JlbW92ZUNvbnRyb2xGcm9tRm9ybUdyb3VwKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR3JvdXBzXG4gICAgICovXG4gICAgZ3JvdXBFcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFF1ZXVlIHRhc2sgYmVjYXVzZSBmaXJpbmcgaXQgcmlnaHQgYXdheSBtYXkgY2F1c2UgZXJyb3Igd2l0aCBzaG93aW5nIGVtcHR5IG1lc3NhZ2UuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkRXJyb3JzID0gW107XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/Lm5nQ29udHJvbD8uZXJyb3JzO1xuICAgICAgICAgICAgaWYgKCFlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXJyb3JEaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3JzW2RpcmVjdGl2ZS5lcnJvcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZEVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JzW2RpcmVjdGl2ZS5lcnJvcl1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnNDaGFuZ2UkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHByaW9yaXRpemVkIGNvbnRyb2wgc3RhdGUgYmFzZWQgb24gdGhlIGVycm9yIHR5cGVzIGl0IGhhcy5cbiAgICAgKi9cbiAgICBnZXRQcmlvcml0eVN0YXRlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAodGhpcy5ncm91cGVkRXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzKCkgPyAnZXJyb3InIDogJ2RlZmF1bHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldEZvcm1TdGF0ZSh0aGlzLmdyb3VwZWRFcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IuZGlyZWN0aXZlLnR5cGUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGVycm9yIGRpcmVjdGl2ZXMuXG4gICAgICovXG4gICAgc2V0RXJyb3JEaXJlY3RpdmVzKGRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGb3JtRXJyb3I+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAoIWRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc1N1YnNjcmlwdGlvbiA9IGRpcmVjdGl2ZXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzID0gZGlyZWN0aXZlcy50b0FycmF5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgY29udGVudCBvZiB0aGUgcHJvdmlkZWQgaGludCBpcyBhIHN0cmluZy5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaXNTdHJpbmdIaW50KGhpbnRPcHRpb25zOiBIaW50Q29udGVudCk6IGhpbnRPcHRpb25zIGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaGludE9wdGlvbnMgPT09ICdzdHJpbmcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0ZW5zIHRvIGZvcm0gbWVzc2FnZSBjb21wb25lbnQgY2hhbmdlcyBhbmQgcGFzc2VzIGl0cyBpbnN0YW5jZSB0byB0aGUgZm9ybSBjb250cm9sIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0Zvcm1NZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnB1dE1lc3NhZ2VHcm91cENtcC5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX2lucHV0TWVzc2FnZUdyb3VwQ21wLmZpcnN0KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sIS5mb3JtTWVzc2FnZSA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVFcnJvckhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2VkaXRhYmxlICYmXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wgJiZcbiAgICAgICAgICAgIHRoaXMuX2hhc1ZhbGlkYXRvcnMoKSAmJlxuICAgICAgICAgICAgIXRoaXMuaTE4U3RyaW5ncyAmJlxuICAgICAgICAgICAgdGhpcy5lcnJvckRpcmVjdGl2ZXMubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0aW9uIHN0cmluZ3MgYXJlIHJlcXVpcmVkIGZvciB0aGUgYW55IHByb3ZpZGVkIHZhbGlkYXRpb25zLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYXNWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzICYmIHRoaXMudmFsaWRhdG9ycy5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBZGQgRm9ybUZpZWxkIHRvIEZvcm1Hcm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgX2FkZFRvRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyIHx8IHRoaXMuZm9ybUZpZWxkR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLmFkZEZvcm1GaWVsZCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVtb3ZlIEZvcm1GaWVsZCBmcm9tIEZvcm1Hcm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUZyb21Gb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5yZW1vdmVGb3JtRmllbGQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFkZCBGb3JtQ29udHJvbCBmcm9tIEZvcm1Hcm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgX2FkZENvbnRyb2xUb0Zvcm1Hcm91cChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lciB8fCAhIXRoaXMuZm9ybUZpZWxkR3JvdXA/LmZvcm1OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIuYWRkRm9ybUNvbnRyb2wodGhpcy5pZCwgY29udHJvbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlbW92ZSBGb3JtQ29udHJvbCBmcm9tIEZvcm1Hcm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlbW92ZUNvbnRyb2xGcm9tRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIucmVtb3ZlRm9ybUNvbnRyb2wodGhpcy5pZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE5lZWQgdG8gYmUgYWJsZSB0byBzZXQgdGhlc2UgcHJvcGVydGllcyBvbiBldmVyeSBsZXZlbC5cbiAgICAgKiAgLSBHbG9iYWwgRm9ybUdyb3VwIExldmVsIGFzIHdlbGwgZWFjaCBmaWVsZFxuICAgICAqXG4gICAgICogIFRvZG86IHVzZSBtb3JlIGVsZWdhbnQgd2F5IHRvIHNldCB0aGVzZSBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sICYmIHRoaXMuX2VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuaWQgPSB0aGlzLmlkO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHRoaXMuY29sdW1uTGF5b3V0LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTGF5b3V0ID0gbm9ybWFsaXplZDtcbiAgICAgICAgICAgIHRoaXMuX3NDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydTJ107XG4gICAgICAgICAgICB0aGlzLl9tZENvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ00nXTtcbiAgICAgICAgICAgIHRoaXMuX2xnQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnTCddO1xuICAgICAgICAgICAgdGhpcy5feGxDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydYTCddO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxheW91dChjdXJyZW50QnJlYWtpbmdQb2ludE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRCcmVha2luZ1BvaW50TmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbiA9IHRoaXMuX3NDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbiA9IHRoaXMuX21kQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9sZ0NvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnWEwnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbiA9IHRoaXMuX3hsQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbiA9IHRoaXMuX3hsQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCBjb2x1bW4gY2hhbmdlLCBzbyBmb3JtLWdyb3VwIGtub3dzIGl0IGFuZCByZS1hcnJhbmdlcyB0aGUgZmllbGRzXG4gICAgICAgIHRoaXMub25Db2x1bW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUhpbnRPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBwbGFjZW1lbnQgaXMgaGVyZSBzZXQgdXAgYmVjYXVzZSBoaW50UGxhY2VtZW50IGlzIGRlcHJlY2F0ZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdzdHJpbmcnIHx8IHRoaXMuaGludCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLmhpbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuaGludCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuaGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlcyA9IHRoaXMuX2Vycm9yRGlyZWN0aXZlUXVlcnkudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyLmFkZChcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuZGV0ZWN0Q2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjcmVuZGVyZXI+XG4gICAgPGRpdiBbaG9yaXpvbnRhbF09XCJ0cnVlXCIgZmQtZm9ybS1pdGVtIGNsYXNzPVwiZmQtcm93XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgICAgICNsYWJlbENvbFxuICAgICAgICAgICAgW2NsYXNzXT1cIl9sYWJlbENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vTGFiZWxMYXlvdXRcIlxuICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiX2NvbnRyb2xFeHRyYXNIZWlnaHRQeFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3aXRoRm9ybU1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdhcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgW2lkXT1cIidmZHAtZm9ybS1oaW50LScgKyBpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdHJpbmdIaW50KGhpbnRPcHRpb25zLmNvbnRlbnQpOyBlbHNlIGhpbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAge3sgaGludE9wdGlvbnMuY29udGVudCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNoaW50VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShoaW50T3B0aW9ucy5jb250ZW50KVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN3aXRoRm9ybU1lc3NhZ2U+XG4gICAgPGZkcC1pbnB1dC1tZXNzYWdlLWdyb3VwXG4gICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgW2NsYXNzXT1cIl9maWVsZENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0cmlnZ2VySXRlbT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXJyb3JzKCkgJiYgZ3JvdXBlZEVycm9ycy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlICpuZ0Zvcj1cImxldCBlcnJvciBvZiBncm91cGVkRXJyb3JzXCIgW3R5cGVdPVwiZXJyb3IuZGlyZWN0aXZlLnR5cGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nSWZdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWYgJiYgZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdJZl09XCJlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSAqbmdJZj1cImdyb3VwZWRFcnJvcnMubGVuZ3RoID09PSAwICYmIGhhc0Vycm9ycygpICYmIGkxOFN0cmluZ3NcIiB0eXBlPVwiZXJyb3JcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpMThTdHJpbmdzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtZm9ybS1tZXNzYWdlPlxuICAgIDwvZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubmVyRXJyb3JSZW5kZXJlcnM+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Vycm9ycygpICYmIGdyb3VwZWRFcnJvcnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlcnJvciBvZiBncm91cGVkRXJyb3JzXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdJZl09XCJlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWYgJiYgZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ0lmXT1cImVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDAgJiYgaGFzRXJyb3JzKCkgJiYgaTE4U3RyaW5nc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaTE4U3RyaW5nczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbnRyb2w/Lm5nQ29udHJvbD8uZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhpbnRUYXJnZXQgPT09ICdsYWJlbCc7IGVsc2Ugd2l0aG91dEhpbnRcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLScgKyBpZFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiZWRpdGFibGUgJiYgcmVxdWlyZWRcIlxuICAgICAgICAgICAgZmQtZm9ybS1sYWJlbFxuICAgICAgICAgICAgW2lubGluZUhlbHBDb250ZW50XT1cImhpbnRPcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBCb2R5UGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBsYWNlbWVudCB8fCAndG9wJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscFBsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wb3NpdGlvbiB8fCAnYWZ0ZXInXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwR2x5cGhdPVwiaGludE9wdGlvbnMuZ2x5cGggfHwgJydcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBUcmlnZ2Vyc109XCJoaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgIFthbGlnbkxhYmVsRW5kXT1cIiEhKGlzSG9yaXpvbnRhbCQgfCBhc3luYylcIlxuICAgICAgICAgICAgW2NvbG9uXT1cImNvbG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lkXT1cIidmZHAtZm9ybS1sYWJlbC1jb250ZW50LScgKyBpZFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aG91dEhpbnQ+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgW2lkXT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImVkaXRhYmxlICYmIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgIFtjb2xvbl09XCJjb2xvblwiXG4gICAgICAgICAgICBbYWxpZ25MYWJlbEVuZF09XCIhIShpc0hvcml6b250YWwkIHwgYXN5bmMpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lkXT1cIidmZHAtZm9ybS1sYWJlbC1jb250ZW50LScgKyBpZFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2dhcFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoaW50VGFyZ2V0ID09PSAnaW5wdXQnICYmIGhpbnRPcHRpb25zLmNvbnRlbnQ7IGVsc2Ugd2l0aG91dEhpbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNvbCBmZC1mb3JtLWZpZWxkLWlubGluZS1oZWxwLWNvbnRhaW5lclwiIFtjbGFzc109XCJfZ2FwQ29sdW1uTGF5b3V0Q2xhc3NcIj5cbiAgICAgICAgICAgIDxzcGFuIGZkLWxpbmsgW3VuZGVjb3JhdGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgICAgICAgICBbZmQtaW5saW5lLWhlbHBdPVwiaGludE9wdGlvbnMuY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJoaW50T3B0aW9ucy5nbHlwaFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucGxhY2VtZW50IHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbdHJpZ2dlcnNdPVwiaGludE9wdGlvbnMudHJpZ2dlciB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZmQtaWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICN3aXRob3V0SGludD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNvbFwiIFtjbGFzc109XCJfZ2FwQ29sdW1uTGF5b3V0Q2xhc3NcIj48L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
1
2
|
import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
3
|
+
import { IconComponent } from '@fundamental-ngx/core/icon';
|
|
4
|
+
import { InlineHelpDirective } from '@fundamental-ngx/core/inline-help';
|
|
4
5
|
import { LinkComponent } from '@fundamental-ngx/core/link';
|
|
5
|
-
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@fundamental-ngx/core/icon";
|
|
8
|
-
import * as i2 from "@fundamental-ngx/core/inline-help";
|
|
9
7
|
export class FormGroupHeaderComponent {
|
|
10
8
|
/** Hint options */
|
|
11
9
|
get hintOptions() {
|
|
@@ -15,14 +13,14 @@ export class FormGroupHeaderComponent {
|
|
|
15
13
|
return;
|
|
16
14
|
}
|
|
17
15
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FormGroupHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FormGroupHeaderComponent, isStandalone: true, selector: "[fdp-form-group-header]", inputs: { fieldGroup: "fieldGroup" }, host: { properties: { "class.fd-form-group__header": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'before'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<h6 class=\"fd-form-group__header-text\">\n {{ fieldGroup?.label }}\n</h6>\n\n<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'after'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<ng-template #inlineHelpRef>\n <span *ngIf=\"hintOptions\" fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "
|
|
16
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FormGroupHeaderComponent, isStandalone: true, selector: "[fdp-form-group-header]", inputs: { fieldGroup: "fieldGroup" }, host: { properties: { "class.fd-form-group__header": "true" } }, ngImport: i0, template: "<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'before'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<h6 class=\"fd-form-group__header-text\">\n {{ fieldGroup?.label }}\n</h6>\n\n<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'after'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<ng-template #inlineHelpRef>\n <span *ngIf=\"hintOptions\" fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
19
17
|
}
|
|
20
18
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FormGroupHeaderComponent, decorators: [{
|
|
21
19
|
type: Component,
|
|
22
20
|
args: [{ selector: '[fdp-form-group-header]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
23
21
|
'[class.fd-form-group__header]': 'true'
|
|
24
|
-
}, standalone: true, imports: [NgIf, NgTemplateOutlet, LinkComponent,
|
|
22
|
+
}, standalone: true, imports: [NgIf, NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective], template: "<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'before'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<h6 class=\"fd-form-group__header-text\">\n {{ fieldGroup?.label }}\n</h6>\n\n<ng-container *ngIf=\"fieldGroup && hintOptions?.position === 'after'\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<ng-template #inlineHelpRef>\n <span *ngIf=\"hintOptions\" fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n</ng-template>\n" }]
|
|
25
23
|
}], propDecorators: { fieldGroup: [{
|
|
26
24
|
type: Input
|
|
27
25
|
}] } });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWdyb3VwLWhlYWRlci9mb3JtLWdyb3VwLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZ3JvdXAtaGVhZGVyL2Zvcm0tZ3JvdXAtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQWdCM0QsTUFBTSxPQUFPLHdCQUF3QjtJQUtqQyxtQkFBbUI7SUFDbkIsSUFBSSxXQUFXO1FBQ1gsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1NBQ3RDO1FBRUQsT0FBTztJQUNYLENBQUM7OEdBWlEsd0JBQXdCO2tHQUF4Qix3QkFBd0IsMExDckJyQyw4MUJBd0JBLDRDRExjLElBQUksNkZBQUUsZ0JBQWdCLG9KQUFFLGFBQWEsa0pBQUUsYUFBYSwwSUFBRSxtQkFBbUI7OzJGQUUxRSx3QkFBd0I7a0JBWnBDLFNBQVM7K0JBRUkseUJBQXlCLG1CQUVsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLCtCQUErQixFQUFFLE1BQU07cUJBQzFDLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUM7OEJBS3BGLFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbmxpbmVIZWxwRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lubGluZS1oZWxwJztcbmltcG9ydCB7IExpbmtDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGluayc7XG5pbXBvcnQgeyBIaW50T3B0aW9ucyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IEZpZWxkR3JvdXAgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2ZkcC1mb3JtLWdyb3VwLWhlYWRlcl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdyb3VwLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuZmQtZm9ybS1ncm91cF9faGVhZGVyXSc6ICd0cnVlJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTGlua0NvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgSW5saW5lSGVscERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwSGVhZGVyQ29tcG9uZW50IHtcbiAgICAvKiogRmllbGRzIEdyb3VwICovXG4gICAgQElucHV0KClcbiAgICBmaWVsZEdyb3VwOiBOdWxsYWJsZTxGaWVsZEdyb3VwPjtcblxuICAgIC8qKiBIaW50IG9wdGlvbnMgKi9cbiAgICBnZXQgaGludE9wdGlvbnMoKTogSGludE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5maWVsZEdyb3VwPy5oaW50T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRHcm91cC5oaW50T3B0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRHcm91cCAmJiBoaW50T3B0aW9ucz8ucG9zaXRpb24gPT09ICdiZWZvcmUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUhlbHBSZWZcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48aDYgY2xhc3M9XCJmZC1mb3JtLWdyb3VwX19oZWFkZXItdGV4dFwiPlxuICAgIHt7IGZpZWxkR3JvdXA/LmxhYmVsIH19XG48L2g2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRHcm91cCAmJiBoaW50T3B0aW9ucz8ucG9zaXRpb24gPT09ICdhZnRlcidcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lSGVscFJlZlwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjaW5saW5lSGVscFJlZj5cbiAgICA8c3BhbiAqbmdJZj1cImhpbnRPcHRpb25zXCIgZmQtbGluayBbdW5kZWNvcmF0ZWRdPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgW3N0eWxlLnZlcnRpY2FsLWFsaWduXT1cIidtaWRkbGUnXCJcbiAgICAgICAgICAgIFtmZC1pbmxpbmUtaGVscF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJoaW50T3B0aW9ucy5nbHlwaFwiXG4gICAgICAgICAgICBbcGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBsYWNlbWVudCB8fCBudWxsXCJcbiAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJoaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID48L2ZkLWljb24+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|