@hestia-earth/ui-components 0.23.2 → 0.23.3
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.
- package/esm2022/files/files-error.model.mjs +7 -7
- package/esm2022/node/node-logs-models/node-logs-models.component.mjs +18 -3
- package/esm2022/node/node-value-details/node-value-details.component.mjs +2 -1
- package/fesm2022/hestia-earth-ui-components.mjs +24 -8
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/files/files-error.model.d.ts +3 -2
- package/node/node-logs-models/node-logs-models.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -222,9 +222,9 @@ const customErrorMessage = {
|
|
|
222
222
|
If you are able to use a more specific region or smaller boundary, please do.`,
|
|
223
223
|
'an excreta input is required when using an excretaManagement practice': ({ dataPath }) => {
|
|
224
224
|
const paths = parseDataPath(dataPath);
|
|
225
|
-
return `Excreta management is the conversion of excreta to another type of excreta.
|
|
226
|
-
You have added an excretaManagement Practice to this ${paths[0].label} but there is no excreta Input.
|
|
227
|
-
To represent excreta management, use a ${paths[0].label} with excreta as an Input and excretaManagement as a Practice.`;
|
|
225
|
+
return `Excreta management is the conversion of excreta to any type of product (e.g., another type of excreta or organic fertiliser).
|
|
226
|
+
You have added an ${code('excretaManagement')} Practice to this ${paths[0].label} but there is no excreta Input.
|
|
227
|
+
To represent excreta management, use a ${paths[0].label} with excreta as an Input and ${code('excretaManagement')} as a Practice.`;
|
|
228
228
|
},
|
|
229
229
|
'only 1 primary product allowed': () => 'There can only be one primary product in each Cycle.',
|
|
230
230
|
'is not allowed in combination with noTillage': () => `This operation involves tillage, yet you have specified the Practice ${termLink(noTillage)}.
|
|
@@ -307,9 +307,9 @@ const customErrorMessage = {
|
|
|
307
307
|
Please see the ${schemaLink('Emission#methodTier', 'schema')} for the options available and definitions of the options.`,
|
|
308
308
|
'should not use not relevant methodTier': () => `All emissions should generally have a method tier, which states how the data were modelled or how the data were collected.
|
|
309
309
|
Please see the ${schemaLink('Emission#methodTier', 'schema')} for the options available and definitions of the options.`,
|
|
310
|
-
'must have inputs representing the forage when set to true': ({ params }) => `This Cycle includes animals ${params?.siteType ? `on ${params.siteType}` : ''} and completeness is set to ${code(true)} for ${code('
|
|
310
|
+
'must have inputs representing the forage when set to true': ({ params }) => `This Cycle includes animals ${params?.siteType ? `on ${params.siteType}` : ''} and completeness is set to ${code(true)} for ${code('grazedForage')}.
|
|
311
311
|
However, there are no Inputs representing the forage intake by animals in the Cycle (Inputs with terms which contain the words "fresh forage" and a ${code('value')}).
|
|
312
|
-
Either, set completeness to ${code(false)} for ${code('
|
|
312
|
+
Either, set completeness to ${code(false)} for ${code('grazedForage')}, make sure all "fresh forage" Inputs have a ${code('value')}, or add one or more Inputs representing the forage intake.`,
|
|
313
313
|
'must specify is it an animal feed': () => `This Cycle is an animal production Cycle and this Input could be an animal feed or could be for another use.
|
|
314
314
|
Please specify the ${schemaLink('Input#isAnimalFeed', 'isAnimalFeed')} field on this Input.
|
|
315
315
|
Knowing the fate is essential to distinguish Inputs between those which are fed to animals and those which are used for other purposes.`,
|
|
@@ -357,7 +357,7 @@ const customErrorMessage = {
|
|
|
357
357
|
'should specify the herd composition': () => `We recommend adding information on the herd composition using the Animal node.
|
|
358
358
|
Without this, we cannot re-model many animal related Inputs, Products, and Emissions.`
|
|
359
359
|
};
|
|
360
|
-
const parseDefaultMessage = (message) => `<span class="is-capitalized-first-letter">${message
|
|
360
|
+
const parseDefaultMessage = (message) => `<span class="is-capitalized-first-letter">${message?.startsWith('should have required property')
|
|
361
361
|
? message.replace("'", '<code>').replace("'", '</code>')
|
|
362
362
|
: message}</span>`;
|
|
363
363
|
export const formatCustomErrorMessage = (message, error, allErrors = []) => {
|
|
@@ -381,4 +381,4 @@ export const isMissingOneOfError = ({ keyword, schemaPath }) => keyword === 'req
|
|
|
381
381
|
const isFailingKeywordError = ({ params }) => !!params && 'failingKeyword' in params;
|
|
382
382
|
export const filterError = (error) => [isFailingKeywordError].every(func => !func(error));
|
|
383
383
|
export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
|
|
384
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNERoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdB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RyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7QUFFaEcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsSUFBSSxNQUFNLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQW9CLEVBQUUsRUFBRSxDQUMvRSxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVqRSxNQUFNLHFCQUFxQixHQUFHLENBQUMsRUFBRSxNQUFNLEVBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDO0FBRXZHLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3RCLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmltcG9ydCB7IEN5Y2xlRnVuY3Rpb25hbFVuaXQsIE5vZGVUeXBlLCBTY2hlbWFUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUsIGlzVHlwZVZhbGlkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9QcmVjaXNpb24sIGtleVRvTGFiZWwsIHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyB0ZXJtVHlwZUxhYmVsIH0gZnJvbSAnLi4vdGVybXMvdGVybXMubW9kZWwnO1xuaW1wb3J0IHsgcGF0aFRvQXBpRG9jc1BhdGggfSBmcm9tICcuLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmVwb3NpdG9yeSxcbiAgVGVtcGxhdGUsXG4gIGJhc2VVcmwsXG4gIGNvZGUsXG4gIGNvbnRhY3RVc0xpbmssXG4gIGV4dGVybmFsTGluayxcbiAgZ2xvc3NhcnlMaW5rLFxuICBub2RlTGluayxcbiAgcmVwb3J0SXNzdWVMaW5rLFxuICBzY2hlbWFMaW5rXG59IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuLi9jb21tb24vcGx1cmFsaXplJztcblxuLy8gVE9ETzogYWRkIG1vcmUgdmFsaWRhdGlvbiBrZXl3b3JkIGFuZCBwYXJhbXNcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvckxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvclBhcmFtID1cbiAgfCAnbWlzc2luZ1Byb3BlcnR5J1xuICB8ICd0eXBlJ1xuICB8ICd0ZXJtJ1xuICB8ICd0ZXJtVHlwZSdcbiAgfCAnbW9kZWwnXG4gIHwgJ3Byb2R1Y3QnXG4gIHwgJ3JhbmdlJ1xuICB8ICdub2RlJ1xuICB8ICdhbGxvd2VkVmFsdWVzJ1xuICB8ICdhbGxvd2VkVmFsdWUnXG4gIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eSdcbiAgfCAnZXhwZWN0ZWQnXG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ2N1cnJlbnQnXG4gIHwgJ3BlcmNlbnRhZ2UnXG4gIHwgJ2tleXMnXG4gIHwgJ3RocmVzaG9sZCdcbiAgfCAnb3V0bGllcnMnXG4gIHwgJ2NvdW50cnknXG4gIHwgJ21pbidcbiAgfCAnbWF4J1xuICB8ICdkZWZhdWx0U291cmNlJ1xuICB8ICdzb3VyY2UnXG4gIHwgJ2dyb3VwJ1xuICB8ICdtZXNzYWdlJ1xuICB8ICdkaXN0YW5jZSdcbiAgfCAnc2l0ZVR5cGUnXG4gIHwgJ3Byb2R1Y3RzJ1xuICB8ICd1bml0cydcbiAgfCAnZHVwbGljYXRlZEluZGV4ZXMnXG4gIHwgJ2ludmFsaWRDb29yZGluYXRlcyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkID0gJ3JlcXVpcmVkJyB8ICd0eXBlJyB8ICdpZicgfCAndGhlbicgfCAnbm90JztcblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yIHtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIG5vZGVJbmRleD86IG51bWJlcjtcbiAgbGV2ZWw/OiB2YWxpZGF0aW9uRXJyb3JMZXZlbDtcbiAgZGF0YVBhdGg/OiBzdHJpbmc7XG4gIHNjaGVtYVBhdGg/OiBzdHJpbmc7XG4gIGtleXdvcmQ/OiB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhcmFtcz86IHsgW2tleSBpbiB2YWxpZGF0aW9uRXJyb3JQYXJhbV0/OiBhbnkgfTtcbiAgbWFwRXJyb3I/OiBib29sZWFuO1xuICBzY2hlbWE/OiBhbnk7XG4gIHBhcmVudFNjaGVtYT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmludGVyZmFjZSBJRGF0YVBhdGgge1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIdW1hbiByZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBwYXRoLlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVBhdGggPSAoZGF0YVBhdGggPSAnJyk6IElEYXRhUGF0aFtdID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoXG4gICAgLnJlcGxhY2UoL1tcXFtcXF1cXCdcXCdcXFwiXFxcIl0vZywgJycpXG4gICAgLnJlcGxhY2UoLyhcXHcpKFxcQCkvZywgJyQxLkAnKVxuICAgIC5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gcGF0aC5yZXBsYWNlKC9bXFxkXFxAXSsvZywgJycpO1xuICAgIGNvbnN0IHR5cGUgPSBwbHVyYWxpemUoa2V5VG9MYWJlbChsYWJlbCksIDEpIGFzIFNjaGVtYVR5cGU7XG4gICAgY29uc3QgaXNTY2hlbWFUeXBlID0gaXNUeXBlVmFsaWQoeyB0eXBlIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBwYXRoLnJlcGxhY2UoLyhcXGQrKS9nLCAnWyQxXScpLFxuICAgICAgbGFiZWw6IGlzU2NoZW1hVHlwZSA/IHR5cGUgOiBgPGNvZGU+JHtwbHVyYWxpemUobGFiZWwsIDEpfTwvY29kZT5gXG4gICAgfTtcbiAgfSk7XG59O1xuXG5jb25zdCBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKTtcbi8vIFRPRE86IHNlZSBpZiB3ZSB3YW50IHRvIGlnbm9yZSBUZXJtIGxhYmVsIGFuZCBzaG93IHRoZSBibGFuayBub2RlIGluc3RlYWRcbi8vIGNvbnN0IGFsbG93ZWREYXRhUGF0aHNMYWJlbHMgPSBPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpLmZpbHRlcih2ID0+ICFbU2NoZW1hVHlwZS5UZXJtXS5pbmNsdWRlcyh2KSk7XG5cbmV4cG9ydCBjb25zdCBkYXRhUGF0aExhYmVsID0gKGRhdGFQYXRoID0gJycpID0+XG4gIHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgLmZpbHRlcigoeyBsYWJlbCB9KSA9PiBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzLmluY2x1ZGVzKGxhYmVsIGFzIFNjaGVtYVR5cGUpKVxuICAgIC5wb3AoKT8ubGFiZWw7XG5cbmNvbnN0IGdsb3NzYXJ5VHlwZUxpbmsgPSAodHlwZTogVGVybVRlcm1UeXBlLCB0ZXh0ID0gdGVybVR5cGVMYWJlbCh0eXBlKSkgPT5cbiAgZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vZ2xvc3Nhcnk/dGVybVR5cGU9JHt0eXBlfWAsIHRleHQpO1xuY29uc3QgdGVybUxpbmsgPSAoeyBpZCwgbmFtZSB9OiBQYXJ0aWFsPFRlcm0+KSA9PiBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS90ZXJtLyR7aWR9YCwgbmFtZSB8fCBpZCk7XG5jb25zdCBkYXRlRm9ybWF0TWVzc2FnZSA9IGBzaG91bGQgZm9sbG93IHRoZSBJU08gODYwMSBkYXRlIGZvcm1hdCwgZS5nLiAke2NvZGUoMjAwMCl9LCBvciAke2NvZGUoJzIwMDAtMTInKX0sIG9yICR7Y29kZShcbiAgJzIwMDAtMTItMzAnXG4pfWA7XG5jb25zdCBtb2RlbExpbmsgPSAodGVybTogVGVybSwgbW9kZWw6IFRlcm0pID0+IGBcbiAgPGEgaHJlZj1cIiR7cGF0aFRvQXBpRG9jc1BhdGgobW9kZWxbJ0BpZCddLCB0ZXJtWydAaWQnXSl9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+JHttb2RlbC5uYW1lfTwvc3Bhbj5cbiAgICA8c3Bhbj4oVmlldyBEb2NzKTwvc3Bhbj5cbiAgPC9hPlxuYDtcbmNvbnN0IHRocmVzaG9sZCA9ICh2YWx1ZTogbnVtYmVyKSA9PiBjb2RlKGAke3ZhbHVlICogMTAwfSVgKTtcblxuY29uc3Qgbm9UaWxsYWdlOiBQYXJ0aWFsPFRlcm0+ID0geyBpZDogJ25vVGlsbGFnZScsIG5hbWU6ICdObyB0aWxsYWdlJyB9O1xuY29uc3QgcGFzdHVyZUdyYXNzOiBQYXJ0aWFsPFRlcm0+ID0geyBpZDogJ3Bhc3R1cmVHcmFzcycsIG5hbWU6ICdQYXN0dXJlIGdyYXNzJyB9O1xuXG5jb25zdCBpZE5vdEZvdW5kRGVmYXVsdE1lc3NhZ2UgPSBgXG4gIElmIHlvdSBhcmUgdXNpbmcgdGhlICR7Y29kZSgnbmFtZScpfSBvZiB0aGUgVGVybSwgbWFrZSBzdXJlIHRvIHVzZSAke2NvZGUoJ3Rlcm0ubmFtZScpfSBjb2x1bW47XG4gIGlmIHlvdSBhcmUgdXNpbmcgdGhlICR7Y29kZSgnQGlkJyl9IG9mIHRoZSBUZXJtLCB1c2UgdGhlICR7Y29kZSgndGVybS5AaWQnKX0gY29sdW1uIGluc3RlYWQuXG5gLnRyaW0oKTtcblxuZXhwb3J0IGNvbnN0IGlzTWlncmF0aW9uRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gcGFyYW1zPy5jdXJyZW50ICYmICdleHBlY3RlZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgbWlncmF0aW9uRXJyb3JNZXNzYWdlID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICA/IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgdXBkYXRlZCwgcGxlYXNlIHVzZSB0aGlzIFRlcm0gaW5zdGVhZDogJHtjb2RlKHBhcmFtcy5leHBlY3RlZCl9LmBcbiAgICA6IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgZGVsZXRlZC4gUGxlYXNlIHNlYXJjaCB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciBhIG5ldyBUZXJtLmA7XG5cbmNvbnN0IGlkTm90Rm91bmRFcnJvcjogaGFuZGxlRXJyb3JGdW5jID0gKF9lcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT4ge1xuICBjb25zdCBtaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGlzTWlncmF0aW9uRXJyb3IpO1xuICBjb25zdCBub01pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoZXJyb3IgPT4gIWlzTWlncmF0aW9uRXJyb3IoZXJyb3IpKTtcbiAgcmV0dXJuIGBcbiAgICA8cD5Eb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuPC9wPlxuICAgICR7bm9NaWdyYXRpb25FcnJvcnMubGVuZ3RoID8gYDxwPiR7aWROb3RGb3VuZERlZmF1bHRNZXNzYWdlfTwvcD5gIDogJyd9XG4gICAgJHt1bmlxdWUobWlncmF0aW9uRXJyb3JzLm1hcChtaWdyYXRpb25FcnJvck1lc3NhZ2UpKS5qb2luKCc8L2JyPicpfVxuICBgO1xufTtcblxuLy8gc2V0IG1lc3NhZ2UgYXMgZW1wdHkgdG8gbm90IGRpc3BsYXkgaXRcbmNvbnN0IGN1c3RvbUVycm9yTWVzc2FnZToge1xuICBba2V5OiBzdHJpbmddOiBoYW5kbGVFcnJvckZ1bmM7XG59ID0ge1xuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdAaWQnXCI6IGlkTm90Rm91bmRFcnJvcixcbiAgXCJzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnQHR5cGUnXCI6ICgpID0+ICcnLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdpZCdcIjogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggXCJ0aGVuXCIgc2NoZW1hJzogKCkgPT4gJycsXG4gICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhlIGZvbGxvd2luZyBmaWVsZCBkb2VzIG5vdCBleGlzdDogJHtwYXJhbXM/LmFkZGl0aW9uYWxQcm9wZXJ0eX0gb3IgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjYXNlLmBcbiAgICAgIDogYFNob3VsZCBub3QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuYCxcbiAgJ3Nob3VsZCBOT1QgYmUgdmFsaWQnOiAoeyBzY2hlbWEgfSkgPT5cbiAgICBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygnYXJlYVBlcmNlbnQnKVxuICAgICAgPyBgSWYgdGhlIHRlcm0gdW5pdHMgaXMgYWxyZWFkeSBpbiAke2NvZGUoJyUgYXJlYScpfSwganVzdCB1c2UgJHtjb2RlKCd2YWx1ZScpfS4gRG9udCB1c2UgJHtjb2RlKCdhcmVhUGVyY2VudCcpfS5gXG4gICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCd0cmFuc2Zvcm1hdGlvbicpXG4gICAgICA/ICdBIHRyYW5zZm9ybWF0aW9uIGNhbiBub3QgYmUgYWRkZWQgaGVyZS4nXG4gICAgICA6ICdTaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjYXNlLicsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5cXFxcZHsxM30kXCInOiAoKSA9PiBgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIDEzIG51bWJlcnNgLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeWzAtOV17NH0oLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/KFtUXVswLTJdWzAtOV06WzAtNV1bMC05XTpbMC01XVswLTldKCgrfC0pWzAtMV1bMC05XTpbMC01XVswLTldKT8pPyRcIic6XG4gICAgKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGV4aXN0aW5nIG5vZGUnOiAoZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+XG4gICAgYWxsRXJyb3JzPy5sZW5ndGhcbiAgICAgID8gYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBOb2RlczpcbiAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgICAgJHt1bmlxdWUoXG4gICAgICAgIGFsbEVycm9ycy5tYXAoKHsgcGFyYW1zIH0pID0+IGA8bGk+JHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggJHtjb2RlKGBpZD0ke3BhcmFtcz8ubm9kZT8uaWR9YCl9PC9saT5gKVxuICAgICAgKS5qb2luKCdcXG4nKX1cbiAgICAgIDwvdWw+XG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHt1bmlxdWUoXG4gICAgICAgIGFsbEVycm9ycy5tYXAoKHsgcGFyYW1zIH0pID0+IGAke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUocGFyYW1zPy5ub2RlPy5pZCl9LmApXG4gICAgICApLmpvaW4oJywgJyl9YFxuICAgICAgOiBgWW91ciB1cGxvYWQgZG9lcyBub3QgY29udGFpbiBhICR7ZXJyb3IucGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtlcnJvci5wYXJhbXM/Lm5vZGU/LmlkfWApfS5cbiAgICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmcgTm9kZSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCB5b3UgbXVzdCB1c2UgJHtjb2RlKCdAaWQnKX0gZmllbGQgaW5zdGVhZC5cbiAgICAgIE90aGVyd2lzZSB5b3UgbXVzdCBpbmNsdWRlIGEgZnVsbCAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUoZXJyb3IucGFyYW1zPy5ub2RlPy5pZCl9LmAsXG4gICdtdXN0IGJlIHdpdGhpbiB0aGUgY291bnRyeSc6ICgpID0+IGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSByZWdpb24gcHJvdmlkZWQuIFBsZWFzZSBjaGVja1xuICB0aGUgY291bnRyeSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9ycywgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAsXG4gIFttYXBFcnJvck1lc3NhZ2VdOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQgYXJlJHtcbiAgICAgICAgICBwYXJhbXM/LmRpc3RhbmNlID8gYCAke3BhcmFtcz8uZGlzdGFuY2V9a21zYCA6ICcnXG4gICAgICAgIH0gb3V0c2lkZSBvZiB0aGUgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9IHByb3ZpZGVkLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGZvciBlcnJvcnMgb3IgY2hlY2sgaWYgdGhlIHdyb25nICR7ZGF0YVBhdGguc3Vic3RyaW5nKFxuICAgICAgICAxXG4gICAgICApfSBmcm9tIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnJlZ2lvbiwgJ0dsb3NzYXJ5Jyl9IHdhcyB1c2VkLlxuICAgICAgJHtcbiAgICAgICAgcGFyYW1zPy5leHBlY3RlZFxuICAgICAgICAgID8gYEhpbnQ6IHRoZSBjb29yZGluYXRlcyBhcHBlYXIgdG8gYmUgbG9jYXRlZCBpbiB0aGUgZm9sbG93aW5nICR7ZGF0YVBhdGguc3Vic3RyaW5nKDEpfTogJHt0ZXJtTGluayh7XG4gICAgICAgICAgICAgIGlkOiAncGFyYW1zLmV4cGVjdGVkJ1xuICAgICAgICAgICAgfSl9YFxuICAgICAgICAgIDogJydcbiAgICAgIH1gXG4gICAgICA6IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgICBUZXJtVGVybVR5cGUucmVnaW9uLFxuICAgICAgICAnR2xvc3Nhcnkgb2YgVGVybXMnXG4gICAgICApfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICA/IGBUaGUgdmFsdWUgZm9yICR7Y29kZShcbiAgICAgICAgICAgICAgcGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZVxuICAgICAgICAgICAgKX0gaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZXN0YWJsaXNoZWQgZm9yIHRoZSBzb2lsIHRleHR1cmUgeW91IHByb3ZpZGVkLlxuICAgICAgICAgICAgRm9yIHRoaXMgc29pbCB0ZXh0dXJlLCB0aGUgbWF4aW11bSAke2NvZGUocGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZSl9IGlzICR7cGFyYW1zPy5yYW5nZVxuICAgICAgICAgICAgICA/Lm1heH0gYW5kIHRoZSBtaW5pbXVtIGlzICR7cGFyYW1zPy5yYW5nZT8ubWlufS5gXG4gICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpO1xuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLCBwYXJhbXM/LmFsbG93ZWRWYWx1ZXM/Lmxlbmd0aCB8fCAwKSA6ICd2YWx1ZXMnO1xuICAgIHJldHVybiBgT25seSB0aGUgJHtwYXRocy5sZW5ndGggPT09IDMgPyBgJHtwYXRoc1sxXS5sYWJlbH0gd2l0aCB0aGUgYCA6ICcnfWZvbGxvd2luZyAke3ZhbHVlc30gYXJlIHBlcm1pdHRlZCBmb3IgJHtcbiAgICAgIHBhdGhzWzBdLmxhYmVsXG4gICAgfTogJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9LlxuICAgICAgUGxlYXNlIGVpdGhlciBjaGFuZ2UgdGhlICR7XG4gICAgICAgIHBhdGhzLmxlbmd0aCA+PSAyID8gcGF0aHNbMV0ubGFiZWwgOiBwYXRoc1swXS5sYWJlbFxuICAgICAgfSB5b3UgYXJlIHVzaW5nIGFuZCBlbnN1cmUgaXQgaGFzIG9uZSBvZiB0aGUgJHt2YWx1ZXN9IGxpc3RlZCBhYm92ZSxcbiAgICAgIG9yIGZvbGxvdyB0aGUgc2NoZW1hIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgJHtwYXRocy5sZW5ndGggPj0gMiA/IHBhdGhzWzFdLmxhYmVsIDogcGF0aHNbMF0ubGFiZWx9IGNhbiBiZSBhZGRlZC5gO1xuICB9LFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50JzogKHsgcGFyYW1zIH0pID0+IGBNdXN0IGJlOiAke2NvZGUocGFyYW1zPy5hbGxvd2VkVmFsdWUpfWAsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBjaGFyYWN0ZXJpc2VkSW5kaWNhdG9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgICBwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubGVuZ3RoXG4gICAgICAgICAgICAgID8gYGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBvbmUgb2YgdGhlc2UgbWV0aG9kczogJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICA6IGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVc0xpbmsoKX0gdG8gY2hhbmdlIHRoaXMuYFxuICAgICAgICAgIH0uYFxuICAgICAgICA6IGBTb21lIFRlcm1zIGFyZSBub3QgYWxsb3dlZCB3aXRoIHRoZSBtZXRob2QgeW91IHNlbGVjdGVkLmBcbiAgICB9XG4gICAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGFsbG93ZWQgbWV0aG9kcyBmb3IgZWFjaCBUZXJtIGJ5IGNsaWNraW5nIG9uIHRoZW0uYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdmFsaWQgaXRlbSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gcGF0aHMubGVuZ3RoID49IDJcbiAgICAgID8gYFRoZSAke3BhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGh9IHJlbGF0ZWQgdG8gdGhpcyAke3BsdXJhbGl6ZShwYXRoc1twYXRocy5sZW5ndGggLSAyXS5sYWJlbCwgMSl9IGFyZSBpbnZhbGlkYFxuICAgICAgOiBgVGhlICR7cGF0aHNbMF0ucGF0aH0gYXJlIGludmFsaWRgO1xuICB9LFxuICAnbWF5IGJlIGJldHdlZW4gMCBhbmQgMTAwJzogKCkgPT4gJ1BlcmNlbnRhZ2VzIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCwgbm90IDAgYW5kIDEuIFRoaXMgbWF5IGJlIGFuIGVycm9yLicsXG4gICdtYXkgbm90IGFsbCBiZSBzZXQgdG8gZmFsc2UnOiAoKSA9PlxuICAgIGBFdmVyeSB2YWx1ZSBpbiB0aGUgZGF0YSBjb21wbGV0ZW5lc3MgYXNzZXNzbWVudCBpcyAke2NvZGUoZmFsc2UpfS4gWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBmaWxsIGl0IGluLlxuICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbGwgaXQgaW4sIHBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjY29tcGxldGVuZXNzJywgJ3NjaGVtYScpfS5gLFxuICAnbWF5IG5vdCBiZSBlbXB0eSc6ICgpID0+ICdpZiB0aGlzIHZhbHVlIHNpZ25pZmllcyBubyBkYXRhLCBIZXN0aWEgb25seSBhY2NlcHRzIFwiLVwiIG9yIGVtcHR5IGZvciBubyBkYXRhJyxcbiAgJ21heSBub3QgYmUgMCc6ICh7IGRhdGFQYXRoIH0sIGVycm9yQ291bnQpID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEFkZGluZyBhIHZhbHVlICR7ZXJyb3JDb3VudCA9PT0gMSA/IGAgdG8gZXZlcnkgJHtwYXRoc1swXS5sYWJlbH0gYCA6ICcgJ30gaXMgaGlnaGx5IHJlY29tbWVuZGVkLlxuICAgICAgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB3ZSByZWNvbW1lbmQgc2V0dGluZyB2YWx1ZSB0byAwLmA7XG4gIH0sXG4gICdsb25nRmFsbG93UGVyaW9kIG11c3QgYmUgbG93ZXIgdGhhbiA1IHllYXJzJzogKCkgPT5cbiAgICBgWW91ciBsb25nRmFsbG93UGVyaW9kIGlzIGdyZWF0ZXIgdGhhbiBmaXZlIHllYXJzLlxuICAgIEZhbGxvdyBpcyBkZWZpbmVkIGJ5IEZBT1NUQVQgYXMgbGFuZCBsZWZ0IHVuY3VsdGl2YXRlZCBmb3IgYmV0d2VlbiAxIGFuZCA1IHllYXJzLFxuICAgIGFuZCB0aGlzIGRlZmluaXRpb24gaXMgdXNlZCBmb3IgSGVzdGlhIGFsc28uYCxcbiAgJ3Nob3VsZCBiZSB3aXRoaW4gcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhpcyB2YWx1ZSBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0gZGlmZmVyZW50IHRvIG91ciBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICR7cGFyYW1zPy5kZWZhdWx0fS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYFxuICAgICAgOiBgVGhpcyB2YWx1ZSBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCB0aGFuIG91ciBkZWZhdWx0IHZhbHVlLlxuICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAndGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgcmVzdWx0IGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31cbiAgICAgICAgUGxlYXNlIGVpdGhlcjpcbiAgICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRlY2ltYWxcIj5cbiAgICAgICAgPGxpPkNoZWNrIHRoZSAke3BhcmFtcz8udGVybS50ZXJtVHlwZX0gdmFsdWUgeW91IHByb3ZpZGVkOzwvbGk+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgZGF0YSB5b3UgcHJvdmlkZWQgd2hpY2ggaXMgdGhlIGlucHV0IGludG8gdGhpcyBtb2RlbDs8L2xpPlxuICAgICAgICA8bGk+Q2FyZWZ1bGx5IHJlYWQgdGhlIGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpZiB3ZSB1c2VkIGEgZGVmYXVsdCBwcm9wZXJ0eSBhcyBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbnMuPC9saT5cbiAgICAgICAgPC91bD5gXG4gICAgICAgIDogJ25vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC4nXG4gICAgfWAsXG4gICd0aGUgbWVhc3VyZW1lbnQgcHJvdmlkZWQgbWlnaHQgYmUgaW4gZXJyb3InOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHZhbHVlIGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31gXG4gICAgICAgIDogYG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC5gXG4gICAgfWAsXG4gICdtdXN0IGJlIGVxdWFsIHRvIHByZXZpb3VzIHByb2R1Y3QgbXVsdGlwbGllZCBieSB0aGUgc2hhcmUnOiAoKSA9PlxuICAgIGBQcm9kdWN0cyBmcm9tIGEgdHJhbnNmb3JtYXRpb24gd2hpY2ggYXJlIGFuIElucHV0IGluIHRvIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZTpcbiAgICAke2NvZGUoJ3ByZXZpb3VzLnByb2R1Y3QudmFsdWUgKiBjdXJyZW50LnRyYW5zZm9ybWVkU2hhcmUgLyAxMDAgPT0gY3VycmVudC5pbnB1dC52YWx1ZScpfWAsXG4gICdhdCBsZWFzdCBvbmUgSW5wdXQgbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlJzogKCkgPT5cbiAgICBgQSBUcmFuc2Zvcm1hdGlvbiBjb252ZXJ0cyBhIFByb2R1Y3QgZnJvbSBhIEN5Y2xlIGludG8gYW5vdGhlciBQcm9kdWN0LlxuICAgIFRoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIElucHV0IGludG8gdGhlIFRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZS5gLFxuICAnbXVzdCBoYXZlIG9ubHkgb25lIGVudHJ5IHdpdGggdGhlIHNhbWUgdGVybS50ZXJtVHlwZSA9IGV4Y3JldGFNYW5hZ2VtZW50JzogKCkgPT5cbiAgICBgVGhlcmUgY2FuIG9ubHkgYmUgb25lIFByYWN0aWNlIG9mIHR5cGUgZXhjcmV0YU1hbmFnZW1lbnQgaW4gYSBDeWNsZS5cbiAgICBUbyByZXByZXNlbnQgbXVsdGlwbGUgZXhjcmV0YSBtYW5hZ2VtZW50IHN5c3RlbXMgZWl0aGVyIHVzZSBtdWx0aXBsZSBDeWNsZXMgYW5kIGxpbmsgdGhlbSB0b2dldGhlcixcbiAgICBvciB1c2UgVHJhbnNmb3JtYXRpb25zIHdpdGhpbiBhIEN5Y2xlIGFuZCBsaW5rIHRob3NlIHRvZ2V0aGVyLmAsXG4gICdtdXN0IGJlIGluY2x1ZGVkIGFzIGFuIElucHV0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleGNyZXRhIFByb2R1Y3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZXhjcmV0YSBJbnB1dHMuXG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgRS5nLiwgeW91IGNhbm5vdCBnZXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IGZyb20gJHsocGFyYW1zPy5leHBlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAodiA9PiBjb2RlKGtleVRvTGFiZWwodikpKVxuICAgICAgICAgICAgLmpvaW4oJyBvciAnKX0uYFxuICAgICAgICA6ICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtwYXJhbXM/LmV4cGVjdGVkXG4gICAgICAgICAgICA/Lm1hcChlID0+IGNvZGUoZS5uYW1lKSlcbiAgICAgICAgICAgIC5qb2luKCcgLCAnKX1gXG4gICAgICAgIDogJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBJbnB1dHMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB0aGVzZSBJbnB1dHMgZG8gbm90IGV4aXN0IGluIHRoZSBDeWNsZS5cbiAgICBQbGVhc2UgYWRkIHRoZXNlIElucHV0cywgZXZlbiBpZiB5b3UgZG8gbm90IGhhdmUgYSB2YWx1ZSBmb3IgdGhlbS5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGN5Y2xlJzogKHsgbGV2ZWwsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCR7Y29kZShcbiAgICAgICAgICAgIHBhcmFtcz8udGVybT8ubmFtZVxuICAgICAgICAgICl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YFxuICAgICAgICA6ICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InXG4gICAgICAgID8gJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLidcbiAgICAgICAgOiAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IG5vZGUgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHsocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnZXZlcnkgaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgYmUgdW5pcXVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgYmxhbmsgbm9kZSBpcyBkdXBsaWNhdGVkJHtcbiAgICAgIHBhcmFtcz8uZHVwbGljYXRlZEluZGV4ZXM/Lmxlbmd0aFxuICAgICAgICA/IGAgd2l0aCB0aGUgYmxhbmsgJHtwbHVyYWxpemUoXG4gICAgICAgICAgICAnbm9kZScsXG4gICAgICAgICAgICBwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMubGVuZ3RoXG4gICAgICAgICAgKX0gd2l0aCBudW1iZXJlZDogJHtwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMuam9pbignLCAnKX1gXG4gICAgICAgIDogJydcbiAgICB9LiBFdmVyeSBibGFuayBub2RlIHNob3VsZCBiZSB1bmlxdWUuXG4gICAgVW5pcXVlbmVzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzOiAkeyhwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfS5gLFxuICAnaXMgdG9vIGdlbmVyaWMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgdGhlIGZvbGxvd2luZyBQcm9kdWN0ICR7Y29kZShwYXJhbXM/LnByb2R1Y3Q/Lm5hbWUpfSBob3dldmVyLFxuICAgIHlvdSBoYXZlIHVzZWQgYSBnZW5lcmljICR7Z2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0gdGVybSAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0uXG4gICAgVXNlIGEgbW9yZSBzcGVjaWZpYyB0ZXJtIGZvciB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgcGFyYW1zPy50ZXJtPy50ZXJtVHlwZVxuICAgICl9IHdoaWNoIHJlZmxlY3RzIHRoZSBzcGVjaWZpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSl9LmAsXG4gICdzaG91bGQgbm90IHVzZSBpZGVudGljYWwgdGVybXMgd2l0aCBkaWZmZXJlbnQgdW5pdHMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgdGhlIHNhbWUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSBpbiAke3BhcmFtcz8udW5pdHNcbiAgICAgID8ubWFwKHVuaXQgPT4gY29kZSh1bml0KSlcbiAgICAgIC5qb2luKCcgYW5kICcpfSB1bml0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9LCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmcuJHtcbiAgICAgIHBhcmFtcz8udW5pdHM/LmluY2x1ZGVzKCdrZyBOJylcbiAgICAgICAgPyBgIEluc3RlYWQgdXNlIHRoZSAke3Rlcm1MaW5rKHsgaWQ6ICduaXRyb2dlbkNvbnRlbnQnLCBuYW1lOiAnTml0cm9nZW4gQ29udGVudCcgfSl9IFByb3BlcnR5IG9uIHRoZSAke2NvZGUoXG4gICAgICAgICAgICAna2cnXG4gICAgICAgICAgKX0gdGVybSB0byBkZWZpbmUgdGhlIG5pdHJvZ2VuIGNvbnRlbnQgb2YgdGhlICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0uYFxuICAgICAgICA6ICcnXG4gICAgfWAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgPGxpPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoXG4gICAgICBTY2hlbWFUeXBlLkJpYmxpb2dyYXBoeSxcbiAgICAgICdvdXIgc2NoZW1hJ1xuICAgICl9LjwvbGk+XG4gICAgPGxpPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaT5DaGVjayB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhbmQgJHtjb2RlKCd0aXRsZScpfSBmb3IgdHlwb3MgYWdhaW5zdCB0aGUgJHtleHRlcm5hbExpbmsoXG4gICAgICAnaHR0cHM6Ly93d3cubWVuZGVsZXkuY29tJyxcbiAgICAgICdNZW5kZWxleSBjYXRhbG9ndWUnXG4gICAgKX0uPC9saT5cbiAgICA8L3VsPmAsXG4gICdzaG91bGQgYmUgbG93ZXIgdGhhbiBtYXggc2l6ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgYm91bmRhcnkgb3IgcmVnaW9uIGlzID4ke3BhcmFtcz8uZXhwZWN0ZWR9a20yIGFuZCBpcyB0b28gbGFyZ2UgdG8gcmVsaWFibHkgZ2FwIGZpbGwgTWVhc3VyZW1lbnRzLlxuICAgIElmIHlvdSBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIHNwZWNpZmljIHJlZ2lvbiBvciBzbWFsbGVyIGJvdW5kYXJ5LCBwbGVhc2UgZG8uYCxcbiAgJ2FuIGV4Y3JldGEgaW5wdXQgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBhbiBleGNyZXRhTWFuYWdlbWVudCBwcmFjdGljZSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEV4Y3JldGEgbWFuYWdlbWVudCBpcyB0aGUgY29udmVyc2lvbiBvZiBleGNyZXRhIHRvIGFub3RoZXIgdHlwZSBvZiBleGNyZXRhLlxuICAgICAgWW91IGhhdmUgYWRkZWQgYW4gZXhjcmV0YU1hbmFnZW1lbnQgUHJhY3RpY2UgdG8gdGhpcyAke3BhdGhzWzBdLmxhYmVsfSBidXQgdGhlcmUgaXMgbm8gZXhjcmV0YSBJbnB1dC5cbiAgICAgIFRvIHJlcHJlc2VudCBleGNyZXRhIG1hbmFnZW1lbnQsIHVzZSBhICR7cGF0aHNbMF0ubGFiZWx9IHdpdGggZXhjcmV0YSBhcyBhbiBJbnB1dCBhbmQgZXhjcmV0YU1hbmFnZW1lbnQgYXMgYSBQcmFjdGljZS5gO1xuICB9LFxuICAnb25seSAxIHByaW1hcnkgcHJvZHVjdCBhbGxvd2VkJzogKCkgPT4gJ1RoZXJlIGNhbiBvbmx5IGJlIG9uZSBwcmltYXJ5IHByb2R1Y3QgaW4gZWFjaCBDeWNsZS4nLFxuICAnaXMgbm90IGFsbG93ZWQgaW4gY29tYmluYXRpb24gd2l0aCBub1RpbGxhZ2UnOiAoKSA9PlxuICAgIGBUaGlzIG9wZXJhdGlvbiBpbnZvbHZlcyB0aWxsYWdlLCB5ZXQgeW91IGhhdmUgc3BlY2lmaWVkIHRoZSBQcmFjdGljZSAke3Rlcm1MaW5rKG5vVGlsbGFnZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhpcyBvcGVyYXRpb24gb3IgdGhlIFByYWN0aWNlLmAsXG4gICdzaG91bGQgY29udGFpbiBhIHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBXZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiB0aWxsYWdlIHVzZWQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gZ2xvc3NhcnkuYCxcbiAgJ211c3Qgc2V0IHZhbHVlIGZvciBldmVyeSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgRWl0aGVyIHNwZWNpZnkgYSBzaW5nbGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2Ugb3IgYWRkIGEgdmFsdWUgdG8gYWxsIHByYWN0aWNlcy5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciB0aWxsYWdlIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2VzIG11c3QgZXF1YWwgMTAwJS5gLFxuICAnY2FuIG9ubHkgaGF2ZSAxIHRpbGxhZ2UgcHJhY3RpY2Ugd2l0aG91dCBhIHZhbHVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgYSBDeWNsZSB0byBoYXZlIHRoZSBmb2xsb3dpbmcgdGlsbGFnZSBQcmFjdGljZXM6XG4gICAgJHsocGFyYW1zPy5jdXJyZW50ID8/IFtdKS5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKS5qb2luKCcgYW5kICcpfSBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIElmIG11bHRpcGxlIHRpbGxhZ2UgcHJhY3RpY2VzIGRpZCBvY2N1ciwgcGxlYXNlIHNwZWNpZnkgdGhlIHBlcmNlbnRhZ2Ugb2YgYXJlYSB0aGV5IG9jY3VycmVkIG9uLmAsXG4gICdjYW4gbm90IGJlIGxpbmtlZCB0byB0aGUgc2FtZSBDeWNsZSc6ICgpID0+ICdZb3UgY2FuIG5vdCBsaW5rIGFuIElucHV0IHRvIHRoZSBJbXBhY3QgQXNzZXNzbWVudCBvZiB0aGUgc2FtZSBDeWNsZS4nLFxuICAvLyBkZXByZWNhdGVkLCByZW1vdmUgd2hlbiBtZXNzYWdlIGlzIG5vdCBiZWluZyB1c2VkIGFueW1vcmVcbiAgJ211c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSAke2NvZGUoZGF0YVBhdGg/LnNwbGl0KCcuJykucG9wKCkpfSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdlY29ub21pY1ZhbHVlU2hhcmUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgZWNvbm9taWNWYWx1ZVNoYXJlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3JldmVudWUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgcmV2ZW51ZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdzaG91bGQgYWRkIGEgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgYSBTb3VyY2UgdG8gYWxsIGRhdGEgaXRlbXMuXG4gICAgVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSBmaWVsZC5cbiAgICBTb3VyY2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBkYXRhIGl0ZW0gKGkuZS4sIGVhY2ggSW5wdXQsIEVtaXNzaW9uLCBQcm9kdWN0LCBQcmFjdGljZSwgTWVhc3VyZW1lbnQsIG9yIEluZnJhc3RydWN0dXJlKS5gLFxuICAnY292ZXIgY3JvcCBjeWNsZSBjb250YWlucyBub24gY292ZXIgY3JvcCBwcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBjcm9wIGlzIGEgY292ZXIgY3JvcCB1c2luZyBhIFByYWN0aWNlLlxuICAgIEEgY292ZXIgY3JvcCBpcyBkZWZpbmVkIGFzIFwiYSBjcm9wIHdoaWNoIGlzIGxlZnQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgYW55IGZyYWN0aW9uIGhhcnZlc3RlZCBieSB0aGUgZW5kIG9mIHRoZSBDeWNsZVwiLlxuICAgIFRoZSBQcm9kdWN0cyBvZiB0aGlzIEN5Y2xlIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGlzIGNyb3AgYmVpbmcgYSBjb3ZlciBjcm9wLlxuICAgIFBsZWFzZSBjaGVjayB0aGUgUHJvZHVjdHMgb3IgdGhlIFByYWN0aWNlcy5gLFxuICAnc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjeWNsZSBwcm9kdWN0cyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBUaGUgUHJvZHVjdCAke2NvZGUocGFyYW1zLnByb2R1Y3QubmFtZSl9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YFxuICAgICAgICA6ICdUaGUgSW1wYWN0QXNzZXNzbWVudCBQcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBQbGVhc2UgYWRkIHRoZSBQcm9kdWN0IGluIHRoZSBDeWNsZSBvciByZW1vdmUgdGhlIGxpbmsgd2l0aCB0aGUgQ3ljbGUuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBQcm9kdWN0IG9mIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT5cbiAgICBgT25seSBvbmUgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3QgaXMgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgeW91IGFyZSByZWZlcnJpbmcgdG8gaXMgY29ycmVjdC5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZHVjdCc6ICgpID0+XG4gICAgYE9ubHkgb25lIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IG9mIHRoZSByZWxhdGVkIEltcGFjdEFzc2Vzc21lbnRzIGFyZSBjb3JyZWN0IG9yIHRoZSBjeWNsZS5pZCBpcyBjb3JyZWN0LmAsXG4gICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb24nOiAoKSA9PlxuICAgIGBMYW5kIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uXG4gICAgKGxhbmQgdHJhbnNmb3JtYXRpb24gaXMgdGhlIGFtb3VudCBvZiBsYW5kIGNvbnZlcnRlZCBiZXR3ZWVuIHNvbWUgZGF0ZSBpbiB0aGUgcGFzdCBhbmQgdGhlIGN1cnJlbnQgeWVhcixcbiAgICBkaXZpZGVkIGJ5IGFuIGFtb3J0aXphdGlvbiBwZXJpb2QsIHNvIGl0IHNob3VsZCBhbHdheXMgYmUgbGVzcyB0aGFuIGxhbmQgb2NjdXBhdGlvbiBieSBkZWZpbml0aW9uKS5gLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBlbWlzc2lvbiBpbiB0aGUgQ3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gZXhpc3RzYCA6ICdTb21lIEVtaXNzaW9ucyBleGlzdCdcbiAgICB9IGluIGJvdGggdGhlIEN5Y2xlIGFuZCB0aGUgVHJhbnNmb3JtYXRpb24gYnV0ICR7ZXJyb3JDb3VudCA9PT0gMSA/ICdpdCBpcycgOiAndGhleSBhcmUnfSBub3QgbGlua2VkIHVzaW5nICR7Y29kZShcbiAgICAgICdjeWNsZS5lbWlzc2lvbnMuWC50cmFuc2Zvcm1hdGlvbi50ZXJtJ1xuICAgICl9LiBUaGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAnc2hvdWxkIGFkZCBhbiBhbmltYWwgcHJvZHVjdGlvbiBzeXN0ZW0nOiAoKSA9PlxuICAgIGBGb3IgYW5pbWFsIHByb2R1Y3Rpb24gY3ljbGVzLCB3ZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgYW5pbWFsIHByb2R1Y3Rpb24gJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLnN5c3RlbVxuICAgICl9IGFzIGEgUHJhY3RpY2UuXG4gICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBzeXN0ZW1zIGluIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSwgJ0dsb3NzYXJ5Jyl9LmAsXG4gICdtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIHNwZWNpZnlpbmcgZnVlbCB1c2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSWYgbWFjaGluZXJ5IGZ1ZWwgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGJlIGJlbG93IG9yIGVxdWFsIHRvIDEgZm9yIHVuaXQgaW4gaGEnOiAoKSA9PlxuICAgIGBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBwcm9kdWN0IHdpdGggdW5pdHMgJHtjb2RlKCdoYScpfSBvbiBhIEN5Y2xlIHdpdGggYSAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLFxuICAgICAgJ2Z1bmN0aW9uYWwgdW5pdCdcbiAgICApfSBvZiAke2NvZGUoJzEgaGEnKX0gaXMgJHtjb2RlKCcxJyl9LlxuICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGFkZCBhIHByb2R1Y3Qgd2l0aCB0aGUgdW5pdHMgJHtjb2RlKCdrZycpfSwgdXNlIGEgZGlmZmVyZW50IHRlcm0uYCxcbiAgXCJwYXN0dXJlR3Jhc3Mga2V5IHRlcm1UeXBlIG11c3QgYmUgJ2xhbmRDb3ZlcidcIjogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBUZXJtICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGNhbid0IGJlIHVzZWQgYXMgYSBrZXkgZm9yICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0uXG4gICAgUGxlYXNlLCB1c2UgYSB0ZXJtIHdpdGggdGVybVR5cGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5sYW5kQ292ZXIpfSBpbnN0ZWFkLlxuICAgIFRoaXMgd2lsbCBoZWxwIHVzIGdhcC1maWxsIHRoZSBhbW91bnQgb2YgZ3Jhc3MgY29uc3VtZWQgYnkgdGhlIGhlcmQuYCxcbiAgJ3RoZSBzdW0gb2YgYWxsIHBhc3R1cmVHcmFzcyB2YWx1ZXMgbXVzdCBiZSAxMDAnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIHN1bSBvZiBhbGwgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfSB2YWx1ZXMgbXVzdCBiZSBlcXVhbCB0byAke3BhcmFtcy5leHBlY3RlZH0lLmAsXG4gICdpcyBvdXRzaWRlIGNvbmZpZGVuY2UgaW50ZXJ2YWwnOiAoZXJyb3IsIGVycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBgJHt1bmlxdWUoXG4gICAgICAoYWxsRXJyb3JzLmxlbmd0aCA/IGFsbEVycm9ycyA6IFtlcnJvcl0pLmZsYXRNYXAoXG4gICAgICAgICh7IGRhdGFQYXRoLCBwYXJhbXMgfSkgPT5cbiAgICAgICAgICBwYXJhbXM/Lm91dGxpZXJzPy5tYXAoXG4gICAgICAgICAgICB2YWx1ZSA9PlxuICAgICAgICAgICAgICBgVGhlICR7ZGF0YVBhdGguaW5jbHVkZXMoJ3Byb2R1Y3QnKSA/ICdwcm9kdWN0JyA6ICdpbnB1dCd9IHZhbHVlICR7XG4gICAgICAgICAgICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUodmFsdWUpfSBgIDogJydcbiAgICAgICAgICAgICAgfWlzICR7dmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnfSAke1xuICAgICAgICAgICAgICAgIHBhcmFtcz8udGhyZXNob2xkID8gYCR7Y29kZShgJHsocGFyYW1zLnRocmVzaG9sZCArICgxIC0gcGFyYW1zLnRocmVzaG9sZCkgLyAyKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICAgICAgICAgIH0gYWxsICR7cGFyYW1zPy5ncm91cCA/IGNvZGUocGFyYW1zLmdyb3VwKSA6IGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gZGF0YSBpbiAke2NvZGUoXG4gICAgICAgICAgICAgICAgcGFyYW1zPy5jb3VudHJ5Lm5hbWVcbiAgICAgICAgICAgICAgKX0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICkuam9pbignPC9icj4nKX1cbiAgICA8L2JyPlxuICAgIFBsZWFzZSBkb3VibGUtY2hlY2sgdGhlc2UgdmFsdWVzIGJlZm9yZSBzdWJtaXR0aW5nLmAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gYm91bmRhcnknOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGNhbGN1bGF0ZWQgYXJlYSBmcm9tICR7Y29kZSgnYm91bmRhcnknKX0gaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgYm91bmRhcnkgcmVwcmVzZW50cyB0aGUgYXJlYSB1bmRlciBjdWx0aXZhdGlvbi5gLFxuICAnbXVzdCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlICR7cGFyYW1zLnNpdGVUeXBlLm1hcChjb2RlKS5qb2luKCcgb3IgJyl9LFxuICAgIGlmIGRhdGEgY29tcGxldGVuZXNzIGlzIG1hcmtlZCAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gZm9yIGNyb3AgcmVzaWR1ZSwgdGhlIGZhdGVzIGFuZCBxdWFudGl0aWVzIG9mIHRoZSByZXNpZHVlIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgIDxici8+XG4gICAgVGhlIHF1YW50aXR5IG11c3QgaW5jbHVkZSBib3RoIGFib3ZlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlLCB3aGVyZSB0aGUgc3VtIG9mIGFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby5cbiAgICBUaGlzIGNhbiBiZSBhZGRlZCB1c2luZyB0aGUgdGVybXM6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2JlbG93R3JvdW5kQ3JvcFJlc2lkdWUnLCBuYW1lOiAnQmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZScgfSl9OyBhbmQ8L2xpPlxuICAgIDxsaT4ke3Rlcm1MaW5rKHsgaWQ6ICdhYm92ZUdyb3VuZENyb3BSZXNpZHVlVG90YWwnLCBuYW1lOiAnQWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSB0b3RhbCcgfSl9LjwvbGk+XG4gICAgPC91bD5cbiAgICA8YnIvPlxuICAgIFRoZSBmYXRlIGNhbiBiZSBhZGRlZCB1c2luZzpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQvb3I8L2xpPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzPC9saT5cbiAgICA8L3VsPlxuICAgIGAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYFlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIGZhdGUgb2YgdGhlIGNyb3AgcmVzaWR1ZS5cbiAgICBBZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltcHJvdmUgZW1pc3Npb25zIGFuZCBzb2lsIGNhcmJvbiBzdG9jayBjYWxjdWxhdGlvbnMuXG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM7PC9saT5cbiAgICA8L3VsPlxuICAgIFJlbWVtYmVyIHRvIHNldCAke2NvZGUoJ2NvbXBsZXRlbmVzcy5jcm9wUmVzaWR1ZScpfSB0byAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IFNvdXJjZSxcbiAgICB0aGlzIE5vZGUgbmVlZHMgdG8gYmUgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gYXMgd2VsbC5cbiAgICBQbGVhc2Ugc2V0ICR7Y29kZSgnZGF0YVByaXZhdGUnKX09JHtjb2RlKGAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0VtaXNzaW9uI21ldGhvZFRpZXInLFxuICAgICAgJ3NjaGVtYSdcbiAgICApfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluayhcbiAgICAgICdFbWlzc2lvbiNtZXRob2RUaWVyJyxcbiAgICAgICdzY2hlbWEnXG4gICAgKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2Ugd2hlbiBzZXQgdG8gdHJ1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIEN5Y2xlIGluY2x1ZGVzIGFuaW1hbHMgJHtwYXJhbXM/LnNpdGVUeXBlID8gYG9uICR7cGFyYW1zLnNpdGVUeXBlfWAgOiAnJ30gYW5kIGNvbXBsZXRlbmVzcyBpcyBzZXQgdG8gJHtjb2RlKFxuICAgICAgdHJ1ZVxuICAgICl9IGZvciAke2NvZGUoJ2FuaW1hbEZlZWQnKX0uXG4gICAgSG93ZXZlciwgdGhlcmUgYXJlIG5vIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UgYnkgYW5pbWFscyBpbiB0aGUgQ3ljbGUgKElucHV0cyB3aXRoIHRlcm1zIHdoaWNoIGNvbnRhaW4gdGhlIHdvcmRzIFwiZnJlc2ggZm9yYWdlXCIgYW5kIGEgJHtjb2RlKFxuICAgICAgJ3ZhbHVlJ1xuICAgICl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHtjb2RlKGZhbHNlKX0gZm9yICR7Y29kZShcbiAgICAgICdhbmltYWxGZWVkJ1xuICAgICl9LCBtYWtlIHN1cmUgYWxsIFwiZnJlc2ggZm9yYWdlXCIgSW5wdXRzIGhhdmUgYSAke2NvZGUoXG4gICAgICAndmFsdWUnXG4gICAgKX0sIG9yIGFkZCBvbmUgb3IgbW9yZSBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlLmAsXG4gICdtdXN0IHNwZWNpZnkgaXMgaXQgYW4gYW5pbWFsIGZlZWQnOiAoKSA9PlxuICAgIGBUaGlzIEN5Y2xlIGlzIGFuIGFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlIGFuZCB0aGlzIElucHV0IGNvdWxkIGJlIGFuIGFuaW1hbCBmZWVkIG9yIGNvdWxkIGJlIGZvciBhbm90aGVyIHVzZS5cbiAgICBQbGVhc2Ugc3BlY2lmeSB0aGUgJHtzY2hlbWFMaW5rKCdJbnB1dCNpc0FuaW1hbEZlZWQnLCAnaXNBbmltYWxGZWVkJyl9IGZpZWxkIG9uIHRoaXMgSW5wdXQuXG4gICAgS25vd2luZyB0aGUgZmF0ZSBpcyBlc3NlbnRpYWwgdG8gZGlzdGluZ3Vpc2ggSW5wdXRzIGJldHdlZW4gdGhvc2Ugd2hpY2ggYXJlIGZlZCB0byBhbmltYWxzIGFuZCB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IGEgdHJlYXRtZW50IHdoZW4gZXhwZXJpbWVudERlc2lnbiBpcyBzcGVjaWZpZWQnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIFNvdXJjZSB1c2VzIGFuIGV4cGVyaW1lbnRhbCBkZXNpZ24sIGJ1dCBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRyZWF0bWVudCBmb3IgdGhpcyBDeWNsZS5cbiAgICBBZGRpbmcgdGhlIHRyZWF0bWVudCBwcm92aWRlcyBpbXBvcnRhbnQgbWV0YS1kYXRhIGFuZCB3aWxsIGVuYWJsZSBncmVhdGVyIHJlLXVzZSBvZiB0aGVzZSBkYXRhLlxuICAgIEFkZCB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSN0cmVhdG1lbnQnLCAndHJlYXRtZW50Jyl9IGZpZWxkIHRvIHRoZSBDeWNsZS5cbiAgICBOb3RlIHRoYXQgdGhlIGZpZWxkICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnLFxuICAgICAgJ2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCdcbiAgICApfSBiZWNvbWVzIHJlcXVpcmVkIGlmIHRyZWF0bWVudCBpcyBzcGVjaWZpZWQuYCxcbiAgJ3Nob3VsZCBub3Qgc3BlY2lmeSBib3RoIGxpdmVBbmltYWwgYW5kIGFuaW1hbFByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCBib3RoIGEgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsKX0gYW5kICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5hbmltYWxQcm9kdWN0XG4gICAgKX0gdGVybSBhcyBQcm9kdWN0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSBhbmltYWxzLCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmc6XG4gICAgaW5zdGVhZCB1c2UgYSBQcm9wZXJ0eSBvbiB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmxpdmVBbmltYWxcbiAgICApfSB0ZXJtIHRvIGRlZmluZSB0aGUgcXVhbnRpdHkgb2YgbGl2ZXdlaWdodCBwZXIgaGVhZCwgY2FyY2FzcyB3ZWlnaHQgcGVyIGhlYWQsIGV0Yy5gLFxuICAnbXVzdCBhZGQgYW4gZXhjcmV0YSBwcm9kdWN0IHdpdGggYSBsaXZlQW5pbWFsIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBBbmltYWwgcHJvZHVjdGlvbiBDeWNsZXMgY3JlYXRlIGV4Y3JldGEuXG4gICAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gcHJvZHVjdCBpbiB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgYW4gJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gUHJvZHVjdCB0byB0aGUgQ3ljbGUuXG4gICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCBhICR7Y29kZSgndmFsdWUnKX0gZm9yIHRoZSBQcm9kdWN0LCBidXQgYWRkaW5nIGEgJHtjb2RlKCd2YWx1ZScpfSBpcyBkZXNpcmFibGUuYCxcbiAgJ3ZhbHVlIHNob3VsZCBzdW0gdG8gMTAwIG9yIGxlc3MgYWNyb3NzIHdhdGVyIHJlZ2ltZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgdG90YWwgJSBhcmVhIGNvdmVyZWQgYnkgdGhlICR7Y29kZShUZXJtVGVybVR5cGUud2F0ZXJSZWdpbWUpfSBwcmFjdGljZXMgeW91IHNwZWNpZmllZCBpcyBub3QgZXF1YWwgdG8gJHtjb2RlKFxuICAgICAgMTAwXG4gICAgKX0uXG4gICAgTWFrZSBzdXJlIHRvIGFkZCBhbnkgbWlzc2luZyBwcmFjdGljZSBpZiBuZWVkZWQgYW5kL29yIGFkanVzdCB0aGUgdmFsdWVzIG9mIHRoZSAke2NvZGUoXG4gICAgICBUZXJtVGVybVR5cGUud2F0ZXJSZWdpbWVcbiAgICApfSBwcmFjdGljZXMgeW91IGFscmVhZHkgcmVjb3JkZWQuYCxcbiAgJ3JpY2UgcHJvZHVjdHMgbm90IGFsbG93ZWQgZm9yIHRoaXMgd2F0ZXIgcmVnaW1lIHByYWN0aWNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgcHJhY3RpY2UgaXMgbm90IGFsbG93ZWQgd2l0aCB0aGUgcHJvZHVjdHMgJHtwYXJhbXMucHJvZHVjdHM/Lm1hcChwID0+IGNvZGUocC5uYW1lIHx8IHBbJ0BpZCddKSl9LlxuICAgIFJlY29yZGluZyB0aGUgcmlnaHQgd2F0ZXIgcmVnaW1lIGZvciByaWNlIGVuc3VyZXMgbWV0aGFuZSBlbWlzc2lvbnMgZnJvbSBmbG9vZGVkIGZpZWxkcyBhcmUgY29ycmVjdGx5IHJlY2FsY3VsYXRlZC5cbiAgICBUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGNoYW5nZSB0aGUgcHJhY3RpY2Ugb3IgdGhlIHByb2R1Y3RzLmAsXG4gICdtdXN0IG5vdCBiZSBlcXVhbCB0byAxIGhhJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7Y29kZShDeWNsZUZ1bmN0aW9uYWxVbml0WycxIGhhJ10pfSBjYW5ub3QgYmUgdXNlZCBhcyAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLFxuICAgICAgJ2Z1bmN0aW9uYWxVbml0J1xuICAgICl9IGZvciBDeWNsZXMgbGlua2VkIHRvIFNpdGVzIHdpdGggJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9ID0gJHtjb2RlKHBhcmFtcz8uc2l0ZVR5cGUpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JywgJ2Z1bmN0aW9uYWxVbml0Jyl9IHRvICR7Y29kZShcbiAgICAgIEN5Y2xlRnVuY3Rpb25hbFVuaXQucmVsYXRpdmVcbiAgICApfSBvciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnU2l0ZSNzaXRlVHlwZScsICdzaXRlVHlwZScpfS5gLFxuICAnc2hvdWxkIHNwZWNpZnkgYSB2YWx1ZSB3aGVuIEhlc3RpYSBoYXMgYSBkZWZhdWx0IG9uZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBBcyB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgJHtjb2RlKCd2YWx1ZScpfSwgd2Ugd2lsbCBhc3N1bWUgdGhlIHZhbHVlIGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgSWYgdGhpcyBpcyBpbmNvcnJlY3QsIHBlbGFzZSBhZGQgYSB2YWx1ZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hbmFnZW1lbnQgbm9kZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGAke1xuICAgICAgcGFyYW1zPy50ZXJtVHlwZVxuICAgICAgICA/IGBEb2VzIG5vdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0ICR7Y29kZShwYXJhbXMudGVybVR5cGUpfS5cbiAgICAgICAgUGxlYXNlIGNvbnNpZGVyIGFkZGluZyBhIGhpc3Rvcnkgb2YgJHtjb2RlKFxuICAgICAgICAgIHBhcmFtcy50ZXJtVHlwZVxuICAgICAgICApfSBmb3IgYXMgbWFueSB5ZWFycyBhcyBwb3NzaWJsZSBpbiB0aGUgTWFuYWdlbWVudCBibGFuayBub2Rlcy5gXG4gICAgICAgIDogYFRoZXJlIGlzIG5vIE1hbmFnZW1lbnQgbm9kZSBwcmVzZW50IGluIHRoaXMgdXBsb2FkLlxuICAgICAgICBXZSByZWNvbW1lbmQgYWRkaW5nIHRoaXMgdG8gdGhlIFNpdGUsIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFuZCBoaXN0b3JpY2FsIHRpbGxhZ2UuXG4gICAgICAgIGBcbiAgICB9XG4gICAgV2UgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gbW9kZWwgQ088c3ViPjI8L3N1Yj4gZW1pc3Npb25zIGZyb20gc29pbCBvcmdhbmljIGNhcmJvbiBjaGFuZ2UuYCxcbiAgJ2NhbiBub3QgYmUgdXNlZCBvbiB0aGlzIHRlcm1UeXBlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgUHJvcGVydHkgY2FuIG9ubHkgYmUgdXNlZCBvbiBibGFuayBub2RlcyB3aXRoIHRoZSBmb2xsb3dpbmcgJHtjb2RlKCd0ZXJtLnRlcm1UeXBlJyl9OiAke3BhcmFtcy5leHBlY3RlZFxuICAgICAgLm1hcChjb2RlKVxuICAgICAgLmpvaW4oJywgJyl9LmAsXG4gICdub3QgYSB2YWxpZCBHZW9KU09OJzogKHsgcGFyYW1zIH0pID0+IGBcbiAgJHtcbiAgICBwYXJhbXM/LmludmFsaWRDb29yZGluYXRlcyA9PT0gJ3RydWUnXG4gICAgICA/IGBHZW9KU09OIGRhdGEgc2hvdWxkIGZvbGxvdyB0aGUgV0dTODQgZGF0dW0uXG4gIFdlIGhhdmUgZm91bmQgY29vcmRpbmF0ZXMgb3V0c2lkZSBvZiB0aGUgLTE4MCB0byArMTgwIHJhbmdlIHdoaWNoIGlzIG5vdCBwb3NzaWJsZSB1bmRlciBXR1M4NC5cbiAgUGxlYXNlIGNoZWNrIHRoZSBkYXR1bSBvciBjaGVjayBmb3Igb3RoZXIgcG9zc2libGUgZXJyb3JzLmBcbiAgICAgIDogJ1RoaXMgR2VvSlNPTiBhcHBlYXJzIHRvIGJlIGludmFsaWQuJ1xuICB9XG4gIFlvdSBjYW4gdmFsaWRhdGUgeW91ciBHZW9KU09OIHVzaW5nIGFuIG9ubGluZSB0b29sIGxpa2UgPGEgaHJlZj1cImh0dHBzOi8vZ2VvanNvbi5pby9cIj5nZW9qc29uLmlvPC9hPi5cbiAgSWYgeW91IHRoaW5rIHRoaXMgaXMgYSBtaXN0YWtlLCBwbGVhc2UgcmVwb3J0IHRoZSBlcnJvciAke3JlcG9ydElzc3VlTGluayhSZXBvc2l0b3J5LnNjaGVtYSwgVGVtcGxhdGUuYnVnKX0uYCxcbiAgJ3Nob3VsZCBhZGQgdGhlIHRlcm0gc3RvY2tpbmdEZW5zaXR5UGVybWFuZW50UGFzdHVyZUF2ZXJhZ2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGRpZCBub3Qgc3BlY2lmeSAke25vZGVMaW5rKHsgJ0B0eXBlJzogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IHBhcmFtcy5leHBlY3RlZCB9KX0uXG4gICAgQWRkaW5nIHRoaXMgUHJhY3RpY2UgaXMgZXNzZW50aWFsIGZvciBDeWNsZXMgd2l0aCByZWxhdGl2ZSBmdW5jdGlvbmFsIHVuaXQgd2hpY2ggaGFwcGVuIGVudGlyZWx5IG9yIHBhcnRpYWxseSBvbiBwZXJtYW5lbnQgcGFzdHVyZS5cbiAgICBXaXRob3V0IHRoaXMgaW5mb3JtYXRpb24gSGVzdGlhIGNhbm5vdCBjYWxjdWxhdGUgYW5pbWFsIHJlbGF0ZWQgZW1pc3Npb25zLmAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgaGVyZCBjb21wb3NpdGlvbic6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgaW5mb3JtYXRpb24gb24gdGhlIGhlcmQgY29tcG9zaXRpb24gdXNpbmcgdGhlIEFuaW1hbCBub2RlLlxuICAgIFdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHJlLW1vZGVsIG1hbnkgYW5pbWFsIHJlbGF0ZWQgSW5wdXRzLCBQcm9kdWN0cywgYW5kIEVtaXNzaW9ucy5gXG59O1xuXG5jb25zdCBwYXJzZURlZmF1bHRNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZykgPT5cbiAgYDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWQtZmlyc3QtbGV0dGVyXCI+JHtcbiAgICBtZXNzYWdlLnN0YXJ0c1dpdGgoJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5JylcbiAgICAgID8gbWVzc2FnZS5yZXBsYWNlKFwiJ1wiLCAnPGNvZGU+JykucmVwbGFjZShcIidcIiwgJzwvY29kZT4nKVxuICAgICAgOiBtZXNzYWdlXG4gIH08L3NwYW4+YDtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZSA9IChcbiAgbWVzc2FnZT86IHN0cmluZyxcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLFxuICBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdXG4pID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZSA9IGN1c3RvbUVycm9yTWVzc2FnZT8uW21lc3NhZ2VdXG4gICAgPyBjdXN0b21FcnJvck1lc3NhZ2VbbWVzc2FnZV0oZXJyb3IhLCBhbGxFcnJvcnMubGVuZ3RoLCBhbGxFcnJvcnMpXG4gICAgOiBwYXJzZURlZmF1bHRNZXNzYWdlKG1lc3NhZ2UpO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKFxuICBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IsXG4gIGFsbEVycm9yczogSVZhbGlkYXRpb25FcnJvcltdID0gW11cbik6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT5cbiAgZXJyb3JcbiAgICA/IHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC4uLmVycm9yLFxuICAgICAgICBtYXBFcnJvcjogZXJyb3IubWVzc2FnZSA9PT0gbWFwRXJyb3JNZXNzYWdlLFxuICAgICAgICBtZXNzYWdlOiBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSwgZXJyb3IsIGFsbEVycm9ycylcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzRXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiAoZXJyb3IubGV2ZWwgPT09ICdlcnJvcicgfHwgIWVycm9yLmxldmVsKTtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzV2FybmluZyA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIGVycm9yLmxldmVsID09PSAnd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdQcm9wZXJ0eUVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdtaXNzaW5nUHJvcGVydHknIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ09uZU9mRXJyb3IgPSAoeyBrZXl3b3JkLCBzY2hlbWFQYXRoIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHNjaGVtYVBhdGggfHwgJycpLmluY2x1ZGVzKCdvbmVPZicpO1xuXG5jb25zdCBpc0ZhaWxpbmdLZXl3b3JkRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ2ZhaWxpbmdLZXl3b3JkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJFcnJvciA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvcikgPT4gW2lzRmFpbGluZ0tleXdvcmRFcnJvcl0uZXZlcnkoZnVuYyA9PiAhZnVuYyhlcnJvcikpO1xuXG5leHBvcnQgY29uc3QgbWlzc2luZ05vZGVFcnJvcnMgPSAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIGVycm9ycy5maWx0ZXIoXG4gICAgKHsga2V5d29yZCwgcGFyYW1zIH0pID0+XG4gICAgICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0B0eXBlJyB8fCBwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0BpZCcpXG4gICk7XG4iXX0=
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNkRoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdB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IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5pbXBvcnQgeyBDeWNsZUZ1bmN0aW9uYWxVbml0LCBOb2RlVHlwZSwgU2NoZW1hVHlwZSwgVGVybSwgVGVybVRlcm1UeXBlLCBpc1R5cGVWYWxpZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHRvUHJlY2lzaW9uLCBrZXlUb0xhYmVsLCB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgdGVybVR5cGVMYWJlbCB9IGZyb20gJy4uL3Rlcm1zL3Rlcm1zLm1vZGVsJztcbmltcG9ydCB7IHBhdGhUb0FwaURvY3NQYXRoIH0gZnJvbSAnLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFJlcG9zaXRvcnksXG4gIFRlbXBsYXRlLFxuICBiYXNlVXJsLFxuICBjb2RlLFxuICBjb250YWN0VXNMaW5rLFxuICBleHRlcm5hbExpbmssXG4gIGdsb3NzYXJ5TGluayxcbiAgbm9kZUxpbmssXG4gIHJlcG9ydElzc3VlTGluayxcbiAgc2NoZW1hTGlua1xufSBmcm9tICcuLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnLi4vY29tbW9uL3BsdXJhbGl6ZSc7XG5cbi8vIFRPRE86IGFkZCBtb3JlIHZhbGlkYXRpb24ga2V5d29yZCBhbmQgcGFyYW1zXG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JMZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JQYXJhbSA9XG4gIHwgJ21pc3NpbmdQcm9wZXJ0eSdcbiAgfCAndHlwZSdcbiAgfCAndGVybSdcbiAgfCAndGVybVR5cGUnXG4gIHwgJ21vZGVsJ1xuICB8ICdwcm9kdWN0J1xuICB8ICdyYW5nZSdcbiAgfCAnbm9kZSdcbiAgfCAnYWxsb3dlZFZhbHVlcydcbiAgfCAnYWxsb3dlZFZhbHVlJ1xuICB8ICdhZGRpdGlvbmFsUHJvcGVydHknXG4gIHwgJ2V4cGVjdGVkJ1xuICB8ICdkZWZhdWx0J1xuICB8ICdjdXJyZW50J1xuICB8ICdwZXJjZW50YWdlJ1xuICB8ICdrZXlzJ1xuICB8ICd0aHJlc2hvbGQnXG4gIHwgJ291dGxpZXJzJ1xuICB8ICdjb3VudHJ5J1xuICB8ICdtaW4nXG4gIHwgJ21heCdcbiAgfCAnZGVmYXVsdFNvdXJjZSdcbiAgfCAnc291cmNlJ1xuICB8ICdncm91cCdcbiAgfCAnbWVzc2FnZSdcbiAgfCAnZGlzdGFuY2UnXG4gIHwgJ3NpdGVUeXBlJ1xuICB8ICdwcm9kdWN0cydcbiAgfCAndW5pdHMnXG4gIHwgJ2R1cGxpY2F0ZWRJbmRleGVzJ1xuICB8ICdpbnZhbGlkQ29vcmRpbmF0ZXMnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yS2V5d29yZCA9ICdyZXF1aXJlZCcgfCAndHlwZScgfCAnaWYnIHwgJ3RoZW4nIHwgJ25vdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvciB7XG4gIGluZGV4PzogbnVtYmVyO1xuICBub2RlSW5kZXg/OiBudW1iZXI7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIGRhdGFQYXRoPzogc3RyaW5nO1xuICBzY2hlbWFQYXRoPzogc3RyaW5nO1xuICBrZXl3b3JkPzogdmFsaWRhdGlvbkVycm9yS2V5d29yZDtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBwYXJhbXM/OiB7IFtrZXkgaW4gdmFsaWRhdGlvbkVycm9yUGFyYW1dPzogYW55IH07XG4gIG1hcEVycm9yPzogYm9vbGVhbjtcbiAgc2NoZW1hPzoge1xuICAgIHJlcXVpcmVkPzogc3RyaW5nW107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCB7XG4gIGVycm9yOiBJVmFsaWRhdGlvbkVycm9yW107XG4gIGluZGV4OiBudW1iZXI7XG4gIGNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIGhhbmRsZUVycm9yRnVuYyA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvciwgZXJyb3JDb3VudD86IG51bWJlciwgYWxsRXJyb3JzPzogSVZhbGlkYXRpb25FcnJvcltdKSA9PiBzdHJpbmc7XG5cbmNvbnN0IG1hcEVycm9yTWVzc2FnZSA9ICdkb2VzIG5vdCBjb250YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUnO1xuXG5pbnRlcmZhY2UgSURhdGFQYXRoIHtcbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgcGF0aC5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZURhdGFQYXRoID0gKGRhdGFQYXRoID0gJycpOiBJRGF0YVBhdGhbXSA9PiB7XG4gIGNvbnN0IFtfLCAuLi5wYXRoc10gPSBkYXRhUGF0aFxuICAgIC5yZXBsYWNlKC9bXFxbXFxdXFwnXFwnXFxcIlxcXCJdL2csICcnKVxuICAgIC5yZXBsYWNlKC8oXFx3KShcXEApL2csICckMS5AJylcbiAgICAuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhdGhzLm1hcChwYXRoID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IHBhdGgucmVwbGFjZSgvW1xcZFxcQF0rL2csICcnKTtcbiAgICBjb25zdCB0eXBlID0gcGx1cmFsaXplKGtleVRvTGFiZWwobGFiZWwpLCAxKSBhcyBTY2hlbWFUeXBlO1xuICAgIGNvbnN0IGlzU2NoZW1hVHlwZSA9IGlzVHlwZVZhbGlkKHsgdHlwZSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogcGF0aC5yZXBsYWNlKC8oXFxkKykvZywgJ1skMV0nKSxcbiAgICAgIGxhYmVsOiBpc1NjaGVtYVR5cGUgPyB0eXBlIDogYDxjb2RlPiR7cGx1cmFsaXplKGxhYmVsLCAxKX08L2NvZGU+YFxuICAgIH07XG4gIH0pO1xufTtcblxuY29uc3QgYWxsb3dlZERhdGFQYXRoc0xhYmVscyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSk7XG4vLyBUT0RPOiBzZWUgaWYgd2Ugd2FudCB0byBpZ25vcmUgVGVybSBsYWJlbCBhbmQgc2hvdyB0aGUgYmxhbmsgbm9kZSBpbnN0ZWFkXG4vLyBjb25zdCBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKS5maWx0ZXIodiA9PiAhW1NjaGVtYVR5cGUuVGVybV0uaW5jbHVkZXModikpO1xuXG5leHBvcnQgY29uc3QgZGF0YVBhdGhMYWJlbCA9IChkYXRhUGF0aCA9ICcnKSA9PlxuICBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIC5maWx0ZXIoKHsgbGFiZWwgfSkgPT4gYWxsb3dlZERhdGFQYXRoc0xhYmVscy5pbmNsdWRlcyhsYWJlbCBhcyBTY2hlbWFUeXBlKSlcbiAgICAucG9wKCk/LmxhYmVsO1xuXG5jb25zdCBnbG9zc2FyeVR5cGVMaW5rID0gKHR5cGU6IFRlcm1UZXJtVHlwZSwgdGV4dCA9IHRlcm1UeXBlTGFiZWwodHlwZSkpID0+XG4gIGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L2dsb3NzYXJ5P3Rlcm1UeXBlPSR7dHlwZX1gLCB0ZXh0KTtcbmNvbnN0IHRlcm1MaW5rID0gKHsgaWQsIG5hbWUgfTogUGFydGlhbDxUZXJtPikgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vdGVybS8ke2lkfWAsIG5hbWUgfHwgaWQpO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPSBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoXG4gICcyMDAwLTEyLTMwJ1xuKX1gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdub1RpbGxhZ2UnLCBuYW1lOiAnTm8gdGlsbGFnZScgfTtcbmNvbnN0IHBhc3R1cmVHcmFzczogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdwYXN0dXJlR3Jhc3MnLCBuYW1lOiAnUGFzdHVyZSBncmFzcycgfTtcblxuY29uc3QgaWROb3RGb3VuZERlZmF1bHRNZXNzYWdlID0gYFxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIG1ha2Ugc3VyZSB0byB1c2UgJHtjb2RlKCd0ZXJtLm5hbWUnKX0gY29sdW1uO1xuICBpZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ0BpZCcpfSBvZiB0aGUgVGVybSwgdXNlIHRoZSAke2NvZGUoJ3Rlcm0uQGlkJyl9IGNvbHVtbiBpbnN0ZWFkLlxuYC50cmltKCk7XG5cbmV4cG9ydCBjb25zdCBpc01pZ3JhdGlvbkVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+IHBhcmFtcz8uY3VycmVudCAmJiAnZXhwZWN0ZWQnIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IG1pZ3JhdGlvbkVycm9yTWVzc2FnZSA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBwYXJhbXM/LmV4cGVjdGVkXG4gICAgPyBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIHVwZGF0ZWQsIHBsZWFzZSB1c2UgdGhpcyBUZXJtIGluc3RlYWQ6ICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfS5gXG4gICAgOiBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcy5jdXJyZW50KX0gd2FzIGRlbGV0ZWQuIFBsZWFzZSBzZWFyY2ggdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgYSBuZXcgVGVybS5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3I6IGhhbmRsZUVycm9yRnVuYyA9IChfZXJyb3IsIF9lcnJvckNvdW50LCBhbGxFcnJvcnMpID0+IHtcbiAgY29uc3QgbWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihpc01pZ3JhdGlvbkVycm9yKTtcbiAgY29uc3Qgbm9NaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGVycm9yID0+ICFpc01pZ3JhdGlvbkVycm9yKGVycm9yKSk7XG4gIHJldHVybiBgXG4gICAgPHA+RG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLjwvcD5cbiAgICAke25vTWlncmF0aW9uRXJyb3JzLmxlbmd0aCA/IGA8cD4ke2lkTm90Rm91bmREZWZhdWx0TWVzc2FnZX08L3A+YCA6ICcnfVxuICAgICR7dW5pcXVlKG1pZ3JhdGlvbkVycm9ycy5tYXAobWlncmF0aW9uRXJyb3JNZXNzYWdlKSkuam9pbignPC9icj4nKX1cbiAgYDtcbn07XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogaGFuZGxlRXJyb3JGdW5jO1xufSA9IHtcbiAgXCJzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnQGlkJ1wiOiBpZE5vdEZvdW5kRXJyb3IsXG4gIFwic2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ0B0eXBlJ1wiOiAoKSA9PiAnJyxcbiAgXCJzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnaWQnXCI6IGlkTm90Rm91bmRFcnJvcixcbiAgJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBtYXRjaCBzb21lIHNjaGVtYSBpbiBhbnlPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIFwidGhlblwiIHNjaGVtYSc6ICgpID0+ICcnLFxuICAnc2hvdWxkIE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllcyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBmb2xsb3dpbmcgZmllbGQgZG9lcyBub3QgZXhpc3Q6ICR7cGFyYW1zPy5hZGRpdGlvbmFsUHJvcGVydHl9IG9yIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY2FzZS5gXG4gICAgICA6IGBTaG91bGQgbm90IGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLmAsXG4gICdzaG91bGQgTk9UIGJlIHZhbGlkJzogKHsgc2NoZW1hIH0pID0+XG4gICAgc2NoZW1hPy5yZXF1aXJlZD8uaW5jbHVkZXMoJ2FyZWFQZXJjZW50JylcbiAgICAgID8gYElmIHRoZSB0ZXJtIHVuaXRzIGlzIGFscmVhZHkgaW4gJHtjb2RlKCclIGFyZWEnKX0sIGp1c3QgdXNlICR7Y29kZSgndmFsdWUnKX0uIERvbnQgdXNlICR7Y29kZSgnYXJlYVBlcmNlbnQnKX0uYFxuICAgICAgOiBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygndHJhbnNmb3JtYXRpb24nKVxuICAgICAgPyAnQSB0cmFuc2Zvcm1hdGlvbiBjYW4gbm90IGJlIGFkZGVkIGhlcmUuJ1xuICAgICAgOiAnU2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS4nLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeXFxcXGR7MTN9JFwiJzogKCkgPT4gYHNob3VsZCBiZSBjb21wb3NlZCBvZiAxMyBudW1iZXJzYCxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlswLTldezR9KC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyhbVF1bMC0yXVswLTldOlswLTVdWzAtOV06WzAtNV1bMC05XSgoK3wtKVswLTFdWzAtOV06WzAtNV1bMC05XSk/KT8kXCInOlxuICAgICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBleGlzdGluZyBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICA/IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSBmb2xsb3dpbmcgTm9kZXM6XG4gICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgPGxpPiR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfTwvbGk+YClcbiAgICAgICkuam9pbignXFxuJyl9XG4gICAgICA8L3VsPlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gKVxuICAgICAgKS5qb2luKCcsICcpfWBcbiAgICAgIDogYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gYSAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKGVycm9yLnBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgICAgcGFyYW1zPy5kaXN0YW5jZSA/IGAgJHtwYXJhbXM/LmRpc3RhbmNlfWttc2AgOiAnJ1xuICAgICAgICB9IG91dHNpZGUgb2YgdGhlICR7ZGF0YVBhdGguc3Vic3RyaW5nKDEpfSBwcm92aWRlZC5cbiAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBmb3IgZXJyb3JzIG9yIGNoZWNrIGlmIHRoZSB3cm9uZyAke2RhdGFQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgMVxuICAgICAgKX0gZnJvbSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeScpfSB3YXMgdXNlZC5cbiAgICAgICR7XG4gICAgICAgIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICAgICAgICA/IGBIaW50OiB0aGUgY29vcmRpbmF0ZXMgYXBwZWFyIHRvIGJlIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyAke2RhdGFQYXRoLnN1YnN0cmluZygxKX06ICR7dGVybUxpbmsoe1xuICAgICAgICAgICAgICBpZDogJ3BhcmFtcy5leHBlY3RlZCdcbiAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICA6ICcnXG4gICAgICB9YFxuICAgICAgOiBgVGhlIHJlZ2lvbiBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGZvciBlcnJvcnMgb3IgdGhlIHJlZ2lvbiBmb3IgZXJyb3IsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgICAgVGVybVRlcm1UeXBlLnJlZ2lvbixcbiAgICAgICAgJ0dsb3NzYXJ5IG9mIFRlcm1zJ1xuICAgICAgKX0uYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3Igc2FuZENvbnRlbnQsIHNpbHRDb250ZW50LCBjbGF5Q29udGVudCc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgU2FuZCwgU2lsdCwgYW5kIENsYXkgY29udGVudCBzaG91bGQgZXF1YWwgMTAwJSBmb3IgZWFjaCBzb2lsIGRlcHRoIGludGVydmFsLmAsXG4gICdpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gcGFyYW1zPy50ZXJtXG4gICAgICAgICAgPyBgVGhlIHZhbHVlIGZvciAke2NvZGUoXG4gICAgICAgICAgICAgIHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWVcbiAgICAgICAgICAgICl9IGlzIG91dHNpZGUgdGhlIHJhbmdlIGVzdGFibGlzaGVkIGZvciB0aGUgc29pbCB0ZXh0dXJlIHlvdSBwcm92aWRlZC5cbiAgICAgICAgICAgIEZvciB0aGlzIHNvaWwgdGV4dHVyZSwgdGhlIG1heGltdW0gJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyAke3BhcmFtcz8ucmFuZ2VcbiAgICAgICAgICAgICAgPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgIDogYERvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZXMgb2Ygc2FuZCwgc2lsdCBhbmQgY2xheSBjb250ZW50LmBcbiAgICAgICAgOiBgRWFjaCBzb2lsIHRleHR1cmUgaGFzIGEgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZSBmb3Igc2FuZCwgc2lsdCwgYW5kIGNsYXkgY29udGVudC5cbiAgICAgICAgQXQgbGVhc3Qgb25lIG1lYXN1cmVtZW50IG9mIHNhbmQsIHNpbHQsIG9yIGNsYXkgY29udGVudCBkb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIHRoZSBzcGVjaWZpZWQgc29pbCB0ZXh0dXJlLmBcbiAgICB9XG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgUGxlYXNlIGNoZWNrIHRoZSBtZWFzdXJlbWVudCwgaXRzIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnQgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmUgaWYgbmVlZGVkLmBcbiAgICAgICAgOiBgUGxlYXNlIGNoZWNrIHlvdXIgbWVhc3VyZW1lbnRzLCB0aGVpciBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50cyBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZXMgaWYgbmVlZGVkLmBcbiAgICB9YCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKTtcbiAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgcGF0aHMubGVuZ3RoID49IDIgPyBwbHVyYWxpemUocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aCwgcGFyYW1zPy5hbGxvd2VkVmFsdWVzPy5sZW5ndGggfHwgMCkgOiAndmFsdWVzJztcbiAgICByZXR1cm4gYE9ubHkgdGhlICR7cGF0aHMubGVuZ3RoID09PSAzID8gYCR7cGF0aHNbMV0ubGFiZWx9IHdpdGggdGhlIGAgOiAnJ31mb2xsb3dpbmcgJHt2YWx1ZXN9IGFyZSBwZXJtaXR0ZWQgZm9yICR7XG4gICAgICBwYXRoc1swXS5sYWJlbFxuICAgIH06ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfS5cbiAgICAgIFBsZWFzZSBlaXRoZXIgY2hhbmdlIHRoZSAke1xuICAgICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBhdGhzWzFdLmxhYmVsIDogcGF0aHNbMF0ubGFiZWxcbiAgICAgIH0geW91IGFyZSB1c2luZyBhbmQgZW5zdXJlIGl0IGhhcyBvbmUgb2YgdGhlICR7dmFsdWVzfSBsaXN0ZWQgYWJvdmUsXG4gICAgICBvciBmb2xsb3cgdGhlIHNjaGVtYSB0byBpZGVudGlmeSB3aGVyZSB0aGlzICR7cGF0aHMubGVuZ3RoID49IDIgPyBwYXRoc1sxXS5sYWJlbCA6IHBhdGhzWzBdLmxhYmVsfSBjYW4gYmUgYWRkZWQuYDtcbiAgfSxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudCc6ICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBiZTogJHtjb2RlKHBhcmFtcz8uYWxsb3dlZFZhbHVlKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke1xuICAgICAgICAgICAgcGFyYW1zPy5hbGxvd2VkVmFsdWVzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgOiBgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYW55IG1ldGhvZCBhbGxvd2VkLiBQbGVhc2UgJHtjb250YWN0VXNMaW5rKCl9IHRvIGNoYW5nZSB0aGlzLmBcbiAgICAgICAgICB9LmBcbiAgICAgICAgOiBgU29tZSBUZXJtcyBhcmUgbm90IGFsbG93ZWQgd2l0aCB0aGUgbWV0aG9kIHlvdSBzZWxlY3RlZC5gXG4gICAgfVxuICAgIFlvdSBjYW4gZmluZCB0aGUgbGlzdCBvZiBhbGxvd2VkIG1ldGhvZHMgZm9yIGVhY2ggVGVybSBieSBjbGlja2luZyBvbiB0aGVtLmAsXG4gICdzaG91bGQgY29udGFpbiBhIHZhbGlkIGl0ZW0nOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIHBhdGhzLmxlbmd0aCA+PSAyXG4gICAgICA/IGBUaGUgJHtwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRofSByZWxhdGVkIHRvIHRoaXMgJHtwbHVyYWxpemUocGF0aHNbcGF0aHMubGVuZ3RoIC0gMl0ubGFiZWwsIDEpfSBhcmUgaW52YWxpZGBcbiAgICAgIDogYFRoZSAke3BhdGhzWzBdLnBhdGh9IGFyZSBpbnZhbGlkYDtcbiAgfSxcbiAgJ21heSBiZSBiZXR3ZWVuIDAgYW5kIDEwMCc6ICgpID0+ICdQZXJjZW50YWdlcyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAsIG5vdCAwIGFuZCAxLiBUaGlzIG1heSBiZSBhbiBlcnJvci4nLFxuICAnbWF5IG5vdCBhbGwgYmUgc2V0IHRvIGZhbHNlJzogKCkgPT5cbiAgICBgRXZlcnkgdmFsdWUgaW4gdGhlIGRhdGEgY29tcGxldGVuZXNzIGFzc2Vzc21lbnQgaXMgJHtjb2RlKGZhbHNlKX0uIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZmlsbCBpdCBpbi5cbiAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaWxsIGl0IGluLCBwbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbXBsZXRlbmVzcycsICdzY2hlbWEnKX0uYCxcbiAgJ21heSBub3QgYmUgZW1wdHknOiAoKSA9PiAnaWYgdGhpcyB2YWx1ZSBzaWduaWZpZXMgbm8gZGF0YSwgSGVzdGlhIG9ubHkgYWNjZXB0cyBcIi1cIiBvciBlbXB0eSBmb3Igbm8gZGF0YScsXG4gICdtYXkgbm90IGJlIDAnOiAoeyBkYXRhUGF0aCB9LCBlcnJvckNvdW50KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBBZGRpbmcgYSB2YWx1ZSAke2Vycm9yQ291bnQgPT09IDEgPyBgIHRvIGV2ZXJ5ICR7cGF0aHNbMF0ubGFiZWx9IGAgOiAnICd9IGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cbiAgICAgIElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgd2UgcmVjb21tZW5kIHNldHRpbmcgdmFsdWUgdG8gMC5gO1xuICB9LFxuICAnbG9uZ0ZhbGxvd1BlcmlvZCBtdXN0IGJlIGxvd2VyIHRoYW4gNSB5ZWFycyc6ICgpID0+XG4gICAgYFlvdXIgbG9uZ0ZhbGxvd1BlcmlvZCBpcyBncmVhdGVyIHRoYW4gZml2ZSB5ZWFycy5cbiAgICBGYWxsb3cgaXMgZGVmaW5lZCBieSBGQU9TVEFUIGFzIGxhbmQgbGVmdCB1bmN1bHRpdmF0ZWQgZm9yIGJldHdlZW4gMSBhbmQgNSB5ZWFycyxcbiAgICBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIHVzZWQgZm9yIEhlc3RpYSBhbHNvLmAsXG4gICdzaG91bGQgYmUgd2l0aGluIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1ZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoaXMgdmFsdWUgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9IGRpZmZlcmVudCB0byBvdXIgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAke3BhcmFtcz8uZGVmYXVsdH0uXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmBcbiAgICAgIDogYFRoaXMgdmFsdWUgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3RoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZShcbiAgICAgICAgICAgIHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMylcbiAgICAgICAgICApfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9XG4gICAgICAgIFBsZWFzZSBlaXRoZXI6XG4gICAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlIGRhdGEgeW91IHByb3ZpZGVkIHdoaWNoIGlzIHRoZSBpbnB1dCBpbnRvIHRoaXMgbW9kZWw7PC9saT5cbiAgICAgICAgPGxpPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZShcbiAgICAgICAgICAgIHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMylcbiAgICAgICAgICApfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9YFxuICAgICAgICA6IGBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuYFxuICAgIH1gLFxuICAnbXVzdCBiZSBlcXVhbCB0byBwcmV2aW91cyBwcm9kdWN0IG11bHRpcGxpZWQgYnkgdGhlIHNoYXJlJzogKCkgPT5cbiAgICBgUHJvZHVjdHMgZnJvbSBhIHRyYW5zZm9ybWF0aW9uIHdoaWNoIGFyZSBhbiBJbnB1dCBpbiB0byB0aGUgbmV4dCB0cmFuc2Zvcm1hdGlvbiBtdXN0IGZvbGxvdyB0aGUgZm9sbG93aW5nIHJ1bGU6XG4gICAgJHtjb2RlKCdwcmV2aW91cy5wcm9kdWN0LnZhbHVlICogY3VycmVudC50cmFuc2Zvcm1lZFNoYXJlIC8gMTAwID09IGN1cnJlbnQuaW5wdXQudmFsdWUnKX1gLFxuICAnYXQgbGVhc3Qgb25lIElucHV0IG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZSc6ICgpID0+XG4gICAgYEEgVHJhbnNmb3JtYXRpb24gY29udmVydHMgYSBQcm9kdWN0IGZyb20gYSBDeWNsZSBpbnRvIGFub3RoZXIgUHJvZHVjdC5cbiAgICBUaGVyZWZvcmUsIGF0IGxlYXN0IG9uZSBJbnB1dCBpbnRvIHRoZSBUcmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUuYCxcbiAgJ211c3QgaGF2ZSBvbmx5IG9uZSBlbnRyeSB3aXRoIHRoZSBzYW1lIHRlcm0udGVybVR5cGUgPSBleGNyZXRhTWFuYWdlbWVudCc6ICgpID0+XG4gICAgYFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBQcmFjdGljZSBvZiB0eXBlIGV4Y3JldGFNYW5hZ2VtZW50IGluIGEgQ3ljbGUuXG4gICAgVG8gcmVwcmVzZW50IG11bHRpcGxlIGV4Y3JldGEgbWFuYWdlbWVudCBzeXN0ZW1zIGVpdGhlciB1c2UgbXVsdGlwbGUgQ3ljbGVzIGFuZCBsaW5rIHRoZW0gdG9nZXRoZXIsXG4gICAgb3IgdXNlIFRyYW5zZm9ybWF0aW9ucyB3aXRoaW4gYSBDeWNsZSBhbmQgbGluayB0aG9zZSB0b2dldGhlci5gLFxuICAnbXVzdCBiZSBpbmNsdWRlZCBhcyBhbiBJbnB1dCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhjcmV0YSBQcm9kdWN0cyBhcmUgbm90IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGV4Y3JldGEgSW5wdXRzLlxuICAgICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYEUuZy4sIHlvdSBjYW5ub3QgZ2V0ICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSBmcm9tICR7KHBhcmFtcz8uZXhwZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSlcbiAgICAgICAgICAgIC5qb2luKCcgb3IgJyl9LmBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgICBQbGVhc2UgY2hlY2sgdGhlIElucHV0cyBhbmQgUHJvZHVjdHMgb2YgdGhlIFRyYW5zZm9ybWF0aW9uLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIGlucHV0cyB0byB0aGUgY3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgWW91IGhhdmUgc3RhdGVkIHRoYXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgSW5wdXRzICR7cGFyYW1zPy5leHBlY3RlZFxuICAgICAgICAgICAgPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpXG4gICAgICAgICAgICAuam9pbignICwgJyl9YFxuICAgICAgICA6ICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgSW5wdXRzJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgdGhlc2UgSW5wdXRzIGRvIG5vdCBleGlzdCBpbiB0aGUgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCB0aGVzZSBJbnB1dHMsIGV2ZW4gaWYgeW91IGRvIG5vdCBoYXZlIGEgdmFsdWUgZm9yIHRoZW0uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgdHJhbnNmb3JtYXRpb25zIHRvIHRoZSBjeWNsZSc6ICh7IGxldmVsLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQke2NvZGUoXG4gICAgICAgICAgICBwYXJhbXM/LnRlcm0/Lm5hbWVcbiAgICAgICAgICApfSB3YXMgY3JlYXRlZCBkdXJpbmcgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoIHRoZSBUZXJtIG5hbWUgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQ/Lm5hbWUpfWBcbiAgICAgICAgOiAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIFRyYW5zZm9ybWF0aW9ucydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHdlIGNhbm5vdCBmaW5kIGEgVHJhbnNmb3JtYXRpb24gd2l0aGluIHRoZSBDeWNsZSB3aXRoIHRoaXMgVGVybSBuYW1lLlxuICAgICR7XG4gICAgICBsZXZlbCA9PT0gJ2Vycm9yJ1xuICAgICAgICA/ICdQbGVhc2UgY2hlY2sgdGhlIFRlcm1zIHVzZWQgaW4gdGhlIEVtaXNzaW9ucyBhbmQvb3IgdGhlIFRyYW5zZm9ybWF0aW9ucy4nXG4gICAgICAgIDogJ1lvdSBtYXkgd2FudCB0byBhZGQgdGhpcyBUcmFuc2Zvcm1hdGlvbi4nXG4gICAgfWAsXG4gICdldmVyeSBub2RlIHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBOb2RlIGlzIGR1cGxpY2F0ZWQuIEV2ZXJ5IE5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7KHBhcmFtcz8ua2V5cyB8fCBbXSkubWFwKGNvZGUpLmpvaW4oJywgJyl9YCxcbiAgJ2V2ZXJ5IGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIGJsYW5rIG5vZGUgaXMgZHVwbGljYXRlZCR7XG4gICAgICBwYXJhbXM/LmR1cGxpY2F0ZWRJbmRleGVzPy5sZW5ndGhcbiAgICAgICAgPyBgIHdpdGggdGhlIGJsYW5rICR7cGx1cmFsaXplKFxuICAgICAgICAgICAgJ25vZGUnLFxuICAgICAgICAgICAgcGFyYW1zLmR1cGxpY2F0ZWRJbmRleGVzLmxlbmd0aFxuICAgICAgICAgICl9IHdpdGggbnVtYmVyZWQ6ICR7cGFyYW1zLmR1cGxpY2F0ZWRJbmRleGVzLmpvaW4oJywgJyl9YFxuICAgICAgICA6ICcnXG4gICAgfS4gRXZlcnkgYmxhbmsgbm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHsocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnbXVzdCBjb250YWluIGFzIG1hbnkgaXRlbXMgYXMgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PlxuICAgIGBUaGUgbnVtYmVyIG9mICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mICR7Y29kZSgndmFsdWUnKX0uXG4gICAgQ3VycmVudGx5IHRoZXJlIGFyZSAke3BhcmFtcz8uY3VycmVudH0gJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBidXQgJHtwYXJhbXM/LmV4cGVjdGVkfSAke2NvZGUoXG4gICAgICAndmFsdWUnXG4gICAgKX0uYCxcbiAgJ2lzIHRvbyBnZW5lcmljJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgUHJvZHVjdCAke2NvZGUocGFyYW1zPy5wcm9kdWN0Py5uYW1lKX0gaG93ZXZlcixcbiAgICB5b3UgaGF2ZSB1c2VkIGEgZ2VuZXJpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IHRlcm0gJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9LlxuICAgIFVzZSBhIG1vcmUgc3BlY2lmaWMgdGVybSBmb3IgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIHBhcmFtcz8udGVybT8udGVybVR5cGVcbiAgICApfSB3aGljaCByZWZsZWN0cyB0aGUgc3BlY2lmaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8ucHJvZHVjdD8udGVybVR5cGUpfS5gLFxuICAnc2hvdWxkIG5vdCB1c2UgaWRlbnRpY2FsIHRlcm1zIHdpdGggZGlmZmVyZW50IHVuaXRzJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIGFkZGVkIHRoZSBzYW1lICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0gaW4gJHtwYXJhbXM/LnVuaXRzXG4gICAgICA/Lm1hcCh1bml0ID0+IGNvZGUodW5pdCkpXG4gICAgICAuam9pbignIGFuZCAnKX0gdW5pdHMuXG4gICAgSWYgdGhlc2UgdGVybXMgcmVmZXIgdG8gdGhlIHNhbWUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSwgdGhpcyB3aWxsIGxlYWQgdG8gZG91YmxlIGNvdW50aW5nLiR7XG4gICAgICBwYXJhbXM/LnVuaXRzPy5pbmNsdWRlcygna2cgTicpXG4gICAgICAgID8gYCBJbnN0ZWFkIHVzZSB0aGUgJHt0ZXJtTGluayh7IGlkOiAnbml0cm9nZW5Db250ZW50JywgbmFtZTogJ05pdHJvZ2VuIENvbnRlbnQnIH0pfSBQcm9wZXJ0eSBvbiB0aGUgJHtjb2RlKFxuICAgICAgICAgICAgJ2tnJ1xuICAgICAgICAgICl9IHRlcm0gdG8gZGVmaW5lIHRoZSBuaXRyb2dlbiBjb250ZW50IG9mIHRoZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9LmBcbiAgICAgICAgOiAnJ1xuICAgIH1gLFxuICAnaXMgbWlzc2luZyByZXF1aXJlZCBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uJzogKCkgPT5cbiAgICBgVGhlIGF1dG9tYXRpYyBiaWJsaW9ncmFwaHkgc2VhcmNoIGZhaWxlZCBmb3IgdGhpcyBCaWJsaW9ncmFwaHkuIEVpdGhlcjpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgIDxsaT5NYW51YWxseSBmaWxsLWluIHRoZSA8Yj5yZXF1aXJlZDwvYj4gYmlibGlvZ3JhcGhpYyBpbmZvcm1hdGlvbiBhcyBwZXIgJHtzY2hlbWFMaW5rKFxuICAgICAgU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHksXG4gICAgICAnb3VyIHNjaGVtYSdcbiAgICApfS48L2xpPlxuICAgIDxsaT5Qcm92aWRlIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFzIHdlbGwgYXMgdGhlICR7Y29kZSgndGl0bGUnKX0uPC9saT5cbiAgICA8bGk+Q2hlY2sgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYW5kICR7Y29kZSgndGl0bGUnKX0gZm9yIHR5cG9zIGFnYWluc3QgdGhlICR7ZXh0ZXJuYWxMaW5rKFxuICAgICAgJ2h0dHBzOi8vd3d3Lm1lbmRlbGV5LmNvbScsXG4gICAgICAnTWVuZGVsZXkgY2F0YWxvZ3VlJ1xuICAgICl9LjwvbGk+XG4gICAgPC91bD5gLFxuICAnc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4IHNpemUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGJvdW5kYXJ5IG9yIHJlZ2lvbiBpcyA+JHtwYXJhbXM/LmV4cGVjdGVkfWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICBJZiB5b3UgYXJlIGFibGUgdG8gdXNlIGEgbW9yZSBzcGVjaWZpYyByZWdpb24gb3Igc21hbGxlciBib3VuZGFyeSwgcGxlYXNlIGRvLmAsXG4gICdhbiBleGNyZXRhIGlucHV0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYW4gZXhjcmV0YU1hbmFnZW1lbnQgcHJhY3RpY2UnOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBFeGNyZXRhIG1hbmFnZW1lbnQgaXMgdGhlIGNvbnZlcnNpb24gb2YgZXhjcmV0YSB0byBhbnkgdHlwZSBvZiBwcm9kdWN0IChlLmcuLCBhbm90aGVyIHR5cGUgb2YgZXhjcmV0YSBvciBvcmdhbmljIGZlcnRpbGlzZXIpLlxuICAgICAgWW91IGhhdmUgYWRkZWQgYW4gJHtjb2RlKCdleGNyZXRhTWFuYWdlbWVudCcpfSBQcmFjdGljZSB0byB0aGlzICR7cGF0aHNbMF0ubGFiZWx9IGJ1dCB0aGVyZSBpcyBubyBleGNyZXRhIElucHV0LlxuICAgICAgVG8gcmVwcmVzZW50IGV4Y3JldGEgbWFuYWdlbWVudCwgdXNlIGEgJHtwYXRoc1swXS5sYWJlbH0gd2l0aCBleGNyZXRhIGFzIGFuIElucHV0IGFuZCAke2NvZGUoJ2V4Y3JldGFNYW5hZ2VtZW50Jyl9IGFzIGEgUHJhY3RpY2UuYDtcbiAgfSxcbiAgJ29ubHkgMSBwcmltYXJ5IHByb2R1Y3QgYWxsb3dlZCc6ICgpID0+ICdUaGVyZSBjYW4gb25seSBiZSBvbmUgcHJpbWFyeSBwcm9kdWN0IGluIGVhY2ggQ3ljbGUuJyxcbiAgJ2lzIG5vdCBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbm9UaWxsYWdlJzogKCkgPT5cbiAgICBgVGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgdGlsbGFnZSwgeWV0IHlvdSBoYXZlIHNwZWNpZmllZCB0aGUgUHJhY3RpY2UgJHt0ZXJtTGluayhub1RpbGxhZ2UpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoaXMgb3BlcmF0aW9uIG9yIHRoZSBQcmFjdGljZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGlsbGFnZSB1c2VkIGZvciB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IGdsb3NzYXJ5LmAsXG4gICdtdXN0IHNldCB2YWx1ZSBmb3IgZXZlcnkgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYEVpdGhlciBzcGVjaWZ5IGEgc2luZ2xlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlIG9yIGFkZCBhIHZhbHVlIHRvIGFsbCBwcmFjdGljZXMuYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3IgdGlsbGFnZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgc3VtIG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlcyBtdXN0IGVxdWFsIDEwMCUuYCxcbiAgJ2NhbiBvbmx5IGhhdmUgMSB0aWxsYWdlIHByYWN0aWNlIHdpdGhvdXQgYSB2YWx1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJdCBpcyBub3QgcG9zc2libGUgZm9yIGEgQ3ljbGUgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHRpbGxhZ2UgUHJhY3RpY2VzOlxuICAgICR7KHBhcmFtcz8uY3VycmVudCA/PyBbXSkubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkuam9pbignIGFuZCAnKX0gYXQgdGhlIHNhbWUgdGltZS5cbiAgICBJZiBtdWx0aXBsZSB0aWxsYWdlIHByYWN0aWNlcyBkaWQgb2NjdXIsIHBsZWFzZSBzcGVjaWZ5IHRoZSBwZXJjZW50YWdlIG9mIGFyZWEgdGhleSBvY2N1cnJlZCBvbi5gLFxuICAnY2FuIG5vdCBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PiAnWW91IGNhbiBub3QgbGluayBhbiBJbnB1dCB0byB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgb2YgdGhlIHNhbWUgQ3ljbGUuJyxcbiAgLy8gZGVwcmVjYXRlZCwgcmVtb3ZlIHdoZW4gbWVzc2FnZSBpcyBub3QgYmVpbmcgdXNlZCBhbnltb3JlXG4gICdtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgJHtjb2RlKGRhdGFQYXRoPy5zcGxpdCgnLicpLnBvcCgpKX0gb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAnZWNvbm9taWNWYWx1ZVNoYXJlIG11c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlIGVjb25vbWljVmFsdWVTaGFyZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdyZXZlbnVlIG11c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlIHJldmVudWUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAnc2hvdWxkIGFkZCBhIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBXZSByZWNvbW1lbmQgYWRkaW5nIGEgU291cmNlIHRvIGFsbCBkYXRhIGl0ZW1zLlxuICAgIFRoaXMgY2FuIGJlIGRvbmUgYnkgYWRkaW5nIHRoZSAke2NvZGUocGFyYW1zPy5jdXJyZW50KX0gZmllbGQuXG4gICAgU291cmNlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggZGF0YSBpdGVtIChpLmUuLCBlYWNoIElucHV0LCBFbWlzc2lvbiwgUHJvZHVjdCwgUHJhY3RpY2UsIE1lYXN1cmVtZW50LCBvciBJbmZyYXN0cnVjdHVyZSkuYCxcbiAgJ2NvdmVyIGNyb3AgY3ljbGUgY29udGFpbnMgbm9uIGNvdmVyIGNyb3AgcHJvZHVjdCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0IHRoaXMgY3JvcCBpcyBhIGNvdmVyIGNyb3AgdXNpbmcgYSBQcmFjdGljZS5cbiAgICBBIGNvdmVyIGNyb3AgaXMgZGVmaW5lZCBhcyBcImEgY3JvcCB3aGljaCBpcyBsZWZ0IGluIHRoZSBmaWVsZCB3aXRob3V0IGFueSBmcmFjdGlvbiBoYXJ2ZXN0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgQ3ljbGVcIi5cbiAgICBUaGUgUHJvZHVjdHMgb2YgdGhpcyBDeWNsZSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhpcyBjcm9wIGJlaW5nIGEgY292ZXIgY3JvcC5cbiAgICBQbGVhc2UgY2hlY2sgdGhlIFByb2R1Y3RzIG9yIHRoZSBQcmFjdGljZXMuYCxcbiAgJ3Nob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY3ljbGUgcHJvZHVjdHMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgVGhlIFByb2R1Y3QgJHtjb2RlKHBhcmFtcy5wcm9kdWN0Lm5hbWUpfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgQ3ljbGUgd2l0aCBpZCAke2NvZGUocGFyYW1zLm5vZGUuaWQpfWBcbiAgICAgICAgOiAnVGhlIEltcGFjdEFzc2Vzc21lbnQgUHJvZHVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlua2VkIEN5Y2xlJ1xuICAgIH0uXG4gICAgUGxlYXNlIGFkZCB0aGUgUHJvZHVjdCBpbiB0aGUgQ3ljbGUgb3IgcmVtb3ZlIHRoZSBsaW5rIHdpdGggdGhlIEN5Y2xlLmAsXG4gICdtdWx0aXBsZSBJbXBhY3RBc3Nlc3NtZW50IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgUHJvZHVjdCBvZiB0aGUgc2FtZSBDeWNsZSc6ICgpID0+XG4gICAgYE9ubHkgb25lIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IGlzIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIHlvdSBhcmUgcmVmZXJyaW5nIHRvIGlzIGNvcnJlY3QuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2R1Y3QnOiAoKSA9PlxuICAgIGBPbmx5IG9uZSBJbXBhY3QgQXNzZXNzbWVudCBjYW4gYmUgcmVsYXRlZCB0byB0aGlzIFByb2R1Y3QuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBvZiB0aGUgcmVsYXRlZCBJbXBhY3RBc3Nlc3NtZW50cyBhcmUgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgaXMgY29ycmVjdC5gLFxuICAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uJzogKCkgPT5cbiAgICBgTGFuZCB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvblxuICAgIChsYW5kIHRyYW5zZm9ybWF0aW9uIGlzIHRoZSBhbW91bnQgb2YgbGFuZCBjb252ZXJ0ZWQgYmV0d2VlbiBzb21lIGRhdGUgaW4gdGhlIHBhc3QgYW5kIHRoZSBjdXJyZW50IHllYXIsXG4gICAgZGl2aWRlZCBieSBhbiBhbW9ydGl6YXRpb24gcGVyaW9kLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBsYW5kIG9jY3VwYXRpb24gYnkgZGVmaW5pdGlvbikuYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZW1pc3Npb24gaW4gdGhlIEN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGV4aXN0c2AgOiAnU29tZSBFbWlzc2lvbnMgZXhpc3QnXG4gICAgfSBpbiBib3RoIHRoZSBDeWNsZSBhbmQgdGhlIFRyYW5zZm9ybWF0aW9uIGJ1dCAke2Vycm9yQ291bnQgPT09IDEgPyAnaXQgaXMnIDogJ3RoZXkgYXJlJ30gbm90IGxpbmtlZCB1c2luZyAke2NvZGUoXG4gICAgICAnY3ljbGUuZW1pc3Npb25zLlgudHJhbnNmb3JtYXRpb24udGVybSdcbiAgICApfS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gYW5pbWFsIHByb2R1Y3Rpb24gc3lzdGVtJzogKCkgPT5cbiAgICBgRm9yIGFuaW1hbCBwcm9kdWN0aW9uIGN5Y2xlcywgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIGFuaW1hbCBwcm9kdWN0aW9uICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5zeXN0ZW1cbiAgICApfSBhcyBhIFByYWN0aWNlLlxuICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2Ygc3lzdGVtcyBpbiB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5zeXN0ZW0sICdHbG9zc2FyeScpfS5gLFxuICAnbXVzdCBiZSBzZXQgdG8gZmFsc2Ugd2hlbiBzcGVjaWZ5aW5nIGZ1ZWwgdXNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYElmIG1hY2hpbmVyeSBmdWVsICgke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX0pIGlzIHVzZWQgZHVyaW5nIGEgQ3ljbGUsXG4gICAgYnV0IHRoZXJlIGlzIG5vIGRhdGEgb24gdGhlIGFtb3VudCBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLm1hdGVyaWFsKX0gdXNlZCBmb3IgYWdyaWN1bHR1cmFsIGVxdWlwbWVudCxcbiAgICB0aGVuICR7Y29kZSgnY29tcGxldGVuZXNzLm1hdGVyaWFsJyl9IG11c3QgYmUgJHtjb2RlKCdmYWxzZScpfS5gLFxuICAnbXVzdCBiZSBiZWxvdyBvciBlcXVhbCB0byAxIGZvciB1bml0IGluIGhhJzogKCkgPT5cbiAgICBgVGhlIG1heGltdW0gdmFsdWUgZm9yIGEgcHJvZHVjdCB3aXRoIHVuaXRzICR7Y29kZSgnaGEnKX0gb24gYSBDeWNsZSB3aXRoIGEgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JyxcbiAgICAgICdmdW5jdGlvbmFsIHVuaXQnXG4gICAgKX0gb2YgJHtjb2RlKCcxIGhhJyl9IGlzICR7Y29kZSgnMScpfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBhZGQgYSBwcm9kdWN0IHdpdGggdGhlIHVuaXRzICR7Y29kZSgna2cnKX0sIHVzZSBhIGRpZmZlcmVudCB0ZXJtLmAsXG4gIFwicGFzdHVyZUdyYXNzIGtleSB0ZXJtVHlwZSBtdXN0IGJlICdsYW5kQ292ZXInXCI6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgVGVybSAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBjYW4ndCBiZSB1c2VkIGFzIGEga2V5IGZvciAke3Rlcm1MaW5rKHBhc3R1cmVHcmFzcyl9LlxuICAgIFBsZWFzZSwgdXNlIGEgdGVybSB3aXRoIHRlcm1UeXBlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGFuZENvdmVyKX0gaW5zdGVhZC5cbiAgICBUaGlzIHdpbGwgaGVscCB1cyBnYXAtZmlsbCB0aGUgYW1vdW50IG9mIGdyYXNzIGNvbnN1bWVkIGJ5IHRoZSBoZXJkLmAsXG4gICd0aGUgc3VtIG9mIGFsbCBwYXN0dXJlR3Jhc3MgdmFsdWVzIG11c3QgYmUgMTAwJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBzdW0gb2YgYWxsICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0gdmFsdWVzIG11c3QgYmUgZXF1YWwgdG8gJHtwYXJhbXMuZXhwZWN0ZWR9JS5gLFxuICAnaXMgb3V0c2lkZSBjb25maWRlbmNlIGludGVydmFsJzogKGVycm9yLCBlcnJvckNvdW50LCBhbGxFcnJvcnMpID0+XG4gICAgYCR7dW5pcXVlKFxuICAgICAgKGFsbEVycm9ycy5sZW5ndGggPyBhbGxFcnJvcnMgOiBbZXJyb3JdKS5mbGF0TWFwKFxuICAgICAgICAoeyBkYXRhUGF0aCwgcGFyYW1zIH0pID0+XG4gICAgICAgICAgcGFyYW1zPy5vdXRsaWVycz8ubWFwKFxuICAgICAgICAgICAgdmFsdWUgPT5cbiAgICAgICAgICAgICAgYFRoZSAke2RhdGFQYXRoLmluY2x1ZGVzKCdwcm9kdWN0JykgPyAncHJvZHVjdCcgOiAnaW5wdXQnfSB2YWx1ZSAke1xuICAgICAgICAgICAgICAgIGVycm9yQ291bnQgPT09IDEgPyBgJHtjb2RlKHZhbHVlKX0gYCA6ICcnXG4gICAgICAgICAgICAgIH1pcyAke3ZhbHVlID4gcGFyYW1zPy5taW4gPyAnYWJvdmUnIDogJ2JlbG93J30gJHtcbiAgICAgICAgICAgICAgICBwYXJhbXM/LnRocmVzaG9sZCA/IGAke2NvZGUoYCR7KHBhcmFtcy50aHJlc2hvbGQgKyAoMSAtIHBhcmFtcy50aHJlc2hvbGQpIC8gMikgKiAxMDB9JWApfSBvZmAgOiAnJ1xuICAgICAgICAgICAgICB9IGFsbCAke3BhcmFtcz8uZ3JvdXAgPyBjb2RlKHBhcmFtcy5ncm91cCkgOiBjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IGRhdGEgaW4gJHtjb2RlKFxuICAgICAgICAgICAgICAgIHBhcmFtcz8uY291bnRyeS5uYW1lXG4gICAgICAgICAgICAgICl9IG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0uYFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApLmpvaW4oJzwvYnI+Jyl9XG4gICAgPC9icj5cbiAgICBQbGVhc2UgZG91YmxlLWNoZWNrIHRoZXNlIHZhbHVlcyBiZWZvcmUgc3VibWl0dGluZy5gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGJvdW5kYXJ5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBjYWxjdWxhdGVkIGFyZWEgZnJvbSAke2NvZGUoJ2JvdW5kYXJ5Jyl9IGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBGb3Igc2l0ZXMgb2YgdHlwZSAke3BhcmFtcy5zaXRlVHlwZS5tYXAoY29kZSkuam9pbignIG9yICcpfSxcbiAgICBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKFxuICAgICAgdHJ1ZVxuICAgICl9IGZvciBjcm9wIHJlc2lkdWUsIHRoZSBmYXRlcyBhbmQgcXVhbnRpdGllcyBvZiB0aGUgcmVzaWR1ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICA8YnIvPlxuICAgIFRoZSBxdWFudGl0eSBtdXN0IGluY2x1ZGUgYm90aCBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSwgd2hlcmUgdGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAgVGhpcyBjYW4gYmUgYWRkZWQgdXNpbmcgdGhlIHRlcm1zOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT4ke3Rlcm1MaW5rKHsgaWQ6ICdiZWxvd0dyb3VuZENyb3BSZXNpZHVlJywgbmFtZTogJ0JlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUnIH0pfTsgYW5kPC9saT5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYWJvdmVHcm91bmRDcm9wUmVzaWR1ZVRvdGFsJywgbmFtZTogJ0Fib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgdG90YWwnIH0pfS48L2xpPlxuICAgIDwvdWw+XG4gICAgPGJyLz5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czwvbGk+XG4gICAgPC91bD5cbiAgICBgLFxuICAnc2hvdWxkIHNwZWNpZnkgdGhlIGZhdGUgb2YgY3JvcFJlc2lkdWUnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSBmYXRlIG9mIHRoZSBjcm9wIHJlc2lkdWUuXG4gICAgQWRkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbXByb3ZlIGVtaXNzaW9ucyBhbmQgc29pbCBjYXJib24gc3RvY2sgY2FsY3VsYXRpb25zLlxuICAgIFRoZSBmYXRlIGNhbiBiZSBhZGRlZCB1c2luZzpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQvb3I8L2xpPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzOzwvbGk+XG4gICAgPC91bD5cbiAgICBSZW1lbWJlciB0byBzZXQgJHtjb2RlKCdjb21wbGV0ZW5lc3MuY3JvcFJlc2lkdWUnKX0gdG8gJHtjb2RlKFxuICAgICAgdHJ1ZVxuICAgICl9IGlmIGJvdGggdGhlIGFib3ZlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIHF1YW50aXRpZXMgYW5kIGZhdGVzIGFyZSBzcGVjaWZpZWQuYCxcbiAgJ3Nob3VsZCBoYXZlIHRoZSBzYW1lIHByaXZhY3kgYXMgdGhlIHJlbGF0ZWQgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRvIGxpbmsgdG8gYSAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBTb3VyY2UsXG4gICAgdGhpcyBOb2RlIG5lZWRzIHRvIGJlICR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IGFzIHdlbGwuXG4gICAgUGxlYXNlIHNldCAke2NvZGUoJ2RhdGFQcml2YXRlJyl9PSR7Y29kZShgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGV9YCl9LmAsXG4gICdzaG91bGQgbm90IHVzZSBub3QgcmVsZXZhbnQgbW9kZWwnOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluayhcbiAgICAgICdFbWlzc2lvbiNtZXRob2RUaWVyJyxcbiAgICAgICdzY2hlbWEnXG4gICAgKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtZXRob2RUaWVyJzogKCkgPT5cbiAgICBgQWxsIGVtaXNzaW9ucyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgYSBtZXRob2QgdGllciwgd2hpY2ggc3RhdGVzIGhvdyB0aGUgZGF0YSB3ZXJlIG1vZGVsbGVkIG9yIGhvdyB0aGUgZGF0YSB3ZXJlIGNvbGxlY3RlZC5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoXG4gICAgICAnRW1pc3Npb24jbWV0aG9kVGllcicsXG4gICAgICAnc2NoZW1hJ1xuICAgICl9IGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGRlZmluaXRpb25zIG9mIHRoZSBvcHRpb25zLmAsXG4gICdtdXN0IGhhdmUgaW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIHdoZW4gc2V0IHRvIHRydWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBDeWNsZSBpbmNsdWRlcyBhbmltYWxzICR7cGFyYW1zPy5zaXRlVHlwZSA/IGBvbiAke3BhcmFtcy5zaXRlVHlwZX1gIDogJyd9IGFuZCBjb21wbGV0ZW5lc3MgaXMgc2V0IHRvICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBmb3IgJHtjb2RlKCdncmF6ZWRGb3JhZ2UnKX0uXG4gICAgSG93ZXZlciwgdGhlcmUgYXJlIG5vIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UgYnkgYW5pbWFscyBpbiB0aGUgQ3ljbGUgKElucHV0cyB3aXRoIHRlcm1zIHdoaWNoIGNvbnRhaW4gdGhlIHdvcmRzIFwiZnJlc2ggZm9yYWdlXCIgYW5kIGEgJHtjb2RlKFxuICAgICAgJ3ZhbHVlJ1xuICAgICl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHtjb2RlKGZhbHNlKX0gZm9yICR7Y29kZShcbiAgICAgICdncmF6ZWRGb3JhZ2UnXG4gICAgKX0sIG1ha2Ugc3VyZSBhbGwgXCJmcmVzaCBmb3JhZ2VcIiBJbnB1dHMgaGF2ZSBhICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfSwgb3IgYWRkIG9uZSBvciBtb3JlIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UuYCxcbiAgJ211c3Qgc3BlY2lmeSBpcyBpdCBhbiBhbmltYWwgZmVlZCc6ICgpID0+XG4gICAgYFRoaXMgQ3ljbGUgaXMgYW4gYW5pbWFsIHByb2R1Y3Rpb24gQ3ljbGUgYW5kIHRoaXMgSW5wdXQgY291bGQgYmUgYW4gYW5pbWFsIGZlZWQgb3IgY291bGQgYmUgZm9yIGFub3RoZXIgdXNlLlxuICAgIFBsZWFzZSBzcGVjaWZ5IHRoZSAke3NjaGVtYUxpbmsoJ0lucHV0I2lzQW5pbWFsRmVlZCcsICdpc0FuaW1hbEZlZWQnKX0gZmllbGQgb24gdGhpcyBJbnB1dC5cbiAgICBLbm93aW5nIHRoZSBmYXRlIGlzIGVzc2VudGlhbCB0byBkaXN0aW5ndWlzaCBJbnB1dHMgYmV0d2VlbiB0aG9zZSB3aGljaCBhcmUgZmVkIHRvIGFuaW1hbHMgYW5kIHRob3NlIHdoaWNoIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy5gLFxuICAnc2hvdWxkIHNwZWNpZnkgYSB0cmVhdG1lbnQgd2hlbiBleHBlcmltZW50RGVzaWduIGlzIHNwZWNpZmllZCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0IHRoaXMgU291cmNlIHVzZXMgYW4gZXhwZXJpbWVudGFsIGRlc2lnbiwgYnV0IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgdHJlYXRtZW50IGZvciB0aGlzIEN5Y2xlLlxuICAgIEFkZGluZyB0aGUgdHJlYXRtZW50IHByb3ZpZGVzIGltcG9ydGFudCBtZXRhLWRhdGEgYW5kIHdpbGwgZW5hYmxlIGdyZWF0ZXIgcmUtdXNlIG9mIHRoZXNlIGRhdGEuXG4gICAgQWRkIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI3RyZWF0bWVudCcsICd0cmVhdG1lbnQnKX0gZmllbGQgdG8gdGhlIEN5Y2xlLlxuICAgIE5vdGUgdGhhdCB0aGUgZmllbGQgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCcsXG4gICAgICAnY29tbWVyY2lhbFByYWN0aWNlVHJlYXRtZW50J1xuICAgICl9IGJlY29tZXMgcmVxdWlyZWQgaWYgdHJlYXRtZW50IGlzIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIG5vdCBzcGVjaWZ5IGJvdGggbGl2ZUFuaW1hbCBhbmQgYW5pbWFsUHJvZHVjdCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIGFkZGVkIGJvdGggYSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxpdmVBbmltYWwpfSBhbmQgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmFuaW1hbFByb2R1Y3RcbiAgICApfSB0ZXJtIGFzIFByb2R1Y3RzLlxuICAgIElmIHRoZXNlIHRlcm1zIHJlZmVyIHRvIHRoZSBzYW1lIGFuaW1hbHMsIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZzpcbiAgICBpbnN0ZWFkIHVzZSBhIFByb3BlcnR5IG9uIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBUZXJtVGVybVR5cGUubGl2ZUFuaW1hbFxuICAgICl9IHRlcm0gdG8gZGVmaW5lIHRoZSBxdWFudGl0eSBvZiBsaXZld2VpZ2h0IHBlciBoZWFkLCBjYXJjYXNzIHdlaWdodCBwZXIgaGVhZCwgZXRjLmAsXG4gICdtdXN0IGFkZCBhbiBleGNyZXRhIHByb2R1Y3Qgd2l0aCBhIGxpdmVBbmltYWwgcHJvZHVjdCc6ICgpID0+XG4gICAgYEFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlcyBjcmVhdGUgZXhjcmV0YS5cbiAgICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBwcm9kdWN0IGluIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCBhbiAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBQcm9kdWN0IHRvIHRoZSBDeWNsZS5cbiAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IGEgJHtjb2RlKCd2YWx1ZScpfSBmb3IgdGhlIFByb2R1Y3QsIGJ1dCBhZGRpbmcgYSAke2NvZGUoJ3ZhbHVlJyl9IGlzIGRlc2lyYWJsZS5gLFxuICAndmFsdWUgc2hvdWxkIHN1bSB0byAxMDAgb3IgbGVzcyBhY3Jvc3Mgd2F0ZXIgcmVnaW1lIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSB0b3RhbCAlIGFyZWEgY292ZXJlZCBieSB0aGUgJHtjb2RlKFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZSl9IHByYWN0aWNlcyB5b3Ugc3BlY2lmaWVkIGlzIG5vdCBlcXVhbCB0byAke2NvZGUoXG4gICAgICAxMDBcbiAgICApfS5cbiAgICBNYWtlIHN1cmUgdG8gYWRkIGFueSBtaXNzaW5nIHByYWN0aWNlIGlmIG5lZWRlZCBhbmQvb3IgYWRqdXN0IHRoZSB2YWx1ZXMgb2YgdGhlICR7Y29kZShcbiAgICAgIFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZVxuICAgICl9IHByYWN0aWNlcyB5b3UgYWxyZWFkeSByZWNvcmRlZC5gLFxuICAncmljZSBwcm9kdWN0cyBub3QgYWxsb3dlZCBmb3IgdGhpcyB3YXRlciByZWdpbWUgcHJhY3RpY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBwcmFjdGljZSBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBwcm9kdWN0cyAke3BhcmFtcy5wcm9kdWN0cz8ubWFwKHAgPT4gY29kZShwLm5hbWUgfHwgcFsnQGlkJ10pKX0uXG4gICAgUmVjb3JkaW5nIHRoZSByaWdodCB3YXRlciByZWdpbWUgZm9yIHJpY2UgZW5zdXJlcyBtZXRoYW5lIGVtaXNzaW9ucyBmcm9tIGZsb29kZWQgZmllbGRzIGFyZSBjb3JyZWN0bHkgcmVjYWxjdWxhdGVkLlxuICAgIFRvIGZpeCB0aGlzIGVycm9yLCBlaXRoZXIgY2hhbmdlIHRoZSBwcmFjdGljZSBvciB0aGUgcHJvZHVjdHMuYCxcbiAgJ211c3Qgbm90IGJlIGVxdWFsIHRvIDEgaGEnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgJHtjb2RlKEN5Y2xlRnVuY3Rpb25hbFVuaXRbJzEgaGEnXSl9IGNhbm5vdCBiZSB1c2VkIGFzICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsXG4gICAgICAnZnVuY3Rpb25hbFVuaXQnXG4gICAgKX0gZm9yIEN5Y2xlcyBsaW5rZWQgdG8gU2l0ZXMgd2l0aCAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0gPSAke2NvZGUocGFyYW1zPy5zaXRlVHlwZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbFVuaXQnKX0gdG8gJHtjb2RlKFxuICAgICAgQ3ljbGVGdW5jdGlvbmFsVW5pdC5yZWxhdGl2ZVxuICAgICl9IG9yIGNoYW5nZSB0aGUgJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9LmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHZhbHVlIHdoZW4gSGVzdGlhIGhhcyBhIGRlZmF1bHQgb25lJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEFzIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSAke2NvZGUoJ3ZhbHVlJyl9LCB3ZSB3aWxsIGFzc3VtZSB0aGUgdmFsdWUgaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBJZiB0aGlzIGlzIGluY29ycmVjdCwgcGVsYXNlIGFkZCBhIHZhbHVlLmAsXG4gICdzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFuYWdlbWVudCBub2RlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7XG4gICAgICBwYXJhbXM/LnRlcm1UeXBlXG4gICAgICAgID8gYERvZXMgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgJHtjb2RlKHBhcmFtcy50ZXJtVHlwZSl9LlxuICAgICAgICBQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgaGlzdG9yeSBvZiAke2NvZGUoXG4gICAgICAgICAgcGFyYW1zLnRlcm1UeXBlXG4gICAgICAgICl9IGZvciBhcyBtYW55IHllYXJzIGFzIHBvc3NpYmxlIGluIHRoZSBNYW5hZ2VtZW50IGJsYW5rIG5vZGVzLmBcbiAgICAgICAgOiBgVGhlcmUgaXMgbm8gTWFuYWdlbWVudCBub2RlIHByZXNlbnQgaW4gdGhpcyB1cGxvYWQuXG4gICAgICAgIFdlIHJlY29tbWVuZCBhZGRpbmcgdGhpcyB0byB0aGUgU2l0ZSwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgYW5kIGhpc3RvcmljYWwgdGlsbGFnZS5cbiAgICAgICAgYFxuICAgIH1cbiAgICBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtb2RlbCBDTzxzdWI+Mjwvc3ViPiBlbWlzc2lvbnMgZnJvbSBzb2lsIG9yZ2FuaWMgY2FyYm9uIGNoYW5nZS5gLFxuICAnY2FuIG5vdCBiZSB1c2VkIG9uIHRoaXMgdGVybVR5cGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBQcm9wZXJ0eSBjYW4gb25seSBiZSB1c2VkIG9uIGJsYW5rIG5vZGVzIHdpdGggdGhlIGZvbGxvd2luZyAke2NvZGUoJ3Rlcm0udGVybVR5cGUnKX06ICR7cGFyYW1zLmV4cGVjdGVkXG4gICAgICAubWFwKGNvZGUpXG4gICAgICAuam9pbignLCAnKX0uYCxcbiAgJ25vdCBhIHZhbGlkIEdlb0pTT04nOiAoeyBwYXJhbXMgfSkgPT4gYFxuICAke1xuICAgIHBhcmFtcz8uaW52YWxpZENvb3JkaW5hdGVzID09PSAndHJ1ZSdcbiAgICAgID8gYEdlb0pTT04gZGF0YSBzaG91bGQgZm9sbG93IHRoZSBXR1M4NCBkYXR1bS5cbiAgV2UgaGF2ZSBmb3VuZCBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSAtMTgwIHRvICsxODAgcmFuZ2Ugd2hpY2ggaXMgbm90IHBvc3NpYmxlIHVuZGVyIFdHUzg0LlxuICBQbGVhc2UgY2hlY2sgdGhlIGRhdHVtIG9yIGNoZWNrIGZvciBvdGhlciBwb3NzaWJsZSBlcnJvcnMuYFxuICAgICAgOiAnVGhpcyBHZW9KU09OIGFwcGVhcnMgdG8gYmUgaW52YWxpZC4nXG4gIH1cbiAgWW91IGNhbiB2YWxpZGF0ZSB5b3VyIEdlb0pTT04gdXNpbmcgYW4gb25saW5lIHRvb2wgbGlrZSA8YSBocmVmPVwiaHR0cHM6Ly9nZW9qc29uLmlvL1wiPmdlb2pzb24uaW88L2E+LlxuICBJZiB5b3UgdGhpbmsgdGhpcyBpcyBhIG1pc3Rha2UsIHBsZWFzZSByZXBvcnQgdGhlIGVycm9yICR7cmVwb3J0SXNzdWVMaW5rKFJlcG9zaXRvcnkuc2NoZW1hLCBUZW1wbGF0ZS5idWcpfS5gLFxuICAnc2hvdWxkIGFkZCB0aGUgdGVybSBzdG9ja2luZ0RlbnNpdHlQZXJtYW5lbnRQYXN0dXJlQXZlcmFnZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgZGlkIG5vdCBzcGVjaWZ5ICR7bm9kZUxpbmsoeyAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogcGFyYW1zLmV4cGVjdGVkIH0pfS5cbiAgICBBZGRpbmcgdGhpcyBQcmFjdGljZSBpcyBlc3NlbnRpYWwgZm9yIEN5Y2xlcyB3aXRoIHJlbGF0aXZlIGZ1bmN0aW9uYWwgdW5pdCB3aGljaCBoYXBwZW4gZW50aXJlbHkgb3IgcGFydGlhbGx5IG9uIHBlcm1hbmVudCBwYXN0dXJlLlxuICAgIFdpdGhvdXQgdGhpcyBpbmZvcm1hdGlvbiBIZXN0aWEgY2Fubm90IGNhbGN1bGF0ZSBhbmltYWwgcmVsYXRlZCBlbWlzc2lvbnMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBoZXJkIGNvbXBvc2l0aW9uJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgaGVyZCBjb21wb3NpdGlvbiB1c2luZyB0aGUgQW5pbWFsIG5vZGUuXG4gICAgV2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcmUtbW9kZWwgbWFueSBhbmltYWwgcmVsYXRlZCBJbnB1dHMsIFByb2R1Y3RzLCBhbmQgRW1pc3Npb25zLmBcbn07XG5cbmNvbnN0IHBhcnNlRGVmYXVsdE1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZykgPT5cbiAgYDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWQtZmlyc3QtbGV0dGVyXCI+JHtcbiAgICBtZXNzYWdlPy5zdGFydHNXaXRoKCdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eScpXG4gICAgICA/IG1lc3NhZ2UucmVwbGFjZShcIidcIiwgJzxjb2RlPicpLnJlcGxhY2UoXCInXCIsICc8L2NvZGU+JylcbiAgICAgIDogbWVzc2FnZVxuICB9PC9zcGFuPmA7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAoXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4gIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcixcbiAgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXVxuKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBjdXN0b21FcnJvck1lc3NhZ2U/LlttZXNzYWdlXVxuICAgID8gY3VzdG9tRXJyb3JNZXNzYWdlW21lc3NhZ2VdKGVycm9yISwgYWxsRXJyb3JzLmxlbmd0aCwgYWxsRXJyb3JzKVxuICAgIDogcGFyc2VEZWZhdWx0TWVzc2FnZShtZXNzYWdlKTtcbiAgcmV0dXJuIGZvcm1hdHRlZE1lc3NhZ2UgPyBgPHAgY2xhc3M9XCJpcy1ub3JtYWxcIj4ke2Zvcm1hdHRlZE1lc3NhZ2V9PC9wPmAgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRFcnJvciA9IChcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLFxuICBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdXG4pOiBJVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0+XG4gIGVycm9yXG4gICAgPyB7XG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAuLi5lcnJvcixcbiAgICAgICAgbWFwRXJyb3I6IGVycm9yLm1lc3NhZ2UgPT09IG1hcEVycm9yTWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZTogZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yLm1lc3NhZ2UsIGVycm9yLCBhbGxFcnJvcnMpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc0Vycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgKGVycm9yLmxldmVsID09PSAnZXJyb3InIHx8ICFlcnJvci5sZXZlbCk7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc1dhcm5pbmcgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiBlcnJvci5sZXZlbCA9PT0gJ3dhcm5pbmcnO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nUHJvcGVydHlFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnbWlzc2luZ1Byb3BlcnR5JyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdPbmVPZkVycm9yID0gKHsga2V5d29yZCwgc2NoZW1hUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChzY2hlbWFQYXRoIHx8ICcnKS5pbmNsdWRlcygnb25lT2YnKTtcblxuY29uc3QgaXNGYWlsaW5nS2V5d29yZEVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdmYWlsaW5nS2V5d29yZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXJyb3IgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IpID0+IFtpc0ZhaWxpbmdLZXl3b3JkRXJyb3JdLmV2ZXJ5KGZ1bmMgPT4gIWZ1bmMoZXJyb3IpKTtcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdOb2RlRXJyb3JzID0gKGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdKSA9PlxuICBlcnJvcnMuZmlsdGVyKFxuICAgICh7IGtleXdvcmQsIHBhcmFtcyB9KSA9PlxuICAgICAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAocGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAdHlwZScgfHwgcGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAaWQnKVxuICApO1xuIl19
|