UNPKG

@compodoc/compodoc

Version:

The missing documentation tool for your Angular application

662 lines (660 loc) 78.4 kB
'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