@nlabs/reaktor 0.5.4 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +7 -7
  2. package/lib/actions/conversations.js +68 -69
  3. package/lib/actions/dynamodb.js +22 -33
  4. package/lib/actions/email.js +32 -30
  5. package/lib/actions/files.js +39 -58
  6. package/lib/actions/groups.js +33 -28
  7. package/lib/actions/images.js +71 -82
  8. package/lib/actions/index.js +54 -37
  9. package/lib/actions/ios.js +21 -40
  10. package/lib/actions/locations.js +25 -22
  11. package/lib/actions/messages.js +31 -45
  12. package/lib/actions/notifications.js +13 -20
  13. package/lib/actions/payments.js +40 -52
  14. package/lib/actions/posts.js +68 -48
  15. package/lib/actions/reactions.js +29 -52
  16. package/lib/actions/s3.js +21 -18
  17. package/lib/actions/search.js +26 -40
  18. package/lib/actions/sms.js +24 -21
  19. package/lib/actions/statistics.js +14 -21
  20. package/lib/actions/subscription.js +27 -24
  21. package/lib/actions/tags.js +49 -56
  22. package/lib/actions/users.js +92 -106
  23. package/lib/actions/websockets.js +28 -41
  24. package/lib/config.js +21 -18
  25. package/lib/index.js +24 -22
  26. package/lib/lambdas/actions/websockets.js +21 -45
  27. package/lib/lambdas/authorizer.js +16 -24
  28. package/lib/lambdas/connection.js +18 -43
  29. package/lib/lambdas/utils/message.js +20 -17
  30. package/lib/lambdas/utils/websocket.js +33 -25
  31. package/lib/templates/email/layout.js +16 -9
  32. package/lib/templates/email/passwordForgot.js +16 -9
  33. package/lib/templates/email/passwordRecovery.js +16 -9
  34. package/lib/templates/email/verifyEmail.js +16 -9
  35. package/lib/templates/email/welcome.js +16 -9
  36. package/lib/templates/sms/passwordForgot.js +16 -9
  37. package/lib/templates/sms/passwordRecovery.js +16 -9
  38. package/lib/templates/sms/verifyEmail.js +16 -9
  39. package/lib/templates/sms/verifyPhone.js +16 -9
  40. package/lib/templates/sms/welcome.js +16 -9
  41. package/lib/types/apps.js +14 -5
  42. package/lib/types/arangodb.js +14 -5
  43. package/lib/types/auth.js +14 -5
  44. package/lib/types/connections.js +14 -5
  45. package/lib/types/conversations.js +14 -5
  46. package/lib/types/email.js +14 -5
  47. package/lib/types/files.js +14 -5
  48. package/lib/types/google.js +14 -5
  49. package/lib/types/groups.js +14 -5
  50. package/lib/types/images.js +14 -5
  51. package/lib/types/index.js +50 -35
  52. package/lib/types/locations.js +14 -5
  53. package/lib/types/messages.js +14 -5
  54. package/lib/types/notifications.js +14 -5
  55. package/lib/types/payments.js +14 -5
  56. package/lib/types/posts.js +14 -5
  57. package/lib/types/statistics.js +14 -5
  58. package/lib/types/tags.js +14 -5
  59. package/lib/types/users.js +14 -5
  60. package/lib/types/websocket.js +14 -5
  61. package/lib/utils/analytics.js +24 -44
  62. package/lib/utils/arangodb.js +15 -22
  63. package/lib/utils/auth.js +22 -36
  64. package/lib/utils/graphql.js +20 -17
  65. package/lib/utils/index.js +26 -23
  66. package/lib/utils/objects.js +22 -19
  67. package/lib/utils/session.js +20 -17
  68. package/package.json +31 -33
  69. package/.eslintrc +0 -18
  70. package/lib/actions/conversations.d.ts +0 -14
  71. package/lib/actions/dynamodb.d.ts +0 -8
  72. package/lib/actions/email.d.ts +0 -7
  73. package/lib/actions/files.d.ts +0 -16
  74. package/lib/actions/groups.d.ts +0 -14
  75. package/lib/actions/images.d.ts +0 -22
  76. package/lib/actions/index.d.ts +0 -20
  77. package/lib/actions/ios.d.ts +0 -7
  78. package/lib/actions/locations.d.ts +0 -3
  79. package/lib/actions/messages.d.ts +0 -13
  80. package/lib/actions/notifications.d.ts +0 -5
  81. package/lib/actions/payments.d.ts +0 -10
  82. package/lib/actions/posts.d.ts +0 -19
  83. package/lib/actions/reactions.d.ts +0 -30
  84. package/lib/actions/s3.d.ts +0 -7
  85. package/lib/actions/search.d.ts +0 -3
  86. package/lib/actions/sms.d.ts +0 -3
  87. package/lib/actions/statistics.d.ts +0 -2
  88. package/lib/actions/subscription.d.ts +0 -7
  89. package/lib/actions/tags.d.ts +0 -26
  90. package/lib/actions/users.d.ts +0 -44
  91. package/lib/actions/websockets.d.ts +0 -6
  92. package/lib/config.d.ts +0 -20
  93. package/lib/index.d.ts +0 -5
  94. package/lib/lambdas/actions/websockets.d.ts +0 -6
  95. package/lib/lambdas/authorizer.d.ts +0 -20
  96. package/lib/lambdas/connection.d.ts +0 -12
  97. package/lib/lambdas/utils/message.d.ts +0 -1
  98. package/lib/lambdas/utils/websocket.d.ts +0 -7
  99. package/lib/templates/email/layout.d.ts +0 -2
  100. package/lib/templates/email/passwordForgot.d.ts +0 -2
  101. package/lib/templates/email/passwordRecovery.d.ts +0 -2
  102. package/lib/templates/email/verifyEmail.d.ts +0 -2
  103. package/lib/templates/email/welcome.d.ts +0 -2
  104. package/lib/templates/sms/passwordForgot.d.ts +0 -2
  105. package/lib/templates/sms/passwordRecovery.d.ts +0 -2
  106. package/lib/templates/sms/verifyEmail.d.ts +0 -2
  107. package/lib/templates/sms/verifyPhone.d.ts +0 -2
  108. package/lib/templates/sms/welcome.d.ts +0 -2
  109. package/lib/types/apps.d.ts +0 -44
  110. package/lib/types/arangodb.d.ts +0 -17
  111. package/lib/types/auth.d.ts +0 -7
  112. package/lib/types/connections.d.ts +0 -8
  113. package/lib/types/conversations.d.ts +0 -11
  114. package/lib/types/email.d.ts +0 -12
  115. package/lib/types/files.d.ts +0 -26
  116. package/lib/types/google.d.ts +0 -27
  117. package/lib/types/groups.d.ts +0 -22
  118. package/lib/types/images.d.ts +0 -42
  119. package/lib/types/index.d.ts +0 -18
  120. package/lib/types/locations.d.ts +0 -20
  121. package/lib/types/messages.d.ts +0 -27
  122. package/lib/types/notifications.d.ts +0 -19
  123. package/lib/types/payments.d.ts +0 -115
  124. package/lib/types/posts.d.ts +0 -47
  125. package/lib/types/statistics.d.ts +0 -3
  126. package/lib/types/tags.d.ts +0 -15
  127. package/lib/types/users.d.ts +0 -80
  128. package/lib/types/websocket.d.ts +0 -14
  129. package/lib/utils/analytics.d.ts +0 -14
  130. package/lib/utils/arangodb.d.ts +0 -9
  131. package/lib/utils/auth.d.ts +0 -5
  132. package/lib/utils/graphql.d.ts +0 -1
  133. package/lib/utils/index.d.ts +0 -6
  134. package/lib/utils/objects.d.ts +0 -3
  135. package/lib/utils/session.d.ts +0 -18
@@ -1,35 +1,28 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __require = typeof require !== "undefined" ? require : (x) => {
9
- throw new Error('Dynamic require of "' + x + '" is not supported');
10
- };
11
5
  var __export = (target, all) => {
12
- __markAsModule(target);
13
6
  for (var name in all)
14
7
  __defProp(target, name, { get: all[name], enumerable: true });
15
8
  };
16
- var __reExport = (target, module2, desc) => {
17
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
18
- for (let key of __getOwnPropNames(module2))
19
- if (!__hasOwnProp.call(target, key) && key !== "default")
20
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
14
  }
22
- return target;
23
- };
24
- var __toModule = (module2) => {
25
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
15
+ return to;
26
16
  };
27
- __export(exports, {
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var statistics_exports = {};
19
+ __export(statistics_exports, {
28
20
  getGlobalStatistics: () => getGlobalStatistics
29
21
  });
30
- var import_arangojs = __toModule(require("arangojs"));
31
- var import__ = __toModule(require("."));
32
- var import_utils = __toModule(require("../utils"));
22
+ module.exports = __toCommonJS(statistics_exports);
23
+ var import_arangojs = require("arangojs");
24
+ var import__ = require(".");
25
+ var import_utils = require("../utils");
33
26
  const eventCategory = "statistics";
34
27
  const getGlobalStatistics = async (context) => {
35
28
  const action = "getStatistics";
@@ -63,4 +56,4 @@ const getGlobalStatistics = async (context) => {
63
56
  0 && (module.exports = {
64
57
  getGlobalStatistics
65
58
  });
66
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3RhdGlzdGljcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuXG5pbXBvcnQge2dldEFjdGl2ZVVzZXJDb3VudH0gZnJvbSAnLic7XG5pbXBvcnQge0FwaUNvbnRleHQsIFN0YXRpc3RpY3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdzdGF0aXN0aWNzJztcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JhbFN0YXRpc3RpY3MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGFydGlhbDxTdGF0aXN0aWNzVHlwZT4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0U3RhdGlzdGljcyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBzdGF0aXN0aWNzUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN0YXRpc3RpY3NcbiAgICBGSUxURVIgcy5pc0dsb2JhbCA9PSB0cnVlXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBzYDtcblxuICBjb25zdCBzdGF0aXN0aWNzID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoc3RhdGlzdGljc1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKG51bGwpKSk7XG5cbiAgaWYoc3RhdGlzdGljcykge1xuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVVzZXJzID0gZ2V0QWN0aXZlVXNlckNvdW50KGNvbnRleHQpO1xuICBjb25zdCB1cGRhdGVkRGF0YSA9IHthY3RpdmVVc2Vyc307XG5cbiAgY29uc3QgdXBkYXRlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7aXNHbG9iYWw6IHRydWV9XG4gIElOU0VSVCAke3VwZGF0ZWREYXRhfVxuICBVUERBVEUgJHt1cGRhdGVkRGF0YX1cbiAgSU4gc3RhdGlzdGljcyBSRVRVUk4gTkVXYDtcblxuICBjb25zdCB1cGRhdGVkU3RhdGlzdGljcyA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHVwZGF0ZVF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKHt9KSkpO1xuXG4gIHJldHVybiB1cGRhdGVkU3RhdGlzdGljcztcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFrQjtBQUlsQixlQUFpQztBQUVqQyxtQkFBdUI7QUFFdkIsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxzQkFBc0IsT0FBTyxZQUEwRDtBQUNsRyxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sa0JBQTRCO0FBQUE7QUFBQTtBQUFBO0FBS2xDLFFBQU0sYUFBYSxNQUFNLFNBQVMsTUFBTSxpQkFDckMsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsTUFBTSxDQUFDLFVBQWlCLDJCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sU0FBUyxLQUFLLE1BQU87QUFFakMsTUFBRyxZQUFZO0FBQ2IsV0FBTztBQUFBO0FBRVQsUUFBTSxjQUFjLGlDQUFtQjtBQUN2QyxRQUFNLGNBQWMsRUFBQztBQUVyQixRQUFNLGNBQXdCO0FBQUEsV0FDckI7QUFBQSxXQUNBO0FBQUE7QUFHVCxRQUFNLG9CQUFvQixNQUFNLFNBQVMsTUFBTSxhQUM1QyxLQUFLLENBQUMsV0FBd0IsT0FBTyxRQUNyQyxNQUFNLENBQUMsVUFBaUIsMkJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxTQUFTLEtBQUssTUFBTztBQUVqQyxTQUFPO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
59
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3RhdGlzdGljcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuXG5pbXBvcnQge2dldEFjdGl2ZVVzZXJDb3VudH0gZnJvbSAnLic7XG5pbXBvcnQge0FwaUNvbnRleHQsIFN0YXRpc3RpY3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdzdGF0aXN0aWNzJztcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JhbFN0YXRpc3RpY3MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGFydGlhbDxTdGF0aXN0aWNzVHlwZT4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0U3RhdGlzdGljcyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBzdGF0aXN0aWNzUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN0YXRpc3RpY3NcbiAgICBGSUxURVIgcy5pc0dsb2JhbCA9PSB0cnVlXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBzYDtcblxuICBjb25zdCBzdGF0aXN0aWNzID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoc3RhdGlzdGljc1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKG51bGwpKSk7XG5cbiAgaWYoc3RhdGlzdGljcykge1xuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVVzZXJzID0gZ2V0QWN0aXZlVXNlckNvdW50KGNvbnRleHQpO1xuICBjb25zdCB1cGRhdGVkRGF0YSA9IHthY3RpdmVVc2Vyc307XG5cbiAgY29uc3QgdXBkYXRlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7aXNHbG9iYWw6IHRydWV9XG4gIElOU0VSVCAke3VwZGF0ZWREYXRhfVxuICBVUERBVEUgJHt1cGRhdGVkRGF0YX1cbiAgSU4gc3RhdGlzdGljcyBSRVRVUk4gTkVXYDtcblxuICBjb25zdCB1cGRhdGVkU3RhdGlzdGljcyA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHVwZGF0ZVF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKHt9KSkpO1xuXG4gIHJldHVybiB1cGRhdGVkU3RhdGlzdGljcztcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBa0I7QUFJbEIsZUFBaUM7QUFFakMsbUJBQXVCO0FBRXZCLE1BQU0sZ0JBQXdCO0FBRXZCLE1BQU0sc0JBQXNCLE9BQU8sWUFBMEQ7QUFDbEcsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sa0JBQTRCO0FBQUE7QUFBQTtBQUFBO0FBS2xDLFFBQU0sYUFBYSxNQUFNLFNBQVMsTUFBTSxlQUFlLEVBQ3BELEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxNQUFNLENBQUMsY0FBaUIsdUJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLE9BQU8sRUFBRSxLQUFLLE1BQU8sSUFBSyxDQUFDO0FBRXZDLE1BQUcsWUFBWTtBQUNiLFdBQU87QUFBQSxFQUNUO0FBQ0EsUUFBTSxrQkFBYyw2QkFBbUIsT0FBTztBQUM5QyxRQUFNLGNBQWMsRUFBQyxZQUFXO0FBRWhDLFFBQU0sY0FBd0I7QUFBQSxXQUNyQixXQUFXO0FBQUEsV0FDWCxXQUFXO0FBQUE7QUFHcEIsUUFBTSxvQkFBb0IsTUFBTSxTQUFTLE1BQU0sV0FBVyxFQUN2RCxLQUFLLENBQUMsV0FBd0IsT0FBTyxLQUFLLENBQUMsRUFDM0MsTUFBTSxDQUFDLGNBQWlCLHVCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxFQUNULEdBQUcsT0FBTyxPQUFPLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBRXJDLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -4,40 +4,43 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __require = typeof require !== "undefined" ? require : (x) => {
9
- throw new Error('Dynamic require of "' + x + '" is not supported');
10
- };
11
7
  var __export = (target, all) => {
12
- __markAsModule(target);
13
8
  for (var name in all)
14
9
  __defProp(target, name, { get: all[name], enumerable: true });
15
10
  };
16
- var __reExport = (target, module2, desc) => {
17
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
18
- for (let key of __getOwnPropNames(module2))
19
- if (!__hasOwnProp.call(target, key) && key !== "default")
20
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
16
  }
22
- return target;
23
- };
24
- var __toModule = (module2) => {
25
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
17
+ return to;
26
18
  };
27
- __export(exports, {
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var subscription_exports = {};
29
+ __export(subscription_exports, {
28
30
  addPlan: () => addPlan,
29
31
  addSubscription: () => addSubscription,
30
32
  deleteSubscription: () => deleteSubscription,
31
33
  getPlanList: () => getPlanList,
32
34
  getSubscription: () => getSubscription
33
35
  });
34
- var import_utils = __toModule(require("@nlabs/utils"));
35
- var import_arangojs = __toModule(require("arangojs"));
36
- var import_luxon = __toModule(require("luxon"));
37
- var import_stripe = __toModule(require("stripe"));
38
- var import_config = __toModule(require("../config"));
39
- var import_utils2 = __toModule(require("../utils"));
40
- var import_users = __toModule(require("./users"));
36
+ module.exports = __toCommonJS(subscription_exports);
37
+ var import_utils = require("@nlabs/utils");
38
+ var import_arangojs = require("arangojs");
39
+ var import_luxon = require("luxon");
40
+ var import_stripe = __toESM(require("stripe"));
41
+ var import_config = require("../config");
42
+ var import_utils2 = require("../utils");
43
+ var import_users = require("./users");
41
44
  const eventCategory = "subscription";
42
45
  const apiVersion = "2020-03-02";
43
46
  const getPlanList = (context, from = 0, to = 30) => {
@@ -183,7 +186,7 @@ const deleteSubscription = (context) => {
183
186
  const now = Date.now();
184
187
  return getSubscription(context).then((subscription) => {
185
188
  const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
186
- return stripeClient.subscriptions.del(subscription.transactionId).then(({ canceled_at: cancelDate }) => {
189
+ return stripeClient.subscriptions.cancel(subscription.transactionId).then(({ canceled_at: cancelDate }) => {
187
190
  if (cancelDate) {
188
191
  const update = {
189
192
  cancelDate,
@@ -209,4 +212,4 @@ const deleteSubscription = (context) => {
209
212
  getPlanList,
210
213
  getSubscription
211
214
  });
212
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3Vic2NyaXB0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQYXltZW50SW50ZXJ2YWwsIFBheW1lbnRQbGFuLCBQYXltZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi90eXBlcy9wYXltZW50cyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2dldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnc3Vic2NyaXB0aW9uJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGdldFBsYW5MaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciA9IDAsIHRvOiBudW1iZXIgPSAzMCk6IFByb21pc2U8UGF5bWVudFBsYW5bXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwbGFuc1xuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIHAuYW1vdW50XG4gICAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdWJzY3JpcHRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBzIElOIHN1YnNjcmlwdGlvbnNcbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy5jYW5jZWxsZWQgPiAwXG4gICAgICBMRVQgcGxhbiA9IEZJUlNUKFxuICAgICAgICBGT1IgcCBJTiBwbGFuc1xuICAgICAgICBGSUxURVIgcC5fa2V5ID09IHMucGxhbklkXG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0Uocywge3BsYW46IHBsYW59KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uID0ge30pID0+IHN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBsYW4gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogUGF5bWVudFBsYW4pOiBQcm9taXNlPFBheW1lbnRQbGFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFBsYW4nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc319ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbjogYm9vbGVhbiA9IHVzZXJBY2Nlc3MgPiAyO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW0uaWQpO1xuICBjb25zdCBwbGFuSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeSA9ICdVU0QnLCBkZXNjcmlwdGlvbiwgaW50ZXJ2YWwsIGludGVydmFsQ291bnQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRJbnRlcnZhbDogUGF5bWVudEludGVydmFsID0gcGFyc2VDaGFyKGludGVydmFsLCA1KS50b0xvd2VyQ2FzZSgpIGFzIFBheW1lbnRJbnRlcnZhbDtcbiAgY29uc3QgZm9ybWF0SW50ZXJ2YWxDbnQ6IG51bWJlciA9IHBhcnNlTnVtKGludGVydmFsQ291bnQsIDUpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDMyKTtcblxuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRQbGFuID0ge1xuICAgIF9rZXk6IHBsYW5JZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIGludGVydmFsOiBmb3JtYXRJbnRlcnZhbCxcbiAgICBpbnRlcnZhbENvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBsYW5zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBsYW46IFBheW1lbnRQbGFuID0ge30pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHN0cmlwZVBsYW46IGFueSA9IHtcbiAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQgKiAxMDAsXG4gICAgICAgIGN1cnJlbmN5LFxuICAgICAgICBpZDogcGxhbklkLFxuICAgICAgICBpbnRlcnZhbDogZm9ybWF0SW50ZXJ2YWwsXG4gICAgICAgIGludGVydmFsX2NvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgc3RhdGVtZW50X2Rlc2NyaXB0b3I6IGZvcm1hdERlc2NcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQucGxhbnNcbiAgICAgICAgLmNyZWF0ZShzdHJpcGVQbGFuKVxuICAgICAgICAudGhlbigoKSA9PiBwbGFuKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJBY2Nlc3N9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW46IGJvb2xlYW4gPSB1c2VyQWNjZXNzID4gMjtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpdGVtLmlkKTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7cGxhbklkLCB0cmlhbEVuZCwgdHJpYWxQZXJpb2R9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0UGxhbklkOiBzdHJpbmcgPSBwYXJzZUlkKHBsYW5JZCk7XG4gIGNvbnN0IGZvcm1hdFRyaWFsUGVyaW9kOiBudW1iZXIgPSAwO1xuICBsZXQgZm9ybWF0VHJpYWxFbmQ6IG51bWJlciA9IHRyaWFsRW5kIHx8IERhdGUubm93KCk7XG5cbiAgaWYoZm9ybWF0VHJpYWxQZXJpb2QpIHtcbiAgICBmb3JtYXRUcmlhbEVuZCA9IERhdGVUaW1lLmxvY2FsKCkucGx1cyh7ZGF5czogdHJpYWxQZXJpb2R9KS50b01pbGxpcygpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgIF9rZXk6IHN1YnNjcmlwdGlvbklkLFxuICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICBjYW5jZWxEYXRlOiAwLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBwbGFuSWQ6IGZvcm1hdFBsYW5JZCxcbiAgICAgICAgdHJpYWxFbmQ6IGZvcm1hdFRyaWFsRW5kLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwbGFucyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4ge1xuICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5zdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgY3VzdG9tZXI6IHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwbGFuOiBmb3JtYXRQbGFuSWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJpYWxfZW5kOiBmb3JtYXRUcmlhbEVuZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVN1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgcmV0dXJuIGdldFN1YnNjcmlwdGlvbihjb250ZXh0KVxuICAgIC50aGVuKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuc3Vic2NyaXB0aW9uc1xuICAgICAgICAuZGVsKHN1YnNjcmlwdGlvbi50cmFuc2FjdGlvbklkKVxuICAgICAgICAudGhlbigoe2NhbmNlbGVkX2F0OiBjYW5jZWxEYXRlfSkgPT4ge1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW5jZWxsZWQgb24gU3RyaXBlIGJlZm9yZSB1cGRhdGluZyB0aGUgZGJcbiAgICAgICAgICBpZihjYW5jZWxEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgIGNhbmNlbERhdGUsXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICAgIHBsYW5JZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSBzIFdJVEggJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNgO1xuXG4gICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgICAgICAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
215
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3Vic2NyaXB0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQYXltZW50SW50ZXJ2YWwsIFBheW1lbnRQbGFuLCBQYXltZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi90eXBlcy9wYXltZW50cyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2dldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnc3Vic2NyaXB0aW9uJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGdldFBsYW5MaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciA9IDAsIHRvOiBudW1iZXIgPSAzMCk6IFByb21pc2U8UGF5bWVudFBsYW5bXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwbGFuc1xuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIHAuYW1vdW50XG4gICAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdWJzY3JpcHRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBzIElOIHN1YnNjcmlwdGlvbnNcbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy5jYW5jZWxsZWQgPiAwXG4gICAgICBMRVQgcGxhbiA9IEZJUlNUKFxuICAgICAgICBGT1IgcCBJTiBwbGFuc1xuICAgICAgICBGSUxURVIgcC5fa2V5ID09IHMucGxhbklkXG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0Uocywge3BsYW46IHBsYW59KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uID0ge30pID0+IHN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBsYW4gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogUGF5bWVudFBsYW4pOiBQcm9taXNlPFBheW1lbnRQbGFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFBsYW4nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc319ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbjogYm9vbGVhbiA9IHVzZXJBY2Nlc3MgPiAyO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW0uaWQpO1xuICBjb25zdCBwbGFuSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeSA9ICdVU0QnLCBkZXNjcmlwdGlvbiwgaW50ZXJ2YWwsIGludGVydmFsQ291bnQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRJbnRlcnZhbDogUGF5bWVudEludGVydmFsID0gcGFyc2VDaGFyKGludGVydmFsLCA1KS50b0xvd2VyQ2FzZSgpIGFzIFBheW1lbnRJbnRlcnZhbDtcbiAgY29uc3QgZm9ybWF0SW50ZXJ2YWxDbnQ6IG51bWJlciA9IHBhcnNlTnVtKGludGVydmFsQ291bnQsIDUpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDMyKTtcblxuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRQbGFuID0ge1xuICAgIF9rZXk6IHBsYW5JZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIGludGVydmFsOiBmb3JtYXRJbnRlcnZhbCxcbiAgICBpbnRlcnZhbENvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBsYW5zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBsYW46IFBheW1lbnRQbGFuID0ge30pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHN0cmlwZVBsYW46IGFueSA9IHtcbiAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQgKiAxMDAsXG4gICAgICAgIGN1cnJlbmN5LFxuICAgICAgICBpZDogcGxhbklkLFxuICAgICAgICBpbnRlcnZhbDogZm9ybWF0SW50ZXJ2YWwsXG4gICAgICAgIGludGVydmFsX2NvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgc3RhdGVtZW50X2Rlc2NyaXB0b3I6IGZvcm1hdERlc2NcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQucGxhbnNcbiAgICAgICAgLmNyZWF0ZShzdHJpcGVQbGFuKVxuICAgICAgICAudGhlbigoKSA9PiBwbGFuKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJBY2Nlc3N9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW46IGJvb2xlYW4gPSB1c2VyQWNjZXNzID4gMjtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpdGVtLmlkKTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7cGxhbklkLCB0cmlhbEVuZCwgdHJpYWxQZXJpb2R9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0UGxhbklkOiBzdHJpbmcgPSBwYXJzZUlkKHBsYW5JZCk7XG4gIGNvbnN0IGZvcm1hdFRyaWFsUGVyaW9kOiBudW1iZXIgPSAwO1xuICBsZXQgZm9ybWF0VHJpYWxFbmQ6IG51bWJlciA9IHRyaWFsRW5kIHx8IERhdGUubm93KCk7XG5cbiAgaWYoZm9ybWF0VHJpYWxQZXJpb2QpIHtcbiAgICBmb3JtYXRUcmlhbEVuZCA9IERhdGVUaW1lLmxvY2FsKCkucGx1cyh7ZGF5czogdHJpYWxQZXJpb2R9KS50b01pbGxpcygpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgIF9rZXk6IHN1YnNjcmlwdGlvbklkLFxuICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICBjYW5jZWxEYXRlOiAwLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBwbGFuSWQ6IGZvcm1hdFBsYW5JZCxcbiAgICAgICAgdHJpYWxFbmQ6IGZvcm1hdFRyaWFsRW5kLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwbGFucyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4ge1xuICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5zdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgY3VzdG9tZXI6IHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwbGFuOiBmb3JtYXRQbGFuSWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJpYWxfZW5kOiBmb3JtYXRUcmlhbEVuZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVN1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgcmV0dXJuIGdldFN1YnNjcmlwdGlvbihjb250ZXh0KVxuICAgIC50aGVuKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuc3Vic2NyaXB0aW9uc1xuICAgICAgICAuY2FuY2VsKHN1YnNjcmlwdGlvbi50cmFuc2FjdGlvbklkKVxuICAgICAgICAudGhlbigoe2NhbmNlbGVkX2F0OiBjYW5jZWxEYXRlfSkgPT4ge1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW5jZWxsZWQgb24gU3RyaXBlIGJlZm9yZSB1cGRhdGluZyB0aGUgZGJcbiAgICAgICAgICBpZihjYW5jZWxEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgIGNhbmNlbERhdGUsXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICAgIHBsYW5JZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSBzIFdJVEggJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNgO1xuXG4gICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgICAgICAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFB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
@@ -1,47 +1,32 @@
1
1
  var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
5
  var __getProtoOf = Object.getPrototypeOf;
9
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
- var __spreadValues = (a, b) => {
13
- for (var prop in b || (b = {}))
14
- if (__hasOwnProp.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- if (__getOwnPropSymbols)
17
- for (var prop of __getOwnPropSymbols(b)) {
18
- if (__propIsEnum.call(b, prop))
19
- __defNormalProp(a, prop, b[prop]);
20
- }
21
- return a;
22
- };
23
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
25
- var __require = typeof require !== "undefined" ? require : (x) => {
26
- throw new Error('Dynamic require of "' + x + '" is not supported');
27
- };
28
7
  var __export = (target, all) => {
29
- __markAsModule(target);
30
8
  for (var name in all)
31
9
  __defProp(target, name, { get: all[name], enumerable: true });
32
10
  };
33
- var __reExport = (target, module2, desc) => {
34
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
35
- for (let key of __getOwnPropNames(module2))
36
- if (!__hasOwnProp.call(target, key) && key !== "default")
37
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
38
16
  }
39
- return target;
17
+ return to;
40
18
  };
41
- var __toModule = (module2) => {
42
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
43
- };
44
- __export(exports, {
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var tags_exports = {};
29
+ __export(tags_exports, {
45
30
  addTag: () => addTag,
46
31
  addTagToItem: () => addTagToItem,
47
32
  createTag: () => createTag,
@@ -56,15 +41,16 @@ __export(exports, {
56
41
  linkTags: () => linkTags,
57
42
  updateTag: () => updateTag
58
43
  });
59
- var import_utils = __toModule(require("@nlabs/utils"));
60
- var import_arangojs = __toModule(require("arangojs"));
61
- var import_words = __toModule(require("lodash/words"));
62
- var import_utils2 = __toModule(require("../utils"));
44
+ module.exports = __toCommonJS(tags_exports);
45
+ var import_utils = require("@nlabs/utils");
46
+ var import_arangojs = require("arangojs");
47
+ var import_words = __toESM(require("lodash/words"));
48
+ var import_utils2 = require("../utils");
63
49
  const eventCategory = "tags";
64
- const getTags = (context, args) => {
50
+ const getTags = (context, options) => {
65
51
  const action = "getList";
66
52
  const { database } = context;
67
- const { search = "", from = 0, to = 30 } = args;
53
+ const { search = "", from = 0, to = 30 } = options;
68
54
  const limit = (0, import_utils2.getLimit)(from, to);
69
55
  const filter = search.length ? `FILTER LIKE(t.name, "%${search}%")` : "";
70
56
  const aqlQry = `FOR t IN tags
@@ -201,10 +187,11 @@ const updateTag = (context, item = {}) => {
201
187
  };
202
188
  const formatId = (0, import_utils.parseId)(id);
203
189
  const tagId = !formatId ? (0, import_utils.createHash)(`tag-${formatName.toLowerCase()}`, null) : formatId;
204
- const insert = __spreadProps(__spreadValues({}, update), {
190
+ const insert = {
191
+ ...update,
205
192
  _key: tagId,
206
193
  added: now
207
- });
194
+ };
208
195
  const aqlQry = import_arangojs.aql`UPSERT {_key: ${tagId}}
209
196
  INSERT ${insert}
210
197
  UPDATE ${update}
@@ -288,29 +275,35 @@ const createTagEdge = (db, tag, itemId) => {
288
275
  };
289
276
  const linkTags = async (db, tagNames, itemId) => {
290
277
  const edgeCollection = db.collection("isTagged");
291
- const edges = await edgeCollection.inEdges(itemId);
278
+ const edges = await edgeCollection.inEdges(itemId, {});
292
279
  console.log({ edges });
293
280
  if (edges.length) {
294
- await Promise.all(edges.map((edge) => {
295
- const { _key: edgeKey } = edge;
296
- const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
297
- return db.query(aqlQry);
298
- }));
281
+ await Promise.all(
282
+ edges.map((edge) => {
283
+ const { _key: edgeKey } = edge;
284
+ const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
285
+ return db.query(aqlQry);
286
+ })
287
+ );
299
288
  }
300
- return Promise.all(tagNames.map((tagName) => createTag(db, tagName).then((tag) => createTagEdge(db, tag, itemId))));
289
+ return Promise.all(
290
+ tagNames.map((tagName) => createTag(db, tagName).then((tag) => createTagEdge(db, tag, itemId)))
291
+ );
301
292
  };
302
293
  const extractTags = (db, itemId, content) => {
303
294
  const tags = (0, import_words.default)(content, /#[a-zA-Z\d-]+/g).map((tag) => (0, import_utils.parseId)(tag));
304
295
  const edgeCollection = db.collection("isTagged");
305
- return edgeCollection.inEdges(itemId).then((edges) => {
296
+ return edgeCollection.inEdges(itemId, {}).then((edges) => {
306
297
  if (edges.length) {
307
- return Promise.all(edges.map((edge) => {
308
- const { _key: edgeKey } = edge;
309
- const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
310
- return db.query(aqlQry).catch((error) => {
311
- throw error;
312
- });
313
- })).then(() => {
298
+ return Promise.all(
299
+ edges.map((edge) => {
300
+ const { _key: edgeKey } = edge;
301
+ const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
302
+ return db.query(aqlQry).catch((error) => {
303
+ throw error;
304
+ });
305
+ })
306
+ ).then(() => {
314
307
  if (tags.length) {
315
308
  return linkTags(db, tags, itemId);
316
309
  }
@@ -340,4 +333,4 @@ const extractTags = (db, itemId, content) => {
340
333
  linkTags,
341
334
  updateTag
342
335
  });
343
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvdGFncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQgd29yZHMgZnJvbSAnbG9kYXNoL3dvcmRzJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFyZ3Ncbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3Qge3NlYXJjaCA9ICcnLCBmcm9tID0gMCwgdG8gPSAzMH0gPSBhcmdzO1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgZmlsdGVyOiBzdHJpbmcgPSBzZWFyY2gubGVuZ3RoID8gYEZJTFRFUiBMSUtFKHQubmFtZSwgXCIlJHtzZWFyY2h9JVwiKWAgOiAnJztcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgICR7ZmlsdGVyfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgdC5uYW1lXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdCA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnc0J5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZywgIGFyZ3MpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2Zyb20gPSAwLCB0byA9IDMwfSA9IGFyZ3M7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgY29uc3QgdGFnUXVlcnk6IHN0cmluZyA9IGBGT1IgdCwgaXQgSU4gSU5CT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGlzVGFnZ2VkXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBpdC5hZGRlZFxuICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkodGFnUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSB8fCBbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3NCeU93bmVyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFyZ3MpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2Zyb20gPSAwLCBpZCwgdG8gPSAzMH0gPSBhcmdzO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC51c2VySWQgPT0gXCIke2lkfVwiXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCB0LmFkZGVkXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdCA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocGFyc2VJZCh0YWdJZCkpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdElkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB7dGFnfSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJBY2Nlc3N9ID0gc2Vzc2lvbjtcblxuICBpZih1c2VyQWNjZXNzIDwgMykge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHNlc3Npb24pO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7ZGVzY3JpcHRpb24sIG5hbWV9ID0gdGFnO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnLSR7bmFtZS50b0xvd2VyY2FzZSgpfWAsIG51bGwpO1xuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIF9rZXk6IGZvcm1hdElkLFxuICAgIGFkZGVkOiBub3csXG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogcGFyc2VWYXJDaGFyKG5hbWUsIDMyKVxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZzogVGFnVHlwZSA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRUYWdUb0l0ZW0gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge2l0ZW1JZCwgdGFnSWR9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFRhZ1RvSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBhZGRlZDogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodGFnSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBpc1RhZ2dlZC0ke2Zvcm1hdFRhZ0lkfS0ke2Zvcm1hdEl0ZW1JZH1gLCBudWxsKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge19mcm9tOiBmb3JtYXRUYWdJZCwgX2tleTogZWRnZUlkLCBfdG86IGZvcm1hdEl0ZW1JZCwgYWRkZWR9O1xuICBjb25zb2xlLmxvZyh7ZWRnZX0pO1xuICBhd2FpdCBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtvdmVyd3JpdGVNb2RlOiAnaWdub3JlJywgc2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9XG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuICBjb25zdCB0YWdRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHQgPSBET0NVTUVOVCgke2Zvcm1hdFRhZ0lkfSkgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9XG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IFRhZ1R5cGUgPSB7fSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJBY2Nlc3N9ID0gc2Vzc2lvbjtcblxuICBpZih1c2VyQWNjZXNzIDwgMykge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHNlc3Npb24pO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7ZGVzY3JpcHRpb24sIGlkLCBuYW1lfSA9IGl0ZW07XG4gIGNvbnN0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihuYW1lLCAzMik7XG5cbiAgY29uc3QgdXBkYXRlOiBUYWdUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcblxuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSAhZm9ybWF0SWQgPyBjcmVhdGVIYXNoKGB0YWctJHtmb3JtYXROYW1lLnRvTG93ZXJDYXNlKCl9YCwgbnVsbCkgOiBmb3JtYXRJZDtcblxuICBjb25zdCBpbnNlcnQ6IFRhZ1R5cGUgPSB7XG4gICAgLi4udXBkYXRlLFxuICAgIF9rZXk6IHRhZ0lkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7dGFnSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt0YWdJZH0pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVGFnJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt1c2VyQWNjZXNzfSA9IHNlc3Npb247XG5cbiAgaWYodXNlckFjY2VzcyA8IDMpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBzZXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0lkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdFRhZ0lkfVxuICAgIFJFTU9WRSB0IElOIHRhZ3NcbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnRnJvbUl0ZW0gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge2l0ZW1JZCwgdGFnSWR9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVRhZ0Zyb21JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHRhZ0lkKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaXNUYWdnZWQtJHtmb3JtYXRUYWdJZH0tJHtmb3JtYXRJdGVtSWR9YCwgbnVsbCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IGVkZ2U6IGFueSA9IHtfa2V5OiBlZGdlSWR9O1xuXG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnJlbW92ZShlZGdlLCB7c2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG4gIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdCA9IERPQ1VNRU5UKCR7dGFnSWR9KSBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnID0gKGRiOiBEYXRhYmFzZSwgdGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHt0YWdOYW1lLnRvTG93ZXJDYXNlKCl9YCwgbnVsbCk7XG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICBfa2V5OiB0YWdJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiB0YWdOYW1lXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt0YWdJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSB7fVxuICAgIElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnRWRnZSA9IChkYjogRGF0YWJhc2UsIHRhZzogVGFnVHlwZSwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCB7X2lkOiB0YWdJZH0gPSB0YWc7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGlzVGFnZ2VkLSR7dGFnSWR9LSR7aXRlbUlkfWApO1xuICBjb25zdCB0eXBlOiBzdHJpbmcgPSBpdGVtSWQuc3BsaXQoJy8nKVswXTtcbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9mcm9tOiB0YWdJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBpdGVtSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgdHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHRhZyk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlua1RhZ3MgPSBhc3luYyAoZGI6IERhdGFiYXNlLCB0YWdOYW1lczogc3RyaW5nW10sIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlczogYW55ID0gYXdhaXQgZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhpdGVtSWQpO1xuXG4gIGNvbnNvbGUubG9nKHtlZGdlc30pO1xuICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICBjb25zdCBhcWxRcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzVGFnZ2VkYDtcbiAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwodGFnTmFtZXMubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IGNyZWF0ZVRhZyhkYiwgdGFnTmFtZSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlKSA9PiBjcmVhdGVUYWdFZGdlKGRiLCB0YWcsIGl0ZW1JZCkpKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYWdzID0gKGRiOiBEYXRhYmFzZSwgaXRlbUlkLCBjb250ZW50KTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgdGFnczogc3RyaW5nW10gPSB3b3Jkcyhjb250ZW50LCAvI1thLXpBLVpcXGQtXSsvZykubWFwKCh0YWc6IHN0cmluZykgPT4gcGFyc2VJZCh0YWcpKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZClcbiAgICAudGhlbigoZWRnZXM6IGFueSkgPT4ge1xuICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaXNUYWdnZWRgO1xuICAgICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZih0YWdzLmxlbmd0aCkge1xuICAgICAgICAvLyBDcmVhdGUgdGFnc1xuICAgICAgICByZXR1cm4gbGlua1RhZ3MoZGIsIHRhZ3MsIGl0ZW1JZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUErRDtBQUMvRCxzQkFBNEI7QUFJNUIsbUJBQWtCO0FBS2xCLG9CQUErQztBQU0vQyxNQUFNLGdCQUF3QjtBQUV2QixNQUFNLFVBQVUsQ0FDckIsU0FDQSxTQUN1QjtBQUN2QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sRUFBQyxTQUFTLElBQUksT0FBTyxHQUFHLEtBQUssT0FBTTtBQUN6QyxRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxTQUFpQixPQUFPLFNBQVMseUJBQXlCLGNBQWM7QUFDOUUsUUFBTSxTQUFpQjtBQUFBLE1BQ25CO0FBQUEsTUFDQSxNQUFNO0FBQUE7QUFBQTtBQUlWLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLE9BQ3JDLEtBQUssQ0FBQyxPQUFPLE9BQU8sTUFDcEIsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLGdCQUFnQixDQUFDLFNBQXFCLFFBQWlCLFNBQTZCO0FBQy9GLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLE9BQU8sR0FBRyxLQUFLLE9BQU07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
336
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvdGFncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZCwgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IHdvcmRzIGZyb20gJ2xvZGFzaC93b3Jkcyc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGInO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB7VGFnVHlwZX0gZnJvbSAnLi4vdHlwZXMvdGFncyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcbmV4cG9ydCBpbnRlcmZhY2UgVGFnT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZztcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zPzogVGFnT3B0aW9uc1xuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7c2VhcmNoID0gJycsIGZyb20gPSAwLCB0byA9IDMwfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBmaWx0ZXI6IHN0cmluZyA9IHNlYXJjaC5sZW5ndGggPyBgRklMVEVSIExJS0UodC5uYW1lLCBcIiUke3NlYXJjaH0lXCIpYCA6ICcnO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdzXG4gICAgJHtmaWx0ZXJ9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCB0Lm5hbWVcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWdzQnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nLCAgYXJncyk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzB9ID0gYXJncztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBjb25zdCB0YWdRdWVyeTogc3RyaW5nID0gYEZPUiB0LCBpdCBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaXNUYWdnZWRcbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIGl0LmFkZGVkXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIHx8IFtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnc0J5T3duZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYXJncyk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZnJvbSA9IDAsIGlkLCB0byA9IDMwfSA9IGFyZ3M7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgIEZJTFRFUiB0LnVzZXJJZCA9PSBcIiR7aWR9XCJcbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIHQuYWRkZWRcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJzZUlkKHRhZ0lkKSk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC5fa2V5ID09ICR7Zm9ybWF0SWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt0YWd9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFRhZyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCB7dXNlckFjY2Vzc30gPSBzZXNzaW9uO1xuXG4gIGlmKHVzZXJBY2Nlc3MgPCAzKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgc2Vzc2lvbik7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgbmFtZX0gPSB0YWc7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHtuYW1lLnRvTG93ZXJjYXNlKCl9YCwgbnVsbCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVZhckNoYXIobmFtZSwgMzIpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFRhZ1RvSXRlbSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB7aXRlbUlkLCB0YWdJZH0pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkVGFnVG9JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFkZGVkOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRUYWdJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZCh0YWdJZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGlzVGFnZ2VkLSR7Zm9ybWF0VGFnSWR9LSR7Zm9ybWF0SXRlbUlkfWAsIG51bGwpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7X2Zyb206IGZvcm1hdFRhZ0lkLCBfa2V5OiBlZGdlSWQsIF90bzogZm9ybWF0SXRlbUlkLCBhZGRlZH07XG4gIGNvbnNvbGUubG9nKHtlZGdlfSk7XG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge292ZXJ3cml0ZU1vZGU6ICdpZ25vcmUnLCBzaWxlbnQ6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGVkZ2VcbiAgICAgIH1cbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcblxuXG4gIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdCA9IERPQ1VNRU5UKCR7Zm9ybWF0VGFnSWR9KSBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGVkZ2VcbiAgICAgIH1cbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogVGFnVHlwZSA9IHt9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCB7dXNlckFjY2Vzc30gPSBzZXNzaW9uO1xuXG4gIGlmKHVzZXJBY2Nlc3MgPCAzKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgc2Vzc2lvbik7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgaWQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKG5hbWUsIDMyKTtcblxuICBjb25zdCB1cGRhdGU6IFRhZ1R5cGUgPSB7XG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogZm9ybWF0TmFtZVxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGlkKTtcbiAgY29uc3QgdGFnSWQ6IHN0cmluZyA9ICFmb3JtYXRJZCA/IGNyZWF0ZUhhc2goYHRhZy0ke2Zvcm1hdE5hbWUudG9Mb3dlckNhc2UoKX1gLCBudWxsKSA6IGZvcm1hdElkO1xuXG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogdGFnSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt0YWdJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZyA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwge3RhZ0lkfSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJBY2Nlc3N9ID0gc2Vzc2lvbjtcblxuICBpZih1c2VyQWNjZXNzIDwgMykge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHNlc3Npb24pO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlSWQodGFnSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC5fa2V5ID09ICR7Zm9ybWF0VGFnSWR9XG4gICAgUkVNT1ZFIHQgSU4gdGFnc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZzogVGFnVHlwZSA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWdGcm9tSXRlbSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB7aXRlbUlkLCB0YWdJZH0pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVGFnRnJvbUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodGFnSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBpc1RhZ2dlZC0ke2Zvcm1hdFRhZ0lkfS0ke2Zvcm1hdEl0ZW1JZH1gLCBudWxsKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge19rZXk6IGVkZ2VJZH07XG5cbiAgYXdhaXQgZWRnZUNvbGxlY3Rpb24ucmVtb3ZlKGVkZ2UsIHtzaWxlbnQ6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cbiAgY29uc3QgdGFnUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCB0ID0gRE9DVU1FTlQoJHt0YWdJZH0pIFJFVFVSTiB0YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkodGFnUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUYWcgPSAoZGI6IERhdGFiYXNlLCB0YWdOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgdGFnSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZy0ke3RhZ05hbWUudG9Mb3dlckNhc2UoKX1gLCBudWxsKTtcbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIF9rZXk6IHRhZ0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IHRhZ05hbWVcbiAgfTtcblxuICBjb25zdCBhcWxRcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3RhZ0lkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFIHt9XG4gICAgSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUYWdFZGdlID0gKGRiOiBEYXRhYmFzZSwgdGFnOiBUYWdUeXBlLCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IHtfaWQ6IHRhZ0lkfSA9IHRhZztcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaXNUYWdnZWQtJHt0YWdJZH0tJHtpdGVtSWR9YCk7XG4gIGNvbnN0IHR5cGU6IHN0cmluZyA9IGl0ZW1JZC5zcGxpdCgnLycpWzBdO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IHRhZ0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGl0ZW1JZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICB0eXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pLnRoZW4oKCkgPT4gdGFnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaW5rVGFncyA9IGFzeW5jIChkYjogRGF0YWJhc2UsIHRhZ05hbWVzOiBzdHJpbmdbXSwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IGVkZ2VzOiBhbnkgPSBhd2FpdCBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZCwge30pO1xuXG4gIGNvbnNvbGUubG9nKHtlZGdlc30pO1xuICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICBjb25zdCBhcWxRcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzVGFnZ2VkYDtcbiAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwodGFnTmFtZXMubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IGNyZWF0ZVRhZyhkYiwgdGFnTmFtZSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlKSA9PiBjcmVhdGVUYWdFZGdlKGRiLCB0YWcsIGl0ZW1JZCkpKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYWdzID0gKGRiOiBEYXRhYmFzZSwgaXRlbUlkLCBjb250ZW50KTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgdGFnczogc3RyaW5nW10gPSB3b3Jkcyhjb250ZW50LCAvI1thLXpBLVpcXGQtXSsvZykubWFwKCh0YWc6IHN0cmluZykgPT4gcGFyc2VJZCh0YWcpKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZCwge30pXG4gICAgLnRoZW4oKGVkZ2VzOiBhbnkpID0+IHtcbiAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzVGFnZ2VkYDtcbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShhcWxRcnkpLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZih0YWdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgdGFnc1xuICAgICAgICAgICAgICByZXR1cm4gbGlua1RhZ3MoZGIsIHRhZ3MsIGl0ZW1JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYodGFncy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRhZ3NcbiAgICAgICAgcmV0dXJuIGxpbmtUYWdzKGRiLCB0YWdzLCBpdGVtSWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBK0Q7QUFDL0Qsc0JBQTRCO0FBSTVCLG1CQUFrQjtBQUtsQixJQUFBQSxnQkFBK0M7QUFFL0MsTUFBTSxnQkFBd0I7QUFPdkIsTUFBTSxVQUFVLENBQ3JCLFNBQ0EsWUFDdUI7QUFDdkIsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sRUFBQyxTQUFTLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRSxJQUFJO0FBQ3pDLFFBQU0sWUFBdUIsd0JBQVMsTUFBTSxFQUFFO0FBQzlDLFFBQU0sU0FBaUIsT0FBTyxTQUFTLHlCQUF5QixNQUFNLFFBQVE7QUFDOUUsUUFBTSxTQUFpQjtBQUFBLE1BQ25CLE1BQU07QUFBQSxNQUNOLE1BQU0sR0FBRztBQUFBO0FBQUE7QUFJYixTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLElBQUksQ0FBQyxFQUMxQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUN4QixNQUFNLENBQUMsY0FBaUIsd0JBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDQyxXQUFVLFFBQVEsT0FBT0EsTUFBSyxDQUFDLENBQUM7QUFDMUU7QUFFTyxNQUFNLGdCQUFnQixDQUFDLFNBQXFCLFFBQWlCLFNBQTZCO0FBQy9GLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLE9BQU8sR0FBRyxLQUFLLEdBQUUsSUFBSTtBQUM1QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sWUFBdUIsd0JBQVMsTUFBTSxFQUFFO0FBQzlDLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFFakQsUUFBTSxXQUFtQix5QkFBeUIsWUFBWTtBQUFBLE1BQzFELE1BQU0sR0FBRztBQUFBO0FBQUE7QUFJYixTQUFPLFNBQVMsTUFBTSxRQUFRLEVBQzNCLEtBQUssQ0FBQyxXQUF3QixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsRUFDaEQsTUFBTSxDQUFDLGNBQWlCLHdCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxFQUNULEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sSUFBSSxFQUFFLE1BQU0sQ0FBQ0EsV0FBVSxRQUFRLE9BQU9BLE1BQUssQ0FBQyxDQUFDO0FBQzFFO0FBRU8sTUFBTSxpQkFBaUIsQ0FBQyxTQUFxQixTQUE2QjtBQUMvRSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLEdBQUUsSUFBSTtBQUNoQyxRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sWUFBdUIsd0JBQVMsTUFBTSxFQUFFO0FBQzlDLFFBQU0sU0FBaUI7QUFBQSwwQkFDQyxFQUFFO0FBQUEsTUFDdEIsTUFBTSxHQUFHO0FBQUE7QUFBQTtBQUliLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sSUFBSSxDQUFDLEVBQzFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQ3hCLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUNBLFdBQVUsUUFBUSxPQUFPQSxNQUFLLENBQUMsQ0FBQztBQUMxRTtBQUVPLE1BQU0sU0FBUyxDQUFDLFNBQXFCLFVBQW9DO0FBQzlFLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLFdBQW1CLEtBQUssY0FBVSxzQkFBUSxLQUFLLENBQUM7QUFDdEQsUUFBTSxTQUFpQjtBQUFBLHVCQUNGLFFBQVE7QUFBQTtBQUFBO0FBSTdCLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sS0FBSyxDQUFDLEVBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQ3RCLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUNBLFdBQVUsUUFBUSxPQUFPQSxNQUFLLENBQUMsQ0FBQztBQUMxRTtBQUVPLE1BQU0sU0FBUyxDQUFDLFNBQXFCLEVBQUMsSUFBRyxNQUF3QjtBQUN0RSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFFBQU8sSUFBSTtBQUM1QixRQUFNLEVBQUMsV0FBVSxJQUFJO0FBRXJCLE1BQUcsYUFBYSxHQUFHO0FBQ2pCLGVBQU8sNEJBQWE7QUFBQSxNQUNsQjtBQUFBLE1BQ0EsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLElBQ1QsR0FBRyxPQUFPO0FBQUEsRUFDWjtBQUVBLFFBQU0sTUFBYyxLQUFLLElBQUk7QUFDN0IsUUFBTSxFQUFDLGFBQWEsS0FBSSxJQUFJO0FBQzVCLFFBQU0sZUFBbUIseUJBQVcsT0FBTyxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUk7QUFFckUsUUFBTSxTQUFjO0FBQUEsSUFDbEIsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsaUJBQWEsMkJBQWEsYUFBYSxFQUFFO0FBQUEsSUFDekMsVUFBVTtBQUFBLElBQ1YsVUFBTSwyQkFBYSxNQUFNLEVBQUU7QUFBQSxFQUM3QjtBQUVBLFFBQU0sU0FBbUIsNkJBQWEsTUFBTTtBQUU1QyxTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxLQUFLLENBQUNDLE9BQWUsQ0FBQyxNQUFNQSxJQUFHLEVBQy9CLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUNELFdBQVUsUUFBUSxPQUFPQSxNQUFLLENBQUMsQ0FBQztBQUMxRTtBQUVPLE1BQU0sZUFBZSxPQUFPLFNBQXFCLEVBQUMsUUFBUSxNQUFLLE1BQXdCO0FBQzVGLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLFFBQWdCLEtBQUssSUFBSTtBQUMvQixRQUFNLGtCQUFzQiw0QkFBYyxLQUFLO0FBQy9DLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFDakQsUUFBTSxhQUFpQix5QkFBVyxZQUFZLFdBQVcsSUFBSSxZQUFZLElBQUksSUFBSTtBQUNqRixRQUFNLGlCQUFpQyxTQUFTLFdBQVcsVUFBVTtBQUNyRSxRQUFNLE9BQVksRUFBQyxPQUFPLGFBQWEsTUFBTSxRQUFRLEtBQUssY0FBYyxNQUFLO0FBQzdFLFVBQVEsSUFBSSxFQUFDLEtBQUksQ0FBQztBQUNsQixRQUFNLGVBQWUsS0FBSyxNQUFNLEVBQUMsZUFBZSxVQUFVLFFBQVEsS0FBSSxDQUFDLEVBQ3BFLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsTUFDTjtBQUFBLElBQ0Y7QUFBQSxFQUNGLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sSUFBSSxFQUFFLE1BQU0sQ0FBQ0EsV0FBVSxRQUFRLE9BQU9BLE1BQUssQ0FBQyxDQUFDO0FBR3hFLFFBQU0sV0FBcUIsdUNBQXVCLFdBQVc7QUFFN0QsU0FBTyxTQUFTLE1BQU0sUUFBUSxFQUMzQixLQUFLLENBQUMsV0FBd0IsT0FBTyxLQUFLLENBQUMsRUFDM0MsTUFBTSxDQUFDLGNBQWlCLHdCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDQSxXQUFVLFFBQVEsT0FBT0EsTUFBSyxDQUFDLENBQUM7QUFDMUU7QUFFTyxNQUFNLFlBQVksQ0FBQyxTQUFxQixPQUFnQixDQUFDLE1BQXdCO0FBQ3RGLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsUUFBTyxJQUFJO0FBQzVCLFFBQU0sRUFBQyxXQUFVLElBQUk7QUFFckIsTUFBRyxhQUFhLEdBQUc7QUFDakIsZUFBTyw0QkFBYTtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsSUFDVCxHQUFHLE9BQU87QUFBQSxFQUNaO0FBRUEsUUFBTSxNQUFjLEtBQUssSUFBSTtBQUM3QixRQUFNLEVBQUMsYUFBYSxJQUFJLEtBQUksSUFBSTtBQUNoQyxRQUFNLGlCQUFxQiwyQkFBYSxNQUFNLEVBQUU7QUFFaEQsUUFBTSxTQUFrQjtBQUFBLElBQ3RCLGlCQUFhLDJCQUFhLGFBQWEsRUFBRTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxFQUNSO0FBRUEsUUFBTSxlQUFtQixzQkFBUSxFQUFFO0FBQ25DLFFBQU0sUUFBZ0IsQ0FBQyxlQUFXLHlCQUFXLE9BQU8sV0FBVyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUk7QUFFeEYsUUFBTSxTQUFrQjtBQUFBLElBQ3RCLEdBQUc7QUFBQSxJQUNILE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxFQUNUO0FBQ0EsUUFBTSxTQUFtQixvQ0FBb0IsS0FBSztBQUFBLGFBQ3ZDLE1BQU07QUFBQSxhQUNOLE1BQU07QUFBQTtBQUdqQixTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUN0QixNQUFNLENBQUMsY0FBaUIsd0JBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDQSxXQUFVLFFBQVEsT0FBT0EsTUFBSyxDQUFDLENBQUM7QUFDMUU7QUFFTyxNQUFNLFlBQVksQ0FBQyxTQUFxQixFQUFDLE1BQUssTUFBd0I7QUFDM0UsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxRQUFPLElBQUk7QUFDNUIsUUFBTSxFQUFDLFdBQVUsSUFBSTtBQUVyQixNQUFHLGFBQWEsR0FBRztBQUNqQixlQUFPLDRCQUFhO0FBQUEsTUFDbEI7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU87QUFBQSxJQUNULEdBQUcsT0FBTztBQUFBLEVBQ1o7QUFFQSxRQUFNLGtCQUFzQixzQkFBUSxLQUFLO0FBQ3pDLFFBQU0sU0FBbUI7QUFBQSx1QkFDSixXQUFXO0FBQUE7QUFBQTtBQUloQyxTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxLQUFLLENBQUMsTUFBZSxDQUFDLE1BQU0sR0FBRyxFQUMvQixNQUFNLENBQUMsY0FBaUIsd0JBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDQSxXQUFVLFFBQVEsT0FBT0EsTUFBSyxDQUFDLENBQUM7QUFDMUU7QUFFTyxNQUFNLG9CQUFvQixPQUFPLFNBQXFCLEVBQUMsUUFBUSxNQUFLLE1BQXdCO0FBQ2pHLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLGtCQUFzQiw0QkFBYyxLQUFLO0FBQy9DLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFDakQsUUFBTSxhQUFpQix5QkFBVyxZQUFZLFdBQVcsSUFBSSxZQUFZLElBQUksSUFBSTtBQUNqRixRQUFNLGlCQUFpQyxTQUFTLFdBQVcsVUFBVTtBQUNyRSxRQUFNLE9BQVksRUFBQyxNQUFNLE9BQU07QUFFL0IsUUFBTSxlQUFlLE9BQU8sTUFBTSxFQUFDLFFBQVEsS0FBSSxDQUFDLEVBQzdDLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUNBLFdBQVUsUUFBUSxPQUFPQSxNQUFLLENBQUMsQ0FBQztBQUV4RSxRQUFNLFdBQXFCLHVDQUF1QixLQUFLO0FBRXZELFNBQU8sU0FBUyxNQUFNLFFBQVEsRUFDM0IsS0FBSyxDQUFDLFdBQXdCLE9BQU8sS0FBSyxDQUFDLEVBQzNDLE1BQU0sQ0FBQyxjQUFpQix3QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLENBQUNBLFdBQVUsUUFBUSxPQUFPQSxNQUFLLENBQUMsQ0FBQztBQUMxRTtBQUVPLE1BQU0sWUFBWSxDQUFDLElBQWMsWUFBc0M7QUFDNUUsUUFBTSxZQUFnQix5QkFBVyxPQUFPLFFBQVEsWUFBWSxDQUFDLElBQUksSUFBSTtBQUNyRSxRQUFNLFNBQWtCO0FBQUEsSUFDdEIsTUFBTTtBQUFBLElBQ04sT0FBTyxLQUFLLElBQUk7QUFBQSxJQUNoQixNQUFNO0FBQUEsRUFDUjtBQUVBLFFBQU0sU0FBUyxvQ0FBb0IsS0FBSztBQUFBLGFBQzdCLE1BQU07QUFBQTtBQUFBO0FBSWpCLFNBQU8sR0FBRyxNQUFNLE1BQU0sRUFDbkIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sS0FBSyxDQUFDLEVBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQ3RCLE1BQU0sQ0FBQyxVQUFpQjtBQUN2QixVQUFNO0FBQUEsRUFDUixDQUFDO0FBQ0w7QUFFTyxNQUFNLGdCQUFnQixDQUFDLElBQWMsS0FBYyxXQUFxQztBQUM3RixRQUFNLGlCQUFpQixHQUFHLFdBQVcsVUFBVTtBQUMvQyxRQUFNLEVBQUMsS0FBSyxNQUFLLElBQUk7QUFDckIsUUFBTSxhQUFTLHlCQUFXLFlBQVksS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUN2RCxRQUFNLE9BQWUsT0FBTyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLFFBQU0sT0FBWTtBQUFBLElBQ2hCLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLE9BQU8sS0FBSyxJQUFJO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBRUEsU0FBTyxlQUFlLEtBQUssTUFBTSxFQUFDLFdBQVcsS0FBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLEdBQUc7QUFDcEU7QUFFTyxNQUFNLFdBQVcsT0FBTyxJQUFjLFVBQW9CLFdBQXVDO0FBQ3RHLFFBQU0saUJBQWlCLEdBQUcsV0FBVyxVQUFVO0FBQy9DLFFBQU0sUUFBYSxNQUFNLGVBQWUsUUFBUSxRQUFRLENBQUMsQ0FBQztBQUUxRCxVQUFRLElBQUksRUFBQyxNQUFLLENBQUM7QUFDbkIsTUFBRyxNQUFNLFFBQVE7QUFDZixVQUFNLFFBQVE7QUFBQSxNQUNaLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDbEIsY0FBTSxFQUFDLE1BQU0sUUFBTyxJQUFJO0FBQ3hCLGNBQU0sU0FBUyxtQ0FBbUIsT0FBTztBQUN6QyxlQUFPLEdBQUcsTUFBTSxNQUFNO0FBQUEsTUFDeEIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUEsU0FBTyxRQUFRO0FBQUEsSUFBSSxTQUFTLElBQUksQ0FBQyxZQUFvQixVQUFVLElBQUksT0FBTyxFQUN2RSxLQUFLLENBQUMsUUFBaUIsY0FBYyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxFQUN6RDtBQUNGO0FBRU8sTUFBTSxjQUFjLENBQUMsSUFBYyxRQUFRLFlBQWdDO0FBQ2hGLFFBQU0sV0FBaUIsYUFBQUUsU0FBTSxTQUFTLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFnQixzQkFBUSxHQUFHLENBQUM7QUFDekYsUUFBTSxpQkFBaUIsR0FBRyxXQUFXLFVBQVU7QUFFL0MsU0FBTyxlQUFlLFFBQVEsUUFBUSxDQUFDLENBQUMsRUFDckMsS0FBSyxDQUFDLFVBQWU7QUFDcEIsUUFBRyxNQUFNLFFBQVE7QUFFZixhQUFPLFFBQVE7QUFBQSxRQUNiLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDbEIsZ0JBQU0sRUFBQyxNQUFNLFFBQU8sSUFBSTtBQUN4QixnQkFBTSxTQUFTLG1DQUFtQixPQUFPO0FBQ3pDLGlCQUFPLEdBQUcsTUFBTSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQWlCO0FBQzlDLGtCQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFBQyxFQUNELEtBQUssTUFBTTtBQUNWLFlBQUcsS0FBSyxRQUFRO0FBRWQsaUJBQU8sU0FBUyxJQUFJLE1BQU0sTUFBTTtBQUFBLFFBQ2xDO0FBQ0EsZUFBTyxDQUFDO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFDTCxXQUFVLEtBQUssUUFBUTtBQUVyQixhQUFPLFNBQVMsSUFBSSxNQUFNLE1BQU07QUFBQSxJQUNsQztBQUNBLFdBQU8sQ0FBQztBQUFBLEVBQ1YsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxVQUFpQjtBQUN2QixVQUFNO0FBQUEsRUFDUixDQUFDO0FBQ0w7IiwKICAibmFtZXMiOiBbImltcG9ydF91dGlscyIsICJlcnJvciIsICJ0YWciLCAid29yZHMiXQp9Cg==