@workflow/builders 5.0.0-beta.20 → 5.0.0-beta.21

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.
@@ -117,7 +117,9 @@ function extractWorkflowCodeFromBundle(ast) {
117
117
  decl.id.value === 'workflowCode' &&
118
118
  decl.init) {
119
119
  if (decl.init.type === 'TemplateLiteral') {
120
- return decl.init.quasis.map((q) => q.cooked || q.raw).join('');
120
+ return decl.init.quasis
121
+ .map((q) => decodeEscapedWorkflowCode(q.raw))
122
+ .join('');
121
123
  }
122
124
  if (decl.init.type === 'StringLiteral') {
123
125
  return decl.init.value;
@@ -128,6 +130,9 @@ function extractWorkflowCodeFromBundle(ast) {
128
130
  }
129
131
  return null;
130
132
  }
133
+ function decodeEscapedWorkflowCode(rawTemplateElement) {
134
+ return rawTemplateElement.replace(/\\([\\`$])/g, '$1');
135
+ }
131
136
  /**
132
137
  * Extract step declarations using regex for speed
133
138
  */
@@ -1473,4 +1478,4 @@ function analyzeTransitiveCall(funcName, stepDeclarations, context, functionMap,
1473
1478
  }
1474
1479
  return { nodes, edges, entryNodeIds, exitNodeIds };
1475
1480
  }
1476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLWV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvd3MtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFnQjtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFlBQVk7WUFDZixPQUFRLElBQW1CLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sTUFBTSxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLE1BQU0sQ0FBRSxJQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sSUFBSyxJQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFcEMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7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QUFDO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24sXG4gIEJsb2NrU3RhdGVtZW50LFxuICBDYWxsRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25FeHByZXNzaW9uLFxuICBJZGVudGlmaWVyLFxuICBNZW1iZXJFeHByZXNzaW9uLFxuICBQcm9ncmFtLFxuICBTdGF0ZW1lbnQsXG4gIFZhcmlhYmxlRGVjbGFyYXRpb24sXG59IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgeyBwYXJzZVN5bmMgfSBmcm9tICdAc3djL2NvcmUnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25zdGFudHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBwcmltaXRpdmVzIHRoYXQgc2hvdWxkIGJlIHNob3duIGFzIG5vZGVzIGluIHRoZSBncmFwaC5cbiAqIFRoZXNlIGFyZSBidWlsdC1pbiB3b3JrZmxvdyBmdW5jdGlvbnMgdGhhdCByZXByZXNlbnQgbWVhbmluZ2Z1bFxuICogcGF1c2VzIG9yIHdhaXQgcG9pbnRzIGluIHRoZSB3b3JrZmxvdyBleGVjdXRpb24uXG4gKi9cbmNvbnN0IFdPUktGTE9XX1BSSU1JVElWRVMgPSBuZXcgU2V0KFsnc2xlZXAnLCAnY3JlYXRlSG9vaycsICdjcmVhdGVXZWJob29rJ10pO1xuXG4vKipcbiAqIEV4dHJhY3QgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG5hbWUgZnJvbSBhIHN0ZXBJZC5cbiAqIHN0ZXBJZCBmb3JtYXQ6IFwic3RlcC8vcGF0aC90by9maWxlLnRzLy9mdW5jdGlvbk5hbWVcIlxuICogVGhlIGJ1bmRsZXIgbWF5IHJlbmFtZSBmdW5jdGlvbnMgdG8gYXZvaWQgY29sbGlzaW9ucyAoZS5nLiBhZGQgLT4gYWRkMiksXG4gKiBidXQgdGhlIHN0ZXBJZCBjb250YWlucyB0aGUgb3JpZ2luYWwgVHlwZVNjcmlwdCBmdW5jdGlvbiBuYW1lLlxuICovXG5mdW5jdGlvbiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJZDogc3RyaW5nLCBmYWxsYmFja05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gc3RlcElkLnNwbGl0KCcvLycpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzWzJdIDogZmFsbGJhY2tOYW1lO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSByZWFkYWJsZSBjb25kaXRpb24gdGV4dCBmcm9tIGFuIEV4cHJlc3Npb24gQVNUIG5vZGUuXG4gKiBSZWN1cnNpdmVseSBidWlsZHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmRpdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGl0aW9uVGV4dChleHByOiBFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiAoZXhwciBhcyBJZGVudGlmaWVyKS52YWx1ZTtcblxuICAgIGNhc2UgJ0Jvb2xlYW5MaXRlcmFsJzpcbiAgICAgIHJldHVybiBTdHJpbmcoKGV4cHIgYXMgYW55KS52YWx1ZSk7XG5cbiAgICBjYXNlICdOdW1lcmljTGl0ZXJhbCc6XG4gICAgICByZXR1cm4gU3RyaW5nKChleHByIGFzIGFueSkudmFsdWUpO1xuXG4gICAgY2FzZSAnU3RyaW5nTGl0ZXJhbCc6XG4gICAgICByZXR1cm4gYFwiJHsoZXhwciBhcyBhbnkpLnZhbHVlfVwiYDtcblxuICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCBiaW4gPSBleHByIGFzIGFueTtcbiAgICAgIGNvbnN0IGxlZnQgPSBnZXRDb25kaXRpb25UZXh0KGJpbi5sZWZ0KTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gZ2V0Q29uZGl0aW9uVGV4dChiaW4ucmlnaHQpO1xuICAgICAgcmV0dXJuIGAke2xlZnR9ICR7YmluLm9wZXJhdG9yfSAke3JpZ2h0fWA7XG4gICAgfVxuXG4gICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgdW5hcnkgPSBleHByIGFzIGFueTtcbiAgICAgIGNvbnN0IGFyZyA9IGdldENvbmRpdGlvblRleHQodW5hcnkuYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIGAke3VuYXJ5Lm9wZXJhdG9yfSR7YXJnfWA7XG4gICAgfVxuXG4gICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IGV4cHIgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgIGNvbnN0IG9iaiA9IGdldENvbmRpdGlvblRleHQobWVtYmVyLm9iamVjdCk7XG4gICAgICBpZiAobWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICByZXR1cm4gYCR7b2JqfS4keyhtZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWV9YDtcbiAgICAgIH1cbiAgICAgIGlmIChtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0NvbXB1dGVkJykge1xuICAgICAgICBjb25zdCBjb21wdXRlZCA9IChtZW1iZXIucHJvcGVydHkgYXMgYW55KS5leHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gYCR7b2JqfVske2dldENvbmRpdGlvblRleHQoY29tcHV0ZWQpfV1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IGNhbGwgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuICAgICAgY29uc3QgY2FsbGVlID0gY2FsbC5jYWxsZWU7XG4gICAgICAvLyBIYW5kbGUgY2FsbGVlIHdoaWNoIGNvdWxkIGJlIEV4cHJlc3Npb24sIFN1cGVyLCBvciBJbXBvcnRcbiAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gJ1N1cGVyJyB8fCBjYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgcmV0dXJuIGAke2NhbGxlZS50eXBlLnRvTG93ZXJDYXNlKCl9KClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2dldENvbmRpdGlvblRleHQoY2FsbGVlIGFzIEV4cHJlc3Npb24pfSgpYDtcbiAgICB9XG5cbiAgICBjYXNlICdQYXJlbnRoZXNpc0V4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCBwYXJlbiA9IGV4cHIgYXMgYW55O1xuICAgICAgcmV0dXJuIGAoJHtnZXRDb25kaXRpb25UZXh0KHBhcmVuLmV4cHJlc3Npb24pfSlgO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2NvbmRpdGlvbic7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW50ZXJuYWwgVHlwZXMgKHVzZWQgZHVyaW5nIGV4dHJhY3Rpb24gb25seSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuaW50ZXJmYWNlIEZ1bmN0aW9uSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgYm9keTogQmxvY2tTdGF0ZW1lbnQgfCBFeHByZXNzaW9uIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgaXNTdGVwOiBib29sZWFuO1xuICBzdGVwSWQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBbmFseXNpc0NvbnRleHQge1xuICBwYXJhbGxlbENvdW50ZXI6IG51bWJlcjtcbiAgbG9vcENvdW50ZXI6IG51bWJlcjtcbiAgY29uZGl0aW9uYWxDb3VudGVyOiBudW1iZXI7XG4gIG5vZGVDb3VudGVyOiBudW1iZXI7XG4gIGluTG9vcDogc3RyaW5nIHwgbnVsbDtcbiAgaW5Db25kaXRpb25hbDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRyYWNrcyB2YXJpYWJsZXMgYXNzaWduZWQgZnJvbSBjcmVhdGVXZWJob29rKCkgb3IgY3JlYXRlSG9vaygpICovXG4gIHdlYmhvb2tWYXJpYWJsZXM6IFNldDxzdHJpbmc+O1xuICAvKiogVHJhY2tzIGFycmF5IHZhcmlhYmxlcyB0aGF0IGhhdmUgc3RlcCBjYWxscyBwdXNoZWQgaW50byB0aGVtIChmb3IgUHJvbWlzZS5hbGwgcGF0dGVybikgKi9cbiAgcHJvbWlzZUFycmF5czogTWFwPHN0cmluZywgTWFuaWZlc3ROb2RlW10+OyAvLyBhcnJheU5hbWUgLT4gbGlzdCBvZiBub2Rlc1xufVxuXG5pbnRlcmZhY2UgQW5hbHlzaXNSZXN1bHQge1xuICBub2RlczogTWFuaWZlc3ROb2RlW107XG4gIGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXTtcbiAgZW50cnlOb2RlSWRzOiBzdHJpbmdbXTtcbiAgZXhpdE5vZGVJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE5vZGUgbWV0YWRhdGEgZm9yIGNvbnRyb2wgZmxvdyBzZW1hbnRpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlTWV0YWRhdGEge1xuICBsb29wSWQ/OiBzdHJpbmc7XG4gIGxvb3BJc0F3YWl0PzogYm9vbGVhbjtcbiAgY29uZGl0aW9uYWxJZD86IHN0cmluZztcbiAgY29uZGl0aW9uYWxCcmFuY2g/OiAnVGhlbicgfCAnRWxzZSc7XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgcGFyYWxsZWxNZXRob2Q/OiBzdHJpbmc7XG4gIC8qKiBTdGVwIGlzIHBhc3NlZCBhcyBhIHJlZmVyZW5jZSAoY2FsbGJhY2svdG9vbCkgcmF0aGVyIHRoYW4gZGlyZWN0bHkgY2FsbGVkICovXG4gIGlzU3RlcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBDb250ZXh0IHdoZXJlIHRoZSBzdGVwIHJlZmVyZW5jZSB3YXMgZm91bmQgKGUuZy4sIFwidG9vbHMuZ2V0V2VhdGhlci5leGVjdXRlXCIpICovXG4gIHJlZmVyZW5jZUNvbnRleHQ/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIG5vZGUgaXMgYSB0b29sIHN0ZXAgY29ubmVjdGVkIHRvIGEgRHVyYWJsZUFnZW50ICovXG4gIGlzVG9vbD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZSBvZiB0aGUgdG9vbCAoa2V5IGluIHRvb2xzIG9iamVjdCkgKi9cbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdG9vbHMgKGltcG9ydGVkIHZhcmlhYmxlKSAqL1xuICBpc1Rvb2xzQ29sbGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBUaGUgdmFyaWFibGUgbmFtZSBvZiB0aGUgdG9vbHMgY29sbGVjdGlvbiAqL1xuICB0b29sc1ZhcmlhYmxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoIG5vZGUgZm9yIHdvcmtmbG93IHZpc3VhbGl6YXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdE5vZGUge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG5vZGVLaW5kOiBzdHJpbmc7XG4gICAgc3RlcElkPzogc3RyaW5nO1xuICB9O1xuICBtZXRhZGF0YT86IE5vZGVNZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBHcmFwaCBlZGdlIGZvciB3b3JrZmxvdyBjb250cm9sIGZsb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHR5cGU6ICdkZWZhdWx0JyB8ICdsb29wJyB8ICdjb25kaXRpb25hbCcgfCAncGFyYWxsZWwnIHwgJ3Rvb2wnO1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFwaCBkYXRhIGZvciBhIHNpbmdsZSB3b3JrZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93R3JhcGhEYXRhIHtcbiAgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdO1xuICBlZGdlczogTWFuaWZlc3RFZGdlW107XG59XG5cbi8qKlxuICogU3RlcCBlbnRyeSBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdFN0ZXBFbnRyeSB7XG4gIHN0ZXBJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGVudHJ5IGluIHRoZSBtYW5pZmVzdCAoaW5jbHVkZXMgZ3JhcGggZGF0YSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdFdvcmtmbG93RW50cnkge1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIGdyYXBoOiBXb3JrZmxvd0dyYXBoRGF0YTtcbn1cblxuLyoqXG4gKiBNYW5pZmVzdCBzdHJ1Y3R1cmUgLSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBhbGwgd29ya2Zsb3cgbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdCB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgc3RlcHM6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFtzdGVwTmFtZTogc3RyaW5nXTogTWFuaWZlc3RTdGVwRW50cnk7XG4gICAgfTtcbiAgfTtcbiAgd29ya2Zsb3dzOiB7XG4gICAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV4dHJhY3Rpb24gRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3RzIHdvcmtmbG93IGdyYXBocyBmcm9tIGEgYnVuZGxlZCB3b3JrZmxvdyBmaWxlLlxuICogUmV0dXJucyB3b3JrZmxvdyBlbnRyaWVzIG9yZ2FuaXplZCBieSBmaWxlIHBhdGgsIHJlYWR5IGZvciBtZXJnaW5nIGludG8gTWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dHcmFwaHMoYnVuZGxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgfTtcbn0+IHtcbiAgY29uc3QgYnVuZGxlQ29kZSA9IGF3YWl0IHJlYWRGaWxlKGJ1bmRsZVBhdGgsICd1dGYtOCcpO1xuXG4gIHRyeSB7XG4gICAgbGV0IGFjdHVhbFdvcmtmbG93Q29kZSA9IGJ1bmRsZUNvZGU7XG5cbiAgICBjb25zdCBidW5kbGVBc3QgPSBwYXJzZVN5bmMoYnVuZGxlQ29kZSwge1xuICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgd29ya2Zsb3dDb2RlVmFsdWUgPSBleHRyYWN0V29ya2Zsb3dDb2RlRnJvbUJ1bmRsZShidW5kbGVBc3QpO1xuICAgIGlmICh3b3JrZmxvd0NvZGVWYWx1ZSkge1xuICAgICAgYWN0dWFsV29ya2Zsb3dDb2RlID0gd29ya2Zsb3dDb2RlVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgYXN0ID0gcGFyc2VTeW5jKGFjdHVhbFdvcmtmbG93Q29kZSwge1xuICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RlcERlY2xhcmF0aW9ucyA9IGV4dHJhY3RTdGVwRGVjbGFyYXRpb25zKGFjdHVhbFdvcmtmbG93Q29kZSk7XG4gICAgY29uc3QgZnVuY3Rpb25NYXAgPSBidWlsZEZ1bmN0aW9uTWFwKGFzdCwgc3RlcERlY2xhcmF0aW9ucyk7XG4gICAgY29uc3QgdmFyaWFibGVNYXAgPSBidWlsZFZhcmlhYmxlTWFwKGFzdCk7XG5cbiAgICByZXR1cm4gZXh0cmFjdFdvcmtmbG93cyhhc3QsIHN0ZXBEZWNsYXJhdGlvbnMsIGZ1bmN0aW9uTWFwLCB2YXJpYWJsZU1hcCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGV4dHJhY3Qgd29ya2Zsb3cgZ3JhcGhzIGZyb20gYnVuZGxlOicsIGVycm9yKTtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSB3b3JrZmxvd0NvZGUgc3RyaW5nIHZhbHVlIGZyb20gYSBwYXJzZWQgYnVuZGxlIEFTVFxuICovXG5mdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dDb2RlRnJvbUJ1bmRsZShhc3Q6IFByb2dyYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgaXRlbS5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pZC52YWx1ZSA9PT0gJ3dvcmtmbG93Q29kZScgJiZcbiAgICAgICAgICBkZWNsLmluaXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2wuaW5pdC5xdWFzaXMubWFwKChxKSA9PiBxLmNvb2tlZCB8fCBxLnJhdykuam9pbignJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWNsLmluaXQudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjbC5pbml0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN0ZXAgZGVjbGFyYXRpb25zIHVzaW5nIHJlZ2V4IGZvciBzcGVlZFxuICovXG5mdW5jdGlvbiBleHRyYWN0U3RlcERlY2xhcmF0aW9ucyhcbiAgYnVuZGxlQ29kZTogc3RyaW5nXG4pOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+IHtcbiAgY29uc3Qgc3RlcERlY2xhcmF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+KCk7XG5cbiAgY29uc3Qgc3RlcFBhdHRlcm4gPVxuICAgIC92YXIgKFxcdyspID0gZ2xvYmFsVGhpc1xcW1N5bWJvbFxcLmZvclxcKFwiV09SS0ZMT1dfVVNFX1NURVBcIlxcKVxcXVxcKFwiKFteXCJdKylcIlxcKS9nO1xuXG4gIGNvbnN0IGxpbmVzID0gYnVuZGxlQ29kZS5zcGxpdCgnXFxuJyk7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIHN0ZXBQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgY29uc3QgbWF0Y2ggPSBzdGVwUGF0dGVybi5leGVjKGxpbmUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgWywgdmFyTmFtZSwgc3RlcElkXSA9IG1hdGNoO1xuICAgICAgc3RlcERlY2xhcmF0aW9ucy5zZXQodmFyTmFtZSwgeyBzdGVwSWQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBEZWNsYXJhdGlvbnM7XG59XG5cbi8qKlxuICogRXh0cmFjdCBpbmxpbmUgc3RlcCBkZWNsYXJhdGlvbnMgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBib2R5LlxuICogVGhlc2UgYXJlIHN0ZXBzIGRlZmluZWQgYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uLlxuICogUGF0dGVybjogdmFyL2NvbnN0IHZhck5hbWUgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwSWRcIilcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdElubGluZVN0ZXBEZWNsYXJhdGlvbnMoXG4gIHN0bXRzOiBTdGF0ZW1lbnRbXVxuKTogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGlubGluZVN0ZXBzID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4oKTtcblxuICBmb3IgKGNvbnN0IHN0bXQgb2Ygc3RtdHMpIHtcbiAgICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBzdG10IGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pbml0Py50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNhbGxFeHByID0gZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uO1xuICAgICAgICAgIC8vIENoZWNrIGZvciBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwSWRcIikgcGF0dGVyblxuICAgICAgICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSBjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG9iamVjdCBpcyBnbG9iYWxUaGlzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgIChtZW1iZXIub2JqZWN0IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnZ2xvYmFsVGhpcycgJiZcbiAgICAgICAgICAgICAgbWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdDb21wdXRlZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBGb3IgY29tcHV0ZWQgbWVtYmVyIGFjY2VzcyBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoLi4uKV0sXG4gICAgICAgICAgICAgIC8vIHRoZSBwcm9wZXJ0eSBpcyBhIENvbXB1dGVkIHR5cGUgY29udGFpbmluZyB0aGUgZXhwcmVzc2lvblxuICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZEV4cHIgPSAobWVtYmVyLnByb3BlcnR5IGFzIGFueSkuZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgaWYgKGNvbXB1dGVkRXhwcj8udHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbENhbGwgPSBjb21wdXRlZEV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIilcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sQ2FsbC5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xNZW1iZXIgPSBzeW1ib2xDYWxsLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xNZW1iZXIub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sTWVtYmVyLm9iamVjdCBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT0gJ1N5bWJvbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sTWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sTWVtYmVyLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnZm9yJyAmJlxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xDYWxsLmFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbENhbGwuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24udHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgKHN5bWJvbENhbGwuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24gYXMgYW55KS52YWx1ZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAnV09SS0ZMT1dfVVNFX1NURVAnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgc3RlcElkIGZyb20gdGhlIG91dGVyIGNhbGwgYXJndW1lbnRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByLmFyZ3VtZW50c1swXS5leHByZXNzaW9uLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwSWQgPSAoY2FsbEV4cHIuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24gYXMgYW55KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhck5hbWUgPSAoZGVjbC5pZCBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTdGVwcy5zZXQodmFyTmFtZSwgeyBzdGVwSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5saW5lU3RlcHM7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgb2YgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgYnVuZGxlIGZvciB0cmFuc2l0aXZlIHN0ZXAgcmVzb2x1dGlvblxuICovXG5mdW5jdGlvbiBidWlsZEZ1bmN0aW9uTWFwKFxuICBhc3Q6IFByb2dyYW0sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT5cbik6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4ge1xuICBjb25zdCBmdW5jdGlvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gaXRlbSBhcyBGdW5jdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKGZ1bmMuaWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBuYW1lID0gZnVuYy5pZGVudGlmaWVyLnZhbHVlO1xuICAgICAgICBjb25zdCBpc1N0ZXAgPSBzdGVwRGVjbGFyYXRpb25zLmhhcyhuYW1lKTtcbiAgICAgICAgZnVuY3Rpb25NYXAuc2V0KG5hbWUsIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGJvZHk6IGZ1bmMuYm9keSxcbiAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgc3RlcElkOiBpc1N0ZXAgPyBzdGVwRGVjbGFyYXRpb25zLmdldChuYW1lKT8uc3RlcElkIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBpdGVtIGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGRlY2wuaW5pdCkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBkZWNsLmlkLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IGlzU3RlcCA9IHN0ZXBEZWNsYXJhdGlvbnMuaGFzKG5hbWUpO1xuXG4gICAgICAgICAgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgICAgICAgICAgY29uc3QgZnVuY0V4cHIgPSBkZWNsLmluaXQgYXMgRnVuY3Rpb25FeHByZXNzaW9uO1xuICAgICAgICAgICAgZnVuY3Rpb25NYXAuc2V0KG5hbWUsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgYm9keTogZnVuY0V4cHIuYm9keSxcbiAgICAgICAgICAgICAgaXNTdGVwLFxuICAgICAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd0Z1bmMgPSBkZWNsLmluaXQgYXMgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBib2R5OiBhcnJvd0Z1bmMuYm9keSxcbiAgICAgICAgICAgICAgaXNTdGVwLFxuICAgICAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb25NYXA7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKG9iamVjdHMpIGZvciB0b29sIHJlc29sdXRpb25cbiAqIFRoaXMgYWxsb3dzIHVzIHRvIHJlc29sdmUgdG9vbHMgb2JqZWN0cyB0byB0aGUgYWN0dWFsIHRvb2xzIG9iamVjdFxuICovXG5mdW5jdGlvbiBidWlsZFZhcmlhYmxlTWFwKGFzdDogUHJvZ3JhbSk6IE1hcDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCB2YXJpYWJsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCB2YXJEZWNsID0gaXRlbSBhcyBWYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgICAgZm9yIChjb25zdCBkZWNsIG9mIHZhckRlY2wuZGVjbGFyYXRpb25zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQ/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICB2YXJpYWJsZU1hcC5zZXQoZGVjbC5pZC52YWx1ZSwgZGVjbC5pbml0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZU1hcDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHdvcmtmbG93cyBmcm9tIEFTVFxuICovXG5mdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dzKFxuICBhc3Q6IFByb2dyYW0sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKToge1xuICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gIH07XG59IHtcbiAgY29uc3QgcmVzdWx0OiB7XG4gICAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gICAgfTtcbiAgfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBhc3QuYm9keSkge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgZnVuYyA9IGl0ZW0gYXMgRnVuY3Rpb25EZWNsYXJhdGlvbjtcbiAgICAgIGlmICghZnVuYy5pZGVudGlmaWVyKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZnVuYy5pZGVudGlmaWVyLnZhbHVlO1xuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IGZpbmRXb3JrZmxvd0lkKGFzdCwgd29ya2Zsb3dOYW1lKTtcbiAgICAgIGlmICghd29ya2Zsb3dJZCkgY29udGludWU7XG5cbiAgICAgIC8vIEV4dHJhY3QgZmlsZSBwYXRoIGFuZCBhY3R1YWwgd29ya2Zsb3cgbmFtZSBmcm9tIHdvcmtmbG93SWQ6IFwid29ya2Zsb3cvL3BhdGgvdG8vZmlsZS50cy8vZnVuY3Rpb25OYW1lXCJcbiAgICAgIC8vIFRoZSBidW5kbGVyIG1heSByZW5hbWUgZnVuY3Rpb25zIHRvIGF2b2lkIGNvbGxpc2lvbnMgKGUuZy4gYWRkVGVuV29ya2Zsb3cgLT4gYWRkVGVuV29ya2Zsb3cyKSxcbiAgICAgIC8vIGJ1dCB0aGUgd29ya2Zsb3dJZCBjb250YWlucyB0aGUgb3JpZ2luYWwgVHlwZVNjcmlwdCBmdW5jdGlvbiBuYW1lLlxuICAgICAgY29uc3QgcGFydHMgPSB3b3JrZmxvd0lkLnNwbGl0KCcvLycpO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiAndW5rbm93bic7XG4gICAgICBjb25zdCBhY3R1YWxXb3JrZmxvd05hbWUgPSBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMl0gOiB3b3JrZmxvd05hbWU7XG5cbiAgICAgIGNvbnN0IGdyYXBoID0gYW5hbHl6ZVdvcmtmbG93RnVuY3Rpb24oXG4gICAgICAgIGZ1bmMsXG4gICAgICAgIHdvcmtmbG93TmFtZSxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlc3VsdFtmaWxlUGF0aF0pIHtcbiAgICAgICAgcmVzdWx0W2ZpbGVQYXRoXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbZmlsZVBhdGhdW2FjdHVhbFdvcmtmbG93TmFtZV0gPSB7XG4gICAgICAgIHdvcmtmbG93SWQsXG4gICAgICAgIGdyYXBoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZpbmQgd29ya2Zsb3dJZCBhc3NpZ25tZW50IGZvciBhIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3JrZmxvd0lkKGFzdDogUHJvZ3JhbSwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKSB7XG4gICAgICBjb25zdCBleHByID0gaXRlbS5leHByZXNzaW9uO1xuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCBsZWZ0ID0gZXhwci5sZWZ0O1xuICAgICAgICBpZiAobGVmdC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBsZWZ0Lm9iamVjdDtcbiAgICAgICAgICBjb25zdCBwcm9wID0gbGVmdC5wcm9wZXJ0eTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvYmoudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICBvYmoudmFsdWUgPT09IGZ1bmN0aW9uTmFtZSAmJlxuICAgICAgICAgICAgcHJvcC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgIHByb3AudmFsdWUgPT09ICd3b3JrZmxvd0lkJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBleHByLnJpZ2h0O1xuICAgICAgICAgICAgaWYgKHJpZ2h0LnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSB3b3JrZmxvdyBmdW5jdGlvbiBhbmQgYnVpbGQgaXRzIGdyYXBoXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVXb3JrZmxvd0Z1bmN0aW9uKFxuICBmdW5jOiBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICB3b3JrZmxvd05hbWU6IHN0cmluZyxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiBXb3JrZmxvd0dyYXBoRGF0YSB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcblxuICAvLyBBZGQgc3RhcnQgbm9kZVxuICBub2Rlcy5wdXNoKHtcbiAgICBpZDogJ3N0YXJ0JyxcbiAgICB0eXBlOiAnd29ya2Zsb3dTdGFydCcsXG4gICAgZGF0YToge1xuICAgICAgbGFiZWw6IGBTdGFydDogJHt3b3JrZmxvd05hbWV9YCxcbiAgICAgIG5vZGVLaW5kOiAnd29ya2Zsb3dfc3RhcnQnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCA9IHtcbiAgICBwYXJhbGxlbENvdW50ZXI6IDAsXG4gICAgbG9vcENvdW50ZXI6IDAsXG4gICAgY29uZGl0aW9uYWxDb3VudGVyOiAwLFxuICAgIG5vZGVDb3VudGVyOiAwLFxuICAgIGluTG9vcDogbnVsbCxcbiAgICBpbkNvbmRpdGlvbmFsOiBudWxsLFxuICAgIHdlYmhvb2tWYXJpYWJsZXM6IG5ldyBTZXQoKSxcbiAgICBwcm9taXNlQXJyYXlzOiBuZXcgTWFwKCksXG4gIH07XG5cbiAgbGV0IHByZXZFeGl0SWRzID0gWydzdGFydCddO1xuXG4gIGlmIChmdW5jLmJvZHk/LnN0bXRzKSB7XG4gICAgLy8gRXh0cmFjdCBpbmxpbmUgc3RlcCBkZWNsYXJhdGlvbnMgZnJvbSB0aGUgd29ya2Zsb3cgYm9keVxuICAgIC8vIFRoZXNlIGFyZSBzdGVwcyBkZWZpbmVkIGFzIHZhcmlhYmxlcyBpbnNpZGUgdGhlIHdvcmtmbG93IGZ1bmN0aW9uXG4gICAgY29uc3QgaW5saW5lU3RlcHMgPSBleHRyYWN0SW5saW5lU3RlcERlY2xhcmF0aW9ucyhmdW5jLmJvZHkuc3RtdHMpO1xuXG4gICAgLy8gTWVyZ2UgaW5saW5lIHN0ZXBzIHdpdGggZ2xvYmFsIHN0ZXAgZGVjbGFyYXRpb25zXG4gICAgY29uc3QgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucyA9IG5ldyBNYXAoc3RlcERlY2xhcmF0aW9ucyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgaW5saW5lU3RlcHMpIHtcbiAgICAgIG1lcmdlZFN0ZXBEZWNsYXJhdGlvbnMuc2V0KG5hbWUsIGluZm8pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RtdCBvZiBmdW5jLmJvZHkuc3RtdHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIHN0bXQsXG4gICAgICAgIG1lcmdlZFN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgbm9kZXMucHVzaCguLi5yZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZXZJZCBvZiBwcmV2RXhpdElkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGBlXyR7cHJldklkfV8ke2VudHJ5SWR9YDtcbiAgICAgICAgICBpZiAoIWVkZ2VzLmZpbmQoKGUpID0+IGUuaWQgPT09IGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSByZXN1bHQubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZW50cnlJZCk7XG4gICAgICAgICAgICAvLyBPbmx5IHVzZSAncGFyYWxsZWwnIHR5cGUgZm9yIHBhcmFsbGVsIGdyb3VwIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICAvLyBTZXF1ZW50aWFsIGNvbm5lY3Rpb25zIChpbmNsdWRpbmcgdG8vZnJvbSBsb29wcykgc2hvdWxkIGJlICdkZWZhdWx0J1xuICAgICAgICAgICAgY29uc3QgZWRnZVR5cGUgPSB0YXJnZXROb2RlPy5tZXRhZGF0YT8ucGFyYWxsZWxHcm91cElkXG4gICAgICAgICAgICAgID8gJ3BhcmFsbGVsJ1xuICAgICAgICAgICAgICA6ICdkZWZhdWx0JztcbiAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogZWRnZUlkLFxuICAgICAgICAgICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICB0eXBlOiBlZGdlVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmV4aXROb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJldkV4aXRJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGVuZCBub2RlXG4gIG5vZGVzLnB1c2goe1xuICAgIGlkOiAnZW5kJyxcbiAgICB0eXBlOiAnd29ya2Zsb3dFbmQnLFxuICAgIGRhdGE6IHtcbiAgICAgIGxhYmVsOiAnUmV0dXJuJyxcbiAgICAgIG5vZGVLaW5kOiAnd29ya2Zsb3dfZW5kJyxcbiAgICB9LFxuICB9KTtcblxuICBmb3IgKGNvbnN0IHByZXZJZCBvZiBwcmV2RXhpdElkcykge1xuICAgIGVkZ2VzLnB1c2goe1xuICAgICAgaWQ6IGBlXyR7cHJldklkfV9lbmRgLFxuICAgICAgc291cmNlOiBwcmV2SWQsXG4gICAgICB0YXJnZXQ6ICdlbmQnLFxuICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdGF0ZW1lbnQgb3IgYmxvY2sgY29udGFpbnMgYXdhaXQgZXhwcmVzc2lvbnMgKHJlY3Vyc2l2ZWx5KVxuICogVXNlZCB0byBkZXRlcm1pbmUgaWYgYSBmb3Ivd2hpbGUgbG9vcCBpcyB0cnVseSBhIGxvb3BpbmcgZXhlY3V0aW9uIHBhdHRlcm5cbiAqIHZzIGp1c3QgY29sbGVjdGluZyBwcm9taXNlcyBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcblxuICAvLyBEaXJlY3QgYXdhaXQgZXhwcmVzc2lvblxuICBpZiAobm9kZS50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJykgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ2hlY2sgYmxvY2sgc3RhdGVtZW50c1xuICBpZiAobm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnICYmIG5vZGUuc3RtdHMpIHtcbiAgICByZXR1cm4gbm9kZS5zdG10cy5zb21lKChzdG10OiBhbnkpID0+IGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKHN0bXQpKTtcbiAgfVxuXG4gIC8vIENoZWNrIGV4cHJlc3Npb24gc3RhdGVtZW50c1xuICBpZiAobm9kZS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcgJiYgbm9kZS5leHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gIH1cblxuICAvLyBDaGVjayB2YXJpYWJsZSBkZWNsYXJhdGlvbnNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb25zKSB7XG4gICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zLnNvbWUoXG4gICAgICAoZGVjbDogYW55KSA9PiBkZWNsLmluaXQgJiYgY29udGFpbnNBd2FpdEV4cHJlc3Npb24oZGVjbC5pbml0KVxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdJZlN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50KSB8fFxuICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5hbHRlcm5hdGUpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGF0ZW1lbnRzXG4gIGlmIChcbiAgICBub2RlLnR5cGUgPT09ICdGb3JTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnRm9ySW5TdGF0ZW1lbnQnXG4gICkge1xuICAgIHJldHVybiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmJvZHkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgYXNzaWdubWVudCBleHByZXNzaW9ucyAoZS5nLiwgcmVzdWx0ID0gYXdhaXQgZG9Xb3JrKCkpXG4gIGlmIChub2RlLnR5cGUgPT09ICdBc3NpZ25tZW50RXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5yaWdodCk7XG4gIH1cblxuICAvLyBDaGVjayBjYWxsIGV4cHJlc3Npb25zIChmb3IgYXdhaXQgaW4gYXJndW1lbnRzKVxuICBpZiAobm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzKSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMuc29tZSgoYXJnOiBhbnkpID0+XG4gICAgICAgIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKGFyZy5leHByZXNzaW9uIHx8IGFyZylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBzdGF0ZW1lbnQgYW5kIGV4dHJhY3Qgc3RlcCBjYWxscyB3aXRoIHByb3BlciBDRkcgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVTdGF0ZW1lbnQoXG4gIHN0bXQ6IFN0YXRlbWVudCxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBsZXQgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgY29uc3QgdmFyRGVjbCA9IHN0bXQgYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmIChkZWNsLmluaXQpIHtcbiAgICAgICAgLy8gVHJhY2sgd2ViaG9vay9ob29rIHZhcmlhYmxlIGFzc2lnbm1lbnRzOiBjb25zdCB3ZWJob29rID0gY3JlYXRlV2ViaG9vaygpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nICYmXG4gICAgICAgICAgKGRlY2wuaW5pdCBhcyBDYWxsRXhwcmVzc2lvbikuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBmdW5jTmFtZSA9ICgoZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uKS5jYWxsZWUgYXMgSWRlbnRpZmllcilcbiAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgICBpZiAoZnVuY05hbWUgPT09ICdjcmVhdGVXZWJob29rJyB8fCBmdW5jTmFtZSA9PT0gJ2NyZWF0ZUhvb2snKSB7XG4gICAgICAgICAgICBjb250ZXh0LndlYmhvb2tWYXJpYWJsZXMuYWRkKChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmFjayBlbXB0eSBhcnJheSBhc3NpZ25tZW50cyBmb3IgUHJvbWlzZS5hbGwgcGF0dGVybjogY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQudHlwZSA9PT0gJ0FycmF5RXhwcmVzc2lvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSAoZGVjbC5pbml0IGFzIGFueSkuZWxlbWVudHM7XG4gICAgICAgICAgLy8gRW1wdHkgYXJyYXk6IGVsZW1lbnRzIGlzIHVuZGVmaW5lZCwgbnVsbCwgb3IgZW1wdHkgYXJyYXlcbiAgICAgICAgICBpZiAoIWVsZW1lbnRzIHx8IGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5wcm9taXNlQXJyYXlzLnNldCh2YXJOYW1lLCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZUV4cHJlc3Npb24oXG4gICAgICAgICAgZGVjbC5pbml0LFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4ucmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgaWYgKGVudHJ5Tm9kZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgcHJldklkIG9mIGV4aXROb2RlSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogYGVfJHtwcmV2SWR9XyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleGl0Tm9kZUlkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgIHN0bXQuZXhwcmVzc2lvbixcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5yZXN1bHQubm9kZXMpO1xuICAgIGVkZ2VzLnB1c2goLi4ucmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIGV4aXROb2RlSWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICB9XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IHNhdmVkQ29uZGl0aW9uYWwgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgY29uc3QgY29uZGl0aW9uYWxJZCA9IGBjb25kXyR7Y29udGV4dC5jb25kaXRpb25hbENvdW50ZXIrK31gO1xuICAgIGNvbnRleHQuaW5Db25kaXRpb25hbCA9IGNvbmRpdGlvbmFsSWQ7XG5cbiAgICAvLyBBbmFseXplIHRoZSBcInRoZW5cIiBicmFuY2ggZmlyc3QgdG8gY2hlY2sgaWYgaXQgaGFzIGFueSB3b3JrZmxvdy1yZWxldmFudCBub2Rlc1xuICAgIGxldCB0aGVuUmVzdWx0OiBBbmFseXNpc1Jlc3VsdDtcbiAgICBpZiAoc3RtdC5jb25zZXF1ZW50LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIHRoZW5SZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIHN0bXQuY29uc2VxdWVudC5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgc2luZ2xlLXN0YXRlbWVudCBjb25zZXF1ZW50IChubyBicmFjZXMpXG4gICAgICB0aGVuUmVzdWx0ID0gYW5hbHl6ZVN0YXRlbWVudChcbiAgICAgICAgc3RtdC5jb25zZXF1ZW50LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5hbHl6ZSB0aGUgXCJlbHNlXCIgYnJhbmNoIGlmIGl0IGV4aXN0c1xuICAgIGxldCBlbHNlUmVzdWx0OiBBbmFseXNpc1Jlc3VsdCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzdG10LmFsdGVybmF0ZSkge1xuICAgICAgaWYgKHN0bXQuYWx0ZXJuYXRlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgICAgZWxzZVJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgICBzdG10LmFsdGVybmF0ZS5zdG10cyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGFsdGVybmF0ZSAobm8gYnJhY2VzKSBvciBlbHNlLWlmXG4gICAgICAgIGVsc2VSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICAgIHN0bXQuYWx0ZXJuYXRlLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgY3JlYXRlIGNvbmRpdGlvbmFsIG5vZGUgaWYgYXQgbGVhc3Qgb25lIGJyYW5jaCBoYXMgd29ya2Zsb3ctcmVsZXZhbnQgbm9kZXMuXG4gICAgLy8gVGhpcyBhdm9pZHMgY3JlYXRpbmcgbm9kZXMgZm9yIHJ1bnRpbWUgYXNzZXJ0aW9ucyBsaWtlIGBpZiAoIWN0eCkgeyB0aHJvdyAuLi4gfWBcbiAgICBjb25zdCB0aGVuSGFzTm9kZXMgPSB0aGVuUmVzdWx0Lm5vZGVzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgZWxzZUhhc05vZGVzID0gZWxzZVJlc3VsdCA/IGVsc2VSZXN1bHQubm9kZXMubGVuZ3RoID4gMCA6IGZhbHNlO1xuXG4gICAgaWYgKHRoZW5IYXNOb2RlcyB8fCBlbHNlSGFzTm9kZXMpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29uZGl0aW9uYWwgZGVjaXNpb24gbm9kZVxuICAgICAgY29uc3QgY29uZGl0aW9uVGV4dCA9IGdldENvbmRpdGlvblRleHQoc3RtdC50ZXN0KTtcbiAgICAgIGNvbnN0IGNvbmROb2RlSWQgPSBgJHtjb25kaXRpb25hbElkfV9ub2RlYDtcbiAgICAgIGNvbnN0IGNvbmRNZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG4gICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgY29uZE1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb25kTm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICBpZDogY29uZE5vZGVJZCxcbiAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhYmVsOiBjb25kaXRpb25UZXh0LFxuICAgICAgICAgIG5vZGVLaW5kOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YTpcbiAgICAgICAgICBPYmplY3Qua2V5cyhjb25kTWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBjb25kTWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChjb25kTm9kZSk7XG5cbiAgICAgIC8vIFRoZSBjb25kaXRpb25hbCBub2RlIGlzIHRoZSBlbnRyeSBwb2ludFxuICAgICAgZW50cnlOb2RlSWRzLnB1c2goY29uZE5vZGVJZCk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGVuUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb25kaXRpb25hbElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsQnJhbmNoID0gJ1RoZW4nO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLnRoZW5SZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi50aGVuUmVzdWx0LmVkZ2VzKTtcblxuICAgICAgLy8gQ3JlYXRlIGVkZ2UgZnJvbSBjb25kaXRpb25hbCBub2RlIHRvIFwidGhlblwiIGJyYW5jaCB3aXRoIFwidHJ1ZVwiIGxhYmVsXG4gICAgICBmb3IgKGNvbnN0IHRoZW5FbnRyeUlkIG9mIHRoZW5SZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgIGlkOiBgZV8ke2NvbmROb2RlSWR9XyR7dGhlbkVudHJ5SWR9X3RydWVgLFxuICAgICAgICAgIHNvdXJjZTogY29uZE5vZGVJZCxcbiAgICAgICAgICB0YXJnZXQ6IHRoZW5FbnRyeUlkLFxuICAgICAgICAgIHR5cGU6ICdjb25kaXRpb25hbCcsXG4gICAgICAgICAgbGFiZWw6ICd0cnVlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnRoZW5SZXN1bHQuZXhpdE5vZGVJZHMpO1xuXG4gICAgICBpZiAoZWxzZVJlc3VsdCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZWxzZVJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbmRpdGlvbmFsSWQ7XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5jb25kaXRpb25hbEJyYW5jaCA9ICdFbHNlJztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGVzLnB1c2goLi4uZWxzZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uZWxzZVJlc3VsdC5lZGdlcyk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGVkZ2UgZnJvbSBjb25kaXRpb25hbCBub2RlIHRvIFwiZWxzZVwiIGJyYW5jaCB3aXRoIFwiZmFsc2VcIiBsYWJlbFxuICAgICAgICBmb3IgKGNvbnN0IGVsc2VFbnRyeUlkIG9mIGVsc2VSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICBpZDogYGVfJHtjb25kTm9kZUlkfV8ke2Vsc2VFbnRyeUlkfV9mYWxzZWAsXG4gICAgICAgICAgICBzb3VyY2U6IGNvbmROb2RlSWQsXG4gICAgICAgICAgICB0YXJnZXQ6IGVsc2VFbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnZmFsc2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uZWxzZVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vdGU6IFdoZW4gdGhlcmUncyBubyBlbHNlIGJyYW5jaCwgd2UgZG9uJ3QgYWRkIHRoZSBjb25kaXRpb25hbCBub2RlIGFzIGFuIGV4aXQuXG4gICAgLy8gVGhlIHRoZW4tYnJhbmNoIGV4aXRzIGFyZSB0aGUgb25seSBleGl0cy4gVGhpcyBtZWFucyB0aGUgZ3JhcGggc2hvd3MgdGhlIFwidHJ1ZVwiIHBhdGg7XG4gICAgLy8gdGhlIFwiZmFsc2VcIiBjYXNlICh3aGVuIGNvbmRpdGlvbiBpcyBmYWxzZSBhbmQgdGhlcmUncyBubyBlbHNlKSBpbXBsaWNpdGx5IG1lYW5zXG4gICAgLy8gZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIG5vIHN0ZXBzIGZyb20gdGhpcyBpZiBzdGF0ZW1lbnQuXG4gICAgLy9cbiAgICAvLyBXaGVuIGJvdGggYnJhbmNoZXMgaGF2ZSBubyB3b3JrZmxvdy1yZWxldmFudCBub2RlcyAoZS5nLiwgcnVudGltZSBhc3NlcnRpb25zIGxpa2VcbiAgICAvLyBgaWYgKCFjdHgpIHsgdGhyb3cgLi4uIH1gKSwgd2Ugc2tpcCBjcmVhdGluZyB0aGUgY29uZGl0aW9uYWwgbm9kZSBlbnRpcmVseS5cblxuICAgIGNvbnRleHQuaW5Db25kaXRpb25hbCA9IHNhdmVkQ29uZGl0aW9uYWw7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnIHx8IHN0bXQudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcpIHtcbiAgICBjb25zdCBib2R5ID1cbiAgICAgIHN0bXQudHlwZSA9PT0gJ1doaWxlU3RhdGVtZW50JyA/IHN0bXQuYm9keSA6IChzdG10IGFzIGFueSkuYm9keTtcblxuICAgIC8vIE9ubHkgdHJlYXQgYXMgYSBsb29wIGlmIHRoZSBib2R5IGNvbnRhaW5zIGF3YWl0IGV4cHJlc3Npb25zXG4gICAgLy8gT3RoZXJ3aXNlIGl0J3MgbGlrZWx5IGEgXCJjb2xsZWN0IHByb21pc2VzXCIgcGF0dGVybiAoZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbilcbiAgICBjb25zdCBoYXNBd2FpdCA9IGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKGJvZHkpO1xuXG4gICAgY29uc3QgbG9vcElkID0gaGFzQXdhaXQgPyBgbG9vcF8ke2NvbnRleHQubG9vcENvdW50ZXIrK31gIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNhdmVkTG9vcCA9IGNvbnRleHQuaW5Mb29wO1xuICAgIGlmIChsb29wSWQpIHtcbiAgICAgIGNvbnRleHQuaW5Mb29wID0gbG9vcElkO1xuICAgIH1cblxuICAgIGlmIChib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIGJvZHkuc3RtdHMsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgLy8gT25seSBhZGQgbG9vcCBtZXRhZGF0YSBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgLy8gT25seSBjcmVhdGUgbG9vcC1iYWNrIGVkZ2VzIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGJvZHkgKG5vIGJyYWNlcylcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIC8vIE9ubHkgYWRkIGxvb3AgbWV0YWRhdGEgaWYgdGhpcyBpcyB0cnVseSBhIGxvb3BpbmcgcGF0dGVyblxuICAgICAgaWYgKGxvb3BJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbG9vcFJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4ubG9vcFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLmxvb3BSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzID0gbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICBleGl0Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZXhpdE5vZGVJZHM7XG5cbiAgICAgIC8vIE9ubHkgY3JlYXRlIGxvb3AtYmFjayBlZGdlcyBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhpdElkIG9mIGxvb3BSZXN1bHQuZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogYGVfJHtleGl0SWR9X2JhY2tfJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgIHR5cGU6ICdsb29wJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuaW5Mb29wID0gc2F2ZWRMb29wO1xuICB9XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0Zvck9mU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGxvb3BJZCA9IGBsb29wXyR7Y29udGV4dC5sb29wQ291bnRlcisrfWA7XG4gICAgY29uc3Qgc2F2ZWRMb29wID0gY29udGV4dC5pbkxvb3A7XG4gICAgY29udGV4dC5pbkxvb3AgPSBsb29wSWQ7XG5cbiAgICBjb25zdCBpc0F3YWl0ID0gKHN0bXQgYXMgYW55KS5pc0F3YWl0IHx8IChzdG10IGFzIGFueSkuYXdhaXQ7XG4gICAgY29uc3QgYm9keSA9IChzdG10IGFzIGFueSkuYm9keTtcblxuICAgIGlmIChib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIGJvZHkuc3RtdHMsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJc0F3YWl0ID0gaXNBd2FpdDtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGJvZHkgKG5vIGJyYWNlcylcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGxvb3BJZDtcbiAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSXNBd2FpdCA9IGlzQXdhaXQ7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4ubG9vcFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLmxvb3BSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzID0gbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICBleGl0Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZXhpdE5vZGVJZHM7XG5cbiAgICAgIGZvciAoY29uc3QgZXhpdElkIG9mIGxvb3BSZXN1bHQuZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICBpZDogYGVfJHtleGl0SWR9X2JhY2tfJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBzb3VyY2U6IGV4aXRJZCxcbiAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgIHR5cGU6ICdsb29wJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuaW5Mb29wID0gc2F2ZWRMb29wO1xuICB9XG5cbiAgLy8gSGFuZGxlIHBsYWluIEJsb2NrU3RhdGVtZW50IChiYXJlIGJsb2NrcyBsaWtlIHsgLi4uIH0pXG4gIGlmIChzdG10LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICBjb25zdCBibG9ja1Jlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgIChzdG10IGFzIEJsb2NrU3RhdGVtZW50KS5zdG10cyxcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5ibG9ja1Jlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5ibG9ja1Jlc3VsdC5lZGdlcyk7XG4gICAgZW50cnlOb2RlSWRzID0gYmxvY2tSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIGV4aXROb2RlSWRzID0gYmxvY2tSZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnUmV0dXJuU3RhdGVtZW50JyAmJiAoc3RtdCBhcyBhbnkpLmFyZ3VtZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZUV4cHJlc3Npb24oXG4gICAgICAoc3RtdCBhcyBhbnkpLmFyZ3VtZW50LFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGEgYmxvY2sgb2Ygc3RhdGVtZW50cyB3aXRoIHByb3BlciBzZXF1ZW50aWFsIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVCbG9jayhcbiAgc3RtdHM6IFN0YXRlbWVudFtdLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGxldCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50RXhpdElkczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHN0bXQgb2Ygc3RtdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgc3RtdCxcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG5cbiAgICBpZiAocmVzdWx0Lm5vZGVzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuXG4gICAgaWYgKGVudHJ5Tm9kZUlkcy5sZW5ndGggPT09IDAgJiYgcmVzdWx0LmVudHJ5Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50RXhpdElkcy5sZW5ndGggPiAwICYmIHJlc3VsdC5lbnRyeU5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwcmV2SWQgb2YgY3VycmVudEV4aXRJZHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIHJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gcmVzdWx0Lm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGVudHJ5SWQpO1xuICAgICAgICAgIGNvbnN0IGVkZ2VUeXBlID0gdGFyZ2V0Tm9kZT8ubWV0YWRhdGE/LnBhcmFsbGVsR3JvdXBJZFxuICAgICAgICAgICAgPyAncGFyYWxsZWwnXG4gICAgICAgICAgICA6ICdkZWZhdWx0JztcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke3ByZXZJZH1fJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgIHR5cGU6IGVkZ2VUeXBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5leGl0Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjdXJyZW50RXhpdElkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHM6IGN1cnJlbnRFeGl0SWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhbiBleHByZXNzaW9uIGFuZCBleHRyYWN0IHN0ZXAgY2FsbHNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUV4cHJlc3Npb24oXG4gIGV4cHI6IEV4cHJlc3Npb24sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+LFxuICB2aXNpdGVkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0F3YWl0RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBhd2FpdGVkRXhwciA9IGV4cHIuYXJndW1lbnQ7XG4gICAgaWYgKGF3YWl0ZWRFeHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbnN0IGNhbGxFeHByID0gYXdhaXRlZEV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgIC8vIENoZWNrIGZvciBQcm9taXNlLmFsbC9yYWNlL2FsbFNldHRsZWQvYW55XG4gICAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCBtZW1iZXIgPSBjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgKG1lbWJlci5vYmplY3QgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdQcm9taXNlJyAmJlxuICAgICAgICAgIG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWV0aG9kID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICBpZiAoWydhbGwnLCAncmFjZScsICdhbGxTZXR0bGVkJywgJ2FueSddLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsSWQgPSBgcGFyYWxsZWxfJHtjb250ZXh0LnBhcmFsbGVsQ291bnRlcisrfWA7XG5cbiAgICAgICAgICAgIGlmIChjYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBhcmcgPSBjYWxsRXhwci5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgaWYgKGFyZy50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcmcuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Py5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1SZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZWxlbVJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxHcm91cElkID0gcGFyYWxsZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLmVsZW1SZXN1bHQubm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICBlZGdlcy5wdXNoKC4uLmVsZW1SZXN1bHQuZWRnZXMpO1xuICAgICAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5lbGVtUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uZWxlbVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGFyZy50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgICAgICBjb250ZXh0LnByb21pc2VBcnJheXMuaGFzKChhcmcgYXMgSWRlbnRpZmllcikudmFsdWUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBQcm9taXNlLmFsbCh2YXJpYWJsZU5hbWUpIHdoZXJlIHZhcmlhYmxlIHdhcyBidWlsdCB2aWEgcHVzaCgpXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlOYW1lID0gKGFyZyBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja2VkTm9kZXMgPSBjb250ZXh0LnByb21pc2VBcnJheXMuZ2V0KGFycmF5TmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgcGFyYWxsZWxHcm91cElkIHRvIGFsbCBub2RlcyB0aGF0IHdlcmUgcHVzaGVkIHRvIHRoaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tlZE5vZGVzICYmIHRyYWNrZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRyYWNrZWROb2RlIG9mIHRyYWNrZWROb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYWNrZWROb2RlLm1ldGFkYXRhKSB0cmFja2VkTm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5wYXJhbGxlbEdyb3VwSWQgPSBwYXJhbGxlbElkO1xuICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5wYXJhbGxlbE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhY2tlZE5vZGUubWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRyYWNrZWQgbm9kZSBJRHMgZm9yIHByb3BlciBlZGdlIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKHRyYWNrZWROb2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCh0cmFja2VkTm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBub24tYXJyYXkgYXJndW1lbnRzIGxpa2UgYXJyYXkubWFwKHN0ZXBGbilcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGFyZ1Jlc3VsdC5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsR3JvdXBJZCA9IHBhcmFsbGVsSWQ7XG4gICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaCguLi5hcmdSZXN1bHQubm9kZXMpO1xuICAgICAgICAgICAgICAgIGVkZ2VzLnB1c2goLi4uYXJnUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5hcmdSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmFyZ1Jlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ3VsYXIgY2FsbCAtIGNoZWNrIGlmIGl0J3MgYSBzdGVwLCB3b3JrZmxvdyBwcmltaXRpdmUsIG9yIGhlbHBlciBmdW5jdGlvblxuICAgICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgY29uc3QgZnVuY05hbWUgPSAoY2FsbEV4cHIuY2FsbGVlIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGZ1bmNOYW1lKTtcblxuICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGFiZWw6IGdldE9yaWdpbmFsU3RlcE5hbWUoc3RlcEluZm8uc3RlcElkLCBmdW5jTmFtZSksXG4gICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKFdPUktGTE9XX1BSSU1JVElWRVMuaGFzKGZ1bmNOYW1lKSkge1xuICAgICAgICAgIC8vIEhhbmRsZSB3b3JrZmxvdyBwcmltaXRpdmVzIGxpa2Ugc2xlZXBcbiAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgIHR5cGU6ICdwcmltaXRpdmUnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICAgICAgICAgIG5vZGVLaW5kOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2l0aXZlUmVzdWx0ID0gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICAgICAgICAgICAgZnVuY05hbWUsXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBhbmFseXplIHRoZSBhcmd1bWVudHMgb2YgYXdhaXRlZCBjYWxscyBmb3Igc3RlcCByZWZlcmVuY2VzIGluIG9iamVjdHNcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIGNhbGxFeHByLmFyZ3VtZW50cykge1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGFyZy5leHByZXNzaW9uLFxuICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXdhaXQgb24gYSB3ZWJob29rL2hvb2sgdmFyaWFibGU6IGF3YWl0IHdlYmhvb2tcbiAgICBpZiAoYXdhaXRlZEV4cHIudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB2YXJOYW1lID0gKGF3YWl0ZWRFeHByIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQud2ViaG9va1ZhcmlhYmxlcy5oYXModmFyTmFtZSkpIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGFiZWw6ICdhd2FpdFdlYmhvb2snLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICdwcmltaXRpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vbi1hd2FpdGVkIGNhbGwgZXhwcmVzc2lvblxuICBpZiAoZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgY2FsbEV4cHIgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCBmdW5jTmFtZSA9IChjYWxsRXhwci5jYWxsZWUgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGZ1bmNOYW1lKTtcblxuICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAoV09SS0ZMT1dfUFJJTUlUSVZFUy5oYXMoZnVuY05hbWUpKSB7XG4gICAgICAgIC8vIEhhbmRsZSBub24tYXdhaXRlZCB3b3JrZmxvdyBwcmltaXRpdmVzIGxpa2UgY3JlYXRlSG9vaywgY3JlYXRlV2ViaG9va1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICAgICAgICBub2RlS2luZDogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0cmFuc2l0aXZlUmVzdWx0ID0gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICAgICAgICAgIGZ1bmNOYW1lLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBmb3Igc3RlcCByZWZlcmVuY2VzIGluIG9iamVjdCBsaXRlcmFsc1xuICBpZiAoZXhwci50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCByZWZSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICBleHByLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICAnJ1xuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gIH1cblxuICAvLyBDaGVjayBmb3Igc3RlcCByZWZlcmVuY2VzIGFuZCBzdGVwIGNhbGxzIGluIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzXG4gIC8vIFNraXAgZm9yIGFycmF5IG1ldGhvZHMgKG1hcCwgZm9yRWFjaCwgZXRjLikgd2hpY2ggaGF2ZSBhIHNwZWNpYWxpemVkIGhhbmRsZXIgYmVsb3dcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGNhbGxFeHByID0gZXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJyYXkgbWV0aG9kIGNhbGwgLSBpZiBzbywgc2tpcCB0aGUgZ2VuZXJpYyBoYW5kbGVyXG4gICAgLy8gYW5kIGxldCB0aGUgc3BlY2lhbGl6ZWQgaGFuZGxlciBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGl0XG4gICAgY29uc3QgaXNBcnJheU1ldGhvZENhbGwgPVxuICAgICAgY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgIFsnbWFwJywgJ2ZvckVhY2gnLCAnZmlsdGVyJywgJ2ZpbmQnLCAnc29tZScsICdldmVyeScsICdmbGF0TWFwJ10uaW5jbHVkZXMoXG4gICAgICAgICgoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlXG4gICAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIC5wdXNoKCkgY2FsbCBvbiBhIHRyYWNrZWQgcHJvbWlzZSBhcnJheVxuICAgIC8vIFBhdHRlcm46IHByb21pc2VzLnB1c2goc3RlcENhbGwoKSlcbiAgICBsZXQgcHVzaEFycmF5TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgKChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWUgPT09XG4gICAgICAgICdwdXNoJ1xuICAgICkge1xuICAgICAgY29uc3Qgb2JqTmFtZSA9IChcbiAgICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5vYmplY3QgYXMgSWRlbnRpZmllclxuICAgICAgKS52YWx1ZTtcbiAgICAgIGlmIChjb250ZXh0LnByb21pc2VBcnJheXMuaGFzKG9iak5hbWUpKSB7XG4gICAgICAgIHB1c2hBcnJheU5hbWUgPSBvYmpOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGNhbGxFeHByLmFyZ3VtZW50cykge1xuICAgICAgaWYgKGFyZy5leHByZXNzaW9uKSB7XG4gICAgICAgIC8vIEZvciBhcnJheSBtZXRob2QgY2FsbHMsIHNraXAgc3RlcCBpZGVudGlmaWVyIGRldGVjdGlvbiBoZXJlXG4gICAgICAgIC8vIHNpbmNlIHdlIGhhdmUgYSBzcGVjaWFsaXplZCBoYW5kbGVyIGZvciB0aG9zZVxuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ0lkZW50aWZpZXInICYmICFpc0FycmF5TWV0aG9kQ2FsbCkge1xuICAgICAgICAgIGNvbnN0IGFyZ05hbWUgPSAoYXJnLmV4cHJlc3Npb24gYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChhcmdOYW1lKTtcbiAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgYXJnTmFtZSl9IChyZWYpYCxcbiAgICAgICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIGlzU3RlcFJlZmVyZW5jZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiAnZnVuY3Rpb24gYXJndW1lbnQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgc3RlcCBjYWxscyBwYXNzZWQgYXMgYXJndW1lbnRzIChlLmcuLCBwcm9taXNlcy5wdXNoKHN0ZXBDYWxsKCkpKVxuICAgICAgICAvLyBOb3RlOiBEb24ndCBhZGQgbG9vcElkIGhlcmUgLSB0aGVzZSBhcmUgbm9uLWF3YWl0ZWQgY2FsbHMgYmVpbmcgY29sbGVjdGVkXG4gICAgICAgIC8vIGZvciBwYXJhbGxlbCBleGVjdXRpb24gKGxpa2UgUHJvbWlzZS5hbGwpLCBub3QgdHJ1bHkgbG9vcGluZyBjYWxsc1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IGFyZ0NhbGxFeHByID0gYXJnLmV4cHJlc3Npb24gYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgaWYgKGFyZ0NhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKGFyZ0NhbGxFeHByLmNhbGxlZSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuICAgICAgICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIGxvb3BJZCAtIHRoaXMgaXMgYSBub24tYXdhaXRlZCBjYWxsLCBsaWtlbHkgYmVpbmdcbiAgICAgICAgICAgICAgLy8gY29sbGVjdGVkIGZvciBwYXJhbGxlbCBleGVjdXRpb24gKFByb21pc2UuYWxsIHBhdHRlcm4pXG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBwdXNoZWQgdG8gYSB0cmFja2VkIHByb21pc2UgYXJyYXksIHN0b3JlIHRoZSBub2RlXG4gICAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBhcHBseSBwYXJhbGxlbEdyb3VwSWQgd2hlbiBQcm9taXNlLmFsbCBpcyByZWFjaGVkXG4gICAgICAgICAgICAgIGlmIChwdXNoQXJyYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tlZE5vZGVzID0gY29udGV4dC5wcm9taXNlQXJyYXlzLmdldChwdXNoQXJyYXlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gJ25ldycgZXhwcmVzc2lvbnNcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ05ld0V4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgbmV3RXhwciA9IGV4cHIgYXMgYW55O1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIER1cmFibGVBZ2VudCBpbnN0YW50aWF0aW9uXG4gICAgY29uc3QgaXNEdXJhYmxlQWdlbnQgPVxuICAgICAgbmV3RXhwci5jYWxsZWU/LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgbmV3RXhwci5jYWxsZWU/LnZhbHVlID09PSAnRHVyYWJsZUFnZW50JztcblxuICAgIGlmIChpc0R1cmFibGVBZ2VudCAmJiBuZXdFeHByLmFyZ3VtZW50cz8ubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ3JlYXRlIGEgbm9kZSBmb3IgdGhlIER1cmFibGVBZ2VudCBpdHNlbGZcbiAgICAgIGNvbnN0IGFnZW50Tm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgIGNvbnN0IGFnZW50Tm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICBpZDogYWdlbnROb2RlSWQsXG4gICAgICAgIHR5cGU6ICdhZ2VudCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYWJlbDogJ0R1cmFibGVBZ2VudCcsXG4gICAgICAgICAgbm9kZUtpbmQ6ICdhZ2VudCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6ICdEdXJhYmxlQWdlbnQnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG5vZGVzLnB1c2goYWdlbnROb2RlKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKGFnZW50Tm9kZUlkKTtcblxuICAgICAgLy8gTG9vayBmb3IgdG9vbHMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgIGNvbnN0IG9wdGlvbnNBcmcgPSBuZXdFeHByLmFyZ3VtZW50c1swXT8uZXhwcmVzc2lvbjtcbiAgICAgIGlmIChvcHRpb25zQXJnPy50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgY29uc3QgdG9vbHNSZXN1bHQgPSBhbmFseXplRHVyYWJsZUFnZW50VG9vbHMoXG4gICAgICAgICAgb3B0aW9uc0FyZyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgYWdlbnROb2RlSWQsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi50b29sc1Jlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4udG9vbHNSZXN1bHQuZWRnZXMpO1xuXG4gICAgICAgIC8vIElmIHdlIGZvdW5kIHRvb2xzLCB0aGV5IGFyZSB0aGUgZXhpdCBub2Rlc1xuICAgICAgICBpZiAodG9vbHNSZXN1bHQuZXhpdE5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udG9vbHNSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKGFnZW50Tm9kZUlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld0V4cHIuYXJndW1lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBuZXdFeHByLmFyZ3VtZW50cykge1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGFyZy5leHByZXNzaW9uLFxuICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgQXNzaWdubWVudEV4cHJlc3Npb24gLSBhbmFseXplIHRoZSByaWdodC1oYW5kIHNpZGVcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGFzc2lnbkV4cHIgPSBleHByIGFzIGFueTtcbiAgICBpZiAoYXNzaWduRXhwci5yaWdodCkge1xuICAgICAgY29uc3QgcmlnaHRSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgYXNzaWduRXhwci5yaWdodCxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICApO1xuICAgICAgbm9kZXMucHVzaCguLi5yaWdodFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgTWVtYmVyRXhwcmVzc2lvbiBjYWxscyBsaWtlIGFycmF5Lm1hcChzdGVwRm4pIHdoZXJlIHN0ZXAgaXMgcGFzc2VkIGFzIGNhbGxiYWNrXG4gIGlmIChleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBjYWxsRXhwciA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1ldGhvZCBjYWxsIGxpa2UgLm1hcCgpLCAuZm9yRWFjaCgpLCAuZmlsdGVyKCkgZXRjLlxuICAgICAgaWYgKG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IChtZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnbWFwJyxcbiAgICAgICAgICAgICdmb3JFYWNoJyxcbiAgICAgICAgICAgICdmaWx0ZXInLFxuICAgICAgICAgICAgJ2ZpbmQnLFxuICAgICAgICAgICAgJ3NvbWUnLFxuICAgICAgICAgICAgJ2V2ZXJ5JyxcbiAgICAgICAgICAgICdmbGF0TWFwJyxcbiAgICAgICAgICBdLmluY2x1ZGVzKG1ldGhvZE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBhcmd1bWVudCBpcyBhIHN0ZXAgZnVuY3Rpb24gcmVmZXJlbmNlXG4gICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gKGFyZy5leHByZXNzaW9uIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGFyZ05hbWUpO1xuICAgICAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGFyZ05hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YTpcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIER1cmFibGVBZ2VudCB0b29scyBwcm9wZXJ0eSB0byBleHRyYWN0IHRvb2wgbm9kZXNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUR1cmFibGVBZ2VudFRvb2xzKFxuICBvcHRpb25zT2JqOiBhbnksXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgYWdlbnROb2RlSWQ6IHN0cmluZyxcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBjb25zdCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4aXROb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICghb3B0aW9uc09iai5wcm9wZXJ0aWVzKVxuICAgIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRvb2xzIGZyb20gYW4gT2JqZWN0RXhwcmVzc2lvblxuICBmdW5jdGlvbiBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHRvb2xzT2JqOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRvb2xQcm9wIG9mIHRvb2xzT2JqLnByb3BlcnRpZXMgfHwgW10pIHtcbiAgICAgIGlmICh0b29sUHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgdG9vbE5hbWUgPSAnJztcbiAgICAgIGlmICh0b29sUHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHRvb2xOYW1lID0gdG9vbFByb3Aua2V5LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRvb2xOYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gTG9vayBmb3IgZXhlY3V0ZSBwcm9wZXJ0eSBpbiB0aGUgdG9vbCBkZWZpbml0aW9uXG4gICAgICBpZiAodG9vbFByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5uZXJQcm9wIG9mIHRvb2xQcm9wLnZhbHVlLnByb3BlcnRpZXMgfHwgW10pIHtcbiAgICAgICAgICBpZiAoaW5uZXJQcm9wLnR5cGUgIT09ICdLZXlWYWx1ZVByb3BlcnR5JykgY29udGludWU7XG5cbiAgICAgICAgICBsZXQgaW5uZXJLZXkgPSAnJztcbiAgICAgICAgICBpZiAoaW5uZXJQcm9wLmtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGlubmVyS2V5ID0gaW5uZXJQcm9wLmtleS52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5uZXJLZXkgPT09ICdleGVjdXRlJyAmJiBpbm5lclByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwTmFtZSA9IGlubmVyUHJvcC52YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoc3RlcE5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbm9kZUtpbmQ6ICd0b29sJyxcbiAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvPy5zdGVwSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgaXNUb29sOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB0b29sTmFtZSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiBgdG9vbHMuJHt0b29sTmFtZX0uZXhlY3V0ZWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcblxuICAgICAgICAgICAgLy8gQ29ubmVjdCBhZ2VudCB0byB0aGlzIHRvb2wgd2l0aCB0b29sIGVkZ2UgdHlwZVxuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2FnZW50Tm9kZUlkfV8ke25vZGVJZH1gLFxuICAgICAgICAgICAgICBzb3VyY2U6IGFnZW50Tm9kZUlkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ3Rvb2wnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCB0aGUgJ3Rvb2xzJyBwcm9wZXJ0eVxuICBmb3IgKGNvbnN0IHByb3Agb2Ygb3B0aW9uc09iai5wcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgIGxldCBrZXlOYW1lID0gJyc7XG4gICAgaWYgKHByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAga2V5TmFtZSA9IHByb3Aua2V5LnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChrZXlOYW1lICE9PSAndG9vbHMnKSBjb250aW51ZTtcblxuICAgIC8vIEhhbmRsZSBpbmxpbmUgdG9vbHMgb2JqZWN0XG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHByb3AudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0b29scyBhcyBhIHZhcmlhYmxlIHJlZmVyZW5jZSAtIHJlc29sdmUgaXQgZnJvbSB2YXJpYWJsZU1hcFxuICAgIGlmIChwcm9wLnZhbHVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgY29uc3QgdG9vbHNWYXJOYW1lID0gcHJvcC52YWx1ZS52YWx1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlc29sdmUgdGhlIHZhcmlhYmxlIGZyb20gdGhlIHZhcmlhYmxlTWFwIChidW5kbGVkIGNvZGUpXG4gICAgICBjb25zdCByZXNvbHZlZFRvb2xzT2JqID0gdmFyaWFibGVNYXAuZ2V0KHRvb2xzVmFyTmFtZSk7XG5cbiAgICAgIGlmIChyZXNvbHZlZFRvb2xzT2JqICYmIHJlc29sdmVkVG9vbHNPYmoudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1Y2Nlc3NmdWxseSByZXNvbHZlZCAtIGV4dHJhY3QgaW5kaXZpZHVhbCB0b29sc1xuICAgICAgICBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHJlc29sdmVkVG9vbHNPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IGNyZWF0ZSBhIHBsYWNlaG9sZGVyIG5vZGUgaWYgd2UgY2FuJ3QgcmVzb2x2ZVxuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGFiZWw6IGAke3Rvb2xzVmFyTmFtZX1gLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICd0b29sJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBpc1Rvb2xzQ29sbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHRvb2xzVmFyaWFibGU6IHRvb2xzVmFyTmFtZSxcbiAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6IGB0b29sczoke3Rvb2xzVmFyTmFtZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcblxuICAgICAgICAvLyBDb25uZWN0IGFnZW50IHRvIHRvb2xzIHdpdGggdG9vbCBlZGdlIHR5cGVcbiAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBlXyR7YWdlbnROb2RlSWR9XyR7bm9kZUlkfWAsXG4gICAgICAgICAgc291cmNlOiBhZ2VudE5vZGVJZCxcbiAgICAgICAgICB0YXJnZXQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYW4gb2JqZWN0IGV4cHJlc3Npb24gZm9yIHN0ZXAgcmVmZXJlbmNlc1xuICovXG5mdW5jdGlvbiBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gIG9iajogYW55LFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIHBhdGg6IHN0cmluZ1xuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFvYmoucHJvcGVydGllcykgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIG9iai5wcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgIGxldCBrZXlOYW1lID0gJyc7XG4gICAgaWYgKHByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAga2V5TmFtZSA9IHByb3Aua2V5LnZhbHVlO1xuICAgIH0gZWxzZSBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFBhdGggPSBwYXRoID8gYCR7cGF0aH0uJHtrZXlOYW1lfWAgOiBrZXlOYW1lO1xuXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB2YWx1ZU5hbWUgPSBwcm9wLnZhbHVlLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldCh2YWx1ZU5hbWUpO1xuICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogYCR7Z2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIHZhbHVlTmFtZSl9ICh0b29sKWAsXG4gICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogY3VycmVudFBhdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wLnZhbHVlLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgbmVzdGVkUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICBwcm9wLnZhbHVlLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjdXJyZW50UGF0aFxuICAgICAgKTtcbiAgICAgIG5vZGVzLnB1c2goLi4ubmVzdGVkUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubmVzdGVkUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLm5lc3RlZFJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5uZXN0ZWRSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSB0cmFuc2l0aXZlIGZ1bmN0aW9uIGNhbGwgdG8gZmluZCBzdGVwIGNhbGxzIHdpdGhpbiBoZWxwZXIgZnVuY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVUcmFuc2l0aXZlQ2FsbChcbiAgZnVuY05hbWU6IHN0cmluZyxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT4sXG4gIHZpc2l0ZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+XG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodmlzaXRlZEZ1bmN0aW9ucy5oYXMoZnVuY05hbWUpKSB7XG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gIH1cblxuICBjb25zdCBmdW5jSW5mbyA9IGZ1bmN0aW9uTWFwLmdldChmdW5jTmFtZSk7XG4gIGlmICghZnVuY0luZm8gfHwgZnVuY0luZm8uaXNTdGVwKSB7XG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gIH1cblxuICB2aXNpdGVkRnVuY3Rpb25zLmFkZChmdW5jTmFtZSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZnVuY0luZm8uYm9keSkge1xuICAgICAgaWYgKGZ1bmNJbmZvLmJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgICBjb25zdCBib2R5UmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgICAgIGZ1bmNJbmZvLmJvZHkuc3RtdHMsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4uYm9keVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uYm9keVJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmJvZHlSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5ib2R5UmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV4cHJSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICBmdW5jSW5mby5ib2R5LFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4uZXhwclJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uZXhwclJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmV4cHJSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5leHByUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdmlzaXRlZEZ1bmN0aW9ucy5kZWxldGUoZnVuY05hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG4iXX0=
1481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLWV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvd3MtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFnQjtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFlBQVk7WUFDZixPQUFRLElBQW1CLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sTUFBTSxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLE1BQU0sQ0FBRSxJQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sSUFBSyxJQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFcEMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7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QUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUge1xuICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbixcbiAgQmxvY2tTdGF0ZW1lbnQsXG4gIENhbGxFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uLFxuICBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBGdW5jdGlvbkV4cHJlc3Npb24sXG4gIElkZW50aWZpZXIsXG4gIE1lbWJlckV4cHJlc3Npb24sXG4gIFByb2dyYW0sXG4gIFN0YXRlbWVudCxcbiAgVmFyaWFibGVEZWNsYXJhdGlvbixcbn0gZnJvbSAnQHN3Yy9jb3JlJztcbmltcG9ydCB7IHBhcnNlU3luYyB9IGZyb20gJ0Bzd2MvY29yZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnN0YW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFdvcmtmbG93IHByaW1pdGl2ZXMgdGhhdCBzaG91bGQgYmUgc2hvd24gYXMgbm9kZXMgaW4gdGhlIGdyYXBoLlxuICogVGhlc2UgYXJlIGJ1aWx0LWluIHdvcmtmbG93IGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCBtZWFuaW5nZnVsXG4gKiBwYXVzZXMgb3Igd2FpdCBwb2ludHMgaW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAqL1xuY29uc3QgV09SS0ZMT1dfUFJJTUlUSVZFUyA9IG5ldyBTZXQoWydzbGVlcCcsICdjcmVhdGVIb29rJywgJ2NyZWF0ZVdlYmhvb2snXSk7XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc3RlcElkLlxuICogc3RlcElkIGZvcm1hdDogXCJzdGVwLy9wYXRoL3RvL2ZpbGUudHMvL2Z1bmN0aW9uTmFtZVwiXG4gKiBUaGUgYnVuZGxlciBtYXkgcmVuYW1lIGZ1bmN0aW9ucyB0byBhdm9pZCBjb2xsaXNpb25zIChlLmcuIGFkZCAtPiBhZGQyKSxcbiAqIGJ1dCB0aGUgc3RlcElkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE9yaWdpbmFsU3RlcE5hbWUoc3RlcElkOiBzdHJpbmcsIGZhbGxiYWNrTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBzdGVwSWQuc3BsaXQoJy8vJyk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMl0gOiBmYWxsYmFja05hbWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIHJlYWRhYmxlIGNvbmRpdGlvbiB0ZXh0IGZyb20gYW4gRXhwcmVzc2lvbiBBU1Qgbm9kZS5cbiAqIFJlY3Vyc2l2ZWx5IGJ1aWxkcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uZGl0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDb25kaXRpb25UZXh0KGV4cHI6IEV4cHJlc3Npb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIChleHByIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuXG4gICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgcmV0dXJuIFN0cmluZygoZXhwciBhcyBhbnkpLnZhbHVlKTtcblxuICAgIGNhc2UgJ051bWVyaWNMaXRlcmFsJzpcbiAgICAgIHJldHVybiBTdHJpbmcoKGV4cHIgYXMgYW55KS52YWx1ZSk7XG5cbiAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzpcbiAgICAgIHJldHVybiBgXCIkeyhleHByIGFzIGFueSkudmFsdWV9XCJgO1xuXG4gICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IGJpbiA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgbGVmdCA9IGdldENvbmRpdGlvblRleHQoYmluLmxlZnQpO1xuICAgICAgY29uc3QgcmlnaHQgPSBnZXRDb25kaXRpb25UZXh0KGJpbi5yaWdodCk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHtiaW4ub3BlcmF0b3J9ICR7cmlnaHR9YDtcbiAgICB9XG5cbiAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCB1bmFyeSA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgYXJnID0gZ2V0Q29uZGl0aW9uVGV4dCh1bmFyeS5hcmd1bWVudCk7XG4gICAgICByZXR1cm4gYCR7dW5hcnkub3BlcmF0b3J9JHthcmd9YDtcbiAgICB9XG5cbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgbWVtYmVyID0gZXhwciBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgY29uc3Qgb2JqID0gZ2V0Q29uZGl0aW9uVGV4dChtZW1iZXIub2JqZWN0KTtcbiAgICAgIGlmIChtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHJldHVybiBgJHtvYmp9LiR7KG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZX1gO1xuICAgICAgfVxuICAgICAgaWYgKG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnQ29tcHV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBhbnkpLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBgJHtvYmp9WyR7Z2V0Q29uZGl0aW9uVGV4dChjb21wdXRlZCl9XWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNhc2UgJ0NhbGxFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgY2FsbCA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZTtcbiAgICAgIC8vIEhhbmRsZSBjYWxsZWUgd2hpY2ggY291bGQgYmUgRXhwcmVzc2lvbiwgU3VwZXIsIG9yIEltcG9ydFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAnU3VwZXInIHx8IGNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICByZXR1cm4gYCR7Y2FsbGVlLnR5cGUudG9Mb3dlckNhc2UoKX0oKWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7Z2V0Q29uZGl0aW9uVGV4dChjYWxsZWUgYXMgRXhwcmVzc2lvbil9KClgO1xuICAgIH1cblxuICAgIGNhc2UgJ1BhcmVudGhlc2lzRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IHBhcmVuID0gZXhwciBhcyBhbnk7XG4gICAgICByZXR1cm4gYCgke2dldENvbmRpdGlvblRleHQocGFyZW4uZXhwcmVzc2lvbil9KWA7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnY29uZGl0aW9uJztcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbnRlcm5hbCBUeXBlcyAodXNlZCBkdXJpbmcgZXh0cmFjdGlvbiBvbmx5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgRnVuY3Rpb25JbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBib2R5OiBCbG9ja1N0YXRlbWVudCB8IEV4cHJlc3Npb24gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBpc1N0ZXA6IGJvb2xlYW47XG4gIHN0ZXBJZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzQ29udGV4dCB7XG4gIHBhcmFsbGVsQ291bnRlcjogbnVtYmVyO1xuICBsb29wQ291bnRlcjogbnVtYmVyO1xuICBjb25kaXRpb25hbENvdW50ZXI6IG51bWJlcjtcbiAgbm9kZUNvdW50ZXI6IG51bWJlcjtcbiAgaW5Mb29wOiBzdHJpbmcgfCBudWxsO1xuICBpbkNvbmRpdGlvbmFsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVHJhY2tzIHZhcmlhYmxlcyBhc3NpZ25lZCBmcm9tIGNyZWF0ZVdlYmhvb2soKSBvciBjcmVhdGVIb29rKCkgKi9cbiAgd2ViaG9va1ZhcmlhYmxlczogU2V0PHN0cmluZz47XG4gIC8qKiBUcmFja3MgYXJyYXkgdmFyaWFibGVzIHRoYXQgaGF2ZSBzdGVwIGNhbGxzIHB1c2hlZCBpbnRvIHRoZW0gKGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuKSAqL1xuICBwcm9taXNlQXJyYXlzOiBNYXA8c3RyaW5nLCBNYW5pZmVzdE5vZGVbXT47IC8vIGFycmF5TmFtZSAtPiBsaXN0IG9mIG5vZGVzXG59XG5cbmludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIG5vZGVzOiBNYW5pZmVzdE5vZGVbXTtcbiAgZWRnZXM6IE1hbmlmZXN0RWRnZVtdO1xuICBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdO1xuICBleGl0Tm9kZUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTm9kZSBtZXRhZGF0YSBmb3IgY29udHJvbCBmbG93IHNlbWFudGljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVNZXRhZGF0YSB7XG4gIGxvb3BJZD86IHN0cmluZztcbiAgbG9vcElzQXdhaXQ/OiBib29sZWFuO1xuICBjb25kaXRpb25hbElkPzogc3RyaW5nO1xuICBjb25kaXRpb25hbEJyYW5jaD86ICdUaGVuJyB8ICdFbHNlJztcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBwYXJhbGxlbE1ldGhvZD86IHN0cmluZztcbiAgLyoqIFN0ZXAgaXMgcGFzc2VkIGFzIGEgcmVmZXJlbmNlIChjYWxsYmFjay90b29sKSByYXRoZXIgdGhhbiBkaXJlY3RseSBjYWxsZWQgKi9cbiAgaXNTdGVwUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIENvbnRleHQgd2hlcmUgdGhlIHN0ZXAgcmVmZXJlbmNlIHdhcyBmb3VuZCAoZS5nLiwgXCJ0b29scy5nZXRXZWF0aGVyLmV4ZWN1dGVcIikgKi9cbiAgcmVmZXJlbmNlQ29udGV4dD86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSBpcyBhIHRvb2wgc3RlcCBjb25uZWN0ZWQgdG8gYSBEdXJhYmxlQWdlbnQgKi9cbiAgaXNUb29sPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSB0b29sIChrZXkgaW4gdG9vbHMgb2JqZWN0KSAqL1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0b29scyAoaW1wb3J0ZWQgdmFyaWFibGUpICovXG4gIGlzVG9vbHNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB0b29scyBjb2xsZWN0aW9uICovXG4gIHRvb2xzVmFyaWFibGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR3JhcGggbm9kZSBmb3Igd29ya2Zsb3cgdmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbm9kZUtpbmQ6IHN0cmluZztcbiAgICBzdGVwSWQ/OiBzdHJpbmc7XG4gIH07XG4gIG1ldGFkYXRhPzogTm9kZU1ldGFkYXRhO1xufVxuXG4vKipcbiAqIEdyYXBoIGVkZ2UgZm9yIHdvcmtmbG93IGNvbnRyb2wgZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0RWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgdHlwZTogJ2RlZmF1bHQnIHwgJ2xvb3AnIHwgJ2NvbmRpdGlvbmFsJyB8ICdwYXJhbGxlbCcgfCAndG9vbCc7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoIGRhdGEgZm9yIGEgc2luZ2xlIHdvcmtmbG93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dHcmFwaERhdGEge1xuICBub2RlczogTWFuaWZlc3ROb2RlW107XG4gIGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXTtcbn1cblxuLyoqXG4gKiBTdGVwIGVudHJ5IGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0U3RlcEVudHJ5IHtcbiAgc3RlcElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZW50cnkgaW4gdGhlIG1hbmlmZXN0IChpbmNsdWRlcyBncmFwaCBkYXRhKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0V29ya2Zsb3dFbnRyeSB7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgZ3JhcGg6IFdvcmtmbG93R3JhcGhEYXRhO1xufVxuXG4vKipcbiAqIE1hbmlmZXN0IHN0cnVjdHVyZSAtIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCB3b3JrZmxvdyBtZXRhZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBzdGVwczoge1xuICAgIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgICAgW3N0ZXBOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFN0ZXBFbnRyeTtcbiAgICB9O1xuICB9O1xuICB3b3JrZmxvd3M6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXh0cmFjdGlvbiBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRXh0cmFjdHMgd29ya2Zsb3cgZ3JhcGhzIGZyb20gYSBidW5kbGVkIHdvcmtmbG93IGZpbGUuXG4gKiBSZXR1cm5zIHdvcmtmbG93IGVudHJpZXMgb3JnYW5pemVkIGJ5IGZpbGUgcGF0aCwgcmVhZHkgZm9yIG1lcmdpbmcgaW50byBNYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0dyYXBocyhidW5kbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgW3dvcmtmbG93TmFtZTogc3RyaW5nXTogTWFuaWZlc3RXb3JrZmxvd0VudHJ5O1xuICB9O1xufT4ge1xuICBjb25zdCBidW5kbGVDb2RlID0gYXdhaXQgcmVhZEZpbGUoYnVuZGxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgYWN0dWFsV29ya2Zsb3dDb2RlID0gYnVuZGxlQ29kZTtcblxuICAgIGNvbnN0IGJ1bmRsZUFzdCA9IHBhcnNlU3luYyhidW5kbGVDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrZmxvd0NvZGVWYWx1ZSA9IGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGJ1bmRsZUFzdCk7XG4gICAgaWYgKHdvcmtmbG93Q29kZVZhbHVlKSB7XG4gICAgICBhY3R1YWxXb3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGVWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3QgPSBwYXJzZVN5bmMoYWN0dWFsV29ya2Zsb3dDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gZXh0cmFjdFN0ZXBEZWNsYXJhdGlvbnMoYWN0dWFsV29ya2Zsb3dDb2RlKTtcbiAgICBjb25zdCBmdW5jdGlvbk1hcCA9IGJ1aWxkRnVuY3Rpb25NYXAoYXN0LCBzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBjb25zdCB2YXJpYWJsZU1hcCA9IGJ1aWxkVmFyaWFibGVNYXAoYXN0KTtcblxuICAgIHJldHVybiBleHRyYWN0V29ya2Zsb3dzKGFzdCwgc3RlcERlY2xhcmF0aW9ucywgZnVuY3Rpb25NYXAsIHZhcmlhYmxlTWFwKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZXh0cmFjdCB3b3JrZmxvdyBncmFwaHMgZnJvbSBidW5kbGU6JywgZXJyb3IpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHdvcmtmbG93Q29kZSBzdHJpbmcgdmFsdWUgZnJvbSBhIHBhcnNlZCBidW5kbGUgQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGFzdDogUHJvZ3JhbSk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBpdGVtLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnZhbHVlID09PSAnd29ya2Zsb3dDb2RlJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjbC5pbml0LnF1YXNpc1xuICAgICAgICAgICAgICAubWFwKChxKSA9PiBkZWNvZGVFc2NhcGVkV29ya2Zsb3dDb2RlKHEucmF3KSlcbiAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2wuaW5pdC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUVzY2FwZWRXb3JrZmxvd0NvZGUocmF3VGVtcGxhdGVFbGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3VGVtcGxhdGVFbGVtZW50LnJlcGxhY2UoL1xcXFwoW1xcXFxgJF0pL2csICckMScpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgc3RlcCBkZWNsYXJhdGlvbnMgdXNpbmcgcmVnZXggZm9yIHNwZWVkXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdGVwRGVjbGFyYXRpb25zKFxuICBidW5kbGVDb2RlOiBzdHJpbmdcbik6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4oKTtcblxuICBjb25zdCBzdGVwUGF0dGVybiA9XG4gICAgL3ZhciAoXFx3KykgPSBnbG9iYWxUaGlzXFxbU3ltYm9sXFwuZm9yXFwoXCJXT1JLRkxPV19VU0VfU1RFUFwiXFwpXFxdXFwoXCIoW15cIl0rKVwiXFwpL2c7XG5cbiAgY29uc3QgbGluZXMgPSBidW5kbGVDb2RlLnNwbGl0KCdcXG4nKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgc3RlcFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBjb25zdCBtYXRjaCA9IHN0ZXBQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBbLCB2YXJOYW1lLCBzdGVwSWRdID0gbWF0Y2g7XG4gICAgICBzdGVwRGVjbGFyYXRpb25zLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcERlY2xhcmF0aW9ucztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGJvZHkuXG4gKiBUaGVzZSBhcmUgc3RlcHMgZGVmaW5lZCBhcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uXG4gKiBQYXR0ZXJuOiB2YXIvY29uc3QgdmFyTmFtZSA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKVxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5saW5lU3RlcERlY2xhcmF0aW9ucyhcbiAgc3RtdHM6IFN0YXRlbWVudFtdXG4pOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+IHtcbiAgY29uc3QgaW5saW5lU3RlcHMgPSBuZXcgTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PigpO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGlmIChzdG10LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IHN0bXQgYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQ/LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY2FsbEV4cHIgPSBkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKSBwYXR0ZXJuXG4gICAgICAgICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb2JqZWN0IGlzIGdsb2JhbFRoaXNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgICAgKG1lbWJlci5vYmplY3QgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdnbG9iYWxUaGlzJyAmJlxuICAgICAgICAgICAgICBtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0NvbXB1dGVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBtZW1iZXIgYWNjZXNzIGdsb2JhbFRoaXNbU3ltYm9sLmZvciguLi4pXSxcbiAgICAgICAgICAgICAgLy8gdGhlIHByb3BlcnR5IGlzIGEgQ29tcHV0ZWQgdHlwZSBjb250YWluaW5nIHRoZSBleHByZXNzaW9uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkRXhwciA9IChtZW1iZXIucHJvcGVydHkgYXMgYW55KS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoY29tcHV0ZWRFeHByPy50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sQ2FsbCA9IGNvbXB1dGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIFN5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKVxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xDYWxsLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbE1lbWJlciA9IHN5bWJvbENhbGwuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbE1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIub2JqZWN0IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnU3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xNZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdmb3InICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbi50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpLnZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdXT1JLRkxPV19VU0VfU1RFUCdcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBzdGVwSWQgZnJvbSB0aGUgb3V0ZXIgY2FsbCBhcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHIuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IChjYWxsRXhwci5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0ZXBzLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmxpbmVTdGVwcztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiBhbGwgZnVuY3Rpb25zIGluIHRoZSBidW5kbGUgZm9yIHRyYW5zaXRpdmUgc3RlcCByZXNvbHV0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25NYXAoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PlxuKTogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPiB7XG4gIGNvbnN0IGZ1bmN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSBpdGVtIGFzIEZ1bmN0aW9uRGVjbGFyYXRpb247XG4gICAgICBpZiAoZnVuYy5pZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzU3RlcCA9IHN0ZXBEZWNsYXJhdGlvbnMuaGFzKG5hbWUpO1xuICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgYm9keTogZnVuYy5ib2R5LFxuICAgICAgICAgIGlzU3RlcCxcbiAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IGl0ZW0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiYgZGVjbC5pbml0KSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRlY2wuaWQudmFsdWU7XG4gICAgICAgICAgY29uc3QgaXNTdGVwID0gc3RlcERlY2xhcmF0aW9ucy5oYXMobmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jRXhwciA9IGRlY2wuaW5pdCBhcyBGdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBib2R5OiBmdW5jRXhwci5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycm93RnVuYyA9IGRlY2wuaW5pdCBhcyBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGZ1bmN0aW9uTWFwLnNldChuYW1lLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGJvZHk6IGFycm93RnVuYy5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbk1hcDtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAob2JqZWN0cykgZm9yIHRvb2wgcmVzb2x1dGlvblxuICogVGhpcyBhbGxvd3MgdXMgdG8gcmVzb2x2ZSB0b29scyBvYmplY3RzIHRvIHRoZSBhY3R1YWwgdG9vbHMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVmFyaWFibGVNYXAoYXN0OiBQcm9ncmFtKTogTWFwPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHZhcmlhYmxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBpdGVtIGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdD8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHZhcmlhYmxlTWFwLnNldChkZWNsLmlkLnZhbHVlLCBkZWNsLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlTWFwO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgd29ya2Zsb3dzIGZyb20gQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd3MoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiB7XG4gIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgfTtcbn0ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gaXRlbSBhcyBGdW5jdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKCFmdW5jLmlkZW50aWZpZXIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICBjb25zdCB3b3JrZmxvd0lkID0gZmluZFdvcmtmbG93SWQoYXN0LCB3b3JrZmxvd05hbWUpO1xuICAgICAgaWYgKCF3b3JrZmxvd0lkKSBjb250aW51ZTtcblxuICAgICAgLy8gRXh0cmFjdCBmaWxlIHBhdGggYW5kIGFjdHVhbCB3b3JrZmxvdyBuYW1lIGZyb20gd29ya2Zsb3dJZDogXCJ3b3JrZmxvdy8vcGF0aC90by9maWxlLnRzLy9mdW5jdGlvbk5hbWVcIlxuICAgICAgLy8gVGhlIGJ1bmRsZXIgbWF5IHJlbmFtZSBmdW5jdGlvbnMgdG8gYXZvaWQgY29sbGlzaW9ucyAoZS5nLiBhZGRUZW5Xb3JrZmxvdyAtPiBhZGRUZW5Xb3JrZmxvdzIpLFxuICAgICAgLy8gYnV0IHRoZSB3b3JrZmxvd0lkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gICAgICBjb25zdCBwYXJ0cyA9IHdvcmtmbG93SWQuc3BsaXQoJy8vJyk7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGFjdHVhbFdvcmtmbG93TmFtZSA9IHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0c1syXSA6IHdvcmtmbG93TmFtZTtcblxuICAgICAgY29uc3QgZ3JhcGggPSBhbmFseXplV29ya2Zsb3dGdW5jdGlvbihcbiAgICAgICAgZnVuYyxcbiAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzdWx0W2ZpbGVQYXRoXSkge1xuICAgICAgICByZXN1bHRbZmlsZVBhdGhdID0ge307XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtmaWxlUGF0aF1bYWN0dWFsV29ya2Zsb3dOYW1lXSA9IHtcbiAgICAgICAgd29ya2Zsb3dJZCxcbiAgICAgICAgZ3JhcGgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRmluZCB3b3JrZmxvd0lkIGFzc2lnbm1lbnQgZm9yIGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmluZFdvcmtmbG93SWQoYXN0OiBQcm9ncmFtLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGV4cHIgPSBpdGVtLmV4cHJlc3Npb247XG4gICAgICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBleHByLmxlZnQ7XG4gICAgICAgIGlmIChsZWZ0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGxlZnQub2JqZWN0O1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBsZWZ0LnByb3BlcnR5O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgIG9iai52YWx1ZSA9PT0gZnVuY3Rpb25OYW1lICYmXG4gICAgICAgICAgICBwcm9wLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgcHJvcC52YWx1ZSA9PT0gJ3dvcmtmbG93SWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGV4cHIucmlnaHQ7XG4gICAgICAgICAgICBpZiAocmlnaHQudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgIHJldHVybiByaWdodC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGFuZCBidWlsZCBpdHMgZ3JhcGhcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVdvcmtmbG93RnVuY3Rpb24oXG4gIGZ1bmM6IEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIHdvcmtmbG93TmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IFdvcmtmbG93R3JhcGhEYXRhIHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuXG4gIC8vIEFkZCBzdGFydCBub2RlXG4gIG5vZGVzLnB1c2goe1xuICAgIGlkOiAnc3RhcnQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd1N0YXJ0JyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbDogYFN0YXJ0OiAke3dvcmtmbG93TmFtZX1gLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19zdGFydCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGV4dDogQW5hbHlzaXNDb250ZXh0ID0ge1xuICAgIHBhcmFsbGVsQ291bnRlcjogMCxcbiAgICBsb29wQ291bnRlcjogMCxcbiAgICBjb25kaXRpb25hbENvdW50ZXI6IDAsXG4gICAgbm9kZUNvdW50ZXI6IDAsXG4gICAgaW5Mb29wOiBudWxsLFxuICAgIGluQ29uZGl0aW9uYWw6IG51bGwsXG4gICAgd2ViaG9va1ZhcmlhYmxlczogbmV3IFNldCgpLFxuICAgIHByb21pc2VBcnJheXM6IG5ldyBNYXAoKSxcbiAgfTtcblxuICBsZXQgcHJldkV4aXRJZHMgPSBbJ3N0YXJ0J107XG5cbiAgaWYgKGZ1bmMuYm9keT8uc3RtdHMpIHtcbiAgICAvLyBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHRoZSB3b3JrZmxvdyBib2R5XG4gICAgLy8gVGhlc2UgYXJlIHN0ZXBzIGRlZmluZWQgYXMgdmFyaWFibGVzIGluc2lkZSB0aGUgd29ya2Zsb3cgZnVuY3Rpb25cbiAgICBjb25zdCBpbmxpbmVTdGVwcyA9IGV4dHJhY3RJbmxpbmVTdGVwRGVjbGFyYXRpb25zKGZ1bmMuYm9keS5zdG10cyk7XG5cbiAgICAvLyBNZXJnZSBpbmxpbmUgc3RlcHMgd2l0aCBnbG9iYWwgc3RlcCBkZWNsYXJhdGlvbnNcbiAgICBjb25zdCBtZXJnZWRTdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcChzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBpbmZvXSBvZiBpbmxpbmVTdGVwcykge1xuICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucy5zZXQobmFtZSwgaW5mbyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdG10IG9mIGZ1bmMuYm9keS5zdG10cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZVN0YXRlbWVudChcbiAgICAgICAgc3RtdCxcbiAgICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgY29uc3QgZWRnZUlkID0gYGVfJHtwcmV2SWR9XyR7ZW50cnlJZH1gO1xuICAgICAgICAgIGlmICghZWRnZXMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZWRnZUlkKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHJlc3VsdC5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBlbnRyeUlkKTtcbiAgICAgICAgICAgIC8vIE9ubHkgdXNlICdwYXJhbGxlbCcgdHlwZSBmb3IgcGFyYWxsZWwgZ3JvdXAgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgY29ubmVjdGlvbnMgKGluY2x1ZGluZyB0by9mcm9tIGxvb3BzKSBzaG91bGQgYmUgJ2RlZmF1bHQnXG4gICAgICAgICAgICBjb25zdCBlZGdlVHlwZSA9IHRhcmdldE5vZGU/Lm1ldGFkYXRhPy5wYXJhbGxlbEdyb3VwSWRcbiAgICAgICAgICAgICAgPyAncGFyYWxsZWwnXG4gICAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBlZGdlSWQsXG4gICAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgIHR5cGU6IGVkZ2VUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuZXhpdE5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2RXhpdElkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZW5kIG5vZGVcbiAgbm9kZXMucHVzaCh7XG4gICAgaWQ6ICdlbmQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd0VuZCcsXG4gICAgZGF0YToge1xuICAgICAgbGFiZWw6ICdSZXR1cm4nLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19lbmQnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgZWRnZXMucHVzaCh7XG4gICAgICBpZDogYGVfJHtwcmV2SWR9X2VuZGAsXG4gICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgIHRhcmdldDogJ2VuZCcsXG4gICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0YXRlbWVudCBvciBibG9jayBjb250YWlucyBhd2FpdCBleHByZXNzaW9ucyAocmVjdXJzaXZlbHkpXG4gKiBVc2VkIHRvIGRldGVybWluZSBpZiBhIGZvci93aGlsZSBsb29wIGlzIHRydWx5IGEgbG9vcGluZyBleGVjdXRpb24gcGF0dGVyblxuICogdnMganVzdCBjb2xsZWN0aW5nIHByb21pc2VzIGZvciBwYXJhbGxlbCBleGVjdXRpb25cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghbm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIERpcmVjdCBhd2FpdCBleHByZXNzaW9uXG4gIGlmIChub2RlLnR5cGUgPT09ICdBd2FpdEV4cHJlc3Npb24nKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBDaGVjayBibG9jayBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgJiYgbm9kZS5zdG10cykge1xuICAgIHJldHVybiBub2RlLnN0bXRzLnNvbWUoKHN0bXQ6IGFueSkgPT4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oc3RtdCkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyAmJiBub2RlLmV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8vIENoZWNrIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICBpZiAobm9kZS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbnMpIHtcbiAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnMuc29tZShcbiAgICAgIChkZWNsOiBhbnkpID0+IGRlY2wuaW5pdCAmJiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihkZWNsLmluaXQpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHN0YXRlbWVudHNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoXG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmNvbnNlcXVlbnQpIHx8XG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmFsdGVybmF0ZSlcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0YXRlbWVudHNcbiAgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCdcbiAgKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGUuYm9keSk7XG4gIH1cblxuICAvLyBDaGVjayBhc3NpZ25tZW50IGV4cHJlc3Npb25zIChlLmcuLCByZXN1bHQgPSBhd2FpdCBkb1dvcmsoKSlcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLnJpZ2h0KTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGwgZXhwcmVzc2lvbnMgKGZvciBhd2FpdCBpbiBhcmd1bWVudHMpXG4gIGlmIChub2RlLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5zb21lKChhcmc6IGFueSkgPT5cbiAgICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYXJnLmV4cHJlc3Npb24gfHwgYXJnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHN0YXRlbWVudCBhbmQgZXh0cmFjdCBzdGVwIGNhbGxzIHdpdGggcHJvcGVyIENGRyBzdHJ1Y3R1cmVcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVN0YXRlbWVudChcbiAgc3RtdDogU3RhdGVtZW50LFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGxldCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICBjb25zdCB2YXJEZWNsID0gc3RtdCBhcyBWYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKGRlY2wuaW5pdCkge1xuICAgICAgICAvLyBUcmFjayB3ZWJob29rL2hvb2sgdmFyaWFibGUgYXNzaWdubWVudHM6IGNvbnN0IHdlYmhvb2sgPSBjcmVhdGVXZWJob29rKClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiZcbiAgICAgICAgICAoZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uKS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKChkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb24pLmNhbGxlZSBhcyBJZGVudGlmaWVyKVxuICAgICAgICAgICAgLnZhbHVlO1xuICAgICAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ2NyZWF0ZVdlYmhvb2snIHx8IGZ1bmNOYW1lID09PSAnY3JlYXRlSG9vaycpIHtcbiAgICAgICAgICAgIGNvbnRleHQud2ViaG9va1ZhcmlhYmxlcy5hZGQoKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIGVtcHR5IGFycmF5IGFzc2lnbm1lbnRzIGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuOiBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdC50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IChkZWNsLmluaXQgYXMgYW55KS5lbGVtZW50cztcbiAgICAgICAgICAvLyBFbXB0eSBhcnJheTogZWxlbWVudHMgaXMgdW5kZWZpbmVkLCBudWxsLCBvciBlbXB0eSBhcnJheVxuICAgICAgICAgIGlmICghZWxlbWVudHMgfHwgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0LnByb21pc2VBcnJheXMuc2V0KHZhck5hbWUsIFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICBkZWNsLmluaXQsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgICAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwcmV2SWQgb2YgZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBgZV8ke3ByZXZJZH1fJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICAgICAgc291cmNlOiBwcmV2SWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4aXROb2RlSWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgc3RtdC5leHByZXNzaW9uLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3Qgc2F2ZWRDb25kaXRpb25hbCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICBjb25zdCBjb25kaXRpb25hbElkID0gYGNvbmRfJHtjb250ZXh0LmNvbmRpdGlvbmFsQ291bnRlcisrfWA7XG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWxJZDtcblxuICAgIC8vIEFuYWx5emUgdGhlIFwidGhlblwiIGJyYW5jaCBmaXJzdCB0byBjaGVjayBpZiBpdCBoYXMgYW55IHdvcmtmbG93LXJlbGV2YW50IG5vZGVzXG4gICAgbGV0IHRoZW5SZXN1bHQ6IEFuYWx5c2lzUmVzdWx0O1xuICAgIGlmIChzdG10LmNvbnNlcXVlbnQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgdGhlblJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgc3RtdC5jb25zZXF1ZW50LnN0bXRzLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGNvbnNlcXVlbnQgKG5vIGJyYWNlcylcbiAgICAgIHRoZW5SZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBzdG10LmNvbnNlcXVlbnQsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbmFseXplIHRoZSBcImVsc2VcIiBicmFuY2ggaWYgaXQgZXhpc3RzXG4gICAgbGV0IGVsc2VSZXN1bHQ6IEFuYWx5c2lzUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN0bXQuYWx0ZXJuYXRlKSB7XG4gICAgICBpZiAoc3RtdC5hbHRlcm5hdGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgICBlbHNlUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgICAgIHN0bXQuYWx0ZXJuYXRlLnN0bXRzLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYWx0ZXJuYXRlIChubyBicmFjZXMpIG9yIGVsc2UtaWZcbiAgICAgICAgZWxzZVJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgICAgc3RtdC5hbHRlcm5hdGUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBjcmVhdGUgY29uZGl0aW9uYWwgbm9kZSBpZiBhdCBsZWFzdCBvbmUgYnJhbmNoIGhhcyB3b3JrZmxvdy1yZWxldmFudCBub2Rlcy5cbiAgICAvLyBUaGlzIGF2b2lkcyBjcmVhdGluZyBub2RlcyBmb3IgcnVudGltZSBhc3NlcnRpb25zIGxpa2UgYGlmICghY3R4KSB7IHRocm93IC4uLiB9YFxuICAgIGNvbnN0IHRoZW5IYXNOb2RlcyA9IHRoZW5SZXN1bHQubm9kZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBlbHNlSGFzTm9kZXMgPSBlbHNlUmVzdWx0ID8gZWxzZVJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICBpZiAodGhlbkhhc05vZGVzIHx8IGVsc2VIYXNOb2Rlcykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb25kaXRpb25hbCBkZWNpc2lvbiBub2RlXG4gICAgICBjb25zdCBjb25kaXRpb25UZXh0ID0gZ2V0Q29uZGl0aW9uVGV4dChzdG10LnRlc3QpO1xuICAgICAgY29uc3QgY29uZE5vZGVJZCA9IGAke2NvbmRpdGlvbmFsSWR9X25vZGVgO1xuICAgICAgY29uc3QgY29uZE1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICBjb25kTWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBjb25kTm9kZUlkLFxuICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGFiZWw6IGNvbmRpdGlvblRleHQsXG4gICAgICAgICAgbm9kZUtpbmQ6ICdjb25kaXRpb25hbCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmRNZXRhZGF0YSkubGVuZ3RoID4gMCA/IGNvbmRNZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBub2Rlcy5wdXNoKGNvbmROb2RlKTtcblxuICAgICAgLy8gVGhlIGNvbmRpdGlvbmFsIG5vZGUgaXMgdGhlIGVudHJ5IHBvaW50XG4gICAgICBlbnRyeU5vZGVJZHMucHVzaChjb25kTm9kZUlkKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoZW5SZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbmRpdGlvbmFsSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxCcmFuY2ggPSAnVGhlbic7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4udGhlblJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnRoZW5SZXN1bHQuZWRnZXMpO1xuXG4gICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJ0aGVuXCIgYnJhbmNoIHdpdGggXCJ0cnVlXCIgbGFiZWxcbiAgICAgIGZvciAoY29uc3QgdGhlbkVudHJ5SWQgb2YgdGhlblJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBlXyR7Y29uZE5vZGVJZH1fJHt0aGVuRW50cnlJZH1fdHJ1ZWAsXG4gICAgICAgICAgc291cmNlOiBjb25kTm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogdGhlbkVudHJ5SWQsXG4gICAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgICBsYWJlbDogJ3RydWUnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udGhlblJlc3VsdC5leGl0Tm9kZUlkcyk7XG5cbiAgICAgIGlmIChlbHNlUmVzdWx0KSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbHNlUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29uZGl0aW9uYWxJZDtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsQnJhbmNoID0gJ0Vsc2UnO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZXMucHVzaCguLi5lbHNlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5lbHNlUmVzdWx0LmVkZ2VzKTtcblxuICAgICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJlbHNlXCIgYnJhbmNoIHdpdGggXCJmYWxzZVwiIGxhYmVsXG4gICAgICAgIGZvciAoY29uc3QgZWxzZUVudHJ5SWQgb2YgZWxzZVJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2NvbmROb2RlSWR9XyR7ZWxzZUVudHJ5SWR9X2ZhbHNlYCxcbiAgICAgICAgICAgIHNvdXJjZTogY29uZE5vZGVJZCxcbiAgICAgICAgICAgIHRhcmdldDogZWxzZUVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICAgICAgbGFiZWw6ICdmYWxzZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbHNlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm90ZTogV2hlbiB0aGVyZSdzIG5vIGVsc2UgYnJhbmNoLCB3ZSBkb24ndCBhZGQgdGhlIGNvbmRpdGlvbmFsIG5vZGUgYXMgYW4gZXhpdC5cbiAgICAvLyBUaGUgdGhlbi1icmFuY2ggZXhpdHMgYXJlIHRoZSBvbmx5IGV4aXRzLiBUaGlzIG1lYW5zIHRoZSBncmFwaCBzaG93cyB0aGUgXCJ0cnVlXCIgcGF0aDtcbiAgICAvLyB0aGUgXCJmYWxzZVwiIGNhc2UgKHdoZW4gY29uZGl0aW9uIGlzIGZhbHNlIGFuZCB0aGVyZSdzIG5vIGVsc2UpIGltcGxpY2l0bHkgbWVhbnNcbiAgICAvLyBleGVjdXRpb24gY29udGludWVzIHdpdGggbm8gc3RlcHMgZnJvbSB0aGlzIGlmIHN0YXRlbWVudC5cbiAgICAvL1xuICAgIC8vIFdoZW4gYm90aCBicmFuY2hlcyBoYXZlIG5vIHdvcmtmbG93LXJlbGV2YW50IG5vZGVzIChlLmcuLCBydW50aW1lIGFzc2VydGlvbnMgbGlrZVxuICAgIC8vIGBpZiAoIWN0eCkgeyB0aHJvdyAuLi4gfWApLCB3ZSBza2lwIGNyZWF0aW5nIHRoZSBjb25kaXRpb25hbCBub2RlIGVudGlyZWx5LlxuXG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gc2F2ZWRDb25kaXRpb25hbDtcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHwgc3RtdC50eXBlID09PSAnRm9yU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJvZHkgPVxuICAgICAgc3RtdC50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnID8gc3RtdC5ib2R5IDogKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgLy8gT25seSB0cmVhdCBhcyBhIGxvb3AgaWYgdGhlIGJvZHkgY29udGFpbnMgYXdhaXQgZXhwcmVzc2lvbnNcbiAgICAvLyBPdGhlcndpc2UgaXQncyBsaWtlbHkgYSBcImNvbGxlY3QgcHJvbWlzZXNcIiBwYXR0ZXJuIChmb3IgcGFyYWxsZWwgZXhlY3V0aW9uKVxuICAgIGNvbnN0IGhhc0F3YWl0ID0gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYm9keSk7XG5cbiAgICBjb25zdCBsb29wSWQgPSBoYXNBd2FpdCA/IGBsb29wXyR7Y29udGV4dC5sb29wQ291bnRlcisrfWAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2F2ZWRMb29wID0gY29udGV4dC5pbkxvb3A7XG4gICAgaWYgKGxvb3BJZCkge1xuICAgICAgY29udGV4dC5pbkxvb3AgPSBsb29wSWQ7XG4gICAgfVxuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICAvLyBPbmx5IGFkZCBsb29wIG1ldGFkYXRhIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGxvb3BJZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICAvLyBPbmx5IGNyZWF0ZSBsb29wLWJhY2sgZWRnZXMgaWYgdGhpcyBpcyB0cnVseSBhIGxvb3BpbmcgcGF0dGVyblxuICAgICAgaWYgKGxvb3BJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgICBzb3VyY2U6IGV4aXRJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgLy8gT25seSBhZGQgbG9vcCBtZXRhZGF0YSBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgLy8gT25seSBjcmVhdGUgbG9vcC1iYWNrIGVkZ2VzIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3QgbG9vcElkID0gYGxvb3BfJHtjb250ZXh0Lmxvb3BDb3VudGVyKyt9YDtcbiAgICBjb25zdCBzYXZlZExvb3AgPSBjb250ZXh0LmluTG9vcDtcbiAgICBjb250ZXh0LmluTG9vcCA9IGxvb3BJZDtcblxuICAgIGNvbnN0IGlzQXdhaXQgPSAoc3RtdCBhcyBhbnkpLmlzQXdhaXQgfHwgKHN0bXQgYXMgYW55KS5hd2FpdDtcbiAgICBjb25zdCBib2R5ID0gKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbG9vcFJlc3VsdC5ub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElzQXdhaXQgPSBpc0F3YWl0O1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJc0F3YWl0ID0gaXNBd2FpdDtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICAvLyBIYW5kbGUgcGxhaW4gQmxvY2tTdGF0ZW1lbnQgKGJhcmUgYmxvY2tzIGxpa2UgeyAuLi4gfSlcbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJsb2NrUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgKHN0bXQgYXMgQmxvY2tTdGF0ZW1lbnQpLnN0bXRzLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLmJsb2NrUmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLmJsb2NrUmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMgPSBibG9ja1Jlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSBibG9ja1Jlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdSZXR1cm5TdGF0ZW1lbnQnICYmIChzdG10IGFzIGFueSkuYXJndW1lbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgIChzdG10IGFzIGFueSkuYXJndW1lbnQsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgdmFyaWFibGVNYXBcbiAgICApO1xuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG4gICAgZW50cnlOb2RlSWRzID0gcmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICBleGl0Tm9kZUlkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBibG9jayBvZiBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIHNlcXVlbnRpYWwgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUJsb2NrKFxuICBzdG10czogU3RhdGVtZW50W10sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgbGV0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRFeGl0SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICBzdG10LFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQuZW50cnlOb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRFeGl0SWRzLmxlbmd0aCA+IDAgJiYgcmVzdWx0LmVudHJ5Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXZJZCBvZiBjdXJyZW50RXhpdElkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSByZXN1bHQubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZW50cnlJZCk7XG4gICAgICAgICAgY29uc3QgZWRnZVR5cGUgPSB0YXJnZXROb2RlPy5tZXRhZGF0YT8ucGFyYWxsZWxHcm91cElkXG4gICAgICAgICAgICA/ICdwYXJhbGxlbCdcbiAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7cHJldklkfV8ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogZWRnZVR5cGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmV4aXROb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnRFeGl0SWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkczogY3VycmVudEV4aXRJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGFuIGV4cHJlc3Npb24gYW5kIGV4dHJhY3Qgc3RlcCBjYWxsc1xuICovXG5mdW5jdGlvbiBhbmFseXplRXhwcmVzc2lvbihcbiAgZXhwcjogRXhwcmVzc2lvbixcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT4sXG4gIHZpc2l0ZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZXhwci50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGF3YWl0ZWRFeHByID0gZXhwci5hcmd1bWVudDtcbiAgICBpZiAoYXdhaXRlZEV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgY2FsbEV4cHIgPSBhd2FpdGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcblxuICAgICAgLy8gQ2hlY2sgZm9yIFByb21pc2UuYWxsL3JhY2UvYWxsU2V0dGxlZC9hbnlcbiAgICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAobWVtYmVyLm9iamVjdCBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT0gJ1Byb21pc2UnICYmXG4gICAgICAgICAgbWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtZXRob2QgPSAobWVtYmVyLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgIGlmIChbJ2FsbCcsICdyYWNlJywgJ2FsbFNldHRsZWQnLCAnYW55J10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxJZCA9IGBwYXJhbGxlbF8ke2NvbnRleHQucGFyYWxsZWxDb3VudGVyKyt9YDtcblxuICAgICAgICAgICAgaWYgKGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGNhbGxFeHByLmFyZ3VtZW50c1swXS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoYXJnLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFyZy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQ/LmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbVJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbGVtUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5wYXJhbGxlbEdyb3VwSWQgPSBwYXJhbGxlbElkO1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goLi4uZWxlbVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VzLnB1c2goLi4uZWxlbVJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmVsZW1SZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbGVtUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgYXJnLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMoKGFyZyBhcyBJZGVudGlmaWVyKS52YWx1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIFByb21pc2UuYWxsKHZhcmlhYmxlTmFtZSkgd2hlcmUgdmFyaWFibGUgd2FzIGJ1aWx0IHZpYSBwdXNoKClcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU5hbWUgPSAoYXJnIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrZWROb2RlcyA9IGNvbnRleHQucHJvbWlzZUFycmF5cy5nZXQoYXJyYXlOYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBwYXJhbGxlbEdyb3VwSWQgdG8gYWxsIG5vZGVzIHRoYXQgd2VyZSBwdXNoZWQgdG8gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMgJiYgdHJhY2tlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2tlZE5vZGUgb2YgdHJhY2tlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJhY2tlZE5vZGUubWV0YWRhdGEpIHRyYWNrZWROb2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsR3JvdXBJZCA9IHBhcmFsbGVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJhY2tlZCBub2RlIElEcyBmb3IgcHJvcGVyIGVkZ2UgY29ubmVjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2godHJhY2tlZE5vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKHRyYWNrZWROb2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1hcnJheSBhcmd1bWVudHMgbGlrZSBhcnJheS5tYXAoc3RlcEZuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ1Jlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYXJnUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxHcm91cElkID0gcGFyYWxsZWxJZDtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLmFyZ1Jlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaCguLi5hcmdSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmFyZ1Jlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uYXJnUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVndWxhciBjYWxsIC0gY2hlY2sgaWYgaXQncyBhIHN0ZXAsIHdvcmtmbG93IHByaW1pdGl2ZSwgb3IgaGVscGVyIGZ1bmN0aW9uXG4gICAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBmdW5jTmFtZSA9IChjYWxsRXhwci5jYWxsZWUgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoV09SS0ZMT1dfUFJJTUlUSVZFUy5oYXMoZnVuY05hbWUpKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBzbGVlcFxuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdwcmltaXRpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgICBmdW5jTmFtZSxcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIGFuYWx5emUgdGhlIGFyZ3VtZW50cyBvZiBhd2FpdGVkIGNhbGxzIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0c1xuICAgICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBhd2FpdCBvbiBhIHdlYmhvb2svaG9vayB2YXJpYWJsZTogYXdhaXQgd2ViaG9va1xuICAgIGlmIChhd2FpdGVkRXhwci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhck5hbWUgPSAoYXdhaXRlZEV4cHIgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICBpZiAoY29udGV4dC53ZWJob29rVmFyaWFibGVzLmhhcyh2YXJOYW1lKSkge1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogJ2F3YWl0V2ViaG9vaycsXG4gICAgICAgICAgICBub2RlS2luZDogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm9uLWF3YWl0ZWQgY2FsbCBleHByZXNzaW9uXG4gIGlmIChleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBjYWxsRXhwciA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKGNhbGxFeHByLmNhbGxlZSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfSBlbHNlIGlmIChXT1JLRkxPV19QUklNSVRJVkVTLmhhcyhmdW5jTmFtZSkpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5vbi1hd2FpdGVkIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBjcmVhdGVIb29rLCBjcmVhdGVXZWJob29rXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdwcmltaXRpdmUnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgZnVuY05hbWUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0IGxpdGVyYWxzXG4gIGlmIChleHByLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgIGV4cHIsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgICcnXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgYW5kIHN0ZXAgY2FsbHMgaW4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHNcbiAgLy8gU2tpcCBmb3IgYXJyYXkgbWV0aG9kcyAobWFwLCBmb3JFYWNoLCBldGMuKSB3aGljaCBoYXZlIGEgc3BlY2lhbGl6ZWQgaGFuZGxlciBiZWxvd1xuICBpZiAoZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgY2FsbEV4cHIgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhcnJheSBtZXRob2QgY2FsbCAtIGlmIHNvLCBza2lwIHRoZSBnZW5lcmljIGhhbmRsZXJcbiAgICAvLyBhbmQgbGV0IHRoZSBzcGVjaWFsaXplZCBoYW5kbGVyIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiBoYW5kbGUgaXRcbiAgICBjb25zdCBpc0FycmF5TWV0aG9kQ2FsbCA9XG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgWydtYXAnLCAnZm9yRWFjaCcsICdmaWx0ZXInLCAnZmluZCcsICdzb21lJywgJ2V2ZXJ5JywgJ2ZsYXRNYXAnXS5pbmNsdWRlcyhcbiAgICAgICAgKChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWVcbiAgICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgLnB1c2goKSBjYWxsIG9uIGEgdHJhY2tlZCBwcm9taXNlIGFycmF5XG4gICAgLy8gUGF0dGVybjogcHJvbWlzZXMucHVzaChzdGVwQ2FsbCgpKVxuICAgIGxldCBwdXNoQXJyYXlOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgIChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAoKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT1cbiAgICAgICAgJ3B1c2gnXG4gICAgKSB7XG4gICAgICBjb25zdCBvYmpOYW1lID0gKFxuICAgICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdCBhcyBJZGVudGlmaWVyXG4gICAgICApLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMob2JqTmFtZSkpIHtcbiAgICAgICAgcHVzaEFycmF5TmFtZSA9IG9iak5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICBpZiAoYXJnLmV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gRm9yIGFycmF5IG1ldGhvZCBjYWxscywgc2tpcCBzdGVwIGlkZW50aWZpZXIgZGV0ZWN0aW9uIGhlcmVcbiAgICAgICAgLy8gc2luY2Ugd2UgaGF2ZSBhIHNwZWNpYWxpemVkIGhhbmRsZXIgZm9yIHRob3NlXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnSWRlbnRpZmllcicgJiYgIWlzQXJyYXlNZXRob2RDYWxsKSB7XG4gICAgICAgICAgY29uc3QgYXJnTmFtZSA9IChhcmcuZXhwcmVzc2lvbiBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGFyZ05hbWUpO1xuICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGAke2dldE9yaWdpbmFsU3RlcE5hbWUoc3RlcEluZm8uc3RlcElkLCBhcmdOYW1lKX0gKHJlZilgLFxuICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6ICdmdW5jdGlvbiBhcmd1bWVudCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBzdGVwIGNhbGxzIHBhc3NlZCBhcyBhcmd1bWVudHMgKGUuZy4sIHByb21pc2VzLnB1c2goc3RlcENhbGwoKSkpXG4gICAgICAgIC8vIE5vdGU6IERvbid0IGFkZCBsb29wSWQgaGVyZSAtIHRoZXNlIGFyZSBub24tYXdhaXRlZCBjYWxscyBiZWluZyBjb2xsZWN0ZWRcbiAgICAgICAgLy8gZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAobGlrZSBQcm9taXNlLmFsbCksIG5vdCB0cnVseSBsb29waW5nIGNhbGxzXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgYXJnQ2FsbEV4cHIgPSBhcmcuZXhwcmVzc2lvbiBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICBpZiAoYXJnQ2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgY29uc3QgZnVuY05hbWUgPSAoYXJnQ2FsbEV4cHIuY2FsbGVlIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChmdW5jTmFtZSk7XG4gICAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgbG9vcElkIC0gdGhpcyBpcyBhIG5vbi1hd2FpdGVkIGNhbGwsIGxpa2VseSBiZWluZ1xuICAgICAgICAgICAgICAvLyBjb2xsZWN0ZWQgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAoUHJvbWlzZS5hbGwgcGF0dGVybilcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6XG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIHB1c2hlZCB0byBhIHRyYWNrZWQgcHJvbWlzZSBhcnJheSwgc3RvcmUgdGhlIG5vZGVcbiAgICAgICAgICAgICAgLy8gc28gd2UgY2FuIGFwcGx5IHBhcmFsbGVsR3JvdXBJZCB3aGVuIFByb21pc2UuYWxsIGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgaWYgKHB1c2hBcnJheU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja2VkTm9kZXMgPSBjb250ZXh0LnByb21pc2VBcnJheXMuZ2V0KHB1c2hBcnJheU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBjb25zdCByZWZSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBhcmcuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4ucmVmUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgICBlZGdlcy5wdXNoKC4uLnJlZlJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0ZXAgcmVmZXJlbmNlcyBpbiAnbmV3JyBleHByZXNzaW9uc1xuICBpZiAoZXhwci50eXBlID09PSAnTmV3RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBuZXdFeHByID0gZXhwciBhcyBhbnk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgRHVyYWJsZUFnZW50IGluc3RhbnRpYXRpb25cbiAgICBjb25zdCBpc0R1cmFibGVBZ2VudCA9XG4gICAgICBuZXdFeHByLmNhbGxlZT8udHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICBuZXdFeHByLmNhbGxlZT8udmFsdWUgPT09ICdEdXJhYmxlQWdlbnQnO1xuXG4gICAgaWYgKGlzRHVyYWJsZUFnZW50ICYmIG5ld0V4cHIuYXJndW1lbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBub2RlIGZvciB0aGUgRHVyYWJsZUFnZW50IGl0c2VsZlxuICAgICAgY29uc3QgYWdlbnROb2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgY29uc3QgYWdlbnROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBhZ2VudE5vZGVJZCxcbiAgICAgICAgdHlwZTogJ2FnZW50JyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhYmVsOiAnRHVyYWJsZUFnZW50JyxcbiAgICAgICAgICBub2RlS2luZDogJ2FnZW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogJ0R1cmFibGVBZ2VudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChhZ2VudE5vZGUpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuXG4gICAgICAvLyBMb29rIGZvciB0b29scyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgY29uc3Qgb3B0aW9uc0FyZyA9IG5ld0V4cHIuYXJndW1lbnRzWzBdPy5leHByZXNzaW9uO1xuICAgICAgaWYgKG9wdGlvbnNBcmc/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCB0b29sc1Jlc3VsdCA9IGFuYWx5emVEdXJhYmxlQWdlbnRUb29scyhcbiAgICAgICAgICBvcHRpb25zQXJnLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBhZ2VudE5vZGVJZCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnRvb2xzUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50b29sc1Jlc3VsdC5lZGdlcyk7XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgdG9vbHMsIHRoZXkgYXJlIHRoZSBleGl0IG5vZGVzXG4gICAgICAgIGlmICh0b29sc1Jlc3VsdC5leGl0Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50b29sc1Jlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChhZ2VudE5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3RXhwci5hcmd1bWVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG5ld0V4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBBc3NpZ25tZW50RXhwcmVzc2lvbiAtIGFuYWx5emUgdGhlIHJpZ2h0LWhhbmQgc2lkZVxuICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgYXNzaWduRXhwciA9IGV4cHIgYXMgYW55O1xuICAgIGlmIChhc3NpZ25FeHByLnJpZ2h0KSB7XG4gICAgICBjb25zdCByaWdodFJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICBhc3NpZ25FeHByLnJpZ2h0LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICk7XG4gICAgICBub2Rlcy5wdXNoKC4uLnJpZ2h0UmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ucmlnaHRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBNZW1iZXJFeHByZXNzaW9uIGNhbGxzIGxpa2UgYXJyYXkubWFwKHN0ZXBGbikgd2hlcmUgc3RlcCBpcyBwYXNzZWQgYXMgY2FsbGJhY2tcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGNhbGxFeHByID0gZXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgbWVtYmVyID0gY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbWV0aG9kIGNhbGwgbGlrZSAubWFwKCksIC5mb3JFYWNoKCksIC5maWx0ZXIoKSBldGMuXG4gICAgICBpZiAobWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdtYXAnLFxuICAgICAgICAgICAgJ2ZvckVhY2gnLFxuICAgICAgICAgICAgJ2ZpbHRlcicsXG4gICAgICAgICAgICAnZmluZCcsXG4gICAgICAgICAgICAnc29tZScsXG4gICAgICAgICAgICAnZXZlcnknLFxuICAgICAgICAgICAgJ2ZsYXRNYXAnLFxuICAgICAgICAgIF0uaW5jbHVkZXMobWV0aG9kTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IGFyZ3VtZW50IGlzIGEgc3RlcCBmdW5jdGlvbiByZWZlcmVuY2VcbiAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBjYWxsRXhwci5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ05hbWUgPSAoYXJnLmV4cHJlc3Npb24gYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoYXJnTmFtZSk7XG4gICAgICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgYXJnTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgRHVyYWJsZUFnZW50IHRvb2xzIHByb3BlcnR5IHRvIGV4dHJhY3QgdG9vbCBub2Rlc1xuICovXG5mdW5jdGlvbiBhbmFseXplRHVyYWJsZUFnZW50VG9vbHMoXG4gIG9wdGlvbnNPYmo6IGFueSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBhZ2VudE5vZGVJZDogc3RyaW5nLFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFvcHRpb25zT2JqLnByb3BlcnRpZXMpXG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdG9vbHMgZnJvbSBhbiBPYmplY3RFeHByZXNzaW9uXG4gIGZ1bmN0aW9uIGV4dHJhY3RUb29sc0Zyb21PYmplY3QodG9vbHNPYmo6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9vbFByb3Agb2YgdG9vbHNPYmoucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgaWYgKHRvb2xQcm9wLnR5cGUgIT09ICdLZXlWYWx1ZVByb3BlcnR5JykgY29udGludWU7XG5cbiAgICAgIGxldCB0b29sTmFtZSA9ICcnO1xuICAgICAgaWYgKHRvb2xQcm9wLmtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgdG9vbE5hbWUgPSB0b29sUHJvcC5rZXkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdG9vbE5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBMb29rIGZvciBleGVjdXRlIHByb3BlcnR5IGluIHRoZSB0b29sIGRlZmluaXRpb25cbiAgICAgIGlmICh0b29sUHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbm5lclByb3Agb2YgdG9vbFByb3AudmFsdWUucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgICAgIGlmIChpbm5lclByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgICAgICAgIGxldCBpbm5lcktleSA9ICcnO1xuICAgICAgICAgIGlmIChpbm5lclByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgaW5uZXJLZXkgPSBpbm5lclByb3Aua2V5LnZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbm5lcktleSA9PT0gJ2V4ZWN1dGUnICYmIGlubmVyUHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gaW5uZXJQcm9wLnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChzdGVwTmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8/LnN0ZXBJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBpc1Rvb2w6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2xOYW1lLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6IGB0b29scy4ke3Rvb2xOYW1lfS5leGVjdXRlYCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgICAgICAvLyBDb25uZWN0IGFnZW50IHRvIHRoaXMgdG9vbCB3aXRoIHRvb2wgZWRnZSB0eXBlXG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7YWdlbnROb2RlSWR9XyR7bm9kZUlkfWAsXG4gICAgICAgICAgICAgIHNvdXJjZTogYWdlbnROb2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSAndG9vbHMnIHByb3BlcnR5XG4gIGZvciAoY29uc3QgcHJvcCBvZiBvcHRpb25zT2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGtleU5hbWUgIT09ICd0b29scycpIGNvbnRpbnVlO1xuXG4gICAgLy8gSGFuZGxlIGlubGluZSB0b29scyBvYmplY3RcbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocHJvcC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRvb2xzIGFzIGEgdmFyaWFibGUgcmVmZXJlbmNlIC0gcmVzb2x2ZSBpdCBmcm9tIHZhcmlhYmxlTWFwXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB0b29sc1Zhck5hbWUgPSBwcm9wLnZhbHVlLnZhbHVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgdmFyaWFibGUgZnJvbSB0aGUgdmFyaWFibGVNYXAgKGJ1bmRsZWQgY29kZSlcbiAgICAgIGNvbnN0IHJlc29sdmVkVG9vbHNPYmogPSB2YXJpYWJsZU1hcC5nZXQodG9vbHNWYXJOYW1lKTtcblxuICAgICAgaWYgKHJlc29sdmVkVG9vbHNPYmogJiYgcmVzb2x2ZWRUb29sc09iai50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IHJlc29sdmVkIC0gZXh0cmFjdCBpbmRpdmlkdWFsIHRvb2xzXG4gICAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocmVzb2x2ZWRUb29sc09iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjazogY3JlYXRlIGEgcGxhY2Vob2xkZXIgbm9kZSBpZiB3ZSBjYW4ndCByZXNvbHZlXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogYCR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGlzVG9vbHNDb2xsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHNWYXJpYWJsZTogdG9vbHNWYXJOYW1lLFxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogYHRvb2xzOiR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgIC8vIENvbm5lY3QgYWdlbnQgdG8gdG9vbHMgd2l0aCB0b29sIGVkZ2UgdHlwZVxuICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICBpZDogYGVfJHthZ2VudE5vZGVJZH1fJHtub2RlSWR9YCxcbiAgICAgICAgICBzb3VyY2U6IGFnZW50Tm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhbiBvYmplY3QgZXhwcmVzc2lvbiBmb3Igc3RlcCByZWZlcmVuY2VzXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgb2JqOiBhbnksXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgcGF0aDogc3RyaW5nXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoIW9iai5wcm9wZXJ0aWVzKSByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcblxuICBmb3IgKGNvbnN0IHByb3Agb2Ygb2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfSBlbHNlIGlmIChwcm9wLmtleS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIGtleU5hbWUgPSBwcm9wLmtleS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGggPyBgJHtwYXRofS4ke2tleU5hbWV9YCA6IGtleU5hbWU7XG5cbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhbHVlTmFtZSA9IHByb3AudmFsdWUudmFsdWU7XG4gICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KHZhbHVlTmFtZSk7XG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBgJHtnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgdmFsdWVOYW1lKX0gKHRvb2wpYCxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiBjdXJyZW50UGF0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgIHByb3AudmFsdWUsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGN1cnJlbnRQYXRoXG4gICAgICApO1xuICAgICAgbm9kZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ubmVzdGVkUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLm5lc3RlZFJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHRyYW5zaXRpdmUgZnVuY3Rpb24gY2FsbCB0byBmaW5kIHN0ZXAgY2FsbHMgd2l0aGluIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICBmdW5jTmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PixcbiAgdmlzaXRlZEZ1bmN0aW9uczogU2V0PHN0cmluZz5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBjb25zdCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4aXROb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh2aXNpdGVkRnVuY3Rpb25zLmhhcyhmdW5jTmFtZSkpIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIGNvbnN0IGZ1bmNJbmZvID0gZnVuY3Rpb25NYXAuZ2V0KGZ1bmNOYW1lKTtcbiAgaWYgKCFmdW5jSW5mbyB8fCBmdW5jSW5mby5pc1N0ZXApIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIHZpc2l0ZWRGdW5jdGlvbnMuYWRkKGZ1bmNOYW1lKTtcblxuICB0cnkge1xuICAgIGlmIChmdW5jSW5mby5ib2R5KSB7XG4gICAgICBpZiAoZnVuY0luZm8uYm9keS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IGJvZHlSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgICAgZnVuY0luZm8uYm9keS5zdG10cyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5ib2R5UmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5ib2R5UmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uYm9keVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmJvZHlSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhwclJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgIGZ1bmNJbmZvLmJvZHksXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5leHByUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5leHByUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uZXhwclJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmV4cHJSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2aXNpdGVkRnVuY3Rpb25zLmRlbGV0ZShmdW5jTmFtZSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cbiJdfQ==