experimental-agent 0.7.1 → 0.8.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5297,7 +5297,7 @@ function getSandboxContexts(agent2) {
5297
5297
  }
5298
5298
  return map;
5299
5299
  }
5300
- var Agent = class {
5300
+ var Agent = class _Agent {
5301
5301
  name;
5302
5302
  options;
5303
5303
  constructor(name, options) {
@@ -5351,6 +5351,14 @@ var Agent = class {
5351
5351
  }
5352
5352
  session;
5353
5353
  sandbox;
5354
+ /**
5355
+ * Create a derived agent with merged options. The returned agent is NOT
5356
+ * registered in the workflow registry – it's a one-off instance used by
5357
+ * the framework to layer fs-scanned config onto an agent.ts definition.
5358
+ */
5359
+ extend(fn) {
5360
+ return new _Agent(this.name, fn(this.options));
5361
+ }
5354
5362
  };
5355
5363
  function agent(name, options) {
5356
5364
  const instance = new Agent(name, options);
@@ -5359,8 +5367,10 @@ function agent(name, options) {
5359
5367
  }
5360
5368
 
5361
5369
  // src/rpc/rpc.ts
5370
+ var import_openapi = require("@elysiajs/openapi");
5362
5371
  var import_ai5 = require("ai");
5363
5372
  var import_elysia = __toESM(require("elysia"));
5373
+ var import_zod6 = __toESM(require("zod"));
5364
5374
 
5365
5375
  // src/rpc/agentContract.ts
5366
5376
  var import_zod5 = __toESM(require("zod"));
@@ -5551,7 +5561,37 @@ function basePathForAgent(agent2) {
5551
5561
  function handleRequest(agent2, options = {}) {
5552
5562
  const { basePath = basePathForAgent(agent2.name), workflow } = options;
5553
5563
  const contract = agentContract(agent2);
5554
- const router = new import_elysia.default({ prefix: basePath }).get(
5564
+ const router = new import_elysia.default({ prefix: basePath }).use(
5565
+ (0, import_openapi.openapi)({
5566
+ provider: null,
5567
+ specPath: "/openapi.json",
5568
+ exclude: { staticFile: false },
5569
+ documentation: {
5570
+ info: {
5571
+ title: `${agent2.name} API`,
5572
+ version: "1.0.0"
5573
+ },
5574
+ components: {
5575
+ schemas: {
5576
+ // @ts-expect-error - elysia is annoying
5577
+ AgentStatus: import_zod6.default.toJSONSchema(AgentStatus, {
5578
+ target: "openapi-3.0"
5579
+ })
5580
+ },
5581
+ securitySchemes: {
5582
+ bearerAuth: {
5583
+ type: "http",
5584
+ scheme: "bearer",
5585
+ bearerFormat: "JWT"
5586
+ }
5587
+ }
5588
+ }
5589
+ },
5590
+ mapJsonSchema: {
5591
+ zod: (schema) => import_zod6.default.toJSONSchema(schema, { target: "openapi-3.0" })
5592
+ }
5593
+ })
5594
+ ).get(
5555
5595
  "/:sessionId",
5556
5596
  async ({ params }) => {
5557
5597
  const next = async () => {
@@ -5579,7 +5619,13 @@ function handleRequest(agent2, options = {}) {
5579
5619
  const session = agent2.session(params.sessionId);
5580
5620
  if (workflow) {
5581
5621
  const { start: start2 } = await import("workflow/api");
5582
- const result = await start2(workflow, [params.sessionId, body]);
5622
+ const result = await start2(
5623
+ // for some reason, start() requires SessionSendArgs<AnyAgent>
5624
+ // to avoid blowing up types
5625
+ // we want to put the typeguard here so consumers of handleRequest still work fine
5626
+ workflow,
5627
+ [params.sessionId, body]
5628
+ );
5583
5629
  const stream3 = await session.stream(result);
5584
5630
  return (0, import_ai5.createUIMessageStreamResponse)({ stream: stream3 });
5585
5631
  }
@@ -5641,4 +5687,4 @@ function handleRequest(agent2, options = {}) {
5641
5687
  handleRequest,
5642
5688
  tool
5643
5689
  });
5644
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzL2xvZ2dlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3cudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2RvY2tlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc2FuZGJveC9wcm9jZXNzLW1hbmFnZXIudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9hZ2VudC9jbGllbnQudHMiLCAiLi4vc3JjL3NhbmRib3gvaGFuZGxlLnRzIiwgIi4uL3NyYy9hZ2VudC9pcy12ZXJjZWwudHMiLCAiLi4vc3JjL2Vycm9ycy50cyIsICIuLi9zcmMvc2FuZGJveC9zZXR1cC50cyIsICIuLi9zcmMvc2FuZGJveC9leGVjLnRzIiwgIi4uL3NyYy9zYW5kYm94L2dldC1kb21haW4udHMiLCAiLi4vc3JjL3NhbmRib3gvZ2V0LXN0YXR1cy50cyIsICIuLi9zcmMvc2FuZGJveC9raWxsLnRzIiwgIi4uL3NyYy9zYW5kYm94L3JlYWQtZmlsZS50cyIsICIuLi9zcmMvc2FuZGJveC9zbmFwc2hvdC50cyIsICIuLi9zcmMvc2FuZGJveC9zdGFydC50cyIsICIuLi9zcmMvc2FuZGJveC9zdG9wLnRzIiwgIi4uL3NyYy9zYW5kYm94L3VwZGF0ZS1uZXR3b3JrLXBvbGljeS50cyIsICIuLi9zcmMvc2FuZGJveC93cml0ZS1maWxlcy50cyIsICIuLi9zcmMvc2Vzc2lvbi9oYW5kbGUudHMiLCAiLi4vc3JjL3V0aWxzL3VpLnRzIiwgIi4uL3NyYy91dGlscy91c2FnZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9oaXN0b3J5LnRzIiwgIi4uL3NyYy9zZXNzaW9uL2ludGVycnVwdC50cyIsICIuLi9zcmMvc2Vzc2lvbi9zZW5kLnRzIiwgIi4uL3NyYy9zZXNzaW9uL2FpLWxvb3Avc3RyZWFtLXRleHQudHMiLCAiLi4vc3JjL3NraWxscy9kaXNjb3Zlci50cyIsICIuLi9zcmMvc2tpbGxzL3BhcnNlci50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWhvc3QudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWlubGluZS50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUtcmVtb3RlLnRzIiwgIi4uL3NyYy90b29scy9pbmRleC50cyIsICIuLi9zcmMvdG9vbHMvamF2YXNjcmlwdC50cyIsICIuLi9zcmMvdG9vbHMvbmVlZHMtYXBwcm92YWwudHMiLCAiLi4vc3JjL3Rvb2xzL3Rvb2wudHMiLCAiLi4vc3JjL3V0aWxzL3Byb21wdC1jYWNoZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9zdHJlYW0udHMiLCAiLi4vc3JjL3Nlc3Npb24vdXBkYXRlLnRzIiwgIi4uL3NyYy9zZXNzaW9uL3VzYWdlLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2FkYXB0ZXIudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3Ytb3B0aW1pc3RpYy11cGRhdGUudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3YudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwudHMiLCAiLi4vc3JjL3N0b3JhZ2Uvc2hvdWxkLWZhbGxiYWNrLWt2Mi50cyIsICIuLi9zcmMvYWdlbnQvcmVnaXN0cnkudHMiLCAiLi4vc3JjL3JwYy9ycGMudHMiLCAiLi4vc3JjL3JwYy9hZ2VudENvbnRyYWN0LnRzIiwgIi4uL3NyYy9ycGMvc2NoZW1hcy50cyIsICIuLi9zcmMvcnBjL2Jhc2UtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiIHwgXCJzaWxlbnRcIjtcblxuY29uc3QgTE9HX0xFVkVMX1BSSU9SSVRZOiBSZWNvcmQ8TG9nTGV2ZWwsIG51bWJlcj4gPSB7XG4gIGluZm86IDAsXG4gIHdhcm46IDEsXG4gIGVycm9yOiAyLFxuICBzaWxlbnQ6IDMsXG59O1xuXG5leHBvcnQgdHlwZSBMb2dDb250ZXh0ID0ge1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgc2FuZGJveElkPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgbGV2ZWw/OiBMb2dMZXZlbDtcbiAgLyoqXG4gICAqIFRvcC1sZXZlbCBsYWJlbCBmb3IgYWxsIGxvZyBsaW5lcy5cbiAgICogQGRlZmF1bHQgXCJhZ2VudFwiXG4gICAqIEBleGFtcGxlIFwibXktYXBwXCIgXHUyMTkyIFtteS1hcHA6ZGVmYXVsdDp3b3JrZmxvd11cbiAgICovXG4gIHByZWZpeD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGdldExldmVsKGNvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IExvZ0xldmVsIHtcbiAgcmV0dXJuIGNvbmZpZy5sZXZlbCA/PyBcIndhcm5cIjtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlZml4KGNvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb25maWcucHJlZml4ID8/IFwiYWdlbnRcIjtcbn1cblxuZnVuY3Rpb24gc2hvdWxkTG9nKGNvbmZpZzogTG9nZ2luZ0NvbmZpZywgbGV2ZWw6IExvZ0xldmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBMT0dfTEVWRUxfUFJJT1JJVFlbbGV2ZWxdID49IExPR19MRVZFTF9QUklPUklUWVtnZXRMZXZlbChjb25maWcpXTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGFnKGNvbmZpZzogTG9nZ2luZ0NvbmZpZywgc3Vic3lzdGVtOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFske2dldFByZWZpeChjb25maWcpfToke2NvbmZpZy5uYW1lfToke3N1YnN5c3RlbX1dYDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0YShcbiAgY29udGV4dDogTG9nQ29udGV4dCxcbiAgZXh0cmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmNvbnRleHQsIC4uLmV4dHJhIH07XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtZXJnZWQpLmZpbHRlcihcbiAgICAoWywgdl0pID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG4gICk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIHJlYWRvbmx5IHN1YnN5c3RlbTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBMb2dDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzdWJzeXN0ZW0sXG4gICAgY29uZmlnLFxuICAgIGNvbnRleHQsXG4gIH06IHtcbiAgICBzdWJzeXN0ZW06IHN0cmluZztcbiAgICBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gICAgY29udGV4dD86IExvZ0NvbnRleHQ7XG4gIH0pIHtcbiAgICB0aGlzLnN1YnN5c3RlbSA9IHN1YnN5c3RlbTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0ID8/IHt9O1xuICB9XG5cbiAgY2hpbGQoe1xuICAgIHN1YnN5c3RlbSxcbiAgICBjb250ZXh0LFxuICB9OiB7XG4gICAgc3Vic3lzdGVtPzogc3RyaW5nO1xuICAgIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xuICB9KTogTG9nZ2VyIHtcbiAgICByZXR1cm4gbmV3IExvZ2dlcih7XG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc3Vic3lzdGVtOiBzdWJzeXN0ZW0gPyBgJHt0aGlzLnN1YnN5c3RlbX06JHtzdWJzeXN0ZW19YCA6IHRoaXMuc3Vic3lzdGVtLFxuICAgICAgY29udGV4dDogeyAuLi50aGlzLmNvbnRleHQsIC4uLmNvbnRleHQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHdpdGhDb250ZXh0KGNvbnRleHQ6IExvZ0NvbnRleHQpOiBMb2dnZXIge1xuICAgIHJldHVybiBuZXcgTG9nZ2VyKHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBzdWJzeXN0ZW06IHRoaXMuc3Vic3lzdGVtLFxuICAgICAgY29udGV4dDogeyAuLi50aGlzLmNvbnRleHQsIC4uLmNvbnRleHQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJpbmZvXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghc2hvdWxkTG9nKHRoaXMuY29uZmlnLCBcIndhcm5cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGZvcm1hdERhdGEodGhpcy5jb250ZXh0LCBkYXRhKTtcbiAgICBpZiAoZCkge1xuICAgICAgY29uc29sZS53YXJuKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghc2hvdWxkTG9nKHRoaXMuY29uZmlnLCBcImVycm9yXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCBsb2dzIHRoZSBlbGFwc2VkIHRpbWUgYXQgaW5mbyBsZXZlbC5cbiAgICogUGFzcyBgbG9nT25TdGFydDogdHJ1ZWAgdG8gYWxzbyBsb2cgd2hlbiB0aGUgdGltZXIgYmVnaW5zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkb25lID0gbG9nLnRpbWUoXCJzYW5kYm94IHNldHVwXCIsIHsgc2FuZGJveElkIH0sIHsgbG9nT25TdGFydDogdHJ1ZSB9KTtcbiAgICogYXdhaXQgc2V0dXAoKTtcbiAgICogZG9uZSgpOyAvLyBzdGFydDogW2FnZW50OmRlZmF1bHQ6c2FuZGJveF0gc2FuZGJveCBzZXR1cCB7IHNhbmRib3hJZDogJy4uLicgfVxuICAgKiAgICAgICAgIC8vIGVuZDogICBbYWdlbnQ6ZGVmYXVsdDpzYW5kYm94XSBzYW5kYm94IHNldHVwIHsgc2FuZGJveElkOiAnLi4uJywgZHVyYXRpb25NczogMTIzIH1cbiAgICovXG4gIHRpbWUoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBvcHRzPzogeyBsb2dPblN0YXJ0PzogYm9vbGVhbiB9XG4gICk6IChlbmREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQge1xuICAgIGlmIChvcHRzPy5sb2dPblN0YXJ0KSB7XG4gICAgICB0aGlzLmluZm8oYFtzdGFydF0gJHttZXNzYWdlfWAsIGRhdGEpO1xuICAgIH1cbiAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIChlbmREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIHRoaXMuaW5mbyhvcHRzPy5sb2dPblN0YXJ0ID8gYFtlbmRdICR7bWVzc2FnZX1gIDogbWVzc2FnZSwge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICAuLi5lbmREYXRhLFxuICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIoe1xuICBjb25maWcsXG4gIHN1YnN5c3RlbSxcbiAgY29udGV4dCxcbn06IHtcbiAgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICBzdWJzeXN0ZW06IHN0cmluZztcbiAgY29udGV4dD86IExvZ0NvbnRleHQ7XG59KTogTG9nZ2VyIHtcbiAgcmV0dXJuIG5ldyBMb2dnZXIoeyBjb25maWcsIHN1YnN5c3RlbSwgY29udGV4dCB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3ggYXMgVmVyY2VsU2FuZGJveFNESyB9IGZyb20gXCJAdmVyY2VsL3NhbmRib3hcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEFnZW50UmVmIH0gZnJvbSBcIi4uLy4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgVmVyY2VsQmluZGluZ01ldGFkYXRhIH0gZnJvbSBcIi4uL3ZlcmNlbFwiO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkU2FuZGJveFNESygpOiBQcm9taXNlPHR5cGVvZiBWZXJjZWxTYW5kYm94U0RLPiB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBERUZBVUxUX1BPTExfSU5URVJWQUxfTVMgPSAyICogNjAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9JRExFX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVMgPSAxMCAqIDYwICogMTAwMDtcblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlU3RlcFJlc3VsdCA9XG4gIHwgeyBhY3Rpb246IFwiY29udGludWVcIjsgbmV4dFBvbGxNczogbnVtYmVyIH1cbiAgfCB7XG4gICAgICBhY3Rpb246IFwiZXhpdFwiO1xuICAgICAgcmVhc29uOiBcInNhbmRib3hJZF9jaGFuZ2VkXCIgfCBcImlkbGVcIiB8IFwidGltZW91dFwiIHwgXCJub3RfZm91bmRcIjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVDb25maWcgPSB7XG4gIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICBzdG9wQWZ0ZXJJbmFjdGl2ZU1zPzogbnVtYmVyO1xuICBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUlucHV0ID0ge1xuICBhZ2VudDogU2FuZGJveEFnZW50UmVmO1xuICBzYW5kYm94SWQ6IHN0cmluZztcbiAgdmVyY2VsU2FuZGJveElkOiBzdHJpbmc7XG4gIGNvbmZpZz86IExpZmVjeWNsZUNvbmZpZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0FuZFNuYXBzaG90U3RlcChcbiAgaW5wdXQ6IExpZmVjeWNsZUlucHV0XG4pOiBQcm9taXNlPEVycm9yIHwgTGlmZWN5Y2xlU3RlcFJlc3VsdD4ge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgY29uc3Qgc3RvcmFnZSA9IGlucHV0LmFnZW50LnN0b3JhZ2U7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmlucHV0LmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogaW5wdXQuYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJzYW5kYm94OmxpZmVjeWNsZVwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQgfSxcbiAgfSk7XG5cbiAgbG9nLmluZm8oXCJsaWZlY3ljbGUgY2hlY2sgc3RhcnRlZFwiLCB7XG4gICAgdmVyY2VsU2FuZGJveElkOiBpbnB1dC52ZXJjZWxTYW5kYm94SWQsXG4gIH0pO1xuXG4gIGNvbnN0IHJlY29yZCA9IGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC5nZXQoaW5wdXQuc2FuZGJveElkKTtcbiAgaWYgKCFyZWNvcmQpIHtcbiAgICBsb2cud2FybihcInNhbmRib3ggcmVjb3JkIG5vdCBmb3VuZCwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IHJlY29yZC5zZXR1cD8ubWV0YWRhdGEgYXMgVmVyY2VsQmluZGluZ01ldGFkYXRhIHwgbnVsbDtcbiAgY29uc3QgY3VycmVudFNhbmRib3hJZCA9IG1ldGFkYXRhPy5zYW5kYm94SWQgPz8gbnVsbDtcblxuICBpZiAoY3VycmVudFNhbmRib3hJZCAhPT0gaW5wdXQudmVyY2VsU2FuZGJveElkKSB7XG4gICAgbG9nLmluZm8oXCJzYW5kYm94IElEIGNoYW5nZWQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIGV4cGVjdGVkOiBpbnB1dC52ZXJjZWxTYW5kYm94SWQsXG4gICAgICBhY3R1YWw6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcInNhbmRib3hJZF9jaGFuZ2VkXCIgfTtcbiAgfVxuXG4gIGlmICghY3VycmVudFNhbmRib3hJZCkge1xuICAgIGxvZy53YXJuKFwibm8gY3VycmVudCBzYW5kYm94IElEIGluIG1ldGFkYXRhLCBleGl0aW5nIGxpZmVjeWNsZVwiKTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGNvbnN0IHBvbGxJbnRlcnZhbE1zID1cbiAgICBpbnB1dC5jb25maWc/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUztcbiAgY29uc3QgaWRsZVRpbWVvdXRNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5zdG9wQWZ0ZXJJbmFjdGl2ZU1zID8/IERFRkFVTFRfSURMRV9USU1FT1VUX01TO1xuICBjb25zdCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5zbmFwc2hvdEJlZm9yZVRpbWVvdXRNcyA/PyBTTkFQU0hPVF9CRUZPUkVfVElNRU9VVF9NUztcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBsYXN0QWN0aXZpdHkgPSByZWNvcmQubGFzdEFjdGl2ZUF0ID8/IHJlY29yZC5jcmVhdGVkQXQgPz8gbm93O1xuICBjb25zdCBpZGxlRHVyYXRpb24gPSBub3cgLSBsYXN0QWN0aXZpdHk7XG4gIGNvbnN0IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID0gaWRsZUR1cmF0aW9uID4gaWRsZVRpbWVvdXRNcztcblxuICBsZXQgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgc2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgfSk7XG4gICAgaWYgKHNhbmRib3gudGltZW91dCA8IHNuYXBzaG90QmVmb3JlVGltZW91dE1zKSB7XG4gICAgICBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBsb2cud2FybihcImZhaWxlZCB0byBnZXQgc2FuZGJveCBmcm9tIFNESywgZXhpdGluZyBsaWZlY3ljbGVcIiwge1xuICAgICAgdmVyY2VsU2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgaWYgKHNob3VsZFNuYXBzaG90RHVlVG9JZGxlIHx8IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0KSB7XG4gICAgY29uc3QgcmVhc29uID0gc2hvdWxkU25hcHNob3REdWVUb0lkbGUgPyBcImlkbGVcIiA6IFwidGltZW91dFwiO1xuICAgIGxvZy5pbmZvKFwic25hcHNob3R0aW5nIHNhbmRib3ggYmVmb3JlIGV4aXRcIiwge1xuICAgICAgcmVhc29uLFxuICAgICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgc2FuZGJveC5zbmFwc2hvdCgpO1xuICAgICAgbG9nLmluZm8oXCJzbmFwc2hvdCBjcmVhdGVkXCIsIHsgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9KTtcblxuICAgICAgYXdhaXQgc3RvcmFnZS5zYW5kYm94LnVwZGF0ZShpbnB1dC5zYW5kYm94SWQsIHtcbiAgICAgICAgc2V0dXA6IHtcbiAgICAgICAgICAuLi5yZWNvcmQuc2V0dXAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveElkOiBudWxsLCBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGxvZy5pbmZvKFwic2FuZGJveCByZWNvcmQgdXBkYXRlZCB3aXRoIHNuYXBzaG90XCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzbmFwc2hvdCBzYW5kYm94XCIsIHsgY2F1c2U6IGUgfSk7XG4gICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpO1xuICAgIH1cbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb24gfTtcbiAgfVxuXG4gIGxvZy5pbmZvKFwic2FuZGJveCBzdGlsbCBhY3RpdmUsIGNvbnRpbnVpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICBpZGxlRHVyYXRpb25NczogaWRsZUR1cmF0aW9uLFxuICAgIG5leHRQb2xsTXM6IHBvbGxJbnRlcnZhbE1zLFxuICB9KTtcbiAgcmV0dXJuIHsgYWN0aW9uOiBcImNvbnRpbnVlXCIsIG5leHRQb2xsTXM6IHBvbGxJbnRlcnZhbE1zIH07XG59XG4iLCAiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNoZWNrQW5kU25hcHNob3RTdGVwLCB0eXBlIExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4vc3RlcHNcIjtcblxuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVJbnB1dCB9O1xuXG5jb25zdCBERUZBVUxUX1BPTExfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpZmVjeWNsZVdvcmtmbG93KHtcbiAgaW5wdXQsXG59OiB7XG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dDtcbn0pIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcblxuICBsZXQgbmV4dFBvbGxNcyA9IGlucHV0LmNvbmZpZz8ucG9sbEludGVydmFsTXMgPz8gREVGQVVMVF9QT0xMX01TO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIHdvcmtmbG93IHN0YXJ0ZWRcIiwge1xuICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgIHBvbGxNczogbmV4dFBvbGxNcyxcbiAgfSk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhd2FpdCBzbGVlcChuZXh0UG9sbE1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrQW5kU25hcHNob3RTdGVwKGlucHV0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgbG9nLmVycm9yKFwibGlmZWN5Y2xlIHN0ZXAgZmFpbGVkXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09IFwiZXhpdFwiKSB7XG4gICAgICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBleGl0aW5nXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIHJlYXNvbjogcmVzdWx0LnJlYXNvbixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dFBvbGxNcyA9IHJlc3VsdC5uZXh0UG9sbE1zO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgc3RhcnQgYXMgc3RhcnRXb3JrZmxvdyB9IGZyb20gXCJ3b3JrZmxvdy9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvc3RlcHNcIjtcbmltcG9ydCB7IHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3dcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKSB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBNQVhfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDYwICogMTAwMDsgLy8gNSBob3Vyc1xuY29uc3QgSE9NRV9ESVIgPSBcIi9ob21lL3ZlcmNlbC1zYW5kYm94XCI7XG5jb25zdCBERUZBVUxUX1ZDUFVTID0gMjtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xuICByZXNvdXJjZXM/OiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xuICBsaWZlY3ljbGU/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hJZDogc3RyaW5nO1xufTtcblxudHlwZSBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgcmVzb3VyY2VzOiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTYW5kYm94R29uZUVycm9yKGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9XG4gICAgKGUgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSkucmVzcG9uc2U/LnN0YXR1cyA/P1xuICAgIChlIGFzIHsgY2F1c2U/OiB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9IH0pLmNhdXNlPy5yZXNwb25zZVxuICAgICAgPy5zdGF0dXM7XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDEwIHx8IHN0YXR1cyA9PT0gNDIyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtc2cgPSBlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGNvbW1hbmQgZGF0YVwiKSB8fFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGxvZ3NcIilcbiAgKTtcbn1cblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2RrKHtcbiAgcmVzb3VyY2VzLFxuICBwb3J0cyxcbiAgbmV0d29ya1BvbGljeSxcbiAgc25hcHNob3RJZCxcbn06IENyZWF0ZVNhbmRib3hPcHRzKSB7XG4gIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICBjb25zdCBiYXNlID0ge1xuICAgIHJlc291cmNlcyxcbiAgICB0aW1lb3V0OiBNQVhfVElNRU9VVF9NUyxcbiAgICAuLi4ocG9ydHMgPyB7IHBvcnRzIH0gOiB7fSksXG4gICAgLi4uKG5ldHdvcmtQb2xpY3kgPyB7IG5ldHdvcmtQb2xpY3kgfSA6IHt9KSxcbiAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgfTtcblxuICBpZiAoc25hcHNob3RJZCkge1xuICAgIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZSh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgc291cmNlOiB7IHR5cGU6IFwic25hcHNob3RcIiBhcyBjb25zdCwgc25hcHNob3RJZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFNhbmRib3hTREsuY3JlYXRlKGJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTZXR1cFNuYXBzaG90KHtcbiAgc2FuZGJveE9wdHMsXG4gIHJ1bixcbiAgc3RvcmFnZSxcbiAgc25hcHNob3RWZXJzaW9uLFxuICBsb2csXG59OiB7XG4gIHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cztcbiAgcnVuOiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuICBzbmFwc2hvdFZlcnNpb246IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0ZW1wU2RrOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNkaz4+IHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgdGVtcFNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgY29uc3QgdGVtcEluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZSh0ZW1wU2RrKTtcbiAgICBhd2FpdCBydW4odGVtcEluc3RhbmNlKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRlbXBTZGsuc25hcHNob3QoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNldHVwLnNldChzbmFwc2hvdFZlcnNpb24sIHtcbiAgICAgIHZlcnNpb246IHNuYXBzaG90VmVyc2lvbixcbiAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQsXG4gICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICBsYXN0VXNlZEF0OiBudWxsLFxuICAgIH0pO1xuICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBzZXR1cCBzbmFwc2hvdFwiLCB7XG4gICAgICBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBjYXVzZTogZXJyb3IsXG4gICAgfSk7XG4gICAgaWYgKHRlbXBTZGspIHtcbiAgICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFZlcmNlbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveDtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveCwgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZGsgPSBzZGs7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gSE9NRV9ESVI7XG4gIH1cblxuICBhc3luYyBleGVjKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgY3dkLFxuICAgIGVudixcbiAgICBzdWRvLFxuICAgIHNpZ25hbCxcbiAgfToge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNkay5ydW5Db21tYW5kKHtcbiAgICAgIGNtZDogY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBjd2Q6IGN3ZCA/PyB0aGlzLmN3ZCxcbiAgICAgIGVudixcbiAgICAgIHN1ZG8sXG4gICAgICBzaWduYWwsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ0J1ZmZlcjogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICByZXNvbHZlOiBudWxsIGFzICgoKSA9PiB2b2lkKSB8IG51bGwsXG4gICAgICBjb25zdW1lZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVMb2dzID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2Ygb3V0cHV0LmxvZ3MoKSkge1xuICAgICAgICAgIGlmIChlbnRyeS5zdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBlbnRyeS5kYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGRlcnIgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dCdWZmZXIucHVzaChlbnRyeSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTYW5kYm94IG1heSBoYXZlIGJlZW4gc3RvcHBlZCBcdTIwMTQgbG9ncyBlbmRwb2ludCByZXR1cm5zIDQyMlxuICAgICAgfVxuICAgICAgc3RhdGUuY29uc3VtZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgfSkoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgd2hpbGUgKCFzdGF0ZS5jb25zdW1lZCB8fCBpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbG9nQnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHlpZWxkIGxvZ0J1ZmZlcltpbmRleCsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb25zdW1lTG9ncy50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gYXdhaXQgb3V0cHV0LndhaXQoKTtcbiAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBmaW5pc2hlZC5leGl0Q29kZSB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNTYW5kYm94R29uZUVycm9yKGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNvbW1hbmRJZDogb3V0cHV0LmNtZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKHtcbiAgICBwYXRoOiBmaWxlUGF0aCxcbiAgfToge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZGsucmVhZEZpbGVUb0J1ZmZlcih7IHBhdGg6IGZpbGVQYXRoLCBjd2Q6IHRoaXMuY3dkIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyh7XG4gICAgZmlsZXMsXG4gICAgZGVzdFBhdGgsXG4gIH06IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG5hdGl2ZUZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucG9zaXguam9pbihkZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucG9zaXguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgICAgPyBmaWxlUGF0aFxuICAgICAgICA6IHBhdGgucG9zaXguam9pbih0aGlzLmN3ZCwgZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KVxuICAgICAgICAgICAgOiBmaWxlLmNvbnRlbnQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZGsud3JpdGVGaWxlcyhuYXRpdmVGaWxlcyk7XG5cbiAgICBjb25zdCBzaGVsbFNjcmlwdHMgPSBuYXRpdmVGaWxlcy5maWx0ZXIoKGYpID0+IGYucGF0aC5lbmRzV2l0aChcIi5zaFwiKSk7XG4gICAgaWYgKHNoZWxsU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoe1xuICAgICAgICBjb21tYW5kOiBcImNobW9kXCIsXG4gICAgICAgIGFyZ3M6IFtcIit4XCIsIC4uLnNoZWxsU2NyaXB0cy5tYXAoKGYpID0+IGYucGF0aCldLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IHN5bmNocm9ub3VzIFNESyBjYWxsXG4gIGFzeW5jIGdldERvbWFpbih7XG4gICAgcG9ydCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2RrLmRvbWFpbihwb3J0KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwoe1xuICAgIGNvbW1hbmRJZCxcbiAgfToge1xuICAgIGNvbW1hbmRJZDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY21kID0gYXdhaXQgdGhpcy5zZGsuZ2V0Q29tbWFuZChjb21tYW5kSWQpO1xuICAgIGF3YWl0IGNtZC5raWxsKCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgZ2V0dGVyXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zZGsuc3RhdHVzO1xuICAgIC8vIE1hcCBTREstb25seSBzdGF0dXNlcyB0byBvdXIgaW50ZXJmYWNlJ3MgdW5pb25cbiAgICBpZiAoc3RhdHVzID09PSBcInNuYXBzaG90dGluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUgVmVyY2VsIFNESyBkb2Vzbid0IGhhdmUgYSByZXN1bWUgbWV0aG9kLlxuICAgIC8vIFJ1biBhIG5vLW9wIGNvbW1hbmQgdG8gdmVyaWZ5IHRoZSBzYW5kYm94IGlzIHJlYWNoYWJsZS5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kOiBcInRydWVcIiB9KTtcbiAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNkay5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzbmFwID0gYXdhaXQgdGhpcy5zZGsuc25hcHNob3QoKTtcbiAgICByZXR1cm4geyBzbmFwc2hvdElkOiBzbmFwLnNuYXBzaG90SWQgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koe1xuICAgIHBvbGljeSxcbiAgfToge1xuICAgIHBvbGljeTogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLk5ldHdvcmtQb2xpY3k7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnVwZGF0ZU5ldHdvcmtQb2xpY3kocG9saWN5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyY2VsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IFZlcmNlbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwidmVyY2VsXCIsIFZlcmNlbEJpbmRpbmdDb25maWcsIFZlcmNlbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidmVyY2VsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKHsgY3dkOiBjcmVhdGVDd2QsIGFnZW50LCBzZXR1cCwgcmVjb3JkLCBzaWduYWw6IF9zaWduYWwsIGxvZyB9KSB7XG4gICAgICBjb25zdCBzdG9yYWdlID0gYWdlbnQuc3RvcmFnZTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHNldHVwLmNvbmZpZyA/PyB7fTtcbiAgICAgIGNvbnN0IGN3ZCA9IGNvbmZpZy5jd2QgPz8gY3JlYXRlQ3dkID8/IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IGNvbmZpZy5yZXNvdXJjZXMgPz8geyB2Y3B1czogREVGQVVMVF9WQ1BVUyB9O1xuICAgICAgY29uc3QgcG9ydHMgPSBjb25maWcucG9ydHM7XG4gICAgICBjb25zdCBuZXR3b3JrUG9saWN5ID1cbiAgICAgICAgY29uZmlnLm5ldHdvcmtQb2xpY3kgPz8gc2V0dXAubmV0d29ya1BvbGljeSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBwb3J0cyxcbiAgICAgICAgbmV0d29ya1BvbGljeSxcbiAgICAgICAgc25hcHNob3RJZDogY29uZmlnLnNuYXBzaG90SWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBfc3RhcnRMaWZlY3ljbGUgPSAodmVyY2VsU2FuZGJveElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXb3JrZmxvdyhzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3csIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgc2FuZGJveElkOiByZWNvcmQuaWQsXG4gICAgICAgICAgICAgIHZlcmNlbFNhbmRib3hJZCxcbiAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzdGFydCBsaWZlY3ljbGUgd29ya2Zsb3dcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2V0dXAudmVyc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHN0b3JhZ2Uuc2V0dXAuZ2V0KHNldHVwLnZlcnNpb24pO1xuICAgICAgICBpZiAoZXhpc3Rpbmc/LnNuYXBzaG90SWQpIHtcbiAgICAgICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoe1xuICAgICAgICAgICAgLi4uc2FuZGJveE9wdHMsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBleGlzdGluZy5zbmFwc2hvdElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgICAgICBzdG9yYWdlLnNldHVwXG4gICAgICAgICAgICAuc2V0KHNldHVwLnZlcnNpb24sIHtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICAgIHZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgICAgIGxhc3RVc2VkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR1cC5ydW4pIHtcbiAgICAgICAgaWYgKCFzZXR1cC52ZXJzaW9uKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwic2V0dXAucnVuIHByb3ZpZGVkIHdpdGhvdXQgc2V0dXAudmVyc2lvblwiLCB7IHNldHVwIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gICAgICAgICAgc2FuZGJveE9wdHMsXG4gICAgICAgICAgcnVuOiBzZXR1cC5ydW4sXG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICBzbmFwc2hvdFZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgbG9nLFxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJiYWNrZ3JvdW5kIHNldHVwIHNuYXBzaG90IGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcbiAgICAgICAgYXdhaXQgc2V0dXAucnVuKGluc3RhbmNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY29ubmVjdCh7IG1ldGFkYXRhLCBjd2QgfSkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICAgIHNhbmRib3hJZDogbWV0YWRhdGEuc2FuZGJveElkLFxuICAgICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2Uoc2RrLCBjd2QgPz8gdW5kZWZpbmVkKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0LCBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgRG9ja2VyQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRG9ja2VyQmluZGluZ01ldGFkYXRhID0ge1xuICBzYW5kYm94TmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSdW4gYSBgZG9ja2VyIHNhbmRib3hgIENMSSBjb21tYW5kIGFuZCByZXR1cm4gaXRzIG91dHB1dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY0RvY2tlcihcbiAgYXJnczogc3RyaW5nW10sXG4gIG9wdHM/OiB7IHRpbWVvdXRNcz86IG51bWJlcjsgc2lnbmFsPzogQWJvcnRTaWduYWwgfVxuKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiZG9ja2VyXCIsIFtcInNhbmRib3hcIiwgLi4uYXJnc10sIHtcbiAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIHN0ZG91dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dElkID0gb3B0cz8udGltZW91dE1zXG4gICAgICA/IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGRvY2tlciBzYW5kYm94ICR7YXJnc1swXX0gdGltZWQgb3V0YCkpO1xuICAgICAgICB9LCBvcHRzLnRpbWVvdXRNcylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFjayB3aGljaCBzYW5kYm94ZXMgaGF2ZSBiZWVuIHZlcmlmaWVkIHRvIGV4aXN0IGluIHRoaXMgcHJvY2Vzcy5cbiAqIE1hcHMgc2FuZGJveCBuYW1lIC0+IFByb21pc2Ugc28gY29uY3VycmVudCBjYWxsZXJzIHdhaXQgb24gdGhlIHNhbWUgY2hlY2suXG4gKi9cbmNvbnN0IGVuc3VyZVByb21pc2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbi8qKlxuICogU2FuZGJveGVzIHRoYXQgdGhpcyBwcm9jZXNzIGhhcyB1c2VkLiBTdG9wcGVkIG9uIHByb2Nlc3MgZXhpdC5cbiAqL1xuY29uc3QgYWN0aXZlU2FuZGJveGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmxldCBjbGVhbnVwUmVnaXN0ZXJlZCA9IGZhbHNlO1xubGV0IF9leGVjU3luYzogdHlwZW9mIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5leGVjU3luYyB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckNsZWFudXAoKSB7XG4gIGlmIChjbGVhbnVwUmVnaXN0ZXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjbGVhbnVwUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgLy8gUHJlLWxvYWQgZXhlY1N5bmMgc28gdGhlIHN5bmNocm9ub3VzIGV4aXQgaGFuZGxlciBjYW4gdXNlIGl0LlxuICBjb25zdCBjcCA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgX2V4ZWNTeW5jID0gY3AuZXhlY1N5bmM7XG5cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBpZiAoIV9leGVjU3luYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgQXJyYXkuZnJvbShhY3RpdmVTYW5kYm94ZXMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBfZXhlY1N5bmMoYGRvY2tlciBzYW5kYm94IHN0b3AgJHtuYW1lfWAsIHtcbiAgICAgICAgICB0aW1lb3V0OiAxMF8wMDAsXG4gICAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBCZXN0LWVmZm9ydCBcdTIwMTQgc2FuZGJveCBtYXkgYWxyZWFkeSBiZSBzdG9wcGVkXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJleGl0XCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgcHJvY2Vzcy5leGl0KDEzMCk7XG4gIH0pO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxNDMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBEb2NrZXIgc2FuZGJveCBleGlzdHMgZm9yIHRoZSBnaXZlbiBuYW1lLlxuICogSWYgaXQgYWxyZWFkeSBleGlzdHMgKGZyb20gYSBwcmV2aW91cyBwcm9jZXNzKSwgcmV1c2VzIGl0LlxuICogSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlcyBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2FuZGJveChzYW5kYm94TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gZW5zdXJlUHJvbWlzZXMuZ2V0KHNhbmRib3hOYW1lKTtcbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbHMgPSBhd2FpdCBleGVjRG9ja2VyKFtcImxzXCIsIFwiLXFcIl0sIHsgdGltZW91dE1zOiAxMF8wMDAgfSk7XG4gICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9XG4gICAgICBscy5leGl0Q29kZSA9PT0gMFxuICAgICAgICA/IGxzLnN0ZG91dFxuICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgOiBbXTtcblxuICAgIGlmIChleGlzdGluZ05hbWVzLmluY2x1ZGVzKHNhbmRib3hOYW1lKSkge1xuICAgICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG9zID0gYXdhaXQgaW1wb3J0KFwibm9kZTpvc1wiKTtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG5cbiAgICBjb25zdCB3b3Jrc3BhY2VEaXIgPSBwYXRoLmpvaW4oXG4gICAgICBvcy50bXBkaXIoKSxcbiAgICAgIFwiYWdlbnQtZG9ja2VyLXNhbmRib3hcIixcbiAgICAgIHNhbmRib3hOYW1lXG4gICAgKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih3b3Jrc3BhY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgY3JlYXRlID0gYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgIFtcImNyZWF0ZVwiLCBcIi0tbmFtZVwiLCBzYW5kYm94TmFtZSwgXCJzaGVsbFwiLCB3b3Jrc3BhY2VEaXJdLFxuICAgICAgeyB0aW1lb3V0TXM6IDYwXzAwMCB9XG4gICAgKTtcblxuICAgIGlmIChjcmVhdGUuZXhpdENvZGUgIT09IDApIHtcbiAgICAgIGlmIChjcmVhdGUuc3RkZXJyLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikpIHtcbiAgICAgICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gY3JlYXRlIGRvY2tlciBzYW5kYm94IFwiJHtzYW5kYm94TmFtZX1cIjogJHtjcmVhdGUuc3RkZXJyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gIH0pKCk7XG5cbiAgZW5zdXJlUHJvbWlzZXMuc2V0KHNhbmRib3hOYW1lLCBwcm9taXNlKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlbnN1cmVQcm9taXNlcy5kZWxldGUoc2FuZGJveE5hbWUpO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9ET0NLRVJfQ1dEID0gXCIvaG9tZS9hZ2VudC93b3Jrc3BhY2VcIjtcblxuY2xhc3MgRG9ja2VyU2FuZGJveEluc3RhbmNlIGltcGxlbWVudHMgU2FuZGJveEluc3RhbmNlIHtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FuZGJveE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZXMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzXG4gID4oKTtcblxuICBjb25zdHJ1Y3RvcihzYW5kYm94TmFtZTogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNhbmRib3hOYW1lID0gc2FuZGJveE5hbWU7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gREVGQVVMVF9ET0NLRVJfQ1dEO1xuICB9XG5cbiAgYXN5bmMgZXhlYyhvcHRzOiB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBzdHJpbmdbXTtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzdWRvPzogYm9vbGVhbjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgY29uc3QgY29tbWFuZElkID0gYGNvbW1hbmRfJHt1bGlkKCl9YDtcbiAgICBjb25zdCBlbnZGbGFncyA9IG9wdHMuZW52XG4gICAgICA/IE9iamVjdC5lbnRyaWVzKG9wdHMuZW52KS5mbGF0TWFwKChbaywgdl0pID0+IFtcIi1lXCIsIGAke2t9PSR7dn1gXSlcbiAgICAgIDogW107XG4gICAgY29uc3QgY3dkRmxhZ3MgPSBvcHRzLmN3ZCA/IFtcIi13XCIsIG9wdHMuY3dkXSA6IFtdO1xuICAgIGxldCBiYXNlQ21kOiBzdHJpbmdbXTtcbiAgICBpZiAob3B0cy5zdWRvKSB7XG4gICAgICBiYXNlQ21kID0gW1wic3Vkb1wiLCBvcHRzLmNvbW1hbmQsIC4uLihvcHRzLmFyZ3MgPz8gW10pXTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuYXJncykge1xuICAgICAgYmFzZUNtZCA9IFtvcHRzLmNvbW1hbmQsIC4uLm9wdHMuYXJnc107XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VDbWQgPSBbb3B0cy5jb21tYW5kXTtcbiAgICB9XG4gICAgY29uc3QgZnVsbENtZCA9IGJhc2VDbWQ7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgICAgXCJkb2NrZXJcIixcbiAgICAgIFtcbiAgICAgICAgXCJzYW5kYm94XCIsXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICAuLi5lbnZGbGFncyxcbiAgICAgICAgLi4uY3dkRmxhZ3MsXG4gICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgIC4uLmZ1bGxDbWQsXG4gICAgICBdLFxuICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzZXMuc2V0KGNvbW1hbmRJZCwgY2hpbGQpO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG4gICAgY29uc3QgbG9nUXVldWU6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGxldCBsb2dSZXNvbHZlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZG91dCArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZG91dFwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3RkZXJyICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3RkZXJyXCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8e1xuICAgICAgc3Rkb3V0OiBzdHJpbmc7XG4gICAgICBzdGRlcnI6IHN0cmluZztcbiAgICAgIGV4aXRDb2RlOiBudW1iZXI7XG4gICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGxvZ3MoKTogQXN5bmNJdGVyYWJsZTx7XG4gICAgICBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiO1xuICAgICAgZGF0YTogc3RyaW5nO1xuICAgIH0+IHtcbiAgICAgIHdoaWxlICghY2xvc2VkIHx8IGxvZ1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBsb2dRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB5aWVsZCBlbnRyeTtcbiAgICAgICAgfSBlbHNlIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIGxvZ1Jlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ1Jlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29tbWFuZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKG9wdHM6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgIFtcbiAgICAgICAgXCJleGVjXCIsXG4gICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgIFwiYmFzaFwiLFxuICAgICAgICBcIi1jXCIsXG4gICAgICAgIGBiYXNlNjQgJyR7b3B0cy5wYXRoLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfSdgLFxuICAgICAgXSxcbiAgICAgIHsgdGltZW91dE1zOiAzMF8wMDAsIHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICk7XG5cbiAgICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJObyBzdWNoIGZpbGVcIikgfHxcbiAgICAgICAgcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhcIkVOT0VOVFwiKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWFkRmlsZSBmYWlsZWQ6ICR7cmVzdWx0LnN0ZGVycn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZG91dC50cmltKCksIFwiYmFzZTY0XCIpO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyhvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIG9wdHMuZmlsZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gb3B0cy5kZXN0UGF0aFxuICAgICAgICA/IGAke29wdHMuZGVzdFBhdGh9LyR7ZmlsZS5wYXRofWBcbiAgICAgICAgOiBmaWxlLnBhdGg7XG5cbiAgICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgcGFyZW50RGlyID0gZnVsbFBhdGguc3Vic3RyaW5nKDAsIGZ1bGxQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG4gICAgICBpZiAocGFyZW50RGlyKSB7XG4gICAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wiZXhlY1wiLCB0aGlzLnNhbmRib3hOYW1lLCBcIm1rZGlyXCIsIFwiLXBcIiwgcGFyZW50RGlyXSwge1xuICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBXcml0ZSB2aWEgYmFzZTY0IHRvIGhhbmRsZSBib3RoIHRleHQgYW5kIGJpbmFyeSBjb250ZW50XG4gICAgICBjb25zdCBiNjQgPVxuICAgICAgICB0eXBlb2YgZmlsZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBCdWZmZXIuZnJvbShmaWxlLmNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgICAgOiBmaWxlLmNvbnRlbnQudG9TdHJpbmcoXCJiYXNlNjRcIik7XG5cbiAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICAgIFtcbiAgICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAgIFwiYmFzaFwiLFxuICAgICAgICAgIFwiLWNcIixcbiAgICAgICAgICBgZWNobyAnJHtiNjR9JyB8IGJhc2U2NCAtZCA+ICcke2Z1bGxQYXRoLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfSdgLFxuICAgICAgICBdLFxuICAgICAgICB7IHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICAgKTtcblxuICAgICAgaWYgKGZpbGUucGF0aC5lbmRzV2l0aChcIi5zaFwiKSkge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJjaG1vZFwiLCBcIit4XCIsIGZ1bGxQYXRoXSwge1xuICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0RG9tYWluKG9wdHM6IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke29wdHMucG9ydH1gO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBraWxsKG9wdHM6IHsgY29tbWFuZElkOiBzdHJpbmc7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMucHJvY2Vzc2VzLmdldChvcHRzLmNvbW1hbmRJZCk7XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShvcHRzLmNvbW1hbmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcbiAgICBcInBlbmRpbmdcIiB8IFwicnVubmluZ1wiIHwgXCJzdG9wcGluZ1wiIHwgXCJzdG9wcGVkXCIgfCBcImZhaWxlZFwiXG4gID4ge1xuICAgIC8vIGRvY2tlciBzYW5kYm94IENMSSBkb2Vzbid0IGV4cG9zZSBzdGF0dXMgXHUyMDE0IGFzc3VtZSBydW5uaW5nIGlmIGVuc3VyZWRcbiAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBleGVjRG9ja2VyKFtcInN0b3BcIiwgdGhpcy5zYW5kYm94TmFtZV0sIHsgdGltZW91dE1zOiAzMF8wMDAgfSk7XG4gICAgYWN0aXZlU2FuZGJveGVzLmRlbGV0ZSh0aGlzLnNhbmRib3hOYW1lKTtcbiAgICBlbnN1cmVQcm9taXNlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8eyBzbmFwc2hvdElkOiBzdHJpbmcgfT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNuYXBzaG90IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRvY2tlciBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidXBkYXRlTmV0d29ya1BvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCJcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb2NrZXJTYW5kYm94KFxuICBkZWZhdWx0cz86IFBhcnRpYWw8aW1wb3J0KFwiLi4vYWRhcHRlclwiKS5TYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICAgIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gICAgY29uZmlnPzogRG9ja2VyQmluZGluZ0NvbmZpZztcbiAgfVxuKTogU2FuZGJveEJpbmRpbmc8XCJkb2NrZXJcIiwgRG9ja2VyQmluZGluZ0NvbmZpZywgRG9ja2VyQmluZGluZ01ldGFkYXRhPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJkb2NrZXJcIixcbiAgICBkZWZhdWx0cyxcbiAgICBhc3luYyBjcmVhdGUob3B0cykge1xuICAgICAgY29uc3Qgc2FuZGJveE5hbWUgPSBgYWdlbnQtJHt1bGlkKCl9YDtcbiAgICAgIGNvbnN0IGN3ZCA9IG9wdHMuc2V0dXA/LmNvbmZpZz8uY3dkO1xuXG4gICAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHNhbmRib3hOYW1lKTtcblxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKHNhbmRib3hOYW1lLCBjd2QpO1xuXG4gICAgICBpZiAob3B0cy5zZXR1cD8ucnVuKSB7XG4gICAgICAgIGF3YWl0IG9wdHMuc2V0dXAucnVuKGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hOYW1lIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gICAgYXN5bmMgY29ubmVjdChvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IERvY2tlclNhbmRib3hJbnN0YW5jZShvcHRzLm1ldGFkYXRhLnNhbmRib3hOYW1lKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0LCBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9jYWxCaW5kaW5nQ29uZmlnID0ge1xuICBjd2Q/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMb2NhbEJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgYmFzZVBhdGg6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG59O1xuXG5jbGFzcyBMb2NhbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3IoYmFzZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICB0aGlzLmN3ZCA9IGJhc2VQYXRoO1xuICB9XG5cbiAgYXN5bmMgZXhlYyhvcHRzOiB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBzdHJpbmdbXTtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzdWRvPzogYm9vbGVhbjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG5cbiAgICBjb25zdCBmaW5hbENtZCA9IG9wdHMuc3VkbyA/IFwic3Vkb1wiIDogb3B0cy5jb21tYW5kO1xuICAgIGNvbnN0IGZpbmFsQXJncyA9IG9wdHMuc3Vkb1xuICAgICAgPyBbb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV1cbiAgICAgIDogKG9wdHMuYXJncyA/PyBbXSk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGZpbmFsQ21kLCBmaW5hbEFyZ3MsIHtcbiAgICAgIGN3ZDogb3B0cy5jd2QgPyBwYXRoLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5jd2QpIDogdGhpcy5iYXNlUGF0aCxcbiAgICAgIGVudjogb3B0cy5lbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRzLmVudiB9IDogdW5kZWZpbmVkLFxuICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5wYXRoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKGZ1bGxQYXRoKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGUgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBcImNvZGVcIiBpbiBlICYmXG4gICAgICAgIChlIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGVzKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICBjb25zdCBwYXRoTW9kID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhNb2QucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLmRlc3RQYXRoLCBmaWxlLnBhdGgpO1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aE1vZC5kaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGZpbGUuY29udGVudCk7XG4gICAgICBpZiAoZmlsZS5wYXRoLmVuZHNXaXRoKFwiLnNoXCIpKSB7XG4gICAgICAgIGF3YWl0IGZzLmNobW9kKGZ1bGxQYXRoLCAwbzc1NSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXREb21haW4ob3B0czoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7b3B0cy5wb3J0fWA7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGtpbGwob3B0czogeyBjb21tYW5kSWQ6IHN0cmluZzsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5wcm9jZXNzZXMuZ2V0KG9wdHMuY29tbWFuZElkKTtcbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKG9wdHMuY29tbWFuZElkKTtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFwicnVubmluZ1wiPiB7XG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gbm8tb3A6IGxvY2FsIHNhbmRib3ggaXMgYWx3YXlzIHN0YXJ0ZWRcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdG9wIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic25hcHNob3QgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cGRhdGVOZXR3b3JrUG9saWN5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxTYW5kYm94KFxuICBkZWZhdWx0cz86IFBhcnRpYWw8aW1wb3J0KFwiLi4vYWRhcHRlclwiKS5TYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICAgIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gICAgY29uZmlnPzogTG9jYWxCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcImxvY2FsXCIsIExvY2FsQmluZGluZ0NvbmZpZywgTG9jYWxCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImxvY2FsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKG9wdHMpIHtcbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0cy5zZXR1cC5jb25maWc/LmN3ZCA/PyBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTG9jYWxTYW5kYm94SW5zdGFuY2UoYmFzZVBhdGgpO1xuXG4gICAgICBpZiAob3B0cy5zZXR1cD8ucnVuKSB7XG4gICAgICAgIGF3YWl0IG9wdHMuc2V0dXAucnVuKGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IGJhc2VQYXRoLCBwaWQ6IHByb2Nlc3MucGlkIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gICAgYXN5bmMgY29ubmVjdChvcHRzKSB7XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IG9wdHMubWV0YWRhdGEuYmFzZVBhdGg7XG4gICAgICByZXR1cm4gbmV3IExvY2FsU2FuZGJveEluc3RhbmNlKGJhc2VQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9VTlRJTCA9IDIwMDA7XG5cbnR5cGUgU2FuZGJveEhhbmRsZSA9IHtcbiAgZXhlYzogKG9wdHM6IHsgY29tbWFuZDogc3RyaW5nOyBhcmdzPzogc3RyaW5nW10gfSkgPT4gUHJvbWlzZTxFeGVjUmVzdWx0PjtcbiAgd3JpdGVGaWxlczogKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbnR5cGUgQmFzaFJlc3VsdCA9IHtcbiAgY29tbWFuZElkOiBzdHJpbmc7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbiAgZXhpdENvZGU6IG51bWJlcjtcbiAgc3RhdHVzOiBcInJ1bm5pbmdcIiB8IFwiY29tcGxldGVkXCIgfCBcImZhaWxlZFwiO1xuICBvdXRwdXREaXI6IHN0cmluZztcbn07XG5cbnR5cGUgUnVuT3B0aW9ucyA9IHtcbiAgY29tbWFuZDogc3RyaW5nO1xuICB3YWl0VW50aWw/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUHJvY2Vzc01hbmFnZXIgPSAob3B0czogeyBzYW5kYm94OiBTYW5kYm94SGFuZGxlIH0pID0+IHtcbiAgY29uc3QgeyBzYW5kYm94IH0gPSBvcHRzO1xuXG4gIGNvbnN0IHJ1biA9IGFzeW5jIChydW5PcHRzOiBSdW5PcHRpb25zKTogUHJvbWlzZTxCYXNoUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgeyBjb21tYW5kLCB3YWl0VW50aWwgPSBERUZBVUxUX1dBSVRfVU5USUwgfSA9IHJ1bk9wdHM7XG5cbiAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgIGNvbW1hbmQ6IFwic2hcIixcbiAgICAgIGFyZ3M6IFtcIi1jXCIsIGNvbW1hbmRdLFxuICAgIH0pO1xuXG4gICAgaWYgKHdhaXRVbnRpbCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZElkOiBleGVjUmVzdWx0LmNvbW1hbmRJZCxcbiAgICAgICAgc3Rkb3V0OiBcIlwiLFxuICAgICAgICBzdGRlcnI6IFwiXCIsXG4gICAgICAgIGV4aXRDb2RlOiAtMSxcbiAgICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgICAgb3V0cHV0RGlyOiBcIlwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZWQgPSBhd2FpdCByYWNlVGltZW91dChleGVjUmVzdWx0LCB3YWl0VW50aWwpO1xuXG4gICAgaWYgKCFjb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmRJZDogZXhlY1Jlc3VsdC5jb21tYW5kSWQsXG4gICAgICAgIHN0ZG91dDogXCJcIixcbiAgICAgICAgc3RkZXJyOiBcIlwiLFxuICAgICAgICBleGl0Q29kZTogLTEsXG4gICAgICAgIHN0YXR1czogXCJydW5uaW5nXCIsXG4gICAgICAgIG91dHB1dERpcjogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gYC5hZ2VudC9iYXNoLyR7RGF0ZS5ub3coKX0tJHtleGVjUmVzdWx0LmNvbW1hbmRJZH1gO1xuICAgIHdyaXRlT3V0cHV0RGlyKHNhbmRib3gsIG91dHB1dERpciwgY29tcGxldGVkLCBjb21tYW5kKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kSWQ6IGV4ZWNSZXN1bHQuY29tbWFuZElkLFxuICAgICAgc3Rkb3V0OiBjb21wbGV0ZWQuc3Rkb3V0LFxuICAgICAgc3RkZXJyOiBjb21wbGV0ZWQuc3RkZXJyLFxuICAgICAgZXhpdENvZGU6IGNvbXBsZXRlZC5leGl0Q29kZSxcbiAgICAgIHN0YXR1czogY29tcGxldGVkLmV4aXRDb2RlID09PSAwID8gXCJjb21wbGV0ZWRcIiA6IFwiZmFpbGVkXCIsXG4gICAgICBvdXRwdXREaXIsXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4geyBydW4gfTtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHJhY2VUaW1lb3V0KFxuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0LFxuICB0aW1lb3V0TXM6IG51bWJlclxuKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9IHwgbnVsbD4ge1xuICBjb25zdCBUSU1FRF9PVVQgPSBTeW1ib2woXCJ0aW1lb3V0XCIpO1xuICBjb25zdCB0aW1lciA9IG5ldyBQcm9taXNlPHR5cGVvZiBUSU1FRF9PVVQ+KChyZXNvbHZlKSA9PlxuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShUSU1FRF9PVVQpLCB0aW1lb3V0TXMpXG4gICk7XG4gIGNvbnN0IHdpbm5lciA9IGF3YWl0IFByb21pc2UucmFjZShbZXhlY1Jlc3VsdC5yZXN1bHQsIHRpbWVyXSk7XG4gIHJldHVybiB3aW5uZXIgPT09IFRJTUVEX09VVCA/IG51bGwgOiB3aW5uZXI7XG59XG5cbmZ1bmN0aW9uIHdyaXRlT3V0cHV0RGlyKFxuICBzYW5kYm94OiBTYW5kYm94SGFuZGxlLFxuICBkaXI6IHN0cmluZyxcbiAgcmVzdWx0OiB7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9LFxuICBjb21tYW5kOiBzdHJpbmdcbik6IHZvaWQge1xuICBjb25zdCBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9W10gPSBbXG4gICAgeyBwYXRoOiBcInN0ZG91dC50eHRcIiwgY29udGVudDogcmVzdWx0LnN0ZG91dCB9LFxuICAgIHtcbiAgICAgIHBhdGg6IFwibWV0YWRhdGEuanNvblwiLFxuICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkoeyBleGl0Q29kZTogcmVzdWx0LmV4aXRDb2RlLCBjb21tYW5kIH0sIG51bGwsIDIpLFxuICAgIH0sXG4gIF07XG4gIGlmIChyZXN1bHQuc3RkZXJyKSB7XG4gICAgZmlsZXMucHVzaCh7IHBhdGg6IFwic3RkZXJyLnR4dFwiLCBjb250ZW50OiByZXN1bHQuc3RkZXJyIH0pO1xuICB9XG5cbiAgc2FuZGJveC53cml0ZUZpbGVzKHsgZmlsZXMsIGRlc3RQYXRoOiBkaXIgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIGludGVudGlvbmFsIG5vLW9wIFx1MjAxNCBvdXRwdXQgZmlsZSB3cml0ZSBpcyBiZXN0LWVmZm9ydFxuICB9KTtcbn1cbiIsICIvLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICB0eXBlIEFnZW50RGF0YVR5cGVzLFxuICB0eXBlIEFnZW50SG9va3MsXG4gIHR5cGUgQWdlbnRPcHRpb25zLFxuICBBZ2VudFN0YXR1cyxcbiAgdHlwZSBBbnlBZ2VudCxcbiAgYWdlbnQsXG4gIHR5cGUgSW5mZXJTZXNzaW9uLFxuICB0eXBlIEluZmVyVUlNZXNzYWdlLFxuICB0eXBlIE5lZWRzQXBwcm92YWxNYXAsXG4gIHR5cGUgUmVzb2x2YWJsZSxcbiAgdHlwZSBSZXNvbHZhYmxlQXJncyxcbiAgdHlwZSBTZXNzaW9uRGVmYXVsdHMsXG4gIHR5cGUgU2Vzc2lvblNlbmRBcmdzLFxufSBmcm9tIFwiLi9hZ2VudC9jbGllbnRcIjtcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBFcnJvcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBNZXNzYWdlTm90Rm91bmRFcnJvcixcbiAgU2FuZGJveEVycm9yLFxuICBTYW5kYm94Tm90Rm91bmRFcnJvcixcbiAgU2Vzc2lvbk5vdEZvdW5kRXJyb3IsXG4gIFN0b3JhZ2VDb25mbGljdEVycm9yLFxuICBTdG9yYWdlRXJyb3IsXG59IGZyb20gXCIuL2Vycm9yc1wiO1xuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFJQQyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7IGhhbmRsZVJlcXVlc3QgfSBmcm9tIFwiLi9ycGMvcnBjXCI7XG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU2FuZGJveCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHtcbiAgRXhlY1Jlc3VsdCxcbiAgU2FuZGJveEFnZW50UmVmLFxuICBTYW5kYm94QmluZGluZyxcbiAgU2FuZGJveEluc3RhbmNlLFxuICBTYW5kYm94U2V0dXBGaWVsZHMsXG4gIFVwbG9hZGFibGVGaWxlLFxufSBmcm9tIFwiLi9zYW5kYm94L2FkYXB0ZXJcIjtcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTZXNzaW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHR5cGUgeyBBcHByb3ZhbERhdGEsIFNlbmRJbnB1dCB9IGZyb20gXCIuL3Nlc3Npb24vc2VuZFwiO1xuZXhwb3J0IHR5cGUgeyBXb3JrZmxvd1J1bkxpa2UgfSBmcm9tIFwiLi9zZXNzaW9uL3N0cmVhbVwiO1xuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFNraWxscyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHtcbiAgR2l0U2tpbGxFbnRyeSxcbiAgR2l0U2tpbGxJbnB1dCxcbiAgSG9zdFNraWxsRW50cnksXG4gIEhvc3RTa2lsbElucHV0LFxuICBJbmxpbmVTa2lsbEVudHJ5LFxuICBJbmxpbmVTa2lsbElucHV0LFxuICBTYW5kYm94U2tpbGxFbnRyeSxcbiAgU2FuZGJveFNraWxsSW5wdXQsXG4gIFNraWxsRW50cnksXG4gIFNraWxsSW5wdXQsXG4gIFNraWxsU291cmNlVHlwZSxcbn0gZnJvbSBcIi4vc2tpbGxzL3R5cGVzXCI7XG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgVG9vbHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBhZ2VudFRvb2wgYXMgdG9vbCxcbiAgdHlwZSBCdWlsdEluVG9vbE5hbWUsXG4gIGJ1aWx0aW5Ub29sTmFtZXMsXG4gIHR5cGUgVG9vbENvbnRleHQsXG59IGZyb20gXCIuL3Rvb2xzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBVc2FnZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHsgU3RlcFVzYWdlLCBVc2FnZVN1bW1hcnkgfSBmcm9tIFwiLi91dGlscy91c2FnZVwiO1xuIiwgImltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tIFwiQHdvcmtmbG93L3NlcmRlXCI7XG5pbXBvcnQgdHlwZSB7IEdhdGV3YXlNb2RlbElkLCBJbmZlclVJVG9vbHMsIFRvb2xTZXQsIFVJTWVzc2FnZSB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuLi9zYW5kYm94L2hhbmRsZVwiO1xuaW1wb3J0IHsgc2FuZGJveEhhbmRsZSB9IGZyb20gXCIuLi9zYW5kYm94L2hhbmRsZVwiO1xuaW1wb3J0IHsgdHlwZSBTZXNzaW9uQ29udGV4dCwgc2Vzc2lvbkhhbmRsZSB9IGZyb20gXCIuLi9zZXNzaW9uL2hhbmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlLCB0eXBlIFN0b3JhZ2VJbnB1dCwgdG9TdG9yYWdlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvYWRhcHRlclwiO1xuaW1wb3J0IHsga3ZTdG9yYWdlRmFsbGJhY2sgfSBmcm9tIFwiLi4vc3RvcmFnZS9iaW5kaW5ncy9rdlwiO1xuaW1wb3J0IHsgbG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvZW50cnlcIjtcbmltcG9ydCB7IHNob3VsZEZhbGxiYWNrVG9LVjIgfSBmcm9tIFwiLi4vc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQnVpbHRJblRvb2xOYW1lLCBidWlsdEluVG9vbHMgfSBmcm9tIFwiLi4vdG9vbHNcIjtcbmltcG9ydCB0eXBlIHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgQWdlbnREYXRhVHlwZXMsXG4gIHR5cGUgQWdlbnRIb29rcyxcbiAgZ2V0QWdlbnQsXG4gIHR5cGUgTmVlZHNBcHByb3ZhbE1hcCxcbiAgcmVnaXN0ZXJBZ2VudCxcbn0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFJlc29sdmFibGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFJlc29sdmFibGVBcmdzPFxuICBUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIGNvbnRleHQ6IFRDb250ZXh0O1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBtZXNzYWdlczogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VG9vbHM+PltdO1xuICBzdGF0ZTogUmVhZG9ubHk8VFN0YXRlPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlc29sdmFibGU8XG4gIFQsXG4gIFRDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFQgfCAoKGFyZ3M6IFJlc29sdmFibGVBcmdzPFRDb250ZXh0LCBUb29scywgVFN0YXRlPikgPT4gVCB8IFByb21pc2U8VD4pO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU2Vzc2lvbiBEZWZhdWx0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU2Vzc2lvbkRlZmF1bHRzPFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0ge1xuICBtb2RlbD86IFJlc29sdmFibGU8R2F0ZXdheU1vZGVsSWQgfCB1bmRlZmluZWQsIFRDb250ZXh0LCBUb29scywgVFN0YXRlPjtcbiAgc3lzdGVtPzogUmVzb2x2YWJsZTxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xuICBnZW5lcmF0aW9uPzogUmVzb2x2YWJsZTxcbiAgICBHZW5lcmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICBUQ29udGV4dCxcbiAgICBUb29scyxcbiAgICBUU3RhdGVcbiAgPjtcbiAgYWN0aXZlVG9vbHM/OiBSZXNvbHZhYmxlPFxuICAgIHJlYWRvbmx5IChFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lKVtdIHwgdW5kZWZpbmVkLFxuICAgIFRDb250ZXh0LFxuICAgIFRvb2xzLFxuICAgIFRTdGF0ZVxuICA+O1xuICBza2lsbHM/OiBSZXNvbHZhYmxlPFNraWxsSW5wdXRbXSB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEFnZW50IE9wdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBkZWZhdWx0IGFsbG93cyB0eXBlLWVyYXNlZCB1c2FnZVxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBhbnksXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4+ID0gU2Vzc2lvbkRlZmF1bHRzPFRvb2xzLCBUQ29udGV4dCwgVFN0YXRlPiAmIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VJbnB1dDtcbiAgc2FuZGJveD86IFRTYW5kYm94QmluZGluZ3M7XG4gIHRvb2xzPzogVG9vbHM7XG4gIGhvb2tzPzogQWdlbnRIb29rcztcbiAgbmVlZHNBcHByb3ZhbD86IE5lZWRzQXBwcm92YWxNYXA8VG9vbHM+O1xuICBjb250ZXh0U2NoZW1hPzogei5ab2RUeXBlPFRDb250ZXh0PjtcbiAgc3RhdGVTY2hlbWE/OiB6LlpvZFR5cGU8VFN0YXRlPjtcbiAgbWVzc2FnZU1ldGFkYXRhU2NoZW1hPzogei5ab2RUeXBlPFRNZXNzYWdlTWV0YWRhdGE+O1xuICBsb2dnaW5nPzogT21pdDxMb2dnaW5nQ29uZmlnLCBcIm5hbWVcIj47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSW50ZXJuYWwgY29udGV4dCBjYWNoZXMgKGhpZGRlbiBmcm9tIHB1YmxpYyBBUEkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5jb25zdCBzZXNzaW9uQ29udGV4dHNNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIFNlc3Npb25Db250ZXh0Pj4oKTtcbmNvbnN0IHNhbmRib3hDb250ZXh0c01hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgTWFwPHN0cmluZywgU2FuZGJveENvbnRleHQ+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vzc2lvbkNvbnRleHRzKFxuICBhZ2VudDogQW55QWdlbnRcbik6IE1hcDxzdHJpbmcsIFNlc3Npb25Db250ZXh0PiB7XG4gIGxldCBtYXAgPSBzZXNzaW9uQ29udGV4dHNNYXAuZ2V0KGFnZW50KTtcbiAgaWYgKCFtYXApIHtcbiAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgc2Vzc2lvbkNvbnRleHRzTWFwLnNldChhZ2VudCwgbWFwKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FuZGJveENvbnRleHRzKFxuICBhZ2VudDogQW55QWdlbnRcbik6IE1hcDxzdHJpbmcsIFNhbmRib3hDb250ZXh0PiB7XG4gIGxldCBtYXAgPSBzYW5kYm94Q29udGV4dHNNYXAuZ2V0KGFnZW50KTtcbiAgaWYgKCFtYXApIHtcbiAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgc2FuZGJveENvbnRleHRzTWFwLnNldChhZ2VudCwgbWFwKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgQ2xhc3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogaW50ZW50aW9uYWxseSBlcmFzZWQgXHUyMDEzIHVzaW5nIGBhbnlgIGF2b2lkcyBjb250cmF2YXJpYW5jZSBpc3N1ZXMgd2l0aCB0b29sLXR5cGVkIG1ldGhvZHMgbGlrZSBgc2VuZGBcbmV4cG9ydCB0eXBlIEFueUFnZW50ID0gQWdlbnQ8YW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG5leHBvcnQgdHlwZSBJbmZlclNlc3Npb248QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudCA9IEFueUFnZW50PiA9IFJldHVyblR5cGU8XG4gIEFnZW50W1wic2Vzc2lvblwiXVxuPjtcbmV4cG9ydCB0eXBlIFNlc3Npb25TZW5kQXJnczxcbiAgQWdlbnQgZXh0ZW5kcyBBbnlBZ2VudCxcbiAgU2Vzc2lvbiBleHRlbmRzIEluZmVyU2Vzc2lvbjxBZ2VudD4gPSBJbmZlclNlc3Npb248QWdlbnQ+LFxuPiA9IFBhcmFtZXRlcnM8U2Vzc2lvbltcInNlbmRcIl0+O1xuXG5leHBvcnQgY2xhc3MgQWdlbnQ8XG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBvcHRpb25zOiBBZ2VudE9wdGlvbnM8XG4gICAgVG9vbHMsXG4gICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICBUQ29udGV4dCxcbiAgICBUU3RhdGUsXG4gICAgVE1lc3NhZ2VNZXRhZGF0YVxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWdlbnRPcHRpb25zPFxuICAgICAgVG9vbHMsXG4gICAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgICAgVENvbnRleHQsXG4gICAgICBUU3RhdGUsXG4gICAgICBUTWVzc2FnZU1ldGFkYXRhXG4gICAgPlxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgdGhpcy5zZXNzaW9uID0gKHNlc3Npb25IYW5kbGU8XG4gICAgICBUb29scyxcbiAgICAgIFRDb250ZXh0LFxuICAgICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgICBUU3RhdGVcbiAgICA+KS5iaW5kKG51bGwsIHRoaXMgYXMgdW5rbm93biBhcyBBbnlBZ2VudCk7XG4gICAgdGhpcy5zYW5kYm94ID0gKHNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4pLmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgdGhpcyBhcyB1bmtub3duIGFzIEFueUFnZW50XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogQW55QWdlbnQpIHtcbiAgICByZXR1cm4geyBuYW1lOiBpbnN0YW5jZS5uYW1lIH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7IG5hbWU6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGdldEFnZW50KGRhdGEubmFtZSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNvbHZlZFN0b3JhZ2U6IFN0b3JhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0IHN0b3JhZ2UoKTogU3RvcmFnZSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkU3RvcmFnZSA9IHRvU3RvcmFnZSh0aGlzLm9wdGlvbnMuc3RvcmFnZSk7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgICBjb25maWc6IHsgLi4udGhpcy5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IHRoaXMubmFtZSB9LFxuICAgICAgc3Vic3lzdGVtOiBcInN0b3JhZ2VcIixcbiAgICB9KTtcblxuICAgIGlmIChzaG91bGRGYWxsYmFja1RvS1YyKCkpIHtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBgTm8gc3RvcmFnZSBhZGFwdGVyIGNvbmZpZ3VyZWQgXHUyMDE0IHVzaW5nIEtWMiAobmFtZXNwYWNlOiBcIiR7dGhpcy5uYW1lfVwiKS5gXG4gICAgICApO1xuICAgICAgdGhpcy5fcmVzb2x2ZWRTdG9yYWdlID0gdG9TdG9yYWdlKFxuICAgICAgICBrdlN0b3JhZ2VGYWxsYmFjayh7IHByZWZpeDogdGhpcy5uYW1lIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgICB9XG5cbiAgICBsb2cud2FybihcbiAgICAgIFwiTm8gc3RvcmFnZSBhZGFwdGVyIGNvbmZpZ3VyZWQgXHUyMDE0IHVzaW5nIGxvY2FsU3RvcmFnZSgpLiBEYXRhIHdpbGwgbm90IHBlcnNpc3QgYWNyb3NzIHJlc3RhcnRzLlwiXG4gICAgKTtcbiAgICB0aGlzLl9yZXNvbHZlZFN0b3JhZ2UgPSB0b1N0b3JhZ2UobG9jYWxTdG9yYWdlKCkpO1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZFN0b3JhZ2U7XG4gIH1cblxuICBnZXQgdG9vbHMoKSB7XG4gICAgcmV0dXJuIHsgLi4uYnVpbHRJblRvb2xzLCAuLi50aGlzLm9wdGlvbnMudG9vbHMgfSBhcyB0eXBlb2YgYnVpbHRJblRvb2xzICZcbiAgICAgIFRvb2xzO1xuICB9XG5cbiAgZ2V0IGhvb2tzKCk6IEFnZW50SG9va3Mge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3MgPz8ge307XG4gIH1cblxuICByZWFkb25seSBzZXNzaW9uO1xuXG4gIHJlYWRvbmx5IHNhbmRib3g7XG5cbiAgLyoqIFBoYW50b20gcHJvcGVydHkgZm9yIHR5cGUgaW5mZXJlbmNlLiBVc2UgYHR5cGVvZiBteUFnZW50LiRVSU1lc3NhZ2VgIHRvIGdldCB0aGUgdHlwZWQgVUlNZXNzYWdlLiAqL1xuICBkZWNsYXJlIHJlYWRvbmx5ICRVSU1lc3NhZ2U6IFVJTWVzc2FnZTxcbiAgICBUTWVzc2FnZU1ldGFkYXRhLFxuICAgIEFnZW50RGF0YVR5cGVzLFxuICAgIEluZmVyVUlUb29sczx0eXBlb2YgYnVpbHRJblRvb2xzICYgVG9vbHM+XG4gID47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudDxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0ID0gVG9vbFNldCxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSA9IFNhbmRib3hCaW5kaW5nLFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbj4oXG4gIG5hbWU6IHN0cmluZyxcbiAgb3B0aW9ucz86IEFnZW50T3B0aW9uczxcbiAgICBUb29scyxcbiAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgIFRDb250ZXh0LFxuICAgIFRTdGF0ZSxcbiAgICBUTWVzc2FnZU1ldGFkYXRhXG4gID5cbikge1xuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBZ2VudDxcbiAgICBUTWVzc2FnZU1ldGFkYXRhLFxuICAgIFRvb2xzLFxuICAgIFRTYW5kYm94QmluZGluZ3MsXG4gICAgVENvbnRleHQsXG4gICAgVFN0YXRlXG4gID4obmFtZSwgb3B0aW9ucyk7XG4gIHJlZ2lzdGVyQWdlbnQobmFtZSwgaW5zdGFuY2UpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIFJlLWV4cG9ydCBldmVyeXRoaW5nIGZyb20gcmVnaXN0cnkgc28gZXhpc3RpbmcgaW1wb3J0cyBmcm9tIFwiLi9hZ2VudC9jbGllbnRcIiBrZWVwIHdvcmtpbmcuXG5leHBvcnQge1xuICB0eXBlIEFnZW50RGF0YVR5cGVzLFxuICB0eXBlIEFnZW50SG9va3MsXG4gIEFnZW50U3RhdHVzLFxuICBnZXRBZ2VudCxcbiAgdHlwZSBJbmZlclVJTWVzc2FnZSxcbiAgdHlwZSBOZWVkc0FwcHJvdmFsTWFwLFxuICByZWdpc3RlckFnZW50LFxuICB0eXBlIFR5cGVkVUlNZXNzYWdlLFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuIiwgImltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB7IGdldFNhbmRib3hDb250ZXh0cyB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiLi9leGVjXCI7XG5pbXBvcnQgeyBnZXREb21haW4gfSBmcm9tIFwiLi9nZXQtZG9tYWluXCI7XG5pbXBvcnQgeyBnZXRTdGF0dXMgfSBmcm9tIFwiLi9nZXQtc3RhdHVzXCI7XG5pbXBvcnQgeyBraWxsIH0gZnJvbSBcIi4va2lsbFwiO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tIFwiLi9yZWFkLWZpbGVcIjtcbmltcG9ydCB7IHNldHVwIH0gZnJvbSBcIi4vc2V0dXBcIjtcbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSBcIi4vc25hcHNob3RcIjtcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSBcIi4vc3RhcnRcIjtcbmltcG9ydCB7IHN0b3AgfSBmcm9tIFwiLi9zdG9wXCI7XG5pbXBvcnQgeyB1cGRhdGVOZXR3b3JrUG9saWN5IH0gZnJvbSBcIi4vdXBkYXRlLW5ldHdvcmstcG9saWN5XCI7XG5pbXBvcnQgeyB3cml0ZUZpbGVzIH0gZnJvbSBcIi4vd3JpdGUtZmlsZXNcIjtcblxuZXhwb3J0IHR5cGUgU2FuZGJveENvbnRleHQgPSB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2FuZGJveElkOiBzdHJpbmcgfCBudWxsO1xuICBfcGVuZGluZ1NldHVwPzogUHJvbWlzZTxTYW5kYm94SW5zdGFuY2U+O1xuICBfY3dkPzogc3RyaW5nO1xuICBfc2Vzc2lvbklkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2FuZGJveE9wdGlvbnMgPSB7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2FuZGJveEhhbmRsZTxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSA9IFNhbmRib3hCaW5kaW5nLFxuPiA9IFJldHVyblR5cGU8dHlwZW9mIHNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2FuZGJveEhhbmRsZTxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4oYWdlbnQ6IEFueUFnZW50LCBpZD86IHN0cmluZyB8IFNhbmRib3hPcHRpb25zKSB7XG4gIGNvbnN0IHNhbmRib3hJZCA9XG4gICAgdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQgOiAoaWQ/LmlkID8/IGBzYW5kYm94XyR7dWxpZCgpfWApO1xuXG4gIGNvbnN0IGNvbnRleHRzID0gZ2V0U2FuZGJveENvbnRleHRzKGFnZW50KTtcbiAgbGV0IHNhbmRib3hDb250ZXh0ID0gY29udGV4dHMuZ2V0KHNhbmRib3hJZCk7XG4gIGlmICghc2FuZGJveENvbnRleHQpIHtcbiAgICBzYW5kYm94Q29udGV4dCA9IHsgYWdlbnQsIHNhbmRib3hJZCB9O1xuICAgIGNvbnRleHRzLnNldChzYW5kYm94SWQsIHNhbmRib3hDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHNhbmRib3hJZCxcbiAgICBnZXQgY3dkKCkge1xuICAgICAgcmV0dXJuIHNhbmRib3hDb250ZXh0IS5fY3dkID8/IFwiLlwiO1xuICAgIH0sXG4gICAgc2V0dXA6IChzZXR1cDxUU2FuZGJveEJpbmRpbmdzPikuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZXhlYzogZXhlYy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICByZWFkRmlsZTogcmVhZEZpbGUuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgd3JpdGVGaWxlczogd3JpdGVGaWxlcy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBnZXREb21haW46IGdldERvbWFpbi5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICB1cGRhdGVOZXR3b3JrUG9saWN5OiB1cGRhdGVOZXR3b3JrUG9saWN5LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHN0YXJ0OiBzdGFydC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzdG9wOiBzdG9wLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGtpbGw6IGtpbGwuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc25hcHNob3Q6IHNuYXBzaG90LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGdldFN0YXR1czogZ2V0U3RhdHVzLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICB9O1xufVxuXG50eXBlIFNhbmRib3hNZXRob2RzPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPiA9IE9taXQ8U2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPiwgXCJpZFwiIHwgXCJjd2RcIj47XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXp5U2FuZGJveEhhbmRsZTxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4oXG4gIGFnZW50OiBBbnlBZ2VudCxcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbik6IFNhbmRib3hNZXRob2RzPFRTYW5kYm94QmluZGluZ3M+IHtcbiAgY29uc3Qgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0ID0ge1xuICAgIGFnZW50LFxuICAgIHNhbmRib3hJZDogbnVsbCxcbiAgICBfc2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogKHNldHVwPFRTYW5kYm94QmluZGluZ3M+KS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBleGVjOiBleGVjLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHJlYWRGaWxlOiByZWFkRmlsZS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICB3cml0ZUZpbGVzOiB3cml0ZUZpbGVzLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGdldERvbWFpbjogZ2V0RG9tYWluLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHVwZGF0ZU5ldHdvcmtQb2xpY3k6IHVwZGF0ZU5ldHdvcmtQb2xpY3kuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RhcnQ6IHN0YXJ0LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHN0b3A6IHN0b3AuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAga2lsbDoga2lsbC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzbmFwc2hvdDogc25hcHNob3QuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0U3RhdHVzOiBnZXRTdGF0dXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gIH07XG59XG4iLCAiZXhwb3J0IGNvbnN0IGlzVmVyY2VsID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgZ2V0VmVyY2VsT2lkY1Rva2VuIH0gPSBhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL29pZGNcIik7XG4gICAgcmV0dXJuIEJvb2xlYW4oYXdhaXQgZ2V0VmVyY2VsT2lkY1Rva2VuKCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiaW1wb3J0ICogYXMgZXJyb3JlIGZyb20gXCJlcnJvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ob3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTZXNzaW9uTm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlc3Npb24gJGlkIG5vdCBmb3VuZFwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25FcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2Vzc2lvbkVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2Vzc2lvbiAkaWQgZmFpbGVkOiAkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2FuZGJveE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNhbmRib3hOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2FuZGJveCAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZUVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlN0b3JhZ2VDb25mbGljdEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNhbmRib3hFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2FuZGJveEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VOb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJNZXNzYWdlTm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIk1lc3NhZ2UgJGlkIG5vdCBmb3VuZFwiLFxufSkge31cbiIsICJpbXBvcnQgeyBpc1ZlcmNlbCB9IGZyb20gXCIuLi9hZ2VudC9pcy12ZXJjZWxcIjtcbmltcG9ydCB7IFNhbmRib3hFcnJvciwgU2FuZGJveE5vdEZvdW5kRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3ggfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHR5cGUge1xuICBTYW5kYm94QmluZGluZyxcbiAgU2FuZGJveEluc3RhbmNlLFxuICBTYW5kYm94U2V0dXBGaWVsZHMsXG4gIFdpdGhDb25maWcsXG59IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQnVpbHRJbkJpbmRpbmdzIH0gZnJvbSBcIi4vYmluZGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuY29uc3QgUE9MTF9JTlRFUlZBTF9NUyA9IDUwO1xuY29uc3QgUE9MTF9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcblxudHlwZSBTZXR1cENvbW1vbkZpZWxkcyA9IFBhcnRpYWw8U2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgY3dkPzogc3RyaW5nO1xuICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn07XG5cbnR5cGUgVG9CaW5kaW5nVW5pb248VCBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXT4gPVxuICBUIGV4dGVuZHMgU2FuZGJveEJpbmRpbmdbXSA/IFRbbnVtYmVyXSA6IFQ7XG5cbnR5cGUgU2V0dXBPcHRzRm9yQmluZGluZzxCIGV4dGVuZHMgU2FuZGJveEJpbmRpbmc+ID1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiAuXG4gIEIgZXh0ZW5kcyBTYW5kYm94QmluZGluZzxpbmZlciBULCBpbmZlciBDLCBhbnk+XG4gICAgPyB7IHR5cGU6IFQgfSAmIFNldHVwQ29tbW9uRmllbGRzICYgV2l0aENvbmZpZzxDPlxuICAgIDogbmV2ZXI7XG5cbnR5cGUgSXNEZWZhdWx0PFQgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10+ID1cbiAgU2FuZGJveEJpbmRpbmcgZXh0ZW5kcyBUID8gdHJ1ZSA6IGZhbHNlO1xuXG5leHBvcnQgdHlwZSBTZXR1cE9wdHM8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+ID1cbiAgfCBTZXR1cE9wdHNGb3JCaW5kaW5nPFxuICAgICAgSXNEZWZhdWx0PFRTYW5kYm94QmluZGluZ3M+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICA/IEJ1aWx0SW5CaW5kaW5nc1xuICAgICAgICA6IFRvQmluZGluZ1VuaW9uPFRTYW5kYm94QmluZGluZ3M+XG4gICAgPlxuICB8IChTZXR1cENvbW1vbkZpZWxkcyAmIHsgdHlwZT86IG5ldmVyIH0pO1xuXG5leHBvcnQgdHlwZSBTZXR1cFJlc3VsdCA9IHtcbiAgZG9uZTogUHJvbWlzZTxTYW5kYm94SW5zdGFuY2U+O1xufTtcblxuZnVuY3Rpb24gaXNTaW5nbGVCaW5kaW5nKFxuICBzYW5kYm94OiBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW11cbik6IHNhbmRib3ggaXMgU2FuZGJveEJpbmRpbmcge1xuICByZXR1cm4gIUFycmF5LmlzQXJyYXkoc2FuZGJveCk7XG59XG5cbi8qKiBBdXRvLWRldGVjdCB0aGUgZGVmYXVsdCBiaW5kaW5nOiB2ZXJjZWwgXHUyMTkyIGRvY2tlciBcdTIxOTIgbG9jYWwgY2FzY2FkZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRCaW5kaW5nKCk6IFByb21pc2U8U2FuZGJveEJpbmRpbmc+IHtcbiAgaWYgKGF3YWl0IGlzVmVyY2VsKCkpIHtcbiAgICBjb25zdCB7IHZlcmNlbFNhbmRib3ggfSA9IGF3YWl0IGltcG9ydChcIi4vYmluZGluZ3MvdmVyY2VsXCIpO1xuICAgIHJldHVybiB2ZXJjZWxTYW5kYm94KCk7XG4gIH1cblxuICBpZiAoYXdhaXQgaXNEb2NrZXJBdmFpbGFibGUoKSkge1xuICAgIGNvbnN0IHsgZG9ja2VyU2FuZGJveCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy9kb2NrZXJcIik7XG4gICAgcmV0dXJuIGRvY2tlclNhbmRib3goKTtcbiAgfVxuXG4gIGNvbnN0IHsgbG9jYWxTYW5kYm94IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2JpbmRpbmdzL2xvY2FsXCIpO1xuICByZXR1cm4gbG9jYWxTYW5kYm94KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzRG9ja2VyQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgZXhlY1N5bmMgfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgICBleGVjU3luYyhcImRvY2tlciBzYW5kYm94IC0taGVscFwiLCB7IHN0ZGlvOiBcImlnbm9yZVwiLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmcoXG4gIHNhbmRib3g6IFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSB8IHVuZGVmaW5lZCxcbiAgdHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTx7IGJpbmRpbmc6IFNhbmRib3hCaW5kaW5nOyBiaW5kaW5nTmFtZTogc3RyaW5nIH0+IHtcbiAgaWYgKCFzYW5kYm94KSB7XG4gICAgY29uc3QgYmluZGluZyA9IGF3YWl0IGdldERlZmF1bHRCaW5kaW5nKCk7XG4gICAgcmV0dXJuIHsgYmluZGluZywgYmluZGluZ05hbWU6IGJpbmRpbmcudHlwZSB9O1xuICB9XG4gIGlmIChpc1NpbmdsZUJpbmRpbmcoc2FuZGJveCkpIHtcbiAgICByZXR1cm4geyBiaW5kaW5nOiBzYW5kYm94LCBiaW5kaW5nTmFtZTogc2FuZGJveC50eXBlIH07XG4gIH1cbiAgaWYgKHR5cGUpIHtcbiAgICBjb25zdCBtYXRjaCA9IHNhbmRib3guZmluZCgoYikgPT4gYi50eXBlID09PSB0eXBlKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgU2FuZGJveEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBgVW5rbm93biBiaW5kaW5nIHR5cGU6IFwiJHt0eXBlfVwiLiBBdmFpbGFibGU6ICR7c2FuZGJveC5tYXAoKGIpID0+IGIudHlwZSkuam9pbihcIiwgXCIpfWAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYmluZGluZzogbWF0Y2gsIGJpbmRpbmdOYW1lOiBtYXRjaC50eXBlIH07XG4gIH1cbiAgaWYgKHNhbmRib3gubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNhbmRib3hFcnJvcih7IHJlYXNvbjogXCJObyBzYW5kYm94IGJpbmRpbmdzIGNvbmZpZ3VyZWRcIiB9KTtcbiAgfVxuICByZXR1cm4geyBiaW5kaW5nOiBzYW5kYm94WzBdLCBiaW5kaW5nTmFtZTogc2FuZGJveFswXS50eXBlIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTYW5kYm94SWQoY3R4OiBTYW5kYm94Q29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChjdHguc2FuZGJveElkKSB7XG4gICAgcmV0dXJuIGN0eC5zYW5kYm94SWQ7XG4gIH1cbiAgaWYgKCFjdHguX3Nlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiU2FuZGJveENvbnRleHQgaGFzIG5vIHNhbmRib3hJZCBhbmQgbm8gc2Vzc2lvbklkIHRvIHJlc29sdmUgZnJvbVwiXG4gICAgKTtcbiAgfVxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBjdHguYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChjdHguX3Nlc3Npb25JZCk7XG4gIGN0eC5zYW5kYm94SWQgPSByZWNvcmQ/LnNhbmRib3hJZCA/PyBjdHguX3Nlc3Npb25JZDtcbiAgcmV0dXJuIGN0eC5zYW5kYm94SWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cDxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4oXG4gIGN0eDogU2FuZGJveENvbnRleHQsXG4gIG9wdHM/OiBTZXR1cE9wdHM8VFNhbmRib3hCaW5kaW5ncz5cbik6IFByb21pc2U8U2V0dXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYW5kYm94SWQgPSBhd2FpdCByZXNvbHZlU2FuZGJveElkKGN0eCk7XG4gIGlmIChjdHguX3BlbmRpbmdTZXR1cCkge1xuICAgIHJldHVybiB7IGRvbmU6IGN0eC5fcGVuZGluZ1NldHVwIH07XG4gIH1cblxuICBjb25zdCBhZ2VudCA9IGN0eC5hZ2VudDtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6c2V0dXBcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZCB9LFxuICB9KTtcblxuICBjb25zdCBkb25lUmVzb2x2ZUJpbmRpbmcgPSBsb2cudGltZShcInJlc29sdmUgYmluZGluZ1wiLCB7XG4gICAgcmVxdWVzdGVkVHlwZTogb3B0cz8udHlwZSxcbiAgfSk7XG4gIGNvbnN0IHsgYmluZGluZywgYmluZGluZ05hbWUgfSA9IGF3YWl0IHJlc29sdmVCaW5kaW5nKFxuICAgIGFnZW50Lm9wdGlvbnMuc2FuZGJveCxcbiAgICBvcHRzPy50eXBlXG4gICk7XG4gIGRvbmVSZXNvbHZlQmluZGluZygpO1xuXG4gIGlmIChvcHRzPy5jd2QpIHtcbiAgICBjdHguX2N3ZCA9IG9wdHMuY3dkO1xuICB9XG5cbiAgY29uc3Qgc2V0dXBMb2cgPSBsb2cud2l0aENvbnRleHQoe1xuICAgIGJpbmRpbmc6IGJpbmRpbmdOYW1lLFxuICAgIHZlcnNpb246IG9wdHM/LnZlcnNpb24gPz8gYmluZGluZy5kZWZhdWx0cz8udmVyc2lvbixcbiAgfSk7XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbmZ1c2luZ1ZvaWRUeXBlOiAuXG4gIGxldCByZXNvbHZlQmxvY2tpbmdQcm9taXNlID0gKHZhbHVlOiB2b2lkKSA9PiB2YWx1ZTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiAuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUJsb2NrU3RhdGVtZW50czogLlxuICBsZXQgcmVqZWN0QmxvY2tpbmdQcm9taXNlID0gKF9yZWFzb24/OiBhbnkpID0+IHt9O1xuICBjb25zdCBibG9ja2luZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgcmVqZWN0QmxvY2tpbmdQcm9taXNlID0gcmVqZWN0O1xuICB9KTtcblxuICBjdHguX3BlbmRpbmdTZXR1cCA9IChhc3luYyAoKSA9PiB7XG4gICAgbGV0IHNsZWVwT2xkSW5zdGFuY2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZG9uZVBlbmRpbmdTZXR1cCA9IHNldHVwTG9nLnRpbWUoXCJwZW5kaW5nIHNldHVwXCIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvbmVTdG9yYWdlR2V0ID0gc2V0dXBMb2cudGltZShcInN0b3JhZ2Uuc2FuZGJveC5nZXRcIik7XG4gICAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG4gICAgICBkb25lU3RvcmFnZUdldCgpO1xuXG4gICAgICBjb25zdCBiaW5kaW5nRGVmYXVsdHMgPSBiaW5kaW5nLmRlZmF1bHRzID8/IHt9O1xuICAgICAgY29uc3QgZWZmZWN0aXZlVmVyc2lvbiA9IG9wdHM/LnZlcnNpb24gPz8gYmluZGluZ0RlZmF1bHRzLnZlcnNpb24gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZVJ1biA9IG9wdHM/LnJ1biA/PyBiaW5kaW5nRGVmYXVsdHMucnVuO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTmV0d29ya1BvbGljeSA9XG4gICAgICAgIG9wdHM/Lm5ldHdvcmtQb2xpY3kgPz8gYmluZGluZ0RlZmF1bHRzLm5ldHdvcmtQb2xpY3kgPz8gbnVsbDtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUN3ZCA9XG4gICAgICAgIGN0eC5fY3dkIHx8IG9wdHM/LmN3ZCB8fCBiaW5kaW5nRGVmYXVsdHMuY3dkIHx8IG51bGw7XG4gICAgICBpZiAoZWZmZWN0aXZlQ3dkKSB7XG4gICAgICAgIGN0eC5fY3dkID0gZWZmZWN0aXZlQ3dkO1xuICAgICAgfVxuICAgICAgY29uc3QgZWZmZWN0aXZlQ29uZmlnID0ge1xuICAgICAgICAuLi5iaW5kaW5nRGVmYXVsdHMuY29uZmlnLFxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IG9wdHMgaXMgYSB1bmlvbjsgY29uZmlnIGV4aXN0cyBvbiBiaW5kaW5nLXNwZWNpZmljIGJyYW5jaGVzXG4gICAgICAgIC4uLihvcHRzIGFzIGFueSk/LmNvbmZpZyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbk1hdGNoZXMgPVxuICAgICAgICAgICFlZmZlY3RpdmVWZXJzaW9uIHx8IHJlY29yZC5zZXR1cD8udmVyc2lvbiA9PT0gZWZmZWN0aXZlVmVyc2lvbjtcblxuICAgICAgICBpZiAodmVyc2lvbk1hdGNoZXMgJiYgcmVjb3JkLnNldHVwPy5jb21wbGV0ZWRBdCkge1xuICAgICAgICAgIHJlc29sdmVCbG9ja2luZ1Byb21pc2UoKTtcbiAgICAgICAgICBjb25zdCBkb25lQ29ubmVjdEV4aXN0aW5nID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgICAgIFwiY29ubmVjdCBleGlzdGluZyBzYW5kYm94XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNldHVwU3RhdGU6IFwiY29tcGxldGVkXCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGJpbmRpbmcuY29ubmVjdCh7XG4gICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZWNvcmQuc2V0dXAubWV0YWRhdGEsXG4gICAgICAgICAgICBjd2Q6IHJlY29yZC5zZXR1cC5jd2QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICAgICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZG9uZUNvbm5lY3RFeGlzdGluZygpO1xuICAgICAgICAgIGN0eC5fY3dkID0gaW5zdGFuY2UuY3dkO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJzaW9uTWF0Y2hlcyAmJiAhcmVjb3JkLnNldHVwPy5jb21wbGV0ZWRBdCkge1xuICAgICAgICAgIHJlc29sdmVCbG9ja2luZ1Byb21pc2UoKTtcbiAgICAgICAgICBjb25zdCBkb25lUG9sbFVudGlsUmVhZHkgPSBzZXR1cExvZy50aW1lKFwicG9sbCB1bnRpbCByZWFkeVwiKTtcbiAgICAgICAgICBhd2FpdCBwb2xsVW50aWxSZWFkeShjdHgsIG9wdHM/LnNpZ25hbCk7XG4gICAgICAgICAgZG9uZVBvbGxVbnRpbFJlYWR5KCk7XG5cbiAgICAgICAgICBjb25zdCBkb25lU3RvcmFnZUdldFBvc3RQb2xsID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgICAgIFwic3RvcmFnZS5zYW5kYm94LmdldCAocG9zdC1wb2xsKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZWFkeSA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcbiAgICAgICAgICBkb25lU3RvcmFnZUdldFBvc3RQb2xsKCk7XG5cbiAgICAgICAgICBpZiAoIXJlYWR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2FuZGJveE5vdEZvdW5kRXJyb3IoeyBpZDogc2FuZGJveElkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkb25lQ29ubmVjdEV4aXN0aW5nID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgICAgIFwiY29ubmVjdCBleGlzdGluZyBzYW5kYm94XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNldHVwU3RhdGU6IFwicG9zdC1wb2xsXCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGJpbmRpbmcuY29ubmVjdCh7XG4gICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZWFkeS5zZXR1cC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGN3ZDogcmVhZHkuc2V0dXAuY3dkLFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgICAgICAgICBsb2c6IHNldHVwTG9nLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRvbmVDb25uZWN0RXhpc3RpbmcoKTtcbiAgICAgICAgICBjdHguX2N3ZCA9IGluc3RhbmNlLmN3ZDtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVjb3JkLnNldHVwLm1ldGFkYXRhKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSW5zdGFuY2VNZXRhZGF0YSA9IHJlY29yZC5zZXR1cC5tZXRhZGF0YTtcbiAgICAgICAgICBzbGVlcE9sZEluc3RhbmNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvbmVTdG9wT2xkSW5zdGFuY2UgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgICBcInN0b3Agb2xkIHNhbmRib3ggaW5zdGFuY2VcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9sZCA9IGF3YWl0IGJpbmRpbmcuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9sZEluc3RhbmNlTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbG9nOiBzZXR1cExvZyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGF3YWl0IG9sZC5zdG9wKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgZG9uZVN0b3BPbGRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb25lU3RvcE9sZEluc3RhbmNlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc2V0dXBfOiBTYW5kYm94W1wic2V0dXBcIl0gPSB7XG4gICAgICAgIGJpbmRpbmc6IGJpbmRpbmdOYW1lLFxuICAgICAgICB2ZXJzaW9uOiBlZmZlY3RpdmVWZXJzaW9uID8/IHJlY29yZD8uc2V0dXA/LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgbmV0d29ya1BvbGljeTpcbiAgICAgICAgICBlZmZlY3RpdmVOZXR3b3JrUG9saWN5ID8/IHJlY29yZD8uc2V0dXA/Lm5ldHdvcmtQb2xpY3kgPz8gbnVsbCxcbiAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICBjd2Q6IG51bGwsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBuZXdSZWNvcmQ6IFNhbmRib3ggPSB7XG4gICAgICAgIGlkOiBzYW5kYm94SWQsXG4gICAgICAgIHNldHVwOiBzZXR1cF8sXG4gICAgICAgIGNyZWF0ZWRBdDogcmVjb3JkPy5jcmVhdGVkQXQgPz8gbm93LFxuICAgICAgICBsYXN0QWN0aXZlQXQ6IG5vdyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRvbmVTdG9yYWdlU2V0UGVuZGluZyA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgIFwic3RvcmFnZS5zYW5kYm94LnNldCAoc2V0dXAgcGVuZGluZylcIlxuICAgICAgKTtcbiAgICAgIGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5zZXQoc2FuZGJveElkLCBuZXdSZWNvcmQpO1xuICAgICAgZG9uZVN0b3JhZ2VTZXRQZW5kaW5nKCk7XG5cbiAgICAgIHJlc29sdmVCbG9ja2luZ1Byb21pc2UoKTtcblxuICAgICAgY29uc3QgZG9uZUJpbmRpbmdDcmVhdGUgPSBzZXR1cExvZy50aW1lKFwiYmluZGluZy5jcmVhdGVcIik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaW5kaW5nLmNyZWF0ZSh7XG4gICAgICAgIGN3ZDogY3R4Ll9jd2QgPz8gXCIuXCIsXG4gICAgICAgIGFnZW50LFxuICAgICAgICBzZXR1cDoge1xuICAgICAgICAgIC4uLnNldHVwXyxcbiAgICAgICAgICBydW46IGVmZmVjdGl2ZVJ1bixcbiAgICAgICAgICBjb25maWc6IGVmZmVjdGl2ZUNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVjb3JkOiBuZXdSZWNvcmQsXG4gICAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgICAgICBsb2c6IHNldHVwTG9nLFxuICAgICAgfSk7XG4gICAgICBkb25lQmluZGluZ0NyZWF0ZSgpO1xuXG4gICAgICBzZXR1cF8uY29tcGxldGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgc2V0dXBfLm1ldGFkYXRhID0gcmVzdWx0Lm1ldGFkYXRhO1xuICAgICAgc2V0dXBfLmN3ZCA9IHJlc3VsdC5pbnN0YW5jZS5jd2Q7XG5cbiAgICAgIGNvbnN0IGRvbmVTdG9yYWdlVXBkYXRlQ29tcGxldGUgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICBcInN0b3JhZ2Uuc2FuZGJveC51cGRhdGUgKHNldHVwIGNvbXBsZXRlKVwiXG4gICAgICApO1xuICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LnVwZGF0ZShzYW5kYm94SWQsIHtcbiAgICAgICAgc2V0dXA6IHNldHVwXyxcbiAgICAgICAgbGFzdEFjdGl2ZUF0OiBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgICBkb25lU3RvcmFnZVVwZGF0ZUNvbXBsZXRlKCk7XG5cbiAgICAgIGN0eC5fY3dkID0gcmVzdWx0Lmluc3RhbmNlLmN3ZDtcbiAgICAgIHJldHVybiByZXN1bHQuaW5zdGFuY2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjdHguX3BlbmRpbmdTZXR1cCA9IHVuZGVmaW5lZDtcbiAgICAgIHJlamVjdEJsb2NraW5nUHJvbWlzZShlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBkb25lRmluYWxpemUgPSBzZXR1cExvZy50aW1lKFwiZmluYWxpemUgc2V0dXBcIik7XG4gICAgICBhd2FpdCBzbGVlcE9sZEluc3RhbmNlO1xuICAgICAgZG9uZUZpbmFsaXplKCk7XG4gICAgICBkb25lUGVuZGluZ1NldHVwKCk7XG4gICAgfVxuICB9KSgpO1xuXG4gIGNvbnN0IGRvbmVXYWl0Rm9yVW5ibG9jayA9IHNldHVwTG9nLnRpbWUoXCJ3YWl0IGZvciBzZXR1cCB1bmJsb2NrXCIpO1xuICBhd2FpdCBibG9ja2luZ1Byb21pc2U7XG4gIGRvbmVXYWl0Rm9yVW5ibG9jaygpO1xuICByZXR1cm4geyBkb25lOiBjdHguX3BlbmRpbmdTZXR1cCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZShcbiAgY3R4OiBTYW5kYm94Q29udGV4dCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbik6IFByb21pc2U8U2FuZGJveEluc3RhbmNlPiB7XG4gIGNvbnN0IHNhbmRib3hJZCA9IGF3YWl0IHJlc29sdmVTYW5kYm94SWQoY3R4KTtcbiAgY29uc3QgYWdlbnQgPSBjdHguYWdlbnQ7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJzYW5kYm94OnJlc29sdmVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZCB9LFxuICB9KTtcblxuICBpZiAoY3R4Ll9wZW5kaW5nU2V0dXApIHtcbiAgICByZXR1cm4gYXdhaXQgY3R4Ll9wZW5kaW5nU2V0dXA7XG4gIH1cblxuICBsZXQgcmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuXG4gIGlmICghcmVjb3JkKSB7XG4gICAgY29uc3QgeyBkb25lIH0gPSBhd2FpdCBzZXR1cChjdHgsIHsgc2lnbmFsIH0pO1xuICAgIHJldHVybiBhd2FpdCBkb25lO1xuICB9XG5cbiAgaWYgKCFyZWNvcmQuc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgYXdhaXQgcG9sbFVudGlsUmVhZHkoY3R4LCBzaWduYWwpO1xuICAgIHJlY29yZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcbiAgfVxuXG4gIGlmICghcmVjb3JkKSB7XG4gICAgdGhyb3cgbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IHNhbmRib3hJZCB9KTtcbiAgfVxuXG4gIGNvbnN0IHsgYmluZGluZyB9ID0gYXdhaXQgcmVzb2x2ZUJpbmRpbmcoXG4gICAgY3R4LmFnZW50Lm9wdGlvbnMuc2FuZGJveCxcbiAgICByZWNvcmQuc2V0dXAuYmluZGluZ1xuICApO1xuXG4gIGFnZW50LnN0b3JhZ2Uuc2FuZGJveFxuICAgIC51cGRhdGUoc2FuZGJveElkLCB7IGxhc3RBY3RpdmVBdDogRGF0ZS5ub3coKSB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGxvZy5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgc2FuZGJveCBsYXN0QWN0aXZlQXRcIiwgeyBlcnJvciB9KTtcbiAgICB9KTtcblxuICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGJpbmRpbmcuY29ubmVjdCh7XG4gICAgYWdlbnQsXG4gICAgbWV0YWRhdGE6IHJlY29yZC5zZXR1cC5tZXRhZGF0YSxcbiAgICBjd2Q6IHJlY29yZC5zZXR1cC5jd2QsXG4gICAgc2lnbmFsLFxuICAgIGxvZyxcbiAgfSk7XG4gIGN0eC5fY3dkID0gaW5zdGFuY2UuY3dkO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBvbGxVbnRpbFJlYWR5KFxuICBjdHg6IFNhbmRib3hDb250ZXh0LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGlkID0gY3R4LnNhbmRib3hJZCE7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFBPTExfVElNRU9VVF9NUztcblxuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY3R4LmFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoaWQpO1xuICAgIGlmIChyZWNvcmQ/LnNldHVwPy5jb21wbGV0ZWRBdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIFBPTExfSU5URVJWQUxfTVMpKTtcbiAgfVxuXG4gIHRocm93IG5ldyBTYW5kYm94RXJyb3Ioe1xuICAgIHJlYXNvbjogYFRpbWVkIG91dCB3YWl0aW5nIGZvciBzYW5kYm94IFwiJHtpZH1cIiBzZXR1cCB0byBjb21wbGV0ZWAsXG4gIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wiZXhlY1wiXT5cbikge1xuICAvLyBub3RlOiAuZXhlYyBjYW4ndCBiZSBhIHN0ZXAgYmVjYXVzZSBpdCByZXR1cm5zIGxvZ3MgYW5kIGEgcmVzdWx0IHByb21pc2Ugd2hpY2ggY2FuJ3QgYmUgc2VyaWFsaXplZFxuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5leGVjKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb21haW4oXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJnZXREb21haW5cIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5nZXREb21haW4oLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YXR1cyhcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcImdldFN0YXR1c1wiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmdldFN0YXR1cyguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2lsbChcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcImtpbGxcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5raWxsKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRmlsZShcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInJlYWRGaWxlXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYngucmVhZEZpbGUoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNuYXBzaG90KFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wic25hcHNob3RcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5zbmFwc2hvdCguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJzdGFydFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnN0YXJ0KC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdG9wKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wic3RvcFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnN0b3AoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU5ldHdvcmtQb2xpY3koXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJ1cGRhdGVOZXR3b3JrUG9saWN5XCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYngudXBkYXRlTmV0d29ya1BvbGljeSguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlcyhcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcIndyaXRlRmlsZXNcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC53cml0ZUZpbGVzKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHsgZ2V0U2Vzc2lvbkNvbnRleHRzIH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QmluZGluZyB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IGxhenlTYW5kYm94SGFuZGxlIH0gZnJvbSBcIi4uL3NhbmRib3gvaGFuZGxlXCI7XG5pbXBvcnQgeyBoaXN0b3J5IH0gZnJvbSBcIi4vaGlzdG9yeVwiO1xuaW1wb3J0IHsgaW50ZXJydXB0IH0gZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5pbXBvcnQgeyBzZW5kIH0gZnJvbSBcIi4vc2VuZFwiO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSBcIi4vc3RyZWFtXCI7XG5pbXBvcnQgeyB1cGRhdGUgfSBmcm9tIFwiLi91cGRhdGVcIjtcbmltcG9ydCB7IHVzYWdlIH0gZnJvbSBcIi4vdXNhZ2VcIjtcblxudHlwZSBTZXNzaW9uT3B0aW9ucyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uQ29udGV4dCA9IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXNzaW9uSGFuZGxlPFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQsXG4gIFRDb250ZXh0LFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPihhZ2VudDogQW55QWdlbnQsIGlkPzogc3RyaW5nIHwgU2Vzc2lvbk9wdGlvbnMpIHtcbiAgY29uc3Qgc2Vzc2lvbklkID1cbiAgICB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyBpZCA6IChpZD8uaWQgPz8gYHNlc3Npb25fJHt1bGlkKCl9YCk7XG5cbiAgY29uc3QgY29udGV4dHMgPSBnZXRTZXNzaW9uQ29udGV4dHMoYWdlbnQpO1xuICBsZXQgc2Vzc2lvbkNvbnRleHQgPSBjb250ZXh0cy5nZXQoc2Vzc2lvbklkKTtcbiAgaWYgKCFzZXNzaW9uQ29udGV4dCkge1xuICAgIHNlc3Npb25Db250ZXh0ID0geyBhZ2VudCwgc2Vzc2lvbklkIH07XG4gICAgY29udGV4dHMuc2V0KHNlc3Npb25JZCwgc2Vzc2lvbkNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogc2Vzc2lvbklkLFxuICAgIHNlbmQ6IChzZW5kPFRvb2xzLCBUQ29udGV4dCwgVE1lc3NhZ2VNZXRhZGF0YSwgVFN0YXRlPikuYmluZChcbiAgICAgIG51bGwsXG4gICAgICBzZXNzaW9uQ29udGV4dFxuICAgICksXG4gICAgc3RyZWFtOiBzdHJlYW0uYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgaGlzdG9yeTogKGhpc3Rvcnk8VG9vbHM+KS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICBpbnRlcnJ1cHQ6IGludGVycnVwdC5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICB1c2FnZTogdXNhZ2UuYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgdXBkYXRlOiAodXBkYXRlPFRTdGF0ZT4pLmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIHNhbmRib3g6IGxhenlTYW5kYm94SGFuZGxlPFRTYW5kYm94QmluZGluZ3M+KGFnZW50LCBzZXNzaW9uSWQpLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgSW5mZXJVSVRvb2xzLFxuICBSZWFzb25pbmdVSVBhcnQsXG4gIFRleHRVSVBhcnQsXG4gIFRvb2xTZXQsXG4gIFVJTWVzc2FnZSxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50RGF0YVR5cGVzIH0gZnJvbSBcIi4uL2FnZW50L3JlZ2lzdHJ5XCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuXG4vKiogU3ViLXRvb2wgcGFydHMgKGZyb20gSmF2YVNjcmlwdCBtZXRhLXRvb2wpIHVzZSB0aGlzIHRvb2xDYWxsSWQgcHJlZml4LiAqL1xuZnVuY3Rpb24gaXNTdWJUb29sUGFydChwYXJ0OiBQYXJ0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHAgPSBwYXJ0LnBhcnQgYXMgeyB0b29sQ2FsbElkPzogc3RyaW5nIH07XG4gIHJldHVybiB0eXBlb2YgcD8udG9vbENhbGxJZCA9PT0gXCJzdHJpbmdcIiAmJiBwLnRvb2xDYWxsSWQuc3RhcnRzV2l0aChcImpzX3RjX1wiKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW1pbmdDb250ZW50KFxuICBwYXJ0OiB1bmtub3duXG4pOiBwYXJ0IGlzIFRleHRVSVBhcnQgfCBSZWFzb25pbmdVSVBhcnQge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiICYmXG4gICAgcGFydCAhPT0gbnVsbCAmJlxuICAgIFwidHlwZVwiIGluIHBhcnQgJiZcbiAgICAocGFydC50eXBlID09PSBcInRleHRcIiB8fCBwYXJ0LnR5cGUgPT09IFwicmVhc29uaW5nXCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUludGVycnVwdEN1dG9mZih7XG4gIHBhcnRzLFxuICBsYXN0UGFydCxcbn06IHtcbiAgcGFydHM6IFBhcnRbXTtcbiAgbGFzdFBhcnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9O1xufSk6IFBhcnRbXSB7XG4gIHJldHVybiBwYXJ0c1xuICAgIC5maWx0ZXIoKHApID0+IHAuaW5kZXggPD0gbGFzdFBhcnQuaW5kZXgpXG4gICAgLm1hcCgocCkgPT4ge1xuICAgICAgaWYgKHAuaW5kZXggIT09IGxhc3RQYXJ0LmluZGV4KSB7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IHJlcGxhY2UgY29udGVudCBmb3Igc3RyZWFtaW5nIHBhcnRzICh0ZXh0LCByZWFzb25pbmcpIHdoZXJlIHRoZVxuICAgICAgICogY2xpZW50J3MgdHJ1bmNhdGVkIHZlcnNpb24gaXMgbW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBzZXJ2ZXIncyBmdWxsXG4gICAgICAgKiB2ZXJzaW9uLiBGb3Igc3RhdGVmdWwgcGFydHMgKHRvb2xzKSwgdGhlIHNlcnZlcidzIHZlcnNpb24gaXNcbiAgICAgICAqIGF1dGhvcml0YXRpdmUgXHUyMDE0IGl0IG1heSBoYXZlIGV2b2x2ZWQgKGUuZy4gYXBwcm92YWwtcmVxdWVzdGVkIFx1MjE5MlxuICAgICAgICogb3V0cHV0LWRlbmllZCkgYWZ0ZXIgdGhlIGNsaWVudCBzbmFwc2hvdCB3YXMgdGFrZW4uXG4gICAgICAgKi9cbiAgICAgIGlmIChpc1N0cmVhbWluZ0NvbnRlbnQobGFzdFBhcnQucGFydCkpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4ucCwgcGFydDogbGFzdFBhcnQucGFydCB9IGFzIFBhcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcDtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VtYmxlVUlNZXNzYWdlczxUb29scyBleHRlbmRzIFRvb2xTZXQ+KG9wdHM6IHtcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbiAgcGFydHM6IFBhcnRbXTtcbiAgdW50aWw/OiBudW1iZXI7XG4gIGluY2x1ZGVRdWV1ZWQ/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBmaWx0ZXJzIG91dCBzdWItdG9vbCBwYXJ0cyBzbyB0aGUgTExNIGRvZXNuJ3Qgc2VlIHRoZW0uICovXG4gIGV4Y2x1ZGVTdWJUb29sUGFydHM/OiBib29sZWFuO1xufSkge1xuICB0eXBlIFR5cGVkVUlNZXNzYWdlID0gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VG9vbHM+PjtcblxuICBsZXQgZmlsdGVyZWQgPSBvcHRzLm1lc3NhZ2VzO1xuXG4gIGlmIChvcHRzLnVudGlsICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB1bnRpbCA9IG9wdHMudW50aWw7XG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKG0pID0+IG0uY3JlYXRlZEF0IDw9IHVudGlsKTtcbiAgfVxuXG4gIGlmICghb3B0cy5pbmNsdWRlUXVldWVkKSB7XG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKG0pID0+IG0uc3RhcnRlZEF0ICE9PSBudWxsKTtcbiAgfVxuXG4gIC8vIFNvcnQgYnkgY3JlYXRlZEF0IHNvIG1lc3NhZ2VzIGFyZSBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIHJlZ2FyZGxlc3Mgb2ZcbiAgLy8gaG93IHRoZSBzdG9yYWdlIGxheWVyIHJldHVybnMgdGhlbSAoZS5nLiBsb2NhbCBGUyByZWFkcyBpbiByZWFkZGlyIG9yZGVyKS5cbiAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWRdLnNvcnQoKGEsIGIpID0+IGEuY3JlYXRlZEF0IC0gYi5jcmVhdGVkQXQpO1xuXG4gIGNvbnN0IHBhcnRzID0gb3B0cy5leGNsdWRlU3ViVG9vbFBhcnRzXG4gICAgPyBvcHRzLnBhcnRzLmZpbHRlcigocCkgPT4gIWlzU3ViVG9vbFBhcnQocCkpXG4gICAgOiBvcHRzLnBhcnRzO1xuXG4gIGNvbnN0IHBhcnRzQnlNZXNzYWdlID0gbmV3IE1hcDxzdHJpbmcsIFBhcnRbXT4oKTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgY29uc3QgbWVzc2FnZUlkID0gU3RyaW5nKHBhcnQubWVzc2FnZUlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHBhcnRzQnlNZXNzYWdlLmdldChtZXNzYWdlSWQpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2gocGFydCk7XG4gICAgcGFydHNCeU1lc3NhZ2Uuc2V0KG1lc3NhZ2VJZCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkXG4gICAgLm1hcCgobSkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZUlkID0gU3RyaW5nKG0uaWQpO1xuICAgICAgbGV0IG1lc3NhZ2VQYXJ0cyA9IHBhcnRzQnlNZXNzYWdlLmdldChtZXNzYWdlSWQpID8/IFtdO1xuICAgICAgbWVzc2FnZVBhcnRzLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcblxuICAgICAgaWYgKG0uaW50ZXJydXB0ZWRMYXN0UGFydCAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VQYXJ0cyA9IGFwcGx5SW50ZXJydXB0Q3V0b2ZmKHtcbiAgICAgICAgICBwYXJ0czogbWVzc2FnZVBhcnRzLFxuICAgICAgICAgIGxhc3RQYXJ0OiBtLmludGVycnVwdGVkTGFzdFBhcnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogbWVzc2FnZUlkLFxuICAgICAgICByb2xlOiBtLnJvbGUsXG4gICAgICAgIHBhcnRzOiBtZXNzYWdlUGFydHMubWFwKChwKSA9PiBwLnBhcnQpLFxuICAgICAgICAuLi4obS5tZXRhZGF0YSAhPSBudWxsID8geyBtZXRhZGF0YTogbS5tZXRhZGF0YSB9IDoge30pLFxuICAgICAgfSBhcyBUeXBlZFVJTWVzc2FnZTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKG0pID0+IG0ucGFydHMubGVuZ3RoID4gMCk7XG59XG4iLCAiZXhwb3J0IHR5cGUgU3RlcFVzYWdlID0ge1xuICBzdGVwSW5kZXg6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIHRvdGFsVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICBjYWNoZVdyaXRlVG9rZW5zOiBudW1iZXI7XG4gIHJlYXNvbmluZ1Rva2VuczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVXNhZ2VTdW1tYXJ5ID0ge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVSZWFkVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlV3JpdGVUb2tlbnM6IG51bWJlcjtcbiAgcmVhc29uaW5nVG9rZW5zOiBudW1iZXI7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvblVzYWdlID0ge1xuICB0b3RhbDogVXNhZ2VTdW1tYXJ5ICYgeyBtZXNzYWdlQ291bnQ6IG51bWJlciB9O1xuICBieU1lc3NhZ2VJZDogUmVjb3JkPHN0cmluZywgVXNhZ2VTdW1tYXJ5IHwgbnVsbD47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNlc3Npb25Vc2FnZShcbiAgbWVzc2FnZXM6IEFycmF5PHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVzYWdlOiB7IHN0ZXBzOiBTdGVwVXNhZ2VbXTsgc3VtbWFyeTogVXNhZ2VTdW1tYXJ5IH0gfCBudWxsO1xuICB9PlxuKTogU2Vzc2lvblVzYWdlIHtcbiAgY29uc3QgYnlNZXNzYWdlSWQ6IFJlY29yZDxzdHJpbmcsIFVzYWdlU3VtbWFyeSB8IG51bGw+ID0ge307XG4gIGZvciAoY29uc3QgbSBvZiBtZXNzYWdlcykge1xuICAgIGJ5TWVzc2FnZUlkW20uaWRdID0gbS51c2FnZT8uc3VtbWFyeSA/PyBudWxsO1xuICB9XG5cbiAgY29uc3Qgc3VtbWFyaWVzID0gbWVzc2FnZXNcbiAgICAubWFwKChtKSA9PiBtLnVzYWdlPy5zdW1tYXJ5KVxuICAgIC5maWx0ZXIoKHMpOiBzIGlzIFVzYWdlU3VtbWFyeSA9PiBzICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHRvdGFsID0ge1xuICAgIG1vZGVsOiBzdW1tYXJpZXNbMF0/Lm1vZGVsID8/IFwidW5rbm93blwiLFxuICAgIGlucHV0VG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMuaW5wdXRUb2tlbnMsIDApLFxuICAgIG91dHB1dFRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLm91dHB1dFRva2VucywgMCksXG4gICAgdG90YWxUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy50b3RhbFRva2VucywgMCksXG4gICAgY2FjaGVSZWFkVG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMuY2FjaGVSZWFkVG9rZW5zLCAwKSxcbiAgICBjYWNoZVdyaXRlVG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMuY2FjaGVXcml0ZVRva2VucywgMCksXG4gICAgcmVhc29uaW5nVG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMucmVhc29uaW5nVG9rZW5zLCAwKSxcbiAgICBzdGVwQ291bnQ6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5zdGVwQ291bnQsIDApLFxuICAgIG1lc3NhZ2VDb3VudDogc3VtbWFyaWVzLmxlbmd0aCxcbiAgfTtcblxuICByZXR1cm4geyB0b3RhbCwgYnlNZXNzYWdlSWQgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IGFzc2VtYmxlVUlNZXNzYWdlcyB9IGZyb20gXCIuLi91dGlscy91aVwiO1xuaW1wb3J0IHsgY29tcHV0ZVNlc3Npb25Vc2FnZSwgdHlwZSBTZXNzaW9uVXNhZ2UgfSBmcm9tIFwiLi4vdXRpbHMvdXNhZ2VcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IHR5cGUgSGlzdG9yeVJlc3VsdCA9IHtcbiAgbWVzc2FnZXM6IFJldHVyblR5cGU8dHlwZW9mIGFzc2VtYmxlVUlNZXNzYWdlcz47XG4gIHN0cmVhbWluZ01lc3NhZ2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgdXNhZ2U6IFNlc3Npb25Vc2FnZTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoaXN0b3J5PFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dFxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgW3Nlc3Npb24sIG1lc3NhZ2VzLCBwYXJ0c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQpLFxuICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5saXN0QnlTZXNzaW9uKFxuICAgICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICAgKSxcbiAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQubGlzdEJ5U2Vzc2lvbihzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQpLFxuICBdKTtcblxuICBjb25zdCBsYXN0QXNzaXN0YW50ID1cbiAgICBtZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uaWQgPT09IHNlc3Npb24/Lmxhc3RNZXNzYWdlSWQgJiYgbS5yb2xlID09PSBcImFzc2lzdGFudFwiXG4gICAgKSA/PyBtZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIikuYXQoLTEpO1xuXG4gIGNvbnN0IGlzU3RyZWFtaW5nID1cbiAgICBsYXN0QXNzaXN0YW50Py5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgIGxhc3RBc3Npc3RhbnQ/LmludGVycnVwdGVkQXQgPT09IG51bGw7XG4gIGNvbnN0IHN0cmVhbWluZ01lc3NhZ2VJZCA9IGlzU3RyZWFtaW5nID8gbGFzdEFzc2lzdGFudC5pZCA6IG51bGw7XG4gIGNvbnN0IHZpc2libGVVbnRpbCA9IGxhc3RBc3Npc3RhbnQ/LmNyZWF0ZWRBdDtcblxuICBjb25zdCBhc3NlbWJsZWQgPSBhc3NlbWJsZVVJTWVzc2FnZXM8VG9vbHM+KHtcbiAgICBtZXNzYWdlcyxcbiAgICBwYXJ0cyxcbiAgICBpbmNsdWRlUXVldWVkOiB2aXNpYmxlVW50aWwgIT09IHVuZGVmaW5lZCxcbiAgICB1bnRpbDogdmlzaWJsZVVudGlsLFxuICB9KTtcblxuICBjb25zdCB1c2FnZSA9IGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXMpO1xuXG4gIHJldHVybiB7IG1lc3NhZ2VzOiBhc3NlbWJsZWQsIHN0cmVhbWluZ01lc3NhZ2VJZCwgdXNhZ2UgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFVJTWVzc2FnZSB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgdHlwZSBJbnRlcnJ1cHRPcHRpb25zID0ge1xuICBsYXN0UGFydD86IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHBhcnQ6IHVua25vd247XG4gIH07XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW50ZXJydXB0KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIG9wdHM/OiBJbnRlcnJ1cHRPcHRpb25zXG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5saXN0QnlTZXNzaW9uKFxuICAgIHNlc3Npb25Db250ZXh0LnNlc3Npb25JZFxuICApO1xuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGxldCBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoXG4gICAgKG0pID0+XG4gICAgICBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiZcbiAgICAgIG0uY29tcGxldGVkQXQgPT09IG51bGwgJiZcbiAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbFxuICApO1xuXG4gIGlmIChwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgTUFYX1JFVFJPQUNUSVZFX01TID0gNV8wMDA7XG4gICAgY29uc3QgbGF0ZXN0ID0gbWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChtKSA9PlxuICAgICAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgIG0uY29tcGxldGVkQXQgIT09IG51bGwgJiZcbiAgICAgICAgICBub3cgLSBtLmNvbXBsZXRlZEF0IDwgTUFYX1JFVFJPQUNUSVZFX01TXG4gICAgICApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5jcmVhdGVkQXQgLSBhLmNyZWF0ZWRBdClcbiAgICAgIC5hdCgwKTtcbiAgICBpZiAobGF0ZXN0KSB7XG4gICAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBbbGF0ZXN0XTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubWFwKChtKSA9PlxuICAgICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLnNldChtLmlkLCB7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIGludGVycnVwdGVkQXQ6IG5vdyxcbiAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogb3B0cz8ubGFzdFBhcnQgPz8gbnVsbCxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGNvbnN0IG1lc3NhZ2VJZHMgPSBuZXcgU2V0KHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcy5tYXAoKG0pID0+IG0uaWQpKTtcbiAgaWYgKG1lc3NhZ2VJZHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFsbFBhcnRzID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0Lmxpc3RCeVNlc3Npb24oXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG5cbiAgZm9yIChjb25zdCBwIG9mIGFsbFBhcnRzKSB7XG4gICAgaWYgKCFtZXNzYWdlSWRzLmhhcyhwLm1lc3NhZ2VJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwLnBhcnQgJiZcbiAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgIChwLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcImFwcHJvdmFsLXJlcXVlc3RlZFwiICYmXG4gICAgICBcImFwcHJvdmFsXCIgaW4gcC5wYXJ0XG4gICAgKSB7XG4gICAgICBjb25zdCBhcHByb3ZhbCA9IChwLnBhcnQgYXMgeyBhcHByb3ZhbD86IHsgaWQ6IHN0cmluZyB9IH0pLmFwcHJvdmFsO1xuICAgICAgaWYgKGFwcHJvdmFsPy5pZCkge1xuICAgICAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHAuaWQsIHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgIC4uLnAucGFydCxcbiAgICAgICAgICAgIHN0YXRlOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgIGFwcHJvdmFsOiB7XG4gICAgICAgICAgICAgIC4uLmFwcHJvdmFsLFxuICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJpbnRlcnJ1cHRlZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRmluaXNoUmVhc29uLCBUb29sU2V0LCBVSU1lc3NhZ2UsIFVJTWVzc2FnZUNodW5rIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiYmV0dGVyLWFsbFwiO1xuaW1wb3J0ICogYXMgZXJyb3JlIGZyb20gXCJlcnJvcmVcIjtcbmltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFVJTWVzc2FnZSB9IGZyb20gXCIuLi9hZ2VudC9yZWdpc3RyeVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbFN1bW1hcnkgfSBmcm9tIFwiLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHR5cGUgeyBTdGVwVXNhZ2UgfSBmcm9tIFwiLi4vdXRpbHMvdXNhZ2VcIjtcbmltcG9ydCB7XG4gIHR5cGUgU3RyZWFtVGV4dFJlc3VsdCxcbiAgc3RyZWFtVGV4dCxcbiAgc3RyZWFtVGV4dFN0ZXAsXG59IGZyb20gXCIuL2FpLWxvb3Avc3RyZWFtLXRleHRcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IGludGVycnVwdCB9IGZyb20gXCIuL2ludGVycnVwdFwiO1xuXG5jb25zdCBERUZBVUxUX1NURVBfVEhST1VHSFBVVCA9IDEwMDtcblxuZXhwb3J0IHR5cGUgQXBwcm92YWxEYXRhID0ge1xuICBhcHByb3ZhbElkOiBzdHJpbmc7XG4gIGFwcHJvdmVkOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59O1xuXG50eXBlIE1lc3NhZ2VEYXRhPFRvb2xzIGV4dGVuZHMgVG9vbFNldCwgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24+ID1cbiAgfCBVSU1lc3NhZ2U8VE1lc3NhZ2VNZXRhZGF0YT5cbiAgfCB7XG4gICAgICByb2xlPzogVHlwZWRVSU1lc3NhZ2U8dW5rbm93biwgVG9vbHM+W1wicm9sZVwiXTtcbiAgICAgIHBhcnRzOiBUeXBlZFVJTWVzc2FnZTx1bmtub3duLCBUb29scz5bXCJwYXJ0c1wiXTtcbiAgICAgIG1ldGFkYXRhPzogVE1lc3NhZ2VNZXRhZGF0YSB8IG51bGw7XG4gICAgICBpZD86IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTZW5kSW5wdXQ8VG9vbHMgZXh0ZW5kcyBUb29sU2V0LCBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bj4gPVxuICB8IHN0cmluZ1xuICB8IE1lc3NhZ2VEYXRhPFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPlxuICB8IHsgdHlwZTogXCJtZXNzYWdlXCI7IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhPFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPiB9XG4gIHwgeyB0eXBlOiBcImFwcHJvdmFsXCI7IGFwcHJvdmFsOiBBcHByb3ZhbERhdGEgfTtcblxuZXhwb3J0IHR5cGUgU2VuZE9wdGlvbnM8VENvbnRleHQsIFRTdGF0ZSA9IHVua25vd24+ID0ge1xuICBpbnRlcnJ1cHRJZlN0cmVhbWluZz86XG4gICAgfCBib29sZWFuXG4gICAgfCB7IGxhc3RQYXJ0OiB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfSB9O1xuICBjb250ZXh0PzogVENvbnRleHQ7XG4gIGluaXRpYWxTdGF0ZT86IFRTdGF0ZTtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgc2FuZGJveElkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFJlc3VsdCA9IHtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIGRvbmU6IHRydWUgfCBQcm9taXNlPHRydWU+O1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aXZlUnVuID0ge1xuICBjaHVua3M6IFVJTWVzc2FnZUNodW5rW107XG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz47XG4gIGRvbmU6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZXNvbHZlcyB3aGVuIGEgbmV3IGNodW5rIGlzIGF2YWlsYWJsZS4gUmVwbGFjZWQgYWZ0ZXIgZWFjaCBub3RpZmljYXRpb24uICovXG4gIG9uQ2h1bms6IFByb21pc2U8dm9pZD47XG59O1xuXG5jb25zdCBBQ1RJVkVfUlVOU19LRVkgPSBTeW1ib2wuZm9yKFwiZXhwZXJpbWVudGFsLWFnZW50OmFjdGl2ZVJ1bnNcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVSdW5zKCk6IE1hcDxzdHJpbmcsIEFjdGl2ZVJ1bj4ge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCBNYXA8c3RyaW5nLCBBY3RpdmVSdW4+IHwgdW5kZWZpbmVkPjtcbiAgaWYgKCFnW0FDVElWRV9SVU5TX0tFWV0pIHtcbiAgICBnW0FDVElWRV9SVU5TX0tFWV0gPSBuZXcgTWFwKCk7XG4gIH1cbiAgcmV0dXJuIGdbQUNUSVZFX1JVTlNfS0VZXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmQ8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVENvbnRleHQsXG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuICBUU3RhdGUgPSB1bmtub3duLFxuPihcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxuICBpbnB1dDpcbiAgICB8IFNlbmRJbnB1dDxUb29scywgVE1lc3NhZ2VNZXRhZGF0YT5cbiAgICB8IFNlbmRJbnB1dDxUb29scywgVE1lc3NhZ2VNZXRhZGF0YT5bXSxcbiAgb3B0cz86IFNlbmRPcHRpb25zPFRDb250ZXh0LCBUU3RhdGU+XG4pOiBQcm9taXNlPFNlbmRSZXN1bHQ+IHtcbiAgaWYgKG9wdHM/LmludGVycnVwdElmU3RyZWFtaW5nKSB7XG4gICAgY29uc3QgbGFzdFBhcnQgPVxuICAgICAgdHlwZW9mIG9wdHMuaW50ZXJydXB0SWZTdHJlYW1pbmcgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBvcHRzLmludGVycnVwdElmU3RyZWFtaW5nLmxhc3RQYXJ0XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IGludGVycnVwdChzZXNzaW9uQ29udGV4dCwgeyBsYXN0UGFydCB9KTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93V3JpdGFibGUsXG4gICAgZXhpc3RpbmdQYXJ0Q291bnQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgc3RhdGUsXG4gIH0gPSBhd2FpdCBlcnJvcmUudHJ5QXN5bmMoe1xuICAgIHRyeTogKCkgPT5cbiAgICAgIGluaXRTZXNzaW9uU3RlcDxUb29scz4oe1xuICAgICAgICBzZXNzaW9uQ29udGV4dCxcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIHNhbmRib3hJZDogb3B0cz8uc2FuZGJveElkLFxuICAgICAgICBpbml0aWFsU3RhdGU6IG9wdHM/LmluaXRpYWxTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgaW5wdXQsXG4gICAgICB9KSxcbiAgICBjYXRjaDogKGUpID0+IHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTZW5kRXJyb3Ioe1xuICAgICAgICBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICByZWFzb246IFN0cmluZyhlKSxcbiAgICAgICAgY2F1c2U6IGUsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBsb29wT3B0cyA9IHtcbiAgICBzZXNzaW9uQ29udGV4dCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgIGNvbnRleHQ6IChvcHRzPy5jb250ZXh0ID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBzdGF0ZSxcbiAgICBsYXN0UGFydEluZGV4OiBleGlzdGluZ1BhcnRDb3VudCxcbiAgICB3b3JrZmxvd1J1bklkLFxuICB9O1xuXG4gIGlmICh3b3JrZmxvd1dyaXRhYmxlKSB7XG4gICAgYXdhaXQgcnVuTG9vcDxUb29scz4oeyAuLi5sb29wT3B0cywgd3JpdGFibGU6IHdvcmtmbG93V3JpdGFibGUgfSk7XG4gICAgcmV0dXJuIHsgYXNzaXN0YW50TWVzc2FnZUlkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBjb25zdCBjaHVua3M6IFVJTWVzc2FnZUNodW5rW10gPSBbXTtcbiAgbGV0IG5vdGlmeUNodW5rOiAoKSA9PiB2b2lkO1xuICBsZXQgb25DaHVuayA9IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgbm90aWZ5Q2h1bmsgPSByO1xuICB9KTtcblxuICBjb25zdCB3cml0YWJsZSA9IG5ldyBXcml0YWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz4oe1xuICAgIHdyaXRlKGNodW5rKSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICBjb25zdCBwcmV2ID0gbm90aWZ5Q2h1bms7XG4gICAgICBvbkNodW5rID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgbm90aWZ5Q2h1bmsgPSByO1xuICAgICAgfSk7XG4gICAgICBwcmV2KCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgZG9uZSA9IHJ1bkxvb3A8VG9vbHM+KHsgLi4ubG9vcE9wdHMsIHdyaXRhYmxlIH0pO1xuXG4gIGNvbnN0IGFjdGl2ZVJ1bjogQWN0aXZlUnVuID0ge1xuICAgIGNodW5rcyxcbiAgICB3cml0YWJsZSxcbiAgICBkb25lLFxuICAgIGdldCBvbkNodW5rKCkge1xuICAgICAgcmV0dXJuIG9uQ2h1bms7XG4gICAgfSxcbiAgfTtcbiAgY29uc3QgYWN0aXZlUnVucyA9IGdldEFjdGl2ZVJ1bnMoKTtcbiAgYWN0aXZlUnVucy5zZXQoYXNzaXN0YW50TWVzc2FnZUlkLCBhY3RpdmVSdW4pO1xuICBkb25lLmZpbmFsbHkoKCkgPT4gYWN0aXZlUnVucy5kZWxldGUoYXNzaXN0YW50TWVzc2FnZUlkKSk7XG5cbiAgcmV0dXJuIHsgYXNzaXN0YW50TWVzc2FnZUlkLCBkb25lOiBkb25lLnRoZW4oKCkgPT4gdHJ1ZSkgfTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQUkgTG9vcFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5hc3luYyBmdW5jdGlvbiBydW5Mb29wPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICB3b3JrZmxvd1J1bklkLFxuICBzZXNzaW9uQ29udGV4dCxcbiAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICBjcmVhdGVkQXQsXG4gIGNvbnRleHQ6IGluaXRpYWxDb250ZXh0LFxuICBzdGF0ZSxcbiAgd3JpdGFibGUsXG4gIGxhc3RQYXJ0SW5kZXg6IGluaXRpYWxQYXJ0SW5kZXgsXG59OiB7XG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0O1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBudW1iZXI7XG4gIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbTtcbiAgbGFzdFBhcnRJbmRleDogbnVtYmVyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhZ2VudCA9IHNlc3Npb25Db250ZXh0LmFnZW50O1xuXG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJhaS1sb29wXCIsXG4gIH0pO1xuICBjb25zdCBtc2dMb2cgPSBsb2cud2l0aENvbnRleHQoe1xuICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICB9KTtcbiAgY29uc3QgZG9uZU1lc3NhZ2UgPSBtc2dMb2cudGltZShcIm9uTWVzc2FnZVwiKTtcblxuICBsZXQgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24gfCB1bmRlZmluZWQ7XG4gIGxldCBsYXN0UGFydEluZGV4ID0gaW5pdGlhbFBhcnRJbmRleDtcbiAgY29uc3QgdXNhZ2VTdGVwczogU3RlcFVzYWdlW10gPSBbXTtcbiAgbGV0IGRpc2NvdmVyZWRTa2lsbHM6IFNraWxsU3VtbWFyeVtdIHwgbnVsbCA9IG51bGw7XG4gIGxldCBjb250ZXh0ID0gaW5pdGlhbENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAoZmluaXNoUmVhc29uICE9PSBcInN0b3BcIikge1xuICAgICAgY29uc3Qgc3RyZWFtVGV4dEZuID0gd29ya2Zsb3dSdW5JZFxuICAgICAgICA/IHN0cmVhbVRleHRTdGVwPFRvb2xzPlxuICAgICAgICA6IHN0cmVhbVRleHQ8VG9vbHM+O1xuICAgICAgY29uc3QgdGhyb3VnaHB1dCA9IHdvcmtmbG93UnVuSWQgPyA1IDogREVGQVVMVF9TVEVQX1RIUk9VR0hQVVQ7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogU3RyZWFtVGV4dFJlc3VsdCA9IGF3YWl0IHN0cmVhbVRleHRGbih7XG4gICAgICAgIHN0ZXBUaHJvdWdocHV0OiB0aHJvdWdocHV0LFxuICAgICAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgIGFnZW50LFxuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNyZWF0ZWRBdCxcbiAgICAgICAgd3JpdGFibGUsXG4gICAgICAgIGxhc3RQYXJ0SW5kZXgsXG4gICAgICAgIHN0ZXBJbmRleE9mZnNldDogdXNhZ2VTdGVwcy5sZW5ndGgsXG4gICAgICAgIGRpc2NvdmVyZWRTa2lsbHMsXG4gICAgICB9KTtcblxuICAgICAgZmluaXNoUmVhc29uID0gcmVzdWx0LmZpbmlzaFJlYXNvbjtcbiAgICAgIGxhc3RQYXJ0SW5kZXggPSByZXN1bHQubGFzdFBhcnRJbmRleDtcbiAgICAgIHVzYWdlU3RlcHMucHVzaCguLi5yZXN1bHQudXNhZ2VTdGVwcyk7XG4gICAgICBkaXNjb3ZlcmVkU2tpbGxzID0gcmVzdWx0LmRpc2NvdmVyZWRTa2lsbHM7XG4gICAgICBjb250ZXh0ID0gcmVzdWx0LmNvbnRleHQ7XG5cbiAgICAgIGlmIChyZXN1bHQubWF4U3RlcHMgIT0gbnVsbCAmJiB1c2FnZVN0ZXBzLmxlbmd0aCA+PSByZXN1bHQubWF4U3RlcHMpIHtcbiAgICAgICAgbXNnTG9nLmluZm8oXCJyZWFjaGVkIG1heFN0ZXBzIGxpbWl0XCIsIHsgbWF4U3RlcHM6IHJlc3VsdC5tYXhTdGVwcyB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQucGVuZGluZ0FwcHJvdmFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZ0xvZy5pbmZvKFwicGVuZGluZyBhcHByb3ZhbHMsIHN0b3BwaW5nIGxvb3BcIiwge1xuICAgICAgICAgIGNvdW50OiByZXN1bHQucGVuZGluZ0FwcHJvdmFscy5sZW5ndGgsXG4gICAgICAgICAgdG9vbHM6IHJlc3VsdC5wZW5kaW5nQXBwcm92YWxzLm1hcCgocCkgPT4gcC50b29sTmFtZSksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb25lTWVzc2FnZSh7IHRvdGFsU3RlcHM6IHVzYWdlU3RlcHMubGVuZ3RoIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBtc2dMb2cuZXJyb3IoXCJBSSBsb29wIGZhaWxlZFwiLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgIH0pO1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21wbGV0ZU1lc3NhZ2VTdGVwKHtcbiAgICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgIHNlc3Npb25Db250ZXh0LFxuICAgICAgd3JpdGFibGUsXG4gICAgICB1c2FnZVN0ZXBzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFN0ZXBzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRTZXNzaW9uU3RlcDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KHtcbiAgc2Vzc2lvbkNvbnRleHQsXG4gIHNlc3Npb25JZCxcbiAgc2FuZGJveElkLFxuICBpbml0aWFsU3RhdGUsXG4gIGlucHV0LFxufToge1xuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQ7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzYW5kYm94SWQ/OiBzdHJpbmc7XG4gIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpbnB1dDogU2VuZElucHV0PFRvb2xzPiB8IFNlbmRJbnB1dDxUb29scz5bXTtcbn0pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGxldCB3b3JrZmxvd1J1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCB3b3JrZmxvd1dyaXRhYmxlOiBXcml0YWJsZVN0cmVhbSB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIGdldFdyaXRhYmxlIH0gPSBhd2FpdCBpbXBvcnQoXCJ3b3JrZmxvd1wiKTtcbiAgICB3b3JrZmxvd1J1bklkID0gZ2V0V29ya2Zsb3dNZXRhZGF0YSgpLndvcmtmbG93UnVuSWQ7XG4gICAgd29ya2Zsb3dXcml0YWJsZSA9IGdldFdyaXRhYmxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIHdvcmtmbG93IG5vdCBpbnN0YWxsZWRcbiAgfVxuXG4gIGNvbnN0IG5ld01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgY29uc3QgbmV3UGFydHM6IFBhcnRbXSA9IFtdO1xuICBjb25zdCBuZXdBcHByb3ZhbHM6IEFwcHJvdmFsRGF0YVtdID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGZvciAoY29uc3QgaSBvZiBpbnB1dCkge1xuICAgICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cywgYXBwcm92YWxzIH0gPSB0b01lc3NhZ2VBbmRQYXJ0cyh7XG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICBpbnB1dDogaSxcbiAgICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgICAgfSk7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbmV3UGFydHMucHVzaCguLi5wYXJ0cyk7XG4gICAgICBuZXdBcHByb3ZhbHMucHVzaCguLi5hcHByb3ZhbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHBhcnRzLCBhcHByb3ZhbHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgIGlucHV0LFxuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgfSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICAgIG5ld1BhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIG5ld0FwcHJvdmFscy5wdXNoKC4uLmFwcHJvdmFscyk7XG4gIH1cblxuICBjb25zdCBsYXN0TmV3TWVzc2FnZSA9IG5ld01lc3NhZ2VzLmF0KC0xKTtcbiAgY29uc3QgcmV1c2VBc3Npc3RhbnQgPSBsYXN0TmV3TWVzc2FnZT8ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIjtcblxuICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlSWQgPSByZXVzZUFzc2lzdGFudFxuICAgID8gbGFzdE5ld01lc3NhZ2UuaWRcbiAgICA6IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gIGNvbnN0IGJhc2VUaW1lID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCA9IGJhc2VUaW1lICsgbmV3TWVzc2FnZXMubGVuZ3RoO1xuXG4gIGlmICghcmV1c2VBc3Npc3RhbnQpIHtcbiAgICBuZXdNZXNzYWdlcy5wdXNoKHtcbiAgICAgIGlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICBjcmVhdGVkQXQ6IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBudWxsLFxuICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICB3b3JrZmxvd1J1bklkOiBudWxsLFxuICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBleGlzdGluZ1BhcnRDb3VudCA9IHJldXNlQXNzaXN0YW50XG4gICAgPyBuZXdQYXJ0cy5maWx0ZXIoKHApID0+IHAubWVzc2FnZUlkID09PSBhc3Npc3RhbnRNZXNzYWdlSWQpLmxlbmd0aFxuICAgIDogMDtcblxuICBsZXQgc2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICBzYW5kYm94SWQ6IHNhbmRib3hJZCA/PyBudWxsLFxuICAgICAgbGFzdE1lc3NhZ2VJZDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgfTtcbiAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uc2V0KHNlc3Npb24uaWQsIHNlc3Npb24pO1xuICB9IGVsc2UgaWYgKHNhbmRib3hJZCAmJiBzYW5kYm94SWQgIT09IHNlc3Npb24uc2FuZGJveElkKSB7XG4gICAgc2Vzc2lvbiA9IHsgLi4uc2Vzc2lvbiwgc2FuZGJveElkLCB1cGRhdGVkQXQ6IG5vdyB9O1xuICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi51cGRhdGUoc2Vzc2lvbi5pZCwge1xuICAgICAgc2FuZGJveElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXdhaXQgYWxsKHtcbiAgICBhc3luYyBzYXZlTWVzc2FnZXMoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbmV3TWVzc2FnZXMubWFwKGFzeW5jIChtLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UuZ2V0KG0uaWQpO1xuICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2Uuc2V0KG0uaWQsIHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IGJhc2VUaW1lICsgaSxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQ6XG4gICAgICAgICAgICAgIG0uaWQgPT09IGFzc2lzdGFudE1lc3NhZ2VJZFxuICAgICAgICAgICAgICAgID8gKHdvcmtmbG93UnVuSWQgPz8gbnVsbClcbiAgICAgICAgICAgICAgICA6IG0ud29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyBzYXZlUGFydHMoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbmV3UGFydHMubWFwKGFzeW5jIChwKSA9PlxuICAgICAgICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5zZXQocC5pZCwgcClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc29sdmVBcHByb3ZhbHMoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbmV3QXBwcm92YWxzLm1hcChhc3luYyAoYSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRJZCA9IGFwcHJvdmFsUGFydElkKGEuYXBwcm92YWxJZCk7XG4gICAgICAgICAgY29uc3QgcGFydCA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5nZXQocGFydElkKTtcbiAgICAgICAgICBpZiAoIXBhcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHByb3ZhbE5vdEZvdW5kRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBhcHByb3ZhbElkOiBhLmFwcHJvdmFsSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwYXJ0SWQsIHtcbiAgICAgICAgICAgIC4uLnBhcnQsXG4gICAgICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgICAgIC4uLnBhcnQucGFydCxcbiAgICAgICAgICAgICAgc3RhdGU6IGEuYXBwcm92ZWQgPyBcImFwcHJvdmFsLXJlc3BvbmRlZFwiIDogXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgICAgIGFwcHJvdmFsOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGEuYXBwcm92YWxJZCxcbiAgICAgICAgICAgICAgICBhcHByb3ZlZDogYS5hcHByb3ZlZCxcbiAgICAgICAgICAgICAgICByZWFzb246IGEucmVhc29uLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyB0eXBlb2YgcGFydC5wYXJ0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIHVwZGF0ZVNlc3Npb24oKSB7XG4gICAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uc2V0KHNlc3Npb24uaWQsIHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgbGFzdE1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBzZXNzaW9uLnN0YXRlXG4gICAgPyB7IC4uLnNlc3Npb24uc3RhdGUgfVxuICAgIDogeyAuLi4oaW5pdGlhbFN0YXRlID8/IHt9KSB9O1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZCxcbiAgICB3b3JrZmxvd1dyaXRhYmxlLFxuICAgIGV4aXN0aW5nUGFydENvdW50LFxuICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgIHN0YXRlLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wbGV0ZU1lc3NhZ2VTdGVwKHtcbiAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICBzZXNzaW9uQ29udGV4dCxcbiAgd3JpdGFibGUsXG4gIHVzYWdlU3RlcHMsXG59OiB7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQ7XG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbTtcbiAgdXNhZ2VTdGVwczogU3RlcFVzYWdlW107XG59KSB7XG4gIFwidXNlIHN0ZXBcIjtcblxuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzoge1xuICAgICAgLi4uc2Vzc2lvbkNvbnRleHQuYWdlbnQub3B0aW9ucy5sb2dnaW5nLFxuICAgICAgbmFtZTogc2Vzc2lvbkNvbnRleHQuYWdlbnQubmFtZSxcbiAgICB9LFxuICAgIHN1YnN5c3RlbTogXCJhaS1sb29wXCIsXG4gIH0pO1xuICBjb25zdCBtc2dMb2cgPSBsb2cud2l0aENvbnRleHQoe1xuICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICB9KTtcblxuICBjb25zdCB1c2FnZSA9XG4gICAgdXNhZ2VTdGVwcy5sZW5ndGggPiAwXG4gICAgICA/IHtcbiAgICAgICAgICBzdGVwczogdXNhZ2VTdGVwcyxcbiAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICBtb2RlbDogdXNhZ2VTdGVwc1swXT8ubW9kZWwgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoKGEsIHMpID0+IGEgKyBzLmlucHV0VG9rZW5zLCAwKSxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoKGEsIHMpID0+IGEgKyBzLm91dHB1dFRva2VucywgMCksXG4gICAgICAgICAgICB0b3RhbFRva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoKGEsIHMpID0+IGEgKyBzLnRvdGFsVG9rZW5zLCAwKSxcbiAgICAgICAgICAgIGNhY2hlUmVhZFRva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhLCBzKSA9PiBhICsgcy5jYWNoZVJlYWRUb2tlbnMsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYWNoZVdyaXRlVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGEsIHMpID0+IGEgKyBzLmNhY2hlV3JpdGVUb2tlbnMsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZWFzb25pbmdUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYSwgcykgPT4gYSArIHMucmVhc29uaW5nVG9rZW5zLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RlcENvdW50OiB1c2FnZVN0ZXBzLmxlbmd0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS51cGRhdGUoYXNzaXN0YW50TWVzc2FnZUlkLCB7XG4gICAgICBjb21wbGV0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHVzYWdlLFxuICAgIH0pLFxuICAgIHdyaXRhYmxlLmNsb3NlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSxcbiAgXSk7XG5cbiAgbXNnTG9nLmluZm8oXCJtZXNzYWdlIGNvbXBsZXRlZFwiLCB7XG4gICAgc3RlcHM6IHVzYWdlU3RlcHMubGVuZ3RoLFxuICAgIHRvdGFsVG9rZW5zOiB1c2FnZT8uc3VtbWFyeS50b3RhbFRva2VucyxcbiAgfSk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFV0aWxzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3ZhbFBhcnRJZChhcHByb3ZhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHBhcnRfJHthcHByb3ZhbElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYXlBY3RpdmVSdW4oXG4gIGFjdGl2ZTogQWN0aXZlUnVuLFxuICBzdGFydEluZGV4ID0gMFxuKTogUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+IHtcbiAgbGV0IGN1cnNvciA9IHN0YXJ0SW5kZXg7XG4gIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPih7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICAvLyBEcmFpbiBhbnkgYnVmZmVyZWQgY2h1bmtzXG4gICAgICB3aGlsZSAoY3Vyc29yIDwgYWN0aXZlLmNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGFjdGl2ZS5jaHVua3NbY3Vyc29yKytdKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3IgZWl0aGVyIGEgbmV3IGNodW5rIG9yIGNvbXBsZXRpb25cbiAgICAgIHdoaWxlICghY2FuY2VsbGVkICYmIGN1cnNvciA+PSBhY3RpdmUuY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgIGFjdGl2ZS5vbkNodW5rLnRoZW4oKCkgPT4gXCJjaHVua1wiIGFzIGNvbnN0KSxcbiAgICAgICAgICBhY3RpdmUuZG9uZS50aGVuKCgpID0+IFwiZG9uZVwiIGFzIGNvbnN0KSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgLy8gRHJhaW4gbmV3IGNodW5rc1xuICAgICAgICB3aGlsZSAoY3Vyc29yIDwgYWN0aXZlLmNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYWN0aXZlLmNodW5rc1tjdXJzb3IrK10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJkb25lXCIpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwoKSB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b01lc3NhZ2VBbmRQYXJ0czxUb29scyBleHRlbmRzIFRvb2xTZXQ+KHtcbiAgc2Vzc2lvbklkLFxuICBpZCxcbiAgaW5wdXQsXG4gIGRlZmF1bHRSb2xlLFxufToge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlucHV0OiBTZW5kSW5wdXQ8VG9vbHM+O1xuICBkZWZhdWx0Um9sZTogVUlNZXNzYWdlW1wicm9sZVwiXTtcbn0pOiB7XG4gIG1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIHBhcnRzOiBQYXJ0W107XG4gIGFwcHJvdmFsczogQXBwcm92YWxEYXRhW107XG59IHtcbiAgbGV0IG1lc3NhZ2VJZCA9IGlkID8/IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7XG4gICAgICBhcHByb3ZhbHM6IFtdLFxuICAgICAgbWVzc2FnZToge1xuICAgICAgICBpZDogbWVzc2FnZUlkLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHJvbGU6IGRlZmF1bHRSb2xlLFxuICAgICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICAgIHdvcmtmbG93UnVuSWQ6IG51bGwsXG4gICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHBhcnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGlkOiBgcGFydF8ke21lc3NhZ2VJZH1fMGAsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgcGFydDogeyB0eXBlOiBcInRleHRcIiwgdGV4dDogaW5wdXQgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuICBpZiAoXCJ0eXBlXCIgaW4gaW5wdXQgJiYgaW5wdXQudHlwZSA9PT0gXCJhcHByb3ZhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHVuZGVmaW5lZCxcbiAgICAgIHBhcnRzOiBbXSxcbiAgICAgIGFwcHJvdmFsczogW2lucHV0LmFwcHJvdmFsXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbXNnID1cbiAgICBcInR5cGVcIiBpbiBpbnB1dCAmJiBpbnB1dC50eXBlID09PSBcIm1lc3NhZ2VcIiA/IGlucHV0Lm1lc3NhZ2UgOiBpbnB1dDtcbiAgaWYgKFwiaWRcIiBpbiBtc2cgJiYgbXNnLmlkKSB7XG4gICAgbWVzc2FnZUlkID0gbXNnLmlkO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbWV0YWRhdGEgPVxuICAgIFwibWV0YWRhdGFcIiBpbiBtc2cgJiYgbXNnLm1ldGFkYXRhICE9IG51bGxcbiAgICAgID8gKG1zZy5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhcHByb3ZhbHM6IFtdLFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICB1c2FnZTogbnVsbCxcbiAgICAgIHdvcmtmbG93UnVuSWQ6IG51bGwsXG4gICAgICByb2xlOiBtc2cucm9sZSA/PyBkZWZhdWx0Um9sZSxcbiAgICAgIG1ldGFkYXRhLFxuICAgIH0sXG4gICAgcGFydHM6IG1zZy5wYXJ0cy5tYXAoKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBhcCA9IHBhcnQgYXMgeyBhcHByb3ZhbD86IHsgaWQ6IHN0cmluZyB9IH07XG4gICAgICBjb25zdCBpZCA9IGFwLmFwcHJvdmFsPy5pZFxuICAgICAgICA/IGFwcHJvdmFsUGFydElkKGFwLmFwcHJvdmFsLmlkKVxuICAgICAgICA6IGBwYXJ0XyR7bWVzc2FnZUlkfV8ke2luZGV4fWA7XG4gICAgICByZXR1cm4geyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgaWQsIGluZGV4LCBwYXJ0IH07XG4gICAgfSksXG4gIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEVycm9yc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgY2xhc3MgU2VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTZW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTZW5kIGZhaWxlZCBmb3Igc2Vzc2lvbiAkaWQ6ICRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBBcHByb3ZhbE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIkFwcHJvdmFsTm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIkFwcHJvdmFsICRhcHByb3ZhbElkIG5vdCBmb3VuZCBpbiBzZXNzaW9uICRpZFwiLFxufSkge31cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEZpbmlzaFJlYXNvbixcbiAgVG9vbFNldCxcbiAgVUlNZXNzYWdlLFxuICBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXIsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHtcbiAgY29udmVydFRvTW9kZWxNZXNzYWdlcyxcbiAgY3JlYXRlVUlNZXNzYWdlU3RyZWFtLFxuICBzdGVwQ291bnRJcyxcbiAgc3RyZWFtVGV4dCBhcyBzdHJlYW1UZXh0QWksXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUge1xuICBBZ2VudFN0YXR1cyxcbiAgQW55QWdlbnQsXG4gIFJlc29sdmFibGUsXG4gIFJlc29sdmFibGVBcmdzLFxuICBUeXBlZFVJTWVzc2FnZSxcbn0gZnJvbSBcIi4uLy4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHsgU2Vzc2lvbk5vdEZvdW5kRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBkaXNjb3ZlclNraWxsc0luU2FuZGJveCB9IGZyb20gXCIuLi8uLi9za2lsbHMvZGlzY292ZXJcIjtcbmltcG9ydCB7IHJlc29sdmVTa2lsbElucHV0c1RvU2FuZGJveERpcnMgfSBmcm9tIFwiLi4vLi4vc2tpbGxzL3Jlc29sdmVcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxTdW1tYXJ5IH0gZnJvbSBcIi4uLy4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJ0IH0gZnJvbSBcIi4uLy4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQnVpbHRJblRvb2xOYW1lLCBnZXRUb29scywgdHlwZSBUb29sQ29udGV4dCB9IGZyb20gXCIuLi8uLi90b29sc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5UHJvbXB0Q2FjaGluZ1RvTW9kZWxSZXF1ZXN0LFxuICBtZXJnZVByb3ZpZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb21wdC1jYWNoZVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VpXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXBVc2FnZSB9IGZyb20gXCIuLi8uLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHsgYXBwcm92YWxQYXJ0SWQgfSBmcm9tIFwiLi4vc2VuZFwiO1xuXG5jb25zdCBJTlRFUlJVUFRfUE9MTF9JTlRFUlZBTF9NUyA9IDI1MDtcblxuZnVuY3Rpb24gcG9sbEZvckludGVycnVwdCh7XG4gIGFnZW50LFxuICBtZXNzYWdlSWQsXG4gIHNpZ25hbCxcbiAgYWJvcnRDb250cm9sbGVyLFxufToge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcbn0pOiB7XG4gIGZpcnN0Q2hlY2s6IFByb21pc2U8dm9pZD47XG4gIGludGVycnVwdGVkTGFzdFBhcnRSZWY6IHsgY3VycmVudDogeyBpbmRleDogbnVtYmVyOyBwYXJ0OiB1bmtub3duIH0gfCBudWxsIH07XG59IHtcbiAgbGV0IHJlc29sdmVGaXJzdENoZWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdCBmaXJzdENoZWNrID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICByZXNvbHZlRmlyc3RDaGVjayA9IHJlc29sdmU7XG4gIH0pO1xuICBjb25zdCBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmID0ge1xuICAgIGN1cnJlbnQ6IG51bGwgYXMgeyBpbmRleDogbnVtYmVyOyBwYXJ0OiB1bmtub3duIH0gfCBudWxsLFxuICB9O1xuXG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJhaS1sb29wXCIsXG4gIH0pO1xuXG4gIGNvbnN0IHBvbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGlzRmlyc3QgPSB0cnVlO1xuICAgIHdoaWxlICghc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLm1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgICByZXNvbHZlRmlyc3RDaGVjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1lc3NhZ2UgJHttZXNzYWdlSWR9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UuaW50ZXJydXB0ZWRBdCAhPT0gbnVsbCkge1xuICAgICAgICBsb2cuaW5mbyhcImludGVycnVwdCBkZXRlY3RlZFwiLCB7IG1lc3NhZ2VJZCB9KTtcbiAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydFJlZi5jdXJyZW50ID0gbWVzc2FnZS5pbnRlcnJ1cHRlZExhc3RQYXJ0O1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgICByZXNvbHZlRmlyc3RDaGVjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZUZpcnN0Q2hlY2soKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIElOVEVSUlVQVF9QT0xMX0lOVEVSVkFMX01TKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcG9sbCgpO1xuICByZXR1cm4geyBmaXJzdENoZWNrLCBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmIH07XG59XG5cbnR5cGUgU3RyZWFtVGV4dE9wdGlvbnMgPSB7XG4gIHN0ZXBUaHJvdWdocHV0OiBudW1iZXI7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtO1xuICBsYXN0UGFydEluZGV4OiBudW1iZXI7XG4gIHN0ZXBJbmRleE9mZnNldDogbnVtYmVyO1xuICBkaXNjb3ZlcmVkU2tpbGxzOiBTa2lsbFN1bW1hcnlbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1UZXh0UmVzdWx0ID0ge1xuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbjtcbiAgbGFzdFBhcnRJbmRleDogbnVtYmVyO1xuICB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXTtcbiAgcGVuZGluZ0FwcHJvdmFsczogeyBhcHByb3ZhbElkOiBzdHJpbmc7IHRvb2xOYW1lOiBzdHJpbmcgfVtdO1xuICBtYXhTdGVwczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBkaXNjb3ZlcmVkU2tpbGxzOiBTa2lsbFN1bW1hcnlbXSB8IG51bGw7XG4gIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRleHQ8VG9vbHMgZXh0ZW5kcyBUb29sU2V0Pih7XG4gIHN0ZXBUaHJvdWdocHV0LFxuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIGFnZW50LFxuICBzZXNzaW9uSWQsXG4gIGNvbnRleHQsXG4gIHN0YXRlLFxuICBjcmVhdGVkQXQsXG4gIHdyaXRhYmxlLFxuICBsYXN0UGFydEluZGV4LFxuICBzdGVwSW5kZXhPZmZzZXQsXG4gIGRpc2NvdmVyZWRTa2lsbHMsXG59OiBTdHJlYW1UZXh0T3B0aW9ucyk6IFByb21pc2U8U3RyZWFtVGV4dFJlc3VsdD4ge1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwiYWktbG9vcFwiLFxuICB9KTtcblxuICBjb25zdCBzdGVwTG9nID0gbG9nLndpdGhDb250ZXh0KHtcbiAgICBzZXNzaW9uSWQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIH0pO1xuICBjb25zdCBkb25lU3RlcCA9IHN0ZXBMb2cudGltZShcInN0cmVhbVRleHRcIik7XG5cbiAgY29uc3QgdGhyb3R0bGVkRW1pdFN0YXR1cyA9IGNyZWF0ZVRocm90dGxlZEVtaXRTdGF0dXMoYWdlbnQpO1xuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgcG9sbENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgY29uc3QgeyBmaXJzdENoZWNrLCBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmIH0gPSBwb2xsRm9ySW50ZXJydXB0KHtcbiAgICBhZ2VudCxcbiAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICBzaWduYWw6IHBvbGxDb250cm9sbGVyLnNpZ25hbCxcbiAgICBhYm9ydENvbnRyb2xsZXIsXG4gIH0pO1xuXG4gIGNvbnN0IGRvbmVMb2FkID0gc3RlcExvZy50aW1lKFwibG9hZCBzZXNzaW9uICsgbWVzc2FnZXMgKyBwYXJ0cyArIHNhbmRib3hcIik7XG4gIGNvbnN0IFssIG1lc3NhZ2VzUmVzdWx0LCBwYXJ0c1Jlc3VsdCwgeyBzYW5kYm94LCBzYW5kYm94UmVjb3JkIH1dID1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmaXJzdENoZWNrLFxuICAgICAgYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oc2Vzc2lvbklkKSxcbiAgICAgIGFnZW50LnN0b3JhZ2UucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCksXG4gICAgICBhZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KHNlc3Npb25JZCkudGhlbihhc3luYyAoc2Vzc2lvbikgPT4ge1xuICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbk5vdEZvdW5kRXJyb3IoeyBpZDogc2Vzc2lvbklkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2FuZGJveElkID0gc2Vzc2lvbi5zYW5kYm94SWQgPz8gc2Vzc2lvbi5pZDtcbiAgICAgICAgY29uc3Qgc2FuZGJveCA9IGFnZW50LnNhbmRib3goc2FuZGJveElkKTtcbiAgICAgICAgY29uc3Qgc2FuZGJveFJlY29yZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcblxuICAgICAgICByZXR1cm4geyBzYW5kYm94LCBzYW5kYm94UmVjb3JkIH07XG4gICAgICB9KSxcbiAgICBdKTtcblxuICBkb25lTG9hZCgpO1xuXG4gIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBwb2xsQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmaW5pc2hSZWFzb246IFwic3RvcFwiIGFzIEZpbmlzaFJlYXNvbixcbiAgICAgIGxhc3RQYXJ0SW5kZXgsXG4gICAgICB1c2FnZVN0ZXBzOiBbXSxcbiAgICAgIHBlbmRpbmdBcHByb3ZhbHM6IFtdLFxuICAgICAgbWF4U3RlcHM6IHVuZGVmaW5lZCxcbiAgICAgIGRpc2NvdmVyZWRTa2lsbHMsXG4gICAgICBjb250ZXh0LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzZXRTdGFydGVkUHJvbWlzZSA9XG4gICAgbGFzdFBhcnRJbmRleCA9PT0gMFxuICAgICAgPyAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgcGVuZGluZ01lc3NhZ2VzID0gbWVzc2FnZXNSZXN1bHQuZmlsdGVyKFxuICAgICAgICAgICAgKG0pID0+IG0uY3JlYXRlZEF0IDw9IGNyZWF0ZWRBdCAmJiBtLnN0YXJ0ZWRBdCA9PT0gbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBlbmRpbmdNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIHBlbmRpbmdNZXNzYWdlcy5tYXAoKG0pID0+XG4gICAgICAgICAgICAgICAgYWdlbnQuc3RvcmFnZS5tZXNzYWdlLnVwZGF0ZShtLmlkLCB7XG4gICAgICAgICAgICAgICAgICBzdGFydGVkQXQ6IG5vdyxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZEF0OiBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgPyBudWxsIDogbm93LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpXG4gICAgICA6IG51bGw7XG5cbiAgY29uc3QgYWxsUGFydHMgPSBbLi4ucGFydHNSZXN1bHRdO1xuICBjb25zdCBuZXh0UGFydEluZGV4UmVmID0ge1xuICAgIGN1cnJlbnQ6IE1hdGgubWF4KFxuICAgICAgbGFzdFBhcnRJbmRleCxcbiAgICAgIC4uLmFsbFBhcnRzXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAubWVzc2FnZUlkID09PSBhc3Npc3RhbnRNZXNzYWdlSWQpXG4gICAgICAgIC5tYXAoKHApID0+IHAuaW5kZXggKyAxKSxcbiAgICAgIDBcbiAgICApLFxuICB9O1xuXG4gIGNvbnN0IHNraWxsc1JlZjogeyBjdXJyZW50OiBTa2lsbFN1bW1hcnlbXSB9ID0ge1xuICAgIGN1cnJlbnQ6IGRpc2NvdmVyZWRTa2lsbHMgPz8gW10sXG4gIH07XG5cbiAgLy8gQnVpbGQgdWlNZXNzYWdlcyBmcm9tIGN1cnJlbnQgcGFydHMgKHJlYnVpbHQgYmV0d2VlbiBpdGVyYXRpb25zKVxuICBsZXQgdWlNZXNzYWdlcyA9IGFzc2VtYmxlVUlNZXNzYWdlcyh7XG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVzdWx0LFxuICAgIHBhcnRzOiBhbGxQYXJ0cyxcbiAgICB1bnRpbDogY3JlYXRlZEF0LFxuICAgIGluY2x1ZGVRdWV1ZWQ6IHRydWUsXG4gICAgZXhjbHVkZVN1YlRvb2xQYXJ0czogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gQnVpbGQgcmVzb2x2YWJsZSBhcmdzIGZvciByZXNvbHZpbmcgYWdlbnQgb3B0aW9uc1xuICBjb25zdCByZXNvbHZhYmxlQXJnczogUmVzb2x2YWJsZUFyZ3MgPSB7XG4gICAgY29udGV4dCxcbiAgICBzdGF0ZSxcbiAgICBzZXNzaW9uSWQsXG4gICAgc2FuZGJveCxcbiAgICBnZXQgbWVzc2FnZXMoKSB7XG4gICAgICByZXR1cm4gdWlNZXNzYWdlcztcbiAgICB9LFxuICB9O1xuXG4gIC8vIHNraWxscyBkaXNjb3ZlcnkgXHUyMDE0IGZpcnN0IGl0ZXJhdGlvbiBvbmx5XG4gIGlmIChsYXN0UGFydEluZGV4ID09PSAwICYmICFkaXNjb3ZlcmVkU2tpbGxzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRTa2lsbHMgPSBhd2FpdCByZXNvbHZlT3B0aW9uKFxuICAgICAgYWdlbnQub3B0aW9ucy5za2lsbHMsXG4gICAgICByZXNvbHZhYmxlQXJnc1xuICAgICk7XG4gICAgY29uc3Qgc2tpbGxzRGlycyA9IHJlc29sdmVkU2tpbGxzPy5sZW5ndGhcbiAgICAgID8gYXdhaXQgcmVzb2x2ZVNraWxsSW5wdXRzVG9TYW5kYm94RGlycyh7XG4gICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICBza2lsbHM6IHJlc29sdmVkU2tpbGxzLFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIDogW107XG4gICAgaWYgKHNraWxsc0RpcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZG9uZVNraWxscyA9IHN0ZXBMb2cudGltZShcImRpc2NvdmVyIHNraWxsc1wiLCB7IHNraWxsc0RpcnMgfSk7XG4gICAgICBza2lsbHNSZWYuY3VycmVudCA9IGF3YWl0IGRpc2NvdmVyU2tpbGxzSW5TYW5kYm94KHtcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNhbmRib3gsXG4gICAgICAgIHNraWxsc0RpcnMsXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgICAgZG9uZVNraWxscyh7IGNvdW50OiBza2lsbHNSZWYuY3VycmVudC5sZW5ndGggfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElubmVyIGxvb3A6IHJ1biB1cCB0byBgc3RlcFRocm91Z2hwdXRgIHNlcXVlbnRpYWwgTExNIGNhbGxzLlxuICAgKiBQYXJ0cyBhcmUgcGVyc2lzdGVkIGFmdGVyIGVhY2ggY2FsbCBzbyBwcm9ncmVzcyBpc24ndCBsb3N0LlxuICAgKiBTZXNzaW9uIGlzIHJlLWZldGNoZWQgYmV0d2VlbiBpdGVyYXRpb25zIChjb25maWcgbWF5IGNoYW5nZSksXG4gICAqIHBhcmFsbGVsaXplZCB3aXRoIHBhcnQgcGVyc2lzdGVuY2Ugb24gbm9uLWZpbmFsIGl0ZXJhdGlvbnMuXG4gICAqL1xuICBjb25zdCB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXSA9IFtdO1xuICBsZXQgaW50ZXJuYWxTdGVwSW5kZXggPSAwO1xuICBsZXQgbG9vcEZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uID0gXCJ1bmtub3duXCIgYXMgRmluaXNoUmVhc29uO1xuICBsZXQgd2FzQWJvcnRlZCA9IGZhbHNlO1xuICBjb25zdCBhbGxQZW5kaW5nQXBwcm92YWxzOiB7IGFwcHJvdmFsSWQ6IHN0cmluZzsgdG9vbE5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgbGV0IGN1cnJlbnRNYXhTdGVwczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgc3RlcFRocm91Z2hwdXQ7IGl0ZXJhdGlvbisrKSB7XG4gICAgICAvLyBSZXNvbHZlIGFnZW50IG9wdGlvbnMgZnJlc2ggZWFjaCBpdGVyYXRpb25cbiAgICAgIGNvbnN0IHJlc29sdmVkTW9kZWwgPSBhd2FpdCByZXNvbHZlT3B0aW9uKFxuICAgICAgICBhZ2VudC5vcHRpb25zLm1vZGVsLFxuICAgICAgICByZXNvbHZhYmxlQXJnc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkR2VuZXJhdGlvbiA9IGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICAgIGFnZW50Lm9wdGlvbnMuZ2VuZXJhdGlvbixcbiAgICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNvbHZlZEFjdGl2ZVRvb2xzID0gKGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICAgIGFnZW50Lm9wdGlvbnMuYWN0aXZlVG9vbHMsXG4gICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICApKSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgICAgY3VycmVudE1heFN0ZXBzID0gcmVzb2x2ZWRHZW5lcmF0aW9uPy5tYXhTdGVwcztcblxuICAgICAgaWYgKCFyZXNvbHZlZE1vZGVsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFnZW50IG1vZGVsIGlzIG5vdCBzZXRcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0ZXBQYXJ0czogVUlNZXNzYWdlW1wicGFydHNcIl0gPSBbXTtcbiAgICAgIGxldCBzdHJlYW1UZXh0RmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24gfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgd3JpdGVyIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmF3VG9vbHMsIHRvb2xzV2l0aE5lZWRzQXBwcm92YWwsIHRvb2xDb250ZXh0IH0gPSBnZXRUb29scyh7XG4gICAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgICAgICBza2lsbHNSZWYsXG4gICAgICAgICAgICAgIHdyaXRlcixcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICAgICAgICBuZXh0UGFydEluZGV4UmVmLFxuICAgICAgICAgICAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgc3RlcExvZyxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiB1aU1lc3NhZ2VzLFxuICAgICAgICAgICAgICBhY3RpdmVUb29sczogcmVzb2x2ZWRBY3RpdmVUb29scyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBwcm9jZXNzIGFwcHJvdmFscyBvbmNlIChmaXJzdCBpdGVyYXRpb24gb25seSlcbiAgICAgICAgICAgIGlmIChpdGVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0FwcHJvdmFscyh7XG4gICAgICAgICAgICAgICAgYWxsUGFydHMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZXNSZXN1bHQsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIHJhd1Rvb2xzLFxuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgICAgICAgICB0b29sQ29udGV4dCxcbiAgICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgICBzdGVwTG9nLFxuICAgICAgICAgICAgICAgIHRocm90dGxlZEVtaXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgd3JpdGVyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3R0bGVkRW1pdFN0YXR1cyh7XG4gICAgICAgICAgICAgIHdyaXRlcixcbiAgICAgICAgICAgICAgc3RhdHVzOiB7IHR5cGU6IFwidGhpbmtpbmdcIiB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZXJSZXN1bHQgPSBzdHJlYW1UZXh0QWkoe1xuICAgICAgICAgICAgICBtZXNzYWdlczogW3sgcm9sZTogXCJ1c2VyXCIgYXMgY29uc3QsIGNvbnRlbnQ6IFwiLlwiIH1dLFxuICAgICAgICAgICAgICB0b29sczogdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCxcbiAgICAgICAgICAgICAgbW9kZWw6IHJlc29sdmVkTW9kZWwsXG4gICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgICBzdG9wV2hlbjogc3RlcENvdW50SXMoMSksXG4gICAgICAgICAgICAgIHRlbXBlcmF0dXJlOiByZXNvbHZlZEdlbmVyYXRpb24/LnRlbXBlcmF0dXJlLFxuICAgICAgICAgICAgICB0b3BLOiByZXNvbHZlZEdlbmVyYXRpb24/LnRvcEssXG4gICAgICAgICAgICAgIHRvcFA6IHJlc29sdmVkR2VuZXJhdGlvbj8udG9wUCxcbiAgICAgICAgICAgICAgZnJlcXVlbmN5UGVuYWx0eTogcmVzb2x2ZWRHZW5lcmF0aW9uPy5mcmVxdWVuY3lQZW5hbHR5LFxuICAgICAgICAgICAgICBwcmVzZW5jZVBlbmFsdHk6IHJlc29sdmVkR2VuZXJhdGlvbj8ucHJlc2VuY2VQZW5hbHR5LFxuICAgICAgICAgICAgICBtYXhPdXRwdXRUb2tlbnM6IHJlc29sdmVkR2VuZXJhdGlvbj8ubWF4T3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXNvbHZlZEdlbmVyYXRpb24/LmhlYWRlcnMsXG4gICAgICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlczogdWlNZXNzYWdlcyxcbiAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgVG9vbENvbnRleHQsXG4gICAgICAgICAgICAgIHByZXBhcmVTdGVwOiBhc3luYyAoeyBtb2RlbCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpbGxzQ29udGV4dCA9IGJ1aWxkU2tpbGxzQ29udGV4dChza2lsbHNSZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3dkUHJvbXB0ID0gc2FuZGJveFJlY29yZD8uc2V0dXA/LmN3ZFxuICAgICAgICAgICAgICAgICAgPyBgWW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyAke3NhbmRib3hSZWNvcmQuc2V0dXAuY3dkfS4gQWxsIGZpbGUgcGF0aHMgc2hvdWxkIGJlIGFic29sdXRlLmBcbiAgICAgICAgICAgICAgICAgIDogXCJBbGwgZmlsZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLlwiO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRTeXN0ZW0gPSBhd2FpdCByZXNvbHZlU3lzdGVtKFxuICAgICAgICAgICAgICAgICAgYWdlbnQub3B0aW9ucy5zeXN0ZW0sXG4gICAgICAgICAgICAgICAgICByZXNvbHZhYmxlQXJnc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzeXN0ZW1IZWFkZXIgPSBqb2luUHJvbXB0U2VjdGlvbnMoXG4gICAgICAgICAgICAgICAgICBCQVNFX1NZU1RFTV9QUk9NUFQsXG4gICAgICAgICAgICAgICAgICBjd2RQcm9tcHQsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFN5c3RlbVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3lzdGVtQ29udGV4dCA9IGpvaW5Qcm9tcHRTZWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgIHNraWxsc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICBjd2RQcm9tcHRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkTWVzc2FnZXMgPSBhd2FpdCBjb252ZXJ0VG9Nb2RlbE1lc3NhZ2VzKFxuICAgICAgICAgICAgICAgICAgdWlNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgIHsgaWdub3JlSW5jb21wbGV0ZVRvb2xDYWxsczogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsTWVzc2FnZXMgPSBbXG4gICAgICAgICAgICAgICAgICAuLi4oc3lzdGVtSGVhZGVyLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA/IFt7IHJvbGU6IFwic3lzdGVtXCIgYXMgY29uc3QsIGNvbnRlbnQ6IHN5c3RlbUhlYWRlciB9XVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAgIC4uLihzeXN0ZW1Db250ZXh0LnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA/IFt7IHJvbGU6IFwic3lzdGVtXCIgYXMgY29uc3QsIGNvbnRlbnQ6IHN5c3RlbUNvbnRleHQgfV1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgICAuLi5jb252ZXJ0ZWRNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0Q2FjaGluZyA9IGFwcGx5UHJvbXB0Q2FjaGluZ1RvTW9kZWxSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgIG1vZGVsOiB0eXBlb2YgbW9kZWwgPT09IFwic3RyaW5nXCIgPyBtb2RlbCA6IG1vZGVsLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlczogbW9kZWxNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVUb29scyA9IHJlc29sdmVkQWN0aXZlVG9vbHMgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChza2lsbHNSZWYuY3VycmVudC5sZW5ndGggPT09IDAgJiYgYWN0aXZlVG9vbHMpIHtcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2xzID0gYWN0aXZlVG9vbHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAodCkgPT4gdCAhPT0gKFwiU2tpbGxcIiBzYXRpc2ZpZXMgQnVpbHRJblRvb2xOYW1lKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZXM6IHByb21wdENhY2hpbmcubWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICBwcm92aWRlck9wdGlvbnM6IG1lcmdlUHJvdmlkZXJPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDogcmVzb2x2ZWRHZW5lcmF0aW9uPy5wcm92aWRlck9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoOiBwcm9tcHRDYWNoaW5nLnByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlVG9vbHMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25TdGVwRmluaXNoOiAoeyB1c2FnZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzYWdlKSB7XG4gICAgICAgICAgICAgICAgICB1c2FnZVN0ZXBzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzdGVwSW5kZXg6IHN0ZXBJbmRleE9mZnNldCArIGludGVybmFsU3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDogcmVzb2x2ZWRNb2RlbCA/PyBcInVua25vd25cIixcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiB1c2FnZS50b3RhbFRva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVJlYWRUb2tlbnM6XG4gICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuaW5wdXRUb2tlbkRldGFpbHM/LmNhY2hlUmVhZFRva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVdyaXRlVG9rZW5zOlxuICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmlucHV0VG9rZW5EZXRhaWxzPy5jYWNoZVdyaXRlVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbmluZ1Rva2VuczpcbiAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5vdXRwdXRUb2tlbkRldGFpbHM/LnJlYXNvbmluZ1Rva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGludGVybmFsU3RlcEluZGV4Kys7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd3JpdGVyLm1lcmdlKFxuICAgICAgICAgICAgICBpdGVyUmVzdWx0LnRvVUlNZXNzYWdlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZU1lc3NhZ2VJZDogKCkgPT4gYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgICAgIG9uRmluaXNoOiAoeyBtZXNzYWdlcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgIHN0ZXBQYXJ0cy5wdXNoKC4uLm0ucGFydHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHN0cmVhbVRleHRGaW5pc2hSZWFzb24gPSBhd2FpdCBpdGVyUmVzdWx0LmZpbmlzaFJlYXNvbjtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBzdHJlYW0ucGlwZVRvKHdyaXRhYmxlLCB7XG4gICAgICAgICAgcHJldmVudENsb3NlOiB0cnVlLFxuICAgICAgICAgIHByZXZlbnRBYm9ydDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIHdhc0Fib3J0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHdhc0Fib3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBNYXJrIGludGVycnVwdGVkIHRvb2wgcGFydHNcbiAgICAgIGlmICh3YXNBYm9ydGVkKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmFsU3RhdGVzID0gbmV3IFNldChbXG4gICAgICAgICAgXCJvdXRwdXQtYXZhaWxhYmxlXCIsXG4gICAgICAgICAgXCJvdXRwdXQtZXJyb3JcIixcbiAgICAgICAgICBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICBcImRvbmVcIixcbiAgICAgICAgXSk7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBzdGVwUGFydHMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInR5cGVcIiBpbiBwYXJ0ICYmXG4gICAgICAgICAgICB0eXBlb2YgcGFydC50eXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBwYXJ0LnR5cGUuc3RhcnRzV2l0aChcInRvb2wtXCIpICYmXG4gICAgICAgICAgICBcInN0YXRlXCIgaW4gcGFydCAmJlxuICAgICAgICAgICAgIXRlcm1pbmFsU3RhdGVzLmhhcyhwYXJ0LnN0YXRlIGFzIHN0cmluZylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIChwYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9IFwib3V0cHV0LWVycm9yXCI7XG4gICAgICAgICAgICAocGFydCBhcyB7IGVycm9yVGV4dD86IHN0cmluZyB9KS5lcnJvclRleHQgPSBcImludGVycnVwdGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBpbnRlcnJ1cHRlZCBsYXN0UGFydCB0cnVuY2F0aW9uXG4gICAgICBjb25zdCBsYXN0UGFydCA9IGludGVycnVwdGVkTGFzdFBhcnRSZWYuY3VycmVudDtcblxuICAgICAgY29uc3QgbmV3UGFydFJlY29yZHMgPSBzdGVwUGFydHNcbiAgICAgICAgLm1hcCgodWlQYXJ0LCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQgKyBpO1xuICAgICAgICAgIGlmIChsYXN0UGFydCAhPSBudWxsICYmIGluZGV4ID4gbGFzdFBhcnQuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1c2VDbGllbnRQYXJ0ID0gbGFzdFBhcnQgIT0gbnVsbCAmJiBpbmRleCA9PT0gbGFzdFBhcnQuaW5kZXg7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IChcbiAgICAgICAgICAgIHVzZUNsaWVudFBhcnQgPyBsYXN0UGFydC5wYXJ0IDogdWlQYXJ0XG4gICAgICAgICAgKSBhcyBUeXBlZFVJTWVzc2FnZTxUb29scz5bXCJwYXJ0c1wiXVtudW1iZXJdO1xuICAgICAgICAgIGNvbnN0IHBhcnRJZCA9XG4gICAgICAgICAgICBcImFwcHJvdmFsXCIgaW4gY29udGVudCAmJiBjb250ZW50LmFwcHJvdmFsPy5pZFxuICAgICAgICAgICAgICA/IGFwcHJvdmFsUGFydElkKGNvbnRlbnQuYXBwcm92YWwuaWQpXG4gICAgICAgICAgICAgIDogYHBhcnRfJHthc3Npc3RhbnRNZXNzYWdlSWR9XyR7aW5kZXh9YDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHBhcnRJZCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICBwYXJ0OiBjb250ZW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKHIpOiByIGlzIE5vbk51bGxhYmxlPHR5cGVvZiByPiA9PiByICE9PSBudWxsKTtcblxuICAgICAgY29uc3QgcGVyc2lzdFByb21pc2UgPSBQcm9taXNlLmFsbChbXG4gICAgICAgIC4uLm5ld1BhcnRSZWNvcmRzLm1hcCgocmVjb3JkKSA9PlxuICAgICAgICAgIGFnZW50LnN0b3JhZ2UucGFydC5zZXQocmVjb3JkLmlkLCByZWNvcmQpXG4gICAgICAgICksXG4gICAgICAgIGFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi51cGRhdGUoc2Vzc2lvbklkLCB7IHN0YXRlIH0pLFxuICAgICAgXSk7XG5cbiAgICAgIG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCA9XG4gICAgICAgIGxhc3RQYXJ0ICE9IG51bGxcbiAgICAgICAgICA/IE1hdGgubWluKFxuICAgICAgICAgICAgICBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQgKyBzdGVwUGFydHMubGVuZ3RoLFxuICAgICAgICAgICAgICBsYXN0UGFydC5pbmRleCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCArIHN0ZXBQYXJ0cy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IGl0ZXJQZW5kaW5nQXBwcm92YWxzID0gc3RlcFBhcnRzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHApOiBwIGlzIHR5cGVvZiBwICYgeyBhcHByb3ZhbDogeyBpZDogc3RyaW5nIH0gfSA9PlxuICAgICAgICAgICAgXCJzdGF0ZVwiIGluIHAgJiZcbiAgICAgICAgICAgIHAuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgICAgICAgIFwiYXBwcm92YWxcIiBpbiBwICYmXG4gICAgICAgICAgICAhIShwIGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9KS5hcHByb3ZhbD8uaWRcbiAgICAgICAgKVxuICAgICAgICAubWFwKChwKSA9PiAoe1xuICAgICAgICAgIGFwcHJvdmFsSWQ6IHAuYXBwcm92YWwuaWQsXG4gICAgICAgICAgdG9vbE5hbWU6XG4gICAgICAgICAgICBcInR5cGVcIiBpbiBwID8gU3RyaW5nKHAudHlwZSkucmVwbGFjZShcInRvb2wtXCIsIFwiXCIpIDogXCJ1bmtub3duXCIsXG4gICAgICAgIH0pKTtcblxuICAgICAgbG9vcEZpbmlzaFJlYXNvbiA9IHdhc0Fib3J0ZWRcbiAgICAgICAgPyAoXCJzdG9wXCIgYXMgRmluaXNoUmVhc29uKVxuICAgICAgICA6IChzdHJlYW1UZXh0RmluaXNoUmVhc29uID8/IChcInVua25vd25cIiBhcyBGaW5pc2hSZWFzb24pKTtcblxuICAgICAgLy8gRGVjaWRlIHdoZXRoZXIgdG8gYnJlYWsgb3IgY29udGludWVcbiAgICAgIGNvbnN0IHNob3VsZEJyZWFrID1cbiAgICAgICAgaXRlclBlbmRpbmdBcHByb3ZhbHMubGVuZ3RoID4gMCB8fFxuICAgICAgICBsb29wRmluaXNoUmVhc29uID09PSBcInN0b3BcIiB8fFxuICAgICAgICB3YXNBYm9ydGVkIHx8XG4gICAgICAgIGxhc3RQYXJ0ICE9IG51bGwgfHxcbiAgICAgICAgKGN1cnJlbnRNYXhTdGVwcyAhPSBudWxsICYmXG4gICAgICAgICAgc3RlcEluZGV4T2Zmc2V0ICsgdXNhZ2VTdGVwcy5sZW5ndGggPj0gY3VycmVudE1heFN0ZXBzKSB8fFxuICAgICAgICBpdGVyYXRpb24gPj0gc3RlcFRocm91Z2hwdXQgLSAxO1xuXG4gICAgICBpZiAoc2hvdWxkQnJlYWspIHtcbiAgICAgICAgYXdhaXQgcGVyc2lzdFByb21pc2U7XG4gICAgICAgIGFsbFBhcnRzLnB1c2goLi4ubmV3UGFydFJlY29yZHMpO1xuICAgICAgICBhbGxQZW5kaW5nQXBwcm92YWxzLnB1c2goLi4uaXRlclBlbmRpbmdBcHByb3ZhbHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLWZpbmFsIGl0ZXJhdGlvbjogcGVyc2lzdCBwYXJ0cyBhbmQgcmVidWlsZCBtZXNzYWdlc1xuICAgICAgYXdhaXQgcGVyc2lzdFByb21pc2U7XG4gICAgICBhbGxQYXJ0cy5wdXNoKC4uLm5ld1BhcnRSZWNvcmRzKTtcbiAgICAgIHVpTWVzc2FnZXMgPSBhc3NlbWJsZVVJTWVzc2FnZXMoe1xuICAgICAgICBtZXNzYWdlczogbWVzc2FnZXNSZXN1bHQsXG4gICAgICAgIHBhcnRzOiBhbGxQYXJ0cyxcbiAgICAgICAgdW50aWw6IGNyZWF0ZWRBdCxcbiAgICAgICAgaW5jbHVkZVF1ZXVlZDogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZVN1YlRvb2xQYXJ0czogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBwb2xsQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIHRocm90dGxlZEVtaXRTdGF0dXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgaWYgKHNldFN0YXJ0ZWRQcm9taXNlKSB7XG4gICAgYXdhaXQgc2V0U3RhcnRlZFByb21pc2U7XG4gIH1cblxuICBkb25lU3RlcCh7XG4gICAgZmluaXNoUmVhc29uOiBsb29wRmluaXNoUmVhc29uLFxuICAgIHdhc0Fib3J0ZWQsXG4gICAgaXRlcmF0aW9uczogaW50ZXJuYWxTdGVwSW5kZXgsXG4gICAgcGVuZGluZ0FwcHJvdmFsczogYWxsUGVuZGluZ0FwcHJvdmFscy5sZW5ndGgsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZmluaXNoUmVhc29uOiBsb29wRmluaXNoUmVhc29uLFxuICAgIGxhc3RQYXJ0SW5kZXg6IG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCxcbiAgICB1c2FnZVN0ZXBzLFxuICAgIHBlbmRpbmdBcHByb3ZhbHM6IGFsbFBlbmRpbmdBcHByb3ZhbHMsXG4gICAgbWF4U3RlcHM6IGN1cnJlbnRNYXhTdGVwcyxcbiAgICBkaXNjb3ZlcmVkU2tpbGxzOiBza2lsbHNSZWYuY3VycmVudCxcbiAgICBjb250ZXh0LFxuICB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBTdGVwc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RyZWFtVGV4dFN0ZXA8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PihcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2Ygc3RyZWFtVGV4dDxUb29scz4+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICByZXR1cm4gYXdhaXQgc3RyZWFtVGV4dCguLi5hcmdzKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVXRpbHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0FwcHJvdmFscyh7XG4gIGFsbFBhcnRzLFxuICBtZXNzYWdlc1Jlc3VsdCxcbiAgY3JlYXRlZEF0LFxuICByYXdUb29scyxcbiAgYWJvcnRDb250cm9sbGVyLFxuICB0b29sQ29udGV4dCxcbiAgYWdlbnQsXG4gIHN0ZXBMb2csXG4gIHRocm90dGxlZEVtaXRTdGF0dXMsXG4gIHdyaXRlcixcbn06IHtcbiAgYWxsUGFydHM6IFBhcnRbXTtcbiAgbWVzc2FnZXNSZXN1bHQ6IFBhcmFtZXRlcnM8dHlwZW9mIGFzc2VtYmxlVUlNZXNzYWdlcz5bMF1bXCJtZXNzYWdlc1wiXTtcbiAgY3JlYXRlZEF0OiBudW1iZXI7XG4gIHJhd1Rvb2xzOiBUb29sU2V0O1xuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcbiAgdG9vbENvbnRleHQ6IFRvb2xDb250ZXh0O1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHN0ZXBMb2c6IExvZ2dlcjtcbiAgdGhyb3R0bGVkRW1pdFN0YXR1czogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlVGhyb3R0bGVkRW1pdFN0YXR1cz47XG4gIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xufSkge1xuICAvLyBFeGVjdXRlIGFwcHJvdmVkIHRvb2xzIHNvIHRoZSBtb2RlbCBzZWVzIGNvbXBsZXRlIHRvb2wgY2FsbCArIHJlc3VsdCBwYWlyc1xuICBjb25zdCBhcHByb3ZlZFBhcnRzID0gYWxsUGFydHMuZmlsdGVyKFxuICAgIChwKSA9PlxuICAgICAgcC5wYXJ0ICYmXG4gICAgICBcInN0YXRlXCIgaW4gcC5wYXJ0ICYmXG4gICAgICAocC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXNwb25kZWRcIiAmJlxuICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydCAmJlxuICAgICAgKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBhcHByb3ZlZDogYm9vbGVhbiB9IH0pLmFwcHJvdmFsPy5hcHByb3ZlZCA9PT1cbiAgICAgICAgdHJ1ZVxuICApO1xuXG4gIGlmIChhcHByb3ZlZFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBzdGVwTG9nLmluZm8oXCJleGVjdXRpbmcgYXBwcm92ZWQgdG9vbHNcIiwge1xuICAgICAgY291bnQ6IGFwcHJvdmVkUGFydHMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRocm90dGxlZEVtaXRTdGF0dXMoe1xuICAgICAgd3JpdGVyLFxuICAgICAgc3RhdHVzOiB7IHR5cGU6IFwicHJvY2Vzc2luZy1hcHByb3ZhbHNcIiB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJlRXhlY01lc3NhZ2VzID0gYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhcbiAgICAgIGFzc2VtYmxlVUlNZXNzYWdlcyh7XG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdCxcbiAgICAgICAgcGFydHM6IGFsbFBhcnRzLFxuICAgICAgICB1bnRpbDogY3JlYXRlZEF0LFxuICAgICAgICBpbmNsdWRlUXVldWVkOiB0cnVlLFxuICAgICAgICBleGNsdWRlU3ViVG9vbFBhcnRzOiB0cnVlLFxuICAgICAgfSksXG4gICAgICB7IGlnbm9yZUluY29tcGxldGVUb29sQ2FsbHM6IHRydWUgfVxuICAgICk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFwcHJvdmVkUGFydHMubWFwKGFzeW5jIChhcCkgPT4ge1xuICAgICAgICBpZiAoIWFwLnBhcnQudHlwZS5zdGFydHNXaXRoKFwidG9vbC1cIikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydCA9IGFwLnBhcnQgYXMgRXh0cmFjdDxcbiAgICAgICAgICBVSU1lc3NhZ2VbXCJwYXJ0c1wiXVtudW1iZXJdLFxuICAgICAgICAgIHsgdHlwZTogYHRvb2wtJHtzdHJpbmd9YCB9XG4gICAgICAgID47XG4gICAgICAgIGNvbnN0IHRvb2xOYW1lID0gcGFydC50eXBlLnJlcGxhY2UoXCJ0b29sLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgdG9vbERlZiA9IHJhd1Rvb2xzW3Rvb2xOYW1lXTtcblxuICAgICAgICBpZiAodG9vbERlZj8uZXhlY3V0ZSAmJiBwYXJ0LmlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdG9vbE91dHB1dCA9IGF3YWl0IHRvb2xEZWYuZXhlY3V0ZShwYXJ0LmlucHV0LCB7XG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQ6IHBhcnQudG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IHByZUV4ZWNNZXNzYWdlcyxcbiAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFydC5zdGF0ZSA9IFwib3V0cHV0LWF2YWlsYWJsZVwiO1xuICAgICAgICAgICAgcGFydC5vdXRwdXQgPSB0b29sT3V0cHV0O1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogcGFydC50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBvdXRwdXQ6IHRvb2xPdXRwdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBhcnQuc3RhdGUgPSBcIm91dHB1dC1lcnJvclwiO1xuICAgICAgICAgICAgcGFydC5lcnJvclRleHQgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWVycm9yXCIsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQ6IHBhcnQudG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgZXJyb3JUZXh0OiBwYXJ0LmVycm9yVGV4dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnBhcnQuc2V0KGFwLmlkLCB7IC4uLmFwLCBwYXJ0IH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBBdXRvLWRlbnkgYW55IHJlbWFpbmluZyBhcHByb3ZhbC1yZXF1ZXN0ZWQgcGFydHMgc28gdGhlIG1vZGVsXG4gIC8vIHNlZXMgY29tcGxldGUgdG9vbCBjYWxsICsgZGVuaWVkIHJlc3VsdCBwYWlycyAobm90IG1pc3NpbmcgcmVzdWx0cykuXG4gIGNvbnN0IHBlbmRpbmdBcHByb3ZhbFBhcnRzID0gYWxsUGFydHMuZmlsdGVyKFxuICAgIChwKSA9PiAocC5wYXJ0IGFzIHsgc3RhdGU/OiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCJcbiAgKTtcbiAgaWYgKHBlbmRpbmdBcHByb3ZhbFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBlbmRpbmdBcHByb3ZhbFBhcnRzLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICBjb25zdCBkZW5pZWQgPSB7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICBzdGF0ZTogXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgICBhcHByb3ZhbDoge1xuICAgICAgICAgICAgICAuLi4oKHAucGFydCBhcyB7IGFwcHJvdmFsPzogb2JqZWN0IH0pLmFwcHJvdmFsID8/IHt9KSxcbiAgICAgICAgICAgICAgYXBwcm92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICByZWFzb246IFwiYXV0by1kZW5pZWQ6IG5ldyBtZXNzYWdlIHNlbnRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyB0eXBlb2YgcC5wYXJ0LFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHAsIGRlbmllZCk7XG4gICAgICAgIGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5zZXQocC5pZCwgZGVuaWVkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG50eXBlIFN0cmVhbVdyaXRlciA9IFVJTWVzc2FnZVN0cmVhbVdyaXRlcjtcblxuZnVuY3Rpb24gZW1pdFN0YXR1cyh7XG4gIHdyaXRlcixcbiAgc3RhdHVzLFxuICBhZ2VudCxcbn06IHtcbiAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gIHN0YXR1czogQWdlbnRTdGF0dXM7XG4gIGFnZW50OiBBbnlBZ2VudDtcbn0pIHtcbiAgd3JpdGVyLndyaXRlKHsgdHlwZTogXCJkYXRhLXN0YXR1c1wiLCBkYXRhOiBzdGF0dXMsIHRyYW5zaWVudDogdHJ1ZSB9KTtcbiAgYWdlbnQuaG9va3M/LnN0YXR1cz8uKHN0YXR1cyk7XG59XG5cbmNvbnN0IFNUQVRVU19USFJPVFRMRV9NUyA9IDUwMDtcblxuZnVuY3Rpb24gY3JlYXRlVGhyb3R0bGVkRW1pdFN0YXR1cyhhZ2VudDogQW55QWdlbnQpIHtcbiAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBsZXQgcGVuZGluZzoge1xuICAgIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xuICAgIHN0YXR1czogQWdlbnRTdGF0dXM7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiB0aHJvdHRsZWQoe1xuICAgIHdyaXRlcixcbiAgICBzdGF0dXMsXG4gIH06IHtcbiAgICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbiAgICBzdGF0dXM6IEFnZW50U3RhdHVzO1xuICB9KSB7XG4gICAgcGVuZGluZyA9IHsgd3JpdGVyLCBzdGF0dXMgfTtcbiAgICBpZiAodGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmx1c2goKTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgICAgZmx1c2goKTtcbiAgICAgIH1cbiAgICB9LCBTVEFUVVNfVEhST1RUTEVfTVMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgd3JpdGVyLCBzdGF0dXMgfSA9IHBlbmRpbmc7XG4gICAgcGVuZGluZyA9IG51bGw7XG4gICAgZW1pdFN0YXR1cyh7IHdyaXRlciwgc3RhdHVzLCBhZ2VudCB9KTtcbiAgfVxuXG4gIHRocm90dGxlZC5kaXNwb3NlID0gKCkgPT4ge1xuICAgIGlmICh0aW1lciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZmx1c2goKTtcbiAgfTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlT3B0aW9uPFQ+KFxuICB2YWx1ZTogUmVzb2x2YWJsZTxUPiB8IHVuZGVmaW5lZCxcbiAgYXJnczogUmVzb2x2YWJsZUFyZ3Ncbik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGF3YWl0ICh2YWx1ZSBhcyAoYXJnczogUmVzb2x2YWJsZUFyZ3MpID0+IFQgfCBQcm9taXNlPFQ+KShhcmdzKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTeXN0ZW0oXG4gIGlucHV0OiBSZXNvbHZhYmxlPHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCxcbiAgYXJnczogUmVzb2x2YWJsZUFyZ3Ncbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNvbHZlT3B0aW9uKGlucHV0LCBhcmdzKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0LmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpIDogcmVzdWx0O1xufVxuXG5jb25zdCBCQVNFX1NZU1RFTV9QUk9NUFQgPVxuICBcIllvdSBhcmUgYW4gQUkgYXNzaXN0YW50IHdpdGggYmFzaWMgdG9vbHMgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIGVudmlyb25tZW50LiBFeHBsb3JlIGFuZCB3b3JrIGZyZWVseS5cIjtcblxuZnVuY3Rpb24gam9pblByb21wdFNlY3Rpb25zKFxuICAuLi5zZWN0aW9uczogKHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBzZWN0aW9ucy5maWx0ZXIoKHMpID0+IHM/LnRyaW0oKSkuam9pbihcIlxcblxcblwiKTtcbn1cblxuY29uc3QgYmFja2dyb3VuZFByb2Nlc3NQcm9tcHQgPSBgIyMgQmFja2dyb3VuZCBQcm9jZXNzZXNcblRoZXNlIGJhY2tncm91bmQgcHJvY2VzcyBpbnN0cnVjdGlvbnMgYXJlIGZvciB5b3UgdG8gbWFuaXB1bGF0ZSB0aGUgcHJvY2Vzc2VzLCBkbyBub3QgYmUgdG8gdmVyYm9zZSB0byB0aGUgdXNlciBhYm91dCB0aGUgcmVzcG9uc2UgZGV0YWlscyBsaWtlIFwiaG93IHRvIGRlYnVnIHRoZSBwcm9jZXNzIG91dHB1dFwiIHRoZSB1c2VyIHdpbGwgaGF2ZSBhbiBVSS5cblxuVXNlIFxcYHdhaXRVbnRpbDogMFxcYCBmb3IgZGV2IHNlcnZlcnMgdGhhdCBzaG91bGQgcnVuIGluZGVmaW5pdGVseS5cbkl0IGlzIGEgZ29vZCBwcmFjdGljZSB0byBjaGVjayB0aGUgb3V0cHV0IGxvZyBhZnRlciBydW5uaW5nIHByb2Nlc3NlcyBsaWtlIGRldiBzZXJ2ZXJzIHRvIG1ha2Ugc3VyZSB0aGV5IHN0YXJ0ZWQgY29ycmVjdGx5LlxuXG5UbyBydW4gYSBiYWNrZ3JvdW5kIHByb2Nlc3M6XG5CYXNoKHsgY29tbWFuZDogXCJucG0gcnVuIGRldlwiLCB3YWl0VW50aWw6IDAgfSlcblJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBcXGBjb21tYW5kSWRcXGAuIFRoZSBwcm9jZXNzIGtlZXBzIHJ1bm5pbmcgaW4gdGhlIHNhbmRib3guXG5cblRvIGtpbGwgYSBwcm9jZXNzOlxuQmFzaCh7IGNvbW1hbmQ6IFwicHMgYXV4IHwgZ3JlcCBub2RlXCIgfSkgICAvLyBGaW5kIHRoZSBQSURcbkJhc2goeyBjb21tYW5kOiBcImtpbGwge3BpZH1cIiB9KSAgICAgICAgICAgIC8vIEdyYWNlZnVsXG5CYXNoKHsgY29tbWFuZDogXCJraWxsIC05IHtwaWR9XCIgfSkgICAgICAgICAvLyBGb3JjZVxuYDtcblxuZnVuY3Rpb24gYnVpbGRTa2lsbHNDb250ZXh0KHNraWxsczogU2tpbGxTdW1tYXJ5W10pOiBzdHJpbmcge1xuICBpZiAoc2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc2tpbGxMaW5lcyA9IHNraWxsc1xuICAgIC5tYXAoKHMpID0+IGAtICR7cy5uYW1lfTogJHtzLmRlc2NyaXB0aW9ufWApXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgcmV0dXJuIGAjIyBBdmFpbGFibGUgU2tpbGxzXG4ke3NraWxsTGluZXN9XG5cbiR7YmFja2dyb3VuZFByb2Nlc3NQcm9tcHR9XG5cblVzZSB0aGUgU2tpbGwgdG9vbCB0byBsb2FkIGEgc2tpbGwncyBmdWxsIGluc3RydWN0aW9ucyBiZWZvcmUgZm9sbG93aW5nIGl0LmA7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IHBhcnNlU2tpbGxGcm9udG1hdHRlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbFN1bW1hcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIERpc2NvdmVycyBza2lsbHMgZnJvbSBkaXJlY3RvcmllcyBpbnNpZGUgdGhlIHNhbmRib3ggYnkgZmluZGluZyBhbmQgcGFyc2luZyBTS0lMTC5tZCBmaWxlcy5cbiAqIFNjYW5zIGVhY2ggZGlyZWN0b3J5IGZvciBzdWJkaXJlY3RvcmllcyBjb250YWluaW5nIFNLSUxMLm1kLCBleHRyYWN0cyBmcm9udG1hdHRlciBtZXRhZGF0YSxcbiAqIGFuZCByZXR1cm5zIHN1bW1hcmllcyBmb3IgdXNlIGluIHRoZSBzeXN0ZW0gcHJvbXB0LlxuICpcbiAqIEByZXR1cm5zIEFycmF5IG9mIHNraWxsIHN1bW1hcmllcyAoZGVkdXBsaWNhdGVkIGJ5IG5hbWUsIGZpcnN0IG9jY3VycmVuY2Ugd2lucylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyU2tpbGxzSW5TYW5kYm94KG9wdHM6IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsc0RpcnM6IHN0cmluZ1tdO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxTa2lsbFN1bW1hcnlbXT4ge1xuICBjb25zdCB7IGFnZW50LCBzYW5kYm94LCBza2lsbHNEaXJzLCBzZXNzaW9uSWQgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VMb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2tpbGxzXCIsXG4gIH0pO1xuICBjb25zdCBsb2cgPSBzZXNzaW9uSWQgPyBiYXNlTG9nLndpdGhDb250ZXh0KHsgc2Vzc2lvbklkIH0pIDogYmFzZUxvZztcbiAgY29uc3QgZG9uZSA9IGxvZy50aW1lKFwiZGlzY292ZXJTa2lsbHNJblNhbmRib3hcIik7XG5cbiAgY29uc3Qgc3VtbWFyaWVzOiBTa2lsbFN1bW1hcnlbXSA9IFtdO1xuICBjb25zdCBzZWVuTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHNraWxsc0RpciBvZiBza2lsbHNEaXJzKSB7XG4gICAgY29uc3QgZGlyRG9uZSA9IGxvZy50aW1lKFwic2NhbiBkaXJlY3RvcnlcIiwgeyBkaXI6IHNraWxsc0RpciB9KTtcbiAgICBjb25zdCBkaXJTdW1tYXJpZXMgPSBhd2FpdCBkaXNjb3ZlclNraWxsc0luRGlyZWN0b3J5KHtcbiAgICAgIHNhbmRib3gsXG4gICAgICBza2lsbHNEaXIsXG4gICAgICBsb2csXG4gICAgfSk7XG4gICAgZGlyRG9uZSh7IGNvdW50OiBkaXJTdW1tYXJpZXMubGVuZ3RoIH0pO1xuXG4gICAgZm9yIChjb25zdCBzdW1tYXJ5IG9mIGRpclN1bW1hcmllcykge1xuICAgICAgaWYgKCFzZWVuTmFtZXMuaGFzKHN1bW1hcnkubmFtZSkpIHtcbiAgICAgICAgc2Vlbk5hbWVzLmFkZChzdW1tYXJ5Lm5hbWUpO1xuICAgICAgICBzdW1tYXJpZXMucHVzaChzdW1tYXJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkb25lKHsgdG90YWxTa2lsbHM6IHN1bW1hcmllcy5sZW5ndGggfSk7XG5cbiAgcmV0dXJuIHN1bW1hcmllcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJTa2lsbHNJbkRpcmVjdG9yeShvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzRGlyOiBzdHJpbmc7XG4gIGxvZzogTG9nZ2VyO1xufSk6IFByb21pc2U8U2tpbGxTdW1tYXJ5W10+IHtcbiAgY29uc3QgeyBzYW5kYm94LCBza2lsbHNEaXIsIGxvZyB9ID0gb3B0cztcbiAgY29uc3Qgc2tpbGxQYXRocyA9IGF3YWl0IGZpbmRTa2lsbEZpbGVzKHsgc2FuZGJveCwgc2tpbGxzRGlyLCBsb2cgfSk7XG5cbiAgaWYgKHNraWxsUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgc3VtbWFyaWVzOiBTa2lsbFN1bW1hcnlbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgc2tpbGxNZFBhdGggb2Ygc2tpbGxQYXRocykge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBwYXJzZVNraWxsRmlsZSh7IHNhbmRib3gsIHNraWxsTWRQYXRoLCBsb2cgfSk7XG4gICAgaWYgKHN1bW1hcnkpIHtcbiAgICAgIHN1bW1hcmllcy5wdXNoKHN1bW1hcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW1tYXJpZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRTa2lsbEZpbGVzKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNEaXI6IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHNhbmRib3gsIHNraWxsc0RpciwgbG9nIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgIGNvbW1hbmQ6IFwiZmluZFwiLFxuICAgIGFyZ3M6IFtza2lsbHNEaXIsIFwiLW5hbWVcIiwgXCJTS0lMTC5tZFwiLCBcIi10eXBlXCIsIFwiZlwiXSxcbiAgfSk7XG5cbiAgaWYgKGV4ZWNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZy53YXJuKFwiZmFpbGVkIHRvIHNjYW4gc2tpbGxzIGRpcmVjdG9yeVwiLCB7XG4gICAgICBkaXI6IHNraWxsc0RpcixcbiAgICAgIGVycm9yOiBleGVjUmVzdWx0Lm1lc3NhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgeyBzdGRvdXQsIGV4aXRDb2RlIH0gPSBhd2FpdCBleGVjUmVzdWx0LnJlc3VsdDtcblxuICBpZiAoZXhpdENvZGUgIT09IDApIHtcbiAgICBsb2cud2FybihcInNraWxscyBkaXJlY3Rvcnkgbm90IGZvdW5kIG9yIGluYWNjZXNzaWJsZVwiLCB7IGRpcjogc2tpbGxzRGlyIH0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBzdGRvdXRcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLmZpbHRlcigocCkgPT4gcC5sZW5ndGggPiAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VTa2lsbEZpbGUob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsTWRQYXRoOiBzdHJpbmc7XG4gIGxvZzogTG9nZ2VyO1xufSk6IFByb21pc2U8U2tpbGxTdW1tYXJ5IHwgbnVsbD4ge1xuICBjb25zdCB7IHNhbmRib3gsIHNraWxsTWRQYXRoLCBsb2cgfSA9IG9wdHM7XG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgIGNvbW1hbmQ6IFwiY2F0XCIsXG4gICAgYXJnczogW3NraWxsTWRQYXRoXSxcbiAgfSk7XG5cbiAgaWYgKGV4ZWNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZy53YXJuKFwiZmFpbGVkIHRvIHJlYWQgc2tpbGwgZmlsZVwiLCB7XG4gICAgICBwYXRoOiBza2lsbE1kUGF0aCxcbiAgICAgIGVycm9yOiBleGVjUmVzdWx0Lm1lc3NhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IHN0ZG91dCwgZXhpdENvZGUgfSA9IGF3YWl0IGV4ZWNSZXN1bHQucmVzdWx0O1xuXG4gIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgIGxvZy53YXJuKFwiY291bGQgbm90IHJlYWQgc2tpbGwgZmlsZVwiLCB7IHBhdGg6IHNraWxsTWRQYXRoIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VTa2lsbEZyb250bWF0dGVyKHN0ZG91dCk7XG5cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICBsb2cud2FybihcImludmFsaWQgb3IgbWlzc2luZyBmcm9udG1hdHRlclwiLCB7IHBhdGg6IHNraWxsTWRQYXRoIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXJzZWQubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VkLmRlc2NyaXB0aW9uLFxuICAgIHNraWxsTWRQYXRoLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2tpbGxFbnRyeSwgU2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogUGFyc2VkIGZyb250bWF0dGVyIGZyb20gYSBTS0lMTC5tZCBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBTa2lsbEZyb250bWF0dGVyID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBZQU1MIGZyb250bWF0dGVyIGZyb20gYSBTS0lMTC5tZCBmaWxlIGNvbnRlbnQuXG4gKiBGcm9udG1hdHRlciBtdXN0IGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSwgZGVsaW1pdGVkIGJ5IGAtLS1gIG1hcmtlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYG1hcmtkb3duXG4gKiAtLS1cbiAqIG5hbWU6IGNzdlxuICogZGVzY3JpcHRpb246IEFuYWx5emUgQ1NWIGRhdGFcbiAqIC0tLVxuICogIyBDU1YgU2tpbGxcbiAqIC4uLlxuICogYGBgXG4gKlxuICogQHJldHVybnMgUGFyc2VkIG5hbWUgYW5kIGRlc2NyaXB0aW9uLCBvciBudWxsIGlmIGZyb250bWF0dGVyIGlzIG1pc3NpbmcvaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTa2lsbEZyb250bWF0dGVyKFxuICBjb250ZW50OiBzdHJpbmdcbik6IFNraWxsRnJvbnRtYXR0ZXIgfCBudWxsIHtcbiAgY29uc3QgdHJpbW1lZCA9IGNvbnRlbnQudHJpbSgpO1xuXG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKFwiLS0tXCIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbmRNYXJrZXJJbmRleCA9IHRyaW1tZWQuaW5kZXhPZihcIi0tLVwiLCAzKTtcbiAgaWYgKGVuZE1hcmtlckluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZnJvbnRtYXR0ZXJCbG9jayA9IHRyaW1tZWQuc2xpY2UoMywgZW5kTWFya2VySW5kZXgpLnRyaW0oKTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VTaW1wbGVZYW1sKGZyb250bWF0dGVyQmxvY2spO1xuXG4gIGlmICghKHBhcnNlZC5uYW1lICYmIHBhcnNlZC5kZXNjcmlwdGlvbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogU3RyaW5nKHBhcnNlZC5uYW1lKSxcbiAgICBkZXNjcmlwdGlvbjogU3RyaW5nKHBhcnNlZC5kZXNjcmlwdGlvbiksXG4gIH07XG59XG5cbi8qKlxuICogUGFyc2VzIHNpbXBsZSBZQU1MIGtleS12YWx1ZSBwYWlycyAoc2luZ2xlLWxpbmUgdmFsdWVzIG9ubHkpLlxuICogVGhpcyBhdm9pZHMgYWRkaW5nIGEgZnVsbCBZQU1MIHBhcnNlciBkZXBlbmRlbmN5IGZvciBiYXNpYyBmcm9udG1hdHRlci5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTaW1wbGVZYW1sKHlhbWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgeWFtbC5zcGxpdChcIlxcblwiKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkTGluZSB8fCB0cmltbWVkTGluZS5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb25JbmRleCA9IHRyaW1tZWRMaW5lLmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChjb2xvbkluZGV4ID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdHJpbW1lZExpbmUuc2xpY2UoMCwgY29sb25JbmRleCkudHJpbSgpO1xuICAgIGxldCB2YWx1ZSA9IHRyaW1tZWRMaW5lLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAvLyBSZW1vdmUgc3Vycm91bmRpbmcgcXVvdGVzIGlmIHByZXNlbnRcbiAgICBpZiAoXG4gICAgICAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkgfHxcbiAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpXG4gICAgKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTa2lsbHMoXG4gIHNraWxsczogU2tpbGxJbnB1dFtdIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogU2tpbGxFbnRyeVtdIHtcbiAgaWYgKCFza2lsbHMgfHwgc2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBza2lsbHMubWFwKChza2lsbCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygc2tpbGwgIT09IFwib2JqZWN0XCIgfHwgc2tpbGwgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIHNraWxscyBlbnRyeTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYSBgdHlwZWAgZmllbGQuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcInR5cGVcIiBpbiBza2lsbCAmJiBza2lsbC50eXBlKSB7XG4gICAgICByZXR1cm4gc2tpbGwgYXMgU2tpbGxFbnRyeTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBza2lsbHMgZW50cnk6IGV4cGVjdGVkIGB0eXBlYC5cIik7XG4gIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVNraWxscyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUhvc3RTa2lsbCB9IGZyb20gXCIuL3Jlc29sdmUtaG9zdFwiO1xuaW1wb3J0IHsgcmVzb2x2ZUlubGluZVNraWxsIH0gZnJvbSBcIi4vcmVzb2x2ZS1pbmxpbmVcIjtcbmltcG9ydCB7IHJlc29sdmVSZW1vdGVTa2lsbCB9IGZyb20gXCIuL3Jlc29sdmUtcmVtb3RlXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNraWxsSW5wdXRzVG9TYW5kYm94RGlycyhvcHRzOiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHM6IFNraWxsSW5wdXRbXTtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgYmFzZUxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLm9wdHMuYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBvcHRzLmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2tpbGxzXCIsXG4gIH0pO1xuICBjb25zdCBsb2cgPSBvcHRzLnNlc3Npb25JZFxuICAgID8gYmFzZUxvZy53aXRoQ29udGV4dCh7IHNlc3Npb25JZDogb3B0cy5zZXNzaW9uSWQgfSlcbiAgICA6IGJhc2VMb2c7XG4gIGNvbnN0IGVudHJpZXMgPSBub3JtYWxpemVTa2lsbHMob3B0cy5za2lsbHMpO1xuICBjb25zdCByZXNvbHZlZDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIHJlc29sdmVkLnB1c2goZW50cnkucGF0aCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiaG9zdFwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKFxuICAgICAgICBhd2FpdCByZXNvbHZlSG9zdFNraWxsKHtcbiAgICAgICAgICBzYW5kYm94OiBvcHRzLnNhbmRib3gsXG4gICAgICAgICAgc2tpbGw6IGVudHJ5LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJnaXRcIikge1xuICAgICAgcmVzb2x2ZWQucHVzaChcbiAgICAgICAgYXdhaXQgcmVzb2x2ZVJlbW90ZVNraWxsKHtcbiAgICAgICAgICBzYW5kYm94OiBvcHRzLnNhbmRib3gsXG4gICAgICAgICAgc2tpbGw6IGVudHJ5LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgcmVzb2x2ZWQucHVzaChcbiAgICAgICAgYXdhaXQgcmVzb2x2ZUlubGluZVNraWxsKHtcbiAgICAgICAgICBzYW5kYm94OiBvcHRzLnNhbmRib3gsXG4gICAgICAgICAgc2tpbGw6IGVudHJ5LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsb2cud2FybihcInVua25vd24gc2tpbGwgc291cmNlIGVudHJ5IGVuY291bnRlcmVkXCIsIHsgZW50cnkgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEhvc3RTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEZpbGVzKG9wdHM6IHtcbiAgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG4gIHJlbGF0aXZlUHJlZml4Pzogc3RyaW5nO1xufSk6IFByb21pc2U8eyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IEJ1ZmZlciB9W10+IHtcbiAgY29uc3QgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgY29uc3QgeyByZXNvbHZlLCBwb3NpeDogcGF0aFBvc2l4IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgY29uc3QgZmlsZVN0YXQgPSBhd2FpdCBzdGF0KG9wdHMuYWJzb2x1dGVQYXRoKTtcbiAgaWYgKGZpbGVTdGF0LmlzRmlsZSgpKSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKG9wdHMuYWJzb2x1dGVQYXRoKTtcbiAgICByZXR1cm4gW3sgcGF0aDogb3B0cy5yZWxhdGl2ZVByZWZpeCA/PyBcIlNLSUxMLm1kXCIsIGNvbnRlbnQgfV07XG4gIH1cblxuICBpZiAoIWZpbGVTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihvcHRzLmFic29sdXRlUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IEJ1ZmZlciB9W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBuZXh0QWJzID0gcmVzb2x2ZShvcHRzLmFic29sdXRlUGF0aCwgZW50cnkubmFtZSk7XG4gICAgY29uc3QgbmV4dFJlbCA9IG9wdHMucmVsYXRpdmVQcmVmaXhcbiAgICAgID8gcGF0aFBvc2l4LmpvaW4ob3B0cy5yZWxhdGl2ZVByZWZpeCwgZW50cnkubmFtZSlcbiAgICAgIDogZW50cnkubmFtZTtcblxuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKFxuICAgICAgICAuLi4oYXdhaXQgY29sbGVjdEZpbGVzKHtcbiAgICAgICAgICBhYnNvbHV0ZVBhdGg6IG5leHRBYnMsXG4gICAgICAgICAgcmVsYXRpdmVQcmVmaXg6IG5leHRSZWwsXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgZmlsZXMucHVzaCh7XG4gICAgICAgIHBhdGg6IG5leHRSZWwsXG4gICAgICAgIGNvbnRlbnQ6IGF3YWl0IHJlYWRGaWxlKG5leHRBYnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFibGVEaXJOYW1lKGlucHV0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBjcmVhdGVIYXNoIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNyeXB0b1wiKTtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShpbnB1dFBhdGgpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCAxMCk7XG4gIHJldHVybiBgaG9zdC0ke2hhc2h9YDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVIb3N0U2tpbGwob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsOiBIb3N0U2tpbGxJbnB1dDtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHJlc29sdmUsIHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBob3N0UGF0aCA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0cy5za2lsbC5wYXRoKTtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBjb2xsZWN0RmlsZXMoeyBhYnNvbHV0ZVBhdGg6IGhvc3RQYXRoIH0pO1xuICBjb25zdCBkaXJOYW1lID0gYXdhaXQgc3RhYmxlRGlyTmFtZShob3N0UGF0aCk7XG4gIGNvbnN0IGRlc3RQYXRoID0gcGF0aFBvc2l4LmpvaW4oXCIuYWdlbnRcIiwgXCJza2lsbHNcIiwgXCIubWF0ZXJpYWxpemVkXCIsIGRpck5hbWUpO1xuXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGVzdFBhdGg7XG4gIH1cblxuICBhd2FpdCBvcHRzLnNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgZmlsZXMsXG4gICAgZGVzdFBhdGgsXG4gIH0pO1xuXG4gIHJldHVybiBkZXN0UGF0aDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lU2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIHNsdWdpZnkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgLnJlcGxhY2UoLyheLXwtJCkvZywgXCJcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YWJsZUlubGluZURpck5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBjcmVhdGVIYXNoIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNyeXB0b1wiKTtcbiAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkobmFtZSkgfHwgXCJpbmxpbmUtc2tpbGxcIjtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShuYW1lKS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgOCk7XG4gIHJldHVybiBgJHtzbHVnfS0ke2hhc2h9YDtcbn1cblxuZnVuY3Rpb24gYnVpbGRTa2lsbE1hcmtkb3duKHNraWxsOiBJbmxpbmVTa2lsbElucHV0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAtLS1cbm5hbWU6ICR7c2tpbGwubmFtZX1cbmRlc2NyaXB0aW9uOiAke3NraWxsLmRlc2NyaXB0aW9ufVxuLS0tXG5cbiR7c2tpbGwuaW5zdHJ1Y3Rpb25zLnRyaW0oKX1cbmA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlSW5saW5lU2tpbGwob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsOiBJbmxpbmVTa2lsbElucHV0O1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcG9zaXg6IHBhdGhQb3NpeCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gIGNvbnN0IGRpck5hbWUgPSBhd2FpdCBzdGFibGVJbmxpbmVEaXJOYW1lKG9wdHMuc2tpbGwubmFtZSk7XG4gIGNvbnN0IGRlc3RQYXRoID0gcGF0aFBvc2l4LmpvaW4oXCIuYWdlbnRcIiwgXCJza2lsbHNcIiwgXCIubWF0ZXJpYWxpemVkXCIsIGRpck5hbWUpO1xuXG4gIGF3YWl0IG9wdHMuc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICBkZXN0UGF0aCxcbiAgICBmaWxlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiBcIlNLSUxMLm1kXCIsXG4gICAgICAgIGNvbnRlbnQ6IGJ1aWxkU2tpbGxNYXJrZG93bihvcHRzLnNraWxsKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgcmV0dXJuIGRlc3RQYXRoO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBHaXRTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlKC8nL2csIGAnXFxcXCcnYCl9J2A7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YWJsZVJlcG9EaXJOYW1lKHNraWxsOiBHaXRTa2lsbElucHV0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBjcmVhdGVIYXNoIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNyeXB0b1wiKTtcbiAgY29uc3QgaGFzaElucHV0ID0gYCR7c2tpbGwucmVwb306OiR7c2tpbGwucmVmID8/IFwiSEVBRFwifWA7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoaGFzaElucHV0KS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMTIpO1xuICByZXR1cm4gYGdpdC0ke2hhc2h9YDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVSZW1vdGVTa2lsbChvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGw6IEdpdFNraWxsSW5wdXQ7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwb3NpeDogcGF0aFBvc2l4IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgY29uc3QgZGlyTmFtZSA9IGF3YWl0IHN0YWJsZVJlcG9EaXJOYW1lKG9wdHMuc2tpbGwpO1xuICBjb25zdCBjbG9uZURpciA9IHBhdGhQb3NpeC5qb2luKFwiLmFnZW50XCIsIFwic2tpbGxzXCIsIFwiLm1hdGVyaWFsaXplZFwiLCBkaXJOYW1lKTtcbiAgY29uc3QgcXVvdGVkRGlyID0gc2hlbGxRdW90ZShjbG9uZURpcik7XG4gIGNvbnN0IHF1b3RlZFJlcG8gPSBzaGVsbFF1b3RlKG9wdHMuc2tpbGwucmVwbyk7XG4gIGNvbnN0IHF1b3RlZFJlZiA9IHNoZWxsUXVvdGUob3B0cy5za2lsbC5yZWYgPz8gXCJIRUFEXCIpO1xuXG4gIGNvbnN0IHN5bmNDb21tYW5kID0gW1xuICAgIFwic2V0IC1ldW8gcGlwZWZhaWxcIixcbiAgICBgaWYgWyAhIC1kICR7cXVvdGVkRGlyfS8uZ2l0IF07IHRoZW5gLFxuICAgIGAgIHJtIC1yZiAke3F1b3RlZERpcn1gLFxuICAgIGAgIG1rZGlyIC1wICR7cXVvdGVkRGlyfWAsXG4gICAgYCAgZ2l0IGNsb25lIC0tZGVwdGggMSAke3F1b3RlZFJlcG99ICR7cXVvdGVkRGlyfWAsXG4gICAgXCJmaVwiLFxuICAgIGBpZiBbICR7cXVvdGVkUmVmfSAhPSAnSEVBRCcgXTsgdGhlbmAsXG4gICAgYCAgZ2l0IC1DICR7cXVvdGVkRGlyfSBmZXRjaCAtLWRlcHRoIDEgb3JpZ2luICR7cXVvdGVkUmVmfWAsXG4gICAgYCAgZ2l0IC1DICR7cXVvdGVkRGlyfSBjaGVja291dCBGRVRDSF9IRUFEYCxcbiAgICBcImZpXCIsXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgb3B0cy5zYW5kYm94LmV4ZWMoe1xuICAgIGNvbW1hbmQ6IFwiYmFzaFwiLFxuICAgIGFyZ3M6IFtcIi1sY1wiLCBzeW5jQ29tbWFuZF0sXG4gIH0pO1xuICBjb25zdCB7IGV4aXRDb2RlLCBzdGRlcnIgfSA9IGF3YWl0IGV4ZWNSZXN1bHQucmVzdWx0O1xuICBpZiAoZXhpdENvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIG1hdGVyaWFsaXplIGdpdCBza2lsbCBmcm9tICR7b3B0cy5za2lsbC5yZXBvfTogJHtzdGRlcnIgfHwgXCJ1bmtub3duIGVycm9yXCJ9YFxuICAgICk7XG4gIH1cblxuICBsZXQgcmVzb2x2ZWREaXIgPSBjbG9uZURpcjtcbiAgaWYgKG9wdHMuc2tpbGwucGF0aCkge1xuICAgIHJlc29sdmVkRGlyID0gcGF0aFBvc2l4LmpvaW4ocmVzb2x2ZWREaXIsIG9wdHMuc2tpbGwucGF0aCk7XG4gIH1cbiAgaWYgKG9wdHMuc2tpbGwubmFtZSkge1xuICAgIHJlc29sdmVkRGlyID0gcGF0aFBvc2l4LmpvaW4ocmVzb2x2ZWREaXIsIG9wdHMuc2tpbGwubmFtZSk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkRGlyO1xufVxuIiwgImltcG9ydCB7XG4gIHR5cGUgVG9vbFNldCxcbiAgdG9vbCxcbiAgdHlwZSBVSU1lc3NhZ2UsXG4gIHR5cGUgVUlNZXNzYWdlU3RyZWFtV3JpdGVyLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IERFRkFVTFRfV0FJVF9VTlRJTCB9IGZyb20gXCIuLi9zYW5kYm94L3Byb2Nlc3MtbWFuYWdlclwiO1xuaW1wb3J0IHsgYXBwcm92YWxQYXJ0SWQgfSBmcm9tIFwiLi4vc2Vzc2lvbi9zZW5kXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgdHlwZSBMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVKYXZhU2NyaXB0VG9vbCwgdHlwZSBPblN1YlRvb2xDYWxsIH0gZnJvbSBcIi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgY2hlY2tOZWVkc0FwcHJvdmFsIH0gZnJvbSBcIi4vbmVlZHMtYXBwcm92YWxcIjtcblxuZXhwb3J0IHsgdG9vbCBhcyBhZ2VudFRvb2wgfSBmcm9tIFwiLi90b29sXCI7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7IGNvbmZpZzogeyBuYW1lOiBcInRvb2xzXCIgfSwgc3Vic3lzdGVtOiBcInRvb2xzXCIgfSk7XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMgPCAxMDI0KSB7XG4gICAgcmV0dXJuIGAke2J5dGVzfWA7XG4gIH1cbiAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX1LYDtcbiAgfVxuICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCAqIDEwMjQpIHtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX1NYDtcbiAgfVxuICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9R2A7XG59XG5cbnR5cGUgU3RyZWFtV3JpdGVyID0gVUlNZXNzYWdlU3RyZWFtV3JpdGVyO1xuXG5leHBvcnQgdHlwZSBUb29sQ29udGV4dDxcbiAgVENvbnRleHQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVFN0YXRlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0ge1xuICBjb250ZXh0OiBUQ29udGV4dDtcbiAgc3RhdGU6IFRTdGF0ZTtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgbWVzc2FnZXM6IFVJTWVzc2FnZVtdO1xufTtcblxuZnVuY3Rpb24gaXNSZ05vdEZvdW5kRXJyb3IoZXJyOiBFcnJvcik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJ0cyA9IFtlcnIubWVzc2FnZV07XG5cbiAgY29uc3QgYW55RXJyID0gZXJyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2YgYW55RXJyLnJlYXNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIHBhcnRzLnB1c2goYW55RXJyLnJlYXNvbik7XG4gIH1cbiAgaWYgKGFueUVyci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcGFydHMucHVzaChhbnlFcnIuY2F1c2UubWVzc2FnZSk7XG4gICAgY29uc3QgYW55Q2F1c2UgPSBhbnlFcnIuY2F1c2UgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIGFueUNhdXNlLnRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHBhcnRzLnB1c2goYW55Q2F1c2UudGV4dCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbXNnID0gcGFydHMuam9pbihcIiBcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChcbiAgICBtc2cuaW5jbHVkZXMoXCJleGVjdXRhYmxlIGZpbGUgbm90IGZvdW5kXCIpIHx8XG4gICAgbXNnLmluY2x1ZGVzKFwiZXhlY3V0YWJsZV9ub3RfZm91bmRcIikgfHxcbiAgICAobXNnLmluY2x1ZGVzKFwiZW5vZW50XCIpICYmIG1zZy5pbmNsdWRlcyhcInJnXCIpKVxuICApO1xufVxuXG5leHBvcnQgY29uc3QgYnVpbHRJblRvb2xzID0ge1xuICBSZWFkOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUmVhZHMgYSBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cyB3aXRoIG1ldGFkYXRhLiBGb3IgZmlsZXMgb3ZlciAyMDAgbGluZXMsIGF1dG9tYXRpY2FsbHkgc2hvd3MgZmlyc3QgMTAwIGxpbmVzIHVubGVzcyBhIHNwZWNpZmljIGxpbmUgcmFuZ2UgaXMgcHJvdmlkZWQuIFVzZSBzdGFydExpbmUgYW5kIGVuZExpbmUgcGFyYW1ldGVycyB0byByZWFkIHNwZWNpZmljIHBvcnRpb25zIG9mIGxhcmdlIGZpbGVzLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXCIpLFxuICAgICAgc3RhcnRMaW5lOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJTdGFydGluZyBsaW5lIG51bWJlciAoMS1pbmRleGVkKS4gSWYgcHJvdmlkZWQgd2l0aCBlbmRMaW5lLCByZWFkcyBleGFjdCByYW5nZSByZWdhcmRsZXNzIG9mIGZpbGUgc2l6ZS5cIlxuICAgICAgICApLFxuICAgICAgZW5kTGluZTogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiRW5kaW5nIGxpbmUgbnVtYmVyICgxLWluZGV4ZWQsIGluY2x1c2l2ZSkuIElmIHByb3ZpZGVkIHdpdGggc3RhcnRMaW5lLCByZWFkcyBleGFjdCByYW5nZSByZWdhcmRsZXNzIG9mIGZpbGUgc2l6ZS5cIlxuICAgICAgICApLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIkZpbGUgY29udGVudFwiKSxcbiAgICAgIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgICAgIHRvdGFsTGluZXM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJUb3RhbCBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGVcIiksXG4gICAgICAgIGxpbmVzU2hvd246IHpcbiAgICAgICAgICAubnVtYmVyKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJOdW1iZXIgb2YgbGluZXMgaW5jbHVkZWQgaW4gdGhpcyByZXNwb25zZVwiKSxcbiAgICAgICAgc3RhcnRMaW5lOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRmlyc3QgbGluZSBudW1iZXIgc2hvd24gKDEtaW5kZXhlZClcIiksXG4gICAgICAgIGVuZExpbmU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJMYXN0IGxpbmUgbnVtYmVyIHNob3duICgxLWluZGV4ZWQpXCIpLFxuICAgICAgICBpc1BhZ2luYXRlZDogelxuICAgICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJXaGV0aGVyIHRoaXMgaXMgYSBwYXJ0aWFsIHZpZXcgb2YgdGhlIGZpbGVcIiksXG4gICAgICAgIGZpbGVTaXplOiB6XG4gICAgICAgICAgLnN0cmluZygpXG4gICAgICAgICAgLmRlc2NyaWJlKFwiSHVtYW4tcmVhZGFibGUgZmlsZSBzaXplIChlLmcuLCAnMi41SycsICcxLjJNJylcIiksXG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXCIpLFxuICAgICAgfSksXG4gICAgfSksXG4gIH0pLFxuICBHcmVwOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiU2VhcmNoIGZvciBwYXR0ZXJucyBpbiBmaWxlcyB1c2luZyByaXBncmVwLiBVc2UgdGhpcyB0byBmaW5kIGNvZGUgcGF0dGVybnMsIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBpbXBvcnRzLCBldGMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0dGVybjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiUmVnZXggcGF0dGVybiB0byBzZWFyY2ggZm9yIChyaXBncmVwIHN5bnRheClcIiksXG4gICAgICBwYXRoOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJBYnNvbHV0ZSBwYXRoIHRvIHNlYXJjaCBpbiAoZGVmYXVsdHMgdG8gd29ya2luZyBkaXJlY3RvcnkpLiBDYW4gYmUgYSBmaWxlIG9yIGRpcmVjdG9yeS5cIlxuICAgICAgICApLFxuICAgICAgZmlsZVR5cGU6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkZpbGUgdHlwZSB0byBmaWx0ZXIgYnkgKGUuZy4sICd0cycsICdqcycsICdweScsICdtZCcpLiBVc2VzIHJpcGdyZXAncyBidWlsdC1pbiB0eXBlIGZpbHRlcnMuXCJcbiAgICAgICAgKSxcbiAgICAgIGdsb2I6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkdsb2IgcGF0dGVybiB0byBmaWx0ZXIgZmlsZXMgKGUuZy4sICcqLnRzeCcsICdzcmMvKiovKi50cycpXCJcbiAgICAgICAgKSxcbiAgICAgIGNhc2VTZW5zaXRpdmU6IHpcbiAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVmYXVsdCh0cnVlKVxuICAgICAgICAuZGVzY3JpYmUoXCJXaGV0aGVyIHNlYXJjaCBpcyBjYXNlLXNlbnNpdGl2ZSAoZGVmYXVsdDogdHJ1ZSlcIiksXG4gICAgICBjb250ZXh0TGluZXM6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIHNob3cgYmVmb3JlIGFuZCBhZnRlciBlYWNoIG1hdGNoXCJcbiAgICAgICAgKSxcbiAgICAgIG1heENvdW50OiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJNYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHBlciBmaWxlICh1c2VmdWwgZm9yIGxpbWl0aW5nIG91dHB1dClcIlxuICAgICAgICApLFxuICAgICAgZmlsZXNXaXRoTWF0Y2hlczogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJPbmx5IHNob3cgZmlsZSBwYXRocyB0aGF0IGNvbnRhaW4gbWF0Y2hlcywgbm90IHRoZSBtYXRjaGluZyBsaW5lcyB0aGVtc2VsdmVzXCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIG1hdGNoZXM6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIlNlYXJjaCByZXN1bHRzIHdpdGggZmlsZSBwYXRocywgbGluZSBudW1iZXJzLCBhbmQgbWF0Y2hpbmcgY29udGVudFwiXG4gICAgICAgICksXG4gICAgICBzdW1tYXJ5OiB6Lm9iamVjdCh7XG4gICAgICAgIG1hdGNoQ291bnQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgbWF0Y2hlcyBmb3VuZFwiKSxcbiAgICAgICAgZmlsZUNvdW50OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiTnVtYmVyIG9mIGZpbGVzIGNvbnRhaW5pbmcgbWF0Y2hlc1wiKSxcbiAgICAgICAgc2VhcmNoUGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdGhhdCB3YXMgc2VhcmNoZWRcIiksXG4gICAgICAgIHBhdHRlcm46IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXR0ZXJuIHRoYXQgd2FzIHNlYXJjaGVkIGZvclwiKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KSxcbiAgTGlzdDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJlY3Vyc2l2ZWx5IGxpc3QgZGlyZWN0b3J5IGNvbnRlbnRzLiBVc2UgdGhpcyB0byB1bmRlcnN0YW5kIHRoZSBjb2RlYmFzZSBzdHJ1Y3R1cmUsIGZpbmQgZmlsZXMsIG9yIGV4cGxvcmUgZGlyZWN0b3JpZXMuIENvbnRyb2wgZGVwdGggdG8gYmFsYW5jZSBkZXRhaWwgdnMuIG92ZXJ2aWV3LiBEZXB0aCAxIHNob3dzIGltbWVkaWF0ZSBjaGlsZHJlbiwgZGVwdGggMiBpbmNsdWRlcyBzdWJkaXJlY3RvcmllcywgZXRjLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdGg6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gbGlzdCAoZGVmYXVsdHMgdG8gd29ya2luZyBkaXJlY3RvcnkpXCIpLFxuICAgICAgZGVwdGg6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk1heGltdW0gZGVwdGggdG8gdHJhdmVyc2UuIENob29zZSBiYXNlZCBvbiBjb250ZXh0OiAxLTIgZm9yIHF1aWNrIG92ZXJ2aWV3LCAzLTQgZm9yIGRldGFpbGVkIGV4cGxvcmF0aW9uLCA1KyBmb3IgY29tcHJlaGVuc2l2ZSBtYXBwaW5nXCJcbiAgICAgICAgKSxcbiAgICAgIGluY2x1ZGVIaWRkZW46IHpcbiAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiSW5jbHVkZSBoaWRkZW4gZmlsZXMgYW5kIGRpcmVjdG9yaWVzICh0aG9zZSBzdGFydGluZyB3aXRoICcuJylcIlxuICAgICAgICApLFxuICAgICAgZmlsZXNPbmx5OiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgICAgIC5kZXNjcmliZShcIk9ubHkgc2hvdyBmaWxlcywgbm90IGRpcmVjdG9yaWVzXCIpLFxuICAgICAgcGF0dGVybjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiR2xvYiBwYXR0ZXJuIHRvIGZpbHRlciByZXN1bHRzIChlLmcuLCAnKi50cycsICcqdGVzdConKVwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxpc3Rpbmc6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkRpcmVjdG9yeSB0cmVlIGxpc3Rpbmcgc2hvd2luZyBwYXRocyByZWxhdGl2ZSB0byBzZWFyY2ggcm9vdFwiXG4gICAgICAgICksXG4gICAgICBzdW1tYXJ5OiB6Lm9iamVjdCh7XG4gICAgICAgIHRvdGFsSXRlbXM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJUb3RhbCBudW1iZXIgb2YgaXRlbXMgZm91bmRcIiksXG4gICAgICAgIHRvdGFsRmlsZXM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJUb3RhbCBudW1iZXIgb2YgZmlsZXMgZm91bmRcIiksXG4gICAgICAgIHRvdGFsRGlyczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBkaXJlY3RvcmllcyBmb3VuZFwiKSxcbiAgICAgICAgc2VhcmNoUGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdGhhdCB3YXMgbGlzdGVkXCIpLFxuICAgICAgICBkZXB0aDogelxuICAgICAgICAgIC5udW1iZXIoKVxuICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgLmRlc2NyaWJlKFwiTWF4aW11bSBkZXB0aCB1c2VkIChpZiBzcGVjaWZpZWQpXCIpLFxuICAgICAgfSksXG4gICAgfSksXG4gIH0pLFxuICBXcml0ZTogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIldyaXRlIGNvbnRlbnQgdG8gYSBmaWxlLiBDcmVhdGVzIHBhcmVudCBkaXJlY3RvcmllcyBhdXRvbWF0aWNhbGx5LiBPdmVyd3JpdGVzIGV4aXN0aW5nIGZpbGVzLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXCIpLFxuICAgICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbnRlbnQgdG8gd3JpdGUgdG8gdGhlIGZpbGVcIiksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBzdWNjZXNzOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIldoZXRoZXIgdGhlIHdyaXRlIHN1Y2NlZWRlZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXRoIHRvIHRoZSB3cml0dGVuIGZpbGVcIiksXG4gICAgICBieXRlc1dyaXR0ZW46IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlblwiKSxcbiAgICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFcnJvciBtZXNzYWdlIGlmIHdyaXRlIGZhaWxlZFwiKSxcbiAgICB9KSxcbiAgfSksXG4gIEVkaXQ6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJFZGl0IGEgZmlsZSBieSByZXBsYWNpbmcgYW4gZXhhY3Qgc3RyaW5nLiBGYWlscyBpZiBvbGRfc3RyaW5nIGlzIG5vdCBmb3VuZCBvciBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIChub3QgdW5pcXVlKS4gRm9yIG11bHRpcGxlIHJlcGxhY2VtZW50cywgY2FsbCB0aGlzIHRvb2wgbXVsdGlwbGUgdGltZXMgd2l0aCB1bmlxdWUgY29udGV4dC5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVwiKSxcbiAgICAgIG9sZF9zdHJpbmc6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkV4YWN0IHN0cmluZyB0byBmaW5kIGFuZCByZXBsYWNlIChtdXN0IGJlIHVuaXF1ZSBpbiBmaWxlKVwiKSxcbiAgICAgIG5ld19zdHJpbmc6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTdHJpbmcgdG8gcmVwbGFjZSBvbGRfc3RyaW5nIHdpdGhcIiksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBzdWNjZXNzOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIldoZXRoZXIgdGhlIGVkaXQgc3VjY2VlZGVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdG8gdGhlIGVkaXRlZCBmaWxlXCIpLFxuICAgICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVycm9yIG1lc3NhZ2UgaWYgZWRpdCBmYWlsZWRcIiksXG4gICAgfSksXG4gIH0pLFxuICBCYXNoOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiRXhlY3V0ZXMgYSBiYXNoIGNvbW1hbmQuIFJldHVybnMgc3Rkb3V0IGFuZCBzdGRlcnIgc2VwYXJhdGVseS4gVXNlIHdhaXRVbnRpbCB0byBjb250cm9sIGhvdyBsb25nIHRvIHdhaXQgKDAgPSByZXR1cm4gaW1tZWRpYXRlbHksIHByb2Nlc3Mga2VlcHMgcnVubmluZykuIExhcmdlIG91dHB1dHMgYXJlIHRhaWwtdHJ1bmNhdGVkOyBmdWxsIG91dHB1dCBpbiBvdXRwdXREaXIuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgY29tbWFuZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGVcIiksXG4gICAgICB3YWl0VW50aWw6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBgTWF4IG1zIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gKGRlZmF1bHQ6ICR7REVGQVVMVF9XQUlUX1VOVElMfSkuIFVzZSAwIHRvIHJldHVybiBpbW1lZGlhdGVseSB3aGlsZSB0aGUgcHJvY2VzcyBrZWVwcyBydW5uaW5nLmBcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGNvbW1hbmRJZDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQ29tbWFuZCBJRC4gVXNlIHRvIHJlZmVyZW5jZSBvciBraWxsIHJ1bm5pbmcgcHJvY2Vzc2VzLlwiKSxcbiAgICAgIHN0ZG91dDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiQ29tbWFuZCBzdGRvdXQuIFRhaWwtdHJ1bmNhdGVkIGlmIGxhcmdlOyBmdWxsIGNvbnRlbnQgaW4gb3V0cHV0RGlyL3N0ZG91dC50eHQuXCJcbiAgICAgICAgKSxcbiAgICAgIHN0ZGVycjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiQ29tbWFuZCBzdGRlcnIuIFRhaWwtdHJ1bmNhdGVkIGlmIGxhcmdlOyBmdWxsIGNvbnRlbnQgaW4gb3V0cHV0RGlyL3N0ZGVyci50eHQuXCJcbiAgICAgICAgKSxcbiAgICAgIGV4aXRDb2RlOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRXhpdCBjb2RlICgtMSBpZiBzdGlsbCBydW5uaW5nKVwiKSxcbiAgICAgIHN0YXR1czogelxuICAgICAgICAuZW51bShbXCJydW5uaW5nXCIsIFwiY29tcGxldGVkXCIsIFwiZmFpbGVkXCJdKVxuICAgICAgICAuZGVzY3JpYmUoXCJQcm9jZXNzIHN0YXR1c1wiKSxcbiAgICAgIG91dHB1dERpcjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiUGF0aCB0byBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc3Rkb3V0LnR4dCwgc3RkZXJyLnR4dCwgYW5kIG1ldGFkYXRhLmpzb24uIEVtcHR5IGlmIHN0aWxsIHJ1bm5pbmcuXCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgfSksXG4gIFNraWxsOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiTG9hZCBhIHNraWxsJ3MgZnVsbCBpbnN0cnVjdGlvbnMgYnkgbmFtZS4gQ2FsbCB0aGlzIGJlZm9yZSBmb2xsb3dpbmcgYSBza2lsbC5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiU2tpbGwgbmFtZSBmcm9tIHRoZSBBdmFpbGFibGUgU2tpbGxzIGxpc3RcIiksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCksXG4gICAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRnVsbCBTS0lMTC5tZCBjb250ZW50XCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdG8gdGhlIHNraWxsIGRpcmVjdG9yeSBpbiB0aGUgc2FuZGJveFwiKSxcbiAgICB9KSxcbiAgfSksXG4gIEphdmFTY3JpcHQ6IHRvb2woe1xuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIGNvZGU6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkphdmFTY3JpcHQgYXN5bmMgZnVuY3Rpb24gYm9keS4gYGN0eGAgaXMgaW4gc2NvcGUuIE11c3QgdXNlIGByZXR1cm5gIHRvIHByb2R1Y2Ugb3V0cHV0LlwiXG4gICAgICAgICksXG4gICAgfSksXG4gIH0pLFxufSBzYXRpc2ZpZXMgVG9vbFNldDtcblxuZXhwb3J0IHR5cGUgQnVpbHRJblRvb2xOYW1lID0ga2V5b2YgdHlwZW9mIGJ1aWx0SW5Ub29scztcbmV4cG9ydCBjb25zdCBidWlsdGluVG9vbE5hbWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBPYmplY3QuZW50cmllcyhidWlsdEluVG9vbHMpLm1hcCgoW25hbWVdKSA9PiBbbmFtZSwgbmFtZV0pXG4pIGFzIHsgW0sgaW4gQnVpbHRJblRvb2xOYW1lXTogSyB9O1xuXG5jb25zdCBTS0lMTF9NRF9TVUZGSVggPSAvXFwvP1NLSUxMXFwubWQkLztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2xzKHtcbiAgYWdlbnQsXG4gIHNhbmRib3gsXG4gIHNraWxsc1JlZixcbiAgd3JpdGVyLFxuICBhYm9ydENvbnRyb2xsZXIsXG4gIG5leHRQYXJ0SW5kZXhSZWYsXG4gIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgc2Vzc2lvbklkLFxuICBzdGVwTG9nLFxuICBjb250ZXh0LFxuICBzdGF0ZSxcbiAgbWVzc2FnZXMsXG4gIGFjdGl2ZVRvb2xzLFxufToge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzUmVmOiB7IGN1cnJlbnQ6IFNraWxsU3VtbWFyeVtdIH07XG4gIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcbiAgbmV4dFBhcnRJbmRleFJlZjogeyBjdXJyZW50OiBudW1iZXIgfTtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdGVwTG9nOiBMb2dnZXI7XG4gIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1lc3NhZ2VzOiBVSU1lc3NhZ2VbXTtcbiAgYWN0aXZlVG9vbHM/OiBzdHJpbmdbXTtcbn0pOiB7XG4gIHJhd1Rvb2xzOiBUb29sU2V0O1xuICB0b29sc1dpdGhOZWVkc0FwcHJvdmFsOiBUb29sU2V0O1xuICB0b29sQ29udGV4dDogVG9vbENvbnRleHQ7XG59IHtcbiAgY29uc3QgcmF3VG9vbHM6IFRvb2xTZXQgPSB7XG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuUmVhZF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLlJlYWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXRoLCBzdGFydExpbmUsIGVuZExpbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGg7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5yZWFkRmlsZSh7IHBhdGg6IGZpbGVQYXRoIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGxvZy5lcnJvcihcIlJlYWQgZmFpbGVkXCIsIHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogYEVycm9yOiBGaWxlIG5vdCBmb3VuZCAtICR7ZmlsZVBhdGh9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIHRvdGFsTGluZXM6IDAsXG4gICAgICAgICAgICAgIGxpbmVzU2hvd246IDAsXG4gICAgICAgICAgICAgIHN0YXJ0TGluZTogMCxcbiAgICAgICAgICAgICAgZW5kTGluZTogMCxcbiAgICAgICAgICAgICAgaXNQYWdpbmF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogXCIwXCIsXG4gICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbENvbnRlbnQgPSByZXN1bHQudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBmdWxsQ29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgLy8gQSB0cmFpbGluZyBuZXdsaW5lIHByb2R1Y2VzIGFuIGVtcHR5IGxhc3QgZWxlbWVudCBcdTIwMTQgcmVtb3ZlIGl0XG4gICAgICAgIC8vIHNvIGxpbmUgY291bnQgbWF0Y2hlcyBgd2MgLWxgIC8gYGF3ayAnRU5Ee3ByaW50IE5SfSdgIGJlaGF2aW9yLlxuICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lcy5hdCgtMSkgPT09IFwiXCIpIHtcbiAgICAgICAgICBsaW5lcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b3RhbExpbmVzID0gbGluZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBmaWxlQnl0ZXMgPSBCdWZmZXIuYnl0ZUxlbmd0aChmdWxsQ29udGVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVTaXplID0gZm9ybWF0RmlsZVNpemUoZmlsZUJ5dGVzKTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgcmFuZ2VcbiAgICAgICAgY29uc3QgUEFHRV9TSVpFID0gMTAwO1xuICAgICAgICBsZXQgYWN0dWFsU3RhcnQ6IG51bWJlcjtcbiAgICAgICAgbGV0IGFjdHVhbEVuZDogbnVtYmVyO1xuXG4gICAgICAgIGlmIChzdGFydExpbmUgIT09IHVuZGVmaW5lZCAmJiBlbmRMaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IHN0YXJ0TGluZTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSBlbmRMaW5lO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0TGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSBzdGFydExpbmU7XG4gICAgICAgICAgYWN0dWFsRW5kID0gTWF0aC5taW4oc3RhcnRMaW5lICsgUEFHRV9TSVpFIC0gMSwgdG90YWxMaW5lcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW5kTGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSAxO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IGVuZExpbmU7XG4gICAgICAgIH0gZWxzZSBpZiAodG90YWxMaW5lcyA+IDIwMCkge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gMTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSBQQUdFX1NJWkU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSAxO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IHRvdGFsTGluZXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBsaW5lIHJhbmdlICgxLWluZGV4ZWQpXG4gICAgICAgIGNvbnN0IHNsaWNlZExpbmVzID0gbGluZXMuc2xpY2UoYWN0dWFsU3RhcnQgLSAxLCBhY3R1YWxFbmQpO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gc2xpY2VkTGluZXMuam9pbihcIlxcblwiKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0b3RhbExpbmVzLFxuICAgICAgICAgICAgbGluZXNTaG93bjogTWF0aC5tYXgoMCwgYWN0dWFsRW5kIC0gYWN0dWFsU3RhcnQgKyAxKSxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogYWN0dWFsU3RhcnQsXG4gICAgICAgICAgICBlbmRMaW5lOiBhY3R1YWxFbmQsXG4gICAgICAgICAgICBpc1BhZ2luYXRlZDogYWN0dWFsRW5kIDwgdG90YWxMaW5lcyxcbiAgICAgICAgICAgIGZpbGVTaXplLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5HcmVwXTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuR3JlcCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7XG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBnbG9iLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlLFxuICAgICAgICBjb250ZXh0TGluZXMsXG4gICAgICAgIG1heENvdW50LFxuICAgICAgICBmaWxlc1dpdGhNYXRjaGVzLFxuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2hQYXRoID0gcGF0aCA/PyBcIi5cIjtcblxuICAgICAgICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGFyZ3MucHVzaChcIi0tbGluZS1udW1iZXJcIik7XG4gICAgICAgIGFyZ3MucHVzaChcIi0taGVhZGluZ1wiKTtcbiAgICAgICAgYXJncy5wdXNoKFwiLS1jb2xvclwiLCBcIm5ldmVyXCIpO1xuXG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi1pXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVUeXBlKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLS10eXBlXCIsIGZpbGVUeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbG9iKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLS1nbG9iXCIsIGdsb2IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHRMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLUNcIiwgU3RyaW5nKGNvbnRleHRMaW5lcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1heENvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLW1heC1jb3VudFwiLCBTdHJpbmcobWF4Q291bnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc1dpdGhNYXRjaGVzKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLS1maWxlcy13aXRoLW1hdGNoZXNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLnB1c2goXCItLVwiLCBwYXR0ZXJuLCBzZWFyY2hQYXRoKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJyZ1wiLCBhcmdzIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvciAmJiBpc1JnTm90Rm91bmRFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJyZyBub3QgZm91bmQsIGluc3RhbGxpbmcgcmlwZ3JlcFwiKTtcbiAgICAgICAgICBjb25zdCBpbnN0YWxsUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiYmFzaFwiLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcImNvbW1hbmQgLXYgcmcgPi9kZXYvbnVsbCAyPiYxICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiZG5mIGluc3RhbGwgLXkgcmlwZ3JlcCAyPi9kZXYvbnVsbCAmJiBleGl0IDBcIixcbiAgICAgICAgICAgICAgICBcIihhcHQtZ2V0IHVwZGF0ZSAtcXEgJiYgYXB0LWdldCBpbnN0YWxsIC15IC1xcSByaXBncmVwKSAyPi9kZXYvbnVsbCAmJiBleGl0IDBcIixcbiAgICAgICAgICAgICAgICBcImFwayBhZGQgLS1uby1jYWNoZSByaXBncmVwIDI+L2Rldi9udWxsICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiY3VybCAtc0wgaHR0cHM6Ly9naXRodWIuY29tL0J1cm50U3VzaGkvcmlwZ3JlcC9yZWxlYXNlcy9kb3dubG9hZC8xNC4xLjEvcmlwZ3JlcC0xNC4xLjEteDg2XzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3ogfCB0YXIgeHogLUMgL3RtcCAmJiBpbnN0YWxsIC90bXAvcmlwZ3JlcC0xNC4xLjEteDg2XzY0LXVua25vd24tbGludXgtbXVzbC9yZyAvdXNyL2xvY2FsL2Jpbi9yZyAmJiBybSAtcmYgL3RtcC9yaXBncmVwLTE0LjEuMS14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsXG4gICAgICAgICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghKGluc3RhbGxSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbGxPdXRwdXQgPSBhd2FpdCBpbnN0YWxsUmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgIGlmIChpbnN0YWxsT3V0cHV0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwicmlwZ3JlcCBpbnN0YWxsIGZhaWxlZFwiLCB7XG4gICAgICAgICAgICAgICAgc3RkZXJyOiBpbnN0YWxsT3V0cHV0LnN0ZGVycixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7IGNvbW1hbmQ6IFwicmdcIiwgYXJncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvciAmJiBpc1JnTm90Rm91bmRFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJyZyB1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGdyZXBcIik7XG4gICAgICAgICAgY29uc3QgZ3JlcEFyZ3MgPSBbXCItcm5cIiwgXCItLWNvbG9yPW5ldmVyXCJdO1xuICAgICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi1pXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29udGV4dExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItQ1wiLCBTdHJpbmcoY29udGV4dExpbmVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLW1cIiwgU3RyaW5nKG1heENvdW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWxlc1dpdGhNYXRjaGVzKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLWxcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChnbG9iKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKGAtLWluY2x1ZGU9JHtnbG9ifWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICAgICAgICAgICAgdHM6IFtcIioudHNcIiwgXCIqLnRzeFwiLCBcIioubXRzXCIsIFwiKi5jdHNcIl0sXG4gICAgICAgICAgICAgIGpzOiBbXCIqLmpzXCIsIFwiKi5qc3hcIiwgXCIqLm1qc1wiLCBcIiouY2pzXCJdLFxuICAgICAgICAgICAgICBweTogW1wiKi5weVwiXSxcbiAgICAgICAgICAgICAgcnVzdDogW1wiKi5yc1wiXSxcbiAgICAgICAgICAgICAgZ286IFtcIiouZ29cIl0sXG4gICAgICAgICAgICAgIGphdmE6IFtcIiouamF2YVwiXSxcbiAgICAgICAgICAgICAgbWQ6IFtcIioubWRcIl0sXG4gICAgICAgICAgICAgIGpzb246IFtcIiouanNvblwiXSxcbiAgICAgICAgICAgICAgY3NzOiBbXCIqLmNzc1wiXSxcbiAgICAgICAgICAgICAgaHRtbDogW1wiKi5odG1sXCJdLFxuICAgICAgICAgICAgICB5YW1sOiBbXCIqLnltbFwiLCBcIioueWFtbFwiXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dCBvZiBpbmNsdWRlTWFwW2ZpbGVUeXBlXSA/PyBbYCouJHtmaWxlVHlwZX1gXSkge1xuICAgICAgICAgICAgICBncmVwQXJncy5wdXNoKGAtLWluY2x1ZGU9JHtleHR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItLVwiLCBwYXR0ZXJuLCBzZWFyY2hQYXRoKTtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgICAgICAgICAgY29tbWFuZDogXCJncmVwXCIsXG4gICAgICAgICAgICBhcmdzOiBncmVwQXJncyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGxvZy5lcnJvcihcIkdyZXAgZmFpbGVkXCIsIHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IGF3YWl0IHJlc3VsdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKHN0ZGVyciAmJiAhc3RkZXJyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJubyBtYXRjaGVzXCIpKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJHcmVwIHN0ZGVyclwiLCB7IHN0ZGVyciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRydW5jYXRlIG91dHB1dCB0byBwcmV2ZW50IFwiaW5wdXQgdG9vIGxvbmdcIiBlcnJvcnMgKDUwayBjaGFycyBcdTIyNDggMTIuNWsgdG9rZW5zKVxuICAgICAgICBjb25zdCBNQVhfR1JFUF9PVVRQVVRfQ0hBUlMgPSA1MF8wMDA7XG4gICAgICAgIGxldCBmaW5hbE91dHB1dCA9IHN0ZG91dDtcbiAgICAgICAgbGV0IHdhc1RydW5jYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZmluYWxPdXRwdXQubGVuZ3RoID4gTUFYX0dSRVBfT1VUUFVUX0NIQVJTKSB7XG4gICAgICAgICAgZmluYWxPdXRwdXQgPVxuICAgICAgICAgICAgZmluYWxPdXRwdXQuc2xpY2UoMCwgTUFYX0dSRVBfT1VUUFVUX0NIQVJTKSArXG4gICAgICAgICAgICBcIlxcblxcbltPdXRwdXQgdHJ1bmNhdGVkIC0gdXNlIG1vcmUgc3BlY2lmaWMgcGF0dGVybiBvciBwYXRoXVwiO1xuICAgICAgICAgIHdhc1RydW5jYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IGZpbmFsT3V0cHV0XG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgIC5maWx0ZXIoKGwpID0+IGwubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IGZpbGVDb3VudCA9IGZpbGVzV2l0aE1hdGNoZXNcbiAgICAgICAgICA/IGxpbmVzLmxlbmd0aFxuICAgICAgICAgIDogbmV3IFNldChcbiAgICAgICAgICAgICAgbGluZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsKSA9PiAhbC5zdGFydHNXaXRoKFwiIFwiKSAmJiBsLmluY2x1ZGVzKFwiOlwiKSlcbiAgICAgICAgICAgICAgICAubWFwKChsKSA9PiBsLnNwbGl0KFwiOlwiKVswXSlcbiAgICAgICAgICAgICkuc2l6ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgIG1hdGNoQ291bnQ6IGZpbGVzV2l0aE1hdGNoZXNcbiAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgIDogbGluZXMuZmlsdGVyKChsKSA9PiBsLmluY2x1ZGVzKFwiOlwiKSkubGVuZ3RoLFxuICAgICAgICAgICAgZmlsZUNvdW50LFxuICAgICAgICAgICAgc2VhcmNoUGF0aCxcbiAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICB3YXNUcnVuY2F0ZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYXRjaGVzOiBmaW5hbE91dHB1dCB8fCBcIihubyBtYXRjaGVzIGZvdW5kKVwiLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5MaXN0XTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuTGlzdCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIGRlcHRoLCBpbmNsdWRlSGlkZGVuLCBmaWxlc09ubHksIHBhdHRlcm4gfSkgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2hQYXRoID0gcGF0aCA/PyBcIi5cIjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgICAgICAgIGNvbW1hbmQ6IFwiYmFzaFwiLFxuICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgIFwiLWNcIixcbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgU0VBUkNIX1BBVEg9XCIkMVwiXG4gICAgICAgICAgICBERVBUSD1cIiQyXCJcbiAgICAgICAgICAgIElOQ0xVREVfSElEREVOPVwiJDNcIlxuICAgICAgICAgICAgRklMRVNfT05MWT1cIiQ0XCJcbiAgICAgICAgICAgIFBBVFRFUk49XCIkNVwiXG5cbiAgICAgICAgICAgICMgQnVpbGQgZmluZCBjb21tYW5kIGFyZ3VtZW50c1xuICAgICAgICAgICAgRklORF9BUkdTPVwiXCJcbiAgICAgICAgICAgIFsgLW4gXCIkREVQVEhcIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgLW1heGRlcHRoICRERVBUSFwiXG4gICAgICAgICAgICBbIFwiJElOQ0xVREVfSElEREVOXCIgIT0gXCJ0cnVlXCIgXSAmJiBGSU5EX0FSR1M9XCIkRklORF9BUkdTICEgLXBhdGggJyovLionXCJcbiAgICAgICAgICAgIFsgXCIkRklMRVNfT05MWVwiID0gXCJ0cnVlXCIgXSAmJiBGSU5EX0FSR1M9XCIkRklORF9BUkdTIC10eXBlIGZcIlxuICAgICAgICAgICAgWyAtbiBcIiRQQVRURVJOXCIgXSAmJiBGSU5EX0FSR1M9XCIkRklORF9BUkdTIC1uYW1lICckUEFUVEVSTidcIlxuXG4gICAgICAgICAgICAjIEdldCBsaXN0aW5nXG4gICAgICAgICAgICBMSVNUSU5HPSQoZXZhbCBcImZpbmQgJyRTRUFSQ0hfUEFUSCcgJEZJTkRfQVJHU1wiIDI+L2Rldi9udWxsIHwgc29ydClcblxuICAgICAgICAgICAgIyBHZXQgY291bnRzXG4gICAgICAgICAgICBDT1VOVF9BUkdTPVwiXCJcbiAgICAgICAgICAgIFsgLW4gXCIkREVQVEhcIiBdICYmIENPVU5UX0FSR1M9XCIkQ09VTlRfQVJHUyAtbWF4ZGVwdGggJERFUFRIXCJcbiAgICAgICAgICAgIFsgXCIkSU5DTFVERV9ISURERU5cIiAhPSBcInRydWVcIiBdICYmIENPVU5UX0FSR1M9XCIkQ09VTlRfQVJHUyAhIC1wYXRoICcqLy4qJ1wiXG5cbiAgICAgICAgICAgIEZJTEVfQ09VTlQ9JChldmFsIFwiZmluZCAnJFNFQVJDSF9QQVRIJyAkQ09VTlRfQVJHUyAtdHlwZSBmXCIgMj4vZGV2L251bGwgfCB3YyAtbClcbiAgICAgICAgICAgIERJUl9DT1VOVD0kKGV2YWwgXCJmaW5kICckU0VBUkNIX1BBVEgnICRDT1VOVF9BUkdTIC10eXBlIGRcIiAyPi9kZXYvbnVsbCB8IHdjIC1sKVxuXG4gICAgICAgICAgICAjIE91dHB1dDogY291bnRzIGZpcnN0LCB0aGVuIGxpc3RpbmdcbiAgICAgICAgICAgIGVjaG8gXCIkRklMRV9DT1VOVHwkRElSX0NPVU5UXCJcbiAgICAgICAgICAgIGVjaG8gXCJ8fHxMSVNUSU5HfHx8XCJcbiAgICAgICAgICAgIGVjaG8gXCIkTElTVElOR1wiIHwgc2VkIFwic3xeJFNFQVJDSF9QQVRIfC58XCJcbiAgICAgICAgICBgLFxuICAgICAgICAgICAgXCItLVwiLFxuICAgICAgICAgICAgc2VhcmNoUGF0aCxcbiAgICAgICAgICAgIGRlcHRoPy50b1N0cmluZygpIHx8IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlSGlkZGVuID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBmaWxlc09ubHkgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIHBhdHRlcm4gfHwgXCJcIixcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJMaXN0IGZhaWxlZFwiLCB7IGVycm9yOiByZXN1bHQubWVzc2FnZSB9KTtcbiAgICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCByZXN1bHQucmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICBsb2cud2FybihcIkxpc3Qgc3RkZXJyXCIsIHsgc3RkZXJyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2NvdW50c0xpbmUsIC4uLnJlc3RdID0gc3Rkb3V0LnNwbGl0KFwifHx8TElTVElOR3x8fFwiKTtcbiAgICAgICAgY29uc3QgbGlzdGluZyA9IHJlc3Quam9pbihcInx8fExJU1RJTkd8fHxcIikudHJpbSgpO1xuICAgICAgICBjb25zdCBbZmlsZUNvdW50U3RyLCBkaXJDb3VudFN0cl0gPSBjb3VudHNMaW5lLnRyaW0oKS5zcGxpdChcInxcIik7XG5cbiAgICAgICAgY29uc3QgdG90YWxGaWxlcyA9IE51bWJlci5wYXJzZUludChmaWxlQ291bnRTdHIsIDEwKSB8fCAwO1xuICAgICAgICBjb25zdCB0b3RhbERpcnMgPSBOdW1iZXIucGFyc2VJbnQoZGlyQ291bnRTdHIsIDEwKSB8fCAwO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGxpc3Rpbmcuc3BsaXQoXCJcXG5cIikuZmlsdGVyKChsKSA9PiBsLmxlbmd0aCA+IDApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgICAgdG90YWxJdGVtczogbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxGaWxlcyxcbiAgICAgICAgICAgIHRvdGFsRGlycyxcbiAgICAgICAgICAgIHNlYXJjaFBhdGgsXG4gICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpc3RpbmcsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLldyaXRlXTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuV3JpdGUsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXRoLCBjb250ZW50IH0pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICAgICAgICAgIGZpbGVzOiBbeyBwYXRoOiBmaWxlUGF0aCwgY29udGVudCB9XSxcbiAgICAgICAgICAgIGRlc3RQYXRoOiBcIi5cIixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBieXRlc1dyaXR0ZW46IEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbnRlbnQsIFwidXRmOFwiKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGJ5dGVzV3JpdHRlbjogMCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1zZyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkVkaXRdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5FZGl0LFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGF0aCwgb2xkX3N0cmluZywgbmV3X3N0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LnJlYWRGaWxlKHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHBhdGg6IGZpbGVQYXRoLCBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3VsdC50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRlbnQuc3BsaXQob2xkX3N0cmluZykubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAob2NjdXJyZW5jZXMgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBcIm9sZF9zdHJpbmcgbm90IGZvdW5kIGluIGZpbGVcIixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9jY3VycmVuY2VzID4gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgZXJyb3I6IGBvbGRfc3RyaW5nIGFwcGVhcnMgJHtvY2N1cnJlbmNlc30gdGltZXMgaW4gZmlsZSAobXVzdCBiZSB1bmlxdWUpLiBJbmNsdWRlIG1vcmUgc3Vycm91bmRpbmcgY29udGV4dCB0byBtYWtlIHRoZSBtYXRjaCB1bmlxdWUuYCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZShvbGRfc3RyaW5nLCBuZXdfc3RyaW5nKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgICAgICAgICBmaWxlczogW3sgcGF0aDogZmlsZVBhdGgsIGNvbnRlbnQ6IG5ld0NvbnRlbnQgfV0sXG4gICAgICAgICAgICBkZXN0UGF0aDogXCIuXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBwYXRoOiBmaWxlUGF0aCB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgcGF0aDogZmlsZVBhdGgsIGVycm9yOiBlcnJvck1zZyB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkJhc2hdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5CYXNoLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgY29tbWFuZCwgd2FpdFVudGlsIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBjcmVhdGVQcm9jZXNzTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAgIFwiLi4vc2FuZGJveC9wcm9jZXNzLW1hbmFnZXJcIlxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NNYW5hZ2VyID0gY3JlYXRlUHJvY2Vzc01hbmFnZXIoeyBzYW5kYm94IH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb2Nlc3NNYW5hZ2VyLnJ1bih7IGNvbW1hbmQsIHdhaXRVbnRpbCB9KTtcblxuICAgICAgICBjb25zdCBNQVhfU1RET1VUID0gNTBfMDAwO1xuICAgICAgICBjb25zdCBNQVhfU1RERVJSID0gMTBfMDAwO1xuXG4gICAgICAgIGxldCB7IHN0ZG91dCwgc3RkZXJyIH0gPSByZXN1bHQ7XG4gICAgICAgIGlmIChzdGRvdXQubGVuZ3RoID4gTUFYX1NURE9VVCkge1xuICAgICAgICAgIHN0ZG91dCA9XG4gICAgICAgICAgICBgW3RydW5jYXRlZCBcdTIwMTQgc2hvd2luZyBsYXN0ICR7TUFYX1NURE9VVH0gY2hhcnMuIEZ1bGw6ICR7cmVzdWx0Lm91dHB1dERpcn0vc3Rkb3V0LnR4dF1cXG5cXG5gICtcbiAgICAgICAgICAgIHN0ZG91dC5zbGljZSgtTUFYX1NURE9VVCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZGVyci5sZW5ndGggPiBNQVhfU1RERVJSKSB7XG4gICAgICAgICAgc3RkZXJyID1cbiAgICAgICAgICAgIGBbdHJ1bmNhdGVkIFx1MjAxNCBzaG93aW5nIGxhc3QgJHtNQVhfU1RERVJSfSBjaGFycy4gRnVsbDogJHtyZXN1bHQub3V0cHV0RGlyfS9zdGRlcnIudHh0XVxcblxcbmAgK1xuICAgICAgICAgICAgc3RkZXJyLnNsaWNlKC1NQVhfU1RERVJSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IC4uLnJlc3VsdCwgc3Rkb3V0LCBzdGRlcnIgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gIH07XG5cbiAgLy8gQWRkIHVzZXItZGVmaW5lZCB0b29sc1xuICBmb3IgKGNvbnN0IFtuYW1lLCB0XSBvZiBPYmplY3QuZW50cmllcyhhZ2VudC5vcHRpb25zLnRvb2xzID8/IHt9KSkge1xuICAgIHJhd1Rvb2xzW25hbWVdID0gdCBhcyBUb29sU2V0W3N0cmluZ107XG4gIH1cblxuICBpZiAoc2tpbGxzUmVmLmN1cnJlbnQubGVuZ3RoID4gMCkge1xuICAgIHJhd1Rvb2xzW2J1aWx0aW5Ub29sTmFtZXMuU2tpbGxdID0gdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuU2tpbGwsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2tpbGxzID0gc2tpbGxzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IHNraWxsID0gc2tpbGxzLmZpbmQoXG4gICAgICAgICAgKHMpID0+IHMubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTa2lsbCBub3QgZm91bmQ6IFwiJHtuYW1lfVwiLiBBdmFpbGFibGU6ICR7c2tpbGxzLm1hcCgocykgPT4gcy5uYW1lKS5qb2luKFwiLCBcIil9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5yZWFkRmlsZSh7XG4gICAgICAgICAgcGF0aDogc2tpbGwuc2tpbGxNZFBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2tpbGwgZmlsZSBub3QgZm91bmQ6ICR7c2tpbGwuc2tpbGxNZFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmF3ID1cbiAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiID8gcmVzdWx0IDogcmVzdWx0LnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IGVuZE1hcmtlciA9IHJhdy5pbmRleE9mKFwiLS0tXCIsIDMpO1xuICAgICAgICBjb25zdCBjb250ZW50ID1cbiAgICAgICAgICBlbmRNYXJrZXIgPT09IC0xID8gcmF3IDogcmF3LnNsaWNlKGVuZE1hcmtlciArIDMpLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2tpbGxEaXIgPSBza2lsbC5za2lsbE1kUGF0aC5yZXBsYWNlKFNLSUxMX01EX1NVRkZJWCwgXCJcIik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogc2tpbGwubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc2tpbGwuZGVzY3JpcHRpb24sXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBwYXRoOiBza2lsbERpcixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBvblN1YlRvb2xDYWxsOiBPblN1YlRvb2xDYWxsID0gYXN5bmMgKHRvb2xOYW1lLCB0b29sSW5wdXQsIGV4ZWN1dGUpID0+IHtcbiAgICBjb25zdCBuZWVkc0FwcHJvdmFsID0gYXdhaXQgY2hlY2tOZWVkc0FwcHJvdmFsKHtcbiAgICAgIGFnZW50LFxuICAgICAgdG9vbE5hbWUsXG4gICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgdG9vbENhbGxJZDogYGpzXyR7dG9vbE5hbWV9XyR7RGF0ZS5ub3coKX1gLFxuICAgICAgbWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgaWYgKCFuZWVkc0FwcHJvdmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKCk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcHByb3ZhbElkID0gYGpzX2FwcHJvdmFsXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgdG9vbENhbGxJZCA9IGBqc190Y18ke3VsaWQoKX1gO1xuICAgIGNvbnN0IHBhcnRJZCA9IGFwcHJvdmFsUGFydElkKGFwcHJvdmFsSWQpO1xuXG4gICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwYXJ0SWQsIHtcbiAgICAgIGlkOiBwYXJ0SWQsXG4gICAgICBpbmRleDogbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50KyssXG4gICAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBhcnQ6IHtcbiAgICAgICAgdHlwZTogYHRvb2wtJHt0b29sTmFtZX1gLFxuICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICBzdGF0ZTogXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIixcbiAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgYXBwcm92YWw6IHsgaWQ6IGFwcHJvdmFsSWQgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBVSU1lc3NhZ2VbXCJwYXJ0c1wiXVtudW1iZXJdLFxuICAgIH0pO1xuXG4gICAgd3JpdGVyLndyaXRlKHtcbiAgICAgIHR5cGU6IFwidG9vbC1pbnB1dC1zdGFydFwiLFxuICAgICAgdG9vbENhbGxJZCxcbiAgICAgIHRvb2xOYW1lLFxuICAgIH0pO1xuICAgIHdyaXRlci53cml0ZSh7XG4gICAgICB0eXBlOiBcInRvb2wtaW5wdXQtYXZhaWxhYmxlXCIsXG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgdG9vbE5hbWUsXG4gICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgIH0pO1xuICAgIHdyaXRlci53cml0ZSh7XG4gICAgICB0eXBlOiBcInRvb2wtYXBwcm92YWwtcmVxdWVzdFwiLFxuICAgICAgYXBwcm92YWxJZCxcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBQT0xMX01TID0gNTAwO1xuICAgIGNvbnN0IFRJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCBUSU1FT1VUX01TICYmICFhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnBhcnQuZ2V0KHBhcnRJZCk7XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZWQgJiZcbiAgICAgICAgXCJzdGF0ZVwiIGluIHVwZGF0ZWQucGFydCAmJlxuICAgICAgICAoKHVwZGF0ZWQucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVzcG9uZGVkXCIgfHxcbiAgICAgICAgICAodXBkYXRlZC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJvdXRwdXQtZGVuaWVkXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSAodXBkYXRlZC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IFwib3V0cHV0LWRlbmllZFwiKSB7XG4gICAgICAgICAgY29uc3QgcmVhc29uID0gKHVwZGF0ZWQucGFydCBhcyB7IGFwcHJvdmFsPzogeyByZWFzb24/OiBzdHJpbmcgfSB9KVxuICAgICAgICAgICAgLmFwcHJvdmFsPy5yZWFzb247XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBgVG9vbCBcIiR7dG9vbE5hbWV9XCIgZGVuaWVkOiAke3JlYXNvbiB8fCBcInVzZXIgZGVuaWVkXCJ9YCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwcm92YWwgPSAoXG4gICAgICAgICAgdXBkYXRlZC5wYXJ0IGFzIHtcbiAgICAgICAgICAgIGFwcHJvdmFsPzogeyBhcHByb3ZlZDogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG4gICAgICAgICAgfVxuICAgICAgICApLmFwcHJvdmFsO1xuICAgICAgICBpZiAoYXBwcm92YWw/LmFwcHJvdmVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoKTtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG91dHB1dDogcmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLFxuICAgICAgICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICAgICAgICBlcnJvclRleHQ6IGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IGBUb29sIFwiJHt0b29sTmFtZX1cIiBkZW5pZWQ6ICR7YXBwcm92YWw/LnJlYXNvbiB8fCBcInVzZXIgZGVuaWVkXCJ9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIFBPTExfTVMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZFxuICAgICAgICA/IFwiaW50ZXJydXB0ZWRcIlxuICAgICAgICA6IFwiQXBwcm92YWwgdGltZWQgb3V0XCIsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB0b29sQ29udGV4dDogVG9vbENvbnRleHQgPSB7XG4gICAgY29udGV4dCxcbiAgICBzdGF0ZSxcbiAgICBzZXNzaW9uSWQsXG4gICAgc2FuZGJveCxcbiAgICBtZXNzYWdlczogbWVzc2FnZXMgYXMgVG9vbENvbnRleHRbXCJtZXNzYWdlc1wiXSxcbiAgfTtcblxuICByYXdUb29sc1tidWlsdGluVG9vbE5hbWVzLkphdmFTY3JpcHRdID0gY3JlYXRlSmF2YVNjcmlwdFRvb2woe1xuICAgIHRvb2xzOiByYXdUb29scyxcbiAgICBzYW5kYm94LFxuICAgIGFjdGl2ZVRvb2xzLFxuICAgIG9uU3ViVG9vbENhbGwsXG4gICAgdG9vbENvbnRleHQsXG4gIH0pO1xuXG4gIGNvbnN0IHRvb2xzV2l0aE5lZWRzQXBwcm92YWwgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmF3VG9vbHMpLm1hcCgoW25hbWUsIHRdKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbEV4ZWN1dGUgPSB0LmV4ZWN1dGU7XG4gICAgICBjb25zdCB3cmFwcGVkRXhlY3V0ZSA9IG9yaWdpbmFsRXhlY3V0ZVxuICAgICAgICA/IGFzeW5jICguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBvcmlnaW5hbEV4ZWN1dGU+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb25lID0gc3RlcExvZy50aW1lKGB0b29sOiR7bmFtZX1gKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGxldCB0b29sSW5wdXQgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICBpZiAoYWdlbnQuaG9va3NbXCJ0b29sLmJlZm9yZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVJlc3VsdCA9IGF3YWl0IGFnZW50Lmhvb2tzW1widG9vbC5iZWZvcmVcIl0oe1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlUmVzdWx0Py5pbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICB0b29sSW5wdXQgPSBiZWZvcmVSZXN1bHQuaW5wdXQ7XG4gICAgICAgICAgICAgICAgICBhcmdzWzBdID0gdG9vbElucHV0IGFzICh0eXBlb2YgYXJncylbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG9yaWdpbmFsRXhlY3V0ZSguLi5hcmdzKTtcblxuICAgICAgICAgICAgICBpZiAoYWdlbnQuaG9va3NbXCJ0b29sLmFmdGVyXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJSZXN1bHQgPSBhd2FpdCBhZ2VudC5ob29rc1tcInRvb2wuYWZ0ZXJcIl0oe1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJSZXN1bHQ/LnJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZnRlclJlc3VsdC5yZXN1bHQgYXMgdHlwZW9mIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGRvbmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICAuLi4od3JhcHBlZEV4ZWN1dGUgPyB7IGV4ZWN1dGU6IHdyYXBwZWRFeGVjdXRlIH0gOiB7fSksXG4gICAgICAgICAgbmVlZHNBcHByb3ZhbDogYXN5bmMgKFxuICAgICAgICAgICAgdG9vbElucHV0OiB1bmtub3duLFxuICAgICAgICAgICAgb3B0czogeyB0b29sQ2FsbElkOiBzdHJpbmc7IG1lc3NhZ2VzOiB1bmtub3duW10gfVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNoZWNrTmVlZHNBcHByb3ZhbCh7XG4gICAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgICB0b29sTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogb3B0cy50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBtZXNzYWdlczogb3B0cy5tZXNzYWdlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIHsgcmF3VG9vbHMsIHRvb2xzV2l0aE5lZWRzQXBwcm92YWwsIHRvb2xDb250ZXh0IH07XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBUb29sU2V0LCB0b29sIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBidWlsdEluVG9vbHMgfSBmcm9tIFwiLlwiO1xuXG5leHBvcnQgY29uc3QgSkFWQVNDUklQVF9UT09MX05BTUUgPSBcIkphdmFTY3JpcHRcIjtcblxuZXhwb3J0IHR5cGUgU3ViVG9vbENhbGxSZXN1bHQgPSB7IHJlc3VsdD86IHVua25vd247IGVycm9yPzogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBPblN1YlRvb2xDYWxsID0gKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICBpbnB1dDogdW5rbm93bixcbiAgZXhlY3V0ZTogKCkgPT4gUHJvbWlzZTx1bmtub3duPlxuKSA9PiBQcm9taXNlPFN1YlRvb2xDYWxsUmVzdWx0PjtcblxuY29uc3QgUkVRVUVTVF9NQVJLRVJfU1RBUlQgPSBcIl9fVE9PTF9SRVFVRVNUX19cIjtcbmNvbnN0IFJFUVVFU1RfTUFSS0VSX0VORCA9IFwiX19UT09MX1JFUVVFU1RfRU5EX19cIjtcbmNvbnN0IEVYRUNVVElPTl9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBUaGUgcnVubmVyIHNjcmlwdCBpcyB3cml0dGVuIHRvIHRoZSBzYW5kYm94IGFuZCBleGVjdXRlZCB2aWEgTm9kZS5qcy5cbiAqIEl0IHJlYWRzIHRoZSBtb2RlbCdzIGNvZGUgZnJvbSBjb2RlLmpzLCBzZXRzIHVwIGN0eC50b29scyBhcyBSUEMgcHJveGllc1xuICogKHJlcXVlc3RzIHNlbnQgdmlhIHN0ZGVyciBtYXJrZXJzLCByZXNwb25zZXMgcG9sbGVkIGZyb20gZmlsZXMpLCBleGVjdXRlc1xuICogdGhlIGNvZGUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byBzdGRvdXQgYXMgSlNPTi5cbiAqL1xuY29uc3QgUlVOTkVSX1NDUklQVCA9IGBcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYywgdW5saW5rU3luYywgbWtkaXJTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luLCBkaXJuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5cbmNvbnN0IFNDUklQVF9ESVIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBUT09MX0NBTExfVElNRU9VVF9NUyA9IDMwMF8wMDA7XG5cbmxldCByZXFDb3VudGVyID0gMDtcblxuYXN5bmMgZnVuY3Rpb24gY2FsbFRvb2wobmFtZSwgaW5wdXQpIHtcbiAgY29uc3QgaWQgPSAncmVxXycgKyAoKytyZXFDb3VudGVyKSArICdfJyArIERhdGUubm93KCk7XG4gIGNvbnN0IHJlc3BvbnNlRmlsZSA9IGpvaW4oU0NSSVBUX0RJUiwgaWQgKyAnLnJlc3BvbnNlLmpzb24nKTtcblxuICBjb25zdCByZXF1ZXN0ID0gSlNPTi5zdHJpbmdpZnkoeyBpZCwgdG9vbDogbmFtZSwgaW5wdXQgfSk7XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKCcke1JFUVVFU1RfTUFSS0VSX1NUQVJUfScgKyByZXF1ZXN0ICsgJyR7UkVRVUVTVF9NQVJLRVJfRU5EfScgKyAnXFxcXG4nKTtcblxuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIHdoaWxlICghZXhpc3RzU3luYyhyZXNwb25zZUZpbGUpKSB7XG4gICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+IFRPT0xfQ0FMTF9USU1FT1VUX01TKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rvb2wgY2FsbCAnICsgbmFtZSArICcgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlJyk7XG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAzMCkpO1xuICB9XG5cbiAgbGV0IHJhdztcbiAgdHJ5IHtcbiAgICByYXcgPSByZWFkRmlsZVN5bmMocmVzcG9uc2VGaWxlLCAndXRmOCcpO1xuICB9IGNhdGNoIHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICByYXcgPSByZWFkRmlsZVN5bmMocmVzcG9uc2VGaWxlLCAndXRmOCcpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJhdyk7XG4gIHRyeSB7IHVubGlua1N5bmMocmVzcG9uc2VGaWxlKTsgfSBjYXRjaCB7fVxuXG4gIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdDtcbn1cblxuY29uc3QgY29kZSA9IHJlYWRGaWxlU3luYyhqb2luKFNDUklQVF9ESVIsICdjb2RlLmpzJyksICd1dGY4Jyk7XG5jb25zdCB0b29sTmFtZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKFNDUklQVF9ESVIsICd0b29scy5qc29uJyksICd1dGY4JykpO1xuXG5jb25zdCBjdHggPSB7IHRvb2xzOiB7fSB9O1xuZm9yIChjb25zdCBuYW1lIG9mIHRvb2xOYW1lcykge1xuICBjdHgudG9vbHNbbmFtZV0gPSAoaW5wdXQpID0+IGNhbGxUb29sKG5hbWUsIGlucHV0KTtcbn1cblxuY29uc3QgbG9ncyA9IFtdO1xuY29uc3QgY3VzdG9tQ29uc29sZSA9IHtcbiAgbG9nOiAoLi4uYXJncykgPT4gbG9ncy5wdXNoKGFyZ3MubWFwKGEgPT4gdHlwZW9mIGEgPT09ICdzdHJpbmcnID8gYSA6IEpTT04uc3RyaW5naWZ5KGEpKS5qb2luKCcgJykpLFxuICBlcnJvcjogKC4uLmFyZ3MpID0+IGxvZ3MucHVzaCgnW2Vycm9yXSAnICsgYXJncy5tYXAoYSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgPyBhIDogSlNPTi5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKSksXG4gIHdhcm46ICguLi5hcmdzKSA9PiBsb2dzLnB1c2goJ1t3YXJuXSAnICsgYXJncy5tYXAoYSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgPyBhIDogSlNPTi5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKSksXG59O1xuXG50cnkge1xuICBjb25zdCBBc3luY0Z1bmN0aW9uID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKCkge30pLmNvbnN0cnVjdG9yO1xuICBjb25zdCBmbiA9IG5ldyBBc3luY0Z1bmN0aW9uKCdjdHgnLCAnY29uc29sZScsIGNvZGUpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbihjdHgsIGN1c3RvbUNvbnNvbGUpO1xuXG4gIGNvbnN0IG91dHB1dCA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiByZXN1bHQgIT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IG51bGwgfTtcbiAgaWYgKGxvZ3MubGVuZ3RoID4gMCkgb3V0cHV0LmxvZ3MgPSBsb2dzO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShvdXRwdXQpKTtcbn0gY2F0Y2ggKGVycikge1xuICBjb25zdCBvdXRwdXQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgfTtcbiAgaWYgKGxvZ3MubGVuZ3RoID4gMCkgb3V0cHV0LmxvZ3MgPSBsb2dzO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShvdXRwdXQpKTtcbn1cbmA7XG5cbi8qKlxuICogRXh0cmFjdHMgYSBwbGFpbiBKU09OIFNjaGVtYSBmcm9tIHdoYXRldmVyIGZvcm1hdCB0aGUgQUkgU0RLIHRvb2wgdXNlc1xuICogKFpvZCBzY2hlbWEsIEFJIFNESyB3cmFwcGVkIHNjaGVtYSwgb3IgcmF3IEpTT04gU2NoZW1hKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RKc29uU2NoZW1hKFxuICBzY2hlbWE6IHVua25vd25cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB7XG4gIGlmICghc2NoZW1hIHx8IHR5cGVvZiBzY2hlbWEgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChcbiAgICBcIl9kZWZcIiBpbiBzY2hlbWEgJiZcbiAgICB0eXBlb2YgKHNjaGVtYSBhcyB7IF9kZWY6IHVua25vd24gfSkuX2RlZiA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHoudG9KU09OU2NoZW1hKHNjaGVtYSBhcyB6LlpvZFR5cGUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcyA9IHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPjtcbiAgaWYgKFN5bWJvbC5mb3IoXCJ2ZXJjZWwuYWkuc2NoZW1hXCIpIGluIHMgJiYgXCJqc29uU2NoZW1hXCIgaW4gcykge1xuICAgIHJldHVybiBzLmpzb25TY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICBpZiAoXCJ0eXBlXCIgaW4gcyB8fCBcInByb3BlcnRpZXNcIiBpbiBzKSB7XG4gICAgcmV0dXJuIHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpzb25TY2hlbWFUb1RzKFxuICBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBpbmRlbnQgPSAwXG4pOiBzdHJpbmcge1xuICBpZiAoIXNjaGVtYSkge1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxuXG4gIGlmIChzY2hlbWEuZW51bSAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5lbnVtKSkge1xuICAgIHJldHVybiBzY2hlbWEuZW51bS5tYXAoKHYpID0+IEpTT04uc3RyaW5naWZ5KHYpKS5qb2luKFwiIHwgXCIpO1xuICB9XG5cbiAgaWYgKHNjaGVtYS5hbnlPZiAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5hbnlPZikpIHtcbiAgICByZXR1cm4gc2NoZW1hLmFueU9mXG4gICAgICAubWFwKChzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ganNvblNjaGVtYVRvVHMocywgaW5kZW50KSlcbiAgICAgIC5qb2luKFwiIHwgXCIpO1xuICB9XG4gIGlmIChzY2hlbWEub25lT2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5vbmVPZlxuICAgICAgLm1hcCgoczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGpzb25TY2hlbWFUb1RzKHMsIGluZGVudCkpXG4gICAgICAuam9pbihcIiB8IFwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZSBhcyBzdHJpbmc7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSBcImFycmF5XCI6IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zXG4gICAgICAgID8ganNvblNjaGVtYVRvVHMoc2NoZW1hLml0ZW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBpbmRlbnQpXG4gICAgICAgIDogXCJ1bmtub3duXCI7XG4gICAgICByZXR1cm4gYEFycmF5PCR7aXRlbXN9PmA7XG4gICAgfVxuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzIGFzXG4gICAgICAgIHwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBcIlJlY29yZDxzdHJpbmcsIHVua25vd24+XCI7XG4gICAgICB9XG4gICAgICBjb25zdCByZXF1aXJlZCA9IG5ldyBTZXQoKHNjaGVtYS5yZXF1aXJlZCBhcyBzdHJpbmdbXSkgfHwgW10pO1xuICAgICAgY29uc3QgcGFkID0gXCIgIFwiLnJlcGVhdChpbmRlbnQgKyAxKTtcbiAgICAgIGNvbnN0IGNsb3NlUGFkID0gXCIgIFwiLnJlcGVhdChpbmRlbnQpO1xuICAgICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBvcHQgPSByZXF1aXJlZC5oYXMoa2V5KSA/IFwiXCIgOiBcIj9cIjtcbiAgICAgICAgcmV0dXJuIGAke3BhZH0ke2tleX0ke29wdH06ICR7anNvblNjaGVtYVRvVHModmFsdWUsIGluZGVudCArIDEpfWA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBge1xcbiR7cHJvcHMuam9pbihcIjtcXG5cIil9O1xcbiR7Y2xvc2VQYWR9fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29udGV4dFR5cGVTdHJpbmcodG9vbHM6IFRvb2xTZXQpOiBzdHJpbmcge1xuICBjb25zdCBzaWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW25hbWUsIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRvb2xzKSkge1xuICAgIGNvbnN0IHJhdyA9IHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgaW5wdXRTY2hlbWEgPSBleHRyYWN0SnNvblNjaGVtYShyYXcuaW5wdXRTY2hlbWEgPz8gcmF3LnBhcmFtZXRlcnMpO1xuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IGV4dHJhY3RKc29uU2NoZW1hKHJhdy5vdXRwdXRTY2hlbWEpO1xuXG4gICAgY29uc3QgaW5wdXRUeXBlID0gaW5wdXRTY2hlbWEgPyBqc29uU2NoZW1hVG9UcyhpbnB1dFNjaGVtYSwgMikgOiBcInt9XCI7XG4gICAgY29uc3Qgb3V0cHV0VHlwZSA9IG91dHB1dFNjaGVtYVxuICAgICAgPyBqc29uU2NoZW1hVG9UcyhvdXRwdXRTY2hlbWEsIDIpXG4gICAgICA6IFwidW5rbm93blwiO1xuXG4gICAgc2lncy5wdXNoKGAgICAgJHtuYW1lfShpbnB1dDogJHtpbnB1dFR5cGV9KTogUHJvbWlzZTwke291dHB1dFR5cGV9PmApO1xuICB9XG5cbiAgcmV0dXJuIGB0eXBlIENvbnRleHQgPSB7XFxuICB0b29sczoge1xcbiR7c2lncy5qb2luKFwiO1xcblwiKX07XFxuICB9XFxufWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVJblNhbmRib3goe1xuICBjb2RlLFxuICBycGNEaXIsXG4gIGFib3J0Q29udHJvbGxlcixcbiAgc2FuZGJveCxcbiAgYXZhaWxhYmxlVG9vbHMsXG4gIG9uU3ViVG9vbENhbGwsXG4gIHRvb2xDb250ZXh0LFxufToge1xuICBjb2RlOiBzdHJpbmc7XG4gIHJwY0Rpcjogc3RyaW5nO1xuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBhdmFpbGFibGVUb29sczogVG9vbFNldDtcbiAgb25TdWJUb29sQ2FsbD86IE9uU3ViVG9vbENhbGw7XG4gIHRvb2xDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBta2RpclJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJta2RpclwiLFxuICAgIGFyZ3M6IFtcIi1wXCIsIHJwY0Rpcl0sXG4gIH0pO1xuICBpZiAobWtkaXJSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogbWtkaXJSZXN1bHQubWVzc2FnZSB9O1xuICB9XG4gIGF3YWl0IG1rZGlyUmVzdWx0LnJlc3VsdDtcblxuICBhd2FpdCBzYW5kYm94LndyaXRlRmlsZXMoe1xuICAgIGZpbGVzOiBbXG4gICAgICB7IHBhdGg6IFwicnVubmVyLm1qc1wiLCBjb250ZW50OiBSVU5ORVJfU0NSSVBUIH0sXG4gICAgICB7IHBhdGg6IFwiY29kZS5qc1wiLCBjb250ZW50OiBjb2RlIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IFwidG9vbHMuanNvblwiLFxuICAgICAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhhdmFpbGFibGVUb29scykpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGRlc3RQYXRoOiBycGNEaXIsXG4gIH0pO1xuXG4gIGNvbnN0IG5vZGVNYWpvciA9IE51bWJlci5wYXJzZUludChwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoXCIuXCIpWzBdLCAxMCk7XG4gIGNvbnN0IHBlcm1pc3Npb25GbGFnID1cbiAgICBub2RlTWFqb3IgPj0gMjIgPyBcIi0tcGVybWlzc2lvblwiIDogXCItLWV4cGVyaW1lbnRhbC1wZXJtaXNzaW9uXCI7XG5cbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJub2RlXCIsXG4gICAgYXJnczogW1xuICAgICAgcGVybWlzc2lvbkZsYWcsXG4gICAgICBgLS1hbGxvdy1mcy1yZWFkPSR7cnBjRGlyfWAsXG4gICAgICBgLS1hbGxvdy1mcy13cml0ZT0ke3JwY0Rpcn1gLFxuICAgICAgYCR7cnBjRGlyfS9ydW5uZXIubWpzYCxcbiAgICBdLFxuICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgfSk7XG5cbiAgaWYgKGV4ZWNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXhlY1Jlc3VsdC5tZXNzYWdlIH07XG4gIH1cblxuICBjb25zdCBmYXRhbDogeyBlcnJvcjogRXJyb3IgfCBudWxsIH0gPSB7IGVycm9yOiBudWxsIH07XG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgaWYgKCFmYXRhbC5lcnJvcikge1xuICAgICAgZmF0YWwuZXJyb3IgPSBlcnJvcjtcbiAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb29sUmVxdWVzdCA9IGFzeW5jIChyZXF1ZXN0SnNvbjogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHBhcnNlZDogeyBpZDogc3RyaW5nOyB0b29sOiBzdHJpbmc7IGlucHV0OiB1bmtub3duIH07XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmVxdWVzdEpzb24pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaWQsIHRvb2w6IHRvb2xOYW1lLCBpbnB1dCB9ID0gcGFyc2VkO1xuXG4gICAgbGV0IHJlc3BvbnNlOiB7IHJlc3VsdD86IHVua25vd247IGVycm9yPzogc3RyaW5nIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBhdmFpbGFibGVUb29sc1t0b29sTmFtZV07XG4gICAgICBpZiAoIXQ/LmV4ZWN1dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUb29sICR7dG9vbE5hbWV9IG5vdCBmb3VuZCBvciBoYXMgbm8gZXhlY3V0ZSBmdW5jdGlvbmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4ZWMgPSB0LmV4ZWN1dGUuYmluZCh0KTtcbiAgICAgIGNvbnN0IGV4ZWNPcHRpb25zID0ge1xuICAgICAgICB0b29sQ2FsbElkOiBganNfJHt0b29sTmFtZX1fJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIG1lc3NhZ2VzOiBbXSxcbiAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgfTtcbiAgICAgIGlmIChvblN1YlRvb2xDYWxsKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgb25TdWJUb29sQ2FsbCh0b29sTmFtZSwgaW5wdXQsICgpID0+XG4gICAgICAgICAgZXhlYyhpbnB1dCwgZXhlY09wdGlvbnMpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjKGlucHV0LCBleGVjT3B0aW9ucyk7XG4gICAgICAgIHJlc3BvbnNlID0geyByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIHJlc3BvbnNlID0geyBlcnJvcjogbXNnIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgICAgIGZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF0aDogYCR7aWR9LnJlc3BvbnNlLmpzb25gLFxuICAgICAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRlc3RQYXRoOiBycGNEaXIsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qKlxuICAgICAgICogSWYgd3JpdGluZyB0aGUgcmVzcG9uc2UgZmlsZSBmYWlscywgdGhlIHJ1bm5lciB3aWxsIHBvbGwgZm9yZXZlclxuICAgICAgICogd2FpdGluZyBmb3IgaXQuIEFib3J0IHRoZSBydW5uZXIgcHJvY2VzcyBzbyB3ZSBkb24ndCBkZWFkbG9jay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgYWJvcnQobmV3IEVycm9yKGBGYWlsZWQgdG8gd3JpdGUgUlBDIHJlc3BvbnNlIGZvciAke3Rvb2xOYW1lfTogJHttc2d9YCkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB0b29sQ2FsbFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgbGV0IHN0ZGVyckJ1ZmZlciA9IFwiXCI7XG4gIGxldCBub25NYXJrZXJTdGRlcnIgPSBcIlwiO1xuXG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBhYm9ydChcbiAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgYEphdmFTY3JpcHQgZXhlY3V0aW9uIHRpbWVkIG91dCBhZnRlciAke0VYRUNVVElPTl9USU1FT1VUX01TIC8gMTAwMH1zYFxuICAgICAgKVxuICAgICk7XG4gIH0sIEVYRUNVVElPTl9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2YgZXhlY1Jlc3VsdC5sb2dzKCkpIHtcbiAgICAgIGlmIChmYXRhbC5lcnJvcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LnN0cmVhbSA9PT0gXCJzdGRlcnJcIikge1xuICAgICAgICBzdGRlcnJCdWZmZXIgKz0gZW50cnkuZGF0YTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gc3RkZXJyQnVmZmVyLmluZGV4T2YoUkVRVUVTVF9NQVJLRVJfU1RBUlQpO1xuICAgICAgICAgIGlmIChzdGFydElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJlZm9yZU1hcmtlciA9IHN0ZGVyckJ1ZmZlci5zbGljZSgwLCBzdGFydElkeCk7XG4gICAgICAgICAgaWYgKGJlZm9yZU1hcmtlci50cmltKCkpIHtcbiAgICAgICAgICAgIG5vbk1hcmtlclN0ZGVyciArPSBiZWZvcmVNYXJrZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29udGVudFN0YXJ0ID0gc3RhcnRJZHggKyBSRVFVRVNUX01BUktFUl9TVEFSVC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgZW5kSWR4ID0gc3RkZXJyQnVmZmVyLmluZGV4T2YoUkVRVUVTVF9NQVJLRVJfRU5ELCBjb250ZW50U3RhcnQpO1xuICAgICAgICAgIGlmIChlbmRJZHggPT09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXF1ZXN0SnNvbiA9IHN0ZGVyckJ1ZmZlci5zbGljZShjb250ZW50U3RhcnQsIGVuZElkeCk7XG4gICAgICAgICAgc3RkZXJyQnVmZmVyID0gc3RkZXJyQnVmZmVyLnNsaWNlKGVuZElkeCArIFJFUVVFU1RfTUFSS0VSX0VORC5sZW5ndGgpO1xuXG4gICAgICAgICAgdG9vbENhbGxQcm9taXNlcy5wdXNoKGhhbmRsZVRvb2xSZXF1ZXN0KHJlcXVlc3RKc29uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG5cbiAgaWYgKHN0ZGVyckJ1ZmZlci50cmltKCkpIHtcbiAgICBub25NYXJrZXJTdGRlcnIgKz0gc3RkZXJyQnVmZmVyO1xuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRvb2xDYWxsUHJvbWlzZXMpO1xuXG4gIGlmIChmYXRhbC5lcnJvcikge1xuICAgIGV4ZWNSZXN1bHQucmVzdWx0LmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6IGZhdGFsLmVycm9yLm1lc3NhZ2UsXG4gICAgICAuLi4obm9uTWFya2VyU3RkZXJyID8geyBzdGRlcnI6IG5vbk1hcmtlclN0ZGVyci5zbGljZSgwLCAyMDAwKSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZSB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogYFJ1bm5lciBmYWlsZWQgKGV4aXQgJHtleGl0Q29kZX0pLmAsXG4gICAgICBzdGRlcnI6IChub25NYXJrZXJTdGRlcnIgKyBzdGRlcnIpLnNsaWNlKDAsIDIwMDApLFxuICAgICAgc3Rkb3V0OiBzdGRvdXQuc2xpY2UoMCwgMTAwMCksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSmF2YVNjcmlwdFRvb2wob3B0czoge1xuICB0b29sczogVG9vbFNldDtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBhY3RpdmVUb29scz86IHN0cmluZ1tdO1xuICBvblN1YlRvb2xDYWxsPzogT25TdWJUb29sQ2FsbDtcbiAgdG9vbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pIHtcbiAgY29uc3QgeyBzYW5kYm94LCBvblN1YlRvb2xDYWxsIH0gPSBvcHRzO1xuICBjb25zdCBhY3RpdmVTZXQgPSBvcHRzLmFjdGl2ZVRvb2xzID8gbmV3IFNldChvcHRzLmFjdGl2ZVRvb2xzKSA6IG51bGw7XG4gIGNvbnN0IGF2YWlsYWJsZVRvb2xzOiBUb29sU2V0ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIHRdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMudG9vbHMpKSB7XG4gICAgaWYgKCFhY3RpdmVTZXQgfHwgYWN0aXZlU2V0LmhhcyhuYW1lKSkge1xuICAgICAgYXZhaWxhYmxlVG9vbHNbbmFtZV0gPSB0O1xuICAgIH1cbiAgfVxuICBjb25zdCBjb250ZXh0VHlwZSA9IGdlbmVyYXRlQ29udGV4dFR5cGVTdHJpbmcoYXZhaWxhYmxlVG9vbHMpO1xuXG4gIHJldHVybiB0b29sKHtcbiAgICAuLi5idWlsdEluVG9vbHMuSmF2YVNjcmlwdCxcbiAgICBkZXNjcmlwdGlvbjogYEV4ZWN1dGUgSmF2YVNjcmlwdCB0byBvcmNoZXN0cmF0ZSBtdWx0aXBsZSB0b29sIGNhbGxzIGluIGEgc2luZ2xlIHN0ZXAuIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgdG8gcnVuIHNldmVyYWwgdG9vbHMgaW4gc2VxdWVuY2UsIHRyYW5zZm9ybSBpbnRlcm1lZGlhdGUgcmVzdWx0cywgb3IgcGFyYWxsZWxpemUgaW5kZXBlbmRlbnQgb3BlcmF0aW9ucyB3aXRoIFByb21pc2UuYWxsLlxuXG5UaGUgY29kZSBydW5zIGFzIGFuIGFzeW5jIGZ1bmN0aW9uIGJvZHkgd2l0aCBcXGBjdHhcXGAgaW4gc2NvcGU6XG5cblxcYFxcYFxcYHR5cGVzY3JpcHRcbiR7Y29udGV4dFR5cGV9XG5cXGBcXGBcXGBcblxuRXhhbXBsZXM6XG4tIFNlcXVlbnRpYWw6IFxcYGNvbnN0IGZpbGUgPSBhd2FpdCBjdHgudG9vbHMuUmVhZCh7IHBhdGg6IFwicGFja2FnZS5qc29uXCIgfSk7IHJldHVybiBKU09OLnBhcnNlKGZpbGUuY29udGVudCk7XFxgXG4tIFBhcmFsbGVsOiBcXGBjb25zdCBbYSwgYl0gPSBhd2FpdCBQcm9taXNlLmFsbChbY3R4LnRvb2xzLlJlYWQoeyBwYXRoOiBcImEudHNcIiB9KSwgY3R4LnRvb2xzLlJlYWQoeyBwYXRoOiBcImIudHNcIiB9KV0pOyByZXR1cm4geyBhOiBhLmNvbnRlbnQsIGI6IGIuY29udGVudCB9O1xcYFxuLSBUcmFuc2Zvcm06IFxcYGNvbnN0IGdyZXAgPSBhd2FpdCBjdHgudG9vbHMuR3JlcCh7IHBhdHRlcm46IFwiVE9ET1wiIH0pOyByZXR1cm4gZ3JlcC5tYXRjaGVzLnNwbGl0KFwiXFxcXG5cIikubGVuZ3RoO1xcYFxuLSBCYXNoOiBcXGBjb25zdCByID0gYXdhaXQgY3R4LnRvb2xzLkJhc2goeyBjb21tYW5kOiBcIm5vZGUgLWUgXFxcXFwiY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe3Y6MX0pKVxcXFxcIlwiIH0pOyByZXR1cm4gSlNPTi5wYXJzZShyLnN0ZG91dCk7XFxgXG5cblJldHVybiBhIHZhbHVlIHRvIHBhc3MgcmVzdWx0cyBiYWNrLiBVc2UgY29uc29sZS5sb2coKSBmb3IgZGVidWcgb3V0cHV0LlxuSW1wb3J0YW50OiBFYWNoIHRvb2wgcmV0dXJucyBhIHN0cnVjdHVyZWQgb2JqZWN0IG1hdGNoaW5nIGl0cyBvdXRwdXQgc2NoZW1hIFx1MjAxNCBub3QgYSByYXcgc3RyaW5nLiBBY2Nlc3MgdGhlIHNwZWNpZmljIGZpZWxkIHlvdSBuZWVkIChlLmcuIEJhc2gncyByZXN1bHQuc3Rkb3V0LCBSZWFkJ3MgcmVzdWx0LmNvbnRlbnQpIHJhdGhlciB0aGFuIHRyeWluZyB0byBwYXJzZSB0aGUgZW50aXJlIHJlc3VsdC5gLFxuICAgIGV4ZWN1dGU6ICh7IGNvZGUgfSkgPT4ge1xuICAgICAgY29uc3QgcnVuSWQgPSBgcnVuXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpXG4gICAgICAgIC50b1N0cmluZygzNilcbiAgICAgICAgLnNsaWNlKDIsIDgpfWA7XG4gICAgICBjb25zdCBycGNEaXIgPSBgLmFnZW50L2pzLXJwYy8ke3J1bklkfWA7XG4gICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgIHJldHVybiBleGVjdXRlSW5TYW5kYm94KHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgcnBjRGlyLFxuICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgIHNhbmRib3gsXG4gICAgICAgIGF2YWlsYWJsZVRvb2xzLFxuICAgICAgICBvblN1YlRvb2xDYWxsLFxuICAgICAgICB0b29sQ29udGV4dDogb3B0cy50b29sQ29udGV4dCxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQnVpbHRJblRvb2xOYW1lIH0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLyoqIEJ1aWx0LWluIGRlZmF1bHRzIGZvciBuZWVkc0FwcHJvdmFsICh1c2VyIGNhbiBvdmVycmlkZSB2aWEgYWdlbnQgY29uZmlnKS4gKi9cbmNvbnN0IGJ1aWx0aW5OZWVkc0FwcHJvdmFsOiBQYXJ0aWFsPFJlY29yZDxCdWlsdEluVG9vbE5hbWUsIGJvb2xlYW4+PiA9IHt9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tOZWVkc0FwcHJvdmFsKHtcbiAgYWdlbnQsXG4gIHRvb2xOYW1lLFxuICBpbnB1dCxcbiAgdG9vbENhbGxJZCxcbiAgbWVzc2FnZXMsXG59OiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgdG9vbE5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgbWVzc2FnZXM6IHVua25vd25bXTtcbn0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gMS4gUGVyLXRvb2wgbmVlZHNBcHByb3ZhbCBvbiB0aGUgVG9vbCBkZWZpbml0aW9uIHRha2VzIHByaW9yaXR5XG4gIGNvbnN0IHRvb2xEZWYgPSBhZ2VudC5vcHRpb25zLnRvb2xzPy5bdG9vbE5hbWVdIGFzIFRvb2wgfCB1bmRlZmluZWQ7XG4gIGlmICh0b29sRGVmPy5uZWVkc0FwcHJvdmFsICE9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHRvb2xEZWYubmVlZHNBcHByb3ZhbCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB0b29sRGVmLm5lZWRzQXBwcm92YWw7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0b29sRGVmLm5lZWRzQXBwcm92YWwoaW5wdXQsIHtcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgICBtZXNzYWdlczogbWVzc2FnZXMgYXMgbmV2ZXJbXSxcbiAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyAyLiBBZ2VudC1sZXZlbCBuZWVkc0FwcHJvdmFsIG1hcFxuICBjb25zdCBhZ2VudEVudHJ5ID0gKFxuICAgIGFnZW50Lm9wdGlvbnMubmVlZHNBcHByb3ZhbCBhc1xuICAgICAgfCBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIGJvb2xlYW4gfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pXG4gICAgICAgID5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk/Llt0b29sTmFtZV07XG5cbiAgaWYgKGFnZW50RW50cnkgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgYWdlbnRFbnRyeSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBhZ2VudEVudHJ5O1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgYWdlbnRFbnRyeShpbnB1dCwge1xuICAgICAgdG9vbENhbGxJZCxcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDMuIEJ1aWx0LWluIGRlZmF1bHRzXG4gIHJldHVybiBidWlsdGluTmVlZHNBcHByb3ZhbFt0b29sTmFtZSBhcyBCdWlsdEluVG9vbE5hbWVdID8/IGZhbHNlO1xufVxuIiwgImltcG9ydCB7XG4gIHRvb2wgYXMgYWlUb29sLFxuICB0eXBlIFRvb2wsXG4gIHR5cGUgVG9vbEV4ZWN1dGlvbk9wdGlvbnMsXG4gIHR5cGUgVUlNZXNzYWdlLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBUb29sQ29udGV4dCB9IGZyb20gXCIuL2luZGV4XCI7XG5cbi8qKlxuICogRGVmaW5lIGFuIGFnZW50IHRvb2wgd2l0aCB0eXBlZCBjb250ZXh0IGFuZCBzdGF0ZS5cbiAqXG4gKiBQYXNzIHRoZSBzYW1lIGBjb250ZXh0U2NoZW1hYCBhbmQvb3IgYHN0YXRlU2NoZW1hYCAoWm9kIG9iamVjdHMpIHVzZWQgaW5cbiAqIHlvdXIgYWdlbnQgZGVmaW5pdGlvbiB0byBnZXQgdHlwZWQgYGNvbnRleHRgIGFuZCBgc3RhdGVgIGluc2lkZSBgZXhlY3V0ZWAuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRvb2wgfSBmcm9tIFwiZXhwZXJpbWVudGFsLWFnZW50XCI7XG4gKiBpbXBvcnQgeyBjb250ZXh0U2NoZW1hLCBzdGF0ZVNjaGVtYSB9IGZyb20gXCIuL2NvbnRleHRcIjtcbiAqXG4gKiBleHBvcnQgY29uc3QgTXlUb29sID0gdG9vbCh7XG4gKiAgIGNvbnRleHRTY2hlbWEsXG4gKiAgIHN0YXRlU2NoZW1hLFxuICogICBpbnB1dFNjaGVtYTogei5vYmplY3QoeyBxdWVyeTogei5zdHJpbmcoKSB9KSxcbiAqICAgZXhlY3V0ZTogYXN5bmMgKHsgcXVlcnkgfSwgeyBjb250ZXh0LCBzdGF0ZSwgc2FuZGJveCB9KSA9PiB7XG4gKiAgICAgY29udGV4dC5jaGFubmVsSWQgLy8gXHUyNzEzIHR5cGVkIGZyb20gY29udGV4dFNjaGVtYVxuICogICAgIHN0YXRlLmNvdW50ZXIrKyAgIC8vIFx1MjcxMyB0eXBlZCBmcm9tIHN0YXRlU2NoZW1hLCBtdXRhYmxlXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbDxcbiAgVElucHV0U2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlLFxuICBUQ29udGV4dFNjaGVtYSBleHRlbmRzIHouWm9kVHlwZSA9IHouWm9kVHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIFRTdGF0ZVNjaGVtYSBleHRlbmRzIHouWm9kVHlwZSA9IHouWm9kVHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogZGVmYXVsdCBlcmFzZWRcbiAgVE91dHB1dFNjaGVtYSBleHRlbmRzIHouWm9kVHlwZSA9IHouWm9kVHlwZTxhbnk+LFxuPihkZWY6IHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlucHV0U2NoZW1hOiBUSW5wdXRTY2hlbWE7XG4gIG91dHB1dFNjaGVtYT86IFRPdXRwdXRTY2hlbWE7XG4gIGNvbnRleHRTY2hlbWE/OiBUQ29udGV4dFNjaGVtYTtcbiAgc3RhdGVTY2hlbWE/OiBUU3RhdGVTY2hlbWE7XG4gIGV4ZWN1dGU/OiAoXG4gICAgaW5wdXQ6IHouaW5mZXI8VElucHV0U2NoZW1hPixcbiAgICBvcHRpb25zOiBUb29sQ29udGV4dDx6LmluZmVyPFRDb250ZXh0U2NoZW1hPiwgei5pbmZlcjxUU3RhdGVTY2hlbWE+PiAmIHtcbiAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgICB9XG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBleGVjdXRlIGNhbiByZXR1cm4gYW55dGhpbmdcbiAgKSA9PiBhbnk7XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogZXJhc2VkIHRvb2wgZ2VuZXJpY3Ncbn0pOiBUb29sPGFueSwgYW55PiB7XG4gIGNvbnN0IHsgZXhlY3V0ZSwgY29udGV4dFNjaGVtYSwgc3RhdGVTY2hlbWEsIC4uLnJlc3QgfSA9IGRlZjtcblxuICBjb25zdCB3cmFwcGVkRXhlY3V0ZSA9IGV4ZWN1dGVcbiAgICA/IC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogaW5wdXQgdHlwZSBlcmFzZWQgYXQgcnVudGltZVxuICAgICAgKGlucHV0OiBhbnksIG9wdGlvbnM6IFRvb2xFeGVjdXRpb25PcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IG9wdGlvbnMuZXhwZXJpbWVudGFsX2NvbnRleHQgYXMge1xuICAgICAgICAgIGNvbnRleHQ6IHVua25vd247XG4gICAgICAgICAgc3RhdGU6IHVua25vd247XG4gICAgICAgICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgICAgICAgbWVzc2FnZXM6IFVJTWVzc2FnZVtdO1xuICAgICAgICAgIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gKFxuICAgICAgICAgIGNvbnRleHRTY2hlbWEgPyBjb250ZXh0U2NoZW1hLnBhcnNlKGN0eC5jb250ZXh0KSA6IGN0eC5jb250ZXh0XG4gICAgICAgICkgYXMgei5pbmZlcjxUQ29udGV4dFNjaGVtYT47XG5cbiAgICAgICAgaWYgKHN0YXRlU2NoZW1hKSB7XG4gICAgICAgICAgc3RhdGVTY2hlbWEucGFyc2UoY3R4LnN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGN0eC5zdGF0ZSBhcyB6LmluZmVyPFRTdGF0ZVNjaGVtYT47XG5cbiAgICAgICAgcmV0dXJuIGV4ZWN1dGUoaW5wdXQsIHtcbiAgICAgICAgICB0b29sQ2FsbElkOiBvcHRpb25zLnRvb2xDYWxsSWQsXG4gICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwhLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgc2Vzc2lvbklkOiBjdHguc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2VzOiBjdHgubWVzc2FnZXMsXG4gICAgICAgICAgc2FuZGJveDogY3R4LnNhbmRib3gsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB3cmFwcGVkRXhlY3V0ZVxuICAgID8gYWlUb29sKHsgLi4ucmVzdCwgZXhlY3V0ZTogd3JhcHBlZEV4ZWN1dGUgfSlcbiAgICA6IC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogbm8tZXhlY3V0ZSBwYXRoIG5lZWRzIGNhc3RcbiAgICAgIGFpVG9vbChyZXN0IGFzIGFueSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBKU09OVmFsdWUsIE1vZGVsTWVzc2FnZSB9IGZyb20gXCJhaVwiO1xuXG50eXBlIFByb3ZpZGVyT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEpTT05WYWx1ZT4+O1xuXG5jb25zdCBBTlRIUk9QSUNfTUFYX0NBQ0hFX0JSRUFLUE9JTlRTX1BFUl9SRVFVRVNUID0gNDtcblxuY29uc3QgQ0xBVURFX0xJS0VfTU9ERUxfTUFUQ0hFUlMgPSBbXCJjbGF1ZGVcIiwgXCJhbnRocm9waWNcIl07XG5cbmNvbnN0IENMQVVERV9QUk9NUFRfQ0FDSElOR19QUk9WSURFUl9PUFRJT05TOiBQcm92aWRlck9wdGlvbnMgPSB7XG4gIGFudGhyb3BpYzoge1xuICAgIGNhY2hlQ29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG4gIG9wZW5yb3V0ZXI6IHtcbiAgICBjYWNoZUNvbnRyb2w6IHsgdHlwZTogXCJlcGhlbWVyYWxcIiB9LFxuICB9LFxuICBiZWRyb2NrOiB7XG4gICAgY2FjaGVQb2ludDogeyB0eXBlOiBcImRlZmF1bHRcIiB9LFxuICB9LFxuICBvcGVuYWlDb21wYXRpYmxlOiB7XG4gICAgY2FjaGVfY29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBjb3BpbG90X2NhY2hlX2NvbnRyb2w6IHsgdHlwZTogXCJlcGhlbWVyYWxcIiB9LFxuICB9LFxufTtcblxuZnVuY3Rpb24gZ2V0R2F0ZXdheVByb3ZpZGVyKG1vZGVsOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgc2xhc2hJbmRleCA9IG1vZGVsLmluZGV4T2YoXCIvXCIpO1xuICBpZiAoc2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbW9kZWwuc2xpY2UoMCwgc2xhc2hJbmRleCk7XG59XG5cbmZ1bmN0aW9uIGNvdW50QW50aHJvcGljQ2FjaGVCcmVha3BvaW50cyhtZXNzYWdlczogTW9kZWxNZXNzYWdlW10pOiBudW1iZXIge1xuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICBjb25zdCBwcm92aWRlck9wdGlvbnMgPSAobWVzc2FnZSBhcyB7IHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucyB9KVxuICAgICAgLnByb3ZpZGVyT3B0aW9ucztcbiAgICBpZiAocHJvdmlkZXJPcHRpb25zPy5hbnRocm9waWM/LmNhY2hlQ29udHJvbCkge1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICBjb25zdCBwYXJ0UHJvdmlkZXJPcHRpb25zID0gKFxuICAgICAgICAgIHBhcnQgYXMgeyBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnMgfVxuICAgICAgICApLnByb3ZpZGVyT3B0aW9ucztcbiAgICAgICAgaWYgKHBhcnRQcm92aWRlck9wdGlvbnM/LmFudGhyb3BpYz8uY2FjaGVDb250cm9sKSB7XG4gICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY291bnQ7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhdWRlTGlrZU1vZGVsKG1vZGVsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbG93ZXIgPSBtb2RlbC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gQ0xBVURFX0xJS0VfTU9ERUxfTUFUQ0hFUlMuc29tZSgobSkgPT4gbG93ZXIuaW5jbHVkZXMobSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm92aWRlck9wdGlvbnMob3B0czoge1xuICBjdXJyZW50OiBQcm92aWRlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIHBhdGNoOiBQcm92aWRlck9wdGlvbnM7XG59KTogUHJvdmlkZXJPcHRpb25zIHtcbiAgY29uc3QgbmV4dDogUHJvdmlkZXJPcHRpb25zID0geyAuLi4ob3B0cy5jdXJyZW50ID8/IHt9KSB9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRzLnBhdGNoKSkge1xuICAgIG5leHRba2V5XSA9IHsgLi4uKG5leHRba2V5XSA/PyB7fSksIC4uLnZhbHVlIH07XG4gIH1cbiAgcmV0dXJuIG5leHQ7XG59XG5cbmZ1bmN0aW9uIGlzQ2FjaGVhYmxlQ2xhdWRlUGFydChwYXJ0OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghcGFydCB8fCB0eXBlb2YgcGFydCAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcInR5cGVcIiBpbiBwYXJ0ICYmIChwYXJ0IGFzIHsgdHlwZT86IHVua25vd24gfSkudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICBjb25zdCB0ZXh0ID0gKHBhcnQgYXMgeyB0ZXh0PzogdW5rbm93biB9KS50ZXh0O1xuICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRleHQudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKFwidHlwZVwiIGluIHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gKHBhcnQgYXMgeyB0eXBlPzogdW5rbm93biB9KS50eXBlO1xuICAgIGlmICh0eXBlID09PSBcInRoaW5raW5nXCIgfHwgdHlwZSA9PT0gXCJyZWFzb25pbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNDYWNoZWFibGVDb250ZW50KG1lc3NhZ2U6IE1vZGVsTWVzc2FnZSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBtZXNzYWdlLmNvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2UuY29udGVudC5zb21lKChwYXJ0KSA9PiBpc0NhY2hlYWJsZUNsYXVkZVBhcnQocGFydCkpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmaW5kTGFzdENhY2hlYWJsZVBhcnRJbmRleChjb250ZW50OiB1bmtub3duW10pOiBudW1iZXIgfCBudWxsIHtcbiAgZm9yIChsZXQgaSA9IGNvbnRlbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBpZiAoaXNDYWNoZWFibGVDbGF1ZGVQYXJ0KGNvbnRlbnRbaV0pKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdENsYXVkZUNhY2hpbmdUYXJnZXRzKG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXSk6IG51bWJlcltdIHtcbiAgY29uc3Qgc3lzdGVtSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgZmluYWxJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoICYmIHN5c3RlbUluZGljZXMubGVuZ3RoIDwgMjsgaSArPSAxKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgIGlmIChtZXNzYWdlLnJvbGUgPT09IFwic3lzdGVtXCIgJiYgaGFzQ2FjaGVhYmxlQ29udGVudChtZXNzYWdlKSkge1xuICAgICAgc3lzdGVtSW5kaWNlcy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDAgJiYgZmluYWxJbmRpY2VzLmxlbmd0aCA8IDI7IGkgLT0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcbiAgICBpZiAobWVzc2FnZS5yb2xlICE9PSBcInN5c3RlbVwiICYmIGhhc0NhY2hlYWJsZUNvbnRlbnQobWVzc2FnZSkpIHtcbiAgICAgIGZpbmFsSW5kaWNlcy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIGZpbmFsSW5kaWNlcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIFsuLi5zeXN0ZW1JbmRpY2VzLCAuLi5maW5hbEluZGljZXNdO1xufVxuXG5mdW5jdGlvbiBhcHBseUNsYXVkZVByb21wdENhY2hpbmcob3B0czoge1xuICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gIHByb3ZpZGVySWQ6IHN0cmluZyB8IG51bGw7XG4gIG1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdDogbnVtYmVyO1xufSk6IE1vZGVsTWVzc2FnZVtdIHtcbiAgY29uc3QgZXhpc3RpbmdCcmVha3BvaW50cyA9IGNvdW50QW50aHJvcGljQ2FjaGVCcmVha3BvaW50cyhvcHRzLm1lc3NhZ2VzKTtcbiAgY29uc3QgcmVtYWluaW5nQnVkZ2V0ID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBvcHRzLm1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdCAtIGV4aXN0aW5nQnJlYWtwb2ludHNcbiAgKTtcblxuICBpZiAocmVtYWluaW5nQnVkZ2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIG9wdHMubWVzc2FnZXM7XG4gIH1cblxuICBjb25zdCB0YXJnZXRJbmRpY2VzID0gc2VsZWN0Q2xhdWRlQ2FjaGluZ1RhcmdldHMob3B0cy5tZXNzYWdlcykuc2xpY2UoXG4gICAgMCxcbiAgICByZW1haW5pbmdCdWRnZXRcbiAgKTtcbiAgaWYgKHRhcmdldEluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9wdHMubWVzc2FnZXM7XG4gIH1cblxuICBjb25zdCB1c2VNZXNzYWdlTGV2ZWxPcHRpb25zID1cbiAgICBvcHRzLnByb3ZpZGVySWQgPT09IFwiYW50aHJvcGljXCIgfHxcbiAgICBCb29sZWFuKG9wdHMucHJvdmlkZXJJZD8uaW5jbHVkZXMoXCJiZWRyb2NrXCIpKTtcblxuICBjb25zdCBuZXh0TWVzc2FnZXMgPSBvcHRzLm1lc3NhZ2VzLnNsaWNlKCk7XG5cbiAgZm9yIChjb25zdCBtZXNzYWdlSW5kZXggb2YgdGFyZ2V0SW5kaWNlcykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXh0TWVzc2FnZXNbbWVzc2FnZUluZGV4XTtcblxuICAgIGNvbnN0IHNob3VsZFVzZUNvbnRlbnRPcHRpb25zID1cbiAgICAgICF1c2VNZXNzYWdlTGV2ZWxPcHRpb25zICYmXG4gICAgICBBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkgJiZcbiAgICAgIG1lc3NhZ2UuY29udGVudC5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHNob3VsZFVzZUNvbnRlbnRPcHRpb25zICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSkge1xuICAgICAgY29uc3QgcGFydEluZGV4ID0gZmluZExhc3RDYWNoZWFibGVQYXJ0SW5kZXgobWVzc2FnZS5jb250ZW50KTtcbiAgICAgIGlmIChwYXJ0SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFydCA9IG1lc3NhZ2UuY29udGVudFtwYXJ0SW5kZXhdO1xuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGNvbnN0IHBhcnRQcm92aWRlck9wdGlvbnMgPSAoXG4gICAgICAgICAgICBwYXJ0IGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH1cbiAgICAgICAgICApLnByb3ZpZGVyT3B0aW9ucztcblxuICAgICAgICAgIGNvbnN0IG5leHRDb250ZW50ID0gbWVzc2FnZS5jb250ZW50LnNsaWNlKCk7XG4gICAgICAgICAgbmV4dENvbnRlbnRbcGFydEluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLihwYXJ0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICAgICAgICAgIHByb3ZpZGVyT3B0aW9uczogbWVyZ2VQcm92aWRlck9wdGlvbnMoe1xuICAgICAgICAgICAgICBjdXJyZW50OiBwYXJ0UHJvdmlkZXJPcHRpb25zLFxuICAgICAgICAgICAgICBwYXRjaDogQ0xBVURFX1BST01QVF9DQUNISU5HX1BST1ZJREVSX09QVElPTlMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9IGFzICh0eXBlb2YgbWVzc2FnZS5jb250ZW50KVtudW1iZXJdO1xuXG4gICAgICAgICAgbmV4dE1lc3NhZ2VzW21lc3NhZ2VJbmRleF0gPSB7XG4gICAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgICAgY29udGVudDogbmV4dENvbnRlbnQsXG4gICAgICAgICAgfSBhcyBNb2RlbE1lc3NhZ2U7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlUHJvdmlkZXJPcHRpb25zID0gKFxuICAgICAgbWVzc2FnZSBhcyB7IHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucyB9XG4gICAgKS5wcm92aWRlck9wdGlvbnM7XG5cbiAgICBuZXh0TWVzc2FnZXNbbWVzc2FnZUluZGV4XSA9IHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBwcm92aWRlck9wdGlvbnM6IG1lcmdlUHJvdmlkZXJPcHRpb25zKHtcbiAgICAgICAgY3VycmVudDogbWVzc2FnZVByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgcGF0Y2g6IENMQVVERV9QUk9NUFRfQ0FDSElOR19QUk9WSURFUl9PUFRJT05TLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBuZXh0TWVzc2FnZXM7XG59XG5cbmV4cG9ydCB0eXBlIFByb21wdENhY2hpbmdSZXN1bHQgPSB7XG4gIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXTtcbiAgcHJvdmlkZXJPcHRpb25zOiBQcm92aWRlck9wdGlvbnM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQcm9tcHRDYWNoaW5nVG9Nb2RlbFJlcXVlc3Qob3B0czoge1xuICBtb2RlbDogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICBhbnRocm9waWM/OiB7IG1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdD86IG51bWJlciB9O1xuICBvcGVuYWk/OiB7IHNldFByb21wdENhY2hlS2V5PzogYm9vbGVhbiB9O1xufSk6IFByb21wdENhY2hpbmdSZXN1bHQge1xuICBjb25zdCBwcm92aWRlciA9IGdldEdhdGV3YXlQcm92aWRlcihvcHRzLm1vZGVsKTtcblxuICBjb25zdCBwcm92aWRlck9wdGlvbnM6IFByb3ZpZGVyT3B0aW9ucyA9IHt9O1xuXG4gIGlmIChcbiAgICAocHJvdmlkZXIgPT09IFwib3BlbmFpXCIgfHwgcHJvdmlkZXIgPT09IFwiYXp1cmVcIikgJiZcbiAgICBvcHRzLm9wZW5haT8uc2V0UHJvbXB0Q2FjaGVLZXkgIT09IGZhbHNlXG4gICkge1xuICAgIHByb3ZpZGVyT3B0aW9ucy5vcGVuYWkgPSB7IHByb21wdENhY2hlS2V5OiBvcHRzLnNlc3Npb25JZCB9O1xuICB9XG5cbiAgY29uc3QgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0ID1cbiAgICBvcHRzLmFudGhyb3BpYz8ubWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0ID8/XG4gICAgQU5USFJPUElDX01BWF9DQUNIRV9CUkVBS1BPSU5UU19QRVJfUkVRVUVTVDtcblxuICBjb25zdCBjYWNoZWRNZXNzYWdlcyA9IGlzQ2xhdWRlTGlrZU1vZGVsKG9wdHMubW9kZWwpXG4gICAgPyBhcHBseUNsYXVkZVByb21wdENhY2hpbmcoe1xuICAgICAgICBtZXNzYWdlczogb3B0cy5tZXNzYWdlcyxcbiAgICAgICAgcHJvdmlkZXJJZDogcHJvdmlkZXIsXG4gICAgICAgIG1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdCxcbiAgICAgIH0pXG4gICAgOiBvcHRzLm1lc3NhZ2VzO1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXM6IGNhY2hlZE1lc3NhZ2VzLFxuICAgIHByb3ZpZGVyT3B0aW9ucyxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFVJTWVzc2FnZUNodW5rIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuaW1wb3J0IHsgU2Vzc2lvbk5vdEZvdW5kRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyBnZXRBY3RpdmVSdW5zLCByZXBsYXlBY3RpdmVSdW4gfSBmcm9tIFwiLi9zZW5kXCI7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbU9wdGlvbnMgPSB7XG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93UnVuTGlrZSA9IHtcbiAgZ2V0UmVhZGFibGUob3B0aW9ucz86IHsgc3RhcnRJbmRleD86IG51bWJlciB9KTogUmVhZGFibGVTdHJlYW07XG59O1xuXG5mdW5jdGlvbiBpc1dvcmtmbG93UnVuKGFyZzogdW5rbm93bik6IGFyZyBpcyBXb3JrZmxvd1J1bkxpa2Uge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiZcbiAgICBhcmcgIT09IG51bGwgJiZcbiAgICBcImdldFJlYWRhYmxlXCIgaW4gYXJnICYmXG4gICAgdHlwZW9mIChhcmcgYXMgV29ya2Zsb3dSdW5MaWtlKS5nZXRSZWFkYWJsZSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdHJlYW0oXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dCxcbiAgcnVuT3JPcHRzPzogV29ya2Zsb3dSdW5MaWtlIHwgU3RyZWFtT3B0aW9uc1xuKTogUHJvbWlzZTxSZWFkYWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz4+IHtcbiAgaWYgKGlzV29ya2Zsb3dSdW4ocnVuT3JPcHRzKSkge1xuICAgIGNvbnN0IHJlYWRlciA9IHJ1bk9yT3B0cy5nZXRSZWFkYWJsZSgpLmdldFJlYWRlcigpO1xuICAgIC8vIGF3YWl0IGZvciB0aGUgZmlyc3QgY2h1bmsgdG8gYmUgcmVhZHkgYmVmb3JlIGZpbmlzaGluZyB0aGUgd29ya2Zsb3cgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgYXdhaXQgcmVhZGVyLnJlYWQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgU3RyZWFtRXJyb3Ioe1xuICAgICAgICBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICByZWFzb246IFwic3RyZWFtKCkgZmFpbGVkIHRvIHJlYWQgZmlyc3QgY2h1bmsgZnJvbSB3b3JrZmxvdyBydW5cIixcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJlYWRlci5jYW5jZWwoKTtcblxuICAgIHJldHVybiBydW5Pck9wdHMuZ2V0UmVhZGFibGUoKTtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBydW5Pck9wdHM7XG4gIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KFxuICAgIHNlc3Npb25Db250ZXh0LnNlc3Npb25JZFxuICApO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgU2Vzc2lvbk5vdEZvdW5kRXJyb3IoeyBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkIH0pO1xuICB9XG4gIGNvbnN0IG1lc3NhZ2VJZCA9IG9wdHM/Lm1lc3NhZ2VJZCA/PyBzZXNzaW9uLmxhc3RNZXNzYWdlSWQ7XG4gIGlmICghbWVzc2FnZUlkKSB7XG4gICAgdGhyb3cgbmV3IFN0cmVhbUVycm9yKHtcbiAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICByZWFzb246IFwiTm8gbWVzc2FnZSB0byBzdHJlYW1cIixcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZVJ1bnMgPSBnZXRBY3RpdmVSdW5zKCk7XG4gIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVJ1bnMuZ2V0KG1lc3NhZ2VJZCk7XG4gIGlmICghYWN0aXZlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5nZXQobWVzc2FnZUlkKTtcbiAgICBpZiAobWVzc2FnZT8ud29ya2Zsb3dSdW5JZCkge1xuICAgICAgY29uc3QgcmVhZGFibGUgPSBhd2FpdCBpbXBvcnQoXCJ3b3JrZmxvdy9hcGlcIilcbiAgICAgICAgLnRoZW4oKHsgZ2V0UnVuIH0pID0+IGdldFJ1bihtZXNzYWdlLndvcmtmbG93UnVuSWQhKS5nZXRSZWFkYWJsZSgpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGlmIChyZWFkYWJsZSkge1xuICAgICAgICByZXR1cm4gcmVhZGFibGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFN0cmVhbUVycm9yKHtcbiAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICByZWFzb246IGBObyBhY3RpdmUgcnVuIGZvciBtZXNzYWdlICR7bWVzc2FnZUlkfWAsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVwbGF5QWN0aXZlUnVuKGFjdGl2ZSwgb3B0cz8uc3RhcnRJbmRleCk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEVycm9yc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlN0cmVhbUVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU3RyZWFtIGZhaWxlZCBmb3Igc2Vzc2lvbiAkaWQ6ICRyZWFzb25cIixcbn0pIHt9XG4iLCAiaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IHR5cGUgVXBkYXRlT3B0aW9uczxcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSBQYXJ0aWFsPE9taXQ8U2Vzc2lvbiwgXCJpZFwiIHwgXCJjcmVhdGVkQXRcIiB8IFwidXBkYXRlZEF0XCIgfCBcInN0YXRlXCI+PiAmIHtcbiAgc3RhdGU/OiBUU3RhdGU7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlPFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPihcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxuICBvcHRzOiBVcGRhdGVPcHRpb25zPFRTdGF0ZT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHVwZGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMob3B0cykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICk7XG5cbiAgaWYgKE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi51cGRhdGUoc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLCB7XG4gICAgLi4udXBkYXRlcyxcbiAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gIH0pO1xufVxuIiwgImltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4uL3V0aWxzL3VzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2FnZShcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0XG4pOiBQcm9taXNlPFNlc3Npb25Vc2FnZT4ge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG4gIHJldHVybiBjb21wdXRlU2Vzc2lvblVzYWdlKG1lc3NhZ2VzKTtcbn1cbiIsICJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXR1cCB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJjb25zdCBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcblxuLyoqXG4gKiBXZSBpbnRlbnRpb25hbGx5IG1pcnJvciB0aGUgbWluaW1hbCBgZ2V0KClgIHJldHVybiBzaGFwZSB3ZSB1c2UgaGVyZVxuICogaW5zdGVhZCBvZiBpbXBvcnRpbmcgS1YyIHR5cGVzLiBUaGUgd29ya2Zsb3cgYnVuZGxlciBhbmFseXplcyB0eXBlLW9ubHlcbiAqIGltcG9ydHMgYW5kIGZsYWdzIGBAdmVyY2VsL2t2MmAgYXMgYSBOb2RlIG1vZHVsZSBpbiB3b3JrZmxvdyBjb2RlIHBhdGhzLlxuICogS2VlcGluZyB0aGlzIGxvY2FsIGF2b2lkcyB0aGF0IGZhbHNlLXBvc2l0aXZlIHdoaWxlIHByZXNlcnZpbmcgcnVudGltZSBiZWhhdmlvci5cbiAqL1xudHlwZSBLVk9wdGltaXN0aWNHZXRSZXN1bHQ8VD4gPVxuICB8IHtcbiAgICAgIGV4aXN0czogZmFsc2U7XG4gICAgfVxuICB8IHtcbiAgICAgIGV4aXN0czogdHJ1ZTtcbiAgICAgIHZhbHVlOiBQcm9taXNlPFQ+O1xuICAgICAgdXBkYXRlKHZhbHVlOiBUKTogUHJvbWlzZTx1bmtub3duPjtcbiAgICB9O1xuXG50eXBlIEtWT3B0aW1pc3RpY1N0b3JlPFQ+ID0ge1xuICBnZXQoa2V5T3JGaWx0ZXI6IHN0cmluZyk6IFByb21pc2U8S1ZPcHRpbWlzdGljR2V0UmVzdWx0PFQ+Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8VD4ob3B0czoge1xuICBpZDogc3RyaW5nO1xuICB1cGRhdGVzOiBQYXJ0aWFsPFQ+O1xuICBzdG9yZTogS1ZPcHRpbWlzdGljU3RvcmU8VD47XG4gIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG59KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG1heFJldHJpZXMgPSBvcHRzLm1heFJldHJpZXMgPz8gREVGQVVMVF9NQVhfUkVUUklFUztcbiAgY29uc3QgeyBLVlZlcnNpb25Db25mbGljdEVycm9yIH0gPSBhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL2t2MlwiKTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IG1heFJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgb3B0cy5zdG9yZS5nZXQob3B0cy5pZCk7XG4gICAgaWYgKCFlbnRyeS5leGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihvcHRzLm5vdEZvdW5kRXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IGVudHJ5LnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi5vcHRzLnVwZGF0ZXMgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnRyeS51cGRhdGUodXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKFxuICAgICAgICAhKGVycm9yIGluc3RhbmNlb2YgS1ZWZXJzaW9uQ29uZmxpY3RFcnJvcikgJiZcbiAgICAgICAgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgZXJyb3IubmFtZSAhPT0gXCJLVlZlcnNpb25Db25mbGljdEVycm9yXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzIC0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3Iob3B0cy5jb25mbGljdEVycm9yTWVzc2FnZSwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKG9wdHMuY29uZmxpY3RFcnJvck1lc3NhZ2UpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZSB9IGZyb20gXCIuL2t2LW9wdGltaXN0aWMtdXBkYXRlXCI7XG5cbnR5cGUgS3ZTdG9yZXMgPSBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGluaXRLdlN0b3Jlcz4+O1xuXG5hc3luYyBmdW5jdGlvbiBpbml0S3ZTdG9yZXMocHJlZml4OiBzdHJpbmcpIHtcbiAgY29uc3QgeyBjcmVhdGVLViB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9rdjJcIik7XG4gIGNvbnN0IGt2ID0gY3JlYXRlS1YoeyBwcmVmaXggfSkuZ2V0U3RvcmUoXCJhZ2VudC9cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uczoga3YuZ2V0U3RvcmU8U2Vzc2lvbj4oXCJzZXNzaW9uL1wiKSxcbiAgICBtZXNzYWdlczoga3YuZ2V0U3RvcmU8TWVzc2FnZT4oXCJtZXNzYWdlL1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChtOiBNZXNzYWdlKSA9PiBtLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHBhcnRzOiBrdi5nZXRTdG9yZTxQYXJ0PihcInBhcnQvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKHA6IFBhcnQpID0+IHAuc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgc2FuZGJveGVzOiBrdi5nZXRTdG9yZTxTYW5kYm94PihcInNhbmRib3gvXCIpLFxuICAgIHNldHVwczoga3YuZ2V0U3RvcmU8U2V0dXA+KFwic2V0dXAvXCIpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3ZTdG9yYWdlRmFsbGJhY2sob3B0czogeyBwcmVmaXg6IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgbGV0IHN0b3Jlc1Byb21pc2U6IFByb21pc2U8S3ZTdG9yZXM+IHwgdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3JlcygpIHtcbiAgICBpZiAoIXN0b3Jlc1Byb21pc2UpIHtcbiAgICAgIHN0b3Jlc1Byb21pc2UgPSBpbml0S3ZTdG9yZXMob3B0cy5wcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVzUHJvbWlzZTtcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGBbYWdlbnQuJHtvcHRzLnByZWZpeH1dW2t2Ml1gO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2Vzc2lvbnMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24udXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxTZXNzaW9uPih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogc2Vzc2lvbnMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W3Nlc3Npb24udXBkYXRlXSBubyBzZXNzaW9uIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2Vzc2lvbi51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IG1lc3NhZ2VzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBtZXNzYWdlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8TWVzc2FnZT4oe1xuICAgICAgICBpZCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgc3RvcmU6IG1lc3NhZ2VzLFxuICAgICAgICBub3RGb3VuZEVycm9yTWVzc2FnZTogYCR7dGFnfVttZXNzYWdlLnVwZGF0ZV0gbm8gbWVzc2FnZSBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImAsXG4gICAgICAgIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBvcHRpbWlzdGljIHVwZGF0ZSBmYWlsZWQgYWZ0ZXIgcmV0cmllcyBmb3IgaWQgXCIke2lkfVwiYCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCByZXN1bHQ6IE1lc3NhZ2VbXSA9IFtdO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBbLCBlbnRyeV0gb2YgbWVzc2FnZXMuZW50cmllcyh7XG4gICAgICAgIGJ5U2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICB9KSkge1xuICAgICAgICByZXN1bHQucHVzaChhd2FpdCBlbnRyeS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBwYXJ0cy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwicGFydC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgcGFydHMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogUGFydFtdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFssIGVudHJ5XSBvZiBwYXJ0cy5lbnRyaWVzKHtcbiAgICAgICAgYnlTZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IGVudHJ5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzYW5kYm94ZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzYW5kYm94ZXMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC51cGRhdGVcIjogYXN5bmMgKHsgaWQsIHVwZGF0ZXMgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxTYW5kYm94Pih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogc2FuZGJveGVzLFxuICAgICAgICBub3RGb3VuZEVycm9yTWVzc2FnZTogYCR7dGFnfVtzYW5kYm94LnVwZGF0ZV0gbm8gc2FuZGJveCBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImAsXG4gICAgICAgIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBgJHt0YWd9W3NhbmRib3gudXBkYXRlXSBvcHRpbWlzdGljIHVwZGF0ZSBmYWlsZWQgYWZ0ZXIgcmV0cmllcyBmb3IgaWQgXCIke2lkfVwiYCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcInNldHVwLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNldHVwcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNldHVwcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2V0dXAuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNldHVwcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzZXR1cHMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JhZ2VIYW5kbGVycyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmxldCBfZnM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpIHwgdW5kZWZpbmVkO1xubGV0IF9wYXRoOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpwYXRoXCIpIHwgdW5kZWZpbmVkO1xuXG5hc3luYyBmdW5jdGlvbiBmcygpIHtcbiAgaWYgKCFfZnMpIHtcbiAgICBfZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICB9XG4gIHJldHVybiBfZnM7XG59XG5hc3luYyBmdW5jdGlvbiBwYXRoKCkge1xuICBpZiAoIV9wYXRoKSB7XG4gICAgX3BhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gIH1cbiAgcmV0dXJuIF9wYXRoO1xufVxuXG50eXBlIFdyaXRlTG9ja1N0YXRlID0ge1xuICBsb2NrZWQ6IGJvb2xlYW47XG4gIHdhaXRlcnM6IEFycmF5PCgpID0+IHZvaWQ+O1xufTtcblxuZnVuY3Rpb24gY3JlYXRlV3JpdGVMb2NrKCkge1xuICBjb25zdCBsb2NrcyA9IG5ldyBNYXA8c3RyaW5nLCBXcml0ZUxvY2tTdGF0ZT4oKTtcblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gd2l0aFdyaXRlTG9jazxUPihvcHRzOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZm46ICgpID0+IFByb21pc2U8VD47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgc3RhdGUgPSBsb2Nrcy5nZXQob3B0cy5rZXkpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHN0YXRlID0geyBsb2NrZWQ6IGZhbHNlLCB3YWl0ZXJzOiBbXSB9O1xuICAgICAgbG9ja3Muc2V0KG9wdHMua2V5LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxvY2tlZCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgc3RhdGUud2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGUubG9ja2VkID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgb3B0cy5mbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RhdGUud2FpdGVycy5zaGlmdCgpO1xuICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubG9ja2VkID0gZmFsc2U7XG4gICAgICAgIGxvY2tzLmRlbGV0ZShvcHRzLmtleSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZTxUPihkaXI6IHN0cmluZykge1xuICBjb25zdCBmaWxlUGF0aCA9IGFzeW5jIChrZXk6IHN0cmluZykgPT5cbiAgICAoYXdhaXQgcGF0aCgpKS5qb2luKGRpciwgYCR7a2V5fS5qc29uYCk7XG4gIGNvbnN0IHdpdGhXcml0ZUxvY2sgPSBjcmVhdGVXcml0ZUxvY2soKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZnMoKSkucmVhZEZpbGUoYXdhaXQgZmlsZVBhdGgoa2V5KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHdpdGhXcml0ZUxvY2soe1xuICAgICAgICBrZXksXG4gICAgICAgIGZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICAgICAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIHJldHVybiB3aXRoV3JpdGVMb2NrKHtcbiAgICAgICAga2V5LFxuICAgICAgICBmbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgICAgIGNvbnN0IHsgcmVhZEZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUocCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgZm91bmQ6ICR7a2V5fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlR2l0aWdub3JlKGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHsgbWtkaXIsIHdyaXRlRmlsZSwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihkaXIsIFwiLmdpdGlnbm9yZVwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZWFkRmlsZShnaXRpZ25vcmVQYXRoLCBcInV0Zi04XCIpO1xuICB9IGNhdGNoIHtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShnaXRpZ25vcmVQYXRoLCBcIipcXG5cIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuICBsZXQgZ2l0aWdub3JlUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIGZ1bmN0aW9uIG9uV3JpdGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWdpdGlnbm9yZVByb21pc2UpIHtcbiAgICAgIGdpdGlnbm9yZVByb21pc2UgPSBlbnN1cmVHaXRpZ25vcmUoZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIGdpdGlnbm9yZVByb21pc2UudGhlbihmbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogKHsgaWQgfSkgPT4gc2Vzc2lvblN0b3JlLmdldChpZCksXG4gICAgXCJzZXNzaW9uLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2Vzc2lvblN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInNlc3Npb24udXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNlc3Npb25TdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IG1lc3NhZ2VTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcbiAgICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigobSkgPT4gbS5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogKHsgaWQgfSkgPT4gcGFydFN0b3JlLmdldChpZCksXG4gICAgXCJwYXJ0LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gb25Xcml0ZSgoKSA9PiBwYXJ0U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxQYXJ0PihwYXJ0RGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiAoeyBpZCB9KSA9PiBzYW5kYm94U3RvcmUuZ2V0KGlkKSxcbiAgICBcInNhbmRib3guc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzYW5kYm94U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuXG4gICAgXCJzZXR1cC5nZXRcIjogKHsgaWQgfSkgPT4gc2V0dXBTdG9yZS5nZXQoaWQpLFxuICAgIFwic2V0dXAuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBvbldyaXRlKCgpID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICB9O1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRGYWxsYmFja1RvS1YyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFwcm9jZXNzLmVudi5CTE9CX1JFQURfV1JJVEVfVE9LRU47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBJbmZlclRvb2xJbnB1dCxcbiAgSW5mZXJVSVRvb2xzLFxuICBNb2RlbE1lc3NhZ2UsXG4gIFRvb2xTZXQsXG4gIFVJTWVzc2FnZSxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbHRJblRvb2xOYW1lLCBidWlsdEluVG9vbHMsIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4uL3Rvb2xzXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4vY2xpZW50XCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBBZ2VudCBTdGF0dXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3JzIGVtaXR0ZWQgb3ZlciB0aGUgc3RyZWFtIGR1cmluZyBsb25nLXJ1bm5pbmcgcGhhc2VzLlxuICogRGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgYXMgYGRhdGEtc3RhdHVzYCBjaHVua3Mgd2l0aCBgdHJhbnNpZW50OiB0cnVlYCBcdTIwMTQgbm90IHBlcnNpc3RlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFnZW50U3RhdHVzID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJzYW5kYm94LXNldHVwXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInNhbmRib3gtc2V0dXAtY29sZFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJsb2FkaW5nLXNraWxsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJuZWVkcy1hcHByb3ZhbFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJ0aGlua2luZ1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJjdXN0b21cIiksIHN0YXR1czogei5zdHJpbmcoKSB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBBZ2VudFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIEFnZW50U3RhdHVzPjtcblxuZXhwb3J0IHR5cGUgQWdlbnREYXRhVHlwZXMgPSB7IHN0YXR1czogQWdlbnRTdGF0dXMgfTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEhvb2tzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBBZ2VudEhvb2tzID0ge1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICBcInRvb2wuYWZ0ZXJcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IHJlc3VsdDogdW5rbm93biB9PjtcbiAgc3RhdHVzPzogKHN0YXR1czogQWdlbnRTdGF0dXMpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIE5lZWRzIEFwcHJvdmFsIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG50eXBlIFRvb2xOYW1lPFRvb2xzPiA9IEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWU7XG5cbnR5cGUgVG9vbElucHV0PFRvb2xzLCBLPiA9IEsgZXh0ZW5kcyBCdWlsdEluVG9vbE5hbWVcbiAgPyBJbmZlclRvb2xJbnB1dDwodHlwZW9mIGJ1aWx0SW5Ub29scylbS10+XG4gIDogSyBleHRlbmRzIGtleW9mIFRvb2xzXG4gICAgPyBUb29sc1tLXSBleHRlbmRzIGltcG9ydChcImFpXCIpLlRvb2xcbiAgICAgID8gSW5mZXJUb29sSW5wdXQ8VG9vbHNbS10+XG4gICAgICA6IHVua25vd25cbiAgICA6IHVua25vd247XG5cbmV4cG9ydCB0eXBlIE5lZWRzQXBwcm92YWxNYXA8VG9vbHM+ID0ge1xuICBbSyBpbiBUb29sTmFtZTxUb29scz5dPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8ICgoXG4gICAgICAgIGlucHV0OiBUb29sSW5wdXQ8VG9vbHMsIEs+LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdG9vbENhbGxJZDogc3RyaW5nO1xuICAgICAgICAgIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXTtcbiAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5rbm93bjtcbiAgICAgICAgfVxuICAgICAgKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPik7XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSW5mZXIgVUkgTWVzc2FnZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgSW5mZXJVSU1lc3NhZ2U8QT4gPSBBIGV4dGVuZHMge1xuICB0b29sczogaW5mZXIgVCBleHRlbmRzIFRvb2xTZXQ7XG4gICRVSU1lc3NhZ2U6IFVJTWVzc2FnZTxpbmZlciBNPjtcbn1cbiAgPyBVSU1lc3NhZ2U8TSwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUPj5cbiAgOiBBIGV4dGVuZHMgeyB0b29sczogaW5mZXIgVCBleHRlbmRzIFRvb2xTZXQgfVxuICAgID8gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gICAgOiBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXM+O1xuXG5leHBvcnQgdHlwZSBUeXBlZFVJTWVzc2FnZTxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4+ID0gVUlNZXNzYWdlPFRNZXNzYWdlTWV0YWRhdGEsIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VG9vbHM+PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFJlZ2lzdHJ5IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5jbGFzcyBBZ2VudE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIkFnZW50Tm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBgQWdlbnQgXCIkYWdlbnROYW1lXCIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5LlxuXG5oaW50OiBhZ2VudCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB3b3JrZmxvdyBzdGVwcyBleGVjdXRlLlxuICAgICAgVmFsaWQgbG9jYXRpb25zOiBtb2R1bGUgc2NvcGUsIG9yIGluc2lkZSBhIFwidXNlIHdvcmtmbG93XCIgYm9keS5cblxuICAvLyBNb2R1bGUgc2NvcGUgKHN0YXRpYyBhZ2VudHMpXG4gIGV4cG9ydCBjb25zdCBteUFnZW50ID0gYWdlbnQoXCIkYWdlbnROYW1lXCIsIHsgLi4uIH0pO1xuXG4gIC8vIFdvcmtmbG93IGJvZHkgKGR5bmFtaWMgYWdlbnRzKVxuICBhc3luYyBmdW5jdGlvbiBteVdvcmtmbG93KHsgaW5wdXQgfSkge1xuICAgIFwidXNlIHdvcmtmbG93XCI7XG4gICAgY29uc3QgbXlBZ2VudCA9IGFnZW50KFwiJGFnZW50TmFtZVwiLCB7IC4uLiB9KTtcbiAgICAuLi5cbiAgfWAsXG59KSB7fVxuXG5jb25zdCBBR0VOVF9SRUdJU1RSWV9LRVkgPSBTeW1ib2wuZm9yKFwiZXhwZXJpbWVudGFsLWFnZW50LXJlZ2lzdHJ5XCIpO1xuXG5mdW5jdGlvbiBnZXRBZ2VudFJlZ2lzdHJ5KCk6IE1hcDxzdHJpbmcsIEFueUFnZW50PiB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICBsZXQgcmVnaXN0cnkgPSBnW0FHRU5UX1JFR0lTVFJZX0tFWV0gYXMgTWFwPHN0cmluZywgQW55QWdlbnQ+IHwgdW5kZWZpbmVkO1xuICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgcmVnaXN0cnkgPSBuZXcgTWFwKCk7XG4gICAgZ1tBR0VOVF9SRUdJU1RSWV9LRVldID0gcmVnaXN0cnk7XG4gIH1cbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBZ2VudChuYW1lOiBzdHJpbmcsIGFnZW50OiBBbnlBZ2VudCkge1xuICBnZXRBZ2VudFJlZ2lzdHJ5KCkuc2V0KG5hbWUsIGFnZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2VudDxSZXF1aXJlZCBleHRlbmRzIGJvb2xlYW4+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHJlcXVpcmVkPzogUmVxdWlyZWRcbik6IFJlcXVpcmVkIGV4dGVuZHMgdHJ1ZSA/IEFueUFnZW50IDogQW55QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBhZ2VudCA9IGdldEFnZW50UmVnaXN0cnkoKS5nZXQobmFtZSk7XG4gIGlmIChyZXF1aXJlZCAmJiAhYWdlbnQpIHtcbiAgICB0aHJvdyBuZXcgQWdlbnROb3RGb3VuZEVycm9yKHsgYWdlbnROYW1lOiBuYW1lIH0pO1xuICB9XG4gIHJldHVybiBhZ2VudCBhcyBSZXF1aXJlZCBleHRlbmRzIHRydWUgPyBBbnlBZ2VudCA6IEFueUFnZW50IHwgdW5kZWZpbmVkO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbVJlc3BvbnNlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgRWx5c2lhIGZyb20gXCJlbHlzaWFcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQsIFNlc3Npb25TZW5kQXJncyB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2VuZFJlc3VsdCB9IGZyb20gXCIuLi9zZXNzaW9uL3NlbmRcIjtcbmltcG9ydCB7XG4gIHR5cGUgQWdlbnRDb250cmFjdCxcbiAgYWdlbnRDb250cmFjdCxcbiAgdHlwZSBJbmZlckNvbnRyYWN0LFxuICB0eXBlIEluZmVyUmVzcG9uc2UsXG59IGZyb20gXCIuL2FnZW50Q29udHJhY3RcIjtcbmltcG9ydCB7IHR5cGUgQmFzZVBhdGgsIGJhc2VQYXRoRm9yQWdlbnQgfSBmcm9tIFwiLi9iYXNlLXBhdGhcIjtcblxudHlwZSBXaXRob3V0PE8sIEsgZXh0ZW5kcyBrZXlvZiBPPiA9IE9taXQ8TywgSz47XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0PFxuICBBZ2VudCBleHRlbmRzIEFueUFnZW50LFxuICBBZ2VudEJhc2VQYXRoIGV4dGVuZHMgc3RyaW5nID0gQmFzZVBhdGgsXG4+KFxuICBhZ2VudDogQWdlbnQsXG4gIG9wdGlvbnM6IHtcbiAgICBiYXNlUGF0aD86IEFnZW50QmFzZVBhdGg7XG4gICAgd29ya2Zsb3c/OiAoXG4gICAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIC4uLmFyZ3M6IFNlc3Npb25TZW5kQXJnczxBbnlBZ2VudD5cbiAgICApID0+IFByb21pc2U8U2VuZFJlc3VsdD47XG4gICAgb3ZlcnJpZGVzPzoge1xuICAgICAgW0sgaW4ga2V5b2YgQWdlbnRDb250cmFjdDxBZ2VudD5dPzogKFxuICAgICAgICBjb250cmFjdDogV2l0aG91dDxJbmZlckNvbnRyYWN0PEFnZW50PltLXSwgXCJyZXNwb25zZVwiPixcbiAgICAgICAgbmV4dDogKCkgPT4gUHJvbWlzZTxJbmZlclJlc3BvbnNlPEFnZW50LCBLPiB8IFJlc3BvbnNlPlxuICAgICAgKSA9PiBQcm9taXNlPEluZmVyUmVzcG9uc2U8QWdlbnQsIEs+IHwgUmVzcG9uc2U+O1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIGNvbnN0IHsgYmFzZVBhdGggPSBiYXNlUGF0aEZvckFnZW50KGFnZW50Lm5hbWUpLCB3b3JrZmxvdyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjb250cmFjdCA9IGFnZW50Q29udHJhY3QoYWdlbnQpO1xuXG4gIGNvbnN0IHJvdXRlciA9IG5ldyBFbHlzaWEoeyBwcmVmaXg6IGJhc2VQYXRoIH0pXG4gICAgLmdldChcbiAgICAgIFwiLzpzZXNzaW9uSWRcIixcbiAgICAgIGFzeW5jICh7IHBhcmFtcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGFnZW50LnNlc3Npb24ocGFyYW1zLnNlc3Npb25JZCEpO1xuICAgICAgICAgIGNvbnN0IHVpID0gYXdhaXQgc2Vzc2lvbi5oaXN0b3J5KCk7XG4gICAgICAgICAgcmV0dXJuIHVpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3B0aW9ucy5vdmVycmlkZXM/LltcInNlc3Npb24uZ2V0XCJdO1xuICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIGF3YWl0IG92ZXJyaWRlKFxuICAgICAgICAgICAgICB7IHBhcmFtcyB9LFxuICAgICAgICAgICAgICAvLyBUT0RPIG1ha2UgdGhlIG1pc21hdGNoZWQgdHlwZXMgd2l0aCBBSSBTREsgbGVzcyB3ZWlyZFxuICAgICAgICAgICAgICBuZXh0IGFzICgpID0+IFByb21pc2U8XG4gICAgICAgICAgICAgICAgSW5mZXJSZXNwb25zZTxBZ2VudCwgXCJzZXNzaW9uLmdldFwiPiB8IFJlc3BvbnNlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oYXdhaXQgbmV4dCgpKTtcbiAgICAgIH0sXG4gICAgICBjb250cmFjdFtcInNlc3Npb24uZ2V0XCJdXG4gICAgKVxuICAgIC5wb3N0KFxuICAgICAgXCIvOnNlc3Npb25JZFwiLFxuICAgICAgYXN5bmMgKHsgcGFyYW1zLCBib2R5IH0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYWdlbnQuc2Vzc2lvbihwYXJhbXMuc2Vzc2lvbklkISk7XG5cbiAgICAgICAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93L2FwaVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0KHdvcmtmbG93LCBbcGFyYW1zLnNlc3Npb25JZCEsIGJvZHldKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHNlc3Npb24uc3RyZWFtKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UoeyBzdHJlYW0gfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKGJvZHkpO1xuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHNlc3Npb24uc3RyZWFtKCk7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKHsgc3RyZWFtIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3B0aW9ucy5vdmVycmlkZXM/LltcInNlc3Npb24ucG9zdFwiXTtcbiAgICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IG92ZXJyaWRlKHsgcGFyYW1zLCBib2R5IH0sIG5leHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG5leHQoKTtcbiAgICAgIH0sXG4gICAgICBjb250cmFjdFtcInNlc3Npb24ucG9zdFwiXVxuICAgIClcbiAgICAuZ2V0KFxuICAgICAgXCIvOnNlc3Npb25JZC9yZWNvbm5lY3RcIixcbiAgICAgIGFzeW5jICh7IHBhcmFtcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGFnZW50LnNlc3Npb24ocGFyYW1zLnNlc3Npb25JZCEpO1xuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHNlc3Npb24uc3RyZWFtKCk7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKHsgc3RyZWFtIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3B0aW9ucy5vdmVycmlkZXM/LltcInJlY29ubmVjdC5nZXRcIl07XG4gICAgICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBvdmVycmlkZSh7IHBhcmFtcyB9LCBuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXh0KCk7XG4gICAgICB9LFxuICAgICAgY29udHJhY3RbXCJyZWNvbm5lY3QuZ2V0XCJdXG4gICAgKVxuICAgIC5wb3N0KFxuICAgICAgXCIvOnNlc3Npb25JZC9pbnRlcnJ1cHRcIixcblxuICAgICAgYXN5bmMgKHsgcGFyYW1zLCBib2R5IH0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYWdlbnQuc2Vzc2lvbihwYXJhbXMuc2Vzc2lvbklkISk7XG4gICAgICAgICAgYXdhaXQgc2Vzc2lvbi5pbnRlcnJ1cHQoYm9keSk7XG4gICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3B0aW9ucy5vdmVycmlkZXM/LltcImludGVycnVwdC5wb3N0XCJdO1xuICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihhd2FpdCBvdmVycmlkZSh7IHBhcmFtcywgYm9keSB9LCBuZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihhd2FpdCBuZXh0KCkpO1xuICAgICAgfSxcbiAgICAgIGNvbnRyYWN0W1wiaW50ZXJydXB0LnBvc3RcIl1cbiAgICApO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iLCAiaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB7XG4gIGJ1aWxkU2Vzc2lvbkhpc3RvcnlTY2hlbWEsXG4gIGJ1aWxkVUlNZXNzYWdlUGFydFNjaGVtYSxcbiAgYnVpbGRVSU1lc3NhZ2VTY2hlbWEsXG59IGZyb20gXCIuL3NjaGVtYXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFnZW50Q29udHJhY3Q8QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudD4oYWdlbnQ6IEFnZW50KSB7XG4gIGNvbnN0IGNvbnRyYWN0ID0ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjoge1xuICAgICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICAgcmVzcG9uc2U6IGJ1aWxkU2Vzc2lvbkhpc3RvcnlTY2hlbWEoYWdlbnQpLFxuICAgIH0sXG4gICAgXCJzZXNzaW9uLnBvc3RcIjoge1xuICAgICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICAgYm9keTogei51bmlvbihbei5zdHJpbmcoKSwgYnVpbGRVSU1lc3NhZ2VTY2hlbWEoYWdlbnQudG9vbHMpXSksXG4gICAgICByZXNwb25zZTogei5hbnkoKSxcbiAgICB9LFxuICAgIFwicmVjb25uZWN0LmdldFwiOiB7XG4gICAgICBwYXJhbXM6IHoub2JqZWN0KHtcbiAgICAgICAgc2Vzc2lvbklkOiB6LnN0cmluZygpLFxuICAgICAgfSksXG4gICAgICByZXNwb25zZTogei5hbnkoKSxcbiAgICB9LFxuICAgIFwiaW50ZXJydXB0LnBvc3RcIjoge1xuICAgICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICAgYm9keTogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICBsYXN0UGFydDogelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgIGluZGV4OiB6Lm51bWJlcigpLFxuICAgICAgICAgICAgICBwYXJ0OiBidWlsZFVJTWVzc2FnZVBhcnRTY2hlbWEoYWdlbnQudG9vbHMpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIHJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLFxuICAgICAgfSksXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBwYXJhbXM6IHouWm9kVHlwZTtcbiAgICAgIGJvZHk/OiB6LlpvZFR5cGU7XG4gICAgICByZXNwb25zZTogei5ab2RUeXBlO1xuICAgIH1cbiAgPjtcblxuICByZXR1cm4gY29udHJhY3Q7XG59XG5cbmV4cG9ydCB0eXBlIEFnZW50Q29udHJhY3Q8QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudD4gPSBSZXR1cm5UeXBlPFxuICB0eXBlb2YgYWdlbnRDb250cmFjdDxBZ2VudD5cbj47XG5cbmV4cG9ydCB0eXBlIEluZmVyQ29udHJhY3Q8QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudD4gPSB7XG4gIFtLIGluIGtleW9mIEFnZW50Q29udHJhY3Q8QWdlbnQ+XToge1xuICAgIFtLMiBpbiBrZXlvZiBBZ2VudENvbnRyYWN0PEFnZW50PltLXV06IHouaW5mZXI8QWdlbnRDb250cmFjdDxBZ2VudD5bS11bSzJdPjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEluZmVyUmVzcG9uc2U8XG4gIEFnZW50IGV4dGVuZHMgQW55QWdlbnQsXG4gIEtleSBleHRlbmRzIGtleW9mIEFnZW50Q29udHJhY3Q8QWdlbnQ+LFxuPiA9IEluZmVyQ29udHJhY3Q8QWdlbnQ+W0tleV1bXCJyZXNwb25zZVwiXTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEZpbGVVSVBhcnQsXG4gIEluZmVyVUlUb29scyxcbiAgUmVhc29uaW5nVUlQYXJ0LFxuICBTb3VyY2VVcmxVSVBhcnQsXG4gIFN0ZXBTdGFydFVJUGFydCxcbiAgVGV4dFVJUGFydCxcbiAgVG9vbFNldCxcbiAgVG9vbFVJUGFydCxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcblxudHlwZSBVSU1lc3NhZ2VQYXJ0PFQgZXh0ZW5kcyBUb29sU2V0PiA9XG4gIHwgVGV4dFVJUGFydFxuICB8IFJlYXNvbmluZ1VJUGFydFxuICB8IEZpbGVVSVBhcnRcbiAgfCBTb3VyY2VVcmxVSVBhcnRcbiAgfCBTdGVwU3RhcnRVSVBhcnRcbiAgfCBUb29sVUlQYXJ0PEluZmVyVUlUb29sczxUPj47XG5cbmNvbnN0IFRleHRQYXJ0ID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICB0ZXh0OiB6LnN0cmluZygpLFxufSk7XG5cbmNvbnN0IFJlYXNvbmluZ1BhcnQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInJlYXNvbmluZ1wiKSxcbiAgdGV4dDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBGaWxlUGFydCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiZmlsZVwiKSxcbiAgbWVkaWFUeXBlOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKCksXG4gIGZpbGVuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgU291cmNlVXJsUGFydCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic291cmNlLXVybFwiKSxcbiAgc291cmNlSWQ6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBTdGVwU3RhcnRQYXJ0ID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGVwLXN0YXJ0XCIpLFxufSk7XG5cbmZ1bmN0aW9uIHRvb2xQYXJ0U2NoZW1hcyhuYW1lOiBzdHJpbmcsIHRvb2w6IFRvb2xTZXRbc3RyaW5nXSkge1xuICBjb25zdCBpbnB1dCA9IHRvb2wuaW5wdXRTY2hlbWEgPz8gei51bmtub3duKCk7XG4gIGNvbnN0IG91dHB1dCA9IHRvb2wub3V0cHV0U2NoZW1hID8/IHoudW5rbm93bigpO1xuICBjb25zdCB0eXBlID0gei5saXRlcmFsKGB0b29sLSR7bmFtZX1gKTtcblxuICBjb25zdCBhcHByb3ZhbElkID0gei5vYmplY3QoeyBpZDogei5zdHJpbmcoKSB9KTtcbiAgY29uc3QgYXBwcm92YWxBcHByb3ZlZCA9IGFwcHJvdmFsSWQuZXh0ZW5kKHtcbiAgICBhcHByb3ZlZDogei5saXRlcmFsKHRydWUpLFxuICAgIHJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KTtcbiAgY29uc3QgYXBwcm92YWxEZW5pZWQgPSBhcHByb3ZhbElkLmV4dGVuZCh7XG4gICAgYXBwcm92ZWQ6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgcmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pO1xuICBjb25zdCBhcHByb3ZhbFJlc3BvbnNlID0gYXBwcm92YWxJZC5leHRlbmQoe1xuICAgIGFwcHJvdmVkOiB6LmJvb2xlYW4oKSxcbiAgICByZWFzb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSk7XG5cbiAgcmV0dXJuIFtcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0eXBlLFxuICAgICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICAgIHN0YXRlOiB6LmxpdGVyYWwoXCJpbnB1dC1zdHJlYW1pbmdcIiksXG4gICAgICBpbnB1dDogei51bmtub3duKCksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdHlwZSxcbiAgICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgICBzdGF0ZTogei5saXRlcmFsKFwiaW5wdXQtYXZhaWxhYmxlXCIpLFxuICAgICAgaW5wdXQsXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdHlwZSxcbiAgICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgICBzdGF0ZTogei5saXRlcmFsKFwiYXBwcm92YWwtcmVxdWVzdGVkXCIpLFxuICAgICAgaW5wdXQsXG4gICAgICBhcHByb3ZhbDogYXBwcm92YWxJZCxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0eXBlLFxuICAgICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICAgIHN0YXRlOiB6LmxpdGVyYWwoXCJhcHByb3ZhbC1yZXNwb25kZWRcIiksXG4gICAgICBpbnB1dCxcbiAgICAgIGFwcHJvdmFsOiBhcHByb3ZhbFJlc3BvbnNlLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHR5cGUsXG4gICAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgICAgc3RhdGU6IHoubGl0ZXJhbChcIm91dHB1dC1hdmFpbGFibGVcIiksXG4gICAgICBpbnB1dCxcbiAgICAgIG91dHB1dCxcbiAgICAgIGFwcHJvdmFsOiBhcHByb3ZhbEFwcHJvdmVkLm9wdGlvbmFsKCksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdHlwZSxcbiAgICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgICBzdGF0ZTogei5saXRlcmFsKFwib3V0cHV0LWVycm9yXCIpLFxuICAgICAgaW5wdXQsXG4gICAgICBlcnJvclRleHQ6IHouc3RyaW5nKCksXG4gICAgICBhcHByb3ZhbDogYXBwcm92YWxBcHByb3ZlZC5vcHRpb25hbCgpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHR5cGUsXG4gICAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgICAgc3RhdGU6IHoubGl0ZXJhbChcIm91dHB1dC1kZW5pZWRcIiksXG4gICAgICBpbnB1dCxcbiAgICAgIGFwcHJvdmFsOiBhcHByb3ZhbERlbmllZCxcbiAgICB9KSxcbiAgXTtcbn1cblxuY29uc3QgVXNhZ2VTdW1tYXJ5ID0gei5vYmplY3Qoe1xuICBtb2RlbDogei5zdHJpbmcoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCksXG4gIG91dHB1dFRva2Vuczogei5udW1iZXIoKSxcbiAgdG90YWxUb2tlbnM6IHoubnVtYmVyKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKSxcbiAgY2FjaGVXcml0ZVRva2Vuczogei5udW1iZXIoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLFxuICBzdGVwQ291bnQ6IHoubnVtYmVyKCksXG59KTtcblxuY29uc3QgU2Vzc2lvblVzYWdlID0gei5vYmplY3Qoe1xuICB0b3RhbDogVXNhZ2VTdW1tYXJ5LmV4dGVuZCh7IG1lc3NhZ2VDb3VudDogei5udW1iZXIoKSB9KSxcbiAgYnlNZXNzYWdlSWQ6IHoucmVjb3JkKHouc3RyaW5nKCksIFVzYWdlU3VtbWFyeS5udWxsYWJsZSgpKSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTZXNzaW9uSGlzdG9yeVNjaGVtYTxBZ2VudCBleHRlbmRzIEFueUFnZW50PihcbiAgYWdlbnQ6IEFnZW50XG4pIHtcbiAgcmV0dXJuIHoub2JqZWN0KHtcbiAgICBtZXNzYWdlczogei5hcnJheShidWlsZFVJTWVzc2FnZVNjaGVtYShhZ2VudC50b29scykpLFxuICAgIHN0cmVhbWluZ01lc3NhZ2VJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHVzYWdlOiBTZXNzaW9uVXNhZ2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVSU1lc3NhZ2VQYXJ0U2NoZW1hPFQgZXh0ZW5kcyBUb29sU2V0PihcbiAgdG9vbHM6IFRcbik6IHouWm9kVHlwZTxVSU1lc3NhZ2VQYXJ0PFQ+PiB7XG4gIGNvbnN0IHRvb2xQYXJ0cyA9IE9iamVjdC5lbnRyaWVzKHRvb2xzKS5mbGF0TWFwKChbbmFtZSwgdG9vbF0pID0+XG4gICAgdG9vbFBhcnRTY2hlbWFzKG5hbWUsIHRvb2wpXG4gICk7XG5cbiAgY29uc3QgYWxsID0gW1xuICAgIFRleHRQYXJ0LFxuICAgIFJlYXNvbmluZ1BhcnQsXG4gICAgRmlsZVBhcnQsXG4gICAgU291cmNlVXJsUGFydCxcbiAgICBTdGVwU3RhcnRQYXJ0LFxuICAgIC4uLnRvb2xQYXJ0cyxcbiAgXTtcblxuICByZXR1cm4gei51bmlvbihhbGwpIGFzIHouWm9kVHlwZTxVSU1lc3NhZ2VQYXJ0PFQ+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVUlNZXNzYWdlU2NoZW1hPFQgZXh0ZW5kcyBUb29sU2V0Pih0b29sczogVCkge1xuICByZXR1cm4gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIHJvbGU6IHouZW51bShbXCJzeXN0ZW1cIiwgXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgICBwYXJ0czogei5hcnJheShidWlsZFVJTWVzc2FnZVBhcnRTY2hlbWEodG9vbHMpKSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNlc3Npb25VSVNjaGVtYTxUIGV4dGVuZHMgVG9vbFNldD4odG9vbHM6IFQpIHtcbiAgY29uc3QgVUlNZXNzYWdlID0gYnVpbGRVSU1lc3NhZ2VTY2hlbWEodG9vbHMpO1xuXG4gIHJldHVybiB6Lm9iamVjdCh7XG4gICAgdGl0bGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICBtZXNzYWdlczogei5hcnJheShVSU1lc3NhZ2UpLFxuICAgIHN0cmVhbWluZ01lc3NhZ2VJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHVzYWdlOiBTZXNzaW9uVXNhZ2UsXG4gIH0pO1xufVxuIiwgImV4cG9ydCB0eXBlIEJhc2VQYXRoID0gYC9hcGkvYWdlbnRzL1thZ2VudF1gO1xuZXhwb3J0IHR5cGUgU2Vzc2lvblBhdGggPSBgJHtCYXNlUGF0aCB8IChzdHJpbmcgJiB7fSl9L1tzZXNzaW9uSWRdYDtcbmV4cG9ydCB0eXBlIFJlY29ubmVjdFBhdGggPSBgJHtTZXNzaW9uUGF0aCB8IChzdHJpbmcgJiB7fSl9L3JlY29ubmVjdGA7XG5leHBvcnQgdHlwZSBJbnRlcnJ1cHRQYXRoID0gYCR7U2Vzc2lvblBhdGggfCAoc3RyaW5nICYge30pfS9pbnRlcnJ1cHRgO1xuXG5leHBvcnQgdHlwZSBQYXRoID0gU2Vzc2lvblBhdGggfCBSZWNvbm5lY3RQYXRoIHwgSW50ZXJydXB0UGF0aDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VQYXRoRm9yQWdlbnQoYWdlbnQ6IHN0cmluZykge1xuICByZXR1cm4gYC9hcGkvYWdlbnRzLyR7YWdlbnR9YCBhcyBjb25zdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxTQUFTLFNBQVMsUUFBaUM7QUFDakQsU0FBTyxPQUFPLFNBQVM7QUFDekI7QUFFQSxTQUFTLFVBQVUsUUFBK0I7QUFDaEQsU0FBTyxPQUFPLFVBQVU7QUFDMUI7QUFFQSxTQUFTLFVBQVUsUUFBdUIsT0FBMEI7QUFDbEUsU0FBTyxtQkFBbUIsS0FBSyxLQUFLLG1CQUFtQixTQUFTLE1BQU0sQ0FBQztBQUN6RTtBQUVBLFNBQVMsVUFBVSxRQUF1QixXQUEyQjtBQUNuRSxTQUFPLElBQUksVUFBVSxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksSUFBSSxTQUFTO0FBQzFEO0FBRUEsU0FBUyxXQUNQLFNBQ0EsT0FDcUM7QUFDckMsUUFBTSxTQUFTLEVBQUUsR0FBRyxTQUFTLEdBQUcsTUFBTTtBQUN0QyxRQUFNLFVBQVUsT0FBTyxRQUFRLE1BQU0sRUFBRTtBQUFBLElBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxNQUFNLFVBQWEsTUFBTTtBQUFBLEVBQ3RDO0FBQ0EsTUFBSSxRQUFRLFdBQVcsR0FBRztBQUN4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QUFVLElBQUk7QUFDNUIsZUFBTyxFQUFFLFNBQVMsS0FBSztBQUFBLE1BQ3pCO0FBRUEsWUFBTSxXQUFXLFFBQVEsWUFBWSxnQkFBZ0I7QUFDckQsVUFBSSxVQUFVO0FBQ1osZUFBTyxTQUFTLEtBQUssTUFBTSxTQUFTLEVBQUUsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFDN0Q7QUFFQSxhQUFPLFNBQVMsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ25DO0FBQUEsSUFDQSxTQUFTLGdCQUFnQjtBQUFBLEVBQzNCO0FBRUYsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJsb2ciLCAic25hcHNob3QiLCAibG9nIiwgImxvYWRTYW5kYm94U0RLIiwgImdldFRlc3RDcmVkZW50aWFscyIsICJsb2ciLCAic25hcHNob3QiLCAiYWdlbnQiLCAic2V0dXAiLCAic3RhcnRXb3JrZmxvdyIsICJzZGsiLCAiaW5zdGFuY2UiLCAicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X3VsaWQiLCAicGF0aCIsICJyZXNvbHZlIiwgImZzIiwgInJlc29sdmUiLCAidG9vbCIsICJpbXBvcnRfc2VyZGUiLCAiaW1wb3J0X3VsaWQiLCAidmVyY2VsU2FuZGJveCIsICJkb2NrZXJTYW5kYm94IiwgImxvY2FsU2FuZGJveCIsICJhZ2VudCIsICJsb2ciLCAicmVzb2x2ZSIsICJhZ2VudCIsICJpbXBvcnRfdWxpZCIsICJ1c2FnZSIsICJlcnJvcmUiLCAiaW1wb3J0X3VsaWQiLCAiaW1wb3J0X2FpIiwgImFnZW50IiwgImxvZyIsICJyZWFkRmlsZSIsICJyZXNvbHZlIiwgImxvZyIsICJpbXBvcnRfYWkiLCAiaW1wb3J0X3VsaWQiLCAiaW1wb3J0X3pvZCIsICJleGVjIiwgImFnZW50IiwgImltcG9ydF9haSIsICJ0b29sIiwgImFpVG9vbCIsICJhZ2VudCIsICJwYXRoIiwgImNyZWF0ZVByb2Nlc3NNYW5hZ2VyIiwgInN0YXJ0IiwgInN0YXRlIiwgImFnZW50IiwgInJlc29sdmUiLCAibG9nIiwgInNhbmRib3giLCAic2FuZGJveFJlY29yZCIsICJzdHJlYW0iLCAic3RyZWFtVGV4dEFpIiwgInVzYWdlIiwgImFnZW50IiwgImxvZyIsICJ1c2FnZSIsICJub3ciLCAiaWQiLCAiZXJyb3JlIiwgImFnZW50IiwgInJlc29sdmUiLCAicmVhZEZpbGUiLCAiYWxsIiwgImVycm9yZSIsICJpbXBvcnRfem9kIiwgImFnZW50IiwgImFnZW50IiwgImxvZyIsICJpbXBvcnRfYWkiLCAiaW1wb3J0X3pvZCIsICJpbXBvcnRfem9kIiwgInRvb2wiLCAiYWdlbnQiLCAiYWxsIiwgImFnZW50IiwgInoiLCAiYWdlbnQiLCAiYWdlbnQiLCAiRWx5c2lhIiwgInN0YXJ0IiwgInN0cmVhbSJdCn0K
5690
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzL2xvZ2dlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3cudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2RvY2tlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc2FuZGJveC9wcm9jZXNzLW1hbmFnZXIudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9hZ2VudC9jbGllbnQudHMiLCAiLi4vc3JjL3NhbmRib3gvaGFuZGxlLnRzIiwgIi4uL3NyYy9hZ2VudC9pcy12ZXJjZWwudHMiLCAiLi4vc3JjL2Vycm9ycy50cyIsICIuLi9zcmMvc2FuZGJveC9zZXR1cC50cyIsICIuLi9zcmMvc2FuZGJveC9leGVjLnRzIiwgIi4uL3NyYy9zYW5kYm94L2dldC1kb21haW4udHMiLCAiLi4vc3JjL3NhbmRib3gvZ2V0LXN0YXR1cy50cyIsICIuLi9zcmMvc2FuZGJveC9raWxsLnRzIiwgIi4uL3NyYy9zYW5kYm94L3JlYWQtZmlsZS50cyIsICIuLi9zcmMvc2FuZGJveC9zbmFwc2hvdC50cyIsICIuLi9zcmMvc2FuZGJveC9zdGFydC50cyIsICIuLi9zcmMvc2FuZGJveC9zdG9wLnRzIiwgIi4uL3NyYy9zYW5kYm94L3VwZGF0ZS1uZXR3b3JrLXBvbGljeS50cyIsICIuLi9zcmMvc2FuZGJveC93cml0ZS1maWxlcy50cyIsICIuLi9zcmMvc2Vzc2lvbi9oYW5kbGUudHMiLCAiLi4vc3JjL3V0aWxzL3VpLnRzIiwgIi4uL3NyYy91dGlscy91c2FnZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9oaXN0b3J5LnRzIiwgIi4uL3NyYy9zZXNzaW9uL2ludGVycnVwdC50cyIsICIuLi9zcmMvc2Vzc2lvbi9zZW5kLnRzIiwgIi4uL3NyYy9zZXNzaW9uL2FpLWxvb3Avc3RyZWFtLXRleHQudHMiLCAiLi4vc3JjL3NraWxscy9kaXNjb3Zlci50cyIsICIuLi9zcmMvc2tpbGxzL3BhcnNlci50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWhvc3QudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWlubGluZS50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUtcmVtb3RlLnRzIiwgIi4uL3NyYy90b29scy9pbmRleC50cyIsICIuLi9zcmMvdG9vbHMvamF2YXNjcmlwdC50cyIsICIuLi9zcmMvdG9vbHMvbmVlZHMtYXBwcm92YWwudHMiLCAiLi4vc3JjL3Rvb2xzL3Rvb2wudHMiLCAiLi4vc3JjL3V0aWxzL3Byb21wdC1jYWNoZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9zdHJlYW0udHMiLCAiLi4vc3JjL3Nlc3Npb24vdXBkYXRlLnRzIiwgIi4uL3NyYy9zZXNzaW9uL3VzYWdlLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2FkYXB0ZXIudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3Ytb3B0aW1pc3RpYy11cGRhdGUudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3YudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwudHMiLCAiLi4vc3JjL3N0b3JhZ2Uvc2hvdWxkLWZhbGxiYWNrLWt2Mi50cyIsICIuLi9zcmMvYWdlbnQvcmVnaXN0cnkudHMiLCAiLi4vc3JjL3JwYy9ycGMudHMiLCAiLi4vc3JjL3JwYy9hZ2VudENvbnRyYWN0LnRzIiwgIi4uL3NyYy9ycGMvc2NoZW1hcy50cyIsICIuLi9zcmMvcnBjL2Jhc2UtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiIHwgXCJzaWxlbnRcIjtcblxuY29uc3QgTE9HX0xFVkVMX1BSSU9SSVRZOiBSZWNvcmQ8TG9nTGV2ZWwsIG51bWJlcj4gPSB7XG4gIGluZm86IDAsXG4gIHdhcm46IDEsXG4gIGVycm9yOiAyLFxuICBzaWxlbnQ6IDMsXG59O1xuXG5leHBvcnQgdHlwZSBMb2dDb250ZXh0ID0ge1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgc2FuZGJveElkPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgbGV2ZWw/OiBMb2dMZXZlbDtcbiAgLyoqXG4gICAqIFRvcC1sZXZlbCBsYWJlbCBmb3IgYWxsIGxvZyBsaW5lcy5cbiAgICogQGRlZmF1bHQgXCJhZ2VudFwiXG4gICAqIEBleGFtcGxlIFwibXktYXBwXCIgXHUyMTkyIFtteS1hcHA6ZGVmYXVsdDp3b3JrZmxvd11cbiAgICovXG4gIHByZWZpeD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGdldExldmVsKGNvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IExvZ0xldmVsIHtcbiAgcmV0dXJuIGNvbmZpZy5sZXZlbCA/PyBcIndhcm5cIjtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlZml4KGNvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb25maWcucHJlZml4ID8/IFwiYWdlbnRcIjtcbn1cblxuZnVuY3Rpb24gc2hvdWxkTG9nKGNvbmZpZzogTG9nZ2luZ0NvbmZpZywgbGV2ZWw6IExvZ0xldmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBMT0dfTEVWRUxfUFJJT1JJVFlbbGV2ZWxdID49IExPR19MRVZFTF9QUklPUklUWVtnZXRMZXZlbChjb25maWcpXTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGFnKGNvbmZpZzogTG9nZ2luZ0NvbmZpZywgc3Vic3lzdGVtOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFske2dldFByZWZpeChjb25maWcpfToke2NvbmZpZy5uYW1lfToke3N1YnN5c3RlbX1dYDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0YShcbiAgY29udGV4dDogTG9nQ29udGV4dCxcbiAgZXh0cmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmNvbnRleHQsIC4uLmV4dHJhIH07XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtZXJnZWQpLmZpbHRlcihcbiAgICAoWywgdl0pID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG4gICk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIHJlYWRvbmx5IHN1YnN5c3RlbTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBMb2dDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzdWJzeXN0ZW0sXG4gICAgY29uZmlnLFxuICAgIGNvbnRleHQsXG4gIH06IHtcbiAgICBzdWJzeXN0ZW06IHN0cmluZztcbiAgICBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gICAgY29udGV4dD86IExvZ0NvbnRleHQ7XG4gIH0pIHtcbiAgICB0aGlzLnN1YnN5c3RlbSA9IHN1YnN5c3RlbTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0ID8/IHt9O1xuICB9XG5cbiAgY2hpbGQoe1xuICAgIHN1YnN5c3RlbSxcbiAgICBjb250ZXh0LFxuICB9OiB7XG4gICAgc3Vic3lzdGVtPzogc3RyaW5nO1xuICAgIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xuICB9KTogTG9nZ2VyIHtcbiAgICByZXR1cm4gbmV3IExvZ2dlcih7XG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc3Vic3lzdGVtOiBzdWJzeXN0ZW0gPyBgJHt0aGlzLnN1YnN5c3RlbX06JHtzdWJzeXN0ZW19YCA6IHRoaXMuc3Vic3lzdGVtLFxuICAgICAgY29udGV4dDogeyAuLi50aGlzLmNvbnRleHQsIC4uLmNvbnRleHQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHdpdGhDb250ZXh0KGNvbnRleHQ6IExvZ0NvbnRleHQpOiBMb2dnZXIge1xuICAgIHJldHVybiBuZXcgTG9nZ2VyKHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBzdWJzeXN0ZW06IHRoaXMuc3Vic3lzdGVtLFxuICAgICAgY29udGV4dDogeyAuLi50aGlzLmNvbnRleHQsIC4uLmNvbnRleHQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJpbmZvXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghc2hvdWxkTG9nKHRoaXMuY29uZmlnLCBcIndhcm5cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGZvcm1hdERhdGEodGhpcy5jb250ZXh0LCBkYXRhKTtcbiAgICBpZiAoZCkge1xuICAgICAgY29uc29sZS53YXJuKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghc2hvdWxkTG9nKHRoaXMuY29uZmlnLCBcImVycm9yXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLCBsb2dzIHRoZSBlbGFwc2VkIHRpbWUgYXQgaW5mbyBsZXZlbC5cbiAgICogUGFzcyBgbG9nT25TdGFydDogdHJ1ZWAgdG8gYWxzbyBsb2cgd2hlbiB0aGUgdGltZXIgYmVnaW5zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkb25lID0gbG9nLnRpbWUoXCJzYW5kYm94IHNldHVwXCIsIHsgc2FuZGJveElkIH0sIHsgbG9nT25TdGFydDogdHJ1ZSB9KTtcbiAgICogYXdhaXQgc2V0dXAoKTtcbiAgICogZG9uZSgpOyAvLyBzdGFydDogW2FnZW50OmRlZmF1bHQ6c2FuZGJveF0gc2FuZGJveCBzZXR1cCB7IHNhbmRib3hJZDogJy4uLicgfVxuICAgKiAgICAgICAgIC8vIGVuZDogICBbYWdlbnQ6ZGVmYXVsdDpzYW5kYm94XSBzYW5kYm94IHNldHVwIHsgc2FuZGJveElkOiAnLi4uJywgZHVyYXRpb25NczogMTIzIH1cbiAgICovXG4gIHRpbWUoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBvcHRzPzogeyBsb2dPblN0YXJ0PzogYm9vbGVhbiB9XG4gICk6IChlbmREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQge1xuICAgIGlmIChvcHRzPy5sb2dPblN0YXJ0KSB7XG4gICAgICB0aGlzLmluZm8oYFtzdGFydF0gJHttZXNzYWdlfWAsIGRhdGEpO1xuICAgIH1cbiAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIChlbmREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIHRoaXMuaW5mbyhvcHRzPy5sb2dPblN0YXJ0ID8gYFtlbmRdICR7bWVzc2FnZX1gIDogbWVzc2FnZSwge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICAuLi5lbmREYXRhLFxuICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIoe1xuICBjb25maWcsXG4gIHN1YnN5c3RlbSxcbiAgY29udGV4dCxcbn06IHtcbiAgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICBzdWJzeXN0ZW06IHN0cmluZztcbiAgY29udGV4dD86IExvZ0NvbnRleHQ7XG59KTogTG9nZ2VyIHtcbiAgcmV0dXJuIG5ldyBMb2dnZXIoeyBjb25maWcsIHN1YnN5c3RlbSwgY29udGV4dCB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3ggYXMgVmVyY2VsU2FuZGJveFNESyB9IGZyb20gXCJAdmVyY2VsL3NhbmRib3hcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEFnZW50UmVmIH0gZnJvbSBcIi4uLy4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgVmVyY2VsQmluZGluZ01ldGFkYXRhIH0gZnJvbSBcIi4uL3ZlcmNlbFwiO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkU2FuZGJveFNESygpOiBQcm9taXNlPHR5cGVvZiBWZXJjZWxTYW5kYm94U0RLPiB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBERUZBVUxUX1BPTExfSU5URVJWQUxfTVMgPSAyICogNjAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9JRExFX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVMgPSAxMCAqIDYwICogMTAwMDtcblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlU3RlcFJlc3VsdCA9XG4gIHwgeyBhY3Rpb246IFwiY29udGludWVcIjsgbmV4dFBvbGxNczogbnVtYmVyIH1cbiAgfCB7XG4gICAgICBhY3Rpb246IFwiZXhpdFwiO1xuICAgICAgcmVhc29uOiBcInNhbmRib3hJZF9jaGFuZ2VkXCIgfCBcImlkbGVcIiB8IFwidGltZW91dFwiIHwgXCJub3RfZm91bmRcIjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVDb25maWcgPSB7XG4gIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICBzdG9wQWZ0ZXJJbmFjdGl2ZU1zPzogbnVtYmVyO1xuICBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUlucHV0ID0ge1xuICBhZ2VudDogU2FuZGJveEFnZW50UmVmO1xuICBzYW5kYm94SWQ6IHN0cmluZztcbiAgdmVyY2VsU2FuZGJveElkOiBzdHJpbmc7XG4gIGNvbmZpZz86IExpZmVjeWNsZUNvbmZpZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0FuZFNuYXBzaG90U3RlcChcbiAgaW5wdXQ6IExpZmVjeWNsZUlucHV0XG4pOiBQcm9taXNlPEVycm9yIHwgTGlmZWN5Y2xlU3RlcFJlc3VsdD4ge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgY29uc3Qgc3RvcmFnZSA9IGlucHV0LmFnZW50LnN0b3JhZ2U7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmlucHV0LmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogaW5wdXQuYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJzYW5kYm94OmxpZmVjeWNsZVwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQgfSxcbiAgfSk7XG5cbiAgbG9nLmluZm8oXCJsaWZlY3ljbGUgY2hlY2sgc3RhcnRlZFwiLCB7XG4gICAgdmVyY2VsU2FuZGJveElkOiBpbnB1dC52ZXJjZWxTYW5kYm94SWQsXG4gIH0pO1xuXG4gIGNvbnN0IHJlY29yZCA9IGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC5nZXQoaW5wdXQuc2FuZGJveElkKTtcbiAgaWYgKCFyZWNvcmQpIHtcbiAgICBsb2cud2FybihcInNhbmRib3ggcmVjb3JkIG5vdCBmb3VuZCwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IHJlY29yZC5zZXR1cD8ubWV0YWRhdGEgYXMgVmVyY2VsQmluZGluZ01ldGFkYXRhIHwgbnVsbDtcbiAgY29uc3QgY3VycmVudFNhbmRib3hJZCA9IG1ldGFkYXRhPy5zYW5kYm94SWQgPz8gbnVsbDtcblxuICBpZiAoY3VycmVudFNhbmRib3hJZCAhPT0gaW5wdXQudmVyY2VsU2FuZGJveElkKSB7XG4gICAgbG9nLmluZm8oXCJzYW5kYm94IElEIGNoYW5nZWQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIGV4cGVjdGVkOiBpbnB1dC52ZXJjZWxTYW5kYm94SWQsXG4gICAgICBhY3R1YWw6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcInNhbmRib3hJZF9jaGFuZ2VkXCIgfTtcbiAgfVxuXG4gIGlmICghY3VycmVudFNhbmRib3hJZCkge1xuICAgIGxvZy53YXJuKFwibm8gY3VycmVudCBzYW5kYm94IElEIGluIG1ldGFkYXRhLCBleGl0aW5nIGxpZmVjeWNsZVwiKTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGNvbnN0IHBvbGxJbnRlcnZhbE1zID1cbiAgICBpbnB1dC5jb25maWc/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUztcbiAgY29uc3QgaWRsZVRpbWVvdXRNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5zdG9wQWZ0ZXJJbmFjdGl2ZU1zID8/IERFRkFVTFRfSURMRV9USU1FT1VUX01TO1xuICBjb25zdCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5zbmFwc2hvdEJlZm9yZVRpbWVvdXRNcyA/PyBTTkFQU0hPVF9CRUZPUkVfVElNRU9VVF9NUztcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBsYXN0QWN0aXZpdHkgPSByZWNvcmQubGFzdEFjdGl2ZUF0ID8/IHJlY29yZC5jcmVhdGVkQXQgPz8gbm93O1xuICBjb25zdCBpZGxlRHVyYXRpb24gPSBub3cgLSBsYXN0QWN0aXZpdHk7XG4gIGNvbnN0IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID0gaWRsZUR1cmF0aW9uID4gaWRsZVRpbWVvdXRNcztcblxuICBsZXQgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgc2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgfSk7XG4gICAgaWYgKHNhbmRib3gudGltZW91dCA8IHNuYXBzaG90QmVmb3JlVGltZW91dE1zKSB7XG4gICAgICBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBsb2cud2FybihcImZhaWxlZCB0byBnZXQgc2FuZGJveCBmcm9tIFNESywgZXhpdGluZyBsaWZlY3ljbGVcIiwge1xuICAgICAgdmVyY2VsU2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgaWYgKHNob3VsZFNuYXBzaG90RHVlVG9JZGxlIHx8IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0KSB7XG4gICAgY29uc3QgcmVhc29uID0gc2hvdWxkU25hcHNob3REdWVUb0lkbGUgPyBcImlkbGVcIiA6IFwidGltZW91dFwiO1xuICAgIGxvZy5pbmZvKFwic25hcHNob3R0aW5nIHNhbmRib3ggYmVmb3JlIGV4aXRcIiwge1xuICAgICAgcmVhc29uLFxuICAgICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgc2FuZGJveC5zbmFwc2hvdCgpO1xuICAgICAgbG9nLmluZm8oXCJzbmFwc2hvdCBjcmVhdGVkXCIsIHsgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9KTtcblxuICAgICAgYXdhaXQgc3RvcmFnZS5zYW5kYm94LnVwZGF0ZShpbnB1dC5zYW5kYm94SWQsIHtcbiAgICAgICAgc2V0dXA6IHtcbiAgICAgICAgICAuLi5yZWNvcmQuc2V0dXAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveElkOiBudWxsLCBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGxvZy5pbmZvKFwic2FuZGJveCByZWNvcmQgdXBkYXRlZCB3aXRoIHNuYXBzaG90XCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzbmFwc2hvdCBzYW5kYm94XCIsIHsgY2F1c2U6IGUgfSk7XG4gICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpO1xuICAgIH1cbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb24gfTtcbiAgfVxuXG4gIGxvZy5pbmZvKFwic2FuZGJveCBzdGlsbCBhY3RpdmUsIGNvbnRpbnVpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICBpZGxlRHVyYXRpb25NczogaWRsZUR1cmF0aW9uLFxuICAgIG5leHRQb2xsTXM6IHBvbGxJbnRlcnZhbE1zLFxuICB9KTtcbiAgcmV0dXJuIHsgYWN0aW9uOiBcImNvbnRpbnVlXCIsIG5leHRQb2xsTXM6IHBvbGxJbnRlcnZhbE1zIH07XG59XG4iLCAiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNoZWNrQW5kU25hcHNob3RTdGVwLCB0eXBlIExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4vc3RlcHNcIjtcblxuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVJbnB1dCB9O1xuXG5jb25zdCBERUZBVUxUX1BPTExfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpZmVjeWNsZVdvcmtmbG93KHtcbiAgaW5wdXQsXG59OiB7XG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dDtcbn0pIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcblxuICBsZXQgbmV4dFBvbGxNcyA9IGlucHV0LmNvbmZpZz8ucG9sbEludGVydmFsTXMgPz8gREVGQVVMVF9QT0xMX01TO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIHdvcmtmbG93IHN0YXJ0ZWRcIiwge1xuICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgIHBvbGxNczogbmV4dFBvbGxNcyxcbiAgfSk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhd2FpdCBzbGVlcChuZXh0UG9sbE1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrQW5kU25hcHNob3RTdGVwKGlucHV0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgbG9nLmVycm9yKFwibGlmZWN5Y2xlIHN0ZXAgZmFpbGVkXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09IFwiZXhpdFwiKSB7XG4gICAgICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBleGl0aW5nXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIHJlYXNvbjogcmVzdWx0LnJlYXNvbixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dFBvbGxNcyA9IHJlc3VsdC5uZXh0UG9sbE1zO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgc3RhcnQgYXMgc3RhcnRXb3JrZmxvdyB9IGZyb20gXCJ3b3JrZmxvdy9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvc3RlcHNcIjtcbmltcG9ydCB7IHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3dcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKSB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBNQVhfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDYwICogMTAwMDsgLy8gNSBob3Vyc1xuY29uc3QgSE9NRV9ESVIgPSBcIi9ob21lL3ZlcmNlbC1zYW5kYm94XCI7XG5jb25zdCBERUZBVUxUX1ZDUFVTID0gMjtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xuICByZXNvdXJjZXM/OiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xuICBsaWZlY3ljbGU/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hJZDogc3RyaW5nO1xufTtcblxudHlwZSBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgcmVzb3VyY2VzOiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTYW5kYm94R29uZUVycm9yKGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9XG4gICAgKGUgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSkucmVzcG9uc2U/LnN0YXR1cyA/P1xuICAgIChlIGFzIHsgY2F1c2U/OiB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9IH0pLmNhdXNlPy5yZXNwb25zZVxuICAgICAgPy5zdGF0dXM7XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDEwIHx8IHN0YXR1cyA9PT0gNDIyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtc2cgPSBlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGNvbW1hbmQgZGF0YVwiKSB8fFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGxvZ3NcIilcbiAgKTtcbn1cblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2RrKHtcbiAgcmVzb3VyY2VzLFxuICBwb3J0cyxcbiAgbmV0d29ya1BvbGljeSxcbiAgc25hcHNob3RJZCxcbn06IENyZWF0ZVNhbmRib3hPcHRzKSB7XG4gIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICBjb25zdCBiYXNlID0ge1xuICAgIHJlc291cmNlcyxcbiAgICB0aW1lb3V0OiBNQVhfVElNRU9VVF9NUyxcbiAgICAuLi4ocG9ydHMgPyB7IHBvcnRzIH0gOiB7fSksXG4gICAgLi4uKG5ldHdvcmtQb2xpY3kgPyB7IG5ldHdvcmtQb2xpY3kgfSA6IHt9KSxcbiAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgfTtcblxuICBpZiAoc25hcHNob3RJZCkge1xuICAgIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZSh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgc291cmNlOiB7IHR5cGU6IFwic25hcHNob3RcIiBhcyBjb25zdCwgc25hcHNob3RJZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFNhbmRib3hTREsuY3JlYXRlKGJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTZXR1cFNuYXBzaG90KHtcbiAgc2FuZGJveE9wdHMsXG4gIHJ1bixcbiAgc3RvcmFnZSxcbiAgc25hcHNob3RWZXJzaW9uLFxuICBsb2csXG59OiB7XG4gIHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cztcbiAgcnVuOiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuICBzbmFwc2hvdFZlcnNpb246IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0ZW1wU2RrOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNkaz4+IHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgdGVtcFNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgY29uc3QgdGVtcEluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZSh0ZW1wU2RrKTtcbiAgICBhd2FpdCBydW4odGVtcEluc3RhbmNlKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRlbXBTZGsuc25hcHNob3QoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNldHVwLnNldChzbmFwc2hvdFZlcnNpb24sIHtcbiAgICAgIHZlcnNpb246IHNuYXBzaG90VmVyc2lvbixcbiAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQsXG4gICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICBsYXN0VXNlZEF0OiBudWxsLFxuICAgIH0pO1xuICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBzZXR1cCBzbmFwc2hvdFwiLCB7XG4gICAgICBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBjYXVzZTogZXJyb3IsXG4gICAgfSk7XG4gICAgaWYgKHRlbXBTZGspIHtcbiAgICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFZlcmNlbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveDtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveCwgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZGsgPSBzZGs7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gSE9NRV9ESVI7XG4gIH1cblxuICBhc3luYyBleGVjKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgY3dkLFxuICAgIGVudixcbiAgICBzdWRvLFxuICAgIHNpZ25hbCxcbiAgfToge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNkay5ydW5Db21tYW5kKHtcbiAgICAgIGNtZDogY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBjd2Q6IGN3ZCA/PyB0aGlzLmN3ZCxcbiAgICAgIGVudixcbiAgICAgIHN1ZG8sXG4gICAgICBzaWduYWwsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ0J1ZmZlcjogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICByZXNvbHZlOiBudWxsIGFzICgoKSA9PiB2b2lkKSB8IG51bGwsXG4gICAgICBjb25zdW1lZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVMb2dzID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2Ygb3V0cHV0LmxvZ3MoKSkge1xuICAgICAgICAgIGlmIChlbnRyeS5zdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBlbnRyeS5kYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGRlcnIgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dCdWZmZXIucHVzaChlbnRyeSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTYW5kYm94IG1heSBoYXZlIGJlZW4gc3RvcHBlZCBcdTIwMTQgbG9ncyBlbmRwb2ludCByZXR1cm5zIDQyMlxuICAgICAgfVxuICAgICAgc3RhdGUuY29uc3VtZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgfSkoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgd2hpbGUgKCFzdGF0ZS5jb25zdW1lZCB8fCBpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbG9nQnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHlpZWxkIGxvZ0J1ZmZlcltpbmRleCsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb25zdW1lTG9ncy50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gYXdhaXQgb3V0cHV0LndhaXQoKTtcbiAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBmaW5pc2hlZC5leGl0Q29kZSB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNTYW5kYm94R29uZUVycm9yKGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNvbW1hbmRJZDogb3V0cHV0LmNtZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKHtcbiAgICBwYXRoOiBmaWxlUGF0aCxcbiAgfToge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZGsucmVhZEZpbGVUb0J1ZmZlcih7IHBhdGg6IGZpbGVQYXRoLCBjd2Q6IHRoaXMuY3dkIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyh7XG4gICAgZmlsZXMsXG4gICAgZGVzdFBhdGgsXG4gIH06IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG5hdGl2ZUZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucG9zaXguam9pbihkZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucG9zaXguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgICAgPyBmaWxlUGF0aFxuICAgICAgICA6IHBhdGgucG9zaXguam9pbih0aGlzLmN3ZCwgZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KVxuICAgICAgICAgICAgOiBmaWxlLmNvbnRlbnQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZGsud3JpdGVGaWxlcyhuYXRpdmVGaWxlcyk7XG5cbiAgICBjb25zdCBzaGVsbFNjcmlwdHMgPSBuYXRpdmVGaWxlcy5maWx0ZXIoKGYpID0+IGYucGF0aC5lbmRzV2l0aChcIi5zaFwiKSk7XG4gICAgaWYgKHNoZWxsU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoe1xuICAgICAgICBjb21tYW5kOiBcImNobW9kXCIsXG4gICAgICAgIGFyZ3M6IFtcIit4XCIsIC4uLnNoZWxsU2NyaXB0cy5tYXAoKGYpID0+IGYucGF0aCldLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IHN5bmNocm9ub3VzIFNESyBjYWxsXG4gIGFzeW5jIGdldERvbWFpbih7XG4gICAgcG9ydCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2RrLmRvbWFpbihwb3J0KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwoe1xuICAgIGNvbW1hbmRJZCxcbiAgfToge1xuICAgIGNvbW1hbmRJZDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY21kID0gYXdhaXQgdGhpcy5zZGsuZ2V0Q29tbWFuZChjb21tYW5kSWQpO1xuICAgIGF3YWl0IGNtZC5raWxsKCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgZ2V0dGVyXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zZGsuc3RhdHVzO1xuICAgIC8vIE1hcCBTREstb25seSBzdGF0dXNlcyB0byBvdXIgaW50ZXJmYWNlJ3MgdW5pb25cbiAgICBpZiAoc3RhdHVzID09PSBcInNuYXBzaG90dGluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUgVmVyY2VsIFNESyBkb2Vzbid0IGhhdmUgYSByZXN1bWUgbWV0aG9kLlxuICAgIC8vIFJ1biBhIG5vLW9wIGNvbW1hbmQgdG8gdmVyaWZ5IHRoZSBzYW5kYm94IGlzIHJlYWNoYWJsZS5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kOiBcInRydWVcIiB9KTtcbiAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNkay5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzbmFwID0gYXdhaXQgdGhpcy5zZGsuc25hcHNob3QoKTtcbiAgICByZXR1cm4geyBzbmFwc2hvdElkOiBzbmFwLnNuYXBzaG90SWQgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koe1xuICAgIHBvbGljeSxcbiAgfToge1xuICAgIHBvbGljeTogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLk5ldHdvcmtQb2xpY3k7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnVwZGF0ZU5ldHdvcmtQb2xpY3kocG9saWN5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyY2VsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IFZlcmNlbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwidmVyY2VsXCIsIFZlcmNlbEJpbmRpbmdDb25maWcsIFZlcmNlbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidmVyY2VsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKHsgY3dkOiBjcmVhdGVDd2QsIGFnZW50LCBzZXR1cCwgcmVjb3JkLCBzaWduYWw6IF9zaWduYWwsIGxvZyB9KSB7XG4gICAgICBjb25zdCBzdG9yYWdlID0gYWdlbnQuc3RvcmFnZTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHNldHVwLmNvbmZpZyA/PyB7fTtcbiAgICAgIGNvbnN0IGN3ZCA9IGNvbmZpZy5jd2QgPz8gY3JlYXRlQ3dkID8/IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IGNvbmZpZy5yZXNvdXJjZXMgPz8geyB2Y3B1czogREVGQVVMVF9WQ1BVUyB9O1xuICAgICAgY29uc3QgcG9ydHMgPSBjb25maWcucG9ydHM7XG4gICAgICBjb25zdCBuZXR3b3JrUG9saWN5ID1cbiAgICAgICAgY29uZmlnLm5ldHdvcmtQb2xpY3kgPz8gc2V0dXAubmV0d29ya1BvbGljeSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBwb3J0cyxcbiAgICAgICAgbmV0d29ya1BvbGljeSxcbiAgICAgICAgc25hcHNob3RJZDogY29uZmlnLnNuYXBzaG90SWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBfc3RhcnRMaWZlY3ljbGUgPSAodmVyY2VsU2FuZGJveElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXb3JrZmxvdyhzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3csIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgc2FuZGJveElkOiByZWNvcmQuaWQsXG4gICAgICAgICAgICAgIHZlcmNlbFNhbmRib3hJZCxcbiAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzdGFydCBsaWZlY3ljbGUgd29ya2Zsb3dcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2V0dXAudmVyc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHN0b3JhZ2Uuc2V0dXAuZ2V0KHNldHVwLnZlcnNpb24pO1xuICAgICAgICBpZiAoZXhpc3Rpbmc/LnNuYXBzaG90SWQpIHtcbiAgICAgICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoe1xuICAgICAgICAgICAgLi4uc2FuZGJveE9wdHMsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBleGlzdGluZy5zbmFwc2hvdElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgICAgICBzdG9yYWdlLnNldHVwXG4gICAgICAgICAgICAuc2V0KHNldHVwLnZlcnNpb24sIHtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICAgIHZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgICAgIGxhc3RVc2VkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR1cC5ydW4pIHtcbiAgICAgICAgaWYgKCFzZXR1cC52ZXJzaW9uKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwic2V0dXAucnVuIHByb3ZpZGVkIHdpdGhvdXQgc2V0dXAudmVyc2lvblwiLCB7IHNldHVwIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gICAgICAgICAgc2FuZGJveE9wdHMsXG4gICAgICAgICAgcnVuOiBzZXR1cC5ydW4sXG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICBzbmFwc2hvdFZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgbG9nLFxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJiYWNrZ3JvdW5kIHNldHVwIHNuYXBzaG90IGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcbiAgICAgICAgYXdhaXQgc2V0dXAucnVuKGluc3RhbmNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY29ubmVjdCh7IG1ldGFkYXRhLCBjd2QgfSkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICAgIHNhbmRib3hJZDogbWV0YWRhdGEuc2FuZGJveElkLFxuICAgICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2Uoc2RrLCBjd2QgPz8gdW5kZWZpbmVkKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0LCBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgRG9ja2VyQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRG9ja2VyQmluZGluZ01ldGFkYXRhID0ge1xuICBzYW5kYm94TmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSdW4gYSBgZG9ja2VyIHNhbmRib3hgIENMSSBjb21tYW5kIGFuZCByZXR1cm4gaXRzIG91dHB1dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY0RvY2tlcihcbiAgYXJnczogc3RyaW5nW10sXG4gIG9wdHM/OiB7IHRpbWVvdXRNcz86IG51bWJlcjsgc2lnbmFsPzogQWJvcnRTaWduYWwgfVxuKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiZG9ja2VyXCIsIFtcInNhbmRib3hcIiwgLi4uYXJnc10sIHtcbiAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIHN0ZG91dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dElkID0gb3B0cz8udGltZW91dE1zXG4gICAgICA/IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGRvY2tlciBzYW5kYm94ICR7YXJnc1swXX0gdGltZWQgb3V0YCkpO1xuICAgICAgICB9LCBvcHRzLnRpbWVvdXRNcylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFjayB3aGljaCBzYW5kYm94ZXMgaGF2ZSBiZWVuIHZlcmlmaWVkIHRvIGV4aXN0IGluIHRoaXMgcHJvY2Vzcy5cbiAqIE1hcHMgc2FuZGJveCBuYW1lIC0+IFByb21pc2Ugc28gY29uY3VycmVudCBjYWxsZXJzIHdhaXQgb24gdGhlIHNhbWUgY2hlY2suXG4gKi9cbmNvbnN0IGVuc3VyZVByb21pc2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbi8qKlxuICogU2FuZGJveGVzIHRoYXQgdGhpcyBwcm9jZXNzIGhhcyB1c2VkLiBTdG9wcGVkIG9uIHByb2Nlc3MgZXhpdC5cbiAqL1xuY29uc3QgYWN0aXZlU2FuZGJveGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmxldCBjbGVhbnVwUmVnaXN0ZXJlZCA9IGZhbHNlO1xubGV0IF9leGVjU3luYzogdHlwZW9mIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5leGVjU3luYyB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckNsZWFudXAoKSB7XG4gIGlmIChjbGVhbnVwUmVnaXN0ZXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjbGVhbnVwUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgLy8gUHJlLWxvYWQgZXhlY1N5bmMgc28gdGhlIHN5bmNocm9ub3VzIGV4aXQgaGFuZGxlciBjYW4gdXNlIGl0LlxuICBjb25zdCBjcCA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgX2V4ZWNTeW5jID0gY3AuZXhlY1N5bmM7XG5cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBpZiAoIV9leGVjU3luYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgQXJyYXkuZnJvbShhY3RpdmVTYW5kYm94ZXMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBfZXhlY1N5bmMoYGRvY2tlciBzYW5kYm94IHN0b3AgJHtuYW1lfWAsIHtcbiAgICAgICAgICB0aW1lb3V0OiAxMF8wMDAsXG4gICAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBCZXN0LWVmZm9ydCBcdTIwMTQgc2FuZGJveCBtYXkgYWxyZWFkeSBiZSBzdG9wcGVkXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJleGl0XCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgcHJvY2Vzcy5leGl0KDEzMCk7XG4gIH0pO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxNDMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBEb2NrZXIgc2FuZGJveCBleGlzdHMgZm9yIHRoZSBnaXZlbiBuYW1lLlxuICogSWYgaXQgYWxyZWFkeSBleGlzdHMgKGZyb20gYSBwcmV2aW91cyBwcm9jZXNzKSwgcmV1c2VzIGl0LlxuICogSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlcyBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2FuZGJveChzYW5kYm94TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gZW5zdXJlUHJvbWlzZXMuZ2V0KHNhbmRib3hOYW1lKTtcbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbHMgPSBhd2FpdCBleGVjRG9ja2VyKFtcImxzXCIsIFwiLXFcIl0sIHsgdGltZW91dE1zOiAxMF8wMDAgfSk7XG4gICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9XG4gICAgICBscy5leGl0Q29kZSA9PT0gMFxuICAgICAgICA/IGxzLnN0ZG91dFxuICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgOiBbXTtcblxuICAgIGlmIChleGlzdGluZ05hbWVzLmluY2x1ZGVzKHNhbmRib3hOYW1lKSkge1xuICAgICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG9zID0gYXdhaXQgaW1wb3J0KFwibm9kZTpvc1wiKTtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG5cbiAgICBjb25zdCB3b3Jrc3BhY2VEaXIgPSBwYXRoLmpvaW4oXG4gICAgICBvcy50bXBkaXIoKSxcbiAgICAgIFwiYWdlbnQtZG9ja2VyLXNhbmRib3hcIixcbiAgICAgIHNhbmRib3hOYW1lXG4gICAgKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih3b3Jrc3BhY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgY3JlYXRlID0gYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgIFtcImNyZWF0ZVwiLCBcIi0tbmFtZVwiLCBzYW5kYm94TmFtZSwgXCJzaGVsbFwiLCB3b3Jrc3BhY2VEaXJdLFxuICAgICAgeyB0aW1lb3V0TXM6IDYwXzAwMCB9XG4gICAgKTtcblxuICAgIGlmIChjcmVhdGUuZXhpdENvZGUgIT09IDApIHtcbiAgICAgIGlmIChjcmVhdGUuc3RkZXJyLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikpIHtcbiAgICAgICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gY3JlYXRlIGRvY2tlciBzYW5kYm94IFwiJHtzYW5kYm94TmFtZX1cIjogJHtjcmVhdGUuc3RkZXJyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWN0aXZlU2FuZGJveGVzLmFkZChzYW5kYm94TmFtZSk7XG4gICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gIH0pKCk7XG5cbiAgZW5zdXJlUHJvbWlzZXMuc2V0KHNhbmRib3hOYW1lLCBwcm9taXNlKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlbnN1cmVQcm9taXNlcy5kZWxldGUoc2FuZGJveE5hbWUpO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9ET0NLRVJfQ1dEID0gXCIvaG9tZS9hZ2VudC93b3Jrc3BhY2VcIjtcblxuY2xhc3MgRG9ja2VyU2FuZGJveEluc3RhbmNlIGltcGxlbWVudHMgU2FuZGJveEluc3RhbmNlIHtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FuZGJveE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZXMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzXG4gID4oKTtcblxuICBjb25zdHJ1Y3RvcihzYW5kYm94TmFtZTogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNhbmRib3hOYW1lID0gc2FuZGJveE5hbWU7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gREVGQVVMVF9ET0NLRVJfQ1dEO1xuICB9XG5cbiAgYXN5bmMgZXhlYyhvcHRzOiB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBzdHJpbmdbXTtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzdWRvPzogYm9vbGVhbjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgY29uc3QgY29tbWFuZElkID0gYGNvbW1hbmRfJHt1bGlkKCl9YDtcbiAgICBjb25zdCBlbnZGbGFncyA9IG9wdHMuZW52XG4gICAgICA/IE9iamVjdC5lbnRyaWVzKG9wdHMuZW52KS5mbGF0TWFwKChbaywgdl0pID0+IFtcIi1lXCIsIGAke2t9PSR7dn1gXSlcbiAgICAgIDogW107XG4gICAgY29uc3QgY3dkRmxhZ3MgPSBvcHRzLmN3ZCA/IFtcIi13XCIsIG9wdHMuY3dkXSA6IFtdO1xuICAgIGxldCBiYXNlQ21kOiBzdHJpbmdbXTtcbiAgICBpZiAob3B0cy5zdWRvKSB7XG4gICAgICBiYXNlQ21kID0gW1wic3Vkb1wiLCBvcHRzLmNvbW1hbmQsIC4uLihvcHRzLmFyZ3MgPz8gW10pXTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuYXJncykge1xuICAgICAgYmFzZUNtZCA9IFtvcHRzLmNvbW1hbmQsIC4uLm9wdHMuYXJnc107XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VDbWQgPSBbb3B0cy5jb21tYW5kXTtcbiAgICB9XG4gICAgY29uc3QgZnVsbENtZCA9IGJhc2VDbWQ7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgICAgXCJkb2NrZXJcIixcbiAgICAgIFtcbiAgICAgICAgXCJzYW5kYm94XCIsXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICAuLi5lbnZGbGFncyxcbiAgICAgICAgLi4uY3dkRmxhZ3MsXG4gICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgIC4uLmZ1bGxDbWQsXG4gICAgICBdLFxuICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzZXMuc2V0KGNvbW1hbmRJZCwgY2hpbGQpO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG4gICAgY29uc3QgbG9nUXVldWU6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGxldCBsb2dSZXNvbHZlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZG91dCArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZG91dFwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3RkZXJyICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3RkZXJyXCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8e1xuICAgICAgc3Rkb3V0OiBzdHJpbmc7XG4gICAgICBzdGRlcnI6IHN0cmluZztcbiAgICAgIGV4aXRDb2RlOiBudW1iZXI7XG4gICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGxvZ3MoKTogQXN5bmNJdGVyYWJsZTx7XG4gICAgICBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiO1xuICAgICAgZGF0YTogc3RyaW5nO1xuICAgIH0+IHtcbiAgICAgIHdoaWxlICghY2xvc2VkIHx8IGxvZ1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBsb2dRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB5aWVsZCBlbnRyeTtcbiAgICAgICAgfSBlbHNlIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIGxvZ1Jlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ1Jlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29tbWFuZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKG9wdHM6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgIFtcbiAgICAgICAgXCJleGVjXCIsXG4gICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgIFwiYmFzaFwiLFxuICAgICAgICBcIi1jXCIsXG4gICAgICAgIGBiYXNlNjQgJyR7b3B0cy5wYXRoLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfSdgLFxuICAgICAgXSxcbiAgICAgIHsgdGltZW91dE1zOiAzMF8wMDAsIHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICk7XG5cbiAgICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJObyBzdWNoIGZpbGVcIikgfHxcbiAgICAgICAgcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhcIkVOT0VOVFwiKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWFkRmlsZSBmYWlsZWQ6ICR7cmVzdWx0LnN0ZGVycn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZG91dC50cmltKCksIFwiYmFzZTY0XCIpO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyhvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIG9wdHMuZmlsZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gb3B0cy5kZXN0UGF0aFxuICAgICAgICA/IGAke29wdHMuZGVzdFBhdGh9LyR7ZmlsZS5wYXRofWBcbiAgICAgICAgOiBmaWxlLnBhdGg7XG5cbiAgICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgcGFyZW50RGlyID0gZnVsbFBhdGguc3Vic3RyaW5nKDAsIGZ1bGxQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG4gICAgICBpZiAocGFyZW50RGlyKSB7XG4gICAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wiZXhlY1wiLCB0aGlzLnNhbmRib3hOYW1lLCBcIm1rZGlyXCIsIFwiLXBcIiwgcGFyZW50RGlyXSwge1xuICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBXcml0ZSB2aWEgYmFzZTY0IHRvIGhhbmRsZSBib3RoIHRleHQgYW5kIGJpbmFyeSBjb250ZW50XG4gICAgICBjb25zdCBiNjQgPVxuICAgICAgICB0eXBlb2YgZmlsZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBCdWZmZXIuZnJvbShmaWxlLmNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgICAgOiBmaWxlLmNvbnRlbnQudG9TdHJpbmcoXCJiYXNlNjRcIik7XG5cbiAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICAgIFtcbiAgICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAgIFwiYmFzaFwiLFxuICAgICAgICAgIFwiLWNcIixcbiAgICAgICAgICBgZWNobyAnJHtiNjR9JyB8IGJhc2U2NCAtZCA+ICcke2Z1bGxQYXRoLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfSdgLFxuICAgICAgICBdLFxuICAgICAgICB7IHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICAgKTtcblxuICAgICAgaWYgKGZpbGUucGF0aC5lbmRzV2l0aChcIi5zaFwiKSkge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJjaG1vZFwiLCBcIit4XCIsIGZ1bGxQYXRoXSwge1xuICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0RG9tYWluKG9wdHM6IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke29wdHMucG9ydH1gO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBraWxsKG9wdHM6IHsgY29tbWFuZElkOiBzdHJpbmc7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMucHJvY2Vzc2VzLmdldChvcHRzLmNvbW1hbmRJZCk7XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShvcHRzLmNvbW1hbmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcbiAgICBcInBlbmRpbmdcIiB8IFwicnVubmluZ1wiIHwgXCJzdG9wcGluZ1wiIHwgXCJzdG9wcGVkXCIgfCBcImZhaWxlZFwiXG4gID4ge1xuICAgIC8vIGRvY2tlciBzYW5kYm94IENMSSBkb2Vzbid0IGV4cG9zZSBzdGF0dXMgXHUyMDE0IGFzc3VtZSBydW5uaW5nIGlmIGVuc3VyZWRcbiAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBleGVjRG9ja2VyKFtcInN0b3BcIiwgdGhpcy5zYW5kYm94TmFtZV0sIHsgdGltZW91dE1zOiAzMF8wMDAgfSk7XG4gICAgYWN0aXZlU2FuZGJveGVzLmRlbGV0ZSh0aGlzLnNhbmRib3hOYW1lKTtcbiAgICBlbnN1cmVQcm9taXNlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8eyBzbmFwc2hvdElkOiBzdHJpbmcgfT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNuYXBzaG90IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRvY2tlciBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidXBkYXRlTmV0d29ya1BvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCJcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb2NrZXJTYW5kYm94KFxuICBkZWZhdWx0cz86IFBhcnRpYWw8aW1wb3J0KFwiLi4vYWRhcHRlclwiKS5TYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICAgIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gICAgY29uZmlnPzogRG9ja2VyQmluZGluZ0NvbmZpZztcbiAgfVxuKTogU2FuZGJveEJpbmRpbmc8XCJkb2NrZXJcIiwgRG9ja2VyQmluZGluZ0NvbmZpZywgRG9ja2VyQmluZGluZ01ldGFkYXRhPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJkb2NrZXJcIixcbiAgICBkZWZhdWx0cyxcbiAgICBhc3luYyBjcmVhdGUob3B0cykge1xuICAgICAgY29uc3Qgc2FuZGJveE5hbWUgPSBgYWdlbnQtJHt1bGlkKCl9YDtcbiAgICAgIGNvbnN0IGN3ZCA9IG9wdHMuc2V0dXA/LmNvbmZpZz8uY3dkO1xuXG4gICAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHNhbmRib3hOYW1lKTtcblxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKHNhbmRib3hOYW1lLCBjd2QpO1xuXG4gICAgICBpZiAob3B0cy5zZXR1cD8ucnVuKSB7XG4gICAgICAgIGF3YWl0IG9wdHMuc2V0dXAucnVuKGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hOYW1lIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gICAgYXN5bmMgY29ubmVjdChvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IERvY2tlclNhbmRib3hJbnN0YW5jZShvcHRzLm1ldGFkYXRhLnNhbmRib3hOYW1lKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0LCBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9jYWxCaW5kaW5nQ29uZmlnID0ge1xuICBjd2Q/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMb2NhbEJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgYmFzZVBhdGg6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG59O1xuXG5jbGFzcyBMb2NhbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3IoYmFzZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICB0aGlzLmN3ZCA9IGJhc2VQYXRoO1xuICB9XG5cbiAgYXN5bmMgZXhlYyhvcHRzOiB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBzdHJpbmdbXTtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzdWRvPzogYm9vbGVhbjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICAgIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG5cbiAgICBjb25zdCBmaW5hbENtZCA9IG9wdHMuc3VkbyA/IFwic3Vkb1wiIDogb3B0cy5jb21tYW5kO1xuICAgIGNvbnN0IGZpbmFsQXJncyA9IG9wdHMuc3Vkb1xuICAgICAgPyBbb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV1cbiAgICAgIDogKG9wdHMuYXJncyA/PyBbXSk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGZpbmFsQ21kLCBmaW5hbEFyZ3MsIHtcbiAgICAgIGN3ZDogb3B0cy5jd2QgPyBwYXRoLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5jd2QpIDogdGhpcy5iYXNlUGF0aCxcbiAgICAgIGVudjogb3B0cy5lbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRzLmVudiB9IDogdW5kZWZpbmVkLFxuICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5wYXRoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKGZ1bGxQYXRoKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGUgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBcImNvZGVcIiBpbiBlICYmXG4gICAgICAgIChlIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFTk9FTlRcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGVzKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICBjb25zdCBwYXRoTW9kID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhNb2QucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLmRlc3RQYXRoLCBmaWxlLnBhdGgpO1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aE1vZC5kaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGZpbGUuY29udGVudCk7XG4gICAgICBpZiAoZmlsZS5wYXRoLmVuZHNXaXRoKFwiLnNoXCIpKSB7XG4gICAgICAgIGF3YWl0IGZzLmNobW9kKGZ1bGxQYXRoLCAwbzc1NSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXREb21haW4ob3B0czoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7b3B0cy5wb3J0fWA7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGtpbGwob3B0czogeyBjb21tYW5kSWQ6IHN0cmluZzsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5wcm9jZXNzZXMuZ2V0KG9wdHMuY29tbWFuZElkKTtcbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKG9wdHMuY29tbWFuZElkKTtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFwicnVubmluZ1wiPiB7XG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gbm8tb3A6IGxvY2FsIHNhbmRib3ggaXMgYWx3YXlzIHN0YXJ0ZWRcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdG9wIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic25hcHNob3QgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cGRhdGVOZXR3b3JrUG9saWN5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxTYW5kYm94KFxuICBkZWZhdWx0cz86IFBhcnRpYWw8aW1wb3J0KFwiLi4vYWRhcHRlclwiKS5TYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICAgIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gICAgY29uZmlnPzogTG9jYWxCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcImxvY2FsXCIsIExvY2FsQmluZGluZ0NvbmZpZywgTG9jYWxCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImxvY2FsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKG9wdHMpIHtcbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0cy5zZXR1cC5jb25maWc/LmN3ZCA/PyBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTG9jYWxTYW5kYm94SW5zdGFuY2UoYmFzZVBhdGgpO1xuXG4gICAgICBpZiAob3B0cy5zZXR1cD8ucnVuKSB7XG4gICAgICAgIGF3YWl0IG9wdHMuc2V0dXAucnVuKGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IGJhc2VQYXRoLCBwaWQ6IHByb2Nlc3MucGlkIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gICAgYXN5bmMgY29ubmVjdChvcHRzKSB7XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IG9wdHMubWV0YWRhdGEuYmFzZVBhdGg7XG4gICAgICByZXR1cm4gbmV3IExvY2FsU2FuZGJveEluc3RhbmNlKGJhc2VQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9VTlRJTCA9IDIwMDA7XG5cbnR5cGUgU2FuZGJveEhhbmRsZSA9IHtcbiAgZXhlYzogKG9wdHM6IHsgY29tbWFuZDogc3RyaW5nOyBhcmdzPzogc3RyaW5nW10gfSkgPT4gUHJvbWlzZTxFeGVjUmVzdWx0PjtcbiAgd3JpdGVGaWxlczogKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbnR5cGUgQmFzaFJlc3VsdCA9IHtcbiAgY29tbWFuZElkOiBzdHJpbmc7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbiAgZXhpdENvZGU6IG51bWJlcjtcbiAgc3RhdHVzOiBcInJ1bm5pbmdcIiB8IFwiY29tcGxldGVkXCIgfCBcImZhaWxlZFwiO1xuICBvdXRwdXREaXI6IHN0cmluZztcbn07XG5cbnR5cGUgUnVuT3B0aW9ucyA9IHtcbiAgY29tbWFuZDogc3RyaW5nO1xuICB3YWl0VW50aWw/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUHJvY2Vzc01hbmFnZXIgPSAob3B0czogeyBzYW5kYm94OiBTYW5kYm94SGFuZGxlIH0pID0+IHtcbiAgY29uc3QgeyBzYW5kYm94IH0gPSBvcHRzO1xuXG4gIGNvbnN0IHJ1biA9IGFzeW5jIChydW5PcHRzOiBSdW5PcHRpb25zKTogUHJvbWlzZTxCYXNoUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgeyBjb21tYW5kLCB3YWl0VW50aWwgPSBERUZBVUxUX1dBSVRfVU5USUwgfSA9IHJ1bk9wdHM7XG5cbiAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgIGNvbW1hbmQ6IFwic2hcIixcbiAgICAgIGFyZ3M6IFtcIi1jXCIsIGNvbW1hbmRdLFxuICAgIH0pO1xuXG4gICAgaWYgKHdhaXRVbnRpbCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZElkOiBleGVjUmVzdWx0LmNvbW1hbmRJZCxcbiAgICAgICAgc3Rkb3V0OiBcIlwiLFxuICAgICAgICBzdGRlcnI6IFwiXCIsXG4gICAgICAgIGV4aXRDb2RlOiAtMSxcbiAgICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgICAgb3V0cHV0RGlyOiBcIlwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZWQgPSBhd2FpdCByYWNlVGltZW91dChleGVjUmVzdWx0LCB3YWl0VW50aWwpO1xuXG4gICAgaWYgKCFjb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmRJZDogZXhlY1Jlc3VsdC5jb21tYW5kSWQsXG4gICAgICAgIHN0ZG91dDogXCJcIixcbiAgICAgICAgc3RkZXJyOiBcIlwiLFxuICAgICAgICBleGl0Q29kZTogLTEsXG4gICAgICAgIHN0YXR1czogXCJydW5uaW5nXCIsXG4gICAgICAgIG91dHB1dERpcjogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gYC5hZ2VudC9iYXNoLyR7RGF0ZS5ub3coKX0tJHtleGVjUmVzdWx0LmNvbW1hbmRJZH1gO1xuICAgIHdyaXRlT3V0cHV0RGlyKHNhbmRib3gsIG91dHB1dERpciwgY29tcGxldGVkLCBjb21tYW5kKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kSWQ6IGV4ZWNSZXN1bHQuY29tbWFuZElkLFxuICAgICAgc3Rkb3V0OiBjb21wbGV0ZWQuc3Rkb3V0LFxuICAgICAgc3RkZXJyOiBjb21wbGV0ZWQuc3RkZXJyLFxuICAgICAgZXhpdENvZGU6IGNvbXBsZXRlZC5leGl0Q29kZSxcbiAgICAgIHN0YXR1czogY29tcGxldGVkLmV4aXRDb2RlID09PSAwID8gXCJjb21wbGV0ZWRcIiA6IFwiZmFpbGVkXCIsXG4gICAgICBvdXRwdXREaXIsXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4geyBydW4gfTtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHJhY2VUaW1lb3V0KFxuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0LFxuICB0aW1lb3V0TXM6IG51bWJlclxuKTogUHJvbWlzZTx7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9IHwgbnVsbD4ge1xuICBjb25zdCBUSU1FRF9PVVQgPSBTeW1ib2woXCJ0aW1lb3V0XCIpO1xuICBjb25zdCB0aW1lciA9IG5ldyBQcm9taXNlPHR5cGVvZiBUSU1FRF9PVVQ+KChyZXNvbHZlKSA9PlxuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShUSU1FRF9PVVQpLCB0aW1lb3V0TXMpXG4gICk7XG4gIGNvbnN0IHdpbm5lciA9IGF3YWl0IFByb21pc2UucmFjZShbZXhlY1Jlc3VsdC5yZXN1bHQsIHRpbWVyXSk7XG4gIHJldHVybiB3aW5uZXIgPT09IFRJTUVEX09VVCA/IG51bGwgOiB3aW5uZXI7XG59XG5cbmZ1bmN0aW9uIHdyaXRlT3V0cHV0RGlyKFxuICBzYW5kYm94OiBTYW5kYm94SGFuZGxlLFxuICBkaXI6IHN0cmluZyxcbiAgcmVzdWx0OiB7IHN0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9LFxuICBjb21tYW5kOiBzdHJpbmdcbik6IHZvaWQge1xuICBjb25zdCBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9W10gPSBbXG4gICAgeyBwYXRoOiBcInN0ZG91dC50eHRcIiwgY29udGVudDogcmVzdWx0LnN0ZG91dCB9LFxuICAgIHtcbiAgICAgIHBhdGg6IFwibWV0YWRhdGEuanNvblwiLFxuICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkoeyBleGl0Q29kZTogcmVzdWx0LmV4aXRDb2RlLCBjb21tYW5kIH0sIG51bGwsIDIpLFxuICAgIH0sXG4gIF07XG4gIGlmIChyZXN1bHQuc3RkZXJyKSB7XG4gICAgZmlsZXMucHVzaCh7IHBhdGg6IFwic3RkZXJyLnR4dFwiLCBjb250ZW50OiByZXN1bHQuc3RkZXJyIH0pO1xuICB9XG5cbiAgc2FuZGJveC53cml0ZUZpbGVzKHsgZmlsZXMsIGRlc3RQYXRoOiBkaXIgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIGludGVudGlvbmFsIG5vLW9wIFx1MjAxNCBvdXRwdXQgZmlsZSB3cml0ZSBpcyBiZXN0LWVmZm9ydFxuICB9KTtcbn1cbiIsICIvLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICB0eXBlIEFnZW50RGF0YVR5cGVzLFxuICB0eXBlIEFnZW50SG9va3MsXG4gIHR5cGUgQWdlbnRPcHRpb25zLFxuICBBZ2VudFN0YXR1cyxcbiAgdHlwZSBBbnlBZ2VudCxcbiAgYWdlbnQsXG4gIHR5cGUgSW5mZXJTZXNzaW9uLFxuICB0eXBlIEluZmVyVUlNZXNzYWdlLFxuICB0eXBlIE5lZWRzQXBwcm92YWxNYXAsXG4gIHR5cGUgUmVzb2x2YWJsZSxcbiAgdHlwZSBSZXNvbHZhYmxlQXJncyxcbiAgdHlwZSBTZXNzaW9uRGVmYXVsdHMsXG4gIHR5cGUgU2Vzc2lvblNlbmRBcmdzLFxufSBmcm9tIFwiLi9hZ2VudC9jbGllbnRcIjtcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBFcnJvcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBNZXNzYWdlTm90Rm91bmRFcnJvcixcbiAgU2FuZGJveEVycm9yLFxuICBTYW5kYm94Tm90Rm91bmRFcnJvcixcbiAgU2Vzc2lvbk5vdEZvdW5kRXJyb3IsXG4gIFN0b3JhZ2VDb25mbGljdEVycm9yLFxuICBTdG9yYWdlRXJyb3IsXG59IGZyb20gXCIuL2Vycm9yc1wiO1xuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFJQQyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7IGhhbmRsZVJlcXVlc3QgfSBmcm9tIFwiLi9ycGMvcnBjXCI7XG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU2FuZGJveCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHtcbiAgRXhlY1Jlc3VsdCxcbiAgU2FuZGJveEFnZW50UmVmLFxuICBTYW5kYm94QmluZGluZyxcbiAgU2FuZGJveEluc3RhbmNlLFxuICBTYW5kYm94U2V0dXBGaWVsZHMsXG4gIFVwbG9hZGFibGVGaWxlLFxufSBmcm9tIFwiLi9zYW5kYm94L2FkYXB0ZXJcIjtcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTZXNzaW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHR5cGUgeyBBcHByb3ZhbERhdGEsIFNlbmRJbnB1dCB9IGZyb20gXCIuL3Nlc3Npb24vc2VuZFwiO1xuZXhwb3J0IHR5cGUgeyBXb3JrZmxvd1J1bkxpa2UgfSBmcm9tIFwiLi9zZXNzaW9uL3N0cmVhbVwiO1xuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFNraWxscyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHtcbiAgR2l0U2tpbGxFbnRyeSxcbiAgR2l0U2tpbGxJbnB1dCxcbiAgSG9zdFNraWxsRW50cnksXG4gIEhvc3RTa2lsbElucHV0LFxuICBJbmxpbmVTa2lsbEVudHJ5LFxuICBJbmxpbmVTa2lsbElucHV0LFxuICBTYW5kYm94U2tpbGxFbnRyeSxcbiAgU2FuZGJveFNraWxsSW5wdXQsXG4gIFNraWxsRW50cnksXG4gIFNraWxsSW5wdXQsXG4gIFNraWxsU291cmNlVHlwZSxcbn0gZnJvbSBcIi4vc2tpbGxzL3R5cGVzXCI7XG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgVG9vbHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBhZ2VudFRvb2wgYXMgdG9vbCxcbiAgdHlwZSBCdWlsdEluVG9vbE5hbWUsXG4gIGJ1aWx0aW5Ub29sTmFtZXMsXG4gIHR5cGUgVG9vbENvbnRleHQsXG59IGZyb20gXCIuL3Rvb2xzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBVc2FnZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB0eXBlIHsgU3RlcFVzYWdlLCBVc2FnZVN1bW1hcnkgfSBmcm9tIFwiLi91dGlscy91c2FnZVwiO1xuIiwgImltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tIFwiQHdvcmtmbG93L3NlcmRlXCI7XG5pbXBvcnQgdHlwZSB7IEdhdGV3YXlNb2RlbElkLCBJbmZlclVJVG9vbHMsIFRvb2xTZXQsIFVJTWVzc2FnZSB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuLi9zYW5kYm94L2hhbmRsZVwiO1xuaW1wb3J0IHsgc2FuZGJveEhhbmRsZSB9IGZyb20gXCIuLi9zYW5kYm94L2hhbmRsZVwiO1xuaW1wb3J0IHsgdHlwZSBTZXNzaW9uQ29udGV4dCwgc2Vzc2lvbkhhbmRsZSB9IGZyb20gXCIuLi9zZXNzaW9uL2hhbmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlLCB0eXBlIFN0b3JhZ2VJbnB1dCwgdG9TdG9yYWdlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvYWRhcHRlclwiO1xuaW1wb3J0IHsga3ZTdG9yYWdlRmFsbGJhY2sgfSBmcm9tIFwiLi4vc3RvcmFnZS9iaW5kaW5ncy9rdlwiO1xuaW1wb3J0IHsgbG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvZW50cnlcIjtcbmltcG9ydCB7IHNob3VsZEZhbGxiYWNrVG9LVjIgfSBmcm9tIFwiLi4vc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQnVpbHRJblRvb2xOYW1lLCBidWlsdEluVG9vbHMgfSBmcm9tIFwiLi4vdG9vbHNcIjtcbmltcG9ydCB0eXBlIHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgQWdlbnREYXRhVHlwZXMsXG4gIHR5cGUgQWdlbnRIb29rcyxcbiAgZ2V0QWdlbnQsXG4gIHR5cGUgTmVlZHNBcHByb3ZhbE1hcCxcbiAgcmVnaXN0ZXJBZ2VudCxcbn0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFJlc29sdmFibGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFJlc29sdmFibGVBcmdzPFxuICBUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIGNvbnRleHQ6IFRDb250ZXh0O1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBtZXNzYWdlczogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VG9vbHM+PltdO1xuICBzdGF0ZTogUmVhZG9ubHk8VFN0YXRlPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlc29sdmFibGU8XG4gIFQsXG4gIFRDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFQgfCAoKGFyZ3M6IFJlc29sdmFibGVBcmdzPFRDb250ZXh0LCBUb29scywgVFN0YXRlPikgPT4gVCB8IFByb21pc2U8VD4pO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU2Vzc2lvbiBEZWZhdWx0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU2Vzc2lvbkRlZmF1bHRzPFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0ge1xuICBtb2RlbD86IFJlc29sdmFibGU8R2F0ZXdheU1vZGVsSWQgfCB1bmRlZmluZWQsIFRDb250ZXh0LCBUb29scywgVFN0YXRlPjtcbiAgc3lzdGVtPzogUmVzb2x2YWJsZTxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xuICBnZW5lcmF0aW9uPzogUmVzb2x2YWJsZTxcbiAgICBHZW5lcmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICBUQ29udGV4dCxcbiAgICBUb29scyxcbiAgICBUU3RhdGVcbiAgPjtcbiAgYWN0aXZlVG9vbHM/OiBSZXNvbHZhYmxlPFxuICAgIHJlYWRvbmx5IChFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lKVtdIHwgdW5kZWZpbmVkLFxuICAgIFRDb250ZXh0LFxuICAgIFRvb2xzLFxuICAgIFRTdGF0ZVxuICA+O1xuICBza2lsbHM/OiBSZXNvbHZhYmxlPFNraWxsSW5wdXRbXSB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEFnZW50IE9wdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBkZWZhdWx0IGFsbG93cyB0eXBlLWVyYXNlZCB1c2FnZVxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBhbnksXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4+ID0gU2Vzc2lvbkRlZmF1bHRzPFRvb2xzLCBUQ29udGV4dCwgVFN0YXRlPiAmIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VJbnB1dDtcbiAgc2FuZGJveD86IFRTYW5kYm94QmluZGluZ3M7XG4gIHRvb2xzPzogVG9vbHM7XG4gIGhvb2tzPzogQWdlbnRIb29rcztcbiAgbmVlZHNBcHByb3ZhbD86IE5lZWRzQXBwcm92YWxNYXA8VG9vbHM+O1xuICBjb250ZXh0U2NoZW1hPzogei5ab2RUeXBlPFRDb250ZXh0PjtcbiAgc3RhdGVTY2hlbWE/OiB6LlpvZFR5cGU8VFN0YXRlPjtcbiAgbWVzc2FnZU1ldGFkYXRhU2NoZW1hPzogei5ab2RUeXBlPFRNZXNzYWdlTWV0YWRhdGE+O1xuICBsb2dnaW5nPzogT21pdDxMb2dnaW5nQ29uZmlnLCBcIm5hbWVcIj47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSW50ZXJuYWwgY29udGV4dCBjYWNoZXMgKGhpZGRlbiBmcm9tIHB1YmxpYyBBUEkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5jb25zdCBzZXNzaW9uQ29udGV4dHNNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIFNlc3Npb25Db250ZXh0Pj4oKTtcbmNvbnN0IHNhbmRib3hDb250ZXh0c01hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgTWFwPHN0cmluZywgU2FuZGJveENvbnRleHQ+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vzc2lvbkNvbnRleHRzKFxuICBhZ2VudDogQW55QWdlbnRcbik6IE1hcDxzdHJpbmcsIFNlc3Npb25Db250ZXh0PiB7XG4gIGxldCBtYXAgPSBzZXNzaW9uQ29udGV4dHNNYXAuZ2V0KGFnZW50KTtcbiAgaWYgKCFtYXApIHtcbiAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgc2Vzc2lvbkNvbnRleHRzTWFwLnNldChhZ2VudCwgbWFwKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FuZGJveENvbnRleHRzKFxuICBhZ2VudDogQW55QWdlbnRcbik6IE1hcDxzdHJpbmcsIFNhbmRib3hDb250ZXh0PiB7XG4gIGxldCBtYXAgPSBzYW5kYm94Q29udGV4dHNNYXAuZ2V0KGFnZW50KTtcbiAgaWYgKCFtYXApIHtcbiAgICBtYXAgPSBuZXcgTWFwKCk7XG4gICAgc2FuZGJveENvbnRleHRzTWFwLnNldChhZ2VudCwgbWFwKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgQ2xhc3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogaW50ZW50aW9uYWxseSBlcmFzZWQgXHUyMDEzIHVzaW5nIGBhbnlgIGF2b2lkcyBjb250cmF2YXJpYW5jZSBpc3N1ZXMgd2l0aCB0b29sLXR5cGVkIG1ldGhvZHMgbGlrZSBgc2VuZGBcbmV4cG9ydCB0eXBlIEFueUFnZW50ID0gQWdlbnQ8YW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG5leHBvcnQgdHlwZSBJbmZlclNlc3Npb248QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudCA9IEFueUFnZW50PiA9IFJldHVyblR5cGU8XG4gIEFnZW50W1wic2Vzc2lvblwiXVxuPjtcbmV4cG9ydCB0eXBlIFNlc3Npb25TZW5kQXJnczxcbiAgQWdlbnQgZXh0ZW5kcyBBbnlBZ2VudCxcbiAgU2Vzc2lvbiBleHRlbmRzIEluZmVyU2Vzc2lvbjxBZ2VudD4gPSBJbmZlclNlc3Npb248QWdlbnQ+LFxuPiA9IFBhcmFtZXRlcnM8U2Vzc2lvbltcInNlbmRcIl0+O1xuXG5leHBvcnQgY2xhc3MgQWdlbnQ8XG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBvcHRpb25zOiBBZ2VudE9wdGlvbnM8XG4gICAgVG9vbHMsXG4gICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICBUQ29udGV4dCxcbiAgICBUU3RhdGUsXG4gICAgVE1lc3NhZ2VNZXRhZGF0YVxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWdlbnRPcHRpb25zPFxuICAgICAgVG9vbHMsXG4gICAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgICAgVENvbnRleHQsXG4gICAgICBUU3RhdGUsXG4gICAgICBUTWVzc2FnZU1ldGFkYXRhXG4gICAgPlxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgdGhpcy5zZXNzaW9uID0gKHNlc3Npb25IYW5kbGU8XG4gICAgICBUb29scyxcbiAgICAgIFRDb250ZXh0LFxuICAgICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgICBUU3RhdGVcbiAgICA+KS5iaW5kKG51bGwsIHRoaXMgYXMgdW5rbm93biBhcyBBbnlBZ2VudCk7XG4gICAgdGhpcy5zYW5kYm94ID0gKHNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4pLmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgdGhpcyBhcyB1bmtub3duIGFzIEFueUFnZW50XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogQW55QWdlbnQpIHtcbiAgICByZXR1cm4geyBuYW1lOiBpbnN0YW5jZS5uYW1lIH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7IG5hbWU6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGdldEFnZW50KGRhdGEubmFtZSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNvbHZlZFN0b3JhZ2U6IFN0b3JhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0IHN0b3JhZ2UoKTogU3RvcmFnZSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkU3RvcmFnZSA9IHRvU3RvcmFnZSh0aGlzLm9wdGlvbnMuc3RvcmFnZSk7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgICBjb25maWc6IHsgLi4udGhpcy5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IHRoaXMubmFtZSB9LFxuICAgICAgc3Vic3lzdGVtOiBcInN0b3JhZ2VcIixcbiAgICB9KTtcblxuICAgIGlmIChzaG91bGRGYWxsYmFja1RvS1YyKCkpIHtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBgTm8gc3RvcmFnZSBhZGFwdGVyIGNvbmZpZ3VyZWQgXHUyMDE0IHVzaW5nIEtWMiAobmFtZXNwYWNlOiBcIiR7dGhpcy5uYW1lfVwiKS5gXG4gICAgICApO1xuICAgICAgdGhpcy5fcmVzb2x2ZWRTdG9yYWdlID0gdG9TdG9yYWdlKFxuICAgICAgICBrdlN0b3JhZ2VGYWxsYmFjayh7IHByZWZpeDogdGhpcy5uYW1lIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgICB9XG5cbiAgICBsb2cud2FybihcbiAgICAgIFwiTm8gc3RvcmFnZSBhZGFwdGVyIGNvbmZpZ3VyZWQgXHUyMDE0IHVzaW5nIGxvY2FsU3RvcmFnZSgpLiBEYXRhIHdpbGwgbm90IHBlcnNpc3QgYWNyb3NzIHJlc3RhcnRzLlwiXG4gICAgKTtcbiAgICB0aGlzLl9yZXNvbHZlZFN0b3JhZ2UgPSB0b1N0b3JhZ2UobG9jYWxTdG9yYWdlKCkpO1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZFN0b3JhZ2U7XG4gIH1cblxuICBnZXQgdG9vbHMoKSB7XG4gICAgcmV0dXJuIHsgLi4uYnVpbHRJblRvb2xzLCAuLi50aGlzLm9wdGlvbnMudG9vbHMgfSBhcyB0eXBlb2YgYnVpbHRJblRvb2xzICZcbiAgICAgIFRvb2xzO1xuICB9XG5cbiAgZ2V0IGhvb2tzKCk6IEFnZW50SG9va3Mge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaG9va3MgPz8ge307XG4gIH1cblxuICByZWFkb25seSBzZXNzaW9uO1xuXG4gIHJlYWRvbmx5IHNhbmRib3g7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlcml2ZWQgYWdlbnQgd2l0aCBtZXJnZWQgb3B0aW9ucy4gVGhlIHJldHVybmVkIGFnZW50IGlzIE5PVFxuICAgKiByZWdpc3RlcmVkIGluIHRoZSB3b3JrZmxvdyByZWdpc3RyeSBcdTIwMTMgaXQncyBhIG9uZS1vZmYgaW5zdGFuY2UgdXNlZCBieVxuICAgKiB0aGUgZnJhbWV3b3JrIHRvIGxheWVyIGZzLXNjYW5uZWQgY29uZmlnIG9udG8gYW4gYWdlbnQudHMgZGVmaW5pdGlvbi5cbiAgICovXG4gIGV4dGVuZChcbiAgICBmbjogKG9wdGlvbnM6IEFnZW50T3B0aW9uczxUb29scywgVFNhbmRib3hCaW5kaW5ncywgVENvbnRleHQsIFRTdGF0ZSwgVE1lc3NhZ2VNZXRhZGF0YT4pID0+IEFnZW50T3B0aW9uczxUb29scywgVFNhbmRib3hCaW5kaW5ncywgVENvbnRleHQsIFRTdGF0ZSwgVE1lc3NhZ2VNZXRhZGF0YT5cbiAgKTogQWdlbnQ8VE1lc3NhZ2VNZXRhZGF0YSwgVG9vbHMsIFRTYW5kYm94QmluZGluZ3MsIFRDb250ZXh0LCBUU3RhdGU+IHtcbiAgICByZXR1cm4gbmV3IEFnZW50KHRoaXMubmFtZSwgZm4odGhpcy5vcHRpb25zKSk7XG4gIH1cblxuICAvKiogUGhhbnRvbSBwcm9wZXJ0eSBmb3IgdHlwZSBpbmZlcmVuY2UuIFVzZSBgdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZWAgdG8gZ2V0IHRoZSB0eXBlZCBVSU1lc3NhZ2UuICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgJFVJTWVzc2FnZTogVUlNZXNzYWdlPFxuICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgQWdlbnREYXRhVHlwZXMsXG4gICAgSW5mZXJVSVRvb2xzPHR5cGVvZiBidWlsdEluVG9vbHMgJiBUb29scz5cbiAgPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFnZW50PFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuPihcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb25zPzogQWdlbnRPcHRpb25zPFxuICAgIFRvb2xzLFxuICAgIFRTYW5kYm94QmluZGluZ3MsXG4gICAgVENvbnRleHQsXG4gICAgVFN0YXRlLFxuICAgIFRNZXNzYWdlTWV0YWRhdGFcbiAgPlxuKSB7XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEFnZW50PFxuICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgVG9vbHMsXG4gICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICBUQ29udGV4dCxcbiAgICBUU3RhdGVcbiAgPihuYW1lLCBvcHRpb25zKTtcbiAgcmVnaXN0ZXJBZ2VudChuYW1lLCBpbnN0YW5jZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gUmUtZXhwb3J0IGV2ZXJ5dGhpbmcgZnJvbSByZWdpc3RyeSBzbyBleGlzdGluZyBpbXBvcnRzIGZyb20gXCIuL2FnZW50L2NsaWVudFwiIGtlZXAgd29ya2luZy5cbmV4cG9ydCB7XG4gIHR5cGUgQWdlbnREYXRhVHlwZXMsXG4gIHR5cGUgQWdlbnRIb29rcyxcbiAgQWdlbnRTdGF0dXMsXG4gIGdldEFnZW50LFxuICB0eXBlIEluZmVyVUlNZXNzYWdlLFxuICB0eXBlIE5lZWRzQXBwcm92YWxNYXAsXG4gIHJlZ2lzdGVyQWdlbnQsXG4gIHR5cGUgVHlwZWRVSU1lc3NhZ2UsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHsgZ2V0U2FuZGJveENvbnRleHRzIH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCIuL2V4ZWNcIjtcbmltcG9ydCB7IGdldERvbWFpbiB9IGZyb20gXCIuL2dldC1kb21haW5cIjtcbmltcG9ydCB7IGdldFN0YXR1cyB9IGZyb20gXCIuL2dldC1zdGF0dXNcIjtcbmltcG9ydCB7IGtpbGwgfSBmcm9tIFwiLi9raWxsXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCIuL3JlYWQtZmlsZVwiO1xuaW1wb3J0IHsgc2V0dXAgfSBmcm9tIFwiLi9zZXR1cFwiO1xuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tIFwiLi9zbmFwc2hvdFwiO1xuaW1wb3J0IHsgc3RhcnQgfSBmcm9tIFwiLi9zdGFydFwiO1xuaW1wb3J0IHsgc3RvcCB9IGZyb20gXCIuL3N0b3BcIjtcbmltcG9ydCB7IHVwZGF0ZU5ldHdvcmtQb2xpY3kgfSBmcm9tIFwiLi91cGRhdGUtbmV0d29yay1wb2xpY3lcIjtcbmltcG9ydCB7IHdyaXRlRmlsZXMgfSBmcm9tIFwiLi93cml0ZS1maWxlc1wiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94Q29udGV4dCA9IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94SWQ6IHN0cmluZyB8IG51bGw7XG4gIF9wZW5kaW5nU2V0dXA/OiBQcm9taXNlPFNhbmRib3hJbnN0YW5jZT47XG4gIF9jd2Q/OiBzdHJpbmc7XG4gIF9zZXNzaW9uSWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTYW5kYm94T3B0aW9ucyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4+ID0gUmV0dXJuVHlwZTx0eXBlb2Ygc2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihhZ2VudDogQW55QWdlbnQsIGlkPzogc3RyaW5nIHwgU2FuZGJveE9wdGlvbnMpIHtcbiAgY29uc3Qgc2FuZGJveElkID1cbiAgICB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyBpZCA6IChpZD8uaWQgPz8gYHNhbmRib3hfJHt1bGlkKCl9YCk7XG5cbiAgY29uc3QgY29udGV4dHMgPSBnZXRTYW5kYm94Q29udGV4dHMoYWdlbnQpO1xuICBsZXQgc2FuZGJveENvbnRleHQgPSBjb250ZXh0cy5nZXQoc2FuZGJveElkKTtcbiAgaWYgKCFzYW5kYm94Q29udGV4dCkge1xuICAgIHNhbmRib3hDb250ZXh0ID0geyBhZ2VudCwgc2FuZGJveElkIH07XG4gICAgY29udGV4dHMuc2V0KHNhbmRib3hJZCwgc2FuZGJveENvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogc2FuZGJveElkLFxuICAgIGdldCBjd2QoKSB7XG4gICAgICByZXR1cm4gc2FuZGJveENvbnRleHQhLl9jd2QgPz8gXCIuXCI7XG4gICAgfSxcbiAgICBzZXR1cDogKHNldHVwPFRTYW5kYm94QmluZGluZ3M+KS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBleGVjOiBleGVjLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHJlYWRGaWxlOiByZWFkRmlsZS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICB3cml0ZUZpbGVzOiB3cml0ZUZpbGVzLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGdldERvbWFpbjogZ2V0RG9tYWluLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHVwZGF0ZU5ldHdvcmtQb2xpY3k6IHVwZGF0ZU5ldHdvcmtQb2xpY3kuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RhcnQ6IHN0YXJ0LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHN0b3A6IHN0b3AuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAga2lsbDoga2lsbC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzbmFwc2hvdDogc25hcHNob3QuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0U3RhdHVzOiBnZXRTdGF0dXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gIH07XG59XG5cbnR5cGUgU2FuZGJveE1ldGhvZHM8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+ID0gT21pdDxTYW5kYm94SGFuZGxlPFRTYW5kYm94QmluZGluZ3M+LCBcImlkXCIgfCBcImN3ZFwiPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxhenlTYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihcbiAgYWdlbnQ6IEFueUFnZW50LFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogU2FuZGJveE1ldGhvZHM8VFNhbmRib3hCaW5kaW5ncz4ge1xuICBjb25zdCBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQgPSB7XG4gICAgYWdlbnQsXG4gICAgc2FuZGJveElkOiBudWxsLFxuICAgIF9zZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNldHVwOiAoc2V0dXA8VFNhbmRib3hCaW5kaW5ncz4pLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGV4ZWM6IGV4ZWMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgcmVhZEZpbGU6IHJlYWRGaWxlLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHdyaXRlRmlsZXM6IHdyaXRlRmlsZXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0RG9tYWluOiBnZXREb21haW4uYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgdXBkYXRlTmV0d29ya1BvbGljeTogdXBkYXRlTmV0d29ya1BvbGljeS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzdGFydDogc3RhcnQuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RvcDogc3RvcC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBraWxsOiBraWxsLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHNuYXBzaG90OiBzbmFwc2hvdC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBnZXRTdGF0dXM6IGdldFN0YXR1cy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgfTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNWZXJjZWwgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBnZXRWZXJjZWxPaWRjVG9rZW4gfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvb2lkY1wiKTtcbiAgICByZXR1cm4gQm9vbGVhbihhd2FpdCBnZXRWZXJjZWxPaWRjVG9rZW4oKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICJpbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlc3Npb25Ob3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2Vzc2lvbiAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTZXNzaW9uRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTZXNzaW9uICRpZCBmYWlsZWQ6ICRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTYW5kYm94Tm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2FuZGJveE5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTYW5kYm94ICRpZCBub3QgZm91bmRcIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlN0b3JhZ2VFcnJvclwiLFxuICBtZXNzYWdlOiBcIiRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlQ29uZmxpY3RFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RvcmFnZUNvbmZsaWN0RXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2FuZGJveEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTYW5kYm94RXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIk1lc3NhZ2VOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiTWVzc2FnZSAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuIiwgImltcG9ydCB7IGlzVmVyY2VsIH0gZnJvbSBcIi4uL2FnZW50L2lzLXZlcmNlbFwiO1xuaW1wb3J0IHsgU2FuZGJveEVycm9yLCBTYW5kYm94Tm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveCB9IGZyb20gXCIuLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFNhbmRib3hCaW5kaW5nLFxuICBTYW5kYm94SW5zdGFuY2UsXG4gIFNhbmRib3hTZXR1cEZpZWxkcyxcbiAgV2l0aENvbmZpZyxcbn0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluQmluZGluZ3MgfSBmcm9tIFwiLi9iaW5kaW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5jb25zdCBQT0xMX0lOVEVSVkFMX01TID0gNTA7XG5jb25zdCBQT0xMX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG50eXBlIFNldHVwQ29tbW9uRmllbGRzID0gUGFydGlhbDxTYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICBjd2Q/OiBzdHJpbmc7XG4gIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxudHlwZSBUb0JpbmRpbmdVbmlvbjxUIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdPiA9XG4gIFQgZXh0ZW5kcyBTYW5kYm94QmluZGluZ1tdID8gVFtudW1iZXJdIDogVDtcblxudHlwZSBTZXR1cE9wdHNGb3JCaW5kaW5nPEIgZXh0ZW5kcyBTYW5kYm94QmluZGluZz4gPVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IC5cbiAgQiBleHRlbmRzIFNhbmRib3hCaW5kaW5nPGluZmVyIFQsIGluZmVyIEMsIGFueT5cbiAgICA/IHsgdHlwZTogVCB9ICYgU2V0dXBDb21tb25GaWVsZHMgJiBXaXRoQ29uZmlnPEM+XG4gICAgOiBuZXZlcjtcblxudHlwZSBJc0RlZmF1bHQ8VCBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXT4gPVxuICBTYW5kYm94QmluZGluZyBleHRlbmRzIFQgPyB0cnVlIDogZmFsc2U7XG5cbmV4cG9ydCB0eXBlIFNldHVwT3B0czxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4gPVxuICB8IFNldHVwT3B0c0ZvckJpbmRpbmc8XG4gICAgICBJc0RlZmF1bHQ8VFNhbmRib3hCaW5kaW5ncz4gZXh0ZW5kcyB0cnVlXG4gICAgICAgID8gQnVpbHRJbkJpbmRpbmdzXG4gICAgICAgIDogVG9CaW5kaW5nVW5pb248VFNhbmRib3hCaW5kaW5ncz5cbiAgICA+XG4gIHwgKFNldHVwQ29tbW9uRmllbGRzICYgeyB0eXBlPzogbmV2ZXIgfSk7XG5cbmV4cG9ydCB0eXBlIFNldHVwUmVzdWx0ID0ge1xuICBkb25lOiBQcm9taXNlPFNhbmRib3hJbnN0YW5jZT47XG59O1xuXG5mdW5jdGlvbiBpc1NpbmdsZUJpbmRpbmcoXG4gIHNhbmRib3g6IFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXVxuKTogc2FuZGJveCBpcyBTYW5kYm94QmluZGluZyB7XG4gIHJldHVybiAhQXJyYXkuaXNBcnJheShzYW5kYm94KTtcbn1cblxuLyoqIEF1dG8tZGV0ZWN0IHRoZSBkZWZhdWx0IGJpbmRpbmc6IHZlcmNlbCBcdTIxOTIgZG9ja2VyIFx1MjE5MiBsb2NhbCBjYXNjYWRlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGVmYXVsdEJpbmRpbmcoKTogUHJvbWlzZTxTYW5kYm94QmluZGluZz4ge1xuICBpZiAoYXdhaXQgaXNWZXJjZWwoKSkge1xuICAgIGNvbnN0IHsgdmVyY2VsU2FuZGJveCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy92ZXJjZWxcIik7XG4gICAgcmV0dXJuIHZlcmNlbFNhbmRib3goKTtcbiAgfVxuXG4gIGlmIChhd2FpdCBpc0RvY2tlckF2YWlsYWJsZSgpKSB7XG4gICAgY29uc3QgeyBkb2NrZXJTYW5kYm94IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2JpbmRpbmdzL2RvY2tlclwiKTtcbiAgICByZXR1cm4gZG9ja2VyU2FuZGJveCgpO1xuICB9XG5cbiAgY29uc3QgeyBsb2NhbFNhbmRib3ggfSA9IGF3YWl0IGltcG9ydChcIi4vYmluZGluZ3MvbG9jYWxcIik7XG4gIHJldHVybiBsb2NhbFNhbmRib3goKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNEb2NrZXJBdmFpbGFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBleGVjU3luYyB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGV4ZWNTeW5jKFwiZG9ja2VyIHNhbmRib3ggLS1oZWxwXCIsIHsgc3RkaW86IFwiaWdub3JlXCIsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQmluZGluZyhcbiAgc2FuZGJveDogU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdIHwgdW5kZWZpbmVkLFxuICB0eXBlPzogc3RyaW5nXG4pOiBQcm9taXNlPHsgYmluZGluZzogU2FuZGJveEJpbmRpbmc7IGJpbmRpbmdOYW1lOiBzdHJpbmcgfT4ge1xuICBpZiAoIXNhbmRib3gpIHtcbiAgICBjb25zdCBiaW5kaW5nID0gYXdhaXQgZ2V0RGVmYXVsdEJpbmRpbmcoKTtcbiAgICByZXR1cm4geyBiaW5kaW5nLCBiaW5kaW5nTmFtZTogYmluZGluZy50eXBlIH07XG4gIH1cbiAgaWYgKGlzU2luZ2xlQmluZGluZyhzYW5kYm94KSkge1xuICAgIHJldHVybiB7IGJpbmRpbmc6IHNhbmRib3gsIGJpbmRpbmdOYW1lOiBzYW5kYm94LnR5cGUgfTtcbiAgfVxuICBpZiAodHlwZSkge1xuICAgIGNvbnN0IG1hdGNoID0gc2FuZGJveC5maW5kKChiKSA9PiBiLnR5cGUgPT09IHR5cGUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBTYW5kYm94RXJyb3Ioe1xuICAgICAgICByZWFzb246IGBVbmtub3duIGJpbmRpbmcgdHlwZTogXCIke3R5cGV9XCIuIEF2YWlsYWJsZTogJHtzYW5kYm94Lm1hcCgoYikgPT4gYi50eXBlKS5qb2luKFwiLCBcIil9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBiaW5kaW5nOiBtYXRjaCwgYmluZGluZ05hbWU6IG1hdGNoLnR5cGUgfTtcbiAgfVxuICBpZiAoc2FuZGJveC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgU2FuZGJveEVycm9yKHsgcmVhc29uOiBcIk5vIHNhbmRib3ggYmluZGluZ3MgY29uZmlndXJlZFwiIH0pO1xuICB9XG4gIHJldHVybiB7IGJpbmRpbmc6IHNhbmRib3hbMF0sIGJpbmRpbmdOYW1lOiBzYW5kYm94WzBdLnR5cGUgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNhbmRib3hJZChjdHg6IFNhbmRib3hDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGN0eC5zYW5kYm94SWQpIHtcbiAgICByZXR1cm4gY3R4LnNhbmRib3hJZDtcbiAgfVxuICBpZiAoIWN0eC5fc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJTYW5kYm94Q29udGV4dCBoYXMgbm8gc2FuZGJveElkIGFuZCBubyBzZXNzaW9uSWQgdG8gcmVzb2x2ZSBmcm9tXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGF3YWl0IGN0eC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KGN0eC5fc2Vzc2lvbklkKTtcbiAgY3R4LnNhbmRib3hJZCA9IHJlY29yZD8uc2FuZGJveElkID8/IGN0eC5fc2Vzc2lvbklkO1xuICByZXR1cm4gY3R4LnNhbmRib3hJZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihcbiAgY3R4OiBTYW5kYm94Q29udGV4dCxcbiAgb3B0cz86IFNldHVwT3B0czxUU2FuZGJveEJpbmRpbmdzPlxuKTogUHJvbWlzZTxTZXR1cFJlc3VsdD4ge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNhbmRib3hJZCA9IGF3YWl0IHJlc29sdmVTYW5kYm94SWQoY3R4KTtcbiAgaWYgKGN0eC5fcGVuZGluZ1NldHVwKSB7XG4gICAgcmV0dXJuIHsgZG9uZTogY3R4Ll9wZW5kaW5nU2V0dXAgfTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50ID0gY3R4LmFnZW50O1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpzZXR1cFwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRvbmVSZXNvbHZlQmluZGluZyA9IGxvZy50aW1lKFwicmVzb2x2ZSBiaW5kaW5nXCIsIHtcbiAgICByZXF1ZXN0ZWRUeXBlOiBvcHRzPy50eXBlLFxuICB9KTtcbiAgY29uc3QgeyBiaW5kaW5nLCBiaW5kaW5nTmFtZSB9ID0gYXdhaXQgcmVzb2x2ZUJpbmRpbmcoXG4gICAgYWdlbnQub3B0aW9ucy5zYW5kYm94LFxuICAgIG9wdHM/LnR5cGVcbiAgKTtcbiAgZG9uZVJlc29sdmVCaW5kaW5nKCk7XG5cbiAgaWYgKG9wdHM/LmN3ZCkge1xuICAgIGN0eC5fY3dkID0gb3B0cy5jd2Q7XG4gIH1cblxuICBjb25zdCBzZXR1cExvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgYmluZGluZzogYmluZGluZ05hbWUsXG4gICAgdmVyc2lvbjogb3B0cz8udmVyc2lvbiA/PyBiaW5kaW5nLmRlZmF1bHRzPy52ZXJzaW9uLFxuICB9KTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQ29uZnVzaW5nVm9pZFR5cGU6IC5cbiAgbGV0IHJlc29sdmVCbG9ja2luZ1Byb21pc2UgPSAodmFsdWU6IHZvaWQpID0+IHZhbHVlO1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5QmxvY2tTdGF0ZW1lbnRzOiAuXG4gIGxldCByZWplY3RCbG9ja2luZ1Byb21pc2UgPSAoX3JlYXNvbj86IGFueSkgPT4ge307XG4gIGNvbnN0IGJsb2NraW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXNvbHZlQmxvY2tpbmdQcm9taXNlID0gcmVzb2x2ZTtcbiAgICByZWplY3RCbG9ja2luZ1Byb21pc2UgPSByZWplY3Q7XG4gIH0pO1xuXG4gIGN0eC5fcGVuZGluZ1NldHVwID0gKGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2xlZXBPbGRJbnN0YW5jZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkb25lUGVuZGluZ1NldHVwID0gc2V0dXBMb2cudGltZShcInBlbmRpbmcgc2V0dXBcIik7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VHZXQgPSBzZXR1cExvZy50aW1lKFwic3RvcmFnZS5zYW5kYm94LmdldFwiKTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcbiAgICAgIGRvbmVTdG9yYWdlR2V0KCk7XG5cbiAgICAgIGNvbnN0IGJpbmRpbmdEZWZhdWx0cyA9IGJpbmRpbmcuZGVmYXVsdHMgPz8ge307XG4gICAgICBjb25zdCBlZmZlY3RpdmVWZXJzaW9uID0gb3B0cz8udmVyc2lvbiA/PyBiaW5kaW5nRGVmYXVsdHMudmVyc2lvbiA/PyBudWxsO1xuICAgICAgY29uc3QgZWZmZWN0aXZlUnVuID0gb3B0cz8ucnVuID8/IGJpbmRpbmdEZWZhdWx0cy5ydW47XG4gICAgICBjb25zdCBlZmZlY3RpdmVOZXR3b3JrUG9saWN5ID1cbiAgICAgICAgb3B0cz8ubmV0d29ya1BvbGljeSA/PyBiaW5kaW5nRGVmYXVsdHMubmV0d29ya1BvbGljeSA/PyBudWxsO1xuICAgICAgY29uc3QgZWZmZWN0aXZlQ3dkID1cbiAgICAgICAgY3R4Ll9jd2QgfHwgb3B0cz8uY3dkIHx8IGJpbmRpbmdEZWZhdWx0cy5jd2QgfHwgbnVsbDtcbiAgICAgIGlmIChlZmZlY3RpdmVDd2QpIHtcbiAgICAgICAgY3R4Ll9jd2QgPSBlZmZlY3RpdmVDd2Q7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RpdmVDb25maWcgPSB7XG4gICAgICAgIC4uLmJpbmRpbmdEZWZhdWx0cy5jb25maWcsXG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogb3B0cyBpcyBhIHVuaW9uOyBjb25maWcgZXhpc3RzIG9uIGJpbmRpbmctc3BlY2lmaWMgYnJhbmNoZXNcbiAgICAgICAgLi4uKG9wdHMgYXMgYW55KT8uY29uZmlnLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9XG4gICAgICAgICAgIWVmZmVjdGl2ZVZlcnNpb24gfHwgcmVjb3JkLnNldHVwPy52ZXJzaW9uID09PSBlZmZlY3RpdmVWZXJzaW9uO1xuXG4gICAgICAgIGlmICh2ZXJzaW9uTWF0Y2hlcyAmJiByZWNvcmQuc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGRvbmVDb25uZWN0RXhpc3RpbmcgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJjb25uZWN0IGV4aXN0aW5nIHNhbmRib3hcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2V0dXBTdGF0ZTogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlY29yZC5zZXR1cC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGN3ZDogcmVjb3JkLnNldHVwLmN3ZCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgICAgICAgICAgbG9nOiBzZXR1cExvZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkb25lQ29ubmVjdEV4aXN0aW5nKCk7XG4gICAgICAgICAgY3R4Ll9jd2QgPSBpbnN0YW5jZS5jd2Q7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcnNpb25NYXRjaGVzICYmICFyZWNvcmQuc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGRvbmVQb2xsVW50aWxSZWFkeSA9IHNldHVwTG9nLnRpbWUoXCJwb2xsIHVudGlsIHJlYWR5XCIpO1xuICAgICAgICAgIGF3YWl0IHBvbGxVbnRpbFJlYWR5KGN0eCwgb3B0cz8uc2lnbmFsKTtcbiAgICAgICAgICBkb25lUG9sbFVudGlsUmVhZHkoKTtcblxuICAgICAgICAgIGNvbnN0IGRvbmVTdG9yYWdlR2V0UG9zdFBvbGwgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJzdG9yYWdlLnNhbmRib3guZ2V0IChwb3N0LXBvbGwpXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuICAgICAgICAgIGRvbmVTdG9yYWdlR2V0UG9zdFBvbGwoKTtcblxuICAgICAgICAgIGlmICghcmVhZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTYW5kYm94Tm90Rm91bmRFcnJvcih7IGlkOiBzYW5kYm94SWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRvbmVDb25uZWN0RXhpc3RpbmcgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJjb25uZWN0IGV4aXN0aW5nIHNhbmRib3hcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2V0dXBTdGF0ZTogXCJwb3N0LXBvbGxcIixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlYWR5LnNldHVwLm1ldGFkYXRhLFxuICAgICAgICAgICAgY3dkOiByZWFkeS5zZXR1cC5jd2QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICAgICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZG9uZUNvbm5lY3RFeGlzdGluZygpO1xuICAgICAgICAgIGN0eC5fY3dkID0gaW5zdGFuY2UuY3dkO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWNvcmQuc2V0dXAubWV0YWRhdGEpIHtcbiAgICAgICAgICBjb25zdCBvbGRJbnN0YW5jZU1ldGFkYXRhID0gcmVjb3JkLnNldHVwLm1ldGFkYXRhO1xuICAgICAgICAgIHNsZWVwT2xkSW5zdGFuY2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9uZVN0b3BPbGRJbnN0YW5jZSA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgICAgICAgIFwic3RvcCBvbGQgc2FuZGJveCBpbnN0YW5jZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb2xkSW5zdGFuY2VNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBsb2c6IHNldHVwTG9nLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYXdhaXQgb2xkLnN0b3AoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICBkb25lU3RvcE9sZEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvbmVTdG9wT2xkSW5zdGFuY2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzZXR1cF86IFNhbmRib3hbXCJzZXR1cFwiXSA9IHtcbiAgICAgICAgYmluZGluZzogYmluZGluZ05hbWUsXG4gICAgICAgIHZlcnNpb246IGVmZmVjdGl2ZVZlcnNpb24gPz8gcmVjb3JkPy5zZXR1cD8udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICBuZXR3b3JrUG9saWN5OlxuICAgICAgICAgIGVmZmVjdGl2ZU5ldHdvcmtQb2xpY3kgPz8gcmVjb3JkPy5zZXR1cD8ubmV0d29ya1BvbGljeSA/PyBudWxsLFxuICAgICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgIGN3ZDogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG5ld1JlY29yZDogU2FuZGJveCA9IHtcbiAgICAgICAgaWQ6IHNhbmRib3hJZCxcbiAgICAgICAgc2V0dXA6IHNldHVwXyxcbiAgICAgICAgY3JlYXRlZEF0OiByZWNvcmQ/LmNyZWF0ZWRBdCA/PyBub3csXG4gICAgICAgIGxhc3RBY3RpdmVBdDogbm93LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VTZXRQZW5kaW5nID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgXCJzdG9yYWdlLnNhbmRib3guc2V0IChzZXR1cCBwZW5kaW5nKVwiXG4gICAgICApO1xuICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LnNldChzYW5kYm94SWQsIG5ld1JlY29yZCk7XG4gICAgICBkb25lU3RvcmFnZVNldFBlbmRpbmcoKTtcblxuICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuXG4gICAgICBjb25zdCBkb25lQmluZGluZ0NyZWF0ZSA9IHNldHVwTG9nLnRpbWUoXCJiaW5kaW5nLmNyZWF0ZVwiKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpbmRpbmcuY3JlYXRlKHtcbiAgICAgICAgY3dkOiBjdHguX2N3ZCA/PyBcIi5cIixcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4uc2V0dXBfLFxuICAgICAgICAgIHJ1bjogZWZmZWN0aXZlUnVuLFxuICAgICAgICAgIGNvbmZpZzogZWZmZWN0aXZlQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICByZWNvcmQ6IG5ld1JlY29yZCxcbiAgICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICB9KTtcbiAgICAgIGRvbmVCaW5kaW5nQ3JlYXRlKCk7XG5cbiAgICAgIHNldHVwXy5jb21wbGV0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzZXR1cF8ubWV0YWRhdGEgPSByZXN1bHQubWV0YWRhdGE7XG4gICAgICBzZXR1cF8uY3dkID0gcmVzdWx0Lmluc3RhbmNlLmN3ZDtcblxuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VVcGRhdGVDb21wbGV0ZSA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgIFwic3RvcmFnZS5zYW5kYm94LnVwZGF0ZSAoc2V0dXAgY29tcGxldGUpXCJcbiAgICAgICk7XG4gICAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3gudXBkYXRlKHNhbmRib3hJZCwge1xuICAgICAgICBzZXR1cDogc2V0dXBfLFxuICAgICAgICBsYXN0QWN0aXZlQXQ6IERhdGUubm93KCksXG4gICAgICB9KTtcbiAgICAgIGRvbmVTdG9yYWdlVXBkYXRlQ29tcGxldGUoKTtcblxuICAgICAgY3R4Ll9jd2QgPSByZXN1bHQuaW5zdGFuY2UuY3dkO1xuICAgICAgcmV0dXJuIHJlc3VsdC5pbnN0YW5jZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGN0eC5fcGVuZGluZ1NldHVwID0gdW5kZWZpbmVkO1xuICAgICAgcmVqZWN0QmxvY2tpbmdQcm9taXNlKGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN0IGRvbmVGaW5hbGl6ZSA9IHNldHVwTG9nLnRpbWUoXCJmaW5hbGl6ZSBzZXR1cFwiKTtcbiAgICAgIGF3YWl0IHNsZWVwT2xkSW5zdGFuY2U7XG4gICAgICBkb25lRmluYWxpemUoKTtcbiAgICAgIGRvbmVQZW5kaW5nU2V0dXAoKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgY29uc3QgZG9uZVdhaXRGb3JVbmJsb2NrID0gc2V0dXBMb2cudGltZShcIndhaXQgZm9yIHNldHVwIHVuYmxvY2tcIik7XG4gIGF3YWl0IGJsb2NraW5nUHJvbWlzZTtcbiAgZG9uZVdhaXRGb3JVbmJsb2NrKCk7XG4gIHJldHVybiB7IGRvbmU6IGN0eC5fcGVuZGluZ1NldHVwIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKFxuICBjdHg6IFNhbmRib3hDb250ZXh0LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTxTYW5kYm94SW5zdGFuY2U+IHtcbiAgY29uc3Qgc2FuZGJveElkID0gYXdhaXQgcmVzb2x2ZVNhbmRib3hJZChjdHgpO1xuICBjb25zdCBhZ2VudCA9IGN0eC5hZ2VudDtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6cmVzb2x2ZVwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGlmIChjdHguX3BlbmRpbmdTZXR1cCkge1xuICAgIHJldHVybiBhd2FpdCBjdHguX3BlbmRpbmdTZXR1cDtcbiAgfVxuXG4gIGxldCByZWNvcmQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG5cbiAgaWYgKCFyZWNvcmQpIHtcbiAgICBjb25zdCB7IGRvbmUgfSA9IGF3YWl0IHNldHVwKGN0eCwgeyBzaWduYWwgfSk7XG4gICAgcmV0dXJuIGF3YWl0IGRvbmU7XG4gIH1cblxuICBpZiAoIXJlY29yZC5zZXR1cD8uY29tcGxldGVkQXQpIHtcbiAgICBhd2FpdCBwb2xsVW50aWxSZWFkeShjdHgsIHNpZ25hbCk7XG4gICAgcmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuICB9XG5cbiAgaWYgKCFyZWNvcmQpIHtcbiAgICB0aHJvdyBuZXcgU2FuZGJveE5vdEZvdW5kRXJyb3IoeyBpZDogc2FuZGJveElkIH0pO1xuICB9XG5cbiAgY29uc3QgeyBiaW5kaW5nIH0gPSBhd2FpdCByZXNvbHZlQmluZGluZyhcbiAgICBjdHguYWdlbnQub3B0aW9ucy5zYW5kYm94LFxuICAgIHJlY29yZC5zZXR1cC5iaW5kaW5nXG4gICk7XG5cbiAgYWdlbnQuc3RvcmFnZS5zYW5kYm94XG4gICAgLnVwZGF0ZShzYW5kYm94SWQsIHsgbGFzdEFjdGl2ZUF0OiBEYXRlLm5vdygpIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgbG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBzYW5kYm94IGxhc3RBY3RpdmVBdFwiLCB7IGVycm9yIH0pO1xuICAgIH0pO1xuXG4gIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICBhZ2VudCxcbiAgICBtZXRhZGF0YTogcmVjb3JkLnNldHVwLm1ldGFkYXRhLFxuICAgIGN3ZDogcmVjb3JkLnNldHVwLmN3ZCxcbiAgICBzaWduYWwsXG4gICAgbG9nLFxuICB9KTtcbiAgY3R4Ll9jd2QgPSBpbnN0YW5jZS5jd2Q7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbFVudGlsUmVhZHkoXG4gIGN0eDogU2FuZGJveENvbnRleHQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaWQgPSBjdHguc2FuZGJveElkITtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgUE9MTF9USU1FT1VUX01TO1xuXG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBjdHguYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChpZCk7XG4gICAgaWYgKHJlY29yZD8uc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgUE9MTF9JTlRFUlZBTF9NUykpO1xuICB9XG5cbiAgdGhyb3cgbmV3IFNhbmRib3hFcnJvcih7XG4gICAgcmVhc29uOiBgVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNhbmRib3ggXCIke2lkfVwiIHNldHVwIHRvIGNvbXBsZXRlYCxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJleGVjXCJdPlxuKSB7XG4gIC8vIG5vdGU6IC5leGVjIGNhbid0IGJlIGEgc3RlcCBiZWNhdXNlIGl0IHJldHVybnMgbG9ncyBhbmQgYSByZXN1bHQgcHJvbWlzZSB3aGljaCBjYW4ndCBiZSBzZXJpYWxpemVkXG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmV4ZWMoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERvbWFpbihcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcImdldERvbWFpblwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmdldERvbWFpbiguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHVzKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wiZ2V0U3RhdHVzXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguZ2V0U3RhdHVzKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBraWxsKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wia2lsbFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmtpbGwoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRGaWxlKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wicmVhZEZpbGVcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5yZWFkRmlsZSguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc25hcHNob3QoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJzbmFwc2hvdFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnNuYXBzaG90KC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydChcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInN0YXJ0XCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguc3RhcnQoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0b3AoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJzdG9wXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguc3RvcCguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTmV0d29ya1BvbGljeShcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInVwZGF0ZU5ldHdvcmtQb2xpY3lcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC51cGRhdGVOZXR3b3JrUG9saWN5KC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGVzKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wid3JpdGVGaWxlc1wiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LndyaXRlRmlsZXMoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUb29sU2V0IH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgeyBnZXRTZXNzaW9uQ29udGV4dHMgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hCaW5kaW5nIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgbGF6eVNhbmRib3hIYW5kbGUgfSBmcm9tIFwiLi4vc2FuZGJveC9oYW5kbGVcIjtcbmltcG9ydCB7IGhpc3RvcnkgfSBmcm9tIFwiLi9oaXN0b3J5XCI7XG5pbXBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcbmltcG9ydCB7IHNlbmQgfSBmcm9tIFwiLi9zZW5kXCI7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tIFwiLi9zdHJlYW1cIjtcbmltcG9ydCB7IHVwZGF0ZSB9IGZyb20gXCIuL3VwZGF0ZVwiO1xuaW1wb3J0IHsgdXNhZ2UgfSBmcm9tIFwiLi91c2FnZVwiO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0ge1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25Db250ZXh0ID0ge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlc3Npb25IYW5kbGU8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVENvbnRleHQsXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KGFnZW50OiBBbnlBZ2VudCwgaWQ/OiBzdHJpbmcgfCBTZXNzaW9uT3B0aW9ucykge1xuICBjb25zdCBzZXNzaW9uSWQgPVxuICAgIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkIDogKGlkPy5pZCA/PyBgc2Vzc2lvbl8ke3VsaWQoKX1gKTtcblxuICBjb25zdCBjb250ZXh0cyA9IGdldFNlc3Npb25Db250ZXh0cyhhZ2VudCk7XG4gIGxldCBzZXNzaW9uQ29udGV4dCA9IGNvbnRleHRzLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb25Db250ZXh0KSB7XG4gICAgc2Vzc2lvbkNvbnRleHQgPSB7IGFnZW50LCBzZXNzaW9uSWQgfTtcbiAgICBjb250ZXh0cy5zZXQoc2Vzc2lvbklkLCBzZXNzaW9uQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgc2VuZDogKHNlbmQ8VG9vbHMsIFRDb250ZXh0LCBUTWVzc2FnZU1ldGFkYXRhLCBUU3RhdGU+KS5iaW5kKFxuICAgICAgbnVsbCxcbiAgICAgIHNlc3Npb25Db250ZXh0XG4gICAgKSxcbiAgICBzdHJlYW06IHN0cmVhbS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICBoaXN0b3J5OiAoaGlzdG9yeTxUb29scz4pLmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIGludGVycnVwdDogaW50ZXJydXB0LmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIHVzYWdlOiB1c2FnZS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICB1cGRhdGU6ICh1cGRhdGU8VFN0YXRlPikuYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgc2FuZGJveDogbGF6eVNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4oYWdlbnQsIHNlc3Npb25JZCksXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBJbmZlclVJVG9vbHMsXG4gIFJlYXNvbmluZ1VJUGFydCxcbiAgVGV4dFVJUGFydCxcbiAgVG9vbFNldCxcbiAgVUlNZXNzYWdlLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnREYXRhVHlwZXMgfSBmcm9tIFwiLi4vYWdlbnQvcmVnaXN0cnlcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbi8qKiBTdWItdG9vbCBwYXJ0cyAoZnJvbSBKYXZhU2NyaXB0IG1ldGEtdG9vbCkgdXNlIHRoaXMgdG9vbENhbGxJZCBwcmVmaXguICovXG5mdW5jdGlvbiBpc1N1YlRvb2xQYXJ0KHBhcnQ6IFBhcnQpOiBib29sZWFuIHtcbiAgY29uc3QgcCA9IHBhcnQucGFydCBhcyB7IHRvb2xDYWxsSWQ/OiBzdHJpbmcgfTtcbiAgcmV0dXJuIHR5cGVvZiBwPy50b29sQ2FsbElkID09PSBcInN0cmluZ1wiICYmIHAudG9vbENhbGxJZC5zdGFydHNXaXRoKFwianNfdGNfXCIpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbWluZ0NvbnRlbnQoXG4gIHBhcnQ6IHVua25vd25cbik6IHBhcnQgaXMgVGV4dFVJUGFydCB8IFJlYXNvbmluZ1VJUGFydCB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBwYXJ0ICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gcGFydCAmJlxuICAgIChwYXJ0LnR5cGUgPT09IFwidGV4dFwiIHx8IHBhcnQudHlwZSA9PT0gXCJyZWFzb25pbmdcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5SW50ZXJydXB0Q3V0b2ZmKHtcbiAgcGFydHMsXG4gIGxhc3RQYXJ0LFxufToge1xuICBwYXJ0czogUGFydFtdO1xuICBsYXN0UGFydDogeyBpbmRleDogbnVtYmVyOyBwYXJ0OiB1bmtub3duIH07XG59KTogUGFydFtdIHtcbiAgcmV0dXJuIHBhcnRzXG4gICAgLmZpbHRlcigocCkgPT4gcC5pbmRleCA8PSBsYXN0UGFydC5pbmRleClcbiAgICAubWFwKChwKSA9PiB7XG4gICAgICBpZiAocC5pbmRleCAhPT0gbGFzdFBhcnQuaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIE9ubHkgcmVwbGFjZSBjb250ZW50IGZvciBzdHJlYW1pbmcgcGFydHMgKHRleHQsIHJlYXNvbmluZykgd2hlcmUgdGhlXG4gICAgICAgKiBjbGllbnQncyB0cnVuY2F0ZWQgdmVyc2lvbiBpcyBtb3JlIGFjY3VyYXRlIHRoYW4gdGhlIHNlcnZlcidzIGZ1bGxcbiAgICAgICAqIHZlcnNpb24uIEZvciBzdGF0ZWZ1bCBwYXJ0cyAodG9vbHMpLCB0aGUgc2VydmVyJ3MgdmVyc2lvbiBpc1xuICAgICAgICogYXV0aG9yaXRhdGl2ZSBcdTIwMTQgaXQgbWF5IGhhdmUgZXZvbHZlZCAoZS5nLiBhcHByb3ZhbC1yZXF1ZXN0ZWQgXHUyMTkyXG4gICAgICAgKiBvdXRwdXQtZGVuaWVkKSBhZnRlciB0aGUgY2xpZW50IHNuYXBzaG90IHdhcyB0YWtlbi5cbiAgICAgICAqL1xuICAgICAgaWYgKGlzU3RyZWFtaW5nQ29udGVudChsYXN0UGFydC5wYXJ0KSkge1xuICAgICAgICByZXR1cm4geyAuLi5wLCBwYXJ0OiBsYXN0UGFydC5wYXJ0IH0gYXMgUGFydDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVVSU1lc3NhZ2VzPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4ob3B0czoge1xuICBtZXNzYWdlczogTWVzc2FnZVtdO1xuICBwYXJ0czogUGFydFtdO1xuICB1bnRpbD86IG51bWJlcjtcbiAgaW5jbHVkZVF1ZXVlZD86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZpbHRlcnMgb3V0IHN1Yi10b29sIHBhcnRzIHNvIHRoZSBMTE0gZG9lc24ndCBzZWUgdGhlbS4gKi9cbiAgZXhjbHVkZVN1YlRvb2xQYXJ0cz86IGJvb2xlYW47XG59KSB7XG4gIHR5cGUgVHlwZWRVSU1lc3NhZ2UgPSBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+O1xuXG4gIGxldCBmaWx0ZXJlZCA9IG9wdHMubWVzc2FnZXM7XG5cbiAgaWYgKG9wdHMudW50aWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHVudGlsID0gb3B0cy51bnRpbDtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigobSkgPT4gbS5jcmVhdGVkQXQgPD0gdW50aWwpO1xuICB9XG5cbiAgaWYgKCFvcHRzLmluY2x1ZGVRdWV1ZWQpIHtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigobSkgPT4gbS5zdGFydGVkQXQgIT09IG51bGwpO1xuICB9XG5cbiAgLy8gU29ydCBieSBjcmVhdGVkQXQgc28gbWVzc2FnZXMgYXJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgcmVnYXJkbGVzcyBvZlxuICAvLyBob3cgdGhlIHN0b3JhZ2UgbGF5ZXIgcmV0dXJucyB0aGVtIChlLmcuIGxvY2FsIEZTIHJlYWRzIGluIHJlYWRkaXIgb3JkZXIpLlxuICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZF0uc29ydCgoYSwgYikgPT4gYS5jcmVhdGVkQXQgLSBiLmNyZWF0ZWRBdCk7XG5cbiAgY29uc3QgcGFydHMgPSBvcHRzLmV4Y2x1ZGVTdWJUb29sUGFydHNcbiAgICA/IG9wdHMucGFydHMuZmlsdGVyKChwKSA9PiAhaXNTdWJUb29sUGFydChwKSlcbiAgICA6IG9wdHMucGFydHM7XG5cbiAgY29uc3QgcGFydHNCeU1lc3NhZ2UgPSBuZXcgTWFwPHN0cmluZywgUGFydFtdPigpO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBTdHJpbmcocGFydC5tZXNzYWdlSWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gcGFydHNCeU1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaChwYXJ0KTtcbiAgICBwYXJ0c0J5TWVzc2FnZS5zZXQobWVzc2FnZUlkLCBleGlzdGluZyk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRcbiAgICAubWFwKChtKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBTdHJpbmcobS5pZCk7XG4gICAgICBsZXQgbWVzc2FnZVBhcnRzID0gcGFydHNCeU1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCkgPz8gW107XG4gICAgICBtZXNzYWdlUGFydHMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgICBpZiAobS5pbnRlcnJ1cHRlZExhc3RQYXJ0ICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZVBhcnRzID0gYXBwbHlJbnRlcnJ1cHRDdXRvZmYoe1xuICAgICAgICAgIHBhcnRzOiBtZXNzYWdlUGFydHMsXG4gICAgICAgICAgbGFzdFBhcnQ6IG0uaW50ZXJydXB0ZWRMYXN0UGFydCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHJvbGU6IG0ucm9sZSxcbiAgICAgICAgcGFydHM6IG1lc3NhZ2VQYXJ0cy5tYXAoKHApID0+IHAucGFydCksXG4gICAgICAgIC4uLihtLm1ldGFkYXRhICE9IG51bGwgPyB7IG1ldGFkYXRhOiBtLm1ldGFkYXRhIH0gOiB7fSksXG4gICAgICB9IGFzIFR5cGVkVUlNZXNzYWdlO1xuICAgIH0pXG4gICAgLmZpbHRlcigobSkgPT4gbS5wYXJ0cy5sZW5ndGggPiAwKTtcbn1cbiIsICJleHBvcnQgdHlwZSBTdGVwVXNhZ2UgPSB7XG4gIHN0ZXBJbmRleDogbnVtYmVyO1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVSZWFkVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlV3JpdGVUb2tlbnM6IG51bWJlcjtcbiAgcmVhc29uaW5nVG9rZW5zOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBVc2FnZVN1bW1hcnkgPSB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICB0b3RhbFRva2VuczogbnVtYmVyO1xuICBjYWNoZVJlYWRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVXcml0ZVRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgc3RlcENvdW50OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uVXNhZ2UgPSB7XG4gIHRvdGFsOiBVc2FnZVN1bW1hcnkgJiB7IG1lc3NhZ2VDb3VudDogbnVtYmVyIH07XG4gIGJ5TWVzc2FnZUlkOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZVN1bW1hcnkgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2Vzc2lvblVzYWdlKFxuICBtZXNzYWdlczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXNhZ2U6IHsgc3RlcHM6IFN0ZXBVc2FnZVtdOyBzdW1tYXJ5OiBVc2FnZVN1bW1hcnkgfSB8IG51bGw7XG4gIH0+XG4pOiBTZXNzaW9uVXNhZ2Uge1xuICBjb25zdCBieU1lc3NhZ2VJZDogUmVjb3JkPHN0cmluZywgVXNhZ2VTdW1tYXJ5IHwgbnVsbD4gPSB7fTtcbiAgZm9yIChjb25zdCBtIG9mIG1lc3NhZ2VzKSB7XG4gICAgYnlNZXNzYWdlSWRbbS5pZF0gPSBtLnVzYWdlPy5zdW1tYXJ5ID8/IG51bGw7XG4gIH1cblxuICBjb25zdCBzdW1tYXJpZXMgPSBtZXNzYWdlc1xuICAgIC5tYXAoKG0pID0+IG0udXNhZ2U/LnN1bW1hcnkpXG4gICAgLmZpbHRlcigocyk6IHMgaXMgVXNhZ2VTdW1tYXJ5ID0+IHMgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdG90YWwgPSB7XG4gICAgbW9kZWw6IHN1bW1hcmllc1swXT8ubW9kZWwgPz8gXCJ1bmtub3duXCIsXG4gICAgaW5wdXRUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5pbnB1dFRva2VucywgMCksXG4gICAgb3V0cHV0VG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMub3V0cHV0VG9rZW5zLCAwKSxcbiAgICB0b3RhbFRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLnRvdGFsVG9rZW5zLCAwKSxcbiAgICBjYWNoZVJlYWRUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5jYWNoZVJlYWRUb2tlbnMsIDApLFxuICAgIGNhY2hlV3JpdGVUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5jYWNoZVdyaXRlVG9rZW5zLCAwKSxcbiAgICByZWFzb25pbmdUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5yZWFzb25pbmdUb2tlbnMsIDApLFxuICAgIHN0ZXBDb3VudDogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLnN0ZXBDb3VudCwgMCksXG4gICAgbWVzc2FnZUNvdW50OiBzdW1tYXJpZXMubGVuZ3RoLFxuICB9O1xuXG4gIHJldHVybiB7IHRvdGFsLCBieU1lc3NhZ2VJZCB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4uL3V0aWxzL3VpXCI7XG5pbXBvcnQgeyBjb21wdXRlU2Vzc2lvblVzYWdlLCB0eXBlIFNlc3Npb25Vc2FnZSB9IGZyb20gXCIuLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgdHlwZSBIaXN0b3J5UmVzdWx0ID0ge1xuICBtZXNzYWdlczogUmV0dXJuVHlwZTx0eXBlb2YgYXNzZW1ibGVVSU1lc3NhZ2VzPjtcbiAgc3RyZWFtaW5nTWVzc2FnZUlkOiBzdHJpbmcgfCBudWxsO1xuICB1c2FnZTogU2Vzc2lvblVzYWdlO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhpc3Rvcnk8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PihcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBbc2Vzc2lvbiwgbWVzc2FnZXMsIHBhcnRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCksXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oXG4gICAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgICApLFxuICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCksXG4gIF0pO1xuXG4gIGNvbnN0IGxhc3RBc3Npc3RhbnQgPVxuICAgIG1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5pZCA9PT0gc2Vzc2lvbj8ubGFzdE1lc3NhZ2VJZCAmJiBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCJcbiAgICApID8/IG1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5yb2xlID09PSBcImFzc2lzdGFudFwiKS5hdCgtMSk7XG5cbiAgY29uc3QgaXNTdHJlYW1pbmcgPVxuICAgIGxhc3RBc3Npc3RhbnQ/LmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgbGFzdEFzc2lzdGFudD8uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbDtcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkID0gaXNTdHJlYW1pbmcgPyBsYXN0QXNzaXN0YW50LmlkIDogbnVsbDtcbiAgY29uc3QgdmlzaWJsZVVudGlsID0gbGFzdEFzc2lzdGFudD8uY3JlYXRlZEF0O1xuXG4gIGNvbnN0IGFzc2VtYmxlZCA9IGFzc2VtYmxlVUlNZXNzYWdlczxUb29scz4oe1xuICAgIG1lc3NhZ2VzLFxuICAgIHBhcnRzLFxuICAgIGluY2x1ZGVRdWV1ZWQ6IHZpc2libGVVbnRpbCAhPT0gdW5kZWZpbmVkLFxuICAgIHVudGlsOiB2aXNpYmxlVW50aWwsXG4gIH0pO1xuXG4gIGNvbnN0IHVzYWdlID0gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlcyk7XG5cbiAgcmV0dXJuIHsgbWVzc2FnZXM6IGFzc2VtYmxlZCwgc3RyZWFtaW5nTWVzc2FnZUlkLCB1c2FnZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmV4cG9ydCB0eXBlIEludGVycnVwdE9wdGlvbnMgPSB7XG4gIGxhc3RQYXJ0Pzoge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgcGFydDogdW5rbm93bjtcbiAgfTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnRlcnJ1cHQoXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dCxcbiAgb3B0cz86IEludGVycnVwdE9wdGlvbnNcbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgbGV0IHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihcbiAgICAobSkgPT5cbiAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgbS5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsXG4gICk7XG5cbiAgaWYgKHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBNQVhfUkVUUk9BQ1RJVkVfTVMgPSA1XzAwMDtcbiAgICBjb25zdCBsYXRlc3QgPSBtZXNzYWdlc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKG0pID0+XG4gICAgICAgICAgbS5yb2xlID09PSBcImFzc2lzdGFudFwiICYmXG4gICAgICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsICYmXG4gICAgICAgICAgbS5jb21wbGV0ZWRBdCAhPT0gbnVsbCAmJlxuICAgICAgICAgIG5vdyAtIG0uY29tcGxldGVkQXQgPCBNQVhfUkVUUk9BQ1RJVkVfTVNcbiAgICAgIClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdCAtIGEuY3JlYXRlZEF0KVxuICAgICAgLmF0KDApO1xuICAgIGlmIChsYXRlc3QpIHtcbiAgICAgIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IFtsYXRlc3RdO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcy5tYXAoKG0pID0+XG4gICAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2Uuc2V0KG0uaWQsIHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgaW50ZXJydXB0ZWRBdDogbm93LFxuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBvcHRzPy5sYXN0UGFydCA/PyBudWxsLFxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgbWVzc2FnZUlkcyA9IG5ldyBTZXQocGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLm1hcCgobSkgPT4gbS5pZCkpO1xuICBpZiAobWVzc2FnZUlkcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxsUGFydHMgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQubGlzdEJ5U2Vzc2lvbihcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcblxuICBmb3IgKGNvbnN0IHAgb2YgYWxsUGFydHMpIHtcbiAgICBpZiAoIW1lc3NhZ2VJZHMuaGFzKHAubWVzc2FnZUlkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHAucGFydCAmJlxuICAgICAgXCJzdGF0ZVwiIGluIHAucGFydCAmJlxuICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgIFwiYXBwcm92YWxcIiBpbiBwLnBhcnRcbiAgICApIHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSkuYXBwcm92YWw7XG4gICAgICBpZiAoYXBwcm92YWw/LmlkKSB7XG4gICAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5zZXQocC5pZCwge1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgLi4ucC5wYXJ0LFxuICAgICAgICAgICAgc3RhdGU6IFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgLi4uYXBwcm92YWwsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVhc29uOiBcImludGVycnVwdGVkXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgVUlNZXNzYWdlW1wicGFydHNcIl1bbnVtYmVyXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBGaW5pc2hSZWFzb24sIFRvb2xTZXQsIFVJTWVzc2FnZSwgVUlNZXNzYWdlQ2h1bmsgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IGFsbCB9IGZyb20gXCJiZXR0ZXItYWxsXCI7XG5pbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVUlNZXNzYWdlIH0gZnJvbSBcIi4uL2FnZW50L3JlZ2lzdHJ5XCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCB9IGZyb20gXCIuLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXBVc2FnZSB9IGZyb20gXCIuLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBTdHJlYW1UZXh0UmVzdWx0LFxuICBzdHJlYW1UZXh0LFxuICBzdHJlYW1UZXh0U3RlcCxcbn0gZnJvbSBcIi4vYWktbG9vcC9zdHJlYW0tdGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgaW50ZXJydXB0IH0gZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5cbmNvbnN0IERFRkFVTFRfU1RFUF9USFJPVUdIUFVUID0gMTAwO1xuXG5leHBvcnQgdHlwZSBBcHByb3ZhbERhdGEgPSB7XG4gIGFwcHJvdmFsSWQ6IHN0cmluZztcbiAgYXBwcm92ZWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn07XG5cbnR5cGUgTWVzc2FnZURhdGE8VG9vbHMgZXh0ZW5kcyBUb29sU2V0LCBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bj4gPVxuICB8IFVJTWVzc2FnZTxUTWVzc2FnZU1ldGFkYXRhPlxuICB8IHtcbiAgICAgIHJvbGU/OiBUeXBlZFVJTWVzc2FnZTx1bmtub3duLCBUb29scz5bXCJyb2xlXCJdO1xuICAgICAgcGFydHM6IFR5cGVkVUlNZXNzYWdlPHVua25vd24sIFRvb2xzPltcInBhcnRzXCJdO1xuICAgICAgbWV0YWRhdGE/OiBUTWVzc2FnZU1ldGFkYXRhIHwgbnVsbDtcbiAgICAgIGlkPzogc3RyaW5nO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFNlbmRJbnB1dDxUb29scyBleHRlbmRzIFRvb2xTZXQsIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duPiA9XG4gIHwgc3RyaW5nXG4gIHwgTWVzc2FnZURhdGE8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+XG4gIHwgeyB0eXBlOiBcIm1lc3NhZ2VcIjsgbWVzc2FnZTogTWVzc2FnZURhdGE8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+IH1cbiAgfCB7IHR5cGU6IFwiYXBwcm92YWxcIjsgYXBwcm92YWw6IEFwcHJvdmFsRGF0YSB9O1xuXG5leHBvcnQgdHlwZSBTZW5kT3B0aW9uczxUQ29udGV4dCwgVFN0YXRlID0gdW5rbm93bj4gPSB7XG4gIGludGVycnVwdElmU3RyZWFtaW5nPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8IHsgbGFzdFBhcnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IH07XG4gIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgaW5pdGlhbFN0YXRlPzogVFN0YXRlO1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBzYW5kYm94SWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kUmVzdWx0ID0ge1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgZG9uZTogdHJ1ZSB8IFByb21pc2U8dHJ1ZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY3RpdmVSdW4gPSB7XG4gIGNodW5rczogVUlNZXNzYWdlQ2h1bmtbXTtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPjtcbiAgZG9uZTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlc29sdmVzIHdoZW4gYSBuZXcgY2h1bmsgaXMgYXZhaWxhYmxlLiBSZXBsYWNlZCBhZnRlciBlYWNoIG5vdGlmaWNhdGlvbi4gKi9cbiAgb25DaHVuazogUHJvbWlzZTx2b2lkPjtcbn07XG5cbmNvbnN0IEFDVElWRV9SVU5TX0tFWSA9IFN5bWJvbC5mb3IoXCJleHBlcmltZW50YWwtYWdlbnQ6YWN0aXZlUnVuc1wiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZVJ1bnMoKTogTWFwPHN0cmluZywgQWN0aXZlUnVuPiB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIE1hcDxzdHJpbmcsIEFjdGl2ZVJ1bj4gfCB1bmRlZmluZWQ+O1xuICBpZiAoIWdbQUNUSVZFX1JVTlNfS0VZXSkge1xuICAgIGdbQUNUSVZFX1JVTlNfS0VZXSA9IG5ldyBNYXAoKTtcbiAgfVxuICByZXR1cm4gZ1tBQ1RJVkVfUlVOU19LRVldO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZDxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUQ29udGV4dCxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRTdGF0ZSA9IHVua25vd24sXG4+KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIGlucHV0OlxuICAgIHwgU2VuZElucHV0PFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPlxuICAgIHwgU2VuZElucHV0PFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPltdLFxuICBvcHRzPzogU2VuZE9wdGlvbnM8VENvbnRleHQsIFRTdGF0ZT5cbik6IFByb21pc2U8U2VuZFJlc3VsdD4ge1xuICBpZiAob3B0cz8uaW50ZXJydXB0SWZTdHJlYW1pbmcpIHtcbiAgICBjb25zdCBsYXN0UGFydCA9XG4gICAgICB0eXBlb2Ygb3B0cy5pbnRlcnJ1cHRJZlN0cmVhbWluZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IG9wdHMuaW50ZXJydXB0SWZTdHJlYW1pbmcubGFzdFBhcnRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgaW50ZXJydXB0KHNlc3Npb25Db250ZXh0LCB7IGxhc3RQYXJ0IH0pO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHdvcmtmbG93UnVuSWQsXG4gICAgd29ya2Zsb3dXcml0YWJsZSxcbiAgICBleGlzdGluZ1BhcnRDb3VudCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICBzdGF0ZSxcbiAgfSA9IGF3YWl0IGVycm9yZS50cnlBc3luYyh7XG4gICAgdHJ5OiAoKSA9PlxuICAgICAgaW5pdFNlc3Npb25TdGVwPFRvb2xzPih7XG4gICAgICAgIHNlc3Npb25Db250ZXh0LFxuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgc2FuZGJveElkOiBvcHRzPy5zYW5kYm94SWQsXG4gICAgICAgIGluaXRpYWxTdGF0ZTogb3B0cz8uaW5pdGlhbFN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgICAgICBpbnB1dCxcbiAgICAgIH0pLFxuICAgIGNhdGNoOiAoZSkgPT4ge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNlbmRFcnJvcih7XG4gICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIHJlYXNvbjogU3RyaW5nKGUpLFxuICAgICAgICBjYXVzZTogZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGxvb3BPcHRzID0ge1xuICAgIHNlc3Npb25Db250ZXh0LFxuICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICBjcmVhdGVkQXQ6IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgY29udGV4dDogKG9wdHM/LmNvbnRleHQgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHN0YXRlLFxuICAgIGxhc3RQYXJ0SW5kZXg6IGV4aXN0aW5nUGFydENvdW50LFxuICAgIHdvcmtmbG93UnVuSWQsXG4gIH07XG5cbiAgaWYgKHdvcmtmbG93V3JpdGFibGUpIHtcbiAgICBhd2FpdCBydW5Mb29wPFRvb2xzPih7IC4uLmxvb3BPcHRzLCB3cml0YWJsZTogd29ya2Zsb3dXcml0YWJsZSB9KTtcbiAgICByZXR1cm4geyBhc3Npc3RhbnRNZXNzYWdlSWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogVUlNZXNzYWdlQ2h1bmtbXSA9IFtdO1xuICBsZXQgbm90aWZ5Q2h1bms6ICgpID0+IHZvaWQ7XG4gIGxldCBvbkNodW5rID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICBub3RpZnlDaHVuayA9IHI7XG4gIH0pO1xuXG4gIGNvbnN0IHdyaXRhYmxlID0gbmV3IFdyaXRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPih7XG4gICAgd3JpdGUoY2h1bmspIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIGNvbnN0IHByZXYgPSBub3RpZnlDaHVuaztcbiAgICAgIG9uQ2h1bmsgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICBub3RpZnlDaHVuayA9IHI7XG4gICAgICB9KTtcbiAgICAgIHByZXYoKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBkb25lID0gcnVuTG9vcDxUb29scz4oeyAuLi5sb29wT3B0cywgd3JpdGFibGUgfSk7XG5cbiAgY29uc3QgYWN0aXZlUnVuOiBBY3RpdmVSdW4gPSB7XG4gICAgY2h1bmtzLFxuICAgIHdyaXRhYmxlLFxuICAgIGRvbmUsXG4gICAgZ2V0IG9uQ2h1bmsoKSB7XG4gICAgICByZXR1cm4gb25DaHVuaztcbiAgICB9LFxuICB9O1xuICBjb25zdCBhY3RpdmVSdW5zID0gZ2V0QWN0aXZlUnVucygpO1xuICBhY3RpdmVSdW5zLnNldChhc3Npc3RhbnRNZXNzYWdlSWQsIGFjdGl2ZVJ1bik7XG4gIGRvbmUuZmluYWxseSgoKSA9PiBhY3RpdmVSdW5zLmRlbGV0ZShhc3Npc3RhbnRNZXNzYWdlSWQpKTtcblxuICByZXR1cm4geyBhc3Npc3RhbnRNZXNzYWdlSWQsIGRvbmU6IGRvbmUudGhlbigoKSA9PiB0cnVlKSB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBSSBMb29wXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkxvb3A8VG9vbHMgZXh0ZW5kcyBUb29sU2V0Pih7XG4gIHdvcmtmbG93UnVuSWQsXG4gIHNlc3Npb25Db250ZXh0LFxuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIGNyZWF0ZWRBdCxcbiAgY29udGV4dDogaW5pdGlhbENvbnRleHQsXG4gIHN0YXRlLFxuICB3cml0YWJsZSxcbiAgbGFzdFBhcnRJbmRleDogaW5pdGlhbFBhcnRJbmRleCxcbn06IHtcbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQ7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtO1xuICBsYXN0UGFydEluZGV4OiBudW1iZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFnZW50ID0gc2Vzc2lvbkNvbnRleHQuYWdlbnQ7XG5cbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG4gIGNvbnN0IG1zZ0xvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIH0pO1xuICBjb25zdCBkb25lTWVzc2FnZSA9IG1zZ0xvZy50aW1lKFwib25NZXNzYWdlXCIpO1xuXG4gIGxldCBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbiB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3RQYXJ0SW5kZXggPSBpbml0aWFsUGFydEluZGV4O1xuICBjb25zdCB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXSA9IFtdO1xuICBsZXQgZGlzY292ZXJlZFNraWxsczogU2tpbGxTdW1tYXJ5W10gfCBudWxsID0gbnVsbDtcbiAgbGV0IGNvbnRleHQgPSBpbml0aWFsQ29udGV4dDtcblxuICB0cnkge1xuICAgIHdoaWxlIChmaW5pc2hSZWFzb24gIT09IFwic3RvcFwiKSB7XG4gICAgICBjb25zdCBzdHJlYW1UZXh0Rm4gPSB3b3JrZmxvd1J1bklkXG4gICAgICAgID8gc3RyZWFtVGV4dFN0ZXA8VG9vbHM+XG4gICAgICAgIDogc3RyZWFtVGV4dDxUb29scz47XG4gICAgICBjb25zdCB0aHJvdWdocHV0ID0gd29ya2Zsb3dSdW5JZCA/IDUgOiBERUZBVUxUX1NURVBfVEhST1VHSFBVVDtcblxuICAgICAgY29uc3QgcmVzdWx0OiBTdHJlYW1UZXh0UmVzdWx0ID0gYXdhaXQgc3RyZWFtVGV4dEZuKHtcbiAgICAgICAgc3RlcFRocm91Z2hwdXQ6IHRocm91Z2hwdXQsXG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICB3cml0YWJsZSxcbiAgICAgICAgbGFzdFBhcnRJbmRleCxcbiAgICAgICAgc3RlcEluZGV4T2Zmc2V0OiB1c2FnZVN0ZXBzLmxlbmd0aCxcbiAgICAgICAgZGlzY292ZXJlZFNraWxscyxcbiAgICAgIH0pO1xuXG4gICAgICBmaW5pc2hSZWFzb24gPSByZXN1bHQuZmluaXNoUmVhc29uO1xuICAgICAgbGFzdFBhcnRJbmRleCA9IHJlc3VsdC5sYXN0UGFydEluZGV4O1xuICAgICAgdXNhZ2VTdGVwcy5wdXNoKC4uLnJlc3VsdC51c2FnZVN0ZXBzKTtcbiAgICAgIGRpc2NvdmVyZWRTa2lsbHMgPSByZXN1bHQuZGlzY292ZXJlZFNraWxscztcbiAgICAgIGNvbnRleHQgPSByZXN1bHQuY29udGV4dDtcblxuICAgICAgaWYgKHJlc3VsdC5tYXhTdGVwcyAhPSBudWxsICYmIHVzYWdlU3RlcHMubGVuZ3RoID49IHJlc3VsdC5tYXhTdGVwcykge1xuICAgICAgICBtc2dMb2cuaW5mbyhcInJlYWNoZWQgbWF4U3RlcHMgbGltaXRcIiwgeyBtYXhTdGVwczogcmVzdWx0Lm1heFN0ZXBzIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nQXBwcm92YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXNnTG9nLmluZm8oXCJwZW5kaW5nIGFwcHJvdmFscywgc3RvcHBpbmcgbG9vcFwiLCB7XG4gICAgICAgICAgY291bnQ6IHJlc3VsdC5wZW5kaW5nQXBwcm92YWxzLmxlbmd0aCxcbiAgICAgICAgICB0b29sczogcmVzdWx0LnBlbmRpbmdBcHByb3ZhbHMubWFwKChwKSA9PiBwLnRvb2xOYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvbmVNZXNzYWdlKHsgdG90YWxTdGVwczogdXNhZ2VTdGVwcy5sZW5ndGggfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG1zZ0xvZy5lcnJvcihcIkFJIGxvb3AgZmFpbGVkXCIsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGNvbXBsZXRlTWVzc2FnZVN0ZXAoe1xuICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgc2Vzc2lvbkNvbnRleHQsXG4gICAgICB3cml0YWJsZSxcbiAgICAgIHVzYWdlU3RlcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogU3RlcHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuYXN5bmMgZnVuY3Rpb24gaW5pdFNlc3Npb25TdGVwPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICBzZXNzaW9uQ29udGV4dCxcbiAgc2Vzc2lvbklkLFxuICBzYW5kYm94SWQsXG4gIGluaXRpYWxTdGF0ZSxcbiAgaW5wdXQsXG59OiB7XG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dDtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbiAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlucHV0OiBTZW5kSW5wdXQ8VG9vbHM+IHwgU2VuZElucHV0PFRvb2xzPltdO1xufSkge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgbGV0IHdvcmtmbG93UnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHdvcmtmbG93V3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHsgZ2V0V29ya2Zsb3dNZXRhZGF0YSwgZ2V0V3JpdGFibGUgfSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93XCIpO1xuICAgIHdvcmtmbG93UnVuSWQgPSBnZXRXb3JrZmxvd01ldGFkYXRhKCkud29ya2Zsb3dSdW5JZDtcbiAgICB3b3JrZmxvd1dyaXRhYmxlID0gZ2V0V3JpdGFibGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gd29ya2Zsb3cgbm90IGluc3RhbGxlZFxuICB9XG5cbiAgY29uc3QgbmV3TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICBjb25zdCBuZXdQYXJ0czogUGFydFtdID0gW107XG4gIGNvbnN0IG5ld0FwcHJvdmFsczogQXBwcm92YWxEYXRhW10gPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2UsIHBhcnRzLCBhcHByb3ZhbHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIGlucHV0OiBpLFxuICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICB9KTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgIG5ld0FwcHJvdmFscy5wdXNoKC4uLmFwcHJvdmFscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMsIGFwcHJvdmFscyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgaW5wdXQsXG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIGRlZmF1bHRSb2xlOiBcInVzZXJcIixcbiAgICB9KTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgbmV3TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICB9XG4gICAgbmV3UGFydHMucHVzaCguLi5wYXJ0cyk7XG4gICAgbmV3QXBwcm92YWxzLnB1c2goLi4uYXBwcm92YWxzKTtcbiAgfVxuXG4gIGNvbnN0IGxhc3ROZXdNZXNzYWdlID0gbmV3TWVzc2FnZXMuYXQoLTEpO1xuICBjb25zdCByZXVzZUFzc2lzdGFudCA9IGxhc3ROZXdNZXNzYWdlPy5yb2xlID09PSBcImFzc2lzdGFudFwiO1xuXG4gIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IHJldXNlQXNzaXN0YW50XG4gICAgPyBsYXN0TmV3TWVzc2FnZS5pZFxuICAgIDogYG1lc3NhZ2VfJHt1bGlkKCl9YDtcbiAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0ID0gYmFzZVRpbWUgKyBuZXdNZXNzYWdlcy5sZW5ndGg7XG5cbiAgaWYgKCFyZXVzZUFzc2lzdGFudCkge1xuICAgIG5ld01lc3NhZ2VzLnB1c2goe1xuICAgICAgaWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgIGNyZWF0ZWRBdDogYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICB1c2FnZTogbnVsbCxcbiAgICAgIHdvcmtmbG93UnVuSWQ6IG51bGwsXG4gICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUGFydENvdW50ID0gcmV1c2VBc3Npc3RhbnRcbiAgICA/IG5ld1BhcnRzLmZpbHRlcigocCkgPT4gcC5tZXNzYWdlSWQgPT09IGFzc2lzdGFudE1lc3NhZ2VJZCkubGVuZ3RoXG4gICAgOiAwO1xuXG4gIGxldCBzZXNzaW9uID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICBzZXNzaW9uID0ge1xuICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgIHNhbmRib3hJZDogc2FuZGJveElkID8/IG51bGwsXG4gICAgICBsYXN0TWVzc2FnZUlkOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICB9O1xuICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5zZXQoc2Vzc2lvbi5pZCwgc2Vzc2lvbik7XG4gIH0gZWxzZSBpZiAoc2FuZGJveElkICYmIHNhbmRib3hJZCAhPT0gc2Vzc2lvbi5zYW5kYm94SWQpIHtcbiAgICBzZXNzaW9uID0geyAuLi5zZXNzaW9uLCBzYW5kYm94SWQsIHVwZGF0ZWRBdDogbm93IH07XG4gICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uLmlkLCB7XG4gICAgICBzYW5kYm94SWQsXG4gICAgfSk7XG4gIH1cblxuICBhd2FpdCBhbGwoe1xuICAgIGFzeW5jIHNhdmVNZXNzYWdlcygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdNZXNzYWdlcy5tYXAoYXN5bmMgKG0sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5nZXQobS5pZCk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5zZXQobS5pZCwge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYmFzZVRpbWUgKyBpLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZDpcbiAgICAgICAgICAgICAgbS5pZCA9PT0gYXNzaXN0YW50TWVzc2FnZUlkXG4gICAgICAgICAgICAgICAgPyAod29ya2Zsb3dSdW5JZCA/PyBudWxsKVxuICAgICAgICAgICAgICAgIDogbS53b3JrZmxvd1J1bklkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIHNhdmVQYXJ0cygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdQYXJ0cy5tYXAoYXN5bmMgKHApID0+XG4gICAgICAgICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwLmlkLCBwKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgcmVzb2x2ZUFwcHJvdmFscygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdBcHByb3ZhbHMubWFwKGFzeW5jIChhKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydElkID0gYXBwcm92YWxQYXJ0SWQoYS5hcHByb3ZhbElkKTtcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LmdldChwYXJ0SWQpO1xuICAgICAgICAgIGlmICghcGFydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcHJvdmFsTm90Rm91bmRFcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGFwcHJvdmFsSWQ6IGEuYXBwcm92YWxJZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHBhcnRJZCwge1xuICAgICAgICAgICAgLi4ucGFydCxcbiAgICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgICAgLi4ucGFydC5wYXJ0LFxuICAgICAgICAgICAgICBzdGF0ZTogYS5hcHByb3ZlZCA/IFwiYXBwcm92YWwtcmVzcG9uZGVkXCIgOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgICBpZDogYS5hcHByb3ZhbElkLFxuICAgICAgICAgICAgICAgIGFwcHJvdmVkOiBhLmFwcHJvdmVkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogYS5yZWFzb24sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIHR5cGVvZiBwYXJ0LnBhcnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlU2Vzc2lvbigpIHtcbiAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5zZXQoc2Vzc2lvbi5pZCwge1xuICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICBsYXN0TWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHNlc3Npb24uc3RhdGVcbiAgICA/IHsgLi4uc2Vzc2lvbi5zdGF0ZSB9XG4gICAgOiB7IC4uLihpbml0aWFsU3RhdGUgPz8ge30pIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93V3JpdGFibGUsXG4gICAgZXhpc3RpbmdQYXJ0Q291bnQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgc3RhdGUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBsZXRlTWVzc2FnZVN0ZXAoe1xuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIHNlc3Npb25Db250ZXh0LFxuICB3cml0YWJsZSxcbiAgdXNhZ2VTdGVwcyxcbn06IHtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dDtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtO1xuICB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXTtcbn0pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7XG4gICAgICAuLi5zZXNzaW9uQ29udGV4dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsXG4gICAgICBuYW1lOiBzZXNzaW9uQ29udGV4dC5hZ2VudC5uYW1lLFxuICAgIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG4gIGNvbnN0IG1zZ0xvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIH0pO1xuXG4gIGNvbnN0IHVzYWdlID1cbiAgICB1c2FnZVN0ZXBzLmxlbmd0aCA+IDBcbiAgICAgID8ge1xuICAgICAgICAgIHN0ZXBzOiB1c2FnZVN0ZXBzLFxuICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgIG1vZGVsOiB1c2FnZVN0ZXBzWzBdPy5tb2RlbCA/PyBcInVua25vd25cIixcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMuaW5wdXRUb2tlbnMsIDApLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMub3V0cHV0VG9rZW5zLCAwKSxcbiAgICAgICAgICAgIHRvdGFsVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMudG90YWxUb2tlbnMsIDApLFxuICAgICAgICAgICAgY2FjaGVSZWFkVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGEsIHMpID0+IGEgKyBzLmNhY2hlUmVhZFRva2VucyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNhY2hlV3JpdGVUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYSwgcykgPT4gYSArIHMuY2FjaGVXcml0ZVRva2VucyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJlYXNvbmluZ1Rva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhLCBzKSA9PiBhICsgcy5yZWFzb25pbmdUb2tlbnMsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGVwQ291bnQ6IHVzYWdlU3RlcHMubGVuZ3RoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLnVwZGF0ZShhc3Npc3RhbnRNZXNzYWdlSWQsIHtcbiAgICAgIGNvbXBsZXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgdXNhZ2UsXG4gICAgfSksXG4gICAgd3JpdGFibGUuY2xvc2UoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpLFxuICBdKTtcblxuICBtc2dMb2cuaW5mbyhcIm1lc3NhZ2UgY29tcGxldGVkXCIsIHtcbiAgICBzdGVwczogdXNhZ2VTdGVwcy5sZW5ndGgsXG4gICAgdG90YWxUb2tlbnM6IHVzYWdlPy5zdW1tYXJ5LnRvdGFsVG9rZW5zLFxuICB9KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVXRpbHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmFsUGFydElkKGFwcHJvdmFsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgcGFydF8ke2FwcHJvdmFsSWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheUFjdGl2ZVJ1bihcbiAgYWN0aXZlOiBBY3RpdmVSdW4sXG4gIHN0YXJ0SW5kZXggPSAwXG4pOiBSZWFkYWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz4ge1xuICBsZXQgY3Vyc29yID0gc3RhcnRJbmRleDtcbiAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+KHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIERyYWluIGFueSBidWZmZXJlZCBjaHVua3NcbiAgICAgIHdoaWxlIChjdXJzb3IgPCBhY3RpdmUuY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYWN0aXZlLmNodW5rc1tjdXJzb3IrK10pO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGZvciBlaXRoZXIgYSBuZXcgY2h1bmsgb3IgY29tcGxldGlvblxuICAgICAgd2hpbGUgKCFjYW5jZWxsZWQgJiYgY3Vyc29yID49IGFjdGl2ZS5jaHVua3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgYWN0aXZlLm9uQ2h1bmsudGhlbigoKSA9PiBcImNodW5rXCIgYXMgY29uc3QpLFxuICAgICAgICAgIGFjdGl2ZS5kb25lLnRoZW4oKCkgPT4gXCJkb25lXCIgYXMgY29uc3QpLFxuICAgICAgICBdKTtcblxuICAgICAgICAvLyBEcmFpbiBuZXcgY2h1bmtzXG4gICAgICAgIHdoaWxlIChjdXJzb3IgPCBhY3RpdmUuY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShhY3RpdmUuY2h1bmtzW2N1cnNvcisrXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ID09PSBcImRvbmVcIikge1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbCgpIHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvTWVzc2FnZUFuZFBhcnRzPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICBzZXNzaW9uSWQsXG4gIGlkLFxuICBpbnB1dCxcbiAgZGVmYXVsdFJvbGUsXG59OiB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW5wdXQ6IFNlbmRJbnB1dDxUb29scz47XG4gIGRlZmF1bHRSb2xlOiBVSU1lc3NhZ2VbXCJyb2xlXCJdO1xufSk6IHtcbiAgbWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgcGFydHM6IFBhcnRbXTtcbiAgYXBwcm92YWxzOiBBcHByb3ZhbERhdGFbXTtcbn0ge1xuICBsZXQgbWVzc2FnZUlkID0gaWQgPz8gYG1lc3NhZ2VfJHt1bGlkKCl9YDtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcHJvdmFsczogW10sXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcm9sZTogZGVmYXVsdFJvbGUsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBudWxsLFxuICAgICAgICB1c2FnZTogbnVsbCxcbiAgICAgICAgd29ya2Zsb3dSdW5JZDogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICB9LFxuICAgICAgcGFydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgaWQ6IGBwYXJ0XyR7bWVzc2FnZUlkfV8wYCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBwYXJ0OiB7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBpbnB1dCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG4gIGlmIChcInR5cGVcIiBpbiBpbnB1dCAmJiBpbnB1dC50eXBlID09PSBcImFwcHJvdmFsXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgcGFydHM6IFtdLFxuICAgICAgYXBwcm92YWxzOiBbaW5wdXQuYXBwcm92YWxdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtc2cgPVxuICAgIFwidHlwZVwiIGluIGlucHV0ICYmIGlucHV0LnR5cGUgPT09IFwibWVzc2FnZVwiID8gaW5wdXQubWVzc2FnZSA6IGlucHV0O1xuICBpZiAoXCJpZFwiIGluIG1zZyAmJiBtc2cuaWQpIHtcbiAgICBtZXNzYWdlSWQgPSBtc2cuaWQ7XG4gIH1cblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBtZXRhZGF0YSA9XG4gICAgXCJtZXRhZGF0YVwiIGluIG1zZyAmJiBtc2cubWV0YWRhdGEgIT0gbnVsbFxuICAgICAgPyAobXNnLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFwcHJvdmFsczogW10sXG4gICAgbWVzc2FnZToge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgd29ya2Zsb3dSdW5JZDogbnVsbCxcbiAgICAgIHJvbGU6IG1zZy5yb2xlID8/IGRlZmF1bHRSb2xlLFxuICAgICAgbWV0YWRhdGEsXG4gICAgfSxcbiAgICBwYXJ0czogbXNnLnBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGFwID0gcGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfTtcbiAgICAgIGNvbnN0IGlkID0gYXAuYXBwcm92YWw/LmlkXG4gICAgICAgID8gYXBwcm92YWxQYXJ0SWQoYXAuYXBwcm92YWwuaWQpXG4gICAgICAgIDogYHBhcnRfJHttZXNzYWdlSWR9XyR7aW5kZXh9YDtcbiAgICAgIHJldHVybiB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBpZCwgaW5kZXgsIHBhcnQgfTtcbiAgICB9KSxcbiAgfTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRXJyb3JzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBjbGFzcyBTZW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlbmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlbmQgZmFpbGVkIGZvciBzZXNzaW9uICRpZDogJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIEFwcHJvdmFsTm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiQXBwcm92YWxOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiQXBwcm92YWwgJGFwcHJvdmFsSWQgbm90IGZvdW5kIGluIHNlc3Npb24gJGlkXCIsXG59KSB7fVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRmluaXNoUmVhc29uLFxuICBUb29sU2V0LFxuICBVSU1lc3NhZ2UsXG4gIFVJTWVzc2FnZVN0cmVhbVdyaXRlcixcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQge1xuICBjb252ZXJ0VG9Nb2RlbE1lc3NhZ2VzLFxuICBjcmVhdGVVSU1lc3NhZ2VTdHJlYW0sXG4gIHN0ZXBDb3VudElzLFxuICBzdHJlYW1UZXh0IGFzIHN0cmVhbVRleHRBaSxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFnZW50U3RhdHVzLFxuICBBbnlBZ2VudCxcbiAgUmVzb2x2YWJsZSxcbiAgUmVzb2x2YWJsZUFyZ3MsXG4gIFR5cGVkVUlNZXNzYWdlLFxufSBmcm9tIFwiLi4vLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgeyBTZXNzaW9uTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IGRpc2NvdmVyU2tpbGxzSW5TYW5kYm94IH0gZnJvbSBcIi4uLy4uL3NraWxscy9kaXNjb3ZlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZVNraWxsSW5wdXRzVG9TYW5kYm94RGlycyB9IGZyb20gXCIuLi8uLi9za2lsbHMvcmVzb2x2ZVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbFN1bW1hcnkgfSBmcm9tIFwiLi4vLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnQgfSBmcm9tIFwiLi4vLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWlsdEluVG9vbE5hbWUsIGdldFRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4uLy4uL3Rvb2xzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHR5cGUgTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgYXBwbHlQcm9tcHRDYWNoaW5nVG9Nb2RlbFJlcXVlc3QsXG4gIG1lcmdlUHJvdmlkZXJPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvbXB0LWNhY2hlXCI7XG5pbXBvcnQgeyBhc3NlbWJsZVVJTWVzc2FnZXMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdWlcIjtcbmltcG9ydCB0eXBlIHsgU3RlcFVzYWdlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VzYWdlXCI7XG5pbXBvcnQgeyBhcHByb3ZhbFBhcnRJZCB9IGZyb20gXCIuLi9zZW5kXCI7XG5cbmNvbnN0IElOVEVSUlVQVF9QT0xMX0lOVEVSVkFMX01TID0gMjUwO1xuXG5mdW5jdGlvbiBwb2xsRm9ySW50ZXJydXB0KHtcbiAgYWdlbnQsXG4gIG1lc3NhZ2VJZCxcbiAgc2lnbmFsLFxuICBhYm9ydENvbnRyb2xsZXIsXG59OiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xufSk6IHtcbiAgZmlyc3RDaGVjazogUHJvbWlzZTx2b2lkPjtcbiAgaW50ZXJydXB0ZWRMYXN0UGFydFJlZjogeyBjdXJyZW50OiB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfSB8IG51bGwgfTtcbn0ge1xuICBsZXQgcmVzb2x2ZUZpcnN0Q2hlY2s6ICgpID0+IHZvaWQ7XG4gIGNvbnN0IGZpcnN0Q2hlY2sgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmVGaXJzdENoZWNrID0gcmVzb2x2ZTtcbiAgfSk7XG4gIGNvbnN0IGludGVycnVwdGVkTGFzdFBhcnRSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbCBhcyB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfSB8IG51bGwsXG4gIH07XG5cbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgd2hpbGUgKCFzaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGFnZW50LnN0b3JhZ2UubWVzc2FnZS5nZXQobWVzc2FnZUlkKTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgIHJlc29sdmVGaXJzdENoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSAke21lc3NhZ2VJZH0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS5pbnRlcnJ1cHRlZEF0ICE9PSBudWxsKSB7XG4gICAgICAgIGxvZy5pbmZvKFwiaW50ZXJydXB0IGRldGVjdGVkXCIsIHsgbWVzc2FnZUlkIH0pO1xuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmLmN1cnJlbnQgPSBtZXNzYWdlLmludGVycnVwdGVkTGFzdFBhcnQ7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgIHJlc29sdmVGaXJzdENoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlRmlyc3RDaGVjaygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgSU5URVJSVVBUX1BPTExfSU5URVJWQUxfTVMpXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBwb2xsKCk7XG4gIHJldHVybiB7IGZpcnN0Q2hlY2ssIGludGVycnVwdGVkTGFzdFBhcnRSZWYgfTtcbn1cblxudHlwZSBTdHJlYW1UZXh0T3B0aW9ucyA9IHtcbiAgc3RlcFRocm91Z2hwdXQ6IG51bWJlcjtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW07XG4gIGxhc3RQYXJ0SW5kZXg6IG51bWJlcjtcbiAgc3RlcEluZGV4T2Zmc2V0OiBudW1iZXI7XG4gIGRpc2NvdmVyZWRTa2lsbHM6IFNraWxsU3VtbWFyeVtdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRleHRSZXN1bHQgPSB7XG4gIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uO1xuICBsYXN0UGFydEluZGV4OiBudW1iZXI7XG4gIHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdO1xuICBwZW5kaW5nQXBwcm92YWxzOiB7IGFwcHJvdmFsSWQ6IHN0cmluZzsgdG9vbE5hbWU6IHN0cmluZyB9W107XG4gIG1heFN0ZXBzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGRpc2NvdmVyZWRTa2lsbHM6IFNraWxsU3VtbWFyeVtdIHwgbnVsbDtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RyZWFtVGV4dDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KHtcbiAgc3RlcFRocm91Z2hwdXQsXG4gIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgYWdlbnQsXG4gIHNlc3Npb25JZCxcbiAgY29udGV4dCxcbiAgc3RhdGUsXG4gIGNyZWF0ZWRBdCxcbiAgd3JpdGFibGUsXG4gIGxhc3RQYXJ0SW5kZXgsXG4gIHN0ZXBJbmRleE9mZnNldCxcbiAgZGlzY292ZXJlZFNraWxscyxcbn06IFN0cmVhbVRleHRPcHRpb25zKTogUHJvbWlzZTxTdHJlYW1UZXh0UmVzdWx0PiB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJhaS1sb29wXCIsXG4gIH0pO1xuXG4gIGNvbnN0IHN0ZXBMb2cgPSBsb2cud2l0aENvbnRleHQoe1xuICAgIHNlc3Npb25JZCxcbiAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgfSk7XG4gIGNvbnN0IGRvbmVTdGVwID0gc3RlcExvZy50aW1lKFwic3RyZWFtVGV4dFwiKTtcblxuICBjb25zdCB0aHJvdHRsZWRFbWl0U3RhdHVzID0gY3JlYXRlVGhyb3R0bGVkRW1pdFN0YXR1cyhhZ2VudCk7XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBwb2xsQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBjb25zdCB7IGZpcnN0Q2hlY2ssIGludGVycnVwdGVkTGFzdFBhcnRSZWYgfSA9IHBvbGxGb3JJbnRlcnJ1cHQoe1xuICAgIGFnZW50LFxuICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIHNpZ25hbDogcG9sbENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIGFib3J0Q29udHJvbGxlcixcbiAgfSk7XG5cbiAgY29uc3QgZG9uZUxvYWQgPSBzdGVwTG9nLnRpbWUoXCJsb2FkIHNlc3Npb24gKyBtZXNzYWdlcyArIHBhcnRzICsgc2FuZGJveFwiKTtcbiAgY29uc3QgWywgbWVzc2FnZXNSZXN1bHQsIHBhcnRzUmVzdWx0LCB7IHNhbmRib3gsIHNhbmRib3hSZWNvcmQgfV0gPVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZpcnN0Q2hlY2ssXG4gICAgICBhZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQpLFxuICAgICAgYWdlbnQuc3RvcmFnZS5wYXJ0Lmxpc3RCeVNlc3Npb24oc2Vzc2lvbklkKSxcbiAgICAgIGFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKS50aGVuKGFzeW5jIChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uTm90Rm91bmRFcnJvcih7IGlkOiBzZXNzaW9uSWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYW5kYm94SWQgPSBzZXNzaW9uLnNhbmRib3hJZCA/PyBzZXNzaW9uLmlkO1xuICAgICAgICBjb25zdCBzYW5kYm94ID0gYWdlbnQuc2FuZGJveChzYW5kYm94SWQpO1xuICAgICAgICBjb25zdCBzYW5kYm94UmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuXG4gICAgICAgIHJldHVybiB7IHNhbmRib3gsIHNhbmRib3hSZWNvcmQgfTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gIGRvbmVMb2FkKCk7XG5cbiAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgIHBvbGxDb250cm9sbGVyLmFib3J0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIgYXMgRmluaXNoUmVhc29uLFxuICAgICAgbGFzdFBhcnRJbmRleCxcbiAgICAgIHVzYWdlU3RlcHM6IFtdLFxuICAgICAgcGVuZGluZ0FwcHJvdmFsczogW10sXG4gICAgICBtYXhTdGVwczogdW5kZWZpbmVkLFxuICAgICAgZGlzY292ZXJlZFNraWxscyxcbiAgICAgIGNvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHNldFN0YXJ0ZWRQcm9taXNlID1cbiAgICBsYXN0UGFydEluZGV4ID09PSAwXG4gICAgICA/IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSBtZXNzYWdlc1Jlc3VsdC5maWx0ZXIoXG4gICAgICAgICAgICAobSkgPT4gbS5jcmVhdGVkQXQgPD0gY3JlYXRlZEF0ICYmIG0uc3RhcnRlZEF0ID09PSBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocGVuZGluZ01lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgcGVuZGluZ01lc3NhZ2VzLm1hcCgobSkgPT5cbiAgICAgICAgICAgICAgICBhZ2VudC5zdG9yYWdlLm1lc3NhZ2UudXBkYXRlKG0uaWQsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgICAgICAgICAgICAgICAgY29tcGxldGVkQXQ6IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiA/IG51bGwgOiBub3csXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKClcbiAgICAgIDogbnVsbDtcblxuICBjb25zdCBhbGxQYXJ0cyA9IFsuLi5wYXJ0c1Jlc3VsdF07XG4gIGNvbnN0IG5leHRQYXJ0SW5kZXhSZWYgPSB7XG4gICAgY3VycmVudDogTWF0aC5tYXgoXG4gICAgICBsYXN0UGFydEluZGV4LFxuICAgICAgLi4uYWxsUGFydHNcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5tZXNzYWdlSWQgPT09IGFzc2lzdGFudE1lc3NhZ2VJZClcbiAgICAgICAgLm1hcCgocCkgPT4gcC5pbmRleCArIDEpLFxuICAgICAgMFxuICAgICksXG4gIH07XG5cbiAgY29uc3Qgc2tpbGxzUmVmOiB7IGN1cnJlbnQ6IFNraWxsU3VtbWFyeVtdIH0gPSB7XG4gICAgY3VycmVudDogZGlzY292ZXJlZFNraWxscyA/PyBbXSxcbiAgfTtcblxuICAvLyBCdWlsZCB1aU1lc3NhZ2VzIGZyb20gY3VycmVudCBwYXJ0cyAocmVidWlsdCBiZXR3ZWVuIGl0ZXJhdGlvbnMpXG4gIGxldCB1aU1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICBtZXNzYWdlczogbWVzc2FnZXNSZXN1bHQsXG4gICAgcGFydHM6IGFsbFBhcnRzLFxuICAgIHVudGlsOiBjcmVhdGVkQXQsXG4gICAgaW5jbHVkZVF1ZXVlZDogdHJ1ZSxcbiAgICBleGNsdWRlU3ViVG9vbFBhcnRzOiB0cnVlLFxuICB9KTtcblxuICAvLyBCdWlsZCByZXNvbHZhYmxlIGFyZ3MgZm9yIHJlc29sdmluZyBhZ2VudCBvcHRpb25zXG4gIGNvbnN0IHJlc29sdmFibGVBcmdzOiBSZXNvbHZhYmxlQXJncyA9IHtcbiAgICBjb250ZXh0LFxuICAgIHN0YXRlLFxuICAgIHNlc3Npb25JZCxcbiAgICBzYW5kYm94LFxuICAgIGdldCBtZXNzYWdlcygpIHtcbiAgICAgIHJldHVybiB1aU1lc3NhZ2VzO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gc2tpbGxzIGRpc2NvdmVyeSBcdTIwMTQgZmlyc3QgaXRlcmF0aW9uIG9ubHlcbiAgaWYgKGxhc3RQYXJ0SW5kZXggPT09IDAgJiYgIWRpc2NvdmVyZWRTa2lsbHMpIHtcbiAgICBjb25zdCByZXNvbHZlZFNraWxscyA9IGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICBhZ2VudC5vcHRpb25zLnNraWxscyxcbiAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgKTtcbiAgICBjb25zdCBza2lsbHNEaXJzID0gcmVzb2x2ZWRTa2lsbHM/Lmxlbmd0aFxuICAgICAgPyBhd2FpdCByZXNvbHZlU2tpbGxJbnB1dHNUb1NhbmRib3hEaXJzKHtcbiAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIHNraWxsczogcmVzb2x2ZWRTa2lsbHMsXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgOiBbXTtcbiAgICBpZiAoc2tpbGxzRGlycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkb25lU2tpbGxzID0gc3RlcExvZy50aW1lKFwiZGlzY292ZXIgc2tpbGxzXCIsIHsgc2tpbGxzRGlycyB9KTtcbiAgICAgIHNraWxsc1JlZi5jdXJyZW50ID0gYXdhaXQgZGlzY292ZXJTa2lsbHNJblNhbmRib3goe1xuICAgICAgICBhZ2VudCxcbiAgICAgICAgc2FuZGJveCxcbiAgICAgICAgc2tpbGxzRGlycyxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgICBkb25lU2tpbGxzKHsgY291bnQ6IHNraWxsc1JlZi5jdXJyZW50Lmxlbmd0aCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5uZXIgbG9vcDogcnVuIHVwIHRvIGBzdGVwVGhyb3VnaHB1dGAgc2VxdWVudGlhbCBMTE0gY2FsbHMuXG4gICAqIFBhcnRzIGFyZSBwZXJzaXN0ZWQgYWZ0ZXIgZWFjaCBjYWxsIHNvIHByb2dyZXNzIGlzbid0IGxvc3QuXG4gICAqIFNlc3Npb24gaXMgcmUtZmV0Y2hlZCBiZXR3ZWVuIGl0ZXJhdGlvbnMgKGNvbmZpZyBtYXkgY2hhbmdlKSxcbiAgICogcGFyYWxsZWxpemVkIHdpdGggcGFydCBwZXJzaXN0ZW5jZSBvbiBub24tZmluYWwgaXRlcmF0aW9ucy5cbiAgICovXG4gIGNvbnN0IHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdID0gW107XG4gIGxldCBpbnRlcm5hbFN0ZXBJbmRleCA9IDA7XG4gIGxldCBsb29wRmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24gPSBcInVua25vd25cIiBhcyBGaW5pc2hSZWFzb247XG4gIGxldCB3YXNBYm9ydGVkID0gZmFsc2U7XG4gIGNvbnN0IGFsbFBlbmRpbmdBcHByb3ZhbHM6IHsgYXBwcm92YWxJZDogc3RyaW5nOyB0b29sTmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBsZXQgY3VycmVudE1heFN0ZXBzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBpdGVyYXRpb24gPSAwOyBpdGVyYXRpb24gPCBzdGVwVGhyb3VnaHB1dDsgaXRlcmF0aW9uKyspIHtcbiAgICAgIC8vIFJlc29sdmUgYWdlbnQgb3B0aW9ucyBmcmVzaCBlYWNoIGl0ZXJhdGlvblxuICAgICAgY29uc3QgcmVzb2x2ZWRNb2RlbCA9IGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICAgIGFnZW50Lm9wdGlvbnMubW9kZWwsXG4gICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzb2x2ZWRHZW5lcmF0aW9uID0gYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgICAgYWdlbnQub3B0aW9ucy5nZW5lcmF0aW9uLFxuICAgICAgICByZXNvbHZhYmxlQXJnc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkQWN0aXZlVG9vbHMgPSAoYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgICAgYWdlbnQub3B0aW9ucy5hY3RpdmVUb29scyxcbiAgICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICAgICkpIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjdXJyZW50TWF4U3RlcHMgPSByZXNvbHZlZEdlbmVyYXRpb24/Lm1heFN0ZXBzO1xuXG4gICAgICBpZiAoIXJlc29sdmVkTW9kZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWdlbnQgbW9kZWwgaXMgbm90IHNldFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RlcFBhcnRzOiBVSU1lc3NhZ2VbXCJwYXJ0c1wiXSA9IFtdO1xuICAgICAgbGV0IHN0cmVhbVRleHRGaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbiB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlVUlNZXNzYWdlU3RyZWFtKHtcbiAgICAgICAgICBleGVjdXRlOiBhc3luYyAoeyB3cml0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByYXdUb29scywgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCwgdG9vbENvbnRleHQgfSA9IGdldFRvb2xzKHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgICAgIHNraWxsc1JlZixcbiAgICAgICAgICAgICAgd3JpdGVyLFxuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgIG5leHRQYXJ0SW5kZXhSZWYsXG4gICAgICAgICAgICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBzdGVwTG9nLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IHVpTWVzc2FnZXMsXG4gICAgICAgICAgICAgIGFjdGl2ZVRvb2xzOiByZXNvbHZlZEFjdGl2ZVRvb2xzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHByb2Nlc3MgYXBwcm92YWxzIG9uY2UgKGZpcnN0IGl0ZXJhdGlvbiBvbmx5KVxuICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9jZXNzQXBwcm92YWxzKHtcbiAgICAgICAgICAgICAgICBhbGxQYXJ0cyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgICAgcmF3VG9vbHMsXG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgICAgIHN0ZXBMb2csXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVkRW1pdFN0YXR1cyxcbiAgICAgICAgICAgICAgICB3cml0ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdHRsZWRFbWl0U3RhdHVzKHtcbiAgICAgICAgICAgICAgd3JpdGVyLFxuICAgICAgICAgICAgICBzdGF0dXM6IHsgdHlwZTogXCJ0aGlua2luZ1wiIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgaXRlclJlc3VsdCA9IHN0cmVhbVRleHRBaSh7XG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiBbeyByb2xlOiBcInVzZXJcIiBhcyBjb25zdCwgY29udGVudDogXCIuXCIgfV0sXG4gICAgICAgICAgICAgIHRvb2xzOiB0b29sc1dpdGhOZWVkc0FwcHJvdmFsLFxuICAgICAgICAgICAgICBtb2RlbDogcmVzb2x2ZWRNb2RlbCxcbiAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgIHN0b3BXaGVuOiBzdGVwQ291bnRJcygxKSxcbiAgICAgICAgICAgICAgdGVtcGVyYXR1cmU6IHJlc29sdmVkR2VuZXJhdGlvbj8udGVtcGVyYXR1cmUsXG4gICAgICAgICAgICAgIHRvcEs6IHJlc29sdmVkR2VuZXJhdGlvbj8udG9wSyxcbiAgICAgICAgICAgICAgdG9wUDogcmVzb2x2ZWRHZW5lcmF0aW9uPy50b3BQLFxuICAgICAgICAgICAgICBmcmVxdWVuY3lQZW5hbHR5OiByZXNvbHZlZEdlbmVyYXRpb24/LmZyZXF1ZW5jeVBlbmFsdHksXG4gICAgICAgICAgICAgIHByZXNlbmNlUGVuYWx0eTogcmVzb2x2ZWRHZW5lcmF0aW9uPy5wcmVzZW5jZVBlbmFsdHksXG4gICAgICAgICAgICAgIG1heE91dHB1dFRva2VuczogcmVzb2x2ZWRHZW5lcmF0aW9uPy5tYXhPdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHJlc29sdmVkR2VuZXJhdGlvbj8uaGVhZGVycyxcbiAgICAgICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiB1aU1lc3NhZ2VzLFxuICAgICAgICAgICAgICB9IHNhdGlzZmllcyBUb29sQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJlcGFyZVN0ZXA6IGFzeW5jICh7IG1vZGVsIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lsbHNDb250ZXh0ID0gYnVpbGRTa2lsbHNDb250ZXh0KHNraWxsc1JlZi5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjd2RQcm9tcHQgPSBzYW5kYm94UmVjb3JkPy5zZXR1cD8uY3dkXG4gICAgICAgICAgICAgICAgICA/IGBZb3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzICR7c2FuZGJveFJlY29yZC5zZXR1cC5jd2R9LiBBbGwgZmlsZSBwYXRocyBzaG91bGQgYmUgYWJzb2x1dGUuYFxuICAgICAgICAgICAgICAgICAgOiBcIkFsbCBmaWxlIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUuXCI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFN5c3RlbSA9IGF3YWl0IHJlc29sdmVTeXN0ZW0oXG4gICAgICAgICAgICAgICAgICBhZ2VudC5vcHRpb25zLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN5c3RlbUhlYWRlciA9IGpvaW5Qcm9tcHRTZWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgIEJBU0VfU1lTVEVNX1BST01QVCxcbiAgICAgICAgICAgICAgICAgIGN3ZFByb21wdCxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkU3lzdGVtXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzeXN0ZW1Db250ZXh0ID0gam9pblByb21wdFNlY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgc2tpbGxzQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIGN3ZFByb21wdFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRNZXNzYWdlcyA9IGF3YWl0IGNvbnZlcnRUb01vZGVsTWVzc2FnZXMoXG4gICAgICAgICAgICAgICAgICB1aU1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgeyBpZ25vcmVJbmNvbXBsZXRlVG9vbENhbGxzOiB0cnVlIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxNZXNzYWdlcyA9IFtcbiAgICAgICAgICAgICAgICAgIC4uLihzeXN0ZW1IZWFkZXIudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3sgcm9sZTogXCJzeXN0ZW1cIiBhcyBjb25zdCwgY29udGVudDogc3lzdGVtSGVhZGVyIH1dXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgICAgLi4uKHN5c3RlbUNvbnRleHQudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3sgcm9sZTogXCJzeXN0ZW1cIiBhcyBjb25zdCwgY29udGVudDogc3lzdGVtQ29udGV4dCB9XVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbnZlcnRlZE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRDYWNoaW5nID0gYXBwbHlQcm9tcHRDYWNoaW5nVG9Nb2RlbFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgbW9kZWw6IHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIiA/IG1vZGVsIDogbW9kZWwubW9kZWxJZCxcbiAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBtb2RlbE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVRvb2xzID0gcmVzb2x2ZWRBY3RpdmVUb29scyA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHNraWxsc1JlZi5jdXJyZW50Lmxlbmd0aCA9PT0gMCAmJiBhY3RpdmVUb29scykge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlVG9vbHMgPSBhY3RpdmVUb29scy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICh0KSA9PiB0ICE9PSAoXCJTa2lsbFwiIHNhdGlzZmllcyBCdWlsdEluVG9vbE5hbWUpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlczogcHJvbXB0Q2FjaGluZy5tZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyT3B0aW9uczogbWVyZ2VQcm92aWRlck9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiByZXNvbHZlZEdlbmVyYXRpb24/LnByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2g6IHByb21wdENhY2hpbmcucHJvdmlkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBhY3RpdmVUb29scyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblN0ZXBGaW5pc2g6ICh7IHVzYWdlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHVzYWdlU3RlcHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogc3RlcEluZGV4T2Zmc2V0ICsgaW50ZXJuYWxTdGVwSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiByZXNvbHZlZE1vZGVsID8/IFwidW5rbm93blwiLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUb2tlbnM6IHVzYWdlLnRvdGFsVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlUmVhZFRva2VuczpcbiAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5pbnB1dFRva2VuRGV0YWlscz8uY2FjaGVSZWFkVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlV3JpdGVUb2tlbnM6XG4gICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuaW5wdXRUb2tlbkRldGFpbHM/LmNhY2hlV3JpdGVUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uaW5nVG9rZW5zOlxuICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLm91dHB1dFRva2VuRGV0YWlscz8ucmVhc29uaW5nVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTdGVwSW5kZXgrKztcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB3cml0ZXIubWVyZ2UoXG4gICAgICAgICAgICAgIGl0ZXJSZXN1bHQudG9VSU1lc3NhZ2VTdHJlYW0oe1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlTWVzc2FnZUlkOiAoKSA9PiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgb25GaW5pc2g6ICh7IG1lc3NhZ2VzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBcImFzc2lzdGFudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RlcFBhcnRzLnB1c2goLi4ubS5wYXJ0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc3RyZWFtVGV4dEZpbmlzaFJlYXNvbiA9IGF3YWl0IGl0ZXJSZXN1bHQuZmluaXNoUmVhc29uO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHN0cmVhbS5waXBlVG8od3JpdGFibGUsIHtcbiAgICAgICAgICBwcmV2ZW50Q2xvc2U6IHRydWUsXG4gICAgICAgICAgcHJldmVudEFib3J0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgd2FzQWJvcnRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgd2FzQWJvcnRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgaW50ZXJydXB0ZWQgdG9vbCBwYXJ0c1xuICAgICAgaWYgKHdhc0Fib3J0ZWQpIHtcbiAgICAgICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgICBcIm91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgICBcIm91dHB1dC1lcnJvclwiLFxuICAgICAgICAgIFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgIFwiZG9uZVwiLFxuICAgICAgICBdKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHN0ZXBQYXJ0cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwidHlwZVwiIGluIHBhcnQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXJ0LnR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHBhcnQudHlwZS5zdGFydHNXaXRoKFwidG9vbC1cIikgJiZcbiAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwYXJ0ICYmXG4gICAgICAgICAgICAhdGVybWluYWxTdGF0ZXMuaGFzKHBhcnQuc3RhdGUgYXMgc3RyaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgKHBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID0gXCJvdXRwdXQtZXJyb3JcIjtcbiAgICAgICAgICAgIChwYXJ0IGFzIHsgZXJyb3JUZXh0Pzogc3RyaW5nIH0pLmVycm9yVGV4dCA9IFwiaW50ZXJydXB0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGludGVycnVwdGVkIGxhc3RQYXJ0IHRydW5jYXRpb25cbiAgICAgIGNvbnN0IGxhc3RQYXJ0ID0gaW50ZXJydXB0ZWRMYXN0UGFydFJlZi5jdXJyZW50O1xuXG4gICAgICBjb25zdCBuZXdQYXJ0UmVjb3JkcyA9IHN0ZXBQYXJ0c1xuICAgICAgICAubWFwKCh1aVBhcnQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCArIGk7XG4gICAgICAgICAgaWYgKGxhc3RQYXJ0ICE9IG51bGwgJiYgaW5kZXggPiBsYXN0UGFydC5pbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVzZUNsaWVudFBhcnQgPSBsYXN0UGFydCAhPSBudWxsICYmIGluZGV4ID09PSBsYXN0UGFydC5pbmRleDtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICAgICAgdXNlQ2xpZW50UGFydCA/IGxhc3RQYXJ0LnBhcnQgOiB1aVBhcnRcbiAgICAgICAgICApIGFzIFR5cGVkVUlNZXNzYWdlPFRvb2xzPltcInBhcnRzXCJdW251bWJlcl07XG4gICAgICAgICAgY29uc3QgcGFydElkID1cbiAgICAgICAgICAgIFwiYXBwcm92YWxcIiBpbiBjb250ZW50ICYmIGNvbnRlbnQuYXBwcm92YWw/LmlkXG4gICAgICAgICAgICAgID8gYXBwcm92YWxQYXJ0SWQoY29udGVudC5hcHByb3ZhbC5pZClcbiAgICAgICAgICAgICAgOiBgcGFydF8ke2Fzc2lzdGFudE1lc3NhZ2VJZH1fJHtpbmRleH1gO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcGFydElkLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHBhcnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocik6IHIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIHI+ID0+IHIgIT09IG51bGwpO1xuXG4gICAgICBjb25zdCBwZXJzaXN0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4ubmV3UGFydFJlY29yZHMubWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChyZWNvcmQuaWQsIHJlY29yZClcbiAgICAgICAgKSxcbiAgICAgICAgYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uSWQsIHsgc3RhdGUgfSksXG4gICAgICBdKTtcblxuICAgICAgbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ID1cbiAgICAgICAgbGFzdFBhcnQgIT0gbnVsbFxuICAgICAgICAgID8gTWF0aC5taW4oXG4gICAgICAgICAgICAgIG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCArIHN0ZXBQYXJ0cy5sZW5ndGgsXG4gICAgICAgICAgICAgIGxhc3RQYXJ0LmluZGV4ICsgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ICsgc3RlcFBhcnRzLmxlbmd0aDtcblxuICAgICAgY29uc3QgaXRlclBlbmRpbmdBcHByb3ZhbHMgPSBzdGVwUGFydHNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocCk6IHAgaXMgdHlwZW9mIHAgJiB7IGFwcHJvdmFsOiB7IGlkOiBzdHJpbmcgfSB9ID0+XG4gICAgICAgICAgICBcInN0YXRlXCIgaW4gcCAmJlxuICAgICAgICAgICAgcC5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIiAmJlxuICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAgJiZcbiAgICAgICAgICAgICEhKHAgYXMgeyBhcHByb3ZhbD86IHsgaWQ6IHN0cmluZyB9IH0pLmFwcHJvdmFsPy5pZFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKHApID0+ICh7XG4gICAgICAgICAgYXBwcm92YWxJZDogcC5hcHByb3ZhbC5pZCxcbiAgICAgICAgICB0b29sTmFtZTpcbiAgICAgICAgICAgIFwidHlwZVwiIGluIHAgPyBTdHJpbmcocC50eXBlKS5yZXBsYWNlKFwidG9vbC1cIiwgXCJcIikgOiBcInVua25vd25cIixcbiAgICAgICAgfSkpO1xuXG4gICAgICBsb29wRmluaXNoUmVhc29uID0gd2FzQWJvcnRlZFxuICAgICAgICA/IChcInN0b3BcIiBhcyBGaW5pc2hSZWFzb24pXG4gICAgICAgIDogKHN0cmVhbVRleHRGaW5pc2hSZWFzb24gPz8gKFwidW5rbm93blwiIGFzIEZpbmlzaFJlYXNvbikpO1xuXG4gICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBicmVhayBvciBjb250aW51ZVxuICAgICAgY29uc3Qgc2hvdWxkQnJlYWsgPVxuICAgICAgICBpdGVyUGVuZGluZ0FwcHJvdmFscy5sZW5ndGggPiAwIHx8XG4gICAgICAgIGxvb3BGaW5pc2hSZWFzb24gPT09IFwic3RvcFwiIHx8XG4gICAgICAgIHdhc0Fib3J0ZWQgfHxcbiAgICAgICAgbGFzdFBhcnQgIT0gbnVsbCB8fFxuICAgICAgICAoY3VycmVudE1heFN0ZXBzICE9IG51bGwgJiZcbiAgICAgICAgICBzdGVwSW5kZXhPZmZzZXQgKyB1c2FnZVN0ZXBzLmxlbmd0aCA+PSBjdXJyZW50TWF4U3RlcHMpIHx8XG4gICAgICAgIGl0ZXJhdGlvbiA+PSBzdGVwVGhyb3VnaHB1dCAtIDE7XG5cbiAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICBhd2FpdCBwZXJzaXN0UHJvbWlzZTtcbiAgICAgICAgYWxsUGFydHMucHVzaCguLi5uZXdQYXJ0UmVjb3Jkcyk7XG4gICAgICAgIGFsbFBlbmRpbmdBcHByb3ZhbHMucHVzaCguLi5pdGVyUGVuZGluZ0FwcHJvdmFscyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBOb24tZmluYWwgaXRlcmF0aW9uOiBwZXJzaXN0IHBhcnRzIGFuZCByZWJ1aWxkIG1lc3NhZ2VzXG4gICAgICBhd2FpdCBwZXJzaXN0UHJvbWlzZTtcbiAgICAgIGFsbFBhcnRzLnB1c2goLi4ubmV3UGFydFJlY29yZHMpO1xuICAgICAgdWlNZXNzYWdlcyA9IGFzc2VtYmxlVUlNZXNzYWdlcyh7XG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdCxcbiAgICAgICAgcGFydHM6IGFsbFBhcnRzLFxuICAgICAgICB1bnRpbDogY3JlYXRlZEF0LFxuICAgICAgICBpbmNsdWRlUXVldWVkOiB0cnVlLFxuICAgICAgICBleGNsdWRlU3ViVG9vbFBhcnRzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHBvbGxDb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhyb3R0bGVkRW1pdFN0YXR1cy5kaXNwb3NlKCk7XG4gIH1cblxuICBpZiAoc2V0U3RhcnRlZFByb21pc2UpIHtcbiAgICBhd2FpdCBzZXRTdGFydGVkUHJvbWlzZTtcbiAgfVxuXG4gIGRvbmVTdGVwKHtcbiAgICBmaW5pc2hSZWFzb246IGxvb3BGaW5pc2hSZWFzb24sXG4gICAgd2FzQWJvcnRlZCxcbiAgICBpdGVyYXRpb25zOiBpbnRlcm5hbFN0ZXBJbmRleCxcbiAgICBwZW5kaW5nQXBwcm92YWxzOiBhbGxQZW5kaW5nQXBwcm92YWxzLmxlbmd0aCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaW5pc2hSZWFzb246IGxvb3BGaW5pc2hSZWFzb24sXG4gICAgbGFzdFBhcnRJbmRleDogbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50LFxuICAgIHVzYWdlU3RlcHMsXG4gICAgcGVuZGluZ0FwcHJvdmFsczogYWxsUGVuZGluZ0FwcHJvdmFscyxcbiAgICBtYXhTdGVwczogY3VycmVudE1heFN0ZXBzLFxuICAgIGRpc2NvdmVyZWRTa2lsbHM6IHNraWxsc1JlZi5jdXJyZW50LFxuICAgIGNvbnRleHQsXG4gIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFN0ZXBzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdHJlYW1UZXh0U3RlcDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBzdHJlYW1UZXh0PFRvb2xzPj5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIHJldHVybiBhd2FpdCBzdHJlYW1UZXh0KC4uLmFyZ3MpO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBVdGlsc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQXBwcm92YWxzKHtcbiAgYWxsUGFydHMsXG4gIG1lc3NhZ2VzUmVzdWx0LFxuICBjcmVhdGVkQXQsXG4gIHJhd1Rvb2xzLFxuICBhYm9ydENvbnRyb2xsZXIsXG4gIHRvb2xDb250ZXh0LFxuICBhZ2VudCxcbiAgc3RlcExvZyxcbiAgdGhyb3R0bGVkRW1pdFN0YXR1cyxcbiAgd3JpdGVyLFxufToge1xuICBhbGxQYXJ0czogUGFydFtdO1xuICBtZXNzYWdlc1Jlc3VsdDogUGFyYW1ldGVyczx0eXBlb2YgYXNzZW1ibGVVSU1lc3NhZ2VzPlswXVtcIm1lc3NhZ2VzXCJdO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgcmF3VG9vbHM6IFRvb2xTZXQ7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICB0b29sQ29udGV4dDogVG9vbENvbnRleHQ7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc3RlcExvZzogTG9nZ2VyO1xuICB0aHJvdHRsZWRFbWl0U3RhdHVzOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVUaHJvdHRsZWRFbWl0U3RhdHVzPjtcbiAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG59KSB7XG4gIC8vIEV4ZWN1dGUgYXBwcm92ZWQgdG9vbHMgc28gdGhlIG1vZGVsIHNlZXMgY29tcGxldGUgdG9vbCBjYWxsICsgcmVzdWx0IHBhaXJzXG4gIGNvbnN0IGFwcHJvdmVkUGFydHMgPSBhbGxQYXJ0cy5maWx0ZXIoXG4gICAgKHApID0+XG4gICAgICBwLnBhcnQgJiZcbiAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgIChwLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcImFwcHJvdmFsLXJlc3BvbmRlZFwiICYmXG4gICAgICBcImFwcHJvdmFsXCIgaW4gcC5wYXJ0ICYmXG4gICAgICAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGFwcHJvdmVkOiBib29sZWFuIH0gfSkuYXBwcm92YWw/LmFwcHJvdmVkID09PVxuICAgICAgICB0cnVlXG4gICk7XG5cbiAgaWYgKGFwcHJvdmVkUGFydHMubGVuZ3RoID4gMCkge1xuICAgIHN0ZXBMb2cuaW5mbyhcImV4ZWN1dGluZyBhcHByb3ZlZCB0b29sc1wiLCB7XG4gICAgICBjb3VudDogYXBwcm92ZWRQYXJ0cy5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhyb3R0bGVkRW1pdFN0YXR1cyh7XG4gICAgICB3cml0ZXIsXG4gICAgICBzdGF0dXM6IHsgdHlwZTogXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVFeGVjTWVzc2FnZXMgPSBhd2FpdCBjb252ZXJ0VG9Nb2RlbE1lc3NhZ2VzKFxuICAgICAgYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVzdWx0LFxuICAgICAgICBwYXJ0czogYWxsUGFydHMsXG4gICAgICAgIHVudGlsOiBjcmVhdGVkQXQsXG4gICAgICAgIGluY2x1ZGVRdWV1ZWQ6IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVTdWJUb29sUGFydHM6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIHsgaWdub3JlSW5jb21wbGV0ZVRvb2xDYWxsczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXBwcm92ZWRQYXJ0cy5tYXAoYXN5bmMgKGFwKSA9PiB7XG4gICAgICAgIGlmICghYXAucGFydC50eXBlLnN0YXJ0c1dpdGgoXCJ0b29sLVwiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0ID0gYXAucGFydCBhcyBFeHRyYWN0PFxuICAgICAgICAgIFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl0sXG4gICAgICAgICAgeyB0eXBlOiBgdG9vbC0ke3N0cmluZ31gIH1cbiAgICAgICAgPjtcbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSBwYXJ0LnR5cGUucmVwbGFjZShcInRvb2wtXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCB0b29sRGVmID0gcmF3VG9vbHNbdG9vbE5hbWVdO1xuXG4gICAgICAgIGlmICh0b29sRGVmPy5leGVjdXRlICYmIHBhcnQuaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sT3V0cHV0ID0gYXdhaXQgdG9vbERlZi5leGVjdXRlKHBhcnQuaW5wdXQsIHtcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogcGFydC50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBtZXNzYWdlczogcHJlRXhlY01lc3NhZ2VzLFxuICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJ0LnN0YXRlID0gXCJvdXRwdXQtYXZhaWxhYmxlXCI7XG4gICAgICAgICAgICBwYXJ0Lm91dHB1dCA9IHRvb2xPdXRwdXQ7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBwYXJ0LnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG91dHB1dDogdG9vbE91dHB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGFydC5zdGF0ZSA9IFwib3V0cHV0LWVycm9yXCI7XG4gICAgICAgICAgICBwYXJ0LmVycm9yVGV4dCA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtZXJyb3JcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogcGFydC50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBlcnJvclRleHQ6IHBhcnQuZXJyb3JUZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5zZXQoYXAuaWQsIHsgLi4uYXAsIHBhcnQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIEF1dG8tZGVueSBhbnkgcmVtYWluaW5nIGFwcHJvdmFsLXJlcXVlc3RlZCBwYXJ0cyBzbyB0aGUgbW9kZWxcbiAgLy8gc2VlcyBjb21wbGV0ZSB0b29sIGNhbGwgKyBkZW5pZWQgcmVzdWx0IHBhaXJzIChub3QgbWlzc2luZyByZXN1bHRzKS5cbiAgY29uc3QgcGVuZGluZ0FwcHJvdmFsUGFydHMgPSBhbGxQYXJ0cy5maWx0ZXIoXG4gICAgKHApID0+IChwLnBhcnQgYXMgeyBzdGF0ZT86IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIlxuICApO1xuICBpZiAocGVuZGluZ0FwcHJvdmFsUGFydHMubGVuZ3RoID4gMCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcGVuZGluZ0FwcHJvdmFsUGFydHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbmllZCA9IHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgIC4uLnAucGFydCxcbiAgICAgICAgICAgIHN0YXRlOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgIGFwcHJvdmFsOiB7XG4gICAgICAgICAgICAgIC4uLigocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiBvYmplY3QgfSkuYXBwcm92YWwgPz8ge30pLFxuICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJhdXRvLWRlbmllZDogbmV3IG1lc3NhZ2Ugc2VudFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIHR5cGVvZiBwLnBhcnQsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocCwgZGVuaWVkKTtcbiAgICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwLmlkLCBkZW5pZWQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbnR5cGUgU3RyZWFtV3JpdGVyID0gVUlNZXNzYWdlU3RyZWFtV3JpdGVyO1xuXG5mdW5jdGlvbiBlbWl0U3RhdHVzKHtcbiAgd3JpdGVyLFxuICBzdGF0dXMsXG4gIGFnZW50LFxufToge1xuICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbiAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbiAgYWdlbnQ6IEFueUFnZW50O1xufSkge1xuICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImRhdGEtc3RhdHVzXCIsIGRhdGE6IHN0YXR1cywgdHJhbnNpZW50OiB0cnVlIH0pO1xuICBhZ2VudC5ob29rcz8uc3RhdHVzPy4oc3RhdHVzKTtcbn1cblxuY29uc3QgU1RBVFVTX1RIUk9UVExFX01TID0gNTAwO1xuXG5mdW5jdGlvbiBjcmVhdGVUaHJvdHRsZWRFbWl0U3RhdHVzKGFnZW50OiBBbnlBZ2VudCkge1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBwZW5kaW5nOiB7XG4gICAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gICAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRocm90dGxlZCh7XG4gICAgd3JpdGVyLFxuICAgIHN0YXR1cyxcbiAgfToge1xuICAgIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xuICAgIHN0YXR1czogQWdlbnRTdGF0dXM7XG4gIH0pIHtcbiAgICBwZW5kaW5nID0geyB3cml0ZXIsIHN0YXR1cyB9O1xuICAgIGlmICh0aW1lciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbHVzaCgpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBpZiAocGVuZGluZykge1xuICAgICAgICBmbHVzaCgpO1xuICAgICAgfVxuICAgIH0sIFNUQVRVU19USFJPVFRMRV9NUyk7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB3cml0ZXIsIHN0YXR1cyB9ID0gcGVuZGluZztcbiAgICBwZW5kaW5nID0gbnVsbDtcbiAgICBlbWl0U3RhdHVzKHsgd3JpdGVyLCBzdGF0dXMsIGFnZW50IH0pO1xuICB9XG5cbiAgdGhyb3R0bGVkLmRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgaWYgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbHVzaCgpO1xuICB9O1xuXG4gIHJldHVybiB0aHJvdHRsZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPcHRpb248VD4oXG4gIHZhbHVlOiBSZXNvbHZhYmxlPFQ+IHwgdW5kZWZpbmVkLFxuICBhcmdzOiBSZXNvbHZhYmxlQXJnc1xuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gYXdhaXQgKHZhbHVlIGFzIChhcmdzOiBSZXNvbHZhYmxlQXJncykgPT4gVCB8IFByb21pc2U8VD4pKGFyZ3MpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVN5c3RlbShcbiAgaW5wdXQ6IFJlc29sdmFibGU8c3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkLFxuICBhcmdzOiBSZXNvbHZhYmxlQXJnc1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc29sdmVPcHRpb24oaW5wdXQsIGFyZ3MpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIikgOiByZXN1bHQ7XG59XG5cbmNvbnN0IEJBU0VfU1lTVEVNX1BST01QVCA9XG4gIFwiWW91IGFyZSBhbiBBSSBhc3Npc3RhbnQgd2l0aCBiYXNpYyB0b29scyB0byBpbnRlcmFjdCB3aXRoIHlvdXIgZW52aXJvbm1lbnQuIEV4cGxvcmUgYW5kIHdvcmsgZnJlZWx5LlwiO1xuXG5mdW5jdGlvbiBqb2luUHJvbXB0U2VjdGlvbnMoXG4gIC4uLnNlY3Rpb25zOiAoc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbClbXVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNlY3Rpb25zLmZpbHRlcigocykgPT4gcz8udHJpbSgpKS5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG5jb25zdCBiYWNrZ3JvdW5kUHJvY2Vzc1Byb21wdCA9IGAjIyBCYWNrZ3JvdW5kIFByb2Nlc3Nlc1xuVGhlc2UgYmFja2dyb3VuZCBwcm9jZXNzIGluc3RydWN0aW9ucyBhcmUgZm9yIHlvdSB0byBtYW5pcHVsYXRlIHRoZSBwcm9jZXNzZXMsIGRvIG5vdCBiZSB0byB2ZXJib3NlIHRvIHRoZSB1c2VyIGFib3V0IHRoZSByZXNwb25zZSBkZXRhaWxzIGxpa2UgXCJob3cgdG8gZGVidWcgdGhlIHByb2Nlc3Mgb3V0cHV0XCIgdGhlIHVzZXIgd2lsbCBoYXZlIGFuIFVJLlxuXG5Vc2UgXFxgd2FpdFVudGlsOiAwXFxgIGZvciBkZXYgc2VydmVycyB0aGF0IHNob3VsZCBydW4gaW5kZWZpbml0ZWx5LlxuSXQgaXMgYSBnb29kIHByYWN0aWNlIHRvIGNoZWNrIHRoZSBvdXRwdXQgbG9nIGFmdGVyIHJ1bm5pbmcgcHJvY2Vzc2VzIGxpa2UgZGV2IHNlcnZlcnMgdG8gbWFrZSBzdXJlIHRoZXkgc3RhcnRlZCBjb3JyZWN0bHkuXG5cblRvIHJ1biBhIGJhY2tncm91bmQgcHJvY2VzczpcbkJhc2goeyBjb21tYW5kOiBcIm5wbSBydW4gZGV2XCIsIHdhaXRVbnRpbDogMCB9KVxuUmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIFxcYGNvbW1hbmRJZFxcYC4gVGhlIHByb2Nlc3Mga2VlcHMgcnVubmluZyBpbiB0aGUgc2FuZGJveC5cblxuVG8ga2lsbCBhIHByb2Nlc3M6XG5CYXNoKHsgY29tbWFuZDogXCJwcyBhdXggfCBncmVwIG5vZGVcIiB9KSAgIC8vIEZpbmQgdGhlIFBJRFxuQmFzaCh7IGNvbW1hbmQ6IFwia2lsbCB7cGlkfVwiIH0pICAgICAgICAgICAgLy8gR3JhY2VmdWxcbkJhc2goeyBjb21tYW5kOiBcImtpbGwgLTkge3BpZH1cIiB9KSAgICAgICAgIC8vIEZvcmNlXG5gO1xuXG5mdW5jdGlvbiBidWlsZFNraWxsc0NvbnRleHQoc2tpbGxzOiBTa2lsbFN1bW1hcnlbXSk6IHN0cmluZyB7XG4gIGlmIChza2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBza2lsbExpbmVzID0gc2tpbGxzXG4gICAgLm1hcCgocykgPT4gYC0gJHtzLm5hbWV9OiAke3MuZGVzY3JpcHRpb259YClcbiAgICAuam9pbihcIlxcblwiKTtcblxuICByZXR1cm4gYCMjIEF2YWlsYWJsZSBTa2lsbHNcbiR7c2tpbGxMaW5lc31cblxuJHtiYWNrZ3JvdW5kUHJvY2Vzc1Byb21wdH1cblxuVXNlIHRoZSBTa2lsbCB0b29sIHRvIGxvYWQgYSBza2lsbCdzIGZ1bGwgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBmb2xsb3dpbmcgaXQuYDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHR5cGUgTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgcGFyc2VTa2lsbEZyb250bWF0dGVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogRGlzY292ZXJzIHNraWxscyBmcm9tIGRpcmVjdG9yaWVzIGluc2lkZSB0aGUgc2FuZGJveCBieSBmaW5kaW5nIGFuZCBwYXJzaW5nIFNLSUxMLm1kIGZpbGVzLlxuICogU2NhbnMgZWFjaCBkaXJlY3RvcnkgZm9yIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgU0tJTEwubWQsIGV4dHJhY3RzIGZyb250bWF0dGVyIG1ldGFkYXRhLFxuICogYW5kIHJldHVybnMgc3VtbWFyaWVzIGZvciB1c2UgaW4gdGhlIHN5c3RlbSBwcm9tcHQuXG4gKlxuICogQHJldHVybnMgQXJyYXkgb2Ygc2tpbGwgc3VtbWFyaWVzIChkZWR1cGxpY2F0ZWQgYnkgbmFtZSwgZmlyc3Qgb2NjdXJyZW5jZSB3aW5zKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJTa2lsbHNJblNhbmRib3gob3B0czoge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzRGlyczogc3RyaW5nW107XG4gIHNlc3Npb25JZD86IHN0cmluZztcbn0pOiBQcm9taXNlPFNraWxsU3VtbWFyeVtdPiB7XG4gIGNvbnN0IHsgYWdlbnQsIHNhbmRib3gsIHNraWxsc0RpcnMsIHNlc3Npb25JZCB9ID0gb3B0cztcbiAgY29uc3QgYmFzZUxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJza2lsbHNcIixcbiAgfSk7XG4gIGNvbnN0IGxvZyA9IHNlc3Npb25JZCA/IGJhc2VMb2cud2l0aENvbnRleHQoeyBzZXNzaW9uSWQgfSkgOiBiYXNlTG9nO1xuICBjb25zdCBkb25lID0gbG9nLnRpbWUoXCJkaXNjb3ZlclNraWxsc0luU2FuZGJveFwiKTtcblxuICBjb25zdCBzdW1tYXJpZXM6IFNraWxsU3VtbWFyeVtdID0gW107XG4gIGNvbnN0IHNlZW5OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3Qgc2tpbGxzRGlyIG9mIHNraWxsc0RpcnMpIHtcbiAgICBjb25zdCBkaXJEb25lID0gbG9nLnRpbWUoXCJzY2FuIGRpcmVjdG9yeVwiLCB7IGRpcjogc2tpbGxzRGlyIH0pO1xuICAgIGNvbnN0IGRpclN1bW1hcmllcyA9IGF3YWl0IGRpc2NvdmVyU2tpbGxzSW5EaXJlY3Rvcnkoe1xuICAgICAgc2FuZGJveCxcbiAgICAgIHNraWxsc0RpcixcbiAgICAgIGxvZyxcbiAgICB9KTtcbiAgICBkaXJEb25lKHsgY291bnQ6IGRpclN1bW1hcmllcy5sZW5ndGggfSk7XG5cbiAgICBmb3IgKGNvbnN0IHN1bW1hcnkgb2YgZGlyU3VtbWFyaWVzKSB7XG4gICAgICBpZiAoIXNlZW5OYW1lcy5oYXMoc3VtbWFyeS5uYW1lKSkge1xuICAgICAgICBzZWVuTmFtZXMuYWRkKHN1bW1hcnkubmFtZSk7XG4gICAgICAgIHN1bW1hcmllcy5wdXNoKHN1bW1hcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvbmUoeyB0b3RhbFNraWxsczogc3VtbWFyaWVzLmxlbmd0aCB9KTtcblxuICByZXR1cm4gc3VtbWFyaWVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb3ZlclNraWxsc0luRGlyZWN0b3J5KG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNEaXI6IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTxTa2lsbFN1bW1hcnlbXT4ge1xuICBjb25zdCB7IHNhbmRib3gsIHNraWxsc0RpciwgbG9nIH0gPSBvcHRzO1xuICBjb25zdCBza2lsbFBhdGhzID0gYXdhaXQgZmluZFNraWxsRmlsZXMoeyBzYW5kYm94LCBza2lsbHNEaXIsIGxvZyB9KTtcblxuICBpZiAoc2tpbGxQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdW1tYXJpZXM6IFNraWxsU3VtbWFyeVtdID0gW107XG5cbiAgZm9yIChjb25zdCBza2lsbE1kUGF0aCBvZiBza2lsbFBhdGhzKSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHBhcnNlU2tpbGxGaWxlKHsgc2FuZGJveCwgc2tpbGxNZFBhdGgsIGxvZyB9KTtcbiAgICBpZiAoc3VtbWFyeSkge1xuICAgICAgc3VtbWFyaWVzLnB1c2goc3VtbWFyeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1bW1hcmllcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFNraWxsRmlsZXMob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsc0Rpcjogc3RyaW5nO1xuICBsb2c6IExvZ2dlcjtcbn0pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2tpbGxzRGlyLCBsb2cgfSA9IG9wdHM7XG5cbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJmaW5kXCIsXG4gICAgYXJnczogW3NraWxsc0RpciwgXCItbmFtZVwiLCBcIlNLSUxMLm1kXCIsIFwiLXR5cGVcIiwgXCJmXCJdLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gc2NhbiBza2lsbHMgZGlyZWN0b3J5XCIsIHtcbiAgICAgIGRpcjogc2tpbGxzRGlyLFxuICAgICAgZXJyb3I6IGV4ZWNSZXN1bHQubWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHN0ZG91dCwgZXhpdENvZGUgfSA9IGF3YWl0IGV4ZWNSZXN1bHQucmVzdWx0O1xuXG4gIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgIGxvZy53YXJuKFwic2tpbGxzIGRpcmVjdG9yeSBub3QgZm91bmQgb3IgaW5hY2Nlc3NpYmxlXCIsIHsgZGlyOiBza2lsbHNEaXIgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVNraWxsRmlsZShvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxNZFBhdGg6IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTxTa2lsbFN1bW1hcnkgfCBudWxsPiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2tpbGxNZFBhdGgsIGxvZyB9ID0gb3B0cztcbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJjYXRcIixcbiAgICBhcmdzOiBbc2tpbGxNZFBhdGhdLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gcmVhZCBza2lsbCBmaWxlXCIsIHtcbiAgICAgIHBhdGg6IHNraWxsTWRQYXRoLFxuICAgICAgZXJyb3I6IGV4ZWNSZXN1bHQubWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgc3Rkb3V0LCBleGl0Q29kZSB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG5cbiAgaWYgKGV4aXRDb2RlICE9PSAwKSB7XG4gICAgbG9nLndhcm4oXCJjb3VsZCBub3QgcmVhZCBza2lsbCBmaWxlXCIsIHsgcGF0aDogc2tpbGxNZFBhdGggfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZVNraWxsRnJvbnRtYXR0ZXIoc3Rkb3V0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIGxvZy53YXJuKFwiaW52YWxpZCBvciBtaXNzaW5nIGZyb250bWF0dGVyXCIsIHsgcGF0aDogc2tpbGxNZFBhdGggfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBwYXJzZWQuZGVzY3JpcHRpb24sXG4gICAgc2tpbGxNZFBhdGgsXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTa2lsbEVudHJ5LCBTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBQYXJzZWQgZnJvbnRtYXR0ZXIgZnJvbSBhIFNLSUxMLm1kIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIFNraWxsRnJvbnRtYXR0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbn07XG5cbi8qKlxuICogUGFyc2VzIFlBTUwgZnJvbnRtYXR0ZXIgZnJvbSBhIFNLSUxMLm1kIGZpbGUgY29udGVudC5cbiAqIEZyb250bWF0dGVyIG11c3QgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCBkZWxpbWl0ZWQgYnkgYC0tLWAgbWFya2Vycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgbWFya2Rvd25cbiAqIC0tLVxuICogbmFtZTogY3N2XG4gKiBkZXNjcmlwdGlvbjogQW5hbHl6ZSBDU1YgZGF0YVxuICogLS0tXG4gKiAjIENTViBTa2lsbFxuICogLi4uXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBQYXJzZWQgbmFtZSBhbmQgZGVzY3JpcHRpb24sIG9yIG51bGwgaWYgZnJvbnRtYXR0ZXIgaXMgbWlzc2luZy9pbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNraWxsRnJvbnRtYXR0ZXIoXG4gIGNvbnRlbnQ6IHN0cmluZ1xuKTogU2tpbGxGcm9udG1hdHRlciB8IG51bGwge1xuICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCk7XG5cbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoXCItLS1cIikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGVuZE1hcmtlckluZGV4ID0gdHJpbW1lZC5pbmRleE9mKFwiLS0tXCIsIDMpO1xuICBpZiAoZW5kTWFya2VySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmcm9udG1hdHRlckJsb2NrID0gdHJpbW1lZC5zbGljZSgzLCBlbmRNYXJrZXJJbmRleCkudHJpbSgpO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVNpbXBsZVlhbWwoZnJvbnRtYXR0ZXJCbG9jayk7XG5cbiAgaWYgKCEocGFyc2VkLm5hbWUgJiYgcGFyc2VkLmRlc2NyaXB0aW9uKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBTdHJpbmcocGFyc2VkLm5hbWUpLFxuICAgIGRlc2NyaXB0aW9uOiBTdHJpbmcocGFyc2VkLmRlc2NyaXB0aW9uKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgc2ltcGxlIFlBTUwga2V5LXZhbHVlIHBhaXJzIChzaW5nbGUtbGluZSB2YWx1ZXMgb25seSkuXG4gKiBUaGlzIGF2b2lkcyBhZGRpbmcgYSBmdWxsIFlBTUwgcGFyc2VyIGRlcGVuZGVuY3kgZm9yIGJhc2ljIGZyb250bWF0dGVyLlxuICovXG5mdW5jdGlvbiBwYXJzZVNpbXBsZVlhbWwoeWFtbDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiB5YW1sLnNwbGl0KFwiXFxuXCIpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWRMaW5lIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdHJpbW1lZExpbmUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0cmltbWVkTGluZS5zbGljZSgwLCBjb2xvbkluZGV4KS50cmltKCk7XG4gICAgbGV0IHZhbHVlID0gdHJpbW1lZExpbmUuc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKTtcblxuICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgIGlmIChcbiAgICAgICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgKHZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiJ1wiKSlcbiAgICApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIGlmIChrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNraWxscyhcbiAgc2tpbGxzOiBTa2lsbElucHV0W10gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBTa2lsbEVudHJ5W10ge1xuICBpZiAoIXNraWxscyB8fCBza2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHNraWxscy5tYXAoKHNraWxsKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBza2lsbCAhPT0gXCJvYmplY3RcIiB8fCBza2lsbCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkludmFsaWQgc2tpbGxzIGVudHJ5OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBmaWVsZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwidHlwZVwiIGluIHNraWxsICYmIHNraWxsLnR5cGUpIHtcbiAgICAgIHJldHVybiBza2lsbCBhcyBTa2lsbEVudHJ5O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHNraWxscyBlbnRyeTogZXhwZWN0ZWQgYHR5cGVgLlwiKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgbm9ybWFsaXplU2tpbGxzIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyByZXNvbHZlSG9zdFNraWxsIH0gZnJvbSBcIi4vcmVzb2x2ZS1ob3N0XCI7XG5pbXBvcnQgeyByZXNvbHZlSW5saW5lU2tpbGwgfSBmcm9tIFwiLi9yZXNvbHZlLWlubGluZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZVJlbW90ZVNraWxsIH0gZnJvbSBcIi4vcmVzb2x2ZS1yZW1vdGVcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxJbnB1dHNUb1NhbmRib3hEaXJzKG9wdHM6IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsczogU2tpbGxJbnB1dFtdO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYXNlTG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4ub3B0cy5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IG9wdHMuYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJza2lsbHNcIixcbiAgfSk7XG4gIGNvbnN0IGxvZyA9IG9wdHMuc2Vzc2lvbklkXG4gICAgPyBiYXNlTG9nLndpdGhDb250ZXh0KHsgc2Vzc2lvbklkOiBvcHRzLnNlc3Npb25JZCB9KVxuICAgIDogYmFzZUxvZztcbiAgY29uc3QgZW50cmllcyA9IG5vcm1hbGl6ZVNraWxscyhvcHRzLnNraWxscyk7XG4gIGNvbnN0IHJlc29sdmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmIChlbnRyeS50eXBlID09PSBcInNhbmRib3hcIikge1xuICAgICAgcmVzb2x2ZWQucHVzaChlbnRyeS5wYXRoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJob3N0XCIpIHtcbiAgICAgIHJlc29sdmVkLnB1c2goXG4gICAgICAgIGF3YWl0IHJlc29sdmVIb3N0U2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImdpdFwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKFxuICAgICAgICBhd2FpdCByZXNvbHZlUmVtb3RlU2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKFxuICAgICAgICBhd2FpdCByZXNvbHZlSW5saW5lU2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxvZy53YXJuKFwidW5rbm93biBza2lsbCBzb3VyY2UgZW50cnkgZW5jb3VudGVyZWRcIiwgeyBlbnRyeSB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSG9zdFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RmlsZXMob3B0czoge1xuICBhYnNvbHV0ZVBhdGg6IHN0cmluZztcbiAgcmVsYXRpdmVQcmVmaXg/OiBzdHJpbmc7XG59KTogUHJvbWlzZTx7IHBhdGg6IHN0cmluZzsgY29udGVudDogQnVmZmVyIH1bXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlLCBzdGF0IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICBjb25zdCB7IHJlc29sdmUsIHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQob3B0cy5hYnNvbHV0ZVBhdGgpO1xuICBpZiAoZmlsZVN0YXQuaXNGaWxlKCkpIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUob3B0cy5hYnNvbHV0ZVBhdGgpO1xuICAgIHJldHVybiBbeyBwYXRoOiBvcHRzLnJlbGF0aXZlUHJlZml4ID8/IFwiU0tJTEwubWRcIiwgY29udGVudCB9XTtcbiAgfVxuXG4gIGlmICghZmlsZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKG9wdHMuYWJzb2x1dGVQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogQnVmZmVyIH1bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5leHRBYnMgPSByZXNvbHZlKG9wdHMuYWJzb2x1dGVQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBuZXh0UmVsID0gb3B0cy5yZWxhdGl2ZVByZWZpeFxuICAgICAgPyBwYXRoUG9zaXguam9pbihvcHRzLnJlbGF0aXZlUHJlZml4LCBlbnRyeS5uYW1lKVxuICAgICAgOiBlbnRyeS5uYW1lO1xuXG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZpbGVzLnB1c2goXG4gICAgICAgIC4uLihhd2FpdCBjb2xsZWN0RmlsZXMoe1xuICAgICAgICAgIGFic29sdXRlUGF0aDogbmV4dEFicyxcbiAgICAgICAgICByZWxhdGl2ZVByZWZpeDogbmV4dFJlbCxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogbmV4dFJlbCxcbiAgICAgICAgY29udGVudDogYXdhaXQgcmVhZEZpbGUobmV4dEFicyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YWJsZURpck5hbWUoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKGlucHV0UGF0aCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDEwKTtcbiAgcmV0dXJuIGBob3N0LSR7aGFzaH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUhvc3RTa2lsbChvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGw6IEhvc3RTa2lsbElucHV0O1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZSwgcG9zaXg6IHBhdGhQb3NpeCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gIGNvbnN0IGhvc3RQYXRoID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRzLnNraWxsLnBhdGgpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGNvbGxlY3RGaWxlcyh7IGFic29sdXRlUGF0aDogaG9zdFBhdGggfSk7XG4gIGNvbnN0IGRpck5hbWUgPSBhd2FpdCBzdGFibGVEaXJOYW1lKGhvc3RQYXRoKTtcbiAgY29uc3QgZGVzdFBhdGggPSBwYXRoUG9zaXguam9pbihcIi5hZ2VudFwiLCBcInNraWxsc1wiLCBcIi5tYXRlcmlhbGl6ZWRcIiwgZGlyTmFtZSk7XG5cbiAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkZXN0UGF0aDtcbiAgfVxuXG4gIGF3YWl0IG9wdHMuc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICBmaWxlcyxcbiAgICBkZXN0UGF0aCxcbiAgfSk7XG5cbiAgcmV0dXJuIGRlc3RQYXRoO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbmxpbmVTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gc2x1Z2lmeSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcbiAgICAucmVwbGFjZSgvKF4tfC0kKS9nLCBcIlwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhYmxlSW5saW5lRGlyTmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBzbHVnID0gc2x1Z2lmeShuYW1lKSB8fCBcImlubGluZS1za2lsbFwiO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcbiAgcmV0dXJuIGAke3NsdWd9LSR7aGFzaH1gO1xufVxuXG5mdW5jdGlvbiBidWlsZFNraWxsTWFya2Rvd24oc2tpbGw6IElubGluZVNraWxsSW5wdXQpOiBzdHJpbmcge1xuICByZXR1cm4gYC0tLVxubmFtZTogJHtza2lsbC5uYW1lfVxuZGVzY3JpcHRpb246ICR7c2tpbGwuZGVzY3JpcHRpb259XG4tLS1cblxuJHtza2lsbC5pbnN0cnVjdGlvbnMudHJpbSgpfVxuYDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbmxpbmVTa2lsbChvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGw6IElubGluZVNraWxsSW5wdXQ7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwb3NpeDogcGF0aFBvc2l4IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgY29uc3QgZGlyTmFtZSA9IGF3YWl0IHN0YWJsZUlubGluZURpck5hbWUob3B0cy5za2lsbC5uYW1lKTtcbiAgY29uc3QgZGVzdFBhdGggPSBwYXRoUG9zaXguam9pbihcIi5hZ2VudFwiLCBcInNraWxsc1wiLCBcIi5tYXRlcmlhbGl6ZWRcIiwgZGlyTmFtZSk7XG5cbiAgYXdhaXQgb3B0cy5zYW5kYm94LndyaXRlRmlsZXMoe1xuICAgIGRlc3RQYXRoLFxuICAgIGZpbGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6IFwiU0tJTEwubWRcIixcbiAgICAgICAgY29udGVudDogYnVpbGRTa2lsbE1hcmtkb3duKG9wdHMuc2tpbGwpLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICByZXR1cm4gZGVzdFBhdGg7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEdpdFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2UoLycvZywgYCdcXFxcJydgKX0nYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhYmxlUmVwb0Rpck5hbWUoc2tpbGw6IEdpdFNraWxsSW5wdXQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBoYXNoSW5wdXQgPSBgJHtza2lsbC5yZXBvfTo6JHtza2lsbC5yZWYgPz8gXCJIRUFEXCJ9YDtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCAxMik7XG4gIHJldHVybiBgZ2l0LSR7aGFzaH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbW90ZVNraWxsKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbDogR2l0U2tpbGxJbnB1dDtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBkaXJOYW1lID0gYXdhaXQgc3RhYmxlUmVwb0Rpck5hbWUob3B0cy5za2lsbCk7XG4gIGNvbnN0IGNsb25lRGlyID0gcGF0aFBvc2l4LmpvaW4oXCIuYWdlbnRcIiwgXCJza2lsbHNcIiwgXCIubWF0ZXJpYWxpemVkXCIsIGRpck5hbWUpO1xuICBjb25zdCBxdW90ZWREaXIgPSBzaGVsbFF1b3RlKGNsb25lRGlyKTtcbiAgY29uc3QgcXVvdGVkUmVwbyA9IHNoZWxsUXVvdGUob3B0cy5za2lsbC5yZXBvKTtcbiAgY29uc3QgcXVvdGVkUmVmID0gc2hlbGxRdW90ZShvcHRzLnNraWxsLnJlZiA/PyBcIkhFQURcIik7XG5cbiAgY29uc3Qgc3luY0NvbW1hbmQgPSBbXG4gICAgXCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuICAgIGBpZiBbICEgLWQgJHtxdW90ZWREaXJ9Ly5naXQgXTsgdGhlbmAsXG4gICAgYCAgcm0gLXJmICR7cXVvdGVkRGlyfWAsXG4gICAgYCAgbWtkaXIgLXAgJHtxdW90ZWREaXJ9YCxcbiAgICBgICBnaXQgY2xvbmUgLS1kZXB0aCAxICR7cXVvdGVkUmVwb30gJHtxdW90ZWREaXJ9YCxcbiAgICBcImZpXCIsXG4gICAgYGlmIFsgJHtxdW90ZWRSZWZ9ICE9ICdIRUFEJyBdOyB0aGVuYCxcbiAgICBgICBnaXQgLUMgJHtxdW90ZWREaXJ9IGZldGNoIC0tZGVwdGggMSBvcmlnaW4gJHtxdW90ZWRSZWZ9YCxcbiAgICBgICBnaXQgLUMgJHtxdW90ZWREaXJ9IGNoZWNrb3V0IEZFVENIX0hFQURgLFxuICAgIFwiZmlcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuXG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBvcHRzLnNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgYXJnczogW1wiLWxjXCIsIHN5bmNDb21tYW5kXSxcbiAgfSk7XG4gIGNvbnN0IHsgZXhpdENvZGUsIHN0ZGVyciB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG4gIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gbWF0ZXJpYWxpemUgZ2l0IHNraWxsIGZyb20gJHtvcHRzLnNraWxsLnJlcG99OiAke3N0ZGVyciB8fCBcInVua25vd24gZXJyb3JcIn1gXG4gICAgKTtcbiAgfVxuXG4gIGxldCByZXNvbHZlZERpciA9IGNsb25lRGlyO1xuICBpZiAob3B0cy5za2lsbC5wYXRoKSB7XG4gICAgcmVzb2x2ZWREaXIgPSBwYXRoUG9zaXguam9pbihyZXNvbHZlZERpciwgb3B0cy5za2lsbC5wYXRoKTtcbiAgfVxuICBpZiAob3B0cy5za2lsbC5uYW1lKSB7XG4gICAgcmVzb2x2ZWREaXIgPSBwYXRoUG9zaXguam9pbihyZXNvbHZlZERpciwgb3B0cy5za2lsbC5uYW1lKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWREaXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBUb29sU2V0LFxuICB0b29sLFxuICB0eXBlIFVJTWVzc2FnZSxcbiAgdHlwZSBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXIsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgREVGQVVMVF9XQUlUX1VOVElMIH0gZnJvbSBcIi4uL3NhbmRib3gvcHJvY2Vzcy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBhcHByb3ZhbFBhcnRJZCB9IGZyb20gXCIuLi9zZXNzaW9uL3NlbmRcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxTdW1tYXJ5IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUphdmFTY3JpcHRUb29sLCB0eXBlIE9uU3ViVG9vbENhbGwgfSBmcm9tIFwiLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBjaGVja05lZWRzQXBwcm92YWwgfSBmcm9tIFwiLi9uZWVkcy1hcHByb3ZhbFwiO1xuXG5leHBvcnQgeyB0b29sIGFzIGFnZW50VG9vbCB9IGZyb20gXCIuL3Rvb2xcIjtcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHsgY29uZmlnOiB7IG5hbWU6IFwidG9vbHNcIiB9LCBzdWJzeXN0ZW06IFwidG9vbHNcIiB9KTtcblxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChieXRlcyA8IDEwMjQpIHtcbiAgICByZXR1cm4gYCR7Ynl0ZXN9YDtcbiAgfVxuICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfUtgO1xuICB9XG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfU1gO1xuICB9XG4gIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX1HYDtcbn1cblxudHlwZSBTdHJlYW1Xcml0ZXIgPSBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXI7XG5cbmV4cG9ydCB0eXBlIFRvb2xDb250ZXh0PFxuICBUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIGNvbnRleHQ6IFRDb250ZXh0O1xuICBzdGF0ZTogVFN0YXRlO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBtZXNzYWdlczogVUlNZXNzYWdlW107XG59O1xuXG5mdW5jdGlvbiBpc1JnTm90Rm91bmRFcnJvcihlcnI6IEVycm9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnRzID0gW2Vyci5tZXNzYWdlXTtcblxuICBjb25zdCBhbnlFcnIgPSBlcnIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBhbnlFcnIucmVhc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgcGFydHMucHVzaChhbnlFcnIucmVhc29uKTtcbiAgfVxuICBpZiAoYW55RXJyLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBwYXJ0cy5wdXNoKGFueUVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICBjb25zdCBhbnlDYXVzZSA9IGFueUVyci5jYXVzZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgYW55Q2F1c2UudGV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcGFydHMucHVzaChhbnlDYXVzZS50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtc2cgPSBwYXJ0cy5qb2luKFwiIFwiKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcImV4ZWN1dGFibGUgZmlsZSBub3QgZm91bmRcIikgfHxcbiAgICBtc2cuaW5jbHVkZXMoXCJleGVjdXRhYmxlX25vdF9mb3VuZFwiKSB8fFxuICAgIChtc2cuaW5jbHVkZXMoXCJlbm9lbnRcIikgJiYgbXNnLmluY2x1ZGVzKFwicmdcIikpXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBidWlsdEluVG9vbHMgPSB7XG4gIFJlYWQ6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzIHdpdGggbWV0YWRhdGEuIEZvciBmaWxlcyBvdmVyIDIwMCBsaW5lcywgYXV0b21hdGljYWxseSBzaG93cyBmaXJzdCAxMDAgbGluZXMgdW5sZXNzIGEgc3BlY2lmaWMgbGluZSByYW5nZSBpcyBwcm92aWRlZC4gVXNlIHN0YXJ0TGluZSBhbmQgZW5kTGluZSBwYXJhbWV0ZXJzIHRvIHJlYWQgc3BlY2lmaWMgcG9ydGlvbnMgb2YgbGFyZ2UgZmlsZXMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICBzdGFydExpbmU6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIlN0YXJ0aW5nIGxpbmUgbnVtYmVyICgxLWluZGV4ZWQpLiBJZiBwcm92aWRlZCB3aXRoIGVuZExpbmUsIHJlYWRzIGV4YWN0IHJhbmdlIHJlZ2FyZGxlc3Mgb2YgZmlsZSBzaXplLlwiXG4gICAgICAgICksXG4gICAgICBlbmRMaW5lOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJFbmRpbmcgbGluZSBudW1iZXIgKDEtaW5kZXhlZCwgaW5jbHVzaXZlKS4gSWYgcHJvdmlkZWQgd2l0aCBzdGFydExpbmUsIHJlYWRzIGV4YWN0IHJhbmdlIHJlZ2FyZGxlc3Mgb2YgZmlsZSBzaXplLlwiXG4gICAgICAgICksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRmlsZSBjb250ZW50XCIpLFxuICAgICAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICAgICAgdG90YWxMaW5lczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZVwiKSxcbiAgICAgICAgbGluZXNTaG93bjogelxuICAgICAgICAgIC5udW1iZXIoKVxuICAgICAgICAgIC5kZXNjcmliZShcIk51bWJlciBvZiBsaW5lcyBpbmNsdWRlZCBpbiB0aGlzIHJlc3BvbnNlXCIpLFxuICAgICAgICBzdGFydExpbmU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGaXJzdCBsaW5lIG51bWJlciBzaG93biAoMS1pbmRleGVkKVwiKSxcbiAgICAgICAgZW5kTGluZTogei5udW1iZXIoKS5kZXNjcmliZShcIkxhc3QgbGluZSBudW1iZXIgc2hvd24gKDEtaW5kZXhlZClcIiksXG4gICAgICAgIGlzUGFnaW5hdGVkOiB6XG4gICAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgdGhpcyBpcyBhIHBhcnRpYWwgdmlldyBvZiB0aGUgZmlsZVwiKSxcbiAgICAgICAgZmlsZVNpemU6IHpcbiAgICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJIdW1hbi1yZWFkYWJsZSBmaWxlIHNpemUgKGUuZy4sICcyLjVLJywgJzEuMk0nKVwiKSxcbiAgICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG4gIEdyZXA6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZWFyY2ggZm9yIHBhdHRlcm5zIGluIGZpbGVzIHVzaW5nIHJpcGdyZXAuIFVzZSB0aGlzIHRvIGZpbmQgY29kZSBwYXR0ZXJucywgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGltcG9ydHMsIGV0Yy5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXR0ZXJuOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJSZWdleCBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgKHJpcGdyZXAgc3ludGF4KVwiKSxcbiAgICAgIHBhdGg6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkFic29sdXRlIHBhdGggdG8gc2VhcmNoIGluIChkZWZhdWx0cyB0byB3b3JraW5nIGRpcmVjdG9yeSkuIENhbiBiZSBhIGZpbGUgb3IgZGlyZWN0b3J5LlwiXG4gICAgICAgICksXG4gICAgICBmaWxlVHlwZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiRmlsZSB0eXBlIHRvIGZpbHRlciBieSAoZS5nLiwgJ3RzJywgJ2pzJywgJ3B5JywgJ21kJykuIFVzZXMgcmlwZ3JlcCdzIGJ1aWx0LWluIHR5cGUgZmlsdGVycy5cIlxuICAgICAgICApLFxuICAgICAgZ2xvYjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiR2xvYiBwYXR0ZXJuIHRvIGZpbHRlciBmaWxlcyAoZS5nLiwgJyoudHN4JywgJ3NyYy8qKi8qLnRzJylcIlxuICAgICAgICApLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KHRydWUpXG4gICAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgc2VhcmNoIGlzIGNhc2Utc2Vuc2l0aXZlIChkZWZhdWx0OiB0cnVlKVwiKSxcbiAgICAgIGNvbnRleHRMaW5lczogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiTnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gc2hvdyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggbWF0Y2hcIlxuICAgICAgICApLFxuICAgICAgbWF4Q291bnQ6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgcGVyIGZpbGUgKHVzZWZ1bCBmb3IgbGltaXRpbmcgb3V0cHV0KVwiXG4gICAgICAgICksXG4gICAgICBmaWxlc1dpdGhNYXRjaGVzOiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk9ubHkgc2hvdyBmaWxlIHBhdGhzIHRoYXQgY29udGFpbiBtYXRjaGVzLCBub3QgdGhlIG1hdGNoaW5nIGxpbmVzIHRoZW1zZWx2ZXNcIlxuICAgICAgICApLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbWF0Y2hlczogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiU2VhcmNoIHJlc3VsdHMgd2l0aCBmaWxlIHBhdGhzLCBsaW5lIG51bWJlcnMsIGFuZCBtYXRjaGluZyBjb250ZW50XCJcbiAgICAgICAgKSxcbiAgICAgIHN1bW1hcnk6IHoub2JqZWN0KHtcbiAgICAgICAgbWF0Y2hDb3VudDogei5udW1iZXIoKS5kZXNjcmliZShcIk51bWJlciBvZiBtYXRjaGVzIGZvdW5kXCIpLFxuICAgICAgICBmaWxlQ291bnQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgZmlsZXMgY29udGFpbmluZyBtYXRjaGVzXCIpLFxuICAgICAgICBzZWFyY2hQYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0aGF0IHdhcyBzZWFyY2hlZFwiKSxcbiAgICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdHRlcm4gdGhhdCB3YXMgc2VhcmNoZWQgZm9yXCIpLFxuICAgICAgfSksXG4gICAgfSksXG4gIH0pLFxuICBMaXN0OiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUmVjdXJzaXZlbHkgbGlzdCBkaXJlY3RvcnkgY29udGVudHMuIFVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGViYXNlIHN0cnVjdHVyZSwgZmluZCBmaWxlcywgb3IgZXhwbG9yZSBkaXJlY3Rvcmllcy4gQ29udHJvbCBkZXB0aCB0byBiYWxhbmNlIGRldGFpbCB2cy4gb3ZlcnZpZXcuIERlcHRoIDEgc2hvd3MgaW1tZWRpYXRlIGNoaWxkcmVuLCBkZXB0aCAyIGluY2x1ZGVzIHN1YmRpcmVjdG9yaWVzLCBldGMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byBsaXN0IChkZWZhdWx0cyB0byB3b3JraW5nIGRpcmVjdG9yeSlcIiksXG4gICAgICBkZXB0aDogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiTWF4aW11bSBkZXB0aCB0byB0cmF2ZXJzZS4gQ2hvb3NlIGJhc2VkIG9uIGNvbnRleHQ6IDEtMiBmb3IgcXVpY2sgb3ZlcnZpZXcsIDMtNCBmb3IgZGV0YWlsZWQgZXhwbG9yYXRpb24sIDUrIGZvciBjb21wcmVoZW5zaXZlIG1hcHBpbmdcIlxuICAgICAgICApLFxuICAgICAgaW5jbHVkZUhpZGRlbjogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJJbmNsdWRlIGhpZGRlbiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKHRob3NlIHN0YXJ0aW5nIHdpdGggJy4nKVwiXG4gICAgICAgICksXG4gICAgICBmaWxlc09ubHk6IHpcbiAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAgICAgLmRlc2NyaWJlKFwiT25seSBzaG93IGZpbGVzLCBub3QgZGlyZWN0b3JpZXNcIiksXG4gICAgICBwYXR0ZXJuOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXCJHbG9iIHBhdHRlcm4gdG8gZmlsdGVyIHJlc3VsdHMgKGUuZy4sICcqLnRzJywgJyp0ZXN0KicpXCIpLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGlzdGluZzogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiRGlyZWN0b3J5IHRyZWUgbGlzdGluZyBzaG93aW5nIHBhdGhzIHJlbGF0aXZlIHRvIHNlYXJjaCByb290XCJcbiAgICAgICAgKSxcbiAgICAgIHN1bW1hcnk6IHoub2JqZWN0KHtcbiAgICAgICAgdG90YWxJdGVtczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBpdGVtcyBmb3VuZFwiKSxcbiAgICAgICAgdG90YWxGaWxlczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBmaWxlcyBmb3VuZFwiKSxcbiAgICAgICAgdG90YWxEaXJzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVG90YWwgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGZvdW5kXCIpLFxuICAgICAgICBzZWFyY2hQYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0aGF0IHdhcyBsaXN0ZWRcIiksXG4gICAgICAgIGRlcHRoOiB6XG4gICAgICAgICAgLm51bWJlcigpXG4gICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIGRlcHRoIHVzZWQgKGlmIHNwZWNpZmllZClcIiksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG4gIFdyaXRlOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiV3JpdGUgY29udGVudCB0byBhIGZpbGUuIENyZWF0ZXMgcGFyZW50IGRpcmVjdG9yaWVzIGF1dG9tYXRpY2FsbHkuIE92ZXJ3cml0ZXMgZXhpc3RpbmcgZmlsZXMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29udGVudCB0byB3cml0ZSB0byB0aGUgZmlsZVwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgd3JpdGUgc3VjY2VlZGVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdG8gdGhlIHdyaXR0ZW4gZmlsZVwiKSxcbiAgICAgIGJ5dGVzV3JpdHRlbjogei5udW1iZXIoKS5kZXNjcmliZShcIk51bWJlciBvZiBieXRlcyB3cml0dGVuXCIpLFxuICAgICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVycm9yIG1lc3NhZ2UgaWYgd3JpdGUgZmFpbGVkXCIpLFxuICAgIH0pLFxuICB9KSxcbiAgRWRpdDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkVkaXQgYSBmaWxlIGJ5IHJlcGxhY2luZyBhbiBleGFjdCBzdHJpbmcuIEZhaWxzIGlmIG9sZF9zdHJpbmcgaXMgbm90IGZvdW5kIG9yIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgKG5vdCB1bmlxdWUpLiBGb3IgbXVsdGlwbGUgcmVwbGFjZW1lbnRzLCBjYWxsIHRoaXMgdG9vbCBtdWx0aXBsZSB0aW1lcyB3aXRoIHVuaXF1ZSBjb250ZXh0LlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXCIpLFxuICAgICAgb2xkX3N0cmluZzogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiRXhhY3Qgc3RyaW5nIHRvIGZpbmQgYW5kIHJlcGxhY2UgKG11c3QgYmUgdW5pcXVlIGluIGZpbGUpXCIpLFxuICAgICAgbmV3X3N0cmluZzogei5zdHJpbmcoKS5kZXNjcmliZShcIlN0cmluZyB0byByZXBsYWNlIG9sZF9zdHJpbmcgd2l0aFwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgZWRpdCBzdWNjZWVkZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0byB0aGUgZWRpdGVkIGZpbGVcIiksXG4gICAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRXJyb3IgbWVzc2FnZSBpZiBlZGl0IGZhaWxlZFwiKSxcbiAgICB9KSxcbiAgfSksXG4gIEJhc2g6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJFeGVjdXRlcyBhIGJhc2ggY29tbWFuZC4gUmV0dXJucyBzdGRvdXQgYW5kIHN0ZGVyciBzZXBhcmF0ZWx5LiBVc2Ugd2FpdFVudGlsIHRvIGNvbnRyb2wgaG93IGxvbmcgdG8gd2FpdCAoMCA9IHJldHVybiBpbW1lZGlhdGVseSwgcHJvY2VzcyBrZWVwcyBydW5uaW5nKS4gTGFyZ2Ugb3V0cHV0cyBhcmUgdGFpbC10cnVuY2F0ZWQ7IGZ1bGwgb3V0cHV0IGluIG91dHB1dERpci5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBjb21tYW5kOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZVwiKSxcbiAgICAgIHdhaXRVbnRpbDogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIGBNYXggbXMgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAoZGVmYXVsdDogJHtERUZBVUxUX1dBSVRfVU5USUx9KS4gVXNlIDAgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IHdoaWxlIHRoZSBwcm9jZXNzIGtlZXBzIHJ1bm5pbmcuYFxuICAgICAgICApLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgY29tbWFuZElkOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJDb21tYW5kIElELiBVc2UgdG8gcmVmZXJlbmNlIG9yIGtpbGwgcnVubmluZyBwcm9jZXNzZXMuXCIpLFxuICAgICAgc3Rkb3V0OiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJDb21tYW5kIHN0ZG91dC4gVGFpbC10cnVuY2F0ZWQgaWYgbGFyZ2U7IGZ1bGwgY29udGVudCBpbiBvdXRwdXREaXIvc3Rkb3V0LnR4dC5cIlxuICAgICAgICApLFxuICAgICAgc3RkZXJyOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJDb21tYW5kIHN0ZGVyci4gVGFpbC10cnVuY2F0ZWQgaWYgbGFyZ2U7IGZ1bGwgY29udGVudCBpbiBvdXRwdXREaXIvc3RkZXJyLnR4dC5cIlxuICAgICAgICApLFxuICAgICAgZXhpdENvZGU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJFeGl0IGNvZGUgKC0xIGlmIHN0aWxsIHJ1bm5pbmcpXCIpLFxuICAgICAgc3RhdHVzOiB6XG4gICAgICAgIC5lbnVtKFtcInJ1bm5pbmdcIiwgXCJjb21wbGV0ZWRcIiwgXCJmYWlsZWRcIl0pXG4gICAgICAgIC5kZXNjcmliZShcIlByb2Nlc3Mgc3RhdHVzXCIpLFxuICAgICAgb3V0cHV0RGlyOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJQYXRoIHRvIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBzdGRvdXQudHh0LCBzdGRlcnIudHh0LCBhbmQgbWV0YWRhdGEuanNvbi4gRW1wdHkgaWYgc3RpbGwgcnVubmluZy5cIlxuICAgICAgICApLFxuICAgIH0pLFxuICB9KSxcbiAgU2tpbGw6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJMb2FkIGEgc2tpbGwncyBmdWxsIGluc3RydWN0aW9ucyBieSBuYW1lLiBDYWxsIHRoaXMgYmVmb3JlIGZvbGxvd2luZyBhIHNraWxsLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTa2lsbCBuYW1lIGZyb20gdGhlIEF2YWlsYWJsZSBTa2lsbHMgbGlzdFwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJGdWxsIFNLSUxMLm1kIGNvbnRlbnRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0byB0aGUgc2tpbGwgZGlyZWN0b3J5IGluIHRoZSBzYW5kYm94XCIpLFxuICAgIH0pLFxuICB9KSxcbiAgSmF2YVNjcmlwdDogdG9vbCh7XG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgY29kZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiSmF2YVNjcmlwdCBhc3luYyBmdW5jdGlvbiBib2R5LiBgY3R4YCBpcyBpbiBzY29wZS4gTXVzdCB1c2UgYHJldHVybmAgdG8gcHJvZHVjZSBvdXRwdXQuXCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgfSksXG59IHNhdGlzZmllcyBUb29sU2V0O1xuXG5leHBvcnQgdHlwZSBCdWlsdEluVG9vbE5hbWUgPSBrZXlvZiB0eXBlb2YgYnVpbHRJblRvb2xzO1xuZXhwb3J0IGNvbnN0IGJ1aWx0aW5Ub29sTmFtZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIE9iamVjdC5lbnRyaWVzKGJ1aWx0SW5Ub29scykubWFwKChbbmFtZV0pID0+IFtuYW1lLCBuYW1lXSlcbikgYXMgeyBbSyBpbiBCdWlsdEluVG9vbE5hbWVdOiBLIH07XG5cbmNvbnN0IFNLSUxMX01EX1NVRkZJWCA9IC9cXC8/U0tJTExcXC5tZCQvO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHMoe1xuICBhZ2VudCxcbiAgc2FuZGJveCxcbiAgc2tpbGxzUmVmLFxuICB3cml0ZXIsXG4gIGFib3J0Q29udHJvbGxlcixcbiAgbmV4dFBhcnRJbmRleFJlZixcbiAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICBzZXNzaW9uSWQsXG4gIHN0ZXBMb2csXG4gIGNvbnRleHQsXG4gIHN0YXRlLFxuICBtZXNzYWdlcyxcbiAgYWN0aXZlVG9vbHMsXG59OiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNSZWY6IHsgY3VycmVudDogU2tpbGxTdW1tYXJ5W10gfTtcbiAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICBuZXh0UGFydEluZGV4UmVmOiB7IGN1cnJlbnQ6IG51bWJlciB9O1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0ZXBMb2c6IExvZ2dlcjtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWVzc2FnZXM6IFVJTWVzc2FnZVtdO1xuICBhY3RpdmVUb29scz86IHN0cmluZ1tdO1xufSk6IHtcbiAgcmF3VG9vbHM6IFRvb2xTZXQ7XG4gIHRvb2xzV2l0aE5lZWRzQXBwcm92YWw6IFRvb2xTZXQ7XG4gIHRvb2xDb250ZXh0OiBUb29sQ29udGV4dDtcbn0ge1xuICBjb25zdCByYXdUb29sczogVG9vbFNldCA9IHtcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5SZWFkXTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuUmVhZCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIHN0YXJ0TGluZSwgZW5kTGluZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LnJlYWRGaWxlKHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiUmVhZCBmYWlsZWRcIiwgeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBgRXJyb3I6IEZpbGUgbm90IGZvdW5kIC0gJHtmaWxlUGF0aH1gLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdG90YWxMaW5lczogMCxcbiAgICAgICAgICAgICAgbGluZXNTaG93bjogMCxcbiAgICAgICAgICAgICAgc3RhcnRMaW5lOiAwLFxuICAgICAgICAgICAgICBlbmRMaW5lOiAwLFxuICAgICAgICAgICAgICBpc1BhZ2luYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiBcIjBcIixcbiAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsQ29udGVudCA9IHJlc3VsdC50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGZ1bGxDb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAvLyBBIHRyYWlsaW5nIG5ld2xpbmUgcHJvZHVjZXMgYW4gZW1wdHkgbGFzdCBlbGVtZW50IFx1MjAxNCByZW1vdmUgaXRcbiAgICAgICAgLy8gc28gbGluZSBjb3VudCBtYXRjaGVzIGB3YyAtbGAgLyBgYXdrICdFTkR7cHJpbnQgTlJ9J2AgYmVoYXZpb3IuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwICYmIGxpbmVzLmF0KC0xKSA9PT0gXCJcIikge1xuICAgICAgICAgIGxpbmVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsTGluZXMgPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZpbGVCeXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGZ1bGxDb250ZW50KTtcbiAgICAgICAgY29uc3QgZmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZShmaWxlQnl0ZXMpO1xuXG4gICAgICAgIC8vIERldGVybWluZSByYW5nZVxuICAgICAgICBjb25zdCBQQUdFX1NJWkUgPSAxMDA7XG4gICAgICAgIGxldCBhY3R1YWxTdGFydDogbnVtYmVyO1xuICAgICAgICBsZXQgYWN0dWFsRW5kOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHN0YXJ0TGluZSAhPT0gdW5kZWZpbmVkICYmIGVuZExpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gc3RhcnRMaW5lO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IGVuZExpbmU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnRMaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IHN0YXJ0TGluZTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSBNYXRoLm1pbihzdGFydExpbmUgKyBQQUdFX1NJWkUgLSAxLCB0b3RhbExpbmVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbmRMaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IDE7XG4gICAgICAgICAgYWN0dWFsRW5kID0gZW5kTGluZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3RhbExpbmVzID4gMjAwKSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSAxO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IFBBR0VfU0laRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IDE7XG4gICAgICAgICAgYWN0dWFsRW5kID0gdG90YWxMaW5lcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgKDEtaW5kZXhlZClcbiAgICAgICAgY29uc3Qgc2xpY2VkTGluZXMgPSBsaW5lcy5zbGljZShhY3R1YWxTdGFydCAtIDEsIGFjdHVhbEVuZCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzbGljZWRMaW5lcy5qb2luKFwiXFxuXCIpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRvdGFsTGluZXMsXG4gICAgICAgICAgICBsaW5lc1Nob3duOiBNYXRoLm1heCgwLCBhY3R1YWxFbmQgLSBhY3R1YWxTdGFydCArIDEpLFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBhY3R1YWxTdGFydCxcbiAgICAgICAgICAgIGVuZExpbmU6IGFjdHVhbEVuZCxcbiAgICAgICAgICAgIGlzUGFnaW5hdGVkOiBhY3R1YWxFbmQgPCB0b3RhbExpbmVzLFxuICAgICAgICAgICAgZmlsZVNpemUsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkdyZXBdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5HcmVwLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHtcbiAgICAgICAgcGF0dGVybixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIGdsb2IsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNvbnRleHRMaW5lcyxcbiAgICAgICAgbWF4Q291bnQsXG4gICAgICAgIGZpbGVzV2l0aE1hdGNoZXMsXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhdGggPSBwYXRoID8/IFwiLlwiO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgYXJncy5wdXNoKFwiLS1saW5lLW51bWJlclwiKTtcbiAgICAgICAgYXJncy5wdXNoKFwiLS1oZWFkaW5nXCIpO1xuICAgICAgICBhcmdzLnB1c2goXCItLWNvbG9yXCIsIFwibmV2ZXJcIik7XG5cbiAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLWlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZVR5cGUpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLXR5cGVcIiwgZmlsZVR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdsb2IpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLWdsb2JcIiwgZ2xvYik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItQ1wiLCBTdHJpbmcoY29udGV4dExpbmVzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi0tbWF4LWNvdW50XCIsIFN0cmluZyhtYXhDb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzV2l0aE1hdGNoZXMpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLWZpbGVzLXdpdGgtbWF0Y2hlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MucHVzaChcIi0tXCIsIHBhdHRlcm4sIHNlYXJjaFBhdGgpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoeyBjb21tYW5kOiBcInJnXCIsIGFyZ3MgfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yICYmIGlzUmdOb3RGb3VuZEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgICBsb2cud2FybihcInJnIG5vdCBmb3VuZCwgaW5zdGFsbGluZyByaXBncmVwXCIpO1xuICAgICAgICAgIGNvbnN0IGluc3RhbGxSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgICAgICAgICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIFwiLWNcIixcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiY29tbWFuZCAtdiByZyA+L2Rldi9udWxsIDI+JjEgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSByaXBncmVwIDI+L2Rldi9udWxsICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiKGFwdC1nZXQgdXBkYXRlIC1xcSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgLXFxIHJpcGdyZXApIDI+L2Rldi9udWxsICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiYXBrIGFkZCAtLW5vLWNhY2hlIHJpcGdyZXAgMj4vZGV2L251bGwgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCJjdXJsIC1zTCBodHRwczovL2dpdGh1Yi5jb20vQnVybnRTdXNoaS9yaXBncmVwL3JlbGVhc2VzL2Rvd25sb2FkLzE0LjEuMS9yaXBncmVwLTE0LjEuMS14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neiB8IHRhciB4eiAtQyAvdG1wICYmIGluc3RhbGwgL3RtcC9yaXBncmVwLTE0LjEuMS14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsL3JnIC91c3IvbG9jYWwvYmluL3JnICYmIHJtIC1yZiAvdG1wL3JpcGdyZXAtMTQuMS4xLXg4Nl82NC11bmtub3duLWxpbnV4LW11c2xcIixcbiAgICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCEoaW5zdGFsbFJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbE91dHB1dCA9IGF3YWl0IGluc3RhbGxSZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgaWYgKGluc3RhbGxPdXRwdXQuZXhpdENvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJyaXBncmVwIGluc3RhbGwgZmFpbGVkXCIsIHtcbiAgICAgICAgICAgICAgICBzdGRlcnI6IGluc3RhbGxPdXRwdXQuc3RkZXJyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJyZ1wiLCBhcmdzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yICYmIGlzUmdOb3RGb3VuZEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgICBsb2cud2FybihcInJnIHVuYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gZ3JlcFwiKTtcbiAgICAgICAgICBjb25zdCBncmVwQXJncyA9IFtcIi1yblwiLCBcIi0tY29sb3I9bmV2ZXJcIl07XG4gICAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLWlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi1DXCIsIFN0cmluZyhjb250ZXh0TGluZXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1heENvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItbVwiLCBTdHJpbmcobWF4Q291bnQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbGVzV2l0aE1hdGNoZXMpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItbFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdsb2IpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goYC0taW5jbHVkZT0ke2dsb2J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWxlVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICAgICAgICAgICB0czogW1wiKi50c1wiLCBcIioudHN4XCIsIFwiKi5tdHNcIiwgXCIqLmN0c1wiXSxcbiAgICAgICAgICAgICAganM6IFtcIiouanNcIiwgXCIqLmpzeFwiLCBcIioubWpzXCIsIFwiKi5janNcIl0sXG4gICAgICAgICAgICAgIHB5OiBbXCIqLnB5XCJdLFxuICAgICAgICAgICAgICBydXN0OiBbXCIqLnJzXCJdLFxuICAgICAgICAgICAgICBnbzogW1wiKi5nb1wiXSxcbiAgICAgICAgICAgICAgamF2YTogW1wiKi5qYXZhXCJdLFxuICAgICAgICAgICAgICBtZDogW1wiKi5tZFwiXSxcbiAgICAgICAgICAgICAganNvbjogW1wiKi5qc29uXCJdLFxuICAgICAgICAgICAgICBjc3M6IFtcIiouY3NzXCJdLFxuICAgICAgICAgICAgICBodG1sOiBbXCIqLmh0bWxcIl0sXG4gICAgICAgICAgICAgIHlhbWw6IFtcIioueW1sXCIsIFwiKi55YW1sXCJdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0IG9mIGluY2x1ZGVNYXBbZmlsZVR5cGVdID8/IFtgKi4ke2ZpbGVUeXBlfWBdKSB7XG4gICAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goYC0taW5jbHVkZT0ke2V4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi0tXCIsIHBhdHRlcm4sIHNlYXJjaFBhdGgpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICAgICAgICBjb21tYW5kOiBcImdyZXBcIixcbiAgICAgICAgICAgIGFyZ3M6IGdyZXBBcmdzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiR3JlcCBmYWlsZWRcIiwgeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgcmVzdWx0LnJlc3VsdDtcblxuICAgICAgICBpZiAoc3RkZXJyICYmICFzdGRlcnIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIm5vIG1hdGNoZXNcIikpIHtcbiAgICAgICAgICBsb2cud2FybihcIkdyZXAgc3RkZXJyXCIsIHsgc3RkZXJyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ1bmNhdGUgb3V0cHV0IHRvIHByZXZlbnQgXCJpbnB1dCB0b28gbG9uZ1wiIGVycm9ycyAoNTBrIGNoYXJzIFx1MjI0OCAxMi41ayB0b2tlbnMpXG4gICAgICAgIGNvbnN0IE1BWF9HUkVQX09VVFBVVF9DSEFSUyA9IDUwXzAwMDtcbiAgICAgICAgbGV0IGZpbmFsT3V0cHV0ID0gc3Rkb3V0O1xuICAgICAgICBsZXQgd2FzVHJ1bmNhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChmaW5hbE91dHB1dC5sZW5ndGggPiBNQVhfR1JFUF9PVVRQVVRfQ0hBUlMpIHtcbiAgICAgICAgICBmaW5hbE91dHB1dCA9XG4gICAgICAgICAgICBmaW5hbE91dHB1dC5zbGljZSgwLCBNQVhfR1JFUF9PVVRQVVRfQ0hBUlMpICtcbiAgICAgICAgICAgIFwiXFxuXFxuW091dHB1dCB0cnVuY2F0ZWQgLSB1c2UgbW9yZSBzcGVjaWZpYyBwYXR0ZXJuIG9yIHBhdGhdXCI7XG4gICAgICAgICAgd2FzVHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVzID0gZmluYWxPdXRwdXRcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobCkgPT4gbC5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZmlsZUNvdW50ID0gZmlsZXNXaXRoTWF0Y2hlc1xuICAgICAgICAgID8gbGluZXMubGVuZ3RoXG4gICAgICAgICAgOiBuZXcgU2V0KFxuICAgICAgICAgICAgICBsaW5lc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGwpID0+ICFsLnN0YXJ0c1dpdGgoXCIgXCIpICYmIGwuaW5jbHVkZXMoXCI6XCIpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuc3BsaXQoXCI6XCIpWzBdKVxuICAgICAgICAgICAgKS5zaXplO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgICAgbWF0Y2hDb3VudDogZmlsZXNXaXRoTWF0Y2hlc1xuICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgOiBsaW5lcy5maWx0ZXIoKGwpID0+IGwuaW5jbHVkZXMoXCI6XCIpKS5sZW5ndGgsXG4gICAgICAgICAgICBmaWxlQ291bnQsXG4gICAgICAgICAgICBzZWFyY2hQYXRoLFxuICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgIHdhc1RydW5jYXRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hdGNoZXM6IGZpbmFsT3V0cHV0IHx8IFwiKG5vIG1hdGNoZXMgZm91bmQpXCIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkxpc3RdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5MaXN0LFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGF0aCwgZGVwdGgsIGluY2x1ZGVIaWRkZW4sIGZpbGVzT25seSwgcGF0dGVybiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhdGggPSBwYXRoID8/IFwiLlwiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICAgICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgXCItY1wiLFxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgc2V0IC1lXG4gICAgICAgICAgICBTRUFSQ0hfUEFUSD1cIiQxXCJcbiAgICAgICAgICAgIERFUFRIPVwiJDJcIlxuICAgICAgICAgICAgSU5DTFVERV9ISURERU49XCIkM1wiXG4gICAgICAgICAgICBGSUxFU19PTkxZPVwiJDRcIlxuICAgICAgICAgICAgUEFUVEVSTj1cIiQ1XCJcblxuICAgICAgICAgICAgIyBCdWlsZCBmaW5kIGNvbW1hbmQgYXJndW1lbnRzXG4gICAgICAgICAgICBGSU5EX0FSR1M9XCJcIlxuICAgICAgICAgICAgWyAtbiBcIiRERVBUSFwiIF0gJiYgRklORF9BUkdTPVwiJEZJTkRfQVJHUyAtbWF4ZGVwdGggJERFUFRIXCJcbiAgICAgICAgICAgIFsgXCIkSU5DTFVERV9ISURERU5cIiAhPSBcInRydWVcIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgISAtcGF0aCAnKi8uKidcIlxuICAgICAgICAgICAgWyBcIiRGSUxFU19PTkxZXCIgPSBcInRydWVcIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgLXR5cGUgZlwiXG4gICAgICAgICAgICBbIC1uIFwiJFBBVFRFUk5cIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgLW5hbWUgJyRQQVRURVJOJ1wiXG5cbiAgICAgICAgICAgICMgR2V0IGxpc3RpbmdcbiAgICAgICAgICAgIExJU1RJTkc9JChldmFsIFwiZmluZCAnJFNFQVJDSF9QQVRIJyAkRklORF9BUkdTXCIgMj4vZGV2L251bGwgfCBzb3J0KVxuXG4gICAgICAgICAgICAjIEdldCBjb3VudHNcbiAgICAgICAgICAgIENPVU5UX0FSR1M9XCJcIlxuICAgICAgICAgICAgWyAtbiBcIiRERVBUSFwiIF0gJiYgQ09VTlRfQVJHUz1cIiRDT1VOVF9BUkdTIC1tYXhkZXB0aCAkREVQVEhcIlxuICAgICAgICAgICAgWyBcIiRJTkNMVURFX0hJRERFTlwiICE9IFwidHJ1ZVwiIF0gJiYgQ09VTlRfQVJHUz1cIiRDT1VOVF9BUkdTICEgLXBhdGggJyovLionXCJcblxuICAgICAgICAgICAgRklMRV9DT1VOVD0kKGV2YWwgXCJmaW5kICckU0VBUkNIX1BBVEgnICRDT1VOVF9BUkdTIC10eXBlIGZcIiAyPi9kZXYvbnVsbCB8IHdjIC1sKVxuICAgICAgICAgICAgRElSX0NPVU5UPSQoZXZhbCBcImZpbmQgJyRTRUFSQ0hfUEFUSCcgJENPVU5UX0FSR1MgLXR5cGUgZFwiIDI+L2Rldi9udWxsIHwgd2MgLWwpXG5cbiAgICAgICAgICAgICMgT3V0cHV0OiBjb3VudHMgZmlyc3QsIHRoZW4gbGlzdGluZ1xuICAgICAgICAgICAgZWNobyBcIiRGSUxFX0NPVU5UfCRESVJfQ09VTlRcIlxuICAgICAgICAgICAgZWNobyBcInx8fExJU1RJTkd8fHxcIlxuICAgICAgICAgICAgZWNobyBcIiRMSVNUSU5HXCIgfCBzZWQgXCJzfF4kU0VBUkNIX1BBVEh8LnxcIlxuICAgICAgICAgIGAsXG4gICAgICAgICAgICBcIi0tXCIsXG4gICAgICAgICAgICBzZWFyY2hQYXRoLFxuICAgICAgICAgICAgZGVwdGg/LnRvU3RyaW5nKCkgfHwgXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVIaWRkZW4gPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIGZpbGVzT25seSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgcGF0dGVybiB8fCBcIlwiLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGxvZy5lcnJvcihcIkxpc3QgZmFpbGVkXCIsIHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IGF3YWl0IHJlc3VsdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIGxvZy53YXJuKFwiTGlzdCBzdGRlcnJcIiwgeyBzdGRlcnIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbY291bnRzTGluZSwgLi4ucmVzdF0gPSBzdGRvdXQuc3BsaXQoXCJ8fHxMSVNUSU5HfHx8XCIpO1xuICAgICAgICBjb25zdCBsaXN0aW5nID0gcmVzdC5qb2luKFwifHx8TElTVElOR3x8fFwiKS50cmltKCk7XG4gICAgICAgIGNvbnN0IFtmaWxlQ291bnRTdHIsIGRpckNvdW50U3RyXSA9IGNvdW50c0xpbmUudHJpbSgpLnNwbGl0KFwifFwiKTtcblxuICAgICAgICBjb25zdCB0b3RhbEZpbGVzID0gTnVtYmVyLnBhcnNlSW50KGZpbGVDb3VudFN0ciwgMTApIHx8IDA7XG4gICAgICAgIGNvbnN0IHRvdGFsRGlycyA9IE51bWJlci5wYXJzZUludChkaXJDb3VudFN0ciwgMTApIHx8IDA7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gbGlzdGluZy5zcGxpdChcIlxcblwiKS5maWx0ZXIoKGwpID0+IGwubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiBsaW5lcy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgICAgICAgdG90YWxEaXJzLFxuICAgICAgICAgICAgc2VhcmNoUGF0aCxcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGlzdGluZyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuV3JpdGVdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5Xcml0ZSxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIGNvbnRlbnQgfSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGg7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5kYm94LndyaXRlRmlsZXMoe1xuICAgICAgICAgICAgZmlsZXM6IFt7IHBhdGg6IGZpbGVQYXRoLCBjb250ZW50IH1dLFxuICAgICAgICAgICAgZGVzdFBhdGg6IFwiLlwiLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGJ5dGVzV3JpdHRlbjogQnVmZmVyLmJ5dGVMZW5ndGgoY29udGVudCwgXCJ1dGY4XCIpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgYnl0ZXNXcml0dGVuOiAwLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yTXNnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuRWRpdF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkVkaXQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXRoLCBvbGRfc3RyaW5nLCBuZXdfc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3gucmVhZEZpbGUoeyBwYXRoOiBmaWxlUGF0aCB9KTtcblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgcGF0aDogZmlsZVBhdGgsIGVycm9yOiByZXN1bHQubWVzc2FnZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgZXJyb3I6IGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzdWx0LnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gY29udGVudC5zcGxpdChvbGRfc3RyaW5nKS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChvY2N1cnJlbmNlcyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgZXJyb3I6IFwib2xkX3N0cmluZyBub3QgZm91bmQgaW4gZmlsZVwiLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2NjdXJyZW5jZXMgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBlcnJvcjogYG9sZF9zdHJpbmcgYXBwZWFycyAke29jY3VycmVuY2VzfSB0aW1lcyBpbiBmaWxlIChtdXN0IGJlIHVuaXF1ZSkuIEluY2x1ZGUgbW9yZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIG1ha2UgdGhlIG1hdGNoIHVuaXF1ZS5gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gY29udGVudC5yZXBsYWNlKG9sZF9zdHJpbmcsIG5ld19zdHJpbmcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICAgICAgICAgIGZpbGVzOiBbeyBwYXRoOiBmaWxlUGF0aCwgY29udGVudDogbmV3Q29udGVudCB9XSxcbiAgICAgICAgICAgIGRlc3RQYXRoOiBcIi5cIixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGZpbGVQYXRoIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBwYXRoOiBmaWxlUGF0aCwgZXJyb3I6IGVycm9yTXNnIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuQmFzaF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkJhc2gsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBjb21tYW5kLCB3YWl0VW50aWwgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAgICAgXCIuLi9zYW5kYm94L3Byb2Nlc3MtbWFuYWdlclwiXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc01hbmFnZXIgPSBjcmVhdGVQcm9jZXNzTWFuYWdlcih7IHNhbmRib3ggfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvY2Vzc01hbmFnZXIucnVuKHsgY29tbWFuZCwgd2FpdFVudGlsIH0pO1xuXG4gICAgICAgIGNvbnN0IE1BWF9TVERPVVQgPSA1MF8wMDA7XG4gICAgICAgIGNvbnN0IE1BWF9TVERFUlIgPSAxMF8wMDA7XG5cbiAgICAgICAgbGV0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IHJlc3VsdDtcbiAgICAgICAgaWYgKHN0ZG91dC5sZW5ndGggPiBNQVhfU1RET1VUKSB7XG4gICAgICAgICAgc3Rkb3V0ID1cbiAgICAgICAgICAgIGBbdHJ1bmNhdGVkIFx1MjAxNCBzaG93aW5nIGxhc3QgJHtNQVhfU1RET1VUfSBjaGFycy4gRnVsbDogJHtyZXN1bHQub3V0cHV0RGlyfS9zdGRvdXQudHh0XVxcblxcbmAgK1xuICAgICAgICAgICAgc3Rkb3V0LnNsaWNlKC1NQVhfU1RET1VUKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyLmxlbmd0aCA+IE1BWF9TVERFUlIpIHtcbiAgICAgICAgICBzdGRlcnIgPVxuICAgICAgICAgICAgYFt0cnVuY2F0ZWQgXHUyMDE0IHNob3dpbmcgbGFzdCAke01BWF9TVERFUlJ9IGNoYXJzLiBGdWxsOiAke3Jlc3VsdC5vdXRwdXREaXJ9L3N0ZGVyci50eHRdXFxuXFxuYCArXG4gICAgICAgICAgICBzdGRlcnIuc2xpY2UoLU1BWF9TVERFUlIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4ucmVzdWx0LCBzdGRvdXQsIHN0ZGVyciB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgfTtcblxuICAvLyBBZGQgdXNlci1kZWZpbmVkIHRvb2xzXG4gIGZvciAoY29uc3QgW25hbWUsIHRdIG9mIE9iamVjdC5lbnRyaWVzKGFnZW50Lm9wdGlvbnMudG9vbHMgPz8ge30pKSB7XG4gICAgcmF3VG9vbHNbbmFtZV0gPSB0IGFzIFRvb2xTZXRbc3RyaW5nXTtcbiAgfVxuXG4gIGlmIChza2lsbHNSZWYuY3VycmVudC5sZW5ndGggPiAwKSB7XG4gICAgcmF3VG9vbHNbYnVpbHRpblRvb2xOYW1lcy5Ta2lsbF0gPSB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5Ta2lsbCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IG5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBza2lsbHMgPSBza2lsbHNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3Qgc2tpbGwgPSBza2lsbHMuZmluZChcbiAgICAgICAgICAocykgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNraWxsIG5vdCBmb3VuZDogXCIke25hbWV9XCIuIEF2YWlsYWJsZTogJHtza2lsbHMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LnJlYWRGaWxlKHtcbiAgICAgICAgICBwYXRoOiBza2lsbC5za2lsbE1kUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTa2lsbCBmaWxlIG5vdCBmb3VuZDogJHtza2lsbC5za2lsbE1kUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYXcgPVxuICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIgPyByZXN1bHQgOiByZXN1bHQudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3QgZW5kTWFya2VyID0gcmF3LmluZGV4T2YoXCItLS1cIiwgMyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgICAgIGVuZE1hcmtlciA9PT0gLTEgPyByYXcgOiByYXcuc2xpY2UoZW5kTWFya2VyICsgMykudHJpbSgpO1xuICAgICAgICBjb25zdCBza2lsbERpciA9IHNraWxsLnNraWxsTWRQYXRoLnJlcGxhY2UoU0tJTExfTURfU1VGRklYLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBza2lsbC5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBza2lsbC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIHBhdGg6IHNraWxsRGlyLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG9uU3ViVG9vbENhbGw6IE9uU3ViVG9vbENhbGwgPSBhc3luYyAodG9vbE5hbWUsIHRvb2xJbnB1dCwgZXhlY3V0ZSkgPT4ge1xuICAgIGNvbnN0IG5lZWRzQXBwcm92YWwgPSBhd2FpdCBjaGVja05lZWRzQXBwcm92YWwoe1xuICAgICAgYWdlbnQsXG4gICAgICB0b29sTmFtZSxcbiAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICB0b29sQ2FsbElkOiBganNfJHt0b29sTmFtZX1fJHtEYXRlLm5vdygpfWAsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBpZiAoIW5lZWRzQXBwcm92YWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcHJvdmFsSWQgPSBganNfYXBwcm92YWxfJHt1bGlkKCl9YDtcbiAgICBjb25zdCB0b29sQ2FsbElkID0gYGpzX3RjXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgcGFydElkID0gYXBwcm92YWxQYXJ0SWQoYXBwcm92YWxJZCk7XG5cbiAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHBhcnRJZCwge1xuICAgICAgaWQ6IHBhcnRJZCxcbiAgICAgIGluZGV4OiBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQrKyxcbiAgICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGFydDoge1xuICAgICAgICB0eXBlOiBgdG9vbC0ke3Rvb2xOYW1lfWAsXG4gICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgIHN0YXRlOiBcImFwcHJvdmFsLXJlcXVlc3RlZFwiLFxuICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICBhcHByb3ZhbDogeyBpZDogYXBwcm92YWxJZCB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl0sXG4gICAgfSk7XG5cbiAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgdHlwZTogXCJ0b29sLWlucHV0LXN0YXJ0XCIsXG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgdG9vbE5hbWUsXG4gICAgfSk7XG4gICAgd3JpdGVyLndyaXRlKHtcbiAgICAgIHR5cGU6IFwidG9vbC1pbnB1dC1hdmFpbGFibGVcIixcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgICB0b29sTmFtZSxcbiAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgfSk7XG4gICAgd3JpdGVyLndyaXRlKHtcbiAgICAgIHR5cGU6IFwidG9vbC1hcHByb3ZhbC1yZXF1ZXN0XCIsXG4gICAgICBhcHByb3ZhbElkLFxuICAgICAgdG9vbENhbGxJZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IFBPTExfTVMgPSA1MDA7XG4gICAgY29uc3QgVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IFRJTUVPVVRfTVMgJiYgIWFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5nZXQocGFydElkKTtcbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlZCAmJlxuICAgICAgICBcInN0YXRlXCIgaW4gdXBkYXRlZC5wYXJ0ICYmXG4gICAgICAgICgodXBkYXRlZC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXNwb25kZWRcIiB8fFxuICAgICAgICAgICh1cGRhdGVkLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcIm91dHB1dC1kZW5pZWRcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9ICh1cGRhdGVkLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlO1xuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gXCJvdXRwdXQtZGVuaWVkXCIpIHtcbiAgICAgICAgICBjb25zdCByZWFzb24gPSAodXBkYXRlZC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IHJlYXNvbj86IHN0cmluZyB9IH0pXG4gICAgICAgICAgICAuYXBwcm92YWw/LnJlYXNvbjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IGBUb29sIFwiJHt0b29sTmFtZX1cIiBkZW5pZWQ6ICR7cmVhc29uIHx8IFwidXNlciBkZW5pZWRcIn1gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHByb3ZhbCA9IChcbiAgICAgICAgICB1cGRhdGVkLnBhcnQgYXMge1xuICAgICAgICAgICAgYXBwcm92YWw/OiB7IGFwcHJvdmVkOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICkuYXBwcm92YWw7XG4gICAgICAgIGlmIChhcHByb3ZhbD8uYXBwcm92ZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSgpO1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgb3V0cHV0OiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWVycm9yXCIsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIGVycm9yVGV4dDogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogYFRvb2wgXCIke3Rvb2xOYW1lfVwiIGRlbmllZDogJHthcHByb3ZhbD8ucmVhc29uIHx8IFwidXNlciBkZW5pZWRcIn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgUE9MTF9NUykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgID8gXCJpbnRlcnJ1cHRlZFwiXG4gICAgICAgIDogXCJBcHByb3ZhbCB0aW1lZCBvdXRcIixcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHRvb2xDb250ZXh0OiBUb29sQ29udGV4dCA9IHtcbiAgICBjb250ZXh0LFxuICAgIHN0YXRlLFxuICAgIHNlc3Npb25JZCxcbiAgICBzYW5kYm94LFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyBUb29sQ29udGV4dFtcIm1lc3NhZ2VzXCJdLFxuICB9O1xuXG4gIHJhd1Rvb2xzW2J1aWx0aW5Ub29sTmFtZXMuSmF2YVNjcmlwdF0gPSBjcmVhdGVKYXZhU2NyaXB0VG9vbCh7XG4gICAgdG9vbHM6IHJhd1Rvb2xzLFxuICAgIHNhbmRib3gsXG4gICAgYWN0aXZlVG9vbHMsXG4gICAgb25TdWJUb29sQ2FsbCxcbiAgICB0b29sQ29udGV4dCxcbiAgfSk7XG5cbiAgY29uc3QgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyYXdUb29scykubWFwKChbbmFtZSwgdF0pID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXhlY3V0ZSA9IHQuZXhlY3V0ZTtcbiAgICAgIGNvbnN0IHdyYXBwZWRFeGVjdXRlID0gb3JpZ2luYWxFeGVjdXRlXG4gICAgICAgID8gYXN5bmMgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIG9yaWdpbmFsRXhlY3V0ZT4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBzdGVwTG9nLnRpbWUoYHRvb2w6JHtuYW1lfWApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbGV0IHRvb2xJbnB1dCA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIGlmIChhZ2VudC5ob29rc1tcInRvb2wuYmVmb3JlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUmVzdWx0ID0gYXdhaXQgYWdlbnQuaG9va3NbXCJ0b29sLmJlZm9yZVwiXSh7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVSZXN1bHQ/LmlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRvb2xJbnB1dCA9IGJlZm9yZVJlc3VsdC5pbnB1dDtcbiAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB0b29sSW5wdXQgYXMgKHR5cGVvZiBhcmdzKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgb3JpZ2luYWxFeGVjdXRlKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgIGlmIChhZ2VudC5ob29rc1tcInRvb2wuYWZ0ZXJcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclJlc3VsdCA9IGF3YWl0IGFnZW50Lmhvb2tzW1widG9vbC5hZnRlclwiXSh7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlclJlc3VsdD8ucmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFmdGVyUmVzdWx0LnJlc3VsdCBhcyB0eXBlb2YgcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZG9uZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLih3cmFwcGVkRXhlY3V0ZSA/IHsgZXhlY3V0ZTogd3JhcHBlZEV4ZWN1dGUgfSA6IHt9KSxcbiAgICAgICAgICBuZWVkc0FwcHJvdmFsOiBhc3luYyAoXG4gICAgICAgICAgICB0b29sSW5wdXQ6IHVua25vd24sXG4gICAgICAgICAgICBvcHRzOiB7IHRvb2xDYWxsSWQ6IHN0cmluZzsgbWVzc2FnZXM6IHVua25vd25bXSB9XG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY2hlY2tOZWVkc0FwcHJvdmFsKHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHRvb2xOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBvcHRzLnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiBvcHRzLm1lc3NhZ2VzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4geyByYXdUb29scywgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCwgdG9vbENvbnRleHQgfTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIFRvb2xTZXQsIHRvb2wgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IGJ1aWx0SW5Ub29scyB9IGZyb20gXCIuXCI7XG5cbmV4cG9ydCBjb25zdCBKQVZBU0NSSVBUX1RPT0xfTkFNRSA9IFwiSmF2YVNjcmlwdFwiO1xuXG5leHBvcnQgdHlwZSBTdWJUb29sQ2FsbFJlc3VsdCA9IHsgcmVzdWx0PzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIE9uU3ViVG9vbENhbGwgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIGlucHV0OiB1bmtub3duLFxuICBleGVjdXRlOiAoKSA9PiBQcm9taXNlPHVua25vd24+XG4pID0+IFByb21pc2U8U3ViVG9vbENhbGxSZXN1bHQ+O1xuXG5jb25zdCBSRVFVRVNUX01BUktFUl9TVEFSVCA9IFwiX19UT09MX1JFUVVFU1RfX1wiO1xuY29uc3QgUkVRVUVTVF9NQVJLRVJfRU5EID0gXCJfX1RPT0xfUkVRVUVTVF9FTkRfX1wiO1xuY29uc3QgRVhFQ1VUSU9OX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIFRoZSBydW5uZXIgc2NyaXB0IGlzIHdyaXR0ZW4gdG8gdGhlIHNhbmRib3ggYW5kIGV4ZWN1dGVkIHZpYSBOb2RlLmpzLlxuICogSXQgcmVhZHMgdGhlIG1vZGVsJ3MgY29kZSBmcm9tIGNvZGUuanMsIHNldHMgdXAgY3R4LnRvb2xzIGFzIFJQQyBwcm94aWVzXG4gKiAocmVxdWVzdHMgc2VudCB2aWEgc3RkZXJyIG1hcmtlcnMsIHJlc3BvbnNlcyBwb2xsZWQgZnJvbSBmaWxlcyksIGV4ZWN1dGVzXG4gKiB0aGUgY29kZSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHN0ZG91dCBhcyBKU09OLlxuICovXG5jb25zdCBSVU5ORVJfU0NSSVBUID0gYFxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jLCB1bmxpbmtTeW5jLCBta2RpclN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcblxuY29uc3QgU0NSSVBUX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmNvbnN0IFRPT0xfQ0FMTF9USU1FT1VUX01TID0gMzAwXzAwMDtcblxubGV0IHJlcUNvdW50ZXIgPSAwO1xuXG5hc3luYyBmdW5jdGlvbiBjYWxsVG9vbChuYW1lLCBpbnB1dCkge1xuICBjb25zdCBpZCA9ICdyZXFfJyArICgrK3JlcUNvdW50ZXIpICsgJ18nICsgRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVzcG9uc2VGaWxlID0gam9pbihTQ1JJUFRfRElSLCBpZCArICcucmVzcG9uc2UuanNvbicpO1xuXG4gIGNvbnN0IHJlcXVlc3QgPSBKU09OLnN0cmluZ2lmeSh7IGlkLCB0b29sOiBuYW1lLCBpbnB1dCB9KTtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJyR7UkVRVUVTVF9NQVJLRVJfU1RBUlR9JyArIHJlcXVlc3QgKyAnJHtSRVFVRVNUX01BUktFUl9FTkR9JyArICdcXFxcbicpO1xuXG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgd2hpbGUgKCFleGlzdHNTeW5jKHJlc3BvbnNlRmlsZSkpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gVE9PTF9DQUxMX1RJTUVPVVRfTVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9vbCBjYWxsICcgKyBuYW1lICsgJyB0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzcG9uc2UnKTtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDMwKSk7XG4gIH1cblxuICBsZXQgcmF3O1xuICB0cnkge1xuICAgIHJhdyA9IHJlYWRGaWxlU3luYyhyZXNwb25zZUZpbGUsICd1dGY4Jyk7XG4gIH0gY2F0Y2gge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgIHJhdyA9IHJlYWRGaWxlU3luYyhyZXNwb25zZUZpbGUsICd1dGY4Jyk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UocmF3KTtcbiAgdHJ5IHsgdW5saW5rU3luYyhyZXNwb25zZUZpbGUpOyB9IGNhdGNoIHt9XG5cbiAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UucmVzdWx0O1xufVxuXG5jb25zdCBjb2RlID0gcmVhZEZpbGVTeW5jKGpvaW4oU0NSSVBUX0RJUiwgJ2NvZGUuanMnKSwgJ3V0ZjgnKTtcbmNvbnN0IHRvb2xOYW1lcyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4oU0NSSVBUX0RJUiwgJ3Rvb2xzLmpzb24nKSwgJ3V0ZjgnKSk7XG5cbmNvbnN0IGN0eCA9IHsgdG9vbHM6IHt9IH07XG5mb3IgKGNvbnN0IG5hbWUgb2YgdG9vbE5hbWVzKSB7XG4gIGN0eC50b29sc1tuYW1lXSA9IChpbnB1dCkgPT4gY2FsbFRvb2wobmFtZSwgaW5wdXQpO1xufVxuXG5jb25zdCBsb2dzID0gW107XG5jb25zdCBjdXN0b21Db25zb2xlID0ge1xuICBsb2c6ICguLi5hcmdzKSA9PiBsb2dzLnB1c2goYXJncy5tYXAoYSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgPyBhIDogSlNPTi5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKSksXG4gIGVycm9yOiAoLi4uYXJncykgPT4gbG9ncy5wdXNoKCdbZXJyb3JdICcgKyBhcmdzLm1hcChhID0+IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBKU09OLnN0cmluZ2lmeShhKSkuam9pbignICcpKSxcbiAgd2FybjogKC4uLmFyZ3MpID0+IGxvZ3MucHVzaCgnW3dhcm5dICcgKyBhcmdzLm1hcChhID0+IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBKU09OLnN0cmluZ2lmeShhKSkuam9pbignICcpKSxcbn07XG5cbnRyeSB7XG4gIGNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24oKSB7fSkuY29uc3RydWN0b3I7XG4gIGNvbnN0IGZuID0gbmV3IEFzeW5jRnVuY3Rpb24oJ2N0eCcsICdjb25zb2xlJywgY29kZSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKGN0eCwgY3VzdG9tQ29uc29sZSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHJlc3VsdCAhPT0gdW5kZWZpbmVkID8gcmVzdWx0IDogbnVsbCB9O1xuICBpZiAobG9ncy5sZW5ndGggPiAwKSBvdXRwdXQubG9ncyA9IGxvZ3M7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpO1xufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnN0IG91dHB1dCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICB9O1xuICBpZiAobG9ncy5sZW5ndGggPiAwKSBvdXRwdXQubG9ncyA9IGxvZ3M7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpO1xufVxuYDtcblxuLyoqXG4gKiBFeHRyYWN0cyBhIHBsYWluIEpTT04gU2NoZW1hIGZyb20gd2hhdGV2ZXIgZm9ybWF0IHRoZSBBSSBTREsgdG9vbCB1c2VzXG4gKiAoWm9kIHNjaGVtYSwgQUkgU0RLIHdyYXBwZWQgc2NoZW1hLCBvciByYXcgSlNPTiBTY2hlbWEpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEpzb25TY2hlbWEoXG4gIHNjaGVtYTogdW5rbm93blxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKCFzY2hlbWEgfHwgdHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIFwiX2RlZlwiIGluIHNjaGVtYSAmJlxuICAgIHR5cGVvZiAoc2NoZW1hIGFzIHsgX2RlZjogdW5rbm93biB9KS5fZGVmID09PSBcIm9iamVjdFwiXG4gICkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gei50b0pTT05TY2hlbWEoc2NoZW1hIGFzIHouWm9kVHlwZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+O1xuICBpZiAoU3ltYm9sLmZvcihcInZlcmNlbC5haS5zY2hlbWFcIikgaW4gcyAmJiBcImpzb25TY2hlbWFcIiBpbiBzKSB7XG4gICAgcmV0dXJuIHMuanNvblNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIGlmIChcInR5cGVcIiBpbiBzIHx8IFwicHJvcGVydGllc1wiIGluIHMpIHtcbiAgICByZXR1cm4gcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganNvblNjaGVtYVRvVHMoXG4gIHNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGluZGVudCA9IDBcbik6IHN0cmluZyB7XG4gIGlmICghc2NoZW1hKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG5cbiAgaWYgKHNjaGVtYS5lbnVtICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5lbnVtLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIgfCBcIik7XG4gIH1cblxuICBpZiAoc2NoZW1hLmFueU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSkge1xuICAgIHJldHVybiBzY2hlbWEuYW55T2ZcbiAgICAgIC5tYXAoKHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBqc29uU2NoZW1hVG9UcyhzLCBpbmRlbnQpKVxuICAgICAgLmpvaW4oXCIgfCBcIik7XG4gIH1cbiAgaWYgKHNjaGVtYS5vbmVPZiAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHtcbiAgICByZXR1cm4gc2NoZW1hLm9uZU9mXG4gICAgICAubWFwKChzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ganNvblNjaGVtYVRvVHMocywgaW5kZW50KSlcbiAgICAgIC5qb2luKFwiIHwgXCIpO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IHNjaGVtYS50eXBlIGFzIHN0cmluZztcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBzY2hlbWEuaXRlbXNcbiAgICAgICAgPyBqc29uU2NoZW1hVG9UcyhzY2hlbWEuaXRlbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGluZGVudClcbiAgICAgICAgOiBcInVua25vd25cIjtcbiAgICAgIHJldHVybiBgQXJyYXk8JHtpdGVtc30+YDtcbiAgICB9XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc2NoZW1hLnByb3BlcnRpZXMgYXNcbiAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIFwiUmVjb3JkPHN0cmluZywgdW5rbm93bj5cIjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gbmV3IFNldCgoc2NoZW1hLnJlcXVpcmVkIGFzIHN0cmluZ1tdKSB8fCBbXSk7XG4gICAgICBjb25zdCBwYWQgPSBcIiAgXCIucmVwZWF0KGluZGVudCArIDEpO1xuICAgICAgY29uc3QgY2xvc2VQYWQgPSBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdCA9IHJlcXVpcmVkLmhhcyhrZXkpID8gXCJcIiA6IFwiP1wiO1xuICAgICAgICByZXR1cm4gYCR7cGFkfSR7a2V5fSR7b3B0fTogJHtqc29uU2NoZW1hVG9Ucyh2YWx1ZSwgaW5kZW50ICsgMSl9YDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGB7XFxuJHtwcm9wcy5qb2luKFwiO1xcblwiKX07XFxuJHtjbG9zZVBhZH19YDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb250ZXh0VHlwZVN0cmluZyh0b29sczogVG9vbFNldCk6IHN0cmluZyB7XG4gIGNvbnN0IHNpZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdF0gb2YgT2JqZWN0LmVudHJpZXModG9vbHMpKSB7XG4gICAgY29uc3QgcmF3ID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBpbnB1dFNjaGVtYSA9IGV4dHJhY3RKc29uU2NoZW1hKHJhdy5pbnB1dFNjaGVtYSA/PyByYXcucGFyYW1ldGVycyk7XG4gICAgY29uc3Qgb3V0cHV0U2NoZW1hID0gZXh0cmFjdEpzb25TY2hlbWEocmF3Lm91dHB1dFNjaGVtYSk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBpbnB1dFNjaGVtYSA/IGpzb25TY2hlbWFUb1RzKGlucHV0U2NoZW1hLCAyKSA6IFwie31cIjtcbiAgICBjb25zdCBvdXRwdXRUeXBlID0gb3V0cHV0U2NoZW1hXG4gICAgICA/IGpzb25TY2hlbWFUb1RzKG91dHB1dFNjaGVtYSwgMilcbiAgICAgIDogXCJ1bmtub3duXCI7XG5cbiAgICBzaWdzLnB1c2goYCAgICAke25hbWV9KGlucHV0OiAke2lucHV0VHlwZX0pOiBQcm9taXNlPCR7b3V0cHV0VHlwZX0+YCk7XG4gIH1cblxuICByZXR1cm4gYHR5cGUgQ29udGV4dCA9IHtcXG4gIHRvb2xzOiB7XFxuJHtzaWdzLmpvaW4oXCI7XFxuXCIpfTtcXG4gIH1cXG59YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUluU2FuZGJveCh7XG4gIGNvZGUsXG4gIHJwY0RpcixcbiAgYWJvcnRDb250cm9sbGVyLFxuICBzYW5kYm94LFxuICBhdmFpbGFibGVUb29scyxcbiAgb25TdWJUb29sQ2FsbCxcbiAgdG9vbENvbnRleHQsXG59OiB7XG4gIGNvZGU6IHN0cmluZztcbiAgcnBjRGlyOiBzdHJpbmc7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIGF2YWlsYWJsZVRvb2xzOiBUb29sU2V0O1xuICBvblN1YlRvb2xDYWxsPzogT25TdWJUb29sQ2FsbDtcbiAgdG9vbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IG1rZGlyUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcIm1rZGlyXCIsXG4gICAgYXJnczogW1wiLXBcIiwgcnBjRGlyXSxcbiAgfSk7XG4gIGlmIChta2RpclJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBta2RpclJlc3VsdC5tZXNzYWdlIH07XG4gIH1cbiAgYXdhaXQgbWtkaXJSZXN1bHQucmVzdWx0O1xuXG4gIGF3YWl0IHNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgZmlsZXM6IFtcbiAgICAgIHsgcGF0aDogXCJydW5uZXIubWpzXCIsIGNvbnRlbnQ6IFJVTk5FUl9TQ1JJUFQgfSxcbiAgICAgIHsgcGF0aDogXCJjb2RlLmpzXCIsIGNvbnRlbnQ6IGNvZGUgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogXCJ0b29scy5qc29uXCIsXG4gICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKGF2YWlsYWJsZVRvb2xzKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVzdFBhdGg6IHJwY0RpcixcbiAgfSk7XG5cbiAgY29uc3Qgbm9kZU1ham9yID0gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdChcIi5cIilbMF0sIDEwKTtcbiAgY29uc3QgcGVybWlzc2lvbkZsYWcgPVxuICAgIG5vZGVNYWpvciA+PSAyMiA/IFwiLS1wZXJtaXNzaW9uXCIgOiBcIi0tZXhwZXJpbWVudGFsLXBlcm1pc3Npb25cIjtcblxuICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcIm5vZGVcIixcbiAgICBhcmdzOiBbXG4gICAgICBwZXJtaXNzaW9uRmxhZyxcbiAgICAgIGAtLWFsbG93LWZzLXJlYWQ9JHtycGNEaXJ9YCxcbiAgICAgIGAtLWFsbG93LWZzLXdyaXRlPSR7cnBjRGlyfWAsXG4gICAgICBgJHtycGNEaXJ9L3J1bm5lci5tanNgLFxuICAgIF0sXG4gICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBleGVjUmVzdWx0Lm1lc3NhZ2UgfTtcbiAgfVxuXG4gIGNvbnN0IGZhdGFsOiB7IGVycm9yOiBFcnJvciB8IG51bGwgfSA9IHsgZXJyb3I6IG51bGwgfTtcblxuICBjb25zdCBhYm9ydCA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBpZiAoIWZhdGFsLmVycm9yKSB7XG4gICAgICBmYXRhbC5lcnJvciA9IGVycm9yO1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVRvb2xSZXF1ZXN0ID0gYXN5bmMgKHJlcXVlc3RKc29uOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgcGFyc2VkOiB7IGlkOiBzdHJpbmc7IHRvb2w6IHN0cmluZzsgaW5wdXQ6IHVua25vd24gfTtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXF1ZXN0SnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBpZCwgdG9vbDogdG9vbE5hbWUsIGlucHV0IH0gPSBwYXJzZWQ7XG5cbiAgICBsZXQgcmVzcG9uc2U6IHsgcmVzdWx0PzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdCA9IGF2YWlsYWJsZVRvb2xzW3Rvb2xOYW1lXTtcbiAgICAgIGlmICghdD8uZXhlY3V0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRvb2wgJHt0b29sTmFtZX0gbm90IGZvdW5kIG9yIGhhcyBubyBleGVjdXRlIGZ1bmN0aW9uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhlYyA9IHQuZXhlY3V0ZS5iaW5kKHQpO1xuICAgICAgY29uc3QgZXhlY09wdGlvbnMgPSB7XG4gICAgICAgIHRvb2xDYWxsSWQ6IGBqc18ke3Rvb2xOYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICB9O1xuICAgICAgaWYgKG9uU3ViVG9vbENhbGwpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBvblN1YlRvb2xDYWxsKHRvb2xOYW1lLCBpbnB1dCwgKCkgPT5cbiAgICAgICAgICBleGVjKGlucHV0LCBleGVjT3B0aW9ucylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWMoaW5wdXQsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgcmVzcG9uc2UgPSB7IHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzcG9uc2UgPSB7IGVycm9yOiBtc2cgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICAgICAgZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgJHtpZH0ucmVzcG9uc2UuanNvbmAsXG4gICAgICAgICAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVzdFBhdGg6IHJwY0RpcixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyoqXG4gICAgICAgKiBJZiB3cml0aW5nIHRoZSByZXNwb25zZSBmaWxlIGZhaWxzLCB0aGUgcnVubmVyIHdpbGwgcG9sbCBmb3JldmVyXG4gICAgICAgKiB3YWl0aW5nIGZvciBpdC4gQWJvcnQgdGhlIHJ1bm5lciBwcm9jZXNzIHNvIHdlIGRvbid0IGRlYWRsb2NrLlxuICAgICAgICovXG4gICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICBhYm9ydChuZXcgRXJyb3IoYEZhaWxlZCB0byB3cml0ZSBSUEMgcmVzcG9uc2UgZm9yICR7dG9vbE5hbWV9OiAke21zZ31gKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRvb2xDYWxsUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICBsZXQgc3RkZXJyQnVmZmVyID0gXCJcIjtcbiAgbGV0IG5vbk1hcmtlclN0ZGVyciA9IFwiXCI7XG5cbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGFib3J0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgSmF2YVNjcmlwdCBleGVjdXRpb24gdGltZWQgb3V0IGFmdGVyICR7RVhFQ1VUSU9OX1RJTUVPVVRfTVMgLyAxMDAwfXNgXG4gICAgICApXG4gICAgKTtcbiAgfSwgRVhFQ1VUSU9OX1RJTUVPVVRfTVMpO1xuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBleGVjUmVzdWx0LmxvZ3MoKSkge1xuICAgICAgaWYgKGZhdGFsLmVycm9yKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuc3RyZWFtID09PSBcInN0ZGVyclwiKSB7XG4gICAgICAgIHN0ZGVyckJ1ZmZlciArPSBlbnRyeS5kYXRhO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSBzdGRlcnJCdWZmZXIuaW5kZXhPZihSRVFVRVNUX01BUktFUl9TVEFSVCk7XG4gICAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmVmb3JlTWFya2VyID0gc3RkZXJyQnVmZmVyLnNsaWNlKDAsIHN0YXJ0SWR4KTtcbiAgICAgICAgICBpZiAoYmVmb3JlTWFya2VyLnRyaW0oKSkge1xuICAgICAgICAgICAgbm9uTWFya2VyU3RkZXJyICs9IGJlZm9yZU1hcmtlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50U3RhcnQgPSBzdGFydElkeCArIFJFUVVFU1RfTUFSS0VSX1NUQVJULmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBlbmRJZHggPSBzdGRlcnJCdWZmZXIuaW5kZXhPZihSRVFVRVNUX01BUktFUl9FTkQsIGNvbnRlbnRTdGFydCk7XG4gICAgICAgICAgaWYgKGVuZElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcXVlc3RKc29uID0gc3RkZXJyQnVmZmVyLnNsaWNlKGNvbnRlbnRTdGFydCwgZW5kSWR4KTtcbiAgICAgICAgICBzdGRlcnJCdWZmZXIgPSBzdGRlcnJCdWZmZXIuc2xpY2UoZW5kSWR4ICsgUkVRVUVTVF9NQVJLRVJfRU5ELmxlbmd0aCk7XG5cbiAgICAgICAgICB0b29sQ2FsbFByb21pc2VzLnB1c2goaGFuZGxlVG9vbFJlcXVlc3QocmVxdWVzdEpzb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cblxuICBpZiAoc3RkZXJyQnVmZmVyLnRyaW0oKSkge1xuICAgIG5vbk1hcmtlclN0ZGVyciArPSBzdGRlcnJCdWZmZXI7XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodG9vbENhbGxQcm9taXNlcyk7XG5cbiAgaWYgKGZhdGFsLmVycm9yKSB7XG4gICAgZXhlY1Jlc3VsdC5yZXN1bHQuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogZmF0YWwuZXJyb3IubWVzc2FnZSxcbiAgICAgIC4uLihub25NYXJrZXJTdGRlcnIgPyB7IHN0ZGVycjogbm9uTWFya2VyU3RkZXJyLnNsaWNlKDAsIDIwMDApIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlIH0gPSBhd2FpdCBleGVjUmVzdWx0LnJlc3VsdDtcblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yOiBgUnVubmVyIGZhaWxlZCAoZXhpdCAke2V4aXRDb2RlfSkuYCxcbiAgICAgIHN0ZGVycjogKG5vbk1hcmtlclN0ZGVyciArIHN0ZGVycikuc2xpY2UoMCwgMjAwMCksXG4gICAgICBzdGRvdXQ6IHN0ZG91dC5zbGljZSgwLCAxMDAwKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKYXZhU2NyaXB0VG9vbChvcHRzOiB7XG4gIHRvb2xzOiBUb29sU2V0O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIGFjdGl2ZVRvb2xzPzogc3RyaW5nW107XG4gIG9uU3ViVG9vbENhbGw/OiBPblN1YlRvb2xDYWxsO1xuICB0b29sQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSkge1xuICBjb25zdCB7IHNhbmRib3gsIG9uU3ViVG9vbENhbGwgfSA9IG9wdHM7XG4gIGNvbnN0IGFjdGl2ZVNldCA9IG9wdHMuYWN0aXZlVG9vbHMgPyBuZXcgU2V0KG9wdHMuYWN0aXZlVG9vbHMpIDogbnVsbDtcbiAgY29uc3QgYXZhaWxhYmxlVG9vbHM6IFRvb2xTZXQgPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdF0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy50b29scykpIHtcbiAgICBpZiAoIWFjdGl2ZVNldCB8fCBhY3RpdmVTZXQuaGFzKG5hbWUpKSB7XG4gICAgICBhdmFpbGFibGVUb29sc1tuYW1lXSA9IHQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvbnRleHRUeXBlID0gZ2VuZXJhdGVDb250ZXh0VHlwZVN0cmluZyhhdmFpbGFibGVUb29scyk7XG5cbiAgcmV0dXJuIHRvb2woe1xuICAgIC4uLmJ1aWx0SW5Ub29scy5KYXZhU2NyaXB0LFxuICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0ZSBKYXZhU2NyaXB0IHRvIG9yY2hlc3RyYXRlIG11bHRpcGxlIHRvb2wgY2FsbHMgaW4gYSBzaW5nbGUgc3RlcC4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCB0byBydW4gc2V2ZXJhbCB0b29scyBpbiBzZXF1ZW5jZSwgdHJhbnNmb3JtIGludGVybWVkaWF0ZSByZXN1bHRzLCBvciBwYXJhbGxlbGl6ZSBpbmRlcGVuZGVudCBvcGVyYXRpb25zIHdpdGggUHJvbWlzZS5hbGwuXG5cblRoZSBjb2RlIHJ1bnMgYXMgYW4gYXN5bmMgZnVuY3Rpb24gYm9keSB3aXRoIFxcYGN0eFxcYCBpbiBzY29wZTpcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuJHtjb250ZXh0VHlwZX1cblxcYFxcYFxcYFxuXG5FeGFtcGxlczpcbi0gU2VxdWVudGlhbDogXFxgY29uc3QgZmlsZSA9IGF3YWl0IGN0eC50b29scy5SZWFkKHsgcGF0aDogXCJwYWNrYWdlLmpzb25cIiB9KTsgcmV0dXJuIEpTT04ucGFyc2UoZmlsZS5jb250ZW50KTtcXGBcbi0gUGFyYWxsZWw6IFxcYGNvbnN0IFthLCBiXSA9IGF3YWl0IFByb21pc2UuYWxsKFtjdHgudG9vbHMuUmVhZCh7IHBhdGg6IFwiYS50c1wiIH0pLCBjdHgudG9vbHMuUmVhZCh7IHBhdGg6IFwiYi50c1wiIH0pXSk7IHJldHVybiB7IGE6IGEuY29udGVudCwgYjogYi5jb250ZW50IH07XFxgXG4tIFRyYW5zZm9ybTogXFxgY29uc3QgZ3JlcCA9IGF3YWl0IGN0eC50b29scy5HcmVwKHsgcGF0dGVybjogXCJUT0RPXCIgfSk7IHJldHVybiBncmVwLm1hdGNoZXMuc3BsaXQoXCJcXFxcblwiKS5sZW5ndGg7XFxgXG4tIEJhc2g6IFxcYGNvbnN0IHIgPSBhd2FpdCBjdHgudG9vbHMuQmFzaCh7IGNvbW1hbmQ6IFwibm9kZSAtZSBcXFxcXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7djoxfSkpXFxcXFwiXCIgfSk7IHJldHVybiBKU09OLnBhcnNlKHIuc3Rkb3V0KTtcXGBcblxuUmV0dXJuIGEgdmFsdWUgdG8gcGFzcyByZXN1bHRzIGJhY2suIFVzZSBjb25zb2xlLmxvZygpIGZvciBkZWJ1ZyBvdXRwdXQuXG5JbXBvcnRhbnQ6IEVhY2ggdG9vbCByZXR1cm5zIGEgc3RydWN0dXJlZCBvYmplY3QgbWF0Y2hpbmcgaXRzIG91dHB1dCBzY2hlbWEgXHUyMDE0IG5vdCBhIHJhdyBzdHJpbmcuIEFjY2VzcyB0aGUgc3BlY2lmaWMgZmllbGQgeW91IG5lZWQgKGUuZy4gQmFzaCdzIHJlc3VsdC5zdGRvdXQsIFJlYWQncyByZXN1bHQuY29udGVudCkgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHBhcnNlIHRoZSBlbnRpcmUgcmVzdWx0LmAsXG4gICAgZXhlY3V0ZTogKHsgY29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBydW5JZCA9IGBydW5fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKClcbiAgICAgICAgLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc2xpY2UoMiwgOCl9YDtcbiAgICAgIGNvbnN0IHJwY0RpciA9IGAuYWdlbnQvanMtcnBjLyR7cnVuSWR9YDtcbiAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgcmV0dXJuIGV4ZWN1dGVJblNhbmRib3goe1xuICAgICAgICBjb2RlLFxuICAgICAgICBycGNEaXIsXG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgc2FuZGJveCxcbiAgICAgICAgYXZhaWxhYmxlVG9vbHMsXG4gICAgICAgIG9uU3ViVG9vbENhbGwsXG4gICAgICAgIHRvb2xDb250ZXh0OiBvcHRzLnRvb2xDb250ZXh0LFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluVG9vbE5hbWUgfSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vKiogQnVpbHQtaW4gZGVmYXVsdHMgZm9yIG5lZWRzQXBwcm92YWwgKHVzZXIgY2FuIG92ZXJyaWRlIHZpYSBhZ2VudCBjb25maWcpLiAqL1xuY29uc3QgYnVpbHRpbk5lZWRzQXBwcm92YWw6IFBhcnRpYWw8UmVjb3JkPEJ1aWx0SW5Ub29sTmFtZSwgYm9vbGVhbj4+ID0ge307XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja05lZWRzQXBwcm92YWwoe1xuICBhZ2VudCxcbiAgdG9vbE5hbWUsXG4gIGlucHV0LFxuICB0b29sQ2FsbElkLFxuICBtZXNzYWdlcyxcbn06IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgdG9vbENhbGxJZDogc3RyaW5nO1xuICBtZXNzYWdlczogdW5rbm93bltdO1xufSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyAxLiBQZXItdG9vbCBuZWVkc0FwcHJvdmFsIG9uIHRoZSBUb29sIGRlZmluaXRpb24gdGFrZXMgcHJpb3JpdHlcbiAgY29uc3QgdG9vbERlZiA9IGFnZW50Lm9wdGlvbnMudG9vbHM/Llt0b29sTmFtZV0gYXMgVG9vbCB8IHVuZGVmaW5lZDtcbiAgaWYgKHRvb2xEZWY/Lm5lZWRzQXBwcm92YWwgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdG9vbERlZi5uZWVkc0FwcHJvdmFsID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHRvb2xEZWYubmVlZHNBcHByb3ZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRvb2xEZWYubmVlZHNBcHByb3ZhbChpbnB1dCwge1xuICAgICAgdG9vbENhbGxJZCxcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyBuZXZlcltdLFxuICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDIuIEFnZW50LWxldmVsIG5lZWRzQXBwcm92YWwgbWFwXG4gIGNvbnN0IGFnZW50RW50cnkgPSAoXG4gICAgYWdlbnQub3B0aW9ucy5uZWVkc0FwcHJvdmFsIGFzXG4gICAgICB8IFJlY29yZDxcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgYm9vbGVhbiB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPilcbiAgICAgICAgPlxuICAgICAgfCB1bmRlZmluZWRcbiAgKT8uW3Rvb2xOYW1lXTtcblxuICBpZiAoYWdlbnRFbnRyeSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBhZ2VudEVudHJ5ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGFnZW50RW50cnk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBhZ2VudEVudHJ5KGlucHV0LCB7XG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gMy4gQnVpbHQtaW4gZGVmYXVsdHNcbiAgcmV0dXJuIGJ1aWx0aW5OZWVkc0FwcHJvdmFsW3Rvb2xOYW1lIGFzIEJ1aWx0SW5Ub29sTmFtZV0gPz8gZmFsc2U7XG59XG4iLCAiaW1wb3J0IHtcbiAgdG9vbCBhcyBhaVRvb2wsXG4gIHR5cGUgVG9vbCxcbiAgdHlwZSBUb29sRXhlY3V0aW9uT3B0aW9ucyxcbiAgdHlwZSBVSU1lc3NhZ2UsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLyoqXG4gKiBEZWZpbmUgYW4gYWdlbnQgdG9vbCB3aXRoIHR5cGVkIGNvbnRleHQgYW5kIHN0YXRlLlxuICpcbiAqIFBhc3MgdGhlIHNhbWUgYGNvbnRleHRTY2hlbWFgIGFuZC9vciBgc3RhdGVTY2hlbWFgIChab2Qgb2JqZWN0cykgdXNlZCBpblxuICogeW91ciBhZ2VudCBkZWZpbml0aW9uIHRvIGdldCB0eXBlZCBgY29udGV4dGAgYW5kIGBzdGF0ZWAgaW5zaWRlIGBleGVjdXRlYC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9vbCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnRcIjtcbiAqIGltcG9ydCB7IGNvbnRleHRTY2hlbWEsIHN0YXRlU2NoZW1hIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuICpcbiAqIGV4cG9ydCBjb25zdCBNeVRvb2wgPSB0b29sKHtcbiAqICAgY29udGV4dFNjaGVtYSxcbiAqICAgc3RhdGVTY2hlbWEsXG4gKiAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7IHF1ZXJ5OiB6LnN0cmluZygpIH0pLFxuICogICBleGVjdXRlOiBhc3luYyAoeyBxdWVyeSB9LCB7IGNvbnRleHQsIHN0YXRlLCBzYW5kYm94IH0pID0+IHtcbiAqICAgICBjb250ZXh0LmNoYW5uZWxJZCAvLyBcdTI3MTMgdHlwZWQgZnJvbSBjb250ZXh0U2NoZW1hXG4gKiAgICAgc3RhdGUuY291bnRlcisrICAgLy8gXHUyNzEzIHR5cGVkIGZyb20gc3RhdGVTY2hlbWEsIG11dGFibGVcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b29sPFxuICBUSW5wdXRTY2hlbWEgZXh0ZW5kcyB6LlpvZFR5cGUsXG4gIFRDb250ZXh0U2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgVFN0YXRlU2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBkZWZhdWx0IGVyYXNlZFxuICBUT3V0cHV0U2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPGFueT4sXG4+KGRlZjoge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFRJbnB1dFNjaGVtYTtcbiAgb3V0cHV0U2NoZW1hPzogVE91dHB1dFNjaGVtYTtcbiAgY29udGV4dFNjaGVtYT86IFRDb250ZXh0U2NoZW1hO1xuICBzdGF0ZVNjaGVtYT86IFRTdGF0ZVNjaGVtYTtcbiAgZXhlY3V0ZT86IChcbiAgICBpbnB1dDogei5pbmZlcjxUSW5wdXRTY2hlbWE+LFxuICAgIG9wdGlvbnM6IFRvb2xDb250ZXh0PHouaW5mZXI8VENvbnRleHRTY2hlbWE+LCB6LmluZmVyPFRTdGF0ZVNjaGVtYT4+ICYge1xuICAgICAgdG9vbENhbGxJZDogc3RyaW5nO1xuICAgICAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICAgIH1cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGV4ZWN1dGUgY2FuIHJldHVybiBhbnl0aGluZ1xuICApID0+IGFueTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBlcmFzZWQgdG9vbCBnZW5lcmljc1xufSk6IFRvb2w8YW55LCBhbnk+IHtcbiAgY29uc3QgeyBleGVjdXRlLCBjb250ZXh0U2NoZW1hLCBzdGF0ZVNjaGVtYSwgLi4ucmVzdCB9ID0gZGVmO1xuXG4gIGNvbnN0IHdyYXBwZWRFeGVjdXRlID0gZXhlY3V0ZVxuICAgID8gLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBpbnB1dCB0eXBlIGVyYXNlZCBhdCBydW50aW1lXG4gICAgICAoaW5wdXQ6IGFueSwgb3B0aW9uczogVG9vbEV4ZWN1dGlvbk9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gb3B0aW9ucy5leHBlcmltZW50YWxfY29udGV4dCBhcyB7XG4gICAgICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICAgICAgICBzdGF0ZTogdW5rbm93bjtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICAgICAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSAoXG4gICAgICAgICAgY29udGV4dFNjaGVtYSA/IGNvbnRleHRTY2hlbWEucGFyc2UoY3R4LmNvbnRleHQpIDogY3R4LmNvbnRleHRcbiAgICAgICAgKSBhcyB6LmluZmVyPFRDb250ZXh0U2NoZW1hPjtcblxuICAgICAgICBpZiAoc3RhdGVTY2hlbWEpIHtcbiAgICAgICAgICBzdGF0ZVNjaGVtYS5wYXJzZShjdHguc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LnN0YXRlIGFzIHouaW5mZXI8VFN0YXRlU2NoZW1hPjtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZShpbnB1dCwge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IG9wdGlvbnMudG9vbENhbGxJZCxcbiAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCEsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGN0eC5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZXM6IGN0eC5tZXNzYWdlcyxcbiAgICAgICAgICBzYW5kYm94OiBjdHguc2FuZGJveCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHdyYXBwZWRFeGVjdXRlXG4gICAgPyBhaVRvb2woeyAuLi5yZXN0LCBleGVjdXRlOiB3cmFwcGVkRXhlY3V0ZSB9KVxuICAgIDogLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBuby1leGVjdXRlIHBhdGggbmVlZHMgY2FzdFxuICAgICAgYWlUb29sKHJlc3QgYXMgYW55KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEpTT05WYWx1ZSwgTW9kZWxNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5cbnR5cGUgUHJvdmlkZXJPcHRpb25zID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSlNPTlZhbHVlPj47XG5cbmNvbnN0IEFOVEhST1BJQ19NQVhfQ0FDSEVfQlJFQUtQT0lOVFNfUEVSX1JFUVVFU1QgPSA0O1xuXG5jb25zdCBDTEFVREVfTElLRV9NT0RFTF9NQVRDSEVSUyA9IFtcImNsYXVkZVwiLCBcImFudGhyb3BpY1wiXTtcblxuY29uc3QgQ0xBVURFX1BST01QVF9DQUNISU5HX1BST1ZJREVSX09QVElPTlM6IFByb3ZpZGVyT3B0aW9ucyA9IHtcbiAgYW50aHJvcGljOiB7XG4gICAgY2FjaGVDb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbiAgb3BlbnJvdXRlcjoge1xuICAgIGNhY2hlQ29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG4gIGJlZHJvY2s6IHtcbiAgICBjYWNoZVBvaW50OiB7IHR5cGU6IFwiZGVmYXVsdFwiIH0sXG4gIH0sXG4gIG9wZW5haUNvbXBhdGlibGU6IHtcbiAgICBjYWNoZV9jb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbiAgY29waWxvdDoge1xuICAgIGNvcGlsb3RfY2FjaGVfY29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRHYXRld2F5UHJvdmlkZXIobW9kZWw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBzbGFzaEluZGV4ID0gbW9kZWwuaW5kZXhPZihcIi9cIik7XG4gIGlmIChzbGFzaEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtb2RlbC5zbGljZSgwLCBzbGFzaEluZGV4KTtcbn1cblxuZnVuY3Rpb24gY291bnRBbnRocm9waWNDYWNoZUJyZWFrcG9pbnRzKG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXSk6IG51bWJlciB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgIGNvbnN0IHByb3ZpZGVyT3B0aW9ucyA9IChtZXNzYWdlIGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH0pXG4gICAgICAucHJvdmlkZXJPcHRpb25zO1xuICAgIGlmIChwcm92aWRlck9wdGlvbnM/LmFudGhyb3BpYz8uY2FjaGVDb250cm9sKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnRQcm92aWRlck9wdGlvbnMgPSAoXG4gICAgICAgICAgcGFydCBhcyB7IHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucyB9XG4gICAgICAgICkucHJvdmlkZXJPcHRpb25zO1xuICAgICAgICBpZiAocGFydFByb3ZpZGVyT3B0aW9ucz8uYW50aHJvcGljPy5jYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuZnVuY3Rpb24gaXNDbGF1ZGVMaWtlTW9kZWwobW9kZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlciA9IG1vZGVsLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBDTEFVREVfTElLRV9NT0RFTF9NQVRDSEVSUy5zb21lKChtKSA9PiBsb3dlci5pbmNsdWRlcyhtKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVByb3ZpZGVyT3B0aW9ucyhvcHRzOiB7XG4gIGN1cnJlbnQ6IFByb3ZpZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgcGF0Y2g6IFByb3ZpZGVyT3B0aW9ucztcbn0pOiBQcm92aWRlck9wdGlvbnMge1xuICBjb25zdCBuZXh0OiBQcm92aWRlck9wdGlvbnMgPSB7IC4uLihvcHRzLmN1cnJlbnQgPz8ge30pIH07XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMucGF0Y2gpKSB7XG4gICAgbmV4dFtrZXldID0geyAuLi4obmV4dFtrZXldID8/IHt9KSwgLi4udmFsdWUgfTtcbiAgfVxuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gaXNDYWNoZWFibGVDbGF1ZGVQYXJ0KHBhcnQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFwYXJ0IHx8IHR5cGVvZiBwYXJ0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFwidHlwZVwiIGluIHBhcnQgJiYgKHBhcnQgYXMgeyB0eXBlPzogdW5rbm93biB9KS50eXBlID09PSBcInRleHRcIikge1xuICAgIGNvbnN0IHRleHQgPSAocGFydCBhcyB7IHRleHQ/OiB1bmtub3duIH0pLnRleHQ7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGV4dC50cmltKCkubGVuZ3RoID4gMDtcbiAgICB9XG4gIH1cblxuICBpZiAoXCJ0eXBlXCIgaW4gcGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSAocGFydCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IFwidGhpbmtpbmdcIiB8fCB0eXBlID09PSBcInJlYXNvbmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhc0NhY2hlYWJsZUNvbnRlbnQobWVzc2FnZTogTW9kZWxNZXNzYWdlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2UuY29udGVudC50cmltKCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkpIHtcbiAgICByZXR1cm4gbWVzc2FnZS5jb250ZW50LnNvbWUoKHBhcnQpID0+IGlzQ2FjaGVhYmxlQ2xhdWRlUGFydChwYXJ0KSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q2FjaGVhYmxlUGFydEluZGV4KGNvbnRlbnQ6IHVua25vd25bXSk6IG51bWJlciB8IG51bGwge1xuICBmb3IgKGxldCBpID0gY29udGVudC5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgIGlmIChpc0NhY2hlYWJsZUNsYXVkZVBhcnQoY29udGVudFtpXSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2VsZWN0Q2xhdWRlQ2FjaGluZ1RhcmdldHMobWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdKTogbnVtYmVyW10ge1xuICBjb25zdCBzeXN0ZW1JbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBmaW5hbEluZGljZXM6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGggJiYgc3lzdGVtSW5kaWNlcy5sZW5ndGggPCAyOyBpICs9IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgaWYgKG1lc3NhZ2Uucm9sZSA9PT0gXCJzeXN0ZW1cIiAmJiBoYXNDYWNoZWFibGVDb250ZW50KG1lc3NhZ2UpKSB7XG4gICAgICBzeXN0ZW1JbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiBmaW5hbEluZGljZXMubGVuZ3RoIDwgMjsgaSAtPSAxKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgIGlmIChtZXNzYWdlLnJvbGUgIT09IFwic3lzdGVtXCIgJiYgaGFzQ2FjaGVhYmxlQ29udGVudChtZXNzYWdlKSkge1xuICAgICAgZmluYWxJbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9XG5cbiAgZmluYWxJbmRpY2VzLnJldmVyc2UoKTtcblxuICByZXR1cm4gWy4uLnN5c3RlbUluZGljZXMsIC4uLmZpbmFsSW5kaWNlc107XG59XG5cbmZ1bmN0aW9uIGFwcGx5Q2xhdWRlUHJvbXB0Q2FjaGluZyhvcHRzOiB7XG4gIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXTtcbiAgcHJvdmlkZXJJZDogc3RyaW5nIHwgbnVsbDtcbiAgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0OiBudW1iZXI7XG59KTogTW9kZWxNZXNzYWdlW10ge1xuICBjb25zdCBleGlzdGluZ0JyZWFrcG9pbnRzID0gY291bnRBbnRocm9waWNDYWNoZUJyZWFrcG9pbnRzKG9wdHMubWVzc2FnZXMpO1xuICBjb25zdCByZW1haW5pbmdCdWRnZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIG9wdHMubWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0IC0gZXhpc3RpbmdCcmVha3BvaW50c1xuICApO1xuXG4gIGlmIChyZW1haW5pbmdCdWRnZXQgPT09IDApIHtcbiAgICByZXR1cm4gb3B0cy5tZXNzYWdlcztcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEluZGljZXMgPSBzZWxlY3RDbGF1ZGVDYWNoaW5nVGFyZ2V0cyhvcHRzLm1lc3NhZ2VzKS5zbGljZShcbiAgICAwLFxuICAgIHJlbWFpbmluZ0J1ZGdldFxuICApO1xuICBpZiAodGFyZ2V0SW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb3B0cy5tZXNzYWdlcztcbiAgfVxuXG4gIGNvbnN0IHVzZU1lc3NhZ2VMZXZlbE9wdGlvbnMgPVxuICAgIG9wdHMucHJvdmlkZXJJZCA9PT0gXCJhbnRocm9waWNcIiB8fFxuICAgIEJvb2xlYW4ob3B0cy5wcm92aWRlcklkPy5pbmNsdWRlcyhcImJlZHJvY2tcIikpO1xuXG4gIGNvbnN0IG5leHRNZXNzYWdlcyA9IG9wdHMubWVzc2FnZXMuc2xpY2UoKTtcblxuICBmb3IgKGNvbnN0IG1lc3NhZ2VJbmRleCBvZiB0YXJnZXRJbmRpY2VzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5leHRNZXNzYWdlc1ttZXNzYWdlSW5kZXhdO1xuXG4gICAgY29uc3Qgc2hvdWxkVXNlQ29udGVudE9wdGlvbnMgPVxuICAgICAgIXVzZU1lc3NhZ2VMZXZlbE9wdGlvbnMgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSAmJlxuICAgICAgbWVzc2FnZS5jb250ZW50Lmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoc2hvdWxkVXNlQ29udGVudE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XG4gICAgICBjb25zdCBwYXJ0SW5kZXggPSBmaW5kTGFzdENhY2hlYWJsZVBhcnRJbmRleChtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgaWYgKHBhcnRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJ0ID0gbWVzc2FnZS5jb250ZW50W3BhcnRJbmRleF07XG4gICAgICAgIGlmIChwYXJ0ICYmIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgcGFydFByb3ZpZGVyT3B0aW9ucyA9IChcbiAgICAgICAgICAgIHBhcnQgYXMgeyBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnMgfVxuICAgICAgICAgICkucHJvdmlkZXJPcHRpb25zO1xuXG4gICAgICAgICAgY29uc3QgbmV4dENvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQuc2xpY2UoKTtcbiAgICAgICAgICBuZXh0Q29udGVudFtwYXJ0SW5kZXhdID0ge1xuICAgICAgICAgICAgLi4uKHBhcnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgICAgICAgcHJvdmlkZXJPcHRpb25zOiBtZXJnZVByb3ZpZGVyT3B0aW9ucyh7XG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHBhcnRQcm92aWRlck9wdGlvbnMsXG4gICAgICAgICAgICAgIHBhdGNoOiBDTEFVREVfUFJPTVBUX0NBQ0hJTkdfUFJPVklERVJfT1BUSU9OUyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0gYXMgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQpW251bWJlcl07XG5cbiAgICAgICAgICBuZXh0TWVzc2FnZXNbbWVzc2FnZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICBjb250ZW50OiBuZXh0Q29udGVudCxcbiAgICAgICAgICB9IGFzIE1vZGVsTWVzc2FnZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VQcm92aWRlck9wdGlvbnMgPSAoXG4gICAgICBtZXNzYWdlIGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH1cbiAgICApLnByb3ZpZGVyT3B0aW9ucztcblxuICAgIG5leHRNZXNzYWdlc1ttZXNzYWdlSW5kZXhdID0ge1xuICAgICAgLi4ubWVzc2FnZSxcbiAgICAgIHByb3ZpZGVyT3B0aW9uczogbWVyZ2VQcm92aWRlck9wdGlvbnMoe1xuICAgICAgICBjdXJyZW50OiBtZXNzYWdlUHJvdmlkZXJPcHRpb25zLFxuICAgICAgICBwYXRjaDogQ0xBVURFX1BST01QVF9DQUNISU5HX1BST1ZJREVSX09QVElPTlMsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG5leHRNZXNzYWdlcztcbn1cblxuZXhwb3J0IHR5cGUgUHJvbXB0Q2FjaGluZ1Jlc3VsdCA9IHtcbiAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICBwcm92aWRlck9wdGlvbnM6IFByb3ZpZGVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVByb21wdENhY2hpbmdUb01vZGVsUmVxdWVzdChvcHRzOiB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gIGFudGhyb3BpYz86IHsgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0PzogbnVtYmVyIH07XG4gIG9wZW5haT86IHsgc2V0UHJvbXB0Q2FjaGVLZXk/OiBib29sZWFuIH07XG59KTogUHJvbXB0Q2FjaGluZ1Jlc3VsdCB7XG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0R2F0ZXdheVByb3ZpZGVyKG9wdHMubW9kZWwpO1xuXG4gIGNvbnN0IHByb3ZpZGVyT3B0aW9uczogUHJvdmlkZXJPcHRpb25zID0ge307XG5cbiAgaWYgKFxuICAgIChwcm92aWRlciA9PT0gXCJvcGVuYWlcIiB8fCBwcm92aWRlciA9PT0gXCJhenVyZVwiKSAmJlxuICAgIG9wdHMub3BlbmFpPy5zZXRQcm9tcHRDYWNoZUtleSAhPT0gZmFsc2VcbiAgKSB7XG4gICAgcHJvdmlkZXJPcHRpb25zLm9wZW5haSA9IHsgcHJvbXB0Q2FjaGVLZXk6IG9wdHMuc2Vzc2lvbklkIH07XG4gIH1cblxuICBjb25zdCBtYXhCcmVha3BvaW50c1BlclJlcXVlc3QgPVxuICAgIG9wdHMuYW50aHJvcGljPy5tYXhCcmVha3BvaW50c1BlclJlcXVlc3QgPz9cbiAgICBBTlRIUk9QSUNfTUFYX0NBQ0hFX0JSRUFLUE9JTlRTX1BFUl9SRVFVRVNUO1xuXG4gIGNvbnN0IGNhY2hlZE1lc3NhZ2VzID0gaXNDbGF1ZGVMaWtlTW9kZWwob3B0cy5tb2RlbClcbiAgICA/IGFwcGx5Q2xhdWRlUHJvbXB0Q2FjaGluZyh7XG4gICAgICAgIG1lc3NhZ2VzOiBvcHRzLm1lc3NhZ2VzLFxuICAgICAgICBwcm92aWRlcklkOiBwcm92aWRlcixcbiAgICAgICAgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0LFxuICAgICAgfSlcbiAgICA6IG9wdHMubWVzc2FnZXM7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlczogY2FjaGVkTWVzc2FnZXMsXG4gICAgcHJvdmlkZXJPcHRpb25zLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlQ2h1bmsgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgeyBTZXNzaW9uTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IGdldEFjdGl2ZVJ1bnMsIHJlcGxheUFjdGl2ZVJ1biB9IGZyb20gXCIuL3NlbmRcIjtcblxuZXhwb3J0IHR5cGUgU3RyZWFtT3B0aW9ucyA9IHtcbiAgbWVzc2FnZUlkPzogc3RyaW5nO1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dSdW5MaWtlID0ge1xuICBnZXRSZWFkYWJsZShvcHRpb25zPzogeyBzdGFydEluZGV4PzogbnVtYmVyIH0pOiBSZWFkYWJsZVN0cmVhbTtcbn07XG5cbmZ1bmN0aW9uIGlzV29ya2Zsb3dSdW4oYXJnOiB1bmtub3duKTogYXJnIGlzIFdvcmtmbG93UnVuTGlrZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGFyZyAhPT0gbnVsbCAmJlxuICAgIFwiZ2V0UmVhZGFibGVcIiBpbiBhcmcgJiZcbiAgICB0eXBlb2YgKGFyZyBhcyBXb3JrZmxvd1J1bkxpa2UpLmdldFJlYWRhYmxlID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbShcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxuICBydW5Pck9wdHM/OiBXb3JrZmxvd1J1bkxpa2UgfCBTdHJlYW1PcHRpb25zXG4pOiBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPj4ge1xuICBpZiAoaXNXb3JrZmxvd1J1bihydW5Pck9wdHMpKSB7XG4gICAgY29uc3QgcmVhZGVyID0gcnVuT3JPcHRzLmdldFJlYWRhYmxlKCkuZ2V0UmVhZGVyKCk7XG4gICAgLy8gYXdhaXQgZm9yIHRoZSBmaXJzdCBjaHVuayB0byBiZSByZWFkeSBiZWZvcmUgZmluaXNoaW5nIHRoZSB3b3JrZmxvdyB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICBhd2FpdCByZWFkZXIucmVhZCgpLmNhdGNoKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBTdHJlYW1FcnJvcih7XG4gICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIHJlYXNvbjogXCJzdHJlYW0oKSBmYWlsZWQgdG8gcmVhZCBmaXJzdCBjaHVuayBmcm9tIHdvcmtmbG93IHJ1blwiLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVhZGVyLmNhbmNlbCgpO1xuXG4gICAgcmV0dXJuIHJ1bk9yT3B0cy5nZXRSZWFkYWJsZSgpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHJ1bk9yT3B0cztcbiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBTZXNzaW9uTm90Rm91bmRFcnJvcih7IGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQgfSk7XG4gIH1cbiAgY29uc3QgbWVzc2FnZUlkID0gb3B0cz8ubWVzc2FnZUlkID8/IHNlc3Npb24ubGFzdE1lc3NhZ2VJZDtcbiAgaWYgKCFtZXNzYWdlSWQpIHtcbiAgICB0aHJvdyBuZXcgU3RyZWFtRXJyb3Ioe1xuICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHJlYXNvbjogXCJObyBtZXNzYWdlIHRvIHN0cmVhbVwiLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlUnVucyA9IGdldEFjdGl2ZVJ1bnMoKTtcbiAgY29uc3QgYWN0aXZlID0gYWN0aXZlUnVucy5nZXQobWVzc2FnZUlkKTtcbiAgaWYgKCFhY3RpdmUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmdldChtZXNzYWdlSWQpO1xuICAgIGlmIChtZXNzYWdlPy53b3JrZmxvd1J1bklkKSB7XG4gICAgICBjb25zdCByZWFkYWJsZSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93L2FwaVwiKVxuICAgICAgICAudGhlbigoeyBnZXRSdW4gfSkgPT4gZ2V0UnVuKG1lc3NhZ2Uud29ya2Zsb3dSdW5JZCEpLmdldFJlYWRhYmxlKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgaWYgKHJlYWRhYmxlKSB7XG4gICAgICAgIHJldHVybiByZWFkYWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgU3RyZWFtRXJyb3Ioe1xuICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHJlYXNvbjogYE5vIGFjdGl2ZSBydW4gZm9yIG1lc3NhZ2UgJHttZXNzYWdlSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXBsYXlBY3RpdmVSdW4oYWN0aXZlLCBvcHRzPy5zdGFydEluZGV4KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRXJyb3JzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1FcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RyZWFtRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTdHJlYW0gZmFpbGVkIGZvciBzZXNzaW9uICRpZDogJHJlYXNvblwiLFxufSkge31cbiIsICJpbXBvcnQgdHlwZSB7IFNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgdHlwZSBVcGRhdGVPcHRpb25zPFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFBhcnRpYWw8T21pdDxTZXNzaW9uLCBcImlkXCIgfCBcImNyZWF0ZWRBdFwiIHwgXCJ1cGRhdGVkQXRcIiB8IFwic3RhdGVcIj4+ICYge1xuICBzdGF0ZT86IFRTdGF0ZTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGU8XG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIG9wdHM6IFVwZGF0ZU9wdGlvbnM8VFN0YXRlPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgdXBkYXRlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhvcHRzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgKTtcblxuICBpZiAoT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsIHtcbiAgICAuLi51cGRhdGVzLFxuICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY29tcHV0ZVNlc3Npb25Vc2FnZSwgdHlwZSBTZXNzaW9uVXNhZ2UgfSBmcm9tIFwiLi4vdXRpbHMvdXNhZ2VcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVzYWdlKFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHRcbik6IFByb21pc2U8U2Vzc2lvblVzYWdlPiB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcbiAgcmV0dXJuIGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXMpO1xufVxuIiwgImltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tIFwiQHdvcmtmbG93L3NlcmRlXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VIYW5kbGVycyAocHVibGljLCBmbGF0KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUhhbmRsZXJzID0ge1xuICBcInNlc3Npb24uZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgXCJzZXNzaW9uLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNlc3Npb24gfSk6IFByb21pc2U8dm9pZD47XG4gIFwic2Vzc2lvbi51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+O1xuICB9KTogUHJvbWlzZTxTZXNzaW9uPjtcblxuICBcIm1lc3NhZ2UuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPjtcbiAgXCJtZXNzYWdlLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IE1lc3NhZ2UgfSk6IFByb21pc2U8dm9pZD47XG4gIFwibWVzc2FnZS51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+O1xuICB9KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPE1lc3NhZ2VbXT47XG5cbiAgXCJwYXJ0LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gIFwicGFydC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBQYXJ0IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydFtdPjtcblxuICBcInNhbmRib3guZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgXCJzYW5kYm94LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNhbmRib3ggfSk6IFByb21pc2U8dm9pZD47XG4gIFwic2FuZGJveC51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNhbmRib3g+O1xuICB9KTogUHJvbWlzZTxTYW5kYm94PjtcblxuICBcInNldHVwLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICBcInNldHVwLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNldHVwIH0pOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VDYWxsIChkZXJpdmVkIGZyb20gU3RvcmFnZUhhbmRsZXJzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNhbGwgPSB7XG4gIFtLIGluIGtleW9mIFN0b3JhZ2VIYW5kbGVyc106IHsgbWV0aG9kOiBLIH0gJiBQYXJhbWV0ZXJzPFxuICAgIFN0b3JhZ2VIYW5kbGVyc1tLXVxuICA+WzBdO1xufVtrZXlvZiBTdG9yYWdlSGFuZGxlcnNdO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZVN0ZXAgKHNlcmlhbGl6YWJsZSBhY3Jvc3Mgd29ya2Zsb3cgYm91bmRhcnkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZVN0ZXAge1xuICBldmVudDogU3RvcmFnZUNhbGw7XG5cbiAgY29uc3RydWN0b3IoZXZlbnQ6IFN0b3JhZ2VDYWxsKSB7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBTdG9yYWdlU3RlcCkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnN0YW5jZS5ldmVudCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyBldmVudDogU3RvcmFnZUNhbGwgfSkge1xuICAgIHJldHVybiBuZXcgU3RvcmFnZVN0ZXAoZGF0YS5ldmVudCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNhZmUgZGlzcGF0Y2ggXHUyMDE0IGV2ZW50Lm1ldGhvZCBzZWxlY3RzIHRoZSBtYXRjaGluZyBoYW5kbGVyXG4gIG9uKGhhbmRsZXJzOiBTdG9yYWdlSGFuZGxlcnMpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2VlIGFib3ZlXG4gICAgcmV0dXJuIChoYW5kbGVyc1t0aGlzLmV2ZW50Lm1ldGhvZF0gYXMgYW55KSh0aGlzLmV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgc3RvcmFnZSBvcGVyYXRpb25zLiBJbnRlbmRlZCB0byBiZVxuICogbWFya2VkIHdpdGggYFwidXNlIHN0ZXBcImAgc28gdGhhdCBpdHMgYm9keSAoYW5kIE5vZGUuanMtZGVwZW5kZW50XG4gKiBpbXBvcnRzIGxpa2UgZGF0YWJhc2UgY2xpZW50cykgaXMgZXh0cmFjdGVkIGJ5IHRoZSB3b3JrZmxvdyBidW5kbGVyXG4gKiBhbmQgcnVucyBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBUaGUgc3RlcCByZWNlaXZlcyBhIGBTdG9yYWdlU3RlcGAgaW5zdGFuY2UgKHNlcmlhbGl6YWJsZSB2aWFcbiAqIGBAd29ya2Zsb3cvc2VyZGVgKSBhbmQgc2hvdWxkIGNhbGwgYHN0ZXAuaGFuZGxlKHsgLi4uIH0pYCB3aXRoIGFcbiAqIGBTdG9yYWdlSGFuZGxlcnNgIG1hcC5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzdGVwIGZ1bmN0aW9uIGlzIGEgZGlzcGF0Y2hlcjsgdHlwZSBzYWZldHkgaXMgYXQgdGhlIGhhbmRsZXJzIGxldmVsXG5leHBvcnQgdHlwZSBTdG9yYWdlU3RlcEZ1bmN0aW9uID0gKHN0b3JlOiBTdG9yYWdlU3RlcCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZSAoaW50ZXJuYWwsIG5lc3RlZCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZSB7XG4gIHNlc3Npb246IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj4pOiBQcm9taXNlPFNlc3Npb24+O1xuICB9O1xuICBtZXNzYWdlOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlW10+O1xuICB9O1xuICBwYXJ0OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogUGFydCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydFtdPjtcbiAgfTtcbiAgc2FuZGJveDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNhbmRib3gpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTYW5kYm94Pik6IFByb21pc2U8U2FuZGJveD47XG4gIH07XG4gIHNldHVwOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNldHVwKTogUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUlucHV0ID0gU3RvcmFnZUhhbmRsZXJzIHwgU3RvcmFnZVN0ZXBGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNTdGVwRnVuY3Rpb24oaDogU3RvcmFnZUlucHV0KTogaCBpcyBTdG9yYWdlU3RlcEZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGZyb21TdGVwRnVuY3Rpb24oZm46IFN0b3JhZ2VTdGVwRnVuY3Rpb24pOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24udXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJvbUhhbmRsZXJzKGg6IFN0b3JhZ2VIYW5kbGVycyk6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2Vzc2lvbi5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNlc3Npb24uc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzZXNzaW9uLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJtZXNzYWdlLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wibWVzc2FnZS5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcIm1lc3NhZ2UudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wibWVzc2FnZS5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJwYXJ0LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wicGFydC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wicGFydC5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzYW5kYm94LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2FuZGJveC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNhbmRib3gudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXR1cC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNldHVwLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdG9yYWdlKGg6IFN0b3JhZ2VJbnB1dCk6IFN0b3JhZ2Uge1xuICByZXR1cm4gaXNTdGVwRnVuY3Rpb24oaCkgPyBmcm9tU3RlcEZ1bmN0aW9uKGgpIDogZnJvbUhhbmRsZXJzKGgpO1xufVxuIiwgImNvbnN0IERFRkFVTFRfTUFYX1JFVFJJRVMgPSAzO1xuXG4vKipcbiAqIFdlIGludGVudGlvbmFsbHkgbWlycm9yIHRoZSBtaW5pbWFsIGBnZXQoKWAgcmV0dXJuIHNoYXBlIHdlIHVzZSBoZXJlXG4gKiBpbnN0ZWFkIG9mIGltcG9ydGluZyBLVjIgdHlwZXMuIFRoZSB3b3JrZmxvdyBidW5kbGVyIGFuYWx5emVzIHR5cGUtb25seVxuICogaW1wb3J0cyBhbmQgZmxhZ3MgYEB2ZXJjZWwva3YyYCBhcyBhIE5vZGUgbW9kdWxlIGluIHdvcmtmbG93IGNvZGUgcGF0aHMuXG4gKiBLZWVwaW5nIHRoaXMgbG9jYWwgYXZvaWRzIHRoYXQgZmFsc2UtcG9zaXRpdmUgd2hpbGUgcHJlc2VydmluZyBydW50aW1lIGJlaGF2aW9yLlxuICovXG50eXBlIEtWT3B0aW1pc3RpY0dldFJlc3VsdDxUPiA9XG4gIHwge1xuICAgICAgZXhpc3RzOiBmYWxzZTtcbiAgICB9XG4gIHwge1xuICAgICAgZXhpc3RzOiB0cnVlO1xuICAgICAgdmFsdWU6IFByb21pc2U8VD47XG4gICAgICB1cGRhdGUodmFsdWU6IFQpOiBQcm9taXNlPHVua25vd24+O1xuICAgIH07XG5cbnR5cGUgS1ZPcHRpbWlzdGljU3RvcmU8VD4gPSB7XG4gIGdldChrZXlPckZpbHRlcjogc3RyaW5nKTogUHJvbWlzZTxLVk9wdGltaXN0aWNHZXRSZXN1bHQ8VD4+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxUPihvcHRzOiB7XG4gIGlkOiBzdHJpbmc7XG4gIHVwZGF0ZXM6IFBhcnRpYWw8VD47XG4gIHN0b3JlOiBLVk9wdGltaXN0aWNTdG9yZTxUPjtcbiAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgbWF4UmV0cmllcyA9IG9wdHMubWF4UmV0cmllcyA/PyBERUZBVUxUX01BWF9SRVRSSUVTO1xuICBjb25zdCB7IEtWVmVyc2lvbkNvbmZsaWN0RXJyb3IgfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwva3YyXCIpO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBvcHRzLnN0b3JlLmdldChvcHRzLmlkKTtcbiAgICBpZiAoIWVudHJ5LmV4aXN0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG9wdHMubm90Rm91bmRFcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZW50cnkudmFsdWU7XG4gICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLm9wdHMudXBkYXRlcyB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVudHJ5LnVwZGF0ZSh1cGRhdGVkKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEoZXJyb3IgaW5zdGFuY2VvZiBLVlZlcnNpb25Db25mbGljdEVycm9yKSAmJlxuICAgICAgICAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB8fCBlcnJvci5uYW1lICE9PSBcIktWVmVyc2lvbkNvbmZsaWN0RXJyb3JcIilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dGVtcHQgPT09IG1heFJldHJpZXMgLSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihvcHRzLmNvbmZsaWN0RXJyb3JNZXNzYWdlLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3Iob3B0cy5jb25mbGljdEVycm9yTWVzc2FnZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlIH0gZnJvbSBcIi4va3Ytb3B0aW1pc3RpYy11cGRhdGVcIjtcblxudHlwZSBLdlN0b3JlcyA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgaW5pdEt2U3RvcmVzPj47XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRLdlN0b3JlcyhwcmVmaXg6IHN0cmluZykge1xuICBjb25zdCB7IGNyZWF0ZUtWIH0gPSBhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL2t2MlwiKTtcbiAgY29uc3Qga3YgPSBjcmVhdGVLVih7IHByZWZpeCB9KS5nZXRTdG9yZShcImFnZW50L1wiKTtcblxuICByZXR1cm4ge1xuICAgIHNlc3Npb25zOiBrdi5nZXRTdG9yZTxTZXNzaW9uPihcInNlc3Npb24vXCIpLFxuICAgIG1lc3NhZ2VzOiBrdi5nZXRTdG9yZTxNZXNzYWdlPihcIm1lc3NhZ2UvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKG06IE1lc3NhZ2UpID0+IG0uc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgcGFydHM6IGt2LmdldFN0b3JlPFBhcnQ+KFwicGFydC9cIikud2l0aEluZGV4ZXMoe1xuICAgICAgYnlTZXNzaW9uSWQ6IHsga2V5OiAocDogUGFydCkgPT4gcC5zZXNzaW9uSWQgfSxcbiAgICB9KSxcbiAgICBzYW5kYm94ZXM6IGt2LmdldFN0b3JlPFNhbmRib3g+KFwic2FuZGJveC9cIiksXG4gICAgc2V0dXBzOiBrdi5nZXRTdG9yZTxTZXR1cD4oXCJzZXR1cC9cIiksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrdlN0b3JhZ2VGYWxsYmFjayhvcHRzOiB7IHByZWZpeDogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBsZXQgc3RvcmVzUHJvbWlzZTogUHJvbWlzZTxLdlN0b3Jlcz4gfCB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gZ2V0U3RvcmVzKCkge1xuICAgIGlmICghc3RvcmVzUHJvbWlzZSkge1xuICAgICAgc3RvcmVzUHJvbWlzZSA9IGluaXRLdlN0b3JlcyhvcHRzLnByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZXNQcm9taXNlO1xuICB9XG5cbiAgY29uc3QgdGFnID0gYFthZ2VudC4ke29wdHMucHJlZml4fV1ba3YyXWA7XG5cbiAgcmV0dXJuIHtcbiAgICBcInNlc3Npb24uZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzZXNzaW9ucy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2Vzc2lvbnMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogYXN5bmMgKHsgaWQsIHVwZGF0ZXMgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPFNlc3Npb24+KHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHN0b3JlOiBzZXNzaW9ucyxcbiAgICAgICAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2Vzc2lvbi51cGRhdGVdIG5vIHNlc3Npb24gZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgLFxuICAgICAgICBjb25mbGljdEVycm9yTWVzc2FnZTogYCR7dGFnfVtzZXNzaW9uLnVwZGF0ZV0gb3B0aW1pc3RpYyB1cGRhdGUgZmFpbGVkIGFmdGVyIHJldHJpZXMgZm9yIGlkIFwiJHtpZH1cImAsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgbWVzc2FnZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2Uuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxNZXNzYWdlPih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogbWVzc2FnZXMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBubyBtZXNzYWdlIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bbWVzc2FnZS51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogTWVzc2FnZVtdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFssIGVudHJ5XSBvZiBtZXNzYWdlcy5lbnRyaWVzKHtcbiAgICAgICAgYnlTZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IGVudHJ5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHBhcnRzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBwYXJ0cy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBQYXJ0W10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIHBhcnRzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNhbmRib3hlcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNhbmRib3hlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPFNhbmRib3g+KHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHN0b3JlOiBzYW5kYm94ZXMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W3NhbmRib3gudXBkYXRlXSBubyBzYW5kYm94IGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2FuZGJveC51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwic2V0dXAuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2V0dXBzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNldHVwcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxubGV0IF9mczogdHlwZW9mIGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIikgfCB1bmRlZmluZWQ7XG5sZXQgX3BhdGg6IHR5cGVvZiBpbXBvcnQoXCJub2RlOnBhdGhcIikgfCB1bmRlZmluZWQ7XG5cbmFzeW5jIGZ1bmN0aW9uIGZzKCkge1xuICBpZiAoIV9mcykge1xuICAgIF9mcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIH1cbiAgcmV0dXJuIF9mcztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIGlmICghX3BhdGgpIHtcbiAgICBfcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgfVxuICByZXR1cm4gX3BhdGg7XG59XG5cbnR5cGUgV3JpdGVMb2NrU3RhdGUgPSB7XG4gIGxvY2tlZDogYm9vbGVhbjtcbiAgd2FpdGVyczogQXJyYXk8KCkgPT4gdm9pZD47XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVXcml0ZUxvY2soKSB7XG4gIGNvbnN0IGxvY2tzID0gbmV3IE1hcDxzdHJpbmcsIFdyaXRlTG9ja1N0YXRlPigpO1xuXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiB3aXRoV3JpdGVMb2NrPFQ+KG9wdHM6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBmbjogKCkgPT4gUHJvbWlzZTxUPjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGxldCBzdGF0ZSA9IGxvY2tzLmdldChvcHRzLmtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgc3RhdGUgPSB7IGxvY2tlZDogZmFsc2UsIHdhaXRlcnM6IFtdIH07XG4gICAgICBsb2Nrcy5zZXQob3B0cy5rZXksIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubG9ja2VkKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzdGF0ZS53YWl0ZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0ZS5sb2NrZWQgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBvcHRzLmZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdGF0ZS53YWl0ZXJzLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgbG9ja3MuZGVsZXRlKG9wdHMua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQ+KGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICAgIChhd2FpdCBwYXRoKCkpLmpvaW4oZGlyLCBgJHtrZXl9Lmpzb25gKTtcbiAgY29uc3Qgd2l0aFdyaXRlTG9jayA9IGNyZWF0ZVdyaXRlTG9jaygpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgd2l0aFdyaXRlTG9jayh7XG4gICAgICAgIGtleSxcbiAgICAgICAgZm46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxUPik6IFByb21pc2U8VD4ge1xuICAgICAgcmV0dXJuIHdpdGhXcml0ZUxvY2soe1xuICAgICAgICBrZXksXG4gICAgICAgIGZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgICAgICBsZXQgZXhpc3Rpbmc6IFQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwLCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFQ7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQsIG51bGwsIDIpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxGcm9tRGlyPFQ+KGRpcjogc3RyaW5nKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgeyByZWFkZGlyLCByZWFkRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBwYXRoKCk7XG4gIGxldCBmaWxlczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZmlsZXMgPSBhd2FpdCByZWFkZGlyKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBpZiAoIWZpbGUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUoam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xuICAgICAgcmVzdWx0LnB1c2goSlNPTi5wYXJzZShkYXRhKSBhcyBUKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNraXAgY29ycnVwdCBmaWxlc1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVHaXRpZ25vcmUoZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlLCByZWFkRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBwYXRoKCk7XG4gIGNvbnN0IGdpdGlnbm9yZVBhdGggPSBqb2luKGRpciwgXCIuZ2l0aWdub3JlXCIpO1xuICB0cnkge1xuICAgIGF3YWl0IHJlYWRGaWxlKGdpdGlnbm9yZVBhdGgsIFwidXRmLThcIik7XG4gIH0gY2F0Y2gge1xuICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGdpdGlnbm9yZVBhdGgsIFwiKlxcblwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxTdG9yYWdlKG9wdHM/OiB7IGRpcj86IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgY29uc3QgZGlyID0gb3B0cz8uZGlyID8/IFwiLmFnZW50XCI7XG4gIGxldCBnaXRpZ25vcmVQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2Vzc2lvblN0b3JlID0gY3JlYXRlU3RvcmU8U2Vzc2lvbj4oYCR7ZGlyfS9zZXNzaW9uYCk7XG4gIGNvbnN0IG1lc3NhZ2VTdG9yZSA9IGNyZWF0ZVN0b3JlPE1lc3NhZ2U+KGAke2Rpcn0vbWVzc2FnZWApO1xuICBjb25zdCBwYXJ0U3RvcmUgPSBjcmVhdGVTdG9yZTxQYXJ0PihgJHtkaXJ9L3BhcnRgKTtcbiAgY29uc3Qgc2FuZGJveFN0b3JlID0gY3JlYXRlU3RvcmU8U2FuZGJveD4oYCR7ZGlyfS9zYW5kYm94YCk7XG4gIGNvbnN0IHNldHVwU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXR1cD4oYCR7ZGlyfS9zZXR1cGApO1xuICBjb25zdCBtZXNzYWdlRGlyID0gYCR7ZGlyfS9tZXNzYWdlYDtcbiAgY29uc3QgcGFydERpciA9IGAke2Rpcn0vcGFydGA7XG5cbiAgZnVuY3Rpb24gb25Xcml0ZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICghZ2l0aWdub3JlUHJvbWlzZSkge1xuICAgICAgZ2l0aWdub3JlUHJvbWlzZSA9IGVuc3VyZUdpdGlnbm9yZShkaXIpO1xuICAgIH1cbiAgICByZXR1cm4gZ2l0aWdub3JlUHJvbWlzZS50aGVuKGZuKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2Vzc2lvblN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiAoeyBpZCB9KSA9PiBtZXNzYWdlU3RvcmUuZ2V0KGlkKSxcbiAgICBcIm1lc3NhZ2Uuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBtZXNzYWdlU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxNZXNzYWdlPihtZXNzYWdlRGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChtKSA9PiBtLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiAoeyBpZCB9KSA9PiBwYXJ0U3RvcmUuZ2V0KGlkKSxcbiAgICBcInBhcnQuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBvbldyaXRlKCgpID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKHApID0+IHAuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6ICh7IGlkIH0pID0+IHNhbmRib3hTdG9yZS5nZXQoaWQpLFxuICAgIFwic2FuZGJveC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNhbmRib3hTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJzYW5kYm94LnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzYW5kYm94U3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG9uV3JpdGUoKCkgPT4gc2V0dXBTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gIH07XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEZhbGxiYWNrVG9LVjIoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXByb2Nlc3MuZW52LkJMT0JfUkVBRF9XUklURV9UT0tFTjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEluZmVyVG9vbElucHV0LFxuICBJbmZlclVJVG9vbHMsXG4gIE1vZGVsTWVzc2FnZSxcbiAgVG9vbFNldCxcbiAgVUlNZXNzYWdlLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluVG9vbE5hbWUsIGJ1aWx0SW5Ub29scywgVG9vbENvbnRleHQgfSBmcm9tIFwiLi4vdG9vbHNcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi9jbGllbnRcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEFnZW50IFN0YXR1cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBUcmFuc2llbnQgc3RhdHVzIGluZGljYXRvcnMgZW1pdHRlZCBvdmVyIHRoZSBzdHJlYW0gZHVyaW5nIGxvbmctcnVubmluZyBwaGFzZXMuXG4gKiBEZWxpdmVyZWQgdG8gdGhlIGNsaWVudCBhcyBgZGF0YS1zdGF0dXNgIGNodW5rcyB3aXRoIGB0cmFuc2llbnQ6IHRydWVgIFx1MjAxNCBub3QgcGVyc2lzdGVkLlxuICovXG5leHBvcnQgY29uc3QgQWdlbnRTdGF0dXMgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInNhbmRib3gtc2V0dXBcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwic2FuZGJveC1zZXR1cC1jb2xkXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcImxvYWRpbmctc2tpbGxzXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInByb2Nlc3NpbmctYXBwcm92YWxzXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcIm5lZWRzLWFwcHJvdmFsXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInRoaW5raW5nXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcImN1c3RvbVwiKSwgc3RhdHVzOiB6LnN0cmluZygpIH0pLFxuXSk7XG5cbmV4cG9ydCB0eXBlIEFnZW50U3RhdHVzID0gei5pbmZlcjx0eXBlb2YgQWdlbnRTdGF0dXM+O1xuXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSG9va3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIEFnZW50SG9va3MgPSB7XG4gIFwidG9vbC5iZWZvcmVcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgaW5wdXQ6IHVua25vd24gfT47XG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICBzdGF0dXM/OiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgTmVlZHMgQXBwcm92YWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbnR5cGUgVG9vbE5hbWU8VG9vbHM+ID0gRXh0cmFjdDxrZXlvZiBUb29scywgc3RyaW5nPiB8IEJ1aWx0SW5Ub29sTmFtZTtcblxudHlwZSBUb29sSW5wdXQ8VG9vbHMsIEs+ID0gSyBleHRlbmRzIEJ1aWx0SW5Ub29sTmFtZVxuICA/IEluZmVyVG9vbElucHV0PCh0eXBlb2YgYnVpbHRJblRvb2xzKVtLXT5cbiAgOiBLIGV4dGVuZHMga2V5b2YgVG9vbHNcbiAgICA/IFRvb2xzW0tdIGV4dGVuZHMgaW1wb3J0KFwiYWlcIikuVG9vbFxuICAgICAgPyBJbmZlclRvb2xJbnB1dDxUb29sc1tLXT5cbiAgICAgIDogdW5rbm93blxuICAgIDogdW5rbm93bjtcblxuZXhwb3J0IHR5cGUgTmVlZHNBcHByb3ZhbE1hcDxUb29scz4gPSB7XG4gIFtLIGluIFRvb2xOYW1lPFRvb2xzPl0/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgKChcbiAgICAgICAgaW5wdXQ6IFRvb2xJbnB1dDxUb29scywgSz4sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gICAgICAgICAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmtub3duO1xuICAgICAgICB9XG4gICAgICApID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KTtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBJbmZlciBVSSBNZXNzYWdlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7XG4gIHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldDtcbiAgJFVJTWVzc2FnZTogVUlNZXNzYWdlPGluZmVyIE0+O1xufVxuICA/IFVJTWVzc2FnZTxNLCBBZ2VudERhdGFUeXBlcywgSW5mZXJVSVRvb2xzPFQ+PlxuICA6IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gICAgPyBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUPj5cbiAgICA6IFVJTWVzc2FnZTx1bmtub3duLCBBZ2VudERhdGFUeXBlcz47XG5cbmV4cG9ydCB0eXBlIFR5cGVkVUlNZXNzYWdlPFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0ID0gVG9vbFNldCxcbj4gPSBVSU1lc3NhZ2U8VE1lc3NhZ2VNZXRhZGF0YSwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUmVnaXN0cnkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNsYXNzIEFnZW50Tm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiQWdlbnROb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IGBBZ2VudCBcIiRhZ2VudE5hbWVcIiBub3QgZm91bmQgaW4gcmVnaXN0cnkuXG5cbmhpbnQ6IGFnZW50KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHdvcmtmbG93IHN0ZXBzIGV4ZWN1dGUuXG4gICAgICBWYWxpZCBsb2NhdGlvbnM6IG1vZHVsZSBzY29wZSwgb3IgaW5zaWRlIGEgXCJ1c2Ugd29ya2Zsb3dcIiBib2R5LlxuXG4gIC8vIE1vZHVsZSBzY29wZSAoc3RhdGljIGFnZW50cylcbiAgZXhwb3J0IGNvbnN0IG15QWdlbnQgPSBhZ2VudChcIiRhZ2VudE5hbWVcIiwgeyAuLi4gfSk7XG5cbiAgLy8gV29ya2Zsb3cgYm9keSAoZHluYW1pYyBhZ2VudHMpXG4gIGFzeW5jIGZ1bmN0aW9uIG15V29ya2Zsb3coeyBpbnB1dCB9KSB7XG4gICAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgICBjb25zdCBteUFnZW50ID0gYWdlbnQoXCIkYWdlbnROYW1lXCIsIHsgLi4uIH0pO1xuICAgIC4uLlxuICB9YCxcbn0pIHt9XG5cbmNvbnN0IEFHRU5UX1JFR0lTVFJZX0tFWSA9IFN5bWJvbC5mb3IoXCJleHBlcmltZW50YWwtYWdlbnQtcmVnaXN0cnlcIik7XG5cbmZ1bmN0aW9uIGdldEFnZW50UmVnaXN0cnkoKTogTWFwPHN0cmluZywgQW55QWdlbnQ+IHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj47XG4gIGxldCByZWdpc3RyeSA9IGdbQUdFTlRfUkVHSVNUUllfS0VZXSBhcyBNYXA8c3RyaW5nLCBBbnlBZ2VudD4gfCB1bmRlZmluZWQ7XG4gIGlmICghcmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBnW0FHRU5UX1JFR0lTVFJZX0tFWV0gPSByZWdpc3RyeTtcbiAgfVxuICByZXR1cm4gcmVnaXN0cnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFnZW50KG5hbWU6IHN0cmluZywgYWdlbnQ6IEFueUFnZW50KSB7XG4gIGdldEFnZW50UmVnaXN0cnkoKS5zZXQobmFtZSwgYWdlbnQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZW50PFJlcXVpcmVkIGV4dGVuZHMgYm9vbGVhbj4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcmVxdWlyZWQ/OiBSZXF1aXJlZFxuKTogUmVxdWlyZWQgZXh0ZW5kcyB0cnVlID8gQW55QWdlbnQgOiBBbnlBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFnZW50ID0gZ2V0QWdlbnRSZWdpc3RyeSgpLmdldChuYW1lKTtcbiAgaWYgKHJlcXVpcmVkICYmICFhZ2VudCkge1xuICAgIHRocm93IG5ldyBBZ2VudE5vdEZvdW5kRXJyb3IoeyBhZ2VudE5hbWU6IG5hbWUgfSk7XG4gIH1cbiAgcmV0dXJuIGFnZW50IGFzIFJlcXVpcmVkIGV4dGVuZHMgdHJ1ZSA/IEFueUFnZW50IDogQW55QWdlbnQgfCB1bmRlZmluZWQ7XG59XG4iLCAiaW1wb3J0IHsgb3BlbmFwaSB9IGZyb20gXCJAZWx5c2lhanMvb3BlbmFwaVwiO1xuaW1wb3J0IHsgY3JlYXRlVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCBFbHlzaWEgZnJvbSBcImVseXNpYVwiO1xuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgQWdlbnRTdGF0dXMsXG4gIHR5cGUgQW55QWdlbnQsXG4gIHR5cGUgU2Vzc2lvblNlbmRBcmdzLFxufSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNlbmRSZXN1bHQgfSBmcm9tIFwiLi4vc2Vzc2lvbi9zZW5kXCI7XG5pbXBvcnQge1xuICB0eXBlIEFnZW50Q29udHJhY3QsXG4gIGFnZW50Q29udHJhY3QsXG4gIHR5cGUgSW5mZXJDb250cmFjdCxcbiAgdHlwZSBJbmZlclJlc3BvbnNlLFxufSBmcm9tIFwiLi9hZ2VudENvbnRyYWN0XCI7XG5pbXBvcnQgeyB0eXBlIEJhc2VQYXRoLCBiYXNlUGF0aEZvckFnZW50IH0gZnJvbSBcIi4vYmFzZS1wYXRoXCI7XG5cbnR5cGUgV2l0aG91dDxPLCBLIGV4dGVuZHMga2V5b2YgTz4gPSBPbWl0PE8sIEs+O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdDxcbiAgQWdlbnQgZXh0ZW5kcyBBbnlBZ2VudCxcbiAgQWdlbnRCYXNlUGF0aCBleHRlbmRzIHN0cmluZyA9IEJhc2VQYXRoLFxuPihcbiAgYWdlbnQ6IEFnZW50LFxuICBvcHRpb25zOiB7XG4gICAgYmFzZVBhdGg/OiBBZ2VudEJhc2VQYXRoO1xuICAgIHdvcmtmbG93PzogKFxuICAgICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAuLi5hcmdzOiBTZXNzaW9uU2VuZEFyZ3M8QWdlbnQ+XG4gICAgKSA9PiBQcm9taXNlPFNlbmRSZXN1bHQ+O1xuICAgIG92ZXJyaWRlcz86IHtcbiAgICAgIFtLIGluIGtleW9mIEFnZW50Q29udHJhY3Q8QWdlbnQ+XT86IChcbiAgICAgICAgY29udHJhY3Q6IFdpdGhvdXQ8SW5mZXJDb250cmFjdDxBZ2VudD5bS10sIFwicmVzcG9uc2VcIj4sXG4gICAgICAgIG5leHQ6ICgpID0+IFByb21pc2U8SW5mZXJSZXNwb25zZTxBZ2VudCwgSz4gfCBSZXNwb25zZT5cbiAgICAgICkgPT4gUHJvbWlzZTxJbmZlclJlc3BvbnNlPEFnZW50LCBLPiB8IFJlc3BvbnNlPjtcbiAgICB9O1xuICB9ID0ge31cbikge1xuICBjb25zdCB7IGJhc2VQYXRoID0gYmFzZVBhdGhGb3JBZ2VudChhZ2VudC5uYW1lKSwgd29ya2Zsb3cgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgY29udHJhY3QgPSBhZ2VudENvbnRyYWN0KGFnZW50KTtcblxuICBjb25zdCByb3V0ZXIgPSBuZXcgRWx5c2lhKHsgcHJlZml4OiBiYXNlUGF0aCB9KVxuICAgIC51c2UoXG4gICAgICBvcGVuYXBpKHtcbiAgICAgICAgcHJvdmlkZXI6IG51bGwsXG4gICAgICAgIHNwZWNQYXRoOiBcIi9vcGVuYXBpLmpzb25cIixcbiAgICAgICAgZXhjbHVkZTogeyBzdGF0aWNGaWxlOiBmYWxzZSB9LFxuICAgICAgICBkb2N1bWVudGF0aW9uOiB7XG4gICAgICAgICAgaW5mbzoge1xuICAgICAgICAgICAgdGl0bGU6IGAke2FnZW50Lm5hbWV9IEFQSWAsXG4gICAgICAgICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBzY2hlbWFzOiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBlbHlzaWEgaXMgYW5ub3lpbmdcbiAgICAgICAgICAgICAgQWdlbnRTdGF0dXM6IHoudG9KU09OU2NoZW1hKEFnZW50U3RhdHVzLCB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcIm9wZW5hcGktMy4wXCIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY3VyaXR5U2NoZW1lczoge1xuICAgICAgICAgICAgICBiZWFyZXJBdXRoOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJodHRwXCIsXG4gICAgICAgICAgICAgICAgc2NoZW1lOiBcImJlYXJlclwiLFxuICAgICAgICAgICAgICAgIGJlYXJlckZvcm1hdDogXCJKV1RcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFwSnNvblNjaGVtYToge1xuICAgICAgICAgIHpvZDogKHNjaGVtYTogei5ab2RUeXBlKSA9PlxuICAgICAgICAgICAgei50b0pTT05TY2hlbWEoc2NoZW1hLCB7IHRhcmdldDogXCJvcGVuYXBpLTMuMFwiIH0pLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gICAgLmdldChcbiAgICAgIFwiLzpzZXNzaW9uSWRcIixcbiAgICAgIGFzeW5jICh7IHBhcmFtcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGFnZW50LnNlc3Npb24ocGFyYW1zLnNlc3Npb25JZCEpO1xuICAgICAgICAgIGNvbnN0IHVpID0gYXdhaXQgc2Vzc2lvbi5oaXN0b3J5KCk7XG4gICAgICAgICAgcmV0dXJuIHVpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3B0aW9ucy5vdmVycmlkZXM/LltcInNlc3Npb24uZ2V0XCJdO1xuICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIGF3YWl0IG92ZXJyaWRlKFxuICAgICAgICAgICAgICB7IHBhcmFtcyB9LFxuICAgICAgICAgICAgICAvLyBUT0RPIG1ha2UgdGhlIG1pc21hdGNoZWQgdHlwZXMgd2l0aCBBSSBTREsgbGVzcyB3ZWlyZFxuICAgICAgICAgICAgICBuZXh0IGFzICgpID0+IFByb21pc2U8XG4gICAgICAgICAgICAgICAgSW5mZXJSZXNwb25zZTxBZ2VudCwgXCJzZXNzaW9uLmdldFwiPiB8IFJlc3BvbnNlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oYXdhaXQgbmV4dCgpKTtcbiAgICAgIH0sXG4gICAgICBjb250cmFjdFtcInNlc3Npb24uZ2V0XCJdXG4gICAgKVxuICAgIC5wb3N0KFxuICAgICAgXCIvOnNlc3Npb25JZFwiLFxuICAgICAgYXN5bmMgKHsgcGFyYW1zLCBib2R5IH0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYWdlbnQuc2Vzc2lvbihwYXJhbXMuc2Vzc2lvbklkISk7XG5cbiAgICAgICAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93L2FwaVwiKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQoXG4gICAgICAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiwgc3RhcnQoKSByZXF1aXJlcyBTZXNzaW9uU2VuZEFyZ3M8QW55QWdlbnQ+XG4gICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGJsb3dpbmcgdXAgdHlwZXNcbiAgICAgICAgICAgICAgLy8gd2Ugd2FudCB0byBwdXQgdGhlIHR5cGVndWFyZCBoZXJlIHNvIGNvbnN1bWVycyBvZiBoYW5kbGVSZXF1ZXN0IHN0aWxsIHdvcmsgZmluZVxuICAgICAgICAgICAgICB3b3JrZmxvdyBhcyAoXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgLi4uYXJnczogU2Vzc2lvblNlbmRBcmdzPEFueUFnZW50PlxuICAgICAgICAgICAgICApID0+IFByb21pc2U8U2VuZFJlc3VsdD4sXG4gICAgICAgICAgICAgIFtwYXJhbXMuc2Vzc2lvbklkISwgYm9keV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBzZXNzaW9uLnN0cmVhbShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKHsgc3RyZWFtIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHNlc3Npb24uc2VuZChib2R5KTtcbiAgICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBzZXNzaW9uLnN0cmVhbSgpO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IG9wdGlvbnMub3ZlcnJpZGVzPy5bXCJzZXNzaW9uLnBvc3RcIl07XG4gICAgICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBvdmVycmlkZSh7IHBhcmFtcywgYm9keSB9LCBuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXh0KCk7XG4gICAgICB9LFxuICAgICAgY29udHJhY3RbXCJzZXNzaW9uLnBvc3RcIl1cbiAgICApXG4gICAgLmdldChcbiAgICAgIFwiLzpzZXNzaW9uSWQvcmVjb25uZWN0XCIsXG4gICAgICBhc3luYyAoeyBwYXJhbXMgfSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhZ2VudC5zZXNzaW9uKHBhcmFtcy5zZXNzaW9uSWQhKTtcbiAgICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBzZXNzaW9uLnN0cmVhbSgpO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IG9wdGlvbnMub3ZlcnJpZGVzPy5bXCJyZWNvbm5lY3QuZ2V0XCJdO1xuICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgb3ZlcnJpZGUoeyBwYXJhbXMgfSwgbmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgbmV4dCgpO1xuICAgICAgfSxcbiAgICAgIGNvbnRyYWN0W1wicmVjb25uZWN0LmdldFwiXVxuICAgIClcbiAgICAucG9zdChcbiAgICAgIFwiLzpzZXNzaW9uSWQvaW50ZXJydXB0XCIsXG5cbiAgICAgIGFzeW5jICh7IHBhcmFtcywgYm9keSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGFnZW50LnNlc3Npb24ocGFyYW1zLnNlc3Npb25JZCEpO1xuICAgICAgICAgIGF3YWl0IHNlc3Npb24uaW50ZXJydXB0KGJvZHkpO1xuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IG9wdGlvbnMub3ZlcnJpZGVzPy5bXCJpbnRlcnJ1cHQucG9zdFwiXTtcbiAgICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oYXdhaXQgb3ZlcnJpZGUoeyBwYXJhbXMsIGJvZHkgfSwgbmV4dCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oYXdhaXQgbmV4dCgpKTtcbiAgICAgIH0sXG4gICAgICBjb250cmFjdFtcImludGVycnVwdC5wb3N0XCJdXG4gICAgKTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIiwgImltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQge1xuICBidWlsZFNlc3Npb25IaXN0b3J5U2NoZW1hLFxuICBidWlsZFVJTWVzc2FnZVBhcnRTY2hlbWEsXG4gIGJ1aWxkVUlNZXNzYWdlU2NoZW1hLFxufSBmcm9tIFwiLi9zY2hlbWFzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudENvbnRyYWN0PEFnZW50IGV4dGVuZHMgQW55QWdlbnQ+KGFnZW50OiBBZ2VudCkge1xuICBjb25zdCBjb250cmFjdCA9IHtcbiAgICBcInNlc3Npb24uZ2V0XCI6IHtcbiAgICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICB9KSxcbiAgICAgIHJlc3BvbnNlOiBidWlsZFNlc3Npb25IaXN0b3J5U2NoZW1hKGFnZW50KSxcbiAgICB9LFxuICAgIFwic2Vzc2lvbi5wb3N0XCI6IHtcbiAgICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICB9KSxcbiAgICAgIGJvZHk6IHoudW5pb24oW3ouc3RyaW5nKCksIGJ1aWxkVUlNZXNzYWdlU2NoZW1hKGFnZW50LnRvb2xzKV0pLFxuICAgICAgcmVzcG9uc2U6IHouYW55KCksXG4gICAgfSxcbiAgICBcInJlY29ubmVjdC5nZXRcIjoge1xuICAgICAgcGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgICAgIHNlc3Npb25JZDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICAgcmVzcG9uc2U6IHouYW55KCksXG4gICAgfSxcbiAgICBcImludGVycnVwdC5wb3N0XCI6IHtcbiAgICAgIHBhcmFtczogei5vYmplY3Qoe1xuICAgICAgICBzZXNzaW9uSWQ6IHouc3RyaW5nKCksXG4gICAgICB9KSxcbiAgICAgIGJvZHk6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgbGFzdFBhcnQ6IHpcbiAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICBpbmRleDogei5udW1iZXIoKSxcbiAgICAgICAgICAgICAgcGFydDogYnVpbGRVSU1lc3NhZ2VQYXJ0U2NoZW1hKGFnZW50LnRvb2xzKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICByZXNwb25zZTogei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmJvb2xlYW4oKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH0gc2F0aXNmaWVzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgcGFyYW1zOiB6LlpvZFR5cGU7XG4gICAgICBib2R5Pzogei5ab2RUeXBlO1xuICAgICAgcmVzcG9uc2U6IHouWm9kVHlwZTtcbiAgICB9XG4gID47XG5cbiAgcmV0dXJuIGNvbnRyYWN0O1xufVxuXG5leHBvcnQgdHlwZSBBZ2VudENvbnRyYWN0PEFnZW50IGV4dGVuZHMgQW55QWdlbnQ+ID0gUmV0dXJuVHlwZTxcbiAgdHlwZW9mIGFnZW50Q29udHJhY3Q8QWdlbnQ+XG4+O1xuXG5leHBvcnQgdHlwZSBJbmZlckNvbnRyYWN0PEFnZW50IGV4dGVuZHMgQW55QWdlbnQ+ID0ge1xuICBbSyBpbiBrZXlvZiBBZ2VudENvbnRyYWN0PEFnZW50Pl06IHtcbiAgICBbSzIgaW4ga2V5b2YgQWdlbnRDb250cmFjdDxBZ2VudD5bS11dOiB6LmluZmVyPEFnZW50Q29udHJhY3Q8QWdlbnQ+W0tdW0syXT47XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJbmZlclJlc3BvbnNlPFxuICBBZ2VudCBleHRlbmRzIEFueUFnZW50LFxuICBLZXkgZXh0ZW5kcyBrZXlvZiBBZ2VudENvbnRyYWN0PEFnZW50Pixcbj4gPSBJbmZlckNvbnRyYWN0PEFnZW50PltLZXldW1wicmVzcG9uc2VcIl07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBGaWxlVUlQYXJ0LFxuICBJbmZlclVJVG9vbHMsXG4gIFJlYXNvbmluZ1VJUGFydCxcbiAgU291cmNlVXJsVUlQYXJ0LFxuICBTdGVwU3RhcnRVSVBhcnQsXG4gIFRleHRVSVBhcnQsXG4gIFRvb2xTZXQsXG4gIFRvb2xVSVBhcnQsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5cbnR5cGUgVUlNZXNzYWdlUGFydDxUIGV4dGVuZHMgVG9vbFNldD4gPVxuICB8IFRleHRVSVBhcnRcbiAgfCBSZWFzb25pbmdVSVBhcnRcbiAgfCBGaWxlVUlQYXJ0XG4gIHwgU291cmNlVXJsVUlQYXJ0XG4gIHwgU3RlcFN0YXJ0VUlQYXJ0XG4gIHwgVG9vbFVJUGFydDxJbmZlclVJVG9vbHM8VD4+O1xuXG5jb25zdCBUZXh0UGFydCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgdGV4dDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBSZWFzb25pbmdQYXJ0ID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJyZWFzb25pbmdcIiksXG4gIHRleHQ6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgRmlsZVBhcnQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImZpbGVcIiksXG4gIG1lZGlhVHlwZTogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpLFxuICBmaWxlbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IFNvdXJjZVVybFBhcnQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInNvdXJjZS11cmxcIiksXG4gIHNvdXJjZUlkOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgU3RlcFN0YXJ0UGFydCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3RlcC1zdGFydFwiKSxcbn0pO1xuXG5mdW5jdGlvbiB0b29sUGFydFNjaGVtYXMobmFtZTogc3RyaW5nLCB0b29sOiBUb29sU2V0W3N0cmluZ10pIHtcbiAgY29uc3QgaW5wdXQgPSB0b29sLmlucHV0U2NoZW1hID8/IHoudW5rbm93bigpO1xuICBjb25zdCBvdXRwdXQgPSB0b29sLm91dHB1dFNjaGVtYSA/PyB6LnVua25vd24oKTtcbiAgY29uc3QgdHlwZSA9IHoubGl0ZXJhbChgdG9vbC0ke25hbWV9YCk7XG5cbiAgY29uc3QgYXBwcm92YWxJZCA9IHoub2JqZWN0KHsgaWQ6IHouc3RyaW5nKCkgfSk7XG4gIGNvbnN0IGFwcHJvdmFsQXBwcm92ZWQgPSBhcHByb3ZhbElkLmV4dGVuZCh7XG4gICAgYXBwcm92ZWQ6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICByZWFzb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSk7XG4gIGNvbnN0IGFwcHJvdmFsRGVuaWVkID0gYXBwcm92YWxJZC5leHRlbmQoe1xuICAgIGFwcHJvdmVkOiB6LmxpdGVyYWwoZmFsc2UpLFxuICAgIHJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KTtcbiAgY29uc3QgYXBwcm92YWxSZXNwb25zZSA9IGFwcHJvdmFsSWQuZXh0ZW5kKHtcbiAgICBhcHByb3ZlZDogei5ib29sZWFuKCksXG4gICAgcmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pO1xuXG4gIHJldHVybiBbXG4gICAgei5vYmplY3Qoe1xuICAgICAgdHlwZSxcbiAgICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgICBzdGF0ZTogei5saXRlcmFsKFwiaW5wdXQtc3RyZWFtaW5nXCIpLFxuICAgICAgaW5wdXQ6IHoudW5rbm93bigpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHR5cGUsXG4gICAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgICAgc3RhdGU6IHoubGl0ZXJhbChcImlucHV0LWF2YWlsYWJsZVwiKSxcbiAgICAgIGlucHV0LFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHR5cGUsXG4gICAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgICAgc3RhdGU6IHoubGl0ZXJhbChcImFwcHJvdmFsLXJlcXVlc3RlZFwiKSxcbiAgICAgIGlucHV0LFxuICAgICAgYXBwcm92YWw6IGFwcHJvdmFsSWQsXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdHlwZSxcbiAgICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgICBzdGF0ZTogei5saXRlcmFsKFwiYXBwcm92YWwtcmVzcG9uZGVkXCIpLFxuICAgICAgaW5wdXQsXG4gICAgICBhcHByb3ZhbDogYXBwcm92YWxSZXNwb25zZSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0eXBlLFxuICAgICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICAgIHN0YXRlOiB6LmxpdGVyYWwoXCJvdXRwdXQtYXZhaWxhYmxlXCIpLFxuICAgICAgaW5wdXQsXG4gICAgICBvdXRwdXQsXG4gICAgICBhcHByb3ZhbDogYXBwcm92YWxBcHByb3ZlZC5vcHRpb25hbCgpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHR5cGUsXG4gICAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgICAgc3RhdGU6IHoubGl0ZXJhbChcIm91dHB1dC1lcnJvclwiKSxcbiAgICAgIGlucHV0LFxuICAgICAgZXJyb3JUZXh0OiB6LnN0cmluZygpLFxuICAgICAgYXBwcm92YWw6IGFwcHJvdmFsQXBwcm92ZWQub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0eXBlLFxuICAgICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICAgIHN0YXRlOiB6LmxpdGVyYWwoXCJvdXRwdXQtZGVuaWVkXCIpLFxuICAgICAgaW5wdXQsXG4gICAgICBhcHByb3ZhbDogYXBwcm92YWxEZW5pZWQsXG4gICAgfSksXG4gIF07XG59XG5cbmNvbnN0IFVzYWdlU3VtbWFyeSA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IHouc3RyaW5nKCksXG4gIGlucHV0VG9rZW5zOiB6Lm51bWJlcigpLFxuICBvdXRwdXRUb2tlbnM6IHoubnVtYmVyKCksXG4gIHRvdGFsVG9rZW5zOiB6Lm51bWJlcigpLFxuICBjYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCksXG4gIGNhY2hlV3JpdGVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHJlYXNvbmluZ1Rva2Vuczogei5udW1iZXIoKSxcbiAgc3RlcENvdW50OiB6Lm51bWJlcigpLFxufSk7XG5cbmNvbnN0IFNlc3Npb25Vc2FnZSA9IHoub2JqZWN0KHtcbiAgdG90YWw6IFVzYWdlU3VtbWFyeS5leHRlbmQoeyBtZXNzYWdlQ291bnQ6IHoubnVtYmVyKCkgfSksXG4gIGJ5TWVzc2FnZUlkOiB6LnJlY29yZCh6LnN0cmluZygpLCBVc2FnZVN1bW1hcnkubnVsbGFibGUoKSksXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2Vzc2lvbkhpc3RvcnlTY2hlbWE8QWdlbnQgZXh0ZW5kcyBBbnlBZ2VudD4oXG4gIGFnZW50OiBBZ2VudFxuKSB7XG4gIHJldHVybiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZXM6IHouYXJyYXkoYnVpbGRVSU1lc3NhZ2VTY2hlbWEoYWdlbnQudG9vbHMpKSxcbiAgICBzdHJlYW1pbmdNZXNzYWdlSWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB1c2FnZTogU2Vzc2lvblVzYWdlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVUlNZXNzYWdlUGFydFNjaGVtYTxUIGV4dGVuZHMgVG9vbFNldD4oXG4gIHRvb2xzOiBUXG4pOiB6LlpvZFR5cGU8VUlNZXNzYWdlUGFydDxUPj4ge1xuICBjb25zdCB0b29sUGFydHMgPSBPYmplY3QuZW50cmllcyh0b29scykuZmxhdE1hcCgoW25hbWUsIHRvb2xdKSA9PlxuICAgIHRvb2xQYXJ0U2NoZW1hcyhuYW1lLCB0b29sKVxuICApO1xuXG4gIGNvbnN0IGFsbCA9IFtcbiAgICBUZXh0UGFydCxcbiAgICBSZWFzb25pbmdQYXJ0LFxuICAgIEZpbGVQYXJ0LFxuICAgIFNvdXJjZVVybFBhcnQsXG4gICAgU3RlcFN0YXJ0UGFydCxcbiAgICAuLi50b29sUGFydHMsXG4gIF07XG5cbiAgcmV0dXJuIHoudW5pb24oYWxsKSBhcyB6LlpvZFR5cGU8VUlNZXNzYWdlUGFydDxUPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVJTWVzc2FnZVNjaGVtYTxUIGV4dGVuZHMgVG9vbFNldD4odG9vbHM6IFQpIHtcbiAgcmV0dXJuIHoub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICByb2xlOiB6LmVudW0oW1wic3lzdGVtXCIsIFwidXNlclwiLCBcImFzc2lzdGFudFwiXSksXG4gICAgcGFydHM6IHouYXJyYXkoYnVpbGRVSU1lc3NhZ2VQYXJ0U2NoZW1hKHRvb2xzKSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTZXNzaW9uVUlTY2hlbWE8VCBleHRlbmRzIFRvb2xTZXQ+KHRvb2xzOiBUKSB7XG4gIGNvbnN0IFVJTWVzc2FnZSA9IGJ1aWxkVUlNZXNzYWdlU2NoZW1hKHRvb2xzKTtcblxuICByZXR1cm4gei5vYmplY3Qoe1xuICAgIHRpdGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgbWVzc2FnZXM6IHouYXJyYXkoVUlNZXNzYWdlKSxcbiAgICBzdHJlYW1pbmdNZXNzYWdlSWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB1c2FnZTogU2Vzc2lvblVzYWdlLFxuICB9KTtcbn1cbiIsICJleHBvcnQgdHlwZSBCYXNlUGF0aCA9IGAvYXBpL2FnZW50cy9bYWdlbnRdYDtcbmV4cG9ydCB0eXBlIFNlc3Npb25QYXRoID0gYCR7QmFzZVBhdGggfCAoc3RyaW5nICYge30pfS9bc2Vzc2lvbklkXWA7XG5leHBvcnQgdHlwZSBSZWNvbm5lY3RQYXRoID0gYCR7U2Vzc2lvblBhdGggfCAoc3RyaW5nICYge30pfS9yZWNvbm5lY3RgO1xuZXhwb3J0IHR5cGUgSW50ZXJydXB0UGF0aCA9IGAke1Nlc3Npb25QYXRoIHwgKHN0cmluZyAmIHt9KX0vaW50ZXJydXB0YDtcblxuZXhwb3J0IHR5cGUgUGF0aCA9IFNlc3Npb25QYXRoIHwgUmVjb25uZWN0UGF0aCB8IEludGVycnVwdFBhdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGF0aEZvckFnZW50KGFnZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAvYXBpL2FnZW50cy8ke2FnZW50fWAgYXMgY29uc3Q7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQkEsU0FBUyxTQUFTLFFBQWlDO0FBQ2pELFNBQU8sT0FBTyxTQUFTO0FBQ3pCO0FBRUEsU0FBUyxVQUFVLFFBQStCO0FBQ2hELFNBQU8sT0FBTyxVQUFVO0FBQzFCO0FBRUEsU0FBUyxVQUFVLFFBQXVCLE9BQTBCO0FBQ2xFLFNBQU8sbUJBQW1CLEtBQUssS0FBSyxtQkFBbUIsU0FBUyxNQUFNLENBQUM7QUFDekU7QUFFQSxTQUFTLFVBQVUsUUFBdUIsV0FBMkI7QUFDbkUsU0FBTyxJQUFJLFVBQVUsTUFBTSxDQUFDLElBQUksT0FBTyxJQUFJLElBQUksU0FBUztBQUMxRDtBQUVBLFNBQVMsV0FDUCxTQUNBLE9BQ3FDO0FBQ3JDLFFBQU0s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TSxXQUFXLFFBQVEsWUFBWSxnQkFBZ0I7QUFDckQsVUFBSSxVQUFVO0FBQ1osZUFBTyxTQUFTLEtBQUssTUFBTSxTQUFTLEVBQUUsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFDN0Q7QUFFQSxhQUFPLFNBQVMsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ25DO0FBQUEsSUFDQSxTQUFTLGdCQUFnQjtBQUFBLEVBQzNCO0FBRUYsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJsb2ciLCAic25hcHNob3QiLCAibG9nIiwgImxvYWRTYW5kYm94U0RLIiwgImdldFRlc3RDcmVkZW50aWFscyIsICJsb2ciLCAic25hcHNob3QiLCAiYWdlbnQiLCAic2V0dXAiLCAic3RhcnRXb3JrZmxvdyIsICJzZGsiLCAiaW5zdGFuY2UiLCAicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X3VsaWQiLCAicGF0aCIsICJyZXNvbHZlIiwgImZzIiwgInJlc29sdmUiLCAidG9vbCIsICJpbXBvcnRfc2VyZGUiLCAiaW1wb3J0X3VsaWQiLCAidmVyY2VsU2FuZGJveCIsICJkb2NrZXJTYW5kYm94IiwgImxvY2FsU2FuZGJveCIsICJhZ2VudCIsICJsb2ciLCAicmVzb2x2ZSIsICJhZ2VudCIsICJpbXBvcnRfdWxpZCIsICJ1c2FnZSIsICJlcnJvcmUiLCAiaW1wb3J0X3VsaWQiLCAiaW1wb3J0X2FpIiwgImFnZW50IiwgImxvZyIsICJyZWFkRmlsZSIsICJyZXNvbHZlIiwgImxvZyIsICJpbXBvcnRfYWkiLCAiaW1wb3J0X3VsaWQiLCAiaW1wb3J0X3pvZCIsICJleGVjIiwgImFnZW50IiwgImltcG9ydF9haSIsICJ0b29sIiwgImFpVG9vbCIsICJhZ2VudCIsICJwYXRoIiwgImNyZWF0ZVByb2Nlc3NNYW5hZ2VyIiwgInN0YXJ0IiwgInN0YXRlIiwgImFnZW50IiwgInJlc29sdmUiLCAibG9nIiwgInNhbmRib3giLCAic2FuZGJveFJlY29yZCIsICJzdHJlYW0iLCAic3RyZWFtVGV4dEFpIiwgInVzYWdlIiwgImFnZW50IiwgImxvZyIsICJ1c2FnZSIsICJub3ciLCAiaWQiLCAiZXJyb3JlIiwgImFnZW50IiwgInJlc29sdmUiLCAicmVhZEZpbGUiLCAiYWxsIiwgImVycm9yZSIsICJpbXBvcnRfem9kIiwgImFnZW50IiwgImFnZW50IiwgImxvZyIsICJpbXBvcnRfYWkiLCAiaW1wb3J0X3pvZCIsICJpbXBvcnRfem9kIiwgImltcG9ydF96b2QiLCAidG9vbCIsICJhZ2VudCIsICJhbGwiLCAiYWdlbnQiLCAieiIsICJhZ2VudCIsICJhZ2VudCIsICJFbHlzaWEiLCAieiIsICJzdGFydCIsICJzdHJlYW0iXQp9Cg==