devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
1,129 lines • 106 kB
JavaScript
/*!
* devextreme-angular
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
/* tslint:disable:max-line-length */
import { TransferState, Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, EventEmitter, ContentChildren, QueryList } from '@angular/core';
import DxFileManager from 'devextreme/ui/file_manager';
import { DxComponent, DxTemplateHost, DxIntegrationModule, DxTemplateModule, NestedOptionHost, IterableDifferHelper, WatcherHelper, } from 'devextreme-angular/core';
import { DxoContextMenuModule } from 'devextreme-angular/ui/nested';
import { DxiItemModule } from 'devextreme-angular/ui/nested';
import { DxoItemViewModule } from 'devextreme-angular/ui/nested';
import { DxoDetailsModule } from 'devextreme-angular/ui/nested';
import { DxiColumnModule } from 'devextreme-angular/ui/nested';
import { DxoNotificationsModule } from 'devextreme-angular/ui/nested';
import { DxoPermissionsModule } from 'devextreme-angular/ui/nested';
import { DxoToolbarModule } from 'devextreme-angular/ui/nested';
import { DxiFileSelectionItemModule } from 'devextreme-angular/ui/nested';
import { DxoUploadModule } from 'devextreme-angular/ui/nested';
import { DxiFileManagerColumnModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerContextMenuModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxiFileManagerContextMenuItemModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerDetailsModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxiFileManagerFileSelectionItemModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxiFileManagerItemModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerItemViewModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerNotificationsModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerPermissionsModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerToolbarModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxiFileManagerToolbarItemModule } from 'devextreme-angular/ui/file-manager/nested';
import { DxoFileManagerUploadModule } from 'devextreme-angular/ui/file-manager/nested';
import { PROPERTY_TOKEN_columns, PROPERTY_TOKEN_items, PROPERTY_TOKEN_fileSelectionItems, } from 'devextreme-angular/core/tokens';
import * as i0 from "@angular/core";
import * as i1 from "devextreme-angular/core";
/**
* The FileManager is a UI component that allows users to upload, select, and manage files and directories in different file storages.
*/
export class DxFileManagerComponent extends DxComponent {
_watcherHelper;
_idh;
set _columnsContentChildren(value) {
this.setChildren('columns', value);
}
set _itemsContentChildren(value) {
this.setChildren('items', value);
}
set _fileSelectionItemsContentChildren(value) {
this.setChildren('fileSelectionItems', value);
}
instance = null;
/**
* Specifies the shortcut key that sets focus on the UI component.
*/
get accessKey() {
return this._getOption('accessKey');
}
set accessKey(value) {
this._setOption('accessKey', value);
}
/**
* Specifies whether the UI component changes its visual state as a result of user interaction.
*/
get activeStateEnabled() {
return this._getOption('activeStateEnabled');
}
set activeStateEnabled(value) {
this._setOption('activeStateEnabled', value);
}
/**
* Specifies the allowed upload file extensions.
*/
get allowedFileExtensions() {
return this._getOption('allowedFileExtensions');
}
set allowedFileExtensions(value) {
this._setOption('allowedFileExtensions', value);
}
/**
* Configures the context menu settings.
*/
get contextMenu() {
return this._getOption('contextMenu');
}
set contextMenu(value) {
this._setOption('contextMenu', value);
}
/**
* Specifies the path that is used when the FileManager is initialized.
*/
get currentPath() {
return this._getOption('currentPath');
}
set currentPath(value) {
this._setOption('currentPath', value);
}
/**
* Specifies an array of path keys to the current location.
*/
get currentPathKeys() {
return this._getOption('currentPathKeys');
}
set currentPathKeys(value) {
this._setOption('currentPathKeys', value);
}
/**
* Customizes columns in details view. Applies only if itemView.mode is 'details'.
*/
get customizeDetailColumns() {
return this._getOption('customizeDetailColumns');
}
set customizeDetailColumns(value) {
this._setOption('customizeDetailColumns', value);
}
/**
* Allows you to provide custom icons to be used as thumbnails.
*/
get customizeThumbnail() {
return this._getOption('customizeThumbnail');
}
set customizeThumbnail(value) {
this._setOption('customizeThumbnail', value);
}
/**
* Specifies whether the UI component responds to user interaction.
*/
get disabled() {
return this._getOption('disabled');
}
set disabled(value) {
this._setOption('disabled', value);
}
/**
* Specifies the global attributes to be attached to the UI component's container element.
*/
get elementAttr() {
return this._getOption('elementAttr');
}
set elementAttr(value) {
this._setOption('elementAttr', value);
}
/**
* Specifies the file system provider.
*/
get fileSystemProvider() {
return this._getOption('fileSystemProvider');
}
set fileSystemProvider(value) {
this._setOption('fileSystemProvider', value);
}
/**
* Specifies a key of the initially or currently focused item.
*/
get focusedItemKey() {
return this._getOption('focusedItemKey');
}
set focusedItemKey(value) {
this._setOption('focusedItemKey', value);
}
/**
* Specifies whether the UI component can be focused using keyboard navigation.
*/
get focusStateEnabled() {
return this._getOption('focusStateEnabled');
}
set focusStateEnabled(value) {
this._setOption('focusStateEnabled', value);
}
/**
* Specifies the UI component's height.
*/
get height() {
return this._getOption('height');
}
set height(value) {
this._setOption('height', value);
}
/**
* Specifies text for a hint that appears when a user pauses on the UI component.
*/
get hint() {
return this._getOption('hint');
}
set hint(value) {
this._setOption('hint', value);
}
/**
* Specifies whether the UI component changes its state when a user pauses on it.
*/
get hoverStateEnabled() {
return this._getOption('hoverStateEnabled');
}
set hoverStateEnabled(value) {
this._setOption('hoverStateEnabled', value);
}
/**
* Configures the file and directory view.
*/
get itemView() {
return this._getOption('itemView');
}
set itemView(value) {
this._setOption('itemView', value);
}
/**
* Configures notification settings.
*/
get notifications() {
return this._getOption('notifications');
}
set notifications(value) {
this._setOption('notifications', value);
}
/**
* Specifies actions that a user is allowed to perform on files and directories.
*/
get permissions() {
return this._getOption('permissions');
}
set permissions(value) {
this._setOption('permissions', value);
}
/**
* Specifies the root directory display name.
*/
get rootFolderName() {
return this._getOption('rootFolderName');
}
set rootFolderName(value) {
this._setOption('rootFolderName', value);
}
/**
* Switches the UI component to a right-to-left representation.
*/
get rtlEnabled() {
return this._getOption('rtlEnabled');
}
set rtlEnabled(value) {
this._setOption('rtlEnabled', value);
}
/**
* Contains an array of initially or currently selected files and directories' keys.
*/
get selectedItemKeys() {
return this._getOption('selectedItemKeys');
}
set selectedItemKeys(value) {
this._setOption('selectedItemKeys', value);
}
/**
* Specifies whether a user can select a single or multiple files and directories in the item view simultaneously.
*/
get selectionMode() {
return this._getOption('selectionMode');
}
set selectionMode(value) {
this._setOption('selectionMode', value);
}
/**
* Specifies the number of the element when the Tab key is used for navigating.
*/
get tabIndex() {
return this._getOption('tabIndex');
}
set tabIndex(value) {
this._setOption('tabIndex', value);
}
/**
* Configures toolbar settings.
*/
get toolbar() {
return this._getOption('toolbar');
}
set toolbar(value) {
this._setOption('toolbar', value);
}
/**
* Configures upload settings.
*/
get upload() {
return this._getOption('upload');
}
set upload(value) {
this._setOption('upload', value);
}
/**
* Specifies whether the UI component is visible.
*/
get visible() {
return this._getOption('visible');
}
set visible(value) {
this._setOption('visible', value);
}
/**
* Specifies the UI component's width.
*/
get width() {
return this._getOption('width');
}
set width(value) {
this._setOption('width', value);
}
/**
* A function that is executed when the UI component is rendered and each time the component is repainted.
*/
onContentReady;
/**
* A function that is executed when a context menu item is clicked.
*/
onContextMenuItemClick;
/**
* A function that is executed before a context menu is displayed.
*/
onContextMenuShowing;
/**
* A function that is executed when the current directory is changed.
*/
onCurrentDirectoryChanged;
/**
* A function that is executed when a directory is created.
*/
onDirectoryCreated;
/**
* A function that is executed before a directory is created.
*/
onDirectoryCreating;
/**
* A function that is executed before the UI component is disposed of.
*/
onDisposing;
/**
* A function that is executed when an error occurs.
*/
onErrorOccurred;
/**
* A function that is executed when a file is successfully uploaded.
*/
onFileUploaded;
/**
* A function that is executed before the file is uploaded.
*/
onFileUploading;
/**
* A function that is executed when the focused item is changed.
*/
onFocusedItemChanged;
/**
* A function used in JavaScript frameworks to save the UI component instance.
*/
onInitialized;
/**
* A function that is executed when a file or directory is copied.
*/
onItemCopied;
/**
* A function that is executed before a file or directory is copied.
*/
onItemCopying;
/**
* A function that is executed when a file or directory is deleted.
*/
onItemDeleted;
/**
* A function that is executed before a file or directory is deleted.
*/
onItemDeleting;
/**
* A function that is executed before a file is downloaded.
*/
onItemDownloading;
/**
* A function that is executed when a file or directory is moved.
*/
onItemMoved;
/**
* A function that is executed before a file or directory is moved.
*/
onItemMoving;
/**
* A function that is executed when a file or directory is renamed.
*/
onItemRenamed;
/**
* A function that is executed before a file or directory is renamed.
*/
onItemRenaming;
/**
* A function that is executed after a UI component property is changed.
*/
onOptionChanged;
/**
* A function that is executed when the selected file is opened.
*/
onSelectedFileOpened;
/**
* A function that is executed when a file system item is selected or selection is canceled.
*/
onSelectionChanged;
/**
* A function that is executed when a toolbar item is clicked.
*/
onToolbarItemClick;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
accessKeyChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
activeStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
allowedFileExtensionsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
contextMenuChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
currentPathChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
currentPathKeysChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customizeDetailColumnsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customizeThumbnailChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
disabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
elementAttrChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
fileSystemProviderChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
focusedItemKeyChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
focusStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
heightChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
hintChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
hoverStateEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
itemViewChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
notificationsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
permissionsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
rootFolderNameChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
rtlEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
selectedItemKeysChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
selectionModeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
tabIndexChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
toolbarChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
uploadChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
visibleChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
widthChange;
constructor(elementRef, ngZone, templateHost, _watcherHelper, _idh, optionHost, transferState, platformId) {
super(elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId);
this._watcherHelper = _watcherHelper;
this._idh = _idh;
this._createEventEmitters([
{ subscribe: 'contentReady', emit: 'onContentReady' },
{ subscribe: 'contextMenuItemClick', emit: 'onContextMenuItemClick' },
{ subscribe: 'contextMenuShowing', emit: 'onContextMenuShowing' },
{ subscribe: 'currentDirectoryChanged', emit: 'onCurrentDirectoryChanged' },
{ subscribe: 'directoryCreated', emit: 'onDirectoryCreated' },
{ subscribe: 'directoryCreating', emit: 'onDirectoryCreating' },
{ subscribe: 'disposing', emit: 'onDisposing' },
{ subscribe: 'errorOccurred', emit: 'onErrorOccurred' },
{ subscribe: 'fileUploaded', emit: 'onFileUploaded' },
{ subscribe: 'fileUploading', emit: 'onFileUploading' },
{ subscribe: 'focusedItemChanged', emit: 'onFocusedItemChanged' },
{ subscribe: 'initialized', emit: 'onInitialized' },
{ subscribe: 'itemCopied', emit: 'onItemCopied' },
{ subscribe: 'itemCopying', emit: 'onItemCopying' },
{ subscribe: 'itemDeleted', emit: 'onItemDeleted' },
{ subscribe: 'itemDeleting', emit: 'onItemDeleting' },
{ subscribe: 'itemDownloading', emit: 'onItemDownloading' },
{ subscribe: 'itemMoved', emit: 'onItemMoved' },
{ subscribe: 'itemMoving', emit: 'onItemMoving' },
{ subscribe: 'itemRenamed', emit: 'onItemRenamed' },
{ subscribe: 'itemRenaming', emit: 'onItemRenaming' },
{ subscribe: 'optionChanged', emit: 'onOptionChanged' },
{ subscribe: 'selectedFileOpened', emit: 'onSelectedFileOpened' },
{ subscribe: 'selectionChanged', emit: 'onSelectionChanged' },
{ subscribe: 'toolbarItemClick', emit: 'onToolbarItemClick' },
{ emit: 'accessKeyChange' },
{ emit: 'activeStateEnabledChange' },
{ emit: 'allowedFileExtensionsChange' },
{ emit: 'contextMenuChange' },
{ emit: 'currentPathChange' },
{ emit: 'currentPathKeysChange' },
{ emit: 'customizeDetailColumnsChange' },
{ emit: 'customizeThumbnailChange' },
{ emit: 'disabledChange' },
{ emit: 'elementAttrChange' },
{ emit: 'fileSystemProviderChange' },
{ emit: 'focusedItemKeyChange' },
{ emit: 'focusStateEnabledChange' },
{ emit: 'heightChange' },
{ emit: 'hintChange' },
{ emit: 'hoverStateEnabledChange' },
{ emit: 'itemViewChange' },
{ emit: 'notificationsChange' },
{ emit: 'permissionsChange' },
{ emit: 'rootFolderNameChange' },
{ emit: 'rtlEnabledChange' },
{ emit: 'selectedItemKeysChange' },
{ emit: 'selectionModeChange' },
{ emit: 'tabIndexChange' },
{ emit: 'toolbarChange' },
{ emit: 'uploadChange' },
{ emit: 'visibleChange' },
{ emit: 'widthChange' }
]);
this._idh.setHost(this);
optionHost.setHost(this);
}
_createInstance(element, options) {
return new DxFileManager(element, options);
}
ngOnDestroy() {
this._destroyWidget();
}
ngOnChanges(changes) {
super.ngOnChanges(changes);
this.setupChanges('allowedFileExtensions', changes);
this.setupChanges('currentPathKeys', changes);
this.setupChanges('selectedItemKeys', changes);
}
setupChanges(prop, changes) {
if (!(prop in this._optionsToUpdate)) {
this._idh.setup(prop, changes);
}
}
ngDoCheck() {
this._idh.doCheck('allowedFileExtensions');
this._idh.doCheck('currentPathKeys');
this._idh.doCheck('selectedItemKeys');
this._watcherHelper.checkWatchers();
super.ngDoCheck();
super.clearChangedOptions();
}
_setOption(name, value) {
let isSetup = this._idh.setupSingle(name, value);
let isChanged = this._idh.getChanges(name, value) !== null;
if (isSetup || isChanged) {
super._setOption(name, value);
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DxTemplateHost }, { token: i1.WatcherHelper }, { token: i1.IterableDifferHelper }, { token: i1.NestedOptionHost }, { token: i0.TransferState }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DxFileManagerComponent, isStandalone: true, selector: "dx-file-manager", inputs: { accessKey: "accessKey", activeStateEnabled: "activeStateEnabled", allowedFileExtensions: "allowedFileExtensions", contextMenu: "contextMenu", currentPath: "currentPath", currentPathKeys: "currentPathKeys", customizeDetailColumns: "customizeDetailColumns", customizeThumbnail: "customizeThumbnail", disabled: "disabled", elementAttr: "elementAttr", fileSystemProvider: "fileSystemProvider", focusedItemKey: "focusedItemKey", focusStateEnabled: "focusStateEnabled", height: "height", hint: "hint", hoverStateEnabled: "hoverStateEnabled", itemView: "itemView", notifications: "notifications", permissions: "permissions", rootFolderName: "rootFolderName", rtlEnabled: "rtlEnabled", selectedItemKeys: "selectedItemKeys", selectionMode: "selectionMode", tabIndex: "tabIndex", toolbar: "toolbar", upload: "upload", visible: "visible", width: "width" }, outputs: { onContentReady: "onContentReady", onContextMenuItemClick: "onContextMenuItemClick", onContextMenuShowing: "onContextMenuShowing", onCurrentDirectoryChanged: "onCurrentDirectoryChanged", onDirectoryCreated: "onDirectoryCreated", onDirectoryCreating: "onDirectoryCreating", onDisposing: "onDisposing", onErrorOccurred: "onErrorOccurred", onFileUploaded: "onFileUploaded", onFileUploading: "onFileUploading", onFocusedItemChanged: "onFocusedItemChanged", onInitialized: "onInitialized", onItemCopied: "onItemCopied", onItemCopying: "onItemCopying", onItemDeleted: "onItemDeleted", onItemDeleting: "onItemDeleting", onItemDownloading: "onItemDownloading", onItemMoved: "onItemMoved", onItemMoving: "onItemMoving", onItemRenamed: "onItemRenamed", onItemRenaming: "onItemRenaming", onOptionChanged: "onOptionChanged", onSelectedFileOpened: "onSelectedFileOpened", onSelectionChanged: "onSelectionChanged", onToolbarItemClick: "onToolbarItemClick", accessKeyChange: "accessKeyChange", activeStateEnabledChange: "activeStateEnabledChange", allowedFileExtensionsChange: "allowedFileExtensionsChange", contextMenuChange: "contextMenuChange", currentPathChange: "currentPathChange", currentPathKeysChange: "currentPathKeysChange", customizeDetailColumnsChange: "customizeDetailColumnsChange", customizeThumbnailChange: "customizeThumbnailChange", disabledChange: "disabledChange", elementAttrChange: "elementAttrChange", fileSystemProviderChange: "fileSystemProviderChange", focusedItemKeyChange: "focusedItemKeyChange", focusStateEnabledChange: "focusStateEnabledChange", heightChange: "heightChange", hintChange: "hintChange", hoverStateEnabledChange: "hoverStateEnabledChange", itemViewChange: "itemViewChange", notificationsChange: "notificationsChange", permissionsChange: "permissionsChange", rootFolderNameChange: "rootFolderNameChange", rtlEnabledChange: "rtlEnabledChange", selectedItemKeysChange: "selectedItemKeysChange", selectionModeChange: "selectionModeChange", tabIndexChange: "tabIndexChange", toolbarChange: "toolbarChange", uploadChange: "uploadChange", visibleChange: "visibleChange", widthChange: "widthChange" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
], queries: [{ propertyName: "_columnsContentChildren", predicate: PROPERTY_TOKEN_columns }, { propertyName: "_itemsContentChildren", predicate: PROPERTY_TOKEN_items }, { propertyName: "_fileSelectionItemsContentChildren", predicate: PROPERTY_TOKEN_fileSelectionItems }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, dependencies: [{ kind: "ngmodule", type: DxIntegrationModule }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerComponent, decorators: [{
type: Component,
args: [{
selector: 'dx-file-manager',
standalone: true,
template: '',
host: { ngSkipHydration: 'true' },
imports: [DxIntegrationModule],
providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
]
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DxTemplateHost }, { type: i1.WatcherHelper }, { type: i1.IterableDifferHelper }, { type: i1.NestedOptionHost }, { type: i0.TransferState }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }], propDecorators: { _columnsContentChildren: [{
type: ContentChildren,
args: [PROPERTY_TOKEN_columns]
}], _itemsContentChildren: [{
type: ContentChildren,
args: [PROPERTY_TOKEN_items]
}], _fileSelectionItemsContentChildren: [{
type: ContentChildren,
args: [PROPERTY_TOKEN_fileSelectionItems]
}], accessKey: [{
type: Input
}], activeStateEnabled: [{
type: Input
}], allowedFileExtensions: [{
type: Input
}], contextMenu: [{
type: Input
}], currentPath: [{
type: Input
}], currentPathKeys: [{
type: Input
}], customizeDetailColumns: [{
type: Input
}], customizeThumbnail: [{
type: Input
}], disabled: [{
type: Input
}], elementAttr: [{
type: Input
}], fileSystemProvider: [{
type: Input
}], focusedItemKey: [{
type: Input
}], focusStateEnabled: [{
type: Input
}], height: [{
type: Input
}], hint: [{
type: Input
}], hoverStateEnabled: [{
type: Input
}], itemView: [{
type: Input
}], notifications: [{
type: Input
}], permissions: [{
type: Input
}], rootFolderName: [{
type: Input
}], rtlEnabled: [{
type: Input
}], selectedItemKeys: [{
type: Input
}], selectionMode: [{
type: Input
}], tabIndex: [{
type: Input
}], toolbar: [{
type: Input
}], upload: [{
type: Input
}], visible: [{
type: Input
}], width: [{
type: Input
}], onContentReady: [{
type: Output
}], onContextMenuItemClick: [{
type: Output
}], onContextMenuShowing: [{
type: Output
}], onCurrentDirectoryChanged: [{
type: Output
}], onDirectoryCreated: [{
type: Output
}], onDirectoryCreating: [{
type: Output
}], onDisposing: [{
type: Output
}], onErrorOccurred: [{
type: Output
}], onFileUploaded: [{
type: Output
}], onFileUploading: [{
type: Output
}], onFocusedItemChanged: [{
type: Output
}], onInitialized: [{
type: Output
}], onItemCopied: [{
type: Output
}], onItemCopying: [{
type: Output
}], onItemDeleted: [{
type: Output
}], onItemDeleting: [{
type: Output
}], onItemDownloading: [{
type: Output
}], onItemMoved: [{
type: Output
}], onItemMoving: [{
type: Output
}], onItemRenamed: [{
type: Output
}], onItemRenaming: [{
type: Output
}], onOptionChanged: [{
type: Output
}], onSelectedFileOpened: [{
type: Output
}], onSelectionChanged: [{
type: Output
}], onToolbarItemClick: [{
type: Output
}], accessKeyChange: [{
type: Output
}], activeStateEnabledChange: [{
type: Output
}], allowedFileExtensionsChange: [{
type: Output
}], contextMenuChange: [{
type: Output
}], currentPathChange: [{
type: Output
}], currentPathKeysChange: [{
type: Output
}], customizeDetailColumnsChange: [{
type: Output
}], customizeThumbnailChange: [{
type: Output
}], disabledChange: [{
type: Output
}], elementAttrChange: [{
type: Output
}], fileSystemProviderChange: [{
type: Output
}], focusedItemKeyChange: [{
type: Output
}], focusStateEnabledChange: [{
type: Output
}], heightChange: [{
type: Output
}], hintChange: [{
type: Output
}], hoverStateEnabledChange: [{
type: Output
}], itemViewChange: [{
type: Output
}], notificationsChange: [{
type: Output
}], permissionsChange: [{
type: Output
}], rootFolderNameChange: [{
type: Output
}], rtlEnabledChange: [{
type: Output
}], selectedItemKeysChange: [{
type: Output
}], selectionModeChange: [{
type: Output
}], tabIndexChange: [{
type: Output
}], toolbarChange: [{
type: Output
}], uploadChange: [{
type: Output
}], visibleChange: [{
type: Output
}], widthChange: [{
type: Output
}] } });
export class DxFileManagerModule {
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerModule, imports: [DxFileManagerComponent, DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxIntegrationModule,
DxTemplateModule], exports: [DxFileManagerComponent, DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxTemplateModule] });
/** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerModule, imports: [DxFileManagerComponent,
DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxIntegrationModule,
DxTemplateModule, DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxTemplateModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxFileManagerModule, decorators: [{
type: NgModule,
args: [{
imports: [
DxFileManagerComponent,
DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxIntegrationModule,
DxTemplateModule
],
exports: [
DxFileManagerComponent,
DxoContextMenuModule,
DxiItemModule,
DxoItemViewModule,
DxoDetailsModule,
DxiColumnModule,
DxoNotificationsModule,
DxoPermissionsModule,
DxoToolbarModule,
DxiFileSelectionItemModule,
DxoUploadModule,
DxiFileManagerColumnModule,
DxoFileManagerContextMenuModule,
DxiFileManagerContextMenuItemModule,
DxoFileManagerDetailsModule,
DxiFileManagerFileSelectionItemModule,
DxiFileManagerItemModule,
DxoFileManagerItemViewModule,
DxoFileManagerNotificationsModule,
DxoFileManagerPermissionsModule,
DxoFileManagerToolbarModule,
DxiFileManagerToolbarItemModule,
DxoFileManagerUploadModule,
DxTemplateModule
]
}]
}] });
export * from 'devextreme-angular/ui/file-manager/nested';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kaXN0L3VpL2ZpbGUtbWFuYWdlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILG9DQUFvQztBQUdwQyxPQUFPLEVBQ0gsYUFBYSxFQUNiLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxFQUVOLEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUlaLGVBQWUsRUFDZixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFPdkIsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFHdkQsT0FBTyxFQUNILFdBQVcsRUFDWCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGFBQWEsR0FFaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIs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d0JBQzNCLHFDQUFxQzt3QkFDckMsd0JBQXdCO3dCQUN4Qiw0QkFBNEI7d0JBQzVCLGlDQUFpQzt3QkFDakMsK0JBQStCO3dCQUMvQiwyQkFBMkI7d0JBQzNCLCtCQUErQjt3QkFDL0IsMEJBQTBCO3dCQUMxQixtQkFBbUI7d0JBQ25CLGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZiwwQkFBMEI7d0JBQzFCLCtCQUErQjt3QkFDL0IsbUNBQW1DO3dCQUNuQywyQkFBMkI7d0JBQzNCLHFDQUFxQzt3QkFDckMsd0JBQXdCO3dCQUN4Qiw0QkFBNEI7d0JBQzVCLGlDQUFpQzt3QkFDakMsK0JBQStCO3dCQUMvQiwyQkFBMkI7d0JBQzNCLCtCQUErQjt3QkFDL0IsMEJBQTBCO3dCQUMxQixnQkFBZ0I7cUJBQ2pCO2lCQUNGOztBQUdELGNBQWMsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjUuMi4zXG4gKiBCdWlsZCBkYXRlOiBGcmkgRGVjIDEyIDIwMjVcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDI1IERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXHJcblxyXG5cclxuaW1wb3J0IHtcclxuICAgIFRyYW5zZmVyU3RhdGUsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBOZ01vZHVsZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBQTEFURk9STV9JRCxcclxuICAgIEluamVjdCxcclxuXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuaW1wb3J0IEZpbGVTeXN0ZW1JdGVtIGZyb20gJ2RldmV4dHJlbWUvZmlsZV9tYW5hZ2VtZW50L2ZpbGVfc3lzdGVtX2l0ZW0nO1xyXG5pbXBvcnQgeyBkeEZpbGVNYW5hZ2VyQ29udGV4dE1lbnUsIGR4RmlsZU1hbmFnZXJEZXRhaWxzQ29sdW1uLCBGaWxlTWFuYWdlckl0ZW1WaWV3TW9kZSwgQ29udGVudFJlYWR5RXZlbnQsIENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQsIENvbnRleHRNZW51U2hvd2luZ0V2ZW50LCBDdXJyZW50RGlyZWN0b3J5Q2hhbmdlZEV2ZW50LCBEaXJlY3RvcnlDcmVhdGVkRXZlbnQsIERpcmVjdG9yeUNyZWF0aW5nRXZlbnQsIERpc3Bvc2luZ0V2ZW50LCBFcnJvck9jY3VycmVkRXZlbnQsIEZpbGVVcGxvYWRlZEV2ZW50LCBGaWxlVXBsb2FkaW5nRXZlbnQsIEZvY3VzZWRJdGVtQ2hhbmdlZEV2ZW50LCBJbml0aWFsaXplZEV2ZW50LCBJdGVtQ29waWVkRXZlbnQsIEl0ZW1Db3B5aW5nRXZlbnQsIEl0ZW1EZWxldGVkRXZlbnQsIEl0ZW1EZWxldGluZ0V2ZW50LCBJdGVtRG93bmxvYWRpbmdFdmVudCwgSXRlbU1vdmVkRXZlbnQsIEl0ZW1Nb3ZpbmdFdmVudCwgSXRlbVJlbmFtZWRFdmVudCwgSXRlbVJlbmFtaW5nRXZlbnQsIE9wdGlvbkNoYW5nZWRFdmVudCwgU2VsZWN0ZWRGaWxlT3BlbmVkRXZlbnQsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgVG9vbGJhckl0ZW1DbGlja0V2ZW50LCBkeEZpbGVNYW5hZ2VyVG9vbGJhciB9IGZyb20gJ2RldmV4dHJlbWUvdWkvZmlsZV9tYW5hZ2VyJztcclxuaW1wb3J0IHsgU2luZ2xlT3JNdWx0aXBsZSB9IGZyb20gJ2RldmV4dHJlbWUvY29tbW9uJztcclxuXHJcbmltcG9ydCBEeEZpbGVNYW5hZ2VyIGZyb20gJ2RldmV4dHJlbWUvdWkvZmlsZV9tYW5hZ2VyJztcclxuXHJcblxyXG5pbXBvcnQge1xyXG4gICAgRHhDb21wb25lbnQsXHJcbiAgICBEeFRlbXBsYXRlSG9zdCxcclxuICAgIER4SW50ZWdyYXRpb25Nb2R1bGUsXHJcbiAgICBEeFRlbXBsYXRlTW9kdWxlLFxyXG4gICAgTmVzdGVkT3B0aW9uSG9zdCxcclxuICAgIEl0ZXJhYmxlRGlmZmVySGVscGVyLFxyXG4gICAgV2F0Y2hlckhlbHBlcixcclxuICAgIENvbGxlY3Rpb25OZXN0ZWRPcHRpb24sXHJcbn0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRHhvQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpSXRlbU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9JdGVtVmlld01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9EZXRhaWxzTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aUNvbHVtbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Ob3RpZmljYXRpb25zTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1Blcm1pc3Npb25zTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1Rvb2xiYXJNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRmlsZVNlbGVjdGlvbkl0ZW1Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvVXBsb2FkTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcblxyXG5pbXBvcnQgeyBEeGlGaWxlTWFuYWdlckNvbHVtbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRmlsZU1hbmFnZXJDb250ZXh0TWVudU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRmlsZU1hbmFnZXJDb250ZXh0TWVudUl0ZW1Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZmlsZS1tYW5hZ2VyL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0ZpbGVNYW5hZ2VyRGV0YWlsc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRmlsZU1hbmFnZXJGaWxlU2VsZWN0aW9uSXRlbU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRmlsZU1hbmFnZXJJdGVtTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2ZpbGUtbWFuYWdlci9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9GaWxlTWFuYWdlckl0ZW1WaWV3TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2ZpbGUtbWFuYWdlci9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9GaWxlTWFuYWdlck5vdGlmaWNhdGlvbnNNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZmlsZS1tYW5hZ2VyL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0ZpbGVNYW5hZ2VyUGVybWlzc2lvbnNNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZmlsZS1tYW5hZ2VyL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0ZpbGVNYW5hZ2VyVG9vbGJhck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRmlsZU1hbmFnZXJUb29sYmFySXRlbU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9maWxlLW1hbmFnZXIvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRmlsZU1hbmFnZXJVcGxvYWRNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZmlsZS1tYW5hZ2VyL25lc3RlZCc7XHJcbmltcG9ydCB7IFxyXG4gICAgICAgICAgIFBST1BFUlRZX1RPS0VOX2NvbHVtbnMsXHJcbiAgICAgICAgICAgUFJPUEVSVFlfVE9LRU5faXRlbXMsXHJcbiAgICAgICAgICAgUFJPUEVSVFlfVE9LRU5fZmlsZVNlbGVjdGlvbkl0ZW1zLFxyXG4gICAgIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL2NvcmUvdG9rZW5zJztcclxuXHJcblxyXG4vKipcclxuICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJdXHJcblxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2R4LWZpbGUtbWFuYWdlcicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgaG9zdDogeyBuZ1NraXBIeWRyYXRpb246ICd0cnVlJyB9LFxyXG4gICAgaW1wb3J0czogWyBEeEludGVncmF0aW9uTW9kdWxlIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBEeFRlbXBsYXRlSG9zdCxcclxuICAgICAgICBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgIE5lc3RlZE9wdGlvbkhvc3QsXHJcbiAgICAgICAgSXRlcmFibGVEaWZmZXJIZWxwZXJcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIER4RmlsZU1hbmFnZXJDb21wb25lbnQgZXh0ZW5kcyBEeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcclxuXHJcbiAgICBAQ29udGVudENoaWxkcmVuKFBST1BFUlRZX1RPS0VOX2NvbHVtbnMpXHJcbiAgICBzZXQgX2NvbHVtbnNDb250ZW50Q2hpbGRyZW4odmFsdWU6IFF1ZXJ5TGlzdDxDb2xsZWN0aW9uTmVzdGVkT3B0aW9uPikge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW4oJ2NvbHVtbnMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihQUk9QRVJUWV9UT0tFTl9pdGVtcylcclxuICAgIHNldCBfaXRlbXNDb250ZW50Q2hpbGRyZW4odmFsdWU6IFF1ZXJ5TGlzdDxDb2xsZWN0aW9uTmVzdGVkT3B0aW9uPikge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW4oJ2l0ZW1zJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oUFJPUEVSVFlfVE9LRU5fZmlsZVNlbGVjdGlvbkl0ZW1zKVxyXG4gICAgc2V0IF9maWxlU2VsZWN0aW9uSXRlbXNDb250ZW50Q2hpbGRyZW4odmFsdWU6IFF1ZXJ5TGlzdDxDb2xsZWN0aW9uTmVzdGVkT3B0aW9uPikge1xyXG4gICAgICAgIHRoaXMuc2V0Q2hpbGRyZW4oJ2ZpbGVTZWxlY3Rpb25JdGVtcycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW5jZTogRHhGaWxlTWFuYWdlciA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0T3B0aW9ucy5hY2Nlc3NLZXldXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBhY2Nlc3NLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdhY2Nlc3NLZXknKTtcclxuICAgIH1cclxuICAgIHNldCBhY2Nlc3NLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYWNjZXNzS2V5JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpXaWRnZXRPcHRpb25zLmFjdGl2ZVN0YXRlRW5hYmxlZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGFjdGl2ZVN0YXRlRW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdhY3RpdmVTdGF0ZUVuYWJsZWQnKTtcclxuICAgIH1cclxuICAgIHNldCBhY3RpdmVTdGF0ZUVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2FjdGl2ZVN0YXRlRW5hYmxlZCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMuYWxsb3dlZEZpbGVFeHRlbnNpb25zXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYWxsb3dlZEZpbGVFeHRlbnNpb25zKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2FsbG93ZWRGaWxlRXh0ZW5zaW9ucycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGFsbG93ZWRGaWxlRXh0ZW5zaW9ucyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYWxsb3dlZEZpbGVFeHRlbnNpb25zJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5jb250ZXh0TWVudV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGNvbnRleHRNZW51KCk6IGR4RmlsZU1hbmFnZXJDb250ZXh0TWVudSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY29udGV4dE1lbnUnKTtcclxuICAgIH1cclxuICAgIHNldCBjb250ZXh0TWVudSh2YWx1ZTogZHhGaWxlTWFuYWdlckNvbnRleHRNZW51KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdjb250ZXh0TWVudScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMuY3VycmVudFBhdGhdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjdXJyZW50UGF0aCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1cnJlbnRQYXRoJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VycmVudFBhdGgodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY3VycmVudFBhdGgnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLmN1cnJlbnRQYXRoS2V5c11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGN1cnJlbnRQYXRoS2V5cygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjdXJyZW50UGF0aEtleXMnKTtcclxuICAgIH1cclxuICAgIHNldCBjdXJyZW50UGF0aEtleXModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2N1cnJlbnRQYXRoS2V5cycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMuY3VzdG9taXplRGV0YWlsQ29sdW1uc11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGN1c3RvbWl6ZURldGFpbENvbHVtbnMoKTogKChjb2x1bW5zOiBBcnJheTxkeEZpbGVNYW5hZ2VyRGV0YWlsc0NvbHVtbj4pID0+IEFycmF5PGR4RmlsZU1hbmFnZXJEZXRhaWxzQ29sdW1uPikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1c3RvbWl6ZURldGFpbENvbHVtbnMnKTtcclxuICAgIH1cclxuICAgIHNldCBjdXN0b21pemVEZXRhaWxDb2x1bW5zKHZhbHVlOiAoKGNvbHVtbnM6IEFycmF5PGR4RmlsZU1hbmFnZXJEZXRhaWxzQ29sdW1uPikgPT4gQXJyYXk8ZHhGaWxlTWFuYWdlckRldGFpbHNDb2x1bW4+KSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY3VzdG9taXplRGV0YWlsQ29sdW1ucycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMuY3VzdG9taXplVGh1bWJuYWlsXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY3VzdG9taXplVGh1bWJuYWlsKCk6ICgoZmlsZVN5c3RlbUl0ZW06IEZpbGVTeXN0ZW1JdGVtKSA9PiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjdXN0b21pemVUaHVtYm5haWwnKTtcclxuICAgIH1cclxuICAgIHNldCBjdXN0b21pemVUaHVtYm5haWwodmFsdWU6ICgoZmlsZVN5c3RlbUl0ZW06IEZpbGVTeXN0ZW1JdGVtKSA9PiBzdHJpbmcpKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdjdXN0b21pemVUaHVtYm5haWwnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOldpZGdldE9wdGlvbnMuZGlzYWJsZWRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdkaXNhYmxlZCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdkaXNhYmxlZCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6RE9NQ29tcG9uZW50T3B0aW9ucy5lbGVtZW50QXR0cl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGVsZW1lbnRBdHRyKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2VsZW1lbnRBdHRyJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgZWxlbWVudEF0dHIodmFsdWU6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2VsZW1lbnRBdHRyJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5maWxlU3lzdGVtUHJvdmlkZXJdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBmaWxlU3lzdGVtUHJvdmlkZXIoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdmaWxlU3lzdGVtUHJvdmlkZXInKTtcclxuICAgIH1cclxuICAgIHNldCBmaWxlU3lzdGVtUHJvdmlkZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignZmlsZVN5c3RlbVByb3ZpZGVyJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5mb2N1c2VkSXRlbUtleV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGZvY3VzZWRJdGVtS2V5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZm9jdXNlZEl0ZW1LZXknKTtcclxuICAgIH1cclxuICAgIHNldCBmb2N1c2VkSXRlbUtleSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdmb2N1c2VkSXRlbUtleScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0T3B0aW9ucy5mb2N1c1N0YXRlRW5hYmxlZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGZvY3VzU3RhdGVFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2ZvY3VzU3RhdGVFbmFibGVkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgZm9jdXNTdGF0ZUVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2ZvY3VzU3RhdGVFbmFibGVkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpET01Db21wb25lbnRPcHRpb25zLmhlaWdodF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGhlaWdodCgpOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2hlaWdodCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdoZWlnaHQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOldpZGdldE9wdGlvbnMuaGludF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGhpbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdoaW50Jyk7XHJcbiAgICB9XHJcbiAgICBzZXQgaGludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdoaW50JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpXaWRnZXRPcHRpb25zLmhvdmVyU3RhdGVFbmFibGVkXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaG92ZXJTdGF0ZUVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignaG92ZXJTdGF0ZUVuYWJsZWQnKTtcclxuICAgIH1cclxuICAgIHNldCBob3ZlclN0YXRlRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignaG92ZXJTdGF0ZUVuYWJsZWQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLml0ZW1WaWV3XVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaXRlbVZpZXcoKTogeyBkZXRhaWxzPzogeyBjb2x1bW5zPzogQXJyYXk8ZHhGaWxlTWFuYWdlckRldGFpbHNDb2x1bW4gfCBzdHJpbmc+IH0sIG1vZGU/OiBGaWxlTWFuYWdlckl0ZW1WaWV3TW9kZSwgc2hvd0ZvbGRlcnM/OiBib29sZWFuLCBzaG93UGFyZW50Rm9sZGVyPzogYm9vbGVhbiB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdpdGVtVmlldycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGl0ZW1WaWV3KHZhbHVlOiB7IGRldGFpbHM/OiB7IGNvbHVtbnM/OiBBcnJheTxkeEZpbGVNYW5hZ2VyRGV0YWlsc0NvbHVtbiB8IHN0cmluZz4gfSwgbW9kZT86IEZpbGVNYW5hZ2VySXRlbVZpZXdNb2RlLCBzaG93Rm9sZGVycz86IGJvb2xlYW4sIHNob3dQYXJlbnRGb2xkZXI/OiBib29sZWFuIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2l0ZW1WaWV3JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5ub3RpZmljYXRpb25zXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbm90aWZpY2F0aW9ucygpOiB7IHNob3dQYW5lbD86IGJvb2xlYW4sIHNob3dQb3B1cD86IGJvb2xlYW4gfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignbm90aWZpY2F0aW9ucycpO1xyXG4gICAgfVxyXG4gICAgc2V0IG5vdGlmaWNhdGlvbnModmFsdWU6IHsgc2hvd1BhbmVsPzogYm9vbGVhbiwgc2hvd1BvcHVwPzogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdub3RpZmljYXRpb25zJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5wZXJtaXNzaW9uc11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHBlcm1pc3Npb25zKCk6IHsgY29weT86IGJvb2xlYW4sIGNyZWF0ZT86IGJvb2xlYW4sIGRlbGV0ZT86IGJvb2xlYW4sIGRvd25sb2FkPzogYm9vbGVhbiwgbW92ZT86IGJvb2xlYW4sIHJlbmFtZT86IGJvb2xlYW4sIHVwbG9hZD86IGJvb2xlYW4gfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigncGVybWlzc2lvbnMnKTtcclxuICAgIH1cclxuICAgIHNldCBwZXJtaXNzaW9ucyh2YWx1ZTogeyBjb3B5PzogYm9vbGVhbiwgY3JlYXRlPzogYm9vbGVhbiwgZGVsZXRlPzogYm9vbGVhbiwgZG93bmxvYWQ/OiBib29sZWFuLCBtb3ZlPzogYm9vbGVhbiwgcmVuYW1lPzogYm9vbGVhbiwgdXBsb2FkPzogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdwZXJtaXNzaW9ucycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMucm9vdEZvbGRlck5hbWVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCByb290Rm9sZGVyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3Jvb3RGb2xkZXJOYW1lJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcm9vdEZvbGRlck5hbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigncm9vdEZvbGRlck5hbWUnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkRPTUNvbXBvbmVudE9wdGlvbnMucnRsRW5hYmxlZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHJ0bEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigncnRsRW5hYmxlZCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IHJ0bEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3J0bEVuYWJsZWQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLnNlbGVjdGVkSXRlbUtleXNdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzZWxlY3RlZEl0ZW1LZXlzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3NlbGVjdGVkSXRlbUtleXMnKTtcclxuICAgIH1cclxuICAgIHNldCBzZWxlY3RlZEl0ZW1LZXlzKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzZWxlY3RlZEl0ZW1LZXlzJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5zZWxlY3Rpb25Nb2RlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBTaW5nbGVPck11bHRpcGxlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdzZWxlY3Rpb25Nb2RlJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTogU2luZ2xlT3JNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignc2VsZWN0aW9uTW9kZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0T3B0aW9ucy50YWJJbmRleF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigndGFiSW5kZXgnKTtcclxuICAgIH1cclxuICAgIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd0YWJJbmRleCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMudG9vbGJhcl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvb2xiYXIoKTogZHhGaWxlTWFuYWdlclRvb2xiYXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3Rvb2xiYXInKTtcclxuICAgIH1cclxuICAgIHNldCB0b29sYmFyKHZhbHVlOiBkeEZpbGVNYW5hZ2VyVG9vbGJhcikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigndG9vbGJhcicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMudXBsb2FkXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdXBsb2FkKCk6IHsgY2h1bmtTaXplPzogbnVtYmVyLCBtYXhGaWxlU2l6ZT86IG51bWJlciB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCd1cGxvYWQnKTtcclxuICAgIH1cclxuICAgIHNldCB1cGxvYWQodmFsdWU6IHsgY2h1bmtTaXplPzogbnVtYmVyLCBtYXhGaWxlU2l6ZT86IG51bWJlciB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd1cGxvYWQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOldpZGdldE9wdGlvbnMudmlzaWJsZV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigndmlzaWJsZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3Zpc2libGUnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkRPTUNvbXBvbmVudE9wdGlvbnMud2lkdGhdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB3aWR0aCgpOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3dpZHRoJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgd2lkdGgodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignd2lkdGgnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkNvbnRlbnRSZWFkeV1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkNvbnRlbnRSZWFkeTogRXZlbnRFbWl0dGVyPENvbnRlbnRSZWFkeUV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uQ29udGV4dE1lbnVJdGVtQ2xpY2tdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudUl0ZW1DbGljazogRXZlbnRFbWl0dGVyPENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25Db250ZXh0TWVudVNob3dpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudVNob3dpbmc6IEV2ZW50RW1pdHRlcjxDb250ZXh0TWVudVNob3dpbmdFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDdXJyZW50RGlyZWN0b3J5Q2hhbmdlZEV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uRGlyZWN0b3J5Q3JlYXRlZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkRpcmVjdG9yeUNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxEaXJlY3RvcnlDcmVhdGVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25EaXJlY3RvcnlDcmVhdGluZ11cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkRpcmVjdG9yeUNyZWF0aW5nOiBFdmVudEVtaXR0ZXI8RGlyZWN0b3J5Q3JlYXRpbmdFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkRpc3Bvc2luZ11cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkRpc3Bvc2luZzogRXZlbnRFbWl0dGVyPERpc3Bvc2luZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uRXJyb3JPY2N1cnJlZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkVycm9yT2NjdXJyZWQ6IEV2ZW50RW1pdHRlcjxFcnJvck9jY3VycmVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25GaWxlVXBsb2FkZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25GaWxlVXBsb2FkZWQ6IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkZpbGVVcGxvYWRpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25GaWxlVXBsb2FkaW5nOiBFdmVudEVtaXR0ZXI8RmlsZVVwbG9hZGluZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uRm9jdXNlZEl0ZW1DaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uRm9jdXNlZEl0ZW1DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Rm9jdXNlZEl0ZW1DaGFuZ2VkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25Jbml0aWFsaXplZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8SW5pdGlhbGl6ZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkl0ZW1Db3BpZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtQ29waWVkOiBFdmVudEVtaXR0ZXI8SXRlbUNvcGllZEV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uSXRlbUNvcHlpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtQ29weWluZzogRXZlbnRFbWl0dGVyPEl0ZW1Db3B5aW5nRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25JdGVtRGVsZXRlZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkl0ZW1EZWxldGVkOiBFdmVudEVtaXR0ZXI8SXRlbURlbGV0ZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkl0ZW1EZWxldGluZ11cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkl0ZW1EZWxldGluZzogRXZlbnRFbWl0dGVyPEl0ZW1EZWxldGluZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uSXRlbURvd25sb2FkaW5nXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uSXRlbURvd25sb2FkaW5nOiBFdmVudEVtaXR0ZXI8SXRlbURvd25sb2FkaW5nRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25JdGVtTW92ZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtTW92ZWQ6IEV2ZW50RW1pdHRlcjxJdGVtTW92ZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbkl0ZW1Nb3ZpbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtTW92aW5nOiBFdmVudEVtaXR0ZXI8SXRlbU1vdmluZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uSXRlbVJlbmFtZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtUmVuYW1lZDogRXZlbnRFbWl0dGVyPEl0ZW1SZW5hbWVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25JdGVtUmVuYW1pbmddXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25JdGVtUmVuYW1pbmc6IEV2ZW50RW1pdHRlcjxJdGVtUmVuYW1pbmdFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vbk9wdGlvbkNoYW5nZWRdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25PcHRpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8T3B0aW9uQ2hhbmdlZEV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RmlsZU1hbmFnZXJPcHRpb25zLm9uU2VsZWN0ZWRGaWxlT3BlbmVkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0ZWRGaWxlT3BlbmVkOiBFdmVudEVtaXR0ZXI8U2VsZWN0ZWRGaWxlT3BlbmVkRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhGaWxlTWFuYWdlck9wdGlvbnMub25TZWxlY3Rpb25DaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeEZpbGVNYW5hZ2VyT3B0aW9ucy5vblRvb2xiYXJJdGVtQ2xpY2tdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25Ub29sYmFySXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8VG9vbGJhckl0ZW1DbGlja0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgYWNjZXNzS2V5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgYWN0aXZlU3RhdGVFbmFibGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGFsbG93ZWRGaWxlRXh0ZW5zaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBjb250ZXh0TWVudUNoYW5nZTogRXZlbnRFbWl0dGVyPGR4RmlsZU1hbmFnZXJDb250ZXh0TWVudT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGN1cnJlbnRQYXRoQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgY3VycmVudFBhdGhLZXlzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8c3RyaW5nPj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGN1c3RvbWl6ZURldGFpbENvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjwoKGNvbHVtbnM6IEFycmF5PGR4RmlsZU1hbmFnZXJEZXRhaWxzQ29sdW1uPikgPT4gQXJyYXk8ZHhGaWxlTWFuYWdlckRldGFpbHNDb2x1bW4+KT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGN1c3RvbWl6ZVRodW1ibmFpbENoYW5nZTogRXZlbnRFbWl0dGVyPCgoZmlsZVN5c3RlbUl0ZW06IEZpbGVTeXN0ZW1JdGVtKSA9PiBzdHJpbmcpPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZGlzYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZWxlbWVudEF0dHJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZmlsZVN5c3RlbVByb3ZpZGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZm9jdXNlZEl0ZW1LZXlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBmb2N1c1N0YXRlRW5hYmxlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBoZWlnaHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBoaW50Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaG92ZXJTdGF0ZUVuYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaXRlbVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGRldGFpbHM/OiB7IGNvbHVtbnM/OiBBcnJheTxkeEZpbGVNYW5hZ2VyRGV0YWlsc0NvbHVtbiB8IHN0cmluZz4gfSwgbW9kZT86IEZpbGVNYW5hZ2VySXRlbVZpZXdNb2RlLCBzaG93Rm9sZGVycz86IGJvb2xlYW4sIHNob3dQYXJlbnRGb2xkZXI/OiBib29sZWFuIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBzaG93UGFuZWw/OiBib29sZWFuLCBzaG93UG9wdXA/OiBib29sZWFuIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBwZXJtaXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPHsgY29weT86IGJvb2xlYW4sIGNyZWF0ZT86IGJvb2xlYW4sIGRlbGV0ZT86IGJvb2xlYW4sIGRvd25sb2FkPzogYm9vbGVhbiwgbW92ZT86IGJvb2xlYW4sIHJlbmFtZT86IGJvb2xlYW4sIHVwbG9hZD86IGJvb2xlYW4gfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHJvb3RGb2xkZXJOYW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcnRsRW5hYmxlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1LZXlzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8c3RyaW5nPj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbk1vZGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTaW5nbGVPck11bHRpcGxlPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgdGFiSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB0b29sYmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8ZHhGaWxlTWFuYWdlclRvb2xiYXI+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB1cGxvYWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGNodW5rU2l6ZT86IG51bWJlciwgbWF4RmlsZVNpemU/OiBudW1iZXIgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgd2lkdGhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xyXG5cclxuXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5nWm9uZTogTmdab25lLCB0ZW1wbGF0ZUhvc3Q6IER4VGVtcGxhdGVIb3N0LFxyXG4gICAgICAgICAgICBwcml2YXRlIF93YXRjaGVySGVscGVyOiBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgICAgICBwcml2YXRlIF9pZGg6IEl0ZXJhYmxlRGlmZmVySGVscGVyLFxyXG4gICAgICAgICAgICBvcHRpb25Ib3N0OiBOZXN0ZWRPcHRpb25Ib3N0LFxyXG4gICAgICAgICAgICB0cmFuc2ZlclN0YXRlOiBUcmFuc2ZlclN0YXRlLFxyXG4gICAgICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBhbnkpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgbmdab25lLCB0ZW1wbGF0ZUhvc3QsIF93YXRjaGVySGVscGVyLCB0cmFuc2ZlclN0YXRlLCBwbGF0Zm9ybUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRFbWl0dGVycyhbXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnY29udGVudFJlYWR5JywgZW1pdDogJ29uQ29udGVudFJlYWR5JyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2NvbnRleHRNZW51SXRlbUNsaWNrJywgZW1pdDogJ29uQ29udGV4dE1lbnVJdGVtQ2xpY2snIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnY29udGV4dE1lbnVTaG93aW5nJywgZW1pdDogJ29uQ29udGV4dE1lbnVTaG93aW5nJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2N1cnJlbnREaXJlY3RvcnlDaGFuZ2VkJywgZW1pdDogJ29uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZGlyZWN0b3J5Q3JlYXRlZCcsIGVtaXQ6ICdvbkRpcmVjdG9yeUNyZWF0ZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZGlyZWN0b3J5Q3JlYXRpbmcnLCBlbWl0OiAnb25EaXJlY3RvcnlDcmVhdGluZycgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdkaXNwb3NpbmcnLCBlbWl0OiAnb25EaXNwb3NpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZXJyb3JPY2N1cnJlZCcsIGVtaXQ6ICdvbkVycm9yT2NjdXJyZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnZmlsZVVwbG9hZGVkJywgZW1pdDogJ29uRmlsZVVwbG9hZGVkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2ZpbGVVcGxvYWRpbmcnLCBlbWl0OiAnb25GaWxlVXBsb2FkaW5nJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2ZvY3VzZWRJdGVtQ2hhbmdlZCcsIGVtaXQ6ICdvbkZvY3VzZWRJdGVtQ2hhbmdlZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpbml0aWFsaXplZCcsIGVtaXQ6ICdvbkluaXRpYWxpemVkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2l0ZW1Db3BpZWQnLCBlbWl0OiAnb25JdGVtQ29waWVkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2l0ZW1Db3B5aW5nJywgZW1pdDogJ29uSXRlbUNvcHlpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnaXRlbURlbGV0ZWQnLCBlbWl0OiAnb25JdGVtRGVsZXRlZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpdGVtRGVsZXRpbmcnLCBlbWl0OiAnb25JdGVtRGVsZXRpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnaXRlbURvd25sb2FkaW5nJywgZW1pdDogJ29uSXRlbURvd25sb2FkaW5nJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2l0ZW1Nb3ZlZCcsIGVtaXQ6ICdvbkl0ZW1Nb3ZlZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpdGVtTW92aW5nJywgZW1pdDogJ29uSXRlbU1vdmluZycgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpdGVtUmVuYW1lZCcsIGVtaXQ6ICdvbkl0ZW1SZW5hbWVkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2l0ZW1SZW5hbWluZycsIGVtaXQ6ICdvbkl0ZW1SZW5hbWluZycgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdvcHRpb25DaGFuZ2VkJywgZW1pdDogJ29uT3B0aW9uQ2hhbmdlZCcgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdzZWxlY3RlZEZpbGVPcGVuZWQnLCBlbWl0OiAnb25TZWxlY3RlZEZpbGVPcGVuZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnc2VsZWN0aW9uQ2hhbmdlZCcsIGVtaXQ6ICdvblNlbGVjdGlvbkNoYW5nZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAndG9vbGJhckl0ZW1DbGljaycsIGVtaXQ6ICdvblRvb2xiYXJJdGVtQ2xpY2snIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2FjY2Vzc0tleUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnYWN0aXZlU3RhdGVFbmFibGVkQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdhbGxvd2VkRmlsZUV4dGVuc2lvbnNDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2NvbnRleHRNZW51Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjdXJyZW50UGF0aENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnY3VycmVudFBhdGhLZXlzQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjdXN0b21pemVEZXRhaWxDb2x1bW5zQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjdXN0b21pemVUaHVtYm5haWxDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2Rpc2FibGVkQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdlbGVtZW50QXR0ckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnZmlsZVN5c3RlbVByb3ZpZGVyQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdmb2N1c2VkSXRlbUtleUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnZm9jdXNTdGF0ZUVuYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2hlaWdodENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnaGludENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnaG92ZXJTdGF0ZUVuYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2l0ZW1WaWV3Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdub3RpZmljYXRpb25zQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdwZXJtaXNzaW9uc0NoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncm9vdEZvbGRlck5hbWVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3J0bEVuYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3NlbGVjdGVkSXRlbUtleXNDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3NlbGVjdGlvbk1vZGVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3RhYkluZGV4Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd0b29sYmFyQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd1cGxvYWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3Zpc2libGVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3dpZHRoQ2hhbmdlJyB9XHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lkaC5zZXRIb3N0KHRoaXMpO1xyXG4gICAgICAgIG9wdGlvbkhvc3Quc2V0SG9zdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBEeEZpbGVNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95V2lkZ2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0dXBDaGFuZ2VzKCdhbGxvd2VkRmlsZUV4dGVuc2lvbnMnLCBjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnNldHVwQ2hhbmdlcygnY3VycmVudFBhdGhLZXlzJywgY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy5zZXR1cENoYW5nZXMoJ3NlbGVjdGVkSXRlbUtleXMnLCBjaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cENoYW5nZXMocHJvcDogc3RyaW5nLCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCEocHJvcCBpbiB0aGlzLl9vcHRpb25zVG9VcGRhdGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lkaC5zZXR1cChwcm9wLCBjaGFuZ2VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdEb0NoZWNrKCkge1xyXG4gICAgICAgIHRoaXMuX2lkaC5kb0NoZWNrKCdhbGxvd2VkRmlsZUV4dGVuc2lvbnMnKTtcclxuICAgICAgICB0aGlzLl9pZGguZG9DaGVjaygnY3VycmVudFBhdGhLZXlzJyk7XHJcbiAgICAgICAgdGhpcy5faWRoLmRvQ2hlY2soJ3NlbGVjdGVkSXRlbUtleXMnKTtcclxuICAgICAgICB0aGlzLl93YXRjaGVySGVscGVyLmNoZWNrV2F0Y2hlcnMoKTtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICBzdXBlci5jbGVhckNoYW5nZWRPcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NldE9wdGlvbihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNTZXR1cCA9IHRoaXMuX2lkaC5zZXR1cFNpbmdsZShuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IHRoaXMuX2lkaC5nZXRDaGFuZ2VzKG5hbWUsIHZhbHVlKSAhPT0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGlzU2V0dXAgfHwgaXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLl9zZXRPcHRpb24obmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBEeEZpbGVNYW5hZ2VyQ29tcG9uZW50LFxyXG4gICAgRHhvQ29udGV4dE1lbnVNb2R1bGUsXHJcbiAgICBEeGlJdGVtTW9kdWxlLFxyXG4gICAgRHhvSXRlbVZpZXdNb2R1bGUsXHJcbiAgICBEeG9EZXRhaWxzTW9kdWxlLFxyXG4gICAgRHhpQ29sdW1uTW9kdWxlLFxyXG4gICAgRHhvTm90aWZpY2F0aW9uc01vZHVsZSxcclxuICAgIER4b1Blcm1pc3Npb25zTW9kdWxlLFxyXG4gICAgRHhvVG9vbGJhck1vZHVsZSxcclxuICAgIER4aUZpbGVTZWxlY3Rpb25JdGVtTW9kdWxlLFxyXG4gICAgRHhvVXBsb2FkTW9kdWxlLFxyXG4gICAgRHhpRmlsZU1hbmFnZXJDb2x1bW5Nb2R1bGUsXHJcbiAgICBEeG9GaWxlTWFuYWdlckNvbnRleHRNZW51TW9kdWxlLFxyXG4gICAgRHhpRmlsZU1hbmFnZXJDb250ZXh0TWVudUl0ZW1Nb2R1bGUsXHJcbiAgICBEeG9GaWxlTWFuYWdlckRldGFpbHNNb2R1bGUsXHJcbiAgICBEeGlGaWxlTWFuYWdlckZpbGVTZWxlY3Rpb25JdGVtTW9kdWxlLFxyXG4gICAgRHhpRmlsZU1hbmFnZXJJdGVtTW9kdWxlLFxyXG4gICAgRHhvRmlsZU1hbmFnZXJJdGVtVmlld01vZHVsZSxcclxuICAgIER4b0ZpbGVNYW5hZ2VyTm90aWZpY2F0aW9uc01vZHVsZSxcclxuICAgIER4b0ZpbGVNYW5hZ2VyUGVybWlzc2lvbnNNb2R1bGUsXHJcbiAgICBEeG9GaWxlTWFuYWdlclRvb2xiYXJNb2R1bGUsXHJcbiAgICBEeGlGaWxlTWFuYWdlclRvb2xiYXJJdGVtTW9kdWxlLFxyXG4gICAgRHhvRmlsZU1hbmFnZXJVcGxvYWRNb2R1bGUsXHJcbiAgICBEeEludGVncmF0aW9uTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgRHhGaWxlTWFuYWdlckNvbXBvbmVudCxcclxuICAgIER4b0NvbnRleHRNZW51TW9kdWxlLFxyXG4gICAgRHhpSXRlbU1vZHVsZSxcclxuICAgIER4b0l0ZW1WaWV3TW9kdWxlLFxyXG4gICAgRHhvRGV0YWlsc01vZHVsZSxcclxuICAgIER4aUNvbHVtbk1vZHVsZSxcclxuICAgIER4b05vdGlmaWNhdGlvbnNNb2R1bGUsXHJcbiAgICBEeG9QZXJtaXNzaW9uc01vZHVsZSxcclxuICAgIER4b1Rvb2xiYXJNb2R1bGUsXHJcbiAgICBEeGlGaWxlU2VsZWN0aW9uSXRlbU1vZHVsZSxcclxuICAgIER4b1VwbG9hZE1vZHVsZSxcclxuICAgIER4aUZpbGVNYW5hZ2VyQ29sdW1uTW9kdWxlLFxyXG4gICAgRHhvRmlsZU1hbmFnZXJDb250ZXh0TWVudU1vZHVsZSxcclxuICAgIER4aUZpbGVNYW5hZ2VyQ29udGV4dE1lbnVJdGVtTW9kdWxlLFxyXG4gICAgRHhvRmlsZU1hbmFnZXJEZXRhaWxzTW9kdWxlLFxyXG4gICAgRHhpRmlsZU1hbmFnZXJGaWxlU2VsZWN0aW9uSXRlbU1vZHVsZSxcclxuICAgIER4aUZpbGVNYW5hZ2VySXRlbU1vZHVsZSxcclxuICAgIER4b0ZpbGVNYW5hZ2VySXRlbVZpZXdNb2R1bGUsXHJcbiAgICBEeG9GaWxlTWFuYWdlck5vdGlmaWNhdGlvbnNNb2R1bGUsXHJcbiAgICBEeG9GaWxlTWFuYWdlclBlcm1pc3Npb25zTW9kdWxlLFxyXG4gICAgRHhvRmlsZU1hbmFnZXJUb29sYmFyTW9kdWxlLFxyXG4gICAgRHhpRmlsZU1hbmFnZXJUb29sYmFySXRlbU1vZHVsZSxcclxuICAgIER4b0ZpbGVNYW5hZ2VyVXBsb2FkTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIER4RmlsZU1hbmFnZXJNb2R1bGUgeyB9XHJcblxyXG5leHBvcnQgKiBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZmlsZS1tYW5hZ2VyL25lc3RlZCc7XHJcblxyXG5pbXBvcnQgdHlwZSAqIGFzIER4RmlsZU1hbmFnZXJUeXBlcyBmcm9tIFwiZGV2ZXh0cmVtZS91aS9maWxlX21hbmFnZXJfdHlwZXNcIjtcclxuZXhwb3J0IHsgRHhGaWxlTWFuYWdlclR5cGVzIH07XHJcblxyXG5cclxuIl19