@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
662 lines (660 loc) • 78.4 kB
JavaScript
'use strict';
/**
* Example data structure for template playground
* Contains mock data for all supported template types
*/
var EXAMPLE_DATA = {
component: {
name: 'UserProfileComponent',
file: 'src/app/components/user-profile.component.ts',
deprecated: false,
selector: 'app-user-profile',
templateUrl: './user-profile.component.html',
styleUrls: ['./user-profile.component.scss'],
description: 'Component for displaying and editing user profile information',
inputs: [
{
name: 'user',
type: 'User',
description: 'The user object to display',
line: 15,
defaultValue: 'null'
},
{
name: 'editable',
type: 'boolean',
description: 'Whether the profile can be edited',
line: 18,
defaultValue: 'false'
}
],
outputs: [
{
name: 'userUpdated',
type: 'EventEmitter<User>',
description: 'Emitted when user profile is updated',
line: 21
}
],
properties: [
{
name: 'isLoading',
type: 'boolean',
defaultValue: 'false',
description: 'Loading state indicator',
line: 25,
modifierKind: [119] // public
}
],
methods: [
{
name: 'saveProfile',
type: 'void',
description: 'Saves the user profile changes',
line: 30,
modifierKind: [119], // public
args: [
{
name: 'userData',
type: 'Partial<User>',
description: 'Updated user data'
}
]
}
],
implements: ['OnInit', 'OnDestroy'],
hostListeners: [
{
name: 'window:resize',
args: ['$event'],
argsDecorator: ['$event'],
description: 'Handle window resize events'
}
],
template: '<div class="user-profile">...</div>',
styles: ['.user-profile { padding: 1rem; }'],
readme: 'This component provides a comprehensive user profile management interface.',
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' },
{ href: '#template', id: 'template', label: 'template', 'data-link': 'template' },
{ href: '#styles', id: 'styles', label: 'styles', 'data-link': 'styles' },
{ href: '#dom-tree', id: 'dom-tree', label: 'dom-tree', 'data-link': 'dom-tree' }
]
},
module: {
name: 'UserModule',
file: 'src/app/modules/user/user.module.ts',
deprecated: false,
description: 'Module containing all user-related components and services',
declarations: [
{ name: 'UserProfileComponent', type: 'component' },
{ name: 'UserListComponent', type: 'component' },
{ name: 'UserDirective', type: 'directive' }
],
imports: [
{ name: 'CommonModule', type: 'module' },
{ name: 'FormsModule', type: 'module' },
{ name: 'HttpClientModule', type: 'module' }
],
exports: [
{ name: 'UserProfileComponent', type: 'component' },
{ name: 'UserListComponent', type: 'component' }
],
providers: [
{ name: 'UserService', type: 'service' },
{ name: 'UserResolver', type: 'resolver' }
],
bootstrap: [],
graph: '<svg>...</svg>', // SVG dependency graph
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
interface: {
name: 'User',
file: 'src/app/interfaces/user.interface.ts',
deprecated: false,
description: 'Interface defining the structure of a user object',
properties: [
{
name: 'id',
type: 'string',
description: 'Unique identifier for the user',
line: 3,
optional: false
},
{
name: 'email',
type: 'string',
description: 'User email address',
line: 4,
optional: false
},
{
name: 'firstName',
type: 'string',
description: 'User first name',
line: 5,
optional: true
},
{
name: 'lastName',
type: 'string',
description: 'User last name',
line: 6,
optional: true
},
{
name: 'avatar',
type: 'string',
description: 'URL to user avatar image',
line: 7,
optional: true
}
],
indexSignatures: [],
kind: 'interface',
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
class: {
name: 'UserRepository',
file: 'src/app/repositories/user.repository.ts',
deprecated: false,
description: 'Repository class for managing user data operations',
constructorObj: {
name: 'constructor',
description: 'Creates an instance of UserRepository',
args: [
{
name: 'httpClient',
type: 'HttpClient',
description: 'HTTP client for API requests'
}
]
},
properties: [
{
name: 'baseUrl',
type: 'string',
defaultValue: "'/api/users'",
description: 'Base URL for user API endpoints',
line: 10,
modifierKind: [121] // private
}
],
methods: [
{
name: 'getUser',
type: 'Observable<User>',
description: 'Retrieves a user by ID',
line: 15,
modifierKind: [119], // public
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
}
]
},
{
name: 'updateUser',
type: 'Observable<User>',
description: 'Updates user information',
line: 20,
modifierKind: [119], // public
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
},
{
name: 'userData',
type: 'Partial<User>',
description: 'Updated user data'
}
]
}
],
extends: ['BaseRepository'],
implements: ['UserRepositoryInterface'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
injectable: {
name: 'UserService',
file: 'src/app/services/user.service.ts',
deprecated: false,
description: 'Service for managing user-related business logic',
properties: [
{
name: 'currentUser$',
type: 'BehaviorSubject<User | null>',
defaultValue: 'new BehaviorSubject(null)',
description: 'Observable stream of the current user',
line: 12,
modifierKind: [121] // private
}
],
methods: [
{
name: 'getCurrentUser',
type: 'Observable<User | null>',
description: 'Returns the current user as an observable',
line: 18,
modifierKind: [119] // public
},
{
name: 'login',
type: 'Observable<User>',
description: 'Authenticates a user',
line: 25,
modifierKind: [119], // public
args: [
{
name: 'credentials',
type: 'LoginCredentials',
description: 'User login credentials'
}
]
}
],
constructorObj: {
name: 'constructor',
description: 'Creates an instance of UserService',
args: [
{
name: 'userRepository',
type: 'UserRepository',
description: 'Repository for user data operations'
}
]
},
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
directive: {
name: 'HighlightDirective',
file: 'src/app/directives/highlight.directive.ts',
deprecated: false,
selector: '[appHighlight]',
description: 'Directive for highlighting elements on hover',
inputs: [
{
name: 'highlightColor',
type: 'string',
description: 'Color to use for highlighting',
line: 10,
defaultValue: "'yellow'"
}
],
hostListeners: [
{
name: 'mouseenter',
args: [],
description: 'Handle mouse enter events'
},
{
name: 'mouseleave',
args: [],
description: 'Handle mouse leave events'
}
],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
pipe: {
name: 'TruncatePipe',
file: 'src/app/pipes/truncate.pipe.ts',
deprecated: false,
description: 'Pipe for truncating text to a specified length',
methods: [
{
name: 'transform',
type: 'string',
description: 'Transforms the input text by truncating it',
line: 8,
modifierKind: [119], // public
args: [
{
name: 'value',
type: 'string',
description: 'Text to truncate'
},
{
name: 'limit',
type: 'number',
description: 'Maximum length'
},
{
name: 'ellipsis',
type: 'string',
description: 'Ellipsis string to append'
}
]
}
],
implements: ['PipeTransform'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
guard: {
name: 'AuthGuard',
file: 'src/app/guards/auth.guard.ts',
deprecated: false,
description: 'Guard for protecting routes that require authentication',
methods: [
{
name: 'canActivate',
type: 'Observable<boolean> | Promise<boolean> | boolean',
description: 'Determines if the route can be activated',
line: 12,
modifierKind: [119], // public
args: [
{
name: 'route',
type: 'ActivatedRouteSnapshot',
description: 'Current route snapshot'
},
{
name: 'state',
type: 'RouterStateSnapshot',
description: 'Current router state'
}
]
}
],
implements: ['CanActivate'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
interceptor: {
name: 'AuthInterceptor',
file: 'src/app/interceptors/auth.interceptor.ts',
deprecated: false,
description: 'HTTP interceptor for adding authentication headers',
methods: [
{
name: 'intercept',
type: 'Observable<HttpEvent<any>>',
description: 'Intercepts HTTP requests to add auth headers',
line: 10,
modifierKind: [119], // public
args: [
{
name: 'req',
type: 'HttpRequest<any>',
description: 'HTTP request to intercept'
},
{
name: 'next',
type: 'HttpHandler',
description: 'Next handler in the chain'
}
]
}
],
implements: ['HttpInterceptor'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
entity: {
name: 'UserEntity',
file: 'src/app/entities/user.entity.ts',
deprecated: false,
description: 'Entity class representing a user in the database',
properties: [
{
name: 'id',
type: 'string',
description: 'Primary key identifier',
line: 5,
decorators: ['@PrimaryGeneratedColumn()']
},
{
name: 'email',
type: 'string',
description: 'User email address',
line: 8,
decorators: ['@Column({ unique: true })']
}
],
decorators: ['@Entity()'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
controller: {
name: 'UserController',
file: 'src/app/controllers/user.controller.ts',
deprecated: false,
description: 'REST controller for user operations',
methods: [
{
name: 'getUsers',
type: 'Promise<User[]>',
description: 'Get all users',
line: 12,
modifierKind: [119], // public
decorators: ['@Get()']
},
{
name: 'getUserById',
type: 'Promise<User>',
description: 'Get user by ID',
line: 18,
modifierKind: [119], // public
decorators: ['@Get(":id")'],
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
}
]
}
],
decorators: ['@Controller("users")'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
miscellaneous: {
variables: [
{
name: 'API_BASE_URL',
type: 'string',
defaultValue: "'https://api.example.com'",
description: 'Base URL for API endpoints',
file: 'src/app/constants/api.constants.ts'
}
],
functions: [
{
name: 'formatDate',
type: '(date: Date, format?: string) => string',
description: 'Formats a date according to the specified format',
file: 'src/app/utils/date.utils.ts'
}
],
typeAliases: [
{
name: 'UserId',
type: 'string',
description: 'Type alias for user identifier',
file: 'src/app/types/user.types.ts'
}
],
enumerations: [
{
name: 'UserRole',
description: 'Enumeration of user roles',
file: 'src/app/enums/user-role.enum.ts',
childs: [
{ name: 'ADMIN', value: 'admin' },
{ name: 'USER', value: 'user' },
{ name: 'GUEST', value: 'guest' }
]
}
]
},
overview: {
modules: [
{ name: 'AppModule', file: 'src/app/app.module.ts' },
{ name: 'UserModule', file: 'src/app/modules/user/user.module.ts' }
],
components: [
{ name: 'AppComponent', file: 'src/app/app.component.ts' },
{ name: 'UserProfileComponent', file: 'src/app/components/user-profile.component.ts' }
],
injectables: [
{ name: 'UserService', file: 'src/app/services/user.service.ts' }
],
pipes: [
{ name: 'TruncatePipe', file: 'src/app/pipes/truncate.pipe.ts' }
],
directives: [
{ name: 'HighlightDirective', file: 'src/app/directives/highlight.directive.ts' }
],
classes: [
{ name: 'UserRepository', file: 'src/app/repositories/user.repository.ts' }
],
interfaces: [
{ name: 'User', file: 'src/app/interfaces/user.interface.ts' }
],
guards: [
{ name: 'AuthGuard', file: 'src/app/guards/auth.guard.ts' }
],
interceptors: [
{ name: 'AuthInterceptor', file: 'src/app/interceptors/auth.interceptor.ts' }
]
},
index: {
modules: 2,
components: 2,
injectables: 1,
pipes: 1,
directives: 1,
classes: 1,
interfaces: 1,
guards: 1,
interceptors: 1
}
};
// Global template context that's available to all templates
var TEMPLATE_CONTEXT = {
// Translation function
t: function (key) {
var translations = {
'components': 'Components',
'modules': 'Modules',
'interfaces': 'Interfaces',
'classes': 'Classes',
'injectables': 'Injectables',
'pipes': 'Pipes',
'directives': 'Directives',
'guards': 'Guards',
'interceptors': 'Interceptors',
'entities': 'Entities',
'controllers': 'Controllers',
'info': 'Info',
'readme': 'Readme',
'source': 'Source',
'template': 'Template',
'styles': 'Styles',
'dom-tree': 'DOM Tree',
'file': 'File',
'overview': 'Overview',
'getting-started': 'Getting Started',
'properties': 'Properties',
'methods': 'Methods',
'inputs': 'Inputs',
'outputs': 'Outputs',
'accessors': 'Accessors',
'constructor': 'Constructor',
'zoomin': 'Zoom In',
'zoomout': 'Zoom Out',
'reset': 'Reset'
};
return translations[key] || key;
},
// Relative URL helper
relativeURL: function (depth) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var baseUrl = typeof depth === 'number' ? '../'.repeat(depth) : depth;
return baseUrl + args.join('/');
},
// Template helpers
compare: function (a, operator, b) {
switch (operator) {
case '===': return a === b;
case '!==': return a !== b;
case '==': return a == b;
case '!=': return a != b;
case '<': return a < b;
case '>': return a > b;
case '<=': return a <= b;
case '>=': return a >= b;
default: return false;
}
},
// Check if tab is enabled
isTabEnabled: function (navTabs, tabId) {
return navTabs.some(function (tab) { return tab.id === tabId; });
},
// Check if tab is initial/active
isInitialTab: function (navTabs, tabId) {
return navTabs.length > 0 && navTabs[0].id === tabId;
},
// Depth for relative URLs
depth: 0,
// Global flags
disableSearch: false,
disableGraph: false,
disableCoverage: false,
disableLifeCycleHooks: false,
disableProperties: false,
disableDomTree: false,
disableTemplateTab: false,
disableStyleTab: false,
disablePrivate: false,
disableProtected: false,
disableInternal: false
};
exports.EXAMPLE_DATA = EXAMPLE_DATA;
exports.TEMPLATE_CONTEXT = TEMPLATE_CONTEXT;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1kYXRhLURSM3hZM1JyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdGVtcGxhdGUtcGxheWdyb3VuZC9leGFtcGxlLWRhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeGFtcGxlIGRhdGEgc3RydWN0dXJlIGZvciB0ZW1wbGF0ZSBwbGF5Z3JvdW5kXG4gKiBDb250YWlucyBtb2NrIGRhdGEgZm9yIGFsbCBzdXBwb3J0ZWQgdGVtcGxhdGUgdHlwZXNcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4YW1wbGVEYXRhIHtcbiAgICBjb21wb25lbnQ6IGFueTtcbiAgICBtb2R1bGU6IGFueTtcbiAgICBpbnRlcmZhY2U6IGFueTtcbiAgICBjbGFzczogYW55O1xuICAgIGluamVjdGFibGU6IGFueTtcbiAgICBkaXJlY3RpdmU6IGFueTtcbiAgICBwaXBlOiBhbnk7XG4gICAgZ3VhcmQ6IGFueTtcbiAgICBpbnRlcmNlcHRvcjogYW55O1xuICAgIGVudGl0eTogYW55O1xuICAgIGNvbnRyb2xsZXI6IGFueTtcbiAgICBtaXNjZWxsYW5lb3VzOiBhbnk7XG4gICAgb3ZlcnZpZXc6IGFueTtcbiAgICBpbmRleDogYW55O1xufVxuXG5leHBvcnQgY29uc3QgRVhBTVBMRV9EQVRBOiBFeGFtcGxlRGF0YSA9IHtcbiAgICBjb21wb25lbnQ6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJQcm9maWxlQ29tcG9uZW50JyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50LnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdG9yOiAnYXBwLXVzZXItcHJvZmlsZScsXG4gICAgICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLXByb2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgICAgICBzdHlsZVVybHM6IFsnLi91c2VyLXByb2ZpbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYW5kIGVkaXRpbmcgdXNlciBwcm9maWxlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3VzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVc2VyJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSB1c2VyIG9iamVjdCB0byBkaXNwbGF5JyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxNSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdudWxsJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZWRpdGFibGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIHByb2ZpbGUgY2FuIGJlIGVkaXRlZCcsXG4gICAgICAgICAgICAgICAgbGluZTogMTgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnZmFsc2UnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXNlclVwZGF0ZWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdmVudEVtaXR0ZXI8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW1pdHRlZCB3aGVuIHVzZXIgcHJvZmlsZSBpcyB1cGRhdGVkJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyMVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzTG9hZGluZycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0xvYWRpbmcgc3RhdGUgaW5kaWNhdG9yJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyNSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldIC8vIHB1YmxpY1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3NhdmVQcm9maWxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndm9pZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTYXZlcyB0aGUgdXNlciBwcm9maWxlIGNoYW5nZXMnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDMwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJ0aWFsPFVzZXI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlZCB1c2VyIGRhdGEnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcGxlbWVudHM6IFsnT25Jbml0JywgJ09uRGVzdHJveSddLFxuICAgICAgICBob3N0TGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3dpbmRvdzpyZXNpemUnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFsnJGV2ZW50J10sXG4gICAgICAgICAgICAgICAgYXJnc0RlY29yYXRvcjogWyckZXZlbnQnXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hhbmRsZSB3aW5kb3cgcmVzaXplIGV2ZW50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidXNlci1wcm9maWxlXCI+Li4uPC9kaXY+JyxcbiAgICAgICAgc3R5bGVzOiBbJy51c2VyLXByb2ZpbGUgeyBwYWRkaW5nOiAxcmVtOyB9J10sXG4gICAgICAgIHJlYWRtZTogJ1RoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB1c2VyIHByb2ZpbGUgbWFuYWdlbWVudCBpbnRlcmZhY2UuJyxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyN0ZW1wbGF0ZScsIGlkOiAndGVtcGxhdGUnLCBsYWJlbDogJ3RlbXBsYXRlJywgJ2RhdGEtbGluayc6ICd0ZW1wbGF0ZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzdHlsZXMnLCBpZDogJ3N0eWxlcycsIGxhYmVsOiAnc3R5bGVzJywgJ2RhdGEtbGluayc6ICdzdHlsZXMnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjZG9tLXRyZWUnLCBpZDogJ2RvbS10cmVlJywgbGFiZWw6ICdkb20tdHJlZScsICdkYXRhLWxpbmsnOiAnZG9tLXRyZWUnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBtb2R1bGU6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJNb2R1bGUnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9tb2R1bGVzL3VzZXIvdXNlci5tb2R1bGUudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdNb2R1bGUgY29udGFpbmluZyBhbGwgdXNlci1yZWxhdGVkIGNvbXBvbmVudHMgYW5kIHNlcnZpY2VzJyxcbiAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyUHJvZmlsZUNvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyTGlzdENvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyRGlyZWN0aXZlJywgdHlwZTogJ2RpcmVjdGl2ZScgfVxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdDb21tb25Nb2R1bGUnLCB0eXBlOiAnbW9kdWxlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnRm9ybXNNb2R1bGUnLCB0eXBlOiAnbW9kdWxlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnSHR0cENsaWVudE1vZHVsZScsIHR5cGU6ICdtb2R1bGUnIH1cbiAgICAgICAgXSxcbiAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclByb2ZpbGVDb21wb25lbnQnLCB0eXBlOiAnY29tcG9uZW50JyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVXNlckxpc3RDb21wb25lbnQnLCB0eXBlOiAnY29tcG9uZW50JyB9XG4gICAgICAgIF0sXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclNlcnZpY2UnLCB0eXBlOiAnc2VydmljZScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJSZXNvbHZlcicsIHR5cGU6ICdyZXNvbHZlcicgfVxuICAgICAgICBdLFxuICAgICAgICBib290c3RyYXA6IFtdLFxuICAgICAgICBncmFwaDogJzxzdmc+Li4uPC9zdmc+JywgLy8gU1ZHIGRlcGVuZGVuY3kgZ3JhcGhcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGludGVyZmFjZToge1xuICAgICAgICBuYW1lOiAnVXNlcicsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZSBvZiBhIHVzZXIgb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHVzZXInLFxuICAgICAgICAgICAgICAgIGxpbmU6IDMsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGVtYWlsIGFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmaXJzdE5hbWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBmaXJzdCBuYW1lJyxcbiAgICAgICAgICAgICAgICBsaW5lOiA1LFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsYXN0TmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGxhc3QgbmFtZScsXG4gICAgICAgICAgICAgICAgbGluZTogNixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXZhdGFyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCB0byB1c2VyIGF2YXRhciBpbWFnZScsXG4gICAgICAgICAgICAgICAgbGluZTogNyxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbmRleFNpZ25hdHVyZXM6IFtdLFxuICAgICAgICBraW5kOiAnaW50ZXJmYWNlJyxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGNsYXNzOiB7XG4gICAgICAgIG5hbWU6ICdVc2VyUmVwb3NpdG9yeScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXBvc2l0b3J5IGNsYXNzIGZvciBtYW5hZ2luZyB1c2VyIGRhdGEgb3BlcmF0aW9ucycsXG4gICAgICAgIGNvbnN0cnVjdG9yT2JqOiB7XG4gICAgICAgICAgICBuYW1lOiAnY29uc3RydWN0b3InLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdodHRwQ2xpZW50JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0h0dHBDbGllbnQnLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hUVFAgY2xpZW50IGZvciBBUEkgcmVxdWVzdHMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jhc2VVcmwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCInL2FwaS91c2VycydcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIGZvciB1c2VyIEFQSSBlbmRwb2ludHMnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDEwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzEyMV0gLy8gcHJpdmF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2dldFVzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPFVzZXI+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyBhIHVzZXIgYnkgSUQnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDE1LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIElEJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBkYXRlVXNlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlcyB1c2VyIGluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyMCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBJRCdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJ0aWFsPFVzZXI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlZCB1c2VyIGRhdGEnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGV4dGVuZHM6IFsnQmFzZVJlcG9zaXRvcnknXSxcbiAgICAgICAgaW1wbGVtZW50czogWydVc2VyUmVwb3NpdG9yeUludGVyZmFjZSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW5qZWN0YWJsZToge1xuICAgICAgICBuYW1lOiAnVXNlclNlcnZpY2UnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9zZXJ2aWNlcy91c2VyLnNlcnZpY2UudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZXJ2aWNlIGZvciBtYW5hZ2luZyB1c2VyLXJlbGF0ZWQgYnVzaW5lc3MgbG9naWMnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2N1cnJlbnRVc2VyJCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0JlaGF2aW9yU3ViamVjdDxVc2VyIHwgbnVsbD4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ25ldyBCZWhhdmlvclN1YmplY3QobnVsbCknLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgdXNlcicsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTIxXSAvLyBwcml2YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0Q3VycmVudFVzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPFVzZXIgfCBudWxsPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIgYXMgYW4gb2JzZXJ2YWJsZScsXG4gICAgICAgICAgICAgICAgbGluZTogMTgsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSAvLyBwdWJsaWNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT2JzZXJ2YWJsZTxVc2VyPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRoZW50aWNhdGVzIGEgdXNlcicsXG4gICAgICAgICAgICAgICAgbGluZTogMjUsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvZ2luQ3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGxvZ2luIGNyZWRlbnRpYWxzJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjb25zdHJ1Y3Rvck9iajoge1xuICAgICAgICAgICAgbmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBVc2VyU2VydmljZScsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAndXNlclJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVXNlclJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgZm9yIHVzZXIgZGF0YSBvcGVyYXRpb25zJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGRpcmVjdGl2ZToge1xuICAgICAgICBuYW1lOiAnSGlnaGxpZ2h0RGlyZWN0aXZlJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvZGlyZWN0aXZlcy9oaWdobGlnaHQuZGlyZWN0aXZlLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdG9yOiAnW2FwcEhpZ2hsaWdodF0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0RpcmVjdGl2ZSBmb3IgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIG9uIGhvdmVyJyxcbiAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hpZ2hsaWdodENvbG9yJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbG9yIHRvIHVzZSBmb3IgaGlnaGxpZ2h0aW5nJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiJ3llbGxvdydcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBob3N0TGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlZW50ZXInLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIG1vdXNlIGVudGVyIGV2ZW50cydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIG1vdXNlIGxlYXZlIGV2ZW50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIHBpcGU6IHtcbiAgICAgICAgbmFtZTogJ1RydW5jYXRlUGlwZScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL3BpcGVzL3RydW5jYXRlLnBpcGUudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQaXBlIGZvciB0cnVuY2F0aW5nIHRleHQgdG8gYSBzcGVjaWZpZWQgbGVuZ3RoJyxcbiAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHJhbnNmb3JtcyB0aGUgaW5wdXQgdGV4dCBieSB0cnVuY2F0aW5nIGl0JyxcbiAgICAgICAgICAgICAgICBsaW5lOiA4LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZXh0IHRvIHRydW5jYXRlJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbGVuZ3RoJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VsbGlwc2lzIHN0cmluZyB0byBhcHBlbmQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcGxlbWVudHM6IFsnUGlwZVRyYW5zZm9ybSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgZ3VhcmQ6IHtcbiAgICAgICAgbmFtZTogJ0F1dGhHdWFyZCcsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2d1YXJkcy9hdXRoLmd1YXJkLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR3VhcmQgZm9yIHByb3RlY3Rpbmcgcm91dGVzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbicsXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FuQWN0aXZhdGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGV0ZXJtaW5lcyBpZiB0aGUgcm91dGUgY2FuIGJlIGFjdGl2YXRlZCcsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncm91dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjdGl2YXRlZFJvdXRlU25hcHNob3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDdXJyZW50IHJvdXRlIHNuYXBzaG90J1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1JvdXRlclN0YXRlU25hcHNob3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDdXJyZW50IHJvdXRlciBzdGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW1wbGVtZW50czogWydDYW5BY3RpdmF0ZSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW50ZXJjZXB0b3I6IHtcbiAgICAgICAgbmFtZTogJ0F1dGhJbnRlcmNlcHRvcicsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSFRUUCBpbnRlcmNlcHRvciBmb3IgYWRkaW5nIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMnLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ludGVyY2VwdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyY2VwdHMgSFRUUCByZXF1ZXN0cyB0byBhZGQgYXV0aCBoZWFkZXJzJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyZXEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0h0dHBSZXF1ZXN0PGFueT4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIVFRQIHJlcXVlc3QgdG8gaW50ZXJjZXB0J1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbmV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSHR0cEhhbmRsZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbXBsZW1lbnRzOiBbJ0h0dHBJbnRlcmNlcHRvciddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgZW50aXR5OiB7XG4gICAgICAgIG5hbWU6ICdVc2VyRW50aXR5JyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvZW50aXRpZXMvdXNlci5lbnRpdHkudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFbnRpdHkgY2xhc3MgcmVwcmVzZW50aW5nIGEgdXNlciBpbiB0aGUgZGF0YWJhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ByaW1hcnkga2V5IGlkZW50aWZpZXInLFxuICAgICAgICAgICAgICAgIGxpbmU6IDUsXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogWydAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgZW1haWwgYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgbGluZTogOCxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BDb2x1bW4oeyB1bmlxdWU6IHRydWUgfSknXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBkZWNvcmF0b3JzOiBbJ0BFbnRpdHkoKSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgY29udHJvbGxlcjoge1xuICAgICAgICBuYW1lOiAnVXNlckNvbnRyb2xsZXInLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9jb250cm9sbGVycy91c2VyLmNvbnRyb2xsZXIudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSRVNUIGNvbnRyb2xsZXIgZm9yIHVzZXIgb3BlcmF0aW9ucycsXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlcnMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9taXNlPFVzZXJbXT4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGFsbCB1c2VycycsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogWydAR2V0KCknXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlckJ5SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9taXNlPFVzZXI+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB1c2VyIGJ5IElEJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxOCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BHZXQoXCI6aWRcIiknXSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBJRCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZGVjb3JhdG9yczogWydAQ29udHJvbGxlcihcInVzZXJzXCIpJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBtaXNjZWxsYW5lb3VzOiB7XG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBUElfQkFTRV9VUkwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCInaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdCYXNlIFVSTCBmb3IgQVBJIGVuZHBvaW50cycsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvY29uc3RhbnRzL2FwaS5jb25zdGFudHMudHMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGZ1bmN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmb3JtYXREYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnKGRhdGU6IERhdGUsIGZvcm1hdD86IHN0cmluZykgPT4gc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Zvcm1hdHMgYSBkYXRlIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCcsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvdXRpbHMvZGF0ZS51dGlscy50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZUFsaWFzZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVXNlcklkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1R5cGUgYWxpYXMgZm9yIHVzZXIgaWRlbnRpZmllcicsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvdHlwZXMvdXNlci50eXBlcy50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZW51bWVyYXRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1VzZXJSb2xlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VudW1lcmF0aW9uIG9mIHVzZXIgcm9sZXMnLFxuICAgICAgICAgICAgICAgIGZpbGU6ICdzcmMvYXBwL2VudW1zL3VzZXItcm9sZS5lbnVtLnRzJyxcbiAgICAgICAgICAgICAgICBjaGlsZHM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnQURNSU4nLCB2YWx1ZTogJ2FkbWluJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdVU0VSJywgdmFsdWU6ICd1c2VyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdHVUVTVCcsIHZhbHVlOiAnZ3Vlc3QnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgb3ZlcnZpZXc6IHtcbiAgICAgICAgbW9kdWxlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQXBwTW9kdWxlJywgZmlsZTogJ3NyYy9hcHAvYXBwLm1vZHVsZS50cycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJNb2R1bGUnLCBmaWxlOiAnc3JjL2FwcC9tb2R1bGVzL3VzZXIvdXNlci5tb2R1bGUudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQXBwQ29tcG9uZW50JywgZml