semantifold 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +1 -0
  2. package/build/src/backends/effects.js +3 -1
  3. package/build/src/backends/php.d.ts.map +1 -1
  4. package/build/src/backends/php.js +56 -3
  5. package/build/src/backends/scalars.js +2 -2
  6. package/build/src/backends/shared.d.ts +2 -1
  7. package/build/src/backends/shared.d.ts.map +1 -1
  8. package/build/src/backends/shared.js +209 -7
  9. package/build/src/backends/writer.d.ts +18 -4
  10. package/build/src/backends/writer.d.ts.map +1 -1
  11. package/build/src/backends/writer.js +40 -4
  12. package/build/src/frontends/java.d.ts +1 -1
  13. package/build/src/frontends/java.d.ts.map +1 -1
  14. package/build/src/frontends/java.js +14 -11
  15. package/build/src/frontends/javascript-typescript.d.ts +1 -1
  16. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  17. package/build/src/frontends/javascript-typescript.js +17 -17
  18. package/build/src/frontends/php.d.ts +5 -1
  19. package/build/src/frontends/php.d.ts.map +1 -1
  20. package/build/src/frontends/php.js +159 -31
  21. package/build/src/frontends/ruby.d.ts +1 -1
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +12 -9
  24. package/build/src/frontends/types.d.ts +9 -2
  25. package/build/src/frontends/types.d.ts.map +1 -1
  26. package/build/src/frontends/types.js +26 -9
  27. package/build/src/language-registry.d.ts.map +1 -1
  28. package/build/src/language-registry.js +14 -6
  29. package/build/src/mapping.d.ts.map +1 -1
  30. package/build/src/mapping.js +4 -2
  31. package/build/src/semantic/effects.d.ts.map +1 -1
  32. package/build/src/semantic/effects.js +3 -1
  33. package/build/src/semantic/provenance.d.ts.map +1 -1
  34. package/build/src/semantic/provenance.js +37 -4
  35. package/build/src/semantic/types.d.ts +140 -9
  36. package/build/src/semantic/types.d.ts.map +1 -1
  37. package/build/src/semantic/types.js +37 -6
  38. package/build/src/semantic/validate.d.ts +31 -2
  39. package/build/src/semantic/validate.d.ts.map +1 -1
  40. package/build/src/semantic/validate.js +346 -27
  41. package/docs/adr-bounded-subtyping.md +180 -0
  42. package/docs/language-support.md +1 -1
  43. package/package.json +1 -1
  44. package/src/backends/effects.js +1 -0
  45. package/src/backends/php.js +56 -2
  46. package/src/backends/scalars.js +1 -1
  47. package/src/backends/shared.js +210 -6
  48. package/src/backends/writer.js +41 -3
  49. package/src/frontends/java.js +13 -10
  50. package/src/frontends/javascript-typescript.js +16 -16
  51. package/src/frontends/php.js +175 -31
  52. package/src/frontends/ruby.js +11 -8
  53. package/src/frontends/types.js +26 -8
  54. package/src/language-registry.js +13 -5
  55. package/src/mapping.js +3 -1
  56. package/src/semantic/effects.js +1 -0
  57. package/src/semantic/provenance.js +34 -3
  58. package/src/semantic/types.js +39 -5
  59. package/src/semantic/validate.js +377 -26
@@ -15,6 +15,7 @@ export function generatePhp(module, writer) {
15
15
  emitEffectSupport(writer, module, "php");
16
16
  const records = module.records ?? [];
17
17
  const classes = module.classes ?? [];
18
+ const interfaces = module.interfaces ?? [];
18
19
  const errors = module.errors ?? [];
19
20
  errors.forEach((error, index) => {
20
21
  const path = `/errors/${index}`;
@@ -68,6 +69,13 @@ export function generatePhp(module, writer) {
68
69
  });
69
70
  if (records.length > 0)
70
71
  writer.synthetic("\n\n", "record/function separator", [module]);
72
+ interfaces.forEach((declaration, interfaceIndex) => {
73
+ if (interfaceIndex > 0)
74
+ writer.synthetic("\n\n", "interface separator", [declaration], [`/interfaces/${interfaceIndex}`]);
75
+ emitInterface(writer, declaration, interfaceIndex);
76
+ });
77
+ if (interfaces.length > 0)
78
+ writer.synthetic("\n\n", "interface/class separator", [module]);
71
79
  classes.forEach((declaration, classIndex) => {
72
80
  if (classIndex > 0)
73
81
  writer.synthetic("\n\n", "reference class separator", [declaration], [`/classes/${classIndex}`]);
@@ -148,6 +156,15 @@ function emitReferenceClass(writer, declaration, classIndex) {
148
156
  writer.mapped("final class", { mappingKind: "anchor", node: declaration, path });
149
157
  writer.synthetic(" ", "reference class spacing", [declaration], [path]);
150
158
  writer.mapped(declaration.name, { mappingKind: "exact", node: declaration, path, role: "name" });
159
+ const implemented = declaration.implements ?? [];
160
+ if (implemented.length > 0) {
161
+ writer.mapped(" implements ", { mappingKind: "anchor", node: declaration, path });
162
+ implemented.forEach((reference, referenceIndex) => {
163
+ if (referenceIndex > 0)
164
+ writer.mapped(", ", { mappingKind: "anchor", node: declaration, path });
165
+ emitType(writer, reference, `${path}/implements/${referenceIndex}`, "php");
166
+ });
167
+ }
151
168
  writer.synthetic(" {\n", "reference class open", [declaration], [path]);
152
169
  declaration.fields.forEach((field, index) => {
153
170
  const fieldPath = `${path}/fields/${index}`;
@@ -179,6 +196,42 @@ function emitReferenceClass(writer, declaration, classIndex) {
179
196
  writer.synthetic("\n", "line break", [declaration], [path]);
180
197
  writer.mapped("}", { mappingKind: "anchor", node: declaration, path });
181
198
  }
199
+ /**
200
+ * Emits one PHP native interface declaration with signature-only members.
201
+ * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
202
+ * @param {import("../semantic/types.js").InterfaceDeclaration} declaration - Semantic interface.
203
+ * @param {number} interfaceIndex - Declaration index.
204
+ * @returns {void}
205
+ */
206
+ function emitInterface(writer, declaration, interfaceIndex) {
207
+ const path = `/interfaces/${interfaceIndex}`;
208
+ writer.mapped("interface", { mappingKind: "anchor", node: declaration, path });
209
+ writer.synthetic(" ", "interface spacing", [declaration], [path]);
210
+ writer.mapped(declaration.name, { mappingKind: "exact", node: declaration, path, role: "name" });
211
+ const parents = declaration.extends ?? [];
212
+ if (parents.length > 0) {
213
+ writer.mapped(" extends ", { mappingKind: "anchor", node: declaration, path });
214
+ parents.forEach((parent, parentIndex) => {
215
+ if (parentIndex > 0)
216
+ writer.mapped(", ", { mappingKind: "anchor", node: declaration, path });
217
+ emitType(writer, parent, `${path}/extends/${parentIndex}`, "php");
218
+ });
219
+ }
220
+ writer.synthetic(" {\n", "interface open", [declaration], [path]);
221
+ declaration.methods.forEach((method, methodIndex) => {
222
+ const methodPath = `${path}/methods/${methodIndex}`;
223
+ if (methodIndex > 0)
224
+ writer.synthetic("\n", "line break", [method], [methodPath]);
225
+ writer.synthetic(" public function ", "interface method scaffolding", [method], [methodPath]);
226
+ writer.mapped(method.name, { mappingKind: "exact", node: method, path: methodPath, role: "name" });
227
+ emitPhpParameters(writer, method.parameters, `${methodPath}/parameters`);
228
+ writer.synthetic(": ", "interface method return separator", [method], [methodPath]);
229
+ emitNativePhpType(writer, method.returnType, `${methodPath}/returnType`);
230
+ writer.mapped(";", { mappingKind: "anchor", node: method, path: methodPath });
231
+ });
232
+ writer.synthetic("\n", "line break", [declaration], [path]);
233
+ writer.mapped("}", { mappingKind: "anchor", node: declaration, path });
234
+ }
182
235
  /**
183
236
  * Emits one PHP parameter list.
184
237
  * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
@@ -331,7 +384,7 @@ function emitNativePhpType(writer, type, path) {
331
384
  });
332
385
  return;
333
386
  }
334
- if (type.kind == "ReferenceType" || type.kind == "OwnedResourceType" || type.kind == "OwnedReferenceType") {
387
+ if (type.kind == "ReferenceType" || type.kind == "InterfaceType" || type.kind == "OwnedResourceType" || type.kind == "OwnedReferenceType") {
335
388
  emitType(writer, type, path, "php");
336
389
  return;
337
390
  }
@@ -341,7 +394,7 @@ function emitNativePhpType(writer, type, path) {
341
394
  }
342
395
  if (type.kind == "OptionalType") {
343
396
  writer.mapped("?", { mappingKind: "exact", node: type, path, role: "type" });
344
- if (type.valueType.kind == "RecordType")
397
+ if (type.valueType.kind == "RecordType" || type.valueType.kind == "InterfaceType")
345
398
  emitNativePhpType(writer, type.valueType, `${path}/valueType`);
346
399
  else if (type.valueType.kind == "TypeReference")
347
400
  emitType(writer, type.valueType, `${path}/valueType`, "php");
@@ -606,4 +659,4 @@ function emitLocal(writer, statement, indent, statementPath) {
606
659
  function phpIdentifier(name) {
607
660
  return `$${name}`;
608
661
  }
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3BocC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRWxFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPO1FBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBOztRQUNoRCxNQUFNLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNqRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFBO0lBRWxDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQTtRQUUvQixJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFB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YSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ25HLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBQ2pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtBQUNwRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQUk7SUFDekIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFBO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtlbWl0RXhwcmVzc2lvbiwgZW1pdFR5cGV9IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2VtaXRFZmZlY3RQcmVmaXhlcywgZW1pdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuL2VmZmVjdHMuanNcIlxuXG4vKipcbiAqIEVtaXRzIGFuIGluZGVwZW5kZW50bHkgZXhlY3V0YWJsZSBQSFAgcHJvZ3JhbSB0aHJvdWdoIHRoZSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGhwKG1vZHVsZSwgd3JpdGVyKSB7XG4gIGlmICh3cml0ZXIucHJvZ3JhbSkgZW1pdFByb2dyYW1IZWFkZXIobW9kdWxlLCB3cml0ZXIpXG4gIGVsc2Ugd3JpdGVyLnN5bnRoZXRpYyhcIjw/cGhwXFxuZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7XFxuXFxuXCIsIFwiUEhQIHByb2dyYW0gc2NhZmZvbGRpbmdcIiwgW21vZHVsZV0pXG4gIGVtaXRFZmZlY3RTdXBwb3J0KHdyaXRlciwgbW9kdWxlLCBcInBocFwiKVxuICBjb25zdCByZWNvcmRzID0gbW9kdWxlLnJlY29yZHMgPz8gW11cbiAgY29uc3QgY2xhc3NlcyA9IG1vZHVsZS5jbGFzc2VzID8/IFtdXG4gIGNvbnN0IGVycm9ycyA9IG1vZHVsZS5lcnJvcnMgPz8gW11cblxuICBlcnJvcnMuZm9yRWFjaCgoZXJyb3IsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGAvZXJyb3JzLyR7aW5kZXh9YFxuXG4gICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImVycm9yIGRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZXJyb3JdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcImZpbmFsIGNsYXNzXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXJyb3IsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZXJyb3IgZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbZXJyb3JdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlcnJvci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXJyb3IsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKHdyaXRlci5wcm9ncmFtID8gXCIgZXh0ZW5kcyBcXFxcUnVudGltZUV4Y2VwdGlvbiB7fVwiIDogXCIgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XCIsXG4gICAgICBcIlBIUCB1bmNoZWNrZWQgZXJyb3Igc2NhZmZvbGRpbmdcIiwgW2Vycm9yXSwgW3BhdGhdKVxuICB9KVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG5cIiwgXCJlcnJvci9kZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW21vZHVsZV0pXG5cbiAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQsIHJlY29yZEluZGV4KSA9PiB7XG4gICAgY29uc3QgcmVjb3JkUGF0aCA9IGAvcmVjb3Jkcy8ke3JlY29yZEluZGV4fWBcblxuICAgIGlmIChyZWNvcmRJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG5cIiwgXCJyZWNvcmQgZGVjbGFyYXRpb24gc2VwYXJhdG9yXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gICAgZW1pdFRlbXBsYXRlRG9jdW1lbnRhdGlvbih3cml0ZXIsIHJlY29yZC50eXBlUGFyYW1ldGVycyA/PyBbXSwgYCR7cmVjb3JkUGF0aH0vdHlwZVBhcmFtZXRlcnNgKVxuICAgIGlmICgocmVjb3JkLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICBlbWl0RG9jdW1lbnRlZEdlbmVyaWNSZWNvcmQod3JpdGVyLCByZWNvcmQsIHJlY29yZFBhdGgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcImZpbmFsIHJlYWRvbmx5IGNsYXNzXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogcmVjb3JkLCBwYXRoOiByZWNvcmRQYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJlY29yZCBkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChyZWNvcmQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHJlY29yZCwgcGF0aDogcmVjb3JkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcInJlY29yZCBjbGFzcyBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSByZWNvcmQuZmllbGRzLmZpbHRlcigoZmllbGQpID0+IHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24oZmllbGQudHlwZSkpXG5cbiAgICBpZiAoZG9jdW1lbnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIC8qKlxcblwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBkb2N1bWVudGVkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSByZWNvcmQuZmllbGRzLmluZGV4T2YoZmllbGQpXG4gICAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke3JlY29yZFBhdGh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9YFxuXG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICogQHBhcmFtIFwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBmaWVsZC50eXBlLCBgJHtmaWVsZFBhdGh9L3R5cGVgLCBcInBocFwiKVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICAgICAgd3JpdGVyLm1hcHBlZChgJCR7ZmllbGQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZmllbGQsIHBhdGg6IGZpZWxkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIHJlY29yZCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgICAgfVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICAgKi9cXG5cIiwgXCJQSFAgcmVjb3JkIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3JlY29yZF0sIFtyZWNvcmRQYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXFxuXCIsIFwiUEhQIHJlY29yZCBjb25zdHJ1Y3RvciBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgIHJlY29yZC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke3JlY29yZFBhdGh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9YFxuXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICAgICBwdWJsaWMgXCIsIFwiUEhQIHByb21vdGVkIGZpZWxkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBmaWVsZC50eXBlLCBgJHtmaWVsZFBhdGh9L3R5cGVgKVxuICAgICAgaWYgKGhhc05hdGl2ZVBocFR5cGUoZmllbGQudHlwZSkpIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiUEhQIHByb21vdGVkIGZpZWxkIHNwYWNpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGAkJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKGZpZWxkSW5kZXggKyAxID09IHJlY29yZC5maWVsZHMubGVuZ3RoID8gXCJcXG5cIiA6IFwiLFxcblwiLCBcIlBIUCBwcm9tb3RlZCBmaWVsZCBzZXBhcmF0b3JcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICkge31cXG59XCIsIFwiUEhQIHJlY29yZCBjb25zdHJ1Y3RvciBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICB9KVxuICBpZiAocmVjb3Jkcy5sZW5ndGggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuXCIsIFwicmVjb3JkL2Z1bmN0aW9uIHNlcGFyYXRvclwiLCBbbW9kdWxlXSlcblxuICBjbGFzc2VzLmZvckVhY2goKGRlY2xhcmF0aW9uLCBjbGFzc0luZGV4KSA9PiB7XG4gICAgaWYgKGNsYXNzSW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuXCIsIFwicmVmZXJlbmNlIGNsYXNzIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dLCBbYC9jbGFzc2VzLyR7Y2xhc3NJbmRleH1gXSlcbiAgICBlbWl0UmVmZXJlbmNlQ2xhc3Mod3JpdGVyLCBkZWNsYXJhdGlvbiwgY2xhc3NJbmRleClcbiAgfSlcbiAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcInJlZmVyZW5jZSBjbGFzcy9mdW5jdGlvbiBzZXBhcmF0b3JcIiwgW21vZHVsZV0pXG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgZnVuY3Rpb25JbmRleCkgPT4ge1xuICAgIGlmIChmdW5jdGlvbkluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuXG4gICAgY29uc3QgZG9jdW1lbnRlZFBhcmFtZXRlcnMgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4gW3BhcmFtZXRlciwgaW5kZXhdKVxuICAgICAgLmZpbHRlcigoW3BhcmFtZXRlcl0pID0+IHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJ9ICovIChwYXJhbWV0ZXIpLnR5cGUpKVxuICAgIGNvbnN0IGRvY3VtZW50ZWRSZXR1cm4gPSBwaHBUeXBlTmVlZHNEb2N1bWVudGF0aW9uKGRlY2xhcmF0aW9uLnJldHVyblR5cGUpXG5cbiAgICBpZiAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwIHx8IGRvY3VtZW50ZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgfHwgZG9jdW1lbnRlZFJldHVybikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIi8qKlxcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICAgIGZvciAoY29uc3QgW3BhcmFtZXRlckluZGV4LCBwYXJhbWV0ZXJdIG9mIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAdGVtcGxhdGUgXCIsIFwiUEhQIHR5cGUgcGFyYW1ldGVyIHNjYWZmb2xkaW5nXCIsIFtwYXJhbWV0ZXJdLCBbYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS90eXBlUGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBdKVxuICAgICAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7XG4gICAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3R5cGVQYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YCwgcm9sZTogXCJuYW1lXCJcbiAgICAgICAgfSlcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3BhcmFtZXRlcl0pXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjYW5kaWRhdGUsIGluZGV4XSBvZiBkb2N1bWVudGVkUGFyYW1ldGVycykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcn0gKi8gKGNhbmRpZGF0ZSlcbiAgICAgICAgY29uc3QgcGFyYW1ldGVySW5kZXggPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGluZGV4KVxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAcGFyYW0gXCIsIFwiUEhQIGNvbGxlY3Rpb24gdHlwZSBzY2FmZm9sZGluZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIHBhcmFtZXRlci50eXBlLCBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgY29sbGVjdGlvbiB0eXBlIHNjYWZmb2xkaW5nXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICAgIHdyaXRlci5tYXBwZWQoYCQke3BhcmFtZXRlci5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudGVkUmV0dXJuKSB7XG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAcmV0dXJuIFwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3JldHVyblR5cGVgLCBcInBocFwiKVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIGNvbGxlY3Rpb24gdHlwZSBzY2FmZm9sZGluZ1wiLCBbZGVjbGFyYXRpb25dKVxuICAgICAgfVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqL1xcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcImZ1bmN0aW9uXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb259KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZnVuY3Rpb24gc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dKVxuICAgIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbn0pXG4gICAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9wYXJhbWV0ZXJzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIFtkZWNsYXJhdGlvbl0pXG4gICAgICBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIHBhcmFtZXRlci50eXBlLCBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYClcbiAgICAgIGlmIChoYXNOYXRpdmVQaHBUeXBlKHBhcmFtZXRlci50eXBlKSkgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJwYXJhbWV0ZXIgc3BhY2luZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChgJCR7cGFyYW1ldGVyLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbn0pXG4gICAgaWYgKGhhc05hdGl2ZVBocFR5cGUoZGVjbGFyYXRpb24ucmV0dXJuVHlwZSkpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcInJldHVybiB0eXBlIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuICAgICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3JldHVyblR5cGVgKVxuICAgIH1cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb259KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0pXG5cbiAgICBlbWl0QmxvY2sod3JpdGVyLCBkZWNsYXJhdGlvbi5ib2R5LCBcIiAgICBcIiwgYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9ib2R5YClcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9ufSlcbiAgfSlcblxuICBpZiAoIXdyaXRlci5wcm9ncmFtIHx8IHdyaXRlci5pc1Byb2dyYW1FbnRyeSgpKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImVudHJ5LXBvaW50IHNlcGFyYXRvclwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiXCIsIFwiL2VudHJ5UG9pbnQvYm9keVwiKVxuICB9XG59XG5cbi8qKlxuICogRW1pdHMgb25lIG5hdGl2ZSBQSFAgcmVmZXJlbmNlIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUmVmZXJlbmNlIGNsYXNzLlxuICogQHBhcmFtIHtudW1iZXJ9IGNsYXNzSW5kZXggLSBNb2R1bGUgY2xhc3MgaW5kZXguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFJlZmVyZW5jZUNsYXNzKHdyaXRlciwgZGVjbGFyYXRpb24sIGNsYXNzSW5kZXgpIHtcbiAgY29uc3QgcGF0aCA9IGAvY2xhc3Nlcy8ke2NsYXNzSW5kZXh9YFxuXG4gIHdyaXRlci5tYXBwZWQoXCJmaW5hbCBjbGFzc1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJyZWZlcmVuY2UgY2xhc3Mgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcInJlZmVyZW5jZSBjbGFzcyBvcGVuXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgZGVjbGFyYXRpb24uZmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke3BhdGh9L2ZpZWxkcy8ke2luZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgcHJpdmF0ZSBcIiwgXCJwcml2YXRlIGZpZWxkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXROYXRpdmVQaHBUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYClcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICRcIiwgXCJwcml2YXRlIGZpZWxkIHNwYWNpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChmaWVsZC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZmllbGQsIHBhdGg6IGZpZWxkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwibGluZSBicmVha1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgfSlcbiAgY29uc3QgY29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvclxuICBjb25zdCBjb25zdHJ1Y3RvclBhdGggPSBgJHtwYXRofS9jb25zdHJ1Y3RvcmBcblxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuICAgIHB1YmxpYyBmdW5jdGlvbiBcIiwgXCJjb25zdHJ1Y3RvciBzY2FmZm9sZGluZ1wiLCBbY29uc3RydWN0b3JdLCBbY29uc3RydWN0b3JQYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIl9fY29uc3RydWN0XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBjb25zdHJ1Y3RvciwgcGF0aDogY29uc3RydWN0b3JQYXRoLCByb2xlOiBcImNvbnN0cnVjdG9yXCJ9KVxuICBlbWl0UGhwUGFyYW1ldGVycyh3cml0ZXIsIGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMsIGAke2NvbnN0cnVjdG9yUGF0aH0vcGFyYW1ldGVyc2ApXG4gIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcImNvbnN0cnVjdG9yIG9wZW5cIiwgW2NvbnN0cnVjdG9yXSwgW2NvbnN0cnVjdG9yUGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIGNvbnN0cnVjdG9yLmJvZHksIFwiICAgICAgICBcIiwgYCR7Y29uc3RydWN0b3JQYXRofS9ib2R5YClcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICB9XCIsIFwiY29uc3RydWN0b3IgY2xvc2VcIiwgW2NvbnN0cnVjdG9yXSwgW2NvbnN0cnVjdG9yUGF0aF0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMuZm9yRWFjaCgobWV0aG9kLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZFBhdGggPSBgJHtwYXRofS9tZXRob2RzLyR7aW5kZXh9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcbiAgICBwdWJsaWMgZnVuY3Rpb24gXCIsIFwibWV0aG9kIHNjYWZmb2xkaW5nXCIsIFttZXRob2RdLCBbbWV0aG9kUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChtZXRob2QubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IG1ldGhvZCwgcGF0aDogbWV0aG9kUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIGVtaXRQaHBQYXJhbWV0ZXJzKHdyaXRlciwgbWV0aG9kLnBhcmFtZXRlcnMsIGAke21ldGhvZFBhdGh9L3BhcmFtZXRlcnNgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcIm1ldGhvZCByZXR1cm4gc2VwYXJhdG9yXCIsIFttZXRob2RdLCBbbWV0aG9kUGF0aF0pXG4gICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBtZXRob2QucmV0dXJuVHlwZSwgYCR7bWV0aG9kUGF0aH0vcmV0dXJuVHlwZWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiB7XFxuXCIsIFwibWV0aG9kIG9wZW5cIiwgW21ldGhvZF0sIFttZXRob2RQYXRoXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBtZXRob2QuYm9keSwgXCIgICAgICAgIFwiLCBgJHttZXRob2RQYXRofS9ib2R5YClcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIH1cIiwgXCJtZXRob2QgY2xvc2VcIiwgW21ldGhvZF0sIFttZXRob2RQYXRoXSlcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgUEhQIHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gT3JkZXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXJhbWV0ZXIgY29sbGVjdGlvbiBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRQaHBQYXJhbWV0ZXJzKHdyaXRlciwgcGFyYW1ldGVycywgcGF0aCkge1xuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcInBhcmFtZXRlciBsaXN0IG9wZW5cIiwgcGFyYW1ldGVycylcbiAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9LyR7aW5kZXh9YFxuXG4gICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIHBhcmFtZXRlcnMpXG4gICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBwYXJhbWV0ZXIudHlwZSwgYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAkXCIsIFwicGFyYW1ldGVyIHNwYWNpbmdcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBwYXJhbWV0ZXJQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwicGFyYW1ldGVyIGxpc3QgY2xvc2VcIiwgcGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBFbWl0cyBQSFAncyBleGFjdCBkb2N1bWVudGVkIGdlbmVyaWMtcmVjb3JkIHByb2ZpbGUuIFByaXZhdGUgcHJvbW90ZWQgc3RvcmFnZVxuICogcGx1cyBwdWJsaWMgZ2V0dGVycyBwcmVzZXJ2ZXMgcmVjb3JkIGltbXV0YWJpbGl0eSB3aGVuIGEgdHlwZSB2YXJpYWJsZSBoYXMgbm9cbiAqIGZhaXRoZnVsIG5hdGl2ZSBwcm9wZXJ0eSB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSByZWNvcmQgLSBHZW5lcmljIHNlbWFudGljIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWNvcmRQYXRoIC0gRXhhY3QgcmVjb3JkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGVtaXREb2N1bWVudGVkR2VuZXJpY1JlY29yZCh3cml0ZXIsIHJlY29yZCwgcmVjb3JkUGF0aCkge1xuICB3cml0ZXIubWFwcGVkKFwiZmluYWwgY2xhc3NcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiByZWNvcmQsIHBhdGg6IHJlY29yZFBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJlY29yZCBkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gIHdyaXRlci5tYXBwZWQocmVjb3JkLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiByZWNvcmQsIHBhdGg6IHJlY29yZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiB7XFxuICAgIC8qKlxcblwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gIHJlY29yZC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZFBhdGggPSBgJHtyZWNvcmRQYXRofS9maWVsZHMvJHtmaWVsZEluZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICogQHBhcmFtIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke2ZpZWxkLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGZpZWxkLCBwYXRoOiBmaWVsZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIGRvY3VtZW50ZWQgZ2VuZXJpYyByZWNvcmQgc2NhZmZvbGRpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICovXFxuICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcXG5cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIHJlY29yZCBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICByZWNvcmQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBmaWVsZEluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRQYXRoID0gYCR7cmVjb3JkUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICAgICBwcml2YXRlIFwiLCBcIlBIUCBwcml2YXRlIHByb21vdGVkIGZpZWxkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXROYXRpdmVQaHBUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYClcbiAgICBpZiAoaGFzTmF0aXZlUGhwVHlwZShmaWVsZC50eXBlKSkgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgcHJvbW90ZWQgZmllbGQgc3BhY2luZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhmaWVsZEluZGV4ICsgMSA9PSByZWNvcmQuZmllbGRzLmxlbmd0aCA/IFwiXFxuXCIgOiBcIixcXG5cIiwgXCJQSFAgcHJvbW90ZWQgZmllbGQgc2VwYXJhdG9yXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiICAgICkge31cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIHJlY29yZCBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICByZWNvcmQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBmaWVsZEluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRQYXRoID0gYCR7cmVjb3JkUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuICAgIC8qKlxcbiAgICAgKiBAcmV0dXJuIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuICAgICAqL1xcbiAgICBwdWJsaWMgZnVuY3Rpb24gXCIsIFwiUEhQIGRvY3VtZW50ZWQgZ2VuZXJpYyBnZXR0ZXIgc2NhZmZvbGRpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChmaWVsZC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZmllbGQsIHBhdGg6IGZpZWxkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoKVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGlmIChoYXNOYXRpdmVQaHBUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJQSFAgZ2V0dGVyIHJldHVybiB0eXBlIHNwYWNpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgICBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIGZpZWxkLnR5cGUsIGAke2ZpZWxkUGF0aH0vdHlwZWApXG4gICAgfVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcbiAgICAgICAgcmV0dXJuICR0aGlzLT5cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIGdldHRlciBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGZpZWxkLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIjtcXG4gICAgfVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxufVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBzdGFuZGFsb25lIFBIUERvYyB0ZW1wbGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBPcmRlcmVkIHR5cGUgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVHlwZS1wYXJhbWV0ZXIgY29sbGVjdGlvbiBwYXRoLlxuICovXG5mdW5jdGlvbiBlbWl0VGVtcGxhdGVEb2N1bWVudGF0aW9uKHdyaXRlciwgcGFyYW1ldGVycywgcGF0aCkge1xuICBpZiAocGFyYW1ldGVycy5sZW5ndGggPT0gMCkgcmV0dXJuXG4gIHdyaXRlci5zeW50aGV0aWMoXCIvKipcXG5cIiwgXCJQSFAgdHlwZSBwYXJhbWV0ZXIgc2NhZmZvbGRpbmdcIiwgcGFyYW1ldGVycylcbiAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqIEB0ZW1wbGF0ZSBcIiwgXCJQSFAgdHlwZSBwYXJhbWV0ZXIgc2NhZmZvbGRpbmdcIiwgW3BhcmFtZXRlcl0sIFtgJHtwYXRofS8ke2luZGV4fWBdKVxuICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IGAke3BhdGh9LyR7aW5kZXh9YCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtwYXJhbWV0ZXJdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiICovXFxuXCIsIFwiUEhQIHR5cGUgcGFyYW1ldGVyIHNjYWZmb2xkaW5nXCIsIHBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogRW1pdHMgb25lIGNhbm9uaWNhbCBuYW1lc3BhY2UsIGV4cGxpY2l0IGltcG9ydHMsIGFuZCBtYXRjaGluZyBsaXRlcmFsIGxvYWQgZWRnZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDdXJyZW50IHByb2dyYW0gbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVtaXRQcm9ncmFtSGVhZGVyKG1vZHVsZSwgd3JpdGVyKSB7XG4gIGNvbnN0IHByb2dyYW1Nb2R1bGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG1vZHVsZSkpXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhgPD9waHBcXG5kZWNsYXJlKHN0cmljdF90eXBlcz0xKTtcXG5uYW1lc3BhY2UgU2VtYW50aWZvbGRcXFxcR2VuZXJhdGVkXFxcXCR7d3JpdGVyLnByb2dyYW1Nb2R1bGVOYW1lKHByb2dyYW1Nb2R1bGUuaWQpfTtcXG5gLFxuICAgIFwiUEhQIHNlbWFudGljIG5hbWVzcGFjZVwiLCBbbW9kdWxlXSlcbiAgZm9yIChjb25zdCBpbXBvcnRlZCBvZiBwcm9ncmFtTW9kdWxlLmltcG9ydHMpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5ID0gd3JpdGVyLnByb2dyYW1Nb2R1bGVOYW1lKGltcG9ydGVkLm1vZHVsZUlkKVxuICAgIGNvbnN0IHByZWZpeCA9IGltcG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJmdW5jdGlvblwiID8gXCJ1c2UgZnVuY3Rpb25cIiA6IFwidXNlXCJcbiAgICBjb25zdCBpbXBvcnRQYXRoID0gYC9pbXBvcnRzLyR7cHJvZ3JhbU1vZHVsZS5pbXBvcnRzLmluZGV4T2YoaW1wb3J0ZWQpfWBcbiAgICBjb25zdCBsb2NhbE5hbWUgPSB3cml0ZXIuaW1wb3J0TmFtZUZvcihpbXBvcnRlZClcblxuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7cHJlZml4fSBTZW1hbnRpZm9sZFxcXFxHZW5lcmF0ZWRcXFxcJHtkZXBlbmRlbmN5fVxcXFxgLCBcIlBIUCBzZW1hbnRpYyBpbXBvcnRcIiwgW2ltcG9ydGVkXSwgW2ltcG9ydFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoaW1wb3J0ZWQuaW1wb3J0ZWROYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogaW1wb3J0ZWQsIHBhdGg6IGltcG9ydFBhdGgsIHJvbGU6IFwiaW1wb3J0ZWROYW1lXCJ9KVxuICAgIGlmIChsb2NhbE5hbWUgIT0gaW1wb3J0ZWQuaW1wb3J0ZWROYW1lKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIGFzIFwiLCBcIlBIUCBzZW1hbnRpYyBpbXBvcnQgYWxpYXNcIiwgW2ltcG9ydGVkXSwgW2ltcG9ydFBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChsb2NhbE5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBpbXBvcnRlZCwgcGF0aDogaW1wb3J0UGF0aCwgcm9sZTogXCJsb2NhbE5hbWVcIn0pXG4gICAgfVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHNlbWFudGljIGltcG9ydCB0ZXJtaW5hdG9yXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgfVxuICBmb3IgKGNvbnN0IG1vZHVsZUlkIG9mIFsuLi5uZXcgU2V0KHByb2dyYW1Nb2R1bGUuaW1wb3J0cy5tYXAoKGl0ZW0pID0+IGl0ZW0ubW9kdWxlSWQpKV0pIHtcbiAgICBjb25zdCByZWxhdGl2ZSA9IHdyaXRlci5yZWxhdGl2ZU1vZHVsZVNwZWNpZmllcihtb2R1bGVJZCkucmVwbGFjZSgvXlxcLlxcLy91LCBcIlwiKVxuICAgIGNvbnN0IGltcG9ydGVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0ltcG9ydH0gKi8gKFxuICAgICAgcHJvZ3JhbU1vZHVsZS5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubW9kdWxlSWQgPT0gbW9kdWxlSWQpKVxuICAgIGNvbnN0IGltcG9ydFBhdGggPSBgL2ltcG9ydHMvJHtwcm9ncmFtTW9kdWxlLmltcG9ydHMuaW5kZXhPZihpbXBvcnRlZCl9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcInJlcXVpcmVfb25jZSBfX0RJUl9fIC4gXCIsIFwiUEhQIHJlcXVpcmUtb25jZSBlZGdlXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKEpTT04uc3RyaW5naWZ5KGAvJHtyZWxhdGl2ZX1gKSwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBpbXBvcnRlZCwgcGF0aDogaW1wb3J0UGF0aCwgcm9sZTogXCJwYXRoXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHJlcXVpcmUtb25jZSB0ZXJtaW5hdG9yXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgfVxuICBpZiAod3JpdGVyLnN0ZGxpYlByb3ZpZGVyRW50cmllcykge1xuICAgIGZvciAoY29uc3QgcHJvdmlkZXJQYXRoIG9mIHdyaXRlci5zdGRsaWJQcm92aWRlclBhdGhzID8/IFtdKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IHdyaXRlci5zdGRsaWJQcm92aWRlclNwZWNpZmllcih1bmRlZmluZWQsIHByb3ZpZGVyUGF0aCkucmVwbGFjZSgvXlxcLlxcLy91LCBcIlwiKVxuXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwicmVxdWlyZV9vbmNlIF9fRElSX18gLiBcIiwgXCJQSFAgc3RkbGliIHByb3ZpZGVyIHJlcXVpcmUtb25jZSBlZGdlXCIsIFttb2R1bGVdKVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhKU09OLnN0cmluZ2lmeShgLyR7cmVsYXRpdmV9YCksIFwiUEhQIHN0ZGxpYiBwcm92aWRlciByZXF1aXJlLW9uY2UgcGF0aFwiLCBbbW9kdWxlXSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHN0ZGxpYiBwcm92aWRlciByZXF1aXJlLW9uY2UgdGVybWluYXRvclwiLCBbbW9kdWxlXSlcbiAgICB9XG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcIlBIUCBuYW1lc3BhY2UvZGVjbGFyYXRpb24gc2VwYXJhdG9yXCIsIFttb2R1bGVdKVxufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIFBIUCBuYXRpdmUgdHlwZSBuZWVkcyBhbiBhY2NvbXBhbnlpbmcgcmVjdXJzaXZlIFBIUERvYyB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHlwZSBjb250YWlucyBhIGNvbGxlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24odHlwZSkge1xuICByZXR1cm4gdHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIgfHwgdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgfHxcbiAgICB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiIHx8XG4gICAgdHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmICh0eXBlLmFyZ3VtZW50cz8ubGVuZ3RoID8/IDApID4gMCB8fFxuICAgIHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24odHlwZS52YWx1ZVR5cGUpXG59XG5cbi8qKlxuICogRW1pdHMgdGhlIGV4YWN0IG5hdGl2ZSBQSFAgY2FycmllciB3aGlsZSByZXRhaW5pbmcgcmVjdXJzaXZlIHR5cGUgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCB0eXBlIG9jY3VycmVuY2UgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIHR5cGUsIHBhdGgpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiIHx8IHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHR5cGUudmFsdWVUeXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSB3cml0ZXIucmVjb3JkRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIucmVjb3JkTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiIHx8IHR5cGUua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLCBwYXRoLCBcInBocFwiKVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUsIHBhdGgsIFwicGhwXCIpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIj9cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICBpZiAodHlwZS52YWx1ZVR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYClcbiAgICBlbHNlIGlmICh0eXBlLnZhbHVlVHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSBlbWl0VHlwZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBcInBocFwiKVxuICAgIGVsc2Ugd3JpdGVyLm1hcHBlZChcImFycmF5XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICB3cml0ZXIubWFwcGVkKFwiYXJyYXlcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgUEhQIGhhcyBhIGZhaXRoZnVsIG5hdGl2ZSBjYXJyaWVyIGZvciBvbmUgZXhhY3Qgc2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYSBuYXRpdmUgYW5ub3RhdGlvbiBjYW4gYmUgZW1pdHRlZC5cbiAqL1xuZnVuY3Rpb24gaGFzTmF0aXZlUGhwVHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmtpbmQgIT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIiAmJlxuICAgICEodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgJiYgdHlwZS52YWx1ZVR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBvcmRlcmVkIFBIUCBibG9jayBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBibG9jayBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRCbG9jayh3cml0ZXIsIGJsb2NrLCBpbmRlbnQsIHBhdGgpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gKSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgUEhQIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFNlbWFudGljIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBJbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRXhhY3Qgc3RhdGVtZW50IHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIGVtaXRFZmZlY3RQcmVmaXhlcyh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCBcInBocFwiLFxuICAgIChleHByZXNzaW9uLCBleHByZXNzaW9uUGF0aCkgPT4gZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBleHByZXNzaW9uUGF0aCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcikpXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikgcmV0dXJuIGVtaXRMb2NhbCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChzdGF0ZW1lbnQuZmllbGQpXG5cbiAgICB3cml0ZXIubWFwcGVkKGAtPiR7ZmllbGQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiID0gXCIsIFwicHJpdmF0ZSBmaWVsZCBhc3NpZ25tZW50XCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5raW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJ3aGlsZVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIChcIiwgXCJjb25kaXRpb24tY29udHJvbGxlZCBsb29wIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmJvZHksIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vYm9keWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5ib2R5LCBwYXRoOiBgJHtwYXRofS9ib2R5YH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiZm9yZWFjaFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAoXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50Lmxpc3QsIGAke3BhdGh9L2xpc3RgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgYXMgXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS92YWx1ZUJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5ib2R5LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcImZvcmVhY2hcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKFwiLCBcIm1hcCBsb29wIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQubWFwLCBgJHtwYXRofS9tYXBgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgYXMgXCIsIFwibWFwIGxvb3Agc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQua2V5QmluZGluZy5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC5rZXlCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS9rZXlCaW5kaW5nYCwgcm9sZTogXCJuYW1lXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgPT4gXCIsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNlcGFyYXRvclwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS92YWx1ZUJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwibWFwIGxvb3Agc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5ib2R5LCBwYXRoOiBgJHtwYXRofS9ib2R5YH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuYm9keSwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9ib2R5YClcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCB0eXBlID0gc3RhdGVtZW50LmVycm9yLmVycm9yXG4gICAgY29uc3QgZXJyb3IgPSB3cml0ZXIuZXJyb3JGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKFwidGhyb3dcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgbmV3IFwiLCBcImVycm9yIGNvbnN0cnVjdGlvbiBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50LmVycm9yXSwgW2Ake3BhdGh9L2Vycm9yYF0pXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuZXJyb3JOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGVycm9yLm5hbWUsIG5vZGU6IHN0YXRlbWVudC5lcnJvciwgcGF0aDogYCR7cGF0aH0vZXJyb3JgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gb3BlblwiLCBbc3RhdGVtZW50LmVycm9yXSwgW2Ake3BhdGh9L2Vycm9yYF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSwgYCR7cGF0aH0vZXJyb3IvbWVzc2FnZWAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIik7XFxuXCIsIFwiZXJyb3IgY29uc3RydWN0aW9uIGNsb3NlXCIsIFtzdGF0ZW1lbnQuZXJyb3JdLCBbYCR7cGF0aH0vZXJyb3JgXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXRocm93U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwidGhyb3dcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwidGhyb3cgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC5iaW5kaW5nfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQuYmluZGluZ05vZGUsIHBhdGg6IGAke3BhdGh9L2JpbmRpbmdOb2RlYCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcInRyeVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJ0cnkgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5ib2R5LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIGZvciAoY29uc3QgW2luZGV4LCBoYW5kbGVyXSBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGAke3BhdGh9L2hhbmRsZXJzLyR7aW5kZXh9YFxuICAgICAgY29uc3QgY2F1Z2h0ID0gd3JpdGVyLmVycm9yRm9ySWQoaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjYXRjaCBzcGFjaW5nXCIsIFtoYW5kbGVyXSwgW2hhbmRsZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjYXRjaFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGhhbmRsZXIsIHBhdGg6IGhhbmRsZXJQYXRoLCByb2xlOiBcImNhdGNoXCJ9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAoXCIsIFwiY2F0Y2ggYmluZGluZyBzY2FmZm9sZGluZ1wiLCBbaGFuZGxlci5jYXRjaEJpbmRpbmddLCBbYCR7aGFuZGxlclBhdGh9L2NhdGNoQmluZGluZ2BdKVxuICAgICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuZXJyb3JOYW1lRm9ySWQoaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZCksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBjYXVnaHQubmFtZSwgbm9kZTogaGFuZGxlci5jYXRjaFR5cGUsIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaFR5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNhdGNoIGJpbmRpbmcgc3BhY2luZ1wiLCBbaGFuZGxlci5jYXRjaEJpbmRpbmddLCBbYCR7aGFuZGxlclBhdGh9L2NhdGNoQmluZGluZ2BdKVxuICAgICAgd3JpdGVyLm1hcHBlZChgJCR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogaGFuZGxlci5jYXRjaEJpbmRpbmcsIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaEJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiKSBcIiwgXCJjYXRjaCBiaW5kaW5nIHNjYWZmb2xkaW5nXCIsIFtoYW5kbGVyLmNhdGNoQmluZGluZ10sIFtgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCaW5kaW5nYF0pXG4gICAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGhhbmRsZXIuY2F0Y2hCb2R5LCBwYXRoOiBgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCb2R5YH0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbaGFuZGxlcl0sIFtoYW5kbGVyUGF0aF0pXG4gICAgICBlbWl0QmxvY2sod3JpdGVyLCBoYW5kbGVyLmNhdGNoQm9keSwgYCR7aW5kZW50fSAgICBgLCBgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCb2R5YClcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtoYW5kbGVyXSwgW2hhbmRsZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogaGFuZGxlci5jYXRjaEJvZHksIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaEJvZHlgfSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJmaW5hbGx5IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJmaW5hbGx5XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcImZpbmFsbHlcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJmaW5hbGx5IHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuZmluYWxseUJvZHksIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vZmluYWxseUJvZHlgKVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmZpbmFsbHlCb2R5LCBwYXRoOiBgJHtwYXRofS9maW5hbGx5Qm9keWB9KVxuICAgIH1cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcInJldHVyblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJlY2hvXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInByaW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJQSFAgcHJpbnQgc2VwYXJhdG9yXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIlBIUF9FT0xcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIHdyaXRlci5tYXBwZWQoXCJpZlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNvbmRpdGlvbmFsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9jb25zZXF1ZW50YClcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJlbHNlXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNvbmRpdGlvbmFsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5hbHRlcm5hdGUsIHBhdGg6IGAke3BhdGh9L2FsdGVybmF0ZWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9hbHRlcm5hdGVgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBQSFAgbG9jYWwgc3RhdGVtZW50IHdpdGggaXRzIGV4YWN0IFNlbWFudGlmb2xkIHByb2ZpbGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnR9IHN0YXRlbWVudCAtIExvY2FsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBMZWFkaW5nIGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudFBhdGggLSBFeGFjdCBKU09OIFBvaW50ZXIgZm9yIHRoaXMgc3RhdGVtZW50IG9jY3VycmVuY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdExvY2FsKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHN0YXRlbWVudFBhdGgpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcblxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQudGFyZ2V0Lm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50YXJnZXQsIHBhdGg6IGAke3N0YXRlbWVudFBhdGh9L3RhcmdldGAsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGg6IHN0YXRlbWVudFBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnQubXV0YWJsZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIvKiogQHZhciBcIiwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgc3RhdGVtZW50LnR5cGUsIGAke3N0YXRlbWVudFBhdGh9L3R5cGVgLCBcInBocFwiKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiUEhQIGxvY2FsIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoOiBzdGF0ZW1lbnRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqL1xcblwiLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gIH0gZWxzZSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIi8qKlxcblwiLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9ICogQHZhciBgLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCBzdGF0ZW1lbnQudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vdHlwZWAsIFwicGhwXCIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGg6IHN0YXRlbWVudFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKGBcXG4ke2luZGVudH0gKiBAc2VtYW50aWZvbGQtaW1tdXRhYmxlXFxuJHtpbmRlbnR9ICovXFxuYCwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICB9XG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChgJCR7c3RhdGVtZW50Lm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoOiBzdGF0ZW1lbnRQYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7c3RhdGVtZW50UGF0aH0vaW5pdGlhbGl6ZXJgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG59XG5cbi8qKlxuICogRm9ybWF0cyBvbmUgUEhQIHZhcmlhYmxlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFNlbWFudGljIGlkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQSFAgaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gcGhwSWRlbnRpZmllcihuYW1lKSB7XG4gIHJldHVybiBgJCR7bmFtZX1gXG59XG4iXX0=
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3BocC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRWxFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPO1FBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBOztRQUNoRCxNQUFNLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNqRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFBO0lBQzFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFBO0lBRWxDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQTtRQUUvQixJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN4RSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixFQUNqRyxpQ0FBaUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRXhGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxVQUFVLEdBQUcsWUFBWSxXQUFXLEVBQUUsQ0FBQTtRQUU1QyxJQUFJLFdBQVcsR0FBRyxDQUFDO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDckcseUJBQXlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLEdBQUcsVUFBVSxpQkFBaUIsQ0FBQyxDQUFBO1FBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ3ZELE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUM5RixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUMzRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNoRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUM1RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFekYsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLDZCQUE2QixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBQ3BGLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUMvQyxNQUFNLFNBQVMsR0FBRyxHQUFHLFVBQVUsV0FBVyxVQUFVLEVBQUUsQ0FBQTtnQkFFdEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtnQkFDdkYsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLDZCQUE2QixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO2dCQUMxRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7Z0JBQ25HLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQzdFLENBQUM7WUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSw2QkFBNkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN0RixDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUNwSCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFNBQVMsR0FBRyxHQUFHLFVBQVUsV0FBVyxVQUFVLEVBQUUsQ0FBQTtZQUV0RCxNQUFNLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGdDQUFnQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQzNGLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxPQUFPLENBQUMsQ0FBQTtZQUMxRCxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDM0csTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1lBQ25HLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDL0gsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUMvRixDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRXZGLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUU7UUFDakQsSUFBSSxjQUFjLEdBQUcsQ0FBQztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxlQUFlLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN6SCxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRTFGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDMUMsSUFBSSxVQUFVLEdBQUcsQ0FBQztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLDJCQUEyQixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxZQUFZLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNwSCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFaEcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEVBQUU7UUFDdEQsSUFBSSxhQUFhLEdBQUcsQ0FBQztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHVCQUF1QixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUV2RixNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDOUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsdURBQXVELENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQy9ILE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUMzRSxLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3ZGLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLGdDQUFnQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLGFBQWEsbUJBQW1CLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDbEosTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO29CQUM1QixXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsYUFBYSxtQkFBbUIsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU07aUJBQzFILENBQUMsQ0FBQTtnQkFDRixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ25ELENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxTQUFTLEdBQUcsdURBQXVELENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDckYsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDcEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxhQUFhLGVBQWUsY0FBYyxFQUFFLENBQUE7Z0JBRWhGLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLGlDQUFpQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO2dCQUMvRixRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxhQUFhLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDaEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7Z0JBQ3RGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtnQkFDL0csTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDekYsQ0FBQztZQUNELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO2dCQUNqRixRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxhQUFhLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDekYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1lBQzFFLENBQUM7WUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDN0UsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUNyRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUM5RCxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsRCxNQUFNLGFBQWEsR0FBRyxjQUFjLGFBQWEsZUFBZSxLQUFLLEVBQUUsQ0FBQTtZQUV2RSxJQUFJLEtBQUssR0FBRyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUMzRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLGFBQWEsT0FBTyxDQUFDLENBQUE7WUFDbEUsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1lBQzlHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNqSCxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUM5RCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUM5RCxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxjQUFjLGFBQWEsYUFBYSxDQUFDLENBQUE7UUFDN0YsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1FBQzlELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFFbkQsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLGFBQWEsT0FBTyxDQUFDLENBQUE7UUFDL0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFBO0lBQ2hFLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN0RSxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVU7SUFDekQsTUFBTSxJQUFJLEdBQUcsWUFBWSxVQUFVLEVBQUUsQ0FBQTtJQUVyQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHlCQUF5QixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDOUYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUE7SUFFaEQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDL0UsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsRUFBRTtZQUNoRCxJQUFJLGNBQWMsR0FBRyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7WUFDN0YsUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLGVBQWUsY0FBYyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDNUUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDdkUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLFdBQVcsS0FBSyxFQUFFLENBQUE7UUFFM0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDbkYsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFBO1FBQzFELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUM3RCxDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUE7SUFDM0MsTUFBTSxlQUFlLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQTtJQUU3QyxNQUFNLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQ3ZHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFDbkgsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxlQUFlLGFBQWEsQ0FBQyxDQUFBO0lBQ2xGLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQzlFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxlQUFlLE9BQU8sQ0FBQyxDQUFBO0lBQzFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQ2hGLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzVDLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxZQUFZLEtBQUssRUFBRSxDQUFBO1FBRTdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDMUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDaEcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLGFBQWEsQ0FBQyxDQUFBO1FBQ3hFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3pFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsVUFBVSxhQUFhLENBQUMsQ0FBQTtRQUN4RSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDL0QsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLFVBQVUsT0FBTyxDQUFDLENBQUE7UUFDaEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ25FLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYztJQUN4RCxNQUFNLElBQUksR0FBRyxlQUFlLGNBQWMsRUFBRSxDQUFBO0lBRTVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7SUFDNUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUM5RixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUV6QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUM1RSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3RDLElBQUksV0FBVyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtZQUMxRixRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksWUFBWSxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNqRSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksWUFBWSxXQUFXLEVBQUUsQ0FBQTtRQUVuRCxJQUFJLFdBQVcsR0FBRyxDQUFDO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDaEcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDaEcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLGFBQWEsQ0FBQyxDQUFBO1FBQ3hFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ25GLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsVUFBVSxhQUFhLENBQUMsQ0FBQTtRQUN4RSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUM3RSxDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSTtJQUNqRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUN4RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFBO1FBRXhDLElBQUksS0FBSztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ3BFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsYUFBYSxPQUFPLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUN6RSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUMzRyxDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVU7SUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDckYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDaEcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDdEcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxVQUFVLFdBQVcsVUFBVSxFQUFFLENBQUE7UUFFdEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSwyQ0FBMkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNyRyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN4RCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSwyQ0FBMkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUN4RixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDbkcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDM0YsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLDZDQUE2QyxFQUFFLDJDQUEyQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3BJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsVUFBVSxXQUFXLFVBQVUsRUFBRSxDQUFBO1FBRXRELE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDcEcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFBO1FBQzFELElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLDRCQUE0QixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQzNHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNuRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLDhCQUE4QixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQy9ILENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDakcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxVQUFVLFdBQVcsVUFBVSxFQUFFLENBQUE7UUFFdEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsRUFBRSwyQ0FBMkMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNuSCxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN4RCxNQUFNLENBQUMsU0FBUyxDQUFDLGlDQUFpQyxFQUFFLDJDQUEyQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3RILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDJDQUEyQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pGLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDOUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFBO1FBQzVELENBQUM7UUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLDRCQUE0QixFQUFFLDJDQUEyQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ2pILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLDJDQUEyQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ2pHLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFDOUYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUk7SUFDekQsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFNO0lBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0RyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzlHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN6RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU07SUFDdkMsTUFBTSxhQUFhLEdBQUcsbUVBQW1FLENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRTNILE1BQU0sQ0FBQyxTQUFTLENBQUMsc0VBQXNFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssRUFDcEksd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLEtBQUssTUFBTSxRQUFRLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDOUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ3pFLE1BQU0sVUFBVSxHQUFHLFlBQVksYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtRQUN4RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRWhELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLDRCQUE0QixVQUFVLElBQUksRUFBRSxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN0SCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQTtRQUNwSCxJQUFJLFNBQVMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFDL0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUN2RyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDckYsQ0FBQztJQUNELEtBQUssTUFBTSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDL0UsTUFBTSxRQUFRLEdBQUcsNERBQTRELENBQUMsQ0FDNUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLFVBQVUsR0FBRyxZQUFZLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7UUFFeEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUM5RixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDdEgsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakMsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBRTlGLE1BQU0sQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQzlGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ25HLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLDZDQUE2QyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUN6RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMseUJBQXlCLENBQUMsSUFBSTtJQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksdUJBQXVCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTO1FBQzlGLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1FBQzdCLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDNUUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJO0lBQzNDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSx1QkFBdUIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSx1QkFBdUI7UUFBRSxPQUFNO0lBQ2pJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVyRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3hELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU07U0FDeEUsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQzFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNuQyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDbkMsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLGVBQWU7WUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUE7YUFDNUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxlQUFlO1lBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7O1lBQ3hHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdEUsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7QUFDaEYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLElBQUk7SUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLHVCQUF1QjtRQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsQ0FBQTtBQUNwRixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUk7SUFDNUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3pILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSTtJQUNwRCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUN2RCxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUMzRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUI7UUFBRSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN0SSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDNUQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLDRCQUE0QixFQUFFLENBQUM7UUFDbkQsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3BGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7UUFDakgsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNoRixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdkgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUN0RixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNoRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6RCxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN4RSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDNUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0MsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTTtTQUMvRixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6RCxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN4RSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNuRSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTTtTQUMzRixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNoRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNO1NBQy9GLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUN2RixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQTtRQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVuRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDakcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDOUosTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUN0RixjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDOUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUMxRixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3RJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDcEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQTtRQUNsRSxN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LEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUNsRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUN6RSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxhQUFhLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDbkcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFDakYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBQ3BFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBSTtJQUN6QixPQUFPLElBQUksSUFBSSxFQUFFLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2VtaXRFeHByZXNzaW9uLCBlbWl0VHlwZX0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7ZW1pdEVmZmVjdFByZWZpeGVzLCBlbWl0RWZmZWN0U3VwcG9ydH0gZnJvbSBcIi4vZWZmZWN0cy5qc1wiXG5cbi8qKlxuICogRW1pdHMgYW4gaW5kZXBlbmRlbnRseSBleGVjdXRhYmxlIFBIUCBwcm9ncmFtIHRocm91Z2ggdGhlIHNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQaHAobW9kdWxlLCB3cml0ZXIpIHtcbiAgaWYgKHdyaXRlci5wcm9ncmFtKSBlbWl0UHJvZ3JhbUhlYWRlcihtb2R1bGUsIHdyaXRlcilcbiAgZWxzZSB3cml0ZXIuc3ludGhldGljKFwiPD9waHBcXG5kZWNsYXJlKHN0cmljdF90eXBlcz0xKTtcXG5cXG5cIiwgXCJQSFAgcHJvZ3JhbSBzY2FmZm9sZGluZ1wiLCBbbW9kdWxlXSlcbiAgZW1pdEVmZmVjdFN1cHBvcnQod3JpdGVyLCBtb2R1bGUsIFwicGhwXCIpXG4gIGNvbnN0IHJlY29yZHMgPSBtb2R1bGUucmVjb3JkcyA/PyBbXVxuICBjb25zdCBjbGFzc2VzID0gbW9kdWxlLmNsYXNzZXMgPz8gW11cbiAgY29uc3QgaW50ZXJmYWNlcyA9IG1vZHVsZS5pbnRlcmZhY2VzID8/IFtdXG4gIGNvbnN0IGVycm9ycyA9IG1vZHVsZS5lcnJvcnMgPz8gW11cblxuICBlcnJvcnMuZm9yRWFjaCgoZXJyb3IsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGAvZXJyb3JzLyR7aW5kZXh9YFxuXG4gICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImVycm9yIGRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZXJyb3JdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcImZpbmFsIGNsYXNzXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXJyb3IsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZXJyb3IgZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbZXJyb3JdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlcnJvci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXJyb3IsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKHdyaXRlci5wcm9ncmFtID8gXCIgZXh0ZW5kcyBcXFxcUnVudGltZUV4Y2VwdGlvbiB7fVwiIDogXCIgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XCIsXG4gICAgICBcIlBIUCB1bmNoZWNrZWQgZXJyb3Igc2NhZmZvbGRpbmdcIiwgW2Vycm9yXSwgW3BhdGhdKVxuICB9KVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG5cIiwgXCJlcnJvci9kZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW21vZHVsZV0pXG5cbiAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQsIHJlY29yZEluZGV4KSA9PiB7XG4gICAgY29uc3QgcmVjb3JkUGF0aCA9IGAvcmVjb3Jkcy8ke3JlY29yZEluZGV4fWBcblxuICAgIGlmIChyZWNvcmRJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG5cIiwgXCJyZWNvcmQgZGVjbGFyYXRpb24gc2VwYXJhdG9yXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gICAgZW1pdFRlbXBsYXRlRG9jdW1lbnRhdGlvbih3cml0ZXIsIHJlY29yZC50eXBlUGFyYW1ldGVycyA/PyBbXSwgYCR7cmVjb3JkUGF0aH0vdHlwZVBhcmFtZXRlcnNgKVxuICAgIGlmICgocmVjb3JkLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICBlbWl0RG9jdW1lbnRlZEdlbmVyaWNSZWNvcmQod3JpdGVyLCByZWNvcmQsIHJlY29yZFBhdGgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcImZpbmFsIHJlYWRvbmx5IGNsYXNzXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogcmVjb3JkLCBwYXRoOiByZWNvcmRQYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJlY29yZCBkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChyZWNvcmQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHJlY29yZCwgcGF0aDogcmVjb3JkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcInJlY29yZCBjbGFzcyBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSByZWNvcmQuZmllbGRzLmZpbHRlcigoZmllbGQpID0+IHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24oZmllbGQudHlwZSkpXG5cbiAgICBpZiAoZG9jdW1lbnRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIC8qKlxcblwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBkb2N1bWVudGVkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSByZWNvcmQuZmllbGRzLmluZGV4T2YoZmllbGQpXG4gICAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke3JlY29yZFBhdGh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9YFxuXG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICogQHBhcmFtIFwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBmaWVsZC50eXBlLCBgJHtmaWVsZFBhdGh9L3R5cGVgLCBcInBocFwiKVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIlBIUCByZWNvcmQgdHlwZSBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICAgICAgd3JpdGVyLm1hcHBlZChgJCR7ZmllbGQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZmllbGQsIHBhdGg6IGZpZWxkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIHJlY29yZCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgICAgfVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICAgKi9cXG5cIiwgXCJQSFAgcmVjb3JkIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3JlY29yZF0sIFtyZWNvcmRQYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXFxuXCIsIFwiUEhQIHJlY29yZCBjb25zdHJ1Y3RvciBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICAgIHJlY29yZC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke3JlY29yZFBhdGh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9YFxuXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICAgICBwdWJsaWMgXCIsIFwiUEhQIHByb21vdGVkIGZpZWxkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBmaWVsZC50eXBlLCBgJHtmaWVsZFBhdGh9L3R5cGVgKVxuICAgICAgaWYgKGhhc05hdGl2ZVBocFR5cGUoZmllbGQudHlwZSkpIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiUEhQIHByb21vdGVkIGZpZWxkIHNwYWNpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGAkJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKGZpZWxkSW5kZXggKyAxID09IHJlY29yZC5maWVsZHMubGVuZ3RoID8gXCJcXG5cIiA6IFwiLFxcblwiLCBcIlBIUCBwcm9tb3RlZCBmaWVsZCBzZXBhcmF0b3JcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICkge31cXG59XCIsIFwiUEhQIHJlY29yZCBjb25zdHJ1Y3RvciBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICB9KVxuICBpZiAocmVjb3Jkcy5sZW5ndGggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuXCIsIFwicmVjb3JkL2Z1bmN0aW9uIHNlcGFyYXRvclwiLCBbbW9kdWxlXSlcblxuICBpbnRlcmZhY2VzLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbnRlcmZhY2VJbmRleCkgPT4ge1xuICAgIGlmIChpbnRlcmZhY2VJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG5cIiwgXCJpbnRlcmZhY2Ugc2VwYXJhdG9yXCIsIFtkZWNsYXJhdGlvbl0sIFtgL2ludGVyZmFjZXMvJHtpbnRlcmZhY2VJbmRleH1gXSlcbiAgICBlbWl0SW50ZXJmYWNlKHdyaXRlciwgZGVjbGFyYXRpb24sIGludGVyZmFjZUluZGV4KVxuICB9KVxuICBpZiAoaW50ZXJmYWNlcy5sZW5ndGggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuXCIsIFwiaW50ZXJmYWNlL2NsYXNzIHNlcGFyYXRvclwiLCBbbW9kdWxlXSlcblxuICBjbGFzc2VzLmZvckVhY2goKGRlY2xhcmF0aW9uLCBjbGFzc0luZGV4KSA9PiB7XG4gICAgaWYgKGNsYXNzSW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuXCIsIFwicmVmZXJlbmNlIGNsYXNzIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dLCBbYC9jbGFzc2VzLyR7Y2xhc3NJbmRleH1gXSlcbiAgICBlbWl0UmVmZXJlbmNlQ2xhc3Mod3JpdGVyLCBkZWNsYXJhdGlvbiwgY2xhc3NJbmRleClcbiAgfSlcbiAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcInJlZmVyZW5jZSBjbGFzcy9mdW5jdGlvbiBzZXBhcmF0b3JcIiwgW21vZHVsZV0pXG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgZnVuY3Rpb25JbmRleCkgPT4ge1xuICAgIGlmIChmdW5jdGlvbkluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuXG4gICAgY29uc3QgZG9jdW1lbnRlZFBhcmFtZXRlcnMgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4gW3BhcmFtZXRlciwgaW5kZXhdKVxuICAgICAgLmZpbHRlcigoW3BhcmFtZXRlcl0pID0+IHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJ9ICovIChwYXJhbWV0ZXIpLnR5cGUpKVxuICAgIGNvbnN0IGRvY3VtZW50ZWRSZXR1cm4gPSBwaHBUeXBlTmVlZHNEb2N1bWVudGF0aW9uKGRlY2xhcmF0aW9uLnJldHVyblR5cGUpXG5cbiAgICBpZiAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwIHx8IGRvY3VtZW50ZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgfHwgZG9jdW1lbnRlZFJldHVybikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIi8qKlxcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICAgIGZvciAoY29uc3QgW3BhcmFtZXRlckluZGV4LCBwYXJhbWV0ZXJdIG9mIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAdGVtcGxhdGUgXCIsIFwiUEhQIHR5cGUgcGFyYW1ldGVyIHNjYWZmb2xkaW5nXCIsIFtwYXJhbWV0ZXJdLCBbYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS90eXBlUGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBdKVxuICAgICAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7XG4gICAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3R5cGVQYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YCwgcm9sZTogXCJuYW1lXCJcbiAgICAgICAgfSlcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3BhcmFtZXRlcl0pXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtjYW5kaWRhdGUsIGluZGV4XSBvZiBkb2N1bWVudGVkUGFyYW1ldGVycykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcn0gKi8gKGNhbmRpZGF0ZSlcbiAgICAgICAgY29uc3QgcGFyYW1ldGVySW5kZXggPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGluZGV4KVxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAcGFyYW0gXCIsIFwiUEhQIGNvbGxlY3Rpb24gdHlwZSBzY2FmZm9sZGluZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIHBhcmFtZXRlci50eXBlLCBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgY29sbGVjdGlvbiB0eXBlIHNjYWZmb2xkaW5nXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICAgIHdyaXRlci5tYXBwZWQoYCQke3BhcmFtZXRlci5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudGVkUmV0dXJuKSB7XG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKiBAcmV0dXJuIFwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3JldHVyblR5cGVgLCBcInBocFwiKVxuICAgICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIGNvbGxlY3Rpb24gdHlwZSBzY2FmZm9sZGluZ1wiLCBbZGVjbGFyYXRpb25dKVxuICAgICAgfVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqL1xcblwiLCBcIlBIUCBjb2xsZWN0aW9uIHR5cGUgc2NhZmZvbGRpbmdcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcImZ1bmN0aW9uXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb259KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZnVuY3Rpb24gc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dKVxuICAgIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbn0pXG4gICAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9wYXJhbWV0ZXJzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIFtkZWNsYXJhdGlvbl0pXG4gICAgICBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIHBhcmFtZXRlci50eXBlLCBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYClcbiAgICAgIGlmIChoYXNOYXRpdmVQaHBUeXBlKHBhcmFtZXRlci50eXBlKSkgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJwYXJhbWV0ZXIgc3BhY2luZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChgJCR7cGFyYW1ldGVyLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbn0pXG4gICAgaWYgKGhhc05hdGl2ZVBocFR5cGUoZGVjbGFyYXRpb24ucmV0dXJuVHlwZSkpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcInJldHVybiB0eXBlIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuICAgICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9L3JldHVyblR5cGVgKVxuICAgIH1cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb259KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0pXG5cbiAgICBlbWl0QmxvY2sod3JpdGVyLCBkZWNsYXJhdGlvbi5ib2R5LCBcIiAgICBcIiwgYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fS9ib2R5YClcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9ufSlcbiAgfSlcblxuICBpZiAoIXdyaXRlci5wcm9ncmFtIHx8IHdyaXRlci5pc1Byb2dyYW1FbnRyeSgpKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblxcblwiLCBcImVudHJ5LXBvaW50IHNlcGFyYXRvclwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiXCIsIFwiL2VudHJ5UG9pbnQvYm9keVwiKVxuICB9XG59XG5cbi8qKlxuICogRW1pdHMgb25lIG5hdGl2ZSBQSFAgcmVmZXJlbmNlIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUmVmZXJlbmNlIGNsYXNzLlxuICogQHBhcmFtIHtudW1iZXJ9IGNsYXNzSW5kZXggLSBNb2R1bGUgY2xhc3MgaW5kZXguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFJlZmVyZW5jZUNsYXNzKHdyaXRlciwgZGVjbGFyYXRpb24sIGNsYXNzSW5kZXgpIHtcbiAgY29uc3QgcGF0aCA9IGAvY2xhc3Nlcy8ke2NsYXNzSW5kZXh9YFxuXG4gIHdyaXRlci5tYXBwZWQoXCJmaW5hbCBjbGFzc1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJyZWZlcmVuY2UgY2xhc3Mgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIGNvbnN0IGltcGxlbWVudGVkID0gZGVjbGFyYXRpb24uaW1wbGVtZW50cyA/PyBbXVxuXG4gIGlmIChpbXBsZW1lbnRlZC5sZW5ndGggPiAwKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIiBpbXBsZW1lbnRzIFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgICBpbXBsZW1lbnRlZC5mb3JFYWNoKChyZWZlcmVuY2UsIHJlZmVyZW5jZUluZGV4KSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlSW5kZXggPiAwKSB3cml0ZXIubWFwcGVkKFwiLCBcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgICBlbWl0VHlwZSh3cml0ZXIsIHJlZmVyZW5jZSwgYCR7cGF0aH0vaW1wbGVtZW50cy8ke3JlZmVyZW5jZUluZGV4fWAsIFwicGhwXCIpXG4gICAgfSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJyZWZlcmVuY2UgY2xhc3Mgb3BlblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIGRlY2xhcmF0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZFBhdGggPSBgJHtwYXRofS9maWVsZHMvJHtpbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIHByaXZhdGUgXCIsIFwicHJpdmF0ZSBmaWVsZCBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIGZpZWxkLnR5cGUsIGAke2ZpZWxkUGF0aH0vdHlwZWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAkXCIsIFwicHJpdmF0ZSBmaWVsZCBzcGFjaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZmllbGQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGZpZWxkLCBwYXRoOiBmaWVsZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiO1xcblwiLCBcImxpbmUgYnJlYWtcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gZGVjbGFyYXRpb24uY29uc3RydWN0b3JcbiAgY29uc3QgY29uc3RydWN0b3JQYXRoID0gYCR7cGF0aH0vY29uc3RydWN0b3JgXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbiAgICBwdWJsaWMgZnVuY3Rpb24gXCIsIFwiY29uc3RydWN0b3Igc2NhZmZvbGRpbmdcIiwgW2NvbnN0cnVjdG9yXSwgW2NvbnN0cnVjdG9yUGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJfX2NvbnN0cnVjdFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogY29uc3RydWN0b3IsIHBhdGg6IGNvbnN0cnVjdG9yUGF0aCwgcm9sZTogXCJjb25zdHJ1Y3RvclwifSlcbiAgZW1pdFBocFBhcmFtZXRlcnMod3JpdGVyLCBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLCBgJHtjb25zdHJ1Y3RvclBhdGh9L3BhcmFtZXRlcnNgKVxuICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJjb25zdHJ1Y3RvciBvcGVuXCIsIFtjb25zdHJ1Y3Rvcl0sIFtjb25zdHJ1Y3RvclBhdGhdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBjb25zdHJ1Y3Rvci5ib2R5LCBcIiAgICAgICAgXCIsIGAke2NvbnN0cnVjdG9yUGF0aH0vYm9keWApXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgICAgfVwiLCBcImNvbnN0cnVjdG9yIGNsb3NlXCIsIFtjb25zdHJ1Y3Rvcl0sIFtjb25zdHJ1Y3RvclBhdGhdKVxuICBkZWNsYXJhdGlvbi5tZXRob2RzLmZvckVhY2goKG1ldGhvZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZXRob2RQYXRoID0gYCR7cGF0aH0vbWV0aG9kcy8ke2luZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cXG4gICAgcHVibGljIGZ1bmN0aW9uIFwiLCBcIm1ldGhvZCBzY2FmZm9sZGluZ1wiLCBbbWV0aG9kXSwgW21ldGhvZFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQobWV0aG9kLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBtZXRob2QsIHBhdGg6IG1ldGhvZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICBlbWl0UGhwUGFyYW1ldGVycyh3cml0ZXIsIG1ldGhvZC5wYXJhbWV0ZXJzLCBgJHttZXRob2RQYXRofS9wYXJhbWV0ZXJzYClcbiAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJtZXRob2QgcmV0dXJuIHNlcGFyYXRvclwiLCBbbWV0aG9kXSwgW21ldGhvZFBhdGhdKVxuICAgIGVtaXROYXRpdmVQaHBUeXBlKHdyaXRlciwgbWV0aG9kLnJldHVyblR5cGUsIGAke21ldGhvZFBhdGh9L3JldHVyblR5cGVgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIm1ldGhvZCBvcGVuXCIsIFttZXRob2RdLCBbbWV0aG9kUGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgbWV0aG9kLmJvZHksIFwiICAgICAgICBcIiwgYCR7bWV0aG9kUGF0aH0vYm9keWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICB9XCIsIFwibWV0aG9kIGNsb3NlXCIsIFttZXRob2RdLCBbbWV0aG9kUGF0aF0pXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG59XG5cbi8qKlxuICogRW1pdHMgb25lIFBIUCBuYXRpdmUgaW50ZXJmYWNlIGRlY2xhcmF0aW9uIHdpdGggc2lnbmF0dXJlLW9ubHkgbWVtYmVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBTZW1hbnRpYyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gaW50ZXJmYWNlSW5kZXggLSBEZWNsYXJhdGlvbiBpbmRleC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0SW50ZXJmYWNlKHdyaXRlciwgZGVjbGFyYXRpb24sIGludGVyZmFjZUluZGV4KSB7XG4gIGNvbnN0IHBhdGggPSBgL2ludGVyZmFjZXMvJHtpbnRlcmZhY2VJbmRleH1gXG5cbiAgd3JpdGVyLm1hcHBlZChcImludGVyZmFjZVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJpbnRlcmZhY2Ugc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIGNvbnN0IHBhcmVudHMgPSBkZWNsYXJhdGlvbi5leHRlbmRzID8/IFtdXG5cbiAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgIHdyaXRlci5tYXBwZWQoXCIgZXh0ZW5kcyBcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgcGFyZW50cy5mb3JFYWNoKChwYXJlbnQsIHBhcmVudEluZGV4KSA9PiB7XG4gICAgICBpZiAocGFyZW50SW5kZXggPiAwKSB3cml0ZXIubWFwcGVkKFwiLCBcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgICBlbWl0VHlwZSh3cml0ZXIsIHBhcmVudCwgYCR7cGF0aH0vZXh0ZW5kcy8ke3BhcmVudEluZGV4fWAsIFwicGhwXCIpXG4gICAgfSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJpbnRlcmZhY2Ugb3BlblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMuZm9yRWFjaCgobWV0aG9kLCBtZXRob2RJbmRleCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZFBhdGggPSBgJHtwYXRofS9tZXRob2RzLyR7bWV0aG9kSW5kZXh9YFxuXG4gICAgaWYgKG1ldGhvZEluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW21ldGhvZF0sIFttZXRob2RQYXRoXSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIHB1YmxpYyBmdW5jdGlvbiBcIiwgXCJpbnRlcmZhY2UgbWV0aG9kIHNjYWZmb2xkaW5nXCIsIFttZXRob2RdLCBbbWV0aG9kUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChtZXRob2QubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IG1ldGhvZCwgcGF0aDogbWV0aG9kUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIGVtaXRQaHBQYXJhbWV0ZXJzKHdyaXRlciwgbWV0aG9kLnBhcmFtZXRlcnMsIGAke21ldGhvZFBhdGh9L3BhcmFtZXRlcnNgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcImludGVyZmFjZSBtZXRob2QgcmV0dXJuIHNlcGFyYXRvclwiLCBbbWV0aG9kXSwgW21ldGhvZFBhdGhdKVxuICAgIGVtaXROYXRpdmVQaHBUeXBlKHdyaXRlciwgbWV0aG9kLnJldHVyblR5cGUsIGAke21ldGhvZFBhdGh9L3JldHVyblR5cGVgKVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogbWV0aG9kLCBwYXRoOiBtZXRob2RQYXRofSlcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgUEhQIHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gT3JkZXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXJhbWV0ZXIgY29sbGVjdGlvbiBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRQaHBQYXJhbWV0ZXJzKHdyaXRlciwgcGFyYW1ldGVycywgcGF0aCkge1xuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcInBhcmFtZXRlciBsaXN0IG9wZW5cIiwgcGFyYW1ldGVycylcbiAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9LyR7aW5kZXh9YFxuXG4gICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIHBhcmFtZXRlcnMpXG4gICAgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCBwYXJhbWV0ZXIudHlwZSwgYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAkXCIsIFwicGFyYW1ldGVyIHNwYWNpbmdcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBwYXJhbWV0ZXJQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwicGFyYW1ldGVyIGxpc3QgY2xvc2VcIiwgcGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBFbWl0cyBQSFAncyBleGFjdCBkb2N1bWVudGVkIGdlbmVyaWMtcmVjb3JkIHByb2ZpbGUuIFByaXZhdGUgcHJvbW90ZWQgc3RvcmFnZVxuICogcGx1cyBwdWJsaWMgZ2V0dGVycyBwcmVzZXJ2ZXMgcmVjb3JkIGltbXV0YWJpbGl0eSB3aGVuIGEgdHlwZSB2YXJpYWJsZSBoYXMgbm9cbiAqIGZhaXRoZnVsIG5hdGl2ZSBwcm9wZXJ0eSB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSByZWNvcmQgLSBHZW5lcmljIHNlbWFudGljIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWNvcmRQYXRoIC0gRXhhY3QgcmVjb3JkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGVtaXREb2N1bWVudGVkR2VuZXJpY1JlY29yZCh3cml0ZXIsIHJlY29yZCwgcmVjb3JkUGF0aCkge1xuICB3cml0ZXIubWFwcGVkKFwiZmluYWwgY2xhc3NcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiByZWNvcmQsIHBhdGg6IHJlY29yZFBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJlY29yZCBkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gIHdyaXRlci5tYXBwZWQocmVjb3JkLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiByZWNvcmQsIHBhdGg6IHJlY29yZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiB7XFxuICAgIC8qKlxcblwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG4gIHJlY29yZC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZFBhdGggPSBgJHtyZWNvcmRQYXRofS9maWVsZHMvJHtmaWVsZEluZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICogQHBhcmFtIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke2ZpZWxkLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGZpZWxkLCBwYXRoOiBmaWVsZFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiUEhQIGRvY3VtZW50ZWQgZ2VuZXJpYyByZWNvcmQgc2NhZmZvbGRpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgICAgICovXFxuICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcXG5cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIHJlY29yZCBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICByZWNvcmQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBmaWVsZEluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRQYXRoID0gYCR7cmVjb3JkUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgICAgICBwcml2YXRlIFwiLCBcIlBIUCBwcml2YXRlIHByb21vdGVkIGZpZWxkIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXROYXRpdmVQaHBUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYClcbiAgICBpZiAoaGFzTmF0aXZlUGhwVHlwZShmaWVsZC50eXBlKSkgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgcHJvbW90ZWQgZmllbGQgc3BhY2luZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhmaWVsZEluZGV4ICsgMSA9PSByZWNvcmQuZmllbGRzLmxlbmd0aCA/IFwiXFxuXCIgOiBcIixcXG5cIiwgXCJQSFAgcHJvbW90ZWQgZmllbGQgc2VwYXJhdG9yXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiICAgICkge31cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIHJlY29yZCBzY2FmZm9sZGluZ1wiLCBbcmVjb3JkXSwgW3JlY29yZFBhdGhdKVxuICByZWNvcmQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBmaWVsZEluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRQYXRoID0gYCR7cmVjb3JkUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXFxuICAgIC8qKlxcbiAgICAgKiBAcmV0dXJuIFwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgZmllbGQudHlwZSwgYCR7ZmllbGRQYXRofS90eXBlYCwgXCJwaHBcIilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuICAgICAqL1xcbiAgICBwdWJsaWMgZnVuY3Rpb24gXCIsIFwiUEhQIGRvY3VtZW50ZWQgZ2VuZXJpYyBnZXR0ZXIgc2NhZmZvbGRpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChmaWVsZC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZmllbGQsIHBhdGg6IGZpZWxkUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoKVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICAgIGlmIChoYXNOYXRpdmVQaHBUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJQSFAgZ2V0dGVyIHJldHVybiB0eXBlIHNwYWNpbmdcIiwgW2ZpZWxkXSwgW2ZpZWxkUGF0aF0pXG4gICAgICBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIGZpZWxkLnR5cGUsIGAke2ZpZWxkUGF0aH0vdHlwZWApXG4gICAgfVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcbiAgICAgICAgcmV0dXJuICR0aGlzLT5cIiwgXCJQSFAgZG9jdW1lbnRlZCBnZW5lcmljIGdldHRlciBzY2FmZm9sZGluZ1wiLCBbZmllbGRdLCBbZmllbGRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGZpZWxkLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBmaWVsZCwgcGF0aDogZmllbGRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIjtcXG4gICAgfVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgZ2V0dGVyIHNjYWZmb2xkaW5nXCIsIFtmaWVsZF0sIFtmaWVsZFBhdGhdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxufVwiLCBcIlBIUCBkb2N1bWVudGVkIGdlbmVyaWMgcmVjb3JkIHNjYWZmb2xkaW5nXCIsIFtyZWNvcmRdLCBbcmVjb3JkUGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBzdGFuZGFsb25lIFBIUERvYyB0ZW1wbGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBPcmRlcmVkIHR5cGUgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVHlwZS1wYXJhbWV0ZXIgY29sbGVjdGlvbiBwYXRoLlxuICovXG5mdW5jdGlvbiBlbWl0VGVtcGxhdGVEb2N1bWVudGF0aW9uKHdyaXRlciwgcGFyYW1ldGVycywgcGF0aCkge1xuICBpZiAocGFyYW1ldGVycy5sZW5ndGggPT0gMCkgcmV0dXJuXG4gIHdyaXRlci5zeW50aGV0aWMoXCIvKipcXG5cIiwgXCJQSFAgdHlwZSBwYXJhbWV0ZXIgc2NhZmZvbGRpbmdcIiwgcGFyYW1ldGVycylcbiAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqIEB0ZW1wbGF0ZSBcIiwgXCJQSFAgdHlwZSBwYXJhbWV0ZXIgc2NhZmZvbGRpbmdcIiwgW3BhcmFtZXRlcl0sIFtgJHtwYXRofS8ke2luZGV4fWBdKVxuICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IGAke3BhdGh9LyR7aW5kZXh9YCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtwYXJhbWV0ZXJdKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiICovXFxuXCIsIFwiUEhQIHR5cGUgcGFyYW1ldGVyIHNjYWZmb2xkaW5nXCIsIHBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogRW1pdHMgb25lIGNhbm9uaWNhbCBuYW1lc3BhY2UsIGV4cGxpY2l0IGltcG9ydHMsIGFuZCBtYXRjaGluZyBsaXRlcmFsIGxvYWQgZWRnZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDdXJyZW50IHByb2dyYW0gbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVtaXRQcm9ncmFtSGVhZGVyKG1vZHVsZSwgd3JpdGVyKSB7XG4gIGNvbnN0IHByb2dyYW1Nb2R1bGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG1vZHVsZSkpXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhgPD9waHBcXG5kZWNsYXJlKHN0cmljdF90eXBlcz0xKTtcXG5uYW1lc3BhY2UgU2VtYW50aWZvbGRcXFxcR2VuZXJhdGVkXFxcXCR7d3JpdGVyLnByb2dyYW1Nb2R1bGVOYW1lKHByb2dyYW1Nb2R1bGUuaWQpfTtcXG5gLFxuICAgIFwiUEhQIHNlbWFudGljIG5hbWVzcGFjZVwiLCBbbW9kdWxlXSlcbiAgZm9yIChjb25zdCBpbXBvcnRlZCBvZiBwcm9ncmFtTW9kdWxlLmltcG9ydHMpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5ID0gd3JpdGVyLnByb2dyYW1Nb2R1bGVOYW1lKGltcG9ydGVkLm1vZHVsZUlkKVxuICAgIGNvbnN0IHByZWZpeCA9IGltcG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJmdW5jdGlvblwiID8gXCJ1c2UgZnVuY3Rpb25cIiA6IFwidXNlXCJcbiAgICBjb25zdCBpbXBvcnRQYXRoID0gYC9pbXBvcnRzLyR7cHJvZ3JhbU1vZHVsZS5pbXBvcnRzLmluZGV4T2YoaW1wb3J0ZWQpfWBcbiAgICBjb25zdCBsb2NhbE5hbWUgPSB3cml0ZXIuaW1wb3J0TmFtZUZvcihpbXBvcnRlZClcblxuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7cHJlZml4fSBTZW1hbnRpZm9sZFxcXFxHZW5lcmF0ZWRcXFxcJHtkZXBlbmRlbmN5fVxcXFxgLCBcIlBIUCBzZW1hbnRpYyBpbXBvcnRcIiwgW2ltcG9ydGVkXSwgW2ltcG9ydFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoaW1wb3J0ZWQuaW1wb3J0ZWROYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogaW1wb3J0ZWQsIHBhdGg6IGltcG9ydFBhdGgsIHJvbGU6IFwiaW1wb3J0ZWROYW1lXCJ9KVxuICAgIGlmIChsb2NhbE5hbWUgIT0gaW1wb3J0ZWQuaW1wb3J0ZWROYW1lKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIGFzIFwiLCBcIlBIUCBzZW1hbnRpYyBpbXBvcnQgYWxpYXNcIiwgW2ltcG9ydGVkXSwgW2ltcG9ydFBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChsb2NhbE5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBpbXBvcnRlZCwgcGF0aDogaW1wb3J0UGF0aCwgcm9sZTogXCJsb2NhbE5hbWVcIn0pXG4gICAgfVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHNlbWFudGljIGltcG9ydCB0ZXJtaW5hdG9yXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgfVxuICBmb3IgKGNvbnN0IG1vZHVsZUlkIG9mIFsuLi5uZXcgU2V0KHByb2dyYW1Nb2R1bGUuaW1wb3J0cy5tYXAoKGl0ZW0pID0+IGl0ZW0ubW9kdWxlSWQpKV0pIHtcbiAgICBjb25zdCByZWxhdGl2ZSA9IHdyaXRlci5yZWxhdGl2ZU1vZHVsZVNwZWNpZmllcihtb2R1bGVJZCkucmVwbGFjZSgvXlxcLlxcLy91LCBcIlwiKVxuICAgIGNvbnN0IGltcG9ydGVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0ltcG9ydH0gKi8gKFxuICAgICAgcHJvZ3JhbU1vZHVsZS5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubW9kdWxlSWQgPT0gbW9kdWxlSWQpKVxuICAgIGNvbnN0IGltcG9ydFBhdGggPSBgL2ltcG9ydHMvJHtwcm9ncmFtTW9kdWxlLmltcG9ydHMuaW5kZXhPZihpbXBvcnRlZCl9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcInJlcXVpcmVfb25jZSBfX0RJUl9fIC4gXCIsIFwiUEhQIHJlcXVpcmUtb25jZSBlZGdlXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKEpTT04uc3RyaW5naWZ5KGAvJHtyZWxhdGl2ZX1gKSwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBpbXBvcnRlZCwgcGF0aDogaW1wb3J0UGF0aCwgcm9sZTogXCJwYXRoXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHJlcXVpcmUtb25jZSB0ZXJtaW5hdG9yXCIsIFtpbXBvcnRlZF0sIFtpbXBvcnRQYXRoXSlcbiAgfVxuICBpZiAod3JpdGVyLnN0ZGxpYlByb3ZpZGVyRW50cmllcykge1xuICAgIGZvciAoY29uc3QgcHJvdmlkZXJQYXRoIG9mIHdyaXRlci5zdGRsaWJQcm92aWRlclBhdGhzID8/IFtdKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IHdyaXRlci5zdGRsaWJQcm92aWRlclNwZWNpZmllcih1bmRlZmluZWQsIHByb3ZpZGVyUGF0aCkucmVwbGFjZSgvXlxcLlxcLy91LCBcIlwiKVxuXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwicmVxdWlyZV9vbmNlIF9fRElSX18gLiBcIiwgXCJQSFAgc3RkbGliIHByb3ZpZGVyIHJlcXVpcmUtb25jZSBlZGdlXCIsIFttb2R1bGVdKVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhKU09OLnN0cmluZ2lmeShgLyR7cmVsYXRpdmV9YCksIFwiUEhQIHN0ZGxpYiBwcm92aWRlciByZXF1aXJlLW9uY2UgcGF0aFwiLCBbbW9kdWxlXSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI7XFxuXCIsIFwiUEhQIHN0ZGxpYiBwcm92aWRlciByZXF1aXJlLW9uY2UgdGVybWluYXRvclwiLCBbbW9kdWxlXSlcbiAgICB9XG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcIlBIUCBuYW1lc3BhY2UvZGVjbGFyYXRpb24gc2VwYXJhdG9yXCIsIFttb2R1bGVdKVxufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIFBIUCBuYXRpdmUgdHlwZSBuZWVkcyBhbiBhY2NvbXBhbnlpbmcgcmVjdXJzaXZlIFBIUERvYyB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHlwZSBjb250YWlucyBhIGNvbGxlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24odHlwZSkge1xuICByZXR1cm4gdHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIgfHwgdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgfHxcbiAgICB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiIHx8XG4gICAgdHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmICh0eXBlLmFyZ3VtZW50cz8ubGVuZ3RoID8/IDApID4gMCB8fFxuICAgIHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHBocFR5cGVOZWVkc0RvY3VtZW50YXRpb24odHlwZS52YWx1ZVR5cGUpXG59XG5cbi8qKlxuICogRW1pdHMgdGhlIGV4YWN0IG5hdGl2ZSBQSFAgY2FycmllciB3aGlsZSByZXRhaW5pbmcgcmVjdXJzaXZlIHR5cGUgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCB0eXBlIG9jY3VycmVuY2UgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0TmF0aXZlUGhwVHlwZSh3cml0ZXIsIHR5cGUsIHBhdGgpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiIHx8IHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHR5cGUudmFsdWVUeXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSB3cml0ZXIucmVjb3JkRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIucmVjb3JkTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJJbnRlcmZhY2VUeXBlXCIgfHwgdHlwZS5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIiB8fCB0eXBlLmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikge1xuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZSwgcGF0aCwgXCJwaHBcIilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLCBwYXRoLCBcInBocFwiKVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCI/XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgaWYgKHR5cGUudmFsdWVUeXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgfHwgdHlwZS52YWx1ZVR5cGUua2luZCA9PSBcIkludGVyZmFjZVR5cGVcIikgZW1pdE5hdGl2ZVBocFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYClcbiAgICBlbHNlIGlmICh0eXBlLnZhbHVlVHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSBlbWl0VHlwZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBcInBocFwiKVxuICAgIGVsc2Ugd3JpdGVyLm1hcHBlZChcImFycmF5XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICB3cml0ZXIubWFwcGVkKFwiYXJyYXlcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgUEhQIGhhcyBhIGZhaXRoZnVsIG5hdGl2ZSBjYXJyaWVyIGZvciBvbmUgZXhhY3Qgc2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYSBuYXRpdmUgYW5ub3RhdGlvbiBjYW4gYmUgZW1pdHRlZC5cbiAqL1xuZnVuY3Rpb24gaGFzTmF0aXZlUGhwVHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmtpbmQgIT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIiAmJlxuICAgICEodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgJiYgdHlwZS52YWx1ZVR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBvcmRlcmVkIFBIUCBibG9jayBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBibG9jayBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRCbG9jayh3cml0ZXIsIGJsb2NrLCBpbmRlbnQsIHBhdGgpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gKSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgUEhQIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFNlbWFudGljIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBJbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRXhhY3Qgc3RhdGVtZW50IHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIGVtaXRFZmZlY3RQcmVmaXhlcyh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCBcInBocFwiLFxuICAgIChleHByZXNzaW9uLCBleHByZXNzaW9uUGF0aCkgPT4gZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBleHByZXNzaW9uUGF0aCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcikpXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikgcmV0dXJuIGVtaXRMb2NhbCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChzdGF0ZW1lbnQuZmllbGQpXG5cbiAgICB3cml0ZXIubWFwcGVkKGAtPiR7ZmllbGQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiID0gXCIsIFwicHJpdmF0ZSBmaWVsZCBhc3NpZ25tZW50XCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5raW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJ3aGlsZVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIChcIiwgXCJjb25kaXRpb24tY29udHJvbGxlZCBsb29wIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmJvZHksIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vYm9keWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5ib2R5LCBwYXRoOiBgJHtwYXRofS9ib2R5YH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiZm9yZWFjaFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAoXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50Lmxpc3QsIGAke3BhdGh9L2xpc3RgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgYXMgXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS92YWx1ZUJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwibG9vcCBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5ib2R5LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcImZvcmVhY2hcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgKFwiLCBcIm1hcCBsb29wIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQubWFwLCBgJHtwYXRofS9tYXBgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgYXMgXCIsIFwibWFwIGxvb3Agc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQua2V5QmluZGluZy5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC5rZXlCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS9rZXlCaW5kaW5nYCwgcm9sZTogXCJuYW1lXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgPT4gXCIsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNlcGFyYXRvclwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLCBwYXRoOiBgJHtwYXRofS92YWx1ZUJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIikgXCIsIFwibWFwIGxvb3Agc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5ib2R5LCBwYXRoOiBgJHtwYXRofS9ib2R5YH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuYm9keSwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9ib2R5YClcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCB0eXBlID0gc3RhdGVtZW50LmVycm9yLmVycm9yXG4gICAgY29uc3QgZXJyb3IgPSB3cml0ZXIuZXJyb3JGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKFwidGhyb3dcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgbmV3IFwiLCBcImVycm9yIGNvbnN0cnVjdGlvbiBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50LmVycm9yXSwgW2Ake3BhdGh9L2Vycm9yYF0pXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuZXJyb3JOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGVycm9yLm5hbWUsIG5vZGU6IHN0YXRlbWVudC5lcnJvciwgcGF0aDogYCR7cGF0aH0vZXJyb3JgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gb3BlblwiLCBbc3RhdGVtZW50LmVycm9yXSwgW2Ake3BhdGh9L2Vycm9yYF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSwgYCR7cGF0aH0vZXJyb3IvbWVzc2FnZWAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIik7XFxuXCIsIFwiZXJyb3IgY29uc3RydWN0aW9uIGNsb3NlXCIsIFtzdGF0ZW1lbnQuZXJyb3JdLCBbYCR7cGF0aH0vZXJyb3JgXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXRocm93U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwidGhyb3dcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwidGhyb3cgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC5iaW5kaW5nfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQuYmluZGluZ05vZGUsIHBhdGg6IGAke3BhdGh9L2JpbmRpbmdOb2RlYCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcInRyeVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJ0cnkgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5ib2R5LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIGZvciAoY29uc3QgW2luZGV4LCBoYW5kbGVyXSBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGAke3BhdGh9L2hhbmRsZXJzLyR7aW5kZXh9YFxuICAgICAgY29uc3QgY2F1Z2h0ID0gd3JpdGVyLmVycm9yRm9ySWQoaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjYXRjaCBzcGFjaW5nXCIsIFtoYW5kbGVyXSwgW2hhbmRsZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjYXRjaFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGhhbmRsZXIsIHBhdGg6IGhhbmRsZXJQYXRoLCByb2xlOiBcImNhdGNoXCJ9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAoXCIsIFwiY2F0Y2ggYmluZGluZyBzY2FmZm9sZGluZ1wiLCBbaGFuZGxlci5jYXRjaEJpbmRpbmddLCBbYCR7aGFuZGxlclBhdGh9L2NhdGNoQmluZGluZ2BdKVxuICAgICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuZXJyb3JOYW1lRm9ySWQoaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZCksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBjYXVnaHQubmFtZSwgbm9kZTogaGFuZGxlci5jYXRjaFR5cGUsIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaFR5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNhdGNoIGJpbmRpbmcgc3BhY2luZ1wiLCBbaGFuZGxlci5jYXRjaEJpbmRpbmddLCBbYCR7aGFuZGxlclBhdGh9L2NhdGNoQmluZGluZ2BdKVxuICAgICAgd3JpdGVyLm1hcHBlZChgJCR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogaGFuZGxlci5jYXRjaEJpbmRpbmcsIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaEJpbmRpbmdgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiKSBcIiwgXCJjYXRjaCBiaW5kaW5nIHNjYWZmb2xkaW5nXCIsIFtoYW5kbGVyLmNhdGNoQmluZGluZ10sIFtgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCaW5kaW5nYF0pXG4gICAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGhhbmRsZXIuY2F0Y2hCb2R5LCBwYXRoOiBgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCb2R5YH0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbaGFuZGxlcl0sIFtoYW5kbGVyUGF0aF0pXG4gICAgICBlbWl0QmxvY2sod3JpdGVyLCBoYW5kbGVyLmNhdGNoQm9keSwgYCR7aW5kZW50fSAgICBgLCBgJHtoYW5kbGVyUGF0aH0vY2F0Y2hCb2R5YClcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtoYW5kbGVyXSwgW2hhbmRsZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogaGFuZGxlci5jYXRjaEJvZHksIHBhdGg6IGAke2hhbmRsZXJQYXRofS9jYXRjaEJvZHlgfSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJmaW5hbGx5IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJmaW5hbGx5XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcImZpbmFsbHlcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJmaW5hbGx5IHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuZmluYWxseUJvZHksIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vZmluYWxseUJvZHlgKVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmZpbmFsbHlCb2R5LCBwYXRoOiBgJHtwYXRofS9maW5hbGx5Qm9keWB9KVxuICAgIH1cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcInJldHVyblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwicGhwXCIsIHBocElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJlY2hvXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInByaW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJQSFAgcHJpbnQgc2VwYXJhdG9yXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIlBIUF9FT0xcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIHdyaXRlci5tYXBwZWQoXCJpZlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNvbmRpdGlvbmFsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9jb25zZXF1ZW50YClcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJlbHNlXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNvbmRpdGlvbmFsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5hbHRlcm5hdGUsIHBhdGg6IGAke3BhdGh9L2FsdGVybmF0ZWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgICBgLCBgJHtwYXRofS9hbHRlcm5hdGVgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBQSFAgbG9jYWwgc3RhdGVtZW50IHdpdGggaXRzIGV4YWN0IFNlbWFudGlmb2xkIHByb2ZpbGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnR9IHN0YXRlbWVudCAtIExvY2FsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBMZWFkaW5nIGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudFBhdGggLSBFeGFjdCBKU09OIFBvaW50ZXIgZm9yIHRoaXMgc3RhdGVtZW50IG9jY3VycmVuY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdExvY2FsKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHN0YXRlbWVudFBhdGgpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcblxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQudGFyZ2V0Lm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50YXJnZXQsIHBhdGg6IGAke3N0YXRlbWVudFBhdGh9L3RhcmdldGAsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGg6IHN0YXRlbWVudFBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYCwgXCJwaHBcIiwgcGhwSWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnQubXV0YWJsZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIvKiogQHZhciBcIiwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgc3RhdGVtZW50LnR5cGUsIGAke3N0YXRlbWVudFBhdGh9L3R5cGVgLCBcInBocFwiKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiUEhQIGxvY2FsIHR5cGUgc2NhZmZvbGRpbmdcIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGAkJHtzdGF0ZW1lbnQubmFtZX1gLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoOiBzdGF0ZW1lbnRQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAqL1xcblwiLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gIH0gZWxzZSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIi8qKlxcblwiLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9ICogQHZhciBgLCBcIlBIUCBsb2NhbCB0eXBlIHNjYWZmb2xkaW5nXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCBzdGF0ZW1lbnQudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vdHlwZWAsIFwicGhwXCIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYCQke3N0YXRlbWVudC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGg6IHN0YXRlbWVudFBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKGBcXG4ke2luZGVudH0gKiBAc2VtYW50aWZvbGQtaW1tdXRhYmxlXFxuJHtpbmRlbnR9ICovXFxuYCwgXCJQSFAgbG9jYWwgdHlwZSBzY2FmZm9sZGluZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICB9XG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtzdGF0ZW1lbnRQYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChgJCR7c3RhdGVtZW50Lm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoOiBzdGF0ZW1lbnRQYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3N0YXRlbWVudFBhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7c3RhdGVtZW50UGF0aH0vaW5pdGlhbGl6ZXJgLCBcInBocFwiLCBwaHBJZGVudGlmaWVyKVxuICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aDogc3RhdGVtZW50UGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbc3RhdGVtZW50UGF0aF0pXG59XG5cbi8qKlxuICogRm9ybWF0cyBvbmUgUEhQIHZhcmlhYmxlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFNlbWFudGljIGlkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQSFAgaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gcGhwSWRlbnRpZmllcihuYW1lKSB7XG4gIHJldHVybiBgJCR7bmFtZX1gXG59XG4iXX0=