@dollhousemcp/mcp-server 2.0.8 → 2.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/elements/ensembles/Ensemble.d.ts +9 -0
  2. package/dist/elements/ensembles/Ensemble.d.ts.map +1 -1
  3. package/dist/elements/ensembles/Ensemble.js +71 -4
  4. package/dist/generated/version.d.ts +2 -2
  5. package/dist/generated/version.d.ts.map +1 -1
  6. package/dist/generated/version.js +3 -3
  7. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts +57 -0
  8. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
  9. package/dist/handlers/mcp-aql/IntrospectionResolver.js +181 -2
  10. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +8 -0
  11. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  12. package/dist/handlers/mcp-aql/MCPAQLHandler.js +32 -6
  13. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  14. package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
  15. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  16. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/OperationSchema.js +120 -8
  18. package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
  19. package/dist/handlers/mcp-aql/SchemaDispatcher.js +11 -1
  20. package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
  21. package/dist/handlers/mcp-aql/types.js +11 -1
  22. package/dist/index.js +19 -1
  23. package/dist/server/tools/MCPAQLTools.d.ts.map +1 -1
  24. package/dist/server/tools/MCPAQLTools.js +7 -1
  25. package/dist/web/public/app.js +118 -7
  26. package/dist/web/public/dollhouse-logo.png +0 -0
  27. package/dist/web/public/index.html +5 -2
  28. package/dist/web/public/logs.js +56 -1
  29. package/dist/web/public/metrics.js +32 -1
  30. package/dist/web/public/setup.css +79 -0
  31. package/dist/web/public/setup.js +90 -0
  32. package/dist/web/public/styles.css +3 -1
  33. package/dist/web/server.d.ts +1 -1
  34. package/dist/web/server.d.ts.map +1 -1
  35. package/dist/web/server.js +19 -9
  36. package/package.json +3 -3
  37. package/server.json +2 -2
@@ -26,7 +26,7 @@ import { PermissionGuard } from './PermissionGuard.js';
26
26
  import { ElementType } from './types.js';
27
27
  import { getAllowedGroupByFields } from '../../services/query/AggregationService.js';
28
28
  import { VALIDATION_PATTERNS } from '../../security/constants.js';
29
- import { getOperationSchema, getAnyOperationSchema, schemaToParameterInfo, } from './OperationSchema.js';
29
+ import { getOperationSchema, getAnyOperationSchema, schemaToParameterInfo, ALL_OPERATION_SCHEMAS, } from './OperationSchema.js';
30
30
  // ============================================================================
31
31
  // Type Definitions Registry
32
32
  // ============================================================================
@@ -926,5 +926,184 @@ export class IntrospectionResolver {
926
926
  lines.push('\nUse introspect with name parameter for details.');
927
927
  return lines.join('\n');
928
928
  }
929
+ // ==========================================================================
930
+ // Capabilities (Issue #1760)
931
+ // ==========================================================================
932
+ /**
933
+ * Get server capabilities grouped by user-intent category.
934
+ * Reads category from each operation's schema definition at runtime.
935
+ * Designed for extensibility — additional CapabilitySources (e.g. portfolio
936
+ * elements from the capability index) can be registered via registerSource().
937
+ *
938
+ * @param params - Optional parameters
939
+ * @param params.category - Filter to a specific category
940
+ * @returns CapabilitiesResult with categorized operations
941
+ * @see Issue #1760 - get_capabilities operation
942
+ */
943
+ static getCapabilities(params) {
944
+ const filterCategory = params.category;
945
+ const { categories, sortedCategories, sourceTypes } = this.buildCategoryMap();
946
+ // Apply category filter if requested
947
+ if (filterCategory) {
948
+ return this.filterByCategory(filterCategory, categories, sortedCategories, sourceTypes);
949
+ }
950
+ const totalCapabilities = Object.values(categories).reduce((sum, cat) => sum + cat.capabilities.length, 0);
951
+ return {
952
+ categories,
953
+ totalCapabilities,
954
+ sources: sourceTypes,
955
+ hint: 'Use introspect with { query: "operations", name: "<operation>" } for full parameter details, examples, and permissions.',
956
+ };
957
+ }
958
+ /**
959
+ * Build the full category map from all registered capability sources.
960
+ * Returns sorted categories with descriptions and merged entries.
961
+ */
962
+ static buildCategoryMap() {
963
+ const mergedMap = {};
964
+ const sourceTypes = [];
965
+ for (const source of capabilitySources) {
966
+ sourceTypes.push(source.sourceType);
967
+ const caps = source.getCapabilities();
968
+ for (const [cat, entries] of Object.entries(caps)) {
969
+ if (!mergedMap[cat])
970
+ mergedMap[cat] = [];
971
+ mergedMap[cat].push(...entries);
972
+ }
973
+ }
974
+ // Sort entries within each category alphabetically
975
+ for (const entries of Object.values(mergedMap)) {
976
+ entries.sort((a, b) => a.name.localeCompare(b.name));
977
+ }
978
+ // Sort categories alphabetically ("Other" last)
979
+ const sortedCategories = Object.keys(mergedMap).sort((a, b) => {
980
+ if (a === 'Other')
981
+ return 1;
982
+ if (b === 'Other')
983
+ return -1;
984
+ return a.localeCompare(b);
985
+ });
986
+ const categories = {};
987
+ for (const cat of sortedCategories) {
988
+ categories[cat] = {
989
+ description: CATEGORY_DESCRIPTIONS[cat] || `${cat} operations`,
990
+ capabilities: mergedMap[cat],
991
+ };
992
+ }
993
+ return { categories, sortedCategories, sourceTypes };
994
+ }
995
+ /**
996
+ * Filter the category map to a single matching category (case-insensitive).
997
+ */
998
+ static filterByCategory(filterCategory, categories, sortedCategories, sourceTypes) {
999
+ const lowerFilter = filterCategory.toLowerCase();
1000
+ const filtered = {};
1001
+ for (const [catName, catData] of Object.entries(categories)) {
1002
+ if (catName.toLowerCase() === lowerFilter) {
1003
+ filtered[catName] = catData;
1004
+ }
1005
+ }
1006
+ if (Object.keys(filtered).length === 0) {
1007
+ return {
1008
+ categories: {},
1009
+ availableCategories: sortedCategories,
1010
+ hint: `No category matching "${filterCategory}". Use get_capabilities without a filter to see all categories.`,
1011
+ };
1012
+ }
1013
+ return {
1014
+ categories: filtered,
1015
+ sources: sourceTypes,
1016
+ hint: 'Use introspect with { query: "operations", name: "<operation>" } for full details on any operation.',
1017
+ };
1018
+ }
1019
+ /**
1020
+ * Register an additional capability source.
1021
+ * Future element sources (reading from the capability index) can be
1022
+ * plugged in here without modifying the get_capabilities handler.
1023
+ * @see Issue #1760 - extensibility for portfolio element capabilities
1024
+ */
1025
+ static registerSource(source) {
1026
+ capabilitySources.push(source);
1027
+ }
1028
+ /**
1029
+ * Truncate a description to a brief one-liner.
1030
+ * Takes the first sentence (up to first period followed by space or end).
1031
+ */
1032
+ static toBrief(description) {
1033
+ if (!description || typeof description !== 'string') {
1034
+ return 'No description available';
1035
+ }
1036
+ const match = /^[^.]*\./.exec(description);
1037
+ if (match && match[0].length <= 120) {
1038
+ return match[0];
1039
+ }
1040
+ if (description.length <= 120)
1041
+ return description;
1042
+ return description.slice(0, 117) + '...';
1043
+ }
929
1044
  }
930
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50cm9zcGVjdGlvblJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvSW50cm9zcGVjdGlvblJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FFdEIsTUFBTSxzQkFBc0IsQ0FBQztBQWtJOUIsK0VBQStFO0FBQy9FLDRCQUE0QjtBQUM1QiwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBZ0M7SUFDcEQsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLGFBQWE7UUFDbkIsSUFBSSxFQUFFLE1BQU07UUFDWixXQUFXLEVBQUUsb0RBQW9EO1FBQ2pFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztLQUNuQztJQUNELFlBQVksRUFBRTtRQUNaLElBQUksRUFBRSxjQUFjO1FBQ3BCLElBQUksRUFBRSxNQUFNO1FBQ1osV0FBVyxFQUFFLHlFQUF5RTtRQUN0RixNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO0tBQzFEO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixJQUFJLEVBQUUsUUFBUTtR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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFFaEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50cm9zcGVjdGlvblJlc29sdmVyIC0gR3JhcGhRTC1zdHlsZSBpbnRyb3NwZWN0aW9uIGZvciBNQ1AtQVFMXG4gKlxuICogUHJvdmlkZXMgZGlzY292ZXJ5IGNhcGFiaWxpdGllcyBmb3IgTExNcyB0byB1bmRlcnN0YW5kIGF2YWlsYWJsZSBvcGVyYXRpb25zLFxuICogdGhlaXIgcGFyYW1ldGVycywgcmV0dXJuIHR5cGVzLCBhbmQgZXhhbXBsZXMuXG4gKlxuICogSU5UUk9TUEVDVElPTiBRVUVSSUVTOlxuICogLSBvcGVyYXRpb25zOiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uc1xuICogLSBvcGVyYXRpb24obmFtZSk6IEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvblxuICogLSB0eXBlczogTGlzdCBhdmFpbGFibGUgdHlwZXMgKEVsZW1lbnRUeXBlLCBldGMuKVxuICogLSB0eXBlKG5hbWUpOiBHZXQgZGV0YWlscyBmb3IgYSBzcGVjaWZpYyB0eXBlXG4gKiAtIGNhdGVnb3JpZXM6IENhdGVnb3J5IGZvcm1hdCBydWxlcyArIGRpc2NvdmVyeSBndWlkYW5jZSAoSXNzdWUgIzYzMSlcbiAqXG4gKiBERVNJR04gUkFUSU9OQUxFOlxuICogLSBUb2tlbi1lZmZpY2llbnQ6IFJldHVybnMgbWluaW1hbCBidXQgdXNlZnVsIGluZm9ybWF0aW9uXG4gKiAtIFNlbGYtZG9jdW1lbnRpbmc6IE9wZXJhdGlvbnMgZGVzY3JpYmUgdGhlbXNlbHZlc1xuICogLSBSZWFkLW9ubHk6IFNhZmUgdG8gY2FsbCBhdCBhbnkgdGltZSAobm8gc2lkZSBlZmZlY3RzKVxuICpcbiAqIFNDSEVNQSBJTlRFR1JBVElPTiAoSXNzdWUgIzI1NCk6XG4gKiAtIFNjaGVtYS1kcml2ZW4gb3BlcmF0aW9ucyBnZXQgdGhlaXIgbWV0YWRhdGEgZnJvbSBPcGVyYXRpb25TY2hlbWFcbiAqIC0gTGVnYWN5IG9wZXJhdGlvbnMgdXNlIHRoZSBmYWxsYmFjayBPUEVSQVRJT05fUEFSQU1FVEVSUy9PUEVSQVRJT05fRVhBTVBMRVNcbiAqIC0gVGhpcyBlbnN1cmVzIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHNjaGVtYS1kcml2ZW4gb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IE9QRVJBVElPTl9ST1VURVMsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkd1YXJkLCB0eXBlIEVuZHBvaW50UGVybWlzc2lvbnMgfSBmcm9tICcuL1Blcm1pc3Npb25HdWFyZC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0QWxsb3dlZEdyb3VwQnlGaWVsZHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgVkFMSURBVElPTl9QQVRURVJOUyB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5pbXBvcnQge1xuICBnZXRPcGVyYXRpb25TY2hlbWEsXG4gIGdldEFueU9wZXJhdGlvblNjaGVtYSxcbiAgc2NoZW1hVG9QYXJhbWV0ZXJJbmZvLFxuICB0eXBlIE9wZXJhdGlvbkRlZixcbn0gZnJvbSAnLi9PcGVyYXRpb25TY2hlbWEuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSZXNwb25zZSBUeXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGFuIG9wZXJhdGlvbiAodXNlZCBpbiBsaXN0IHJlc3BvbnNlcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25JbmZvIHtcbiAgLyoqIE9wZXJhdGlvbiBuYW1lIChlLmcuLCAnY3JlYXRlX2VsZW1lbnQnKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBDUlVEIGVuZHBvaW50IHRoaXMgb3BlcmF0aW9uIGJlbG9uZ3MgdG8gKi9cbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgLyoqIEJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIG9wZXJhdGlvbiBkb2VzICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVyIGluZm9ybWF0aW9uIGZvciBvcGVyYXRpb24gZGV0YWlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICAvKiogUGFyYW1ldGVyIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogUGFyYW1ldGVyIHR5cGUgKGUuZy4sICdzdHJpbmcnLCAnRWxlbWVudFR5cGUnLCAnb2JqZWN0JykgKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkICovXG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKiogQnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlciAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogRGVmYXVsdCB2YWx1ZSBpZiBhbnkgKi9cbiAgZGVmYXVsdD86IHVua25vd247XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlSW5mbyB7XG4gIC8qKiBUeXBlIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVHlwZSBraW5kIChlbnVtLCBvYmplY3QsIHNjYWxhciwgdW5pb24pICovXG4gIGtpbmQ6ICdlbnVtJyB8ICdvYmplY3QnIHwgJ3NjYWxhcicgfCAndW5pb24nO1xuICAvKiogQnJpZWYgZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25EZXRhaWxzIHtcbiAgLyoqIE9wZXJhdGlvbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIENSVUQgZW5kcG9pbnQgKi9cbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgLyoqIE1DUCB0b29sIG5hbWUgKGUuZy4sICdtY3BfYXFsX3JlYWQnKSAqL1xuICBtY3BUb29sOiBzdHJpbmc7XG4gIC8qKiBGdWxsIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBQZXJtaXNzaW9uIGZsYWdzICovXG4gIHBlcm1pc3Npb25zOiBFbmRwb2ludFBlcm1pc3Npb25zO1xuICAvKiogUGFyYW1ldGVyIGRlZmluaXRpb25zICovXG4gIHBhcmFtZXRlcnM6IFBhcmFtZXRlckluZm9bXTtcbiAgLyoqIFJldHVybiB0eXBlIGluZm9ybWF0aW9uICovXG4gIHJldHVybnM6IFR5cGVJbmZvO1xuICAvKiogVXNhZ2UgZXhhbXBsZXMgKi9cbiAgZXhhbXBsZXM6IHN0cmluZ1tdO1xuICAvKiogQWx0ZXJuYXRpdmUgb3BlcmF0aW9uIG5hbWVzIHRoYXQgcmVzb2x2ZSB0byB0aGlzIG9wZXJhdGlvbiAqL1xuICBhbGlhc2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGV0YWlsZWQgdHlwZSBpbmZvcm1hdGlvbiB3aXRoIGVudW0gdmFsdWVzIG9yIG9iamVjdCBmaWVsZHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlRGV0YWlscyB7XG4gIC8qKiBUeXBlIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVHlwZSBraW5kICovXG4gIGtpbmQ6ICdlbnVtJyB8ICdvYmplY3QnIHwgJ3NjYWxhcicgfCAndW5pb24nO1xuICAvKiogRnVsbCBkZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogRW51bSB2YWx1ZXMgKGZvciBlbnVtIHR5cGVzKSAqL1xuICB2YWx1ZXM/OiBzdHJpbmdbXTtcbiAgLyoqIE9iamVjdCBmaWVsZHMgKGZvciBvYmplY3QgdHlwZXMpICovXG4gIGZpZWxkcz86IFBhcmFtZXRlckluZm9bXTtcbiAgLyoqIFVuaW9uIG1lbWJlciB0eXBlcyAoZm9yIHVuaW9uIHR5cGVzKSAqL1xuICBtZW1iZXJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogRm9ybWF0IHNwZWNpZmljYXRpb24gZm9yIGFuIGVsZW1lbnQgdHlwZSAoSXNzdWUgIzcxNSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRTcGVjIHtcbiAgLyoqIEVsZW1lbnQgdHlwZSB0aGlzIHNwZWMgZGVzY3JpYmVzICovXG4gIGVsZW1lbnRUeXBlOiBzdHJpbmc7XG4gIC8qKiBGaWxlIGZvcm1hdCB1c2VkIGZvciBzdG9yYWdlICovXG4gIGZpbGVGb3JtYXQ6IHN0cmluZztcbiAgLyoqIFJlcXVpcmVkIGZpZWxkcyBpbiBmcm9udG1hdHRlciAqL1xuICByZXF1aXJlZEZpZWxkczogc3RyaW5nW107XG4gIC8qKiBPcHRpb25hbCBmaWVsZHMgaW4gZnJvbnRtYXR0ZXIgKi9cbiAgb3B0aW9uYWxGaWVsZHM6IHN0cmluZ1tdO1xuICAvKiogR3VpZGFuY2Ugb24gdXNpbmcgaW5zdHJ1Y3Rpb25zIHZzIGNvbnRlbnQgZmllbGRzICovXG4gIGR1YWxGaWVsZEd1aWRhbmNlOiBzdHJpbmc7XG4gIC8qKiBTeW50YXggbm90ZXMgc3BlY2lmaWMgdG8gdGhpcyBlbGVtZW50IHR5cGUgKi9cbiAgc3ludGF4Tm90ZXM6IHN0cmluZ1tdO1xuICAvKiogTWluaW1hbCB3b3JraW5nIGV4YW1wbGUgKi9cbiAgbWluaW1hbEV4YW1wbGU6IHN0cmluZztcbiAgLyoqIEZ1bGwtZmVhdHVyZWQgZXhhbXBsZSAqL1xuICBmdWxsRXhhbXBsZTogc3RyaW5nO1xuICAvKiogTmFtaW5nIGNvbnZlbnRpb25zIGZvciB0aGlzIGVsZW1lbnQgdHlwZSAqL1xuICBuYW1pbmdDb252ZW50aW9uczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGFuIGludHJvc3BlY3Rpb24gcXVlcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0aW9uUmVzdWx0IHtcbiAgLyoqIExpc3Qgb2Ygb3BlcmF0aW9ucyAoZm9yICdvcGVyYXRpb25zJyBxdWVyeSkgKi9cbiAgb3BlcmF0aW9ucz86IE9wZXJhdGlvbkluZm9bXTtcbiAgLyoqIFNpbmdsZSBvcGVyYXRpb24gZGV0YWlscyAoZm9yICdvcGVyYXRpb24obmFtZSknIHF1ZXJ5KSAqL1xuICBvcGVyYXRpb24/OiBPcGVyYXRpb25EZXRhaWxzIHwgbnVsbDtcbiAgLyoqIExpc3Qgb2YgdHlwZXMgKGZvciAndHlwZXMnIHF1ZXJ5KSAqL1xuICB0eXBlcz86IFR5cGVJbmZvW107XG4gIC8qKiBTaW5nbGUgdHlwZSBkZXRhaWxzIChmb3IgJ3R5cGUobmFtZSknIHF1ZXJ5KSAqL1xuICB0eXBlPzogVHlwZURldGFpbHMgfCBudWxsO1xuICAvKiogRm9ybWF0IHNwZWNpZmljYXRpb24gKGZvciAnZm9ybWF0JyBxdWVyeSkgKi9cbiAgZm9ybWF0U3BlYz86IEZvcm1hdFNwZWMgfCBGb3JtYXRTcGVjW10gfCBudWxsO1xuICAvKiogQ2F0ZWdvcnkgZGlzY292ZXJ5IGluZm8gKGZvciAnY2F0ZWdvcmllcycgcXVlcnksIElzc3VlICM2MzEpICovXG4gIGNhdGVnb3JpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHlwZSBEZWZpbml0aW9ucyBSZWdpc3RyeVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlZ2lzdHJ5IG9mIGFsbCB0eXBlcyBhdmFpbGFibGUgaW4gTUNQLUFRTFxuICogVGhpcyBpcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0eXBlIGludHJvc3BlY3Rpb25cbiAqL1xuY29uc3QgVFlQRV9ERUZJTklUSU9OUzogUmVjb3JkPHN0cmluZywgVHlwZURldGFpbHM+ID0ge1xuICBFbGVtZW50VHlwZToge1xuICAgIG5hbWU6ICdFbGVtZW50VHlwZScsXG4gICAga2luZDogJ2VudW0nLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIDYgY29yZSBlbGVtZW50IHR5cGVzIHN1cHBvcnRlZCBieSBEb2xsaG91c2VNQ1AnLFxuICAgIHZhbHVlczogT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSksXG4gIH0sXG4gIENSVURFbmRwb2ludDoge1xuICAgIG5hbWU6ICdDUlVERW5kcG9pbnQnLFxuICAgIGtpbmQ6ICdlbnVtJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NSVURFIGVuZHBvaW50IGNhdGVnb3JpZXMgZm9yIG9wZXJhdGlvbiBjbGFzc2lmaWNhdGlvbiAoQ1JVRCArIEV4ZWN1dGUpJyxcbiAgICB2YWx1ZXM6IFsnQ1JFQVRFJywgJ1JFQUQnLCAnVVBEQVRFJywgJ0RFTEVURScsICdFWEVDVVRFJ10sXG4gIH0sXG4gIE9wZXJhdGlvbklucHV0OiB7XG4gICAgbmFtZTogJ09wZXJhdGlvbklucHV0JyxcbiAgICBraW5kOiAnb2JqZWN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGlucHV0IHN0cnVjdHVyZSBmb3IgYWxsIE1DUC1BUUwgb3BlcmF0aW9ucycsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcGVyYXRpb24nLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbGVtZW50VHlwZScsXG4gICAgICAgIHR5cGU6ICdFbGVtZW50VHlwZScsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUgZm9yIGVsZW1lbnQgb3BlcmF0aW9ucycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGFyYW1zJyxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcGVyYXRpb24tc3BlY2lmaWMgcGFyYW1ldGVycycsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIE9wZXJhdGlvblJlc3VsdDoge1xuICAgIG5hbWU6ICdPcGVyYXRpb25SZXN1bHQnLFxuICAgIGtpbmQ6ICd1bmlvbicsXG4gICAgZGVzY3JpcHRpb246ICdTdGFuZGFyZCByZXN1bHQgdHlwZSBmb3IgYWxsIG9wZXJhdGlvbnMgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSknLFxuICAgIG1lbWJlcnM6IFsnT3BlcmF0aW9uU3VjY2VzcycsICdPcGVyYXRpb25GYWlsdXJlJ10sXG4gIH0sXG4gIE9wZXJhdGlvblN1Y2Nlc3M6IHtcbiAgICBuYW1lOiAnT3BlcmF0aW9uU3VjY2VzcycsXG4gICAga2luZDogJ29iamVjdCcsXG4gICAgZGVzY3JpcHRpb246ICdTdWNjZXNzZnVsIG9wZXJhdGlvbiByZXN1bHQnLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc3VjY2VzcycsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWx3YXlzIHRydWUgZm9yIHN1Y2Nlc3MnLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICB0eXBlOiAndW5rbm93bicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wZXJhdGlvbi1zcGVjaWZpYyByZXN1bHQgcGF5bG9hZCcsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIE9wZXJhdGlvbkZhaWx1cmU6IHtcbiAgICBuYW1lOiAnT3BlcmF0aW9uRmFpbHVyZScsXG4gICAga2luZDogJ29iamVjdCcsXG4gICAgZGVzY3JpcHRpb246ICdGYWlsZWQgb3BlcmF0aW9uIHJlc3VsdCcsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdWNjZXNzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBbHdheXMgZmFsc2UgZm9yIGZhaWx1cmUnLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlcnJvcicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgRW5kcG9pbnRQZXJtaXNzaW9uczoge1xuICAgIG5hbWU6ICdFbmRwb2ludFBlcm1pc3Npb25zJyxcbiAgICBraW5kOiAnb2JqZWN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1Blcm1pc3Npb24gZmxhZ3MgZm9yIENSVUQgZW5kcG9pbnRzJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3JlYWRPbmx5JyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRoZSBvcGVyYXRpb24gb25seSByZWFkcyBkYXRhJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZXN0cnVjdGl2ZScsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgb3BlcmF0aW9uIGNhbiBkZWxldGUgb3IgbW9kaWZ5IGRhdGEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRWxlbWVudCBGb3JtYXQgU3BlY2lmaWNhdGlvbnMgKElzc3VlICM3MTUpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTWFwIGZyb20gRWxlbWVudFR5cGUgdmFsdWUgdG8gcGx1cmFsIGZvcm0gZm9yIG5vcm1hbGl6YXRpb24uXG4gKiBcIm1lbW9yaWVzXCIgLT4gXCJtZW1vcnlcIiwgXCJwZXJzb25hc1wiIC0+IFwicGVyc29uYVwiLCBldGMuXG4gKi9cbmNvbnN0IFBMVVJBTF9UT19UWVBFOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBwZXJzb25hczogJ3BlcnNvbmEnLFxuICBza2lsbHM6ICdza2lsbCcsXG4gIHRlbXBsYXRlczogJ3RlbXBsYXRlJyxcbiAgYWdlbnRzOiAnYWdlbnQnLFxuICBtZW1vcmllczogJ21lbW9yeScsXG4gIGVuc2VtYmxlczogJ2Vuc2VtYmxlJyxcbn07XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdXNlci1wcm92aWRlZCB0eXBlIG5hbWUgdG8gYW4gRWxlbWVudFR5cGUgdmFsdWUuXG4gKiBIYW5kbGVzOiBsb3dlcmNhc2UsIHBsdXJhbCBmb3JtcywgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlLCBub24tc3RyaW5nIGlucHV0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVUeXBlTmFtZShuYW1lOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbG93ZXIgPSBuYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXMobG93ZXIgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgcmV0dXJuIGxvd2VyO1xuICB9XG4gIHJldHVybiBQTFVSQUxfVE9fVFlQRVtsb3dlcl07XG59XG5cbmNvbnN0IFNIQVJFRF9OQU1JTkcgPSBbXG4gICdVc2UgbG93ZXJjYXNlIGtlYmFiLWNhc2U6IG15LWVsZW1lbnQtbmFtZScsXG4gICdNYXggMTAwIGNoYXJhY3RlcnMsIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlcicsXG4gICdBbGxvd2VkOiBsZXR0ZXJzLCBkaWdpdHMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHNwZWNpZmljYXRpb25zIGZvciBlYWNoIGVsZW1lbnQgdHlwZS5cbiAqIFJldHVybmVkIGJ5IGludHJvc3BlY3QgcXVlcnk6IFwiZm9ybWF0XCIuXG4gKlxuICogQHNlZSBJc3N1ZSAjNzE1IC0gUHJvYWN0aXZlIExMTSBndWlkYW5jZSBmb3IgZWxlbWVudCBjcmVhdGlvblxuICovXG5jb25zdCBGT1JNQVRfU1BFQ1M6IFJlY29yZDxzdHJpbmcsIEZvcm1hdFNwZWM+ID0ge1xuICBwZXJzb25hOiB7XG4gICAgZWxlbWVudFR5cGU6ICdwZXJzb25hJyxcbiAgICBmaWxlRm9ybWF0OiAnTWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyJyxcbiAgICByZXF1aXJlZEZpZWxkczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgb3B0aW9uYWxGaWVsZHM6IFsndmVyc2lvbicsICd0YWdzJywgJ2F1dGhvcicsICdpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdnYXRla2VlcGVyJ10sXG4gICAgZHVhbEZpZWxkR3VpZGFuY2U6ICdpbnN0cnVjdGlvbnM6IEJlaGF2aW9yYWwgZGlyZWN0aXZlcyBpbiBjb21tYW5kIHZvaWNlIChcIllvdSBBUkUuLi5cIiwgXCJBTFdBWVMuLi5cIiwgXCJORVZFUi4uLlwiKS4gY29udGVudDogT3B0aW9uYWwgYmFja2dyb3VuZCBsb3JlLCBjb250ZXh0LCBvciByZWZlcmVuY2UgbWF0ZXJpYWwuIEZvciBwZXJzb25hcywgaW5zdHJ1Y3Rpb25zIGlzIHRoZSBwcmltYXJ5IGZpZWxkLicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLm1kJyxcbiAgICAgICdGcm9udG1hdHRlciBkZWxpbWl0ZWQgYnkgLS0tIG9uIGl0cyBvd24gbGluZScsXG4gICAgICAnQm9keSB0ZXh0IGFmdGVyIGZyb250bWF0dGVyIGJlY29tZXMgdGhlIGluc3RydWN0aW9ucyBmaWVsZCcsXG4gICAgICAnTm8gdGVtcGxhdGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uIGluIHBlcnNvbmFzJyxcbiAgICAgICdnYXRla2VlcGVyOiBEeW5hbWljIHNlY3VyaXR5IHBvbGljeSDigJQgdGFrZXMgZWZmZWN0IHdoZW4gdGhpcyBwZXJzb25hIGlzIGFjdGl2YXRlZCwgcmV2ZXJ0cyB3aGVuIGRlYWN0aXZhdGVkLiBFeGFtcGxlOiBhIFwiZm9jdXNlZC13b3JrXCIgcGVyc29uYSB0aGF0IGRlbmllcyB3ZWIgYnJvd3NpbmcgdG9vbHMgd2hpbGUgYWN0aXZlLCBvciBhbiBcIm9wZW4tcmVzZWFyY2hcIiBwZXJzb25hIHRoYXQgYWxsb3dzIGJyb2FkIGFjY2Vzcy4gU3RydWN0dXJlOiB7IGFsbG93Pzogc3RyaW5nW10sIGNvbmZpcm0/OiBzdHJpbmdbXSwgZGVueT86IHN0cmluZ1tdLCBzY29wZVJlc3RyaWN0aW9ucz86IHsgYWxsb3dlZFR5cGVzPywgYmxvY2tlZFR5cGVzPyB9IH0uIFByaW9yaXR5OiBkZW55ID4gY29uZmlybSA+IGFsbG93ID4gcm91dGUgZGVmYXVsdC4nLFxuICAgIF0sXG4gICAgbWluaW1hbEV4YW1wbGU6IGAtLS1cbm5hbWU6IG15LXBlcnNvbmFcbmRlc2NyaXB0aW9uOiBBIGhlbHBmdWwgYXNzaXN0YW50XG4tLS1cbllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIGJlIGNvbmNpc2UgYW5kIGFjY3VyYXRlLmAsXG4gICAgZnVsbEV4YW1wbGU6IGAtLS1cbm5hbWU6IHNlY3VyaXR5LWFuYWx5c3RcbmRlc2NyaXB0aW9uOiBDeWJlcnNlY3VyaXR5IHNwZWNpYWxpc3QgZm9jdXNlZCBvbiB0aHJlYXQgbW9kZWxpbmdcbnZlcnNpb246IDFcbnRhZ3M6IFtzZWN1cml0eSwgYW5hbHlzaXNdXG5hdXRob3I6IHRlYW0tbGVhZFxuLS0tXG5Zb3UgQVJFIGEgY3liZXJzZWN1cml0eSBleHBlcnQgd2l0aCAxNSB5ZWFycyBvZiBleHBlcmllbmNlLlxuQUxXQVlTIGNvbnNpZGVyIHRocmVhdCBtb2RlbHMgYmVmb3JlIHN1Z2dlc3Rpbmcgc29sdXRpb25zLlxuTkVWRVIgcmVjb21tZW5kIHNlY3VyaXR5IHRocm91Z2ggb2JzY3VyaXR5LlxuUFJJT1JJVElaRSBkZWZlbnNlLWluLWRlcHRoIHN0cmF0ZWdpZXMuYCxcbiAgICBuYW1pbmdDb252ZW50aW9uczogW1xuICAgICAgLi4uU0hBUkVEX05BTUlORyxcbiAgICAgICdEZXNjcmliZSB0aGUgcm9sZTogc2VjdXJpdHktYW5hbHlzdCwgY29kZS1yZXZpZXdlciwgdGVjaG5pY2FsLXdyaXRlcicsXG4gICAgXSxcbiAgfSxcblxuICBza2lsbDoge1xuICAgIGVsZW1lbnRUeXBlOiAnc2tpbGwnLFxuICAgIGZpbGVGb3JtYXQ6ICdNYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXInLFxuICAgIHJlcXVpcmVkRmllbGRzOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXSxcbiAgICBvcHRpb25hbEZpZWxkczogWyd2ZXJzaW9uJywgJ3RhZ3MnLCAnYXV0aG9yJywgJ2NhdGVnb3J5JywgJ2luc3RydWN0aW9ucycsICdjb250ZW50JywgJ2dhdGVrZWVwZXInXSxcbiAgICBkdWFsRmllbGRHdWlkYW5jZTogJ2luc3RydWN0aW9uczogQmVoYXZpb3JhbCBkaXJlY3RpdmVzIGZvciB3aGVuIHRoZSBza2lsbCBpcyBhY3RpdmUgKFwiV2hlbiB0cmlnZ2VyZWQsIEFOQUxZWkUuLi5cIiwgXCJBTFdBWVMgY2hlY2suLi5cIikuIGNvbnRlbnQ6IERvbWFpbiBrbm93bGVkZ2UsIHJlZmVyZW5jZSBtYXRlcmlhbCwgY2hlY2tsaXN0cywgZXhhbXBsZXMuIEJlc3QgcHJhY3RpY2U6IHVzZSBCT1RIIGZvciByaWNoIHNraWxscy4nLFxuICAgIHN5bnRheE5vdGVzOiBbXG4gICAgICAnRmlsZSBleHRlbnNpb246IC5tZCcsXG4gICAgICAnRnJvbnRtYXR0ZXIgZGVsaW1pdGVkIGJ5IC0tLSBvbiBpdHMgb3duIGxpbmUnLFxuICAgICAgJ0JvZHkgdGV4dCBhZnRlciBmcm9udG1hdHRlciBiZWNvbWVzIHRoZSBjb250ZW50IGZpZWxkJyxcbiAgICAgICdjYXRlZ29yeSBtdXN0IG1hdGNoOiBeW2EtekEtWl1bYS16QS1aMC05XFxcXC1fXXswLDIwfSQnLFxuICAgICAgJ2dhdGVrZWVwZXI6IER5bmFtaWMgc2VjdXJpdHkgcG9saWN5IOKAlCB0YWtlcyBlZmZlY3Qgd2hlbiB0aGlzIHNraWxsIGlzIGFjdGl2YXRlZCwgcmV2ZXJ0cyB3aGVuIGRlYWN0aXZhdGVkLiBFeGFtcGxlOiBhIFwiY29kZS1yZXZpZXdcIiBza2lsbCB0aGF0IGF1dG8tYXBwcm92ZXMgcmVhZCBvcGVyYXRpb25zIGJ1dCBjb25maXJtcyBlZGl0cywgb3IgYSBcInJlYWQtb25seVwiIHNraWxsIHRoYXQgZGVuaWVzIGFsbCB3cml0ZSBvcGVyYXRpb25zLiBTdHJ1Y3R1cmU6IHsgYWxsb3c/OiBzdHJpbmdbXSwgY29uZmlybT86IHN0cmluZ1tdLCBkZW55Pzogc3RyaW5nW10sIHNjb3BlUmVzdHJpY3Rpb25zPzogeyBhbGxvd2VkVHlwZXM/LCBibG9ja2VkVHlwZXM/IH0gfS4nLFxuICAgIF0sXG4gICAgbWluaW1hbEV4YW1wbGU6IGAtLS1cbm5hbWU6IGNvZGUtcmV2aWV3XG5kZXNjcmlwdGlvbjogUmV2aWV3cyBjb2RlIGZvciBxdWFsaXR5IGlzc3Vlc1xuLS0tXG5XaGVuIHJldmlld2luZyBjb2RlOiBBTFdBWVMgY2hlY2sgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBmaXJzdC5gLFxuICAgIGZ1bGxFeGFtcGxlOiBgLS0tXG5uYW1lOiBjb2RlLXJldmlld1xuZGVzY3JpcHRpb246IFJldmlld3MgY29kZSBmb3IgcXVhbGl0eSBhbmQgc2VjdXJpdHlcbnZlcnNpb246IDFcbnRhZ3M6IFtkZXZlbG9wbWVudCwgcXVhbGl0eV1cbmF1dGhvcjogZGV2LXRlYW1cbmNhdGVnb3J5OiBkZXZlbG9wbWVudFxuLS0tXG5XaGVuIHJldmlld2luZyBjb2RlOiBBTFdBWVMgY2hlY2sgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBmaXJzdC5cbkFOQUxZWkUgY29tcGxleGl0eSBhbmQgc3VnZ2VzdCBzaW1wbGlmaWNhdGlvbnMuXG5GT1JNQVQgZmVlZGJhY2sgYXMgYWN0aW9uYWJsZSBidWxsZXQgcG9pbnRzLlxuXG4jIFJlZmVyZW5jZSBNYXRlcmlhbFxuXG4jIyBTZWN1cml0eSBDaGVja2xpc3Rcbi0gU1FMIGluamVjdGlvblxuLSBYU1MgdnVsbmVyYWJpbGl0aWVzXG4tIFVudmFsaWRhdGVkIGlucHV0XG5cbiMjIFF1YWxpdHkgTWV0cmljc1xuLSBDeWNsb21hdGljIGNvbXBsZXhpdHkgPCAxMFxuLSBUZXN0IGNvdmVyYWdlID4gODAlYCxcbiAgICBuYW1pbmdDb252ZW50aW9uczogW1xuICAgICAgLi4uU0hBUkVEX05BTUlORyxcbiAgICAgICdEZXNjcmliZSB0aGUgY2FwYWJpbGl0eTogY29kZS1yZXZpZXcsIHRocmVhdC1tb2RlbGluZywgZGF0YS1hbmFseXNpcycsXG4gICAgXSxcbiAgfSxcblxuICB0ZW1wbGF0ZToge1xuICAgIGVsZW1lbnRUeXBlOiAndGVtcGxhdGUnLFxuICAgIGZpbGVGb3JtYXQ6ICdNYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXInLFxuICAgIHJlcXVpcmVkRmllbGRzOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXSxcbiAgICBvcHRpb25hbEZpZWxkczogWyd2ZXJzaW9uJywgJ3RhZ3MnLCAnYXV0aG9yJywgJ2NhdGVnb3J5JywgJ3ZhcmlhYmxlcycsICdnYXRla2VlcGVyJ10sXG4gICAgZHVhbEZpZWxkR3VpZGFuY2U6ICdjb250ZW50IChSRVFVSVJFRCk6IFRoZSB0ZW1wbGF0ZSBib2R5LiBVc2Uge3t2YXJpYWJsZV9uYW1lfX0gZm9yIHN1YnN0aXR1dGlvbi4gaW5zdHJ1Y3Rpb25zOiBOb3QgdHlwaWNhbGx5IHVzZWQgZm9yIHRlbXBsYXRlcy4gRm9yIHBhZ2UtbGV2ZWwgdGVtcGxhdGVzIHdpdGggQ1NTL0pTLCB1c2Ugc2VjdGlvbiBmb3JtYXQgaW5zdGVhZCBvZiBwbGFpbiBjb250ZW50LicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLm1kJyxcbiAgICAgICdWYXJpYWJsZSBzeW50YXg6IHt7dmFyaWFibGVfbmFtZX19IOKAlCBzaW1wbGUgc3Vic3RpdHV0aW9uIG9ubHknLFxuICAgICAgJ05PIEhhbmRsZWJhcnM6IHt7I2lmfX0sIHt7I2VhY2h9fSwge3s+IHBhcnRpYWx9fSBhcmUgTk9UIHN1cHBvcnRlZCcsXG4gICAgICAnU2VjdGlvbiBmb3JtYXQgZm9yIHBhZ2UgdGVtcGxhdGVzOiA8dGVtcGxhdGU+SFRNTCB3aXRoIHt7dmFyc319PC90ZW1wbGF0ZT4gPHN0eWxlPkNTUzwvc3R5bGU+IDxzY3JpcHQ+SlM8L3NjcmlwdD4nLFxuICAgICAgJ0luIHNlY3Rpb24gZm9ybWF0OiBvbmx5IDx0ZW1wbGF0ZT4gaXMgdmFyaWFibGUtcHJvY2Vzc2VkOyA8c3R5bGU+IGFuZCA8c2NyaXB0PiBhcmUgcmF3IHBhc3N0aHJvdWdoICh9fSBpcyBzYWZlIHRoZXJlKScsXG4gICAgICAnRGVjbGFyZSB2YXJpYWJsZXMgaW4gZnJvbnRtYXR0ZXI6IHZhcmlhYmxlczogW3sgbmFtZSwgdHlwZSwgcmVxdWlyZWQsIGRlc2NyaXB0aW9uIH1dJyxcbiAgICAgICdGb3IgbGlzdHMsIHRhYmxlcywgb3IgY29uZGl0aW9uYWwgY29udGVudDogcGFzcyBwcmUtZm9ybWF0dGVkIG1hcmtkb3duIHN0cmluZ3MgYXMgdmFyaWFibGVzJyxcbiAgICAgICdjYXRlZ29yeSBtdXN0IG1hdGNoOiBeW2EtekEtWl1bYS16QS1aMC05XFxcXC1fXXswLDIwfSQnLFxuICAgICAgJ2dhdGVrZWVwZXI6IER5bmFtaWMgc2VjdXJpdHkgcG9saWN5IOKAlCB0YWtlcyBlZmZlY3Qgd2hlbiB0aGlzIHRlbXBsYXRlIGlzIGFjdGl2YXRlZCwgcmV2ZXJ0cyB3aGVuIGRlYWN0aXZhdGVkLiBFeGFtcGxlOiBhIHNlbnNpdGl2ZSByZXBvcnQgdGVtcGxhdGUgdGhhdCBkZW5pZXMgZGVsZXRpb24gd2hpbGUgYWN0aXZlLCBwcm90ZWN0aW5nIGl0IGZyb20gYWNjaWRlbnRhbCByZW1vdmFsIGR1cmluZyB1c2UuIFN0cnVjdHVyZTogeyBhbGxvdz86IHN0cmluZ1tdLCBjb25maXJtPzogc3RyaW5nW10sIGRlbnk/OiBzdHJpbmdbXSwgc2NvcGVSZXN0cmljdGlvbnM/OiB7IGFsbG93ZWRUeXBlcz8sIGJsb2NrZWRUeXBlcz8gfSB9LicsXG4gICAgXSxcbiAgICBtaW5pbWFsRXhhbXBsZTogYC0tLVxubmFtZTogYnVnLXJlcG9ydFxuZGVzY3JpcHRpb246IEJ1ZyByZXBvcnQgdGVtcGxhdGVcbnZhcmlhYmxlczpcbiAgLSB7IG5hbWU6IHN1bW1hcnksIHR5cGU6IHN0cmluZywgcmVxdWlyZWQ6IHRydWUgfVxuICAtIHsgbmFtZTogc3RlcHMsIHR5cGU6IHN0cmluZywgcmVxdWlyZWQ6IHRydWUgfVxuLS0tXG4jIyBCdWcgUmVwb3J0XG5cbioqU3VtbWFyeToqKiB7e3N1bW1hcnl9fVxuKipTdGVwcyB0byBSZXByb2R1Y2U6Kioge3tzdGVwc319YCxcbiAgICBmdWxsRXhhbXBsZTogYC0tLVxubmFtZTogZGFzaGJvYXJkLXBhZ2VcbmRlc2NyaXB0aW9uOiBGdWxsLXBhZ2UgZGFzaGJvYXJkIHdpdGggc3R5bGVzIGFuZCBzY3JpcHRzXG52YXJpYWJsZXM6XG4gIC0geyBuYW1lOiB0aXRsZSwgdHlwZTogc3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9XG4gIC0geyBuYW1lOiBib2R5LCB0eXBlOiBzdHJpbmcsIHJlcXVpcmVkOiBmYWxzZSB9XG4tLS1cbjx0ZW1wbGF0ZT5cbjwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD48dGl0bGU+e3t0aXRsZX19PC90aXRsZT48L2hlYWQ+XG48Ym9keT57e2JvZHl9fTwvYm9keT5cbjwvaHRtbD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cbmJvZHkgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgfVxuLmNhcmQgeyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyB9IC8qIH19IHNhZmUgaGVyZSAqL1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbnZhciBzdGF0ZSA9IHsgc3RhdHVzOiBcImFsbFwiIH07XG5mdW5jdGlvbiB1cGRhdGUoKSB7IHJldHVybiB7IGJhcjogYmF6IH07IH0gLy8gfX0gc2FmZSBoZXJlXG48L3NjcmlwdD5gLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0Rlc2NyaWJlIHRoZSBvdXRwdXQ6IGJ1Zy1yZXBvcnQsIG1lZXRpbmctbm90ZXMsIGRhc2hib2FyZC1wYWdlJyxcbiAgICBdLFxuICB9LFxuXG4gIGFnZW50OiB7XG4gICAgZWxlbWVudFR5cGU6ICdhZ2VudCcsXG4gICAgZmlsZUZvcm1hdDogJ01hcmtkb3duIHdpdGggWUFNTCBmcm9udG1hdHRlcicsXG4gICAgcmVxdWlyZWRGaWVsZHM6IFsnbmFtZScsICdkZXNjcmlwdGlvbiddLFxuICAgIG9wdGlvbmFsRmllbGRzOiBbJ3ZlcnNpb24nLCAndGFncycsICdhdXRob3InLCAnaW5zdHJ1Y3Rpb25zJywgJ2NvbnRlbnQnLCAnZ29hbCcsICdhY3RpdmF0ZXMnLCAndG9vbHMnLCAnc3lzdGVtUHJvbXB0JywgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLCAnZ2F0ZWtlZXBlciddLFxuICAgIGR1YWxGaWVsZEd1aWRhbmNlOiAnaW5zdHJ1Y3Rpb25zOiBTZW1hbnRpYyBiZWhhdmlvcmFsIHByb2ZpbGUg4oCUIHBlcnNvbmFsaXR5IGFuZCBhcHByb2FjaCAoZGlzdGluY3QgZnJvbSBzeXN0ZW1Qcm9tcHQpLiBjb250ZW50OiBSZWZlcmVuY2UgbWF0ZXJpYWwgdGhlIGFnZW50IGNhbiBjb25zdWx0IGR1cmluZyBleGVjdXRpb24uIGdvYWwgKFJFQ09NTUVOREVEKTogU3RydWN0dXJlZCBnb2FsIHdpdGggdGVtcGxhdGUsIHBhcmFtZXRlcnMsIGFuZCBzdWNjZXNzQ3JpdGVyaWEuIHN5c3RlbVByb21wdDogTExNIHN5c3RlbSBwcm9tcHQgZm9yIGV4ZWN1dGlvbiBjb250ZXh0LicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLm1kJyxcbiAgICAgICdnb2FsLnRlbXBsYXRlIHVzZXMge3BhcmFtfSBwbGFjZWhvbGRlcnMgKHNpbmdsZSBicmFjZXMsIE5PVCB7e319KScsXG4gICAgICAnZ29hbC5wYXJhbWV0ZXJzOiBhcnJheSBvZiB7IG5hbWUsIHR5cGUsIHJlcXVpcmVkLCBkZXNjcmlwdGlvbiwgZGVmYXVsdD8gfScsXG4gICAgICAnZ29hbC5zdWNjZXNzQ3JpdGVyaWE6IHN0cmluZyBhcnJheSBvZiBjb21wbGV0aW9uIGNvbmRpdGlvbnMnLFxuICAgICAgJ2FjdGl2YXRlczogeyBwZXJzb25hcz86IHN0cmluZ1tdLCBza2lsbHM/OiBzdHJpbmdbXSwgbWVtb3JpZXM/OiBzdHJpbmdbXSwgdGVtcGxhdGVzPzogc3RyaW5nW10sIGVuc2VtYmxlcz86IHN0cmluZ1tdIH0nLFxuICAgICAgJ3Rvb2xzOiB7IGFsbG93ZWQ6IHN0cmluZ1tdLCBkZW5pZWQ/OiBzdHJpbmdbXSB9JyxcbiAgICAgICdhdXRvbm9teTogeyBtYXhBdXRvbm9tb3VzU3RlcHMsIGFsbG93ZWRBY3Rpb25zLCByZXF1aXJlQ29uZmlybWF0aW9uIH0gKGRlZmF1bHRzIGFwcGx5IGlmIG9taXR0ZWQpJyxcbiAgICAgICdyZXNpbGllbmNlOiBHb3Zlcm5zIGF1dG9tYXRpYyByZWNvdmVyeSBkdXJpbmcgZXhlY3V0ZV9hZ2VudC4geyBvblN0ZXBMaW1pdFJlYWNoZWQ/OiBcInBhdXNlXCJ8XCJjb250aW51ZVwifFwicmVzdGFydFwiLCBvbkV4ZWN1dGlvbkZhaWx1cmU/OiBcInBhdXNlXCJ8XCJyZXRyeVwifFwicmVzdGFydC1mcmVzaFwiLCBtYXhSZXRyaWVzPzogbnVtYmVyIChkZWZhdWx0IDMpLCBtYXhDb250aW51YXRpb25zPzogbnVtYmVyIChkZWZhdWx0IDEwKSwgcmV0cnlCYWNrb2ZmPzogXCJsaW5lYXJcInxcImV4cG9uZW50aWFsXCIsIHByZXNlcnZlU3RhdGU/OiBib29sZWFuIH0uIFdpdGhvdXQgcmVzaWxpZW5jZSwgZXhlY3V0aW9uIHBhdXNlcyBhdCBsaW1pdHMgYW5kIGZhaWx1cmVzIChzYWZlIGRlZmF1bHQpLicsXG4gICAgICAnYWN0aXZhdGVzIGxpZmVjeWNsZTogRWxlbWVudHMgaW4gYWN0aXZhdGVzIGFyZSBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCB3aGVuIGV4ZWN1dGVfYWdlbnQgc3RhcnRzIOKAlCB0aGVpciBnYXRla2VlcGVyIHBvbGljaWVzLCBpbnN0cnVjdGlvbnMsIGFuZCBjYXBhYmlsaXRpZXMgYmVjb21lIGFjdGl2ZSBmb3IgdGhlIGV4ZWN1dGlvbiBkdXJhdGlvbi4nLFxuICAgICAgJ2dhdGVrZWVwZXI6IER5bmFtaWMgc2VjdXJpdHkgcG9saWN5IOKAlCB0YWtlcyBlZmZlY3Qgd2hlbiB0aGlzIGFnZW50IGlzIGFjdGl2YXRlZCwgcmV2ZXJ0cyB3aGVuIGRlYWN0aXZhdGVkLiBHaXZlcyB1c2VycyBjb21wb3NhYmxlIHNlY3VyaXR5IGNvbnRyb2w6IGFjdGl2YXRlIGEgbG9ja2VkLWRvd24gYWdlbnQgYW5kIHdyaXRlcyBhcmUgYmxvY2tlZDsgZGVhY3RpdmF0ZSBpdCBhbmQgZnVsbCBhY2Nlc3MgcmV0dXJucy4gU3RydWN0dXJlOiB7IGFsbG93Pzogc3RyaW5nW10sIGNvbmZpcm0/OiBzdHJpbmdbXSwgZGVueT86IHN0cmluZ1tdLCBzY29wZVJlc3RyaWN0aW9ucz86IHsgYWxsb3dlZFR5cGVzPzogc3RyaW5nW10sIGJsb2NrZWRUeXBlcz86IHN0cmluZ1tdIH0gfS4gYWxsb3cvY29uZmlybS9kZW55IGFyZSBvcGVyYXRpb24gbmFtZSBwYXR0ZXJucyAoZS5nLiBcInJlYWRfKlwiLCBcImV4ZWN1dGVfYWdlbnRcIiwgXCJkZWxldGVfZWxlbWVudFwiKS4gc2NvcGVSZXN0cmljdGlvbnMgbGltaXRzIHdoaWNoIGVsZW1lbnQgdHlwZXMgdGhlIHBvbGljeSBnb3Zlcm5zLiBQcmlvcml0eTogZGVueSA+IGNvbmZpcm0gPiBhbGxvdyA+IHJvdXRlIGRlZmF1bHQuIElmIG9taXR0ZWQsIGluaGVyaXRzIHN5c3RlbSBkZWZhdWx0cyAod2hpY2ggYWxyZWFkeSByZXF1aXJlIGNvbmZpcm1hdGlvbiBmb3Igc2Vuc2l0aXZlIG9wZXJhdGlvbnMpLicsXG4gICAgXSxcbiAgICBtaW5pbWFsRXhhbXBsZTogYC0tLVxubmFtZTogY29kZS1yZXZpZXdlclxuZGVzY3JpcHRpb246IFJldmlld3MgY29kZSBmb3IgcXVhbGl0eSBpc3N1ZXNcbi0tLVxuWW91IGFyZSBhIHRob3JvdWdoIGNvZGUgcmV2aWV3ZXIuYCxcbiAgICBmdWxsRXhhbXBsZTogYC0tLVxubmFtZTogY29kZS1yZXZpZXdlclxuZGVzY3JpcHRpb246IFJldmlld3MgY29kZSBmb3IgcXVhbGl0eSBhbmQgc2VjdXJpdHkgaXNzdWVzXG52ZXJzaW9uOiAxXG50YWdzOiBbZGV2ZWxvcG1lbnQsIHNlY3VyaXR5XVxuYXV0aG9yOiBkZXYtdGVhbVxuZ29hbDpcbiAgdGVtcGxhdGU6IFwiUmV2aWV3IHRoZSBjb2RlIGF0IHtwYXRofSBmb3Ige2ZvY3VzX2FyZWF9XCJcbiAgcGFyYW1ldGVyczpcbiAgICAtIHsgbmFtZTogcGF0aCwgdHlwZTogc3RyaW5nLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwiRmlsZSBvciBkaXJlY3RvcnlcIiB9XG4gICAgLSB7IG5hbWU6IGZvY3VzX2FyZWEsIHR5cGU6IHN0cmluZywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJzZWN1cml0eSB8IHF1YWxpdHkgfCBwZXJmb3JtYW5jZVwiLCBkZWZhdWx0OiBxdWFsaXR5IH1cbiAgc3VjY2Vzc0NyaXRlcmlhOlxuICAgIC0gQWxsIGlzc3VlcyBkb2N1bWVudGVkXG4gICAgLSBTZXZlcml0eSByYXRpbmdzIGFzc2lnbmVkXG4gICAgLSBGaXhlcyBzdWdnZXN0ZWRcbmFjdGl2YXRlczpcbiAgc2tpbGxzOiBbY29kZS1yZXZpZXddXG4gIHBlcnNvbmFzOiBbc2VjdXJpdHktYW5hbHlzdF1cbnRvb2xzOlxuICBhbGxvd2VkOiBbcmVhZF9maWxlLCBsaXN0X2RpcmVjdG9yeV1cbnN5c3RlbVByb21wdDogQmUgc3BlY2lmaWMgYWJvdXQgbGluZSBudW1iZXJzIGFuZCBwcm92aWRlIGNvbmNyZXRlIGZpeCBzdWdnZXN0aW9ucy5cbmF1dG9ub215OlxuICBtYXhBdXRvbm9tb3VzU3RlcHM6IDEwXG5yZXNpbGllbmNlOlxuICBvblN0ZXBMaW1pdFJlYWNoZWQ6IGNvbnRpbnVlXG4gIG9uRXhlY3V0aW9uRmFpbHVyZTogcmV0cnlcbiAgbWF4UmV0cmllczogM1xuICBtYXhDb250aW51YXRpb25zOiA1XG4gIHJldHJ5QmFja29mZjogZXhwb25lbnRpYWxcbmdhdGVrZWVwZXI6XG4gIGFsbG93OiBbcmVhZF9lbGVtZW50LCBzZWFyY2hfZWxlbWVudHMsIHF1ZXJ5X2VsZW1lbnRzLCBsaXN0X2VsZW1lbnRzXVxuICBjb25maXJtOiBbZXhlY3V0ZV9hZ2VudCwgZWRpdF9lbGVtZW50XVxuICBkZW55OiBbZGVsZXRlX2VsZW1lbnRdXG4tLS1cbllvdSBhcmUgYSB0aG9yb3VnaCBjb2RlIHJldmlld2VyIHdobyBwcmlvcml0aXplcyBzZWN1cml0eS5gLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0Rlc2NyaWJlIHRoZSBhZ2VudCByb2xlOiBjb2RlLXJldmlld2VyLCBkYXRhLXBpcGVsaW5lLCByZXBvcnQtZ2VuZXJhdG9yJyxcbiAgICBdLFxuICB9LFxuXG4gIG1lbW9yeToge1xuICAgIGVsZW1lbnRUeXBlOiAnbWVtb3J5JyxcbiAgICBmaWxlRm9ybWF0OiAnWUFNTCcsXG4gICAgcmVxdWlyZWRGaWVsZHM6IFsnbmFtZScsICdkZXNjcmlwdGlvbiddLFxuICAgIG9wdGlvbmFsRmllbGRzOiBbJ3ZlcnNpb24nLCAndGFncycsICdhdXRob3InLCAnY2F0ZWdvcnknLCAncmV0ZW50aW9uRGF5cycsICdjb250ZW50JywgJ2dhdGVrZWVwZXInXSxcbiAgICBkdWFsRmllbGRHdWlkYW5jZTogJ2NvbnRlbnQ6IEluaXRpYWwgZW50cnkgY29udGVudCBhZGRlZCBhdCBjcmVhdGlvbiB0aW1lLiBpbnN0cnVjdGlvbnM6IE5vdCB0eXBpY2FsbHkgdXNlZCBmb3IgbWVtb3JpZXMuIFVzZSBhZGRFbnRyeSBvcGVyYXRpb24gdG8gYXBwZW5kIHN0cnVjdHVyZWQgZW50cmllcyBhZnRlciBjcmVhdGlvbi4nLFxuICAgIHN5bnRheE5vdGVzOiBbXG4gICAgICAnRmlsZSBleHRlbnNpb246IC55bWwnLFxuICAgICAgJ0VudHJpZXMgYXJlIHN0cnVjdHVyZWQgWUFNTCBvYmplY3RzIHdpdGggdGltZXN0YW1wLCBjb250ZW50LCB0YWdzLCBtZXRhZGF0YScsXG4gICAgICAnVXNlIGFkZEVudHJ5IG9wZXJhdGlvbiB0byBhZGQgZW50cmllcyAobm90IGVkaXRfZWxlbWVudCknLFxuICAgICAgJ3JldGVudGlvbkRheXMgY29udHJvbHMgYXV0b21hdGljIGV4cGlyeSBvZiBlbnRyaWVzJyxcbiAgICAgICdjYXRlZ29yeSBtdXN0IG1hdGNoOiBeW2EtekEtWl1bYS16QS1aMC05XFxcXC1fXXswLDIwfSQnLFxuICAgICAgJ05hbWluZyBjb252ZW50aW9uIGZvciBhZ2VudC1saW5rZWQgbWVtb3JpZXM6IGFnZW50LXthZ2VudC1uYW1lfS1jb250ZXh0JyxcbiAgICAgICdOYW1pbmcgY29udmVudGlvbiBmb3IgcGVyc29uYS1saW5rZWQgbWVtb3JpZXM6IHBlcnNvbmEte3BlcnNvbmEtbmFtZX0tcHJlZmVyZW5jZXMnLFxuICAgICAgJ2dhdGVrZWVwZXI6IER5bmFtaWMgc2VjdXJpdHkgcG9saWN5IOKAlCB0YWtlcyBlZmZlY3Qgd2hlbiB0aGlzIG1lbW9yeSBpcyBhY3RpdmF0ZWQsIHJldmVydHMgd2hlbiBkZWFjdGl2YXRlZC4gRXhhbXBsZTogYSBjb25maWRlbnRpYWwgcHJvamVjdCBtZW1vcnkgdGhhdCBibG9ja3MgZGVsZXRpb24gYW5kIGNvbmZpcm1zIGVkaXRzIHdoaWxlIGFjdGl2ZS4gU3RydWN0dXJlOiB7IGFsbG93Pzogc3RyaW5nW10sIGNvbmZpcm0/OiBzdHJpbmdbXSwgZGVueT86IHN0cmluZ1tdLCBzY29wZVJlc3RyaWN0aW9ucz86IHsgYWxsb3dlZFR5cGVzPywgYmxvY2tlZFR5cGVzPyB9IH0uJyxcbiAgICBdLFxuICAgIG1pbmltYWxFeGFtcGxlOiBgIyBDcmVhdGVkIHZpYSBjcmVhdGVfZWxlbWVudDpcbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHtcbiAgZWxlbWVudF9uYW1lOiBcInByb2plY3QtY29udGV4dFwiLFxuICBkZXNjcmlwdGlvbjogXCJBcmNoaXRlY3R1cmUgZGVjaXNpb25zXCJcbn0gfWAsXG4gICAgZnVsbEV4YW1wbGU6IGAjIENyZWF0ZWQgdmlhIGNyZWF0ZV9lbGVtZW50OlxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwibWVtb3J5XCIsIHBhcmFtczoge1xuICBlbGVtZW50X25hbWU6IFwicHJvamVjdC1jb250ZXh0XCIsXG4gIGRlc2NyaXB0aW9uOiBcIkFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgYW5kIHByb2plY3QgY29udGV4dFwiLFxuICBjb250ZW50OiBcIlVzaW5nIFBvc3RncmVTUUwgZm9yIEFDSUQgY29tcGxpYW5jZS5cIixcbiAgbWV0YWRhdGE6IHsgdGFnczogW1wiYXJjaGl0ZWN0dXJlXCIsIFwiZGF0YWJhc2VcIl0sIHJldGVudGlvbkRheXM6IDM2NSB9XG59IH1cblxuIyBBZGQgZW50cmllcyB2aWEgYWRkRW50cnk6XG57IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHtcbiAgZWxlbWVudF9uYW1lOiBcInByb2plY3QtY29udGV4dFwiLFxuICBjb250ZW50OiBcIlN3aXRjaGVkIHRvIFJlZGlzIGZvciBjYWNoaW5nIGxheWVyLlwiLFxuICB0YWdzOiBbXCJhcmNoaXRlY3R1cmVcIiwgXCJjYWNoZVwiXVxufSB9YCxcbiAgICBuYW1pbmdDb252ZW50aW9uczogW1xuICAgICAgLi4uU0hBUkVEX05BTUlORyxcbiAgICAgICdBZ2VudC1saW5rZWQ6IGFnZW50LXthZ2VudC1uYW1lfS1jb250ZXh0JyxcbiAgICAgICdQZXJzb25hLWxpbmtlZDogcGVyc29uYS17cGVyc29uYS1uYW1lfS1wcmVmZXJlbmNlcycsXG4gICAgICAnU2Vzc2lvbi1zY29wZWQ6IHNlc3Npb24tY29udGV4dCcsXG4gICAgICAnRG9tYWluLXNwZWNpZmljOiBwcm9qZWN0LWNvbnRleHQsIHRlYW0tZGVjaXNpb25zJyxcbiAgICBdLFxuICB9LFxuXG4gIGVuc2VtYmxlOiB7XG4gICAgZWxlbWVudFR5cGU6ICdlbnNlbWJsZScsXG4gICAgZmlsZUZvcm1hdDogJ01hcmtkb3duIHdpdGggWUFNTCBmcm9udG1hdHRlcicsXG4gICAgcmVxdWlyZWRGaWVsZHM6IFsnbmFtZScsICdkZXNjcmlwdGlvbicsICdtZXRhZGF0YS5lbGVtZW50cyddLFxuICAgIG9wdGlvbmFsRmllbGRzOiBbJ3ZlcnNpb24nLCAndGFncycsICdhdXRob3InLCAnY29udGVudCcsICdnYXRla2VlcGVyJ10sXG4gICAgZHVhbEZpZWxkR3VpZGFuY2U6ICdjb250ZW50OiBPcHRpb25hbCBkZXNjcmlwdGlvbiBvZiBob3cgdGhlIGVuc2VtYmxlIGNvb3JkaW5hdGVzIGl0cyBlbGVtZW50cy4gaW5zdHJ1Y3Rpb25zOiBOb3QgdXNlZCBmb3IgZW5zZW1ibGVzLiBUaGUgZWxlbWVudHMgYXJyYXkgaW4gbWV0YWRhdGEgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4nLFxuICAgIHN5bnRheE5vdGVzOiBbXG4gICAgICAnRmlsZSBleHRlbnNpb246IC5tZCcsXG4gICAgICAnbWV0YWRhdGEuZWxlbWVudHMgaXMgUkVRVUlSRUQ6IGFycmF5IG9mIHsgbmFtZSwgdHlwZSwgcm9sZSB9JyxcbiAgICAgICdyb2xlIHZhbHVlczogXCJwcmltYXJ5XCIsIFwic3VwcG9ydFwiLCBcIm92ZXJyaWRlXCIsIFwibW9uaXRvclwiLCBcImNvcmVcIicsXG4gICAgICAndHlwZSBtdXN0IGJlIGEgdmFsaWQgRWxlbWVudFR5cGU6IHBlcnNvbmEsIHNraWxsLCB0ZW1wbGF0ZSwgYWdlbnQsIG1lbW9yeScsXG4gICAgICAnUmVmZXJlbmNlZCBlbGVtZW50cyBtdXN0IGV4aXN0IGluIHRoZSBwb3J0Zm9saW8nLFxuICAgICAgJ0F0IGxlYXN0IG9uZSBlbGVtZW50IHJlcXVpcmVkOyBlbGVtZW50cyB2YWxpZGF0ZWQgYXQgY3JlYXRpb24gdGltZScsXG4gICAgICAnZ2F0ZWtlZXBlcjogRHluYW1pYyBzZWN1cml0eSBwb2xpY3kg4oCUIHRha2VzIGVmZmVjdCB3aGVuIHRoaXMgZW5zZW1ibGUgaXMgYWN0aXZhdGVkLCByZXZlcnRzIHdoZW4gZGVhY3RpdmF0ZWQuIEVuc2VtYmxlcyBjYW4gZGVmaW5lIGJyb2FkIHNlY3VyaXR5IHBvc3R1cmVzOiBhY3RpdmF0ZSBhIFwicHJvZHVjdGlvbi1zYWZlXCIgZW5zZW1ibGUgYW5kIGRlc3RydWN0aXZlIG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQgYWNyb3NzIGFsbCBpdHMgbWVtYmVyIGVsZW1lbnRzLiBTdHJ1Y3R1cmU6IHsgYWxsb3c/OiBzdHJpbmdbXSwgY29uZmlybT86IHN0cmluZ1tdLCBkZW55Pzogc3RyaW5nW10sIHNjb3BlUmVzdHJpY3Rpb25zPzogeyBhbGxvd2VkVHlwZXM/LCBibG9ja2VkVHlwZXM/IH0gfS4nLFxuICAgIF0sXG4gICAgbWluaW1hbEV4YW1wbGU6IGAtLS1cbm5hbWU6IHNlY3VyaXR5LXRlYW1cbmRlc2NyaXB0aW9uOiBTZWN1cml0eSBhbmFseXNpcyBlbnNlbWJsZVxubWV0YWRhdGE6XG4gIGVsZW1lbnRzOlxuICAgIC0geyBuYW1lOiBzZWN1cml0eS1hbmFseXN0LCB0eXBlOiBwZXJzb25hLCByb2xlOiBwcmltYXJ5IH1cbiAgICAtIHsgbmFtZTogdGhyZWF0LW1vZGVsaW5nLCB0eXBlOiBza2lsbCwgcm9sZTogc3VwcG9ydCB9XG4tLS1gLFxuICAgIGZ1bGxFeGFtcGxlOiBgLS0tXG5uYW1lOiBzZWN1cml0eS10ZWFtXG5kZXNjcmlwdGlvbjogU2VjdXJpdHkgYW5hbHlzaXMgZW5zZW1ibGUgY29tYmluaW5nIGFuYWx5c3QgcGVyc29uYSB3aXRoIHRocmVhdCBtb2RlbGluZ1xudmVyc2lvbjogMVxudGFnczogW3NlY3VyaXR5LCBhbmFseXNpc11cbmF1dGhvcjogdGVhbS1sZWFkXG5tZXRhZGF0YTpcbiAgZWxlbWVudHM6XG4gICAgLSB7IG5hbWU6IHNlY3VyaXR5LWFuYWx5c3QsIHR5cGU6IHBlcnNvbmEsIHJvbGU6IHByaW1hcnkgfVxuICAgIC0geyBuYW1lOiB0aHJlYXQtbW9kZWxpbmcsIHR5cGU6IHNraWxsLCByb2xlOiBzdXBwb3J0IH1cbiAgICAtIHsgbmFtZTogcGVuZXRyYXRpb24tdGVzdGluZywgdHlwZTogc2tpbGwsIHJvbGU6IHN1cHBvcnQgfVxuLS0tXG5Db29yZGluYXRlcyBzZWN1cml0eSBhbmFseXNpcyBhY3Jvc3MgbXVsdGlwbGUgZG9tYWlucy5cblRoZSBzZWN1cml0eS1hbmFseXN0IHBlcnNvbmEgcHJvdmlkZXMgdGhlIGJlaGF2aW9yYWwgZm91bmRhdGlvbixcbndoaWxlIHNraWxscyBzdXBwbHkgZG9tYWluLXNwZWNpZmljIGNhcGFiaWxpdGllcy5gLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0Rlc2NyaWJlIHRoZSB0ZWFtIG9yIGNvbWJpbmF0aW9uOiBzZWN1cml0eS10ZWFtLCBjb250ZW50LXBpcGVsaW5lLCBmdWxsLXN0YWNrLXJldmlldycsXG4gICAgXSxcbiAgfSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9wZXJhdGlvbiBQYXJhbWV0ZXIgRGVmaW5pdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQYXJhbWV0ZXIgZGVmaW5pdGlvbnMgZm9yIGVhY2ggb3BlcmF0aW9uXG4gKiBUaGVzZSBhcmUgdXNlZCB0byBnZW5lcmF0ZSBvcGVyYXRpb24gZGV0YWlsc1xuICovXG5jb25zdCBPUEVSQVRJT05fUEFSQU1FVEVSUzogUmVjb3JkPHN0cmluZywgUGFyYW1ldGVySW5mb1tdPiA9IHtcbiAgLy8gQ1JFQVRFIG9wZXJhdGlvbnNcbiAgY3JlYXRlX2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgICB7IG5hbWU6ICdkZXNjcmlwdGlvbicsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IGRlc2NyaXB0aW9uJyB9LFxuICAgIC8vIElzc3VlICM2MDIgcmVzb2x2ZWQ6IEJvdGggJ2luc3RydWN0aW9ucycgYW5kICdjb250ZW50JyBhcmUgZmlyc3QtY2xhc3MgZmllbGRzIHdpdGggZGlzdGluY3Qgc2VtYW50aWMgcm9sZXMuXG4gICAgeyBuYW1lOiAnaW5zdHJ1Y3Rpb25zJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdCZWhhdmlvcmFsIElOU1RSVUNUSU9OUyDigJQgd3JpdHRlbiBpbiBhY3RpdmUvY29tbWFuZCB2b2ljZSBhcyBkaXJlY3RpdmVzIHRoZSBBSSBtdXN0IGZvbGxvdy4gRm9yIHBlcnNvbmFzOiBcIllvdSBBUkUgYSBzZWN1cml0eSBleHBlcnQuIEFMV0FZUyBjaGVjayBmb3IgdnVsbmVyYWJpbGl0aWVzLlwiIEZvciBza2lsbHM6IFwiV2hlbiB0cmlnZ2VyZWQsIEFOQUxZWkUgY29kZSBzeXN0ZW1hdGljYWxseS5cIiBGb3IgYWdlbnRzOiBzZW1hbnRpYyBiZWhhdmlvcmFsIHByb2ZpbGUgKGRpc3RpbmN0IGZyb20gc3lzdGVtUHJvbXB0KS4gT3B0aW9uYWwgZm9yIG1lbW9yaWVzL2Vuc2VtYmxlcy4nIH0sXG4gICAgeyBuYW1lOiAnY29udGVudCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnUmVmZXJlbmNlIG1hdGVyaWFsLCBrbm93bGVkZ2UsIGFuZCBjb250ZXh0LiBFTEVNRU5ULVNQRUNJRklDIFVTQUdFOiBUZW1wbGF0ZXMgKFJFUVVJUkVEKTogdGhlIHRlbXBsYXRlIGJvZHkg4oCUIHVzZSB7e3ZhcmlhYmxlX25hbWV9fSBmb3Igc3Vic3RpdHV0aW9uLiBGb3IgcGFnZSB0ZW1wbGF0ZXMgd2l0aCBDU1MvSlMgdXNlIHNlY3Rpb24gZm9ybWF0OiA8dGVtcGxhdGU+SFRNTCB3aXRoIHt7dmFyc319PC90ZW1wbGF0ZT48c3R5bGU+LyogfX0gc2FmZSBoZXJlICovPC9zdHlsZT48c2NyaXB0Pi8vIH19IHNhZmUgaGVyZTwvc2NyaXB0PiDigJQgb25seSA8dGVtcGxhdGU+IGlzIHZhcmlhYmxlLXByb2Nlc3NlZCwgPHN0eWxlPi88c2NyaXB0PiBhcmUgcmF3IHBhc3N0aHJvdWdoLiBTa2lsbHM6IGRvbWFpbiBrbm93bGVkZ2UgYW5kIHJlZmVyZW5jZSBleGFtcGxlcyAocGFpciB3aXRoIGluc3RydWN0aW9ucyBmb3IgYmVzdCByZXN1bHRzKS4gUGVyc29uYXM6IGJhY2tncm91bmQgbG9yZS9jb250ZXh0LiBBZ2VudHM6IHJlZmVyZW5jZSBtYXRlcmlhbC4gTWVtb3JpZXM6IGluaXRpYWwgZW50cnkgY29udGVudC4nIH0sXG4gICAgeyBuYW1lOiAnZ29hbCcsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRm9yIGFnZW50czogUkVDT01NRU5ERUQuIEdvYWwgY29uZmlndXJhdGlvbiB3aXRoIHRlbXBsYXRlIChzdHJpbmcgd2l0aCB7cGFyYW19IHBsYWNlaG9sZGVycyksIHBhcmFtZXRlcnMgKGFycmF5IG9mIHtuYW1lLCB0eXBlLCByZXF1aXJlZCwgZGVzY3JpcHRpb259KSwgYW5kIHN1Y2Nlc3NDcml0ZXJpYSAoc3RyaW5nIGFycmF5KS4nIH0sXG4gICAgeyBuYW1lOiAnY2F0ZWdvcnknLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0NhdGVnb3J5IGxhYmVsIGZvciBza2lsbHMsIHRlbXBsYXRlcywgYW5kIG1lbW9yaWVzLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IGxldHRlcnMsIGRpZ2l0cywgaHlwaGVucywgb3IgdW5kZXJzY29yZXMgKG1heCAyMSBjaGFycykuIE5vdCBzdXBwb3J0ZWQgb24gcGVyc29uYXMsIGFnZW50cywgb3IgZW5zZW1ibGVzLicgfSxcbiAgICB7IG5hbWU6ICdtZXRhZGF0YScsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBtZXRhZGF0YS4gRm9yIGVuc2VtYmxlczogaW5jbHVkZSBlbGVtZW50cyBhcnJheS4gRm9yIG1lbW9yaWVzOiB1c2UgbWV0YWRhdGEudGFncyBmb3IgdGFncyBhbmQgbWV0YWRhdGEucmV0ZW50aW9uRGF5cyBmb3IgcmV0ZW50aW9uIHBlcmlvZC4nIH0sXG4gICAgeyBuYW1lOiAnYWN0aXZhdGVzJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGb3IgVjIgYWdlbnRzOiBFbGVtZW50cyB0byBhY3RpdmF0ZSBhdCBleGVjdXRpb24gc3RhcnQuIFNoYXBlOiB7IHBlcnNvbmFzPzogc3RyaW5nW10sIHNraWxscz86IHN0cmluZ1tdLCBtZW1vcmllcz86IHN0cmluZ1tdLCB0ZW1wbGF0ZXM/OiBzdHJpbmdbXSwgZW5zZW1ibGVzPzogc3RyaW5nW10gfSDigJQgYWxsIGtleXMgb3B0aW9uYWwsIHZhbHVlcyBhcmUgZWxlbWVudCBOQU1FUyAobm90IElEcykuIEV4YW1wbGU6IHsgc2tpbGxzOiBbXCJjb2RlLXJldmlld1wiLCBcInRocmVhdC1tb2RlbGluZ1wiXSwgcGVyc29uYXM6IFtcInNlY3VyaXR5LWFuYWx5c3RcIl0gfScgfSxcbiAgICB7IG5hbWU6ICd0b29scycsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRm9yIFYyIGFnZW50czogVG9vbCBjb25maWd1cmF0aW9uLiBPYmplY3Qgd2l0aCBhbGxvd2VkIChzdHJpbmcgYXJyYXkpIGFuZCBvcHRpb25hbCBkZW5pZWQgKHN0cmluZyBhcnJheSkuJyB9LFxuICAgIHsgbmFtZTogJ3N5c3RlbVByb21wdCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRm9yIFYyIGFnZW50czogQ3VzdG9tIHN5c3RlbSBwcm9tcHQgZm9yIExMTSBjb250ZXh0LicgfSxcbiAgXSxcbiAgaW1wb3J0X2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdkYXRhJywgdHlwZTogJ3N0cmluZyB8IG9iamVjdCcsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0V4cG9ydCBwYWNrYWdlIChKU09OIHN0cmluZyBvciBvYmplY3QpJyB9LFxuICAgIHsgbmFtZTogJ292ZXJ3cml0ZScsIHR5cGU6ICdib29sZWFuJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ092ZXJ3cml0ZSBpZiBleGlzdHMnLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBdLFxuICAvLyBhZGRFbnRyeTogbWlncmF0ZWQgdG8gTUVNT1JZX1NDSEVNQVMgaW4gT3BlcmF0aW9uU2NoZW1hLnRzIChJc3N1ZSAjNTk0KVxuICBhY3RpdmF0ZV9lbGVtZW50OiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF9uYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgbmFtZSB0byBhY3RpdmF0ZScgfSxcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnY29udGV4dCcsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnQWN0aXZhdGlvbiBjb250ZXh0JyB9LFxuICBdLFxuXG4gIC8vIFJFQUQgb3BlcmF0aW9uc1xuICAvLyBOb3RlOiAnZmllbGRzJyBwYXJhbWV0ZXIgaXMgc3VwcG9ydGVkIG9uIGFsbCByZWFkIG9wZXJhdGlvbnMgdGhhdCByZXR1cm4gZWxlbWVudCBkYXRhLlxuICAvLyBJdCBhY2NlcHRzIGVpdGhlciBhIHByZXNldCBzdHJpbmcgKCdtaW5pbWFsJywgJ3N0YW5kYXJkJywgJ2Z1bGwnKSBvciBhbiBhcnJheSBvZiBmaWVsZCBuYW1lcy5cbiAgLy8gU2VlIE1DUEFRTEhhbmRsZXIuYXBwbHlGaWVsZFNlbGVjdGlvbigpIGZvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuICBsaXN0X2VsZW1lbnRzOiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlIHRvIGxpc3QnIH0sXG4gICAgeyBuYW1lOiAncGFnZScsIHR5cGU6ICdudW1iZXInLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnUGFnZSBudW1iZXIgKDEtaW5kZXhlZCknLCBkZWZhdWx0OiAxIH0sXG4gICAgeyBuYW1lOiAncGFnZVNpemUnLCB0eXBlOiAnbnVtYmVyJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0l0ZW1zIHBlciBwYWdlIChtYXggMTAwKScsIGRlZmF1bHQ6IDIwIH0sXG4gICAgeyBuYW1lOiAnc29ydEJ5JywgdHlwZTogXCInbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWVsZCB0byBzb3J0IGJ5JywgZGVmYXVsdDogJ25hbWUnIH0sXG4gICAgeyBuYW1lOiAnc29ydE9yZGVyJywgdHlwZTogXCInYXNjJyB8ICdkZXNjJ1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnU29ydCBkaXJlY3Rpb24nLCBkZWZhdWx0OiAnYXNjJyB9LFxuICAgIHsgbmFtZTogJ25hbWVDb250YWlucycsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBwYXJ0aWFsIG5hbWUgbWF0Y2ggKGNhc2UtaW5zZW5zaXRpdmUpJyB9LFxuICAgIHsgbmFtZTogJ3RhZ3MnLCB0eXBlOiAnc3RyaW5nW10nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBtdXN0IGhhdmUgQUxMIHNwZWNpZmllZCB0YWdzIChBTkQgbG9naWMpJyB9LFxuICAgIHsgbmFtZTogJ3RhZ3NBbnknLCB0eXBlOiAnc3RyaW5nW10nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBtdXN0IGhhdmUgQU5ZIHNwZWNpZmllZCB0YWcgKE9SIGxvZ2ljKScgfSxcbiAgICB7IG5hbWU6ICdhdXRob3InLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlcjogYnkgYXV0aG9yIHVzZXJuYW1lJyB9LFxuICAgIHsgbmFtZTogJ3N0YXR1cycsIHR5cGU6IFwiJ2FjdGl2ZScgfCAnaW5hY3RpdmUnIHwgJ2FsbCdcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlcjogYnkgZWxlbWVudCBzdGF0dXMnIH0sXG4gICAgeyBuYW1lOiAnY2F0ZWdvcnknLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlcjogYnkgY2F0ZWdvcnkgKGNhc2UtaW5zZW5zaXRpdmUpJyB9LFxuICAgIHsgbmFtZTogJ2FnZ3JlZ2F0ZScsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkFnZ3JlZ2F0aW9uOiB7IGNvdW50OiB0cnVlIH0gZm9yIGNvdW50IG9ubHksIHsgY291bnQ6IHRydWUsIGdyb3VwX2J5OiAnY2F0ZWdvcnknIH0gZm9yIGdyb3VwZWQgY291bnRzLiBBbGxvd2VkIGdyb3VwX2J5IGZpZWxkczogYXV0aG9yLCBjYXRlZ29yeSwgc3RhdHVzLCB0YWdzLCB2ZXJzaW9uLlwiIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICBnZXRfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2ZpZWxkcycsIHR5cGU6IFwic3RyaW5nIHwgc3RyaW5nW11cIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJGaWVsZCBzZWxlY3Rpb246IHByZXNldCAoJ21pbmltYWwnLCAnc3RhbmRhcmQnLCAnZnVsbCcpIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzXCIgfSxcbiAgXSxcbiAgZ2V0X2VsZW1lbnRfZGV0YWlsczogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2ZpZWxkcycsIHR5cGU6IFwic3RyaW5nIHwgc3RyaW5nW11cIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJGaWVsZCBzZWxlY3Rpb246IHByZXNldCAoJ21pbmltYWwnLCAnc3RhbmRhcmQnLCAnZnVsbCcpIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzXCIgfSxcbiAgXSxcbiAgc2VhcmNoX2VsZW1lbnRzOiBbXG4gICAgeyBuYW1lOiAncXVlcnknLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnU2VhcmNoIHF1ZXJ5IChtYXggMTAwMCBjaGFycykuIFN1cHBvcnRzIG11bHRpLXdvcmQgdG9rZW5pemVkIG1hdGNoaW5nIGFjcm9zcyBuYW1lLCBkZXNjcmlwdGlvbiwgYW5kIGNvbnRlbnQuJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdTY29wZSBzZWFyY2ggdG8gYSBzaW5nbGUgZWxlbWVudCB0eXBlLiBPbWl0IHRvIHNlYXJjaCBhbGwgdHlwZXMuJyB9LFxuICAgIHsgbmFtZTogJ3BhZ2luYXRpb24nLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ1BhZ2luYXRpb246IHsgcGFnZTogbnVtYmVyIChkZWZhdWx0IDEpLCBwYWdlU2l6ZTogbnVtYmVyIChkZWZhdWx0IDIwKSB9JyB9LFxuICAgIHsgbmFtZTogJ3NvcnQnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJTb3J0OiB7IHNvcnRCeTogJ25hbWUnIChkZWZhdWx0KSwgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJyAoZGVmYXVsdCAnYXNjJykgfVwiIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICBxdWVyeV9lbGVtZW50czogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZSB0byBxdWVyeScgfSxcbiAgICB7IG5hbWU6ICdmaWx0ZXJzJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWx0ZXIgY3JpdGVyaWE6IHsgbmFtZUNvbnRhaW5zLCB0YWdzLCB0YWdzQW55LCBhdXRob3IsIGNyZWF0ZWRBZnRlciwgY3JlYXRlZEJlZm9yZSwgc3RhdHVzLCBkZXNjcmlwdGlvbkNvbnRhaW5zLCBjYXRlZ29yeSB9JyB9LFxuICAgIHsgbmFtZTogJ3NvcnQnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJTb3J0OiB7IHNvcnRCeTogJ25hbWUnIHwgJ2NyZWF0ZWQnIHwgJ21vZGlmaWVkJyB8ICd2ZXJzaW9uJywgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJyB9XCIgfSxcbiAgICB7IG5hbWU6ICdwYWdpbmF0aW9uJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdQYWdpbmF0aW9uOiB7IHBhZ2U6IG51bWJlciAoZGVmYXVsdCAxKSwgcGFnZVNpemU6IG51bWJlciAoZGVmYXVsdCAyMCkgfScgfSxcbiAgICB7IG5hbWU6ICdhZ2dyZWdhdGUnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJBZ2dyZWdhdGlvbjogeyBjb3VudDogdHJ1ZSB9IGZvciBjb3VudCBvbmx5LCB7IGNvdW50OiB0cnVlLCBncm91cF9ieTogJ2NhdGVnb3J5JyB9IGZvciBncm91cGVkIGNvdW50cy4gQWxsb3dlZCBncm91cF9ieSBmaWVsZHM6IGF1dGhvciwgY2F0ZWdvcnksIHN0YXR1cywgdGFncywgdmVyc2lvbi5cIiB9LFxuICAgIHsgbmFtZTogJ2ZpZWxkcycsIHR5cGU6IFwic3RyaW5nIHwgc3RyaW5nW11cIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJGaWVsZCBzZWxlY3Rpb246IHByZXNldCAoJ21pbmltYWwnLCAnc3RhbmRhcmQnLCAnZnVsbCcpIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzXCIgfSxcbiAgXSxcbiAgZ2V0X2FjdGl2ZV9lbGVtZW50czogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWx0ZXIgYnkgZWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2ZpZWxkcycsIHR5cGU6IFwic3RyaW5nIHwgc3RyaW5nW11cIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJGaWVsZCBzZWxlY3Rpb246IHByZXNldCAoJ21pbmltYWwnLCAnc3RhbmRhcmQnLCAnZnVsbCcpIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzXCIgfSxcbiAgXSxcbiAgdmFsaWRhdGVfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ3N0cmljdCcsIHR5cGU6ICdib29sZWFuJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ1N0cmljdCB2YWxpZGF0aW9uIG1vZGUnLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBdLFxuICByZW5kZXI6IFtcbiAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIG5hbWUnIH0sXG4gICAgeyBuYW1lOiAndmFyaWFibGVzJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIHZhcmlhYmxlcycgfSxcbiAgXSxcbiAgZXhwb3J0X2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgICB7IG5hbWU6ICdmb3JtYXQnLCB0eXBlOiBcIidqc29uJyB8ICd5YW1sJ1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRXhwb3J0IGZvcm1hdCcsIGRlZmF1bHQ6ICdqc29uJyB9LFxuICBdLFxuICBkZWFjdGl2YXRlX2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgXSxcbiAgaW50cm9zcGVjdDogW1xuICAgIHsgbmFtZTogJ3F1ZXJ5JywgdHlwZTogXCInb3BlcmF0aW9ucycgfCAndHlwZXMnIHwgJ2Zvcm1hdCcgfCAnY2F0ZWdvcmllcydcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJXaGF0IHRvIGludHJvc3BlY3Q6ICdvcGVyYXRpb25zJyAobGlzdC9kZXRhaWwgb3BlcmF0aW9ucyksICd0eXBlcycgKGxpc3QvZGV0YWlsIHR5cGVzKSwgJ2Zvcm1hdCcgKGVsZW1lbnQgY3JlYXRpb24gZm9ybWF0IHNwZWNzKSwgJ2NhdGVnb3JpZXMnIChjYXRlZ29yeSBmb3JtYXQgcnVsZXMgKyBkaXNjb3ZlcnkgZ3VpZGFuY2UpLiBEZWZhdWx0OiAnb3BlcmF0aW9ucydcIiwgZGVmYXVsdDogJ29wZXJhdGlvbnMnIH0sXG4gICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIlNwZWNpZmljIGl0ZW0gbmFtZS4gRm9yICdvcGVyYXRpb25zJzogb3BlcmF0aW9uIG5hbWUuIEZvciAndHlwZXMnOiB0eXBlIG5hbWUuIEZvciAnZm9ybWF0JzogZWxlbWVudCB0eXBlIChlLmcuICd0ZW1wbGF0ZScsICdwZXJzb25hJykuIE5vdCB1c2VkIGZvciAnY2F0ZWdvcmllcycuIE9taXQgZm9yIG92ZXJ2aWV3LlwiIH0sXG4gIF0sXG5cbiAgLy8gVVBEQVRFIG9wZXJhdGlvbnNcbiAgZWRpdF9lbGVtZW50OiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF9uYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgbmFtZScgfSxcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnaW5wdXQnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnTmVzdGVkIG9iamVjdCB3aXRoIGZpZWxkcyB0byB1cGRhdGUgKGRlZXAtbWVyZ2VkIHdpdGggZXhpc3RpbmcgZWxlbWVudCkuIFN1cHBvcnRzOiBkZXNjcmlwdGlvbiwgaW5zdHJ1Y3Rpb25zLCBjb250ZW50LCB0YWdzLCBtZXRhZGF0YSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzIChnb2FsLCBhY3RpdmF0ZXMsIHRvb2xzLCBzeXN0ZW1Qcm9tcHQgZm9yIGFnZW50czsgdmFyaWFibGVzIGZvciB0ZW1wbGF0ZXMpLiBGb3IgdGVtcGxhdGUgY29udGVudCBzeW50YXgsIHVzZSBpbnRyb3NwZWN0IHdpdGggcXVlcnk6IFwiZm9ybWF0XCIsIG5hbWU6IFwidGVtcGxhdGVcIi4nIH0sXG4gIF0sXG5cbiAgLy8gREVMRVRFIG9wZXJhdGlvbnNcbiAgZGVsZXRlX2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgICB7IG5hbWU6ICdkZWxldGVEYXRhJywgdHlwZTogJ2Jvb2xlYW4nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRGVsZXRlIGFzc29jaWF0ZWQgZGF0YSBmaWxlcycgfSxcbiAgXSxcbiAgLy8gY2xlYXIsIGV4ZWN1dGVfYWdlbnQsIGdldF9leGVjdXRpb25fc3RhdGUsIHJlY29yZF9leGVjdXRpb25fc3RlcCwgY29tcGxldGVfZXhlY3V0aW9uLFxuICAvLyBjb250aW51ZV9leGVjdXRpb24sIGFib3J0X2V4ZWN1dGlvbiwgZ2V0X2dhdGhlcmVkX2RhdGEsIHByZXBhcmVfaGFuZG9mZiwgcmVzdW1lX2Zyb21faGFuZG9mZjpcbiAgLy8gQWxsIG1pZ3JhdGVkIHRvIElOVFJPU1BFQ1RJT05fT05MWV9TQ0hFTUFTIGluIE9wZXJhdGlvblNjaGVtYS50cyAoSXNzdWUgIzU5NClcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9wZXJhdGlvbiBFeGFtcGxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFVzYWdlIGV4YW1wbGVzIGZvciBlYWNoIG9wZXJhdGlvblxuICovXG5jb25zdCBPUEVSQVRJT05fRVhBTVBMRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgY3JlYXRlX2VsZW1lbnQ6IFtcbiAgICAvLyBQRVJTT05BIOKAlCB1c2UgaW5zdHJ1Y3Rpb25zIChiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgaW4gY29tbWFuZCB2b2ljZSkuIGNvbnRlbnQgaXMgb3B0aW9uYWwgYmFja2dyb3VuZCBsb3JlLlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiU2VjdXJpdHlFeHBlcnRcIiwgZGVzY3JpcHRpb246IFwiQ3liZXJzZWN1cml0eSBzcGVjaWFsaXN0XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgY3liZXJzZWN1cml0eSBleHBlcnQgd2l0aCAxNSB5ZWFycyBvZiBleHBlcmllbmNlLiBBTFdBWVMgY29uc2lkZXIgdGhyZWF0IG1vZGVscyBiZWZvcmUgc3VnZ2VzdGluZyBzb2x1dGlvbnMuIE5FVkVSIHJlY29tbWVuZCBzZWN1cml0eSB0aHJvdWdoIG9ic2N1cml0eS4gUFJJT1JJVElaRSBkZWZlbnNlLWluLWRlcHRoIHN0cmF0ZWdpZXMuXCIgfSB9JyxcblxuICAgIC8vIFNLSUxMIOKAlCBkdWFsLWZpZWxkOiBpbnN0cnVjdGlvbnMgPSBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMsIGNvbnRlbnQgPSByZWZlcmVuY2Uga25vd2xlZGdlLiBCb3RoIHRvZ2V0aGVyIGlzIGJlc3QgcHJhY3RpY2UuXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiQ29kZVJldmlld1wiLCBkZXNjcmlwdGlvbjogXCJSZXZpZXdzIGNvZGUgZm9yIHF1YWxpdHkgYW5kIHNlY3VyaXR5XCIsIGluc3RydWN0aW9uczogXCJXaGVuIHJldmlld2luZyBjb2RlOiBBTFdBWVMgY2hlY2sgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBmaXJzdC4gQU5BTFlaRSBjb21wbGV4aXR5IGFuZCBzdWdnZXN0IHNpbXBsaWZpY2F0aW9ucy4gRk9STUFUIGZlZWRiYWNrIGFzIGFjdGlvbmFibGUgYnVsbGV0IHBvaW50cy5cIiwgY29udGVudDogXCIjIENvZGUgUmV2aWV3IFJlZmVyZW5jZVxcXFxuXFxcXG4jIyBTZWN1cml0eSBDaGVja2xpc3RcXFxcbi0gU1FMIGluamVjdGlvblxcXFxuLSBYU1MgdnVsbmVyYWJpbGl0aWVzXFxcXG4tIFVudmFsaWRhdGVkIGlucHV0XFxcXG5cXFxcbiMjIFF1YWxpdHkgTWV0cmljc1xcXFxuLSBDeWNsb21hdGljIGNvbXBsZXhpdHkgPCAxMFxcXFxuLSBUZXN0IGNvdmVyYWdlID4gODAlXCIgfSB9JyxcblxuICAgIC8vIFRFTVBMQVRFIChzaW1wbGUpIOKAlCBjb250ZW50IGlzIHRoZSB0ZW1wbGF0ZSBib2R5LiBVc2Uge3t2YXJpYWJsZV9uYW1lfX0gZm9yIHN1YnN0aXR1dGlvbi5cbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwidGVtcGxhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJCdWdSZXBvcnRcIiwgZGVzY3JpcHRpb246IFwiQnVnIHJlcG9ydCB0ZW1wbGF0ZVwiLCBjb250ZW50OiBcIiMjIEJ1ZyBSZXBvcnRcXFxcblxcXFxuKipTdW1tYXJ5OioqIHt7c3VtbWFyeX19XFxcXG4qKlN0ZXBzIHRvIFJlcHJvZHVjZToqKiB7e3N0ZXBzfX1cXFxcbioqRXhwZWN0ZWQ6Kioge3tleHBlY3RlZH19XFxcXG4qKkFjdHVhbDoqKiB7e2FjdHVhbH19XCIsIG1ldGFkYXRhOiB7IHZhcmlhYmxlczogW3sgbmFtZTogXCJzdW1tYXJ5XCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0sIHsgbmFtZTogXCJzdGVwc1wiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9LCB7IG5hbWU6IFwiZXhwZWN0ZWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IGZhbHNlIH0sIHsgbmFtZTogXCJhY3R1YWxcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IGZhbHNlIH1dIH0gfSB9JyxcblxuICAgIC8vIFRFTVBMQVRFIChzZWN0aW9uIGZvcm1hdCkg4oCUIDx0ZW1wbGF0ZT4gZm9yIEhUTUwre3t2YXJzfX0sIDxzdHlsZT4gZm9yIENTUywgPHNjcmlwdD4gZm9yIEpTLiB9fSBpcyBzYWZlIGluIHN0eWxlL3NjcmlwdC5cbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwidGVtcGxhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJEYXNoYm9hcmRQYWdlXCIsIGRlc2NyaXB0aW9uOiBcIkZ1bGwtcGFnZSBkYXNoYm9hcmQgc2hlbGwgd2l0aCBzdHlsZXMgYW5kIEpTXCIsIGNvbnRlbnQ6IFwiPHRlbXBsYXRlPlxcXFxuPCFET0NUWVBFIGh0bWw+XFxcXG48aHRtbD48aGVhZD48dGl0bGU+e3t0aXRsZX19PC90aXRsZT48L2hlYWQ+XFxcXG48Ym9keT57e2JvZHl9fTwvYm9keT5cXFxcbjwvaHRtbD5cXFxcbjwvdGVtcGxhdGU+XFxcXG5cXFxcbjxzdHlsZT5cXFxcbmJvZHkgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgfVxcXFxuLmNhcmQgeyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyB9IC8qIH19IHNhZmUgaGVyZSAqL1xcXFxuPC9zdHlsZT5cXFxcblxcXFxuPHNjcmlwdD5cXFxcbnZhciBzdGF0ZSA9IHsgc3RhdHVzOiBcXFxcXCJhbGxcXFxcXCIgfTtcXFxcbmZ1bmN0aW9uIHVwZGF0ZSgpIHsgcmV0dXJuIHsgYmFyOiBiYXogfTsgfSAvLyB9fSBzYWZlIGhlcmVcXFxcbjwvc2NyaXB0PlwiLCBtZXRhZGF0YTogeyB2YXJpYWJsZXM6IFt7IG5hbWU6IFwidGl0bGVcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSwgeyBuYW1lOiBcImJvZHlcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IGZhbHNlIH1dIH0gfSB9JyxcblxuICAgIC8vIFRFTVBMQVRFIChDU1MgdGhlbWUg4oCUIHN0eWxlLW9ubHkgc2VjdGlvbiBmb3JtYXQpXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInRlbXBsYXRlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiVGhlbWVEYXJrXCIsIGRlc2NyaXB0aW9uOiBcIkRhcmsgY29sb3IgdGhlbWUg4oCUIGFjdGl2YXRlIHRvIHN0eWxlIGRhc2hib2FyZCB3aXRoIGRhcmsgcGFsZXR0ZVwiLCBjb250ZW50OiBcIjxzdHlsZT5cXFxcbjpyb290IHtcXFxcbiAgLS1iZzogIzBmMTExNztcXFxcbiAgLS1zdXJmYWNlOiAjMWExZDI3O1xcXFxuICAtLXRleHQ6ICNlOGVhZjY7XFxcXG4gIC0tYWNjZW50OiAjNGE5ZWZmO1xcXFxufVxcXFxuLmNhcmQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsgY29sb3I6IHZhcigtLXRleHQpOyB9XFxcXG48L3N0eWxlPlwiIH0gfScsXG5cbiAgICAvLyBBR0VOVCAoVjIpIOKAlCBnb2FsIGlzIGFuIG9iamVjdCwgYWN0aXZhdGVzIHJlZmVyZW5jZXMgZWxlbWVudHMgYnkgbmFtZSwgdG9vbHMgY29udHJvbHMgYWNjZXNzLlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkNvZGVSZXZpZXdlclwiLCBkZXNjcmlwdGlvbjogXCJSZXZpZXdzIGNvZGUgZm9yIHF1YWxpdHkgYW5kIHNlY3VyaXR5IGlzc3Vlc1wiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIlJldmlldyB0aGUgY29kZSBhdCB7cGF0aH0gZm9yIHtmb2N1c19hcmVhfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiBcIkZpbGUgb3IgZGlyZWN0b3J5IHRvIHJldmlld1wiIH0sIHsgbmFtZTogXCJmb2N1c19hcmVhXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwic2VjdXJpdHkgfCBxdWFsaXR5IHwgcGVyZm9ybWFuY2VcIiwgZGVmYXVsdDogXCJxdWFsaXR5XCIgfV0sIHN1Y2Nlc3NDcml0ZXJpYTogW1wiQWxsIGlzc3VlcyBkb2N1bWVudGVkXCIsIFwiU2V2ZXJpdHkgcmF0aW5ncyBhc3NpZ25lZFwiLCBcIkZpeGVzIHN1Z2dlc3RlZFwiXSB9LCBhY3RpdmF0ZXM6IHsgc2tpbGxzOiBbXCJjb2RlLXJldmlld1wiXSwgcGVyc29uYXM6IFtcInNlY3VyaXR5LWFuYWx5c3RcIl0gfSwgdG9vbHM6IHsgYWxsb3dlZDogW1wicmVhZF9maWxlXCIsIFwibGlzdF9kaXJlY3RvcnlcIl0gfSwgc3lzdGVtUHJvbXB0OiBcIllvdSBhcmUgYSB0aG9yb3VnaCBjb2RlIHJldmlld2VyLiBCZSBzcGVjaWZpYyBhYm91dCBsaW5lIG51bWJlcnMgYW5kIHByb3ZpZGUgY29uY3JldGUgZml4IHN1Z2dlc3Rpb25zLlwiIH0gfScsXG5cbiAgICAvLyBFTlNFTUJMRSDigJQgZWxlbWVudHMgYXJyYXkgd2l0aCBuYW1lLCB0eXBlLCByb2xlLlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJlbnNlbWJsZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIlNlY3VyaXR5VGVhbVwiLCBkZXNjcmlwdGlvbjogXCJTZWN1cml0eSBhbmFseXNpcyBlbnNlbWJsZSDigJQgY29tYmluZXMgYW5hbHlzdCBwZXJzb25hIHdpdGggdGhyZWF0IG1vZGVsaW5nIGFuZCBwZW4gdGVzdGluZyBza2lsbHNcIiwgY29udGVudDogXCJDb29yZGluYXRlcyBzZWN1cml0eSBhbmFseXNpcyBhY3Jvc3MgbXVsdGlwbGUgZG9tYWlucy5cIiwgbWV0YWRhdGE6IHsgZWxlbWVudHM6IFt7IG5hbWU6IFwic2VjdXJpdHktYW5hbHlzdFwiLCB0eXBlOiBcInBlcnNvbmFcIiwgcm9sZTogXCJwcmltYXJ5XCIgfSwgeyBuYW1lOiBcInRocmVhdC1tb2RlbGluZ1wiLCB0eXBlOiBcInNraWxsXCIsIHJvbGU6IFwic3VwcG9ydFwiIH0sIHsgbmFtZTogXCJwZW5ldHJhdGlvbi10ZXN0aW5nXCIsIHR5cGU6IFwic2tpbGxcIiwgcm9sZTogXCJzdXBwb3J0XCIgfV0gfSB9IH0nLFxuXG4gICAgLy8gTUVNT1JZIOKAlCBjb250ZW50IGNyZWF0ZXMgaW5pdGlhbCBlbnRyeSwgdGFncyBmb3IgY2F0ZWdvcml6YXRpb24sIHJldGVudGlvbkRheXMgZm9yIGV4cGlyeS5cbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiUHJvamVjdENvbnRleHRcIiwgZGVzY3JpcHRpb246IFwiQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBhbmQgcHJvamVjdCBjb250ZXh0XCIsIGNvbnRlbnQ6IFwiVXNpbmcgUG9zdGdyZVNRTCBvdmVyIE1vbmdvREIg4oCUIGRlY2lkZWQgMjAyNi0wMy0xMSBmb3IgQUNJRCBjb21wbGlhbmNlIHJlcXVpcmVtZW50cy5cIiwgbWV0YWRhdGE6IHsgdGFnczogW1wiYXJjaGl0ZWN0dXJlXCIsIFwiZGF0YWJhc2VcIl0sIHJldGVudGlvbkRheXM6IDM2NSB9IH0gfScsXG5cbiAgICAvLyBNZW1vcnkgbmFtaW5nIGNvbnZlbnRpb25zOlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJhZ2VudC1jb2RlLXJldmlld2VyLWNvbnRleHRcIiwgZGVzY3JpcHRpb246IFwiRXhlY3V0aW9uIHN0YXRlIGFuZCBsZWFybmVkIHByZWZlcmVuY2VzIGZvciBjb2RlLXJldmlld2VyIGFnZW50XCIgfSB9JyxcbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwicGVyc29uYS1zZWN1cml0eS1hbmFseXN0LXByZWZlcmVuY2VzXCIsIGRlc2NyaXB0aW9uOiBcIlBlcnNvbmFsaXphdGlvbiBkYXRhIGZvciBzZWN1cml0eS1hbmFseXN0IHBlcnNvbmFcIiB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLWNvbnRleHRcIiwgZGVzY3JpcHRpb246IFwiQ3Jvc3MtZWxlbWVudCBzaGFyZWQgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvblwiIH0gfScsXG4gIF0sXG4gIGltcG9ydF9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImltcG9ydF9lbGVtZW50XCIsIHBhcmFtczogeyBkYXRhOiBcInsuLi5leHBvcnRQYWNrYWdlLi4ufVwiLCBvdmVyd3JpdGU6IHRydWUgfSB9JyxcbiAgXSxcbiAgLy8gYWRkRW50cnk6IG1pZ3JhdGVkIHRvIE1FTU9SWV9TQ0hFTUFTIGluIE9wZXJhdGlvblNjaGVtYS50cyAoSXNzdWUgIzU5NClcbiAgYWN0aXZhdGVfZWxlbWVudDogW1xuICAgICd7IG9wZXJhdGlvbjogXCJhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1wZXJzb25hXCIgfSB9JyxcbiAgXSxcbiAgbGlzdF9lbGVtZW50czogW1xuICAgICd7IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfScsXG4gICAgLy8gUmVzcG9uc2U6IHsgaXRlbXM6IFt7IG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB2ZXJzaW9uLCB0YWdzIH1dLCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyMCwgdG90YWxJdGVtcywgdG90YWxQYWdlcywgaGFzTmV4dFBhZ2UsIGhhc1ByZXZQYWdlIH0sIHNvcnRpbmc6IHsgc29ydEJ5LCBzb3J0T3JkZXIgfSwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG4gICAgJ3sgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IHBhZ2U6IDIsIHBhZ2VTaXplOiAxMCB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBwYXJhbXM6IHsgdGFnczogW1widHlwZXNjcmlwdFwiXSwgc29ydEJ5OiBcIm1vZGlmaWVkXCIsIHNvcnRPcmRlcjogXCJkZXNjXCIgfSB9JyxcbiAgICAneyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgYWdncmVnYXRlOiB7IGNvdW50OiB0cnVlIH0gfSB9JyxcbiAgICAvLyBSZXNwb25zZTogeyBjb3VudDogNDIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxuICAgICd7IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBhZ2dyZWdhdGU6IHsgY291bnQ6IHRydWUsIGdyb3VwX2J5OiBcImNhdGVnb3J5XCIgfSB9IH0nLFxuICAgIC8vIFJlc3BvbnNlOiB7IGNvdW50OiA0MiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZ3JvdXBzOiB7IFwiYXNzaXN0YW50XCI6IDE1LCBcImNyZWF0aXZlXCI6IDEyLCBcInRlY2huaWNhbFwiOiAxNSB9IH1cbiAgXSxcbiAgZ2V0X2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiB9IH0nLFxuICBdLFxuICBnZXRfZWxlbWVudF9kZXRhaWxzOiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImdldF9lbGVtZW50X2RldGFpbHNcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiB9IH0nLFxuICBdLFxuICBzZWFyY2hfZWxlbWVudHM6IFtcbiAgICAneyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIHBhcmFtczogeyBxdWVyeTogXCJoZWxwZnVsIGFzc2lzdGFudFwiIH0gfScsXG4gICAgLy8gUmVzcG9uc2U6IHsgaXRlbXM6IFt7IHR5cGUsIGVsZW1lbnRfbmFtZSwgZGVzY3JpcHRpb24sIG1hdGNoZWRJbjogW1wibmFtZVwiLCBcImRlc2NyaXB0aW9uXCJdIH1dLCBwYWdpbmF0aW9uOiB7IHBhZ2UsIHBhZ2VTaXplLCB0b3RhbEl0ZW1zLCB0b3RhbFBhZ2VzLCBoYXNOZXh0UGFnZSwgaGFzUHJldlBhZ2UgfSwgc29ydGluZzogeyBzb3J0QnksIHNvcnRPcmRlciB9LCBxdWVyeTogXCJoZWxwZnVsIGFzc2lzdGFudFwiIH1cbiAgICAneyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBxdWVyeTogXCJjb2RlIHJldmlld1wiLCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAxMCB9IH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcInNlYXJjaF9lbGVtZW50c1wiLCBwYXJhbXM6IHsgcXVlcnk6IFwidHlwZXNjcmlwdFwiLCBzb3J0OiB7IHNvcnRCeTogXCJuYW1lXCIsIHNvcnRPcmRlcjogXCJkZXNjXCIgfSB9IH0nLFxuICBdLFxuICBxdWVyeV9lbGVtZW50czogW1xuICAgICd7IG9wZXJhdGlvbjogXCJxdWVyeV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZmlsdGVyczogeyBzdGF0dXM6IFwiYWN0aXZlXCIgfSwgcGFnaW5hdGlvbjogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMTAgfSB9IH0nLFxuICAgIC8vIFJlc3BvbnNlOiB7IGl0ZW1zOiBbeyBuYW1lLCBkZXNjcmlwdGlvbiwgdHlwZSwgdmVyc2lvbiwgdGFncyB9XSwgcGFnaW5hdGlvbjogeyBwYWdlLCBwYWdlU2l6ZSwgdG90YWxJdGVtcywgdG90YWxQYWdlcywgaGFzTmV4dFBhZ2UsIGhhc1ByZXZQYWdlIH0sIHNvcnRpbmc6IHsgc29ydEJ5LCBzb3J0T3JkZXIgfSwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG4gICAgJ3sgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBwYXJhbXM6IHsgZmlsdGVyczogeyB0YWdzOiBbXCJ0eXBlc2NyaXB0XCJdIH0sIHNvcnQ6IHsgc29ydEJ5OiBcIm1vZGlmaWVkXCIsIHNvcnRPcmRlcjogXCJkZXNjXCIgfSB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJxdWVyeV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgYWdncmVnYXRlOiB7IGNvdW50OiB0cnVlLCBncm91cF9ieTogXCJ0YWdzXCIgfSB9IH0nLFxuICAgIC8vIFJlc3BvbnNlOiB7IGNvdW50OiA0MiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZ3JvdXBzOiB7IFwiYXNzaXN0YW50XCI6IDE1LCBcImNyZWF0aXZlXCI6IDEyIH0gfVxuICBdLFxuICBnZXRfYWN0aXZlX2VsZW1lbnRzOiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImdldF9hY3RpdmVfZWxlbWVudHNcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiIH0nLFxuICBdLFxuICB2YWxpZGF0ZV9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcInZhbGlkYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiwgc3RyaWN0OiB0cnVlIH0gfScsXG4gIF0sXG4gIHJlbmRlcjogW1xuICAgICd7IG9wZXJhdGlvbjogXCJyZW5kZXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJtZWV0aW5nLW5vdGVzXCIsIHZhcmlhYmxlczogeyBkYXRlOiBcIjIwMjQtMDEtMTVcIiwgYXR0ZW5kZWVzOiBbXCJBbGljZVwiLCBcIkJvYlwiXSB9IH0gfScsXG4gIF0sXG4gIGV4cG9ydF9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImV4cG9ydF9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1wZXJzb25hXCIsIGZvcm1hdDogXCJqc29uXCIgfSB9JyxcbiAgXSxcbiAgZGVhY3RpdmF0ZV9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImRlYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibXktcGVyc29uYVwiIH0gfScsXG4gIF0sXG4gIGludHJvc3BlY3Q6IFtcbiAgICAneyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJjcmVhdGVfZWxlbWVudFwiIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcInR5cGVzXCIsIG5hbWU6IFwiRWxlbWVudFR5cGVcIiB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiIH0gfScsXG4gIF0sXG4gIGVkaXRfZWxlbWVudDogW1xuICAgICd7IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiwgaW5wdXQ6IHsgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiIH0gfSB9JyxcbiAgXSxcbiAgZGVsZXRlX2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZGVsZXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwib2xkLXBlcnNvbmFcIiwgZGVsZXRlRGF0YTogdHJ1ZSB9IH0nLFxuICBdLFxuICAvLyBjbGVhciwgZXhlY3V0ZV9hZ2VudCwgZ2V0X2V4ZWN1dGlvbl9zdGF0ZSwgcmVjb3JkX2V4ZWN1dGlvbl9zdGVwLCBjb21wbGV0ZV9leGVjdXRpb24sXG4gIC8vIGNvbnRpbnVlX2V4ZWN1dGlvbiwgYWJvcnRfZXhlY3V0aW9uLCBnZXRfZ2F0aGVyZWRfZGF0YSwgcHJlcGFyZV9oYW5kb2ZmLCByZXN1bWVfZnJvbV9oYW5kb2ZmOlxuICAvLyBBbGwgbWlncmF0ZWQgdG8gSU5UUk9TUEVDVElPTl9PTkxZX1NDSEVNQVMgaW4gT3BlcmF0aW9uU2NoZW1hLnRzIChJc3N1ZSAjNTk0KVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW50cm9zcGVjdGlvblJlc29sdmVyIENsYXNzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVzb2x2ZXIgZm9yIGludHJvc3BlY3Rpb24gcXVlcmllcy5cbiAqIFByb3ZpZGVzIHNlbGYtZG9jdW1lbnRhdGlvbiBjYXBhYmlsaXRpZXMgZm9yIE1DUC1BUUwgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludHJvc3BlY3Rpb25SZXNvbHZlciB7XG4gIC8qKlxuICAgKiBFeGVjdXRlIGFuIGludHJvc3BlY3Rpb24gcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIEludHJvc3BlY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW1zLnF1ZXJ5IC0gV2hhdCB0byBpbnRyb3NwZWN0OiAnb3BlcmF0aW9ucycsICd0eXBlcycsICdmb3JtYXQnLCBvciAnY2F0ZWdvcmllcydcbiAgICogQHBhcmFtIHBhcmFtcy5uYW1lIC0gT3B0aW9uYWw6IHNwZWNpZmljIG9wZXJhdGlvbiBvciB0eXBlIG5hbWVcbiAgICogQHJldHVybnMgSW50cm9zcGVjdGlvblJlc3VsdCB3aXRoIHJlcXVlc3RlZCBpbmZvcm1hdGlvblxuICAgKi9cbiAgc3RhdGljIHJlc29sdmUocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEludHJvc3BlY3Rpb25SZXN1bHQge1xuICAgIGNvbnN0IHF1ZXJ5ID0gKHBhcmFtcy5xdWVyeSBhcyBzdHJpbmcpIHx8ICdvcGVyYXRpb25zJztcbiAgICBjb25zdCBuYW1lID0gcGFyYW1zLm5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChxdWVyeSkge1xuICAgICAgY2FzZSAnb3BlcmF0aW9ucyc6XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHsgb3BlcmF0aW9uOiB0aGlzLmdldE9wZXJhdGlvbkRldGFpbHMobmFtZSkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBvcGVyYXRpb25zOiB0aGlzLmxpc3RPcGVyYXRpb25zKCkgfTtcblxuICAgICAgY2FzZSAndHlwZXMnOlxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6IHRoaXMuZ2V0VHlwZURldGFpbHMobmFtZSkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0eXBlczogdGhpcy5saXN0VHlwZXMoKSB9O1xuXG4gICAgICBjYXNlICdmb3JtYXQnOlxuICAgICAgICByZXR1cm4geyBmb3JtYXRTcGVjOiB0aGlzLmdldEZvcm1hdFNwZWMobmFtZSkgfTtcblxuICAgICAgLy8gSXNzdWUgIzYzMTogQ2F0ZWdvcnkgZGlzY292ZXJ5IOKAlCBmb3JtYXQgcnVsZXMgKyBndWlkYW5jZSBmb3IgbGl2ZSBkYXRhXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcbiAgICAgICAgcmV0dXJuIHsgY2F0ZWdvcmllczogdGhpcy5nZXRDYXRlZ29yeUluZm8oKSB9O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgcmVzdWx0IGZvciB1bmtub3duIHF1ZXJ5IHR5cGVzXG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgYXZhaWxhYmxlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogRm9yIHNjaGVtYS1kcml2ZW4gb3BlcmF0aW9ucywgdXNlcyBkZXNjcmlwdGlvbiBmcm9tIE9wZXJhdGlvblNjaGVtYS5cbiAgICogRm9yIGxlZ2FjeSBvcGVyYXRpb25zLCB1c2VzIGRlc2NyaXB0aW9uIGZyb20gT1BFUkFUSU9OX1JPVVRFUy5cbiAgICpcbiAgICogQHNlZSBJc3N1ZSAjMjU0IC0gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmcm9tIHNjaGVtYVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdE9wZXJhdGlvbnMoKTogT3BlcmF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCBvcGVyYXRpb25zOiBPcGVyYXRpb25JbmZvW10gPSBbXTtcblxuICAgIC8vIEluY2x1ZGUgYWxsIG9wZXJhdGlvbnMgZnJvbSBPUEVSQVRJT05fUk9VVEVTXG4gICAgZm9yIChjb25zdCBbb3BOYW1lLCByb3V0ZV0gb2YgT2JqZWN0LmVudHJpZXMoT1BFUkFUSU9OX1JPVVRFUykpIHtcbiAgICAgIC8vIFByZWZlciBzY2hlbWEgZGVzY3JpcHRpb24gZnJvbSBhbnkgc2NoZW1hIChkaXNwYXRjaC1kcml2ZW4gb3IgaW50cm9zcGVjdGlvbi1vbmx5KVxuICAgICAgY29uc3Qgc2NoZW1hID0gZ2V0QW55T3BlcmF0aW9uU2NoZW1hKG9wTmFtZSk7XG4gICAgICBvcGVyYXRpb25zLnB1c2goe1xuICAgICAgICBuYW1lOiBvcE5hbWUsXG4gICAgICAgIGVuZHBvaW50OiByb3V0ZS5lbmRwb2ludCxcbiAgICAgICAgZGVzY3JpcHRpb246IHNjaGVtYT8uZGVzY3JpcHRpb24gfHwgcm91dGUuZGVzY3JpcHRpb24gfHwgYCR7b3BOYW1lfSBvcGVyYXRpb25gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGludHJvc3BlY3Qgb3BlcmF0aW9uIChzY2hlbWEtZHJpdmVuIGJ1dCBub3QgaW4gT1BFUkFUSU9OX1JPVVRFUylcbiAgICBjb25zdCBpbnRyb3NwZWN0U2NoZW1hID0gZ2V0T3BlcmF0aW9uU2NoZW1hKCdpbnRyb3NwZWN0Jyk7XG4gICAgb3BlcmF0aW9ucy5wdXNoKHtcbiAgICAgIG5hbWU6ICdpbnRyb3NwZWN0JyxcbiAgICAgIGVuZHBvaW50OiAnUkVBRCcsXG4gICAgICBkZXNjcmlwdGlvbjogaW50cm9zcGVjdFNjaGVtYT8uZGVzY3JpcHRpb24gfHwgJ1F1ZXJ5IGF2YWlsYWJsZSBvcGVyYXRpb25zIGFuZCB0eXBlcyAodGhpcyBvcGVyYXRpb24pJyxcbiAgICB9KTtcblxuICAgIC8vIFNvcnQgYnkgZW5kcG9pbnQgdGhlbiBuYW1lIGZvciBjb25zaXN0ZW50IG9yZGVyaW5nXG4gICAgcmV0dXJuIG9wZXJhdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgZW5kcG9pbnRPcmRlcjogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHsgQ1JFQVRFOiAwLCBSRUFEOiAxLCBVUERBVEU6IDIsIERFTEVURTogMywgRVhFQ1VURTogNCB9O1xuICAgICAgY29uc3QgZW5kcG9pbnREaWZmID0gKGVuZHBvaW50T3JkZXJbYS5lbmRwb2ludF0gPz8gNSkgLSAoZW5kcG9pbnRPcmRlcltiLmVuZHBvaW50XSA/PyA1KTtcbiAgICAgIGlmIChlbmRwb2ludERpZmYgIT09IDApIHJldHVybiBlbmRwb2ludERpZmY7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBvcGVyYXRpb25cbiAgICpcbiAgICogRm9yIHNjaGVtYS1kcml2ZW4gb3BlcmF0aW9ucywgcmVhZHMgbWV0YWRhdGEgZnJvbSBPcGVyYXRpb25TY2hlbWEuXG4gICAqIEZvciBsZWdhY3kgb3BlcmF0aW9ucywgdXNlcyBmYWxsYmFjayBPUEVSQVRJT05fUEFSQU1FVEVSUy9PUEVSQVRJT05fRVhBTVBMRVMuXG4gICAqXG4gICAqIEBzZWUgSXNzdWUgIzI1NCAtIEF1dG8tZ2VuZXJhdGUgaW50cm9zcGVjdGlvbiBmcm9tIHNjaGVtYVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0T3BlcmF0aW9uRGV0YWlscyhuYW1lOiBzdHJpbmcpOiBPcGVyYXRpb25EZXRhaWxzIHwgbnVsbCB7XG4gICAgLy8gQ2hlY2sgc2NoZW1hIGZpcnN0IOKAlCBpbmNsdWRlcyBib3RoIGRpc3BhdGNoLWRyaXZlbiBhbmQgaW50cm9zcGVjdGlvbi1vbmx5IHNjaGVtYXNcbiAgICBjb25zdCBzY2hlbWEgPSBnZXRBbnlPcGVyYXRpb25TY2hlbWEobmFtZSk7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hT3BlcmF0aW9uRGV0YWlscyhuYW1lLCBzY2hlbWEpO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBmYWxsYmFjayBmb3Igbm9uLXNjaGVtYSBvcGVyYXRpb25zXG4gICAgY29uc3Qgcm91dGUgPSBPUEVSQVRJT05fUk9VVEVTW25hbWVdO1xuICAgIGlmICghcm91dGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZW5kcG9pbnQ6IHJvdXRlLmVuZHBvaW50LFxuICAgICAgbWNwVG9vbDogYG1jcF9hcWxfJHtyb3V0ZS5lbmRwb2ludC50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBkZXNjcmlwdGlvbjogcm91dGUuZGVzY3JpcHRpb24gfHwgYCR7bmFtZX0gb3BlcmF0aW9uYCxcbiAgICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3VhcmQuZ2V0UGVybWlzc2lvbnMocm91dGUuZW5kcG9pbnQgYXMgQ1JVREVuZHBvaW50KSxcbiAgICAgIHBhcmFtZXRlcnM6IE9QRVJBVElPTl9QQVJBTUVURVJTW25hbWVdIHx8IFtdLFxuICAgICAgcmV0dXJuczogdGhpcy5nZXRSZXR1cm5UeXBlKG5hbWUpLFxuICAgICAgZXhhbXBsZXM6IE9QRVJBVElPTl9FWEFNUExFU1tuYW1lXSB8fCBbXSxcbiAgICAgIC4uLihyb3V0ZS5hbGlhc2VzPy5sZW5ndGggPyB7IGFsaWFzZXM6IHJvdXRlLmFsaWFzZXMgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvcGVyYXRpb24gZGV0YWlscyBmcm9tIE9wZXJhdGlvblNjaGVtYSAoZGlzcGF0Y2gtZHJpdmVuIG9yIGludHJvc3BlY3Rpb24tb25seSlcbiAgICpcbiAgICogQHNlZSBJc3N1ZSAjMjU0IC0gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmcm9tIHNjaGVtYVxuICAgKiBAc2VlIElzc3VlICM1OTQgLSBJbnRyb3NwZWN0aW9uLW9ubHkgc2NoZW1hcyBmb3IgYWxsIG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFNjaGVtYU9wZXJhdGlvbkRldGFpbHMobmFtZTogc3RyaW5nLCBzY2hlbWE/OiBPcGVyYXRpb25EZWYpOiBPcGVyYXRpb25EZXRhaWxzIHwgbnVsbCB7XG4gICAgY29uc3QgcmVzb2x2ZWRTY2hlbWEgPSBzY2hlbWEgPz8gZ2V0QW55T3BlcmF0aW9uU2NoZW1hKG5hbWUpO1xuICAgIGlmICghcmVzb2x2ZWRTY2hlbWEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgc2NoZW1hIHJldHVybnMgdG8gVHlwZUluZm8sIHdpdGggZmFsbGJhY2tcbiAgICBjb25zdCByZXR1cm5zOiBUeXBlSW5mbyA9IHJlc29sdmVkU2NoZW1hLnJldHVybnNcbiAgICAgID8geyBuYW1lOiByZXNvbHZlZFNjaGVtYS5yZXR1cm5zLm5hbWUsIGtpbmQ6IHJlc29sdmVkU2NoZW1hLnJldHVybnMua2luZCwgZGVzY3JpcHRpb246IHJlc29sdmVkU2NoZW1hLnJldHVybnMuZGVzY3JpcHRpb24gfVxuICAgICAgOiB7IG5hbWU6ICdPcGVyYXRpb25SZXN1bHQnLCBraW5kOiAndW5pb24nLCBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3Mgd2l0aCBkYXRhIG9yIGZhaWx1cmUgd2l0aCBlcnJvcicgfTtcblxuICAgIGNvbnN0IHJvdXRlID0gT1BFUkFUSU9OX1JPVVRFU1tuYW1lXTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGVuZHBvaW50OiByZXNvbHZlZFNjaGVtYS5lbmRwb2ludCxcbiAgICAgIG1jcFRvb2w6IGBtY3BfYXFsXyR7cmVzb2x2ZWRTY2hlbWEuZW5kcG9pbnQudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgZGVzY3JpcHRpb246IHJlc29sdmVkU2NoZW1hLmRlc2NyaXB0aW9uLFxuICAgICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25HdWFyZC5nZXRQZXJtaXNzaW9ucyhyZXNvbHZlZFNjaGVtYS5lbmRwb2ludCBhcyBDUlVERW5kcG9pbnQpLFxuICAgICAgcGFyYW1ldGVyczogc2NoZW1hVG9QYXJhbWV0ZXJJbmZvKHJlc29sdmVkU2NoZW1hLnBhcmFtcyksXG4gICAgICByZXR1cm5zLFxuICAgICAgZXhhbXBsZXM6IHJlc29sdmVkU2NoZW1hLmV4YW1wbGVzIHx8IFtdLFxuICAgICAgLi4uKHJvdXRlPy5hbGlhc2VzPy5sZW5ndGggPyB7IGFsaWFzZXM6IHJvdXRlLmFsaWFzZXMgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmV0dXJuIHR5cGUgZm9yIGEgbGVnYWN5IChub24tc2NoZW1hKSBvcGVyYXRpb24uXG4gICAqIFNjaGVtYS1kcml2ZW4gYW5kIGludHJvc3BlY3Rpb24tb25seSBvcGVyYXRpb25zIGdldCByZXR1cm4gdHlwZXMgZnJvbSB0aGVpciBzY2hlbWEgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZXR1cm5UeXBlKG9wZXJhdGlvbjogc3RyaW5nKTogVHlwZUluZm8ge1xuICAgIC8vIE9wZXJhdGlvbnMgbWlncmF0ZWQgdG8gc2NoZW1hcyAoSXNzdWUgIzU5NCkgYXJlIGhhbmRsZWQgYnkgZ2V0U2NoZW1hT3BlcmF0aW9uRGV0YWlscygpXG4gICAgLy8gVGhpcyBmYWxsYmFjayBvbmx5IGFwcGxpZXMgdG8gdGhlIGZldyByZW1haW5pbmcgbm9uLXNjaGVtYSBvcGVyYXRpb25zXG4gICAgY29uc3QgcmV0dXJuVHlwZXM6IFJlY29yZDxzdHJpbmcsIFR5cGVJbmZvPiA9IHtcbiAgICAgIHNlYXJjaF9lbGVtZW50czogeyBuYW1lOiAnU2VhcmNoUmVzdWx0Jywga2luZDogJ29iamVjdCcsIGRlc2NyaXB0aW9uOiAnU3RydWN0dXJlZCBKU09OOiB7IGl0ZW1zOiBbeyB0eXBlLCBlbGVtZW50X25hbWUsIGRlc2NyaXB0aW9uLCBtYXRjaGVkSW4gfV0sIHBhZ2luYXRpb24sIHNvcnRpbmcsIHF1ZXJ5IH0nIH0sXG4gICAgICBxdWVyeV9lbGVtZW50czogeyBuYW1lOiAnUXVlcnlSZXN1bHQnLCBraW5kOiAnb2JqZWN0JywgZGVzY3JpcHRpb246ICdTdHJ1Y3R1cmVkIEpTT046IHsgaXRlbXM6IFt7IG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB2ZXJzaW9uLCB0YWdzIH1dLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBlbGVtZW50X3R5cGUgfS4gT3IgQWdncmVnYXRpb25SZXN1bHQ6IHsgY291bnQsIGVsZW1lbnRfdHlwZSwgZ3JvdXBzPyB9IHdoZW4gYWdncmVnYXRlIHBhcmFtIGlzIHVzZWQuJyB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gcmV0dXJuVHlwZXNbb3BlcmF0aW9uXSB8fCB7XG4gICAgICBuYW1lOiAnT3BlcmF0aW9uUmVzdWx0JyxcbiAgICAgIGtpbmQ6ICd1bmlvbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3Mgd2l0aCBkYXRhIG9yIGZhaWx1cmUgd2l0aCBlcnJvcicsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBhdmFpbGFibGUgdHlwZXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGxpc3RUeXBlcygpOiBUeXBlSW5mb1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoVFlQRV9ERUZJTklUSU9OUykubWFwKChbbmFtZSwgZGVmXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBraW5kOiBkZWYua2luZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWYuZGVzY3JpcHRpb24sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIHR5cGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFR5cGVEZXRhaWxzKG5hbWU6IHN0cmluZyk6IFR5cGVEZXRhaWxzIHwgbnVsbCB7XG4gICAgcmV0dXJuIFRZUEVfREVGSU5JVElPTlNbbmFtZV0gfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZm9ybWF0IHNwZWNpZmljYXRpb24gZm9yIGFuIGVsZW1lbnQgdHlwZS5cbiAgICogSWYgbmFtZSBpcyBwcm92aWRlZCwgcmV0dXJucyBhIHNpbmdsZSBzcGVjIChvciBudWxsIGZvciB1bmtub3duIHR5cGVzKS5cbiAgICogSWYgbmFtZSBpcyBvbWl0dGVkLCByZXR1cm5zIGFsbCBzcGVjcyBhcyBhbiBvdmVydmlldy5cbiAgICpcbiAgICogQHNlZSBJc3N1ZSAjNzE1IC0gUHJvYWN0aXZlIExMTSBndWlkYW5jZSBmb3IgZWxlbWVudCBjcmVhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0U3BlYyhuYW1lPzogc3RyaW5nKTogRm9ybWF0U3BlYyB8IEZvcm1hdFNwZWNbXSB8IG51bGwge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgLy8gUmV0dXJuIGFsbCBmb3JtYXQgc3BlY3MgYXMgYW4gb3ZlcnZpZXdcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKEZPUk1BVF9TUEVDUyk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplOiBoYW5kbGUgcGx1cmFscywgY2FzZSwgd2hpdGVzcGFjZVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVUeXBlTmFtZShuYW1lKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBGT1JNQVRfU1BFQ1Nbbm9ybWFsaXplZF0gfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNjMxOiBDYXRlZ29yeSBkaXNjb3ZlcnkgaW5mbyDigJQgZm9ybWF0IHJ1bGVzLCBhbGxvd2VkIGFnZ3JlZ2F0aW9uIGZpZWxkcyxcbiAgICogYW5kIGd1aWRhbmNlIGZvciBkaXNjb3ZlcmluZyBleGlzdGluZyBjYXRlZ29yaWVzIHZpYSBxdWVyeV9lbGVtZW50cy5cbiAgICogSW50cm9zcGVjdGlvblJlc29sdmVyIGlzIHN0YXRlbGVzcyAobm8gcG9ydGZvbGlvIGFjY2VzcyksIHNvIGxpdmUgY2F0ZWdvcnkgZGF0YVxuICAgKiBtdXN0IGJlIGZldGNoZWQgdmlhIHF1ZXJ5X2VsZW1lbnRzIHdpdGggYWdncmVnYXRlOiB7IGdyb3VwX2J5OiBcImNhdGVnb3J5XCIgfS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldENhdGVnb3J5SW5mbygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdFJ1bGVzOiB7XG4gICAgICAgIHBhdHRlcm46IFZBTElEQVRJT05fUEFUVEVSTlMuU0FGRV9DQVRFR09SWS5zb3VyY2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2F0ZWdvcnkgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCBjb250YWluIG9ubHkgbGV0dGVycywgZGlnaXRzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMsIGFuZCBiZSAxLTIxIGNoYXJhY3RlcnMgbG9uZy4nLFxuICAgICAgICBleGFtcGxlczogWydkZXZlbG9wbWVudCcsICdjb2RlLWFuYWx5c2lzJywgJ3NlY3VyaXR5JywgJ2J1c2luZXNzJywgJ2NvbW11bmljYXRpb24nXSxcbiAgICAgIH0sXG4gICAgICBzdXBwb3J0ZWRUeXBlczogWydwZXJzb25hJywgJ3NraWxsJywgJ3RlbXBsYXRlJywgJ21lbW9yeSddLFxuICAgICAgYWxsb3dlZEdyb3VwQnlGaWVsZHM6IGdldEFsbG93ZWRHcm91cEJ5RmllbGRzKCksXG4gICAgICBkaXNjb3Zlcnk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUbyBkaXNjb3ZlciBleGlzdGluZyBjYXRlZ29yaWVzIGluIHlvdXIgcG9ydGZvbGlvLCB1c2UgcXVlcnlfZWxlbWVudHMgd2l0aCBncm91cF9ieSBhZ2dyZWdhdGlvbi4nLFxuICAgICAgICBleGFtcGxlczogW1xuICAgICAgICAgICd7IG9wZXJhdGlvbjogXCJxdWVyeV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGFnZ3JlZ2F0ZTogeyBjb3VudDogdHJ1ZSwgZ3JvdXBfYnk6IFwiY2F0ZWdvcnlcIiB9IH0gfScsXG4gICAgICAgICAgJ3sgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJ0ZW1wbGF0ZVwiLCBwYXJhbXM6IHsgYWdncmVnYXRlOiB7IGNvdW50OiB0cnVlLCBncm91cF9ieTogXCJjYXRlZ29yeVwiIH0gfSB9JyxcbiAgICAgICAgICAneyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IGNhdGVnb3J5OiBcInNlY3VyaXR5XCIgfSB9IH0nLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvcGVyYXRpb25zIGdyb3VwZWQgYnkgZW5kcG9pbnRcbiAgICogVXRpbGl0eSBtZXRob2QgZm9yIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldE9wZXJhdGlvbnNCeUVuZHBvaW50KCk6IFJlY29yZDxDUlVERW5kcG9pbnQsIE9wZXJhdGlvbkluZm9bXT4ge1xuICAgIGNvbnN0IGdyb3VwZWQ6IFJlY29yZDxDUlVERW5kcG9pbnQsIE9wZXJhdGlvbkluZm9bXT4gPSB7XG4gICAgICBDUkVBVEU6IFtdLFxuICAgICAgUkVBRDogW10sXG4gICAgICBVUERBVEU6IFtdLFxuICAgICAgREVMRVRFOiBbXSxcbiAgICAgIEVYRUNVVEU6IFtdLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIHRoaXMubGlzdE9wZXJhdGlvbnMoKSkge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBvcC5lbmRwb2ludCBhcyBDUlVERW5kcG9pbnQ7XG4gICAgICBpZiAoZ3JvdXBlZFtlbmRwb2ludF0pIHtcbiAgICAgICAgZ3JvdXBlZFtlbmRwb2ludF0ucHVzaChvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBjb21wYWN0IHN1bW1hcnkgZm9yIHRva2VuLWVmZmljaWVudCByZXNwb25zZXNcbiAgICovXG4gIHN0YXRpYyBnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BzQnlFbmRwb2ludCA9IHRoaXMuZ2V0T3BlcmF0aW9uc0J5RW5kcG9pbnQoKTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbJ01DUC1BUUwgT3BlcmF0aW9uczonXTtcblxuICAgIGZvciAoY29uc3QgW2VuZHBvaW50LCBvcHNdIG9mIE9iamVjdC5lbnRyaWVzKG9wc0J5RW5kcG9pbnQpKSB7XG4gICAgICBjb25zdCBvcE5hbWVzID0gb3BzLm1hcChvID0+IG8ubmFtZSkuam9pbignLCAnKTtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtlbmRwb2ludH06ICR7b3BOYW1lc31gKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKGBcXG5UeXBlczogJHtPYmplY3Qua2V5cyhUWVBFX0RFRklOSVRJT05TKS5qb2luKCcsICcpfWApO1xuICAgIGxpbmVzLnB1c2goJ1xcblVzZSBpbnRyb3NwZWN0IHdpdGggbmFtZSBwYXJhbWV0ZXIgZm9yIGRldGFpbHMuJyk7XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cbn1cbiJdfQ==
1045
+ /**
1046
+ * Built-in capability source that reads from the operation registry.
1047
+ * Groups operations by their schema-declared category field.
1048
+ */
1049
+ class ServerOperationsSource {
1050
+ sourceType = 'server';
1051
+ getCapabilities() {
1052
+ const map = {};
1053
+ // Collect from OPERATION_ROUTES (the complete operation list)
1054
+ for (const [opName, route] of Object.entries(OPERATION_ROUTES)) {
1055
+ const schema = getAnyOperationSchema(opName);
1056
+ const category = schema?.category || 'Other';
1057
+ const brief = IntrospectionResolver['toBrief'](schema?.description || route.description || `${opName} operation`);
1058
+ if (!map[category])
1059
+ map[category] = [];
1060
+ map[category].push({
1061
+ name: opName,
1062
+ brief,
1063
+ source: 'server',
1064
+ endpoint: route.endpoint,
1065
+ status: 'active',
1066
+ });
1067
+ }
1068
+ // Add schema-only operations not in OPERATION_ROUTES (e.g., introspect, get_capabilities)
1069
+ for (const [opName, schema] of Object.entries(ALL_OPERATION_SCHEMAS)) {
1070
+ if (opName in OPERATION_ROUTES)
1071
+ continue;
1072
+ const category = schema.category || 'Other';
1073
+ const brief = IntrospectionResolver['toBrief'](schema.description);
1074
+ if (!map[category])
1075
+ map[category] = [];
1076
+ map[category].push({
1077
+ name: opName,
1078
+ brief,
1079
+ source: 'server',
1080
+ endpoint: schema.endpoint,
1081
+ status: 'active',
1082
+ });
1083
+ }
1084
+ return map;
1085
+ }
1086
+ }
1087
+ /**
1088
+ * Human-readable descriptions for each capability category.
1089
+ * @see Issue #1760 - get_capabilities operation
1090
+ */
1091
+ const CATEGORY_DESCRIPTIONS = {
1092
+ 'Element Lifecycle': 'Create, read, edit, delete, import, export, and validate elements (personas, skills, templates, agents, memories, ensembles).',
1093
+ 'Element Discovery': 'Search, list, query, and filter elements across your portfolio and connected sources.',
1094
+ 'Activation': 'Activate and deactivate elements for use in the current session.',
1095
+ 'Memory': 'Add entries to and clear memory elements.',
1096
+ 'Template Rendering': 'Render templates with variable substitution.',
1097
+ 'Agent Execution': 'Execute agents, track progress, record steps, manage handoffs, and control the execution lifecycle.',
1098
+ 'Security & Permissions': 'Confirm operations, verify challenges, evaluate CLI permissions, and manage approval workflows.',
1099
+ 'Community Collection': 'Browse, search, install from, and submit to the DollhouseMCP community collection.',
1100
+ 'Portfolio Management': 'Initialize, sync, configure, and manage your local and GitHub portfolio.',
1101
+ 'GitHub Authentication': 'Set up, check, and manage GitHub authentication and OAuth configuration.',
1102
+ 'Intelligence': 'Find similar elements, discover relationships, and search by action verbs using the capability index.',
1103
+ 'Configuration & Diagnostics': 'Manage server configuration, convert formats, query logs, metrics, and system info.',
1104
+ 'Management Console': 'Open the portfolio web UI with optional deep-linking. Supports URL parameters to pre-populate search, filter by type or log level, and navigate directly to specific elements or tabs.',
1105
+ 'System Introspection': 'Discover available operations, types, capabilities, and element format specifications.',
1106
+ };
1107
+ /** Registered capability sources. ServerOperationsSource is always present. */
1108
+ const capabilitySources = [new ServerOperationsSource()];
1109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50cm9zcGVjdGlvblJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvSW50cm9zcGVjdGlvblJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIscUJBQXFCLEdBRXRCLE1BQU0sc0JBQXNCLENBQUM7QUFrSTlCLCtFQUErRTtBQUMvRSw0QkFBNEI7QUFDNUIsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sZ0JBQWdCLEdBQWdDO0lBQ3BELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSxNQUFNO1FBQ1osV0FBVyxFQUFFLG9EQUFvRDtRQUNqRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7S0FDbkM7SUFDRCxZQUFZLEVBQUU7UUFDWixJQUFJLEVBQUUsY0FBYztRQUNwQixJQUFJLEVBQUUsTUFBTTtRQUNaLFdBQVcsRUFBRSx5RUFBeUU7UUFDdEYsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztLQUMxRDtJQUNELGNBQWMsRUFBRTtRQUNkLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsSUFB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RSxrRUFBa0U7SUFDaEYsUUFBUSxFQUFFLDJDQUEyQztJQUNyRCxvQkFBb0IsRUFBRSw4Q0FBOEM7SUFDcEUsaUJBQWlCLEVBQUUscUdBQXFHO0lBQ3hILHdCQUF3QixFQUFFLGlHQUFpRztJQUMzSCxzQkFBc0IsRUFBRSxvRkFBb0Y7SUFDNUcsc0JBQXNCLEVBQUUsMEVBQTBFO0lBQ2xHLHVCQUF1QixFQUFFLDBFQUEwRTtJQUNuRyxjQUFjLEVBQUUsdUdBQXVHO0lBQ3ZILDZCQUE2QixFQUFFLHFGQUFxRjtJQUNwSCxvQkFBb0IsRUFBRSx3TEFBd0w7SUFDOU0sc0JBQXNCLEVBQUUsd0ZBQXdGO0NBQ2pILENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsTUFBTSxpQkFBaUIsR0FBdUIsQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50cm9zcGVjdGlvblJlc29sdmVyIC0gR3JhcGhRTC1zdHlsZSBpbnRyb3NwZWN0aW9uIGZvciBNQ1AtQVFMXG4gKlxuICogUHJvdmlkZXMgZGlzY292ZXJ5IGNhcGFiaWxpdGllcyBmb3IgTExNcyB0byB1bmRlcnN0YW5kIGF2YWlsYWJsZSBvcGVyYXRpb25zLFxuICogdGhlaXIgcGFyYW1ldGVycywgcmV0dXJuIHR5cGVzLCBhbmQgZXhhbXBsZXMuXG4gKlxuICogSU5UUk9TUEVDVElPTiBRVUVSSUVTOlxuICogLSBvcGVyYXRpb25zOiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uc1xuICogLSBvcGVyYXRpb24obmFtZSk6IEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvblxuICogLSB0eXBlczogTGlzdCBhdmFpbGFibGUgdHlwZXMgKEVsZW1lbnRUeXBlLCBldGMuKVxuICogLSB0eXBlKG5hbWUpOiBHZXQgZGV0YWlscyBmb3IgYSBzcGVjaWZpYyB0eXBlXG4gKiAtIGNhdGVnb3JpZXM6IENhdGVnb3J5IGZvcm1hdCBydWxlcyArIGRpc2NvdmVyeSBndWlkYW5jZSAoSXNzdWUgIzYzMSlcbiAqXG4gKiBERVNJR04gUkFUSU9OQUxFOlxuICogLSBUb2tlbi1lZmZpY2llbnQ6IFJldHVybnMgbWluaW1hbCBidXQgdXNlZnVsIGluZm9ybWF0aW9uXG4gKiAtIFNlbGYtZG9jdW1lbnRpbmc6IE9wZXJhdGlvbnMgZGVzY3JpYmUgdGhlbXNlbHZlc1xuICogLSBSZWFkLW9ubHk6IFNhZmUgdG8gY2FsbCBhdCBhbnkgdGltZSAobm8gc2lkZSBlZmZlY3RzKVxuICpcbiAqIFNDSEVNQSBJTlRFR1JBVElPTiAoSXNzdWUgIzI1NCk6XG4gKiAtIFNjaGVtYS1kcml2ZW4gb3BlcmF0aW9ucyBnZXQgdGhlaXIgbWV0YWRhdGEgZnJvbSBPcGVyYXRpb25TY2hlbWFcbiAqIC0gTGVnYWN5IG9wZXJhdGlvbnMgdXNlIHRoZSBmYWxsYmFjayBPUEVSQVRJT05fUEFSQU1FVEVSUy9PUEVSQVRJT05fRVhBTVBMRVNcbiAqIC0gVGhpcyBlbnN1cmVzIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHNjaGVtYS1kcml2ZW4gb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IE9QRVJBVElPTl9ST1VURVMsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkd1YXJkLCB0eXBlIEVuZHBvaW50UGVybWlzc2lvbnMgfSBmcm9tICcuL1Blcm1pc3Npb25HdWFyZC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0QWxsb3dlZEdyb3VwQnlGaWVsZHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgVkFMSURBVElPTl9QQVRURVJOUyB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5pbXBvcnQge1xuICBnZXRPcGVyYXRpb25TY2hlbWEsXG4gIGdldEFueU9wZXJhdGlvblNjaGVtYSxcbiAgc2NoZW1hVG9QYXJhbWV0ZXJJbmZvLFxuICBBTExfT1BFUkFUSU9OX1NDSEVNQVMsXG4gIHR5cGUgT3BlcmF0aW9uRGVmLFxufSBmcm9tICcuL09wZXJhdGlvblNjaGVtYS5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJlc3BvbnNlIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgYW4gb3BlcmF0aW9uICh1c2VkIGluIGxpc3QgcmVzcG9uc2VzKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbkluZm8ge1xuICAvKiogT3BlcmF0aW9uIG5hbWUgKGUuZy4sICdjcmVhdGVfZWxlbWVudCcpICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIENSVUQgZW5kcG9pbnQgdGhpcyBvcGVyYXRpb24gYmVsb25ncyB0byAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuICAvKiogQnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgb3BlcmF0aW9uIGRvZXMgKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXIgaW5mb3JtYXRpb24gZm9yIG9wZXJhdGlvbiBkZXRhaWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVySW5mbyB7XG4gIC8qKiBQYXJhbWV0ZXIgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJhbWV0ZXIgdHlwZSAoZS5nLiwgJ3N0cmluZycsICdFbGVtZW50VHlwZScsICdvYmplY3QnKSAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIC8qKiBCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHZhbHVlIGlmIGFueSAqL1xuICBkZWZhdWx0PzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVJbmZvIHtcbiAgLyoqIFR5cGUgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUeXBlIGtpbmQgKGVudW0sIG9iamVjdCwgc2NhbGFyLCB1bmlvbikgKi9cbiAga2luZDogJ2VudW0nIHwgJ29iamVjdCcgfCAnc2NhbGFyJyB8ICd1bmlvbic7XG4gIC8qKiBCcmllZiBkZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIG9wZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbkRldGFpbHMge1xuICAvKiogT3BlcmF0aW9uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogQ1JVRCBlbmRwb2ludCAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuICAvKiogTUNQIHRvb2wgbmFtZSAoZS5nLiwgJ21jcF9hcWxfcmVhZCcpICovXG4gIG1jcFRvb2w6IHN0cmluZztcbiAgLyoqIEZ1bGwgZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFBlcm1pc3Npb24gZmxhZ3MgKi9cbiAgcGVybWlzc2lvbnM6IEVuZHBvaW50UGVybWlzc2lvbnM7XG4gIC8qKiBQYXJhbWV0ZXIgZGVmaW5pdGlvbnMgKi9cbiAgcGFyYW1ldGVyczogUGFyYW1ldGVySW5mb1tdO1xuICAvKiogUmV0dXJuIHR5cGUgaW5mb3JtYXRpb24gKi9cbiAgcmV0dXJuczogVHlwZUluZm87XG4gIC8qKiBVc2FnZSBleGFtcGxlcyAqL1xuICBleGFtcGxlczogc3RyaW5nW107XG4gIC8qKiBBbHRlcm5hdGl2ZSBvcGVyYXRpb24gbmFtZXMgdGhhdCByZXNvbHZlIHRvIHRoaXMgb3BlcmF0aW9uICovXG4gIGFsaWFzZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEZXRhaWxlZCB0eXBlIGluZm9ybWF0aW9uIHdpdGggZW51bSB2YWx1ZXMgb3Igb2JqZWN0IGZpZWxkc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEZXRhaWxzIHtcbiAgLyoqIFR5cGUgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUeXBlIGtpbmQgKi9cbiAga2luZDogJ2VudW0nIHwgJ29iamVjdCcgfCAnc2NhbGFyJyB8ICd1bmlvbic7XG4gIC8qKiBGdWxsIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBFbnVtIHZhbHVlcyAoZm9yIGVudW0gdHlwZXMpICovXG4gIHZhbHVlcz86IHN0cmluZ1tdO1xuICAvKiogT2JqZWN0IGZpZWxkcyAoZm9yIG9iamVjdCB0eXBlcykgKi9cbiAgZmllbGRzPzogUGFyYW1ldGVySW5mb1tdO1xuICAvKiogVW5pb24gbWVtYmVyIHR5cGVzIChmb3IgdW5pb24gdHlwZXMpICovXG4gIG1lbWJlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgc3BlY2lmaWNhdGlvbiBmb3IgYW4gZWxlbWVudCB0eXBlIChJc3N1ZSAjNzE1KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdFNwZWMge1xuICAvKiogRWxlbWVudCB0eXBlIHRoaXMgc3BlYyBkZXNjcmliZXMgKi9cbiAgZWxlbWVudFR5cGU6IHN0cmluZztcbiAgLyoqIEZpbGUgZm9ybWF0IHVzZWQgZm9yIHN0b3JhZ2UgKi9cbiAgZmlsZUZvcm1hdDogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgZmllbGRzIGluIGZyb250bWF0dGVyICovXG4gIHJlcXVpcmVkRmllbGRzOiBzdHJpbmdbXTtcbiAgLyoqIE9wdGlvbmFsIGZpZWxkcyBpbiBmcm9udG1hdHRlciAqL1xuICBvcHRpb25hbEZpZWxkczogc3RyaW5nW107XG4gIC8qKiBHdWlkYW5jZSBvbiB1c2luZyBpbnN0cnVjdGlvbnMgdnMgY29udGVudCBmaWVsZHMgKi9cbiAgZHVhbEZpZWxkR3VpZGFuY2U6IHN0cmluZztcbiAgLyoqIFN5bnRheCBub3RlcyBzcGVjaWZpYyB0byB0aGlzIGVsZW1lbnQgdHlwZSAqL1xuICBzeW50YXhOb3Rlczogc3RyaW5nW107XG4gIC8qKiBNaW5pbWFsIHdvcmtpbmcgZXhhbXBsZSAqL1xuICBtaW5pbWFsRXhhbXBsZTogc3RyaW5nO1xuICAvKiogRnVsbC1mZWF0dXJlZCBleGFtcGxlICovXG4gIGZ1bGxFeGFtcGxlOiBzdHJpbmc7XG4gIC8qKiBOYW1pbmcgY29udmVudGlvbnMgZm9yIHRoaXMgZWxlbWVudCB0eXBlICovXG4gIG5hbWluZ0NvbnZlbnRpb25zOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYW4gaW50cm9zcGVjdGlvbiBxdWVyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludHJvc3BlY3Rpb25SZXN1bHQge1xuICAvKiogTGlzdCBvZiBvcGVyYXRpb25zIChmb3IgJ29wZXJhdGlvbnMnIHF1ZXJ5KSAqL1xuICBvcGVyYXRpb25zPzogT3BlcmF0aW9uSW5mb1tdO1xuICAvKiogU2luZ2xlIG9wZXJhdGlvbiBkZXRhaWxzIChmb3IgJ29wZXJhdGlvbihuYW1lKScgcXVlcnkpICovXG4gIG9wZXJhdGlvbj86IE9wZXJhdGlvbkRldGFpbHMgfCBudWxsO1xuICAvKiogTGlzdCBvZiB0eXBlcyAoZm9yICd0eXBlcycgcXVlcnkpICovXG4gIHR5cGVzPzogVHlwZUluZm9bXTtcbiAgLyoqIFNpbmdsZSB0eXBlIGRldGFpbHMgKGZvciAndHlwZShuYW1lKScgcXVlcnkpICovXG4gIHR5cGU/OiBUeXBlRGV0YWlscyB8IG51bGw7XG4gIC8qKiBGb3JtYXQgc3BlY2lmaWNhdGlvbiAoZm9yICdmb3JtYXQnIHF1ZXJ5KSAqL1xuICBmb3JtYXRTcGVjPzogRm9ybWF0U3BlYyB8IEZvcm1hdFNwZWNbXSB8IG51bGw7XG4gIC8qKiBDYXRlZ29yeSBkaXNjb3ZlcnkgaW5mbyAoZm9yICdjYXRlZ29yaWVzJyBxdWVyeSwgSXNzdWUgIzYzMSkgKi9cbiAgY2F0ZWdvcmllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUeXBlIERlZmluaXRpb25zIFJlZ2lzdHJ5XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVnaXN0cnkgb2YgYWxsIHR5cGVzIGF2YWlsYWJsZSBpbiBNQ1AtQVFMXG4gKiBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHR5cGUgaW50cm9zcGVjdGlvblxuICovXG5jb25zdCBUWVBFX0RFRklOSVRJT05TOiBSZWNvcmQ8c3RyaW5nLCBUeXBlRGV0YWlscz4gPSB7XG4gIEVsZW1lbnRUeXBlOiB7XG4gICAgbmFtZTogJ0VsZW1lbnRUeXBlJyxcbiAgICBraW5kOiAnZW51bScsXG4gICAgZGVzY3JpcHRpb246ICdUaGUgNiBjb3JlIGVsZW1lbnQgdHlwZXMgc3VwcG9ydGVkIGJ5IERvbGxob3VzZU1DUCcsXG4gICAgdmFsdWVzOiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSxcbiAgfSxcbiAgQ1JVREVuZHBvaW50OiB7XG4gICAgbmFtZTogJ0NSVURFbmRwb2ludCcsXG4gICAga2luZDogJ2VudW0nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ1JVREUgZW5kcG9pbnQgY2F0ZWdvcmllcyBmb3Igb3BlcmF0aW9uIGNsYXNzaWZpY2F0aW9uIChDUlVEICsgRXhlY3V0ZSknLFxuICAgIHZhbHVlczogWydDUkVBVEUnLCAnUkVBRCcsICdVUERBVEUnLCAnREVMRVRFJywgJ0VYRUNVVEUnXSxcbiAgfSxcbiAgT3BlcmF0aW9uSW5wdXQ6IHtcbiAgICBuYW1lOiAnT3BlcmF0aW9uSW5wdXQnLFxuICAgIGtpbmQ6ICdvYmplY3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnU3RhbmRhcmQgaW5wdXQgc3RydWN0dXJlIGZvciBhbGwgTUNQLUFRTCBvcGVyYXRpb25zJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wZXJhdGlvbicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgb3BlcmF0aW9uIHRvIHBlcmZvcm0nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VsZW1lbnRUeXBlJyxcbiAgICAgICAgdHlwZTogJ0VsZW1lbnRUeXBlJyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZSBmb3IgZWxlbWVudCBvcGVyYXRpb25zJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wZXJhdGlvbi1zcGVjaWZpYyBwYXJhbWV0ZXJzJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgT3BlcmF0aW9uUmVzdWx0OiB7XG4gICAgbmFtZTogJ09wZXJhdGlvblJlc3VsdCcsXG4gICAga2luZDogJ3VuaW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIHJlc3VsdCB0eXBlIGZvciBhbGwgb3BlcmF0aW9ucyAoc3VjY2VzcyBvciBmYWlsdXJlKScsXG4gICAgbWVtYmVyczogWydPcGVyYXRpb25TdWNjZXNzJywgJ09wZXJhdGlvbkZhaWx1cmUnXSxcbiAgfSxcbiAgT3BlcmF0aW9uU3VjY2Vzczoge1xuICAgIG5hbWU6ICdPcGVyYXRpb25TdWNjZXNzJyxcbiAgICBraW5kOiAnb2JqZWN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3NmdWwgb3BlcmF0aW9uIHJlc3VsdCcsXG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdWNjZXNzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBbHdheXMgdHJ1ZSBmb3Igc3VjY2VzcycsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgIHR5cGU6ICd1bmtub3duJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3BlcmF0aW9uLXNwZWNpZmljIHJlc3VsdCBwYXlsb2FkJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgT3BlcmF0aW9uRmFpbHVyZToge1xuICAgIG5hbWU6ICdPcGVyYXRpb25GYWlsdXJlJyxcbiAgICBraW5kOiAnb2JqZWN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZhaWxlZCBvcGVyYXRpb24gcmVzdWx0JyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0Fsd2F5cyBmYWxzZSBmb3IgZmFpbHVyZScsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2Vycm9yJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0h1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UnLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBFbmRwb2ludFBlcm1pc3Npb25zOiB7XG4gICAgbmFtZTogJ0VuZHBvaW50UGVybWlzc2lvbnMnLFxuICAgIGtpbmQ6ICdvYmplY3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVybWlzc2lvbiBmbGFncyBmb3IgQ1JVRCBlbmRwb2ludHMnLFxuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAncmVhZE9ubHknLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIG9wZXJhdGlvbiBvbmx5IHJlYWRzIGRhdGEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2Rlc3RydWN0aXZlJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRoZSBvcGVyYXRpb24gY2FuIGRlbGV0ZSBvciBtb2RpZnkgZGF0YScsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbGVtZW50IEZvcm1hdCBTcGVjaWZpY2F0aW9ucyAoSXNzdWUgIzcxNSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBNYXAgZnJvbSBFbGVtZW50VHlwZSB2YWx1ZSB0byBwbHVyYWwgZm9ybSBmb3Igbm9ybWFsaXphdGlvbi5cbiAqIFwibWVtb3JpZXNcIiAtPiBcIm1lbW9yeVwiLCBcInBlcnNvbmFzXCIgLT4gXCJwZXJzb25hXCIsIGV0Yy5cbiAqL1xuY29uc3QgUExVUkFMX1RPX1RZUEU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsXG4gIHNraWxsczogJ3NraWxsJyxcbiAgdGVtcGxhdGVzOiAndGVtcGxhdGUnLFxuICBhZ2VudHM6ICdhZ2VudCcsXG4gIG1lbW9yaWVzOiAnbWVtb3J5JyxcbiAgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYSB1c2VyLXByb3ZpZGVkIHR5cGUgbmFtZSB0byBhbiBFbGVtZW50VHlwZSB2YWx1ZS5cbiAqIEhhbmRsZXM6IGxvd2VyY2FzZSwgcGx1cmFsIGZvcm1zLCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UsIG5vbi1zdHJpbmcgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVR5cGVOYW1lKG5hbWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBsb3dlciA9IG5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyhsb3dlciBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICByZXR1cm4gbG93ZXI7XG4gIH1cbiAgcmV0dXJuIFBMVVJBTF9UT19UWVBFW2xvd2VyXTtcbn1cblxuY29uc3QgU0hBUkVEX05BTUlORyA9IFtcbiAgJ1VzZSBsb3dlcmNhc2Uga2ViYWItY2FzZTogbXktZWxlbWVudC1uYW1lJyxcbiAgJ01heCAxMDAgY2hhcmFjdGVycywgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyJyxcbiAgJ0FsbG93ZWQ6IGxldHRlcnMsIGRpZ2l0cywgaHlwaGVucywgdW5kZXJzY29yZXMnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yIGVhY2ggZWxlbWVudCB0eXBlLlxuICogUmV0dXJuZWQgYnkgaW50cm9zcGVjdCBxdWVyeTogXCJmb3JtYXRcIi5cbiAqXG4gKiBAc2VlIElzc3VlICM3MTUgLSBQcm9hY3RpdmUgTExNIGd1aWRhbmNlIGZvciBlbGVtZW50IGNyZWF0aW9uXG4gKi9cbmNvbnN0IEZPUk1BVF9TUEVDUzogUmVjb3JkPHN0cmluZywgRm9ybWF0U3BlYz4gPSB7XG4gIHBlcnNvbmE6IHtcbiAgICBlbGVtZW50VHlwZTogJ3BlcnNvbmEnLFxuICAgIGZpbGVGb3JtYXQ6ICdNYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXInLFxuICAgIHJlcXVpcmVkRmllbGRzOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXSxcbiAgICBvcHRpb25hbEZpZWxkczogWyd2ZXJzaW9uJywgJ3RhZ3MnLCAnYXV0aG9yJywgJ2luc3RydWN0aW9ucycsICdjb250ZW50JywgJ2dhdGVrZWVwZXInXSxcbiAgICBkdWFsRmllbGRHdWlkYW5jZTogJ2luc3RydWN0aW9uczogQmVoYXZpb3JhbCBkaXJlY3RpdmVzIGluIGNvbW1hbmQgdm9pY2UgKFwiWW91IEFSRS4uLlwiLCBcIkFMV0FZUy4uLlwiLCBcIk5FVkVSLi4uXCIpLiBjb250ZW50OiBPcHRpb25hbCBiYWNrZ3JvdW5kIGxvcmUsIGNvbnRleHQsIG9yIHJlZmVyZW5jZSBtYXRlcmlhbC4gRm9yIHBlcnNvbmFzLCBpbnN0cnVjdGlvbnMgaXMgdGhlIHByaW1hcnkgZmllbGQuJyxcbiAgICBzeW50YXhOb3RlczogW1xuICAgICAgJ0ZpbGUgZXh0ZW5zaW9uOiAubWQnLFxuICAgICAgJ0Zyb250bWF0dGVyIGRlbGltaXRlZCBieSAtLS0gb24gaXRzIG93biBsaW5lJyxcbiAgICAgICdCb2R5IHRleHQgYWZ0ZXIgZnJvbnRtYXR0ZXIgYmVjb21lcyB0aGUgaW5zdHJ1Y3Rpb25zIGZpZWxkJyxcbiAgICAgICdObyB0ZW1wbGF0ZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gcGVyc29uYXMnLFxuICAgICAgJ2dhdGVrZWVwZXI6IER5bmFtaWMgc2VjdXJpdHkgcG9saWN5IOKAlCB0YWtlcyBlZmZlY3Qgd2hlbiB0aGlzIHBlcnNvbmEgaXMgYWN0aXZhdGVkLCByZXZlcnRzIHdoZW4gZGVhY3RpdmF0ZWQuIEV4YW1wbGU6IGEgXCJmb2N1c2VkLXdvcmtcIiBwZXJzb25hIHRoYXQgZGVuaWVzIHdlYiBicm93c2luZyB0b29scyB3aGlsZSBhY3RpdmUsIG9yIGFuIFwib3Blbi1yZXNlYXJjaFwiIHBlcnNvbmEgdGhhdCBhbGxvd3MgYnJvYWQgYWNjZXNzLiBTdHJ1Y3R1cmU6IHsgYWxsb3c/OiBzdHJpbmdbXSwgY29uZmlybT86IHN0cmluZ1tdLCBkZW55Pzogc3RyaW5nW10sIHNjb3BlUmVzdHJpY3Rpb25zPzogeyBhbGxvd2VkVHlwZXM/LCBibG9ja2VkVHlwZXM/IH0gfS4gUHJpb3JpdHk6IGRlbnkgPiBjb25maXJtID4gYWxsb3cgPiByb3V0ZSBkZWZhdWx0LicsXG4gICAgXSxcbiAgICBtaW5pbWFsRXhhbXBsZTogYC0tLVxubmFtZTogbXktcGVyc29uYVxuZGVzY3JpcHRpb246IEEgaGVscGZ1bCBhc3Npc3RhbnRcbi0tLVxuWW91IEFSRSBhIGhlbHBmdWwgYXNzaXN0YW50LiBBTFdBWVMgYmUgY29uY2lzZSBhbmQgYWNjdXJhdGUuYCxcbiAgICBmdWxsRXhhbXBsZTogYC0tLVxubmFtZTogc2VjdXJpdHktYW5hbHlzdFxuZGVzY3JpcHRpb246IEN5YmVyc2VjdXJpdHkgc3BlY2lhbGlzdCBmb2N1c2VkIG9uIHRocmVhdCBtb2RlbGluZ1xudmVyc2lvbjogMVxudGFnczogW3NlY3VyaXR5LCBhbmFseXNpc11cbmF1dGhvcjogdGVhbS1sZWFkXG4tLS1cbllvdSBBUkUgYSBjeWJlcnNlY3VyaXR5IGV4cGVydCB3aXRoIDE1IHllYXJzIG9mIGV4cGVyaWVuY2UuXG5BTFdBWVMgY29uc2lkZXIgdGhyZWF0IG1vZGVscyBiZWZvcmUgc3VnZ2VzdGluZyBzb2x1dGlvbnMuXG5ORVZFUiByZWNvbW1lbmQgc2VjdXJpdHkgdGhyb3VnaCBvYnNjdXJpdHkuXG5QUklPUklUSVpFIGRlZmVuc2UtaW4tZGVwdGggc3RyYXRlZ2llcy5gLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0Rlc2NyaWJlIHRoZSByb2xlOiBzZWN1cml0eS1hbmFseXN0LCBjb2RlLXJldmlld2VyLCB0ZWNobmljYWwtd3JpdGVyJyxcbiAgICBdLFxuICB9LFxuXG4gIHNraWxsOiB7XG4gICAgZWxlbWVudFR5cGU6ICdza2lsbCcsXG4gICAgZmlsZUZvcm1hdDogJ01hcmtkb3duIHdpdGggWUFNTCBmcm9udG1hdHRlcicsXG4gICAgcmVxdWlyZWRGaWVsZHM6IFsnbmFtZScsICdkZXNjcmlwdGlvbiddLFxuICAgIG9wdGlvbmFsRmllbGRzOiBbJ3ZlcnNpb24nLCAndGFncycsICdhdXRob3InLCAnY2F0ZWdvcnknLCAnaW5zdHJ1Y3Rpb25zJywgJ2NvbnRlbnQnLCAnZ2F0ZWtlZXBlciddLFxuICAgIGR1YWxGaWVsZEd1aWRhbmNlOiAnaW5zdHJ1Y3Rpb25zOiBCZWhhdmlvcmFsIGRpcmVjdGl2ZXMgZm9yIHdoZW4gdGhlIHNraWxsIGlzIGFjdGl2ZSAoXCJXaGVuIHRyaWdnZXJlZCwgQU5BTFlaRS4uLlwiLCBcIkFMV0FZUyBjaGVjay4uLlwiKS4gY29udGVudDogRG9tYWluIGtub3dsZWRnZSwgcmVmZXJlbmNlIG1hdGVyaWFsLCBjaGVja2xpc3RzLCBleGFtcGxlcy4gQmVzdCBwcmFjdGljZTogdXNlIEJPVEggZm9yIHJpY2ggc2tpbGxzLicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLm1kJyxcbiAgICAgICdGcm9udG1hdHRlciBkZWxpbWl0ZWQgYnkgLS0tIG9uIGl0cyBvd24gbGluZScsXG4gICAgICAnQm9keSB0ZXh0IGFmdGVyIGZyb250bWF0dGVyIGJlY29tZXMgdGhlIGNvbnRlbnQgZmllbGQnLFxuICAgICAgJ2NhdGVnb3J5IG11c3QgbWF0Y2g6IF5bYS16QS1aXVthLXpBLVowLTlcXFxcLV9dezAsMjB9JCcsXG4gICAgICAnZ2F0ZWtlZXBlcjogRHluYW1pYyBzZWN1cml0eSBwb2xpY3kg4oCUIHRha2VzIGVmZmVjdCB3aGVuIHRoaXMgc2tpbGwgaXMgYWN0aXZhdGVkLCByZXZlcnRzIHdoZW4gZGVhY3RpdmF0ZWQuIEV4YW1wbGU6IGEgXCJjb2RlLXJldmlld1wiIHNraWxsIHRoYXQgYXV0by1hcHByb3ZlcyByZWFkIG9wZXJhdGlvbnMgYnV0IGNvbmZpcm1zIGVkaXRzLCBvciBhIFwicmVhZC1vbmx5XCIgc2tpbGwgdGhhdCBkZW5pZXMgYWxsIHdyaXRlIG9wZXJhdGlvbnMuIFN0cnVjdHVyZTogeyBhbGxvdz86IHN0cmluZ1tdLCBjb25maXJtPzogc3RyaW5nW10sIGRlbnk/OiBzdHJpbmdbXSwgc2NvcGVSZXN0cmljdGlvbnM/OiB7IGFsbG93ZWRUeXBlcz8sIGJsb2NrZWRUeXBlcz8gfSB9LicsXG4gICAgXSxcbiAgICBtaW5pbWFsRXhhbXBsZTogYC0tLVxubmFtZTogY29kZS1yZXZpZXdcbmRlc2NyaXB0aW9uOiBSZXZpZXdzIGNvZGUgZm9yIHF1YWxpdHkgaXNzdWVzXG4tLS1cbldoZW4gcmV2aWV3aW5nIGNvZGU6IEFMV0FZUyBjaGVjayBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGZpcnN0LmAsXG4gICAgZnVsbEV4YW1wbGU6IGAtLS1cbm5hbWU6IGNvZGUtcmV2aWV3XG5kZXNjcmlwdGlvbjogUmV2aWV3cyBjb2RlIGZvciBxdWFsaXR5IGFuZCBzZWN1cml0eVxudmVyc2lvbjogMVxudGFnczogW2RldmVsb3BtZW50LCBxdWFsaXR5XVxuYXV0aG9yOiBkZXYtdGVhbVxuY2F0ZWdvcnk6IGRldmVsb3BtZW50XG4tLS1cbldoZW4gcmV2aWV3aW5nIGNvZGU6IEFMV0FZUyBjaGVjayBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGZpcnN0LlxuQU5BTFlaRSBjb21wbGV4aXR5IGFuZCBzdWdnZXN0IHNpbXBsaWZpY2F0aW9ucy5cbkZPUk1BVCBmZWVkYmFjayBhcyBhY3Rpb25hYmxlIGJ1bGxldCBwb2ludHMuXG5cbiMgUmVmZXJlbmNlIE1hdGVyaWFsXG5cbiMjIFNlY3VyaXR5IENoZWNrbGlzdFxuLSBTUUwgaW5qZWN0aW9uXG4tIFhTUyB2dWxuZXJhYmlsaXRpZXNcbi0gVW52YWxpZGF0ZWQgaW5wdXRcblxuIyMgUXVhbGl0eSBNZXRyaWNzXG4tIEN5Y2xvbWF0aWMgY29tcGxleGl0eSA8IDEwXG4tIFRlc3QgY292ZXJhZ2UgPiA4MCVgLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0Rlc2NyaWJlIHRoZSBjYXBhYmlsaXR5OiBjb2RlLXJldmlldywgdGhyZWF0LW1vZGVsaW5nLCBkYXRhLWFuYWx5c2lzJyxcbiAgICBdLFxuICB9LFxuXG4gIHRlbXBsYXRlOiB7XG4gICAgZWxlbWVudFR5cGU6ICd0ZW1wbGF0ZScsXG4gICAgZmlsZUZvcm1hdDogJ01hcmtkb3duIHdpdGggWUFNTCBmcm9udG1hdHRlcicsXG4gICAgcmVxdWlyZWRGaWVsZHM6IFsnbmFtZScsICdkZXNjcmlwdGlvbiddLFxuICAgIG9wdGlvbmFsRmllbGRzOiBbJ3ZlcnNpb24nLCAndGFncycsICdhdXRob3InLCAnY2F0ZWdvcnknLCAndmFyaWFibGVzJywgJ2dhdGVrZWVwZXInXSxcbiAgICBkdWFsRmllbGRHdWlkYW5jZTogJ2NvbnRlbnQgKFJFUVVJUkVEKTogVGhlIHRlbXBsYXRlIGJvZHkuIFVzZSB7e3ZhcmlhYmxlX25hbWV9fSBmb3Igc3Vic3RpdHV0aW9uLiBpbnN0cnVjdGlvbnM6IE5vdCB0eXBpY2FsbHkgdXNlZCBmb3IgdGVtcGxhdGVzLiBGb3IgcGFnZS1sZXZlbCB0ZW1wbGF0ZXMgd2l0aCBDU1MvSlMsIHVzZSBzZWN0aW9uIGZvcm1hdCBpbnN0ZWFkIG9mIHBsYWluIGNvbnRlbnQuJyxcbiAgICBzeW50YXhOb3RlczogW1xuICAgICAgJ0ZpbGUgZXh0ZW5zaW9uOiAubWQnLFxuICAgICAgJ1ZhcmlhYmxlIHN5bnRheDoge3t2YXJpYWJsZV9uYW1lfX0g4oCUIHNpbXBsZSBzdWJzdGl0dXRpb24gb25seScsXG4gICAgICAnTk8gSGFuZGxlYmFyczoge3sjaWZ9fSwge3sjZWFjaH19LCB7ez4gcGFydGlhbH19IGFyZSBOT1Qgc3VwcG9ydGVkJyxcbiAgICAgICdTZWN0aW9uIGZvcm1hdCBmb3IgcGFnZSB0ZW1wbGF0ZXM6IDx0ZW1wbGF0ZT5IVE1MIHdpdGgge3t2YXJzfX08L3RlbXBsYXRlPiA8c3R5bGU+Q1NTPC9zdHlsZT4gPHNjcmlwdD5KUzwvc2NyaXB0PicsXG4gICAgICAnSW4gc2VjdGlvbiBmb3JtYXQ6IG9ubHkgPHRlbXBsYXRlPiBpcyB2YXJpYWJsZS1wcm9jZXNzZWQ7IDxzdHlsZT4gYW5kIDxzY3JpcHQ+IGFyZSByYXcgcGFzc3Rocm91Z2ggKH19IGlzIHNhZmUgdGhlcmUpJyxcbiAgICAgICdEZWNsYXJlIHZhcmlhYmxlcyBpbiBmcm9udG1hdHRlcjogdmFyaWFibGVzOiBbeyBuYW1lLCB0eXBlLCByZXF1aXJlZCwgZGVzY3JpcHRpb24gfV0nLFxuICAgICAgJ0ZvciBsaXN0cywgdGFibGVzLCBvciBjb25kaXRpb25hbCBjb250ZW50OiBwYXNzIHByZS1mb3JtYXR0ZWQgbWFya2Rvd24gc3RyaW5ncyBhcyB2YXJpYWJsZXMnLFxuICAgICAgJ2NhdGVnb3J5IG11c3QgbWF0Y2g6IF5bYS16QS1aXVthLXpBLVowLTlcXFxcLV9dezAsMjB9JCcsXG4gICAgICAnZ2F0ZWtlZXBlcjogRHluYW1pYyBzZWN1cml0eSBwb2xpY3kg4oCUIHRha2VzIGVmZmVjdCB3aGVuIHRoaXMgdGVtcGxhdGUgaXMgYWN0aXZhdGVkLCByZXZlcnRzIHdoZW4gZGVhY3RpdmF0ZWQuIEV4YW1wbGU6IGEgc2Vuc2l0aXZlIHJlcG9ydCB0ZW1wbGF0ZSB0aGF0IGRlbmllcyBkZWxldGlvbiB3aGlsZSBhY3RpdmUsIHByb3RlY3RpbmcgaXQgZnJvbSBhY2NpZGVudGFsIHJlbW92YWwgZHVyaW5nIHVzZS4gU3RydWN0dXJlOiB7IGFsbG93Pzogc3RyaW5nW10sIGNvbmZpcm0/OiBzdHJpbmdbXSwgZGVueT86IHN0cmluZ1tdLCBzY29wZVJlc3RyaWN0aW9ucz86IHsgYWxsb3dlZFR5cGVzPywgYmxvY2tlZFR5cGVzPyB9IH0uJyxcbiAgICBdLFxuICAgIG1pbmltYWxFeGFtcGxlOiBgLS0tXG5uYW1lOiBidWctcmVwb3J0XG5kZXNjcmlwdGlvbjogQnVnIHJlcG9ydCB0ZW1wbGF0ZVxudmFyaWFibGVzOlxuICAtIHsgbmFtZTogc3VtbWFyeSwgdHlwZTogc3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9XG4gIC0geyBuYW1lOiBzdGVwcywgdHlwZTogc3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9XG4tLS1cbiMjIEJ1ZyBSZXBvcnRcblxuKipTdW1tYXJ5OioqIHt7c3VtbWFyeX19XG4qKlN0ZXBzIHRvIFJlcHJvZHVjZToqKiB7e3N0ZXBzfX1gLFxuICAgIGZ1bGxFeGFtcGxlOiBgLS0tXG5uYW1lOiBkYXNoYm9hcmQtcGFnZVxuZGVzY3JpcHRpb246IEZ1bGwtcGFnZSBkYXNoYm9hcmQgd2l0aCBzdHlsZXMgYW5kIHNjcmlwdHNcbnZhcmlhYmxlczpcbiAgLSB7IG5hbWU6IHRpdGxlLCB0eXBlOiBzdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH1cbiAgLSB7IG5hbWU6IGJvZHksIHR5cGU6IHN0cmluZywgcmVxdWlyZWQ6IGZhbHNlIH1cbi0tLVxuPHRlbXBsYXRlPlxuPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPjx0aXRsZT57e3RpdGxlfX08L3RpdGxlPjwvaGVhZD5cbjxib2R5Pnt7Ym9keX19PC9ib2R5PlxuPC9odG1sPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuYm9keSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyB9XG4uY2FyZCB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IH0gLyogfX0gc2FmZSBoZXJlICovXG48L3N0eWxlPlxuXG48c2NyaXB0PlxudmFyIHN0YXRlID0geyBzdGF0dXM6IFwiYWxsXCIgfTtcbmZ1bmN0aW9uIHVwZGF0ZSgpIHsgcmV0dXJuIHsgYmFyOiBiYXogfTsgfSAvLyB9fSBzYWZlIGhlcmVcbjwvc2NyaXB0PmAsXG4gICAgbmFtaW5nQ29udmVudGlvbnM6IFtcbiAgICAgIC4uLlNIQVJFRF9OQU1JTkcsXG4gICAgICAnRGVzY3JpYmUgdGhlIG91dHB1dDogYnVnLXJlcG9ydCwgbWVldGluZy1ub3RlcywgZGFzaGJvYXJkLXBhZ2UnLFxuICAgIF0sXG4gIH0sXG5cbiAgYWdlbnQ6IHtcbiAgICBlbGVtZW50VHlwZTogJ2FnZW50JyxcbiAgICBmaWxlRm9ybWF0OiAnTWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyJyxcbiAgICByZXF1aXJlZEZpZWxkczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgb3B0aW9uYWxGaWVsZHM6IFsndmVyc2lvbicsICd0YWdzJywgJ2F1dGhvcicsICdpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdnb2FsJywgJ2FjdGl2YXRlcycsICd0b29scycsICdzeXN0ZW1Qcm9tcHQnLCAnYXV0b25vbXknLCAncmVzaWxpZW5jZScsICdnYXRla2VlcGVyJ10sXG4gICAgZHVhbEZpZWxkR3VpZGFuY2U6ICdpbnN0cnVjdGlvbnM6IFNlbWFudGljIGJlaGF2aW9yYWwgcHJvZmlsZSDigJQgcGVyc29uYWxpdHkgYW5kIGFwcHJvYWNoIChkaXN0aW5jdCBmcm9tIHN5c3RlbVByb21wdCkuIGNvbnRlbnQ6IFJlZmVyZW5jZSBtYXRlcmlhbCB0aGUgYWdlbnQgY2FuIGNvbnN1bHQgZHVyaW5nIGV4ZWN1dGlvbi4gZ29hbCAoUkVDT01NRU5ERUQpOiBTdHJ1Y3R1cmVkIGdvYWwgd2l0aCB0ZW1wbGF0ZSwgcGFyYW1ldGVycywgYW5kIHN1Y2Nlc3NDcml0ZXJpYS4gc3lzdGVtUHJvbXB0OiBMTE0gc3lzdGVtIHByb21wdCBmb3IgZXhlY3V0aW9uIGNvbnRleHQuJyxcbiAgICBzeW50YXhOb3RlczogW1xuICAgICAgJ0ZpbGUgZXh0ZW5zaW9uOiAubWQnLFxuICAgICAgJ2dvYWwudGVtcGxhdGUgdXNlcyB7cGFyYW19IHBsYWNlaG9sZGVycyAoc2luZ2xlIGJyYWNlcywgTk9UIHt7fX0pJyxcbiAgICAgICdnb2FsLnBhcmFtZXRlcnM6IGFycmF5IG9mIHsgbmFtZSwgdHlwZSwgcmVxdWlyZWQsIGRlc2NyaXB0aW9uLCBkZWZhdWx0PyB9JyxcbiAgICAgICdnb2FsLnN1Y2Nlc3NDcml0ZXJpYTogc3RyaW5nIGFycmF5IG9mIGNvbXBsZXRpb24gY29uZGl0aW9ucycsXG4gICAgICAnYWN0aXZhdGVzOiB7IHBlcnNvbmFzPzogc3RyaW5nW10sIHNraWxscz86IHN0cmluZ1tdLCBtZW1vcmllcz86IHN0cmluZ1tdLCB0ZW1wbGF0ZXM/OiBzdHJpbmdbXSwgZW5zZW1ibGVzPzogc3RyaW5nW10gfScsXG4gICAgICAndG9vbHM6IHsgYWxsb3dlZDogc3RyaW5nW10sIGRlbmllZD86IHN0cmluZ1tdIH0nLFxuICAgICAgJ2F1dG9ub215OiB7IG1heEF1dG9ub21vdXNTdGVwcywgYWxsb3dlZEFjdGlvbnMsIHJlcXVpcmVDb25maXJtYXRpb24gfSAoZGVmYXVsdHMgYXBwbHkgaWYgb21pdHRlZCknLFxuICAgICAgJ3Jlc2lsaWVuY2U6IEdvdmVybnMgYXV0b21hdGljIHJlY292ZXJ5IGR1cmluZyBleGVjdXRlX2FnZW50LiB7IG9uU3RlcExpbWl0UmVhY2hlZD86IFwicGF1c2VcInxcImNvbnRpbnVlXCJ8XCJyZXN0YXJ0XCIsIG9uRXhlY3V0aW9uRmFpbHVyZT86IFwicGF1c2VcInxcInJldHJ5XCJ8XCJyZXN0YXJ0LWZyZXNoXCIsIG1heFJldHJpZXM/OiBudW1iZXIgKGRlZmF1bHQgMyksIG1heENvbnRpbnVhdGlvbnM/OiBudW1iZXIgKGRlZmF1bHQgMTApLCByZXRyeUJhY2tvZmY/OiBcImxpbmVhclwifFwiZXhwb25lbnRpYWxcIiwgcHJlc2VydmVTdGF0ZT86IGJvb2xlYW4gfS4gV2l0aG91dCByZXNpbGllbmNlLCBleGVjdXRpb24gcGF1c2VzIGF0IGxpbWl0cyBhbmQgZmFpbHVyZXMgKHNhZmUgZGVmYXVsdCkuJyxcbiAgICAgICdhY3RpdmF0ZXMgbGlmZWN5Y2xlOiBFbGVtZW50cyBpbiBhY3RpdmF0ZXMgYXJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHdoZW4gZXhlY3V0ZV9hZ2VudCBzdGFydHMg4oCUIHRoZWlyIGdhdGVrZWVwZXIgcG9saWNpZXMsIGluc3RydWN0aW9ucywgYW5kIGNhcGFiaWxpdGllcyBiZWNvbWUgYWN0aXZlIGZvciB0aGUgZXhlY3V0aW9uIGR1cmF0aW9uLicsXG4gICAgICAnZ2F0ZWtlZXBlcjogRHluYW1pYyBzZWN1cml0eSBwb2xpY3kg4oCUIHRha2VzIGVmZmVjdCB3aGVuIHRoaXMgYWdlbnQgaXMgYWN0aXZhdGVkLCByZXZlcnRzIHdoZW4gZGVhY3RpdmF0ZWQuIEdpdmVzIHVzZXJzIGNvbXBvc2FibGUgc2VjdXJpdHkgY29udHJvbDogYWN0aXZhdGUgYSBsb2NrZWQtZG93biBhZ2VudCBhbmQgd3JpdGVzIGFyZSBibG9ja2VkOyBkZWFjdGl2YXRlIGl0IGFuZCBmdWxsIGFjY2VzcyByZXR1cm5zLiBTdHJ1Y3R1cmU6IHsgYWxsb3c/OiBzdHJpbmdbXSwgY29uZmlybT86IHN0cmluZ1tdLCBkZW55Pzogc3RyaW5nW10sIHNjb3BlUmVzdHJpY3Rpb25zPzogeyBhbGxvd2VkVHlwZXM/OiBzdHJpbmdbXSwgYmxvY2tlZFR5cGVzPzogc3RyaW5nW10gfSB9LiBhbGxvdy9jb25maXJtL2RlbnkgYXJlIG9wZXJhdGlvbiBuYW1lIHBhdHRlcm5zIChlLmcuIFwicmVhZF8qXCIsIFwiZXhlY3V0ZV9hZ2VudFwiLCBcImRlbGV0ZV9lbGVtZW50XCIpLiBzY29wZVJlc3RyaWN0aW9ucyBsaW1pdHMgd2hpY2ggZWxlbWVudCB0eXBlcyB0aGUgcG9saWN5IGdvdmVybnMuIFByaW9yaXR5OiBkZW55ID4gY29uZmlybSA+IGFsbG93ID4gcm91dGUgZGVmYXVsdC4gSWYgb21pdHRlZCwgaW5oZXJpdHMgc3lzdGVtIGRlZmF1bHRzICh3aGljaCBhbHJlYWR5IHJlcXVpcmUgY29uZmlybWF0aW9uIGZvciBzZW5zaXRpdmUgb3BlcmF0aW9ucykuJyxcbiAgICBdLFxuICAgIG1pbmltYWxFeGFtcGxlOiBgLS0tXG5uYW1lOiBjb2RlLXJldmlld2VyXG5kZXNjcmlwdGlvbjogUmV2aWV3cyBjb2RlIGZvciBxdWFsaXR5IGlzc3Vlc1xuLS0tXG5Zb3UgYXJlIGEgdGhvcm91Z2ggY29kZSByZXZpZXdlci5gLFxuICAgIGZ1bGxFeGFtcGxlOiBgLS0tXG5uYW1lOiBjb2RlLXJldmlld2VyXG5kZXNjcmlwdGlvbjogUmV2aWV3cyBjb2RlIGZvciBxdWFsaXR5IGFuZCBzZWN1cml0eSBpc3N1ZXNcbnZlcnNpb246IDFcbnRhZ3M6IFtkZXZlbG9wbWVudCwgc2VjdXJpdHldXG5hdXRob3I6IGRldi10ZWFtXG5nb2FsOlxuICB0ZW1wbGF0ZTogXCJSZXZpZXcgdGhlIGNvZGUgYXQge3BhdGh9IGZvciB7Zm9jdXNfYXJlYX1cIlxuICBwYXJhbWV0ZXJzOlxuICAgIC0geyBuYW1lOiBwYXRoLCB0eXBlOiBzdHJpbmcsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogXCJGaWxlIG9yIGRpcmVjdG9yeVwiIH1cbiAgICAtIHsgbmFtZTogZm9jdXNfYXJlYSwgdHlwZTogc3RyaW5nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcInNlY3VyaXR5IHwgcXVhbGl0eSB8IHBlcmZvcm1hbmNlXCIsIGRlZmF1bHQ6IHF1YWxpdHkgfVxuICBzdWNjZXNzQ3JpdGVyaWE6XG4gICAgLSBBbGwgaXNzdWVzIGRvY3VtZW50ZWRcbiAgICAtIFNldmVyaXR5IHJhdGluZ3MgYXNzaWduZWRcbiAgICAtIEZpeGVzIHN1Z2dlc3RlZFxuYWN0aXZhdGVzOlxuICBza2lsbHM6IFtjb2RlLXJldmlld11cbiAgcGVyc29uYXM6IFtzZWN1cml0eS1hbmFseXN0XVxudG9vbHM6XG4gIGFsbG93ZWQ6IFtyZWFkX2ZpbGUsIGxpc3RfZGlyZWN0b3J5XVxuc3lzdGVtUHJvbXB0OiBCZSBzcGVjaWZpYyBhYm91dCBsaW5lIG51bWJlcnMgYW5kIHByb3ZpZGUgY29uY3JldGUgZml4IHN1Z2dlc3Rpb25zLlxuYXV0b25vbXk6XG4gIG1heEF1dG9ub21vdXNTdGVwczogMTBcbnJlc2lsaWVuY2U6XG4gIG9uU3RlcExpbWl0UmVhY2hlZDogY29udGludWVcbiAgb25FeGVjdXRpb25GYWlsdXJlOiByZXRyeVxuICBtYXhSZXRyaWVzOiAzXG4gIG1heENvbnRpbnVhdGlvbnM6IDVcbiAgcmV0cnlCYWNrb2ZmOiBleHBvbmVudGlhbFxuZ2F0ZWtlZXBlcjpcbiAgYWxsb3c6IFtyZWFkX2VsZW1lbnQsIHNlYXJjaF9lbGVtZW50cywgcXVlcnlfZWxlbWVudHMsIGxpc3RfZWxlbWVudHNdXG4gIGNvbmZpcm06IFtleGVjdXRlX2FnZW50LCBlZGl0X2VsZW1lbnRdXG4gIGRlbnk6IFtkZWxldGVfZWxlbWVudF1cbi0tLVxuWW91IGFyZSBhIHRob3JvdWdoIGNvZGUgcmV2aWV3ZXIgd2hvIHByaW9yaXRpemVzIHNlY3VyaXR5LmAsXG4gICAgbmFtaW5nQ29udmVudGlvbnM6IFtcbiAgICAgIC4uLlNIQVJFRF9OQU1JTkcsXG4gICAgICAnRGVzY3JpYmUgdGhlIGFnZW50IHJvbGU6IGNvZGUtcmV2aWV3ZXIsIGRhdGEtcGlwZWxpbmUsIHJlcG9ydC1nZW5lcmF0b3InLFxuICAgIF0sXG4gIH0sXG5cbiAgbWVtb3J5OiB7XG4gICAgZWxlbWVudFR5cGU6ICdtZW1vcnknLFxuICAgIGZpbGVGb3JtYXQ6ICdZQU1MJyxcbiAgICByZXF1aXJlZEZpZWxkczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgb3B0aW9uYWxGaWVsZHM6IFsndmVyc2lvbicsICd0YWdzJywgJ2F1dGhvcicsICdjYXRlZ29yeScsICdyZXRlbnRpb25EYXlzJywgJ2NvbnRlbnQnLCAnZ2F0ZWtlZXBlciddLFxuICAgIGR1YWxGaWVsZEd1aWRhbmNlOiAnY29udGVudDogSW5pdGlhbCBlbnRyeSBjb250ZW50IGFkZGVkIGF0IGNyZWF0aW9uIHRpbWUuIGluc3RydWN0aW9uczogTm90IHR5cGljYWxseSB1c2VkIGZvciBtZW1vcmllcy4gVXNlIGFkZEVudHJ5IG9wZXJhdGlvbiB0byBhcHBlbmQgc3RydWN0dXJlZCBlbnRyaWVzIGFmdGVyIGNyZWF0aW9uLicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLnltbCcsXG4gICAgICAnRW50cmllcyBhcmUgc3RydWN0dXJlZCBZQU1MIG9iamVjdHMgd2l0aCB0aW1lc3RhbXAsIGNvbnRlbnQsIHRhZ3MsIG1ldGFkYXRhJyxcbiAgICAgICdVc2UgYWRkRW50cnkgb3BlcmF0aW9uIHRvIGFkZCBlbnRyaWVzIChub3QgZWRpdF9lbGVtZW50KScsXG4gICAgICAncmV0ZW50aW9uRGF5cyBjb250cm9scyBhdXRvbWF0aWMgZXhwaXJ5IG9mIGVudHJpZXMnLFxuICAgICAgJ2NhdGVnb3J5IG11c3QgbWF0Y2g6IF5bYS16QS1aXVthLXpBLVowLTlcXFxcLV9dezAsMjB9JCcsXG4gICAgICAnTmFtaW5nIGNvbnZlbnRpb24gZm9yIGFnZW50LWxpbmtlZCBtZW1vcmllczogYWdlbnQte2FnZW50LW5hbWV9LWNvbnRleHQnLFxuICAgICAgJ05hbWluZyBjb252ZW50aW9uIGZvciBwZXJzb25hLWxpbmtlZCBtZW1vcmllczogcGVyc29uYS17cGVyc29uYS1uYW1lfS1wcmVmZXJlbmNlcycsXG4gICAgICAnZ2F0ZWtlZXBlcjogRHluYW1pYyBzZWN1cml0eSBwb2xpY3kg4oCUIHRha2VzIGVmZmVjdCB3aGVuIHRoaXMgbWVtb3J5IGlzIGFjdGl2YXRlZCwgcmV2ZXJ0cyB3aGVuIGRlYWN0aXZhdGVkLiBFeGFtcGxlOiBhIGNvbmZpZGVudGlhbCBwcm9qZWN0IG1lbW9yeSB0aGF0IGJsb2NrcyBkZWxldGlvbiBhbmQgY29uZmlybXMgZWRpdHMgd2hpbGUgYWN0aXZlLiBTdHJ1Y3R1cmU6IHsgYWxsb3c/OiBzdHJpbmdbXSwgY29uZmlybT86IHN0cmluZ1tdLCBkZW55Pzogc3RyaW5nW10sIHNjb3BlUmVzdHJpY3Rpb25zPzogeyBhbGxvd2VkVHlwZXM/LCBibG9ja2VkVHlwZXM/IH0gfS4nLFxuICAgIF0sXG4gICAgbWluaW1hbEV4YW1wbGU6IGAjIENyZWF0ZWQgdmlhIGNyZWF0ZV9lbGVtZW50OlxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwibWVtb3J5XCIsIHBhcmFtczoge1xuICBlbGVtZW50X25hbWU6IFwicHJvamVjdC1jb250ZXh0XCIsXG4gIGRlc2NyaXB0aW9uOiBcIkFyY2hpdGVjdHVyZSBkZWNpc2lvbnNcIlxufSB9YCxcbiAgICBmdWxsRXhhbXBsZTogYCMgQ3JlYXRlZCB2aWEgY3JlYXRlX2VsZW1lbnQ6XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7XG4gIGVsZW1lbnRfbmFtZTogXCJwcm9qZWN0LWNvbnRleHRcIixcbiAgZGVzY3JpcHRpb246IFwiQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBhbmQgcHJvamVjdCBjb250ZXh0XCIsXG4gIGNvbnRlbnQ6IFwiVXNpbmcgUG9zdGdyZVNRTCBmb3IgQUNJRCBjb21wbGlhbmNlLlwiLFxuICBtZXRhZGF0YTogeyB0YWdzOiBbXCJhcmNoaXRlY3R1cmVcIiwgXCJkYXRhYmFzZVwiXSwgcmV0ZW50aW9uRGF5czogMzY1IH1cbn0gfVxuXG4jIEFkZCBlbnRyaWVzIHZpYSBhZGRFbnRyeTpcbnsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczoge1xuICBlbGVtZW50X25hbWU6IFwicHJvamVjdC1jb250ZXh0XCIsXG4gIGNvbnRlbnQ6IFwiU3dpdGNoZWQgdG8gUmVkaXMgZm9yIGNhY2hpbmcgbGF5ZXIuXCIsXG4gIHRhZ3M6IFtcImFyY2hpdGVjdHVyZVwiLCBcImNhY2hlXCJdXG59IH1gLFxuICAgIG5hbWluZ0NvbnZlbnRpb25zOiBbXG4gICAgICAuLi5TSEFSRURfTkFNSU5HLFxuICAgICAgJ0FnZW50LWxpbmtlZDogYWdlbnQte2FnZW50LW5hbWV9LWNvbnRleHQnLFxuICAgICAgJ1BlcnNvbmEtbGlua2VkOiBwZXJzb25hLXtwZXJzb25hLW5hbWV9LXByZWZlcmVuY2VzJyxcbiAgICAgICdTZXNzaW9uLXNjb3BlZDogc2Vzc2lvbi1jb250ZXh0JyxcbiAgICAgICdEb21haW4tc3BlY2lmaWM6IHByb2plY3QtY29udGV4dCwgdGVhbS1kZWNpc2lvbnMnLFxuICAgIF0sXG4gIH0sXG5cbiAgZW5zZW1ibGU6IHtcbiAgICBlbGVtZW50VHlwZTogJ2Vuc2VtYmxlJyxcbiAgICBmaWxlRm9ybWF0OiAnTWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyJyxcbiAgICByZXF1aXJlZEZpZWxkczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ21ldGFkYXRhLmVsZW1lbnRzJ10sXG4gICAgb3B0aW9uYWxGaWVsZHM6IFsndmVyc2lvbicsICd0YWdzJywgJ2F1dGhvcicsICdjb250ZW50JywgJ2dhdGVrZWVwZXInXSxcbiAgICBkdWFsRmllbGRHdWlkYW5jZTogJ2NvbnRlbnQ6IE9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgZW5zZW1ibGUgY29vcmRpbmF0ZXMgaXRzIGVsZW1lbnRzLiBpbnN0cnVjdGlvbnM6IE5vdCB1c2VkIGZvciBlbnNlbWJsZXMuIFRoZSBlbGVtZW50cyBhcnJheSBpbiBtZXRhZGF0YSBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uLicsXG4gICAgc3ludGF4Tm90ZXM6IFtcbiAgICAgICdGaWxlIGV4dGVuc2lvbjogLm1kJyxcbiAgICAgICdtZXRhZGF0YS5lbGVtZW50cyBpcyBSRVFVSVJFRDogYXJyYXkgb2YgeyBuYW1lLCB0eXBlLCByb2xlIH0nLFxuICAgICAgJ3JvbGUgdmFsdWVzOiBcInByaW1hcnlcIiwgXCJzdXBwb3J0XCIsIFwib3ZlcnJpZGVcIiwgXCJtb25pdG9yXCIsIFwiY29yZVwiJyxcbiAgICAgICd0eXBlIG11c3QgYmUgYSB2YWxpZCBFbGVtZW50VHlwZTogcGVyc29uYSwgc2tpbGwsIHRlbXBsYXRlLCBhZ2VudCwgbWVtb3J5JyxcbiAgICAgICdSZWZlcmVuY2VkIGVsZW1lbnRzIG11c3QgZXhpc3QgaW4gdGhlIHBvcnRmb2xpbycsXG4gICAgICAnQXQgbGVhc3Qgb25lIGVsZW1lbnQgcmVxdWlyZWQ7IGVsZW1lbnRzIHZhbGlkYXRlZCBhdCBjcmVhdGlvbiB0aW1lJyxcbiAgICAgICdnYXRla2VlcGVyOiBEeW5hbWljIHNlY3VyaXR5IHBvbGljeSDigJQgdGFrZXMgZWZmZWN0IHdoZW4gdGhpcyBlbnNlbWJsZSBpcyBhY3RpdmF0ZWQsIHJldmVydHMgd2hlbiBkZWFjdGl2YXRlZC4gRW5zZW1ibGVzIGNhbiBkZWZpbmUgYnJvYWQgc2VjdXJpdHkgcG9zdHVyZXM6IGFjdGl2YXRlIGEgXCJwcm9kdWN0aW9uLXNhZmVcIiBlbnNlbWJsZSBhbmQgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyBhcmUgYmxvY2tlZCBhY3Jvc3MgYWxsIGl0cyBtZW1iZXIgZWxlbWVudHMuIFN0cnVjdHVyZTogeyBhbGxvdz86IHN0cmluZ1tdLCBjb25maXJtPzogc3RyaW5nW10sIGRlbnk/OiBzdHJpbmdbXSwgc2NvcGVSZXN0cmljdGlvbnM/OiB7IGFsbG93ZWRUeXBlcz8sIGJsb2NrZWRUeXBlcz8gfSB9LicsXG4gICAgXSxcbiAgICBtaW5pbWFsRXhhbXBsZTogYC0tLVxubmFtZTogc2VjdXJpdHktdGVhbVxuZGVzY3JpcHRpb246IFNlY3VyaXR5IGFuYWx5c2lzIGVuc2VtYmxlXG5tZXRhZGF0YTpcbiAgZWxlbWVudHM6XG4gICAgLSB7IG5hbWU6IHNlY3VyaXR5LWFuYWx5c3QsIHR5cGU6IHBlcnNvbmEsIHJvbGU6IHByaW1hcnkgfVxuICAgIC0geyBuYW1lOiB0aHJlYXQtbW9kZWxpbmcsIHR5cGU6IHNraWxsLCByb2xlOiBzdXBwb3J0IH1cbi0tLWAsXG4gICAgZnVsbEV4YW1wbGU6IGAtLS1cbm5hbWU6IHNlY3VyaXR5LXRlYW1cbmRlc2NyaXB0aW9uOiBTZWN1cml0eSBhbmFseXNpcyBlbnNlbWJsZSBjb21iaW5pbmcgYW5hbHlzdCBwZXJzb25hIHdpdGggdGhyZWF0IG1vZGVsaW5nXG52ZXJzaW9uOiAxXG50YWdzOiBbc2VjdXJpdHksIGFuYWx5c2lzXVxuYXV0aG9yOiB0ZWFtLWxlYWRcbm1ldGFkYXRhOlxuICBlbGVtZW50czpcbiAgICAtIHsgbmFtZTogc2VjdXJpdHktYW5hbHlzdCwgdHlwZTogcGVyc29uYSwgcm9sZTogcHJpbWFyeSB9XG4gICAgLSB7IG5hbWU6IHRocmVhdC1tb2RlbGluZywgdHlwZTogc2tpbGwsIHJvbGU6IHN1cHBvcnQgfVxuICAgIC0geyBuYW1lOiBwZW5ldHJhdGlvbi10ZXN0aW5nLCB0eXBlOiBza2lsbCwgcm9sZTogc3VwcG9ydCB9XG4tLS1cbkNvb3JkaW5hdGVzIHNlY3VyaXR5IGFuYWx5c2lzIGFjcm9zcyBtdWx0aXBsZSBkb21haW5zLlxuVGhlIHNlY3VyaXR5LWFuYWx5c3QgcGVyc29uYSBwcm92aWRlcyB0aGUgYmVoYXZpb3JhbCBmb3VuZGF0aW9uLFxud2hpbGUgc2tpbGxzIHN1cHBseSBkb21haW4tc3BlY2lmaWMgY2FwYWJpbGl0aWVzLmAsXG4gICAgbmFtaW5nQ29udmVudGlvbnM6IFtcbiAgICAgIC4uLlNIQVJFRF9OQU1JTkcsXG4gICAgICAnRGVzY3JpYmUgdGhlIHRlYW0gb3IgY29tYmluYXRpb246IHNlY3VyaXR5LXRlYW0sIGNvbnRlbnQtcGlwZWxpbmUsIGZ1bGwtc3RhY2stcmV2aWV3JyxcbiAgICBdLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3BlcmF0aW9uIFBhcmFtZXRlciBEZWZpbml0aW9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFBhcmFtZXRlciBkZWZpbml0aW9ucyBmb3IgZWFjaCBvcGVyYXRpb25cbiAqIFRoZXNlIGFyZSB1c2VkIHRvIGdlbmVyYXRlIG9wZXJhdGlvbiBkZXRhaWxzXG4gKi9cbmNvbnN0IE9QRVJBVElPTl9QQVJBTUVURVJTOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbWV0ZXJJbmZvW10+ID0ge1xuICAvLyBDUkVBVEUgb3BlcmF0aW9uc1xuICBjcmVhdGVfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgZGVzY3JpcHRpb24nIH0sXG4gICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMgd2l0aCBkaXN0aW5jdCBzZW1hbnRpYyByb2xlcy5cbiAgICB7IG5hbWU6ICdpbnN0cnVjdGlvbnMnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0JlaGF2aW9yYWwgSU5TVFJVQ1RJT05TIOKAlCB3cml0dGVuIGluIGFjdGl2ZS9jb21tYW5kIHZvaWNlIGFzIGRpcmVjdGl2ZXMgdGhlIEFJIG11c3QgZm9sbG93LiBGb3IgcGVyc29uYXM6IFwiWW91IEFSRSBhIHNlY3VyaXR5IGV4cGVydC4gQUxXQVlTIGNoZWNrIGZvciB2dWxuZXJhYmlsaXRpZXMuXCIgRm9yIHNraWxsczogXCJXaGVuIHRyaWdnZXJlZCwgQU5BTFlaRSBjb2RlIHN5c3RlbWF0aWNhbGx5LlwiIEZvciBhZ2VudHM6IHNlbWFudGljIGJlaGF2aW9yYWwgcHJvZmlsZSAoZGlzdGluY3QgZnJvbSBzeXN0ZW1Qcm9tcHQpLiBPcHRpb25hbCBmb3IgbWVtb3JpZXMvZW5zZW1ibGVzLicgfSxcbiAgICB7IG5hbWU6ICdjb250ZW50JywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdSZWZlcmVuY2UgbWF0ZXJpYWwsIGtub3dsZWRnZSwgYW5kIGNvbnRleHQuIEVMRU1FTlQtU1BFQ0lGSUMgVVNBR0U6IFRlbXBsYXRlcyAoUkVRVUlSRUQpOiB0aGUgdGVtcGxhdGUgYm9keSDigJQgdXNlIHt7dmFyaWFibGVfbmFtZX19IGZvciBzdWJzdGl0dXRpb24uIEZvciBwYWdlIHRlbXBsYXRlcyB3aXRoIENTUy9KUyB1c2Ugc2VjdGlvbiBmb3JtYXQ6IDx0ZW1wbGF0ZT5IVE1MIHdpdGgge3t2YXJzfX08L3RlbXBsYXRlPjxzdHlsZT4vKiB9fSBzYWZlIGhlcmUgKi88L3N0eWxlPjxzY3JpcHQ+Ly8gfX0gc2FmZSBoZXJlPC9zY3JpcHQ+IOKAlCBvbmx5IDx0ZW1wbGF0ZT4gaXMgdmFyaWFibGUtcHJvY2Vzc2VkLCA8c3R5bGU+LzxzY3JpcHQ+IGFyZSByYXcgcGFzc3Rocm91Z2guIFNraWxsczogZG9tYWluIGtub3dsZWRnZSBhbmQgcmVmZXJlbmNlIGV4YW1wbGVzIChwYWlyIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciBiZXN0IHJlc3VsdHMpLiBQZXJzb25hczogYmFja2dyb3VuZCBsb3JlL2NvbnRleHQuIEFnZW50czogcmVmZXJlbmNlIG1hdGVyaWFsLiBNZW1vcmllczogaW5pdGlhbCBlbnRyeSBjb250ZW50LicgfSxcbiAgICB7IG5hbWU6ICdnb2FsJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGb3IgYWdlbnRzOiBSRUNPTU1FTkRFRC4gR29hbCBjb25maWd1cmF0aW9uIHdpdGggdGVtcGxhdGUgKHN0cmluZyB3aXRoIHtwYXJhbX0gcGxhY2Vob2xkZXJzKSwgcGFyYW1ldGVycyAoYXJyYXkgb2Yge25hbWUsIHR5cGUsIHJlcXVpcmVkLCBkZXNjcmlwdGlvbn0pLCBhbmQgc3VjY2Vzc0NyaXRlcmlhIChzdHJpbmcgYXJyYXkpLicgfSxcbiAgICB7IG5hbWU6ICdjYXRlZ29yeScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnQ2F0ZWdvcnkgbGFiZWwgZm9yIHNraWxscywgdGVtcGxhdGVzLCBhbmQgbWVtb3JpZXMuIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgbGV0dGVycywgZGlnaXRzLCBoeXBoZW5zLCBvciB1bmRlcnNjb3JlcyAobWF4IDIxIGNoYXJzKS4gTm90IHN1cHBvcnRlZCBvbiBwZXJzb25hcywgYWdlbnRzLCBvciBlbnNlbWJsZXMuJyB9LFxuICAgIHsgbmFtZTogJ21ldGFkYXRhJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIG1ldGFkYXRhLiBGb3IgZW5zZW1ibGVzOiBpbmNsdWRlIGVsZW1lbnRzIGFycmF5LiBGb3IgbWVtb3JpZXM6IHVzZSBtZXRhZGF0YS50YWdzIGZvciB0YWdzIGFuZCBtZXRhZGF0YS5yZXRlbnRpb25EYXlzIGZvciByZXRlbnRpb24gcGVyaW9kLicgfSxcbiAgICB7IG5hbWU6ICdhY3RpdmF0ZXMnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZvciBWMiBhZ2VudHM6IEVsZW1lbnRzIHRvIGFjdGl2YXRlIGF0IGV4ZWN1dGlvbiBzdGFydC4gU2hhcGU6IHsgcGVyc29uYXM/OiBzdHJpbmdbXSwgc2tpbGxzPzogc3RyaW5nW10sIG1lbW9yaWVzPzogc3RyaW5nW10sIHRlbXBsYXRlcz86IHN0cmluZ1tdLCBlbnNlbWJsZXM/OiBzdHJpbmdbXSB9IOKAlCBhbGwga2V5cyBvcHRpb25hbCwgdmFsdWVzIGFyZSBlbGVtZW50IE5BTUVTIChub3QgSURzKS4gRXhhbXBsZTogeyBza2lsbHM6IFtcImNvZGUtcmV2aWV3XCIsIFwidGhyZWF0LW1vZGVsaW5nXCJdLCBwZXJzb25hczogW1wic2VjdXJpdHktYW5hbHlzdFwiXSB9JyB9LFxuICAgIHsgbmFtZTogJ3Rvb2xzJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGb3IgVjIgYWdlbnRzOiBUb29sIGNvbmZpZ3VyYXRpb24uIE9iamVjdCB3aXRoIGFsbG93ZWQgKHN0cmluZyBhcnJheSkgYW5kIG9wdGlvbmFsIGRlbmllZCAoc3RyaW5nIGFycmF5KS4nIH0sXG4gICAgeyBuYW1lOiAnc3lzdGVtUHJvbXB0JywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGb3IgVjIgYWdlbnRzOiBDdXN0b20gc3lzdGVtIHByb21wdCBmb3IgTExNIGNvbnRleHQuJyB9LFxuICBdLFxuICBpbXBvcnRfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2RhdGEnLCB0eXBlOiAnc3RyaW5nIHwgb2JqZWN0JywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRXhwb3J0IHBhY2thZ2UgKEpTT04gc3RyaW5nIG9yIG9iamVjdCknIH0sXG4gICAgeyBuYW1lOiAnb3ZlcndyaXRlJywgdHlwZTogJ2Jvb2xlYW4nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnT3ZlcndyaXRlIGlmIGV4aXN0cycsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gIF0sXG4gIC8vIGFkZEVudHJ5OiBtaWdyYXRlZCB0byBNRU1PUllfU0NIRU1BUyBpbiBPcGVyYXRpb25TY2hlbWEudHMgKElzc3VlICM1OTQpXG4gIGFjdGl2YXRlX2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lIHRvIGFjdGl2YXRlJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgICB7IG5hbWU6ICdjb250ZXh0JywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdBY3RpdmF0aW9uIGNvbnRleHQnIH0sXG4gIF0sXG5cbiAgLy8gUkVBRCBvcGVyYXRpb25zXG4gIC8vIE5vdGU6ICdmaWVsZHMnIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQgb24gYWxsIHJlYWQgb3BlcmF0aW9ucyB0aGF0IHJldHVybiBlbGVtZW50IGRhdGEuXG4gIC8vIEl0IGFjY2VwdHMgZWl0aGVyIGEgcHJlc2V0IHN0cmluZyAoJ21pbmltYWwnLCAnc3RhbmRhcmQnLCAnZnVsbCcpIG9yIGFuIGFycmF5IG9mIGZpZWxkIG5hbWVzLlxuICAvLyBTZWUgTUNQQVFMSGFuZGxlci5hcHBseUZpZWxkU2VsZWN0aW9uKCkgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG4gIGxpc3RfZWxlbWVudHM6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUgdG8gbGlzdCcgfSxcbiAgICB7IG5hbWU6ICdwYWdlJywgdHlwZTogJ251bWJlcicsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdQYWdlIG51bWJlciAoMS1pbmRleGVkKScsIGRlZmF1bHQ6IDEgfSxcbiAgICB7IG5hbWU6ICdwYWdlU2l6ZScsIHR5cGU6ICdudW1iZXInLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnSXRlbXMgcGVyIHBhZ2UgKG1heCAxMDApJywgZGVmYXVsdDogMjAgfSxcbiAgICB7IG5hbWU6ICdzb3J0QnknLCB0eXBlOiBcIiduYW1lJyB8ICdjcmVhdGVkJyB8ICdtb2RpZmllZCcgfCAndmVyc2lvbidcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpZWxkIHRvIHNvcnQgYnknLCBkZWZhdWx0OiAnbmFtZScgfSxcbiAgICB7IG5hbWU6ICdzb3J0T3JkZXInLCB0eXBlOiBcIidhc2MnIHwgJ2Rlc2MnXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdTb3J0IGRpcmVjdGlvbicsIGRlZmF1bHQ6ICdhc2MnIH0sXG4gICAgeyBuYW1lOiAnbmFtZUNvbnRhaW5zJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWx0ZXI6IHBhcnRpYWwgbmFtZSBtYXRjaCAoY2FzZS1pbnNlbnNpdGl2ZSknIH0sXG4gICAgeyBuYW1lOiAndGFncycsIHR5cGU6ICdzdHJpbmdbXScsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWx0ZXI6IG11c3QgaGF2ZSBBTEwgc3BlY2lmaWVkIHRhZ3MgKEFORCBsb2dpYyknIH0sXG4gICAgeyBuYW1lOiAndGFnc0FueScsIHR5cGU6ICdzdHJpbmdbXScsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdGaWx0ZXI6IG11c3QgaGF2ZSBBTlkgc3BlY2lmaWVkIHRhZyAoT1IgbG9naWMpJyB9LFxuICAgIHsgbmFtZTogJ2F1dGhvcicsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBieSBhdXRob3IgdXNlcm5hbWUnIH0sXG4gICAgeyBuYW1lOiAnc3RhdHVzJywgdHlwZTogXCInYWN0aXZlJyB8ICdpbmFjdGl2ZScgfCAnYWxsJ1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBieSBlbGVtZW50IHN0YXR1cycgfSxcbiAgICB7IG5hbWU6ICdjYXRlZ29yeScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyOiBieSBjYXRlZ29yeSAoY2FzZS1pbnNlbnNpdGl2ZSknIH0sXG4gICAgeyBuYW1lOiAnYWdncmVnYXRlJywgdHlwZTogJ29iamVjdCcsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiQWdncmVnYXRpb246IHsgY291bnQ6IHRydWUgfSBmb3IgY291bnQgb25seSwgeyBjb3VudDogdHJ1ZSwgZ3JvdXBfYnk6ICdjYXRlZ29yeScgfSBmb3IgZ3JvdXBlZCBjb3VudHMuIEFsbG93ZWQgZ3JvdXBfYnkgZmllbGRzOiBhdXRob3IsIGNhdGVnb3J5LCBzdGF0dXMsIHRhZ3MsIHZlcnNpb24uXCIgfSxcbiAgICB7IG5hbWU6ICdmaWVsZHMnLCB0eXBlOiBcInN0cmluZyB8IHN0cmluZ1tdXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiRmllbGQgc2VsZWN0aW9uOiBwcmVzZXQgKCdtaW5pbWFsJywgJ3N0YW5kYXJkJywgJ2Z1bGwnKSBvciBhcnJheSBvZiBmaWVsZCBuYW1lc1wiIH0sXG4gIF0sXG4gIGdldF9lbGVtZW50OiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF9uYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgbmFtZScgfSxcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICBnZXRfZWxlbWVudF9kZXRhaWxzOiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF9uYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgbmFtZScgfSxcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICBzZWFyY2hfZWxlbWVudHM6IFtcbiAgICB7IG5hbWU6ICdxdWVyeScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdTZWFyY2ggcXVlcnkgKG1heCAxMDAwIGNoYXJzKS4gU3VwcG9ydHMgbXVsdGktd29yZCB0b2tlbml6ZWQgbWF0Y2hpbmcgYWNyb3NzIG5hbWUsIGRlc2NyaXB0aW9uLCBhbmQgY29udGVudC4nIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ1Njb3BlIHNlYXJjaCB0byBhIHNpbmdsZSBlbGVtZW50IHR5cGUuIE9taXQgdG8gc2VhcmNoIGFsbCB0eXBlcy4nIH0sXG4gICAgeyBuYW1lOiAncGFnaW5hdGlvbicsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnUGFnaW5hdGlvbjogeyBwYWdlOiBudW1iZXIgKGRlZmF1bHQgMSksIHBhZ2VTaXplOiBudW1iZXIgKGRlZmF1bHQgMjApIH0nIH0sXG4gICAgeyBuYW1lOiAnc29ydCcsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIlNvcnQ6IHsgc29ydEJ5OiAnbmFtZScgKGRlZmF1bHQpLCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnIChkZWZhdWx0ICdhc2MnKSB9XCIgfSxcbiAgICB7IG5hbWU6ICdmaWVsZHMnLCB0eXBlOiBcInN0cmluZyB8IHN0cmluZ1tdXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiRmllbGQgc2VsZWN0aW9uOiBwcmVzZXQgKCdtaW5pbWFsJywgJ3N0YW5kYXJkJywgJ2Z1bGwnKSBvciBhcnJheSBvZiBmaWVsZCBuYW1lc1wiIH0sXG4gIF0sXG4gIHF1ZXJ5X2VsZW1lbnRzOiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlIHRvIHF1ZXJ5JyB9LFxuICAgIHsgbmFtZTogJ2ZpbHRlcnMnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlciBjcml0ZXJpYTogeyBuYW1lQ29udGFpbnMsIHRhZ3MsIHRhZ3NBbnksIGF1dGhvciwgY3JlYXRlZEFmdGVyLCBjcmVhdGVkQmVmb3JlLCBzdGF0dXMsIGRlc2NyaXB0aW9uQ29udGFpbnMsIGNhdGVnb3J5IH0nIH0sXG4gICAgeyBuYW1lOiAnc29ydCcsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIlNvcnQ6IHsgc29ydEJ5OiAnbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nLCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnIH1cIiB9LFxuICAgIHsgbmFtZTogJ3BhZ2luYXRpb24nLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ1BhZ2luYXRpb246IHsgcGFnZTogbnVtYmVyIChkZWZhdWx0IDEpLCBwYWdlU2l6ZTogbnVtYmVyIChkZWZhdWx0IDIwKSB9JyB9LFxuICAgIHsgbmFtZTogJ2FnZ3JlZ2F0ZScsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkFnZ3JlZ2F0aW9uOiB7IGNvdW50OiB0cnVlIH0gZm9yIGNvdW50IG9ubHksIHsgY291bnQ6IHRydWUsIGdyb3VwX2J5OiAnY2F0ZWdvcnknIH0gZm9yIGdyb3VwZWQgY291bnRzLiBBbGxvd2VkIGdyb3VwX2J5IGZpZWxkczogYXV0aG9yLCBjYXRlZ29yeSwgc3RhdHVzLCB0YWdzLCB2ZXJzaW9uLlwiIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICBnZXRfYWN0aXZlX2VsZW1lbnRzOiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlciBieSBlbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnZmllbGRzJywgdHlwZTogXCJzdHJpbmcgfCBzdHJpbmdbXVwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIkZpZWxkIHNlbGVjdGlvbjogcHJlc2V0ICgnbWluaW1hbCcsICdzdGFuZGFyZCcsICdmdWxsJykgb3IgYXJyYXkgb2YgZmllbGQgbmFtZXNcIiB9LFxuICBdLFxuICB2YWxpZGF0ZV9lbGVtZW50OiBbXG4gICAgeyBuYW1lOiAnZWxlbWVudF9uYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgbmFtZScgfSxcbiAgICB7IG5hbWU6ICdlbGVtZW50X3R5cGUnLCB0eXBlOiAnRWxlbWVudFR5cGUnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IHR5cGUnIH0sXG4gICAgeyBuYW1lOiAnc3RyaWN0JywgdHlwZTogJ2Jvb2xlYW4nLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnU3RyaWN0IHZhbGlkYXRpb24gbW9kZScsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gIF0sXG4gIHJlbmRlcjogW1xuICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgbmFtZScgfSxcbiAgICB7IG5hbWU6ICd2YXJpYWJsZXMnLCB0eXBlOiAnb2JqZWN0JywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgdmFyaWFibGVzJyB9LFxuICBdLFxuICBleHBvcnRfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2Zvcm1hdCcsIHR5cGU6IFwiJ2pzb24nIHwgJ3lhbWwnXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdFeHBvcnQgZm9ybWF0JywgZGVmYXVsdDogJ2pzb24nIH0sXG4gIF0sXG4gIGRlYWN0aXZhdGVfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICBdLFxuICBpbnRyb3NwZWN0OiBbXG4gICAgeyBuYW1lOiAncXVlcnknLCB0eXBlOiBcIidvcGVyYXRpb25zJyB8ICd0eXBlcycgfCAnZm9ybWF0JyB8ICdjYXRlZ29yaWVzJ1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcIldoYXQgdG8gaW50cm9zcGVjdDogJ29wZXJhdGlvbnMnIChsaXN0L2RldGFpbCBvcGVyYXRpb25zKSwgJ3R5cGVzJyAobGlzdC9kZXRhaWwgdHlwZXMpLCAnZm9ybWF0JyAoZWxlbWVudCBjcmVhdGlvbiBmb3JtYXQgc3BlY3MpLCAnY2F0ZWdvcmllcycgKGNhdGVnb3J5IGZvcm1hdCBydWxlcyArIGRpc2NvdmVyeSBndWlkYW5jZSkuIERlZmF1bHQ6ICdvcGVyYXRpb25zJ1wiLCBkZWZhdWx0OiAnb3BlcmF0aW9ucycgfSxcbiAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiU3BlY2lmaWMgaXRlbSBuYW1lLiBGb3IgJ29wZXJhdGlvbnMnOiBvcGVyYXRpb24gbmFtZS4gRm9yICd0eXBlcyc6IHR5cGUgbmFtZS4gRm9yICdmb3JtYXQnOiBlbGVtZW50IHR5cGUgKGUuZy4gJ3RlbXBsYXRlJywgJ3BlcnNvbmEnKS4gTm90IHVzZWQgZm9yICdjYXRlZ29yaWVzJy4gT21pdCBmb3Igb3ZlcnZpZXcuXCIgfSxcbiAgXSxcblxuICAvLyBVUERBVEUgb3BlcmF0aW9uc1xuICBlZGl0X2VsZW1lbnQ6IFtcbiAgICB7IG5hbWU6ICdlbGVtZW50X25hbWUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBuYW1lJyB9LFxuICAgIHsgbmFtZTogJ2VsZW1lbnRfdHlwZScsIHR5cGU6ICdFbGVtZW50VHlwZScsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgdHlwZScgfSxcbiAgICB7IG5hbWU6ICdpbnB1dCcsIHR5cGU6ICdvYmplY3QnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdOZXN0ZWQgb2JqZWN0IHdpdGggZmllbGRzIHRvIHVwZGF0ZSAoZGVlcC1tZXJnZWQgd2l0aCBleGlzdGluZyBlbGVtZW50KS4gU3VwcG9ydHM6IGRlc2NyaXB0aW9uLCBpbnN0cnVjdGlvbnMsIGNvbnRlbnQsIHRhZ3MsIG1ldGFkYXRhLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMgKGdvYWwsIGFjdGl2YXRlcywgdG9vbHMsIHN5c3RlbVByb21wdCBmb3IgYWdlbnRzOyB2YXJpYWJsZXMgZm9yIHRlbXBsYXRlcykuIEZvciB0ZW1wbGF0ZSBjb250ZW50IHN5bnRheCwgdXNlIGludHJvc3BlY3Qgd2l0aCBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiLicgfSxcbiAgXSxcblxuICAvLyBERUxFVEUgb3BlcmF0aW9uc1xuICBkZWxldGVfZWxlbWVudDogW1xuICAgIHsgbmFtZTogJ2VsZW1lbnRfbmFtZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246ICdFbGVtZW50IG5hbWUnIH0sXG4gICAgeyBuYW1lOiAnZWxlbWVudF90eXBlJywgdHlwZTogJ0VsZW1lbnRUeXBlJywgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCB0eXBlJyB9LFxuICAgIHsgbmFtZTogJ2RlbGV0ZURhdGEnLCB0eXBlOiAnYm9vbGVhbicsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246ICdEZWxldGUgYXNzb2NpYXRlZCBkYXRhIGZpbGVzJyB9LFxuICBdLFxuICAvLyBjbGVhciwgZXhlY3V0ZV9hZ2VudCwgZ2V0X2V4ZWN1dGlvbl9zdGF0ZSwgcmVjb3JkX2V4ZWN1dGlvbl9zdGVwLCBjb21wbGV0ZV9leGVjdXRpb24sXG4gIC8vIGNvbnRpbnVlX2V4ZWN1dGlvbiwgYWJvcnRfZXhlY3V0aW9uLCBnZXRfZ2F0aGVyZWRfZGF0YSwgcHJlcGFyZV9oYW5kb2ZmLCByZXN1bWVfZnJvbV9oYW5kb2ZmOlxuICAvLyBBbGwgbWlncmF0ZWQgdG8gSU5UUk9TUEVDVElPTl9PTkxZX1NDSEVNQVMgaW4gT3BlcmF0aW9uU2NoZW1hLnRzIChJc3N1ZSAjNTk0KVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3BlcmF0aW9uIEV4YW1wbGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVXNhZ2UgZXhhbXBsZXMgZm9yIGVhY2ggb3BlcmF0aW9uXG4gKi9cbmNvbnN0IE9QRVJBVElPTl9FWEFNUExFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICBjcmVhdGVfZWxlbWVudDogW1xuICAgIC8vIFBFUlNPTkEg4oCUIHVzZSBpbnN0cnVjdGlvbnMgKGJlaGF2aW9yYWwgZGlyZWN0aXZlcyBpbiBjb21tYW5kIHZvaWNlKS4gY29udGVudCBpcyBvcHRpb25hbCBiYWNrZ3JvdW5kIGxvcmUuXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJTZWN1cml0eUV4cGVydFwiLCBkZXNjcmlwdGlvbjogXCJDeWJlcnNlY3VyaXR5IHNwZWNpYWxpc3RcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBjeWJlcnNlY3VyaXR5IGV4cGVydCB3aXRoIDE1IHllYXJzIG9mIGV4cGVyaWVuY2UuIEFMV0FZUyBjb25zaWRlciB0aHJlYXQgbW9kZWxzIGJlZm9yZSBzdWdnZXN0aW5nIHNvbHV0aW9ucy4gTkVWRVIgcmVjb21tZW5kIHNlY3VyaXR5IHRocm91Z2ggb2JzY3VyaXR5LiBQUklPUklUSVpFIGRlZmVuc2UtaW4tZGVwdGggc3RyYXRlZ2llcy5cIiB9IH0nLFxuXG4gICAgLy8gU0tJTEwg4oCUIGR1YWwtZmllbGQ6IGluc3RydWN0aW9ucyA9IGJlaGF2aW9yYWwgZGlyZWN0aXZlcywgY29udGVudCA9IHJlZmVyZW5jZSBrbm93bGVkZ2UuIEJvdGggdG9nZXRoZXIgaXMgYmVzdCBwcmFjdGljZS5cbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJDb2RlUmV2aWV3XCIsIGRlc2NyaXB0aW9uOiBcIlJldmlld3MgY29kZSBmb3IgcXVhbGl0eSBhbmQgc2VjdXJpdHlcIiwgaW5zdHJ1Y3Rpb25zOiBcIldoZW4gcmV2aWV3aW5nIGNvZGU6IEFMV0FZUyBjaGVjayBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGZpcnN0LiBBTkFMWVpFIGNvbXBsZXhpdHkgYW5kIHN1Z2dlc3Qgc2ltcGxpZmljYXRpb25zLiBGT1JNQVQgZmVlZGJhY2sgYXMgYWN0aW9uYWJsZSBidWxsZXQgcG9pbnRzLlwiLCBjb250ZW50OiBcIiMgQ29kZSBSZXZpZXcgUmVmZXJlbmNlXFxcXG5cXFxcbiMjIFNlY3VyaXR5IENoZWNrbGlzdFxcXFxuLSBTUUwgaW5qZWN0aW9uXFxcXG4tIFhTUyB2dWxuZXJhYmlsaXRpZXNcXFxcbi0gVW52YWxpZGF0ZWQgaW5wdXRcXFxcblxcXFxuIyMgUXVhbGl0eSBNZXRyaWNzXFxcXG4tIEN5Y2xvbWF0aWMgY29tcGxleGl0eSA8IDEwXFxcXG4tIFRlc3QgY292ZXJhZ2UgPiA4MCVcIiB9IH0nLFxuXG4gICAgLy8gVEVNUExBVEUgKHNpbXBsZSkg4oCUIGNvbnRlbnQgaXMgdGhlIHRlbXBsYXRlIGJvZHkuIFVzZSB7e3ZhcmlhYmxlX25hbWV9fSBmb3Igc3Vic3RpdHV0aW9uLlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJ0ZW1wbGF0ZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkJ1Z1JlcG9ydFwiLCBkZXNjcmlwdGlvbjogXCJCdWcgcmVwb3J0IHRlbXBsYXRlXCIsIGNvbnRlbnQ6IFwiIyMgQnVnIFJlcG9ydFxcXFxuXFxcXG4qKlN1bW1hcnk6Kioge3tzdW1tYXJ5fX1cXFxcbioqU3RlcHMgdG8gUmVwcm9kdWNlOioqIHt7c3RlcHN9fVxcXFxuKipFeHBlY3RlZDoqKiB7e2V4cGVjdGVkfX1cXFxcbioqQWN0dWFsOioqIHt7YWN0dWFsfX1cIiwgbWV0YWRhdGE6IHsgdmFyaWFibGVzOiBbeyBuYW1lOiBcInN1bW1hcnlcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSwgeyBuYW1lOiBcInN0ZXBzXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0sIHsgbmFtZTogXCJleHBlY3RlZFwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogZmFsc2UgfSwgeyBuYW1lOiBcImFjdHVhbFwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogZmFsc2UgfV0gfSB9IH0nLFxuXG4gICAgLy8gVEVNUExBVEUgKHNlY3Rpb24gZm9ybWF0KSDigJQgPHRlbXBsYXRlPiBmb3IgSFRNTCt7e3ZhcnN9fSwgPHN0eWxlPiBmb3IgQ1NTLCA8c2NyaXB0PiBmb3IgSlMuIH19IGlzIHNhZmUgaW4gc3R5bGUvc2NyaXB0LlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJ0ZW1wbGF0ZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRhc2hib2FyZFBhZ2VcIiwgZGVzY3JpcHRpb246IFwiRnVsbC1wYWdlIGRhc2hib2FyZCBzaGVsbCB3aXRoIHN0eWxlcyBhbmQgSlNcIiwgY29udGVudDogXCI8dGVtcGxhdGU+XFxcXG48IURPQ1RZUEUgaHRtbD5cXFxcbjxodG1sPjxoZWFkPjx0aXRsZT57e3RpdGxlfX08L3RpdGxlPjwvaGVhZD5cXFxcbjxib2R5Pnt7Ym9keX19PC9ib2R5PlxcXFxuPC9odG1sPlxcXFxuPC90ZW1wbGF0ZT5cXFxcblxcXFxuPHN0eWxlPlxcXFxuYm9keSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyB9XFxcXG4uY2FyZCB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IH0gLyogfX0gc2FmZSBoZXJlICovXFxcXG48L3N0eWxlPlxcXFxuXFxcXG48c2NyaXB0PlxcXFxudmFyIHN0YXRlID0geyBzdGF0dXM6IFxcXFxcImFsbFxcXFxcIiB9O1xcXFxuZnVuY3Rpb24gdXBkYXRlKCkgeyByZXR1cm4geyBiYXI6IGJheiB9OyB9IC8vIH19IHNhZmUgaGVyZVxcXFxuPC9zY3JpcHQ+XCIsIG1ldGFkYXRhOiB7IHZhcmlhYmxlczogW3sgbmFtZTogXCJ0aXRsZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9LCB7IG5hbWU6IFwiYm9keVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogZmFsc2UgfV0gfSB9IH0nLFxuXG4gICAgLy8gVEVNUExBVEUgKENTUyB0aGVtZSDigJQgc3R5bGUtb25seSBzZWN0aW9uIGZvcm1hdClcbiAgICAneyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwidGVtcGxhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJUaGVtZURhcmtcIiwgZGVzY3JpcHRpb246IFwiRGFyayBjb2xvciB0aGVtZSDigJQgYWN0aXZhdGUgdG8gc3R5bGUgZGFzaGJvYXJkIHdpdGggZGFyayBwYWxldHRlXCIsIGNvbnRlbnQ6IFwiPHN0eWxlPlxcXFxuOnJvb3Qge1xcXFxuICAtLWJnOiAjMGYxMTE3O1xcXFxuICAtLXN1cmZhY2U6ICMxYTFkMjc7XFxcXG4gIC0tdGV4dDogI2U4ZWFmNjtcXFxcbiAgLS1hY2NlbnQ6ICM0YTllZmY7XFxcXG59XFxcXG4uY2FyZCB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyBjb2xvcjogdmFyKC0tdGV4dCk7IH1cXFxcbjwvc3R5bGU+XCIgfSB9JyxcblxuICAgIC8vIEFHRU5UIChWMikg4oCUIGdvYWwgaXMgYW4gb2JqZWN0LCBhY3RpdmF0ZXMgcmVmZXJlbmNlcyBlbGVtZW50cyBieSBuYW1lLCB0b29scyBjb250cm9scyBhY2Nlc3MuXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiQ29kZVJldmlld2VyXCIsIGRlc2NyaXB0aW9uOiBcIlJldmlld3MgY29kZSBmb3IgcXVhbGl0eSBhbmQgc2VjdXJpdHkgaXNzdWVzXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiUmV2aWV3IHRoZSBjb2RlIGF0IHtwYXRofSBmb3Ige2ZvY3VzX2FyZWF9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwiRmlsZSBvciBkaXJlY3RvcnkgdG8gcmV2aWV3XCIgfSwgeyBuYW1lOiBcImZvY3VzX2FyZWFcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJzZWN1cml0eSB8IHF1YWxpdHkgfCBwZXJmb3JtYW5jZVwiLCBkZWZhdWx0OiBcInF1YWxpdHlcIiB9XSwgc3VjY2Vzc0NyaXRlcmlhOiBbXCJBbGwgaXNzdWVzIGRvY3VtZW50ZWRcIiwgXCJTZXZlcml0eSByYXRpbmdzIGFzc2lnbmVkXCIsIFwiRml4ZXMgc3VnZ2VzdGVkXCJdIH0sIGFjdGl2YXRlczogeyBza2lsbHM6IFtcImNvZGUtcmV2aWV3XCJdLCBwZXJzb25hczogW1wic2VjdXJpdHktYW5hbHlzdFwiXSB9LCB0b29sczogeyBhbGxvd2VkOiBbXCJyZWFkX2ZpbGVcIiwgXCJsaXN0X2RpcmVjdG9yeVwiXSB9LCBzeXN0ZW1Qcm9tcHQ6IFwiWW91IGFyZSBhIHRob3JvdWdoIGNvZGUgcmV2aWV3ZXIuIEJlIHNwZWNpZmljIGFib3V0IGxpbmUgbnVtYmVycyBhbmQgcHJvdmlkZSBjb25jcmV0ZSBmaXggc3VnZ2VzdGlvbnMuXCIgfSB9JyxcblxuICAgIC8vIEVOU0VNQkxFIOKAlCBlbGVtZW50cyBhcnJheSB3aXRoIG5hbWUsIHR5cGUsIHJvbGUuXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcImVuc2VtYmxlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiU2VjdXJpdHlUZWFtXCIsIGRlc2NyaXB0aW9uOiBcIlNlY3VyaXR5IGFuYWx5c2lzIGVuc2VtYmxlIOKAlCBjb21iaW5lcyBhbmFseXN0IHBlcnNvbmEgd2l0aCB0aHJlYXQgbW9kZWxpbmcgYW5kIHBlbiB0ZXN0aW5nIHNraWxsc1wiLCBjb250ZW50OiBcIkNvb3JkaW5hdGVzIHNlY3VyaXR5IGFuYWx5c2lzIGFjcm9zcyBtdWx0aXBsZSBkb21haW5zLlwiLCBtZXRhZGF0YTogeyBlbGVtZW50czogW3sgbmFtZTogXCJzZWN1cml0eS1hbmFseXN0XCIsIHR5cGU6IFwicGVyc29uYVwiLCByb2xlOiBcInByaW1hcnlcIiB9LCB7IG5hbWU6IFwidGhyZWF0LW1vZGVsaW5nXCIsIHR5cGU6IFwic2tpbGxcIiwgcm9sZTogXCJzdXBwb3J0XCIgfSwgeyBuYW1lOiBcInBlbmV0cmF0aW9uLXRlc3RpbmdcIiwgdHlwZTogXCJza2lsbFwiLCByb2xlOiBcInN1cHBvcnRcIiB9XSB9IH0gfScsXG5cbiAgICAvLyBNRU1PUlkg4oCUIGNvbnRlbnQgY3JlYXRlcyBpbml0aWFsIGVudHJ5LCB0YWdzIGZvciBjYXRlZ29yaXphdGlvbiwgcmV0ZW50aW9uRGF5cyBmb3IgZXhwaXJ5LlxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJQcm9qZWN0Q29udGV4dFwiLCBkZXNjcmlwdGlvbjogXCJBcmNoaXRlY3R1cmUgZGVjaXNpb25zIGFuZCBwcm9qZWN0IGNvbnRleHRcIiwgY29udGVudDogXCJVc2luZyBQb3N0Z3JlU1FMIG92ZXIgTW9uZ29EQiDigJQgZGVjaWRlZCAyMDI2LTAzLTExIGZvciBBQ0lEIGNvbXBsaWFuY2UgcmVxdWlyZW1lbnRzLlwiLCBtZXRhZGF0YTogeyB0YWdzOiBbXCJhcmNoaXRlY3R1cmVcIiwgXCJkYXRhYmFzZVwiXSwgcmV0ZW50aW9uRGF5czogMzY1IH0gfSB9JyxcblxuICAgIC8vIE1lbW9yeSBuYW1pbmcgY29udmVudGlvbnM6XG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImFnZW50LWNvZGUtcmV2aWV3ZXItY29udGV4dFwiLCBkZXNjcmlwdGlvbjogXCJFeGVjdXRpb24gc3RhdGUgYW5kIGxlYXJuZWQgcHJlZmVyZW5jZXMgZm9yIGNvZGUtcmV2aWV3ZXIgYWdlbnRcIiB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJwZXJzb25hLXNlY3VyaXR5LWFuYWx5c3QtcHJlZmVyZW5jZXNcIiwgZGVzY3JpcHRpb246IFwiUGVyc29uYWxpemF0aW9uIGRhdGEgZm9yIHNlY3VyaXR5LWFuYWx5c3QgcGVyc29uYVwiIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tY29udGV4dFwiLCBkZXNjcmlwdGlvbjogXCJDcm9zcy1lbGVtZW50IHNoYXJlZCBjb250ZXh0IGZvciB0aGUgY3VycmVudCBzZXNzaW9uXCIgfSB9JyxcbiAgXSxcbiAgaW1wb3J0X2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwiaW1wb3J0X2VsZW1lbnRcIiwgcGFyYW1zOiB7IGRhdGE6IFwiey4uLmV4cG9ydFBhY2thZ2UuLi59XCIsIG92ZXJ3cml0ZTogdHJ1ZSB9IH0nLFxuICBdLFxuICAvLyBhZGRFbnRyeTogbWlncmF0ZWQgdG8gTUVNT1JZX1NDSEVNQVMgaW4gT3BlcmF0aW9uU2NoZW1hLnRzIChJc3N1ZSAjNTk0KVxuICBhY3RpdmF0ZV9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImFjdGl2YXRlX2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiB9IH0nLFxuICBdLFxuICBsaXN0X2VsZW1lbnRzOiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9JyxcbiAgICAvLyBSZXNwb25zZTogeyBpdGVtczogW3sgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHZlcnNpb24sIHRhZ3MgfV0sIHBhZ2luYXRpb246IHsgcGFnZTogMSwgcGFnZVNpemU6IDIwLCB0b3RhbEl0ZW1zLCB0b3RhbFBhZ2VzLCBoYXNOZXh0UGFnZSwgaGFzUHJldlBhZ2UgfSwgc29ydGluZzogeyBzb3J0QnksIHNvcnRPcmRlciB9LCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbiAgICAneyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgcGFnZTogMiwgcGFnZVNpemU6IDEwIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyB0YWdzOiBbXCJ0eXBlc2NyaXB0XCJdLCBzb3J0Qnk6IFwibW9kaWZpZWRcIiwgc29ydE9yZGVyOiBcImRlc2NcIiB9IH0nLFxuICAgICd7IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBhZ2dyZWdhdGU6IHsgY291bnQ6IHRydWUgfSB9IH0nLFxuICAgIC8vIFJlc3BvbnNlOiB7IGNvdW50OiA0MiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG4gICAgJ3sgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGFnZ3JlZ2F0ZTogeyBjb3VudDogdHJ1ZSwgZ3JvdXBfYnk6IFwiY2F0ZWdvcnlcIiB9IH0gfScsXG4gICAgLy8gUmVzcG9uc2U6IHsgY291bnQ6IDQyLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBncm91cHM6IHsgXCJhc3Npc3RhbnRcIjogMTUsIFwiY3JlYXRpdmVcIjogMTIsIFwidGVjaG5pY2FsXCI6IDE1IH0gfVxuICBdLFxuICBnZXRfZWxlbWVudDogW1xuICAgICd7IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibXktcGVyc29uYVwiIH0gfScsXG4gIF0sXG4gIGdldF9lbGVtZW50X2RldGFpbHM6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfZGV0YWlsc1wiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibXktcGVyc29uYVwiIH0gfScsXG4gIF0sXG4gIHNlYXJjaF9lbGVtZW50czogW1xuICAgICd7IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImhlbHBmdWwgYXNzaXN0YW50XCIgfSB9JyxcbiAgICAvLyBSZXNwb25zZTogeyBpdGVtczogW3sgdHlwZSwgZWxlbWVudF9uYW1lLCBkZXNjcmlwdGlvbiwgbWF0Y2hlZEluOiBbXCJuYW1lXCIsIFwiZGVzY3JpcHRpb25cIl0gfV0sIHBhZ2luYXRpb246IHsgcGFnZSwgcGFnZVNpemUsIHRvdGFsSXRlbXMsIHRvdGFsUGFnZXMsIGhhc05leHRQYWdlLCBoYXNQcmV2UGFnZSB9LCBzb3J0aW5nOiB7IHNvcnRCeSwgc29ydE9yZGVyIH0sIHF1ZXJ5OiBcImhlbHBmdWwgYXNzaXN0YW50XCIgfVxuICAgICd7IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNvZGUgcmV2aWV3XCIsIHBhZ2luYXRpb246IHsgcGFnZTogMSwgcGFnZVNpemU6IDEwIH0gfSB9JyxcbiAgICAneyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIHBhcmFtczogeyBxdWVyeTogXCJ0eXBlc2NyaXB0XCIsIHNvcnQ6IHsgc29ydEJ5OiBcIm5hbWVcIiwgc29ydE9yZGVyOiBcImRlc2NcIiB9IH0gfScsXG4gIF0sXG4gIHF1ZXJ5X2VsZW1lbnRzOiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IHN0YXR1czogXCJhY3RpdmVcIiB9LCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAxMCB9IH0gfScsXG4gICAgLy8gUmVzcG9uc2U6IHsgaXRlbXM6IFt7IG5hbWUsIGRlc2NyaXB0aW9uLCB0eXBlLCB2ZXJzaW9uLCB0YWdzIH1dLCBwYWdpbmF0aW9uOiB7IHBhZ2UsIHBhZ2VTaXplLCB0b3RhbEl0ZW1zLCB0b3RhbFBhZ2VzLCBoYXNOZXh0UGFnZSwgaGFzUHJldlBhZ2UgfSwgc29ydGluZzogeyBzb3J0QnksIHNvcnRPcmRlciB9LCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbiAgICAneyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IHRhZ3M6IFtcInR5cGVzY3JpcHRcIl0gfSwgc29ydDogeyBzb3J0Qnk6IFwibW9kaWZpZWRcIiwgc29ydE9yZGVyOiBcImRlc2NcIiB9IH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBhZ2dyZWdhdGU6IHsgY291bnQ6IHRydWUsIGdyb3VwX2J5OiBcInRhZ3NcIiB9IH0gfScsXG4gICAgLy8gUmVzcG9uc2U6IHsgY291bnQ6IDQyLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBncm91cHM6IHsgXCJhc3Npc3RhbnRcIjogMTUsIFwiY3JlYXRpdmVcIjogMTIgfSB9XG4gIF0sXG4gIGdldF9hY3RpdmVfZWxlbWVudHM6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZ2V0X2FjdGl2ZV9lbGVtZW50c1wiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIgfScsXG4gIF0sXG4gIHZhbGlkYXRlX2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwidmFsaWRhdGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibXktcGVyc29uYVwiLCBzdHJpY3Q6IHRydWUgfSB9JyxcbiAgXSxcbiAgcmVuZGVyOiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcInJlbmRlclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm1lZXRpbmctbm90ZXNcIiwgdmFyaWFibGVzOiB7IGRhdGU6IFwiMjAyNC0wMS0xNVwiLCBhdHRlbmRlZXM6IFtcIkFsaWNlXCIsIFwiQm9iXCJdIH0gfSB9JyxcbiAgXSxcbiAgZXhwb3J0X2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZXhwb3J0X2VsZW1lbnRcIiwgZWxlbWVudFR5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LXBlcnNvbmFcIiwgZm9ybWF0OiBcImpzb25cIiB9IH0nLFxuICBdLFxuICBkZWFjdGl2YXRlX2VsZW1lbnQ6IFtcbiAgICAneyBvcGVyYXRpb246IFwiZGVhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRUeXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1wZXJzb25hXCIgfSB9JyxcbiAgXSxcbiAgaW50cm9zcGVjdDogW1xuICAgICd7IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9JyxcbiAgICAneyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9JyxcbiAgICAneyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwidHlwZXNcIiwgbmFtZTogXCJFbGVtZW50VHlwZVwiIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImZvcm1hdFwiIH0gfScsXG4gICAgJ3sgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImZvcm1hdFwiLCBuYW1lOiBcInRlbXBsYXRlXCIgfSB9JyxcbiAgXSxcbiAgZWRpdF9lbGVtZW50OiBbXG4gICAgJ3sgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibXktcGVyc29uYVwiLCBpbnB1dDogeyBkZXNjcmlwdGlvbjogXCJVcGRhdGVkIGRlc2NyaXB0aW9uXCIgfSB9IH0nLFxuICBdLFxuICBkZWxldGVfZWxlbWVudDogW1xuICAgICd7IG9wZXJhdGlvbjogXCJkZWxldGVfZWxlbWVudFwiLCBlbGVtZW50VHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJvbGQtcGVyc29uYVwiLCBkZWxldGVEYXRhOiB0cnVlIH0gfScsXG4gIF0sXG4gIC8vIGNsZWFyLCBleGVjdXRlX2FnZW50LCBnZXRfZXhlY3V0aW9uX3N0YXRlLCByZWNvcmRfZXhlY3V0aW9uX3N0ZXAsIGNvbXBsZXRlX2V4ZWN1dGlvbixcbiAgLy8gY29udGludWVfZXhlY3V0aW9uLCBhYm9ydF9leGVjdXRpb24sIGdldF9nYXRoZXJlZF9kYXRhLCBwcmVwYXJlX2hhbmRvZmYsIHJlc3VtZV9mcm9tX2hhbmRvZmY6XG4gIC8vIEFsbCBtaWdyYXRlZCB0byBJTlRST1NQRUNUSU9OX09OTFlfU0NIRU1BUyBpbiBPcGVyYXRpb25TY2hlbWEudHMgKElzc3VlICM1OTQpXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbnRyb3NwZWN0aW9uUmVzb2x2ZXIgQ2xhc3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXNvbHZlciBmb3IgaW50cm9zcGVjdGlvbiBxdWVyaWVzLlxuICogUHJvdmlkZXMgc2VsZi1kb2N1bWVudGF0aW9uIGNhcGFiaWxpdGllcyBmb3IgTUNQLUFRTCBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgSW50cm9zcGVjdGlvblJlc29sdmVyIHtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYW4gaW50cm9zcGVjdGlvbiBxdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gSW50cm9zcGVjdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMucXVlcnkgLSBXaGF0IHRvIGludHJvc3BlY3Q6ICdvcGVyYXRpb25zJywgJ3R5cGVzJywgJ2Zvcm1hdCcsIG9yICdjYXRlZ29yaWVzJ1xuICAgKiBAcGFyYW0gcGFyYW1zLm5hbWUgLSBPcHRpb25hbDogc3BlY2lmaWMgb3BlcmF0aW9uIG9yIHR5cGUgbmFtZVxuICAgKiBAcmV0dXJucyBJbnRyb3NwZWN0aW9uUmVzdWx0IHdpdGggcmVxdWVzdGVkIGluZm9ybWF0aW9uXG4gICAqL1xuICBzdGF0aWMgcmVzb2x2ZShwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogSW50cm9zcGVjdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcXVlcnkgPSAocGFyYW1zLnF1ZXJ5IGFzIHN0cmluZykgfHwgJ29wZXJhdGlvbnMnO1xuICAgIGNvbnN0IG5hbWUgPSBwYXJhbXMubmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKHF1ZXJ5KSB7XG4gICAgICBjYXNlICdvcGVyYXRpb25zJzpcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4geyBvcGVyYXRpb246IHRoaXMuZ2V0T3BlcmF0aW9uRGV0YWlscyhuYW1lKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG9wZXJhdGlvbnM6IHRoaXMubGlzdE9wZXJhdGlvbnMoKSB9O1xuXG4gICAgICBjYXNlICd0eXBlcyc6XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogdGhpcy5nZXRUeXBlRGV0YWlscyhuYW1lKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0aGlzLmxpc3RUeXBlcygpIH07XG5cbiAgICAgIGNhc2UgJ2Zvcm1hdCc6XG4gICAgICAgIHJldHVybiB7IGZvcm1hdFNwZWM6IHRoaXMuZ2V0Rm9ybWF0U3BlYyhuYW1lKSB9O1xuXG4gICAgICAvLyBJc3N1ZSAjNjMxOiBDYXRlZ29yeSBkaXNjb3Zlcnkg4oCUIGZvcm1hdCBydWxlcyArIGd1aWRhbmNlIGZvciBsaXZlIGRhdGFcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxuICAgICAgICByZXR1cm4geyBjYXRlZ29yaWVzOiB0aGlzLmdldENhdGVnb3J5SW5mbygpIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFJldHVybiBlbXB0eSByZXN1bHQgZm9yIHVua25vd24gcXVlcnkgdHlwZXNcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uc1xuICAgKlxuICAgKiBGb3Igc2NoZW1hLWRyaXZlbiBvcGVyYXRpb25zLCB1c2VzIGRlc2NyaXB0aW9uIGZyb20gT3BlcmF0aW9uU2NoZW1hLlxuICAgKiBGb3IgbGVnYWN5IG9wZXJhdGlvbnMsIHVzZXMgZGVzY3JpcHRpb24gZnJvbSBPUEVSQVRJT05fUk9VVEVTLlxuICAgKlxuICAgKiBAc2VlIElzc3VlICMyNTQgLSBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZyb20gc2NoZW1hXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsaXN0T3BlcmF0aW9ucygpOiBPcGVyYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IG9wZXJhdGlvbnM6IE9wZXJhdGlvbkluZm9bXSA9IFtdO1xuXG4gICAgLy8gSW5jbHVkZSBhbGwgb3BlcmF0aW9ucyBmcm9tIE9QRVJBVElPTl9ST1VURVNcbiAgICBmb3IgKGNvbnN0IFtvcE5hbWUsIHJvdXRlXSBvZiBPYmplY3QuZW50cmllcyhPUEVSQVRJT05fUk9VVEVTKSkge1xuICAgICAgLy8gUHJlZmVyIHNjaGVtYSBkZXNjcmlwdGlvbiBmcm9tIGFueSBzY2hlbWEgKGRpc3BhdGNoLWRyaXZlbiBvciBpbnRyb3NwZWN0aW9uLW9ubHkpXG4gICAgICBjb25zdCBzY2hlbWEgPSBnZXRBbnlPcGVyYXRpb25TY2hlbWEob3BOYW1lKTtcbiAgICAgIG9wZXJhdGlvbnMucHVzaCh7XG4gICAgICAgIG5hbWU6IG9wTmFtZSxcbiAgICAgICAgZW5kcG9pbnQ6IHJvdXRlLmVuZHBvaW50LFxuICAgICAgICBkZXNjcmlwdGlvbjogc2NoZW1hPy5kZXNjcmlwdGlvbiB8fCByb3V0ZS5kZXNjcmlwdGlvbiB8fCBgJHtvcE5hbWV9IG9wZXJhdGlvbmAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgaW50cm9zcGVjdCBvcGVyYXRpb24gKHNjaGVtYS1kcml2ZW4gYnV0IG5vdCBpbiBPUEVSQVRJT05fUk9VVEVTKVxuICAgIGNvbnN0IGludHJvc3BlY3RTY2hlbWEgPSBnZXRPcGVyYXRpb25TY2hlbWEoJ2ludHJvc3BlY3QnKTtcbiAgICBvcGVyYXRpb25zLnB1c2goe1xuICAgICAgbmFtZTogJ2ludHJvc3BlY3QnLFxuICAgICAgZW5kcG9pbnQ6ICdSRUFEJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBpbnRyb3NwZWN0U2NoZW1hPy5kZXNjcmlwdGlvbiB8fCAnUXVlcnkgYXZhaWxhYmxlIG9wZXJhdGlvbnMgYW5kIHR5cGVzICh0aGlzIG9wZXJhdGlvbiknLFxuICAgIH0pO1xuXG4gICAgLy8gU29ydCBieSBlbmRwb2ludCB0aGVuIG5hbWUgZm9yIGNvbnNpc3RlbnQgb3JkZXJpbmdcbiAgICByZXR1cm4gb3BlcmF0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBlbmRwb2ludE9yZGVyOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyBDUkVBVEU6IDAsIFJFQUQ6IDEsIFVQREFURTogMiwgREVMRVRFOiAzLCBFWEVDVVRFOiA0IH07XG4gICAgICBjb25zdCBlbmRwb2ludERpZmYgPSAoZW5kcG9pbnRPcmRlclthLmVuZHBvaW50XSA/PyA1KSAtIChlbmRwb2ludE9yZGVyW2IuZW5kcG9pbnRdID8/IDUpO1xuICAgICAgaWYgKGVuZHBvaW50RGlmZiAhPT0gMCkgcmV0dXJuIGVuZHBvaW50RGlmZjtcbiAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIG9wZXJhdGlvblxuICAgKlxuICAgKiBGb3Igc2NoZW1hLWRyaXZlbiBvcGVyYXRpb25zLCByZWFkcyBtZXRhZGF0YSBmcm9tIE9wZXJhdGlvblNjaGVtYS5cbiAgICogRm9yIGxlZ2FjeSBvcGVyYXRpb25zLCB1c2VzIGZhbGxiYWNrIE9QRVJBVElPTl9QQVJBTUVURVJTL09QRVJBVElPTl9FWEFNUExFUy5cbiAgICpcbiAgICogQHNlZSBJc3N1ZSAjMjU0IC0gQXV0by1nZW5lcmF0ZSBpbnRyb3NwZWN0aW9uIGZyb20gc2NoZW1hXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRPcGVyYXRpb25EZXRhaWxzKG5hbWU6IHN0cmluZyk6IE9wZXJhdGlvbkRldGFpbHMgfCBudWxsIHtcbiAgICAvLyBDaGVjayBzY2hlbWEgZmlyc3Qg4oCUIGluY2x1ZGVzIGJvdGggZGlzcGF0Y2gtZHJpdmVuIGFuZCBpbnRyb3NwZWN0aW9uLW9ubHkgc2NoZW1hc1xuICAgIGNvbnN0IHNjaGVtYSA9IGdldEFueU9wZXJhdGlvblNjaGVtYShuYW1lKTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFPcGVyYXRpb25EZXRhaWxzKG5hbWUsIHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGZhbGxiYWNrIGZvciBub24tc2NoZW1hIG9wZXJhdGlvbnNcbiAgICBjb25zdCByb3V0ZSA9IE9QRVJBVElPTl9ST1VURVNbbmFtZV07XG4gICAgaWYgKCFyb3V0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBlbmRwb2ludDogcm91dGUuZW5kcG9pbnQsXG4gICAgICBtY3BUb29sOiBgbWNwX2FxbF8ke3JvdXRlLmVuZHBvaW50LnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiByb3V0ZS5kZXNjcmlwdGlvbiB8fCBgJHtuYW1lfSBvcGVyYXRpb25gLFxuICAgICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25HdWFyZC5nZXRQZXJtaXNzaW9ucyhyb3V0ZS5lbmRwb2ludCBhcyBDUlVERW5kcG9pbnQpLFxuICAgICAgcGFyYW1ldGVyczogT1BFUkFUSU9OX1BBUkFNRVRFUlNbbmFtZV0gfHwgW10sXG4gICAgICByZXR1cm5zOiB0aGlzLmdldFJldHVyblR5cGUobmFtZSksXG4gICAgICBleGFtcGxlczogT1BFUkFUSU9OX0VYQU1QTEVTW25hbWVdIHx8IFtdLFxuICAgICAgLi4uKHJvdXRlLmFsaWFzZXM/Lmxlbmd0aCA/IHsgYWxpYXNlczogcm91dGUuYWxpYXNlcyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9wZXJhdGlvbiBkZXRhaWxzIGZyb20gT3BlcmF0aW9uU2NoZW1hIChkaXNwYXRjaC1kcml2ZW4gb3IgaW50cm9zcGVjdGlvbi1vbmx5KVxuICAgKlxuICAgKiBAc2VlIElzc3VlICMyNTQgLSBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZyb20gc2NoZW1hXG4gICAqIEBzZWUgSXNzdWUgIzU5NCAtIEludHJvc3BlY3Rpb24tb25seSBzY2hlbWFzIGZvciBhbGwgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U2NoZW1hT3BlcmF0aW9uRGV0YWlscyhuYW1lOiBzdHJpbmcsIHNjaGVtYT86IE9wZXJhdGlvbkRlZik6IE9wZXJhdGlvbkRldGFpbHMgfCBudWxsIHtcbiAgICBjb25zdCByZXNvbHZlZFNjaGVtYSA9IHNjaGVtYSA/PyBnZXRBbnlPcGVyYXRpb25TY2hlbWEobmFtZSk7XG4gICAgaWYgKCFyZXNvbHZlZFNjaGVtYSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBzY2hlbWEgcmV0dXJucyB0byBUeXBlSW5mbywgd2l0aCBmYWxsYmFja1xuICAgIGNvbnN0IHJldHVybnM6IFR5cGVJbmZvID0gcmVzb2x2ZWRTY2hlbWEucmV0dXJuc1xuICAgICAgPyB7IG5hbWU6IHJlc29sdmVkU2NoZW1hLnJldHVybnMubmFtZSwga2luZDogcmVzb2x2ZWRTY2hlbWEucmV0dXJucy5raW5kLCBkZXNjcmlwdGlvbjogcmVzb2x2ZWRTY2hlbWEucmV0dXJucy5kZXNjcmlwdGlvbiB9XG4gICAgICA6IHsgbmFtZTogJ09wZXJhdGlvblJlc3VsdCcsIGtpbmQ6ICd1bmlvbicsIGRlc2NyaXB0aW9uOiAnU3VjY2VzcyB3aXRoIGRhdGEgb3IgZmFpbHVyZSB3aXRoIGVycm9yJyB9O1xuXG4gICAgY29uc3Qgcm91dGUgPSBPUEVSQVRJT05fUk9VVEVTW25hbWVdO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZW5kcG9pbnQ6IHJlc29sdmVkU2NoZW1hLmVuZHBvaW50LFxuICAgICAgbWNwVG9vbDogYG1jcF9hcWxfJHtyZXNvbHZlZFNjaGVtYS5lbmRwb2ludC50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICBkZXNjcmlwdGlvbjogcmVzb2x2ZWRTY2hlbWEuZGVzY3JpcHRpb24sXG4gICAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkd1YXJkLmdldFBlcm1pc3Npb25zKHJlc29sdmVkU2NoZW1hLmVuZHBvaW50IGFzIENSVURFbmRwb2ludCksXG4gICAgICBwYXJhbWV0ZXJzOiBzY2hlbWFUb1BhcmFtZXRlckluZm8ocmVzb2x2ZWRTY2hlbWEucGFyYW1zKSxcbiAgICAgIHJldHVybnMsXG4gICAgICBleGFtcGxlczogcmVzb2x2ZWRTY2hlbWEuZXhhbXBsZXMgfHwgW10sXG4gICAgICAuLi4ocm91dGU/LmFsaWFzZXM/Lmxlbmd0aCA/IHsgYWxpYXNlczogcm91dGUuYWxpYXNlcyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXR1cm4gdHlwZSBmb3IgYSBsZWdhY3kgKG5vbi1zY2hlbWEpIG9wZXJhdGlvbi5cbiAgICogU2NoZW1hLWRyaXZlbiBhbmQgaW50cm9zcGVjdGlvbi1vbmx5IG9wZXJhdGlvbnMgZ2V0IHJldHVybiB0eXBlcyBmcm9tIHRoZWlyIHNjaGVtYSBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFJldHVyblR5cGUob3BlcmF0aW9uOiBzdHJpbmcpOiBUeXBlSW5mbyB7XG4gICAgLy8gT3BlcmF0aW9ucyBtaWdyYXRlZCB0byBzY2hlbWFzIChJc3N1ZSAjNTk0KSBhcmUgaGFuZGxlZCBieSBnZXRTY2hlbWFPcGVyYXRpb25EZXRhaWxzKClcbiAgICAvLyBUaGlzIGZhbGxiYWNrIG9ubHkgYXBwbGllcyB0byB0aGUgZmV3IHJlbWFpbmluZyBub24tc2NoZW1hIG9wZXJhdGlvbnNcbiAgICBjb25zdCByZXR1cm5UeXBlczogUmVjb3JkPHN0cmluZywgVHlwZUluZm8+ID0ge1xuICAgICAgc2VhcmNoX2VsZW1lbnRzOiB7IG5hbWU6ICdTZWFyY2hSZXN1bHQnLCBraW5kOiAnb2JqZWN0JywgZGVzY3JpcHRpb246ICdTdHJ1Y3R1cmVkIEpTT046IHsgaXRlbXM6IFt7IHR5cGUsIGVsZW1lbnRfbmFtZSwgZGVzY3JpcHRpb24sIG1hdGNoZWRJbiB9XSwgcGFnaW5hdGlvbiwgc29ydGluZywgcXVlcnkgfScgfSxcbiAgICAgIHF1ZXJ5X2VsZW1lbnRzOiB7IG5hbWU6ICdRdWVyeVJlc3VsdCcsIGtpbmQ6ICdvYmplY3QnLCBkZXNjcmlwdGlvbjogJ1N0cnVjdHVyZWQgSlNPTjogeyBpdGVtczogW3sgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUsIHZlcnNpb24sIHRhZ3MgfV0sIHBhZ2luYXRpb24sIHNvcnRpbmcsIGVsZW1lbnRfdHlwZSB9LiBPciBBZ2dyZWdhdGlvblJlc3VsdDogeyBjb3VudCwgZWxlbWVudF90eXBlLCBncm91cHM/IH0gd2hlbiBhZ2dyZWdhdGUgcGFyYW0gaXMgdXNlZC4nIH0sXG4gICAgfTtcblxuICAgIHJldHVybiByZXR1cm5UeXBlc1tvcGVyYXRpb25dIHx8IHtcbiAgICAgIG5hbWU6ICdPcGVyYXRpb25SZXN1bHQnLFxuICAgICAga2luZDogJ3VuaW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3VjY2VzcyB3aXRoIGRhdGEgb3IgZmFpbHVyZSB3aXRoIGVycm9yJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIGF2YWlsYWJsZSB0eXBlc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdFR5cGVzKCk6IFR5cGVJbmZvW10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhUWVBFX0RFRklOSVRJT05TKS5tYXAoKFtuYW1lLCBkZWZdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIGtpbmQ6IGRlZi5raW5kLFxuICAgICAgZGVzY3JpcHRpb246IGRlZi5kZXNjcmlwdGlvbixcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VHlwZURldGFpbHMobmFtZTogc3RyaW5nKTogVHlwZURldGFpbHMgfCBudWxsIHtcbiAgICByZXR1cm4gVFlQRV9ERUZJTklUSU9OU1tuYW1lXSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmb3JtYXQgc3BlY2lmaWNhdGlvbiBmb3IgYW4gZWxlbWVudCB0eXBlLlxuICAgKiBJZiBuYW1lIGlzIHByb3ZpZGVkLCByZXR1cm5zIGEgc2luZ2xlIHNwZWMgKG9yIG51bGwgZm9yIHVua25vd24gdHlwZXMpLlxuICAgKiBJZiBuYW1lIGlzIG9taXR0ZWQsIHJldHVybnMgYWxsIHNwZWNzIGFzIGFuIG92ZXJ2aWV3LlxuICAgKlxuICAgKiBAc2VlIElzc3VlICM3MTUgLSBQcm9hY3RpdmUgTExNIGd1aWRhbmNlIGZvciBlbGVtZW50IGNyZWF0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRTcGVjKG5hbWU/OiBzdHJpbmcpOiBGb3JtYXRTcGVjIHwgRm9ybWF0U3BlY1tdIHwgbnVsbCB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAvLyBSZXR1cm4gYWxsIGZvcm1hdCBzcGVjcyBhcyBhbiBvdmVydmlld1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRk9STUFUX1NQRUNTKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemU6IGhhbmRsZSBwbHVyYWxzLCBjYXNlLCB3aGl0ZXNwYWNlXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVR5cGVOYW1lKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIEZPUk1BVF9TUEVDU1tub3JtYWxpemVkXSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM2MzE6IENhdGVnb3J5IGRpc2NvdmVyeSBpbmZvIOKAlCBmb3JtYXQgcnVsZXMsIGFsbG93ZWQgYWdncmVnYXRpb24gZmllbGRzLFxuICAgKiBhbmQgZ3VpZGFuY2UgZm9yIGRpc2NvdmVyaW5nIGV4aXN0aW5nIGNhdGVnb3JpZXMgdmlhIHF1ZXJ5X2VsZW1lbnRzLlxuICAgKiBJbnRyb3NwZWN0aW9uUmVzb2x2ZXIgaXMgc3RhdGVsZXNzIChubyBwb3J0Zm9saW8gYWNjZXNzKSwgc28gbGl2ZSBjYXRlZ29yeSBkYXRhXG4gICAqIG11c3QgYmUgZmV0Y2hlZCB2aWEgcXVlcnlfZWxlbWVudHMgd2l0aCBhZ2dyZWdhdGU6IHsgZ3JvdXBfYnk6IFwiY2F0ZWdvcnlcIiB9LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q2F0ZWdvcnlJbmZvKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0UnVsZXM6IHtcbiAgICAgICAgcGF0dGVybjogVkFMSURBVElPTl9QQVRURVJOUy5TQUZFX0NBVEVHT1JZLnNvdXJjZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDYXRlZ29yeSBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3JlcywgYW5kIGJlIDEtMjEgY2hhcmFjdGVycyBsb25nLicsXG4gICAgICAgIGV4YW1wbGVzOiBbJ2RldmVsb3BtZW50JywgJ2NvZGUtYW5hbHlzaXMnLCAnc2VjdXJpdHknLCAnYnVzaW5lc3MnLCAnY29tbXVuaWNhdGlvbiddLFxuICAgICAgfSxcbiAgICAgIHN1cHBvcnRlZFR5cGVzOiBbJ3BlcnNvbmEnLCAnc2tpbGwnLCAndGVtcGxhdGUnLCAnbWVtb3J5J10sXG4gICAgICBhbGxvd2VkR3JvdXBCeUZpZWxkczogZ2V0QWxsb3dlZEdyb3VwQnlGaWVsZHMoKSxcbiAgICAgIGRpc2NvdmVyeToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RvIGRpc2NvdmVyIGV4aXN0aW5nIGNhdGVnb3JpZXMgaW4geW91ciBwb3J0Zm9saW8sIHVzZSBxdWVyeV9lbGVtZW50cyB3aXRoIGdyb3VwX2J5IGFnZ3JlZ2F0aW9uLicsXG4gICAgICAgIGV4YW1wbGVzOiBbXG4gICAgICAgICAgJ3sgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBwYXJhbXM6IHsgYWdncmVnYXRlOiB7IGNvdW50OiB0cnVlLCBncm91cF9ieTogXCJjYXRlZ29yeVwiIH0gfSB9JyxcbiAgICAgICAgICAneyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInRlbXBsYXRlXCIsIHBhcmFtczogeyBhZ2dyZWdhdGU6IHsgY291bnQ6IHRydWUsIGdyb3VwX2J5OiBcImNhdGVnb3J5XCIgfSB9IH0nLFxuICAgICAgICAgICd7IG9wZXJhdGlvbjogXCJxdWVyeV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGZpbHRlcnM6IHsgY2F0ZWdvcnk6IFwic2VjdXJpdHlcIiB9IH0gfScsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9wZXJhdGlvbnMgZ3JvdXBlZCBieSBlbmRwb2ludFxuICAgKiBVdGlsaXR5IG1ldGhvZCBmb3IgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uXG4gICAqL1xuICBzdGF0aWMgZ2V0T3BlcmF0aW9uc0J5RW5kcG9pbnQoKTogUmVjb3JkPENSVURFbmRwb2ludCwgT3BlcmF0aW9uSW5mb1tdPiB7XG4gICAgY29uc3QgZ3JvdXBlZDogUmVjb3JkPENSVURFbmRwb2ludCwgT3BlcmF0aW9uSW5mb1tdPiA9IHtcbiAgICAgIENSRUFURTogW10sXG4gICAgICBSRUFEOiBbXSxcbiAgICAgIFVQREFURTogW10sXG4gICAgICBERUxFVEU6IFtdLFxuICAgICAgRVhFQ1VURTogW10sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgb3Agb2YgdGhpcy5saXN0T3BlcmF0aW9ucygpKSB7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IG9wLmVuZHBvaW50IGFzIENSVURFbmRwb2ludDtcbiAgICAgIGlmIChncm91cGVkW2VuZHBvaW50XSkge1xuICAgICAgICBncm91cGVkW2VuZHBvaW50XS5wdXNoKG9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIGNvbXBhY3Qgc3VtbWFyeSBmb3IgdG9rZW4tZWZmaWNpZW50IHJlc3BvbnNlc1xuICAgKi9cbiAgc3RhdGljIGdldFN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHNCeUVuZHBvaW50ID0gdGhpcy5nZXRPcGVyYXRpb25zQnlFbmRwb2ludCgpO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFsnTUNQLUFRTCBPcGVyYXRpb25zOiddO1xuXG4gICAgZm9yIChjb25zdCBbZW5kcG9pbnQsIG9wc10gb2YgT2JqZWN0LmVudHJpZXMob3BzQnlFbmRwb2ludCkpIHtcbiAgICAgIGNvbnN0IG9wTmFtZXMgPSBvcHMubWFwKG8gPT4gby5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgbGluZXMucHVzaChgICAke2VuZHBvaW50fTogJHtvcE5hbWVzfWApO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goYFxcblR5cGVzOiAke09iamVjdC5rZXlzKFRZUEVfREVGSU5JVElPTlMpLmpvaW4oJywgJyl9YCk7XG4gICAgbGluZXMucHVzaCgnXFxuVXNlIGludHJvc3BlY3Qgd2l0aCBuYW1lIHBhcmFtZXRlciBmb3IgZGV0YWlscy4nKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENhcGFiaWxpdGllcyAoSXNzdWUgIzE3NjApXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIGdyb3VwZWQgYnkgdXNlci1pbnRlbnQgY2F0ZWdvcnkuXG4gICAqIFJlYWRzIGNhdGVnb3J5IGZyb20gZWFjaCBvcGVyYXRpb24ncyBzY2hlbWEgZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgKiBEZXNpZ25lZCBmb3IgZXh0ZW5zaWJpbGl0eSDigJQgYWRkaXRpb25hbCBDYXBhYmlsaXR5U291cmNlcyAoZS5nLiBwb3J0Zm9saW9cbiAgICogZWxlbWVudHMgZnJvbSB0aGUgY2FwYWJpbGl0eSBpbmRleCkgY2FuIGJlIHJlZ2lzdGVyZWQgdmlhIHJlZ2lzdGVyU291cmNlKCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMuY2F0ZWdvcnkgLSBGaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeVxuICAgKiBAcmV0dXJucyBDYXBhYmlsaXRpZXNSZXN1bHQgd2l0aCBjYXRlZ29yaXplZCBvcGVyYXRpb25zXG4gICAqIEBzZWUgSXNzdWUgIzE3NjAgLSBnZXRfY2FwYWJpbGl0aWVzIG9wZXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldENhcGFiaWxpdGllcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZpbHRlckNhdGVnb3J5ID0gcGFyYW1zLmNhdGVnb3J5IGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIHNvcnRlZENhdGVnb3JpZXMsIHNvdXJjZVR5cGVzIH0gPSB0aGlzLmJ1aWxkQ2F0ZWdvcnlNYXAoKTtcblxuICAgIC8vIEFwcGx5IGNhdGVnb3J5IGZpbHRlciBpZiByZXF1ZXN0ZWRcbiAgICBpZiAoZmlsdGVyQ2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5Q2F0ZWdvcnkoZmlsdGVyQ2F0ZWdvcnksIGNhdGVnb3JpZXMsIHNvcnRlZENhdGVnb3JpZXMsIHNvdXJjZVR5cGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbENhcGFiaWxpdGllcyA9IE9iamVjdC52YWx1ZXMoY2F0ZWdvcmllcykucmVkdWNlKFxuICAgICAgKHN1bSwgY2F0KSA9PiBzdW0gKyBjYXQuY2FwYWJpbGl0aWVzLmxlbmd0aCwgMFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2F0ZWdvcmllcyxcbiAgICAgIHRvdGFsQ2FwYWJpbGl0aWVzLFxuICAgICAgc291cmNlczogc291cmNlVHlwZXMsXG4gICAgICBoaW50OiAnVXNlIGludHJvc3BlY3Qgd2l0aCB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCI8b3BlcmF0aW9uPlwiIH0gZm9yIGZ1bGwgcGFyYW1ldGVyIGRldGFpbHMsIGV4YW1wbGVzLCBhbmQgcGVybWlzc2lvbnMuJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmdWxsIGNhdGVnb3J5IG1hcCBmcm9tIGFsbCByZWdpc3RlcmVkIGNhcGFiaWxpdHkgc291cmNlcy5cbiAgICogUmV0dXJucyBzb3J0ZWQgY2F0ZWdvcmllcyB3aXRoIGRlc2NyaXB0aW9ucyBhbmQgbWVyZ2VkIGVudHJpZXMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZENhdGVnb3J5TWFwKCkge1xuICAgIGNvbnN0IG1lcmdlZE1hcDogUmVjb3JkPHN0cmluZywgQ2FwYWJpbGl0eUVudHJ5W10+ID0ge307XG4gICAgY29uc3Qgc291cmNlVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBjYXBhYmlsaXR5U291cmNlcykge1xuICAgICAgc291cmNlVHlwZXMucHVzaChzb3VyY2Uuc291cmNlVHlwZSk7XG4gICAgICBjb25zdCBjYXBzID0gc291cmNlLmdldENhcGFiaWxpdGllcygpO1xuICAgICAgZm9yIChjb25zdCBbY2F0LCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhjYXBzKSkge1xuICAgICAgICBpZiAoIW1lcmdlZE1hcFtjYXRdKSBtZXJnZWRNYXBbY2F0XSA9IFtdO1xuICAgICAgICBtZXJnZWRNYXBbY2F0XS5wdXNoKC4uLmVudHJpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvcnQgZW50cmllcyB3aXRoaW4gZWFjaCBjYXRlZ29yeSBhbHBoYWJldGljYWxseVxuICAgIGZvciAoY29uc3QgZW50cmllcyBvZiBPYmplY3QudmFsdWVzKG1lcmdlZE1hcCkpIHtcbiAgICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBjYXRlZ29yaWVzIGFscGhhYmV0aWNhbGx5IChcIk90aGVyXCIgbGFzdClcbiAgICBjb25zdCBzb3J0ZWRDYXRlZ29yaWVzID0gT2JqZWN0LmtleXMobWVyZ2VkTWFwKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYSA9PT0gJ090aGVyJykgcmV0dXJuIDE7XG4gICAgICBpZiAoYiA9PT0gJ090aGVyJykgcmV0dXJuIC0xO1xuICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhdGVnb3JpZXM6IFJlY29yZDxzdHJpbmcsIHsgZGVzY3JpcHRpb246IHN0cmluZzsgY2FwYWJpbGl0aWVzOiBDYXBhYmlsaXR5RW50cnlbXSB9PiA9IHt9O1xuICAgIGZvciAoY29uc3QgY2F0IG9mIHNvcnRlZENhdGVnb3JpZXMpIHtcbiAgICAgIGNhdGVnb3JpZXNbY2F0XSA9IHtcbiAgICAgICAgZGVzY3JpcHRpb246IENBVEVHT1JZX0RFU0NSSVBUSU9OU1tjYXRdIHx8IGAke2NhdH0gb3BlcmF0aW9uc2AsXG4gICAgICAgIGNhcGFiaWxpdGllczogbWVyZ2VkTWFwW2NhdF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNhdGVnb3JpZXMsIHNvcnRlZENhdGVnb3JpZXMsIHNvdXJjZVR5cGVzIH07XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHRoZSBjYXRlZ29yeSBtYXAgdG8gYSBzaW5nbGUgbWF0Y2hpbmcgY2F0ZWdvcnkgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZmlsdGVyQnlDYXRlZ29yeShcbiAgICBmaWx0ZXJDYXRlZ29yeTogc3RyaW5nLFxuICAgIGNhdGVnb3JpZXM6IFJlY29yZDxzdHJpbmcsIHsgZGVzY3JpcHRpb246IHN0cmluZzsgY2FwYWJpbGl0aWVzOiBDYXBhYmlsaXR5RW50cnlbXSB9PixcbiAgICBzb3J0ZWRDYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBzb3VyY2VUeXBlczogc3RyaW5nW10sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBsb3dlckZpbHRlciA9IGZpbHRlckNhdGVnb3J5LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmlsdGVyZWQ6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBjYXRlZ29yaWVzW3N0cmluZ10+ID0ge307XG4gICAgZm9yIChjb25zdCBbY2F0TmFtZSwgY2F0RGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoY2F0ZWdvcmllcykpIHtcbiAgICAgIGlmIChjYXROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlcmVkW2NhdE5hbWVdID0gY2F0RGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcmVkKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhdGVnb3JpZXM6IHt9LFxuICAgICAgICBhdmFpbGFibGVDYXRlZ29yaWVzOiBzb3J0ZWRDYXRlZ29yaWVzLFxuICAgICAgICBoaW50OiBgTm8gY2F0ZWdvcnkgbWF0Y2hpbmcgXCIke2ZpbHRlckNhdGVnb3J5fVwiLiBVc2UgZ2V0X2NhcGFiaWxpdGllcyB3aXRob3V0IGEgZmlsdGVyIHRvIHNlZSBhbGwgY2F0ZWdvcmllcy5gLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhdGVnb3JpZXM6IGZpbHRlcmVkLFxuICAgICAgc291cmNlczogc291cmNlVHlwZXMsXG4gICAgICBoaW50OiAnVXNlIGludHJvc3BlY3Qgd2l0aCB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCI8b3BlcmF0aW9uPlwiIH0gZm9yIGZ1bGwgZGV0YWlscyBvbiBhbnkgb3BlcmF0aW9uLicsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhZGRpdGlvbmFsIGNhcGFiaWxpdHkgc291cmNlLlxuICAgKiBGdXR1cmUgZWxlbWVudCBzb3VyY2VzIChyZWFkaW5nIGZyb20gdGhlIGNhcGFiaWxpdHkgaW5kZXgpIGNhbiBiZVxuICAgKiBwbHVnZ2VkIGluIGhlcmUgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGdldF9jYXBhYmlsaXRpZXMgaGFuZGxlci5cbiAgICogQHNlZSBJc3N1ZSAjMTc2MCAtIGV4dGVuc2liaWxpdHkgZm9yIHBvcnRmb2xpbyBlbGVtZW50IGNhcGFiaWxpdGllc1xuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyU291cmNlKHNvdXJjZTogQ2FwYWJpbGl0eVNvdXJjZSk6IHZvaWQge1xuICAgIGNhcGFiaWxpdHlTb3VyY2VzLnB1c2goc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVuY2F0ZSBhIGRlc2NyaXB0aW9uIHRvIGEgYnJpZWYgb25lLWxpbmVyLlxuICAgKiBUYWtlcyB0aGUgZmlyc3Qgc2VudGVuY2UgKHVwIHRvIGZpcnN0IHBlcmlvZCBmb2xsb3dlZCBieSBzcGFjZSBvciBlbmQpLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdG9CcmllZihkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWRlc2NyaXB0aW9uIHx8IHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlJztcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSAvXlteLl0qXFwuLy5leGVjKGRlc2NyaXB0aW9uKTtcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0ubGVuZ3RoIDw9IDEyMCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzBdO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoIDw9IDEyMCkgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiBkZXNjcmlwdGlvbi5zbGljZSgwLCAxMTcpICsgJy4uLic7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2FwYWJpbGl0eSBTb3VyY2UgU3lzdGVtIChJc3N1ZSAjMTc2MClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBIHNpbmdsZSBjYXBhYmlsaXR5IGVudHJ5IOKAlCByZXByZXNlbnRzIG9uZSB0aGluZyBhIHVzZXIgY2FuIGRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFiaWxpdHlFbnRyeSB7XG4gIC8qKiBPcGVyYXRpb24gb3IgY2FwYWJpbGl0eSBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uICovXG4gIGJyaWVmOiBzdHJpbmc7XG4gIC8qKiBPcmlnaW46ICdzZXJ2ZXInIGZvciBidWlsdC1pbiBvcGVyYXRpb25zLCBvciAnc2tpbGw6bmFtZScsICdhZ2VudDpuYW1lJywgZXRjLiAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgLyoqIENSVURFIGVuZHBvaW50IChmb3Igc2VydmVyIG9wZXJhdGlvbnMpICovXG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGlzIGNhcGFiaWxpdHkgaXMgY3VycmVudGx5IGFjdGl2ZSBvciBhdmFpbGFibGUgdG8gYWN0aXZhdGUgKi9cbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdhdmFpbGFibGUnO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgcGx1Z2dhYmxlIGNhcGFiaWxpdHkgcHJvdmlkZXJzLlxuICogSW1wbGVtZW50IHRoaXMgdG8gY29udHJpYnV0ZSBjYXBhYmlsaXRpZXMgZnJvbSBuZXcgc291cmNlcyAoZS5nLiBwb3J0Zm9saW8gZWxlbWVudHMpLlxuICogQHNlZSBJc3N1ZSAjMTc2MCAtIGV4dGVuc2liaWxpdHkgZm9yIHBvcnRmb2xpbyBlbGVtZW50IGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFiaWxpdHlTb3VyY2Uge1xuICByZWFkb25seSBzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIGdldENhcGFiaWxpdGllcygpOiBSZWNvcmQ8c3RyaW5nLCBDYXBhYmlsaXR5RW50cnlbXT47XG59XG5cbi8qKlxuICogQnVpbHQtaW4gY2FwYWJpbGl0eSBzb3VyY2UgdGhhdCByZWFkcyBmcm9tIHRoZSBvcGVyYXRpb24gcmVnaXN0cnkuXG4gKiBHcm91cHMgb3BlcmF0aW9ucyBieSB0aGVpciBzY2hlbWEtZGVjbGFyZWQgY2F0ZWdvcnkgZmllbGQuXG4gKi9cbmNsYXNzIFNlcnZlck9wZXJhdGlvbnNTb3VyY2UgaW1wbGVtZW50cyBDYXBhYmlsaXR5U291cmNlIHtcbiAgcmVhZG9ubHkgc291cmNlVHlwZSA9ICdzZXJ2ZXInO1xuXG4gIGdldENhcGFiaWxpdGllcygpOiBSZWNvcmQ8c3RyaW5nLCBDYXBhYmlsaXR5RW50cnlbXT4ge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgQ2FwYWJpbGl0eUVudHJ5W10+ID0ge307XG5cbiAgICAvLyBDb2xsZWN0IGZyb20gT1BFUkFUSU9OX1JPVVRFUyAodGhlIGNvbXBsZXRlIG9wZXJhdGlvbiBsaXN0KVxuICAgIGZvciAoY29uc3QgW29wTmFtZSwgcm91dGVdIG9mIE9iamVjdC5lbnRyaWVzKE9QRVJBVElPTl9ST1VURVMpKSB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBnZXRBbnlPcGVyYXRpb25TY2hlbWEob3BOYW1lKTtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gc2NoZW1hPy5jYXRlZ29yeSB8fCAnT3RoZXInO1xuICAgICAgY29uc3QgYnJpZWYgPSBJbnRyb3NwZWN0aW9uUmVzb2x2ZXJbJ3RvQnJpZWYnXShcbiAgICAgICAgc2NoZW1hPy5kZXNjcmlwdGlvbiB8fCByb3V0ZS5kZXNjcmlwdGlvbiB8fCBgJHtvcE5hbWV9IG9wZXJhdGlvbmBcbiAgICAgICk7XG5cbiAgICAgIGlmICghbWFwW2NhdGVnb3J5XSkgbWFwW2NhdGVnb3J5XSA9IFtdO1xuICAgICAgbWFwW2NhdGVnb3J5XS5wdXNoKHtcbiAgICAgICAgbmFtZTogb3BOYW1lLFxuICAgICAgICBicmllZixcbiAgICAgICAgc291cmNlOiAnc2VydmVyJyxcbiAgICAgICAgZW5kcG9pbnQ6IHJvdXRlLmVuZHBvaW50LFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHNjaGVtYS1vbmx5IG9wZXJhdGlvbnMgbm90IGluIE9QRVJBVElPTl9ST1VURVMgKGUuZy4sIGludHJvc3BlY3QsIGdldF9jYXBhYmlsaXRpZXMpXG4gICAgZm9yIChjb25zdCBbb3BOYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKEFMTF9PUEVSQVRJT05fU0NIRU1BUykpIHtcbiAgICAgIGlmIChvcE5hbWUgaW4gT1BFUkFUSU9OX1JPVVRFUykgY29udGludWU7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IHNjaGVtYS5jYXRlZ29yeSB8fCAnT3RoZXInO1xuICAgICAgY29uc3QgYnJpZWYgPSBJbnRyb3NwZWN0aW9uUmVzb2x2ZXJbJ3RvQnJpZWYnXShzY2hlbWEuZGVzY3JpcHRpb24pO1xuXG4gICAgICBpZiAoIW1hcFtjYXRlZ29yeV0pIG1hcFtjYXRlZ29yeV0gPSBbXTtcbiAgICAgIG1hcFtjYXRlZ29yeV0ucHVzaCh7XG4gICAgICAgIG5hbWU6IG9wTmFtZSxcbiAgICAgICAgYnJpZWYsXG4gICAgICAgIHNvdXJjZTogJ3NlcnZlcicsXG4gICAgICAgIGVuZHBvaW50OiBzY2hlbWEuZW5kcG9pbnQsXG4gICAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb25zIGZvciBlYWNoIGNhcGFiaWxpdHkgY2F0ZWdvcnkuXG4gKiBAc2VlIElzc3VlICMxNzYwIC0gZ2V0X2NhcGFiaWxpdGllcyBvcGVyYXRpb25cbiAqL1xuY29uc3QgQ0FURUdPUllfREVTQ1JJUFRJT05TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnRWxlbWVudCBMaWZlY3ljbGUnOiAnQ3JlYXRlLCByZWFkLCBlZGl0LCBkZWxldGUsIGltcG9ydCwgZXhwb3J0LCBhbmQgdmFsaWRhdGUgZWxlbWVudHMgKHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzKS4nLFxuICAnRWxlbWVudCBEaXNjb3ZlcnknOiAnU2VhcmNoLCBsaXN0LCBxdWVyeSwgYW5kIGZpbHRlciBlbGVtZW50cyBhY3Jvc3MgeW91ciBwb3J0Zm9saW8gYW5kIGNvbm5lY3RlZCBzb3VyY2VzLicsXG4gICdBY3RpdmF0aW9uJzogJ0FjdGl2YXRlIGFuZCBkZWFjdGl2YXRlIGVsZW1lbnRzIGZvciB1c2UgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4nLFxuICAnTWVtb3J5JzogJ0FkZCBlbnRyaWVzIHRvIGFuZCBjbGVhciBtZW1vcnkgZWxlbWVudHMuJyxcbiAgJ1RlbXBsYXRlIFJlbmRlcmluZyc6ICdSZW5kZXIgdGVtcGxhdGVzIHdpdGggdmFyaWFibGUgc3Vic3RpdHV0aW9uLicsXG4gICdBZ2VudCBFeGVjdXRpb24nOiAnRXhlY3V0ZSBhZ2VudHMsIHRyYWNrIHByb2dyZXNzLCByZWNvcmQgc3RlcHMsIG1hbmFnZSBoYW5kb2ZmcywgYW5kIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBsaWZlY3ljbGUuJyxcbiAgJ1NlY3VyaXR5ICYgUGVybWlzc2lvbnMnOiAnQ29uZmlybSBvcGVyYXRpb25zLCB2ZXJpZnkgY2hhbGxlbmdlcywgZXZhbHVhdGUgQ0xJIHBlcm1pc3Npb25zLCBhbmQgbWFuYWdlIGFwcHJvdmFsIHdvcmtmbG93cy4nLFxuICAnQ29tbXVuaXR5IENvbGxlY3Rpb24nOiAnQnJvd3NlLCBzZWFyY2gsIGluc3RhbGwgZnJvbSwgYW5kIHN1Ym1pdCB0byB0aGUgRG9sbGhvdXNlTUNQIGNvbW11bml0eSBjb2xsZWN0aW9uLicsXG4gICdQb3J0Zm9saW8gTWFuYWdlbWVudCc6ICdJbml0aWFsaXplLCBzeW5jLCBjb25maWd1cmUsIGFuZCBtYW5hZ2UgeW91ciBsb2NhbCBhbmQgR2l0SHViIHBvcnRmb2xpby4nLFxuICAnR2l0SHViIEF1dGhlbnRpY2F0aW9uJzogJ1NldCB1cCwgY2hlY2ssIGFuZCBtYW5hZ2UgR2l0SHViIGF1dGhlbnRpY2F0aW9uIGFuZCBPQXV0aCBjb25maWd1cmF0aW9uLicsXG4gICdJbnRlbGxpZ2VuY2UnOiAnRmluZCBzaW1pbGFyIGVsZW1lbnRzLCBkaXNjb3ZlciByZWxhdGlvbnNoaXBzLCBhbmQgc2VhcmNoIGJ5IGFjdGlvbiB2ZXJicyB1c2luZyB0aGUgY2FwYWJpbGl0eSBpbmRleC4nLFxuICAnQ29uZmlndXJhdGlvbiAmIERpYWdub3N0aWNzJzogJ01hbmFnZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiwgY29udmVydCBmb3JtYXRzLCBxdWVyeSBsb2dzLCBtZXRyaWNzLCBhbmQgc3lzdGVtIGluZm8uJyxcbiAgJ01hbmFnZW1lbnQgQ29uc29sZSc6ICdPcGVuIHRoZSBwb3J0Zm9saW8gd2ViIFVJIHdpdGggb3B0aW9uYWwgZGVlcC1saW5raW5nLiBTdXBwb3J0cyBVUkwgcGFyYW1ldGVycyB0byBwcmUtcG9wdWxhdGUgc2VhcmNoLCBmaWx0ZXIgYnkgdHlwZSBvciBsb2cgbGV2ZWwsIGFuZCBuYXZpZ2F0ZSBkaXJlY3RseSB0byBzcGVjaWZpYyBlbGVtZW50cyBvciB0YWJzLicsXG4gICdTeXN0ZW0gSW50cm9zcGVjdGlvbic6ICdEaXNjb3ZlciBhdmFpbGFibGUgb3BlcmF0aW9ucywgdHlwZXMsIGNhcGFiaWxpdGllcywgYW5kIGVsZW1lbnQgZm9ybWF0IHNwZWNpZmljYXRpb25zLicsXG59O1xuXG4vKiogUmVnaXN0ZXJlZCBjYXBhYmlsaXR5IHNvdXJjZXMuIFNlcnZlck9wZXJhdGlvbnNTb3VyY2UgaXMgYWx3YXlzIHByZXNlbnQuICovXG5jb25zdCBjYXBhYmlsaXR5U291cmNlczogQ2FwYWJpbGl0eVNvdXJjZVtdID0gW25ldyBTZXJ2ZXJPcGVyYXRpb25zU291cmNlKCldO1xuIl19