ca-components 1.1.996 → 1.1.997
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ViewEncapsulation, } from '@angular/core';
|
|
2
2
|
import { Component, EventEmitter, Input, Output, Self, ViewChild, } from '@angular/core';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import { debounceTime, distinctUntilChanged, skip, Subject, takeUntil, } from 'rxjs';
|
|
@@ -798,11 +798,11 @@ export class CaInputDropdownComponent {
|
|
|
798
798
|
// Module
|
|
799
799
|
CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: NgbPopoverModule }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbModule }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i5.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "component", type: CaInputDropdownSvgtextTemplateComponent, selector: "app-ca-input-dropdown-svgtext-template", inputs: ["options", "activeItem", "searchText", "inputConfig", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownSvgtextDispatchTemplateComponent, selector: "app-ca-input-dropdown-svgtext-dispatch-template", inputs: ["options", "activeItem", "searchText", "inputConfig", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownGroupsComponent, selector: "app-ca-input-dropdown-groups", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownMultiselectComponent, selector: "app-ca-input-dropdown-multiselect", inputs: ["options", "lastActiveMultiselectItem", "searchText", "label", "inputHoveredItem"], outputs: ["onMultiselectSelect"] }, { kind: "component", type: CaInputDropdownLabelsComponent, selector: "app-ca-input-dropdown-labels", inputs: ["options", "activeItem", "searchText", "inputConfig", "labelMode", "canAddNew", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownLoadBrokerComponent, selector: "app-ca-input-dropdown-load-broker", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownLoadDispatchesTtdComponent, selector: "app-ca-input-dropdown-load-dispatches-ttd", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownLoadDispatcherComponent, selector: "app-ca-input-dropdown-load-dispatcher", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownLoadBrokerContactComponent, selector: "app-ca-input-dropdown-load-broker-contact", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownLoadBrokerShipperComponent, selector: "app-ca-input-dropdown-load-shipper", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownTextCounterComponent, selector: "app-ca-input-dropdown-text-counter", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownDoubleTextTemplateComponent, selector: "app-ca-input-dropdown-double-text-template", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownTripleTextTemplateComponent, selector: "app-ca-input-dropdown-triple-text-template", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownDefaultTemplateComponent, selector: "app-ca-input-dropdown-default-template", inputs: ["options", "activeItem", "searchText", "inputConfig", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownFuelFranchiseComponent, selector: "app-ca-input-dropdown-fuel-franchise", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["toggleNestedList", "onActiveItem", "onActiveItemGroup"] }, { kind: "component", type: CaInputDropdownDispatchComponent, selector: "app-ca-input-dropdown-dispatch", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownDetailsTemplateComponent, selector: "app-ca-input-dropdown-details-template", inputs: ["options", "activeItem", "searchText", "sort", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownPayrollTrucksComponent, selector: "app-ca-input-dropdown-payroll-trucks", inputs: ["options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: CaInputDropdownSvgTemplateComponent, selector: "app-ca-input-dropdown-svg-template", inputs: ["dropdownWithImage", "options", "activeItem", "searchText", "label", "inputHoveredItem"], outputs: ["onActiveItem"] }, { kind: "component", type: InputTestComponent, selector: "ca-input-test", inputs: ["parentControl", "selectedDropdownLabelColor", "template", "incorrectValue", "inputConfig", "activeItem"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaInputDropdownLoadDispatchesTtdComponentItem, selector: "app-ca-input-dropdown-load-dispatches-ttd-item", inputs: ["showNoResulst", "option", "index", "activeItem", "searchText", "label"] }, { kind: "component", type: CaInputDropdownLoadBrokerComponentItem, selector: "app-ca-input-dropdown-load-broker-item", inputs: ["option", "searchText", "inOption", "label"] }, { kind: "component", type: CaInputDropdownLoadBrokerShipperItemComponent, selector: "app-ca-input-dropdown-load-shipper-item", inputs: ["option", "searchText", "activeItem", "inOption", "label"] }, { kind: "component", type: CaInputDropdownLoadDispatcherItemComponent, selector: "app-ca-input-dropdown-load-dispatcher-item", inputs: ["option", "noResult", "activeItem", "searchText", "label"] }, { kind: "pipe", type:
|
|
800
800
|
// Pipes
|
|
801
|
-
FormControlPipe, name: "formControl" }, { kind: "pipe", type: DropdownCountPipe, name: "caDropdownCount" }, { kind: "pipe", type: InputDropdownMultiselectClassPipe, name: "inputDropdownMultiselectClass" }, { kind: "pipe", type: DropdownOptionsPipe, name: "caDropdownOptionsPipe" }, { kind: "pipe", type: InputDropdownGetIconsPipe, name: "inputDropdownGetIcons" }], animations: [inputDropdownAnimation('showHideDropdownOptions')],
|
|
801
|
+
FormControlPipe, name: "formControl" }, { kind: "pipe", type: DropdownCountPipe, name: "caDropdownCount" }, { kind: "pipe", type: InputDropdownMultiselectClassPipe, name: "inputDropdownMultiselectClass" }, { kind: "pipe", type: DropdownOptionsPipe, name: "caDropdownOptionsPipe" }, { kind: "pipe", type: InputDropdownGetIconsPipe, name: "inputDropdownGetIcons" }], animations: [inputDropdownAnimation('showHideDropdownOptions')], encapsulation: i0.ViewEncapsulation.None }); }
|
|
802
802
|
}
|
|
803
803
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDropdownComponent, decorators: [{
|
|
804
804
|
type: Component,
|
|
805
|
-
args: [{ selector: 'app-ca-input-dropdown', standalone: true, encapsulation: ViewEncapsulation.None, providers: [FormControlPipe],
|
|
805
|
+
args: [{ selector: 'app-ca-input-dropdown', standalone: true, encapsulation: ViewEncapsulation.None, providers: [FormControlPipe], animations: [inputDropdownAnimation('showHideDropdownOptions')], imports: [
|
|
806
806
|
// Module
|
|
807
807
|
CommonModule,
|
|
808
808
|
FormsModule,
|
|
@@ -916,4 +916,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
916
916
|
type: Output,
|
|
917
917
|
args: ['searchInputEvent']
|
|
918
918
|
}] } });
|
|
919
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUd2QixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osT0FBTyxFQUNQLFNBQVMsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUVkLFlBQVk7QUFDWixPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDWixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLFlBQVk7QUFDWixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLdEQsYUFBYTtBQUNiLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLG9GQUFvRixDQUFDO0FBQ3hJLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLG9HQUFvRyxDQUFDO0FBQy9KLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDRGQUE0RixDQUFDO0FBQ3BKLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHNG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dEIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFZSxlQUFlO3NCQUFwQyxNQUFNO3VCQUFDLFlBQVk7Z0JBRUcsZ0JBQWdCO3NCQUF0QyxNQUFNO3VCQUFDLGFBQWE7Z0JBRU0sZUFBZTtzQkFBekMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBR0csZ0JBQWdCO3NCQUEzQyxNQUFNO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIHNraXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuXG4vLyBib290c3RyYXBcbmltcG9ydCB7XG4gICAgTmdiUG9wb3ZlcixcbiAgICBOZ2JQb3BvdmVyTW9kdWxlLFxuICAgIE5nYk1vZHVsZSxcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG4vLyBhbmltYXRpb25cbmltcG9ydCB7IGlucHV0RHJvcGRvd25BbmltYXRpb24gfSBmcm9tICcuL2FuaW1hdGlvbnMnO1xuXG4vLyBjb25maWdcbmltcG9ydCB7IElDYUlucHV0IH0gZnJvbSAnLi4vY2EtaW5wdXQvY29uZmlnJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmctdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Tdmd0ZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Tdmd0ZXh0RGlzcGF0Y2hUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1ncm91cHMvY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdC9jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTGFiZWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxhYmVscy9jYS1pbnB1dC1kcm9wZG93bi1sYWJlbHMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb250YWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItY29udGFjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25UZXh0Q291bnRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXIvY2EtaW5wdXQtZHJvcGRvd24tdGV4dC1jb3VudGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWRlZmF1bHQtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZGVmYXVsdC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRnVlbEZyYW5jaGlzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1mdWVsLWZyYW5jaGlzZS9jYS1pbnB1dC1kcm9wZG93bi1mdWVsLWZyYW5jaGlzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGlzcGF0Y2hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZGlzcGF0Y2gvY2EtaW5wdXQtZHJvcGRvd24tZGlzcGF0Y2guY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkRldGFpbHNUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kZXRhaWxzLXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blBheXJvbGxUcnVja3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3MvY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3MuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVzVHRkQ29tcG9uZW50SXRlbSB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLWl0ZW0nO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudEl0ZW0gfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLWl0ZW0vY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtLmNvbXBvbmVudCc7XG5cbi8vIHBpcGVzXG5pbXBvcnQgeyBGb3JtQ29udHJvbFBpcGUgfSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5pbXBvcnQge1xuICAgIERyb3Bkb3duQ291bnRQaXBlLFxuICAgIElucHV0RHJvcGRvd25HZXRJY29uc1BpcGUsXG4gICAgSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NQaXBlLFxufSBmcm9tICcuL3BpcGVzJztcblxuLy8gbW9kdWxlc1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcblxuLy8gZGlyZWN0aXZlc1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0NvbnRyb2wsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBtb2RlbHNcbmltcG9ydCB7IENvbW1hbmRzRXZlbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uTW9kZWwgfSBmcm9tICcuL21vZGVscy9pbnB1dC1kcm9wZG93bi1vcHRpb24ubW9kZWwnO1xuXG4vLyBzZXJ2aWNlc1xuaW1wb3J0IHsgSW1hZ2VCYXNlNjRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1hZ2UtYmFzZTY0LnNlcnZpY2UnO1xuXG4vLyBzdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dERyb3Bkb3duU3ZnUm91dGVzIH0gZnJvbSAnLi91dGlscy9zdmctcm91dGVzL2lucHV0LWRyb3Bkb3duLXN2Zy1yb3V0ZXMnO1xuXG4vLyBlbnVtc1xuaW1wb3J0IHsgRHJvcGRvd25TdHJpbmdFbnVtLCBEcm9wZG93blRlbXBsYXRlVHlwZUVudW0gfSBmcm9tICcuL2VudW1zJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCB7IElucHV0VGVzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0L2lucHV0LXRlc3QvaW5wdXQtdGVzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FMb2FkU3RhdHVzU3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtbG9hZC1zdGF0dXMtc3RyaW5nL2NhLWxvYWQtc3RhdHVzLXN0cmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jYS1wcm9maWxlLWltYWdlL2NhLXByb2ZpbGUtaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uc1BpcGUgfSBmcm9tICcuL3BpcGVzL2Ryb3Bkb3duLW9wdGlvbnMucGlwZSc7XG5pbXBvcnQgeyBFdmVudElucHV0TWFuYWdlciB9IGZyb20gJy4uL2NhLWlucHV0L2Jhc2UtY2xhc3Nlcy9jYS1pbnB1dC1ldmVudC1tYW5hZ2VyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtaW5wdXQtZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbRm9ybUNvbnRyb2xQaXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBhbmltYXRpb25zOiBbaW5wdXREcm9wZG93bkFuaW1hdGlvbignc2hvd0hpZGVEcm9wZG93bk9wdGlvbnMnKV0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBNb2R1bGVcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gQ29tcG9uZW50XG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dERpc3BhdGNoVGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxhYmVsc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25QYXlyb2xsVHJ1Y2tzQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudEl0ZW0sXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb21wb25lbnRJdGVtLFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgLy8gUGlwZXNcbiAgICAgICAgRm9ybUNvbnRyb2xQaXBlLFxuICAgICAgICBEcm9wZG93bkNvdW50UGlwZSxcbiAgICAgICAgSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NQaXBlLFxuICAgICAgICBEcm9wZG93bk9wdGlvbnNQaXBlLFxuICAgICAgICBJbnB1dERyb3Bkb3duR2V0SWNvbnNQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhSW5wdXREcm9wZG93bkNvbXBvbmVudFxuICAgIGltcGxlbWVudHNcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBPbkRlc3Ryb3ksXG4gICAgICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgICBBZnRlclZpZXdJbml0XG57XG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dFJlZiE6IElucHV0VGVzdENvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCd0MicpIHB1YmxpYyBwb3BvdmVyUmVmITogTmdiUG9wb3ZlcjtcbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bkNvbXBvbmVudFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGRyb3Bkb3duQ29tcG9uZW50UmVmOiBhbnk7XG5cbiAgICAvLyBMYWJlbCBpbnB1dCAtIHZhbHVlIHRoYXQgd2lsbCBiZSBzaG93ZWQgaW5zaWRlIGlucHV0XG4gICAgQElucHV0KCkgbGFiZWwhOiBrZXlvZiBPcHRpb25Nb2RlbDtcblxuICAgIC8vIG9wdGlvblZhbHVlIGlucHV0IC0ga2V5IHZhbHVlIGZyb20gb2JqZWN0IC0gRW1pdCB0aGlzIGlmIHlvdSB3YW50IHRvIHNldCB3aG9sZSBvYmplY3RcbiAgICBASW5wdXQoKSBvcHRpb25WYWx1ZSE6IHN0cmluZztcblxuICAgIGlucHV0SG92ZXJlZEl0ZW06IG51bWJlciA9IC0xO1xuICAgIGRyb3BEb3duSXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBkaWZmZXJlbnQgdGVtcGxhdGVzIGZvciBib2R5IHJlbmRlcmluZ1xuICAgIHB1YmxpYyBfdGVtcGxhdGUhOiBzdHJpbmc7XG4gICAgX2NhbkFkZE5ldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2V0IHRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAgICAgLy8gaWYgKHZhbHVlID09PSAnZGV0YWlscy10ZW1wbGF0ZScgJiYgdGhpcy5pc0RldGFpbHNQYWdlcykge1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAvLyAgICAgICAgICk7XG4gICAgICAgIC8vICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSk7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG9wdGlvbiB8fCBudWxsO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5zZXRWYWx1ZShvcHRpb24/Lm5hbWUpO1xuXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgdGltZW91dDIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBtdWx0aXNlbGVjdFRlbXBsYXRlITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gICAgQElucHV0KCkgc2V0IGNhbkFkZE5ldyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jYW5BZGROZXcgPSB2YWx1ZTtcbiAgICB9IC8vIEFERCBORVcgaXRlbSBpbiBvcHRpb25zXG5cbiAgICBwdWJsaWMgZ2V0IGNhbkFkZE5ldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbkFkZE5ldztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBjYW5PcGVuTW9kYWwhOiBib29sZWFuOyAvLyBvcGVuIG1vZGFsIHdpdGggQUREIE5FVyBidXR0b25cblxuICAgIC8vIHNvcnQtdGVtcGxhdGUgZm9yIGRpZmZlcmVudCBvcHRpb25zXG4gICAgcHVibGljIF9zb3J0ITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNldCBzb3J0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc29ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gICAgfVxuXG4gICAgLy8gY3VycmVudGx5IGFjdGl2ZSBpdGVtXG4gICAgcHVibGljIF9hY3RpdmVJdGVtITogT3B0aW9uTW9kZWwgfCBudWxsO1xuICAgIEBJbnB1dCgpIHNldCBhY3RpdmVJdGVtKHZhbHVlOiBPcHRpb25Nb2RlbCB8IG51bGwpIHtcbiAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIC8vICAgICBibGFja0lucHV0OiB0cnVlLFxuICAgICAgICAvLyB9O1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gdmFsdWU7XG5cbiAgICAgICAgLy8gV2l0aCBhZGRyZXNzXG4gICAgICAgIC8vIGlmIChcbiAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAmJlxuICAgICAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2FkZHJlc3MnKSAmJlxuICAgICAgICAvLyAgICAgdGhpcy5fYWN0aXZlSXRlbVxuICAgICAgICAvLyApIHtcbiAgICAgICAgLy8gICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9hY3RpdmVJdGVtKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIC8vICAgICAgICAgICAgIHZhbHVlPy5hZGRyZXNzID8gdmFsdWU/LmFkZHJlc3MgOiBudWxsXG4gICAgICAgIC8vICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAvLyAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmhpZGVDb2xvclZhbGlkYXRpb25zKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyB9O1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8vIFdpdGhvdXQgYWRkcmVzc1xuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEucGF0Y2hWYWx1ZShcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHZhbHVlPy5udW1iZXJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICA/IHZhbHVlPy5udW1iZXJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICA6IHZhbHVlPy5uYW1lXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlPy5uYW1lXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA6ICh2YWx1ZT8uY29tcGFueU5hbWUgPz8gbnVsbClcbiAgICAgICAgLy8gICAgICAgICAgICAgKTtcblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaGlkZUNvbG9yVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vICAgICBibGFja0lucHV0OiBmYWxzZSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIH07XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW07XG4gICAgfVxuXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbUNvbG9yITogT3B0aW9uTW9kZWwgfCBudWxsOyAvLyBjdXJyZW50bHkgYWN0aXZlIGNvbG9yIGluIGRyb3Bkb3duXG4gICAgQElucHV0KCkgbGFiZWxNb2RlITogJ0xhYmVsJyB8ICdDb2xvcic7XG5cbiAgICAvLyB3aGVuIHNlbmQgU1ZHLCBwbGVhc2UgcHJlbW1hcGVkIG9iamVjdDogYWRkICdmb2xkZXInIHwgJ3N1YmZvbGRlcidcbiAgICBwdWJsaWMgX29wdGlvbnM6IE9wdGlvbk1vZGVsW10gPSBbXTtcbiAgICBASW5wdXQoKSBzZXQgb3B0aW9ucyh2YWx1ZXM6IE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHZhbHVlcykgdGhpcy5fb3B0aW9ucyA9IFsuLi52YWx1ZXNdO1xuICAgIH1cblxuICAgIC8vIE11bHRpU2VsZWN0IFNlbGVjdGVkIEl0ZW1zIEZyb20gQmFja2VuZFxuICAgIEBJbnB1dCgpIHNldCBwcmVsb2FkTXVsdGlzZWxlY3RJdGVtcyh2YWx1ZXM6IE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXModGhpcy5pbnB1dENvbmZpZy5sYWJlbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlzZWxlY3RTZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBpc0RldGFpbHNQYWdlcyE6IGJvb2xlYW47IC8vIG9ubHkgZm9yIGRldGFpbHMgcGFnZXNcbiAgICBASW5wdXQoKSBpc0luY29ycmVjdFZhbHVlITogYm9vbGVhbjsgLy8gYXBwbGljYW50IHJldmlldyBvcHRpb25cbiAgICBASW5wdXQoKSBpc0FkZHJlc3NEcm9wZG93biE6IGJvb2xlYW47IC8vIG9ubHkgZm9yIGFkZHJlc3MgZHJvcGRvd25cblxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW06IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbCB8IG51bGw+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbCB8IG51bGw+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbFtdIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsW10gfCBudWxsPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1Db2xvcjogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRMYWJlbE1vZGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgQE91dHB1dCgpIGNsb3NlRHJvcGRvd246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2F2ZUl0ZW06IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGRhdGE6IE9wdGlvbk1vZGVsIHwgbnVsbDtcbiAgICAgICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogT3B0aW9uTW9kZWwgfCBudWxsOyBhY3Rpb246IHN0cmluZyB9PigpO1xuICAgIEBPdXRwdXQoKSBpbmNvcnJlY3RFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBwbGFjZWhvbGRlckljb25FdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoJ3BhZ2luYXRpb24nKSBwYWdpbmF0aW9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgQE91dHB1dCgnYWN0aXZlR3JvdXAnKSBhY3RpdmVHcm91cEV2ZW50OiBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWw+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbD4oKTtcbiAgICBAT3V0cHV0KCdjbGVhcklucHV0RXZlbnQnKSBjbGVhcklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoJ3NlYXJjaElucHV0RXZlbnQnKSBzZWFyY2hJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIC8vIGV2ZW50c1xuICAgIHB1YmxpYyBzZWFyY2hJbnB1dFRleHQgPSBuZXcgRXZlbnRJbnB1dE1hbmFnZXI8c3RyaW5nPihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEV2ZW50XG4gICAgKTtcblxuICAgIC8vIENvcHkgb2YgT3B0aW9uc1xuICAgIHB1YmxpYyBvcmlnaW5hbE9wdGlvbnM6IE9wdGlvbk1vZGVsW10gPSBbXTtcblxuICAgIC8vIFBhZ2luYXRpb25cbiAgICBwdWJsaWMgcGFnaW5hdGlvbk51bWJlcjogbnVtYmVyID0gMDtcblxuICAgIC8vIE11bHRpc2VsZWN0IGRyb3Bkb3duIG9wdGlvbnNcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3RJdGVtczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyBpc011bHRpU2VsZWN0SW5wdXRGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtdWx0aVNlbGVjdExhYmVsITogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtITogT3B0aW9uTW9kZWwgfCBudWxsO1xuXG4gICAgLy8gQWRkIG1vZGVcbiAgICBwdWJsaWMgaXNJbkFkZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIERyb3Bkb3duIG5hdmlnYXRpb24gd2l0aCBrZXlib2FyZFxuICAgIHByaXZhdGUgZHJvcGRvd25Qb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgICAvLyBEcm9wZG93biBDbGVhcnRpbWVvdXRcbiAgICBwdWJsaWMgY2xlYXJUaW1lb3V0RHJvcGRvd246IHN0cmluZyB8IG51bWJlciB8IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGhvdmVyaW5nSW5kZXghOiBudW1iZXI7XG4gICAgcHVibGljIGlucHV0RHJvcGRvd25TdmdSb3V0ZXMgPSBJbnB1dERyb3Bkb3duU3ZnUm91dGVzO1xuICAgIHB1YmxpYyBkcm9wZG93blRlbXBsYXRlVHlwZUVudW0gPSBEcm9wZG93blRlbXBsYXRlVHlwZUVudW07XG5cbiAgICAvLyBEZXN0cm95XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKSBwdWJsaWMgc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIHB1YmxpYyBpbWFnZUJhc2U2NFNlcnZpY2U6IEltYWdlQmFzZTY0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgZ2V0U3VwZXJDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5wdXRGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbiA9IHRoaXMuX29wdGlvbnMuZmluZChcbiAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvblt0aGlzLm9wdGlvblZhbHVlIGFzIGtleW9mIE9wdGlvbk1vZGVsXSA9PSB2YWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmluZE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGZpbmRPcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAgIHB1YmxpYyBvbkNoYW5nZShfOiBhbnkpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBNdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0TGFiZWwgPSB0aGlzLmlucHV0Q29uZmlnLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hUZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRUZXh0Lm5leHQoc2VhcmNoVGV4dCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH0sIDQ1MCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TY3JvbGxEcm9wZG93bihldmVudDogRXZlbnRUYXJnZXQgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCA9PT0gdGFyZ2V0LnNjcm9sbEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uTnVtYmVyICs9IDE7XG5cbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkV2ZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uTnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGl2ZUl0ZW0ob3B0aW9uOiBPcHRpb25Nb2RlbCwgZ3JvdXA/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jYW5PcGVuTW9kYWwgJiZcbiAgICAgICAgICAgIG9wdGlvbj8uW3RoaXMubGFiZWxdPy50b0xvd2VyQ2FzZSgpID09PSAnYWRkIG5ldydcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICBpZDogNzY1NSxcbiAgICAgICAgICAgICAgICBuYW1lOiBEcm9wZG93blN0cmluZ0VudW0uQUREX05FVyxcbiAgICAgICAgICAgICAgICBjYW5PcGVuTW9kYWw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBQcmV2ZW50IHVzZXIgdG8gcGljayBmcmFuY2hpc2UsIHdpdGhvdXQgZ3JvdXBcbiAgICAgICAgY29uc29sZS5sb2cob3B0aW9uLCBncm91cCwgdGhpcy5fdGVtcGxhdGUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJyAmJlxuICAgICAgICAgICAgb3B0aW9uPy5pc0ZyYW5jaGlzZSAmJlxuICAgICAgICAgICAgIWdyb3VwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpc2FibGUgdG8gcGlja2luZyBiYW5uZWQgb3IgZG51IHVzZXJcbiAgICAgICAgaWYgKG9wdGlvbj8uZG51IHx8IG9wdGlvbj8uYmFuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gUmVzdWx0XG4gICAgICAgIGlmIChvcHRpb24uaWQgPT09IDc2NTQgfHwgb3B0aW9uLmlkID09PSA3NjU2KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQUREIE5FV1xuICAgICAgICBlbHNlIGlmIChvcHRpb24uaWQgPT09IDc2NTUpIHtcbiAgICAgICAgICAgIC8vIE9wZW4gTmV3IE1vZGFsXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5PcGVuTW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHsgLi4ub3B0aW9uLCBjYW5PcGVuTW9kYWw6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXb3JrIHdpdGggY3VycmVudCBtb2RhbFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRHJvcERvd24gbGFiZWxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaXNFZGl0SW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0NvbG9yJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb3JtYWwgRHJvcGRvd25cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROZXdDb25maWcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGljayB0aGUgaXRlbVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDEpO1xuICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5zZWxlY3RlZERyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIERyb3Bkb3duIGxhYmVscyBvcHRpb24gc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygxMjIpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSA9PT0gJ0xhYmVsJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8uc2V0VmFsdWUob3B0aW9uLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdDb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtQ29sb3IgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db2xvci5lbWl0KHRoaXMuYWN0aXZlSXRlbUNvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb3JtYWwgRHJvcGRvd24gb3B0aW9uIHNlbGVjdGVkXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyg0NDUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnUm91dGluZ0FkZHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tLS0tLScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24/Lm51bWJlciA/IG9wdGlvbi5udW1iZXIgOiBvcHRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj8ubnVtYmVyID8gb3B0aW9uLm51bWJlciA6IG9wdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA/IG9wdGlvbi5uYW1lIDogb3B0aW9uLmJ1c2luZXNzTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVJZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ubWFya0FzRGlydHkoKTtcblxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGl2ZUl0ZW1Hcm91cChldmVudDogeyBvcHRpb246IE9wdGlvbk1vZGVsOyBncm91cDogYW55IH0pIHtcbiAgICAgICAgdGhpcy5vbkFjdGl2ZUl0ZW0oZXZlbnQub3B0aW9uLCBldmVudC5ncm91cCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSAtMTtcbiAgICAgICAgLy90aGlzLmlucHV0Q29uZmlnLnNlbGVjdGVkRHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUobnVsbCk7XG5cbiAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoJycpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQobnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyRHJvcGRvd25MYWJlbCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbUNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db2xvci5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0xhYmVsJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbW1hbmRFdmVudChldmVudDogQ29tbWFuZHNFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnRWRpdCBJbnB1dCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnQ29sb3InKTtcbiAgICAgICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ1RvZ2dsZSBEcm9wZG93bicpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnY29uZmlybScgJiYgZXZlbnQubW9kZSA9PT0gJ25ldycpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3SXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2NvbmZpcm0nICYmIGV2ZW50Lm1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnUGxhY2Vob2xkZXIgSWNvbiBFdmVudCcpIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJJY29uRXZlbnQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE5ld0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB7XG4gICAgICAgICAgICBpZDogcGFyc2VJbnQodXVpZHY0KCkpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlLFxuICAgICAgICB9O1xuICAgICAgICAvL3RoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlzVmlzaWJsZUNvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaXNGb2N1c0lucHV0ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHsgZGF0YTogdGhpcy5fYWN0aXZlSXRlbSwgYWN0aW9uOiAnbmV3JyB9KTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0xhYmVsJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzVG91Y2hlZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTdXBlckNvbnRyb2w/LnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbG9ySWQ6IHRoaXMuYWN0aXZlSXRlbUNvbG9yXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5hY3RpdmVJdGVtQ29sb3IuaWRcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2xvcklkLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2RlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sPy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgZGF0YTogdGhpcy5fYWN0aXZlSXRlbSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTmV3Q29uZmlnKCkge1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIGNvbW1hbmRzOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgZmlyc3RDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZmlybScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMzA3NGQzJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICBzdmc6IElucHV0RHJvcGRvd25TdmdSb3V0ZXMuc3BlY0NvbmZpcm1TdmcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWNvbmRDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMyZjJmMmYnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiBJbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2ZyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBvcG92ZXJSZWY/LmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5pc0luQWRkTW9kZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0RHJvcGRvd24gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNJbkFkZE1vZGUgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbmNvcnJlY3RJbnB1dChldmVudDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmluY29ycmVjdEV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpZGVudGl0eShpbmRleDogbnVtYmVyLCBpdGVtOiBPcHRpb25Nb2RlbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVOZXN0ZWRMaXN0KG9wdGlvbjogT3B0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbi5vcGVuKSB7XG4gICAgICAgICAgICBvcHRpb24ub3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiAoaXRlbS5vcGVuID0gZmFsc2UpKTtcblxuICAgICAgICBvcHRpb24ub3BlbiA9ICFvcHRpb24ub3BlbjtcblxuICAgICAgICBpZiAob3B0aW9uLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXBFdmVudC5lbWl0KG9wdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVySW5wdXQoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMucG9wb3ZlclJlZi5pc09wZW4oKSkgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24uZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gbGFiZWwgZHJvcGRvd25cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEcm9wZG93bkxhYmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3JtYWwgZHJvcGRvd25cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUhpZGRlbkRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmRyb3BEb3duSXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZHJvcGRvd25WYWx1ZSB8fCAnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVPcGVuRHJvcGRvd24oKSB7XG4gICAgICAgIHRoaXMuZHJvcERvd25Jc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93SGlkZURyb3Bkb3duKGFjdGlvbjogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gYWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlICE9PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBPdXRcbiAgICAgICAgICAgIC8vIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX3RlbXBsYXRlICE9PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5vcGVuKCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgICAgICAvLyAgICAgLy8gUHJldmVudCB1c2VyIHRvIHR5cGluZyBkdW1tbXkgZGF0YSBpZiBfYWN0aXZlSXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnNldFZhbHVlKHRoaXMuX2FjdGl2ZUl0ZW0ubmFtZSk7XG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lID09PSB0aGlzLmdldFN1cGVyQ29udHJvbCEudmFsdWVcbiAgICAgICAgICAgIC8vICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5fdGVtcGxhdGUgIT09ICdmdWVsLWZyYW5jaGlzZScpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIEluXG4gICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIC8vICAgICBwbGFjZWhvbGRlcjogdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgID8gdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8ubmFtZSxcbiAgICAgICAgICAgIC8vIH07XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5zZXRWYWx1ZShudWxsKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3ZlclJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbkFkZE1vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAgICAgICAgIC8vICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGFpbHMgcGFnZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jdXN0b21DbGFzcz8uaW5jbHVkZXMoJ2RldGFpbHMtcGFnZXMnKSAmJlxuICAgICAgICAgICAgIWFjdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQodGhpcy5fYWN0aXZlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZSxcbiAgICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICAgICAgZGF0YTogYW55O1xuICAgIH0pIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgZG93blxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25OYXZpZ2F0aW9uKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5hdmlnYXRlIHVwXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bk5hdmlnYXRpb24oLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlc3MgRXNjYXBlXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaW5wdXRDb25maWc/LmNvbW1hbmRzPy5hY3RpdmUpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaXNWaXNpYmxlQ29tbWFuZHMgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgICAgICAvLyAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgLy8gaWYgKCF0aGlzLmlucHV0Q29uZmlnLmhpZGVDb2xvclZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaXNFZGl0SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdDb2xvcicpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnBhdGNoVmFsdWUobnVsbCk7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc3MgJ2VudGVyJ1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZEl0ZW0gPVxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bkNvbXBvbmVudFJlZi5vcHRpb25zW3RoaXMuaW5wdXRIb3ZlcmVkSXRlbV1cbiAgICAgICAgICAgICAgICAgICAgOiB7IFt0aGlzLmxhYmVsXTogJycgfTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmNhbk9wZW5Nb2RhbCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbT8uW3RoaXMubGFiZWxdPy50b0xvd2VyQ2FzZSgpID09PSAnYWRkIG5ldydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBpZDogNzY1NSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogRHJvcGRvd25TdHJpbmdFbnVtLkFERF9ORVcsXG4gICAgICAgICAgICAgICAgICAgIGNhbk9wZW5Nb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuaXNPcGVuKCkpIHRoaXMucG9wb3ZlclJlZj8ub3BlbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy90aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgLy9yZXR1cm47XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zWzBdLmlkICE9PSA3NjU1ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9uc1swXS5pZCAhPT0gNzY1NFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbGV0IHNlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuX29wdGlvbnNbMF0/LmJ1c2luZXNzTmFtZVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgPyB0aGlzLl9vcHRpb25zWzBdPy5idXNpbmVzc05hbWVcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIDogdGhpcy5fb3B0aW9uc1swXT8ubmFtZTtcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9vcHRpb25zWzBdPy5udW1iZXJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgID8gdGhpcy5fb3B0aW9uc1swXT8ubnVtYmVyLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICA6IHRoaXMuX29wdGlvbnNbMF0ubmFtZSEudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIC8vIHRoaXMucGlja3VwRWxlbWVudFdpdGhLZXlib2FyZChzZWxlY3RlZEl0ZW0sIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERyb3Bkb3duVmFsdWUob3B0aW9uOiBPcHRpb25Nb2RlbCkge1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWUgPSBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZSBhcyBrZXlvZiBPcHRpb25Nb2RlbF07XG5cbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICBvcHRpb25bdGhpcy5sYWJlbCBhcyBrZXlvZiBPcHRpb25Nb2RlbF0gfHwgY29udHJvbFZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBvcHRpb247XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGNvbnRyb2xWYWx1ZSwgaW5wdXRWYWx1ZSk7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBNdWx0aXNlbGVjdCBEcm9wZG93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIG9uTXVsdGlzZWxlY3RTZWxlY3Qob3B0aW9uOiBPcHRpb25Nb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RJdGVtcyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5tdWx0aXNlbGVjdEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuX29wdGlvbnNdO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYWN0aXZlKVxuICAgICAgICAgICAgLnNsaWNlKC0xKVswXTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dFJlZikge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB0cnVlLFxuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNdWx0aVNlbGVjdEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGhpcy5tdWx0aXNlbGVjdEl0ZW1zW2luZGV4XS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMubXVsdGlzZWxlY3RJdGVtc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoLTEpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQoXG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcyhjdXJyZW50TGFiZWw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdEl0ZW1zID0gW107XG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgbXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcubGFiZWwgPSBjdXJyZW50TGFiZWxcbiAgICAgICAgLy8gICAgID8gY3VycmVudExhYmVsXG4gICAgICAgIC8vICAgICA6IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KG51bGwpO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZU11bHRpc2VsZWN0RHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gIXRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXM7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXMpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZHJvcGRvd25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gICAgcHVibGljIHNldENvbnRyb2xWYWx1ZSh2YWx1ZT86IHN0cmluZywgZHJvcGRvd25JbnB1dFZhbHVlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpOyAvLyBOb3RpZnkgQW5ndWxhciBmb3JtIGFib3V0IHRoZSBjaGFuZ2VcbiAgICAgICAgaWYgKHZhbHVlKSB0aGlzLm9uVG91Y2hlZCgpOyAvLyBNYXJrIGFzIHRvdWNoZWRcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlID0gZHJvcGRvd25JbnB1dFZhbHVlIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkcm9wZG93bklucHV0VmFsdWUgfHwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlIHRocm91Z2ggZHJvcGRvd24gd2l0aCBrZXlib2FyZCBhcnJvd3NcbiAgICAgKi9cbiAgICBwcml2YXRlIGRyb3Bkb3duTmF2aWdhdGlvbihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gKyBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0U3RlcCA+IHRoaXMuZHJvcGRvd25Db21wb25lbnRSZWYub3B0aW9ucy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID0gMDtcbiAgICAgICAgZWxzZSBpZiAobmV4dFN0ZXAgPCAwKVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID1cbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50UmVmLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZWxzZSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSBuZXh0U3RlcDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xlYXJUaW1lb3V0RHJvcGRvd24pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFwcGxpY2F0aW9uLWRyb3Bkb3duXCJcbiAgICBbbmdDbGFzc109XCJcbiAgICAgICAgaW5wdXRDb25maWdcbiAgICAgICAgICAgIHwgaW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NcbiAgICAgICAgICAgICAgICA6IG11bHRpc2VsZWN0SXRlbXNcbiAgICAgICAgICAgICAgICA6IGlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzXG4gICAgXCJcbj5cbiAgICBAaWYgKG11bHRpc2VsZWN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibXVsdGlzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0TGFiZWwgfX1cbiAgICAgICAgPC9wPlxuICAgIH1cblxuICAgIEBpZiAoaW5wdXRDb25maWcubXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZSkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGFycm93IC0tPlxuICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwibXVsdGlzZWxlY3QtYXJyb3dcIlxuICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLmlucHV0RHJvcGRvd25BcnJvd1N2Z1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXVsdGlzZWxlY3REcm9wZG93bigpXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgfVxuXG4gICAgQGlmIChtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJiAhaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGNsZWFyIGFsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jbGVhciBtdWx0aXNlbGVjdC1jbGVhclwiXG4gICAgICAgICAgICBtYWluVG9vbHRpcD1cIkNsZWFyIEFsbFwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwXG4gICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICB0b29sdGlwQmFja2dyb3VuZD1cIiMyZjJmMmZcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtY2xlYXIteFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICA+PC9zdmctaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChcbiAgICAgICAgaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93biAmJlxuICAgICAgICBtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICBfdGVtcGxhdGUgPT09ICdtdWx0aXNlbGVjdCdcbiAgICApIHtcbiAgICAgICAgPCEtLSBNdWx0aXNlbGVjdCBpdGVtcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW1zIHt7IG11bHRpc2VsZWN0VGVtcGxhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Qgb2YgbXVsdGlzZWxlY3RJdGVtcztcbiAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XG4gICAgICAgICAgICAgICAgbGV0IGluZCA9ICRpbmRleFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdWx0aXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0Py5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIC0gVG90YWwgQ291bnRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLm11bHRpU2VsZWN0SXRlbVJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX0gb2ZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubXVsdGlTZWxlY3RJdGVtUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIENvdW50ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU11bHRpU2VsZWN0SXRlbShpbmQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW0tY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Ub29sdGlwPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcEJhY2tncm91bmQ9XCIjMmYyZjJmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBEcm9wZG93biBzZWFyY2ggLS0+XG5cbiAgICBAaWYgKCFpbnB1dENvbmZpZy5pc0ljb25JbnB1dCkge1xuICAgICAgICBAaWYgKCFzZWFyY2hJbnB1dFRleHQudmFsdWUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX3ZhbHVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3Blbl09XCJkcm9wRG93bklzT3BlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRJY29uXT1cImlucHV0Q29uZmlnLnBsYWNlaG9sZGVySWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoX3RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVTX1RURCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbiBkcm9wZG93bi1kb3VibGUtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd05vUmVzdWxzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW0hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5PcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbl09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3BlY2lhbCBEcm9wZG93biBTZWxlY3RlZCBTVkcgd2l0aCBvciBXaXRob3V0IFRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCAmJiBhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnB1dERyb3Bkb3duR2V0SWNvbnM6IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1zZWxlY3RlZC1pbWFnZSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnNldC1jb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW0/LmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py53aXRoVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRyb3Bkb3duVmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGNhLWlucHV0LXRlc3RcbiAgICAgICAgICAgICN0Mj1cIm5nYlBvcG92ZXJcIlxuICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiY2FJbnB1dERyb3Bkb3duUG9wb3ZlclwiXG4gICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2JvdHRvbS1sZWZ0JywgJ3RvcC1sZWZ0J11cbiAgICAgICAgICAgICAgICAgICAgOiBbJ2JvdHRvbS1sZWZ0J11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sIHwgZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgW3BhcmVudENvbnRyb2xdPVwiZ2V0U3VwZXJDb250cm9sXCJcbiAgICAgICAgICAgIFtpbmNvcnJlY3RWYWx1ZV09XCJpc0luY29ycmVjdFZhbHVlXCJcbiAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICBbc2VsZWN0ZWREcm9wZG93bkxhYmVsQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aXZlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIl90ZW1wbGF0ZVwiXG4gICAgICAgICAgICAoYmx1cklucHV0KT1cIm9uQmx1cklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsZWFyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgKGNvbW1hbmRFdmVudCk9XCJjb21tYW5kRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2hvd0hpZGVEcm9wZG93bik9XCJzaG93SGlkZURyb3Bkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGRyb3BEb3duS2V5TmF2aWdhdGlvbik9XCJkcm9wRG93bktleU5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW5jb3JyZWN0RXZlbnQpPVwib25JbmNvcnJlY3RJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChoaWRkZW4pPVwiaGFuZGxlSGlkZGVuRHJvcGRvd24oKVwiXG4gICAgICAgICAgICAoc2hvd24pPVwiaGFuZGxlT3BlbkRyb3Bkb3duKClcIlxuICAgICAgICA+PC9jYS1pbnB1dC10ZXN0PlxuICAgIH1cblxuICAgIDwhLS0gRHJvcGRvd24gaWNvbiBpbnN0ZWFkIG9mIGlucHV0IC0tPlxuICAgIEBpZiAoaW5wdXRDb25maWcuaXNJY29uSW5wdXQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgaW5wdXQtaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHZhbGlkOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pc1ZhbGlkSWNvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhaW5wdXRDb25maWcuaW5wdXRJY29uPy5pbmNsdWRlcygnY3VzdG9tJyksXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBwb3BvdmVyUmVmPy5pc09wZW4oKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAjdDI9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJjYUlucHV0RHJvcGRvd25Qb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlsnYm90dG9tLWxlZnQnXVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1pY29uXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnJlcGFpclBtU3ZnUm91dGUgK1xuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pbnB1dEljb25cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjYUlucHV0RHJvcGRvd25Qb3BvdmVyPlxuICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERyb3Bkb3duIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgIEBpZiAoaW5wdXRDb25maWc/Lm1lcmdlRHJvcGRvd25Cb2R5V2l0aElucHV0ICYmIF9vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25zLWRpdmlkZXIge3tcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bldpZHRoQ2xhc3NcbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNwYXRjaF9kcm9wZG93bl09XCJfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnXCJcbiAgICAgICAgPjwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoXG4gICAgICAgIChpbnB1dENvbmZpZz8ubmFtZSAhPSAnQWRkcmVzcycgJiZcbiAgICAgICAgICAgIGlucHV0Q29uZmlnPy5uYW1lICE9ICdSb3V0aW5nQWRkcmVzcycgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB8fFxuICAgICAgICAoKGlucHV0Q29uZmlnPy5uYW1lID09ICdBZGRyZXNzJyB8fFxuICAgICAgICAgICAgaW5wdXRDb25maWc/Lm5hbWUgPT0gJ1JvdXRpbmdBZGRyZXNzJykgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICBfb3B0aW9ucz8ubGVuZ3RoKVxuICAgICkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsRHJvcGRvd24oJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNjcm9sbDogX29wdGlvbnMgfCBjYURyb3Bkb3duQ291bnQ6IF90ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1ncm91cHMnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdncm91cHMnIHx8XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2xvYWQtYnJva2VyLWNvbnRhY3QnLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWZ1ZWwtZnJhbmNoaXNlJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnLFxuICAgICAgICAgICAgICAgICdtZXJnZS1kcm9wZG93bi1ib2R5LXdpdGgtaW5wdXQnOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tZXJnZURyb3Bkb3duQm9keVdpdGhJbnB1dCxcbiAgICAgICAgICAgICAgICAnbm8tcmVzdWx0LWNvbnRhaW5lcic6IF9vcHRpb25zWzBdPy5uYW1lID09PSAnTm8gUmVzdWx0cycsXG4gICAgICAgICAgICAgICAgJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbnMgIHt7IGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzcyB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBzd2l0Y2ggKF90ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNWRyBUZW1wbGF0ZSAoUmVuZGVyIHN2Z3Mgb3IgdGV4dCBpZiBzdmdzIGRvZXNuJ3QgZXhpc3QgKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlNWR19URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Zy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25XaXRoSW1hZ2VdPVwiaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duU3ZnVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN2ZyBUZXh0IFRlbXBsYXRlIChkaXNwbGF5IGZsZXgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uU1ZHVEVYVF9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnVGV4dFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EaXNwYXRjaCBkcm9wZG93bi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5TVkdURVhUX0RJU1BBVENIX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaXNwYXRjaFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZXRhaWxzIHRlbXBsYXRlICh0cnVjaywgdHJhaWxlci4uLiBkZXRhaWxzLXBhZ2VzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5ERVRBSUxTX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydF09XCJfc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JvdXBpbmcgdGVtcGxhdGUgKGNhbiBzZWUgb24gY29udGFjdCBtb2RhbCkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uR1JPVVBTKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHRpc2VsZWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbV09XCJsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25NdWx0aXNlbGVjdFNlbGVjdCk9XCJvbk11bHRpc2VsZWN0U2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbXVsdGlzZWxlY3Q+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVscyBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxBQkVMUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxhYmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsTW9kZV09XCJsYWJlbE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkFkZE5ld109XCJfY2FuQWRkTmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERpc3BhdGNoIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRElTUEFUQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRpc3BhdGNoPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgRGlzcGF0Y2hlciBUZW1wbGF0ZSAodXNlciBhdmF0YXIgKyB1c2VyIG5hbWUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgQ29tYmluZSBUcnVjay1UcmFpbGVyLURyaXZlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfRElTUEFUQ0hFU19UVEQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfQlJPS0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBDb250YWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVJfQ09OVEFDVCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgU2hpcHBlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZW1wbGF0ZSBUZXh0IC0gQ291bnRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlRFWFRfQ09VTlRFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdWVsIEZyYW5jaGlzZSBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkZVRUxfRlJBTkNISVNFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlTmVzdGVkTGlzdCk9XCJ0b2dnbGVOZXN0ZWRMaXN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbUdyb3VwKT1cIm9uQWN0aXZlSXRlbUdyb3VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2U+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBEb3VibGUgVGV4dCBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX1RFWFRfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gRG91YmxlIENvbHVtbiBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX0NPTFVNTl9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBUcmlwbGUgQ29sdW1uIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5UUklQTEVfQ09MVU1OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tdHJpcGxlLXRleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIFBBWVJPTEwgVFJVQ0tTIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5QQVlST0xMX1RSVUNLUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXBheXJvbGwtdHJ1Y2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3M+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmYXVsdCBUZW1wbGF0ZSAtIFJlbmRlciBPbmx5IFRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRlZmF1bHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
919
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLElBQUksRUFDSixPQUFPLEVBQ1AsU0FBUyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsWUFBWTtBQUNaLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsU0FBUyxHQUNaLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsWUFBWTtBQUNaLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDeEksT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sb0dBQW9HLENBQUM7QUFDL0osT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNEZBQTRGLENBQUM7QUFDcEosT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFD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RUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFZSxlQUFlO3NCQUFwQyxNQUFNO3VCQUFDLFlBQVk7Z0JBRUcsZ0JBQWdCO3NCQUF0QyxNQUFNO3VCQUFDLGFBQWE7Z0JBRU0sZUFBZTtzQkFBekMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBR0csZ0JBQWdCO3NCQUEzQyxNQUFNO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIHNraXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuXG4vLyBib290c3RyYXBcbmltcG9ydCB7XG4gICAgTmdiUG9wb3ZlcixcbiAgICBOZ2JQb3BvdmVyTW9kdWxlLFxuICAgIE5nYk1vZHVsZSxcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG4vLyBhbmltYXRpb25cbmltcG9ydCB7IGlucHV0RHJvcGRvd25BbmltYXRpb24gfSBmcm9tICcuL2FuaW1hdGlvbnMnO1xuXG4vLyBjb25maWdcbmltcG9ydCB7IElDYUlucHV0IH0gZnJvbSAnLi4vY2EtaW5wdXQvY29uZmlnJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmctdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Tdmd0ZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Tdmd0ZXh0RGlzcGF0Y2hUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1ncm91cHMvY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdC9jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTGFiZWxzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxhYmVscy9jYS1pbnB1dC1kcm9wZG93bi1sYWJlbHMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb250YWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItY29udGFjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25UZXh0Q291bnRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXIvY2EtaW5wdXQtZHJvcGRvd24tdGV4dC1jb3VudGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWRlZmF1bHQtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZGVmYXVsdC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRnVlbEZyYW5jaGlzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1mdWVsLWZyYW5jaGlzZS9jYS1pbnB1dC1kcm9wZG93bi1mdWVsLWZyYW5jaGlzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGlzcGF0Y2hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZGlzcGF0Y2gvY2EtaW5wdXQtZHJvcGRvd24tZGlzcGF0Y2guY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkRldGFpbHNUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kZXRhaWxzLXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blBheXJvbGxUcnVja3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3MvY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3MuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVzVHRkQ29tcG9uZW50SXRlbSB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLWl0ZW0nO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudEl0ZW0gfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLWl0ZW0vY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItc2hpcHBlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtLmNvbXBvbmVudCc7XG5cbi8vIHBpcGVzXG5pbXBvcnQgeyBGb3JtQ29udHJvbFBpcGUgfSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5pbXBvcnQge1xuICAgIERyb3Bkb3duQ291bnRQaXBlLFxuICAgIElucHV0RHJvcGRvd25HZXRJY29uc1BpcGUsXG4gICAgSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NQaXBlLFxufSBmcm9tICcuL3BpcGVzJztcblxuLy8gbW9kdWxlc1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcblxuLy8gZGlyZWN0aXZlc1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0NvbnRyb2wsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBtb2RlbHNcbmltcG9ydCB7IENvbW1hbmRzRXZlbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uTW9kZWwgfSBmcm9tICcuL21vZGVscy9pbnB1dC1kcm9wZG93bi1vcHRpb24ubW9kZWwnO1xuXG4vLyBzZXJ2aWNlc1xuaW1wb3J0IHsgSW1hZ2VCYXNlNjRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1hZ2UtYmFzZTY0LnNlcnZpY2UnO1xuXG4vLyBzdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dERyb3Bkb3duU3ZnUm91dGVzIH0gZnJvbSAnLi91dGlscy9zdmctcm91dGVzL2lucHV0LWRyb3Bkb3duLXN2Zy1yb3V0ZXMnO1xuXG4vLyBlbnVtc1xuaW1wb3J0IHsgRHJvcGRvd25TdHJpbmdFbnVtLCBEcm9wZG93blRlbXBsYXRlVHlwZUVudW0gfSBmcm9tICcuL2VudW1zJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCB7IElucHV0VGVzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0L2lucHV0LXRlc3QvaW5wdXQtdGVzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FMb2FkU3RhdHVzU3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vY2EtbG9hZC1zdGF0dXMtc3RyaW5nL2NhLWxvYWQtc3RhdHVzLXN0cmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jYS1wcm9maWxlLWltYWdlL2NhLXByb2ZpbGUtaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uc1BpcGUgfSBmcm9tICcuL3BpcGVzL2Ryb3Bkb3duLW9wdGlvbnMucGlwZSc7XG5pbXBvcnQgeyBFdmVudElucHV0TWFuYWdlciB9IGZyb20gJy4uL2NhLWlucHV0L2Jhc2UtY2xhc3Nlcy9jYS1pbnB1dC1ldmVudC1tYW5hZ2VyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtaW5wdXQtZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbRm9ybUNvbnRyb2xQaXBlXSxcbiAgICBhbmltYXRpb25zOiBbaW5wdXREcm9wZG93bkFuaW1hdGlvbignc2hvd0hpZGVEcm9wZG93bk9wdGlvbnMnKV0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBNb2R1bGVcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gQ29tcG9uZW50XG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dERpc3BhdGNoVGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxhYmVsc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25QYXlyb2xsVHJ1Y2tzQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudEl0ZW0sXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb21wb25lbnRJdGVtLFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgLy8gUGlwZXNcbiAgICAgICAgRm9ybUNvbnRyb2xQaXBlLFxuICAgICAgICBEcm9wZG93bkNvdW50UGlwZSxcbiAgICAgICAgSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NQaXBlLFxuICAgICAgICBEcm9wZG93bk9wdGlvbnNQaXBlLFxuICAgICAgICBJbnB1dERyb3Bkb3duR2V0SWNvbnNQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhSW5wdXREcm9wZG93bkNvbXBvbmVudFxuICAgIGltcGxlbWVudHNcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBPbkRlc3Ryb3ksXG4gICAgICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgICBBZnRlclZpZXdJbml0XG57XG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dFJlZiE6IElucHV0VGVzdENvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCd0MicpIHB1YmxpYyBwb3BvdmVyUmVmITogTmdiUG9wb3ZlcjtcbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bkNvbXBvbmVudFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGRyb3Bkb3duQ29tcG9uZW50UmVmOiBhbnk7XG5cbiAgICAvLyBMYWJlbCBpbnB1dCAtIHZhbHVlIHRoYXQgd2lsbCBiZSBzaG93ZWQgaW5zaWRlIGlucHV0XG4gICAgQElucHV0KCkgbGFiZWwhOiBrZXlvZiBPcHRpb25Nb2RlbDtcblxuICAgIC8vIG9wdGlvblZhbHVlIGlucHV0IC0ga2V5IHZhbHVlIGZyb20gb2JqZWN0IC0gRW1pdCB0aGlzIGlmIHlvdSB3YW50IHRvIHNldCB3aG9sZSBvYmplY3RcbiAgICBASW5wdXQoKSBvcHRpb25WYWx1ZSE6IHN0cmluZztcblxuICAgIGlucHV0SG92ZXJlZEl0ZW06IG51bWJlciA9IC0xO1xuICAgIGRyb3BEb3duSXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBkaWZmZXJlbnQgdGVtcGxhdGVzIGZvciBib2R5IHJlbmRlcmluZ1xuICAgIHB1YmxpYyBfdGVtcGxhdGUhOiBzdHJpbmc7XG4gICAgX2NhbkFkZE5ldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2V0IHRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAgICAgLy8gaWYgKHZhbHVlID09PSAnZGV0YWlscy10ZW1wbGF0ZScgJiYgdGhpcy5pc0RldGFpbHNQYWdlcykge1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAvLyAgICAgICAgICk7XG4gICAgICAgIC8vICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSk7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG9wdGlvbiB8fCBudWxsO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5zZXRWYWx1ZShvcHRpb24/Lm5hbWUpO1xuXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgdGltZW91dDIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBtdWx0aXNlbGVjdFRlbXBsYXRlITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gICAgQElucHV0KCkgc2V0IGNhbkFkZE5ldyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jYW5BZGROZXcgPSB2YWx1ZTtcbiAgICB9IC8vIEFERCBORVcgaXRlbSBpbiBvcHRpb25zXG5cbiAgICBwdWJsaWMgZ2V0IGNhbkFkZE5ldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbkFkZE5ldztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBjYW5PcGVuTW9kYWwhOiBib29sZWFuOyAvLyBvcGVuIG1vZGFsIHdpdGggQUREIE5FVyBidXR0b25cblxuICAgIC8vIHNvcnQtdGVtcGxhdGUgZm9yIGRpZmZlcmVudCBvcHRpb25zXG4gICAgcHVibGljIF9zb3J0ITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNldCBzb3J0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc29ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gICAgfVxuXG4gICAgLy8gY3VycmVudGx5IGFjdGl2ZSBpdGVtXG4gICAgcHVibGljIF9hY3RpdmVJdGVtITogT3B0aW9uTW9kZWwgfCBudWxsO1xuICAgIEBJbnB1dCgpIHNldCBhY3RpdmVJdGVtKHZhbHVlOiBPcHRpb25Nb2RlbCB8IG51bGwpIHtcbiAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIC8vICAgICBibGFja0lucHV0OiB0cnVlLFxuICAgICAgICAvLyB9O1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gdmFsdWU7XG5cbiAgICAgICAgLy8gV2l0aCBhZGRyZXNzXG4gICAgICAgIC8vIGlmIChcbiAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAmJlxuICAgICAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2FkZHJlc3MnKSAmJlxuICAgICAgICAvLyAgICAgdGhpcy5fYWN0aXZlSXRlbVxuICAgICAgICAvLyApIHtcbiAgICAgICAgLy8gICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9hY3RpdmVJdGVtKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIC8vICAgICAgICAgICAgIHZhbHVlPy5hZGRyZXNzID8gdmFsdWU/LmFkZHJlc3MgOiBudWxsXG4gICAgICAgIC8vICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAvLyAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmhpZGVDb2xvclZhbGlkYXRpb25zKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyB9O1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8vIFdpdGhvdXQgYWRkcmVzc1xuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEucGF0Y2hWYWx1ZShcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHZhbHVlPy5udW1iZXJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICA/IHZhbHVlPy5udW1iZXJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICA6IHZhbHVlPy5uYW1lXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlPy5uYW1lXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA6ICh2YWx1ZT8uY29tcGFueU5hbWUgPz8gbnVsbClcbiAgICAgICAgLy8gICAgICAgICAgICAgKTtcblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaGlkZUNvbG9yVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vICAgICBibGFja0lucHV0OiBmYWxzZSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIH07XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW07XG4gICAgfVxuXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbUNvbG9yITogT3B0aW9uTW9kZWwgfCBudWxsOyAvLyBjdXJyZW50bHkgYWN0aXZlIGNvbG9yIGluIGRyb3Bkb3duXG4gICAgQElucHV0KCkgbGFiZWxNb2RlITogJ0xhYmVsJyB8ICdDb2xvcic7XG5cbiAgICAvLyB3aGVuIHNlbmQgU1ZHLCBwbGVhc2UgcHJlbW1hcGVkIG9iamVjdDogYWRkICdmb2xkZXInIHwgJ3N1YmZvbGRlcidcbiAgICBwdWJsaWMgX29wdGlvbnM6IE9wdGlvbk1vZGVsW10gPSBbXTtcbiAgICBASW5wdXQoKSBzZXQgb3B0aW9ucyh2YWx1ZXM6IE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHZhbHVlcykgdGhpcy5fb3B0aW9ucyA9IFsuLi52YWx1ZXNdO1xuICAgIH1cblxuICAgIC8vIE11bHRpU2VsZWN0IFNlbGVjdGVkIEl0ZW1zIEZyb20gQmFja2VuZFxuICAgIEBJbnB1dCgpIHNldCBwcmVsb2FkTXVsdGlzZWxlY3RJdGVtcyh2YWx1ZXM6IE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXModGhpcy5pbnB1dENvbmZpZy5sYWJlbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlzZWxlY3RTZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBpc0RldGFpbHNQYWdlcyE6IGJvb2xlYW47IC8vIG9ubHkgZm9yIGRldGFpbHMgcGFnZXNcbiAgICBASW5wdXQoKSBpc0luY29ycmVjdFZhbHVlITogYm9vbGVhbjsgLy8gYXBwbGljYW50IHJldmlldyBvcHRpb25cbiAgICBASW5wdXQoKSBpc0FkZHJlc3NEcm9wZG93biE6IGJvb2xlYW47IC8vIG9ubHkgZm9yIGFkZHJlc3MgZHJvcGRvd25cblxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW06IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbCB8IG51bGw+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbCB8IG51bGw+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbFtdIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsW10gfCBudWxsPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1Db2xvcjogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRMYWJlbE1vZGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgQE91dHB1dCgpIGNsb3NlRHJvcGRvd246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgc2F2ZUl0ZW06IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGRhdGE6IE9wdGlvbk1vZGVsIHwgbnVsbDtcbiAgICAgICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogT3B0aW9uTW9kZWwgfCBudWxsOyBhY3Rpb246IHN0cmluZyB9PigpO1xuICAgIEBPdXRwdXQoKSBpbmNvcnJlY3RFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBwbGFjZWhvbGRlckljb25FdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoJ3BhZ2luYXRpb24nKSBwYWdpbmF0aW9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgQE91dHB1dCgnYWN0aXZlR3JvdXAnKSBhY3RpdmVHcm91cEV2ZW50OiBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWw+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbD4oKTtcbiAgICBAT3V0cHV0KCdjbGVhcklucHV0RXZlbnQnKSBjbGVhcklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoJ3NlYXJjaElucHV0RXZlbnQnKSBzZWFyY2hJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIC8vIGV2ZW50c1xuICAgIHB1YmxpYyBzZWFyY2hJbnB1dFRleHQgPSBuZXcgRXZlbnRJbnB1dE1hbmFnZXI8c3RyaW5nPihcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEV2ZW50XG4gICAgKTtcblxuICAgIC8vIENvcHkgb2YgT3B0aW9uc1xuICAgIHB1YmxpYyBvcmlnaW5hbE9wdGlvbnM6IE9wdGlvbk1vZGVsW10gPSBbXTtcblxuICAgIC8vIFBhZ2luYXRpb25cbiAgICBwdWJsaWMgcGFnaW5hdGlvbk51bWJlcjogbnVtYmVyID0gMDtcblxuICAgIC8vIE11bHRpc2VsZWN0IGRyb3Bkb3duIG9wdGlvbnNcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3RJdGVtczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyBpc011bHRpU2VsZWN0SW5wdXRGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtdWx0aVNlbGVjdExhYmVsITogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtITogT3B0aW9uTW9kZWwgfCBudWxsO1xuXG4gICAgLy8gQWRkIG1vZGVcbiAgICBwdWJsaWMgaXNJbkFkZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIERyb3Bkb3duIG5hdmlnYXRpb24gd2l0aCBrZXlib2FyZFxuICAgIHByaXZhdGUgZHJvcGRvd25Qb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgICAvLyBEcm9wZG93biBDbGVhcnRpbWVvdXRcbiAgICBwdWJsaWMgY2xlYXJUaW1lb3V0RHJvcGRvd246IHN0cmluZyB8IG51bWJlciB8IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGhvdmVyaW5nSW5kZXghOiBudW1iZXI7XG4gICAgcHVibGljIGlucHV0RHJvcGRvd25TdmdSb3V0ZXMgPSBJbnB1dERyb3Bkb3duU3ZnUm91dGVzO1xuICAgIHB1YmxpYyBkcm9wZG93blRlbXBsYXRlVHlwZUVudW0gPSBEcm9wZG93blRlbXBsYXRlVHlwZUVudW07XG5cbiAgICAvLyBEZXN0cm95XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKSBwdWJsaWMgc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIHB1YmxpYyBpbWFnZUJhc2U2NFNlcnZpY2U6IEltYWdlQmFzZTY0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgZ2V0U3VwZXJDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5wdXRGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbiA9IHRoaXMuX29wdGlvbnMuZmluZChcbiAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvblt0aGlzLm9wdGlvblZhbHVlIGFzIGtleW9mIE9wdGlvbk1vZGVsXSA9PSB2YWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmluZE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGZpbmRPcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAgIHB1YmxpYyBvbkNoYW5nZShfOiBhbnkpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBNdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0TGFiZWwgPSB0aGlzLmlucHV0Q29uZmlnLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hUZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRUZXh0Lm5leHQoc2VhcmNoVGV4dCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH0sIDQ1MCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TY3JvbGxEcm9wZG93bihldmVudDogRXZlbnRUYXJnZXQgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCA9PT0gdGFyZ2V0LnNjcm9sbEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uTnVtYmVyICs9IDE7XG5cbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkV2ZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uTnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGl2ZUl0ZW0ob3B0aW9uOiBPcHRpb25Nb2RlbCwgZ3JvdXA/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jYW5PcGVuTW9kYWwgJiZcbiAgICAgICAgICAgIG9wdGlvbj8uW3RoaXMubGFiZWxdPy50b0xvd2VyQ2FzZSgpID09PSAnYWRkIG5ldydcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICBpZDogNzY1NSxcbiAgICAgICAgICAgICAgICBuYW1lOiBEcm9wZG93blN0cmluZ0VudW0uQUREX05FVyxcbiAgICAgICAgICAgICAgICBjYW5PcGVuTW9kYWw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBQcmV2ZW50IHVzZXIgdG8gcGljayBmcmFuY2hpc2UsIHdpdGhvdXQgZ3JvdXBcbiAgICAgICAgY29uc29sZS5sb2cob3B0aW9uLCBncm91cCwgdGhpcy5fdGVtcGxhdGUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJyAmJlxuICAgICAgICAgICAgb3B0aW9uPy5pc0ZyYW5jaGlzZSAmJlxuICAgICAgICAgICAgIWdyb3VwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpc2FibGUgdG8gcGlja2luZyBiYW5uZWQgb3IgZG51IHVzZXJcbiAgICAgICAgaWYgKG9wdGlvbj8uZG51IHx8IG9wdGlvbj8uYmFuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gUmVzdWx0XG4gICAgICAgIGlmIChvcHRpb24uaWQgPT09IDc2NTQgfHwgb3B0aW9uLmlkID09PSA3NjU2KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQUREIE5FV1xuICAgICAgICBlbHNlIGlmIChvcHRpb24uaWQgPT09IDc2NTUpIHtcbiAgICAgICAgICAgIC8vIE9wZW4gTmV3IE1vZGFsXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5PcGVuTW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHsgLi4ub3B0aW9uLCBjYW5PcGVuTW9kYWw6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXb3JrIHdpdGggY3VycmVudCBtb2RhbFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRHJvcERvd24gbGFiZWxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaXNFZGl0SW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0NvbG9yJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb3JtYWwgRHJvcGRvd25cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROZXdDb25maWcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGljayB0aGUgaXRlbVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDEpO1xuICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5zZWxlY3RlZERyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIERyb3Bkb3duIGxhYmVscyBvcHRpb24gc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygxMjIpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSA9PT0gJ0xhYmVsJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8uc2V0VmFsdWUob3B0aW9uLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdDb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtQ29sb3IgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db2xvci5lbWl0KHRoaXMuYWN0aXZlSXRlbUNvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb3JtYWwgRHJvcGRvd24gb3B0aW9uIHNlbGVjdGVkXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyg0NDUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnUm91dGluZ0FkZHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tLS0tLScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24/Lm51bWJlciA/IG9wdGlvbi5udW1iZXIgOiBvcHRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj8ubnVtYmVyID8gb3B0aW9uLm51bWJlciA6IG9wdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA/IG9wdGlvbi5uYW1lIDogb3B0aW9uLmJ1c2luZXNzTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVJZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ubWFya0FzRGlydHkoKTtcblxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGl2ZUl0ZW1Hcm91cChldmVudDogeyBvcHRpb246IE9wdGlvbk1vZGVsOyBncm91cDogYW55IH0pIHtcbiAgICAgICAgdGhpcy5vbkFjdGl2ZUl0ZW0oZXZlbnQub3B0aW9uLCBldmVudC5ncm91cCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSAtMTtcbiAgICAgICAgLy90aGlzLmlucHV0Q29uZmlnLnNlbGVjdGVkRHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUobnVsbCk7XG5cbiAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoJycpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQobnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyRHJvcGRvd25MYWJlbCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbUNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db2xvci5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0xhYmVsJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbW1hbmRFdmVudChldmVudDogQ29tbWFuZHNFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnRWRpdCBJbnB1dCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnQ29sb3InKTtcbiAgICAgICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ1RvZ2dsZSBEcm9wZG93bicpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnY29uZmlybScgJiYgZXZlbnQubW9kZSA9PT0gJ25ldycpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3SXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2NvbmZpcm0nICYmIGV2ZW50Lm1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnUGxhY2Vob2xkZXIgSWNvbiBFdmVudCcpIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJJY29uRXZlbnQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE5ld0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB7XG4gICAgICAgICAgICBpZDogcGFyc2VJbnQodXVpZHY0KCkpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlLFxuICAgICAgICB9O1xuICAgICAgICAvL3RoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlzVmlzaWJsZUNvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaXNGb2N1c0lucHV0ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHsgZGF0YTogdGhpcy5fYWN0aXZlSXRlbSwgYWN0aW9uOiAnbmV3JyB9KTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0xhYmVsJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzVG91Y2hlZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTdXBlckNvbnRyb2w/LnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbG9ySWQ6IHRoaXMuYWN0aXZlSXRlbUNvbG9yXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5hY3RpdmVJdGVtQ29sb3IuaWRcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2xvcklkLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtPy5jb2RlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sPy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgZGF0YTogdGhpcy5fYWN0aXZlSXRlbSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTmV3Q29uZmlnKCkge1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIGNvbW1hbmRzOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgZmlyc3RDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZmlybScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMzA3NGQzJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICBzdmc6IElucHV0RHJvcGRvd25TdmdSb3V0ZXMuc3BlY0NvbmZpcm1TdmcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWNvbmRDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMyZjJmMmYnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiBJbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2ZyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBvcG92ZXJSZWY/LmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5pc0luQWRkTW9kZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0RHJvcGRvd24gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNJbkFkZE1vZGUgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbmNvcnJlY3RJbnB1dChldmVudDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmluY29ycmVjdEV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpZGVudGl0eShpbmRleDogbnVtYmVyLCBpdGVtOiBPcHRpb25Nb2RlbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVOZXN0ZWRMaXN0KG9wdGlvbjogT3B0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbi5vcGVuKSB7XG4gICAgICAgICAgICBvcHRpb24ub3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiAoaXRlbS5vcGVuID0gZmFsc2UpKTtcblxuICAgICAgICBvcHRpb24ub3BlbiA9ICFvcHRpb24ub3BlbjtcblxuICAgICAgICBpZiAob3B0aW9uLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXBFdmVudC5lbWl0KG9wdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVySW5wdXQoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMucG9wb3ZlclJlZi5pc09wZW4oKSkgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24uZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gbGFiZWwgZHJvcGRvd25cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEcm9wZG93bkxhYmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3JtYWwgZHJvcGRvd25cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUhpZGRlbkRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmRyb3BEb3duSXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZHJvcGRvd25WYWx1ZSB8fCAnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVPcGVuRHJvcGRvd24oKSB7XG4gICAgICAgIHRoaXMuZHJvcERvd25Jc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93SGlkZURyb3Bkb3duKGFjdGlvbjogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gYWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlICE9PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBPdXRcbiAgICAgICAgICAgIC8vIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX3RlbXBsYXRlICE9PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5vcGVuKCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgICAgICAvLyAgICAgLy8gUHJldmVudCB1c2VyIHRvIHR5cGluZyBkdW1tbXkgZGF0YSBpZiBfYWN0aXZlSXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnNldFZhbHVlKHRoaXMuX2FjdGl2ZUl0ZW0ubmFtZSk7XG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lID09PSB0aGlzLmdldFN1cGVyQ29udHJvbCEudmFsdWVcbiAgICAgICAgICAgIC8vICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5fdGVtcGxhdGUgIT09ICdmdWVsLWZyYW5jaGlzZScpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIEluXG4gICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIC8vICAgICBwbGFjZWhvbGRlcjogdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgID8gdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8ubmFtZSxcbiAgICAgICAgICAgIC8vIH07XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5zZXRWYWx1ZShudWxsKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3ZlclJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbkFkZE1vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAgICAgICAgIC8vICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGFpbHMgcGFnZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jdXN0b21DbGFzcz8uaW5jbHVkZXMoJ2RldGFpbHMtcGFnZXMnKSAmJlxuICAgICAgICAgICAgIWFjdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQodGhpcy5fYWN0aXZlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZSxcbiAgICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICAgICAgZGF0YTogYW55O1xuICAgIH0pIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgZG93blxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25OYXZpZ2F0aW9uKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5hdmlnYXRlIHVwXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bk5hdmlnYXRpb24oLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlc3MgRXNjYXBlXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaW5wdXRDb25maWc/LmNvbW1hbmRzPy5hY3RpdmUpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaXNWaXNpYmxlQ29tbWFuZHMgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgICAgICAvLyAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgLy8gaWYgKCF0aGlzLmlucHV0Q29uZmlnLmhpZGVDb2xvclZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaW5wdXRSZWYuaXNFZGl0SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdDb2xvcicpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnBhdGNoVmFsdWUobnVsbCk7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc3MgJ2VudGVyJ1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZEl0ZW0gPVxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bkNvbXBvbmVudFJlZi5vcHRpb25zW3RoaXMuaW5wdXRIb3ZlcmVkSXRlbV1cbiAgICAgICAgICAgICAgICAgICAgOiB7IFt0aGlzLmxhYmVsXTogJycgfTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmNhbk9wZW5Nb2RhbCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbT8uW3RoaXMubGFiZWxdPy50b0xvd2VyQ2FzZSgpID09PSAnYWRkIG5ldydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBpZDogNzY1NSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogRHJvcGRvd25TdHJpbmdFbnVtLkFERF9ORVcsXG4gICAgICAgICAgICAgICAgICAgIGNhbk9wZW5Nb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuaXNPcGVuKCkpIHRoaXMucG9wb3ZlclJlZj8ub3BlbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy90aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgLy9yZXR1cm47XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zWzBdLmlkICE9PSA3NjU1ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9uc1swXS5pZCAhPT0gNzY1NFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbGV0IHNlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuX29wdGlvbnNbMF0/LmJ1c2luZXNzTmFtZVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgPyB0aGlzLl9vcHRpb25zWzBdPy5idXNpbmVzc05hbWVcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIDogdGhpcy5fb3B0aW9uc1swXT8ubmFtZTtcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9vcHRpb25zWzBdPy5udW1iZXJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgID8gdGhpcy5fb3B0aW9uc1swXT8ubnVtYmVyLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICA6IHRoaXMuX29wdGlvbnNbMF0ubmFtZSEudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIC8vIHRoaXMucGlja3VwRWxlbWVudFdpdGhLZXlib2FyZChzZWxlY3RlZEl0ZW0sIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERyb3Bkb3duVmFsdWUob3B0aW9uOiBPcHRpb25Nb2RlbCkge1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWUgPSBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZSBhcyBrZXlvZiBPcHRpb25Nb2RlbF07XG5cbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICBvcHRpb25bdGhpcy5sYWJlbCBhcyBrZXlvZiBPcHRpb25Nb2RlbF0gfHwgY29udHJvbFZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBvcHRpb247XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGNvbnRyb2xWYWx1ZSwgaW5wdXRWYWx1ZSk7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBNdWx0aXNlbGVjdCBEcm9wZG93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIG9uTXVsdGlzZWxlY3RTZWxlY3Qob3B0aW9uOiBPcHRpb25Nb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RJdGVtcyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5tdWx0aXNlbGVjdEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuX29wdGlvbnNdO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYWN0aXZlKVxuICAgICAgICAgICAgLnNsaWNlKC0xKVswXTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dFJlZikge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB0cnVlLFxuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNdWx0aVNlbGVjdEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGhpcy5tdWx0aXNlbGVjdEl0ZW1zW2luZGV4XS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMubXVsdGlzZWxlY3RJdGVtc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoLTEpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQoXG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcyhjdXJyZW50TGFiZWw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdEl0ZW1zID0gW107XG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgbXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcubGFiZWwgPSBjdXJyZW50TGFiZWxcbiAgICAgICAgLy8gICAgID8gY3VycmVudExhYmVsXG4gICAgICAgIC8vICAgICA6IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KG51bGwpO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZU11bHRpc2VsZWN0RHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gIXRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXM7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXMpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZHJvcGRvd25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gICAgcHVibGljIHNldENvbnRyb2xWYWx1ZSh2YWx1ZT86IHN0cmluZywgZHJvcGRvd25JbnB1dFZhbHVlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpOyAvLyBOb3RpZnkgQW5ndWxhciBmb3JtIGFib3V0IHRoZSBjaGFuZ2VcbiAgICAgICAgaWYgKHZhbHVlKSB0aGlzLm9uVG91Y2hlZCgpOyAvLyBNYXJrIGFzIHRvdWNoZWRcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlID0gZHJvcGRvd25JbnB1dFZhbHVlIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkcm9wZG93bklucHV0VmFsdWUgfHwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlIHRocm91Z2ggZHJvcGRvd24gd2l0aCBrZXlib2FyZCBhcnJvd3NcbiAgICAgKi9cbiAgICBwcml2YXRlIGRyb3Bkb3duTmF2aWdhdGlvbihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gKyBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0U3RlcCA+IHRoaXMuZHJvcGRvd25Db21wb25lbnRSZWYub3B0aW9ucy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID0gMDtcbiAgICAgICAgZWxzZSBpZiAobmV4dFN0ZXAgPCAwKVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID1cbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50UmVmLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZWxzZSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSBuZXh0U3RlcDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xlYXJUaW1lb3V0RHJvcGRvd24pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFwcGxpY2F0aW9uLWRyb3Bkb3duXCJcbiAgICBbbmdDbGFzc109XCJcbiAgICAgICAgaW5wdXRDb25maWdcbiAgICAgICAgICAgIHwgaW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NcbiAgICAgICAgICAgICAgICA6IG11bHRpc2VsZWN0SXRlbXNcbiAgICAgICAgICAgICAgICA6IGlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzXG4gICAgXCJcbj5cbiAgICBAaWYgKG11bHRpc2VsZWN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibXVsdGlzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0TGFiZWwgfX1cbiAgICAgICAgPC9wPlxuICAgIH1cblxuICAgIEBpZiAoaW5wdXRDb25maWcubXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZSkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGFycm93IC0tPlxuICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwibXVsdGlzZWxlY3QtYXJyb3dcIlxuICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLmlucHV0RHJvcGRvd25BcnJvd1N2Z1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXVsdGlzZWxlY3REcm9wZG93bigpXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgfVxuXG4gICAgQGlmIChtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJiAhaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGNsZWFyIGFsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jbGVhciBtdWx0aXNlbGVjdC1jbGVhclwiXG4gICAgICAgICAgICBtYWluVG9vbHRpcD1cIkNsZWFyIEFsbFwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwXG4gICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICB0b29sdGlwQmFja2dyb3VuZD1cIiMyZjJmMmZcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtY2xlYXIteFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICA+PC9zdmctaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChcbiAgICAgICAgaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93biAmJlxuICAgICAgICBtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICBfdGVtcGxhdGUgPT09ICdtdWx0aXNlbGVjdCdcbiAgICApIHtcbiAgICAgICAgPCEtLSBNdWx0aXNlbGVjdCBpdGVtcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW1zIHt7IG11bHRpc2VsZWN0VGVtcGxhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Qgb2YgbXVsdGlzZWxlY3RJdGVtcztcbiAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XG4gICAgICAgICAgICAgICAgbGV0IGluZCA9ICRpbmRleFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdWx0aXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0Py5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIC0gVG90YWwgQ291bnRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLm11bHRpU2VsZWN0SXRlbVJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX0gb2ZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubXVsdGlTZWxlY3RJdGVtUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIENvdW50ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU11bHRpU2VsZWN0SXRlbShpbmQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW0tY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Ub29sdGlwPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcEJhY2tncm91bmQ9XCIjMmYyZjJmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBEcm9wZG93biBzZWFyY2ggLS0+XG5cbiAgICBAaWYgKCFpbnB1dENvbmZpZy5pc0ljb25JbnB1dCkge1xuICAgICAgICBAaWYgKCFzZWFyY2hJbnB1dFRleHQudmFsdWUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX3ZhbHVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3Blbl09XCJkcm9wRG93bklzT3BlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRJY29uXT1cImlucHV0Q29uZmlnLnBsYWNlaG9sZGVySWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoX3RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVTX1RURCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbiBkcm9wZG93bi1kb3VibGUtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd05vUmVzdWxzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW0hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5PcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbl09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3BlY2lhbCBEcm9wZG93biBTZWxlY3RlZCBTVkcgd2l0aCBvciBXaXRob3V0IFRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCAmJiBhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnB1dERyb3Bkb3duR2V0SWNvbnM6IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1zZWxlY3RlZC1pbWFnZSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnNldC1jb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW0/LmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py53aXRoVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRyb3Bkb3duVmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGNhLWlucHV0LXRlc3RcbiAgICAgICAgICAgICN0Mj1cIm5nYlBvcG92ZXJcIlxuICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiY2FJbnB1dERyb3Bkb3duUG9wb3ZlclwiXG4gICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2JvdHRvbS1sZWZ0JywgJ3RvcC1sZWZ0J11cbiAgICAgICAgICAgICAgICAgICAgOiBbJ2JvdHRvbS1sZWZ0J11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sIHwgZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgW3BhcmVudENvbnRyb2xdPVwiZ2V0U3VwZXJDb250cm9sXCJcbiAgICAgICAgICAgIFtpbmNvcnJlY3RWYWx1ZV09XCJpc0luY29ycmVjdFZhbHVlXCJcbiAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICBbc2VsZWN0ZWREcm9wZG93bkxhYmVsQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aXZlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIl90ZW1wbGF0ZVwiXG4gICAgICAgICAgICAoYmx1cklucHV0KT1cIm9uQmx1cklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsZWFyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgKGNvbW1hbmRFdmVudCk9XCJjb21tYW5kRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2hvd0hpZGVEcm9wZG93bik9XCJzaG93SGlkZURyb3Bkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGRyb3BEb3duS2V5TmF2aWdhdGlvbik9XCJkcm9wRG93bktleU5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW5jb3JyZWN0RXZlbnQpPVwib25JbmNvcnJlY3RJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChoaWRkZW4pPVwiaGFuZGxlSGlkZGVuRHJvcGRvd24oKVwiXG4gICAgICAgICAgICAoc2hvd24pPVwiaGFuZGxlT3BlbkRyb3Bkb3duKClcIlxuICAgICAgICA+PC9jYS1pbnB1dC10ZXN0PlxuICAgIH1cblxuICAgIDwhLS0gRHJvcGRvd24gaWNvbiBpbnN0ZWFkIG9mIGlucHV0IC0tPlxuICAgIEBpZiAoaW5wdXRDb25maWcuaXNJY29uSW5wdXQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgaW5wdXQtaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHZhbGlkOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pc1ZhbGlkSWNvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhaW5wdXRDb25maWcuaW5wdXRJY29uPy5pbmNsdWRlcygnY3VzdG9tJyksXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBwb3BvdmVyUmVmPy5pc09wZW4oKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAjdDI9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJjYUlucHV0RHJvcGRvd25Qb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlsnYm90dG9tLWxlZnQnXVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1pY29uXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnJlcGFpclBtU3ZnUm91dGUgK1xuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pbnB1dEljb25cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjYUlucHV0RHJvcGRvd25Qb3BvdmVyPlxuICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERyb3Bkb3duIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgIEBpZiAoaW5wdXRDb25maWc/Lm1lcmdlRHJvcGRvd25Cb2R5V2l0aElucHV0ICYmIF9vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25zLWRpdmlkZXIge3tcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bldpZHRoQ2xhc3NcbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNwYXRjaF9kcm9wZG93bl09XCJfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnXCJcbiAgICAgICAgPjwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoXG4gICAgICAgIChpbnB1dENvbmZpZz8ubmFtZSAhPSAnQWRkcmVzcycgJiZcbiAgICAgICAgICAgIGlucHV0Q29uZmlnPy5uYW1lICE9ICdSb3V0aW5nQWRkcmVzcycgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB8fFxuICAgICAgICAoKGlucHV0Q29uZmlnPy5uYW1lID09ICdBZGRyZXNzJyB8fFxuICAgICAgICAgICAgaW5wdXRDb25maWc/Lm5hbWUgPT0gJ1JvdXRpbmdBZGRyZXNzJykgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICBfb3B0aW9ucz8ubGVuZ3RoKVxuICAgICkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsRHJvcGRvd24oJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNjcm9sbDogX29wdGlvbnMgfCBjYURyb3Bkb3duQ291bnQ6IF90ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1ncm91cHMnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdncm91cHMnIHx8XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2xvYWQtYnJva2VyLWNvbnRhY3QnLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWZ1ZWwtZnJhbmNoaXNlJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnLFxuICAgICAgICAgICAgICAgICdtZXJnZS1kcm9wZG93bi1ib2R5LXdpdGgtaW5wdXQnOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tZXJnZURyb3Bkb3duQm9keVdpdGhJbnB1dCxcbiAgICAgICAgICAgICAgICAnbm8tcmVzdWx0LWNvbnRhaW5lcic6IF9vcHRpb25zWzBdPy5uYW1lID09PSAnTm8gUmVzdWx0cycsXG4gICAgICAgICAgICAgICAgJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbnMgIHt7IGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzcyB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBzd2l0Y2ggKF90ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNWRyBUZW1wbGF0ZSAoUmVuZGVyIHN2Z3Mgb3IgdGV4dCBpZiBzdmdzIGRvZXNuJ3QgZXhpc3QgKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlNWR19URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Zy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25XaXRoSW1hZ2VdPVwiaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duU3ZnVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN2ZyBUZXh0IFRlbXBsYXRlIChkaXNwbGF5IGZsZXgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uU1ZHVEVYVF9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnVGV4dFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EaXNwYXRjaCBkcm9wZG93bi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5TVkdURVhUX0RJU1BBVENIX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaXNwYXRjaFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZXRhaWxzIHRlbXBsYXRlICh0cnVjaywgdHJhaWxlci4uLiBkZXRhaWxzLXBhZ2VzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5ERVRBSUxTX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydF09XCJfc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JvdXBpbmcgdGVtcGxhdGUgKGNhbiBzZWUgb24gY29udGFjdCBtb2RhbCkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uR1JPVVBTKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHRpc2VsZWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbV09XCJsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25NdWx0aXNlbGVjdFNlbGVjdCk9XCJvbk11bHRpc2VsZWN0U2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbXVsdGlzZWxlY3Q+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVscyBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxBQkVMUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxhYmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsTW9kZV09XCJsYWJlbE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkFkZE5ld109XCJfY2FuQWRkTmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERpc3BhdGNoIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRElTUEFUQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRpc3BhdGNoPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgRGlzcGF0Y2hlciBUZW1wbGF0ZSAodXNlciBhdmF0YXIgKyB1c2VyIG5hbWUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgQ29tYmluZSBUcnVjay1UcmFpbGVyLURyaXZlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfRElTUEFUQ0hFU19UVEQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfQlJPS0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBDb250YWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVJfQ09OVEFDVCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgU2hpcHBlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZW1wbGF0ZSBUZXh0IC0gQ291bnRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlRFWFRfQ09VTlRFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdWVsIEZyYW5jaGlzZSBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkZVRUxfRlJBTkNISVNFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlTmVzdGVkTGlzdCk9XCJ0b2dnbGVOZXN0ZWRMaXN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbUdyb3VwKT1cIm9uQWN0aXZlSXRlbUdyb3VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2U+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBEb3VibGUgVGV4dCBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX1RFWFRfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gRG91YmxlIENvbHVtbiBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX0NPTFVNTl9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBUcmlwbGUgQ29sdW1uIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5UUklQTEVfQ09MVU1OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tdHJpcGxlLXRleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIFBBWVJPTEwgVFJVQ0tTIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5QQVlST0xMX1RSVUNLUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXBheXJvbGwtdHJ1Y2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3M+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmYXVsdCBUZW1wbGF0ZSAtIFJlbmRlciBPbmx5IFRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRlZmF1bHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|