scoundrel-remote-eval 1.0.11 → 1.0.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"AASA;IACE;;;;;OAKG;IACH,qBAHW,GAAG,YACH;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAC,EA2BzC;IAxBC,aAAsB;IAGtB,kCAAkC;IAClC,kBADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACJ;IAC1B,qBAA0B;IAC1B,8BAA8B;IAE9B,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,wCAAwC;IACxC,YADW,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAChB;IAEpB,kCAAkC;IAClC,SADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACb;IAEjB,qBAAqB;IAErB,sBAAsB;IACtB,sBADW,OAAO,CAC8C;IAGlE;;OAEG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CAWxB;IAED;;;;;;;OAOG;IACH,gDALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;OAKG;IACH,8BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAM9B;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;;OAMG;IACH,kCAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;OAIG;IACH,qBAHW,GAAG,GACD,OAAO,CAQnB;IAED;;;;;;;;OAQG;IACH,YAAa,0EANV;QAAqB,OAAO,EAApB,MAAM;QACO,UAAU,EAAvB,MAAM;QACI,IAAI,EAAd,GAAG;QACW,KAAK,GAAnB,MAAM;QACQ,UAAU,GAAxB,MAAM;KAEkE,UAkJlF;IAED;;;;;OAKG;IACH,cAHW,GAAG,GACD,GAAG,CAwBf;IAED;;;;;;OAMG;IACH,mDAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAW9B;IAED;;;;;;OAMG;IACH,sCAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CASxB;IAED;;;;;OAKG;IACH,yBAHW,MAAM,iBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;;OAKG;IACH,2BAHW,MAAM,kBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,iCAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,4BAHW,MAAM,QACN,GAAG,QAIb;IAED;;;;;OAKG;IACH,qBAJW,MAAM,QACN,GAAG,GACD,OAAO,CAAC,GAAG,CAAC,CAexB;IAED;;;OAGG;IACH,WAFW,GAAG,QAIb;IAED;;;;;OAKG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAMxB;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,SAAS,CAQrB;IAED,4BAEC;CACF;sBAxfqB,gBAAgB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.js"],"names":[],"mappings":"AASA;IACE;;;;;OAKG;IACH,qBAHW,GAAG,YACH;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAC,EA2BzC;IAxBC,aAAsB;IAGtB,kCAAkC;IAClC,kBADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACJ;IAC1B,qBAA0B;IAC1B,8BAA8B;IAE9B,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,kCAAkC;IAClC,UADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAElB,wCAAwC;IACxC,YADW,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAChB;IAEpB,kCAAkC;IAClC,SADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACb;IAEjB,qBAAqB;IAErB,sBAAsB;IACtB,sBADW,OAAO,CAC8C;IAGlE;;OAEG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,GAAG,CAAC,CAWxB;IAED;;;;;;;OAOG;IACH,gDALW,MAAM,cACN,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;OAKG;IACH,8BAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAM9B;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAY9B;IAED;;;;;;OAMG;IACH,kCAJW,MAAM,WACF,GAAG,EAAA,GACL,OAAO,CAAC,SAAS,CAAC,CAe9B;IAED;;;;OAIG;IACH,qBAHW,GAAG,GACD,OAAO,CAQnB;IAED;;;;;;;;OAQG;IACH,YAAa,0EANV;QAAqB,OAAO,EAApB,MAAM;QACO,UAAU,EAAvB,MAAM;QACI,IAAI,EAAd,GAAG;QACW,KAAK,GAAnB,MAAM;QACQ,UAAU,GAAxB,MAAM;KAEkE,UAsKlF;IAED;;;;;OAKG;IACH,cAHW,GAAG,GACD,GAAG,CAwBf;IAED;;;;;;OAMG;IACH,mDAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAW9B;IAED;;;;;;OAMG;IACH,sCAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CASxB;IAED;;;;;OAKG;IACH,yBAHW,MAAM,iBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;;OAKG;IACH,2BAHW,MAAM,kBACN,GAAG,QAMb;IAED;;;;;OAKG;IACH,iCAHW,MAAM,GACJ,GAAG,CAIf;IAED;;;;OAIG;IACH,4BAHW,MAAM,QACN,GAAG,QAIb;IAED;;;;;OAKG;IACH,qBAJW,MAAM,QACN,GAAG,GACD,OAAO,CAAC,GAAG,CAAC,CAkBxB;IAED;;;OAGG;IACH,WAFW,GAAG,QAIb;IAED;;;;;OAKG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAMxB;IAED;;;;;OAKG;IACH,mBAHW,MAAM,GACJ,SAAS,CAQrB;IAED,4BAEC;CACF;sBA/gBqB,gBAAgB"}
@@ -34,9 +34,29 @@ export default class Client {
34
34
  delete this.outgoingCommands[commandID];
35
35
  if (error) {
36
36
  const errorToThrow = new Error(error);
37
- if (errorStack) {
38
- errorToThrow.stack = `${errorStack}\n\n${errorToThrow.stack}`;
39
- }
37
+ const sanitizeStack = (stack) => {
38
+ if (!stack)
39
+ return [];
40
+ return stack
41
+ .split("\n")
42
+ .map((line) => line.trim())
43
+ .filter((line) => line)
44
+ .filter((line) => !/node_modules\/ws|node:|internal\//.test(line))
45
+ .filter((line) => !line.startsWith("Error:"));
46
+ };
47
+ const formatSection = (label, stack) => {
48
+ const lines = sanitizeStack(stack);
49
+ if (lines.length === 0)
50
+ return [];
51
+ return [`${label} ${lines[0]}`, ...lines.slice(1)];
52
+ };
53
+ const combinedStack = [
54
+ `Error: ${error}`,
55
+ ...formatSection("[SCOUNTDREL-SERVER]", errorStack),
56
+ ...formatSection("[SCOUNDREL-CLIENT]", errorToThrow.stack),
57
+ ...formatSection("[SCOUNDREL-CLIENT]", savedCommand.originStack ? `Command created at:\n${savedCommand.originStack}` : null)
58
+ ].join("\n");
59
+ errorToThrow.stack = combinedStack;
40
60
  savedCommand.reject(errorToThrow);
41
61
  }
42
62
  else {
@@ -397,7 +417,7 @@ export default class Client {
397
417
  * @param {any} data
398
418
  */
399
419
  respondToCommand(commandId, data) {
400
- this.sendCommand("command_response", { command_id: commandId, data });
420
+ this.send({ command: "command_response", command_id: commandId, data: { command_id: commandId, data } });
401
421
  }
402
422
  /**
403
423
  * Sends a command to the backend and returns a promise that resolves with the response
@@ -408,12 +428,16 @@ export default class Client {
408
428
  sendCommand(command, data) {
409
429
  return new Promise((resolve, reject) => {
410
430
  const outgoingCommandCount = ++this.outgoingCommandsCount;
431
+ const originError = new Error(`Command '${command}' dispatched`);
432
+ // Strip the sendCommand frame to highlight the caller site.
433
+ if (Error.captureStackTrace)
434
+ Error.captureStackTrace(originError, this.sendCommand);
411
435
  const commandData = {
412
436
  command,
413
437
  command_id: outgoingCommandCount,
414
438
  data
415
439
  };
416
- this.outgoingCommands[outgoingCommandCount] = { resolve, reject };
440
+ this.outgoingCommands[outgoingCommandCount] = { resolve, reject, originStack: originError.stack };
417
441
  logger.log(() => ["Sending", commandData]);
418
442
  this.send(commandData);
419
443
  });
@@ -450,4 +474,4 @@ export default class Client {
450
474
  this.serverControlEnabled = true;
451
475
  }
452
476
  }
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxTQUFTLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUU3Qyx3QkFBd0I7QUFFeEIsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFNO0lBQ3pCOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFPLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUErSmpDOzs7Ozs7OztXQVFHO1FBQ0gsY0FBUyxHQUFHLENBQUMsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsRUFBQyxFQUFFLEVBQUU7WUFDckYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO1lBRXhGLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUN0RixDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO3dCQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixTQUFTLGVB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OztPQUtHO0lBQ0gsY0FBYyxDQUFDLEVBQUU7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUE7UUFFL0IsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IFJlZmVyZW5jZSBmcm9tIFwiLi9yZWZlcmVuY2UuanNcIlxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKFwiU2NvdW5kcmVsIENsaWVudFwiKVxuXG4vLyBsb2dnZXIuc2V0RGVidWcodHJ1ZSlcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2NvdW5kcmVsIENsaWVudFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gYmFja2VuZCBUaGUgYmFja2VuZCBjb25uZWN0aW9uIChlLmcuLCBXZWJTb2NrZXQpXG4gICAqIEBwYXJhbSB7e2VuYWJsZVNlcnZlckNvbnRyb2w/OiBib29sZWFufX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihiYWNrZW5kLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmJhY2tlbmQgPSBiYWNrZW5kXG4gICAgdGhpcy5iYWNrZW5kLm9uQ29tbWFuZCh0aGlzLm9uQ29tbWFuZClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgYW55Pn0gKi9cbiAgICB0aGlzLm91dGdvaW5nQ29tbWFuZHMgPSB7fVxuICAgIHRoaXMuaW5jb21pbmdDb21tYW5kcyA9IHt9XG4gICAgdGhpcy5vdXRnb2luZ0NvbW1hbmRzQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgdGhpcy5fY2xhc3NlcyA9IHt9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgdGhpcy5fb2JqZWN0cyA9IHt9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT59ICovXG4gICAgdGhpcy5yZWZlcmVuY2VzID0ge31cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgYW55Pn0gKi9cbiAgICB0aGlzLm9iamVjdHMgPSB7fVxuXG4gICAgdGhpcy5vYmplY3RzQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5zZXJ2ZXJDb250cm9sRW5hYmxlZCA9IEJvb2xlYW4ob3B0aW9ucy5lbmFibGVTZXJ2ZXJDb250cm9sKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY2xpZW50IGNvbm5lY3Rpb25cbiAgICovXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIHRoaXMuYmFja2VuZC5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSBtZXRob2Qgb24gYSByZWZlcmVuY2UgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBkaXJlY3RseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVmZXJlbmNlSWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBjYWxsTWV0aG9kT25SZWZlcmVuY2UocmVmZXJlbmNlSWQsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKFwiY2FsbF9tZXRob2Rfb25fcmVmZXJlbmNlXCIsIHtcbiAgICAgIGFyZ3M6IHRoaXMucGFyc2VBcmcoYXJncyksXG4gICAgICBtZXRob2RfbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgIHJlZmVyZW5jZV9pZDogcmVmZXJlbmNlSWQsXG4gICAgICB3aXRoOiBcInJlc3VsdFwiXG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHQucmVzcG9uc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBhIG1ldGhvZCBvbiBhIHJlZmVyZW5jZSBhbmQgcmV0dXJucyBhIG5ldyByZWZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lXG4gICAqIEBwYXJhbSAgey4uLmFueX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZlcmVuY2U+fVxuICAgKi9cbiAgYXN5bmMgY2FsbE1ldGhvZE9uUmVmZXJlbmNlV2l0aFJlZmVyZW5jZShyZWZlcmVuY2VJZCwgbWV0aG9kTmFtZSwgLi4uYXJncykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJjYWxsX21ldGhvZF9vbl9yZWZlcmVuY2VcIiwge1xuICAgICAgYXJnczogdGhpcy5wYXJzZUFyZyhhcmdzKSxcbiAgICAgIG1ldGhvZF9uYW1lOiBtZXRob2ROYW1lLFxuICAgICAgcmVmZXJlbmNlX2lkOiByZWZlcmVuY2VJZCxcbiAgICAgIHdpdGg6IFwicmVmZXJlbmNlXCJcbiAgICB9KVxuICAgIGNvbnN0IGlkID0gcmVzdWx0LnJlc3BvbnNlXG5cbiAgICByZXR1cm4gdGhpcy5zcGF3blJlZmVyZW5jZShpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBuZXcgcmVmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyaW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlZmVyZW5jZT59XG4gICAqL1xuICBhc3luYyBldmFsV2l0aFJlZmVyZW5jZShldmFsU3RyaW5nKSB7XG4gICAgY29uc3QgZXZhbFJlZmVyZW5jZSA9IGF3YWl0IHRoaXMuZ2V0T2JqZWN0KFwiZXZhbFwiKVxuXG4gICAgcmV0dXJuIGF3YWl0IGV2YWxSZWZlcmVuY2UuY2FsbE1ldGhvZFdpdGhSZWZlcmVuY2UoXCJjYWxsXCIsIG51bGwsIGV2YWxTdHJpbmcpXG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIG1vZHVsZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW1wb3J0TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZlcmVuY2U+fVxuICAgKi9cbiAgYXN5bmMgaW1wb3J0KGltcG9ydE5hbWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKFwiaW1wb3J0XCIsIHtcbiAgICAgIGltcG9ydF9uYW1lOiBpbXBvcnROYW1lXG4gICAgfSlcblxuICAgIGxvZ2dlci5sb2coKCkgPT4gW1wiaW1wb3J0XCIsIHtyZXN1bHR9XSlcblxuICAgIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXN1bHQgZ2l2ZW5cIilcbiAgICBpZiAoIXJlc3VsdC5vYmplY3RfaWQpIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IElEIGdpdmVuIGluIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG5cbiAgICBjb25zdCBpZCA9IHJlc3VsdC5vYmplY3RfaWRcblxuICAgIHJldHVybiB0aGlzLnNwYXduUmVmZXJlbmNlKGlkKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSByZWdpc3RlcmVkIG9iamVjdCBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlZmVyZW5jZT59XG4gICAqL1xuICBhc3luYyBnZXRPYmplY3Qob2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJnZXRfb2JqZWN0XCIsIHtcbiAgICAgIG9iamVjdF9uYW1lOiBvYmplY3ROYW1lXG4gICAgfSlcblxuICAgIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoXCJCbGFuayByZXN1bHQgZ2l2ZW5cIilcblxuICAgIGNvbnN0IGlkID0gcmVzdWx0Lm9iamVjdF9pZFxuXG4gICAgcmV0dXJuIHRoaXMuc3Bhd25SZWZlcmVuY2UoaWQpXG4gIH1cblxuICAvKipcbiAgICogU3Bhd25zIGEgbmV3IHJlZmVyZW5jZSB0byBhbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVmZXJlbmNlPn1cbiAgICovXG4gIGFzeW5jIG5ld09iamVjdFdpdGhSZWZlcmVuY2UoY2xhc3NOYW1lLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChcIm5ld19vYmplY3Rfd2l0aF9yZWZlcmVuY2VcIiwge1xuICAgICAgYXJnczogdGhpcy5wYXJzZUFyZyhhcmdzKSxcbiAgICAgIGNsYXNzX25hbWU6IGNsYXNzTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKFwiQmxhbmsgcmVzdWx0IGdpdmVuXCIpXG5cbiAgICBjb25zdCBpZCA9IHJlc3VsdC5vYmplY3RfaWRcblxuICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IElEIGdpdmVuIGluIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG5cbiAgICByZXR1cm4gdGhpcy5zcGF3blJlZmVyZW5jZShpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGlucHV0IGlzIGEgcGxhaW4gb2JqZWN0XG4gICAqIEBwYXJhbSB7YW55fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUGxhaW5PYmplY3QoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGFuIGluY29taW5nIGNvbW1hbmQgZnJvbSB0aGUgYmFja2VuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb21tYW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNvbW1hbmRfaWRcbiAgICogQHBhcmFtIHthbnl9IGFyZ3MuZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZXJyb3JdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5lcnJvclN0YWNrXVxuICAgKi9cbiAgb25Db21tYW5kID0gKHtjb21tYW5kLCBjb21tYW5kX2lkOiBjb21tYW5kSUQsIGRhdGEsIGVycm9yLCBlcnJvclN0YWNrLCAuLi5yZXN0QXJnc30pID0+IHtcbiAgICBsb2dnZXIubG9nKCgpID0+IFtcIm9uQ29tbWFuZFwiLCB7Y29tbWFuZCwgY29tbWFuZElELCBkYXRhLCBlcnJvciwgZXJyb3JTdGFjaywgcmVzdEFyZ3N9XSlcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGtleSBnaXZlbiBpbiBkYXRhOiAke09iamVjdC5rZXlzKHJlc3RBcmdzKS5qb2luKFwiLCBcIil9YClcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImNvbW1hbmRfcmVzcG9uc2VcIikge1xuICAgICAgICBpZiAoIShjb21tYW5kSUQgaW4gdGhpcy5vdXRnb2luZ0NvbW1hbmRzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3V0Z29pbmcgY29tbWFuZCAke2NvbW1hbmRJRH0gbm90IGZvdW5kOiAke09iamVjdC5rZXlzKHRoaXMub3V0Z29pbmdDb21tYW5kcykuam9pbihcIiwgXCIpfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYXZlZENvbW1hbmQgPSB0aGlzLm91dGdvaW5nQ29tbWFuZHNbY29tbWFuZElEXVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLm91dGdvaW5nQ29tbWFuZHNbY29tbWFuZElEXVxuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yVG9UaHJvdyA9IG5ldyBFcnJvcihlcnJvcilcblxuICAgICAgICAgIGlmIChlcnJvclN0YWNrKSB7XG4gICAgICAgICAgICBlcnJvclRvVGhyb3cuc3RhY2sgPSBgJHtlcnJvclN0YWNrfVxcblxcbiR7ZXJyb3JUb1Rocm93LnN0YWNrfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzYXZlZENvbW1hbmQucmVqZWN0KGVycm9yVG9UaHJvdylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nKCgpID0+IFtgUmVzb2x2aW5nIGNvbW1hbmQgJHtjb21tYW5kSUR9IHdpdGggZGF0YWAsIGRhdGFdKVxuICAgICAgICAgIHNhdmVkQ29tbWFuZC5yZXNvbHZlKGRhdGEuZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZXJ2ZXJDb250cm9sRW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNlbmQoe2NvbW1hbmQ6IFwiY29tbWFuZF9yZXNwb25zZVwiLCBjb21tYW5kX2lkOiBjb21tYW5kSUQsIGVycm9yOiBcIlNlcnZlciBjb250cm9sIGlzIGRpc2FibGVkXCJ9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImdldF9vYmplY3RcIikge1xuICAgICAgICBjb25zdCBzZXJ2ZXJPYmplY3QgPSB0aGlzLl9nZXRSZWdpc3RlcmVkT2JqZWN0KGRhdGEub2JqZWN0X25hbWUpXG4gICAgICAgIGxldCBvYmplY3RcblxuICAgICAgICBpZiAoc2VydmVyT2JqZWN0KSB7XG4gICAgICAgICAgb2JqZWN0ID0gc2VydmVyT2JqZWN0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqZWN0ID0gZ2xvYmFsVGhpc1tkYXRhLm9iamVjdF9uYW1lXVxuXG4gICAgICAgICAgaWYgKCFvYmplY3QpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBvYmplY3Q6ICR7ZGF0YS5vYmplY3RfbmFtZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSArK3RoaXMub2JqZWN0c0NvdW50XG5cbiAgICAgICAgdGhpcy5vYmplY3RzW29iamVjdElkXSA9IG9iamVjdFxuICAgICAgICB0aGlzLnJlc3BvbmRUb0NvbW1hbmQoY29tbWFuZElELCB7b2JqZWN0X2lkOiBvYmplY3RJZH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJuZXdfb2JqZWN0X3dpdGhfcmVmZXJlbmNlXCIpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gZGF0YS5jbGFzc19uYW1lXG4gICAgICAgIGxldCBvYmplY3RcblxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzTmFtZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29uc3QgQ2xhc3NJbnN0YW5jZSA9IHRoaXMuZ2V0Q2xhc3MoY2xhc3NOYW1lKSB8fCBnbG9iYWxUaGlzW2NsYXNzTmFtZV1cblxuICAgICAgICAgIGlmICghQ2xhc3NJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGNsYXNzOiAke2NsYXNzTmFtZX1gKVxuXG4gICAgICAgICAgb2JqZWN0ID0gbmV3IENsYXNzSW5zdGFuY2UoLi4uZGF0YS5hcmdzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGNsYXNzIG5hbWU6ICR7dHlwZW9mIGNsYXNzTmFtZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSArK3RoaXMub2JqZWN0c0NvdW50XG5cbiAgICAgICAgdGhpcy5vYmplY3RzW29iamVjdElkXSA9IG9iamVjdFxuICAgICAgICB0aGlzLnJlc3BvbmRUb0NvbW1hbmQoY29tbWFuZElELCB7b2JqZWN0X2lkOiBvYmplY3RJZH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJjYWxsX21ldGhvZF9vbl9yZWZlcmVuY2VcIikge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGRhdGEucmVmZXJlbmNlX2lkXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0c1tyZWZlcmVuY2VJZF1cblxuICAgICAgICBpZiAoIW9iamVjdCkgdGhyb3cgbmV3IEVycm9yKGBObyBvYmplY3QgYnkgdGhhdCBJRDogJHtyZWZlcmVuY2VJZH1gKVxuXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG9iamVjdFtkYXRhLm1ldGhvZF9uYW1lXVxuXG4gICAgICAgIGlmICghbWV0aG9kKSB0aHJvdyBuZXcgRXJyb3IoYE5vIG1ldGhvZCBjYWxsZWQgJyR7ZGF0YS5tZXRob2RfbmFtZX0nIG9uIGEgJyR7b2JqZWN0LmNvbnN0cnVjdG9yLm5hbWV9J2ApXG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBtZXRob2QuY2FsbChvYmplY3QsIC4uLmRhdGEuYXJncylcblxuICAgICAgICBpZiAoZGF0YS53aXRoID09IFwicmVmZXJlbmNlXCIpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RJZCA9ICsrdGhpcy5vYmplY3RzQ291bnRcblxuICAgICAgICAgIHRoaXMub2JqZWN0c1tvYmplY3RJZF0gPSByZXNwb25zZVxuICAgICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIHtyZXNwb25zZTogb2JqZWN0SWR9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIHtyZXNwb25zZX0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcInNlcmlhbGl6ZV9yZWZlcmVuY2VcIikge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGRhdGEucmVmZXJlbmNlX2lkXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0c1tyZWZlcmVuY2VJZF1cblxuICAgICAgICBpZiAoIW9iamVjdCkgdGhyb3cgbmV3IEVycm9yKGBObyBvYmplY3QgYnkgdGhhdCBJRDogJHtyZWZlcmVuY2VJZH1gKVxuXG4gICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIEpTT04uc3RyaW5naWZ5KG9iamVjdCkpXG4gICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJyZWFkX2F0dHJpYnV0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBkYXRhLmF0dHJpYnV0ZV9uYW1lXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZGF0YS5yZWZlcmVuY2VfaWRcbiAgICAgICAgY29uc3QgcmV0dXJuV2l0aCA9IGRhdGEud2l0aFxuICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdHNbcmVmZXJlbmNlSWRdXG5cbiAgICAgICAgaWYgKCFvYmplY3QpIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IGJ5IHRoYXQgSUQ6ICR7cmVmZXJlbmNlSWR9YClcblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBvYmplY3RbYXR0cmlidXRlTmFtZV1cblxuICAgICAgICBpZiAocmV0dXJuV2l0aCA9PSBcInJlZmVyZW5jZVwiKSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSArK3RoaXMub2JqZWN0c0NvdW50XG5cbiAgICAgICAgICB0aGlzLm9iamVjdHNbb2JqZWN0SWRdID0gYXR0cmlidXRlXG4gICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge3Jlc3BvbnNlOiBvYmplY3RJZH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge3Jlc3BvbnNlOiBhdHRyaWJ1dGV9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gXCJldmFsXCIpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uZFdpdGhSZXN1bHQgPSAoZXZhbFJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLndpdGhfcmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3RJZCA9ICsrdGhpcy5vYmplY3RzQ291bnRcblxuICAgICAgICAgICAgdGhpcy5vYmplY3RzW29iamVjdElkXSA9IGV2YWxSZXN1bHRcbiAgICAgICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIHtvYmplY3RfaWQ6IG9iamVjdElkfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge3Jlc3BvbnNlOiBldmFsUmVzdWx0fSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmFsUmVzdWx0ID0gZXZhbChkYXRhLmV2YWxfc3RyaW5nKVxuXG4gICAgICAgIGlmIChldmFsUmVzdWx0ICYmIHR5cGVvZiBldmFsUmVzdWx0LnRoZW4gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXZhbFJlc3VsdC50aGVuKHJlc3BvbmRXaXRoUmVzdWx0KS5jYXRjaCgocHJvbWlzZUVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZUVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZW5kKHtjb21tYW5kOiBcImNvbW1hbmRfcmVzcG9uc2VcIiwgY29tbWFuZF9pZDogY29tbWFuZElELCBlcnJvcjogcHJvbWlzZUVycm9yLm1lc3NhZ2UsIGVycm9yU3RhY2s6IHByb21pc2VFcnJvci5zdGFja30pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbmQoe2NvbW1hbmQ6IFwiY29tbWFuZF9yZXNwb25zZVwiLCBjb21tYW5kX2lkOiBjb21tYW5kSUQsIGVycm9yOiBTdHJpbmcocHJvbWlzZUVycm9yKX0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25kV2l0aFJlc3VsdChldmFsUmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRoaXMuc2VuZCh7Y29tbWFuZDogXCJjb21tYW5kX3Jlc3BvbnNlXCIsIGNvbW1hbmRfaWQ6IGNvbW1hbmRJRCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIGVycm9yU3RhY2s6IGVycm9yLnN0YWNrfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VuZCh7Y29tbWFuZDogXCJjb21tYW5kX3Jlc3BvbnNlXCIsIGNvbW1hbmRfaWQ6IGNvbW1hbmRJRCwgZXJyb3I6IFN0cmluZyhlcnJvcil9KVxuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFzZXMgYW4gYXJndW1lbnQgZm9yIHNlbmRpbmcgdG8gdGhlIHNlcnZlclxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gYXJnXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBwYXJzZUFyZyhhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICByZXR1cm4gYXJnLm1hcCgoYXJnSW5BcnJheSkgPT4gdGhpcy5wYXJzZUFyZyhhcmdJbkFycmF5KSlcbiAgICB9IGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIFJlZmVyZW5jZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19zY291bmRyZWxfb2JqZWN0X2lkOiBhcmcuaWQsXG4gICAgICAgIF9fc2NvdW5kcmVsX3R5cGU6IFwicmVmZXJlbmNlXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQbGFpbk9iamVjdChhcmcpKSB7XG4gICAgICAvKiogQHR5cGUge1JlY29yZDxhbnksIGFueT59ICovXG4gICAgICBjb25zdCBuZXdPYmplY3QgPSB7fVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBhcmcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdba2V5XVxuXG4gICAgICAgIG5ld09iamVjdFtrZXldID0gdGhpcy5wYXJzZUFyZyh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld09iamVjdFxuICAgIH1cblxuICAgIHJldHVybiBhcmdcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbiBhdHRyaWJ1dGUgb24gYSByZWZlcmVuY2UgYW5kIHJldHVybnMgYSBuZXcgcmVmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZWZlcmVuY2VJZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZlcmVuY2U+fVxuICAgKi9cbiAgYXN5bmMgcmVhZEF0dHJpYnV0ZU9uUmVmZXJlbmNlV2l0aFJlZmVyZW5jZShyZWZlcmVuY2VJZCwgYXR0cmlidXRlTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJyZWFkX2F0dHJpYnV0ZVwiLCB7XG4gICAgICBhdHRyaWJ1dGVfbmFtZTogYXR0cmlidXRlTmFtZSxcbiAgICAgIHJlZmVyZW5jZV9pZDogcmVmZXJlbmNlSWQsXG4gICAgICB3aXRoOiBcInJlZmVyZW5jZVwiXG4gICAgfSlcbiAgICBjb25zdCBpZCA9IHJlc3VsdC5yZXNwb25zZVxuXG4gICAgcmV0dXJuIHRoaXMuc3Bhd25SZWZlcmVuY2UoaWQpXG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW4gYXR0cmlidXRlIG9uIGEgcmVmZXJlbmNlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgZGlyZWN0bHlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyByZWFkQXR0cmlidXRlT25SZWZlcmVuY2UocmVmZXJlbmNlSWQsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKFwicmVhZF9hdHRyaWJ1dGVcIiwge1xuICAgICAgYXR0cmlidXRlX25hbWU6IGF0dHJpYnV0ZU5hbWUsXG4gICAgICByZWZlcmVuY2VfaWQ6IHJlZmVyZW5jZUlkLFxuICAgICAgd2l0aDogXCJyZXN1bHRcIlxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdC5yZXNwb25zZVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNsYXNzIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0ge2FueX0gY2xhc3NJbnN0YW5jZVxuICAgKi9cbiAgcmVnaXN0ZXJDbGFzcyhjbGFzc05hbWUsIGNsYXNzSW5zdGFuY2UpIHtcbiAgICBpZiAoY2xhc3NOYW1lIGluIHRoaXMuX2NsYXNzZXMpIHRocm93IG5ldyBFcnJvcihgQ2xhc3MgYWxyZWFkeSBleGlzdHM6ICR7Y2xhc3NOYW1lfWApXG5cbiAgICB0aGlzLl9jbGFzc2VzW2NsYXNzTmFtZV0gPSBjbGFzc0luc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHJlZ2lzdGVyZWQgY2xhc3MgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBnZXRDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3Nlc1tjbGFzc05hbWVdXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGFuIG9iamVjdCBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lXG4gICAqIEBwYXJhbSB7YW55fSBvYmplY3RJbnN0YW5jZVxuICAgKi9cbiAgcmVnaXN0ZXJPYmplY3Qob2JqZWN0TmFtZSwgb2JqZWN0SW5zdGFuY2UpIHtcbiAgICBpZiAob2JqZWN0TmFtZSBpbiB0aGlzLl9vYmplY3RzKSB0aHJvdyBuZXcgRXJyb3IoYE9iamVjdCBhbHJlYWR5IGV4aXN0czogJHtvYmplY3ROYW1lfWApXG5cbiAgICB0aGlzLl9vYmplY3RzW29iamVjdE5hbWVdID0gb2JqZWN0SW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgcmVnaXN0ZXJlZCBvYmplY3QgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TmFtZVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgX2dldFJlZ2lzdGVyZWRPYmplY3Qob2JqZWN0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3RzW29iamVjdE5hbWVdXG4gIH1cblxuICAvKipcbiAgICogUmVzcG9uZHMgdG8gYSBjb21tYW5kIGZyb20gdGhlIGJhY2tlbmRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbW1hbmRJZFxuICAgKiBAcGFyYW0ge2FueX0gZGF0YVxuICAgKi9cbiAgcmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSWQsIGRhdGEpIHtcbiAgICB0aGlzLnNlbmRDb21tYW5kKFwiY29tbWFuZF9yZXNwb25zZVwiLCB7Y29tbWFuZF9pZDogY29tbWFuZElkLCBkYXRhfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGJhY2tlbmQgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmRcbiAgICogQHBhcmFtIHthbnl9IGRhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHNlbmRDb21tYW5kKGNvbW1hbmQsIGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb3V0Z29pbmdDb21tYW5kQ291bnQgPSArK3RoaXMub3V0Z29pbmdDb21tYW5kc0NvdW50XG4gICAgICBjb25zdCBjb21tYW5kRGF0YSA9IHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgY29tbWFuZF9pZDogb3V0Z29pbmdDb21tYW5kQ291bnQsXG4gICAgICAgIGRhdGFcbiAgICAgIH1cblxuICAgICAgdGhpcy5vdXRnb2luZ0NvbW1hbmRzW291dGdvaW5nQ29tbWFuZENvdW50XSA9IHtyZXNvbHZlLCByZWplY3R9XG4gICAgICBsb2dnZXIubG9nKCgpID0+IFtcIlNlbmRpbmdcIiwgY29tbWFuZERhdGFdKVxuICAgICAgdGhpcy5zZW5kKGNvbW1hbmREYXRhKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgZGF0YSB0byB0aGUgYmFja2VuZFxuICAgKiBAcGFyYW0ge2FueX0gZGF0YVxuICAgKi9cbiAgc2VuZChkYXRhKSB7XG4gICAgdGhpcy5iYWNrZW5kLnNlbmQoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgcmVmZXJlbmNlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgZGlyZWN0bHlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBzZXJpYWxpemVSZWZlcmVuY2UocmVmZXJlbmNlSWQpIHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChcInNlcmlhbGl6ZV9yZWZlcmVuY2VcIiwge3JlZmVyZW5jZV9pZDogcmVmZXJlbmNlSWR9KVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGF3bnMgYSBuZXcgcmVmZXJlbmNlIHRvIGFuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAgICogQHJldHVybnMge1JlZmVyZW5jZX1cbiAgICovXG4gIHNwYXduUmVmZXJlbmNlKGlkKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZSh0aGlzLCBpZClcblxuICAgIHRoaXMucmVmZXJlbmNlc1tpZF0gPSByZWZlcmVuY2VcblxuICAgIHJldHVybiByZWZlcmVuY2VcbiAgfVxuXG4gIGVuYWJsZVNlcnZlckNvbnRyb2woKSB7XG4gICAgdGhpcy5zZXJ2ZXJDb250cm9sRW5hYmxlZCA9IHRydWVcbiAgfVxufVxuIl19
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxTQUFTLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUU3Qyx3QkFBd0I7QUFFeEIsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFNO0lBQ3pCOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFPLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUErSmpDOzs7Ozs7OztXQVFHO1FBQ0gsY0FBUyxHQUFHLENBQUMsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsRUFBQyxFQUFFLEVBQUU7WUFDckYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO1lBRXhGLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUN0RixDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO3dCQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixTQUFTLGVB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O0lBQ0gsSUFBSSxDQUFDLElBQUk7UUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBVztRQUNsQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtRQUV2RixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLEVBQUU7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUE7UUFFL0IsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IFJlZmVyZW5jZSBmcm9tIFwiLi9yZWZlcmVuY2UuanNcIlxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKFwiU2NvdW5kcmVsIENsaWVudFwiKVxuXG4vLyBsb2dnZXIuc2V0RGVidWcodHJ1ZSlcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2NvdW5kcmVsIENsaWVudFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gYmFja2VuZCBUaGUgYmFja2VuZCBjb25uZWN0aW9uIChlLmcuLCBXZWJTb2NrZXQpXG4gICAqIEBwYXJhbSB7e2VuYWJsZVNlcnZlckNvbnRyb2w/OiBib29sZWFufX0gW29wdGlvbnNdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihiYWNrZW5kLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmJhY2tlbmQgPSBiYWNrZW5kXG4gICAgdGhpcy5iYWNrZW5kLm9uQ29tbWFuZCh0aGlzLm9uQ29tbWFuZClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgYW55Pn0gKi9cbiAgICB0aGlzLm91dGdvaW5nQ29tbWFuZHMgPSB7fVxuICAgIHRoaXMuaW5jb21pbmdDb21tYW5kcyA9IHt9XG4gICAgdGhpcy5vdXRnb2luZ0NvbW1hbmRzQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgdGhpcy5fY2xhc3NlcyA9IHt9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgdGhpcy5fb2JqZWN0cyA9IHt9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT59ICovXG4gICAgdGhpcy5yZWZlcmVuY2VzID0ge31cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgYW55Pn0gKi9cbiAgICB0aGlzLm9iamVjdHMgPSB7fVxuXG4gICAgdGhpcy5vYmplY3RzQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5zZXJ2ZXJDb250cm9sRW5hYmxlZCA9IEJvb2xlYW4ob3B0aW9ucy5lbmFibGVTZXJ2ZXJDb250cm9sKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY2xpZW50IGNvbm5lY3Rpb25cbiAgICovXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIHRoaXMuYmFja2VuZC5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSBtZXRob2Qgb24gYSByZWZlcmVuY2UgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBkaXJlY3RseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVmZXJlbmNlSWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBjYWxsTWV0aG9kT25SZWZlcmVuY2UocmVmZXJlbmNlSWQsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKFwiY2FsbF9tZXRob2Rfb25fcmVmZXJlbmNlXCIsIHtcbiAgICAgIGFyZ3M6IHRoaXMucGFyc2VBcmcoYXJncyksXG4gICAgICBtZXRob2RfbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgIHJlZmVyZW5jZV9pZDogcmVmZXJlbmNlSWQsXG4gICAgICB3aXRoOiBcInJlc3VsdFwiXG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHQucmVzcG9uc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBhIG1ldGhvZCBvbiBhIHJlZmVyZW5jZSBhbmQgcmV0dXJucyBhIG5ldyByZWZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lXG4gICAqIEBwYXJhbSAgey4uLmFueX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZlcmVuY2U+fVxuICAgKi9cbiAgYXN5bmMgY2FsbE1ldGhvZE9uUmVmZXJlbmNlV2l0aFJlZmVyZW5jZShyZWZlcmVuY2VJZCwgbWV0aG9kTmFtZSwgLi4uYXJncykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJjYWxsX21ldGhvZF9vbl9yZWZlcmVuY2VcIiwge1xuICAgICAgYXJnczogdGhpcy5wYXJzZUFyZyhhcmdzKSxcbiAgICAgIG1ldGhvZF9uYW1lOiBtZXRob2ROYW1lLFxuICAgICAgcmVmZXJlbmNlX2lkOiByZWZlcmVuY2VJZCxcbiAgICAgIHdpdGg6IFwicmVmZXJlbmNlXCJcbiAgICB9KVxuICAgIGNvbnN0IGlkID0gcmVzdWx0LnJlc3BvbnNlXG5cbiAgICByZXR1cm4gdGhpcy5zcGF3blJlZmVyZW5jZShpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBuZXcgcmVmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyaW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlZmVyZW5jZT59XG4gICAqL1xuICBhc3luYyBldmFsV2l0aFJlZmVyZW5jZShldmFsU3RyaW5nKSB7XG4gICAgY29uc3QgZXZhbFJlZmVyZW5jZSA9IGF3YWl0IHRoaXMuZ2V0T2JqZWN0KFwiZXZhbFwiKVxuXG4gICAgcmV0dXJuIGF3YWl0IGV2YWxSZWZlcmVuY2UuY2FsbE1ldGhvZFdpdGhSZWZlcmVuY2UoXCJjYWxsXCIsIG51bGwsIGV2YWxTdHJpbmcpXG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIG1vZHVsZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW1wb3J0TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWZlcmVuY2U+fVxuICAgKi9cbiAgYXN5bmMgaW1wb3J0KGltcG9ydE5hbWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKFwiaW1wb3J0XCIsIHtcbiAgICAgIGltcG9ydF9uYW1lOiBpbXBvcnROYW1lXG4gICAgfSlcblxuICAgIGxvZ2dlci5sb2coKCkgPT4gW1wiaW1wb3J0XCIsIHtyZXN1bHR9XSlcblxuICAgIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXN1bHQgZ2l2ZW5cIilcbiAgICBpZiAoIXJlc3VsdC5vYmplY3RfaWQpIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IElEIGdpdmVuIGluIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG5cbiAgICBjb25zdCBpZCA9IHJlc3VsdC5vYmplY3RfaWRcblxuICAgIHJldHVybiB0aGlzLnNwYXduUmVmZXJlbmNlKGlkKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSByZWdpc3RlcmVkIG9iamVjdCBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlZmVyZW5jZT59XG4gICAqL1xuICBhc3luYyBnZXRPYmplY3Qob2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJnZXRfb2JqZWN0XCIsIHtcbiAgICAgIG9iamVjdF9uYW1lOiBvYmplY3ROYW1lXG4gICAgfSlcblxuICAgIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgRXJyb3IoXCJCbGFuayByZXN1bHQgZ2l2ZW5cIilcblxuICAgIGNvbnN0IGlkID0gcmVzdWx0Lm9iamVjdF9pZFxuXG4gICAgcmV0dXJuIHRoaXMuc3Bhd25SZWZlcmVuY2UoaWQpXG4gIH1cblxuICAvKipcbiAgICogU3Bhd25zIGEgbmV3IHJlZmVyZW5jZSB0byBhbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVmZXJlbmNlPn1cbiAgICovXG4gIGFzeW5jIG5ld09iamVjdFdpdGhSZWZlcmVuY2UoY2xhc3NOYW1lLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChcIm5ld19vYmplY3Rfd2l0aF9yZWZlcmVuY2VcIiwge1xuICAgICAgYXJnczogdGhpcy5wYXJzZUFyZyhhcmdzKSxcbiAgICAgIGNsYXNzX25hbWU6IGNsYXNzTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKFwiQmxhbmsgcmVzdWx0IGdpdmVuXCIpXG5cbiAgICBjb25zdCBpZCA9IHJlc3VsdC5vYmplY3RfaWRcblxuICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IElEIGdpdmVuIGluIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG5cbiAgICByZXR1cm4gdGhpcy5zcGF3blJlZmVyZW5jZShpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGlucHV0IGlzIGEgcGxhaW4gb2JqZWN0XG4gICAqIEBwYXJhbSB7YW55fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUGxhaW5PYmplY3QoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGFuIGluY29taW5nIGNvbW1hbmQgZnJvbSB0aGUgYmFja2VuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb21tYW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNvbW1hbmRfaWRcbiAgICogQHBhcmFtIHthbnl9IGFyZ3MuZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZXJyb3JdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5lcnJvclN0YWNrXVxuICAgKi9cbiAgb25Db21tYW5kID0gKHtjb21tYW5kLCBjb21tYW5kX2lkOiBjb21tYW5kSUQsIGRhdGEsIGVycm9yLCBlcnJvclN0YWNrLCAuLi5yZXN0QXJnc30pID0+IHtcbiAgICBsb2dnZXIubG9nKCgpID0+IFtcIm9uQ29tbWFuZFwiLCB7Y29tbWFuZCwgY29tbWFuZElELCBkYXRhLCBlcnJvciwgZXJyb3JTdGFjaywgcmVzdEFyZ3N9XSlcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGtleSBnaXZlbiBpbiBkYXRhOiAke09iamVjdC5rZXlzKHJlc3RBcmdzKS5qb2luKFwiLCBcIil9YClcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImNvbW1hbmRfcmVzcG9uc2VcIikge1xuICAgICAgICBpZiAoIShjb21tYW5kSUQgaW4gdGhpcy5vdXRnb2luZ0NvbW1hbmRzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3V0Z29pbmcgY29tbWFuZCAke2NvbW1hbmRJRH0gbm90IGZvdW5kOiAke09iamVjdC5rZXlzKHRoaXMub3V0Z29pbmdDb21tYW5kcykuam9pbihcIiwgXCIpfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYXZlZENvbW1hbmQgPSB0aGlzLm91dGdvaW5nQ29tbWFuZHNbY29tbWFuZElEXVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLm91dGdvaW5nQ29tbWFuZHNbY29tbWFuZElEXVxuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yVG9UaHJvdyA9IG5ldyBFcnJvcihlcnJvcilcbiAgICAgICAgICBjb25zdCBzYW5pdGl6ZVN0YWNrID0gKHN0YWNrKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN0YWNrKSByZXR1cm4gW11cbiAgICAgICAgICAgIHJldHVybiBzdGFja1xuICAgICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpID0+ICEvbm9kZV9tb2R1bGVzXFwvd3N8bm9kZTp8aW50ZXJuYWxcXC8vLnRlc3QobGluZSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZm9ybWF0U2VjdGlvbiA9IChsYWJlbCwgc3RhY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gc2FuaXRpemVTdGFjayhzdGFjaylcbiAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuICAgICAgICAgICAgcmV0dXJuIFtgJHtsYWJlbH0gJHtsaW5lc1swXX1gLCAuLi5saW5lcy5zbGljZSgxKV1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb21iaW5lZFN0YWNrID0gW1xuICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yfWAsXG4gICAgICAgICAgICAuLi5mb3JtYXRTZWN0aW9uKFwiW1NDT1VOVERSRUwtU0VSVkVSXVwiLCBlcnJvclN0YWNrKSxcbiAgICAgICAgICAgIC4uLmZvcm1hdFNlY3Rpb24oXCJbU0NPVU5EUkVMLUNMSUVOVF1cIiwgZXJyb3JUb1Rocm93LnN0YWNrKSxcbiAgICAgICAgICAgIC4uLmZvcm1hdFNlY3Rpb24oXCJbU0NPVU5EUkVMLUNMSUVOVF1cIiwgc2F2ZWRDb21tYW5kLm9yaWdpblN0YWNrID8gYENvbW1hbmQgY3JlYXRlZCBhdDpcXG4ke3NhdmVkQ29tbWFuZC5vcmlnaW5TdGFja31gIDogbnVsbClcbiAgICAgICAgICBdLmpvaW4oXCJcXG5cIilcblxuICAgICAgICAgIGVycm9yVG9UaHJvdy5zdGFjayA9IGNvbWJpbmVkU3RhY2tcblxuICAgICAgICAgIHNhdmVkQ29tbWFuZC5yZWplY3QoZXJyb3JUb1Rocm93KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5sb2coKCkgPT4gW2BSZXNvbHZpbmcgY29tbWFuZCAke2NvbW1hbmRJRH0gd2l0aCBkYXRhYCwgZGF0YV0pXG4gICAgICAgICAgc2F2ZWRDb21tYW5kLnJlc29sdmUoZGF0YS5kYXRhKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlcnZlckNvbnRyb2xFbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc2VuZCh7Y29tbWFuZDogXCJjb21tYW5kX3Jlc3BvbnNlXCIsIGNvbW1hbmRfaWQ6IGNvbW1hbmRJRCwgZXJyb3I6IFwiU2VydmVyIGNvbnRyb2wgaXMgZGlzYWJsZWRcIn0pXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwiZ2V0X29iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlck9iamVjdCA9IHRoaXMuX2dldFJlZ2lzdGVyZWRPYmplY3QoZGF0YS5vYmplY3RfbmFtZSlcbiAgICAgICAgbGV0IG9iamVjdFxuXG4gICAgICAgIGlmIChzZXJ2ZXJPYmplY3QpIHtcbiAgICAgICAgICBvYmplY3QgPSBzZXJ2ZXJPYmplY3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmplY3QgPSBnbG9iYWxUaGlzW2RhdGEub2JqZWN0X25hbWVdXG5cbiAgICAgICAgICBpZiAoIW9iamVjdCkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIG9iamVjdDogJHtkYXRhLm9iamVjdF9uYW1lfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3RJZCA9ICsrdGhpcy5vYmplY3RzQ291bnRcblxuICAgICAgICB0aGlzLm9iamVjdHNbb2JqZWN0SWRdID0gb2JqZWN0XG4gICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIHtvYmplY3RfaWQ6IG9iamVjdElkfSlcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcIm5ld19vYmplY3Rfd2l0aF9yZWZlcmVuY2VcIikge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBkYXRhLmNsYXNzX25hbWVcbiAgICAgICAgbGV0IG9iamVjdFxuXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb25zdCBDbGFzc0luc3RhbmNlID0gdGhpcy5nZXRDbGFzcyhjbGFzc05hbWUpIHx8IGdsb2JhbFRoaXNbY2xhc3NOYW1lXVxuXG4gICAgICAgICAgaWYgKCFDbGFzc0luc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggY2xhc3M6ICR7Y2xhc3NOYW1lfWApXG5cbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ2xhc3NJbnN0YW5jZSguLi5kYXRhLmFyZ3MpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgY2xhc3MgbmFtZTogJHt0eXBlb2YgY2xhc3NOYW1lfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3RJZCA9ICsrdGhpcy5vYmplY3RzQ291bnRcblxuICAgICAgICB0aGlzLm9iamVjdHNbb2JqZWN0SWRdID0gb2JqZWN0XG4gICAgICAgIHRoaXMucmVzcG9uZFRvQ29tbWFuZChjb21tYW5kSUQsIHtvYmplY3RfaWQ6IG9iamVjdElkfSlcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImNhbGxfbWV0aG9kX29uX3JlZmVyZW5jZVwiKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZGF0YS5yZWZlcmVuY2VfaWRcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzW3JlZmVyZW5jZUlkXVxuXG4gICAgICAgIGlmICghb2JqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYE5vIG9iamVjdCBieSB0aGF0IElEOiAke3JlZmVyZW5jZUlkfWApXG5cbiAgICAgICAgY29uc3QgbWV0aG9kID0gb2JqZWN0W2RhdGEubWV0aG9kX25hbWVdXG5cbiAgICAgICAgaWYgKCFtZXRob2QpIHRocm93IG5ldyBFcnJvcihgTm8gbWV0aG9kIGNhbGxlZCAnJHtkYXRhLm1ldGhvZF9uYW1lfScgb24gYSAnJHtvYmplY3QuY29uc3RydWN0b3IubmFtZX0nYClcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IG1ldGhvZC5jYWxsKG9iamVjdCwgLi4uZGF0YS5hcmdzKVxuXG4gICAgICAgIGlmIChkYXRhLndpdGggPT0gXCJyZWZlcmVuY2VcIikge1xuICAgICAgICAgIGNvbnN0IG9iamVjdElkID0gKyt0aGlzLm9iamVjdHNDb3VudFxuXG4gICAgICAgICAgdGhpcy5vYmplY3RzW29iamVjdElkXSA9IHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge3Jlc3BvbnNlOiBvYmplY3RJZH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge3Jlc3BvbnNlfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09IFwic2VyaWFsaXplX3JlZmVyZW5jZVwiKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZGF0YS5yZWZlcmVuY2VfaWRcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzW3JlZmVyZW5jZUlkXVxuXG4gICAgICAgIGlmICghb2JqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYE5vIG9iamVjdCBieSB0aGF0IElEOiAke3JlZmVyZW5jZUlkfWApXG5cbiAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwgSlNPTi5zdHJpbmdpZnkob2JqZWN0KSlcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcInJlYWRfYXR0cmlidXRlXCIpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGRhdGEuYXR0cmlidXRlX25hbWVcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBkYXRhLnJlZmVyZW5jZV9pZFxuICAgICAgICBjb25zdCByZXR1cm5XaXRoID0gZGF0YS53aXRoXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0c1tyZWZlcmVuY2VJZF1cblxuICAgICAgICBpZiAoIW9iamVjdCkgdGhyb3cgbmV3IEVycm9yKGBObyBvYmplY3QgYnkgdGhhdCBJRDogJHtyZWZlcmVuY2VJZH1gKVxuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IG9iamVjdFthdHRyaWJ1dGVOYW1lXVxuXG4gICAgICAgIGlmIChyZXR1cm5XaXRoID09IFwicmVmZXJlbmNlXCIpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RJZCA9ICsrdGhpcy5vYmplY3RzQ291bnRcblxuICAgICAgICAgIHRoaXMub2JqZWN0c1tvYmplY3RJZF0gPSBhdHRyaWJ1dGVcbiAgICAgICAgICB0aGlzLnJlc3BvbmRUb0NvbW1hbmQoY29tbWFuZElELCB7cmVzcG9uc2U6IG9iamVjdElkfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbmRUb0NvbW1hbmQoY29tbWFuZElELCB7cmVzcG9uc2U6IGF0dHJpYnV0ZX0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBcImV2YWxcIikge1xuICAgICAgICBjb25zdCByZXNwb25kV2l0aFJlc3VsdCA9IChldmFsUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEud2l0aF9yZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdElkID0gKyt0aGlzLm9iamVjdHNDb3VudFxuXG4gICAgICAgICAgICB0aGlzLm9iamVjdHNbb2JqZWN0SWRdID0gZXZhbFJlc3VsdFxuICAgICAgICAgICAgdGhpcy5yZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJRCwge29iamVjdF9pZDogb2JqZWN0SWR9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbmRUb0NvbW1hbmQoY29tbWFuZElELCB7cmVzcG9uc2U6IGV2YWxSZXN1bHR9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2YWxSZXN1bHQgPSBldmFsKGRhdGEuZXZhbF9zdHJpbmcpXG5cbiAgICAgICAgaWYgKGV2YWxSZXN1bHQgJiYgdHlwZW9mIGV2YWxSZXN1bHQudGhlbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBldmFsUmVzdWx0LnRoZW4ocmVzcG9uZFdpdGhSZXN1bHQpLmNhdGNoKChwcm9taXNlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLnNlbmQoe2NvbW1hbmQ6IFwiY29tbWFuZF9yZXNwb25zZVwiLCBjb21tYW5kX2lkOiBjb21tYW5kSUQsIGVycm9yOiBwcm9taXNlRXJyb3IubWVzc2FnZSwgZXJyb3JTdGFjazogcHJvbWlzZUVycm9yLnN0YWNrfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VuZCh7Y29tbWFuZDogXCJjb21tYW5kX3Jlc3BvbnNlXCIsIGNvbW1hbmRfaWQ6IGNvbW1hbmRJRCwgZXJyb3I6IFN0cmluZyhwcm9taXNlRXJyb3IpfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbmRXaXRoUmVzdWx0KGV2YWxSZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhpcy5zZW5kKHtjb21tYW5kOiBcImNvbW1hbmRfcmVzcG9uc2VcIiwgY29tbWFuZF9pZDogY29tbWFuZElELCBlcnJvcjogZXJyb3IubWVzc2FnZSwgZXJyb3JTdGFjazogZXJyb3Iuc3RhY2t9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZW5kKHtjb21tYW5kOiBcImNvbW1hbmRfcmVzcG9uc2VcIiwgY29tbWFuZF9pZDogY29tbWFuZElELCBlcnJvcjogU3RyaW5nKGVycm9yKX0pXG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5lcnJvcihlcnJvcilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyYXNlcyBhbiBhcmd1bWVudCBmb3Igc2VuZGluZyB0byB0aGUgc2VydmVyXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBhcmdcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIHBhcnNlQXJnKGFyZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgIHJldHVybiBhcmcubWFwKChhcmdJbkFycmF5KSA9PiB0aGlzLnBhcnNlQXJnKGFyZ0luQXJyYXkpKVxuICAgIH0gZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3Njb3VuZHJlbF9vYmplY3RfaWQ6IGFyZy5pZCxcbiAgICAgICAgX19zY291bmRyZWxfdHlwZTogXCJyZWZlcmVuY2VcIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1BsYWluT2JqZWN0KGFyZykpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPGFueSwgYW55Pn0gKi9cbiAgICAgIGNvbnN0IG5ld09iamVjdCA9IHt9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGFyZykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ1trZXldXG5cbiAgICAgICAgbmV3T2JqZWN0W2tleV0gPSB0aGlzLnBhcnNlQXJnKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3T2JqZWN0XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFuIGF0dHJpYnV0ZSBvbiBhIHJlZmVyZW5jZSBhbmQgcmV0dXJucyBhIG5ldyByZWZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlZmVyZW5jZUlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlZmVyZW5jZT59XG4gICAqL1xuICBhc3luYyByZWFkQXR0cmlidXRlT25SZWZlcmVuY2VXaXRoUmVmZXJlbmNlKHJlZmVyZW5jZUlkLCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChcInJlYWRfYXR0cmlidXRlXCIsIHtcbiAgICAgIGF0dHJpYnV0ZV9uYW1lOiBhdHRyaWJ1dGVOYW1lLFxuICAgICAgcmVmZXJlbmNlX2lkOiByZWZlcmVuY2VJZCxcbiAgICAgIHdpdGg6IFwicmVmZXJlbmNlXCJcbiAgICB9KVxuICAgIGNvbnN0IGlkID0gcmVzdWx0LnJlc3BvbnNlXG5cbiAgICByZXR1cm4gdGhpcy5zcGF3blJlZmVyZW5jZShpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbiBhdHRyaWJ1dGUgb24gYSByZWZlcmVuY2UgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBkaXJlY3RseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVmZXJlbmNlSWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIHJlYWRBdHRyaWJ1dGVPblJlZmVyZW5jZShyZWZlcmVuY2VJZCwgYXR0cmlidXRlTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJyZWFkX2F0dHJpYnV0ZVwiLCB7XG4gICAgICBhdHRyaWJ1dGVfbmFtZTogYXR0cmlidXRlTmFtZSxcbiAgICAgIHJlZmVyZW5jZV9pZDogcmVmZXJlbmNlSWQsXG4gICAgICB3aXRoOiBcInJlc3VsdFwiXG4gICAgfSlcbiAgICByZXR1cm4gcmVzdWx0LnJlc3BvbnNlXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2xhc3MgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7YW55fSBjbGFzc0luc3RhbmNlXG4gICAqL1xuICByZWdpc3RlckNsYXNzKGNsYXNzTmFtZSwgY2xhc3NJbnN0YW5jZSkge1xuICAgIGlmIChjbGFzc05hbWUgaW4gdGhpcy5fY2xhc3NlcykgdGhyb3cgbmV3IEVycm9yKGBDbGFzcyBhbHJlYWR5IGV4aXN0czogJHtjbGFzc05hbWV9YClcblxuICAgIHRoaXMuX2NsYXNzZXNbY2xhc3NOYW1lXSA9IGNsYXNzSW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgcmVnaXN0ZXJlZCBjbGFzcyBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIGdldENsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9jbGFzc2VzW2NsYXNzTmFtZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gb2JqZWN0IGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdE5hbWVcbiAgICogQHBhcmFtIHthbnl9IG9iamVjdEluc3RhbmNlXG4gICAqL1xuICByZWdpc3Rlck9iamVjdChvYmplY3ROYW1lLCBvYmplY3RJbnN0YW5jZSkge1xuICAgIGlmIChvYmplY3ROYW1lIGluIHRoaXMuX29iamVjdHMpIHRocm93IG5ldyBFcnJvcihgT2JqZWN0IGFscmVhZHkgZXhpc3RzOiAke29iamVjdE5hbWV9YClcblxuICAgIHRoaXMuX29iamVjdHNbb2JqZWN0TmFtZV0gPSBvYmplY3RJbnN0YW5jZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSByZWdpc3RlcmVkIG9iamVjdCBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBfZ2V0UmVnaXN0ZXJlZE9iamVjdChvYmplY3ROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdHNbb2JqZWN0TmFtZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNwb25kcyB0byBhIGNvbW1hbmQgZnJvbSB0aGUgYmFja2VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29tbWFuZElkXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhXG4gICAqL1xuICByZXNwb25kVG9Db21tYW5kKGNvbW1hbmRJZCwgZGF0YSkge1xuICAgIHRoaXMuc2VuZCh7Y29tbWFuZDogXCJjb21tYW5kX3Jlc3BvbnNlXCIsIGNvbW1hbmRfaWQ6IGNvbW1hbmRJZCwgZGF0YToge2NvbW1hbmRfaWQ6IGNvbW1hbmRJZCwgZGF0YX19KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgY29tbWFuZCB0byB0aGUgYmFja2VuZCBhbmQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICAgKiBAcGFyYW0ge2FueX0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgc2VuZENvbW1hbmQoY29tbWFuZCwgZGF0YSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvdXRnb2luZ0NvbW1hbmRDb3VudCA9ICsrdGhpcy5vdXRnb2luZ0NvbW1hbmRzQ291bnRcbiAgICAgIGNvbnN0IG9yaWdpbkVycm9yID0gbmV3IEVycm9yKGBDb21tYW5kICcke2NvbW1hbmR9JyBkaXNwYXRjaGVkYClcbiAgICAgIC8vIFN0cmlwIHRoZSBzZW5kQ29tbWFuZCBmcmFtZSB0byBoaWdobGlnaHQgdGhlIGNhbGxlciBzaXRlLlxuICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvcmlnaW5FcnJvciwgdGhpcy5zZW5kQ29tbWFuZClcbiAgICAgIGNvbnN0IGNvbW1hbmREYXRhID0ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBjb21tYW5kX2lkOiBvdXRnb2luZ0NvbW1hbmRDb3VudCxcbiAgICAgICAgZGF0YVxuICAgICAgfVxuXG4gICAgICB0aGlzLm91dGdvaW5nQ29tbWFuZHNbb3V0Z29pbmdDb21tYW5kQ291bnRdID0ge3Jlc29sdmUsIHJlamVjdCwgb3JpZ2luU3RhY2s6IG9yaWdpbkVycm9yLnN0YWNrfVxuICAgICAgbG9nZ2VyLmxvZygoKSA9PiBbXCJTZW5kaW5nXCIsIGNvbW1hbmREYXRhXSlcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kRGF0YSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGRhdGEgdG8gdGhlIGJhY2tlbmRcbiAgICogQHBhcmFtIHthbnl9IGRhdGFcbiAgICovXG4gIHNlbmQoZGF0YSkge1xuICAgIHRoaXMuYmFja2VuZC5zZW5kKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIHJlZmVyZW5jZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGRpcmVjdGx5XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZWZlcmVuY2VJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgYXN5bmMgc2VyaWFsaXplUmVmZXJlbmNlKHJlZmVyZW5jZUlkKSB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoXCJzZXJpYWxpemVfcmVmZXJlbmNlXCIsIHtyZWZlcmVuY2VfaWQ6IHJlZmVyZW5jZUlkfSlcblxuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXG4gIH1cblxuICAvKipcbiAgICogU3Bhd25zIGEgbmV3IHJlZmVyZW5jZSB0byBhbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gICAqIEByZXR1cm5zIHtSZWZlcmVuY2V9XG4gICAqL1xuICBzcGF3blJlZmVyZW5jZShpZCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UodGhpcywgaWQpXG5cbiAgICB0aGlzLnJlZmVyZW5jZXNbaWRdID0gcmVmZXJlbmNlXG5cbiAgICByZXR1cm4gcmVmZXJlbmNlXG4gIH1cblxuICBlbmFibGVTZXJ2ZXJDb250cm9sKCkge1xuICAgIHRoaXMuc2VydmVyQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "scoundrel-remote-eval",
3
3
  "type": "module",
4
- "version": "1.0.11",
4
+ "version": "1.0.12",
5
5
  "description": "",
6
6
  "main": "build/index.js",
7
7
  "types": "build/index.d.ts",