@hestia-earth/ui-components 0.21.6 → 0.21.7

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.
@@ -175,6 +175,8 @@ const customErrorMessage = {
175
175
  ${level === 'error' ?
176
176
  'Please check the Terms used in the Emissions and/or the Transformations.' :
177
177
  'You may want to add this Transformation.'}`,
178
+ 'every node should be unique': ({ params }) => `This Node is duplicated. Every Node should be unique.
179
+ Uniqueness is determined by the following fields: ${(params?.keys || []).map(code).join(', ')}`,
178
180
  'every item in the list should be unique': ({ params }) => `This Blank Node is duplicated. Every Blank Node should be unique.
179
181
  Uniqueness is determined by the following fields: ${(params?.keys || []).map(code).join(', ')}`,
180
182
  'must contain as many items as values': ({ params, dataPath }) => `The number of ${code(dataPath.split('.').pop())} must match the number of ${code('value')}.
@@ -306,9 +308,9 @@ const customErrorMessage = {
306
308
  Either change the ${schemaLink('Cycle#functionalUnit', 'functionalUnit')} to ${code(CycleFunctionalUnit.relative)} or change the ${schemaLink('Site#siteType', 'siteType')}.`,
307
309
  'should specify a value when Hestia has a default one': ({ params }) => `As you have not specified a ${code('value')}, we will assume the value is ${code(params?.expected)}.
308
310
  If this is incorrect, pelase add a value.`,
309
- 'should contain at least one management node': (error, _errorCount, allErrors) => `Does not contain information about ${(allErrors.length ? allErrors : [error]).map(({ params }) => code(params.termType)).join(' or ')}.
311
+ 'should contain at least one management node': (error, _errorCount, allErrors) => `Does not contain information about ${unique((allErrors.length ? allErrors : [error]).map(({ params }) => code(params.termType))).join(', or ')}.
310
312
  We use this information to model CO2 emissions from soil organic carbon changes.
311
- Please consider adding a history of ${(allErrors.length ? allErrors : [error]).map(({ params }) => code(params.termType)).join(', ')} for as many years as possible in the Management Blank Nodes.`
313
+ Please consider adding a history of ${unique((allErrors.length ? allErrors : [error]).map(({ params }) => code(params.termType))).join(', ')} for as many years as possible in the Management Blank Nodes.`
312
314
  };
313
315
  export const formatCustomErrorMessage = (message, error, allErrors = []) => {
314
316
  const formattedMessage = message && message in customErrorMessage ?
@@ -333,4 +335,4 @@ export const filterError = (error) => [
333
335
  isFailingKeywordError
334
336
  ].every(func => !func(error));
335
337
  export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVEsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQThCaEQsTUFBTSxlQUFlLEdBQUcseUNBQXlDLENBQUM7QUFFbEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNw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TUFBTSxFQUFFLEVBQUUsRUFBRSxDQUNwQyxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsS0FBSyxPQUFPLElBQUksTUFBTSxFQUFFLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5pbXBvcnQgeyBDeWNsZUZ1bmN0aW9uYWxVbml0LCBTY2hlbWFUeXBlLCBTaXRlU2l0ZVR5cGUsIFRlcm0sIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHRvUHJlY2lzaW9uLCBrZXlUb0xhYmVsLCB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgdGVybVR5cGVMYWJlbCB9IGZyb20gJy4uL3Rlcm1zL3Rlcm1zLm1vZGVsJztcbmltcG9ydCB7IHBhdGhUb0FwaURvY3NQYXRoIH0gZnJvbSAnLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwsIGNvZGUsIGNvbnRhY3RVc0xpbmssIGV4dGVybmFsTGluaywgZ2xvc3NhcnlMaW5rLCBzY2hlbWFMaW5rIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4uL2NvbW1vbi9wbHVyYWxpemUnO1xuXG4vLyBUT0RPOiBhZGQgbW9yZSB2YWxpZGF0aW9uIGtleXdvcmQgYW5kIHBhcmFtc1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yTGV2ZWwgPSAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yUGFyYW0gPSAnbWlzc2luZ1Byb3BlcnR5JyB8ICd0eXBlJyB8ICd0ZXJtJyB8ICd0ZXJtVHlwZScgfCAnbW9kZWwnIHwgJ3Byb2R1Y3QnIHwgJ3JhbmdlJyB8ICdub2RlJyB8XG4gICdhbGxvd2VkVmFsdWVzJyB8ICdhbGxvd2VkVmFsdWUnIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eScgfCAnZXhwZWN0ZWQnIHwgJ2RlZmF1bHQnIHwgJ2N1cnJlbnQnIHwgJ3BlcmNlbnRhZ2UnIHwgJ2tleXMnIHxcbiAgJ3RocmVzaG9sZCcgfCAnb3V0bGllcnMnIHwgJ2NvdW50cnknIHwgJ21pbicgfCAnbWF4JyB8ICdkZWZhdWx0U291cmNlJyB8ICdzb3VyY2UnIHwgJ2dyb3VwJyB8ICdtZXNzYWdlJyB8ICdkaXN0YW5jZScgfFxuICAnc2l0ZVR5cGUnIHwgJ3Byb2R1Y3RzJyB8ICd1bml0cyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkID0gJ3JlcXVpcmVkJyB8ICd0eXBlJyB8ICdpZicgfCAndGhlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvciB7XG4gIGluZGV4PzogbnVtYmVyO1xuICBub2RlSW5kZXg/OiBudW1iZXI7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIGRhdGFQYXRoPzogc3RyaW5nO1xuICBzY2hlbWFQYXRoPzogc3RyaW5nO1xuICBrZXl3b3JkPzogdmFsaWRhdGlvbkVycm9yS2V5d29yZDtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBwYXJhbXM/OiB7IFtrZXkgaW4gdmFsaWRhdGlvbkVycm9yUGFyYW1dPzogYW55IH07XG4gIG1hcEVycm9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURhdGFQYXRoID0gKGRhdGFQYXRoID0gJycpID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoLnJlcGxhY2UoL1tcXFtcXF1cXCdcXCdcXFwiXFxcIl0vZywgJycpLnJlcGxhY2UoLyhcXHcpKFxcQCkvZywgJyQxLkAnKS5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4gKHtcbiAgICBwYXRoOiBwYXRoLnJlcGxhY2UoLyhcXGQrKS9nLCAnWyQxXScpLFxuICAgIGxhYmVsOiBwbHVyYWxpemUoa2V5VG9MYWJlbChwYXRoLnJlcGxhY2UoL1tcXGRcXEBdKy9nLCAnJykpLCAxKVxuICB9KSk7XG59O1xuXG5jb25zdCBnbG9zc2FyeVR5cGVMaW5rID0gKHR5cGU6IFRlcm1UZXJtVHlwZSwgdGV4dCA9IHRlcm1UeXBlTGFiZWwodHlwZSkpID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L2dsb3NzYXJ5P3Rlcm1UeXBlPSR7dHlwZX1gLCB0ZXh0KTtcbmNvbnN0IHRlcm1MaW5rID0gKHsgaWQsIG5hbWUgfTogUGFydGlhbDxUZXJtPikgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vdGVybS8ke2lkfWAsIG5hbWUgfHwgaWQpO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPVxuICBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoJzIwMDAtMTItMzAnKX1gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdub1RpbGxhZ2UnLCBuYW1lOiAnTm8gdGlsbGFnZScgfTtcbmNvbnN0IHBhc3R1cmVHcmFzczogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdwYXN0dXJlR3Jhc3MnLCBuYW1lOiAnUGFzdHVyZSBncmFzcycgfTtcblxuY29uc3QgaWROb3RGb3VuZERlZmF1bHRNZXNzYWdlID0gYFxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIG1ha2Ugc3VyZSB0byB1c2UgJHtjb2RlKCd0ZXJtLm5hbWUnKX0gY29sdW1uO1xuICBpZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ0BpZCcpfSBvZiB0aGUgVGVybSwgdXNlIHRoZSAke2NvZGUoJ3Rlcm0uQGlkJyl9IGNvbHVtbiBpbnN0ZWFkLlxuYC50cmltKCk7XG5cbmV4cG9ydCBjb25zdCBpc01pZ3JhdGlvbkVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+IHBhcmFtcz8uY3VycmVudCAmJiAoJ2V4cGVjdGVkJyBpbiBwYXJhbXMpO1xuXG5leHBvcnQgY29uc3QgbWlncmF0aW9uRXJyb3JNZXNzYWdlID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICA/IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgdXBkYXRlZCwgcGxlYXNlIHVzZSB0aGlzIFRlcm0gaW5zdGVhZDogJHtjb2RlKHBhcmFtcy5leHBlY3RlZCl9LmBcbiAgICA6IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgZGVsZXRlZC4gUGxlYXNlIHNlYXJjaCB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciBhIG5ldyBUZXJtLmA7XG5cbmNvbnN0IGlkTm90Rm91bmRFcnJvcjogaGFuZGxlRXJyb3JGdW5jID0gKF9lcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT4ge1xuICBjb25zdCBtaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGlzTWlncmF0aW9uRXJyb3IpO1xuICBjb25zdCBub01pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoZXJyb3IgPT4gIWlzTWlncmF0aW9uRXJyb3IoZXJyb3IpKTtcbiAgcmV0dXJuIGBcbiAgICA8cD5Eb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuPC9wPlxuICAgICR7bm9NaWdyYXRpb25FcnJvcnMubGVuZ3RoID8gYDxwPiR7aWROb3RGb3VuZERlZmF1bHRNZXNzYWdlfTwvcD5gIDogJyd9XG4gICAgJHt1bmlxdWUobWlncmF0aW9uRXJyb3JzLm1hcChtaWdyYXRpb25FcnJvck1lc3NhZ2UpKS5qb2luKCc8L2JyPicpfVxuICBgO1xufTtcblxuLy8gc2V0IG1lc3NhZ2UgYXMgZW1wdHkgdG8gbm90IGRpc3BsYXkgaXRcbmNvbnN0IGN1c3RvbUVycm9yTWVzc2FnZToge1xuICBba2V5OiBzdHJpbmddOiBoYW5kbGVFcnJvckZ1bmM7XG59ID0ge1xuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnQGlkXFwnJzogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnQHR5cGVcXCcnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ2lkXFwnJzogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggXCJ0aGVuXCIgc2NoZW1hJzogKCkgPT4gJycsXG4gICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgVGhlIGZvbGxvd2luZyBmaWVsZCBkb2VzIG5vdCBleGlzdDogJHtwYXJhbXM/LmFkZGl0aW9uYWxQcm9wZXJ0eX0gb3IgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjYXNlLmAgOlxuICAgICAgYFNob3VsZCBub3QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuYCxcbiAgJ3Nob3VsZCBOT1QgYmUgdmFsaWQnOiAoKSA9PiAnU2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS4nLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeXFxcXGR7MTN9JFwiJzogKCkgPT4gYHNob3VsZCBiZSBjb21wb3NlZCBvZiAxMyBudW1iZXJzYCxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlswLTldezR9KC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyhbVF1bMC0yXVswLTldXFw6WzAtNV1bMC05XVxcOlswLTVdWzAtOV0oKFxcK3xcXC0pWzAtMV1bMC05XTpbMC01XVswLTldKT8pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBleGlzdGluZyBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICA/IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSBmb2xsb3dpbmcgTm9kZXM6XG4gICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7XG4gICAgICAgIHVuaXF1ZShhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgPGxpPiR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfTwvbGk+YCkpLmpvaW4oJ1xcbicpXG4gICAgICB9XG4gICAgICA8L3VsPlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7XG4gICAgICAgIHVuaXF1ZShhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gKSkuam9pbignLCAnKVxuICAgICAgfWBcbiAgICAgIDogYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gYSAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKGVycm9yLnBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgIHBhcmFtcz8uZGlzdGFuY2UgPyBgICR7cGFyYW1zPy5kaXN0YW5jZX1rbXNgOiAnJ1xuICAgICAgfSBvdXRzaWRlIG9mIHRoZSAke2RhdGFQYXRoLnN1YnN0cmluZygxKX0gcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciBjaGVjayBpZiB0aGUgd3JvbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9IGZyb20gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUucmVnaW9uLCAnR2xvc3NhcnknKX0gd2FzIHVzZWQuXG4gICAgICAke3BhcmFtcz8uZXhwZWN0ZWQgPyBgSGludDogdGhlIGNvb3JkaW5hdGVzIGFwcGVhciB0byBiZSBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9OiAke3Rlcm1MaW5rKHsgaWQ6ICdwYXJhbXMuZXhwZWN0ZWQnIH0pfWAgOiAnJ31gXG4gICAgICA6IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzpcbiAgICAoKSA9PiBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICAgID8gYFRoZSB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyBvdXRzaWRlIHRoZSByYW5nZSBlc3RhYmxpc2hlZCBmb3IgdGhlIHNvaWwgdGV4dHVyZSB5b3UgcHJvdmlkZWQuXG4gICAgICAgICAgICBGb3IgdGhpcyBzb2lsIHRleHR1cmUsIHRoZSBtYXhpbXVtICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgJHtwYXJhbXM/LnJhbmdlPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOlxuICAgICh7IHBhcmFtcywgZGF0YVBhdGggfSkgPT4ge1xuICAgICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHBhdGhzLmxlbmd0aCA+PSAyXG4gICAgICAgID8gcGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGgsIHBhcmFtcz8uYWxsb3dlZFZhbHVlcz8ubGVuZ3RoIHx8IDApXG4gICAgICAgIDogJ3ZhbHVlcyc7XG4gICAgICByZXR1cm4gYE9ubHkgdGhlICR7XG4gICAgICAgIHBhdGhzLmxlbmd0aCA9PT0gMyA/IGAke3BhdGhzWzFdLmxhYmVsfSB3aXRoIHRoZSBgIDogJydcbiAgICAgIH1mb2xsb3dpbmcgJHt2YWx1ZXN9IGFyZSBwZXJtaXR0ZWQgZm9yICR7cGF0aHNbMF0ubGFiZWx9OiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX0uXG4gICAgICBQbGVhc2UgZWl0aGVyIGNoYW5nZSB0aGUgJHtcbiAgICAgICAgcGF0aHMubGVuZ3RoID49IDIgPyBwYXRoc1sxXS5sYWJlbCA6IHBhdGhzWzBdLmxhYmVsXG4gICAgICB9IHlvdSBhcmUgdXNpbmcgYW5kIGVuc3VyZSBpdCBoYXMgb25lIG9mIHRoZSAke3ZhbHVlc30gbGlzdGVkIGFib3ZlLFxuICAgICAgb3IgZm9sbG93IHRoZSBzY2hlbWEgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyAke1xuICAgICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBhdGhzWzFdLmxhYmVsIDogcGF0aHNbMF0ubGFiZWxcbiAgICAgIH0gY2FuIGJlIGFkZGVkLmA7XG4gICAgfSxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudCc6XG4gICAgKHsgcGFyYW1zIH0pID0+IGBNdXN0IGJlOiAke2NvZGUocGFyYW1zPy5hbGxvd2VkVmFsdWUpfWAsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBjaGFyYWN0ZXJpc2VkSW5kaWNhdG9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7ZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgJHtcbiAgICAgICAgcGFyYW1zPy5hbGxvd2VkVmFsdWVzLmxlbmd0aCA/XG4gICAgICAgICAgYGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBvbmUgb2YgdGhlc2UgbWV0aG9kczogJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9YCA6XG4gICAgICAgICAgYGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFueSBtZXRob2QgYWxsb3dlZC4gUGxlYXNlICR7Y29udGFjdFVzTGluaygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICB9LmAgOlxuICAgICAgYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYH1cbiAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtZXRob2RzIGZvciBlYWNoIFRlcm0gYnkgY2xpY2tpbmcgb24gdGhlbS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMlxuICAgICAgPyBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgXG4gICAgICA6IGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAnUGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZShmYWxzZSl9LiBZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGZpbGwgaXQgaW4uXG4gIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmlsbCBpdCBpbiwgcGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNjb21wbGV0ZW5lc3MnLCAnc2NoZW1hJyl9LmAsXG4gICdtYXkgbm90IGJlIGVtcHR5JzogKCkgPT4gJ2lmIHRoaXMgdmFsdWUgc2lnbmlmaWVzIG5vIGRhdGEsIEhlc3RpYSBvbmx5IGFjY2VwdHMgXCItXCIgb3IgZW1wdHkgZm9yIG5vIGRhdGEnLFxuICAnbWF5IG5vdCBiZSAwJzogKHsgZGF0YVBhdGggfSwgZXJyb3JDb3VudCkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgQWRkaW5nIGEgdmFsdWUgJHtlcnJvckNvdW50ID09PSAxID8gYCB0byBldmVyeSAke3BhdGhzWzBdLmxhYmVsfSBgIDogJyAnfSBpcyBoaWdobHkgcmVjb21tZW5kZWRcbiAgICAgIGFzIHdpdGhvdXQgdGhpcyBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsY3VsYXRlIHRoZSBJbXBhY3QgQXNzZXNzbWVudC5cbiAgICAgIElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgd2UgcmVjb21tZW5kIHNldHRpbmcgdmFsdWUgdG8gMC5gO1xuICB9LFxuICAndGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8nOiAoKSA9PlxuICAgIGBGb3Igc2l0ZXMgb2YgdHlwZSAke2NvZGUoU2l0ZVNpdGVUeXBlLmNyb3BsYW5kKX0gb3IgJHtjb2RlKFNpdGVTaXRlVHlwZVsncGVybWFuZW50IHBhc3R1cmUnXSl9LFxuICAgIGlmIGRhdGEgY29tcGxldGVuZXNzIGlzIG1hcmtlZCAke2NvZGUodHJ1ZSl9IGZvciBjcm9wIHJlc2lkdWUsXG4gICAgdGhlIHN1bSBvZiB0aGUgQWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSB0ZXJtcyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8sXG4gICAgYW5kIEJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLmAsXG4gICdsb25nRmFsbG93UGVyaW9kIG11c3QgYmUgbG93ZXIgdGhhbiA1IHllYXJzJzogKCkgPT5cbiAgICBgWW91ciBsb25nRmFsbG93UGVyaW9kIGlzIGdyZWF0ZXIgdGhhbiBmaXZlIHllYXJzLlxuICAgIEZhbGxvdyBpcyBkZWZpbmVkIGJ5IEZBT1NUQVQgYXMgbGFuZCBsZWZ0IHVuY3VsdGl2YXRlZCBmb3IgYmV0d2VlbiAxIGFuZCA1IHllYXJzLFxuICAgIGFuZCB0aGlzIGRlZmluaXRpb24gaXMgdXNlZCBmb3IgSGVzdGlhIGFsc28uYCxcbiAgJ3Nob3VsZCBiZSB3aXRoaW4gcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgVGhpcyB2YWx1ZSBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0gZGlmZmVyZW50IHRvIG91ciBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICR7cGFyYW1zPy5kZWZhdWx0fS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCA6XG4gICAgICBgVGhpcyB2YWx1ZSBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCB0aGFuIG91ciBkZWZhdWx0IHZhbHVlLlxuICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAndGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgcmVzdWx0IGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMykpfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9XG4gICAgICAgIFBsZWFzZSBlaXRoZXI6XG4gICAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlIGRhdGEgeW91IHByb3ZpZGVkIHdoaWNoIGlzIHRoZSBpbnB1dCBpbnRvIHRoaXMgbW9kZWw7PC9saT5cbiAgICAgICAgPGxpPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfWAgOlxuICAgICAgICBgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LmBcbiAgICB9YCxcbiAgJ211c3QgYmUgZXF1YWwgdG8gcHJldmlvdXMgcHJvZHVjdCBtdWx0aXBsaWVkIGJ5IHRoZSBzaGFyZSc6ICgpID0+XG4gICAgYFByb2R1Y3RzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiB3aGljaCBhcmUgYW4gSW5wdXQgaW4gdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlOlxuICAgICR7Y29kZSgncHJldmlvdXMucHJvZHVjdC52YWx1ZSAqIGN1cnJlbnQudHJhbnNmb3JtZWRTaGFyZSAvIDEwMCA9PSBjdXJyZW50LmlucHV0LnZhbHVlJyl9YCxcbiAgJ2F0IGxlYXN0IG9uZSBJbnB1dCBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUnOiAoKSA9PlxuICAgIGBBIFRyYW5zZm9ybWF0aW9uIGNvbnZlcnRzIGEgUHJvZHVjdCBmcm9tIGEgQ3ljbGUgaW50byBhbm90aGVyIFByb2R1Y3QuXG4gICAgVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgSW5wdXQgaW50byB0aGUgVHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlLmAsXG4gICdtdXN0IGhhdmUgb25seSBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSB0ZXJtLnRlcm1UeXBlID0gZXhjcmV0YU1hbmFnZW1lbnQnOiAoKSA9PlxuICAgIGBUaGVyZSBjYW4gb25seSBiZSBvbmUgUHJhY3RpY2Ugb2YgdHlwZSBleGNyZXRhTWFuYWdlbWVudCBpbiBhIEN5Y2xlLlxuICAgIFRvIHJlcHJlc2VudCBtdWx0aXBsZSBleGNyZXRhIG1hbmFnZW1lbnQgc3lzdGVtcyBlaXRoZXIgdXNlIG11bHRpcGxlIEN5Y2xlcyBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLFxuICAgIG9yIHVzZSBUcmFuc2Zvcm1hdGlvbnMgd2l0aGluIGEgQ3ljbGUgYW5kIGxpbmsgdGhvc2UgdG9nZXRoZXIuYCxcbiAgJ211c3QgYmUgaW5jbHVkZWQgYXMgYW4gSW5wdXQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4Y3JldGEgUHJvZHVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBleGNyZXRhIElucHV0cy5cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBFLmcuLCB5b3UgY2Fubm90IGdldCAke1xuICAgICAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKVxuICAgICAgICB9IGZyb20gJHtcbiAgICAgICAgICAocGFyYW1zPy5leHBlY3RlZCB8fCBbXSkubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSkuam9pbignIG9yICcpXG4gICAgICAgIH0uYCA6XG4gICAgICAgICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtcbiAgICAgICAgICBwYXJhbXM/LmV4cGVjdGVkPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpLmpvaW4oJyAsICcpXG4gICAgICAgIH1gOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIElucHV0cydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHRoZXNlIElucHV0cyBkbyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgdGhlc2UgSW5wdXRzLCBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHZhbHVlIGZvciB0aGVtLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY3ljbGUnOiAoeyBsZXZlbCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0JHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YCA6XG4gICAgICAgICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InID9cbiAgICAgICAgJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLicgOlxuICAgICAgICAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIEJsYW5rIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgQmxhbmsgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHtcbiAgICAgIChwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpXG4gICAgfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZSgndmFsdWUnKX0uYCxcbiAgJ2lzIHRvbyBnZW5lcmljJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgUHJvZHVjdCAke2NvZGUocGFyYW1zPy5wcm9kdWN0Py5uYW1lKX0gaG93ZXZlcixcbiAgICB5b3UgaGF2ZSB1c2VkIGEgZ2VuZXJpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IHRlcm0gJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9LlxuICAgIFVzZSBhIG1vcmUgc3BlY2lmaWMgdGVybSBmb3IgdGhlICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpXG4gICAgfSB3aGljaCByZWZsZWN0cyB0aGUgc3BlY2lmaWMgJHtcbiAgICAgIGdsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSlcbiAgICB9LmAsXG4gICdzaG91bGQgbm90IHVzZSBpZGVudGljYWwgdGVybXMgd2l0aCBkaWZmZXJlbnQgdW5pdHMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgdGhlIHNhbWUgJHtcbiAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSlcbiAgICB9IGluICR7XG4gICAgICBwYXJhbXM/LnVuaXRzPy5tYXAodW5pdCA9PiBjb2RlKHVuaXQpKS5qb2luKCcgYW5kICcpXG4gICAgfSB1bml0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSAke1xuICAgICAgY29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKVxuICAgIH0sIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZy4ke1xuICAgICAgcGFyYW1zPy51bml0cz8uaW5jbHVkZXMoJ2tnIE4nKVxuICAgICAgICA/IGAgSW5zdGVhZCB1c2UgdGhlICR7XG4gICAgICAgICAgdGVybUxpbmsoeyBpZDogJ25pdHJvZ2VuQ29udGVudCcsIG5hbWU6ICdOaXRyb2dlbiBDb250ZW50JyB9KVxuICAgICAgICB9IFByb3BlcnR5IG9uIHRoZSAke2NvZGUoJ2tnJyl9IHRlcm0gdG8gZGVmaW5lIHRoZSBuaXRyb2dlbiBjb250ZW50IG9mIHRoZSAke1xuICAgICAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSlcbiAgICAgICAgfS5gXG4gICAgICAgIDogJydcbiAgICB9YCxcbiAgJ2lzIG1pc3NpbmcgcmVxdWlyZWQgYmlibGlvZ3JhcGhpYyBpbmZvcm1hdGlvbic6ICgpID0+XG4gICAgYFRoZSBhdXRvbWF0aWMgYmlibGlvZ3JhcGh5IHNlYXJjaCBmYWlsZWQgZm9yIHRoaXMgQmlibGlvZ3JhcGh5LiBFaXRoZXI6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRlY2ltYWxcIj5cbiAgICA8bGk+TWFudWFsbHkgZmlsbC1pbiB0aGUgPGI+cmVxdWlyZWQ8L2I+IGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24gYXMgcGVyICR7c2NoZW1hTGluayhTY2hlbWFUeXBlLkJpYmxpb2dyYXBoeSwgJ291ciBzY2hlbWEnKX0uPC9saT5cbiAgICA8bGk+UHJvdmlkZSB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhcyB3ZWxsIGFzIHRoZSAke2NvZGUoJ3RpdGxlJyl9LjwvbGk+XG4gICAgPGxpPkNoZWNrIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFuZCAke2NvZGUoJ3RpdGxlJyl9IGZvciB0eXBvcyBhZ2FpbnN0IHRoZSAke2V4dGVybmFsTGluaygnaHR0cHM6Ly93d3cubWVuZGVsZXkuY29tJywgJ01lbmRlbGV5IGNhdGFsb2d1ZScpfS48L2xpPlxuICAgIDwvdWw+YCxcbiAgJ3Nob3VsZCBiZSBsb3dlciB0aGFuIG1heCBzaXplJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBib3VuZGFyeSBvciByZWdpb24gaXMgPiR7cGFyYW1zPy5leHBlY3RlZH1rbTIgYW5kIGlzIHRvbyBsYXJnZSB0byByZWxpYWJseSBnYXAgZmlsbCBNZWFzdXJlbWVudHMuXG4gICAgSWYgeW91IGFyZSBhYmxlIHRvIHVzZSBhIG1vcmUgc3BlY2lmaWMgcmVnaW9uIG9yIHNtYWxsZXIgYm91bmRhcnksIHBsZWFzZSBkby5gLFxuICAnYW4gZXhjcmV0YSBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGFuIGV4Y3JldGFNYW5hZ2VtZW50IHByYWN0aWNlJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgRXhjcmV0YSBtYW5hZ2VtZW50IGlzIHRoZSBjb252ZXJzaW9uIG9mIGV4Y3JldGEgdG8gYW5vdGhlciB0eXBlIG9mIGV4Y3JldGEuXG4gICAgICBZb3UgaGF2ZSBhZGRlZCBhbiBleGNyZXRhTWFuYWdlbWVudCBQcmFjdGljZSB0byB0aGlzICR7cGF0aHNbMF0ubGFiZWx9IGJ1dCB0aGVyZSBpcyBubyBleGNyZXRhIElucHV0LlxuICAgICAgVG8gcmVwcmVzZW50IGV4Y3JldGEgbWFuYWdlbWVudCwgdXNlIGEgJHtwYXRoc1swXS5sYWJlbH0gd2l0aCBleGNyZXRhIGFzIGFuIElucHV0IGFuZCBleGNyZXRhTWFuYWdlbWVudCBhcyBhIFByYWN0aWNlLmA7XG4gIH0sXG4gICdvbmx5IDEgcHJpbWFyeSBwcm9kdWN0IGFsbG93ZWQnOiAoKSA9PiAnVGhlcmUgY2FuIG9ubHkgYmUgb25lIHByaW1hcnkgcHJvZHVjdCBpbiBlYWNoIEN5Y2xlLicsXG4gICdpcyBub3QgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG5vVGlsbGFnZSc6ICgpID0+XG4gICAgYFRoaXMgb3BlcmF0aW9uIGludm9sdmVzIHRpbGxhZ2UsIHlldCB5b3UgaGF2ZSBzcGVjaWZpZWQgdGhlIFByYWN0aWNlICR7dGVybUxpbmsobm9UaWxsYWdlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGlzIG9wZXJhdGlvbiBvciB0aGUgUHJhY3RpY2UuYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIHRpbGxhZ2UgdXNlZCBmb3IgdGhpcyBDeWNsZS5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBnbG9zc2FyeS5gLFxuICAnbXVzdCBzZXQgdmFsdWUgZm9yIGV2ZXJ5IHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBFaXRoZXIgc3BlY2lmeSBhIHNpbmdsZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZSBvciBhZGQgYSB2YWx1ZSB0byBhbGwgcHJhY3RpY2VzLmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHRpbGxhZ2UgcHJhY3RpY2VzJzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZXMgbXVzdCBlcXVhbCAxMDAlLmAsXG4gICdjYW4gb25seSBoYXZlIDEgdGlsbGFnZSBwcmFjdGljZSB3aXRob3V0IGEgdmFsdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIEN5Y2xlIHRvIGhhdmUgdGhlIGZvbGxvd2luZyB0aWxsYWdlIFByYWN0aWNlczpcbiAgICAkeyhwYXJhbXM/LmN1cnJlbnQgPz8gW10pLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJyBhbmQgJyl9IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgSWYgbXVsdGlwbGUgdGlsbGFnZSBwcmFjdGljZXMgZGlkIG9jY3VyLCBwbGVhc2Ugc3BlY2lmeSB0aGUgcGVyY2VudGFnZSBvZiBhcmVhIHRoZXkgb2NjdXJyZWQgb24uYCxcbiAgJ2NhbiBub3QgYmUgbGlua2VkIHRvIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT4gJ1lvdSBjYW4gbm90IGxpbmsgYW4gSW5wdXQgdG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50IG9mIHRoZSBzYW1lIEN5Y2xlLicsXG4gIC8vIGRlcHJlY2F0ZWQsIHJlbW92ZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGJlaW5nIHVzZWQgYW55bW9yZVxuICAnbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlICR7Y29kZShkYXRhUGF0aD8uc3BsaXQoJy4nKS5wb3AoKSl9IG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSBlY29ub21pY1ZhbHVlU2hhcmUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAncmV2ZW51ZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSByZXZlbnVlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3Nob3VsZCBhZGQgYSBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBhIFNvdXJjZSB0byBhbGwgZGF0YSBpdGVtcy5cbiAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IGZpZWxkLlxuICAgIFNvdXJjZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBlYWNoIGRhdGEgaXRlbSAoaS5lLiwgZWFjaCBJbnB1dCwgRW1pc3Npb24sIFByb2R1Y3QsIFByYWN0aWNlLCBNZWFzdXJlbWVudCwgb3IgSW5mcmFzdHJ1Y3R1cmUpLmAsXG4gICdjb3ZlciBjcm9wIGN5Y2xlIGNvbnRhaW5zIG5vbiBjb3ZlciBjcm9wIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIGNyb3AgaXMgYSBjb3ZlciBjcm9wIHVzaW5nIGEgUHJhY3RpY2UuXG4gICAgQSBjb3ZlciBjcm9wIGlzIGRlZmluZWQgYXMgXCJhIGNyb3Agd2hpY2ggaXMgbGVmdCBpbiB0aGUgZmllbGQgd2l0aG91dCBhbnkgZnJhY3Rpb24gaGFydmVzdGVkIGJ5IHRoZSBlbmQgb2YgdGhlIEN5Y2xlXCIuXG4gICAgVGhlIFByb2R1Y3RzIG9mIHRoaXMgQ3ljbGUgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgY3JvcCBiZWluZyBhIGNvdmVyIGNyb3AuXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBQcm9kdWN0cyBvciB0aGUgUHJhY3RpY2VzLmAsXG4gICdzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGN5Y2xlIHByb2R1Y3RzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFRoZSBQcm9kdWN0ICR7Y29kZShwYXJhbXMucHJvZHVjdC5uYW1lKX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlIHdpdGggaWQgJHtjb2RlKHBhcmFtcy5ub2RlLmlkKX1gIDpcbiAgICAgICAgJ1RoZSBJbXBhY3RBc3Nlc3NtZW50IFByb2R1Y3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpbmtlZCBDeWNsZSdcbiAgICB9LlxuICAgIFBsZWFzZSBhZGQgdGhlIFByb2R1Y3QgaW4gdGhlIEN5Y2xlIG9yIHJlbW92ZSB0aGUgbGluayB3aXRoIHRoZSBDeWNsZS5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIFByb2R1Y3Qgb2YgdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PlxuICAgIGBPbmx5IDEgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3QgaXMgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgeW91IGFyZSByZWZlcnJpbmcgdG8gaXMgY29ycmVjdC5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZHVjdCc6ICgpID0+XG4gICAgYE9ubHkgMSBJbXBhY3QgQXNzZXNzbWVudCBjYW4gYmUgcmVsYXRlZCB0byB0aGlzIFByb2R1Y3QuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBvZiB0aGUgcmVsYXRlZCBJbXBhY3RBc3Nlc3NtZW50cyBhcmUgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgaXMgY29ycmVjdC5gLFxuICAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uJzogKCkgPT5cbiAgICBgTGFuZCB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvblxuICAgIChsYW5kIHRyYW5zZm9ybWF0aW9uIGlzIHRoZSBhbW91bnQgb2YgbGFuZCBjb252ZXJ0ZWQgYmV0d2VlbiBzb21lIGRhdGUgaW4gdGhlIHBhc3QgYW5kIHRoZSBjdXJyZW50IHllYXIsXG4gICAgZGl2aWRlZCBieSBhbiBhbW9ydGl6YXRpb24gcGVyaW9kLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBsYW5kIG9jY3VwYXRpb24gYnkgZGVmaW5pdGlvbikuYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZW1pc3Npb24gaW4gdGhlIEN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGV4aXN0c2AgOiAnU29tZSBFbWlzc2lvbnMgZXhpc3QnXG4gICAgfSBpbiBib3RoIHRoZSBDeWNsZSBhbmQgdGhlIFRyYW5zZm9ybWF0aW9uIGJ1dCAke2Vycm9yQ291bnQgPT09IDEgPyAnaXQgaXMnIDogJ3RoZXkgYXJlJ30gbm90IGxpbmtlZCB1c2luZyAke1xuICAgICAgY29kZSgnY3ljbGUuZW1pc3Npb25zLlgudHJhbnNmb3JtYXRpb24udGVybScpXG4gICAgfS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gYW5pbWFsIHByb2R1Y3Rpb24gc3lzdGVtJzogKCkgPT5cbiAgICBgRm9yIGFuaW1hbCBwcm9kdWN0aW9uIGN5Y2xlcywgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIGFuaW1hbCBwcm9kdWN0aW9uICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtKX0gYXMgYSBQcmFjdGljZS5cbiAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHN5c3RlbXMgaW4gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtLCAnR2xvc3NhcnknKX0uYCxcbiAgJ211c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gc3BlY2lmeWluZyBmdWVsIHVzZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJZiBtYWNoaW5lcnkgZnVlbCAoJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9KSBpcyB1c2VkIGR1cmluZyBhIEN5Y2xlLFxuICAgIGJ1dCB0aGVyZSBpcyBubyBkYXRhIG9uIHRoZSBhbW91bnQgb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5tYXRlcmlhbCl9IHVzZWQgZm9yIGFncmljdWx0dXJhbCBlcXVpcG1lbnQsXG4gICAgdGhlbiAke2NvZGUoJ2NvbXBsZXRlbmVzcy5tYXRlcmlhbCcpfSBtdXN0IGJlICR7Y29kZSgnZmFsc2UnKX0uYCxcbiAgJ211c3QgYmUgYmVsb3cgb3IgZXF1YWwgdG8gMSBmb3IgdW5pdCBpbiBoYSc6ICgpID0+XG4gICAgYFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHByb2R1Y3Qgd2l0aCB1bml0cyAke2NvZGUoJ2hhJyl9IG9uIGEgQ3ljbGUgd2l0aCBhICR7XG4gICAgICBzY2hlbWFMaW5rKCdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsICdmdW5jdGlvbmFsIHVuaXQnKVxuICAgIH0gb2YgJHtjb2RlKCcxIGhhJyl9IGlzICR7Y29kZSgnMScpfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBhZGQgYSBwcm9kdWN0IHdpdGggdGhlIHVuaXRzICR7Y29kZSgna2cnKX0sIHVzZSBhIGRpZmZlcmVudCB0ZXJtLmAsXG4gICdwYXN0dXJlR3Jhc3Mga2V5IHVuaXRzIG11c3QgYmUgXFwnaGFcXCcnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gY2FuJ3QgYmUgdXNlZCBhcyBhIGtleSBmb3IgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfS5cbiAgICBQbGVhc2UgdXNlIHRoZSBUZXJtIGRlc2NyaWJpbmcgdGhlIHBsYW50IHdpdGggdGhlIHVuaXRzICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfSBpbnN0ZWFkLlxuICAgIFRoaXMgd2lsbCBoZWxwIHVzIGdhcC1maWxsIHRoZSBhbW91bnQgb2YgZ3Jhc3MgY29uc3VtZWQgYnkgdGhlIGhlcmQuYCxcbiAgJ3RoZSBzdW0gb2YgYWxsIHBhc3R1cmVHcmFzcyB2YWx1ZXMgbXVzdCBiZSAxMDAnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIHN1bSBvZiBhbGwgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfSB2YWx1ZXMgbXVzdCBiZSBlcXVhbCB0byAke3BhcmFtcy5leHBlY3RlZH0lLmAsXG4gICdpcyBvdXRzaWRlIGNvbmZpZGVuY2UgaW50ZXJ2YWwnOiAoZXJyb3IsIGVycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBgJHt1bmlxdWUoKGFsbEVycm9ycy5sZW5ndGggPyBhbGxFcnJvcnMgOiBbZXJyb3JdKS5mbGF0TWFwKCh7IGRhdGFQYXRoLCBwYXJhbXMgfSkgPT4gcGFyYW1zPy5vdXRsaWVycz8ubWFwKHZhbHVlID0+XG4gICAgICBgVGhlICR7XG4gICAgICAgIGRhdGFQYXRoLmluY2x1ZGVzKCdwcm9kdWN0JykgPyAncHJvZHVjdCcgOiAnaW5wdXQnXG4gICAgICB9IHZhbHVlICR7XG4gICAgICAgIGVycm9yQ291bnQgPT09IDEgPyBgJHtjb2RlKHZhbHVlKX0gYCA6ICcnXG4gICAgICB9aXMgJHtcbiAgICAgICAgdmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnXG4gICAgICB9ICR7XG4gICAgICAgIHBhcmFtcz8udGhyZXNob2xkID8gYCR7Y29kZShgJHsocGFyYW1zLnRocmVzaG9sZCArICgoMSAtIHBhcmFtcy50aHJlc2hvbGQpIC8gMikpICogMTAwfSVgKX0gb2ZgIDogJydcbiAgICAgIH0gYWxsICR7XG4gICAgICAgIHBhcmFtcz8uZ3JvdXAgPyBjb2RlKHBhcmFtcy5ncm91cCkgOiBjb2RlKHBhcmFtcz8udGVybT8ubmFtZSlcbiAgICAgIH0gZGF0YSBpbiAke1xuICAgICAgICBjb2RlKHBhcmFtcz8uY291bnRyeS5uYW1lKVxuICAgICAgfSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLmBcbiAgICApKSkuam9pbignPC9icj4nKX1cbiAgICA8L2JyPlxuICAgIFBsZWFzZSBkb3VibGUtY2hlY2sgdGhlc2UgdmFsdWVzIGJlZm9yZSBzdWJtaXR0aW5nLmAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gYm91bmRhcnknOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGNhbGN1bGF0ZWQgYXJlYSBmcm9tICR7Y29kZSgnYm91bmRhcnknKX0gaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgYm91bmRhcnkgcmVwcmVzZW50cyB0aGUgYXJlYSB1bmRlciBjdWx0aXZhdGlvbi5gLFxuICAnbXVzdCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgRm9yIHNpdGVzIG9mIHR5cGUgY3JvcGxhbmQgb3IgcGVybWFuZW50IHBhc3R1cmUsIGlmIGRhdGEgY29tcGxldGVuZXNzIGlzIG1hcmtlZCAke2NvZGUodHJ1ZSl9IGZvciBjcm9wIHJlc2lkdWUsIHRoZSBmYXRlcyBhbmQgcXVhbnRpdGllcyBvZiB0aGUgcmVzaWR1ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICA8YnIvPlxuICAgIFRoZSBxdWFudGl0eSBtdXN0IGluY2x1ZGUgYm90aCBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSwgd2hlcmUgdGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAgVGhpcyBjYW4gYmUgYWRkZWQgdXNpbmcgdGhlIHRlcm1zOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT4ke3Rlcm1MaW5rKHsgaWQ6ICdiZWxvd0dyb3VuZENyb3BSZXNpZHVlJywgbmFtZTogJ0JlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUnIH0pfTsgYW5kPC9saT5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYWJvdmVHcm91bmRDcm9wUmVzaWR1ZVRvdGFsJywgbmFtZTogJ0Fib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgdG90YWwnIH0pfS48L2xpPlxuICAgIDwvdWw+XG4gICAgPGJyLz5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czwvbGk+XG4gICAgPC91bD5cbiAgICBgLFxuICAnc2hvdWxkIHNwZWNpZnkgdGhlIGZhdGUgb2YgY3JvcFJlc2lkdWUnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSBmYXRlIG9mIHRoZSBjcm9wIHJlc2lkdWUuXG4gICAgQWRkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbXByb3ZlIGVtaXNzaW9ucyBhbmQgc29pbCBjYXJib24gc3RvY2sgY2FsY3VsYXRpb25zLlxuICAgIFRoZSBmYXRlIGNhbiBiZSBhZGRlZCB1c2luZzpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQvb3I8L2xpPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzOzwvbGk+XG4gICAgPC91bD5cbiAgICBSZW1lbWJlciB0byBzZXQgJHtjb2RlKCdjb21wbGV0ZW5lc3MuY3JvcFJlc2lkdWUnKX0gdG8gJHtjb2RlKHRydWUpfSBpZiBib3RoIHRoZSBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBxdWFudGl0aWVzIGFuZCBmYXRlcyBhcmUgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcml2YWN5IGFzIHRoZSByZWxhdGVkIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUbyBsaW5rIHRvIGEgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gU291cmNlLFxuICAgIHRoaXMgTm9kZSBuZWVkcyB0byBiZSAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBhcyB3ZWxsLlxuICAgIFBsZWFzZSBzZXQgJHtjb2RlKCdkYXRhUHJpdmF0ZScpfT0ke2NvZGUoYCR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlfWApfS5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1vZGVsJzogKCkgPT5cbiAgICBgQWxsIGVtaXNzaW9ucyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgYSBtZXRob2QgdGllciwgd2hpY2ggc3RhdGVzIGhvdyB0aGUgZGF0YSB3ZXJlIG1vZGVsbGVkIG9yIGhvdyB0aGUgZGF0YSB3ZXJlIGNvbGxlY3RlZC5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0VtaXNzaW9uI21ldGhvZFRpZXInLCAnc2NoZW1hJyl9IGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGRlZmluaXRpb25zIG9mIHRoZSBvcHRpb25zLmAsXG4gICdzaG91bGQgbm90IHVzZSBub3QgcmVsZXZhbnQgbWV0aG9kVGllcic6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdFbWlzc2lvbiNtZXRob2RUaWVyJywgJ3NjaGVtYScpfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnbXVzdCBoYXZlIGlucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSB3aGVuIHNldCB0byB0cnVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgQ3ljbGUgaW5jbHVkZXMgYW5pbWFscyAke1xuICAgICAgcGFyYW1zPy5zaXRlVHlwZSA/IGBvbiAke3BhcmFtcy5zaXRlVHlwZX1gIDogJydcbiAgICB9IGFuZCBjb21wbGV0ZW5lc3MgaXMgc2V0IHRvICR7KGNvZGUodHJ1ZSkpfSBmb3IgJHtjb2RlKCdhbmltYWxGZWVkJyl9LlxuICAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBubyBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlIGJ5IGFuaW1hbHMgaW4gdGhlIEN5Y2xlIChJbnB1dHMgd2l0aCB0ZXJtcyB3aGljaCBjb250YWluIHRoZSB3b3JkcyBcImZyZXNoIGZvcmFnZVwiIGFuZCBhICR7Y29kZSgndmFsdWUnKX0pLlxuICAgIEVpdGhlciwgc2V0IGNvbXBsZXRlbmVzcyB0byAkeyhjb2RlKGZhbHNlKSl9IGZvciAke2NvZGUoJ2FuaW1hbEZlZWQnKX0sIG1ha2Ugc3VyZSBhbGwgXCJmcmVzaCBmb3JhZ2VcIiBJbnB1dHMgaGF2ZSBhICR7Y29kZSgndmFsdWUnKX0sIG9yIGFkZCBvbmUgb3IgbW9yZSBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlLmAsXG4gICdtdXN0IHNwZWNpZnkgaXMgaXQgYW4gYW5pbWFsIGZlZWQnOiAoKSA9PlxuICAgIGBUaGlzIEN5Y2xlIGlzIGFuIGFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlIGFuZCB0aGlzIElucHV0IGNvdWxkIGJlIGFuIGFuaW1hbCBmZWVkIG9yIGNvdWxkIGJlIGZvciBhbm90aGVyIHVzZS5cbiAgICBQbGVhc2Ugc3BlY2lmeSB0aGUgJHtzY2hlbWFMaW5rKCdJbnB1dCNpc0FuaW1hbEZlZWQnLCAnaXNBbmltYWxGZWVkJyl9IGZpZWxkIG9uIHRoaXMgSW5wdXQuXG4gICAgS25vd2luZyB0aGUgZmF0ZSBpcyBlc3NlbnRpYWwgdG8gZGlzdGluZ3Vpc2ggSW5wdXRzIGJldHdlZW4gdGhvc2Ugd2hpY2ggYXJlIGZlZCB0byBhbmltYWxzIGFuZCB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IGEgdHJlYXRtZW50IHdoZW4gZXhwZXJpbWVudERlc2lnbiBpcyBzcGVjaWZpZWQnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIFNvdXJjZSB1c2VzIGFuIGV4cGVyaW1lbnRhbCBkZXNpZ24sIGJ1dCBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRyZWF0bWVudCBmb3IgdGhpcyBDeWNsZS5cbiAgICBBZGRpbmcgdGhlIHRyZWF0bWVudCBwcm92aWRlcyBpbXBvcnRhbnQgbWV0YS1kYXRhIGFuZCB3aWxsIGVuYWJsZSBncmVhdGVyIHJlLXVzZSBvZiB0aGVzZSBkYXRhLlxuICAgIEFkZCB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSN0cmVhdG1lbnQnLCAndHJlYXRtZW50Jyl9IGZpZWxkIHRvIHRoZSBDeWNsZS5cbiAgICBOb3RlIHRoYXQgdGhlIGZpZWxkICR7c2NoZW1hTGluaygnQ3ljbGUjY29tbWVyY2lhbFByYWN0aWNlVHJlYXRtZW50JywgJ2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCcpfSBiZWNvbWVzIHJlcXVpcmVkIGlmIHRyZWF0bWVudCBpcyBzcGVjaWZpZWQuYCxcbiAgJ3Nob3VsZCBub3Qgc3BlY2lmeSBib3RoIGxpdmVBbmltYWwgYW5kIGFuaW1hbFByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCBib3RoIGEgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsKX0gYW5kICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuYW5pbWFsUHJvZHVjdCl9IHRlcm0gYXMgUHJvZHVjdHMuXG4gICAgSWYgdGhlc2UgdGVybXMgcmVmZXIgdG8gdGhlIHNhbWUgYW5pbWFscywgdGhpcyB3aWxsIGxlYWQgdG8gZG91YmxlIGNvdW50aW5nOlxuICAgIGluc3RlYWQgdXNlIGEgUHJvcGVydHkgb24gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGl2ZUFuaW1hbCl9IHRlcm0gdG8gZGVmaW5lIHRoZSBxdWFudGl0eSBvZiBsaXZld2VpZ2h0IHBlciBoZWFkLCBjYXJjYXNzIHdlaWdodCBwZXIgaGVhZCwgZXRjLmAsXG4gICdtdXN0IGFkZCBhbiBleGNyZXRhIHByb2R1Y3Qgd2l0aCBhIGxpdmVBbmltYWwgcHJvZHVjdCc6ICgpID0+XG4gICAgYEFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlcyBjcmVhdGUgZXhjcmV0YS5cbiAgICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBwcm9kdWN0IGluIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCBhbiAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBQcm9kdWN0IHRvIHRoZSBDeWNsZS5cbiAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IGEgJHtjb2RlKCd2YWx1ZScpfSBmb3IgdGhlIFByb2R1Y3QsIGJ1dCBhZGRpbmcgYSAke2NvZGUoJ3ZhbHVlJyl9IGlzIGRlc2lyYWJsZS5gLFxuICAndmFsdWUgc2hvdWxkIHN1bSB0byAxMDAgb3IgbGVzcyBhY3Jvc3Mgd2F0ZXIgcmVnaW1lIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSB0b3RhbCAlIGFyZWEgY292ZXJlZCBieSB0aGUgJHtjb2RlKFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZSl9IHByYWN0aWNlcyB5b3Ugc3BlY2lmaWVkIGlzIG5vdCBlcXVhbCB0byAke2NvZGUoMTAwKX0uXG4gICAgTWFrZSBzdXJlIHRvIGFkZCBhbnkgbWlzc2luZyBwcmFjdGljZSBpZiBuZWVkZWQgYW5kL29yIGFkanVzdCB0aGUgdmFsdWVzIG9mIHRoZSAke2NvZGUoVGVybVRlcm1UeXBlLndhdGVyUmVnaW1lKX0gcHJhY3RpY2VzIHlvdSBhbHJlYWR5IHJlY29yZGVkLmAsXG4gICdyaWNlIHByb2R1Y3RzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHdhdGVyIHJlZ2ltZSBwcmFjdGljZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIHByYWN0aWNlIGlzIG5vdCBhbGxvd2VkIHdpdGggdGhlIHByb2R1Y3RzICR7XG4gICAgICBwYXJhbXMucHJvZHVjdHM/Lm1hcChwID0+IGNvZGUocC5uYW1lIHx8IHBbJ0BpZCddKSlcbiAgICB9LlxuICAgIFJlY29yZGluZyB0aGUgcmlnaHQgd2F0ZXIgcmVnaW1lIGZvciByaWNlIGVuc3VyZXMgbWV0aGFuZSBlbWlzc2lvbnMgZnJvbSBmbG9vZGVkIGZpZWxkcyBhcmUgY29ycmVjdGx5IHJlY2FsY3VsYXRlZC5cbiAgICBUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGNoYW5nZSB0aGUgcHJhY3RpY2Ugb3IgdGhlIHByb2R1Y3RzLmAsXG4gICdtdXN0IG5vdCBiZSBlcXVhbCB0byAxIGhhJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7Y29kZShDeWNsZUZ1bmN0aW9uYWxVbml0WycxIGhhJ10pfSBjYW5ub3QgYmUgdXNlZCBhcyAke1xuICAgICAgc2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbFVuaXQnKVxuICAgIH0gZm9yIEN5Y2xlcyBsaW5rZWQgdG8gU2l0ZXMgd2l0aCAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0gPSAke2NvZGUocGFyYW1zPy5zaXRlVHlwZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhlICR7XG4gICAgICBzY2hlbWFMaW5rKCdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsICdmdW5jdGlvbmFsVW5pdCcpXG4gICAgfSB0byAke2NvZGUoQ3ljbGVGdW5jdGlvbmFsVW5pdC5yZWxhdGl2ZSl9IG9yIGNoYW5nZSB0aGUgJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9LmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHZhbHVlIHdoZW4gSGVzdGlhIGhhcyBhIGRlZmF1bHQgb25lJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEFzIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSAke2NvZGUoJ3ZhbHVlJyl9LCB3ZSB3aWxsIGFzc3VtZSB0aGUgdmFsdWUgaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBJZiB0aGlzIGlzIGluY29ycmVjdCwgcGVsYXNlIGFkZCBhIHZhbHVlLmAsXG4gICdzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFuYWdlbWVudCBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGBEb2VzIG5vdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0ICR7XG4gICAgICAoYWxsRXJyb3JzLmxlbmd0aCA/IGFsbEVycm9ycyA6IFtlcnJvcl0pLm1hcCgoeyBwYXJhbXMgfSkgPT4gY29kZShwYXJhbXMudGVybVR5cGUpKS5qb2luKCcgb3IgJylcbiAgICB9LlxuICAgIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIG1vZGVsIENPMiBlbWlzc2lvbnMgZnJvbSBzb2lsIG9yZ2FuaWMgY2FyYm9uIGNoYW5nZXMuXG4gICAgUGxlYXNlIGNvbnNpZGVyIGFkZGluZyBhIGhpc3Rvcnkgb2YgJHtcbiAgICAgIChhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkubWFwKCh7IHBhcmFtcyB9KSA9PiBjb2RlKHBhcmFtcy50ZXJtVHlwZSkpLmpvaW4oJywgJylcbiAgICB9IGZvciBhcyBtYW55IHllYXJzIGFzIHBvc3NpYmxlIGluIHRoZSBNYW5hZ2VtZW50IEJsYW5rIE5vZGVzLmBcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZywgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBtZXNzYWdlICYmIG1lc3NhZ2UgaW4gY3VzdG9tRXJyb3JNZXNzYWdlID9cbiAgICBjdXN0b21FcnJvck1lc3NhZ2VbbWVzc2FnZV0oZXJyb3IhLCBhbGxFcnJvcnMubGVuZ3RoLCBhbGxFcnJvcnMpIDpcbiAgICBtZXNzYWdlO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXSk6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT5cbiAgZXJyb3JcbiAgICA/ICh7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIC4uLmVycm9yLFxuICAgICAgbWFwRXJyb3I6IGVycm9yLm1lc3NhZ2UgPT09IG1hcEVycm9yTWVzc2FnZSxcbiAgICAgIG1lc3NhZ2U6IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCBlcnJvciwgYWxsRXJyb3JzKVxuICAgIH0pXG4gICAgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc0Vycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgKGVycm9yLmxldmVsID09PSAnZXJyb3InIHx8ICFlcnJvci5sZXZlbCk7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc1dhcm5pbmcgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiBlcnJvci5sZXZlbCA9PT0gJ3dhcm5pbmcnO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nUHJvcGVydHlFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnbWlzc2luZ1Byb3BlcnR5JyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdPbmVPZkVycm9yID0gKHsga2V5d29yZCwgc2NoZW1hUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChzY2hlbWFQYXRoIHx8ICcnKS5pbmNsdWRlcygnb25lT2YnKTtcblxuY29uc3QgaXNGYWlsaW5nS2V5d29yZEVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdmYWlsaW5nS2V5d29yZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXJyb3IgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IpID0+IFtcbiAgaXNGYWlsaW5nS2V5d29yZEVycm9yXG5dLmV2ZXJ5KGZ1bmMgPT4gIWZ1bmMoZXJyb3IpKTtcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdOb2RlRXJyb3JzID0gKGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdKSA9PlxuICBlcnJvcnMuZmlsdGVyKCh7IGtleXdvcmQsIHBhcmFtcyB9KSA9PlxuICAgIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQHR5cGUnIHx8IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgKTtcbiJdfQ==
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVEsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQThCaEQsTUFBTSxlQUFlLEdBQUcseUNBQXlDLENBQUM7QUFFbEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNw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QXFCO0NBQ3RCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUU5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRSxDQUM5RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUNwQyxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsS0FBSyxPQUFPLElBQUksTUFBTSxFQUFFLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5pbXBvcnQgeyBDeWNsZUZ1bmN0aW9uYWxVbml0LCBTY2hlbWFUeXBlLCBTaXRlU2l0ZVR5cGUsIFRlcm0sIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHRvUHJlY2lzaW9uLCBrZXlUb0xhYmVsLCB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgdGVybVR5cGVMYWJlbCB9IGZyb20gJy4uL3Rlcm1zL3Rlcm1zLm1vZGVsJztcbmltcG9ydCB7IHBhdGhUb0FwaURvY3NQYXRoIH0gZnJvbSAnLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwsIGNvZGUsIGNvbnRhY3RVc0xpbmssIGV4dGVybmFsTGluaywgZ2xvc3NhcnlMaW5rLCBzY2hlbWFMaW5rIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4uL2NvbW1vbi9wbHVyYWxpemUnO1xuXG4vLyBUT0RPOiBhZGQgbW9yZSB2YWxpZGF0aW9uIGtleXdvcmQgYW5kIHBhcmFtc1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yTGV2ZWwgPSAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yUGFyYW0gPSAnbWlzc2luZ1Byb3BlcnR5JyB8ICd0eXBlJyB8ICd0ZXJtJyB8ICd0ZXJtVHlwZScgfCAnbW9kZWwnIHwgJ3Byb2R1Y3QnIHwgJ3JhbmdlJyB8ICdub2RlJyB8XG4gICdhbGxvd2VkVmFsdWVzJyB8ICdhbGxvd2VkVmFsdWUnIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eScgfCAnZXhwZWN0ZWQnIHwgJ2RlZmF1bHQnIHwgJ2N1cnJlbnQnIHwgJ3BlcmNlbnRhZ2UnIHwgJ2tleXMnIHxcbiAgJ3RocmVzaG9sZCcgfCAnb3V0bGllcnMnIHwgJ2NvdW50cnknIHwgJ21pbicgfCAnbWF4JyB8ICdkZWZhdWx0U291cmNlJyB8ICdzb3VyY2UnIHwgJ2dyb3VwJyB8ICdtZXNzYWdlJyB8ICdkaXN0YW5jZScgfFxuICAnc2l0ZVR5cGUnIHwgJ3Byb2R1Y3RzJyB8ICd1bml0cyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkID0gJ3JlcXVpcmVkJyB8ICd0eXBlJyB8ICdpZicgfCAndGhlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvciB7XG4gIGluZGV4PzogbnVtYmVyO1xuICBub2RlSW5kZXg/OiBudW1iZXI7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIGRhdGFQYXRoPzogc3RyaW5nO1xuICBzY2hlbWFQYXRoPzogc3RyaW5nO1xuICBrZXl3b3JkPzogdmFsaWRhdGlvbkVycm9yS2V5d29yZDtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBwYXJhbXM/OiB7IFtrZXkgaW4gdmFsaWRhdGlvbkVycm9yUGFyYW1dPzogYW55IH07XG4gIG1hcEVycm9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURhdGFQYXRoID0gKGRhdGFQYXRoID0gJycpID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoLnJlcGxhY2UoL1tcXFtcXF1cXCdcXCdcXFwiXFxcIl0vZywgJycpLnJlcGxhY2UoLyhcXHcpKFxcQCkvZywgJyQxLkAnKS5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4gKHtcbiAgICBwYXRoOiBwYXRoLnJlcGxhY2UoLyhcXGQrKS9nLCAnWyQxXScpLFxuICAgIGxhYmVsOiBwbHVyYWxpemUoa2V5VG9MYWJlbChwYXRoLnJlcGxhY2UoL1tcXGRcXEBdKy9nLCAnJykpLCAxKVxuICB9KSk7XG59O1xuXG5jb25zdCBnbG9zc2FyeVR5cGVMaW5rID0gKHR5cGU6IFRlcm1UZXJtVHlwZSwgdGV4dCA9IHRlcm1UeXBlTGFiZWwodHlwZSkpID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L2dsb3NzYXJ5P3Rlcm1UeXBlPSR7dHlwZX1gLCB0ZXh0KTtcbmNvbnN0IHRlcm1MaW5rID0gKHsgaWQsIG5hbWUgfTogUGFydGlhbDxUZXJtPikgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vdGVybS8ke2lkfWAsIG5hbWUgfHwgaWQpO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPVxuICBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoJzIwMDAtMTItMzAnKX1gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdub1RpbGxhZ2UnLCBuYW1lOiAnTm8gdGlsbGFnZScgfTtcbmNvbnN0IHBhc3R1cmVHcmFzczogUGFydGlhbDxUZXJtPiA9IHsgaWQ6ICdwYXN0dXJlR3Jhc3MnLCBuYW1lOiAnUGFzdHVyZSBncmFzcycgfTtcblxuY29uc3QgaWROb3RGb3VuZERlZmF1bHRNZXNzYWdlID0gYFxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIG1ha2Ugc3VyZSB0byB1c2UgJHtjb2RlKCd0ZXJtLm5hbWUnKX0gY29sdW1uO1xuICBpZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ0BpZCcpfSBvZiB0aGUgVGVybSwgdXNlIHRoZSAke2NvZGUoJ3Rlcm0uQGlkJyl9IGNvbHVtbiBpbnN0ZWFkLlxuYC50cmltKCk7XG5cbmV4cG9ydCBjb25zdCBpc01pZ3JhdGlvbkVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+IHBhcmFtcz8uY3VycmVudCAmJiAoJ2V4cGVjdGVkJyBpbiBwYXJhbXMpO1xuXG5leHBvcnQgY29uc3QgbWlncmF0aW9uRXJyb3JNZXNzYWdlID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICA/IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgdXBkYXRlZCwgcGxlYXNlIHVzZSB0aGlzIFRlcm0gaW5zdGVhZDogJHtjb2RlKHBhcmFtcy5leHBlY3RlZCl9LmBcbiAgICA6IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgZGVsZXRlZC4gUGxlYXNlIHNlYXJjaCB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciBhIG5ldyBUZXJtLmA7XG5cbmNvbnN0IGlkTm90Rm91bmRFcnJvcjogaGFuZGxlRXJyb3JGdW5jID0gKF9lcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT4ge1xuICBjb25zdCBtaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGlzTWlncmF0aW9uRXJyb3IpO1xuICBjb25zdCBub01pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoZXJyb3IgPT4gIWlzTWlncmF0aW9uRXJyb3IoZXJyb3IpKTtcbiAgcmV0dXJuIGBcbiAgICA8cD5Eb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuPC9wPlxuICAgICR7bm9NaWdyYXRpb25FcnJvcnMubGVuZ3RoID8gYDxwPiR7aWROb3RGb3VuZERlZmF1bHRNZXNzYWdlfTwvcD5gIDogJyd9XG4gICAgJHt1bmlxdWUobWlncmF0aW9uRXJyb3JzLm1hcChtaWdyYXRpb25FcnJvck1lc3NhZ2UpKS5qb2luKCc8L2JyPicpfVxuICBgO1xufTtcblxuLy8gc2V0IG1lc3NhZ2UgYXMgZW1wdHkgdG8gbm90IGRpc3BsYXkgaXRcbmNvbnN0IGN1c3RvbUVycm9yTWVzc2FnZToge1xuICBba2V5OiBzdHJpbmddOiBoYW5kbGVFcnJvckZ1bmM7XG59ID0ge1xuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnQGlkXFwnJzogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnQHR5cGVcXCcnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcJ2lkXFwnJzogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggXCJ0aGVuXCIgc2NoZW1hJzogKCkgPT4gJycsXG4gICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgVGhlIGZvbGxvd2luZyBmaWVsZCBkb2VzIG5vdCBleGlzdDogJHtwYXJhbXM/LmFkZGl0aW9uYWxQcm9wZXJ0eX0gb3IgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjYXNlLmAgOlxuICAgICAgYFNob3VsZCBub3QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuYCxcbiAgJ3Nob3VsZCBOT1QgYmUgdmFsaWQnOiAoKSA9PiAnU2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS4nLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeXFxcXGR7MTN9JFwiJzogKCkgPT4gYHNob3VsZCBiZSBjb21wb3NlZCBvZiAxMyBudW1iZXJzYCxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlswLTldezR9KC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyhbVF1bMC0yXVswLTldXFw6WzAtNV1bMC05XVxcOlswLTVdWzAtOV0oKFxcK3xcXC0pWzAtMV1bMC05XTpbMC01XVswLTldKT8pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBleGlzdGluZyBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICA/IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSBmb2xsb3dpbmcgTm9kZXM6XG4gICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7XG4gICAgICAgIHVuaXF1ZShhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgPGxpPiR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfTwvbGk+YCkpLmpvaW4oJ1xcbicpXG4gICAgICB9XG4gICAgICA8L3VsPlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7XG4gICAgICAgIHVuaXF1ZShhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gKSkuam9pbignLCAnKVxuICAgICAgfWBcbiAgICAgIDogYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gYSAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKGVycm9yLnBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgIHBhcmFtcz8uZGlzdGFuY2UgPyBgICR7cGFyYW1zPy5kaXN0YW5jZX1rbXNgOiAnJ1xuICAgICAgfSBvdXRzaWRlIG9mIHRoZSAke2RhdGFQYXRoLnN1YnN0cmluZygxKX0gcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciBjaGVjayBpZiB0aGUgd3JvbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9IGZyb20gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUucmVnaW9uLCAnR2xvc3NhcnknKX0gd2FzIHVzZWQuXG4gICAgICAke3BhcmFtcz8uZXhwZWN0ZWQgPyBgSGludDogdGhlIGNvb3JkaW5hdGVzIGFwcGVhciB0byBiZSBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9OiAke3Rlcm1MaW5rKHsgaWQ6ICdwYXJhbXMuZXhwZWN0ZWQnIH0pfWAgOiAnJ31gXG4gICAgICA6IGBUaGUgcmVnaW9uIHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciBzYW5kQ29udGVudCwgc2lsdENvbnRlbnQsIGNsYXlDb250ZW50JzpcbiAgICAoKSA9PiBgVGhlIHN1bSBvZiBTYW5kLCBTaWx0LCBhbmQgQ2xheSBjb250ZW50IHNob3VsZCBlcXVhbCAxMDAlIGZvciBlYWNoIHNvaWwgZGVwdGggaW50ZXJ2YWwuYCxcbiAgJ2lzIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2UnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBwYXJhbXM/LnRlcm1cbiAgICAgICAgICAgID8gYFRoZSB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyBvdXRzaWRlIHRoZSByYW5nZSBlc3RhYmxpc2hlZCBmb3IgdGhlIHNvaWwgdGV4dHVyZSB5b3UgcHJvdmlkZWQuXG4gICAgICAgICAgICBGb3IgdGhpcyBzb2lsIHRleHR1cmUsIHRoZSBtYXhpbXVtICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgJHtwYXJhbXM/LnJhbmdlPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgICAgOiBgRG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlcyBvZiBzYW5kLCBzaWx0IGFuZCBjbGF5IGNvbnRlbnQuYFxuICAgICAgICA6IGBFYWNoIHNvaWwgdGV4dHVyZSBoYXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlIGZvciBzYW5kLCBzaWx0LCBhbmQgY2xheSBjb250ZW50LlxuICAgICAgICBBdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgb2Ygc2FuZCwgc2lsdCwgb3IgY2xheSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgdGhlIHNwZWNpZmllZCBzb2lsIHRleHR1cmUuYFxuICAgIH1cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBQbGVhc2UgY2hlY2sgdGhlIG1lYXN1cmVtZW50LCBpdHMgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudCBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZSBpZiBuZWVkZWQuYFxuICAgICAgICA6IGBQbGVhc2UgY2hlY2sgeW91ciBtZWFzdXJlbWVudHMsIHRoZWlyIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnRzIG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlcyBpZiBuZWVkZWQuYFxuICAgIH1gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXMnOlxuICAgICh7IHBhcmFtcywgZGF0YVBhdGggfSkgPT4ge1xuICAgICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHBhdGhzLmxlbmd0aCA+PSAyXG4gICAgICAgID8gcGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGgsIHBhcmFtcz8uYWxsb3dlZFZhbHVlcz8ubGVuZ3RoIHx8IDApXG4gICAgICAgIDogJ3ZhbHVlcyc7XG4gICAgICByZXR1cm4gYE9ubHkgdGhlICR7XG4gICAgICAgIHBhdGhzLmxlbmd0aCA9PT0gMyA/IGAke3BhdGhzWzFdLmxhYmVsfSB3aXRoIHRoZSBgIDogJydcbiAgICAgIH1mb2xsb3dpbmcgJHt2YWx1ZXN9IGFyZSBwZXJtaXR0ZWQgZm9yICR7cGF0aHNbMF0ubGFiZWx9OiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX0uXG4gICAgICBQbGVhc2UgZWl0aGVyIGNoYW5nZSB0aGUgJHtcbiAgICAgICAgcGF0aHMubGVuZ3RoID49IDIgPyBwYXRoc1sxXS5sYWJlbCA6IHBhdGhzWzBdLmxhYmVsXG4gICAgICB9IHlvdSBhcmUgdXNpbmcgYW5kIGVuc3VyZSBpdCBoYXMgb25lIG9mIHRoZSAke3ZhbHVlc30gbGlzdGVkIGFib3ZlLFxuICAgICAgb3IgZm9sbG93IHRoZSBzY2hlbWEgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyAke1xuICAgICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBhdGhzWzFdLmxhYmVsIDogcGF0aHNbMF0ubGFiZWxcbiAgICAgIH0gY2FuIGJlIGFkZGVkLmA7XG4gICAgfSxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudCc6XG4gICAgKHsgcGFyYW1zIH0pID0+IGBNdXN0IGJlOiAke2NvZGUocGFyYW1zPy5hbGxvd2VkVmFsdWUpfWAsXG4gICdpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBjaGFyYWN0ZXJpc2VkSW5kaWNhdG9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7ZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgJHtcbiAgICAgICAgcGFyYW1zPy5hbGxvd2VkVmFsdWVzLmxlbmd0aCA/XG4gICAgICAgICAgYGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBvbmUgb2YgdGhlc2UgbWV0aG9kczogJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9YCA6XG4gICAgICAgICAgYGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFueSBtZXRob2QgYWxsb3dlZC4gUGxlYXNlICR7Y29udGFjdFVzTGluaygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICB9LmAgOlxuICAgICAgYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYH1cbiAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtZXRob2RzIGZvciBlYWNoIFRlcm0gYnkgY2xpY2tpbmcgb24gdGhlbS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMlxuICAgICAgPyBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgXG4gICAgICA6IGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAnUGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZShmYWxzZSl9LiBZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGZpbGwgaXQgaW4uXG4gIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmlsbCBpdCBpbiwgcGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNjb21wbGV0ZW5lc3MnLCAnc2NoZW1hJyl9LmAsXG4gICdtYXkgbm90IGJlIGVtcHR5JzogKCkgPT4gJ2lmIHRoaXMgdmFsdWUgc2lnbmlmaWVzIG5vIGRhdGEsIEhlc3RpYSBvbmx5IGFjY2VwdHMgXCItXCIgb3IgZW1wdHkgZm9yIG5vIGRhdGEnLFxuICAnbWF5IG5vdCBiZSAwJzogKHsgZGF0YVBhdGggfSwgZXJyb3JDb3VudCkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgQWRkaW5nIGEgdmFsdWUgJHtlcnJvckNvdW50ID09PSAxID8gYCB0byBldmVyeSAke3BhdGhzWzBdLmxhYmVsfSBgIDogJyAnfSBpcyBoaWdobHkgcmVjb21tZW5kZWRcbiAgICAgIGFzIHdpdGhvdXQgdGhpcyBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsY3VsYXRlIHRoZSBJbXBhY3QgQXNzZXNzbWVudC5cbiAgICAgIElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgd2UgcmVjb21tZW5kIHNldHRpbmcgdmFsdWUgdG8gMC5gO1xuICB9LFxuICAndGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8nOiAoKSA9PlxuICAgIGBGb3Igc2l0ZXMgb2YgdHlwZSAke2NvZGUoU2l0ZVNpdGVUeXBlLmNyb3BsYW5kKX0gb3IgJHtjb2RlKFNpdGVTaXRlVHlwZVsncGVybWFuZW50IHBhc3R1cmUnXSl9LFxuICAgIGlmIGRhdGEgY29tcGxldGVuZXNzIGlzIG1hcmtlZCAke2NvZGUodHJ1ZSl9IGZvciBjcm9wIHJlc2lkdWUsXG4gICAgdGhlIHN1bSBvZiB0aGUgQWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSB0ZXJtcyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8sXG4gICAgYW5kIEJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLmAsXG4gICdsb25nRmFsbG93UGVyaW9kIG11c3QgYmUgbG93ZXIgdGhhbiA1IHllYXJzJzogKCkgPT5cbiAgICBgWW91ciBsb25nRmFsbG93UGVyaW9kIGlzIGdyZWF0ZXIgdGhhbiBmaXZlIHllYXJzLlxuICAgIEZhbGxvdyBpcyBkZWZpbmVkIGJ5IEZBT1NUQVQgYXMgbGFuZCBsZWZ0IHVuY3VsdGl2YXRlZCBmb3IgYmV0d2VlbiAxIGFuZCA1IHllYXJzLFxuICAgIGFuZCB0aGlzIGRlZmluaXRpb24gaXMgdXNlZCBmb3IgSGVzdGlhIGFsc28uYCxcbiAgJ3Nob3VsZCBiZSB3aXRoaW4gcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICBgVGhpcyB2YWx1ZSBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0gZGlmZmVyZW50IHRvIG91ciBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICR7cGFyYW1zPy5kZWZhdWx0fS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCA6XG4gICAgICBgVGhpcyB2YWx1ZSBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCB0aGFuIG91ciBkZWZhdWx0IHZhbHVlLlxuICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAndGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgcmVzdWx0IGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMykpfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9XG4gICAgICAgIFBsZWFzZSBlaXRoZXI6XG4gICAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlIGRhdGEgeW91IHByb3ZpZGVkIHdoaWNoIGlzIHRoZSBpbnB1dCBpbnRvIHRoaXMgbW9kZWw7PC9saT5cbiAgICAgICAgPGxpPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfWAgOlxuICAgICAgICBgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LmBcbiAgICB9YCxcbiAgJ211c3QgYmUgZXF1YWwgdG8gcHJldmlvdXMgcHJvZHVjdCBtdWx0aXBsaWVkIGJ5IHRoZSBzaGFyZSc6ICgpID0+XG4gICAgYFByb2R1Y3RzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiB3aGljaCBhcmUgYW4gSW5wdXQgaW4gdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlOlxuICAgICR7Y29kZSgncHJldmlvdXMucHJvZHVjdC52YWx1ZSAqIGN1cnJlbnQudHJhbnNmb3JtZWRTaGFyZSAvIDEwMCA9PSBjdXJyZW50LmlucHV0LnZhbHVlJyl9YCxcbiAgJ2F0IGxlYXN0IG9uZSBJbnB1dCBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUnOiAoKSA9PlxuICAgIGBBIFRyYW5zZm9ybWF0aW9uIGNvbnZlcnRzIGEgUHJvZHVjdCBmcm9tIGEgQ3ljbGUgaW50byBhbm90aGVyIFByb2R1Y3QuXG4gICAgVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgSW5wdXQgaW50byB0aGUgVHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlLmAsXG4gICdtdXN0IGhhdmUgb25seSBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSB0ZXJtLnRlcm1UeXBlID0gZXhjcmV0YU1hbmFnZW1lbnQnOiAoKSA9PlxuICAgIGBUaGVyZSBjYW4gb25seSBiZSBvbmUgUHJhY3RpY2Ugb2YgdHlwZSBleGNyZXRhTWFuYWdlbWVudCBpbiBhIEN5Y2xlLlxuICAgIFRvIHJlcHJlc2VudCBtdWx0aXBsZSBleGNyZXRhIG1hbmFnZW1lbnQgc3lzdGVtcyBlaXRoZXIgdXNlIG11bHRpcGxlIEN5Y2xlcyBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLFxuICAgIG9yIHVzZSBUcmFuc2Zvcm1hdGlvbnMgd2l0aGluIGEgQ3ljbGUgYW5kIGxpbmsgdGhvc2UgdG9nZXRoZXIuYCxcbiAgJ211c3QgYmUgaW5jbHVkZWQgYXMgYW4gSW5wdXQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4Y3JldGEgUHJvZHVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBleGNyZXRhIElucHV0cy5cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBFLmcuLCB5b3UgY2Fubm90IGdldCAke1xuICAgICAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKVxuICAgICAgICB9IGZyb20gJHtcbiAgICAgICAgICAocGFyYW1zPy5leHBlY3RlZCB8fCBbXSkubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSkuam9pbignIG9yICcpXG4gICAgICAgIH0uYCA6XG4gICAgICAgICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtcbiAgICAgICAgICBwYXJhbXM/LmV4cGVjdGVkPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpLmpvaW4oJyAsICcpXG4gICAgICAgIH1gOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIElucHV0cydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHRoZXNlIElucHV0cyBkbyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgdGhlc2UgSW5wdXRzLCBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHZhbHVlIGZvciB0aGVtLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY3ljbGUnOiAoeyBsZXZlbCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0JHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YCA6XG4gICAgICAgICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InID9cbiAgICAgICAgJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLicgOlxuICAgICAgICAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IG5vZGUgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHtcbiAgICAgIChwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpXG4gICAgfWAsXG4gICdldmVyeSBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBCbGFuayBOb2RlIGlzIGR1cGxpY2F0ZWQuIEV2ZXJ5IEJsYW5rIE5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7XG4gICAgICAocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKVxuICAgIH1gLFxuICAnbXVzdCBjb250YWluIGFzIG1hbnkgaXRlbXMgYXMgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PlxuICAgIGBUaGUgbnVtYmVyIG9mICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mICR7Y29kZSgndmFsdWUnKX0uXG4gICAgQ3VycmVudGx5IHRoZXJlIGFyZSAke3BhcmFtcz8uY3VycmVudH0gJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBidXQgJHtwYXJhbXM/LmV4cGVjdGVkfSAke2NvZGUoJ3ZhbHVlJyl9LmAsXG4gICdpcyB0b28gZ2VuZXJpYyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIFByb2R1Y3QgJHtjb2RlKHBhcmFtcz8ucHJvZHVjdD8ubmFtZSl9IGhvd2V2ZXIsXG4gICAgeW91IGhhdmUgdXNlZCBhIGdlbmVyaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSB0ZXJtICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfS5cbiAgICBVc2UgYSBtb3JlIHNwZWNpZmljIHRlcm0gZm9yIHRoZSAke1xuICAgICAgZ2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKVxuICAgIH0gd2hpY2ggcmVmbGVjdHMgdGhlIHNwZWNpZmljICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8ucHJvZHVjdD8udGVybVR5cGUpXG4gICAgfS5gLFxuICAnc2hvdWxkIG5vdCB1c2UgaWRlbnRpY2FsIHRlcm1zIHdpdGggZGlmZmVyZW50IHVuaXRzJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIGFkZGVkIHRoZSBzYW1lICR7XG4gICAgICBjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpXG4gICAgfSBpbiAke1xuICAgICAgcGFyYW1zPy51bml0cz8ubWFwKHVuaXQgPT4gY29kZSh1bml0KSkuam9pbignIGFuZCAnKVxuICAgIH0gdW5pdHMuXG4gICAgSWYgdGhlc2UgdGVybXMgcmVmZXIgdG8gdGhlIHNhbWUgJHtcbiAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSlcbiAgICB9LCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmcuJHtcbiAgICAgIHBhcmFtcz8udW5pdHM/LmluY2x1ZGVzKCdrZyBOJylcbiAgICAgICAgPyBgIEluc3RlYWQgdXNlIHRoZSAke1xuICAgICAgICAgIHRlcm1MaW5rKHsgaWQ6ICduaXRyb2dlbkNvbnRlbnQnLCBuYW1lOiAnTml0cm9nZW4gQ29udGVudCcgfSlcbiAgICAgICAgfSBQcm9wZXJ0eSBvbiB0aGUgJHtjb2RlKCdrZycpfSB0ZXJtIHRvIGRlZmluZSB0aGUgbml0cm9nZW4gY29udGVudCBvZiB0aGUgJHtcbiAgICAgICAgICBjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpXG4gICAgICAgIH0uYFxuICAgICAgICA6ICcnXG4gICAgfWAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgPGxpPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHksICdvdXIgc2NoZW1hJyl9LjwvbGk+XG4gICAgPGxpPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaT5DaGVjayB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhbmQgJHtjb2RlKCd0aXRsZScpfSBmb3IgdHlwb3MgYWdhaW5zdCB0aGUgJHtleHRlcm5hbExpbmsoJ2h0dHBzOi8vd3d3Lm1lbmRlbGV5LmNvbScsICdNZW5kZWxleSBjYXRhbG9ndWUnKX0uPC9saT5cbiAgICA8L3VsPmAsXG4gICdzaG91bGQgYmUgbG93ZXIgdGhhbiBtYXggc2l6ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgYm91bmRhcnkgb3IgcmVnaW9uIGlzID4ke3BhcmFtcz8uZXhwZWN0ZWR9a20yIGFuZCBpcyB0b28gbGFyZ2UgdG8gcmVsaWFibHkgZ2FwIGZpbGwgTWVhc3VyZW1lbnRzLlxuICAgIElmIHlvdSBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIHNwZWNpZmljIHJlZ2lvbiBvciBzbWFsbGVyIGJvdW5kYXJ5LCBwbGVhc2UgZG8uYCxcbiAgJ2FuIGV4Y3JldGEgaW5wdXQgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBhbiBleGNyZXRhTWFuYWdlbWVudCBwcmFjdGljZSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEV4Y3JldGEgbWFuYWdlbWVudCBpcyB0aGUgY29udmVyc2lvbiBvZiBleGNyZXRhIHRvIGFub3RoZXIgdHlwZSBvZiBleGNyZXRhLlxuICAgICAgWW91IGhhdmUgYWRkZWQgYW4gZXhjcmV0YU1hbmFnZW1lbnQgUHJhY3RpY2UgdG8gdGhpcyAke3BhdGhzWzBdLmxhYmVsfSBidXQgdGhlcmUgaXMgbm8gZXhjcmV0YSBJbnB1dC5cbiAgICAgIFRvIHJlcHJlc2VudCBleGNyZXRhIG1hbmFnZW1lbnQsIHVzZSBhICR7cGF0aHNbMF0ubGFiZWx9IHdpdGggZXhjcmV0YSBhcyBhbiBJbnB1dCBhbmQgZXhjcmV0YU1hbmFnZW1lbnQgYXMgYSBQcmFjdGljZS5gO1xuICB9LFxuICAnb25seSAxIHByaW1hcnkgcHJvZHVjdCBhbGxvd2VkJzogKCkgPT4gJ1RoZXJlIGNhbiBvbmx5IGJlIG9uZSBwcmltYXJ5IHByb2R1Y3QgaW4gZWFjaCBDeWNsZS4nLFxuICAnaXMgbm90IGFsbG93ZWQgaW4gY29tYmluYXRpb24gd2l0aCBub1RpbGxhZ2UnOiAoKSA9PlxuICAgIGBUaGlzIG9wZXJhdGlvbiBpbnZvbHZlcyB0aWxsYWdlLCB5ZXQgeW91IGhhdmUgc3BlY2lmaWVkIHRoZSBQcmFjdGljZSAke3Rlcm1MaW5rKG5vVGlsbGFnZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhpcyBvcGVyYXRpb24gb3IgdGhlIFByYWN0aWNlLmAsXG4gICdzaG91bGQgY29udGFpbiBhIHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBXZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiB0aWxsYWdlIHVzZWQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gZ2xvc3NhcnkuYCxcbiAgJ211c3Qgc2V0IHZhbHVlIGZvciBldmVyeSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgRWl0aGVyIHNwZWNpZnkgYSBzaW5nbGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2Ugb3IgYWRkIGEgdmFsdWUgdG8gYWxsIHByYWN0aWNlcy5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciB0aWxsYWdlIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2VzIG11c3QgZXF1YWwgMTAwJS5gLFxuICAnY2FuIG9ubHkgaGF2ZSAxIHRpbGxhZ2UgcHJhY3RpY2Ugd2l0aG91dCBhIHZhbHVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgYSBDeWNsZSB0byBoYXZlIHRoZSBmb2xsb3dpbmcgdGlsbGFnZSBQcmFjdGljZXM6XG4gICAgJHsocGFyYW1zPy5jdXJyZW50ID8/IFtdKS5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKS5qb2luKCcgYW5kICcpfSBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIElmIG11bHRpcGxlIHRpbGxhZ2UgcHJhY3RpY2VzIGRpZCBvY2N1ciwgcGxlYXNlIHNwZWNpZnkgdGhlIHBlcmNlbnRhZ2Ugb2YgYXJlYSB0aGV5IG9jY3VycmVkIG9uLmAsXG4gICdjYW4gbm90IGJlIGxpbmtlZCB0byB0aGUgc2FtZSBDeWNsZSc6ICgpID0+ICdZb3UgY2FuIG5vdCBsaW5rIGFuIElucHV0IHRvIHRoZSBJbXBhY3QgQXNzZXNzbWVudCBvZiB0aGUgc2FtZSBDeWNsZS4nLFxuICAvLyBkZXByZWNhdGVkLCByZW1vdmUgd2hlbiBtZXNzYWdlIGlzIG5vdCBiZWluZyB1c2VkIGFueW1vcmVcbiAgJ211c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSAke2NvZGUoZGF0YVBhdGg/LnNwbGl0KCcuJykucG9wKCkpfSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdlY29ub21pY1ZhbHVlU2hhcmUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgZWNvbm9taWNWYWx1ZVNoYXJlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3JldmVudWUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgcmV2ZW51ZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdzaG91bGQgYWRkIGEgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgYSBTb3VyY2UgdG8gYWxsIGRhdGEgaXRlbXMuXG4gICAgVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSBmaWVsZC5cbiAgICBTb3VyY2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBkYXRhIGl0ZW0gKGkuZS4sIGVhY2ggSW5wdXQsIEVtaXNzaW9uLCBQcm9kdWN0LCBQcmFjdGljZSwgTWVhc3VyZW1lbnQsIG9yIEluZnJhc3RydWN0dXJlKS5gLFxuICAnY292ZXIgY3JvcCBjeWNsZSBjb250YWlucyBub24gY292ZXIgY3JvcCBwcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBjcm9wIGlzIGEgY292ZXIgY3JvcCB1c2luZyBhIFByYWN0aWNlLlxuICAgIEEgY292ZXIgY3JvcCBpcyBkZWZpbmVkIGFzIFwiYSBjcm9wIHdoaWNoIGlzIGxlZnQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgYW55IGZyYWN0aW9uIGhhcnZlc3RlZCBieSB0aGUgZW5kIG9mIHRoZSBDeWNsZVwiLlxuICAgIFRoZSBQcm9kdWN0cyBvZiB0aGlzIEN5Y2xlIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGlzIGNyb3AgYmVpbmcgYSBjb3ZlciBjcm9wLlxuICAgIFBsZWFzZSBjaGVjayB0aGUgUHJvZHVjdHMgb3IgdGhlIFByYWN0aWNlcy5gLFxuICAnc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjeWNsZSBwcm9kdWN0cyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBUaGUgUHJvZHVjdCAke2NvZGUocGFyYW1zLnByb2R1Y3QubmFtZSl9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YCA6XG4gICAgICAgICdUaGUgSW1wYWN0QXNzZXNzbWVudCBQcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBQbGVhc2UgYWRkIHRoZSBQcm9kdWN0IGluIHRoZSBDeWNsZSBvciByZW1vdmUgdGhlIGxpbmsgd2l0aCB0aGUgQ3ljbGUuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBQcm9kdWN0IG9mIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT5cbiAgICBgT25seSAxIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IGlzIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIHlvdSBhcmUgcmVmZXJyaW5nIHRvIGlzIGNvcnJlY3QuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2R1Y3QnOiAoKSA9PlxuICAgIGBPbmx5IDEgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlbGF0ZWQgSW1wYWN0QXNzZXNzbWVudHMgYXJlIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIGlzIGNvcnJlY3QuYCxcbiAgJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvbic6ICgpID0+XG4gICAgYExhbmQgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb25cbiAgICAobGFuZCB0cmFuc2Zvcm1hdGlvbiBpcyB0aGUgYW1vdW50IG9mIGxhbmQgY29udmVydGVkIGJldHdlZW4gc29tZSBkYXRlIGluIHRoZSBwYXN0IGFuZCB0aGUgY3VycmVudCB5ZWFyLFxuICAgIGRpdmlkZWQgYnkgYW4gYW1vcnRpemF0aW9uIHBlcmlvZCwgc28gaXQgc2hvdWxkIGFsd2F5cyBiZSBsZXNzIHRoYW4gbGFuZCBvY2N1cGF0aW9uIGJ5IGRlZmluaXRpb24pLmAsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGVtaXNzaW9uIGluIHRoZSBDeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBleGlzdHNgIDogJ1NvbWUgRW1pc3Npb25zIGV4aXN0J1xuICAgIH0gaW4gYm90aCB0aGUgQ3ljbGUgYW5kIHRoZSBUcmFuc2Zvcm1hdGlvbiBidXQgJHtlcnJvckNvdW50ID09PSAxID8gJ2l0IGlzJyA6ICd0aGV5IGFyZSd9IG5vdCBsaW5rZWQgdXNpbmcgJHtcbiAgICAgIGNvZGUoJ2N5Y2xlLmVtaXNzaW9ucy5YLnRyYW5zZm9ybWF0aW9uLnRlcm0nKVxuICAgIH0uIFRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICdzaG91bGQgYWRkIGFuIGFuaW1hbCBwcm9kdWN0aW9uIHN5c3RlbSc6ICgpID0+XG4gICAgYEZvciBhbmltYWwgcHJvZHVjdGlvbiBjeWNsZXMsIHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSBhbmltYWwgcHJvZHVjdGlvbiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSl9IGFzIGEgUHJhY3RpY2UuXG4gICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBzeXN0ZW1zIGluIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSwgJ0dsb3NzYXJ5Jyl9LmAsXG4gICdtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIHNwZWNpZnlpbmcgZnVlbCB1c2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSWYgbWFjaGluZXJ5IGZ1ZWwgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGJlIGJlbG93IG9yIGVxdWFsIHRvIDEgZm9yIHVuaXQgaW4gaGEnOiAoKSA9PlxuICAgIGBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBwcm9kdWN0IHdpdGggdW5pdHMgJHtjb2RlKCdoYScpfSBvbiBhIEN5Y2xlIHdpdGggYSAke1xuICAgICAgc2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbCB1bml0JylcbiAgICB9IG9mICR7Y29kZSgnMSBoYScpfSBpcyAke2NvZGUoJzEnKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGEgcHJvZHVjdCB3aXRoIHRoZSB1bml0cyAke2NvZGUoJ2tnJyl9LCB1c2UgYSBkaWZmZXJlbnQgdGVybS5gLFxuICAncGFzdHVyZUdyYXNzIGtleSB1bml0cyBtdXN0IGJlIFxcJ2hhXFwnJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBUZXJtICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGNhbid0IGJlIHVzZWQgYXMgYSBrZXkgZm9yICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0uXG4gICAgUGxlYXNlIHVzZSB0aGUgVGVybSBkZXNjcmliaW5nIHRoZSBwbGFudCB3aXRoIHRoZSB1bml0cyAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0gaW5zdGVhZC5cbiAgICBUaGlzIHdpbGwgaGVscCB1cyBnYXAtZmlsbCB0aGUgYW1vdW50IG9mIGdyYXNzIGNvbnN1bWVkIGJ5IHRoZSBoZXJkLmAsXG4gICd0aGUgc3VtIG9mIGFsbCBwYXN0dXJlR3Jhc3MgdmFsdWVzIG11c3QgYmUgMTAwJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBzdW0gb2YgYWxsICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0gdmFsdWVzIG11c3QgYmUgZXF1YWwgdG8gJHtwYXJhbXMuZXhwZWN0ZWR9JS5gLFxuICAnaXMgb3V0c2lkZSBjb25maWRlbmNlIGludGVydmFsJzogKGVycm9yLCBlcnJvckNvdW50LCBhbGxFcnJvcnMpID0+XG4gICAgYCR7dW5pcXVlKChhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkuZmxhdE1hcCgoeyBkYXRhUGF0aCwgcGFyYW1zIH0pID0+IHBhcmFtcz8ub3V0bGllcnM/Lm1hcCh2YWx1ZSA9PlxuICAgICAgYFRoZSAke1xuICAgICAgICBkYXRhUGF0aC5pbmNsdWRlcygncHJvZHVjdCcpID8gJ3Byb2R1Y3QnIDogJ2lucHV0J1xuICAgICAgfSB2YWx1ZSAke1xuICAgICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZSh2YWx1ZSl9IGAgOiAnJ1xuICAgICAgfWlzICR7XG4gICAgICAgIHZhbHVlID4gcGFyYW1zPy5taW4gPyAnYWJvdmUnIDogJ2JlbG93J1xuICAgICAgfSAke1xuICAgICAgICBwYXJhbXM/LnRocmVzaG9sZCA/IGAke2NvZGUoYCR7KHBhcmFtcy50aHJlc2hvbGQgKyAoKDEgLSBwYXJhbXMudGhyZXNob2xkKSAvIDIpKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICB9IGFsbCAke1xuICAgICAgICBwYXJhbXM/Lmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpXG4gICAgICB9IGRhdGEgaW4gJHtcbiAgICAgICAgY29kZShwYXJhbXM/LmNvdW50cnkubmFtZSlcbiAgICAgIH0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgKSkpLmpvaW4oJzwvYnI+Jyl9XG4gICAgPC9icj5cbiAgICBQbGVhc2UgZG91YmxlLWNoZWNrIHRoZXNlIHZhbHVlcyBiZWZvcmUgc3VibWl0dGluZy5gLFxuICAnc2hvdWxkIGJlIGVxdWFsIHRvIGJvdW5kYXJ5JzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBjYWxjdWxhdGVkIGFyZWEgZnJvbSAke2NvZGUoJ2JvdW5kYXJ5Jyl9IGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlIGNyb3BsYW5kIG9yIHBlcm1hbmVudCBwYXN0dXJlLCBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgJHtjb2RlKHRydWUpfSBmb3IgY3JvcCByZXNpZHVlLCB0aGUgZmF0ZXMgYW5kIHF1YW50aXRpZXMgb2YgdGhlIHJlc2lkdWUgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAgPGJyLz5cbiAgICBUaGUgcXVhbnRpdHkgbXVzdCBpbmNsdWRlIGJvdGggYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUsIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgIFRoaXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSB0ZXJtczpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYmVsb3dHcm91bmRDcm9wUmVzaWR1ZScsIG5hbWU6ICdCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlJyB9KX07IGFuZDwvbGk+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2Fib3ZlR3JvdW5kQ3JvcFJlc2lkdWVUb3RhbCcsIG5hbWU6ICdBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRvdGFsJyB9KX0uPC9saT5cbiAgICA8L3VsPlxuICAgIDxici8+XG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM8L2xpPlxuICAgIDwvdWw+XG4gICAgYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgWW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgZmF0ZSBvZiB0aGUgY3JvcCByZXNpZHVlLlxuICAgIEFkZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgaW1wcm92ZSBlbWlzc2lvbnMgYW5kIHNvaWwgY2FyYm9uIHN0b2NrIGNhbGN1bGF0aW9ucy5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZSh0cnVlKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IFNvdXJjZSxcbiAgICB0aGlzIE5vZGUgbmVlZHMgdG8gYmUgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gYXMgd2VsbC5cbiAgICBQbGVhc2Ugc2V0ICR7Y29kZSgnZGF0YVByaXZhdGUnKX09JHtjb2RlKGAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdFbWlzc2lvbiNtZXRob2RUaWVyJywgJ3NjaGVtYScpfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluaygnRW1pc3Npb24jbWV0aG9kVGllcicsICdzY2hlbWEnKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2Ugd2hlbiBzZXQgdG8gdHJ1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIEN5Y2xlIGluY2x1ZGVzIGFuaW1hbHMgJHtcbiAgICAgIHBhcmFtcz8uc2l0ZVR5cGUgPyBgb24gJHtwYXJhbXMuc2l0ZVR5cGV9YCA6ICcnXG4gICAgfSBhbmQgY29tcGxldGVuZXNzIGlzIHNldCB0byAkeyhjb2RlKHRydWUpKX0gZm9yICR7Y29kZSgnYW5pbWFsRmVlZCcpfS5cbiAgICBIb3dldmVyLCB0aGVyZSBhcmUgbm8gSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZSBieSBhbmltYWxzIGluIHRoZSBDeWNsZSAoSW5wdXRzIHdpdGggdGVybXMgd2hpY2ggY29udGFpbiB0aGUgd29yZHMgXCJmcmVzaCBmb3JhZ2VcIiBhbmQgYSAke2NvZGUoJ3ZhbHVlJyl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHsoY29kZShmYWxzZSkpfSBmb3IgJHtjb2RlKCdhbmltYWxGZWVkJyl9LCBtYWtlIHN1cmUgYWxsIFwiZnJlc2ggZm9yYWdlXCIgSW5wdXRzIGhhdmUgYSAke2NvZGUoJ3ZhbHVlJyl9LCBvciBhZGQgb25lIG9yIG1vcmUgSW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIGludGFrZS5gLFxuICAnbXVzdCBzcGVjaWZ5IGlzIGl0IGFuIGFuaW1hbCBmZWVkJzogKCkgPT5cbiAgICBgVGhpcyBDeWNsZSBpcyBhbiBhbmltYWwgcHJvZHVjdGlvbiBDeWNsZSBhbmQgdGhpcyBJbnB1dCBjb3VsZCBiZSBhbiBhbmltYWwgZmVlZCBvciBjb3VsZCBiZSBmb3IgYW5vdGhlciB1c2UuXG4gICAgUGxlYXNlIHNwZWNpZnkgdGhlICR7c2NoZW1hTGluaygnSW5wdXQjaXNBbmltYWxGZWVkJywgJ2lzQW5pbWFsRmVlZCcpfSBmaWVsZCBvbiB0aGlzIElucHV0LlxuICAgIEtub3dpbmcgdGhlIGZhdGUgaXMgZXNzZW50aWFsIHRvIGRpc3Rpbmd1aXNoIElucHV0cyBiZXR3ZWVuIHRob3NlIHdoaWNoIGFyZSBmZWQgdG8gYW5pbWFscyBhbmQgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHRyZWF0bWVudCB3aGVuIGV4cGVyaW1lbnREZXNpZ24gaXMgc3BlY2lmaWVkJzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBTb3VyY2UgdXNlcyBhbiBleHBlcmltZW50YWwgZGVzaWduLCBidXQgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0cmVhdG1lbnQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgQWRkaW5nIHRoZSB0cmVhdG1lbnQgcHJvdmlkZXMgaW1wb3J0YW50IG1ldGEtZGF0YSBhbmQgd2lsbCBlbmFibGUgZ3JlYXRlciByZS11c2Ugb2YgdGhlc2UgZGF0YS5cbiAgICBBZGQgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjdHJlYXRtZW50JywgJ3RyZWF0bWVudCcpfSBmaWVsZCB0byB0aGUgQ3ljbGUuXG4gICAgTm90ZSB0aGF0IHRoZSBmaWVsZCAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCcsICdjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnKX0gYmVjb21lcyByZXF1aXJlZCBpZiB0cmVhdG1lbnQgaXMgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgbm90IHNwZWNpZnkgYm90aCBsaXZlQW5pbWFsIGFuZCBhbmltYWxQcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgYm90aCBhICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubGl2ZUFuaW1hbCl9IGFuZCAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmFuaW1hbFByb2R1Y3QpfSB0ZXJtIGFzIFByb2R1Y3RzLlxuICAgIElmIHRoZXNlIHRlcm1zIHJlZmVyIHRvIHRoZSBzYW1lIGFuaW1hbHMsIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZzpcbiAgICBpbnN0ZWFkIHVzZSBhIFByb3BlcnR5IG9uIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxpdmVBbmltYWwpfSB0ZXJtIHRvIGRlZmluZSB0aGUgcXVhbnRpdHkgb2YgbGl2ZXdlaWdodCBwZXIgaGVhZCwgY2FyY2FzcyB3ZWlnaHQgcGVyIGhlYWQsIGV0Yy5gLFxuICAnbXVzdCBhZGQgYW4gZXhjcmV0YSBwcm9kdWN0IHdpdGggYSBsaXZlQW5pbWFsIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBBbmltYWwgcHJvZHVjdGlvbiBDeWNsZXMgY3JlYXRlIGV4Y3JldGEuXG4gICAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gcHJvZHVjdCBpbiB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgYW4gJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gUHJvZHVjdCB0byB0aGUgQ3ljbGUuXG4gICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCBhICR7Y29kZSgndmFsdWUnKX0gZm9yIHRoZSBQcm9kdWN0LCBidXQgYWRkaW5nIGEgJHtjb2RlKCd2YWx1ZScpfSBpcyBkZXNpcmFibGUuYCxcbiAgJ3ZhbHVlIHNob3VsZCBzdW0gdG8gMTAwIG9yIGxlc3MgYWNyb3NzIHdhdGVyIHJlZ2ltZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgdG90YWwgJSBhcmVhIGNvdmVyZWQgYnkgdGhlICR7Y29kZShUZXJtVGVybVR5cGUud2F0ZXJSZWdpbWUpfSBwcmFjdGljZXMgeW91IHNwZWNpZmllZCBpcyBub3QgZXF1YWwgdG8gJHtjb2RlKDEwMCl9LlxuICAgIE1ha2Ugc3VyZSB0byBhZGQgYW55IG1pc3NpbmcgcHJhY3RpY2UgaWYgbmVlZGVkIGFuZC9vciBhZGp1c3QgdGhlIHZhbHVlcyBvZiB0aGUgJHtjb2RlKFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZSl9IHByYWN0aWNlcyB5b3UgYWxyZWFkeSByZWNvcmRlZC5gLFxuICAncmljZSBwcm9kdWN0cyBub3QgYWxsb3dlZCBmb3IgdGhpcyB3YXRlciByZWdpbWUgcHJhY3RpY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBwcmFjdGljZSBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBwcm9kdWN0cyAke1xuICAgICAgcGFyYW1zLnByb2R1Y3RzPy5tYXAocCA9PiBjb2RlKHAubmFtZSB8fCBwWydAaWQnXSkpXG4gICAgfS5cbiAgICBSZWNvcmRpbmcgdGhlIHJpZ2h0IHdhdGVyIHJlZ2ltZSBmb3IgcmljZSBlbnN1cmVzIG1ldGhhbmUgZW1pc3Npb25zIGZyb20gZmxvb2RlZCBmaWVsZHMgYXJlIGNvcnJlY3RseSByZWNhbGN1bGF0ZWQuXG4gICAgVG8gZml4IHRoaXMgZXJyb3IsIGVpdGhlciBjaGFuZ2UgdGhlIHByYWN0aWNlIG9yIHRoZSBwcm9kdWN0cy5gLFxuICAnbXVzdCBub3QgYmUgZXF1YWwgdG8gMSBoYSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGAke2NvZGUoQ3ljbGVGdW5jdGlvbmFsVW5pdFsnMSBoYSddKX0gY2Fubm90IGJlIHVzZWQgYXMgJHtcbiAgICAgIHNjaGVtYUxpbmsoJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JywgJ2Z1bmN0aW9uYWxVbml0JylcbiAgICB9IGZvciBDeWNsZXMgbGlua2VkIHRvIFNpdGVzIHdpdGggJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9ID0gJHtjb2RlKHBhcmFtcz8uc2l0ZVR5cGUpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoZSAke1xuICAgICAgc2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbFVuaXQnKVxuICAgIH0gdG8gJHtjb2RlKEN5Y2xlRnVuY3Rpb25hbFVuaXQucmVsYXRpdmUpfSBvciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnU2l0ZSNzaXRlVHlwZScsICdzaXRlVHlwZScpfS5gLFxuICAnc2hvdWxkIHNwZWNpZnkgYSB2YWx1ZSB3aGVuIEhlc3RpYSBoYXMgYSBkZWZhdWx0IG9uZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBBcyB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgJHtjb2RlKCd2YWx1ZScpfSwgd2Ugd2lsbCBhc3N1bWUgdGhlIHZhbHVlIGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgSWYgdGhpcyBpcyBpbmNvcnJlY3QsIHBlbGFzZSBhZGQgYSB2YWx1ZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hbmFnZW1lbnQgbm9kZSc6IChlcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBgRG9lcyBub3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCAke1xuICAgICAgdW5pcXVlKChhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkubWFwKCh7IHBhcmFtcyB9KSA9PiBjb2RlKHBhcmFtcy50ZXJtVHlwZSkpKS5qb2luKCcsIG9yICcpXG4gICAgfS5cbiAgICBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtb2RlbCBDTzIgZW1pc3Npb25zIGZyb20gc29pbCBvcmdhbmljIGNhcmJvbiBjaGFuZ2VzLlxuICAgIFBsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBoaXN0b3J5IG9mICR7XG4gICAgICB1bmlxdWUoKGFsbEVycm9ycy5sZW5ndGggPyBhbGxFcnJvcnMgOiBbZXJyb3JdKS5tYXAoKHsgcGFyYW1zIH0pID0+IGNvZGUocGFyYW1zLnRlcm1UeXBlKSkpLmpvaW4oJywgJylcbiAgICB9IGZvciBhcyBtYW55IHllYXJzIGFzIHBvc3NpYmxlIGluIHRoZSBNYW5hZ2VtZW50IEJsYW5rIE5vZGVzLmBcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZywgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBtZXNzYWdlICYmIG1lc3NhZ2UgaW4gY3VzdG9tRXJyb3JNZXNzYWdlID9cbiAgICBjdXN0b21FcnJvck1lc3NhZ2VbbWVzc2FnZV0oZXJyb3IhLCBhbGxFcnJvcnMubGVuZ3RoLCBhbGxFcnJvcnMpIDpcbiAgICBtZXNzYWdlO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXSk6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT5cbiAgZXJyb3JcbiAgICA/ICh7XG4gICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIC4uLmVycm9yLFxuICAgICAgbWFwRXJyb3I6IGVycm9yLm1lc3NhZ2UgPT09IG1hcEVycm9yTWVzc2FnZSxcbiAgICAgIG1lc3NhZ2U6IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCBlcnJvciwgYWxsRXJyb3JzKVxuICAgIH0pXG4gICAgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc0Vycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgKGVycm9yLmxldmVsID09PSAnZXJyb3InIHx8ICFlcnJvci5sZXZlbCk7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc1dhcm5pbmcgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiBlcnJvci5sZXZlbCA9PT0gJ3dhcm5pbmcnO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nUHJvcGVydHlFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnbWlzc2luZ1Byb3BlcnR5JyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdPbmVPZkVycm9yID0gKHsga2V5d29yZCwgc2NoZW1hUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChzY2hlbWFQYXRoIHx8ICcnKS5pbmNsdWRlcygnb25lT2YnKTtcblxuY29uc3QgaXNGYWlsaW5nS2V5d29yZEVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdmYWlsaW5nS2V5d29yZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXJyb3IgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IpID0+IFtcbiAgaXNGYWlsaW5nS2V5d29yZEVycm9yXG5dLmV2ZXJ5KGZ1bmMgPT4gIWZ1bmMoZXJyb3IpKTtcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdOb2RlRXJyb3JzID0gKGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdKSA9PlxuICBlcnJvcnMuZmlsdGVyKCh7IGtleXdvcmQsIHBhcmFtcyB9KSA9PlxuICAgIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQHR5cGUnIHx8IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgKTtcbiJdfQ==