@cartanova/qgrid-cli 2.10.1 → 2.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.ko.md +1 -1
  2. package/README.md +1 -1
  3. package/bundle/dist/application/monit/log-buffer.js +7 -11
  4. package/bundle/dist/application/monit/monit.frame.js +6 -11
  5. package/bundle/dist/application/qgrid/oauth.js +2 -2
  6. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +2 -2
  7. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +12 -36
  8. package/bundle/dist/application/qgrid/qgrid.frame.js +2 -2
  9. package/bundle/dist/application/qgrid/qgrid.types.js +2 -1
  10. package/bundle/dist/application/qgrid/token-subscriber.js +4 -7
  11. package/bundle/dist/application/qgrid/token-window-keepalive.js +3 -2
  12. package/bundle/dist/application/qgrid/tool-emulation-schema.js +4 -4
  13. package/bundle/dist/application/qgrid/tool-emulation.js +14 -2
  14. package/bundle/dist/application/request-log/request-log.model.js +7 -5
  15. package/bundle/dist/application/setting/setting.model.js +1 -1
  16. package/bundle/dist/sonamu.config.js +6 -6
  17. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
  18. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +53 -84
  19. package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +55 -0
  20. package/bundle/dist/utils/providers/anthropic/claude-session.js +11 -13
  21. package/bundle/dist/utils/providers/common/effort.js +1 -1
  22. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +3 -3
  23. package/bundle/dist/utils/providers/common/thinking.js +12 -0
  24. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +3 -2
  25. package/bundle/dist/utils/providers/openai/openai-direct-client.js +6 -16
  26. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +89 -78
  27. package/bundle/src/application/monit/log-buffer.test.ts +3 -4
  28. package/bundle/src/application/monit/log-buffer.ts +13 -27
  29. package/bundle/src/application/monit/monit.frame.test.ts +7 -8
  30. package/bundle/src/application/monit/monit.frame.ts +9 -14
  31. package/bundle/src/application/qgrid/oauth.ts +1 -1
  32. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +7 -0
  33. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +1 -1
  34. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +62 -1
  35. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +25 -71
  36. package/bundle/src/application/qgrid/qgrid.frame.ts +4 -8
  37. package/bundle/src/application/qgrid/qgrid.types.ts +2 -0
  38. package/bundle/src/application/qgrid/token-subscriber.test.ts +8 -18
  39. package/bundle/src/application/qgrid/token-subscriber.ts +10 -20
  40. package/bundle/src/application/qgrid/token-window-keepalive.test.ts +2 -2
  41. package/bundle/src/application/qgrid/token-window-keepalive.ts +2 -1
  42. package/bundle/src/application/qgrid/tool-emulation-schema.test.ts +6 -3
  43. package/bundle/src/application/qgrid/tool-emulation-schema.ts +3 -3
  44. package/bundle/src/application/qgrid/tool-emulation.test.ts +8 -1
  45. package/bundle/src/application/qgrid/tool-emulation.ts +29 -0
  46. package/bundle/src/application/request-log/request-log.model.ts +5 -5
  47. package/bundle/src/application/setting/setting.model.ts +1 -1
  48. package/bundle/src/sonamu.config.ts +5 -5
  49. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +3 -6
  50. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.test.ts +26 -0
  51. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +70 -148
  52. package/bundle/src/utils/providers/anthropic/anthropic-thinking.test.ts +36 -0
  53. package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +84 -0
  54. package/bundle/src/utils/providers/anthropic/claude-session.test.ts +74 -13
  55. package/bundle/src/utils/providers/anthropic/claude-session.ts +11 -20
  56. package/bundle/src/utils/providers/common/effort.ts +1 -1
  57. package/bundle/src/utils/providers/common/provider-dispatcher.ts +4 -0
  58. package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -4
  59. package/bundle/src/utils/providers/common/thinking.ts +10 -0
  60. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +7 -3
  61. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +3 -3
  62. package/bundle/src/utils/providers/openai/openai-direct-client.ts +20 -33
  63. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +97 -6
  64. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +113 -77
  65. package/bundle/web-dist/client/assets/{index-Cq4_ExLO.js → index-BIC1sQxw.js} +3 -3
  66. package/bundle/web-dist/client/assets/logs-zvdujZWn.js +1 -0
  67. package/bundle/web-dist/client/assets/monit-CraVV3MQ.js +1 -0
  68. package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +1 -0
  69. package/bundle/web-dist/client/assets/{routes-CXotE1OF.js → routes-B3ZBoJ60.js} +1 -1
  70. package/bundle/web-dist/client/assets/{settings-CfJDz4AC.js → settings-DwbzT5jo.js} +1 -1
  71. package/bundle/web-dist/client/assets/{show-gBpWK4z2.js → show-ItTExdAh.js} +1 -1
  72. package/bundle/web-dist/client/assets/{tokens-CbFJjIyC.js → tokens-BynKx8Vn.js} +1 -1
  73. package/bundle/web-dist/client/assets/{use-oauth-login-flow-jJo7GV3r.js → use-oauth-login-flow-8xw6on5P.js} +1 -1
  74. package/bundle/web-dist/client/index.html +1 -1
  75. package/bundle/web-dist/server/assets/{logs-DMlOXcDS.js → logs-BSk9lOHe.js} +13 -3
  76. package/bundle/web-dist/server/assets/{monit-Dg1wZCdx.js → monit-D9W4ioUi.js} +2 -21
  77. package/bundle/web-dist/server/assets/refresh-cw-B8U9BL9-.js +23 -0
  78. package/bundle/web-dist/server/assets/{settings-BaIBt_Vs.js → settings-BFVuldch.js} +1 -1
  79. package/bundle/web-dist/server/assets/{show-CDxGr4rS.js → show-Cswh_tqs.js} +1 -1
  80. package/bundle/web-dist/server/assets/{tokens-DJlfeGcx.js → tokens-DiTUwUwr.js} +1 -1
  81. package/bundle/web-dist/server/entry-server.generated.js +6 -7
  82. package/package.json +1 -1
  83. package/skills/qgrid/SKILL.md +1 -0
  84. package/skills/qgrid/references/ai-sdk-provider-contract.md +2 -1
  85. package/skills/qgrid/references/anthropic-claude-code-runtime.md +7 -4
  86. package/skills/qgrid/references/decision-rationale.md +9 -0
  87. package/skills/qgrid/references/openai-codex-runtime.md +6 -0
  88. package/skills/qgrid/references/sonamu-api-web-flow.md +3 -1
  89. package/skills/qgrid/references/token-auth-quota-lifecycle.md +2 -0
  90. package/skills/qgrid/references/tool-calling-and-multiturn.md +18 -1
  91. package/skills/qgrid/references/verification-and-debugging.md +1 -1
  92. package/bundle/web-dist/client/assets/logs-kg1KOMBk.js +0 -1
  93. package/bundle/web-dist/client/assets/monit-DmtHTmSM.js +0 -1
  94. /package/bundle/web-dist/client/assets/{plus-CknMNCP5.js → plus-B62CuqT8.js} +0 -0
  95. /package/bundle/web-dist/client/assets/{request-model-eygfdRv7.js → request-model-D4CZPmnG.js} +0 -0
  96. /package/bundle/web-dist/server/assets/{plus-DVobMrag.js → plus-CmvbWuDf.js} +0 -0
  97. /package/bundle/web-dist/server/assets/{request-model-DXclJfdP.js → request-model-CnCeaNLE.js} +0 -0
package/README.ko.md CHANGED
@@ -132,7 +132,7 @@ import { generateText } from "ai";
132
132
  import { qgrid } from "@cartanova/qgrid-ai-sdk";
133
133
 
134
134
  const { text } = await generateText({
135
- model: qgrid("openai/gpt-5.6-luna"),
135
+ model: qgrid("openai/gpt-6-luna"),
136
136
  prompt: "서울 날씨 알려줘",
137
137
  });
138
138
  ```
package/README.md CHANGED
@@ -133,7 +133,7 @@ import { generateText } from "ai";
133
133
  import { qgrid } from "@cartanova/qgrid-ai-sdk";
134
134
 
135
135
  const { text } = await generateText({
136
- model: qgrid("openai/gpt-5.6-luna"),
136
+ model: qgrid("openai/gpt-6-luna"),
137
137
  prompt: "What's the weather in Seoul?",
138
138
  });
139
139
  ```
@@ -37,27 +37,23 @@ var MonitLogBuffer = class {
37
37
  if (this.entries.length > this.capacity) this.entries.splice(0, this.entries.length - this.capacity);
38
38
  } catch {}
39
39
  }
40
- get oldestSeq() {
41
- return this.entries[0]?.seq ?? this.nextSeq;
42
- }
43
- get latestSeq() {
44
- return this.nextSeq - 1;
45
- }
46
40
  after(cursor, limit) {
41
+ const latestSeq = this.nextSeq - 1;
42
+ const oldestSeq = this.entries[0]?.seq ?? this.nextSeq;
47
43
  if (cursor === void 0) {
48
44
  const entries = this.entries.slice(-limit);
49
45
  return {
50
46
  entries,
51
- nextCursor: entries.at(-1)?.seq ?? this.latestSeq,
47
+ nextCursor: entries.at(-1)?.seq ?? latestSeq,
52
48
  dropped: 0
53
49
  };
54
50
  }
55
- if (cursor > this.latestSeq) return {
51
+ if (cursor > latestSeq) return {
56
52
  entries: [],
57
- nextCursor: this.latestSeq,
53
+ nextCursor: latestSeq,
58
54
  dropped: 0
59
55
  };
60
- const dropped = Math.max(this.oldestSeq - cursor - 1, 0);
56
+ const dropped = Math.max(oldestSeq - cursor - 1, 0);
61
57
  const startIndex = this.entries.findIndex((entry) => entry.seq > cursor);
62
58
  const entries = startIndex === -1 ? [] : this.entries.slice(startIndex, startIndex + limit);
63
59
  return {
@@ -74,4 +70,4 @@ const monitLogSink = (record) => {
74
70
  //#endregion
75
71
  export { MonitLogBuffer, monitLogBuffer, monitLogSink };
76
72
 
77
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWJ1ZmZlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9uaXQvbG9nLWJ1ZmZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vbml0IOuhnOq3uCByaW5nIGJ1ZmZlciDigJQg7ZSE66Gc7IS47IqkIOyDneyhtCDquLDqsIQg64+Z7JWIIOy1nOq3vCDroZzqt7jrpbwg6rWs7KGw7ZmUIOugiOy9lOuTnOuhnCDrs7TqtIDtlZzri6QuXG4gKlxuICog7L2Y7IaUIHNpbmsg7JmAIOuzkeugrOuhnCDrk7HroZ3rkJjripQg65GQIOuyiOynuCBsb2d0YXBlIHNpbmsg6rCAIOydtCDrsoTtjbzrpbwg7LGE7Jqw6rOgLFxuICogbW9uaXQuZnJhbWUg7J20IOy7pOyEnCDquLDrsJjsnLzroZwg7J297Ja0IOuMgOyLnOuztOuTnCBNb25pdCDtg63sl5Ag7KCc6rO17ZWc64ukLlxuICog7J6s7Iuc7J6R7ZWY66m0IOumrOyFi+uQnOuLpCDigJQg7JiB7IaNIOq4sOuhneydgCByZXF1ZXN0X2xvZyDsnZgg66qrLlxuICpcbiAqIHRpbWVzdGFtcC9wcm9jZXNzU3RhcnRlZEF0IOydgCBlcG9jaCBtcyDsiKvsnpDroZwg7Jyg7KeA7ZWc64ukLiB3ZWIg7J2YIOyghOyXrSBkYXRlUmV2aXZlciDqsIBcbiAqIElTTyDrrLjsnpDsl7TsnYQgRGF0ZSDroZwg67CU6r+U67KE66as66+A66GcLCDsiKvsnpDrp4zsnbQg7J6s7Iuc7J6RIOqwkOyngOydmCDrj5nrk7HshLEg67mE6rWQ66W8IOuztOyhtO2VnOuLpC5cbiAqL1xuaW1wb3J0IHsgdHlwZSBMb2dSZWNvcmQsIHR5cGUgU2luayB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FQQUNJVFkgPSAyXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1RFWFRfTEVOR1RIID0gNF8wMDA7XG5cbi8vIO2RnOyLnCDsoITsmqkgd2lyZSDroIjsvZTrk5wuIHByb3BlcnRpZXMv7JuQ67O4IOqwkuydgCDrsoTtjbzsl5Ag7Iuj7KeAIOyViuuKlOuLpChhbGxvd2xpc3QpLlxuZXhwb3J0IGludGVyZmFjZSBNb25pdExvZ0VudHJ5IHtcbiAgc2VxOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nW107XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb25pdExvZ0NodW5rIHtcbiAgZW50cmllczogTW9uaXRMb2dFbnRyeVtdO1xuICBuZXh0Q3Vyc29yOiBudW1iZXI7XG4gIC8vIO2YuOy2nOyekOydmCDsu6TshJzqsIAgZXZpY3Rpb24g7JeQIOuwgOugpCDsnKDsi6TrkJwg65287J24IOyImC4gMCDsnbTrqbQg6rO167CxIOyXhuydjC5cbiAgZHJvcHBlZDogbnVtYmVyO1xufVxuXG4vLyBsb2d0YXBlIG1lc3NhZ2Ug67Cw7Je07J2AIO2ZgOyImCDquLjsnbQg4oCUIOynneyImCDsnbjrjbHsiqTqsIAg7YWc7ZSM66a/IO2FjeyKpO2KuCwg7ZmA7IiY6rCAIOuztOqwhCDqsJIuXG5mdW5jdGlvbiBmbGF0dGVuTWVzc2FnZShtZXNzYWdlOiByZWFkb25seSB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gbWVzc2FnZVxuICAgIC5tYXAoKHBhcnQsIGluZGV4KSA9PiAoaW5kZXggJSAyID09PSAwID8gU3RyaW5nKHBhcnQgPz8gXCJcIikgOiByZW5kZXJWYWx1ZShwYXJ0KSkpXG4gICAgLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbHVlLm1lc3NhZ2U7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA/PyBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9uaXRMb2dCdWZmZXIge1xuICByZWFkb25seSBwcm9jZXNzU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBlbnRyaWVzOiBNb25pdExvZ0VudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBuZXh0U2VxID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcGFjaXR5ID0gREVGQVVMVF9DQVBBQ0lUWSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFRleHRMZW5ndGggPSBERUZBVUxUX01BWF9URVhUX0xFTkdUSCxcbiAgKSB7fVxuXG4gIC8vIGxvZ3RhcGUgc2luayDrs7jssrQuIGxvZ3RhcGUg6rCAIHNpbmsg7Jik66WY66W8IOqyqeumrO2VmOyngOunjCwg67KE7Y28IOuyhOq3uOqwgFxuICAvLyBtZXRhIGxvZ2dlciDshozsnYzsnYQg66eM65Ok7KeAIOyViuuPhOuhnSDrsKnslrTsoIHsnLzroZwg7ZWcIOuyiCDrjZQg6rCQ7Iu864ukLlxuICBwdXNoKHJlY29yZDogTG9nUmVjb3JkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZXh0ID0gZmxhdHRlbk1lc3NhZ2UocmVjb3JkLm1lc3NhZ2UpO1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gdGhpcy5tYXhUZXh0TGVuZ3RoKSB7XG4gICAgICAgIHRleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIHRoaXMubWF4VGV4dExlbmd0aCl94oCmYDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgICAgc2VxOiB0aGlzLm5leHRTZXErKyxcbiAgICAgICAgdGltZXN0YW1wOiByZWNvcmQudGltZXN0YW1wLFxuICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICBjYXRlZ29yeTogWy4uLnJlY29yZC5jYXRlZ29yeV0sXG4gICAgICAgIHRleHQsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVudHJpZXMubGVuZ3RoID4gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKDAsIHRoaXMuZW50cmllcy5sZW5ndGggLSB0aGlzLmNhcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIOuhnOq3uCDsuqHsspgg7Iuk7Yyo64qUIOyhsOyaqe2eiCDrrLTsi5wg4oCUIOuhnOq5hSDqsr3roZzrpbwg7KCI64yAIOuwqe2VtO2VmOyngCDslYrripTri6QuXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9sZGVzdFNlcSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXNbMF0/LnNlcSA/PyB0aGlzLm5leHRTZXE7XG4gIH1cblxuICBnZXQgbGF0ZXN0U2VxKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFNlcSAtIDE7XG4gIH1cblxuICAvLyBjdXJzb3Ig7J207ZuE7J2YIOyXlO2KuOumrOulvCDstZzrjIAgbGltaXQg6rCcIOuwmO2ZmO2VnOuLpC4gY3Vyc29yIOuvuOyngOygleydtOuptCB0YWlsLlxuICBhZnRlcihjdXJzb3I6IG51bWJlciB8IHVuZGVmaW5lZCwgbGltaXQ6IG51bWJlcik6IE1vbml0TG9nQ2h1bmsge1xuICAgIGlmIChjdXJzb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcy5zbGljZSgtbGltaXQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgbmV4dEN1cnNvcjogZW50cmllcy5hdCgtMSk/LnNlcSA/PyB0aGlzLmxhdGVzdFNlcSxcbiAgICAgICAgZHJvcHBlZDogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8g7J207KCEIO2UhOuhnOyEuOyKpOydmCDsu6TshJwg65OxIOuvuOuemCDsu6TshJzripQg67Cp7Ja07KCB7Jy866GcIO2YhOyerCB0YWlsIOuhnCDsnqzrj5nquLDtmZTtlZzri6QuXG4gICAgaWYgKGN1cnNvciA+IHRoaXMubGF0ZXN0U2VxKSB7XG4gICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSwgbmV4dEN1cnNvcjogdGhpcy5sYXRlc3RTZXEsIGRyb3BwZWQ6IDAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkcm9wcGVkID0gTWF0aC5tYXgodGhpcy5vbGRlc3RTZXEgLSBjdXJzb3IgLSAxLCAwKTtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5lbnRyaWVzLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5LnNlcSA+IGN1cnNvcik7XG4gICAgY29uc3QgZW50cmllcyA9IHN0YXJ0SW5kZXggPT09IC0xID8gW10gOiB0aGlzLmVudHJpZXMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIGxpbWl0KTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllcyxcbiAgICAgIG5leHRDdXJzb3I6IGVudHJpZXMuYXQoLTEpPy5zZXEgPz8gY3Vyc29yICsgZHJvcHBlZCxcbiAgICAgIGRyb3BwZWQsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbW9uaXRMb2dCdWZmZXIgPSBuZXcgTW9uaXRMb2dCdWZmZXIoKTtcblxuZXhwb3J0IGNvbnN0IG1vbml0TG9nU2luazogU2luayA9IChyZWNvcmQpID0+IHtcbiAgbW9uaXRMb2dCdWZmZXIucHVzaChyZWNvcmQpO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQVlBLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sMEJBQTBCO0FBbUJoQyxTQUFTLGVBQWUsU0FBcUM7Q0FDM0QsT0FBTyxRQUNKLEtBQUssTUFBTSxVQUFXLFFBQVEsTUFBTSxJQUFJLE9BQU8sUUFBUSxFQUFFLElBQUksWUFBWSxJQUFJLENBQUUsQ0FBQyxDQUNoRixLQUFLLEVBQUU7QUFDWjtBQUVBLFNBQVMsWUFBWSxPQUF3QjtDQUMzQyxJQUFJLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDdEMsSUFBSSxpQkFBaUIsT0FBTyxPQUFPLE1BQU07Q0FDekMsSUFBSTtFQUNGLE9BQU8sS0FBSyxVQUFVLEtBQUssS0FBSyxPQUFPLEtBQUs7Q0FDOUMsUUFBUTtFQUNOLE9BQU8sT0FBTyxLQUFLO0NBQ3JCO0FBQ0Y7QUFFQSxJQUFhLGlCQUFiLE1BQTRCO0NBTVA7Q0FDQTtDQU5uQixtQkFBNEIsS0FBSyxJQUFJO0NBQ3JDLFVBQW1DLENBQUM7Q0FDcEMsVUFBa0I7Q0FFbEIsWUFDRSxXQUE0QixrQkFDNUIsZ0JBQWlDLHlCQUNqQztFQUZpQixLQUFBLFdBQUE7RUFDQSxLQUFBLGdCQUFBO0NBQ2hCO0NBSUgsS0FBSyxRQUF5QjtFQUM1QixJQUFJO0dBQ0YsSUFBSSxPQUFPLGVBQWUsT0FBTyxPQUFPO0dBQ3hDLElBQUksS0FBSyxTQUFTLEtBQUssZUFDckIsT0FBTyxHQUFHLEtBQUssTUFBTSxHQUFHLEtBQUssYUFBYSxFQUFFO0dBRTlDLEtBQUssUUFBUSxLQUFLO0lBQ2hCLEtBQUssS0FBSztJQUNWLFdBQVcsT0FBTztJQUNsQixPQUFPLE9BQU87SUFDZCxVQUFVLENBQUMsR0FBRyxPQUFPLFFBQVE7SUFDN0I7R0FDRixDQUFDO0dBQ0QsSUFBSSxLQUFLLFFBQVEsU0FBUyxLQUFLLFVBQzdCLEtBQUssUUFBUSxPQUFPLEdBQUcsS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRO0VBRTlELFFBQVEsQ0FFUjtDQUNGO0NBRUEsSUFBSSxZQUFvQjtFQUN0QixPQUFPLEtBQUssUUFBUSxFQUFFLEVBQUUsT0FBTyxLQUFLO0NBQ3RDO0NBRUEsSUFBSSxZQUFvQjtFQUN0QixPQUFPLEtBQUssVUFBVTtDQUN4QjtDQUdBLE1BQU0sUUFBNEIsT0FBOEI7RUFDOUQsSUFBSSxXQUFXLFFBQVc7R0FDeEIsTUFBTSxVQUFVLEtBQUssUUFBUSxNQUFNLENBQUMsS0FBSztHQUN6QyxPQUFPO0lBQ0w7SUFDQSxZQUFZLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUs7SUFDeEMsU0FBUztHQUNYO0VBQ0Y7RUFHQSxJQUFJLFNBQVMsS0FBSyxXQUNoQixPQUFPO0dBQUUsU0FBUyxDQUFDO0dBQUcsWUFBWSxLQUFLO0dBQVcsU0FBUztFQUFFO0VBRy9ELE1BQU0sVUFBVSxLQUFLLElBQUksS0FBSyxZQUFZLFNBQVMsR0FBRyxDQUFDO0VBQ3ZELE1BQU0sYUFBYSxLQUFLLFFBQVEsV0FBVyxVQUFVLE1BQU0sTUFBTSxNQUFNO0VBQ3ZFLE1BQU0sVUFBVSxlQUFlLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxNQUFNLFlBQVksYUFBYSxLQUFLO0VBQzFGLE9BQU87R0FDTDtHQUNBLFlBQVksUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sU0FBUztHQUM1QztFQUNGO0NBQ0Y7QUFDRjtBQUVBLE1BQWEsaUJBQWlCLElBQUksZUFBZTtBQUVqRCxNQUFhLGdCQUFzQixXQUFXO0NBQzVDLGVBQWUsS0FBSyxNQUFNO0FBQzVCIn0=
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWJ1ZmZlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9uaXQvbG9nLWJ1ZmZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOyerOyLnOyeke2VmOuptCDstIjquLDtmZTrkJjripQgTW9uaXQg66Gc6re4IOuyhO2NvC5cbiAqIHRpbWVzdGFtcC9wcm9jZXNzU3RhcnRlZEF07J2AIHdlYuydmCBkYXRlUmV2aXZlciDrs4DtmZjsnYQg7ZS87ZWY6rOgIOuPmeuTseyEsSDruYTqtZDrpbwg7Jyg7KeA7ZWY64+E66GdIGVwb2NoIG1z66W8IOyTtOuLpC5cbiAqL1xuaW1wb3J0IHsgdHlwZSBMb2dSZWNvcmQsIHR5cGUgU2luayB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FQQUNJVFkgPSAyXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1RFWFRfTEVOR1RIID0gNF8wMDA7XG5cbi8vIO2RnOyLnCDsoITsmqkgd2lyZSDroIjsvZTrk5wuIHByb3BlcnRpZXMv7JuQ67O4IOqwkuydgCDrsoTtjbzsl5Ag7Iuj7KeAIOyViuuKlOuLpChhbGxvd2xpc3QpLlxuZXhwb3J0IGludGVyZmFjZSBNb25pdExvZ0VudHJ5IHtcbiAgc2VxOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nW107XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb25pdExvZ0NodW5rIHtcbiAgZW50cmllczogTW9uaXRMb2dFbnRyeVtdO1xuICBuZXh0Q3Vyc29yOiBudW1iZXI7XG4gIC8vIO2YuOy2nOyekOydmCDsu6TshJzqsIAgZXZpY3Rpb24g7JeQIOuwgOugpCDsnKDsi6TrkJwg65287J24IOyImC4gMCDsnbTrqbQg6rO167CxIOyXhuydjC5cbiAgZHJvcHBlZDogbnVtYmVyO1xufVxuXG4vLyBsb2d0YXBlIG1lc3NhZ2Ug67Cw7Je07J2AIO2ZgOyImCDquLjsnbQg4oCUIOynneyImCDsnbjrjbHsiqTqsIAg7YWc7ZSM66a/IO2FjeyKpO2KuCwg7ZmA7IiY6rCAIOuztOqwhCDqsJIuXG5mdW5jdGlvbiBmbGF0dGVuTWVzc2FnZShtZXNzYWdlOiByZWFkb25seSB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gbWVzc2FnZVxuICAgIC5tYXAoKHBhcnQsIGluZGV4KSA9PiAoaW5kZXggJSAyID09PSAwID8gU3RyaW5nKHBhcnQgPz8gXCJcIikgOiByZW5kZXJWYWx1ZShwYXJ0KSkpXG4gICAgLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbHVlLm1lc3NhZ2U7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA/PyBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9uaXRMb2dCdWZmZXIge1xuICByZWFkb25seSBwcm9jZXNzU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgZW50cmllczogTW9uaXRMb2dFbnRyeVtdID0gW107XG4gIG5leHRTZXEgPSAxO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGNhcGFjaXR5ID0gREVGQVVMVF9DQVBBQ0lUWSxcbiAgICByZWFkb25seSBtYXhUZXh0TGVuZ3RoID0gREVGQVVMVF9NQVhfVEVYVF9MRU5HVEgsXG4gICkge31cblxuICBwdXNoKHJlY29yZDogTG9nUmVjb3JkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZXh0ID0gZmxhdHRlbk1lc3NhZ2UocmVjb3JkLm1lc3NhZ2UpO1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gdGhpcy5tYXhUZXh0TGVuZ3RoKSB7XG4gICAgICAgIHRleHQgPSBgJHt0ZXh0LnNsaWNlKDAsIHRoaXMubWF4VGV4dExlbmd0aCl94oCmYDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgICAgc2VxOiB0aGlzLm5leHRTZXErKyxcbiAgICAgICAgdGltZXN0YW1wOiByZWNvcmQudGltZXN0YW1wLFxuICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICBjYXRlZ29yeTogWy4uLnJlY29yZC5jYXRlZ29yeV0sXG4gICAgICAgIHRleHQsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVudHJpZXMubGVuZ3RoID4gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKDAsIHRoaXMuZW50cmllcy5sZW5ndGggLSB0aGlzLmNhcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIOuhnOq3uCDsuqHsspgg7Iuk7Yyo64qUIOyhsOyaqe2eiCDrrLTsi5wg4oCUIOuhnOq5hSDqsr3roZzrpbwg7KCI64yAIOuwqe2VtO2VmOyngCDslYrripTri6QuXG4gICAgfVxuICB9XG5cbiAgLy8gY3Vyc29yIOuvuOyngOygleydtOuptCDstZzqt7wg7JeU7Yq466as67aA7YSwIOuwmO2ZmO2VnOuLpC5cbiAgYWZ0ZXIoY3Vyc29yOiBudW1iZXIgfCB1bmRlZmluZWQsIGxpbWl0OiBudW1iZXIpOiBNb25pdExvZ0NodW5rIHtcbiAgICBjb25zdCBsYXRlc3RTZXEgPSB0aGlzLm5leHRTZXEgLSAxO1xuICAgIGNvbnN0IG9sZGVzdFNlcSA9IHRoaXMuZW50cmllc1swXT8uc2VxID8/IHRoaXMubmV4dFNlcTtcbiAgICBpZiAoY3Vyc29yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMuc2xpY2UoLWxpbWl0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIG5leHRDdXJzb3I6IGVudHJpZXMuYXQoLTEpPy5zZXEgPz8gbGF0ZXN0U2VxLFxuICAgICAgICBkcm9wcGVkOiAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyDsnbTsoIQg7ZSE66Gc7IS47Iqk7J2YIOy7pOyEnCDrk7Eg66+4656YIOy7pOyEnOuKlCDrsKnslrTsoIHsnLzroZwg7ZiE7J6sIHRhaWwg66GcIOyerOuPmeq4sO2ZlO2VnOuLpC5cbiAgICBpZiAoY3Vyc29yID4gbGF0ZXN0U2VxKSB7XG4gICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSwgbmV4dEN1cnNvcjogbGF0ZXN0U2VxLCBkcm9wcGVkOiAwIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcHBlZCA9IE1hdGgubWF4KG9sZGVzdFNlcSAtIGN1cnNvciAtIDEsIDApO1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkuc2VxID4gY3Vyc29yKTtcbiAgICBjb25zdCBlbnRyaWVzID0gc3RhcnRJbmRleCA9PT0gLTEgPyBbXSA6IHRoaXMuZW50cmllcy5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgbGltaXQpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzLFxuICAgICAgbmV4dEN1cnNvcjogZW50cmllcy5hdCgtMSk/LnNlcSA/PyBjdXJzb3IgKyBkcm9wcGVkLFxuICAgICAgZHJvcHBlZCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtb25pdExvZ0J1ZmZlciA9IG5ldyBNb25pdExvZ0J1ZmZlcigpO1xuXG5leHBvcnQgY29uc3QgbW9uaXRMb2dTaW5rOiBTaW5rID0gKHJlY29yZCkgPT4ge1xuICBtb25pdExvZ0J1ZmZlci5wdXNoKHJlY29yZCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBTUEsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSwwQkFBMEI7QUFtQmhDLFNBQVMsZUFBZSxTQUFxQztDQUMzRCxPQUFPLFFBQ0osS0FBSyxNQUFNLFVBQVcsUUFBUSxNQUFNLElBQUksT0FBTyxRQUFRLEVBQUUsSUFBSSxZQUFZLElBQUksQ0FBRSxDQUFDLENBQ2hGLEtBQUssRUFBRTtBQUNaO0FBRUEsU0FBUyxZQUFZLE9BQXdCO0NBQzNDLElBQUksT0FBTyxVQUFVLFVBQVUsT0FBTztDQUN0QyxJQUFJLGlCQUFpQixPQUFPLE9BQU8sTUFBTTtDQUN6QyxJQUFJO0VBQ0YsT0FBTyxLQUFLLFVBQVUsS0FBSyxLQUFLLE9BQU8sS0FBSztDQUM5QyxRQUFRO0VBQ04sT0FBTyxPQUFPLEtBQUs7Q0FDckI7QUFDRjtBQUVBLElBQWEsaUJBQWIsTUFBNEI7Q0FNZjtDQUNBO0NBTlgsbUJBQTRCLEtBQUssSUFBSTtDQUNyQyxVQUEyQixDQUFDO0NBQzVCLFVBQVU7Q0FFVixZQUNFLFdBQW9CLGtCQUNwQixnQkFBeUIseUJBQ3pCO0VBRlMsS0FBQSxXQUFBO0VBQ0EsS0FBQSxnQkFBQTtDQUNSO0NBRUgsS0FBSyxRQUF5QjtFQUM1QixJQUFJO0dBQ0YsSUFBSSxPQUFPLGVBQWUsT0FBTyxPQUFPO0dBQ3hDLElBQUksS0FBSyxTQUFTLEtBQUssZUFDckIsT0FBTyxHQUFHLEtBQUssTUFBTSxHQUFHLEtBQUssYUFBYSxFQUFFO0dBRTlDLEtBQUssUUFBUSxLQUFLO0lBQ2hCLEtBQUssS0FBSztJQUNWLFdBQVcsT0FBTztJQUNsQixPQUFPLE9BQU87SUFDZCxVQUFVLENBQUMsR0FBRyxPQUFPLFFBQVE7SUFDN0I7R0FDRixDQUFDO0dBQ0QsSUFBSSxLQUFLLFFBQVEsU0FBUyxLQUFLLFVBQzdCLEtBQUssUUFBUSxPQUFPLEdBQUcsS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRO0VBRTlELFFBQVEsQ0FFUjtDQUNGO0NBR0EsTUFBTSxRQUE0QixPQUE4QjtFQUM5RCxNQUFNLFlBQVksS0FBSyxVQUFVO0VBQ2pDLE1BQU0sWUFBWSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sS0FBSztFQUMvQyxJQUFJLFdBQVcsUUFBVztHQUN4QixNQUFNLFVBQVUsS0FBSyxRQUFRLE1BQU0sQ0FBQyxLQUFLO0dBQ3pDLE9BQU87SUFDTDtJQUNBLFlBQVksUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU87SUFDbkMsU0FBUztHQUNYO0VBQ0Y7RUFHQSxJQUFJLFNBQVMsV0FDWCxPQUFPO0dBQUUsU0FBUyxDQUFDO0dBQUcsWUFBWTtHQUFXLFNBQVM7RUFBRTtFQUcxRCxNQUFNLFVBQVUsS0FBSyxJQUFJLFlBQVksU0FBUyxHQUFHLENBQUM7RUFDbEQsTUFBTSxhQUFhLEtBQUssUUFBUSxXQUFXLFVBQVUsTUFBTSxNQUFNLE1BQU07RUFDdkUsTUFBTSxVQUFVLGVBQWUsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLE1BQU0sWUFBWSxhQUFhLEtBQUs7RUFDMUYsT0FBTztHQUNMO0dBQ0EsWUFBWSxRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsT0FBTyxTQUFTO0dBQzVDO0VBQ0Y7Q0FDRjtBQUNGO0FBRUEsTUFBYSxpQkFBaUIsSUFBSSxlQUFlO0FBRWpELE1BQWEsZ0JBQXNCLFdBQVc7Q0FDNUMsZUFBZSxLQUFLLE1BQU07QUFDNUIifQ==
@@ -6,12 +6,6 @@ import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm
6
6
  import { RequestLogModel } from "../request-log/request-log.model.js";
7
7
  import { BaseFrameClass, DB, api } from "sonamu";
8
8
  //#region src/application/monit/monit.frame.ts
9
- /**
10
- * Monit — 대시보드 Monit 탭용 프로세스 로그 관측 API.
11
- *
12
- * 읽기 전용. ring buffer 를 얇게 직접 읽으며(범용 쿼리 기계 없이),
13
- * request log 를 남기지 않는다. 접근 경계는 다른 대시보드 API 와 동일하다.
14
- */
15
9
  const RESPONSE_ENTRY_LIMIT = 1e3;
16
10
  var MonitFrameClass = class extends BaseFrameClass {
17
11
  constructor() {
@@ -73,12 +67,13 @@ __decorate([
73
67
  __decorateMetadata("design:returntype", Promise)
74
68
  ], MonitFrameClass.prototype, "monitStats", null);
75
69
  function currentVitals() {
70
+ const anthropic = QgridDispatcher.anthropicDispatcher;
76
71
  return {
77
72
  openaiInFlight: QgridDispatcher.openaiDispatcher?.inFlight ?? 0,
78
- openaiQuotaByToken: QgridDispatcher.openaiDispatcher?.quotaByToken ?? [],
79
- anthropicTokenCount: QgridDispatcher.anthropicDispatcher?.tokenCount ?? 0,
80
- anthropicTokenNames: QgridDispatcher.anthropicDispatcher?.tokenNames ?? [],
81
- anthropicInFlight: QgridDispatcher.anthropicDispatcher?.inFlight ?? 0
73
+ openaiQuotaByToken: QgridDispatcher.openaiDispatcher?.getQuotaSnapshot() ?? [],
74
+ anthropicTokenCount: anthropic?.tokenPool.size ?? 0,
75
+ anthropicTokenNames: anthropic ? [...anthropic.tokenPool.values()].map((token) => token.name).toSorted() : [],
76
+ anthropicInFlight: anthropic?.inFlight ?? 0
82
77
  };
83
78
  }
84
79
  function activeDbConnection() {
@@ -95,4 +90,4 @@ const MonitFrame = new MonitFrameClass();
95
90
  //#endregion
96
91
  export { MonitFrame };
97
92
 
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vbml0L21vbml0LmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9uaXQg4oCUIOuMgOyLnOuztOuTnCBNb25pdCDtg63smqkg7ZSE66Gc7IS47IqkIOuhnOq3uCDqtIDsuKEgQVBJLlxuICpcbiAqIOydveq4sCDsoITsmqkuIHJpbmcgYnVmZmVyIOulvCDslofqsowg7KeB7KCRIOydveycvOupsCjrspTsmqkg7L+866asIOq4sOqzhCDsl4bsnbQpLFxuICogcmVxdWVzdCBsb2cg66W8IOuCqOq4sOyngCDslYrripTri6QuIOygkeq3vCDqsr3qs4TripQg64uk66W4IOuMgOyLnOuztOuTnCBBUEkg7JmAIOuPmeydvO2VmOuLpC5cbiAqL1xuaW1wb3J0IHsgYXBpLCBCYXNlRnJhbWVDbGFzcywgREIgfSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IHJlc29sdmVPcGVuQUlUcmFuc3BvcnRLaW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLXRyYW5zcG9ydC1jb25maWdcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IG1vbml0TG9nQnVmZmVyIH0gZnJvbSBcIi4vbG9nLWJ1ZmZlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBNb25pdExvZ0NodW5rLFxuICB0eXBlIE1vbml0U2VydmVySW5mbyxcbiAgdHlwZSBNb25pdFN0YXRzLFxuICB0eXBlIE1vbml0Vml0YWxzLFxufSBmcm9tIFwiLi9tb25pdC50eXBlc1wiO1xuXG4vLyDsnZHri7Xri7kg7JeU7Yq466asIOyDge2VnCDigJQg7Y+066eBIO2BtOudvOydtOyWuO2KuOuKlCDri6TsnYwg7Y+07JeQ7IScIOydtOyWtOyEnCDrlLDrnbzsnqHripTri6QuXG5jb25zdCBSRVNQT05TRV9FTlRSWV9MSU1JVCA9IDFfMDAwO1xuXG5jbGFzcyBNb25pdEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiTW9uaXRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdExvZ3MoY3Vyc29yPzogbnVtYmVyKTogUHJvbWlzZTxNb25pdExvZ0NodW5rPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NTdGFydGVkQXQ6IG1vbml0TG9nQnVmZmVyLnByb2Nlc3NTdGFydGVkQXQsXG4gICAgICAuLi5tb25pdExvZ0J1ZmZlci5hZnRlcihjdXJzb3IsIFJFU1BPTlNFX0VOVFJZX0xJTUlUKSxcbiAgICAgIHZpdGFsczogY3VycmVudFZpdGFscygpLFxuICAgIH07XG4gIH1cblxuICAvLyDtlITroZzshLjsiqQg7KCV7KCBIOygleuztCDigJQg7Y+066eBIOu2iO2VhOyalCwg7Y6Y7J207KeA64u5IDHtmowg7KGw7ZqMLlxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdEluZm8oKTogUHJvbWlzZTxNb25pdFNlcnZlckluZm8+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSByZXNvbHZlT3BlbkFJVHJhbnNwb3J0S2luZCgpO1xuICAgIGNvbnN0IGhvc3QgPSBwcm9jZXNzLmVudi5IT1NUID8/IFwibG9jYWxob3N0XCI7XG4gICAgY29uc3QgcG9ydCA9IHByb2Nlc3MuZW52LlBPUlQgPz8gXCI0NDkwMFwiO1xuICAgIGNvbnN0IGNvbm4gPSBhY3RpdmVEYkNvbm5lY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmVyVXJsOiBgaHR0cDovLyR7aG9zdH06JHtwb3J0fWAsXG4gICAgICBkYkhvc3Q6IGNvbm4uaG9zdCA/PyBcImxvY2FsaG9zdFwiLFxuICAgICAgZGJOYW1lOiBjb25uLmRhdGFiYXNlID8/IFwicWdyaWRcIixcbiAgICAgIG9wZW5haTogeyB0cmFuc3BvcnQgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8g7LWc6re8IDHsi5zqsIQgcHJvdmlkZXIg67OEIOyalOyyrS/smKTrpZgv7LqQ7IucIO2GteqzhC4gdml0YWxzIOyZgCDri6zrpqwgcmVxdWVzdF9sb2dzIOulvCDtg4Drr4DroZxcbiAgLy8g67aE66as65CcIGVuZHBvaW50IOuhnCDrkZDqs6Ag7Ju57JeQ7IScIOuNlCDripDsiqjtlZwg7KO86riw66GcIO2PtOunge2VnOuLpC4g7J296riwIOyghOyaqeydtOupsCByZXF1ZXN0IGxvZyDrpbxcbiAgLy8g64Ko6riw7KeAIOyViuuKlCBtb25pdCDqsr3qs4TripQg64+Z7J287ZWY64ukLlxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdFN0YXRzKCk6IFByb21pc2U8TW9uaXRTdGF0cz4ge1xuICAgIGNvbnN0IHdpbmRvd01pbnV0ZXMgPSA2MDtcbiAgICBjb25zdCBzaW5jZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB3aW5kb3dNaW51dGVzICogNjBfMDAwKTtcbiAgICByZXR1cm4geyB3aW5kb3dNaW51dGVzLCBwcm92aWRlcnM6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5wcm92aWRlclN0YXRzU2luY2Uoc2luY2UpIH07XG4gIH1cbn1cblxuLy8gZGlzcGF0Y2hlciDrr7jstIjquLDtmZQo67aA7YyFIOynge2bhCkg7IucIDAg7Jy866GcIOydkeuLte2VnOuLpCDigJQg6rCA67K87Jq0IOyKpOuDheyDt+ydtOudvCDsmKTrpZjroZwg66eM65Ok7KeAIOyViuuKlOuLpC5cbmZ1bmN0aW9uIGN1cnJlbnRWaXRhbHMoKTogTW9uaXRWaXRhbHMge1xuICByZXR1cm4ge1xuICAgIG9wZW5haUluRmxpZ2h0OiBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uaW5GbGlnaHQgPz8gMCxcbiAgICBvcGVuYWlRdW90YUJ5VG9rZW46IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5xdW90YUJ5VG9rZW4gPz8gW10sXG4gICAgYW50aHJvcGljVG9rZW5Db3VudDogUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/LnRva2VuQ291bnQgPz8gMCxcbiAgICBhbnRocm9waWNUb2tlbk5hbWVzOiBRZ3JpZERpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8udG9rZW5OYW1lcyA/PyBbXSxcbiAgICBhbnRocm9waWNJbkZsaWdodDogUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/LmluRmxpZ2h0ID8/IDAsXG4gIH07XG59XG5cbi8vIOyLpOygnCDtmZzshLEga25leCDsl7DqsrDsl5DshJwg7J2964qU64ukIOKAlCBkZXYg7ISc67KE7J2YIO2Gte2VqSDthYzsiqTtirgg65+s64SI6rCAIHByb2Nlc3MuZW52LlNPTkFNVV9EQl9OQU1FIOydhFxuLy8g7YWM7Iqk7Yq4IERCIOydtOumhOycvOuhnCDrja7slrTsk7Drr4DroZwgZW52IOuKlCDsi6DrorDtlaAg7IiYIOyXhuuLpC4gREIg66+47LSI6riw7ZmUKOu2gO2MhSDsoIQpIOyLnOyXkOunjCBlbnYg7Y+067CxLlxuZnVuY3Rpb24gYWN0aXZlRGJDb25uZWN0aW9uKCk6IHsgaG9zdD86IHN0cmluZzsgZGF0YWJhc2U/OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IERCLmdldERCQ29uZmlnKFwid1wiKS5jb25uZWN0aW9uO1xuICAgIGlmICh0eXBlb2YgY29ubmVjdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb25uZWN0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmc7IGRhdGFiYXNlPzogc3RyaW5nIH07XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBEQiBjb25maWcg66+47LSI6riw7ZmUIOKAlCBlbnYg7Y+067Cx7Jy866GcIOynhO2WiVxuICB9XG4gIHJldHVybiB7IGhvc3Q6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9IT1NULCBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuU09OQU1VX0RCX05BTUUgfTtcbn1cblxuZXhwb3J0IGNvbnN0IE1vbml0RnJhbWUgPSBuZXcgTW9uaXRGcmFtZUNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLE1BQU0sdUJBQXVCO0FBRTdCLElBQU0sa0JBQU4sY0FBOEIsZUFBZTtDQUMzQyxjQUFjO0VBQ1osTUFBTSxPQUFPO0NBQ2Y7Q0FFQSxNQUNNLFVBQVUsUUFBeUM7RUFDdkQsT0FBTztHQUNMLGtCQUFrQixlQUFlO0dBQ2pDLEdBQUcsZUFBZSxNQUFNLFFBQVEsb0JBQW9CO0dBQ3BELFFBQVEsY0FBYztFQUN4QjtDQUNGO0NBR0EsTUFDTSxZQUFzQztFQUMxQyxNQUFNLFlBQVksMkJBQTJCO0VBQzdDLE1BQU0sT0FBTyxRQUFRLElBQUksUUFBUTtFQUNqQyxNQUFNLE9BQU8sUUFBUSxJQUFJLFFBQVE7RUFDakMsTUFBTSxPQUFPLG1CQUFtQjtFQUNoQyxPQUFPO0dBQ0wsV0FBVyxVQUFVLEtBQUssR0FBRztHQUM3QixRQUFRLEtBQUssUUFBUTtHQUNyQixRQUFRLEtBQUssWUFBWTtHQUN6QixRQUFRLEVBQUUsVUFBVTtFQUN0QjtDQUNGO0NBS0EsTUFDTSxhQUFrQztFQUN0QyxNQUFNLGdCQUFnQjtFQUN0QixNQUFNLHdCQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsR0FBTTtFQUMxRCxPQUFPO0dBQUU7R0FBZSxXQUFXLE1BQU0sZ0JBQWdCLG1CQUFtQixLQUFLO0VBQUU7Q0FDckY7QUFDRjs7Q0FqQ0csSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7Ozs7Q0FVL0QsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7Ozs7Q0FpQi9ELElBQUk7RUFBRSxZQUFZO0VBQU8sU0FBUyxDQUFDLFNBQVMsZ0JBQWdCO0NBQUUsQ0FBQzs7Ozs7QUFTbEUsU0FBUyxnQkFBNkI7Q0FDcEMsT0FBTztFQUNMLGdCQUFnQixnQkFBZ0Isa0JBQWtCLFlBQVk7RUFDOUQsb0JBQW9CLGdCQUFnQixrQkFBa0IsZ0JBQWdCLENBQUM7RUFDdkUscUJBQXFCLGdCQUFnQixxQkFBcUIsY0FBYztFQUN4RSxxQkFBcUIsZ0JBQWdCLHFCQUFxQixjQUFjLENBQUM7RUFDekUsbUJBQW1CLGdCQUFnQixxQkFBcUIsWUFBWTtDQUN0RTtBQUNGO0FBSUEsU0FBUyxxQkFBMkQ7Q0FDbEUsSUFBSTtFQUNGLE1BQU0sYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDdkMsSUFBSSxPQUFPLGVBQWUsWUFBWSxlQUFlLE1BQ25ELE9BQU87Q0FFWCxRQUFRLENBRVI7Q0FDQSxPQUFPO0VBQUUsTUFBTSxRQUFRLElBQUk7RUFBZ0IsVUFBVSxRQUFRLElBQUk7Q0FBZTtBQUNsRjtBQUVBLE1BQWEsYUFBYSxJQUFJLGdCQUFnQiJ9
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vbml0L21vbml0LmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOydveq4sCDsoITsmqkg66qo64uI7YSw66eBIEFQSS4g7KGw7ZqMIOyekOyytOuKlCByZXF1ZXN0IGxvZ+yXkCDrgqjquLDsp4Ag7JWK64qU64ukLlxuaW1wb3J0IHsgYXBpLCBCYXNlRnJhbWVDbGFzcywgREIgfSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IHJlc29sdmVPcGVuQUlUcmFuc3BvcnRLaW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLXRyYW5zcG9ydC1jb25maWdcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7IG1vbml0TG9nQnVmZmVyIH0gZnJvbSBcIi4vbG9nLWJ1ZmZlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBNb25pdExvZ0NodW5rLFxuICB0eXBlIE1vbml0U2VydmVySW5mbyxcbiAgdHlwZSBNb25pdFN0YXRzLFxuICB0eXBlIE1vbml0Vml0YWxzLFxufSBmcm9tIFwiLi9tb25pdC50eXBlc1wiO1xuXG4vLyDsnZHri7Xri7kg7JeU7Yq466asIOyDge2VnCDigJQg7Y+066eBIO2BtOudvOydtOyWuO2KuOuKlCDri6TsnYwg7Y+07JeQ7IScIOydtOyWtOyEnCDrlLDrnbzsnqHripTri6QuXG5jb25zdCBSRVNQT05TRV9FTlRSWV9MSU1JVCA9IDFfMDAwO1xuXG5jbGFzcyBNb25pdEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiTW9uaXRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdExvZ3MoY3Vyc29yPzogbnVtYmVyKTogUHJvbWlzZTxNb25pdExvZ0NodW5rPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NTdGFydGVkQXQ6IG1vbml0TG9nQnVmZmVyLnByb2Nlc3NTdGFydGVkQXQsXG4gICAgICAuLi5tb25pdExvZ0J1ZmZlci5hZnRlcihjdXJzb3IsIFJFU1BPTlNFX0VOVFJZX0xJTUlUKSxcbiAgICAgIHZpdGFsczogY3VycmVudFZpdGFscygpLFxuICAgIH07XG4gIH1cblxuICAvLyDtlITroZzshLjsiqQg7KCV7KCBIOygleuztCDigJQg7Y+066eBIOu2iO2VhOyalCwg7Y6Y7J207KeA64u5IDHtmowg7KGw7ZqMLlxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdEluZm8oKTogUHJvbWlzZTxNb25pdFNlcnZlckluZm8+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSByZXNvbHZlT3BlbkFJVHJhbnNwb3J0S2luZCgpO1xuICAgIGNvbnN0IGhvc3QgPSBwcm9jZXNzLmVudi5IT1NUID8/IFwibG9jYWxob3N0XCI7XG4gICAgY29uc3QgcG9ydCA9IHByb2Nlc3MuZW52LlBPUlQgPz8gXCI0NDkwMFwiO1xuICAgIGNvbnN0IGNvbm4gPSBhY3RpdmVEYkNvbm5lY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmVyVXJsOiBgaHR0cDovLyR7aG9zdH06JHtwb3J0fWAsXG4gICAgICBkYkhvc3Q6IGNvbm4uaG9zdCA/PyBcImxvY2FsaG9zdFwiLFxuICAgICAgZGJOYW1lOiBjb25uLmRhdGFiYXNlID8/IFwicWdyaWRcIixcbiAgICAgIG9wZW5haTogeyB0cmFuc3BvcnQgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRELrpbwg7KGw7ZqM7ZWY66+A66GcIOuplOuqqOumrCDquLDrsJggdml0YWxz67O064ukIOuKkOumsCDso7zquLDroZwg7Y+066eB7ZWc64ukLlxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBtb25pdFN0YXRzKCk6IFByb21pc2U8TW9uaXRTdGF0cz4ge1xuICAgIGNvbnN0IHdpbmRvd01pbnV0ZXMgPSA2MDtcbiAgICBjb25zdCBzaW5jZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB3aW5kb3dNaW51dGVzICogNjBfMDAwKTtcbiAgICByZXR1cm4geyB3aW5kb3dNaW51dGVzLCBwcm92aWRlcnM6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5wcm92aWRlclN0YXRzU2luY2Uoc2luY2UpIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY3VycmVudFZpdGFscygpOiBNb25pdFZpdGFscyB7XG4gIGNvbnN0IGFudGhyb3BpYyA9IFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyO1xuICByZXR1cm4ge1xuICAgIG9wZW5haUluRmxpZ2h0OiBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uaW5GbGlnaHQgPz8gMCxcbiAgICBvcGVuYWlRdW90YUJ5VG9rZW46IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5nZXRRdW90YVNuYXBzaG90KCkgPz8gW10sXG4gICAgYW50aHJvcGljVG9rZW5Db3VudDogYW50aHJvcGljPy50b2tlblBvb2wuc2l6ZSA/PyAwLFxuICAgIGFudGhyb3BpY1Rva2VuTmFtZXM6IGFudGhyb3BpY1xuICAgICAgPyBbLi4uYW50aHJvcGljLnRva2VuUG9vbC52YWx1ZXMoKV0ubWFwKCh0b2tlbikgPT4gdG9rZW4ubmFtZSkudG9Tb3J0ZWQoKVxuICAgICAgOiBbXSxcbiAgICBhbnRocm9waWNJbkZsaWdodDogYW50aHJvcGljPy5pbkZsaWdodCA/PyAwLFxuICB9O1xufVxuXG4vLyDsi6TsoJwg7Zmc7ISxIGtuZXgg7Jew6rKw7JeQ7IScIOydveuKlOuLpCDigJQgZGV2IOyEnOuyhOydmCDthrXtlakg7YWM7Iqk7Yq4IOufrOuEiOqwgCBwcm9jZXNzLmVudi5TT05BTVVfREJfTkFNRSDsnYRcbi8vIO2FjOyKpO2KuCBEQiDsnbTrpoTsnLzroZwg642u7Ja07JOw66+A66GcIGVudiDripQg7Iug66Kw7ZWgIOyImCDsl4bri6QuIERCIOuvuOy0iOq4sO2ZlCjrtoDtjIUg7KCEKSDsi5zsl5Drp4wgZW52IO2PtOuwsS5cbmZ1bmN0aW9uIGFjdGl2ZURiQ29ubmVjdGlvbigpOiB7IGhvc3Q/OiBzdHJpbmc7IGRhdGFiYXNlPzogc3RyaW5nIH0ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBEQi5nZXREQkNvbmZpZyhcIndcIikuY29ubmVjdGlvbjtcbiAgICBpZiAodHlwZW9mIGNvbm5lY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29ubmVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gYXMgeyBob3N0Pzogc3RyaW5nOyBkYXRhYmFzZT86IHN0cmluZyB9O1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gREIgY29uZmlnIOuvuOy0iOq4sO2ZlCDigJQgZW52IO2PtOuwseycvOuhnCDsp4TtlolcbiAgfVxuICByZXR1cm4geyBob3N0OiBwcm9jZXNzLmVudi5TT05BTVVfREJfSE9TVCwgZGF0YWJhc2U6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9OQU1FIH07XG59XG5cbmV4cG9ydCBjb25zdCBNb25pdEZyYW1lID0gbmV3IE1vbml0RnJhbWVDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWVBLE1BQU0sdUJBQXVCO0FBRTdCLElBQU0sa0JBQU4sY0FBOEIsZUFBZTtDQUMzQyxjQUFjO0VBQ1osTUFBTSxPQUFPO0NBQ2Y7Q0FFQSxNQUNNLFVBQVUsUUFBeUM7RUFDdkQsT0FBTztHQUNMLGtCQUFrQixlQUFlO0dBQ2pDLEdBQUcsZUFBZSxNQUFNLFFBQVEsb0JBQW9CO0dBQ3BELFFBQVEsY0FBYztFQUN4QjtDQUNGO0NBR0EsTUFDTSxZQUFzQztFQUMxQyxNQUFNLFlBQVksMkJBQTJCO0VBQzdDLE1BQU0sT0FBTyxRQUFRLElBQUksUUFBUTtFQUNqQyxNQUFNLE9BQU8sUUFBUSxJQUFJLFFBQVE7RUFDakMsTUFBTSxPQUFPLG1CQUFtQjtFQUNoQyxPQUFPO0dBQ0wsV0FBVyxVQUFVLEtBQUssR0FBRztHQUM3QixRQUFRLEtBQUssUUFBUTtHQUNyQixRQUFRLEtBQUssWUFBWTtHQUN6QixRQUFRLEVBQUUsVUFBVTtFQUN0QjtDQUNGO0NBR0EsTUFDTSxhQUFrQztFQUN0QyxNQUFNLGdCQUFnQjtFQUN0QixNQUFNLHdCQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsR0FBTTtFQUMxRCxPQUFPO0dBQUU7R0FBZSxXQUFXLE1BQU0sZ0JBQWdCLG1CQUFtQixLQUFLO0VBQUU7Q0FDckY7QUFDRjs7Q0EvQkcsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7Ozs7Q0FVL0QsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7Ozs7Q0FlL0QsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7OztBQVFsRSxTQUFTLGdCQUE2QjtDQUNwQyxNQUFNLFlBQVksZ0JBQWdCO0NBQ2xDLE9BQU87RUFDTCxnQkFBZ0IsZ0JBQWdCLGtCQUFrQixZQUFZO0VBQzlELG9CQUFvQixnQkFBZ0Isa0JBQWtCLGlCQUFpQixLQUFLLENBQUM7RUFDN0UscUJBQXFCLFdBQVcsVUFBVSxRQUFRO0VBQ2xELHFCQUFxQixZQUNqQixDQUFDLEdBQUcsVUFBVSxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUyxJQUN0RSxDQUFDO0VBQ0wsbUJBQW1CLFdBQVcsWUFBWTtDQUM1QztBQUNGO0FBSUEsU0FBUyxxQkFBMkQ7Q0FDbEUsSUFBSTtFQUNGLE1BQU0sYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDdkMsSUFBSSxPQUFPLGVBQWUsWUFBWSxlQUFlLE1BQ25ELE9BQU87Q0FFWCxRQUFRLENBRVI7Q0FDQSxPQUFPO0VBQUUsTUFBTSxRQUFRLElBQUk7RUFBZ0IsVUFBVSxRQUFRLElBQUk7Q0FBZTtBQUNsRjtBQUVBLE1BQWEsYUFBYSxJQUFJLGdCQUFnQiJ9
@@ -88,7 +88,7 @@ var RefreshFailedError = class extends Error {
88
88
  this.body = body;
89
89
  }
90
90
  /** 재로그인 외 복구 불가한 인증 실패인지. 일시 오류(5xx·네트워크)는 제외된다. */
91
- get isAuthDead() {
91
+ isAuthDead() {
92
92
  return this.status === 400 || this.status === 401;
93
93
  }
94
94
  };
@@ -160,4 +160,4 @@ async function fetchUsageWithMeta(accessToken) {
160
160
  //#endregion
161
161
  export { CONSOLE_CALLBACK_URL, RefreshFailedError, buildAuthUrl, exchangeCodeForTokens, fetchUsage, fetchUsageWithMeta, generatePKCE, invalidateAnthropicQuotaUsage, refreshAccessToken };
162
162
 
163
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL29hdXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0F1dGgg7Jyg7Yu4IOKAlCBDbGF1ZGUgQ29kZSDshozsiqTsnZggT0F1dGgg7ZSM66Gc7JqwIOq3uOuMgOuhnCDsnqztmIRcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuZXhwb3J0IHR5cGUgQW50aHJvcGljVXNhZ2VSYXcgPSB7XG4gIGVycm9yPzogc3RyaW5nO1xuICBmaXZlX2hvdXI/OiB7IHV0aWxpemF0aW9uOiBudW1iZXIgfCBudWxsOyByZXNldHNfYXQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gIHNldmVuX2RheT86IHsgdXRpbGl6YXRpb246IG51bWJlciB8IG51bGw7IHJlc2V0c19hdDogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbiAgc2V2ZW5fZGF5X292ZXJhZ2VfaW5jbHVkZWQ/OiB7IHV0aWxpemF0aW9uOiBudW1iZXIgfCBudWxsOyByZXNldHNfYXQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuZXhwb3J0IHR5cGUgQW50aHJvcGljVXNhZ2VXaXRoTWV0YSA9IHtcbiAgZGF0YTogQW50aHJvcGljVXNhZ2VSYXc7XG4gIGNhY2hlZEF0OiBudW1iZXI7XG59O1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJvYXV0aFwiXSk7XG5cbmNvbnN0IENMSUVOVF9JRCA9IFwiOWQxYzI1MGEtZTYxYi00NGQ5LTg4ZWQtNTk0NGQxOTYyZjVlXCI7XG5jb25zdCBBVVRIT1JJWkVfVVJMID0gXCJodHRwczovL2NsYXVkZS5jb20vY2FpL29hdXRoL2F1dGhvcml6ZVwiO1xuY29uc3QgVE9LRU5fVVJMID0gXCJodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vdjEvb2F1dGgvdG9rZW5cIjtcbi8vIGNsaWVudCDtl4jsmqkg66qp66Gd7JeQIOyeiOuKlCDsvZjshpQg7L2c67CxLiDsnbjspp0g7ZuEIOy9mOyGlCDtjpjsnbTsp4DqsIAgYGNvZGUjc3RhdGVg66W8IO2RnOyLnO2VmOqzoFxuLy8g7IKs7Jqp7J6Q6rCAIOu2meyXrOuEo+uKlCDsvZTrk5wg7ZSM66Gc7JqwKENsYXVkZSBDb2RlIENMSeyZgCDrj5nsnbwp7JeQIOyCrOyaqe2VnOuLpC5cbmV4cG9ydCBjb25zdCBDT05TT0xFX0NBTExCQUNLX1VSTCA9IFwiaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vb2F1dGgvY29kZS9jYWxsYmFja1wiO1xuXG4vLyBsb2dpbiDsi5wg7IKs7JqpIChhdXRob3JpemUgVVJMKVxuY29uc3QgQUxMX1NDT1BFUyA9IFtcbiAgXCJvcmc6Y3JlYXRlX2FwaV9rZXlcIixcbiAgXCJ1c2VyOnByb2ZpbGVcIixcbiAgXCJ1c2VyOmluZmVyZW5jZVwiLFxuICBcInVzZXI6c2Vzc2lvbnM6Y2xhdWRlX2NvZGVcIixcbiAgXCJ1c2VyOm1jcF9zZXJ2ZXJzXCIsXG4gIFwidXNlcjpmaWxlX3VwbG9hZFwiLFxuXTtcblxuLy8gcmVmcmVzaCDsi5wg7IKs7JqpIChvcmc6Y3JlYXRlX2FwaV9rZXkg7KCc7Jm4KVxuY29uc3QgUkVGUkVTSF9TQ09QRVMgPSBbXG4gIFwidXNlcjpwcm9maWxlXCIsXG4gIFwidXNlcjppbmZlcmVuY2VcIixcbiAgXCJ1c2VyOnNlc3Npb25zOmNsYXVkZV9jb2RlXCIsXG4gIFwidXNlcjptY3Bfc2VydmVyc1wiLFxuICBcInVzZXI6ZmlsZV91cGxvYWRcIixcbl07XG5cbmZ1bmN0aW9uIGJhc2U2NFVSTEVuY29kZShidWZmZXI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogeyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgY29kZUNoYWxsZW5nZTogc3RyaW5nOyBzdGF0ZTogc3RyaW5nIH0ge1xuICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb2RlVmVyaWZpZXIpLmRpZ2VzdCgpKTtcbiAgY29uc3Qgc3RhdGUgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgcmV0dXJuIHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2U6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVkaXJlY3RVcmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoQVVUSE9SSVpFX1VSTCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29kZVwiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY2xpZW50X2lkXCIsIENMSUVOVF9JRCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVzcG9uc2VfdHlwZVwiLCBcImNvZGVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0VXJpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBBTExfU0NPUEVTLmpvaW4oXCIgXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZVwiLCBjb2RlQ2hhbGxlbmdlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInN0YXRlXCIsIHN0YXRlKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgdHlwZSBPQXV0aFRva2VucyA9IHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBzY29wZTogc3RyaW5nO1xuICBhY2NvdW50VXVpZD86IHN0cmluZztcbiAgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgY29kZTogc3RyaW5nLFxuICBjb2RlVmVyaWZpZXI6IHN0cmluZyxcbiAgc3RhdGU6IHN0cmluZyxcbiAgcmVkaXJlY3RVcmk6IHN0cmluZyxcbik6IFByb21pc2U8T0F1dGhUb2tlbnM+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goVE9LRU5fVVJMLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZ3JhbnRfdHlwZTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgICAgIGNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG4gICAgICBzdGF0ZSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHtcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgYWNjb3VudD86IHsgdXVpZDogc3RyaW5nOyBlbWFpbF9hZGRyZXNzOiBzdHJpbmcgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICAgIGFjY291bnRVdWlkOiBkYXRhLmFjY291bnQ/LnV1aWQsXG4gICAgZW1haWxBZGRyZXNzOiBkYXRhLmFjY291bnQ/LmVtYWlsX2FkZHJlc3MsXG4gIH07XG59XG5cbi8qKlxuICogcmVmcmVzaCDsi6TtjKjrpbwgc3RhdHVzIOyZgCDtlajqu5gg7KCE64us7ZWc64ukLiDtmLjstpzrtoDqsIAg66y47J6Q7Je0IOuplOyLnOyngOulvCDtjIzsi7HtlZjsp4Ag7JWK6rOgXG4gKiDsmIHqtawg7Iuk7YyoKDQwMC80MDEp66W8IO2MkOuzhO2VoCDsiJgg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsnbTri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWZyZXNoRmFpbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSBcIlJlZnJlc2hGYWlsZWRFcnJvclwiO1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBzdGF0dXM6IG51bWJlcixcbiAgICByZWFkb25seSBib2R5OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKGBUb2tlbiByZWZyZXNoIGZhaWxlZCAoJHtzdGF0dXN9KTogJHtib2R5fWApO1xuICB9XG5cbiAgLyoqIOyerOuhnOq3uOyduCDsmbgg67O16rWsIOu2iOqwgO2VnCDsnbjspp0g7Iuk7Yyo7J247KeALiDsnbzsi5wg7Jik66WYKDV4eMK364Sk7Yq47JuM7YGsKeuKlCDsoJzsmbjrkJzri6QuICovXG4gIGdldCBpc0F1dGhEZWFkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gNDAwIHx8IHRoaXMuc3RhdHVzID09PSA0MDE7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyk6IFByb21pc2U8T0F1dGhUb2tlbnM+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goVE9LRU5fVVJMLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZ3JhbnRfdHlwZTogXCJyZWZyZXNoX3Rva2VuXCIsXG4gICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICBjbGllbnRfaWQ6IENMSUVOVF9JRCxcbiAgICAgIHNjb3BlOiBSRUZSRVNIX1NDT1BFUy5qb2luKFwiIFwiKSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IFJlZnJlc2hGYWlsZWRFcnJvcihyZXMuc3RhdHVzLCB0ZXh0KTtcbiAgfVxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHtcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhY2Nlc3NUb2tlbjogZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgcmVmcmVzaFRva2VuOiBkYXRhLnJlZnJlc2hfdG9rZW4gPz8gcmVmcmVzaFRva2VuLFxuICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGRhdGEuZXhwaXJlc19pbiAqIDEwMDAsXG4gICAgc2NvcGU6IGRhdGEuc2NvcGUsXG4gIH07XG59XG5cbmNvbnN0IHVzYWdlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIEFudGhyb3BpY1VzYWdlV2l0aE1ldGE+ID0ge307XG5jb25zdCBVU0FHRV9BUElfQ0FDSEVfVFRMID0gNjBfMDAwOyAvLyAx67aEXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlQW50aHJvcGljUXVvdGFVc2FnZShhY2Nlc3NUb2tlbjogc3RyaW5nKTogdm9pZCB7XG4gIGRlbGV0ZSB1c2FnZUNhY2hlW2FjY2Vzc1Rva2VuLnNsaWNlKC0xMCldO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hVc2FnZShhY2Nlc3NUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxBbnRocm9waWNVc2FnZVJhdz4ge1xuICByZXR1cm4gKGF3YWl0IGZldGNoVXNhZ2VXaXRoTWV0YShhY2Nlc3NUb2tlbikpLmRhdGE7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFVzYWdlV2l0aE1ldGEoYWNjZXNzVG9rZW46IHN0cmluZyk6IFByb21pc2U8QW50aHJvcGljVXNhZ2VXaXRoTWV0YT4ge1xuICBjb25zdCBjYWNoZUtleSA9IGFjY2Vzc1Rva2VuLnNsaWNlKC0xMCk7XG4gIGNvbnN0IGNhY2hlZCA9IHVzYWdlQ2FjaGVbY2FjaGVLZXldO1xuICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuY2FjaGVkQXQgPCBVU0FHRV9BUElfQ0FDSEVfVFRMKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS9hcGkvb2F1dGgvdXNhZ2VcIiwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFudGhyb3BpYy1iZXRhXCI6IFwib2F1dGgtMjAyNS0wNC0yMFwiLFxuICAgIH0sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcblxuICAgIC8vIO2MjOyLsSDsi5zrj4TtlbTshJwg7JeQ65+sIOuplOyLnOyngCDstpTstpxcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVycm9yICR7cmVzLnN0YXR1c31gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgZXJyb3JNZXNzYWdlID0gcGFyc2VkLmVycm9yPy5tZXNzYWdlID8/IGVycm9yTWVzc2FnZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIO2MjOyLsSDslYgg65CY66m0IOq4sOuzuCDrqZTsi5zsp4BcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgJHtyZXMuc3RhdHVzfTogJHtlcnJvck1lc3NhZ2V9YCk7XG5cbiAgICAvLyDsnbTsoIQg7ISx6rO1IOy6kOyLnCDsnojsnLzrqbQg7Jyg7KeAXG4gICAgaWYgKGNhY2hlZD8uZGF0YSAmJiAhY2FjaGVkLmRhdGEuZXJyb3IpIHJldHVybiBjYWNoZWQ7XG5cbiAgICAvLyDsi6TtjKjrj4Qg7LqQ7IucICjrsJjrs7Ug7Zi47LacIOuwqeyngClcbiAgICBjb25zdCBlcnJvclJlc3VsdCA9IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9O1xuICAgIGNvbnN0IGVudHJ5ID0geyBkYXRhOiBlcnJvclJlc3VsdCwgY2FjaGVkQXQ6IERhdGUubm93KCkgfTtcbiAgICB1c2FnZUNhY2hlW2NhY2hlS2V5XSA9IGVudHJ5O1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgQW50aHJvcGljVXNhZ2VSYXc7XG4gIC8vIGNhY2hlIGludmFsaWRhdGVcbiAgY29uc3QgZW50cnkgPSB7IGRhdGEsIGNhY2hlZEF0OiBEYXRlLm5vdygpIH07XG4gIHVzYWdlQ2FjaGVbY2FjaGVLZXldID0gZW50cnk7XG4gIHJldHVybiBlbnRyeTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBa0JBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxPQUFPLENBQUM7QUFFM0MsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sWUFBWTtBQUdsQixNQUFhLHVCQUF1QjtBQUdwQyxNQUFNLGFBQWE7Q0FDakI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0Y7QUFHQSxNQUFNLGlCQUFpQjtDQUNyQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0Y7QUFFQSxTQUFTLGdCQUFnQixRQUF3QjtDQUMvQyxPQUFPLE9BQU8sU0FBUyxRQUFRLENBQUMsQ0FBQyxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsTUFBTSxFQUFFO0FBQzNGO0FBRUEsU0FBZ0IsZUFBK0U7Q0FDN0YsTUFBTSxlQUFlLGdCQUFnQixZQUFZLEVBQUUsQ0FBQztDQUdwRCxPQUFPO0VBQUU7RUFBYyxlQUZELGdCQUFnQixXQUFXLFFBQVEsQ0FBQyxDQUFDLE9BQU8sWUFBWSxDQUFDLENBQUMsT0FBTyxDQUVoRTtFQUFlLE9BRHhCLGdCQUFnQixZQUFZLEVBQUUsQ0FDTjtDQUFNO0FBQzlDO0FBRUEsU0FBZ0IsYUFBYSxlQUF1QixPQUFlLGFBQTZCO0NBQzlGLE1BQU0sTUFBTSxJQUFJLElBQUksYUFBYTtDQUNqQyxJQUFJLGFBQWEsT0FBTyxRQUFRLE1B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
163
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL29hdXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0F1dGgg7Jyg7Yu4IOKAlCBDbGF1ZGUgQ29kZSDshozsiqTsnZggT0F1dGgg7ZSM66Gc7JqwIOq3uOuMgOuhnCDsnqztmIRcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuZXhwb3J0IHR5cGUgQW50aHJvcGljVXNhZ2VSYXcgPSB7XG4gIGVycm9yPzogc3RyaW5nO1xuICBmaXZlX2hvdXI/OiB7IHV0aWxpemF0aW9uOiBudW1iZXIgfCBudWxsOyByZXNldHNfYXQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG4gIHNldmVuX2RheT86IHsgdXRpbGl6YXRpb246IG51bWJlciB8IG51bGw7IHJlc2V0c19hdDogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbiAgc2V2ZW5fZGF5X292ZXJhZ2VfaW5jbHVkZWQ/OiB7IHV0aWxpemF0aW9uOiBudW1iZXIgfCBudWxsOyByZXNldHNfYXQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuZXhwb3J0IHR5cGUgQW50aHJvcGljVXNhZ2VXaXRoTWV0YSA9IHtcbiAgZGF0YTogQW50aHJvcGljVXNhZ2VSYXc7XG4gIGNhY2hlZEF0OiBudW1iZXI7XG59O1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJvYXV0aFwiXSk7XG5cbmNvbnN0IENMSUVOVF9JRCA9IFwiOWQxYzI1MGEtZTYxYi00NGQ5LTg4ZWQtNTk0NGQxOTYyZjVlXCI7XG5jb25zdCBBVVRIT1JJWkVfVVJMID0gXCJodHRwczovL2NsYXVkZS5jb20vY2FpL29hdXRoL2F1dGhvcml6ZVwiO1xuY29uc3QgVE9LRU5fVVJMID0gXCJodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vdjEvb2F1dGgvdG9rZW5cIjtcbi8vIGNsaWVudCDtl4jsmqkg66qp66Gd7JeQIOyeiOuKlCDsvZjshpQg7L2c67CxLiDsnbjspp0g7ZuEIOy9mOyGlCDtjpjsnbTsp4DqsIAgYGNvZGUjc3RhdGVg66W8IO2RnOyLnO2VmOqzoFxuLy8g7IKs7Jqp7J6Q6rCAIOu2meyXrOuEo+uKlCDsvZTrk5wg7ZSM66Gc7JqwKENsYXVkZSBDb2RlIENMSeyZgCDrj5nsnbwp7JeQIOyCrOyaqe2VnOuLpC5cbmV4cG9ydCBjb25zdCBDT05TT0xFX0NBTExCQUNLX1VSTCA9IFwiaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vb2F1dGgvY29kZS9jYWxsYmFja1wiO1xuXG4vLyBsb2dpbiDsi5wg7IKs7JqpIChhdXRob3JpemUgVVJMKVxuY29uc3QgQUxMX1NDT1BFUyA9IFtcbiAgXCJvcmc6Y3JlYXRlX2FwaV9rZXlcIixcbiAgXCJ1c2VyOnByb2ZpbGVcIixcbiAgXCJ1c2VyOmluZmVyZW5jZVwiLFxuICBcInVzZXI6c2Vzc2lvbnM6Y2xhdWRlX2NvZGVcIixcbiAgXCJ1c2VyOm1jcF9zZXJ2ZXJzXCIsXG4gIFwidXNlcjpmaWxlX3VwbG9hZFwiLFxuXTtcblxuLy8gcmVmcmVzaCDsi5wg7IKs7JqpIChvcmc6Y3JlYXRlX2FwaV9rZXkg7KCc7Jm4KVxuY29uc3QgUkVGUkVTSF9TQ09QRVMgPSBbXG4gIFwidXNlcjpwcm9maWxlXCIsXG4gIFwidXNlcjppbmZlcmVuY2VcIixcbiAgXCJ1c2VyOnNlc3Npb25zOmNsYXVkZV9jb2RlXCIsXG4gIFwidXNlcjptY3Bfc2VydmVyc1wiLFxuICBcInVzZXI6ZmlsZV91cGxvYWRcIixcbl07XG5cbmZ1bmN0aW9uIGJhc2U2NFVSTEVuY29kZShidWZmZXI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogeyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgY29kZUNoYWxsZW5nZTogc3RyaW5nOyBzdGF0ZTogc3RyaW5nIH0ge1xuICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb2RlVmVyaWZpZXIpLmRpZ2VzdCgpKTtcbiAgY29uc3Qgc3RhdGUgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgcmV0dXJuIHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2U6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVkaXJlY3RVcmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoQVVUSE9SSVpFX1VSTCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29kZVwiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY2xpZW50X2lkXCIsIENMSUVOVF9JRCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVzcG9uc2VfdHlwZVwiLCBcImNvZGVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0VXJpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBBTExfU0NPUEVTLmpvaW4oXCIgXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZVwiLCBjb2RlQ2hhbGxlbmdlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInN0YXRlXCIsIHN0YXRlKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgdHlwZSBPQXV0aFRva2VucyA9IHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBzY29wZTogc3RyaW5nO1xuICBhY2NvdW50VXVpZD86IHN0cmluZztcbiAgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgY29kZTogc3RyaW5nLFxuICBjb2RlVmVyaWZpZXI6IHN0cmluZyxcbiAgc3RhdGU6IHN0cmluZyxcbiAgcmVkaXJlY3RVcmk6IHN0cmluZyxcbik6IFByb21pc2U8T0F1dGhUb2tlbnM+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goVE9LRU5fVVJMLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZ3JhbnRfdHlwZTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgICAgIGNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG4gICAgICBzdGF0ZSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHtcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgYWNjb3VudD86IHsgdXVpZDogc3RyaW5nOyBlbWFpbF9hZGRyZXNzOiBzdHJpbmcgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICAgIGFjY291bnRVdWlkOiBkYXRhLmFjY291bnQ/LnV1aWQsXG4gICAgZW1haWxBZGRyZXNzOiBkYXRhLmFjY291bnQ/LmVtYWlsX2FkZHJlc3MsXG4gIH07XG59XG5cbi8qKlxuICogcmVmcmVzaCDsi6TtjKjrpbwgc3RhdHVzIOyZgCDtlajqu5gg7KCE64us7ZWc64ukLiDtmLjstpzrtoDqsIAg66y47J6Q7Je0IOuplOyLnOyngOulvCDtjIzsi7HtlZjsp4Ag7JWK6rOgXG4gKiDsmIHqtawg7Iuk7YyoKDQwMC80MDEp66W8IO2MkOuzhO2VoCDsiJgg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsnbTri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWZyZXNoRmFpbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSBcIlJlZnJlc2hGYWlsZWRFcnJvclwiO1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBzdGF0dXM6IG51bWJlcixcbiAgICByZWFkb25seSBib2R5OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKGBUb2tlbiByZWZyZXNoIGZhaWxlZCAoJHtzdGF0dXN9KTogJHtib2R5fWApO1xuICB9XG5cbiAgLyoqIOyerOuhnOq3uOyduCDsmbgg67O16rWsIOu2iOqwgO2VnCDsnbjspp0g7Iuk7Yyo7J247KeALiDsnbzsi5wg7Jik66WYKDV4eMK364Sk7Yq47JuM7YGsKeuKlCDsoJzsmbjrkJzri6QuICovXG4gIGlzQXV0aERlYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSA0MDAgfHwgdGhpcy5zdGF0dXMgPT09IDQwMTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEFjY2Vzc1Rva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxPQXV0aFRva2Vucz4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChUT0tFTl9VUkwsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBncmFudF90eXBlOiBcInJlZnJlc2hfdG9rZW5cIixcbiAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgIGNsaWVudF9pZDogQ0xJRU5UX0lELFxuICAgICAgc2NvcGU6IFJFRlJFU0hfU0NPUEVTLmpvaW4oXCIgXCIpLFxuICAgIH0pLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICB0aHJvdyBuZXcgUmVmcmVzaEZhaWxlZEVycm9yKHJlcy5zdGF0dXMsIHRleHQpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMge1xuICAgIGFjY2Vzc190b2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZztcbiAgICBleHBpcmVzX2luOiBudW1iZXI7XG4gICAgc2NvcGU6IHN0cmluZztcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbiA/PyByZWZyZXNoVG9rZW4sXG4gICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgZGF0YS5leHBpcmVzX2luICogMTAwMCxcbiAgICBzY29wZTogZGF0YS5zY29wZSxcbiAgfTtcbn1cblxuY29uc3QgdXNhZ2VDYWNoZTogUmVjb3JkPHN0cmluZywgQW50aHJvcGljVXNhZ2VXaXRoTWV0YT4gPSB7fTtcbmNvbnN0IFVTQUdFX0FQSV9DQUNIRV9UVEwgPSA2MF8wMDA7IC8vIDHrtoRcblxuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVBbnRocm9waWNRdW90YVVzYWdlKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgZGVsZXRlIHVzYWdlQ2FjaGVbYWNjZXNzVG9rZW4uc2xpY2UoLTEwKV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBQcm9taXNlPEFudGhyb3BpY1VzYWdlUmF3PiB7XG4gIHJldHVybiAoYXdhaXQgZmV0Y2hVc2FnZVdpdGhNZXRhKGFjY2Vzc1Rva2VuKSkuZGF0YTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVXNhZ2VXaXRoTWV0YShhY2Nlc3NUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxBbnRocm9waWNVc2FnZVdpdGhNZXRhPiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYWNjZXNzVG9rZW4uc2xpY2UoLTEwKTtcbiAgY29uc3QgY2FjaGVkID0gdXNhZ2VDYWNoZVtjYWNoZUtleV07XG4gIGlmIChjYWNoZWQgJiYgRGF0ZS5ub3coKSAtIGNhY2hlZC5jYWNoZWRBdCA8IFVTQUdFX0FQSV9DQUNIRV9UVEwpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXCJodHRwczovL2FwaS5hbnRocm9waWMuY29tL2FwaS9vYXV0aC91c2FnZVwiLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIFwiYW50aHJvcGljLWJldGFcIjogXCJvYXV0aC0yMDI1LTA0LTIwXCIsXG4gICAgfSxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoNTAwMCksXG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuXG4gICAgLy8g7YyM7IuxIOyLnOuPhO2VtOyEnCDsl5Drn6wg66mU7Iuc7KeAIOy2lOy2nFxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgRXJyb3IgJHtyZXMuc3RhdHVzfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBwYXJzZWQuZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3JNZXNzYWdlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8g7YyM7IuxIOyViCDrkJjrqbQg6riw67O4IOuplOyLnOyngFxuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGAke3Jlcy5zdGF0dXN9OiAke2Vycm9yTWVzc2FnZX1gKTtcblxuICAgIC8vIOydtOyghCDshLHqs7Ug7LqQ7IucIOyeiOycvOuptCDsnKDsp4BcbiAgICBpZiAoY2FjaGVkPy5kYXRhICYmICFjYWNoZWQuZGF0YS5lcnJvcikgcmV0dXJuIGNhY2hlZDtcblxuICAgIC8vIOyLpO2MqOuPhCDsupDsi5wgKOuwmOuztSDtmLjstpwg67Cp7KeAKVxuICAgIGNvbnN0IGVycm9yUmVzdWx0ID0geyBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgZW50cnkgPSB7IGRhdGE6IGVycm9yUmVzdWx0LCBjYWNoZWRBdDogRGF0ZS5ub3coKSB9O1xuICAgIHVzYWdlQ2FjaGVbY2FjaGVLZXldID0gZW50cnk7XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBBbnRocm9waWNVc2FnZVJhdztcbiAgLy8gY2FjaGUgaW52YWxpZGF0ZVxuICBjb25zdCBlbnRyeSA9IHsgZGF0YSwgY2FjaGVkQXQ6IERhdGUubm93KCkgfTtcbiAgdXNhZ2VDYWNoZVtjYWNoZUtleV0gPSBlbnRyeTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFrQkEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLE9BQU8sQ0FBQztBQUUzQyxNQUFNLFlBQVk7QUFDbEIsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxZQUFZO0FBR2xCLE1BQWEsdUJBQXVCO0FBR3BDLE1BQU0sYUFBYTtDQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDRjtBQUdBLE1BQU0saUJBQWlCO0NBQ3JCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDRjtBQUVBLFNBQVMsZ0JBQWdCLFFBQXdCO0NBQy9DLE9BQU8sT0FBTyxTQUFTLFFBQVEsQ0FBQyxDQUFDLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxNQUFNLEVBQUU7QUFDM0Y7QUFFQSxTQUFnQixlQUErRTtDQUM3RixNQUFNLGVBQWUsZ0JBQWdCLFlBQVksRUFBRSxDQUFDO0NBR3BELE9BQU87RUFBRTtFQUFjLGVBRkQsZ0JBQWdCLFdBQVcsUUFBUSxDQUFDLENBQUMsT0FBTyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBRWhFO0VBQWUsT0FEeEIsZ0JBQWdCLFlBQVksRUFBRSxDQUNOO0NBQU07QUFDOUM7QUFFQSxTQUFnQixhQUFhLGVBQXVCLE9BQWUsYUFBNkI7Q0FDOUYsTUFBTSxNQUFNLElBQUksSUFBSSxhQUFhO0NBQ2pDLElBQUksYUFBYSxPQUFPLFFBQVEsTUFBTTtD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
@@ -91,7 +91,7 @@ async function beforeQuery(args) {
91
91
  user_prompt: args.prompt,
92
92
  system_prompt: args.system,
93
93
  requested_model_name: args.model,
94
- effort: args.effort,
94
+ effort: args.thinking === false ? void 0 : args.effort,
95
95
  project_name: args.projectName,
96
96
  history: filterHistoryForStorage(args.history),
97
97
  tools: args.tools?.length ? args.tools : void 0,
@@ -276,4 +276,4 @@ async function performStaleRunCleanup() {
276
276
  //#endregion
277
277
  export { afterQuery, assertNativeRunAdmission, beforeQuery, finishActiveNativeRunsForRestart, finishRunAborted, finishRunWithError, resetNativeRunRegistryForTests };
278
278
 
279
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgaXNSZXN0YXJ0UGVuZGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9zZXJ2ZXItcmVzdGFydFwiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQge1xuICBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZCxcbiAgaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZCxcbn0gZnJvbSBcIi4vcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMsXG4gIGZvcm1hdFJlc3BvbnNlRm9yTG9nLFxuICBnZXRJbWFnZVBhcnRzLFxufSBmcm9tIFwiLi9xZ3JpZC1yZXNwb25zZS1mb3JtYXRcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRSdW5Db250ZXh0LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJydW4tbGlmZWN5Y2xlXCJdKTtcbmNvbnN0IFNUQUxFX1JVTl9USFJFU0hPTERfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5sZXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5sZXQgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IDA7XG5jb25zdCBhY3RpdmVOYXRpdmVSdW5SZWZzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbmNvbnN0IGludGVycnVwdGVkTmF0aXZlUnVuSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5jb25zdCBhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzID0gbmV3IE1hcDxudW1iZXIsIFNldDxQcm9taXNlPHZvaWQ+Pj4oKTtcblxuZnVuY3Rpb24gcmVzdGFydFVuYXZhaWxhYmxlKCk6IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB7XG4gIHJldHVybiBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwicWdyaWQucmVzdGFydFBlbmRpbmdcIikoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTmF0aXZlUnVuKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuc2V0KHJlcXVlc3RMb2dJZCwgKGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gMCkgKyAxKTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCByZWZzID0gYWN0aXZlTmF0aXZlUnVuUmVmcy5nZXQocmVxdWVzdExvZ0lkKTtcbiAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCB8fCByZWZzIDw9IDEpIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIGVsc2UgYWN0aXZlTmF0aXZlUnVuUmVmcy5zZXQocmVxdWVzdExvZ0lkLCByZWZzIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHRyYWNrTmF0aXZlRmluYWxpemVyPFQ+KHJlcXVlc3RMb2dJZDogbnVtYmVyLCBmaW5hbGl6ZTogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvcGVyYXRpb24gPSBmaW5hbGl6ZSgpO1xuICBjb25zdCBzZXR0bGVkID0gb3BlcmF0aW9uLnRoZW4oXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICgpID0+IHVuZGVmaW5lZCxcbiAgKTtcbiAgY29uc3QgZmluYWxpemVycyA9IGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuICBmaW5hbGl6ZXJzLmFkZChzZXR0bGVkKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5zZXQocmVxdWVzdExvZ0lkLCBmaW5hbGl6ZXJzKTtcbiAgdm9pZCBzZXR0bGVkLnRoZW4oKCkgPT4ge1xuICAgIGZpbmFsaXplcnMuZGVsZXRlKHNldHRsZWQpO1xuICAgIGlmIChmaW5hbGl6ZXJzLnNpemUgPT09IDApIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH0pO1xuICByZXR1cm4gb3BlcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmF0aXZlUnVuQWRtaXNzaW9uKCk6IHZvaWQge1xuICBpZiAoaXNSZXN0YXJ0UGVuZGluZygpKSB0aHJvdyByZXN0YXJ0VW5hdmFpbGFibGUoKTtcbn1cblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYXJzZWFibGVKc29uKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5MaWZlY3ljbGVSZXN1bHQgPSB7XG4gIHJ1bkNvbnRleHQ/OiBRZ3JpZFJ1bkNvbnRleHQ7XG59O1xuXG4vKipcbiAqIGxvZ2dlci1lbmFibGVkIHF1ZXJ5L3N0cmVhbSDsnZHri7Ug7KCE7ZuE7JeQIO2YuOy2nC5cbiAqXG4gKiAxKSBiZWZvcmVRdWVyeTogcnVuIOyDneyEsS/qs4Tsho0gKyB0b29sIHJlc3VsdCDsmYTro4wgKyBzdGFsZSB0b29sLXdhaXQgY2xlYW51cFxuICogMikgYWZ0ZXJRdWVyeTogZ2VuZXJhdGUgc3RlcCArIHRvb2wtY2FsbCBzdGVwICsgZmluaXNoL2tlZXAtb3BlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmVmb3JlUXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8e1xuICByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG59PiB7XG4gIGFzc2VydE5hdGl2ZVJ1bkFkbWlzc2lvbigpO1xuXG4gIGxldCByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgbGV0IHN0ZXBJbmRleCA9IDA7XG5cbiAgLy8gcmVxdWVzdExvZ0lkIOqwgCDsnojsnYQg65WM66eMIOq4sOyhtCBydW4g7Jew7J6lLiB0aHJlYWRDb29yZCDrp4wg7J6I64qUIGNvbnYg64qUIOyDiCBydW4g7Jy866GcIOyLnOyekS5cbiAgLy8gY29udGludWF0aW9uIOydgCBjcmVhdGVSdW4g7J2EIOqxtOuEiOubsOuvgOuhnCBydW4g7J2YIHRvb2xzIOuKlCDssqsg7Iqk7YWdIOyepeywqeu2hOycvOuhnCDqs6DsoJXrkJzri6Qg4oCUXG4gIC8vIEFJIFNESyBwcmVwYXJlU3RlcC9hY3RpdmVUb29scyDroZwg7Iqk7YWd66eI64ukIO2ItOyFi+ydtCDrsJTrgIzslrTrj4Qg66Gc6re47JeQ64qUIOuwmOyYgeuQmOyngCDslYrripTri6QuXG4gIGlmIChhcmdzLnJ1bkNvbnRleHQ/LnJlcXVlc3RMb2dJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdExvZ0lkID0gYXJncy5ydW5Db250ZXh0LnJlcXVlc3RMb2dJZDtcbiAgICAvLyBjbGVhbnVw6rO8IOqwmeydgCBEQiBhZHZpc29yeSBsb2Nr7J2EIOyeoeqzoCB0b29sIOqysOqzvCDrsJjsmIEgKyDri6TsnYwgc3RlcCDsmIjslb3snYQg7ZWcXG4gICAgLy8gdHJhbnNhY3Rpb27sl5DshJwg7LKY66as7ZWc64ukLiDsl6zrn6wgcWdyaWQg7ZSE66Gc7IS47IqkIOyCrOydtOyXkOyEnOuPhCBzdGFsZSBleHBpcnnqsIBcbiAgICAvLyDrj4TssKkg7KSR7J24IGZvbGxvdy11cOydhCBlcnJvcuuhnCDrja7slrTsk7Dsp4Ag66q77ZWc64ukLlxuICAgIHN0ZXBJbmRleCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jb250aW51ZVRvb2xSdW4ocmVxdWVzdExvZ0lkLCBhcmdzLnRvb2xSZXN1bHRzID8/IFtdKTtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICAgIHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogYXJncy5zeXN0ZW0sXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogYXJncy5tb2RlbCxcbiAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQsXG4gICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICBoaXN0b3J5OiBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpLFxuICAgICAgdG9vbHM6IGFyZ3MudG9vbHM/Lmxlbmd0aCA/IGFyZ3MudG9vbHMgOiB1bmRlZmluZWQsXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBhcmdzLmltYWdlR2VuZXJhdGlvbiA9PT0gXCJhdXRvXCIgPyBmYWxzZSA6IGFyZ3MuaW1hZ2VHZW5lcmF0aW9uLFxuICAgICAganNvbl9zY2hlbWE6IGFyZ3MuanNvblNjaGVtYSA/PyBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gREIg7KSA67mEIOykkeyXkCDsnqzsi5zsnpHsnbQg7Iuc7J6R65CQ64uk66m0IHByb3ZpZGVyIOyLpO2WieycvOuhnCDrhJjslrTqsIDsp4Ag7JWK64qU64ukLlxuICAvLyDsnbQg7JqU7LKt7J2AIOyerOyLnOyekSBzbmFwc2hvdOyXkCDsl4bsl4jsnLzrr4DroZwg67Cp6riIIOykgOu5hO2VnCBydW7snYQg7KeB7KCRIOuniOqwkO2VnOuLpC5cbiAgaWYgKGlzUmVzdGFydFBlbmRpbmcoKSkge1xuICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBcInNlcnZlciByZXN0YXJ0ZWRcIik7XG4gICAgdGhyb3cgcmVzdGFydFVuYXZhaWxhYmxlKCk7XG4gIH1cblxuICByZWdpc3Rlck5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQpO1xuICByZXR1cm4geyByZXF1ZXN0TG9nSWQsIHN0ZXBJbmRleCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWZ0ZXJRdWVyeShcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0ZXBJbmRleDogbnVtYmVyLFxuICBhcmdzOiBRdWVyeUlucHV0LFxuICByZXN1bHQ6IFF1ZXJ5T3V0cHV0LFxuKTogUHJvbWlzZTxSdW5MaWZlY3ljbGVSZXN1bHQ+IHtcbiAgaWYgKGludGVycnVwdGVkTmF0aXZlUnVuSWRzLmhhcyhyZXF1ZXN0TG9nSWQpKSByZXR1cm4ge307XG5cbiAgcmV0dXJuIHRyYWNrTmF0aXZlRmluYWxpemVyKHJlcXVlc3RMb2dJZCwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBwcm92aWRlcuqwgCBjYW5vbmljYWwgbW9kZWzsnYQg64+M66Ck7KSY64+EIOyalOyyrSByb3V0ZSDsnpDssrQoWzFtXSDrk7Ep64qUIOuztOyhtO2VnOuLpC5cbiAgICAgIGNvbnN0IHJlcXVlc3RlZE1vZGVsTmFtZSA9IHdpdGhQcm92aWRlclByZWZpeChcbiAgICAgICAgYXJncy5tb2RlbCxcbiAgICAgICAgYXJncy5tb2RlbCA/PyByZXN1bHQucmVxdWVzdGVkTW9kZWwgPz8gcmVzdWx0Lm1vZGVsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNlcnZlZE1vZGVsTmFtZSA9IHdpdGhQcm92aWRlclByZWZpeChhcmdzLm1vZGVsLCByZXN1bHQubW9kZWwpO1xuXG4gICAgICAvLyBnZW5lcmF0ZSBzdGVwIOq4sOuhnVxuICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCB7XG4gICAgICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICAgICAgdHlwZTogXCJnZW5lcmF0ZVwiLFxuICAgICAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiByZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgICAgIGZhbGxiYWNrX2NvdW50OiByZXN1bHQubW9kZWxGYWxsYmFja3M/Lmxlbmd0aCA/PyAwLFxuICAgICAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dF90b2tlbnMsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zLFxuICAgICAgICBjb3N0X3VzZDogTWF0aC5yb3VuZChyZXN1bHQuY29zdFVzZCAqIDFfMDAwXzAwMCksXG4gICAgICAgIGNvc3Rfc291cmNlOiByZXN1bHQuY29zdFNvdXJjZSxcbiAgICAgICAgZHVyYXRpb25fbXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgICAgICB0dGZ0X21zOiByZXN1bHQudHRmdE1zLFxuICAgICAgICBmaW5pc2hfcmVhc29uOiByZXN1bHQuZmluaXNoUmVhc29uLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGltYWdlUGFydHMgPSBnZXRJbWFnZVBhcnRzKHJlc3VsdCk7XG4gICAgICBjb25zdCBpbWFnZUNvc3RNaWNyb1VzZCA9IGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkKFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMoYXJncywgaW1hZ2VQYXJ0cywgc3RlcEluZGV4KSkge1xuICAgICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHN0ZXApO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmZpbmlzaFJlYXNvbiA9PT0gXCJ0b29sLWNhbGxzXCIpIHtcbiAgICAgICAgLy8gdG9vbC1jYWxsIHN0ZXDsnYQg7KaJ7IucIOq4sOuhne2VmOqzoCwg64uk7J2MIGZvbGxvdy11cOydtCDqsJnsnYAgcm937JeQIOqysOqzvOulvCDssYTsmrTri6QuXG4gICAgICAgIGNvbnN0IHRvb2xDYWxscyA9IHJlc3VsdC5jb250ZW50LmZpbHRlcigoYykgPT4gYy50eXBlID09PSBcInRvb2wtY2FsbFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b29sQ2FsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0YyA9IHRvb2xDYWxsc1tpXSE7XG4gICAgICAgICAgaWYgKHRjLnR5cGUgIT09IFwidG9vbC1jYWxsXCIpIGNvbnRpbnVlO1xuICAgICAgICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKHJlcXVlc3RMb2dJZCwge1xuICAgICAgICAgICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgICAgICAgICAgdHlwZTogXCJ0b29sX2NhbGxcIixcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pbmRleDogaW1hZ2VQYXJ0cy5sZW5ndGggKyBpLFxuICAgICAgICAgICAgdG9vbF9jYWxsX2lkOiB0Yy50b29sQ2FsbElkLFxuICAgICAgICAgICAgdG9vbF9uYW1lOiB0Yy50b29sTmFtZSxcbiAgICAgICAgICAgIHRvb2xfYXJnczogdGMuaW5wdXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBydW5Db250ZXh0OiB7IHJlcXVlc3RMb2dJZCB9IH07XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbmlzaFJlYXNvbiA9PT0gXCJzdG9wXCIg4oaSIHJ1biDsooXro4wgKOyghOyytCBzdGVwIHVzYWdlIO2VqeyCsClcbiAgICAgIGNvbnN0IGFnZyA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGZvcm1hdFJlc3BvbnNlRm9yTG9nKHJlc3VsdCk7XG4gICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKHJlcXVlc3RMb2dJZCwge1xuICAgICAgICBzdGF0dXM6IFwic3VjY2VlZGVkXCIsXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgICAgIC8vIHN0cnVjdHVyZWQg7JqU7LKt66eMIO2MkOygle2VnOuLpC4gZGV0aSDrsLDsuZjsnZggYnJva2VuIEpTT04g66WY66W8IOuqqeuhneyXkOyEnCDrsJTroZxcbiAgICAgICAgLy8g6rWs67OE7ZWY6riwIOychO2VnCDquLDroZ3snbTrqbAsIOu5hHN0cnVjdHVyZWQg7JqU7LKt7J2AIG51bGwg66GcIOuCqOuKlOuLpC5cbiAgICAgICAgcmVzcG9uc2VfanNvbl9vazogYXJncy5qc29uU2NoZW1hID8gaXNQYXJzZWFibGVKc29uKHJlc3BvbnNlVGV4dCkgOiBudWxsLFxuICAgICAgICB0b2tlbl9uYW1lOiByZXN1bHQudG9rZW5OYW1lLFxuICAgICAgICBpbnB1dF90b2tlbnM6IGFnZy5pbnB1dF90b2tlbnMsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IGFnZy5vdXRwdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogYWdnLmNhY2hlX3JlYWRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgICAgICBkdXJhdGlvbl9tczogYWdnLmR1cmF0aW9uX21zLFxuICAgICAgICAvLyBtdWx0aS1zdGVwIHJ1biDrtoDrqqjsnZgg66qo64247J2AIOy1nOyihSB0dXJu7J2EIOyEnOu5me2VnCDrqqjrjbjsnbTri6QuXG4gICAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiByZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgICAgIG1vZGVsX25hbWU6IHNlcnZlZE1vZGVsTmFtZSxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZy5mYWxsYmFja19jb3VudCxcbiAgICAgICAgY29zdF91c2Q6IGFnZy5jb3N0X3VzZCxcbiAgICAgICAgY29zdF9zb3VyY2U6IGFnZy5jb3N0X3NvdXJjZSxcbiAgICAgICAgaW1hZ2VfY29zdF91c2Q6IGltYWdlQ29zdE1pY3JvVXNkLFxuICAgICAgICAuLi4oaW1hZ2VQYXJ0cy5sZW5ndGggPiAwID8geyBpc19pbWFnZV9nZW5lcmF0aW9uOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIGltYWdlX2Nvc3RfbWV0aG9kOlxuICAgICAgICAgIGltYWdlQ29zdE1pY3JvVXNkICE9PSBudWxsXG4gICAgICAgICAgICA/IGltYWdlR2VuZXJhdGlvbkNvc3RNZXRob2QoYXJncy5pbWFnZUdlbmVyYXRpb25PcHRpb25zLCByZXN1bHQpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlTmF0aXZlUnVuKHJlcXVlc3RMb2dJZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bldpdGhFcnJvcihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuaGFzKHJlcXVlc3RMb2dJZCkpIHJldHVybjtcbiAgcmV0dXJuIHRyYWNrTmF0aXZlRmluYWxpemVyKHJlcXVlc3RMb2dJZCwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgZXJyb3JNZXNzYWdlLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5pc2hSdW5BYm9ydGVkKHJlcXVlc3RMb2dJZDogbnVtYmVyLCBhcmdzPzogUXVlcnlJbnB1dCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuaGFzKHJlcXVlc3RMb2dJZCkpIHJldHVybjtcbiAgcmV0dXJuIHRyYWNrTmF0aXZlRmluYWxpemVyKHJlcXVlc3RMb2dJZCwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiYWJvcnRlZFwiLCBcImNsaWVudCBkaXNjb25uZWN0ZWRcIiwgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlbGVhc2VOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiog7ZiE7J6sIOydtCDtlITroZzshLjsiqTqsIAgcHJvdmlkZXLrpbwg7Iuk7ZaJIOykkeyduCBuYXRpdmUgcnVu66eMIOyerOyLnOyekSDsmKTrpZjroZwg66eI6rCQ7ZWc64ukLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaEFjdGl2ZU5hdGl2ZVJ1bnNGb3JSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXF1ZXN0TG9nSWRzID0gWy4uLmFjdGl2ZU5hdGl2ZVJ1blJlZnMua2V5cygpXTtcbiAgZm9yIChjb25zdCByZXF1ZXN0TG9nSWQgb2YgcmVxdWVzdExvZ0lkcykge1xuICAgIGludGVycnVwdGVkTmF0aXZlUnVuSWRzLmFkZChyZXF1ZXN0TG9nSWQpO1xuICAgIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICByZXF1ZXN0TG9nSWRzLm1hcChhc3luYyAocmVxdWVzdExvZ0lkKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzLmdldChyZXF1ZXN0TG9nSWQpID8/IFtdKTtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBcInNlcnZlciByZXN0YXJ0ZWRcIik7XG4gICAgfSksXG4gICk7XG59XG5cbi8qKiDtlITroZzshLjsiqQg7KCE7JetIHJlZ2lzdHJ566W8IOqyqeumrO2VtOyVvCDtlZjripQg64uo7JyEIO2FjOyKpO2KuCDsoITsmqkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXROYXRpdmVSdW5SZWdpc3RyeUZvclRlc3RzKCk6IHZvaWQge1xuICBhY3RpdmVOYXRpdmVSdW5SZWZzLmNsZWFyKCk7XG4gIGludGVycnVwdGVkTmF0aXZlUnVuSWRzLmNsZWFyKCk7XG4gIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuY2xlYXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluaXNoVGVybWluYWxSdW4oXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGF0dXM6IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiLFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgYXJncz86IFF1ZXJ5SW5wdXQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWdncmVnYXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWdncmVnYXRlID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgYWdncmVnYXRlU3RlcFVzYWdlIGZhaWxlZCB3aGlsZSBmaW5pc2hpbmcgJHtzdGF0dXN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICBoaXN0b3J5OiBhcmdzID8gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLihhZ2dyZWdhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgICAgICBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYGZpbmlzaFRlcm1pbmFsUnVuKCR7c3RhdHVzfSkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBTdGFsZVJ1bnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCkge1xuICAgIGF3YWl0IHN0YWxlQ2xlYW51cEluRmxpZ2h0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChub3cgLSBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0IDwgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUykgcmV0dXJuO1xuICBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gbm93O1xuXG4gIGNvbnN0IGNsZWFudXAgPSBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk7XG4gIHN0YWxlQ2xlYW51cEluRmxpZ2h0ID0gY2xlYW51cDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGVhbnVwO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCA9PT0gY2xlYW51cCkgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVN0YWxlUnVuQ2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcInRvb2wtY2FsbCBydW46IG5vIGZvbGxvdy11cCB3aXRoaW4gMzAgbWludXRlc1wiO1xuICAgIGNvbnN0IHN0YWxlSWRzID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgICAgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyxcbiAgICAgIGVycm9yTWVzc2FnZSxcbiAgICApO1xuICAgIGNvbnN0IGNsZWFuZWRDb3VudCA9IHN0YWxlSWRzLmxlbmd0aDtcbiAgICBpZiAoY2xlYW5lZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYGNsZWFuZWQgdXAgJHtjbGVhbmVkQ291bnR9IHN0YWxlIHJ1bm5pbmcgcmVxdWVzdCBsb2dzYCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBzdGFsZSBjbGVhbnVwIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBQ25ELE1BQU0seUJBQXlCLE9BQVU7QUFDekMsTUFBTSw0QkFBNEIsS0FBSztBQUN2QyxJQUFJO0FBQ0osSUFBSSw0QkFBNEI7QUFDaEMsTUFBTSxzQ0FBc0IsSUFBSSxJQUFvQjtBQUNwRCxNQUFNLDBDQUEwQixJQUFJLElBQVk7QUFDaEQsTUFBTSx5Q0FBeUIsSUFBSSxJQUFnQztBQUVuRSxTQUFTLHFCQUFrRDtDQUN6RCxPQUFPLElBQUksNEJBQTRCLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0FBRUEsU0FBUyxrQkFBa0IsY0FBNEI7Q0FDckQsb0JBQW9CLElBQUksZUFBZSxvQkFBb0IsSUFBSSxZQUFZLEtBQUssS0FBSyxDQUFDO0FBQ3hGO0FBRUEsU0FBUyxpQkFBaUIsY0FBNEI7Q0FDcEQsTUFBTSxPQUFPLG9CQUFvQixJQUFJLFlBQVk7Q0FDakQsSUFBSSxTQUFTLFVBQWEsUUFBUSxHQUFHLG9CQUFvQixPQUFPLFlBQVk7TUFDdkUsb0JBQW9CLElBQUksY0FBYyxPQUFPLENBQUM7QUFDckQ7QUFFQSxTQUFTLHFCQUF3QixjQUFzQixVQUF3QztDQUM3RixNQUFNLFlBQVksU0FBUztDQUMzQixNQUFNLFVBQVUsVUFBVSxXQUNsQixjQUNBLE1BQ1I7Q0FDQSxNQUFNLGFBQWEsdUJBQXVCLElBQUksWUFBWSxxQkFBSyxJQUFJLElBQW1CO0NBQ3RGLFdBQVcsSUFBSSxPQUFPO0NBQ3RCLHVCQUF1QixJQUFJLGNBQWMsVUFBVTtDQUNuRCxBQUFLLFFBQVEsV0FBVztFQUN0QixXQUFXLE9BQU8sT0FBTztFQUN6QixJQUFJLFdBQVcsU0FBUyxHQUFHLHVCQUF1QixPQUFPLFlBQVk7Q0FDdkUsQ0FB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
279
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgaXNSZXN0YXJ0UGVuZGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9zZXJ2ZXItcmVzdGFydFwiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQge1xuICBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZCxcbiAgaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZCxcbn0gZnJvbSBcIi4vcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMsXG4gIGZvcm1hdFJlc3BvbnNlRm9yTG9nLFxuICBnZXRJbWFnZVBhcnRzLFxufSBmcm9tIFwiLi9xZ3JpZC1yZXNwb25zZS1mb3JtYXRcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRSdW5Db250ZXh0LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJydW4tbGlmZWN5Y2xlXCJdKTtcbmNvbnN0IFNUQUxFX1JVTl9USFJFU0hPTERfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5sZXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5sZXQgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IDA7XG5jb25zdCBhY3RpdmVOYXRpdmVSdW5SZWZzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbmNvbnN0IGludGVycnVwdGVkTmF0aXZlUnVuSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5jb25zdCBhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzID0gbmV3IE1hcDxudW1iZXIsIFNldDxQcm9taXNlPHZvaWQ+Pj4oKTtcblxuZnVuY3Rpb24gcmVzdGFydFVuYXZhaWxhYmxlKCk6IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB7XG4gIHJldHVybiBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwicWdyaWQucmVzdGFydFBlbmRpbmdcIikoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTmF0aXZlUnVuKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuc2V0KHJlcXVlc3RMb2dJZCwgKGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gMCkgKyAxKTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCByZWZzID0gYWN0aXZlTmF0aXZlUnVuUmVmcy5nZXQocmVxdWVzdExvZ0lkKTtcbiAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCB8fCByZWZzIDw9IDEpIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIGVsc2UgYWN0aXZlTmF0aXZlUnVuUmVmcy5zZXQocmVxdWVzdExvZ0lkLCByZWZzIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHRyYWNrTmF0aXZlRmluYWxpemVyPFQ+KHJlcXVlc3RMb2dJZDogbnVtYmVyLCBmaW5hbGl6ZTogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvcGVyYXRpb24gPSBmaW5hbGl6ZSgpO1xuICBjb25zdCBzZXR0bGVkID0gb3BlcmF0aW9uLnRoZW4oXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICgpID0+IHVuZGVmaW5lZCxcbiAgKTtcbiAgY29uc3QgZmluYWxpemVycyA9IGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuICBmaW5hbGl6ZXJzLmFkZChzZXR0bGVkKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5zZXQocmVxdWVzdExvZ0lkLCBmaW5hbGl6ZXJzKTtcbiAgdm9pZCBzZXR0bGVkLnRoZW4oKCkgPT4ge1xuICAgIGZpbmFsaXplcnMuZGVsZXRlKHNldHRsZWQpO1xuICAgIGlmIChmaW5hbGl6ZXJzLnNpemUgPT09IDApIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH0pO1xuICByZXR1cm4gb3BlcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmF0aXZlUnVuQWRtaXNzaW9uKCk6IHZvaWQge1xuICBpZiAoaXNSZXN0YXJ0UGVuZGluZygpKSB0aHJvdyByZXN0YXJ0VW5hdmFpbGFibGUoKTtcbn1cblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYXJzZWFibGVKc29uKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5MaWZlY3ljbGVSZXN1bHQgPSB7XG4gIHJ1bkNvbnRleHQ/OiBRZ3JpZFJ1bkNvbnRleHQ7XG59O1xuXG4vKipcbiAqIGxvZ2dlci1lbmFibGVkIHF1ZXJ5L3N0cmVhbSDsnZHri7Ug7KCE7ZuE7JeQIO2YuOy2nC5cbiAqXG4gKiAxKSBiZWZvcmVRdWVyeTogcnVuIOyDneyEsS/qs4Tsho0gKyB0b29sIHJlc3VsdCDsmYTro4wgKyBzdGFsZSB0b29sLXdhaXQgY2xlYW51cFxuICogMikgYWZ0ZXJRdWVyeTogZ2VuZXJhdGUgc3RlcCArIHRvb2wtY2FsbCBzdGVwICsgZmluaXNoL2tlZXAtb3BlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmVmb3JlUXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8e1xuICByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG59PiB7XG4gIGFzc2VydE5hdGl2ZVJ1bkFkbWlzc2lvbigpO1xuXG4gIGxldCByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgbGV0IHN0ZXBJbmRleCA9IDA7XG5cbiAgLy8gcmVxdWVzdExvZ0lkIOqwgCDsnojsnYQg65WM66eMIOq4sOyhtCBydW4g7Jew7J6lLiB0aHJlYWRDb29yZCDrp4wg7J6I64qUIGNvbnYg64qUIOyDiCBydW4g7Jy866GcIOyLnOyekS5cbiAgLy8gY29udGludWF0aW9uIOydgCBjcmVhdGVSdW4g7J2EIOqxtOuEiOubsOuvgOuhnCBydW4g7J2YIHRvb2xzIOuKlCDssqsg7Iqk7YWdIOyepeywqeu2hOycvOuhnCDqs6DsoJXrkJzri6Qg4oCUXG4gIC8vIEFJIFNESyBwcmVwYXJlU3RlcC9hY3RpdmVUb29scyDroZwg7Iqk7YWd66eI64ukIO2ItOyFi+ydtCDrsJTrgIzslrTrj4Qg66Gc6re47JeQ64qUIOuwmOyYgeuQmOyngCDslYrripTri6QuXG4gIGlmIChhcmdzLnJ1bkNvbnRleHQ/LnJlcXVlc3RMb2dJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdExvZ0lkID0gYXJncy5ydW5Db250ZXh0LnJlcXVlc3RMb2dJZDtcbiAgICAvLyBjbGVhbnVw6rO8IOqwmeydgCBEQiBhZHZpc29yeSBsb2Nr7J2EIOyeoeqzoCB0b29sIOqysOqzvCDrsJjsmIEgKyDri6TsnYwgc3RlcCDsmIjslb3snYQg7ZWcXG4gICAgLy8gdHJhbnNhY3Rpb27sl5DshJwg7LKY66as7ZWc64ukLiDsl6zrn6wgcWdyaWQg7ZSE66Gc7IS47IqkIOyCrOydtOyXkOyEnOuPhCBzdGFsZSBleHBpcnnqsIBcbiAgICAvLyDrj4TssKkg7KSR7J24IGZvbGxvdy11cOydhCBlcnJvcuuhnCDrja7slrTsk7Dsp4Ag66q77ZWc64ukLlxuICAgIHN0ZXBJbmRleCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jb250aW51ZVRvb2xSdW4ocmVxdWVzdExvZ0lkLCBhcmdzLnRvb2xSZXN1bHRzID8/IFtdKTtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICAgIHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogYXJncy5zeXN0ZW0sXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogYXJncy5tb2RlbCxcbiAgICAgIGVmZm9ydDogYXJncy50aGlua2luZyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBhcmdzLmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogYXJncy5wcm9qZWN0TmFtZSxcbiAgICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gICAgICB0b29sczogYXJncy50b29scz8ubGVuZ3RoID8gYXJncy50b29scyA6IHVuZGVmaW5lZCxcbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IGFyZ3MuaW1hZ2VHZW5lcmF0aW9uID09PSBcImF1dG9cIiA/IGZhbHNlIDogYXJncy5pbWFnZUdlbmVyYXRpb24sXG4gICAgICBqc29uX3NjaGVtYTogYXJncy5qc29uU2NoZW1hID8/IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBEQiDspIDruYQg7KSR7JeQIOyerOyLnOyekeydtCDsi5zsnpHrkJDri6TrqbQgcHJvdmlkZXIg7Iuk7ZaJ7Jy866GcIOuEmOyWtOqwgOyngCDslYrripTri6QuXG4gIC8vIOydtCDsmpTssq3snYAg7J6s7Iuc7J6RIHNuYXBzaG907JeQIOyXhuyXiOycvOuvgOuhnCDrsKnquIgg7KSA67mE7ZWcIHJ1buydhCDsp4HsoJEg66eI6rCQ7ZWc64ukLlxuICBpZiAoaXNSZXN0YXJ0UGVuZGluZygpKSB7XG4gICAgYXdhaXQgZmluaXNoVGVybWluYWxSdW4ocmVxdWVzdExvZ0lkLCBcImVycm9yXCIsIFwic2VydmVyIHJlc3RhcnRlZFwiKTtcbiAgICB0aHJvdyByZXN0YXJ0VW5hdmFpbGFibGUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTmF0aXZlUnVuKHJlcXVlc3RMb2dJZCk7XG4gIHJldHVybiB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZnRlclF1ZXJ5KFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgc3RlcEluZGV4OiBudW1iZXIsXG4gIGFyZ3M6IFF1ZXJ5SW5wdXQsXG4gIHJlc3VsdDogUXVlcnlPdXRwdXQsXG4pOiBQcm9taXNlPFJ1bkxpZmVjeWNsZVJlc3VsdD4ge1xuICBpZiAoaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuaGFzKHJlcXVlc3RMb2dJZCkpIHJldHVybiB7fTtcblxuICByZXR1cm4gdHJhY2tOYXRpdmVGaW5hbGl6ZXIocmVxdWVzdExvZ0lkLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHByb3ZpZGVy6rCAIGNhbm9uaWNhbCBtb2RlbOydhCDrj4zroKTspJjrj4Qg7JqU7LKtIHJvdXRlIOyekOyytChbMW1dIOuTsSnripQg67O07KG07ZWc64ukLlxuICAgICAgY29uc3QgcmVxdWVzdGVkTW9kZWxOYW1lID0gd2l0aFByb3ZpZGVyUHJlZml4KFxuICAgICAgICBhcmdzLm1vZGVsLFxuICAgICAgICBhcmdzLm1vZGVsID8/IHJlc3VsdC5yZXF1ZXN0ZWRNb2RlbCA/PyByZXN1bHQubW9kZWwsXG4gICAgICApO1xuICAgICAgY29uc3Qgc2VydmVkTW9kZWxOYW1lID0gd2l0aFByb3ZpZGVyUHJlZml4KGFyZ3MubW9kZWwsIHJlc3VsdC5tb2RlbCk7XG5cbiAgICAgIC8vIGdlbmVyYXRlIHN0ZXAg6riw66GdXG4gICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgICAgICB0eXBlOiBcImdlbmVyYXRlXCIsXG4gICAgICAgIG1vZGVsX25hbWU6IHNlcnZlZE1vZGVsTmFtZSxcbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IHJlc3VsdC5tb2RlbEZhbGxiYWNrcz8ubGVuZ3RoID8/IDAsXG4gICAgICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNvc3RfdXNkOiBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogMV8wMDBfMDAwKSxcbiAgICAgICAgY29zdF9zb3VyY2U6IHJlc3VsdC5jb3N0U291cmNlLFxuICAgICAgICBkdXJhdGlvbl9tczogcmVzdWx0LmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRfbXM6IHJlc3VsdC50dGZ0TXMsXG4gICAgICAgIGZpbmlzaF9yZWFzb246IHJlc3VsdC5maW5pc2hSZWFzb24sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaW1hZ2VQYXJ0cyA9IGdldEltYWdlUGFydHMocmVzdWx0KTtcbiAgICAgIGNvbnN0IGltYWdlQ29zdE1pY3JvVXNkID0gZXN0aW1hdGVJbWFnZUdlbmVyYXRpb25Db3N0TWljcm9Vc2QoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgYXJncy5pbWFnZUdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyhhcmdzLCBpbWFnZVBhcnRzLCBzdGVwSW5kZXgpKSB7XG4gICAgICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKHJlcXVlc3RMb2dJZCwgc3RlcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuZmluaXNoUmVhc29uID09PSBcInRvb2wtY2FsbHNcIikge1xuICAgICAgICAvLyB0b29sLWNhbGwgc3RlcOydhCDsponsi5wg6riw66Gd7ZWY6rOgLCDri6TsnYwgZm9sbG93LXVw7J20IOqwmeydgCByb3fsl5Ag6rKw6rO866W8IOyxhOyatOuLpC5cbiAgICAgICAgY29uc3QgdG9vbENhbGxzID0gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChjKSA9PiBjLnR5cGUgPT09IFwidG9vbC1jYWxsXCIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvb2xDYWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHRjID0gdG9vbENhbGxzW2ldITtcbiAgICAgICAgICBpZiAodGMudHlwZSAhPT0gXCJ0b29sLWNhbGxcIikgY29udGludWU7XG4gICAgICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCB7XG4gICAgICAgICAgICBzdGVwX2luZGV4OiBzdGVwSW5kZXgsXG4gICAgICAgICAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgICAgICAgICAgdG9vbF9jYWxsX2luZGV4OiBpbWFnZVBhcnRzLmxlbmd0aCArIGksXG4gICAgICAgICAgICB0b29sX2NhbGxfaWQ6IHRjLnRvb2xDYWxsSWQsXG4gICAgICAgICAgICB0b29sX25hbWU6IHRjLnRvb2xOYW1lLFxuICAgICAgICAgICAgdG9vbF9hcmdzOiB0Yy5pbnB1dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJ1bkNvbnRleHQ6IHsgcmVxdWVzdExvZ0lkIH0gfTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluaXNoUmVhc29uID09PSBcInN0b3BcIiDihpIgcnVuIOyiheujjCAo7KCE7LK0IHN0ZXAgdXNhZ2Ug7ZWp7IKwKVxuICAgICAgY29uc3QgYWdnID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gZm9ybWF0UmVzcG9uc2VGb3JMb2cocmVzdWx0KTtcbiAgICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICAgIHN0YXR1czogXCJzdWNjZWVkZWRcIixcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgLy8gc3RydWN0dXJlZCDsmpTssq3rp4wg7YyQ7KCV7ZWc64ukLiBkZXRpIOuwsOy5mOydmCBicm9rZW4gSlNPTiDrpZjrpbwg66qp66Gd7JeQ7IScIOuwlOuhnFxuICAgICAgICAvLyDqtazrs4TtlZjquLAg7JyE7ZWcIOq4sOuhneydtOupsCwg67mEc3RydWN0dXJlZCDsmpTssq3snYAgbnVsbCDroZwg64Ko64qU64ukLlxuICAgICAgICByZXNwb25zZV9qc29uX29rOiBhcmdzLmpzb25TY2hlbWEgPyBpc1BhcnNlYWJsZUpzb24ocmVzcG9uc2VUZXh0KSA6IG51bGwsXG4gICAgICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgICAgIGlucHV0X3Rva2VuczogYWdnLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogYWdnLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2cuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgIGR1cmF0aW9uX21zOiBhZ2cuZHVyYXRpb25fbXMsXG4gICAgICAgIC8vIG11bHRpLXN0ZXAgcnVuIOu2gOuqqOydmCDrqqjrjbjsnYAg7LWc7KKFIHR1cm7snYQg7ISc67mZ7ZWcIOuqqOuNuOydtOuLpC5cbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICAgICAgbW9kZWxfbmFtZTogc2VydmVkTW9kZWxOYW1lLFxuICAgICAgICBmYWxsYmFja19jb3VudDogYWdnLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICBjb3N0X3VzZDogYWdnLmNvc3RfdXNkLFxuICAgICAgICBjb3N0X3NvdXJjZTogYWdnLmNvc3Rfc291cmNlLFxuICAgICAgICBpbWFnZV9jb3N0X3VzZDogaW1hZ2VDb3N0TWljcm9Vc2QsXG4gICAgICAgIC4uLihpbWFnZVBhcnRzLmxlbmd0aCA+IDAgPyB7IGlzX2ltYWdlX2dlbmVyYXRpb246IHRydWUgfSA6IHt9KSxcbiAgICAgICAgaW1hZ2VfY29zdF9tZXRob2Q6XG4gICAgICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGxcbiAgICAgICAgICAgID8gaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZChhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsIHJlc3VsdClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaGlzdG9yeTogZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge307XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlbGVhc2VOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoUnVuV2l0aEVycm9yKFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gIGFyZ3M/OiBRdWVyeUlucHV0LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuO1xuICByZXR1cm4gdHJhY2tOYXRpdmVGaW5hbGl6ZXIocmVxdWVzdExvZ0lkLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBlcnJvck1lc3NhZ2UsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlTmF0aXZlUnVuKHJlcXVlc3RMb2dJZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkOiBudW1iZXIsIGFyZ3M/OiBRdWVyeUlucHV0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuO1xuICByZXR1cm4gdHJhY2tOYXRpdmVGaW5hbGl6ZXIocmVxdWVzdExvZ0lkLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJhYm9ydGVkXCIsIFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKiDtmITsnqwg7J20IO2UhOuhnOyEuOyKpOqwgCBwcm92aWRlcuulvCDsi6Ttlokg7KSR7J24IG5hdGl2ZSBydW7rp4wg7J6s7Iuc7J6RIOyYpOulmOuhnCDrp4jqsJDtlZzri6QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoQWN0aXZlTmF0aXZlUnVuc0ZvclJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3RMb2dJZHMgPSBbLi4uYWN0aXZlTmF0aXZlUnVuUmVmcy5rZXlzKCldO1xuICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiByZXF1ZXN0TG9nSWRzKSB7XG4gICAgaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuYWRkKHJlcXVlc3RMb2dJZCk7XG4gICAgYWN0aXZlTmF0aXZlUnVuUmVmcy5kZWxldGUocmVxdWVzdExvZ0lkKTtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlcXVlc3RMb2dJZHMubWFwKGFzeW5jIChyZXF1ZXN0TG9nSWQpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gW10pO1xuICAgICAgYXdhaXQgZmluaXNoVGVybWluYWxSdW4ocmVxdWVzdExvZ0lkLCBcImVycm9yXCIsIFwic2VydmVyIHJlc3RhcnRlZFwiKTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqIO2UhOuhnOyEuOyKpCDsoITsl60gcmVnaXN0cnnrpbwg6rKp66as7ZW07JW8IO2VmOuKlCDri6jsnIQg7YWM7Iqk7Yq4IOyghOyaqS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE5hdGl2ZVJ1blJlZ2lzdHJ5Rm9yVGVzdHMoKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuY2xlYXIoKTtcbiAgaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuY2xlYXIoKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5jbGVhcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5pc2hUZXJtaW5hbFJ1bihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0YXR1czogXCJlcnJvclwiIHwgXCJhYm9ydGVkXCIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGxldCBhZ2dyZWdhdGU6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZT4+IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBhZ2dyZWdhdGUgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBhZ2dyZWdhdGVTdGVwVXNhZ2UgZmFpbGVkIHdoaWxlIGZpbmlzaGluZyAke3N0YXR1c306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmZpbmlzaFJ1bihyZXF1ZXN0TG9nSWQsIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgIGhpc3Rvcnk6IGFyZ3MgPyBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgLi4uKGFnZ3JlZ2F0ZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlucHV0X3Rva2VuczogYWdncmVnYXRlLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgICAgIGR1cmF0aW9uX21zOiBhZ2dyZWdhdGUuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICBmYWxsYmFja19jb3VudDogYWdncmVnYXRlLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgICAgIGNvc3Rfc291cmNlOiBhZ2dyZWdhdGUuY29zdF9zb3VyY2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihgZmluaXNoVGVybWluYWxSdW4oJHtzdGF0dXN9KSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cFN0YWxlUnVucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0KSB7XG4gICAgYXdhaXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKG5vdyAtIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPCBTVEFMRV9DTEVBTlVQX0lOVEVSVkFMX01TKSByZXR1cm47XG4gIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPSBub3c7XG5cbiAgY29uc3QgY2xlYW51cCA9IHBlcmZvcm1TdGFsZVJ1bkNsZWFudXAoKTtcbiAgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSBjbGVhbnVwO1xuICB0cnkge1xuICAgIGF3YWl0IGNsZWFudXA7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0ID09PSBjbGVhbnVwKSBzdGFsZUNsZWFudXBJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFwidG9vbC1jYWxsIHJ1bjogbm8gZm9sbG93LXVwIHdpdGhpbiAzMCBtaW51dGVzXCI7XG4gICAgY29uc3Qgc3RhbGVJZHMgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bnMoXG4gICAgICBTVEFMRV9SVU5fVEhSRVNIT0xEX01TLFxuICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICk7XG4gICAgY29uc3QgY2xlYW5lZENvdW50ID0gc3RhbGVJZHMubGVuZ3RoO1xuICAgIGlmIChjbGVhbmVkQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgY2xlYW5lZCB1cCAke2NsZWFuZWRDb3VudH0gc3RhbGUgcnVubmluZyByZXF1ZXN0IGxvZ3NgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYHN0YWxlIGNsZWFudXAgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBaUJBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxlQUFlLENBQUM7QUFDbkQsTUFBTSx5QkFBeUIsT0FBVTtBQUN6QyxNQUFNLDRCQUE0QixLQUFLO0FBQ3ZDLElBQUk7QUFDSixJQUFJLDRCQUE0QjtBQUNoQyxNQUFNLHNDQUFzQixJQUFJLElBQW9CO0FBQ3BELE1BQU0sMENBQTBCLElBQUksSUFBWTtBQUNoRCxNQUFNLHlDQUF5QixJQUFJLElBQWdDO0FBRW5FLFNBQVMscUJBQWtEO0NBQ3pELE9BQU8sSUFBSSw0QkFBNEIsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDckU7QUFFQSxTQUFTLGtCQUFrQixjQUE0QjtDQUNyRCxvQkFBb0IsSUFBSSxlQUFlLG9CQUFvQixJQUFJLFlBQVksS0FBSyxLQUFLLENBQUM7QUFDeEY7QUFFQSxTQUFTLGlCQUFpQixjQUE0QjtDQUNwRCxNQUFNLE9BQU8sb0JBQW9CLElBQUksWUFBWTtDQUNqRCxJQUFJLFNBQVMsVUFBYSxRQUFRLEdBQUcsb0JBQW9CLE9BQU8sWUFBWTtNQUN2RSxvQkFBb0IsSUFBSSxjQUFjLE9BQU8sQ0FBQztBQUNyRDtBQUVBLFNBQVMscUJBQXdCLGNBQXNCLFVBQXdDO0NBQzdGLE1BQU0sWUFBWSxTQUFTO0NBQzNCLE1BQU0sVUFBVSxVQUFVLFdBQ2xCLGNBQ0EsTUFDUjtDQUNBLE1BQU0sYUFBYSx1QkFBdUIsSUFBSSxZQUFZLHFCQUFLLElBQUksSUFBbUI7Q0FDdEYsV0FBVyxJQUFJLE9BQU87Q0FDdEIsdUJBQXVCLElBQUksY0FBYyxVQUFVO0NBQ25ELEFBQUssUUFBUSxXQUFXO0VBQ3RCLFdBQVcsT0FBTyxPQUFPO0VBQ3pCLElBQUksV0FB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
@@ -7,44 +7,20 @@ import { strictify } from "../../utils/providers/common/strictifier.js";
7
7
  import { decideConvRouting, issueConvContext } from "./conv-routing.js";
8
8
  import { ProcessError, maskToken } from "./qgrid.types.js";
9
9
  import { composeSystemWithSchemaContract } from "./schema-prompt.js";
10
- import { applyToolCallEmulation } from "./tool-emulation.js";
10
+ import { applyToolCallEmulation, isToolCallEnvelope } from "./tool-emulation.js";
11
11
  import { buildToolCallSchema } from "./tool-emulation-schema.js";
12
12
  import { InternalServerErrorException, ServiceUnavailableException } from "sonamu";
13
13
  //#region src/application/qgrid/qgrid.dispatcher.ts
14
- /**
15
- * QgridDispatcher — provider dispatcher 라우팅 + 토큰 캐시/통계 싱글턴.
16
- *
17
- * - 메모리 캐시 (Map<id, TokenSubsetA>) 는 TokenSubscriber 가 pg LISTEN/NOTIFY 로 갱신
18
- * - OpenAI/Anthropic 요청은 각 provider dispatcher 로만 실행
19
- * - QuotaError 는 그대로 상위 전파
20
- * - dispatcher 미준비는 기동 중(503)/초기화 실패(500)로 구분해 던진다
21
- */
22
14
  var QgridDispatcherClass = class {
23
15
  tokens = /* @__PURE__ */ new Map();
24
16
  requestCounts = /* @__PURE__ */ new Map();
25
17
  subscriber = null;
26
18
  openaiDispatcher = null;
27
19
  anthropicDispatcher = null;
28
- /**
29
- * provider 별 기동 상태. dispatcher 가 없는 이유를 구분하기 위해 필요하다 —
30
- * HTTP 리스닝은 dispatcher 준비보다 먼저 열리므로(sonamu.config onStart),
31
- * 그 사이 들어온 요청은 "잠시 후 되는" 상태와 "재시도해도 안 되는" 상태가 다르다.
32
- *
33
- * - `starting`: provider 토큰·런타임 초기화 중 → 재시도 가능
34
- * - `ready`: 정상
35
- * - `failed`: start() 가 예외로 끝남 → 재시도해도 같은 결과
36
- */
37
20
  startupState = {
38
21
  openai: "starting",
39
22
  anthropic: "starting"
40
23
  };
41
- /**
42
- * dispatcher 가 준비되지 않았을 때 던질 예외를 만든다.
43
- *
44
- * 기동 중이면 503(+Retry-After) 으로 재시도 가능함을 알리고, 초기화가 실패로 끝났으면
45
- * 500 으로 재시도가 무의미함을 알린다. 이전에는 둘 다 QuotaError 였는데, 쿼터 소진이
46
- * 아닌 상태를 그렇게 표현하면 호출자가 토큰 문제로 오해하고 재시도 판단도 못 한다.
47
- */
48
24
  notReadyError(provider) {
49
25
  const label = provider === "openai" ? "OpenAI" : "Anthropic";
50
26
  return this.startupState[provider] === "failed" ? new InternalServerErrorException(SD("qgrid.dispatcherFailed")(label)) : new ServiceUnavailableException(SD("qgrid.dispatcherStarting")(label));
@@ -53,12 +29,6 @@ var QgridDispatcherClass = class {
53
29
  const key = `${provider}\0${tokenName}`;
54
30
  this.requestCounts.set(key, (this.requestCounts.get(key) ?? 0) + 1);
55
31
  }
56
- upsertCache(id, row) {
57
- this.tokens.set(id, row);
58
- }
59
- removeCache(id) {
60
- this.tokens.delete(id);
61
- }
62
32
  replaceCache(rows) {
63
33
  this.tokens = new Map(rows.map((r) => [r.id, r]));
64
34
  }
@@ -84,7 +54,9 @@ var QgridDispatcherClass = class {
84
54
  model: route.model,
85
55
  systemPrompt: input.system,
86
56
  outputSchema,
87
- effort: input.effort,
57
+ stopAfterOutputMessage: input.tools?.length ? (text, phase) => isToolCallEnvelope(text, input.tools, answerKind, phase) : void 0,
58
+ thinking: input.thinking,
59
+ effort: input.thinking === false ? void 0 : input.effort,
88
60
  verbosity: input.verbosity,
89
61
  reasoningSummary: input.reasoningSummary,
90
62
  serviceTier: input.serviceTier,
@@ -111,7 +83,8 @@ var QgridDispatcherClass = class {
111
83
  const result = await this.anthropicDispatcher.generate({
112
84
  model: input.model,
113
85
  systemPrompt: composeSystemWithSchemaContract(input.system, input),
114
- effort: input.effort,
86
+ thinking: input.thinking,
87
+ effort: input.thinking === false ? void 0 : input.effort,
115
88
  timeoutMs: input.timeout,
116
89
  abortSignal,
117
90
  coldInput: decision.coldInput,
@@ -142,7 +115,9 @@ var QgridDispatcherClass = class {
142
115
  model: route.model,
143
116
  systemPrompt: input.system,
144
117
  outputSchema,
145
- effort: input.effort,
118
+ stopAfterOutputMessage: input.tools?.length ? (text, phase) => isToolCallEnvelope(text, input.tools, answerKind, phase) : void 0,
119
+ thinking: input.thinking,
120
+ effort: input.thinking === false ? void 0 : input.effort,
146
121
  verbosity: input.verbosity,
147
122
  reasoningSummary: input.reasoningSummary,
148
123
  serviceTier: input.serviceTier,
@@ -180,7 +155,8 @@ var QgridDispatcherClass = class {
180
155
  await this.anthropicDispatcher.generateStream({
181
156
  model: input.model,
182
157
  systemPrompt: composeSystemWithSchemaContract(input.system, input),
183
- effort: input.effort,
158
+ thinking: input.thinking,
159
+ effort: input.thinking === false ? void 0 : input.effort,
184
160
  coldInput: decision.coldInput,
185
161
  coldHistory: decision.coldHistory,
186
162
  preferredTokenId: input.preferredTokenId,
@@ -271,4 +247,4 @@ const QgridDispatcher = new QgridDispatcherClass();
271
247
  //#endregion
272
248
  export { QgridDispatcher, QgridDispatcherClass, buildAndValidateStrictOutputSchema, buildStrictOutputSchema };
273
249
 
274
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFFncmlkRGlzcGF0Y2hlciDigJQgcHJvdmlkZXIgZGlzcGF0Y2hlciDrnbzsmrDtjIUgKyDthqDtgbAg7LqQ7IucL+2GteqzhCDsi7HquIDthLQuXG4gKlxuICogLSDrqZTrqqjrpqwg7LqQ7IucIChNYXA8aWQsIFRva2VuU3Vic2V0QT4pIOuKlCBUb2tlblN1YnNjcmliZXIg6rCAIHBnIExJU1RFTi9OT1RJRlkg66GcIOqwseyLoFxuICogLSBPcGVuQUkvQW50aHJvcGljIOyalOyyreydgCDqsIEgcHJvdmlkZXIgZGlzcGF0Y2hlciDroZzrp4wg7Iuk7ZaJXG4gKiAtIFF1b3RhRXJyb3Ig64qUIOq3uOuMgOuhnCDsg4HsnIQg7KCE7YyMXG4gKiAtIGRpc3BhdGNoZXIg66+47KSA67mE64qUIOq4sOuPmSDspJEoNTAzKS/stIjquLDtmZQg7Iuk7YyoKDUwMCnroZwg6rWs67aE7ZW0IOuNmOynhOuLpFxuICovXG5cbmltcG9ydCB7IEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sIFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHR5cGUgQW50aHJvcGljRGlzcGF0Y2hlciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVGZW5jZVN0cmlwVHJhbnNmb3JtIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvZmVuY2Utc3RyaXBcIjtcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQge1xuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIFN0cmVhbUNhbGxiYWNrcyxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9wcm92aWRlci10eXBlc1wiO1xuaW1wb3J0IHtcbiAgcGFyc2VBbmRWYWxpZGF0ZUNhbGxlclNjaGVtYXMsXG4gIHNlcmlhbGl6ZUFuZFZhbGlkYXRlRGlzcGF0Y2hTY2hlbWEsXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBzdHJpY3RpZnkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9zdHJpY3RpZmllclwiO1xuaW1wb3J0IHsgdHlwZSBPcGVuQUlEaXNwYXRjaGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5TdWJzZXRBIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGRlY2lkZUNvbnZSb3V0aW5nLCBpc3N1ZUNvbnZDb250ZXh0IH0gZnJvbSBcIi4vY29udi1yb3V0aW5nXCI7XG5pbXBvcnQge1xuICBtYXNrVG9rZW4sXG4gIFByb2Nlc3NFcnJvcixcbiAgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgdHlwZSBRdWVyeUlucHV0LFxuICB0eXBlIFF1ZXJ5T3V0cHV0LFxuICB0eXBlIFRva2VuU3RhdHMsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBjb21wb3NlU3lzdGVtV2l0aFNjaGVtYUNvbnRyYWN0IH0gZnJvbSBcIi4vc2NoZW1hLXByb21wdFwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNjcmliZXIgfSBmcm9tIFwiLi90b2tlbi1zdWJzY3JpYmVyXCI7XG5pbXBvcnQgeyBhcHBseVRvb2xDYWxsRW11bGF0aW9uIH0gZnJvbSBcIi4vdG9vbC1lbXVsYXRpb25cIjtcbmltcG9ydCB7IGJ1aWxkVG9vbENhbGxTY2hlbWEgfSBmcm9tIFwiLi90b29sLWVtdWxhdGlvbi1zY2hlbWFcIjtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxRdWVyeUlucHV0ID0gUXVlcnlJbnB1dCAmIHtcbiAgcHJlZmVycmVkVG9rZW5JZD86IG51bWJlcjtcbiAgcmVxdWlyZVByZWZlcnJlZFRva2VuPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBRZ3JpZERpc3BhdGNoZXJDbGFzcyB7XG4gIHRva2VucyA9IG5ldyBNYXA8bnVtYmVyLCBUb2tlblN1YnNldEE+KCk7XG5cbiAgLy8g7ZSE66Gc7IS47IqkIOyLnOyekSDsnbTtm4Qg7JmE66OM65CcIHByb3ZpZGVyIGdlbmVyYXRpb24g7IiYLiDsi6TtjKgv7KSR6rCEIOyLnOuPhOuKlCDsoJzsmbjtlZjrqbAsXG4gIC8vIO2bhOyGjSB0b29sIHR1cm7rj4Qg7ZWcIGdlbmVyYXRpb27snLzroZwg7IS864ukLiDrj5nrqoUg7Yag7YGw7J2AIHByb3ZpZGVy67OE66GcIOu2hOumrO2VnOuLpC5cbiAgcHJpdmF0ZSByZXF1ZXN0Q291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAvLyBzb25hbXUuY29uZmlnIG9uU3RhcnQg7JeQ7IScIOyymOumrO2VmOuKlCDrs4DsiJhcbiAgc3Vic2NyaWJlcjogVG9rZW5TdWJzY3JpYmVyIHwgbnVsbCA9IG51bGw7XG4gIG9wZW5haURpc3BhdGNoZXI6IE9wZW5BSURpc3BhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgYW50aHJvcGljRGlzcGF0Y2hlcjogQW50aHJvcGljRGlzcGF0Y2hlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBwcm92aWRlciDrs4Qg6riw64+ZIOyDge2DnC4gZGlzcGF0Y2hlciDqsIAg7JeG64qUIOydtOycoOulvCDqtazrtoTtlZjquLAg7JyE7ZW0IO2VhOyalO2VmOuLpCDigJRcbiAgICogSFRUUCDrpqzsiqTri53snYAgZGlzcGF0Y2hlciDspIDruYTrs7Tri6Qg66i87KCAIOyXtOumrOuvgOuhnChzb25hbXUuY29uZmlnIG9uU3RhcnQpLFxuICAgKiDqt7gg7IKs7J20IOuTpOyWtOyYqCDsmpTssq3snYAgXCLsnqDsi5wg7ZuEIOuQmOuKlFwiIOyDge2DnOyZgCBcIuyerOyLnOuPhO2VtOuPhCDslYgg65CY64qUXCIg7IOB7YOc6rCAIOuLpOultOuLpC5cbiAgICpcbiAgICogLSBgc3RhcnRpbmdgOiBwcm92aWRlciDthqDtgbDCt+ufsO2DgOyehCDstIjquLDtmZQg7KSRIOKGkiDsnqzsi5zrj4Qg6rCA64qlXG4gICAqIC0gYHJlYWR5YDog7KCV7IOBXG4gICAqIC0gYGZhaWxlZGA6IHN0YXJ0KCkg6rCAIOyYiOyZuOuhnCDrgZ3rgqgg4oaSIOyerOyLnOuPhO2VtOuPhCDqsJnsnYAg6rKw6rO8XG4gICAqL1xuICBzdGFydHVwU3RhdGU6IFJlY29yZDxcIm9wZW5haVwiIHwgXCJhbnRocm9waWNcIiwgUHJvdmlkZXJTdGFydHVwU3RhdGU+ID0ge1xuICAgIG9wZW5haTogXCJzdGFydGluZ1wiLFxuICAgIGFudGhyb3BpYzogXCJzdGFydGluZ1wiLFxuICB9O1xuXG4gIC8qKlxuICAgKiBkaXNwYXRjaGVyIOqwgCDspIDruYTrkJjsp4Ag7JWK7JWY7J2EIOuVjCDrjZjsp4gg7JiI7Jm466W8IOunjOuToOuLpC5cbiAgICpcbiAgICog6riw64+ZIOykkeydtOuptCA1MDMoK1JldHJ5LUFmdGVyKSDsnLzroZwg7J6s7Iuc64+EIOqwgOuKpe2VqOydhCDslYzrpqzqs6AsIOy0iOq4sO2ZlOqwgCDsi6TtjKjroZwg64Gd64Ks7Jy866m0XG4gICAqIDUwMCDsnLzroZwg7J6s7Iuc64+E6rCAIOustOydmOuvuO2VqOydhCDslYzrprDri6QuIOydtOyghOyXkOuKlCDrkZgg64ukIFF1b3RhRXJyb3Ig7JiA64qU642wLCDsv7zthLAg7IaM7KeE7J20XG4gICAqIOyVhOuLjCDsg4Htg5zrpbwg6re466CH6rKMIO2RnO2YhO2VmOuptCDtmLjstpzsnpDqsIAg7Yag7YGwIOusuOygnOuhnCDsmKTtlbTtlZjqs6Ag7J6s7Iuc64+EIO2MkOuLqOuPhCDrqrsg7ZWc64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBub3RSZWFkeUVycm9yKHByb3ZpZGVyOiBcIm9wZW5haVwiIHwgXCJhbnRocm9waWNcIik6IEVycm9yIHtcbiAgICBjb25zdCBsYWJlbCA9IHByb3ZpZGVyID09PSBcIm9wZW5haVwiID8gXCJPcGVuQUlcIiA6IFwiQW50aHJvcGljXCI7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnR1cFN0YXRlW3Byb3ZpZGVyXSA9PT0gXCJmYWlsZWRcIlxuICAgICAgPyBuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbihTRChcInFncmlkLmRpc3BhdGNoZXJGYWlsZWRcIikobGFiZWwpKVxuICAgICAgOiBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwicWdyaWQuZGlzcGF0Y2hlclN0YXJ0aW5nXCIpKGxhYmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZENvbXBsZXRlZChwcm92aWRlcjogc3RyaW5nLCB0b2tlbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGAke3Byb3ZpZGVyfVxcMCR7dG9rZW5OYW1lfWA7XG4gICAgdGhpcy5yZXF1ZXN0Q291bnRzLnNldChrZXksICh0aGlzLnJlcXVlc3RDb3VudHMuZ2V0KGtleSkgPz8gMCkgKyAxKTtcbiAgfVxuXG4gIC8vIFRva2VuU3Vic2NyaWJlciDsvZzrsLEg4oCUIOy6kOyLnCBtdXRhdGlvblxuICB1cHNlcnRDYWNoZShpZDogbnVtYmVyLCByb3c6IFRva2VuU3Vic2V0QSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLnNldChpZCwgcm93KTtcbiAgfVxuXG4gIHJlbW92ZUNhY2hlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRva2Vucy5kZWxldGUoaWQpO1xuICB9XG5cbiAgcmVwbGFjZUNhY2hlKHJvd3M6IFRva2VuU3Vic2V0QVtdKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMgPSBuZXcgTWFwKHJvd3MubWFwKChyKSA9PiBbci5pZCwgcl0pKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IFRva2VuU3RhdHNbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnRva2Vucy52YWx1ZXMoKV0ubWFwKChyKSA9PiAoe1xuICAgICAgdG9rZW46IG1hc2tUb2tlbihnZXRBY2Nlc3NUb2tlbihyLmNyZWRlbnRpYWxzKSksXG4gICAgICBuYW1lOiByLm5hbWUsXG4gICAgICBwcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIHJlcXVlc3RzOiB0aGlzLnJlcXVlc3RDb3VudHMuZ2V0KGAke3IucHJvdmlkZXJ9XFwwJHtyLm5hbWV9YCkgPz8gMCxcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBxdWVyeShpbnB1dDogSW50ZXJuYWxRdWVyeUlucHV0LCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxRdWVyeU91dHB1dD4ge1xuICAgIGNvbnN0IHJvdXRlID0gcGFyc2VQcm92aWRlclJvdXRlKGlucHV0Lm1vZGVsKTtcbiAgICBjb25zdCBvdXRwdXRTY2hlbWEgPSBidWlsZEFuZFZhbGlkYXRlU3RyaWN0T3V0cHV0U2NoZW1hKGlucHV0LCByb3V0ZS5wcm92aWRlcik7XG4gICAgLy8gYW5zd2VyIOyduOy9lOuUqSDtjJDsoJU6IGpzb25TY2hlbWEg7J6I7Jy866m0IOyCrOyaqeyekCDsiqTtgqTrp4ggSlNPTiwg7JeG7Jy866m0IO2PieusuCBzdHJpbmcuIDTqsJwg67Cp7LacIOyngOygkOydtCDqs7XsnKAuXG4gICAgY29uc3QgYW5zd2VyS2luZCA9IGlucHV0Lmpzb25TY2hlbWEgPyAoXCJqc29uXCIgYXMgY29uc3QpIDogKFwidGV4dFwiIGFzIGNvbnN0KTtcblxuICAgIC8vIHByb3ZpZGVyIHByZWZpeCByb3V0aW5nOiAnb3BlbmFpL2dwdC01LjQnIOKGkiBPcGVuQUlEaXNwYXRjaGVyXG4gICAgaWYgKHJvdXRlLnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBpZiAoIXRoaXMub3BlbmFpRGlzcGF0Y2hlcikgdGhyb3cgdGhpcy5ub3RSZWFkeUVycm9yKFwib3BlbmFpXCIpO1xuXG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGRlY2lkZUNvbnZSb3V0aW5nKGlucHV0LCB7XG4gICAgICAgIGRpcmVjdE9wZW5BSTogdHJ1ZSxcbiAgICAgICAgbW9kZWxOYW1lc3BhY2U6IGBvcGVuYWkvJHtyb3V0ZS5tb2RlbH1gLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5haURpc3BhdGNoZXIuZ2VuZXJhdGUoe1xuICAgICAgICBtb2RlbDogcm91dGUubW9kZWwsXG4gICAgICAgIHN5c3RlbVByb21wdDogaW5wdXQuc3lzdGVtLFxuICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgIGVmZm9ydDogaW5wdXQuZWZmb3J0LFxuICAgICAgICB2ZXJib3NpdHk6IGlucHV0LnZlcmJvc2l0eSxcbiAgICAgICAgcmVhc29uaW5nU3VtbWFyeTogaW5wdXQucmVhc29uaW5nU3VtbWFyeSxcbiAgICAgICAgc2VydmljZVRpZXI6IGlucHV0LnNlcnZpY2VUaWVyLFxuICAgICAgICB0aW1lb3V0TXM6IGlucHV0LnRpbWVvdXQsXG4gICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgIHByb21wdENhY2hlS2V5OiBpbnB1dC5pbWFnZUdlbmVyYXRpb24gPyB1bmRlZmluZWQgOiBkZWNpc2lvbi5wcm9tcHRDYWNoZUtleSxcbiAgICAgICAgcHJlZmVycmVkVG9rZW5JZDpcbiAgICAgICAgICBpbnB1dC5wcmVmZXJyZWRUb2tlbklkID8/IChpbnB1dC5pbWFnZUdlbmVyYXRpb24gPyB1bmRlZmluZWQgOiBkZWNpc2lvbi5wcmVmZXJyZWRUb2tlbklkKSxcbiAgICAgICAgcmVxdWlyZVByZWZlcnJlZFRva2VuOiBpbnB1dC5yZXF1aXJlUHJlZmVycmVkVG9rZW4sXG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBpbWFnZUdlbmVyYXRpb246IGlucHV0LmltYWdlR2VuZXJhdGlvbixcbiAgICAgICAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogaW5wdXQuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWNvcmRDb21wbGV0ZWQoXCJvcGVuYWlcIiwgcmVzdWx0LnRva2VuTmFtZSk7XG5cbiAgICAgIC8vIOydtOuvuOyngCDsmpTssq3snYAgY29sZC1vbmx5KFI4KeudvCDsnqzsgqzsmqkg7KKM7ZGc66W8IOuwnOq4ie2VmOyngCDslYrripTri6QuIOyijO2RnOulvCDsi6TsnLzrqbRcbiAgICAgIC8vIHNlc3Npb25LZXkg7IaM67mE7J6Q7J2YIHdhcm0g7KKM7ZGc66W8IOyjveydgCDsooztkZzroZwg642u7Ja07I2oIOuLpOydjCDthY3siqTtirggdHVybiDsnbQgY29sZCDroZwg65ao7Ja07KeE64ukLlxuICAgICAgY29uc3QgY29vcmQgPSBpbnB1dC5pbWFnZUdlbmVyYXRpb25cbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBpc3N1ZUNvbnZDb250ZXh0KHJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24sIHJlc3VsdC50aHJlYWRDb29yZC53b3JrZXJJZCk7XG5cbiAgICAgIHJldHVybiBhcHBseVRvb2xDYWxsRW11bGF0aW9uKHRvRW11bGF0aW9uUmVzdWx0KHJlc3VsdCksIGlucHV0LnRvb2xzLCB7XG4gICAgICAgIHRocmVhZENvb3JkOiBjb29yZCxcbiAgICAgICAgaW1hZ2VzOiByZXN1bHQuaW1hZ2VzLFxuICAgICAgICBhbnN3ZXJLaW5kLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChyb3V0ZS5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgaWYgKCF0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIpIHRocm93IHRoaXMubm90UmVhZHlFcnJvcihcImFudGhyb3BpY1wiKTtcblxuICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIuZ2VuZXJhdGUoe1xuICAgICAgICAvLyBBbnRocm9waWNEaXNwYXRjaGVyIOuCtOu2gOyXkOyEnCDslYzslYTshJwgcHJvdmlkZXIgcHJlZml4IOulvCBjYW5vbmljYWwgbW9kZWwg66GcIOygleq3nO2ZlO2VqFxuICAgICAgICBtb2RlbDogaW5wdXQubW9kZWwsXG4gICAgICAgIC8vIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYAgLS1qc29uLXNjaGVtYSDrjIDsi6Agc3lzdGVtIOunkOuvuOydmCDthY3siqTtirjroZwg7JWI64K07ZWc64ukKFNPTi01MzIpLlxuICAgICAgICAvLyBvdXRwdXRTY2hlbWEg64qUIOyghOuLrO2VmOyngCDslYrripTri6Qg4oCUIGFudGhyb3BpYyDsl5DshJwg7ZWt7IOBIHVuZGVmaW5lZChVMSnsnbTrqbAsXG4gICAgICAgIC8vIENDIOuhnCDqsIDripQgLS1qc29uLXNjaGVtYSDssYTrhJAg7J6Q7LK06rCAIOuLq+2YgCDsnojsnYzsnYQg7Jes6riw7IScIOuqheyLnO2VnOuLpC5cbiAgICAgICAgc3lzdGVtUHJvbXB0OiBjb21wb3NlU3lzdGVtV2l0aFNjaGVtYUNvbnRyYWN0KGlucHV0LnN5c3RlbSwgaW5wdXQpLFxuICAgICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgICAgdGltZW91dE1zOiBpbnB1dC50aW1lb3V0LFxuICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgY29sZElucHV0OiBkZWNpc2lvbi5jb2xkSW5wdXQsXG4gICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgcHJlZmVycmVkVG9rZW5JZDogaW5wdXQucHJlZmVycmVkVG9rZW5JZCxcbiAgICAgICAgaW1hZ2VHZW5lcmF0aW9uOiBpbnB1dC5pbWFnZUdlbmVyYXRpb24sXG4gICAgICAgIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM6IGlucHV0LmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVjb3JkQ29tcGxldGVkKFwiYW50aHJvcGljXCIsIHJlc3VsdC50b2tlbk5hbWUpO1xuXG4gICAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdChyZXN1bHQpLCBpbnB1dC50b29scywge1xuICAgICAgICB0aHJlYWRDb29yZDogaXNzdWVDb252Q29udGV4dChyZXN1bHQudGhyZWFkQ29vcmQsIGRlY2lzaW9uKSxcbiAgICAgICAgYW5zd2VyS2luZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IGRpcmVjdExsbUFwaUZhbGxiYWNrTm90SW1wbGVtZW50ZWQoaW5wdXQpO1xuICB9XG5cbiAgYXN5bmMgcXVlcnlTdHJlYW0oXG4gICAgaW5wdXQ6IEludGVybmFsUXVlcnlJbnB1dCxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzPFF1ZXJ5T3V0cHV0PixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZSA9IHBhcnNlUHJvdmlkZXJSb3V0ZShpbnB1dC5tb2RlbCk7XG4gICAgY29uc3Qgb3V0cHV0U2NoZW1hID0gYnVpbGRBbmRWYWxpZGF0ZVN0cmljdE91dHB1dFNjaGVtYShpbnB1dCwgcm91dGUucHJvdmlkZXIpO1xuICAgIC8vIGFuc3dlciDsnbjsvZTrlKkg7YyQ7KCVOiBqc29uU2NoZW1hIOyeiOycvOuptCDsgqzsmqnsnpAg7Iqk7YKk66eIIEpTT04sIOyXhuycvOuptCDtj4nrrLggc3RyaW5nLiA06rCcIOuwqey2nCDsp4DsoJDsnbQg6rO17JygLlxuICAgIGNvbnN0IGFuc3dlcktpbmQgPSBpbnB1dC5qc29uU2NoZW1hID8gKFwianNvblwiIGFzIGNvbnN0KSA6IChcInRleHRcIiBhcyBjb25zdCk7XG5cbiAgICBpZiAocm91dGUucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyB0aGlzLm5vdFJlYWR5RXJyb3IoXCJvcGVuYWlcIik7XG5cbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjaWRlQ29udlJvdXRpbmcoaW5wdXQsIHtcbiAgICAgICAgZGlyZWN0T3BlbkFJOiB0cnVlLFxuICAgICAgICBtb2RlbE5hbWVzcGFjZTogYG9wZW5haS8ke3JvdXRlLm1vZGVsfWAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMub3BlbmFpRGlzcGF0Y2hlci5nZW5lcmF0ZVN0cmVhbShcbiAgICAgICAge1xuICAgICAgICAgIG1vZGVsOiByb3V0ZS5tb2RlbCxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiBpbnB1dC5lZmZvcnQsXG4gICAgICAgICAgdmVyYm9zaXR5OiBpbnB1dC52ZXJib3NpdHksXG4gICAgICAgICAgcmVhc29uaW5nU3VtbWFyeTogaW5wdXQucmVhc29uaW5nU3VtbWFyeSxcbiAgICAgICAgICBzZXJ2aWNlVGllcjogaW5wdXQuc2VydmljZVRpZXIsXG4gICAgICAgICAgdGltZW91dE1zOiBpbnB1dC50aW1lb3V0LFxuICAgICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgICBwcm9tcHRDYWNoZUtleTogZGVjaXNpb24ucHJvbXB0Q2FjaGVLZXksXG4gICAgICAgICAgcHJlZmVycmVkVG9rZW5JZDogaW5wdXQucHJlZmVycmVkVG9rZW5JZCA/PyBkZWNpc2lvbi5wcmVmZXJyZWRUb2tlbklkLFxuICAgICAgICAgIHJlcXVpcmVQcmVmZXJyZWRUb2tlbjogaW5wdXQucmVxdWlyZVByZWZlcnJlZFRva2VuLFxuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICAgIC8vIOydtOuvuOyngCDtlIzrnpjqt7jrpbwg7KCE64us7ZW07JW8IGdlbmVyYXRlU3RyZWFtIOydmCBub24tc3RyZWFtIOyghOyaqSDqsbDrtoAoUjIp6rCAIOuwnOuPme2VnOuLpC5cbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb246IGlucHV0LmltYWdlR2VuZXJhdGlvbixcbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBpbnB1dC5pbWFnZUdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25EZWx0YTogY2Iub25EZWx0YSxcbiAgICAgICAgICBvblRocmVhZElkOiBjYi5vblRocmVhZElkLFxuICAgICAgICAgIG9uVHVybklkOiBjYi5vblR1cm5JZCxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAodHVyblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRDb21wbGV0ZWQoXCJvcGVuYWlcIiwgdHVyblJlc3VsdC50b2tlbk5hbWUpO1xuICAgICAgICAgICAgY2Iub25Db21wbGV0ZShcbiAgICAgICAgICAgICAgYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdCh0dXJuUmVzdWx0KSwgaW5wdXQudG9vbHMsIHtcbiAgICAgICAgICAgICAgICB0aHJlYWRDb29yZDogaXNzdWVDb252Q29udGV4dChcbiAgICAgICAgICAgICAgICAgIHR1cm5SZXN1bHQudGhyZWFkQ29vcmQsXG4gICAgICAgICAgICAgICAgICBkZWNpc2lvbixcbiAgICAgICAgICAgICAgICAgIHR1cm5SZXN1bHQudGhyZWFkQ29vcmQud29ya2VySWQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhbnN3ZXJLaW5kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiBjYi5vbkVycm9yLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHJvdXRlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgICBpZiAoIXRoaXMuYW50aHJvcGljRGlzcGF0Y2hlcikgdGhyb3cgdGhpcy5ub3RSZWFkeUVycm9yKFwiYW50aHJvcGljXCIpO1xuXG4gICAgICAvLyDqs4Tslb0o7Iqk7YKk66eIL2VudmVsb3BlKeydtCDso7zsnoXrkJwg7JqU7LKt7J2YIOuNuO2DgOyXkOyEnCDsvZTrk5ztjpzsiqTrpbwg67KX6ri064ukKFNPTi01MzIpLlxuICAgICAgLy8g67mE7Iqk7Yq466a8IOy1nOyihSDthY3siqTtirjripQgc3RyZWFtLWpzb24tYWRhcHRlciDsnZggc3RyaXBGZW5jZXMg6rCAIOqwmeydgCDsi5zrp6jti7HsnLzroZxcbiAgICAgIC8vIOyymOumrO2VmOuvgOuhnCDrjbjtg4Ag7Jew6rKw6rO8IGRvbmUudGV4dCDqsIAg7Ja06riL64KY7KeAIOyViuuKlOuLpC4g7J2867CYIO2FjeyKpO2KuCDsmpTssq3snYAg66y067OA6rK9LlxuICAgICAgY29uc3QgaGFzU2NoZW1hQ29udHJhY3QgPSBpbnB1dC5qc29uU2NoZW1hICE9PSB1bmRlZmluZWQgfHwgQm9vbGVhbihpbnB1dC50b29scz8ubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGZlbmNlU3RyaXAgPSBoYXNTY2hlbWFDb250cmFjdCA/IGNyZWF0ZUZlbmNlU3RyaXBUcmFuc2Zvcm0oKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVtaXREZWx0YSA9IGZlbmNlU3RyaXBcbiAgICAgICAgPyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYWZlID0gZmVuY2VTdHJpcC5wdXNoKHRleHQpO1xuICAgICAgICAgICAgaWYgKHNhZmUpIGNiLm9uRGVsdGEoc2FmZSk7XG4gICAgICAgICAgfVxuICAgICAgICA6IGNiLm9uRGVsdGE7XG5cbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjaWRlQ29udlJvdXRpbmcoaW5wdXQpO1xuICAgICAgYXdhaXQgdGhpcy5hbnRocm9waWNEaXNwYXRjaGVyLmdlbmVyYXRlU3RyZWFtKFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgICAgICAgIC8vIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYAgLS1qc29uLXNjaGVtYSDrjIDsi6Agc3lzdGVtIOunkOuvuOydmCDthY3siqTtirjroZwg7JWI64K07ZWc64ukKFNPTi01MzIpXG4gICAgICAgICAgc3lzdGVtUHJvbXB0OiBjb21wb3NlU3lzdGVtV2l0aFNjaGVtYUNvbnRyYWN0KGlucHV0LnN5c3RlbSwgaW5wdXQpLFxuICAgICAgICAgIGVmZm9ydDogaW5wdXQuZWZmb3J0LFxuICAgICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgICBwcmVmZXJyZWRUb2tlbklkOiBpbnB1dC5wcmVmZXJyZWRUb2tlbklkLFxuICAgICAgICAgIHRpbWVvdXRNczogaW5wdXQudGltZW91dCxcbiAgICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb246IGlucHV0LmltYWdlR2VuZXJhdGlvbixcbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBpbnB1dC5pbWFnZUdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25EZWx0YTogZW1pdERlbHRhLFxuICAgICAgICAgIG9uVGhyZWFkSWQ6IGNiLm9uVGhyZWFkSWQsXG4gICAgICAgICAgb25Db21wbGV0ZTogKHR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkQ29tcGxldGVkKFwiYW50aHJvcGljXCIsIHR1cm5SZXN1bHQudG9rZW5OYW1lKTtcbiAgICAgICAgICAgIC8vIO2ZgOuTnOuwsSDsnpTsl6wo64ur64qUIO2OnOyKpOqwgCDslYTri4jsl4jrjZggdGFpbCnrpbwgZG9uZSDsoITsl5Ag66eI7KCAIOuwqey2nO2VnOuLpCDigJRcbiAgICAgICAgICAgIC8vIOuNuO2DgOulvCDsobDrpr3tlZjripQg7YG065287J207Ja47Yq4KEVudmVsb3BlU3RyZWFtUGFyc2VyIOuTsSnsnZgg66y07IaQ7IukIOuztOyepS5cbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBmZW5jZVN0cmlwPy5mbHVzaCgpO1xuICAgICAgICAgICAgaWYgKHJlc3QpIGNiLm9uRGVsdGEocmVzdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzc3VlZENvb3JkID0gaXNzdWVDb252Q29udGV4dCh0dXJuUmVzdWx0LnRocmVhZENvb3JkLCBkZWNpc2lvbik7XG4gICAgICAgICAgICBjYi5vbkNvbXBsZXRlKFxuICAgICAgICAgICAgICBhcHBseVRvb2xDYWxsRW11bGF0aW9uKHRvRW11bGF0aW9uUmVzdWx0KHR1cm5SZXN1bHQpLCBpbnB1dC50b29scywge1xuICAgICAgICAgICAgICAgIHRocmVhZENvb3JkOiBpc3N1ZWRDb29yZCxcbiAgICAgICAgICAgICAgICBhbnN3ZXJLaW5kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiBjYi5vbkVycm9yLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBkaXJlY3RMbG1BcGlGYWxsYmFja05vdEltcGxlbWVudGVkKGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVByb3ZpZGVyUm91dGUobW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsOiBzdHJpbmcgfSB7XG4gIGlmICghbW9kZWw/LmluY2x1ZGVzKFwiL1wiKSkge1xuICAgIHJldHVybiB7IG1vZGVsOiBtb2RlbCA/PyBcIlwiIH07XG4gIH1cblxuICBjb25zdCBbcHJvdmlkZXIsIHJvdXRlZE1vZGVsXSA9IG1vZGVsLnNwbGl0KFwiL1wiLCAyKTtcbiAgaWYgKCFwcm92aWRlciB8fCAhcm91dGVkTW9kZWwpIHRocm93IG5ldyBQcm9jZXNzRXJyb3IoXCJ1bmtub3duIG1vZGVsXCIpO1xuICByZXR1cm4geyBwcm92aWRlciwgbW9kZWw6IHJvdXRlZE1vZGVsIH07XG59XG5cbi8vIHFncmlkIHByb3ZpZGVyIGRpc3BhdGNoZXIg7JeQ7IScIOyymOumrO2VmOyngCDslYrripQg66qo64247J2AIO2Wpe2bhCDsp4HsoJEgTExNIEFQSSDtmLjstpwg7KeA7KCQ7Jy866GcIOuztOuCuOuLpC5cbmZ1bmN0aW9uIGRpcmVjdExsbUFwaUZhbGxiYWNrTm90SW1wbGVtZW50ZWQoaW5wdXQ6IFF1ZXJ5SW5wdXQpOiBQcm9jZXNzRXJyb3Ige1xuICByZXR1cm4gbmV3IFByb2Nlc3NFcnJvcihcbiAgICBgRGlyZWN0IExMTSBBUEkgZmFsbGJhY2sgbm90IGltcGxlbWVudGVkIGZvciBtb2RlbDogJHtpbnB1dC5tb2RlbCA/PyBcIjxkZWZhdWx0PlwifWAsXG4gICk7XG59XG5cbi8vIOuqqOuToCBwcm92aWRlcihPcGVuQUkvQW50aHJvcGljKeqwgCDrj5nsnbztlZjqsowgc3RyaWN0IG91dHB1dCBzY2hlbWEg66W8IOyTtOuLpC5cbi8vXG4vLyBTT04tNDk1IOq1kO2biDog7ZWc65WMIEFudGhyb3BpYyByb3V0ZSDrp4wgcmVxdWlyZWQg66W8IOygnOqxsChvcHRpb25hbGl6ZSntlbQgcGFydGlhbC9yZWplY3RlZCBhdHRlbXB0IOqwgFxuLy8g7ISe7Jes64+EIO2GteqzvO2VmOqyjCDtlojsnLzrgpgsIOyLpOy4oSDqsrDqs7wg6re46rKMIOyYpO2eiOugpCBcIuuqqOuNuOydtCDruYTripQg7ZWE65Oc66W8IO2CpOynuCDsg53rnrVcIu2VmOuPhOuhnSDsnKDrj4Ttlojri6Rcbi8vIChyZXF1aXJlZCDsgrTrprAgc2NoZW1hIOuKlCDriITrnb0gMCwgbG9vc2Ug64qUIOuIhOudvSDri6TrsJwpLiBzdHJpY3Qg66GcIOuRkOuptCDrqqjrjbjsnbQg67mg7KeQ7JeG7J20IOyxhOyasOqzoCxcbi8vIOuTnOusvOqyjCDslrTqsqggcHJvdmlkZXIgcmV0cnkg7JiI7IKw7J2EIOyGjOynhO2VnCDruYTsoJXsg4Eg7KKF66OM64+EIOygleynge2VnCDsl5Drn6zroZwg67Cb7JWE7KSA64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RyaWN0T3V0cHV0U2NoZW1hKFxuICBpbnB1dDogUGljazxRdWVyeUlucHV0LCBcInRvb2xzXCIgfCBcImpzb25TY2hlbWFcIj4sXG4gIHByb3ZpZGVyPzogc3RyaW5nLFxuKTogSnNvblZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb3V0cHV0U2NoZW1hID0gYnVpbGRSYXdPdXRwdXRTY2hlbWEoaW5wdXQpO1xuXG4gIHJldHVybiBvdXRwdXRTY2hlbWFcbiAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0sIHsgcHJvdmlkZXIgfSkgYXMgSnNvblZhbHVlKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbmRWYWxpZGF0ZVN0cmljdE91dHB1dFNjaGVtYShcbiAgaW5wdXQ6IFBpY2s8UXVlcnlJbnB1dCwgXCJtb2RlbFwiIHwgXCJ0b29sc1wiIHwgXCJqc29uU2NoZW1hXCI+LFxuICBwcm92aWRlciA9IHBhcnNlUHJvdmlkZXJSb3V0ZShpbnB1dC5tb2RlbCkucHJvdmlkZXIsXG4pOiBKc29uVmFsdWUgfCB1bmRlZmluZWQge1xuICAvLyBhbnRocm9waWMoU09OLTUzMik6IENDIOyXkCAtLWpzb24tc2NoZW1hIOulvCDsoITri6ztlZjsp4Ag7JWK64qU64ukIOKAlCDqsJXsoJwg7JeG64qUIOyCrO2bhCDssYTsoJDsnbRcbiAgLy8g7IaM67mE7J6QIOydmOuPhChudWxsaXNoIOyDneuetSDrk7Ep7JmAIOy2qeuPjO2VtCBDQyDrgrTrtoAg7J6s7Iuc64+EIOujqO2UhOulvCDrsJztmZTsi5zsvLDri6Qo7JmV67O1IDJ+NO2ajCxcbiAgLy8gNC43fjkuMeuwsCDstpzroKUg7LKt6rWsIOyLpOy4oSkuIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYAg7ZSE66Gs7ZSE7Yq4IO2FjeyKpO2KuOuhnCDslYjrgrTtlZjqs6Ag7YyQ7KCV7J2AXG4gIC8vIOyGjOu5hOyekCh6b2QpL3BhcnNlRW52ZWxvcGUg6rCAIOunoeuKlOuLpC4g65Sw65287IScIHN0cmljdCDrs4DtmZjCt2FyZ3YgNjRLaUIg7KCc7ZWcIOyXhuydtCDsiJjsi6BcbiAgLy8g7JuQ7ZiV7J2YIOq1rOusuMK367O17J6h64+EKOyghOyXrSA1MTJLaUIg7ZWc64+EKeunjCDqsoDspp3tlbQgY2FsbGVyLWZhdWx0IOulvCDsobDquLDsl5Ag64+M66Ck7KSA64ukLlxuICBpZiAocHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpIHtcbiAgICBwYXJzZUFuZFZhbGlkYXRlQ2FsbGVyU2NoZW1hcyhpbnB1dCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dFNjaGVtYSA9IGJ1aWxkU3RyaWN0T3V0cHV0U2NoZW1hKGlucHV0LCBwcm92aWRlcik7XG4gIHNlcmlhbGl6ZUFuZFZhbGlkYXRlRGlzcGF0Y2hTY2hlbWEob3V0cHV0U2NoZW1hLCBwcm92aWRlcik7XG4gIHJldHVybiBvdXRwdXRTY2hlbWE7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmF3T3V0cHV0U2NoZW1hKFxuICBpbnB1dDogUGljazxRdWVyeUlucHV0LCBcInRvb2xzXCIgfCBcImpzb25TY2hlbWFcIj4sXG4pOiBKc29uVmFsdWUgfCB1bmRlZmluZWQge1xuICBjb25zdCBjYWxsZXJPdXRwdXRTY2hlbWEgPSBwYXJzZUFuZFZhbGlkYXRlQ2FsbGVyU2NoZW1hcyhpbnB1dCk7XG5cbiAgcmV0dXJuIGlucHV0LnRvb2xzPy5sZW5ndGhcbiAgICA/IGJ1aWxkVG9vbENhbGxTY2hlbWEoaW5wdXQudG9vbHMsIGNhbGxlck91dHB1dFNjaGVtYSlcbiAgICA6IGNhbGxlck91dHB1dFNjaGVtYTtcbn1cblxuLy8gR2VuZXJhdGVSZXN1bHQocHJvdmlkZXIgZGlzcGF0Y2hlciDsnZHri7Up66W8IGFwcGx5VG9vbENhbGxFbXVsYXRpb24g7J6F66ClIHNoYXBlIOuhnCDrp6TtlZHtlZzri6QuXG4vLyBPcGVuQUkvQW50aHJvcGljLCBxdWVyeS9xdWVyeVN0cmVhbSA0IOqyveuhnOqwgCDrj5nsnbztlZjqsowg7JO064ukLlxuLy8gQW50aHJvcGljIGFkYXB0ZXIg64qUIGNhY2hlIGNyZWF0aW9uIOydhCBpbnB1dFRva2VucyDsl5Ag7Y+s7ZWo7ZW0IO2RnOykgO2ZlO2VmOqzoCwg67OE64+EIO2VhOuTnOyXkOuPhCDrs7TsobTtlZzri6QuXG4vLyBwZXItcmVxdWVzdCBjb3N0IOuKlCBwcm92aWRlciDqsIAg7KSAIOqwkuydhCDsmrDshKAg7IKs7Jqp7ZWY6rOgLCDsl4bsnLzrqbQg6rO17Ya1IGNvc3Qg7ZWo7IiY66W8IOyTtOuLpC5cbmZ1bmN0aW9uIHRvRW11bGF0aW9uUmVzdWx0KFxuICByZXN1bHQ6IEdlbmVyYXRlUmVzdWx0LFxuKTogT21pdDxRdWVyeU91dHB1dCwgXCJjb250ZW50XCIgfCBcImZpbmlzaFJlYXNvblwiIHwgXCJydW5Db250ZXh0XCI+IHtcbiAgY29uc3QgaGFzUHJvdmlkZXJDb3N0ID0gcmVzdWx0LmNvc3RVc2QgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQuY29zdFVzZCA+IDA7XG4gIHJldHVybiB7XG4gICAgdGV4dDogcmVzdWx0LnRleHQsXG4gICAgdG9rZW5OYW1lOiByZXN1bHQudG9rZW5OYW1lLFxuICAgIG1vZGVsOiByZXN1bHQubW9kZWwsXG4gICAgcmVxdWVzdGVkTW9kZWw6IHJlc3VsdC5yZXF1ZXN0ZWRNb2RlbCxcbiAgICBtb2RlbEZhbGxiYWNrczogcmVzdWx0Lm1vZGVsRmFsbGJhY2tzLFxuICAgIHVzYWdlOiB7XG4gICAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dFRva2VucyxcbiAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICByZWFzb25pbmdfdG9rZW5zOiByZXN1bHQudXNhZ2UucmVhc29uaW5nT3V0cHV0VG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICB9LFxuICAgIGR1cmF0aW9uTXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgIHR0ZnRNczogcmVzdWx0LnR0ZnRNcyA/PyAwLFxuICAgIGNvc3RVc2Q6IGhhc1Byb3ZpZGVyQ29zdFxuICAgICAgPyByZXN1bHQuY29zdFVzZCFcbiAgICAgIDogY2FsY3VsYXRlQ29zdFVzZChyZXN1bHQubW9kZWwsIHtcbiAgICAgICAgICBpbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiByZXN1bHQudXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHJlc3VsdC51c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCxcbiAgICAgICAgfSksXG4gICAgY29zdFNvdXJjZTogaGFzUHJvdmlkZXJDb3N0ID8gXCJwcm92aWRlclwiIDogXCJwcmljaW5nX3RhYmxlXCIsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZERpc3BhdGNoZXIgPSBuZXcgUWdyaWREaXNwYXRjaGVyQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLElBQWEsdUJBQWIsTUFBa0M7Q0FDaEMseUJBQVMsSUFBSSxJQUEwQjtDQUl2QyxnQ0FBd0IsSUFBSSxJQUFvQjtDQUdoRCxhQUFxQztDQUNyQyxtQkFBNEM7Q0FDNUMsc0JBQWtEOzs7Ozs7Ozs7O0NBV2xELGVBQXFFO0VBQ25FLFFBQVE7RUFDUixXQUFXO0NBQ2I7Ozs7Ozs7O0NBU0EsY0FBc0IsVUFBeUM7RUFDN0QsTUFBTSxRQUFRLGFBQWEsV0FBVyxXQUFXO0VBQ2pELE9BQU8sS0FBSyxhQUFhLGNBQWMsV0FDbkMsSUFBSSw2QkFBNkIsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUNwRSxJ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
250
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBwcm92aWRlciDrnbzsmrDtjIXqs7wg7Yag7YGwIOy6kOyLnMK37Ya16rOELiDsupDsi5zripQgVG9rZW5TdWJzY3JpYmVy6rCAIOqwseyLoO2VnOuLpC5cblxuaW1wb3J0IHsgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiwgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgdHlwZSBBbnRocm9waWNEaXNwYXRjaGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUZlbmNlU3RyaXBUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9mZW5jZS1zdHJpcFwiO1xuaW1wb3J0IHsgZ2V0QWNjZXNzVG9rZW4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgY2FsY3VsYXRlQ29zdFVzZCB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL21vZGVsLWNvc3RcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXN1bHQsXG4gIHR5cGUgU3RyZWFtQ2FsbGJhY2tzLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyB0eXBlIEpzb25WYWx1ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQge1xuICBwYXJzZUFuZFZhbGlkYXRlQ2FsbGVyU2NoZW1hcyxcbiAgc2VyaWFsaXplQW5kVmFsaWRhdGVEaXNwYXRjaFNjaGVtYSxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vc2NoZW1hLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHN0cmljdGlmeSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3N0cmljdGlmaWVyXCI7XG5pbXBvcnQgeyB0eXBlIE9wZW5BSURpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL29wZW5haS9vcGVuYWktZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNldEEgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgZGVjaWRlQ29udlJvdXRpbmcsIGlzc3VlQ29udkNvbnRleHQgfSBmcm9tIFwiLi9jb252LXJvdXRpbmdcIjtcbmltcG9ydCB7XG4gIG1hc2tUb2tlbixcbiAgUHJvY2Vzc0Vycm9yLFxuICB0eXBlIFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICB0eXBlIFF1ZXJ5SW5wdXQsXG4gIHR5cGUgUXVlcnlPdXRwdXQsXG4gIHR5cGUgVG9rZW5TdGF0cyxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IGNvbXBvc2VTeXN0ZW1XaXRoU2NoZW1hQ29udHJhY3QgfSBmcm9tIFwiLi9zY2hlbWEtcHJvbXB0XCI7XG5pbXBvcnQgeyB0eXBlIFRva2VuU3Vic2NyaWJlciB9IGZyb20gXCIuL3Rva2VuLXN1YnNjcmliZXJcIjtcbmltcG9ydCB7IGFwcGx5VG9vbENhbGxFbXVsYXRpb24sIGlzVG9vbENhbGxFbnZlbG9wZSB9IGZyb20gXCIuL3Rvb2wtZW11bGF0aW9uXCI7XG5pbXBvcnQgeyBidWlsZFRvb2xDYWxsU2NoZW1hIH0gZnJvbSBcIi4vdG9vbC1lbXVsYXRpb24tc2NoZW1hXCI7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsUXVlcnlJbnB1dCA9IFF1ZXJ5SW5wdXQgJiB7XG4gIHByZWZlcnJlZFRva2VuSWQ/OiBudW1iZXI7XG4gIHJlcXVpcmVQcmVmZXJyZWRUb2tlbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgUWdyaWREaXNwYXRjaGVyQ2xhc3Mge1xuICB0b2tlbnMgPSBuZXcgTWFwPG51bWJlciwgVG9rZW5TdWJzZXRBPigpO1xuXG4gIC8vIO2UhOuhnOyEuOyKpCDsi5zsnpEg7J207ZuEIOyZhOujjOuQnCBwcm92aWRlciBnZW5lcmF0aW9uIOyImC4g7Iuk7YyoL+ykkeqwhCDsi5zrj4TripQg7KCc7Jm47ZWY66mwLFxuICAvLyDtm4Tsho0gdG9vbCB0dXJu64+EIO2VnCBnZW5lcmF0aW9u7Jy866GcIOyEvOuLpC4g64+Z66qFIO2GoO2BsOydgCBwcm92aWRlcuuzhOuhnCDrtoTrpqztlZzri6QuXG4gIHJlcXVlc3RDb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHN1YnNjcmliZXI6IFRva2VuU3Vic2NyaWJlciB8IG51bGwgPSBudWxsO1xuICBvcGVuYWlEaXNwYXRjaGVyOiBPcGVuQUlEaXNwYXRjaGVyIHwgbnVsbCA9IG51bGw7XG4gIGFudGhyb3BpY0Rpc3BhdGNoZXI6IEFudGhyb3BpY0Rpc3BhdGNoZXIgfCBudWxsID0gbnVsbDtcblxuICAvLyBIVFRQ6rCAIGRpc3BhdGNoZXLrs7Tri6Qg66i87KCAIOyXtOumrOuvgOuhnCDstIjquLDtmZQg7KSR6rO8IOy0iOq4sO2ZlCDsi6TtjKjrpbwg6rWs67aE7ZWc64ukLlxuICBzdGFydHVwU3RhdGU6IFJlY29yZDxcIm9wZW5haVwiIHwgXCJhbnRocm9waWNcIiwgUHJvdmlkZXJTdGFydHVwU3RhdGU+ID0ge1xuICAgIG9wZW5haTogXCJzdGFydGluZ1wiLFxuICAgIGFudGhyb3BpYzogXCJzdGFydGluZ1wiLFxuICB9O1xuXG4gIC8vIOy0iOq4sO2ZlCDspJHsl5DripQgNTAzICsgUmV0cnktQWZ0ZXIsIOy0iOq4sO2ZlCDsi6TtjKjsl5DripQgNTAw7J2EIOuwmO2ZmO2VnOuLpC5cbiAgbm90UmVhZHlFcnJvcihwcm92aWRlcjogXCJvcGVuYWlcIiB8IFwiYW50aHJvcGljXCIpOiBFcnJvciB7XG4gICAgY29uc3QgbGFiZWwgPSBwcm92aWRlciA9PT0gXCJvcGVuYWlcIiA/IFwiT3BlbkFJXCIgOiBcIkFudGhyb3BpY1wiO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0dXBTdGF0ZVtwcm92aWRlcl0gPT09IFwiZmFpbGVkXCJcbiAgICAgID8gbmV3IEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24oU0QoXCJxZ3JpZC5kaXNwYXRjaGVyRmFpbGVkXCIpKGxhYmVsKSlcbiAgICAgIDogbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihTRChcInFncmlkLmRpc3BhdGNoZXJTdGFydGluZ1wiKShsYWJlbCkpO1xuICB9XG5cbiAgcmVjb3JkQ29tcGxldGVkKHByb3ZpZGVyOiBzdHJpbmcsIHRva2VuTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gYCR7cHJvdmlkZXJ9XFwwJHt0b2tlbk5hbWV9YDtcbiAgICB0aGlzLnJlcXVlc3RDb3VudHMuc2V0KGtleSwgKHRoaXMucmVxdWVzdENvdW50cy5nZXQoa2V5KSA/PyAwKSArIDEpO1xuICB9XG5cbiAgcmVwbGFjZUNhY2hlKHJvd3M6IFRva2VuU3Vic2V0QVtdKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMgPSBuZXcgTWFwKHJvd3MubWFwKChyKSA9PiBbci5pZCwgcl0pKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IFRva2VuU3RhdHNbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnRva2Vucy52YWx1ZXMoKV0ubWFwKChyKSA9PiAoe1xuICAgICAgdG9rZW46IG1hc2tUb2tlbihnZXRBY2Nlc3NUb2tlbihyLmNyZWRlbnRpYWxzKSksXG4gICAgICBuYW1lOiByLm5hbWUsXG4gICAgICBwcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIHJlcXVlc3RzOiB0aGlzLnJlcXVlc3RDb3VudHMuZ2V0KGAke3IucHJvdmlkZXJ9XFwwJHtyLm5hbWV9YCkgPz8gMCxcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBxdWVyeShpbnB1dDogSW50ZXJuYWxRdWVyeUlucHV0LCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxRdWVyeU91dHB1dD4ge1xuICAgIGNvbnN0IHJvdXRlID0gcGFyc2VQcm92aWRlclJvdXRlKGlucHV0Lm1vZGVsKTtcbiAgICBjb25zdCBvdXRwdXRTY2hlbWEgPSBidWlsZEFuZFZhbGlkYXRlU3RyaWN0T3V0cHV0U2NoZW1hKGlucHV0LCByb3V0ZS5wcm92aWRlcik7XG4gICAgY29uc3QgYW5zd2VyS2luZCA9IGlucHV0Lmpzb25TY2hlbWEgPyAoXCJqc29uXCIgYXMgY29uc3QpIDogKFwidGV4dFwiIGFzIGNvbnN0KTtcblxuICAgIGlmIChyb3V0ZS5wcm92aWRlciA9PT0gXCJvcGVuYWlcIikge1xuICAgICAgaWYgKCF0aGlzLm9wZW5haURpc3BhdGNoZXIpIHRocm93IHRoaXMubm90UmVhZHlFcnJvcihcIm9wZW5haVwiKTtcblxuICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCwge1xuICAgICAgICBkaXJlY3RPcGVuQUk6IHRydWUsXG4gICAgICAgIG1vZGVsTmFtZXNwYWNlOiBgb3BlbmFpLyR7cm91dGUubW9kZWx9YCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vcGVuYWlEaXNwYXRjaGVyLmdlbmVyYXRlKHtcbiAgICAgICAgbW9kZWw6IHJvdXRlLm1vZGVsLFxuICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgb3V0cHV0U2NoZW1hLFxuICAgICAgICBzdG9wQWZ0ZXJPdXRwdXRNZXNzYWdlOiBpbnB1dC50b29scz8ubGVuZ3RoXG4gICAgICAgICAgPyAodGV4dCwgcGhhc2UpID0+IGlzVG9vbENhbGxFbnZlbG9wZSh0ZXh0LCBpbnB1dC50b29scyEsIGFuc3dlcktpbmQsIHBoYXNlKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB0aGlua2luZzogaW5wdXQudGhpbmtpbmcsXG4gICAgICAgIGVmZm9ydDogaW5wdXQudGhpbmtpbmcgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogaW5wdXQuZWZmb3J0LFxuICAgICAgICB2ZXJib3NpdHk6IGlucHV0LnZlcmJvc2l0eSxcbiAgICAgICAgcmVhc29uaW5nU3VtbWFyeTogaW5wdXQucmVhc29uaW5nU3VtbWFyeSxcbiAgICAgICAgc2VydmljZVRpZXI6IGlucHV0LnNlcnZpY2VUaWVyLFxuICAgICAgICB0aW1lb3V0TXM6IGlucHV0LnRpbWVvdXQsXG4gICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgIHByb21wdENhY2hlS2V5OiBpbnB1dC5pbWFnZUdlbmVyYXRpb24gPyB1bmRlZmluZWQgOiBkZWNpc2lvbi5wcm9tcHRDYWNoZUtleSxcbiAgICAgICAgcHJlZmVycmVkVG9rZW5JZDpcbiAgICAgICAgICBpbnB1dC5wcmVmZXJyZWRUb2tlbklkID8/IChpbnB1dC5pbWFnZUdlbmVyYXRpb24gPyB1bmRlZmluZWQgOiBkZWNpc2lvbi5wcmVmZXJyZWRUb2tlbklkKSxcbiAgICAgICAgcmVxdWlyZVByZWZlcnJlZFRva2VuOiBpbnB1dC5yZXF1aXJlUHJlZmVycmVkVG9rZW4sXG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBpbWFnZUdlbmVyYXRpb246IGlucHV0LmltYWdlR2VuZXJhdGlvbixcbiAgICAgICAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogaW5wdXQuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWNvcmRDb21wbGV0ZWQoXCJvcGVuYWlcIiwgcmVzdWx0LnRva2VuTmFtZSk7XG5cbiAgICAgIC8vIOydtOuvuOyngCDsmpTssq3snYAgY29sZC1vbmx5KFI4KeudvCDsnqzsgqzsmqkg7KKM7ZGc66W8IOuwnOq4ie2VmOyngCDslYrripTri6QuIOyijO2RnOulvCDsi6TsnLzrqbRcbiAgICAgIC8vIHNlc3Npb25LZXkg7IaM67mE7J6Q7J2YIHdhcm0g7KKM7ZGc66W8IOyjveydgCDsooztkZzroZwg642u7Ja07I2oIOuLpOydjCDthY3siqTtirggdHVybiDsnbQgY29sZCDroZwg65ao7Ja07KeE64ukLlxuICAgICAgY29uc3QgY29vcmQgPSBpbnB1dC5pbWFnZUdlbmVyYXRpb25cbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBpc3N1ZUNvbnZDb250ZXh0KHJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24sIHJlc3VsdC50aHJlYWRDb29yZC53b3JrZXJJZCk7XG5cbiAgICAgIHJldHVybiBhcHBseVRvb2xDYWxsRW11bGF0aW9uKHRvRW11bGF0aW9uUmVzdWx0KHJlc3VsdCksIGlucHV0LnRvb2xzLCB7XG4gICAgICAgIHRocmVhZENvb3JkOiBjb29yZCxcbiAgICAgICAgaW1hZ2VzOiByZXN1bHQuaW1hZ2VzLFxuICAgICAgICBhbnN3ZXJLaW5kLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChyb3V0ZS5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgaWYgKCF0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIpIHRocm93IHRoaXMubm90UmVhZHlFcnJvcihcImFudGhyb3BpY1wiKTtcblxuICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIuZ2VuZXJhdGUoe1xuICAgICAgICBtb2RlbDogaW5wdXQubW9kZWwsXG4gICAgICAgIHN5c3RlbVByb21wdDogY29tcG9zZVN5c3RlbVdpdGhTY2hlbWFDb250cmFjdChpbnB1dC5zeXN0ZW0sIGlucHV0KSxcbiAgICAgICAgdGhpbmtpbmc6IGlucHV0LnRoaW5raW5nLFxuICAgICAgICBlZmZvcnQ6IGlucHV0LnRoaW5raW5nID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGlucHV0LmVmZm9ydCxcbiAgICAgICAgdGltZW91dE1zOiBpbnB1dC50aW1lb3V0LFxuICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgY29sZElucHV0OiBkZWNpc2lvbi5jb2xkSW5wdXQsXG4gICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgcHJlZmVycmVkVG9rZW5JZDogaW5wdXQucHJlZmVycmVkVG9rZW5JZCxcbiAgICAgICAgaW1hZ2VHZW5lcmF0aW9uOiBpbnB1dC5pbWFnZUdlbmVyYXRpb24sXG4gICAgICAgIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM6IGlucHV0LmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVjb3JkQ29tcGxldGVkKFwiYW50aHJvcGljXCIsIHJlc3VsdC50b2tlbk5hbWUpO1xuXG4gICAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdChyZXN1bHQpLCBpbnB1dC50b29scywge1xuICAgICAgICB0aHJlYWRDb29yZDogaXNzdWVDb252Q29udGV4dChyZXN1bHQudGhyZWFkQ29vcmQsIGRlY2lzaW9uKSxcbiAgICAgICAgYW5zd2VyS2luZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IGRpcmVjdExsbUFwaUZhbGxiYWNrTm90SW1wbGVtZW50ZWQoaW5wdXQpO1xuICB9XG5cbiAgYXN5bmMgcXVlcnlTdHJlYW0oXG4gICAgaW5wdXQ6IEludGVybmFsUXVlcnlJbnB1dCxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzPFF1ZXJ5T3V0cHV0PixcbiAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZSA9IHBhcnNlUHJvdmlkZXJSb3V0ZShpbnB1dC5tb2RlbCk7XG4gICAgY29uc3Qgb3V0cHV0U2NoZW1hID0gYnVpbGRBbmRWYWxpZGF0ZVN0cmljdE91dHB1dFNjaGVtYShpbnB1dCwgcm91dGUucHJvdmlkZXIpO1xuICAgIGNvbnN0IGFuc3dlcktpbmQgPSBpbnB1dC5qc29uU2NoZW1hID8gKFwianNvblwiIGFzIGNvbnN0KSA6IChcInRleHRcIiBhcyBjb25zdCk7XG5cbiAgICBpZiAocm91dGUucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyB0aGlzLm5vdFJlYWR5RXJyb3IoXCJvcGVuYWlcIik7XG5cbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjaWRlQ29udlJvdXRpbmcoaW5wdXQsIHtcbiAgICAgICAgZGlyZWN0T3BlbkFJOiB0cnVlLFxuICAgICAgICBtb2RlbE5hbWVzcGFjZTogYG9wZW5haS8ke3JvdXRlLm1vZGVsfWAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMub3BlbmFpRGlzcGF0Y2hlci5nZW5lcmF0ZVN0cmVhbShcbiAgICAgICAge1xuICAgICAgICAgIG1vZGVsOiByb3V0ZS5tb2RlbCxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgICAgc3RvcEFmdGVyT3V0cHV0TWVzc2FnZTogaW5wdXQudG9vbHM/Lmxlbmd0aFxuICAgICAgICAgICAgPyAodGV4dCwgcGhhc2UpID0+IGlzVG9vbENhbGxFbnZlbG9wZSh0ZXh0LCBpbnB1dC50b29scyEsIGFuc3dlcktpbmQsIHBoYXNlKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdGhpbmtpbmc6IGlucHV0LnRoaW5raW5nLFxuICAgICAgICAgIGVmZm9ydDogaW5wdXQudGhpbmtpbmcgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogaW5wdXQuZWZmb3J0LFxuICAgICAgICAgIHZlcmJvc2l0eTogaW5wdXQudmVyYm9zaXR5LFxuICAgICAgICAgIHJlYXNvbmluZ1N1bW1hcnk6IGlucHV0LnJlYXNvbmluZ1N1bW1hcnksXG4gICAgICAgICAgc2VydmljZVRpZXI6IGlucHV0LnNlcnZpY2VUaWVyLFxuICAgICAgICAgIHRpbWVvdXRNczogaW5wdXQudGltZW91dCxcbiAgICAgICAgICBjb2xkSW5wdXQ6IGRlY2lzaW9uLmNvbGRJbnB1dCxcbiAgICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgICAgcHJvbXB0Q2FjaGVLZXk6IGRlY2lzaW9uLnByb21wdENhY2hlS2V5LFxuICAgICAgICAgIHByZWZlcnJlZFRva2VuSWQ6IGlucHV0LnByZWZlcnJlZFRva2VuSWQgPz8gZGVjaXNpb24ucHJlZmVycmVkVG9rZW5JZCxcbiAgICAgICAgICByZXF1aXJlUHJlZmVycmVkVG9rZW46IGlucHV0LnJlcXVpcmVQcmVmZXJyZWRUb2tlbixcbiAgICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb246IGlucHV0LmltYWdlR2VuZXJhdGlvbixcbiAgICAgICAgICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBpbnB1dC5pbWFnZUdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25EZWx0YTogY2Iub25EZWx0YSxcbiAgICAgICAgICBvblRocmVhZElkOiBjYi5vblRocmVhZElkLFxuICAgICAgICAgIG9uVHVybklkOiBjYi5vblR1cm5JZCxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAodHVyblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRDb21wbGV0ZWQoXCJvcGVuYWlcIiwgdHVyblJlc3VsdC50b2tlbk5hbWUpO1xuICAgICAgICAgICAgY2Iub25Db21wbGV0ZShcbiAgICAgICAgICAgICAgYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdCh0dXJuUmVzdWx0KSwgaW5wdXQudG9vbHMsIHtcbiAgICAgICAgICAgICAgICB0aHJlYWRDb29yZDogaXNzdWVDb252Q29udGV4dChcbiAgICAgICAgICAgICAgICAgIHR1cm5SZXN1bHQudGhyZWFkQ29vcmQsXG4gICAgICAgICAgICAgICAgICBkZWNpc2lvbixcbiAgICAgICAgICAgICAgICAgIHR1cm5SZXN1bHQudGhyZWFkQ29vcmQud29ya2VySWQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhbnN3ZXJLaW5kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiBjYi5vbkVycm9yLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHJvdXRlLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgICBpZiAoIXRoaXMuYW50aHJvcGljRGlzcGF0Y2hlcikgdGhyb3cgdGhpcy5ub3RSZWFkeUVycm9yKFwiYW50aHJvcGljXCIpO1xuXG4gICAgICAvLyDqtazsobDtmZQg7J2R64u17J2AIOy1nOyihSDthY3siqTtirjsmYAg64247YOAIOuqqOuRkCDsvZTrk5ztjpzsiqTrpbwg7KCc6rGw7ZWc64ukLlxuICAgICAgY29uc3QgaGFzU2NoZW1hQ29udHJhY3QgPSBpbnB1dC5qc29uU2NoZW1hICE9PSB1bmRlZmluZWQgfHwgQm9vbGVhbihpbnB1dC50b29scz8ubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGZlbmNlU3RyaXAgPSBoYXNTY2hlbWFDb250cmFjdCA/IGNyZWF0ZUZlbmNlU3RyaXBUcmFuc2Zvcm0oKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVtaXREZWx0YSA9IGZlbmNlU3RyaXBcbiAgICAgICAgPyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYWZlID0gZmVuY2VTdHJpcC5wdXNoKHRleHQpO1xuICAgICAgICAgICAgaWYgKHNhZmUpIGNiLm9uRGVsdGEoc2FmZSk7XG4gICAgICAgICAgfVxuICAgICAgICA6IGNiLm9uRGVsdGE7XG5cbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjaWRlQ29udlJvdXRpbmcoaW5wdXQpO1xuICAgICAgYXdhaXQgdGhpcy5hbnRocm9waWNEaXNwYXRjaGVyLmdlbmVyYXRlU3RyZWFtKFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgICAgICAgIHN5c3RlbVByb21wdDogY29tcG9zZVN5c3RlbVdpdGhTY2hlbWFDb250cmFjdChpbnB1dC5zeXN0ZW0sIGlucHV0KSxcbiAgICAgICAgICB0aGlua2luZzogaW5wdXQudGhpbmtpbmcsXG4gICAgICAgICAgZWZmb3J0OiBpbnB1dC50aGlua2luZyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBpbnB1dC5lZmZvcnQsXG4gICAgICAgICAgY29sZElucHV0OiBkZWNpc2lvbi5jb2xkSW5wdXQsXG4gICAgICAgICAgY29sZEhpc3Rvcnk6IGRlY2lzaW9uLmNvbGRIaXN0b3J5LFxuICAgICAgICAgIHByZWZlcnJlZFRva2VuSWQ6IGlucHV0LnByZWZlcnJlZFRva2VuSWQsXG4gICAgICAgICAgdGltZW91dE1zOiBpbnB1dC50aW1lb3V0LFxuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICAgIGltYWdlR2VuZXJhdGlvbjogaW5wdXQuaW1hZ2VHZW5lcmF0aW9uLFxuICAgICAgICAgIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM6IGlucHV0LmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkRlbHRhOiBlbWl0RGVsdGEsXG4gICAgICAgICAgb25UaHJlYWRJZDogY2Iub25UaHJlYWRJZCxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAodHVyblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRDb21wbGV0ZWQoXCJhbnRocm9waWNcIiwgdHVyblJlc3VsdC50b2tlbk5hbWUpO1xuICAgICAgICAgICAgLy8g64ur64qUIO2OnOyKpCDtjJDsoJUg65WM66y47JeQIOuztOulmO2VnCDthY3siqTtirjrpbwg7JmE66OMIOyghOyXkCDrsKnstpztlZzri6QuXG4gICAgICAgICAgICBjb25zdCByZXN0ID0gZmVuY2VTdHJpcD8uZmx1c2goKTtcbiAgICAgICAgICAgIGlmIChyZXN0KSBjYi5vbkRlbHRhKHJlc3QpO1xuXG4gICAgICAgICAgICBjb25zdCBpc3N1ZWRDb29yZCA9IGlzc3VlQ29udkNvbnRleHQodHVyblJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24pO1xuICAgICAgICAgICAgY2Iub25Db21wbGV0ZShcbiAgICAgICAgICAgICAgYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdCh0dXJuUmVzdWx0KSwgaW5wdXQudG9vbHMsIHtcbiAgICAgICAgICAgICAgICB0aHJlYWRDb29yZDogaXNzdWVkQ29vcmQsXG4gICAgICAgICAgICAgICAgYW5zd2VyS2luZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogY2Iub25FcnJvcixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgZGlyZWN0TGxtQXBpRmFsbGJhY2tOb3RJbXBsZW1lbnRlZChpbnB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm92aWRlclJvdXRlKG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB7IHByb3ZpZGVyPzogc3RyaW5nOyBtb2RlbDogc3RyaW5nIH0ge1xuICBpZiAoIW1vZGVsPy5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICByZXR1cm4geyBtb2RlbDogbW9kZWwgPz8gXCJcIiB9O1xuICB9XG5cbiAgY29uc3QgW3Byb3ZpZGVyLCByb3V0ZWRNb2RlbF0gPSBtb2RlbC5zcGxpdChcIi9cIiwgMik7XG4gIGlmICghcHJvdmlkZXIgfHwgIXJvdXRlZE1vZGVsKSB0aHJvdyBuZXcgUHJvY2Vzc0Vycm9yKFwidW5rbm93biBtb2RlbFwiKTtcbiAgcmV0dXJuIHsgcHJvdmlkZXIsIG1vZGVsOiByb3V0ZWRNb2RlbCB9O1xufVxuXG5mdW5jdGlvbiBkaXJlY3RMbG1BcGlGYWxsYmFja05vdEltcGxlbWVudGVkKGlucHV0OiBRdWVyeUlucHV0KTogUHJvY2Vzc0Vycm9yIHtcbiAgcmV0dXJuIG5ldyBQcm9jZXNzRXJyb3IoXG4gICAgYERpcmVjdCBMTE0gQVBJIGZhbGxiYWNrIG5vdCBpbXBsZW1lbnRlZCBmb3IgbW9kZWw6ICR7aW5wdXQubW9kZWwgPz8gXCI8ZGVmYXVsdD5cIn1gLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdHJpY3RPdXRwdXRTY2hlbWEoXG4gIGlucHV0OiBQaWNrPFF1ZXJ5SW5wdXQsIFwidG9vbHNcIiB8IFwianNvblNjaGVtYVwiPixcbiAgcHJvdmlkZXI/OiBzdHJpbmcsXG4pOiBKc29uVmFsdWUgfCB1bmRlZmluZWQge1xuICBjb25zdCBvdXRwdXRTY2hlbWEgPSBidWlsZFJhd091dHB1dFNjaGVtYShpbnB1dCk7XG5cbiAgcmV0dXJuIG91dHB1dFNjaGVtYVxuICAgID8gKHN0cmljdGlmeShvdXRwdXRTY2hlbWEgYXMgUGFyYW1ldGVyczx0eXBlb2Ygc3RyaWN0aWZ5PlswXSwgeyBwcm92aWRlciB9KSBhcyBKc29uVmFsdWUpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFuZFZhbGlkYXRlU3RyaWN0T3V0cHV0U2NoZW1hKFxuICBpbnB1dDogUGljazxRdWVyeUlucHV0LCBcIm1vZGVsXCIgfCBcInRvb2xzXCIgfCBcImpzb25TY2hlbWFcIj4sXG4gIHByb3ZpZGVyID0gcGFyc2VQcm92aWRlclJvdXRlKGlucHV0Lm1vZGVsKS5wcm92aWRlcixcbik6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIC8vIENsYXVkZSBDb2Rl7J2YIC0tanNvbi1zY2hlbWHripQg67aI7ZWE7JqU7ZWcIOuCtOu2gCDsnqzsi5zrj4Trpbwg7Jyg67Cc7ZWc64ukLlxuICAvLyBBbnRocm9waWPsnYAg7JuQ67O4IOyKpO2CpOuniOulvCDqsoDspp3tlZwg65KkIO2UhOuhrO2UhO2KuOuhnCDsoITri6ztlZjqs6AsIOydkeuLtSDqsoDspp3snYAg7IaM67mE7J6Q7JeQIOunoeq4tOuLpC5cbiAgaWYgKHByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgcGFyc2VBbmRWYWxpZGF0ZUNhbGxlclNjaGVtYXMoaW5wdXQpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY2hlbWEgPSBidWlsZFN0cmljdE91dHB1dFNjaGVtYShpbnB1dCwgcHJvdmlkZXIpO1xuICBzZXJpYWxpemVBbmRWYWxpZGF0ZURpc3BhdGNoU2NoZW1hKG91dHB1dFNjaGVtYSwgcHJvdmlkZXIpO1xuICByZXR1cm4gb3V0cHV0U2NoZW1hO1xufVxuXG5mdW5jdGlvbiBidWlsZFJhd091dHB1dFNjaGVtYShcbiAgaW5wdXQ6IFBpY2s8UXVlcnlJbnB1dCwgXCJ0b29sc1wiIHwgXCJqc29uU2NoZW1hXCI+LFxuKTogSnNvblZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY2FsbGVyT3V0cHV0U2NoZW1hID0gcGFyc2VBbmRWYWxpZGF0ZUNhbGxlclNjaGVtYXMoaW5wdXQpO1xuXG4gIHJldHVybiBpbnB1dC50b29scz8ubGVuZ3RoXG4gICAgPyBidWlsZFRvb2xDYWxsU2NoZW1hKGlucHV0LnRvb2xzLCBjYWxsZXJPdXRwdXRTY2hlbWEpXG4gICAgOiBjYWxsZXJPdXRwdXRTY2hlbWE7XG59XG5cbi8vIEFudGhyb3BpYyBhZGFwdGVyIOuKlCBjYWNoZSBjcmVhdGlvbiDsnYQgaW5wdXRUb2tlbnMg7JeQIO2PrO2VqO2VtCDtkZzspIDtmZTtlZjqs6AsIOuzhOuPhCDtlYTrk5zsl5Drj4Qg67O07KG07ZWc64ukLlxuZnVuY3Rpb24gdG9FbXVsYXRpb25SZXN1bHQoXG4gIHJlc3VsdDogR2VuZXJhdGVSZXN1bHQsXG4pOiBPbWl0PFF1ZXJ5T3V0cHV0LCBcImNvbnRlbnRcIiB8IFwiZmluaXNoUmVhc29uXCIgfCBcInJ1bkNvbnRleHRcIj4ge1xuICBjb25zdCBoYXNQcm92aWRlckNvc3QgPSByZXN1bHQuY29zdFVzZCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5jb3N0VXNkID4gMDtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiByZXN1bHQudGV4dCxcbiAgICB0b2tlbk5hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgbW9kZWw6IHJlc3VsdC5tb2RlbCxcbiAgICByZXF1ZXN0ZWRNb2RlbDogcmVzdWx0LnJlcXVlc3RlZE1vZGVsLFxuICAgIG1vZGVsRmFsbGJhY2tzOiByZXN1bHQubW9kZWxGYWxsYmFja3MsXG4gICAgdXNhZ2U6IHtcbiAgICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHJlc3VsdC51c2FnZS5yZWFzb25pbmdPdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPz8gMCxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgIH0sXG4gICAgZHVyYXRpb25NczogcmVzdWx0LmR1cmF0aW9uTXMsXG4gICAgdHRmdE1zOiByZXN1bHQudHRmdE1zID8/IDAsXG4gICAgY29zdFVzZDogaGFzUHJvdmlkZXJDb3N0XG4gICAgICA/IHJlc3VsdC5jb3N0VXNkIVxuICAgICAgOiBjYWxjdWxhdGVDb3N0VXNkKHJlc3VsdC5tb2RlbCwge1xuICAgICAgICAgIGlucHV0VG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgb3V0cHV0VG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IDAsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHJlc3VsdC51c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcmVzdWx0LnVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KSxcbiAgICBjb3N0U291cmNlOiBoYXNQcm92aWRlckNvc3QgPyBcInByb3ZpZGVyXCIgOiBcInByaWNpbmdfdGFibGVcIixcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFFncmlkRGlzcGF0Y2hlciA9IG5ldyBRZ3JpZERpc3BhdGNoZXJDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBd0NBLElBQWEsdUJBQWIsTUFBa0M7Q0FDaEMseUJBQVMsSUFBSSxJQUEwQjtDQUl2QyxnQ0FBZ0IsSUFBSSxJQUFvQjtDQUV4QyxhQUFxQztDQUNyQyxtQkFBNEM7Q0FDNUMsc0JBQWtEO0NB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