@nlabs/reaktor 0.2.3 → 0.4.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 (52) hide show
  1. package/lib/config.js +12 -4
  2. package/lib/data/conversations.d.ts +3 -1
  3. package/lib/data/conversations.js +150 -65
  4. package/lib/data/dynamodb.d.ts +8 -8
  5. package/lib/data/dynamodb.js +65 -33
  6. package/lib/data/email.d.ts +2 -2
  7. package/lib/data/email.js +52 -24
  8. package/lib/data/files.js +71 -11
  9. package/lib/data/groups.js +37 -3
  10. package/lib/data/images.d.ts +3 -2
  11. package/lib/data/images.js +425 -273
  12. package/lib/data/index.d.ts +1 -0
  13. package/lib/data/index.js +33 -1
  14. package/lib/data/ios.d.ts +5 -5
  15. package/lib/data/ios.js +47 -21
  16. package/lib/data/locations.js +28 -4
  17. package/lib/data/messages.js +89 -73
  18. package/lib/data/notifications.d.ts +2 -2
  19. package/lib/data/notifications.js +6 -6
  20. package/lib/data/payments.d.ts +3 -4
  21. package/lib/data/payments.js +228 -257
  22. package/lib/data/posts.d.ts +1 -1
  23. package/lib/data/posts.js +88 -12
  24. package/lib/data/reactions.d.ts +1 -1
  25. package/lib/data/reactions.js +56 -14
  26. package/lib/data/s3.d.ts +6 -6
  27. package/lib/data/s3.js +10 -2
  28. package/lib/data/search.js +46 -4
  29. package/lib/data/sms.js +5 -1
  30. package/lib/data/subscription.d.ts +1 -1
  31. package/lib/data/subscription.js +46 -20
  32. package/lib/data/tags.js +60 -8
  33. package/lib/data/users.d.ts +7 -4
  34. package/lib/data/users.js +83 -32
  35. package/lib/data/websockets.d.ts +6 -0
  36. package/lib/data/websockets.js +250 -0
  37. package/lib/index.js +4 -1
  38. package/lib/types/conversations.d.ts +2 -0
  39. package/lib/types/index.js +18 -1
  40. package/lib/types/payments.d.ts +1 -0
  41. package/lib/types/posts.d.ts +2 -0
  42. package/lib/types/reactions.d.ts +2 -0
  43. package/lib/types/users.d.ts +1 -0
  44. package/lib/utils/analytics.js +28 -6
  45. package/lib/utils/arangodb.d.ts +2 -1
  46. package/lib/utils/arangodb.js +31 -10
  47. package/lib/utils/auth.js +21 -3
  48. package/lib/utils/graphql.js +3 -1
  49. package/lib/utils/index.js +7 -1
  50. package/lib/utils/objects.js +9 -1
  51. package/lib/utils/redis.js +6 -2
  52. package/package.json +33 -31
@@ -1,5 +1,25 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.symbol");
4
+
5
+ require("core-js/modules/es.symbol.description");
6
+
7
+ require("core-js/modules/es.array.slice");
8
+
9
+ require("core-js/modules/es.date.now");
10
+
11
+ require("core-js/modules/es.date.to-string");
12
+
13
+ require("core-js/modules/es.function.name");
14
+
15
+ require("core-js/modules/es.object.define-properties");
16
+
17
+ require("core-js/modules/es.object.freeze");
18
+
19
+ require("core-js/modules/es.object.to-string");
20
+
21
+ require("core-js/modules/es.promise");
22
+
3
23
  Object.defineProperty(exports, "__esModule", {
4
24
  value: true
5
25
  });
@@ -11,7 +31,7 @@ var _arangojs = require("arangojs");
11
31
 
12
32
  var _luxon = require("luxon");
13
33
 
14
- var stripe = _interopRequireWildcard(require("stripe"));
34
+ var _stripe = _interopRequireDefault(require("stripe"));
15
35
 
16
36
  var _config = require("../config");
17
37
 
@@ -19,7 +39,7 @@ var _utils2 = require("../utils");
19
39
 
20
40
  var _users = require("./users");
21
41
 
22
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
42
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
43
 
24
44
  function _templateObject3() {
25
45
  var data = _taggedTemplateLiteral(["UPDATE s WITH ", " IN subscriptions"]);
@@ -54,6 +74,7 @@ function _templateObject() {
54
74
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
55
75
 
56
76
  var eventCategory = 'subscription';
77
+ var apiVersion = '2020-03-02';
57
78
 
58
79
  var getPlanList = function getPlanList(context) {
59
80
  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
@@ -157,8 +178,11 @@ var addPlan = function addPlan(context, item) {
157
178
  }).then(function () {
158
179
  var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
159
180
  // Stripe
160
- var stripeClient = stripe(_config.Config.get('stripe.token'));
161
- return stripeClient.plans.create({
181
+ var stripeClient = new _stripe["default"](_config.Config.get('stripe.token'), {
182
+ apiVersion: apiVersion,
183
+ typescript: true
184
+ });
185
+ var stripePlan = {
162
186
  amount: formatAmount * 100,
163
187
  currency: currency,
164
188
  id: planId,
@@ -167,7 +191,8 @@ var addPlan = function addPlan(context, item) {
167
191
  metadata: {},
168
192
  name: formatName,
169
193
  statement_descriptor: formatDesc
170
- }).then(function () {
194
+ };
195
+ return stripeClient.plans.create(stripePlan).then(function () {
171
196
  return plan;
172
197
  });
173
198
  })["catch"](function (error) {
@@ -207,12 +232,10 @@ var addSubscription = function addSubscription(context, item) {
207
232
  var formatId = (0, _utils.parseId)(item.id);
208
233
  var subscriptionId = formatId === '' ? (0, _utils.createHash)("tag-".concat(sessionId)) : formatId;
209
234
  var planId = item.planId,
210
- tax = item.tax,
211
235
  trialEnd = item.trialEnd,
212
236
  trialPeriod = item.trialPeriod;
213
237
  var formatPlanId = (0, _utils.parseId)(planId);
214
- var formatTaxPercent = (0, _utils.parseNum)(tax) || 0;
215
- var formatTrialPeriod = (0, _utils.parseNum)(tax) || 0;
238
+ var formatTrialPeriod = 0;
216
239
  var formatTrialEnd = trialEnd || Date.now();
217
240
 
218
241
  if (formatTrialPeriod) {
@@ -228,7 +251,6 @@ var addSubscription = function addSubscription(context, item) {
228
251
  cancelDate: 0,
229
252
  modified: now,
230
253
  planId: formatPlanId,
231
- tax: formatTaxPercent,
232
254
  trialEnd: formatTrialEnd,
233
255
  userId: sessionId
234
256
  };
@@ -238,7 +260,10 @@ var addSubscription = function addSubscription(context, item) {
238
260
  }).then(function () {
239
261
  var subscription = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
240
262
  // Stripe
241
- var stripeClient = stripe(_config.Config.get('stripe.token'));
263
+ var stripeClient = new _stripe["default"](_config.Config.get('stripe.token'), {
264
+ apiVersion: apiVersion,
265
+ typescript: true
266
+ });
242
267
  return stripeClient.subscriptions.create({
243
268
  customer: user.stripeCustomerId,
244
269
  items: [{
@@ -247,7 +272,6 @@ var addSubscription = function addSubscription(context, item) {
247
272
  metadata: {
248
273
  userId: sessionId
249
274
  },
250
- tax_percent: formatTaxPercent * 100,
251
275
  trial_end: formatTrialEnd
252
276
  }).then(function () {
253
277
  return subscription;
@@ -268,21 +292,23 @@ var addSubscription = function addSubscription(context, item) {
268
292
 
269
293
  exports.addSubscription = addSubscription;
270
294
 
271
- var deleteSubscription = function deleteSubscription(context, endDate) {
295
+ var deleteSubscription = function deleteSubscription(context) {
272
296
  var action = 'deleteSubscription';
273
297
  var database = context.database;
274
298
  var now = Date.now();
275
- var formatEndDate = (0, _utils.parseNum)(endDate) || now;
276
299
  return getSubscription(context).then(function (subscription) {
277
300
  // Stripe
278
- var stripeClient = stripe(_config.Config.get('stripe.token'));
279
- return stripeClient.subscriptions.del(subscription.transactionId, {
280
- subscription: formatEndDate
281
- }).then(function (stripeResponse) {
301
+ var stripeClient = new _stripe["default"](_config.Config.get('stripe.token'), {
302
+ apiVersion: apiVersion,
303
+ typescript: true
304
+ });
305
+ return stripeClient.subscriptions.del(subscription.transactionId).then(function (_ref) {
306
+ var cancelDate = _ref.canceled_at;
307
+
282
308
  // Make sure we cancelled on Stripe before updating the db
283
- if (stripeResponse.cancelled || stripeResponse.cancel_at_period_end) {
309
+ if (cancelDate) {
284
310
  var update = {
285
- cancelDate: formatEndDate,
311
+ cancelDate: cancelDate,
286
312
  modified: now,
287
313
  planId: ''
288
314
  };
@@ -308,4 +334,4 @@ var deleteSubscription = function deleteSubscription(context, endDate) {
308
334
  };
309
335
 
310
336
  exports.deleteSubscription = deleteSubscription;
311
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3N1YnNjcmlwdGlvbi50cyJdLCJuYW1lcyI6WyJldmVudENhdGVnb3J5IiwiZ2V0UGxhbkxpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJsaW1pdCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImxpc3QiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0U3Vic2NyaXB0aW9uIiwic2Vzc2lvbklkIiwidXNlcklkIiwibmV4dCIsInN1YnNjcmlwdGlvbiIsImFkZFBsYW4iLCJpdGVtIiwidXNlckFjY2VzcyIsImlzQWRtaW4iLCJ2YWx1ZSIsIm5vdyIsIkRhdGUiLCJmb3JtYXRJZCIsImlkIiwicGxhbklkIiwiYW1vdW50IiwiY3VycmVuY3kiLCJkZXNjcmlwdGlvbiIsImludGVydmFsIiwiaW50ZXJ2YWxDb3VudCIsIm5hbWUiLCJmb3JtYXRBbW91bnQiLCJmb3JtYXRJbnRlcnZhbCIsInRvTG93ZXJDYXNlIiwiZm9ybWF0SW50ZXJ2YWxDbnQiLCJmb3JtYXROYW1lIiwiZm9ybWF0RGVzYyIsImluc2VydCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwicGxhbiIsInN0cmlwZUNsaWVudCIsInN0cmlwZSIsIkNvbmZpZyIsImdldCIsInBsYW5zIiwiY3JlYXRlIiwiaW50ZXJ2YWxfY291bnQiLCJtZXRhZGF0YSIsInN0YXRlbWVudF9kZXNjcmlwdG9yIiwiYWRkU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJ0YXgiLCJ0cmlhbEVuZCIsInRyaWFsUGVyaW9kIiwiZm9ybWF0UGxhbklkIiwiZm9ybWF0VGF4UGVyY2VudCIsImZvcm1hdFRyaWFsUGVyaW9kIiwiZm9ybWF0VHJpYWxFbmQiLCJEYXRlVGltZSIsImxvY2FsIiwicGx1cyIsImRheXMiLCJ0b01pbGxpcyIsInVzZXIiLCJjYW5jZWxEYXRlIiwic3Vic2NyaXB0aW9ucyIsImN1c3RvbWVyIiwic3RyaXBlQ3VzdG9tZXJJZCIsIml0ZW1zIiwidGF4X3BlcmNlbnQiLCJ0cmlhbF9lbmQiLCJkZWxldGVTdWJzY3JpcHRpb24iLCJlbmREYXRlIiwiZm9ybWF0RW5kRGF0ZSIsImRlbCIsInRyYW5zYWN0aW9uSWQiLCJzdHJpcGVSZXNwb25zZSIsImNhbmNlbGxlZCIsImNhbmNlbF9hdF9wZXJpb2RfZW5kIiwidXBkYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUE7O0FBSUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGFBQXFCLEdBQUcsY0FBOUI7O0FBRU8sSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsT0FBRCxFQUFvRjtBQUFBLE1BQTlEQyxJQUE4RCx1RUFBL0MsQ0FBK0M7QUFBQSxNQUE1Q0MsRUFBNEMsdUVBQS9CLEVBQStCO0FBQzdHLE1BQU1DLE1BQWMsR0FBRyxTQUF2QjtBQUQ2RyxNQUV0R0MsUUFGc0csR0FFMUZKLE9BRjBGLENBRXRHSSxRQUZzRztBQUc3RyxNQUFNQyxLQUFvQixHQUFHLHNCQUFTSixJQUFULEVBQWVDLEVBQWYsQ0FBN0I7QUFDQSxNQUFNSSxNQUFjLG1DQUNkRCxLQUFLLENBQUNFLEdBRFEsMENBQXBCO0FBS0EsU0FBTyxtQkFBTUgsUUFBTixFQUFnQkksS0FBaEIsQ0FBc0JGLE1BQXRCLEVBQ0pHLElBREksQ0FDQyxVQUFDQyxNQUFEO0FBQUEsV0FBeUJBLE1BQU0sQ0FBQ0MsR0FBUCxFQUF6QjtBQUFBLEdBREQsRUFFSkYsSUFGSSxDQUVDO0FBQUEsUUFBQ0csSUFBRCx1RUFBUSxFQUFSO0FBQUEsV0FBZUEsSUFBZjtBQUFBLEdBRkQsV0FHRSxVQUFDQyxLQUFEO0FBQUEsV0FBa0Isc0JBQVM7QUFDaENWLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENXLE1BQUFBLFFBQVEsRUFBRWhCLGFBRnNC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WUFBWSxDQUFDeUIsYUFBYixDQUNKUyxHQURJLENBQ0E5RCxZQUFZLENBQUMrRCxhQURiLEVBQzRCO0FBQy9CL0QsTUFBQUEsWUFBWSxFQUFFNkQ7QUFEaUIsS0FENUIsRUFJSjFFLElBSkksQ0FJQyxVQUFDNkUsY0FBRCxFQUFvQjtBQUN4QjtBQUNBLFVBQUdBLGNBQWMsQ0FBQ0MsU0FBZixJQUE0QkQsY0FBYyxDQUFDRSxvQkFBOUMsRUFBb0U7QUFDbEUsWUFBTUMsTUFBMkIsR0FBRztBQUNsQ2YsVUFBQUEsVUFBVSxFQUFFUyxhQURzQjtBQUVsQ25DLFVBQUFBLFFBQVEsRUFBRXBCLEdBRndCO0FBR2xDSSxVQUFBQSxNQUFNLEVBQUU7QUFIMEIsU0FBcEM7QUFLQSxZQUFNMUIsTUFBZ0IsT0FBR0MsYUFBSCxzQkFBdUJrRixNQUF2QixDQUF0QjtBQUVBLGVBQU8sbUJBQU1yRixRQUFOLEVBQWdCSSxLQUFoQixDQUFzQkYsTUFBdEIsRUFDSkcsSUFESSxDQUNDO0FBQUEsaUJBQU0sSUFBTjtBQUFBLFNBREQsV0FFRSxVQUFDSSxLQUFEO0FBQUEsaUJBQWtCLHNCQUFTO0FBQ2hDVixZQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVyxZQUFBQSxRQUFRLEVBQUVoQixhQUZzQjtBQUdoQ2lCLFlBQUFBLEtBQUssRUFBRTtBQUh5QixXQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsbUJBQU0sSUFBTjtBQUFBLFdBSk0sV0FJWSxVQUFDSSxLQUFEO0FBQUEsbUJBQVdHLE9BQU8sQ0FBQ0MsTUFBUixDQUFlSixLQUFmLENBQVg7QUFBQSxXQUpaLENBQWxCO0FBQUEsU0FGRixDQUFQO0FBT0Q7O0FBQ0QsYUFBTyxLQUFQO0FBQ0QsS0F2QkksQ0FBUDtBQXdCRCxHQTVCSSxDQUFQO0FBNkJELENBbkNNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZU51bSwgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcbmltcG9ydCAqIGFzIHN0cmlwZSBmcm9tICdzdHJpcGUnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7QXJhbmdvREJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGInO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB7UGF5bWVudEludGVydmFsLCBQYXltZW50UGxhbiwgUGF5bWVudFN1YnNjcmlwdGlvbn0gZnJvbSAnLi4vdHlwZXMvcGF5bWVudHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgbG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbiwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7Z2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdzdWJzY3JpcHRpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhbkxpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyID0gMCwgdG86IG51bWJlciA9IDMwKTogUHJvbWlzZTxQYXltZW50UGxhbltdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBsYW5zXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgcC5hbW91bnRcbiAgICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdWJzY3JpcHRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcyBJTiBzdWJzY3JpcHRpb25zXG4gICAgICBGSUxURVIgcy51c2VySWQgPT0gJHtzZXNzaW9uSWR9ICYmIHMuY2FuY2VsbGVkID4gMFxuICAgICAgTEVUIHBsYW4gPSBGSVJTVChcbiAgICAgICAgRk9SIHAgSU4gcGxhbnNcbiAgICAgICAgRklMVEVSIHAuX2tleSA9PSBzLnBsYW5JZFxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHMsIHtwbGFuOiBwbGFufSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChzdWJzY3JpcHRpb24gPSB7fSkgPT4gc3Vic2NyaXB0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUGxhbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBQYXltZW50UGxhbik6IFByb21pc2U8UGF5bWVudFBsYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkUGxhbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWQsIHVzZXJBY2Nlc3N9ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbjogYm9vbGVhbiA9IHVzZXJBY2Nlc3MgPiAyO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW0uaWQpO1xuICBjb25zdCBwbGFuSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHRhZy0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeSA9ICdVU0QnLCBkZXNjcmlwdGlvbiwgaW50ZXJ2YWwsIGludGVydmFsQ291bnQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRJbnRlcnZhbDogUGF5bWVudEludGVydmFsID0gcGFyc2VDaGFyKGludGVydmFsLCA1KS50b0xvd2VyQ2FzZSgpIGFzIFBheW1lbnRJbnRlcnZhbDtcbiAgY29uc3QgZm9ybWF0SW50ZXJ2YWxDbnQ6IG51bWJlciA9IHBhcnNlTnVtKGludGVydmFsQ291bnQsIDUpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDMyKTtcblxuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRQbGFuID0ge1xuICAgIF9rZXk6IHBsYW5JZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIGludGVydmFsOiBmb3JtYXRJbnRlcnZhbCxcbiAgICBpbnRlcnZhbENvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBsYW5zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwbGFuOiBQYXltZW50UGxhbiA9IHt9KSA9PiB7XG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IHN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSk7XG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnBsYW5zXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50ICogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5LFxuICAgICAgICAgIGlkOiBwbGFuSWQsXG4gICAgICAgICAgaW50ZXJ2YWw6IGZvcm1hdEludGVydmFsLFxuICAgICAgICAgIGludGVydmFsX2NvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgICBzdGF0ZW1lbnRfZGVzY3JpcHRvcjogZm9ybWF0RGVzY1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBwbGFuKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc30gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluOiBib29sZWFuID0gdXNlckFjY2VzcyA+IDI7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbS5pZCk7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbklkOiBzdHJpbmcgPSBmb3JtYXRJZCA9PT0gJycgPyBjcmVhdGVIYXNoKGB0YWctJHtzZXNzaW9uSWR9YCkgOiBmb3JtYXRJZDtcbiAgY29uc3Qge3BsYW5JZCwgdGF4LCB0cmlhbEVuZCwgdHJpYWxQZXJpb2R9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0UGxhbklkOiBzdHJpbmcgPSBwYXJzZUlkKHBsYW5JZCk7XG4gIGNvbnN0IGZvcm1hdFRheFBlcmNlbnQ6IG51bWJlciA9IHBhcnNlTnVtKHRheCkgfHwgMDtcbiAgY29uc3QgZm9ybWF0VHJpYWxQZXJpb2Q6IG51bWJlciA9IHBhcnNlTnVtKHRheCkgfHwgMDtcbiAgbGV0IGZvcm1hdFRyaWFsRW5kOiBudW1iZXIgPSB0cmlhbEVuZCB8fCBEYXRlLm5vdygpO1xuXG4gIGlmKGZvcm1hdFRyaWFsUGVyaW9kKSB7XG4gICAgZm9ybWF0VHJpYWxFbmQgPSBEYXRlVGltZS5sb2NhbCgpLnBsdXMoe2RheXM6IHRyaWFsUGVyaW9kfSkudG9NaWxsaXMoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcikgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgICAgICBfa2V5OiBzdWJzY3JpcHRpb25JZCxcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgY2FuY2VsRGF0ZTogMCxcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgcGxhbklkOiBmb3JtYXRQbGFuSWQsXG4gICAgICAgIHRheDogZm9ybWF0VGF4UGVyY2VudCxcbiAgICAgICAgdHJpYWxFbmQ6IGZvcm1hdFRyaWFsRW5kLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwbGFucyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uID0ge30pID0+IHtcbiAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBzdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJykpO1xuICAgICAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIGN1c3RvbWVyOiB1c2VyLnN0cmlwZUN1c3RvbWVySWQsXG4gICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge3BsYW46IGZvcm1hdFBsYW5JZH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0YXhfcGVyY2VudDogZm9ybWF0VGF4UGVyY2VudCAqIDEwMCxcbiAgICAgICAgICAgICAgdHJpYWxfZW5kOiBmb3JtYXRUcmlhbEVuZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBlbmREYXRlOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0RW5kRGF0ZTogbnVtYmVyID0gcGFyc2VOdW0oZW5kRGF0ZSkgfHwgbm93O1xuXG4gIHJldHVybiBnZXRTdWJzY3JpcHRpb24oY29udGV4dClcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IHN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSk7XG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnN1YnNjcmlwdGlvbnNcbiAgICAgICAgLmRlbChzdWJzY3JpcHRpb24udHJhbnNhY3Rpb25JZCwge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbjogZm9ybWF0RW5kRGF0ZVxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoc3RyaXBlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuY2VsbGVkIG9uIFN0cmlwZSBiZWZvcmUgdXBkYXRpbmcgdGhlIGRiXG4gICAgICAgICAgaWYoc3RyaXBlUmVzcG9uc2UuY2FuY2VsbGVkIHx8IHN0cmlwZVJlc3BvbnNlLmNhbmNlbF9hdF9wZXJpb2RfZW5kKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgIGNhbmNlbERhdGU6IGZvcm1hdEVuZERhdGUsXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICAgIHBsYW5JZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSBzIFdJVEggJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNgO1xuXG4gICAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgICAgICAgICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuIl19
337
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3N1YnNjcmlwdGlvbi50cyJdLCJuYW1lcyI6WyJldmVudENhdGVnb3J5IiwiYXBpVmVyc2lvbiIsImdldFBsYW5MaXN0IiwiY29udGV4dCIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlIiwibGltaXQiLCJhcWxRcnkiLCJhcWwiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJsaXN0IiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiUHJvbWlzZSIsInJlamVjdCIsImdldFN1YnNjcmlwdGlvbiIsInNlc3Npb25JZCIsInVzZXJJZCIsIm5leHQiLCJzdWJzY3JpcHRpb24iLCJhZGRQbGFuIiwiaXRlbSIsInVzZXJBY2Nlc3MiLCJpc0FkbWluIiwidmFsdWUiLCJub3ciLCJEYXRlIiwiZm9ybWF0SWQiLCJpZCIsInBsYW5JZCIsImFtb3VudCIsImN1cnJlbmN5IiwiZGVzY3JpcHRpb24iLCJpbnRlcnZhbCIsImludGVydmFsQ291bnQiLCJuYW1lIiwiZm9ybWF0QW1vdW50IiwiZm9ybWF0SW50ZXJ2YWwiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdEludGVydmFsQ250IiwiZm9ybWF0TmFtZSIsImZvcm1hdERlc2MiLCJpbnNlcnQiLCJfa2V5IiwiYWRkZWQiLCJtb2RpZmllZCIsInBsYW4iLCJzdHJpcGVDbGllbnQiLCJTdHJpcGUiLCJDb25maWciLCJnZXQiLCJ0eXBlc2NyaXB0Iiwic3RyaXBlUGxhbiIsImludGVydmFsX2NvdW50IiwibWV0YWRhdGEiLCJzdGF0ZW1lbnRfZGVzY3JpcHRvciIsInBsYW5zIiwiY3JlYXRlIiwiYWRkU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJ0cmlhbEVuZCIsInRyaWFsUGVyaW9kIiwiZm9ybWF0UGxhbklkIiwiZm9ybWF0VHJpYWxQZXJpb2QiLCJmb3JtYXRUcmlhbEVuZCIsIkRhdGVUaW1lIiwibG9jYWwiLCJwbHVzIiwiZGF5cyIsInRvTWlsbGlzIiwidXNlciIsImNhbmNlbERhdGUiLCJzdWJzY3JpcHRpb25zIiwiY3VzdG9tZXIiLCJzdHJpcGVDdXN0b21lcklkIiwiaXRlbXMiLCJ0cmlhbF9lbmQiLCJkZWxldGVTdWJzY3JpcHRpb24iLCJkZWwiLCJ0cmFuc2FjdGlvbklkIiwiY2FuY2VsZWRfYXQiLCJ1cGRhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBOztBQUNBOztBQUdBOztBQUNBOztBQUVBOztBQUlBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxhQUFxQixHQUFHLGNBQTlCO0FBQ0EsSUFBTUMsVUFBZSxHQUFHLFlBQXhCOztBQUVPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLE9BQUQsRUFBb0Y7QUFBQSxNQUE5REMsSUFBOEQsdUVBQS9DLENBQStDO0FBQUEsTUFBNUNDLEVBQTRDLHVFQUEvQixFQUErQjtBQUM3RyxNQUFNQyxNQUFjLEdBQUcsU0FBdkI7QUFENkcsTUFFdEdDLFFBRnNHLEdBRTFGSixPQUYwRixDQUV0R0ksUUFGc0c7QUFHN0csTUFBTUMsS0FBb0IsR0FBRyxzQkFBU0osSUFBVCxFQUFlQyxFQUFmLENBQTdCO0FBQ0EsTUFBTUksTUFBYyxtQ0FDZEQsS0FBSyxDQUFDRSxHQURRLDBDQUFwQjtBQUtBLFNBQU8sbUJBQU1ILFFBQU4sRUFBZ0JJLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNDLEdBQVAsRUFBekI7QUFBQSxHQURELEVBRUpGLElBRkksQ0FFQztBQUFBLFFBQUNHLElBQUQsdUVBQVEsRUFBUjtBQUFBLFdBQWVBLElBQWY7QUFBQSxHQUZELFdBR0UsVUFBQ0MsS0FBRDtBQUFBLFdBQWtCLHNCQUFTO0FBQ2hDVixNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVyxNQUFBQSxRQUFRLEVBQUVqQixhQUZzQjtBQUdoQ2tCLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxhQUFXRyxPQUFPLENBQUNDLE1BQVIsQ0FBZUosS0FBZixDQUFYO0FBQUEsS0FKWixDQUFsQjtBQUFBLEdBSEYsQ0FBUDtBQVFELENBakJNOzs7O0FBbUJBLElBQU1LLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ2xCLE9BQUQsRUFBdUQ7QUFDcEYsTUFBTUcsTUFBYyxHQUFHLFNBQXZCO0FBRG9GLE1BRTdFQyxRQUY2RSxHQUU5Q0osT0FGOEMsQ0FFN0VJLFFBRjZFO0FBQUEsTUFFM0RlLFNBRjJELEdBRTlDbkIsT0FGOEMsQ0FFbkVvQixNQUZtRTtBQUdwRixNQUFNZCxNQUFjLDhEQUNLYSxTQURMLHlLQUFwQjtBQVNBLFNBQU8sbUJBQU1mLFFBQU4sRUFBZ0JJLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNXLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpaLElBRkksQ0FFQztBQUFBLFFBQUNhLFlBQUQsdUVBQWdCLEVBQWhCO0FBQUEsV0FBdUJBLFlBQXZCO0FBQUEsR0FGRCxXQUdFLFVBQUNULEtBQUQ7QUFBQSxXQUFrQixzQkFBUztBQUNoQ1YsTUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ1csTUFBQUEsUUFBUSxFQUFFakIsYUFGc0I7QUFHaENrQixNQUFBQSxLQUFLLEVBQUU7QUFIeUIsS0FBVCxFQUl0QkYsS0FKc0IsRUFJZixFQUplLEVBSVhKLElBSlcsQ0FJTjtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSk0sV0FJWSxVQUFDSSxLQUFEO0FBQUEsYUFBV0csT0FBTyxDQUFDQyxNQUFSLENBQWVKLEtBQWYsQ0FBWDtBQUFBLEtBSlosQ0FBbEI7QUFBQSxHQUhGLENBQVA7QUFRRCxDQXBCTTs7OztBQXNCQSxJQUFNVSxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDdkIsT0FBRCxFQUFzQndCLElBQXRCLEVBQWtFO0FBQ3ZGLE1BQU1yQixNQUFjLEdBQUcsU0FBdkI7QUFEdUYsTUFFaEZDLFFBRmdGLEdBRXJDSixPQUZxQyxDQUVoRkksUUFGZ0Y7QUFBQSxNQUU5RGUsU0FGOEQsR0FFckNuQixPQUZxQyxDQUV0RW9CLE1BRnNFO0FBQUEsTUFFbkRLLFVBRm1ELEdBRXJDekIsT0FGcUMsQ0FFbkR5QixVQUZtRDtBQUd2RixNQUFNQyxPQUFnQixHQUFHRCxVQUFVLEdBQUcsQ0FBdEM7O0FBRUEsTUFBRyxDQUFDQyxPQUFKLEVBQWE7QUFDWCxXQUFPLDBCQUFhO0FBQ2xCdkIsTUFBQUEsTUFBTSxFQUFOQSxNQURrQjtBQUVsQlcsTUFBQUEsUUFBUSxFQUFFakIsYUFGUTtBQUdsQmtCLE1BQUFBLEtBQUssRUFBRSxjQUhXO0FBSWxCWSxNQUFBQSxLQUFLLEVBQUU7QUFKVyxLQUFiLEVBS0ozQixPQUxJLEVBS0tTLElBTEwsQ0FLVTtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBTFYsQ0FBUDtBQU1EOztBQUVELE1BQU1tQixHQUFXLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQjtBQUNBLE1BQU1FLFFBQWdCLEdBQUcsb0JBQVFOLElBQUksQ0FBQ08sRUFBYixDQUF6QjtBQUNBLE1BQU1DLE1BQWMsR0FBR0YsUUFBUSxLQUFLLEVBQWIsR0FBa0IscUNBQWtCWCxTQUFsQixFQUFsQixHQUFtRFcsUUFBMUU7QUFoQnVGLE1BaUJoRkcsTUFqQmdGLEdBaUJSVCxJQWpCUSxDQWlCaEZTLE1BakJnRjtBQUFBLHVCQWlCUlQsSUFqQlEsQ0FpQnhFVSxRQWpCd0U7QUFBQSxNQWlCeEVBLFFBakJ3RSwrQkFpQjdELEtBakI2RDtBQUFBLE1BaUJ0REMsV0FqQnNELEdBaUJSWCxJQWpCUSxDQWlCdERXLFdBakJzRDtBQUFBLE1BaUJ6Q0MsUUFqQnlDLEdBaUJSWixJQWpCUSxDQWlCekNZLFFBakJ5QztBQUFBLE1BaUIvQkMsYUFqQitCLEdBaUJSYixJQWpCUSxDQWlCL0JhLGFBakIrQjtBQUFBLE1BaUJoQkMsSUFqQmdCLEdBaUJSZCxJQWpCUSxDQWlCaEJjLElBakJnQjtBQWtCdkYsTUFBTUMsWUFBb0IsR0FBRyxxQkFBU04sTUFBVCxDQUE3QjtBQUNBLE1BQU1PLGNBQStCLEdBQUcsc0JBQVVKLFFBQVYsRUFBb0IsQ0FBcEIsRUFBdUJLLFdBQXZCLEVBQXhDO0FBQ0EsTUFBTUMsaUJBQXlCLEdBQUcscUJBQVNMLGFBQVQsRUFBd0IsQ0FBeEIsQ0FBbEM7QUFDQSxNQUFNTSxVQUFrQixHQUFHLHlCQUFhTCxJQUFiLEVBQW1CLEVBQW5CLENBQTNCO0FBQ0EsTUFBTU0sVUFBa0IsR0FBRyx5QkFBYVQsV0FBYixFQUEwQixFQUExQixDQUEzQjtBQUVBLE1BQU1VLE1BQW1CLEdBQUc7QUFDMUJDLElBQUFBLElBQUksRUFBRWQsTUFEb0I7QUFFMUJlLElBQUFBLEtBQUssRUFBRW5CLEdBRm1CO0FBRzFCSyxJQUFBQSxNQUFNLEVBQUVNLFlBSGtCO0FBSTFCTCxJQUFBQSxRQUFRLEVBQVJBLFFBSjBCO0FBSzFCQyxJQUFBQSxXQUFXLEVBQUVTLFVBTGE7QUFNMUJSLElBQUFBLFFBQVEsRUFBRUksY0FOZ0I7QUFPMUJILElBQUFBLGFBQWEsRUFBRUssaUJBUFc7QUFRMUJNLElBQUFBLFFBQVEsRUFBRXBCLEdBUmdCO0FBUzFCVSxJQUFBQSxJQUFJLEVBQUVLO0FBVG9CLEdBQTVCO0FBV0EsTUFBTXJDLE1BQWdCLE9BQUdDLGFBQUgscUJBQWdCc0MsTUFBaEIsQ0FBdEI7QUFFQSxTQUFPLG1CQUFNekMsUUFBTixFQUFnQkksS0FBaEIsQ0FBc0JGLE1BQXRCLEVBQ0pHLElBREksQ0FDQyxVQUFDQyxNQUFEO0FBQUEsV0FBeUJBLE1BQU0sQ0FBQ1csSUFBUCxFQUF6QjtBQUFBLEdBREQsRUFFSlosSUFGSSxDQUVDLFlBQTRCO0FBQUEsUUFBM0J3QyxJQUEyQix1RUFBUCxFQUFPO0FBQ2hDO0FBQ0EsUUFBTUMsWUFBWSxHQUFHLElBQUlDLGtCQUFKLENBQVdDLGVBQU9DLEdBQVAsQ0FBVyxjQUFYLENBQVgsRUFBdUM7QUFBQ3ZELE1BQUFBLFVBQVUsRUFBVkEsVUFBRDtBQUFhd0QsTUFBQUEsVUFBVSxFQUFFO0FBQXpCLEtBQXZDLENBQXJCO0FBQ0EsUUFBTUMsVUFBZSxHQUFHO0FBQ3RCdEIsTUFBQUEsTUFBTSxFQUFFTSxZQUFZLEdBQUcsR0FERDtBQUV0QkwsTUFBQUEsUUFBUSxFQUFSQSxRQUZzQjtBQUd0QkgsTUFBQUEsRUFBRSxFQUFFQyxNQUhrQjtBQUl0QkksTUFBQUEsUUFBUSxFQUFFSSxjQUpZO0FBS3RCZ0IsTUFBQUEsY0FBYyxFQUFFZCxpQkFMTTtBQU10QmUsTUFBQUEsUUFBUSxFQUFFLEVBTlk7QUFRdEJuQixNQUFBQSxJQUFJLEVBQUVLLFVBUmdCO0FBU3RCZSxNQUFBQSxvQkFBb0IsRUFBRWQ7QUFUQSxLQUF4QjtBQVlBLFdBQU9NLFlBQVksQ0FBQ1MsS0FBYixDQUNKQyxNQURJLENBQ0dMLFVBREgsRUFFSjlDLElBRkksQ0FFQztBQUFBLGFBQU13QyxJQUFOO0FBQUEsS0FGRCxDQUFQO0FBR0QsR0FwQkksV0FxQkUsVUFBQ3BDLEtBQUQ7QUFBQSxXQUFrQixzQkFBUztBQUNoQ1YsTUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ1csTUFBQUEsUUFBUSxFQUFFakIsYUFGc0I7QUFHaENrQixNQUFBQSxLQUFLLEVBQUU7QUFIeUIsS0FBVCxFQUl0QkYsS0FKc0IsRUFJZixFQUplLEVBSVhKLElBSlcsQ0FJTjtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSk0sV0FJWSxVQUFDSSxLQUFEO0FBQUEsYUFBV0csT0FBTyxDQUFDQyxNQUFSLENBQWVKLEtBQWYsQ0FBWDtBQUFBLEtBSlosQ0FBbEI7QUFBQSxHQXJCRixDQUFQO0FBMEJELENBL0RNOzs7O0FBaUVBLElBQU1nRCxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUM3RCxPQUFELEVBQXNCd0IsSUFBdEIsRUFBNkQ7QUFDMUYsTUFBTXJCLE1BQWMsR0FBRyxpQkFBdkI7QUFEMEYsTUFFbkZDLFFBRm1GLEdBRXhDSixPQUZ3QyxDQUVuRkksUUFGbUY7QUFBQSxNQUVqRWUsU0FGaUUsR0FFeENuQixPQUZ3QyxDQUV6RW9CLE1BRnlFO0FBQUEsTUFFdERLLFVBRnNELEdBRXhDekIsT0FGd0MsQ0FFdER5QixVQUZzRDtBQUcxRixNQUFNQyxPQUFnQixHQUFHRCxVQUFVLEdBQUcsQ0FBdEM7O0FBRUEsTUFBRyxDQUFDQyxPQUFKLEVBQWE7QUFDWCxXQUFPLDBCQUFhO0FBQ2xCdkIsTUFBQUEsTUFBTSxFQUFOQSxNQURrQjtBQUVsQlcsTUFBQUEsUUFBUSxFQUFFakIsYUFGUTtBQUdsQmtCLE1BQUFBLEtBQUssRUFBRSxjQUhXO0FBSWxCWSxNQUFBQSxLQUFLLEVBQUU7QUFKVyxLQUFiLEVBS0ozQixPQUxJLEVBS0tTLElBTEwsQ0FLVTtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBTFYsQ0FBUDtBQU1EOztBQUVELE1BQU1tQixHQUFXLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQjtBQUNBLE1BQU1FLFFBQWdCLEdBQUcsb0JBQVFOLElBQUksQ0FBQ08sRUFBYixDQUF6QjtBQUNBLE1BQU0rQixjQUFzQixHQUFHaEMsUUFBUSxLQUFLLEVBQWIsR0FBa0IscUNBQWtCWCxTQUFsQixFQUFsQixHQUFtRFcsUUFBbEY7QUFoQjBGLE1BaUJuRkUsTUFqQm1GLEdBaUJsRFIsSUFqQmtELENBaUJuRlEsTUFqQm1GO0FBQUEsTUFpQjNFK0IsUUFqQjJFLEdBaUJsRHZDLElBakJrRCxDQWlCM0V1QyxRQWpCMkU7QUFBQSxNQWlCakVDLFdBakJpRSxHQWlCbER4QyxJQWpCa0QsQ0FpQmpFd0MsV0FqQmlFO0FBa0IxRixNQUFNQyxZQUFvQixHQUFHLG9CQUFRakMsTUFBUixDQUE3QjtBQUNBLE1BQU1rQyxpQkFBeUIsR0FBRyxDQUFsQztBQUNBLE1BQUlDLGNBQXNCLEdBQUdKLFFBQVEsSUFBSWxDLElBQUksQ0FBQ0QsR0FBTCxFQUF6Qzs7QUFFQSxNQUFHc0MsaUJBQUgsRUFBc0I7QUFDcEJDLElBQUFBLGNBQWMsR0FBR0MsZ0JBQVNDLEtBQVQsR0FBaUJDLElBQWpCLENBQXNCO0FBQUNDLE1BQUFBLElBQUksRUFBRVA7QUFBUCxLQUF0QixFQUEyQ1EsUUFBM0MsRUFBakI7QUFDRDs7QUFFRCxTQUFPLG9CQUFReEUsT0FBUixFQUFpQm1CLFNBQWpCLEVBQ0pWLElBREksQ0FDQyxVQUFDZ0UsSUFBRCxFQUFVO0FBQ2QsUUFBTTVCLE1BQTJCLEdBQUc7QUFDbENDLE1BQUFBLElBQUksRUFBRWdCLGNBRDRCO0FBRWxDZixNQUFBQSxLQUFLLEVBQUVuQixHQUYyQjtBQUdsQzhDLE1BQUFBLFVBQVUsRUFBRSxDQUhzQjtBQUlsQzFCLE1BQUFBLFFBQVEsRUFBRXBCLEdBSndCO0FBS2xDSSxNQUFBQSxNQUFNLEVBQUVpQyxZQUwwQjtBQU1sQ0YsTUFBQUEsUUFBUSxFQUFFSSxjQU53QjtBQU9sQy9DLE1BQUFBLE1BQU0sRUFBRUQ7QUFQMEIsS0FBcEM7QUFTQSxRQUFNYixNQUFnQixPQUFHQyxhQUFILHNCQUFnQnNDLE1BQWhCLENBQXRCO0FBRUEsV0FBTyxtQkFBTXpDLFFBQU4sRUFBZ0JJLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLGFBQXlCQSxNQUFNLENBQUNXLElBQVAsRUFBekI7QUFBQSxLQURELEVBRUpaLElBRkksQ0FFQyxZQUE0QztBQUFBLFVBQTNDYSxZQUEyQyx1RUFBUCxFQUFPO0FBQ2hEO0FBQ0EsVUFBTTRCLFlBQVksR0FBRyxJQUFJQyxrQkFBSixDQUFXQyxlQUFPQyxHQUFQLENBQVcsY0FBWCxDQUFYLEVBQXVDO0FBQUN2RCxRQUFBQSxVQUFVLEVBQVZBLFVBQUQ7QUFBYXdELFFBQUFBLFVBQVUsRUFBRTtBQUF6QixPQUF2QyxDQUFyQjtBQUNBLGFBQU9KLFlBQVksQ0FBQ3lCLGFBQWIsQ0FDSmYsTUFESSxDQUNHO0FBQ05nQixRQUFBQSxRQUFRLEVBQUVILElBQUksQ0FBQ0ksZ0JBRFQ7QUFFTkMsUUFBQUEsS0FBSyxFQUFFLENBQ0w7QUFDRTdCLFVBQUFBLElBQUksRUFBRWdCO0FBRFIsU0FESyxDQUZEO0FBT05SLFFBQUFBLFFBQVEsRUFBRTtBQUNSckMsVUFBQUEsTUFBTSxFQUFFRDtBQURBLFNBUEo7QUFVTjRELFFBQUFBLFNBQVMsRUFBRVo7QUFWTCxPQURILEVBYUoxRCxJQWJJLENBYUM7QUFBQSxlQUFNYSxZQUFOO0FBQUEsT0FiRCxDQUFQO0FBY0QsS0FuQkksV0FvQkUsVUFBQ1QsS0FBRDtBQUFBLGFBQWtCLHNCQUFTO0FBQ2hDVixRQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVyxRQUFBQSxRQUFRLEVBQUVqQixhQUZzQjtBQUdoQ2tCLFFBQUFBLEtBQUssRUFBRTtBQUh5QixPQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsZUFBTSxJQUFOO0FBQUEsT0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxlQUFXRyxPQUFPLENBQUNDLE1BQVIsQ0FBZUosS0FBZixDQUFYO0FBQUEsT0FKWixDQUFsQjtBQUFBLEtBcEJGLENBQVA7QUF5QkQsR0F0Q0ksQ0FBUDtBQXVDRCxDQWpFTTs7OztBQW1FQSxJQUFNbUUsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUFDaEYsT0FBRCxFQUEyQztBQUMzRSxNQUFNRyxNQUFjLEdBQUcsb0JBQXZCO0FBRDJFLE1BRXBFQyxRQUZvRSxHQUV4REosT0FGd0QsQ0FFcEVJLFFBRm9FO0FBRzNFLE1BQU13QixHQUFXLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQjtBQUVBLFNBQU9WLGVBQWUsQ0FBQ2xCLE9BQUQsQ0FBZixDQUNKUyxJQURJLENBQ0MsVUFBQ2EsWUFBRCxFQUFrQjtBQUN0QjtBQUNBLFFBQU00QixZQUFZLEdBQUcsSUFBSUMsa0JBQUosQ0FBV0MsZUFBT0MsR0FBUCxDQUFXLGNBQVgsQ0FBWCxFQUF1QztBQUFDdkQsTUFBQUEsVUFBVSxFQUFWQSxVQUFEO0FBQWF3RCxNQUFBQSxVQUFVLEVBQUU7QUFBekIsS0FBdkMsQ0FBckI7QUFDQSxXQUFPSixZQUFZLENBQUN5QixhQUFiLENBQ0pNLEdBREksQ0FDQTNELFlBQVksQ0FBQzRELGFBRGIsRUFFSnpFLElBRkksQ0FFQyxnQkFBK0I7QUFBQSxVQUFoQmlFLFVBQWdCLFFBQTdCUyxXQUE2Qjs7QUFDbkM7QUFDQSxVQUFHVCxVQUFILEVBQWU7QUFDYixZQUFNVSxNQUEyQixHQUFHO0FBQ2xDVixVQUFBQSxVQUFVLEVBQVZBLFVBRGtDO0FBRWxDMUIsVUFBQUEsUUFBUSxFQUFFcEIsR0FGd0I7QUFHbENJLFVBQUFBLE1BQU0sRUFBRTtBQUgwQixTQUFwQztBQUtBLFlBQU0xQixNQUFnQixPQUFHQyxhQUFILHNCQUF1QjZFLE1BQXZCLENBQXRCO0FBRUEsZUFBTyxtQkFBTWhGLFFBQU4sRUFBZ0JJLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0M7QUFBQSxpQkFBTSxJQUFOO0FBQUEsU0FERCxXQUVFLFVBQUNJLEtBQUQ7QUFBQSxpQkFBa0Isc0JBQVM7QUFDaENWLFlBQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENXLFlBQUFBLFFBQVEsRUFBRWpCLGFBRnNCO0FBR2hDa0IsWUFBQUEsS0FBSyxFQUFFO0FBSHlCLFdBQVQsRUFJdEJGLEtBSnNCLEVBSWYsRUFKZSxFQUlYSixJQUpXLENBSU47QUFBQSxtQkFBTSxJQUFOO0FBQUEsV0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxtQkFBV0csT0FBTyxDQUFDQyxNQUFSLENBQWVKLEtBQWYsQ0FBWDtBQUFBLFdBSlosQ0FBbEI7QUFBQSxTQUZGLENBQVA7QUFPRDs7QUFDRCxhQUFPLEtBQVA7QUFDRCxLQXJCSSxDQUFQO0FBc0JELEdBMUJJLENBQVA7QUEyQkQsQ0FoQ00iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQYXltZW50SW50ZXJ2YWwsIFBheW1lbnRQbGFuLCBQYXltZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi90eXBlcy9wYXltZW50cyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgbG9nRXhjZXB0aW9uLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtnZXRVc2VyfSBmcm9tICcuL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3N1YnNjcmlwdGlvbic7XG5jb25zdCBhcGlWZXJzaW9uOiBhbnkgPSAnMjAyMC0wMy0wMic7XG5cbmV4cG9ydCBjb25zdCBnZXRQbGFuTGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tOiBudW1iZXIgPSAwLCB0bzogbnVtYmVyID0gMzApOiBQcm9taXNlPFBheW1lbnRQbGFuW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcGxhbnNcbiAgICAgICR7bGltaXQuYXFsfVxuICAgICAgU09SVCBwLmFtb3VudFxuICAgICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3QgPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBzIElOIHN1YnNjcmlwdGlvbnNcbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy5jYW5jZWxsZWQgPiAwXG4gICAgICBMRVQgcGxhbiA9IEZJUlNUKFxuICAgICAgICBGT1IgcCBJTiBwbGFuc1xuICAgICAgICBGSUxURVIgcC5fa2V5ID09IHMucGxhbklkXG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0Uocywge3BsYW46IHBsYW59KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHN1YnNjcmlwdGlvbiA9IHt9KSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQbGFuID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IFBheW1lbnRQbGFuKTogUHJvbWlzZTxQYXltZW50UGxhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQbGFuJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc30gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluOiBib29sZWFuID0gdXNlckFjY2VzcyA+IDI7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbS5pZCk7XG4gIGNvbnN0IHBsYW5JZDogc3RyaW5nID0gZm9ybWF0SWQgPT09ICcnID8gY3JlYXRlSGFzaChgdGFnLSR7c2Vzc2lvbklkfWApIDogZm9ybWF0SWQ7XG4gIGNvbnN0IHthbW91bnQsIGN1cnJlbmN5ID0gJ1VTRCcsIGRlc2NyaXB0aW9uLCBpbnRlcnZhbCwgaW50ZXJ2YWxDb3VudCwgbmFtZX0gPSBpdGVtO1xuICBjb25zdCBmb3JtYXRBbW91bnQ6IG51bWJlciA9IHBhcnNlTnVtKGFtb3VudCk7XG4gIGNvbnN0IGZvcm1hdEludGVydmFsOiBQYXltZW50SW50ZXJ2YWwgPSBwYXJzZUNoYXIoaW50ZXJ2YWwsIDUpLnRvTG93ZXJDYXNlKCkgYXMgUGF5bWVudEludGVydmFsO1xuICBjb25zdCBmb3JtYXRJbnRlcnZhbENudDogbnVtYmVyID0gcGFyc2VOdW0oaW50ZXJ2YWxDb3VudCwgNSk7XG4gIGNvbnN0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihuYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgMzIpO1xuXG4gIGNvbnN0IGluc2VydDogUGF5bWVudFBsYW4gPSB7XG4gICAgX2tleTogcGxhbklkLFxuICAgIGFkZGVkOiBub3csXG4gICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgY3VycmVuY3ksXG4gICAgZGVzY3JpcHRpb246IGZvcm1hdERlc2MsXG4gICAgaW50ZXJ2YWw6IGZvcm1hdEludGVydmFsLFxuICAgIGludGVydmFsQ291bnQ6IGZvcm1hdEludGVydmFsQ250LFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogZm9ybWF0TmFtZVxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcGxhbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBsYW46IFBheW1lbnRQbGFuID0ge30pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHN0cmlwZVBsYW46IGFueSA9IHtcbiAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQgKiAxMDAsXG4gICAgICAgIGN1cnJlbmN5LFxuICAgICAgICBpZDogcGxhbklkLFxuICAgICAgICBpbnRlcnZhbDogZm9ybWF0SW50ZXJ2YWwsXG4gICAgICAgIGludGVydmFsX2NvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgc3RhdGVtZW50X2Rlc2NyaXB0b3I6IGZvcm1hdERlc2NcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQucGxhbnNcbiAgICAgICAgLmNyZWF0ZShzdHJpcGVQbGFuKVxuICAgICAgICAudGhlbigoKSA9PiBwbGFuKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc30gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluOiBib29sZWFuID0gdXNlckFjY2VzcyA+IDI7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbS5pZCk7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbklkOiBzdHJpbmcgPSBmb3JtYXRJZCA9PT0gJycgPyBjcmVhdGVIYXNoKGB0YWctJHtzZXNzaW9uSWR9YCkgOiBmb3JtYXRJZDtcbiAgY29uc3Qge3BsYW5JZCwgdHJpYWxFbmQsIHRyaWFsUGVyaW9kfSA9IGl0ZW07XG4gIGNvbnN0IGZvcm1hdFBsYW5JZDogc3RyaW5nID0gcGFyc2VJZChwbGFuSWQpO1xuICBjb25zdCBmb3JtYXRUcmlhbFBlcmlvZDogbnVtYmVyID0gMDtcbiAgbGV0IGZvcm1hdFRyaWFsRW5kOiBudW1iZXIgPSB0cmlhbEVuZCB8fCBEYXRlLm5vdygpO1xuXG4gIGlmKGZvcm1hdFRyaWFsUGVyaW9kKSB7XG4gICAgZm9ybWF0VHJpYWxFbmQgPSBEYXRlVGltZS5sb2NhbCgpLnBsdXMoe2RheXM6IHRyaWFsUGVyaW9kfSkudG9NaWxsaXMoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcikgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgICAgICBfa2V5OiBzdWJzY3JpcHRpb25JZCxcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgY2FuY2VsRGF0ZTogMCxcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgcGxhbklkOiBmb3JtYXRQbGFuSWQsXG4gICAgICAgIHRyaWFsRW5kOiBmb3JtYXRUcmlhbEVuZCxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gcGxhbnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHt9KSA9PiB7XG4gICAgICAgICAgLy8gU3RyaXBlXG4gICAgICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgICAgICBjdXN0b21lcjogdXNlci5zdHJpcGVDdXN0b21lcklkLFxuICAgICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHBsYW46IGZvcm1hdFBsYW5JZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cmlhbF9lbmQ6IGZvcm1hdFRyaWFsRW5kXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICByZXR1cm4gZ2V0U3Vic2NyaXB0aW9uKGNvbnRleHQpXG4gICAgLnRoZW4oKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5zdWJzY3JpcHRpb25zXG4gICAgICAgIC5kZWwoc3Vic2NyaXB0aW9uLnRyYW5zYWN0aW9uSWQpXG4gICAgICAgIC50aGVuKCh7Y2FuY2VsZWRfYXQ6IGNhbmNlbERhdGV9KSA9PiB7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNhbmNlbGxlZCBvbiBTdHJpcGUgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYlxuICAgICAgICAgIGlmKGNhbmNlbERhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICAgICAgICAgICAgY2FuY2VsRGF0ZSxcbiAgICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgICAgcGxhbklkOiAnJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFIHMgV0lUSCAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc2A7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgICAgICAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iXX0=
package/lib/data/tags.js CHANGED
@@ -1,5 +1,49 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.symbol");
4
+
5
+ require("core-js/modules/es.symbol.description");
6
+
7
+ require("core-js/modules/es.array.concat");
8
+
9
+ require("core-js/modules/es.array.filter");
10
+
11
+ require("core-js/modules/es.array.for-each");
12
+
13
+ require("core-js/modules/es.array.iterator");
14
+
15
+ require("core-js/modules/es.array.map");
16
+
17
+ require("core-js/modules/es.array.slice");
18
+
19
+ require("core-js/modules/es.date.now");
20
+
21
+ require("core-js/modules/es.date.to-string");
22
+
23
+ require("core-js/modules/es.function.name");
24
+
25
+ require("core-js/modules/es.object.define-properties");
26
+
27
+ require("core-js/modules/es.object.define-property");
28
+
29
+ require("core-js/modules/es.object.freeze");
30
+
31
+ require("core-js/modules/es.object.get-own-property-descriptor");
32
+
33
+ require("core-js/modules/es.object.get-own-property-descriptors");
34
+
35
+ require("core-js/modules/es.object.keys");
36
+
37
+ require("core-js/modules/es.object.to-string");
38
+
39
+ require("core-js/modules/es.promise");
40
+
41
+ require("core-js/modules/es.string.iterator");
42
+
43
+ require("core-js/modules/web.dom-collections.for-each");
44
+
45
+ require("core-js/modules/web.dom-collections.iterator");
46
+
3
47
  Object.defineProperty(exports, "__esModule", {
4
48
  value: true
5
49
  });
@@ -57,7 +101,7 @@ function _templateObject2() {
57
101
 
58
102
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
59
103
 
60
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
104
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
61
105
 
62
106
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
63
107
 
@@ -170,12 +214,16 @@ var tagPost = function tagPost(context, tagId, postId) {
170
214
  sessionId = context.userId;
171
215
  var added = Date.now();
172
216
  var edgeId = (0, _utils.createHash)("tagPost-".concat(sessionId));
173
- var edgeCollection = (0, _utils2.useDb)(database).edgeCollection('isTagged');
217
+ var edgeCollection = (0, _utils2.useDb)(database).collection('isTagged');
174
218
  var edge = {
219
+ _from: "tags/".concat(tagId),
175
220
  _key: edgeId,
221
+ _to: "posts/".concat(postId),
176
222
  added: added
177
223
  };
178
- return edgeCollection.save(edge, "tags/".concat(tagId), "posts/".concat(postId)).then(function () {
224
+ return edgeCollection.save(edge, {
225
+ returnNew: true
226
+ }).then(function () {
179
227
  var post = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
180
228
  return post;
181
229
  })["catch"](function (error) {
@@ -210,7 +258,7 @@ var updateTag = function updateTag(context) {
210
258
  var formatId = (0, _utils.parseId)(id);
211
259
  var tagId = !formatId ? (0, _utils.createHash)("tag-".concat(formatName.toLowerCase()), null) : formatId;
212
260
 
213
- var insert = _objectSpread({}, update, {
261
+ var insert = _objectSpread(_objectSpread({}, update), {}, {
214
262
  _key: tagId,
215
263
  added: now
216
264
  });
@@ -282,16 +330,20 @@ var createTag = function createTag(db, tagName) {
282
330
  exports.createTag = createTag;
283
331
 
284
332
  var createTagEdge = function createTagEdge(db, tag, itemType, itemId) {
285
- var edgeCollection = db.edgeCollection('isTagged');
333
+ var edgeCollection = db.collection('isTagged');
286
334
  var tagId = tag._id,
287
335
  tagKey = tag._key;
288
336
  var edgeId = (0, _utils.createHash)("tag-".concat(itemType, "-").concat(tagKey, "-").concat(itemId));
289
337
  var edge = {
338
+ _from: tagId,
290
339
  _key: edgeId,
340
+ _to: "".concat(itemType, "/").concat(itemId),
291
341
  added: Date.now(),
292
342
  type: itemType
293
343
  };
294
- return edgeCollection.save(edge, tagId, "".concat(itemType, "/").concat(itemId)).then(function () {
344
+ return edgeCollection.save(edge, {
345
+ returnNew: true
346
+ }).then(function () {
295
347
  return tag;
296
348
  });
297
349
  };
@@ -312,7 +364,7 @@ var extractTags = function extractTags(db, itemType, itemId, content) {
312
364
  var tags = (0, _words["default"])(content, /#[a-zA-Z\d-]+/g).map(function (tag) {
313
365
  return (0, _utils.parseId)(tag);
314
366
  });
315
- var edgeCollection = db.edgeCollection('isTagged');
367
+ var edgeCollection = db.collection('isTagged');
316
368
  return edgeCollection.inEdges(itemId).then(function (edges) {
317
369
  if (edges.length) {
318
370
  // Remove linked edges
@@ -342,4 +394,4 @@ var extractTags = function extractTags(db, itemType, itemId, content) {
342
394
  };
343
395
 
344
396
  exports.extractTags = extractTags;
345
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3RhZ3MudHMiXSwibmFtZXMiOlsiZXZlbnRDYXRlZ29yeSIsImdldFRhZ0xpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJsaW1pdCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImxpc3QiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0VGFnIiwidGFnSWQiLCJmb3JtYXRJZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXh0IiwidGFnIiwiYWRkVGFnIiwibm93IiwiRGF0ZSIsImRlc2NyaXB0aW9uIiwibmFtZSIsImluc2VydCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwidGFnUG9zdCIsInBvc3RJZCIsImVkZ2VJZCIsImVkZ2VDb2xsZWN0aW9uIiwiZWRnZSIsInNhdmUiLCJwb3N0IiwidXBkYXRlVGFnIiwiaXRlbSIsImlkIiwiZm9ybWF0TmFtZSIsInVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiZGVsZXRlVGFnIiwiZm9ybWF0VGFnSWQiLCJjcmVhdGVUYWciLCJkYiIsInRhZ05hbWUiLCJjcmVhdGVUYWdFZGdlIiwiaXRlbVR5cGUiLCJpdGVtSWQiLCJfaWQiLCJ0YWdLZXkiLCJ0eXBlIiwibGlua1RhZ3MiLCJ0YWdOYW1lcyIsIm1hcCIsImV4dHJhY3RUYWdzIiwiY29udGVudCIsInRhZ3MiLCJpbkVkZ2VzIiwiZWRnZXMiLCJsZW5ndGgiLCJlZGdlS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUE7O0FBQ0E7O0FBR0E7O0FBTUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBcUIsR0FBRyxNQUE5Qjs7QUFFTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxPQUFELEVBQWdGO0FBQUEsTUFBMURDLElBQTBELHVFQUEzQyxDQUEyQztBQUFBLE1BQXhDQyxFQUF3Qyx1RUFBM0IsRUFBMkI7QUFDeEcsTUFBTUMsTUFBYyxHQUFHLFNBQXZCO0FBRHdHLE1BRWpHQyxRQUZpRyxHQUVsRUosT0FGa0UsQ0FFakdJLFFBRmlHO0FBQUEsTUFFL0VDLFNBRitFLEdBRWxFTCxPQUZrRSxDQUV2Rk0sTUFGdUY7QUFHeEcsTUFBTUMsS0FBb0IsR0FBRyxzQkFBU04sSUFBVCxFQUFlQyxFQUFmLENBQTdCO0FBQ0EsTUFBTU0sTUFBYywwREFDTUgsU0FETix1QkFFZEUsS0FBSyxDQUFDRSxHQUZRLHlDQUFwQjtBQU1BLFNBQU8sbUJBQU1MLFFBQU4sRUFBZ0JNLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNDLEdBQVAsRUFBekI7QUFBQSxHQURELEVBRUpGLElBRkksQ0FFQztBQUFBLFFBQUNHLElBQUQsdUVBQVEsRUFBUjtBQUFBLFdBQWVBLElBQWY7QUFBQSxHQUZELFdBR0UsVUFBQ0MsS0FBRDtBQUFBLFdBQWtCLHNCQUFTO0FBQ2hDWixNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDYSxNQUFBQSxRQUFRLEVBQUVsQixhQUZzQjtBQUdoQ21CLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxhQUFXRyxPQUFPLENBQUNDLE1BQVIsQ0FBZUosS0FBZixDQUFYO0FBQUEsS0FKWixDQUFsQjtBQUFBLEdBSEYsQ0FBUDtBQVFELENBbEJNOzs7O0FBb0JBLElBQU1LLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUNwQixPQUFELEVBQXNCcUIsS0FBdEIsRUFBMEQ7QUFDOUUsTUFBTWxCLE1BQWMsR0FBRyxTQUF2QjtBQUQ4RSxNQUV2RUMsUUFGdUUsR0FFM0RKLE9BRjJELENBRXZFSSxRQUZ1RTtBQUc5RSxNQUFNa0IsUUFBZ0IsR0FBR0MsSUFBSSxDQUFDQyxTQUFMLENBQWUsb0JBQVFILEtBQVIsQ0FBZixDQUF6QjtBQUNBLE1BQU1iLE1BQWMsbURBQ0djLFFBREgsb0NBQXBCO0FBS0EsU0FBTyxtQkFBTWxCLFFBQU4sRUFBZ0JNLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNhLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpkLElBRkksQ0FFQztBQUFBLFFBQUNlLEdBQUQsdUVBQU8sRUFBUDtBQUFBLFdBQWNBLEdBQWQ7QUFBQSxHQUZELFdBR0UsVUFBQ1gsS0FBRDtBQUFBLFdBQWtCLHNCQUFTO0FBQ2hDWixNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDYSxNQUFBQSxRQUFRLEVBQUVsQixhQUZzQjtBQUdoQ21CLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxhQUFXRyxPQUFPLENBQUNDLE1BQVIsQ0FBZUosS0FBZixDQUFYO0FBQUEsS0FKWixDQUFsQjtBQUFBLEdBSEYsQ0FBUDtBQVFELENBakJNOzs7O0FBbUJBLElBQU1ZLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUMzQixPQUFELEVBQXNCMEIsR0FBdEIsRUFBeUQ7QUFDN0UsTUFBTXZCLE1BQWMsR0FBRyxLQUF2QjtBQUQ2RSxNQUV0RUMsUUFGc0UsR0FFdkNKLE9BRnVDLENBRXRFSSxRQUZzRTtBQUFBLE1BRXBEQyxTQUZvRCxHQUV2Q0wsT0FGdUMsQ0FFNURNLE1BRjREO0FBRzdFLE1BQU1zQixHQUFXLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQjtBQUNBLE1BQU1OLFFBQWdCLEdBQUcscUNBQWtCakIsU0FBbEIsRUFBekI7QUFKNkUsTUFLdEV5QixXQUxzRSxHQUtqREosR0FMaUQsQ0FLdEVJLFdBTHNFO0FBQUEsTUFLekRDLElBTHlELEdBS2pETCxHQUxpRCxDQUt6REssSUFMeUQ7QUFPN0UsTUFBTUMsTUFBVyxHQUFHO0FBQ2xCQyxJQUFBQSxJQUFJLEVBQUVYLFFBRFk7QUFFbEJZLElBQUFBLEtBQUssRUFBRU4sR0FGVztBQUdsQkUsSUFBQUEsV0FBVyxFQUFFLHlCQUFhQSxXQUFiLEVBQTBCLEVBQTFCLENBSEs7QUFJbEJLLElBQUFBLFFBQVEsRUFBRVAsR0FKUTtBQUtsQkcsSUFBQUEsSUFBSSxFQUFFLHlCQUFhQSxJQUFiLEVBQW1CLEVBQW5CO0FBTFksR0FBcEI7QUFRQSxNQUFNdkIsTUFBZ0IsT0FBR0MsYUFBSCxxQkFBZ0J1QixNQUFoQixDQUF0QjtBQUVBLFNBQU8sbUJBQU01QixRQUFOLEVBQWdCTSxLQUFoQixDQUFzQkYsTUFBdEIsRUFDSkcsSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDYSxJQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKZCxJQUZJLENBRUM7QUFBQSxRQUFDZSxHQUFELHVFQUFnQixFQUFoQjtBQUFBLFdBQXVCQSxHQUF2QjtBQUFBLEdBRkQsV0FHRSxVQUFDWCxLQUFEO0FBQUEsV0FBa0Isc0JBQVM7QUFDaENaLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENhLE1BQUFBLFFBQVEsRUFBRWxCLGFBRnNCO0FBR2hDbUIsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQVQsRUFJdEJGLEtBSnNCLEVBSWYsRUFKZSxFQUlYSixJQUpXLENBSU47QUFBQSxhQUFNLElBQU47QUFBQSxLQUpNLFdBSVksVUFBQ0ksS0FBRDtBQUFBLGFBQVdHLE9BQU8sQ0FBQ0MsTUFBUixDQUFlSixLQUFmLENBQVg7QUFBQSxLQUpaLENBQWxCO0FBQUEsR0FIRixDQUFQO0FBUUQsQ0F6Qk07Ozs7QUEyQkEsSUFBTXFCLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUNwQyxPQUFELEVBQXNCcUIsS0FBdEIsRUFBNkJnQixNQUE3QixFQUEyRDtBQUNoRixNQUFNbEMsTUFBYyxHQUFHLFNBQXZCO0FBRGdGLE1BRXpFQyxRQUZ5RSxHQUUxQ0osT0FGMEMsQ0FFekVJLFFBRnlFO0FBQUEsTUFFdkRDLFNBRnVELEdBRTFDTCxPQUYwQyxDQUUvRE0sTUFGK0Q7QUFHaEYsTUFBTTRCLEtBQWEsR0FBR0wsSUFBSSxDQUFDRCxHQUFMLEVBQXRCO0FBQ0EsTUFBTVUsTUFBYyxHQUFHLHlDQUFzQmpDLFNBQXRCLEVBQXZCO0FBQ0EsTUFBTWtDLGNBQThCLEdBQUcsbUJBQU1uQyxRQUFOLEVBQWdCbUMsY0FBaEIsQ0FBK0IsVUFBL0IsQ0FBdkM7QUFDQSxNQUFNQyxJQUFTLEdBQUc7QUFBQ1AsSUFBQUEsSUFBSSxFQUFFSyxNQUFQO0FBQWVKLElBQUFBLEtBQUssRUFBTEE7QUFBZixHQUFsQjtBQUVBLFNBQU9LLGNBQWMsQ0FBQ0UsSUFBZixDQUFvQkQsSUFBcEIsaUJBQWtDbkIsS0FBbEMsbUJBQW9EZ0IsTUFBcEQsR0FDSjFCLElBREksQ0FDQztBQUFBLFFBQUMrQixJQUFELHVFQUFrQixFQUFsQjtBQUFBLFdBQXlCQSxJQUF6QjtBQUFBLEdBREQsV0FFRSxVQUFDM0IsS0FBRDtBQUFBLFdBQWtCLHNCQUFTO0FBQ2hDWixNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDYSxNQUFBQSxRQUFRLEVBQUVsQixhQUZzQjtBQUdoQ21CLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCRixLQUpzQixFQUlmLEVBSmUsRUFJWEosSUFKVyxDQUlOO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKTSxXQUlZLFVBQUNJLEtBQUQ7QUFBQSxhQUFXRyxPQUFPLENBQUNDLE1BQVIsQ0FBZUosS0FBZixDQUFYO0FBQUEsS0FKWixDQUFsQjtBQUFBLEdBRkYsQ0FBUDtBQU9ELENBZk07Ozs7QUFpQkEsSUFBTTRCLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUMzQyxPQUFELEVBQStEO0FBQUEsTUFBekM0QyxJQUF5Qyx1RUFBekIsRUFBeUI7QUFDdEYsTUFBTXpDLE1BQWMsR0FBRyxRQUF2QjtBQURzRixNQUUvRUMsUUFGK0UsR0FFbkVKLE9BRm1FLENBRS9FSSxRQUYrRTtBQUd0RixNQUFNd0IsR0FBVyxHQUFHQyxJQUFJLENBQUNELEdBQUwsRUFBcEI7QUFIc0YsTUFJL0VFLFdBSitFLEdBSXREYyxJQUpzRCxDQUkvRWQsV0FKK0U7QUFBQSxNQUlsRWUsRUFKa0UsR0FJdERELElBSnNELENBSWxFQyxFQUprRTtBQUFBLE1BSTlEZCxJQUo4RCxHQUl0RGEsSUFKc0QsQ0FJOURiLElBSjhEO0FBS3RGLE1BQU1lLFVBQWtCLEdBQUcseUJBQWFmLElBQWIsRUFBbUIsRUFBbkIsQ0FBM0I7QUFFQSxNQUFNZ0IsTUFBZSxHQUFHO0FBQ3RCakIsSUFBQUEsV0FBVyxFQUFFLHlCQUFhQSxXQUFiLEVBQTBCLEVBQTFCLENBRFM7QUFFdEJLLElBQUFBLFFBQVEsRUFBRVAsR0FGWTtBQUd0QkcsSUFBQUEsSUFBSSxFQUFFZTtBQUhnQixHQUF4QjtBQU1BLE1BQU14QixRQUFnQixHQUFHLG9CQUFRdUIsRUFBUixDQUF6QjtBQUNBLE1BQU14QixLQUFhLEdBQUcsQ0FBQ0MsUUFBRCxHQUFZLHFDQUFrQndCLFVBQVUsQ0FBQ0UsV0FBWCxFQUFsQixHQUE4QyxJQUE5QyxDQUFaLEdBQWtFMUIsUUFBeEY7O0FBRUEsTUFBTVUsTUFBZSxxQkFDaEJlLE1BRGdCO0FBRW5CZCxJQUFBQSxJQUFJLEVBQUVaLEtBRmE7QUFHbkJhLElBQUFBLEtBQUssRUFBRU47QUFIWSxJQUFyQjs7QUFLQSxNQUFNcEIsTUFBZ0IsT0FBR0MsYUFBSCxzQkFBdUJZLEtBQXZCLEVBQ1RXLE1BRFMsRUFFVGUsTUFGUyxDQUF0QjtBQUtBLFNBQU8sbUJBQU0zQyxRQUFOLEVBQWdCTSxLQUFoQixDQUFzQkYsTUFBdEIsRUFDSkcsSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDYSxJQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKZCxJQUZJLENBRUM7QUFBQSxRQUFDZSxHQUFELHVFQUFPLEVBQVA7QUFBQSxXQUFjQSxHQUFkO0FBQUEsR0FGRCxXQUdFLFVBQUNYLEtBQUQ7QUFBQSxXQUFrQixzQkFBUztBQUNoQ1osTUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ2EsTUFBQUEsUUFBUSxFQUFFbEIsYUFGc0I7QUFHaENtQixNQUFBQSxLQUFLLEVBQUU7QUFIeUIsS0FBVCxFQUl0QkYsS0FKc0IsRUFJZixFQUplLEVBSVhKLElBSlcsQ0FJTjtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSk0sV0FJWSxVQUFDSSxLQUFEO0FBQUEsYUFBV0csT0FBTyxDQUFDQyxNQUFSLENBQWVKLEtBQWYsQ0FBWDtBQUFBLEtBSlosQ0FBbEI7QUFBQSxHQUhGLENBQVA7QUFRRCxDQWxDTTs7OztBQW9DQSxJQUFNa0MsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ2pELE9BQUQsRUFBc0JxQixLQUF0QixFQUEwRDtBQUNqRixNQUFNbEIsTUFBYyxHQUFHLFFBQXZCO0FBRGlGLE1BRTFFQyxRQUYwRSxHQUU5REosT0FGOEQsQ0FFMUVJLFFBRjBFO0FBR2pGLE1BQU04QyxXQUFtQixHQUFHLG9CQUFRN0IsS0FBUixDQUE1QjtBQUNBLE1BQU1iLE1BQWdCLE9BQUdDLGFBQUgsc0JBQ0R5QyxXQURDLENBQXRCO0FBS0EsU0FBTyxtQkFBTTlDLFFBQU4sRUFBZ0JNLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNhLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpkLElBRkksQ0FFQztBQUFBLFFBQUNlLEdBQUQsdUVBQWdCLEVBQWhCO0FBQUEsV0FBdUJBLEdBQXZCO0FBQUEsR0FGRCxXQUdFLFVBQUNYLEtBQUQ7QUFBQSxXQUFrQixzQkFBUztBQUNoQ1osTUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ2EsTUFBQUEsUUFBUSxFQUFFbEIsYUFGc0I7QUFHaENtQixNQUFBQSxLQUFLLEVBQUU7QUFIeUIsS0FBVCxFQUl0QkYsS0FKc0IsRUFJZixFQUplLEVBSVhKLElBSlcsQ0FJTjtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSk0sV0FJWSxVQUFDSSxLQUFEO0FBQUEsYUFBV0csT0FBTyxDQUFDQyxNQUFSLENBQWVKLEtBQWYsQ0FBWDtBQUFBLEtBSlosQ0FBbEI7QUFBQSxHQUhGLENBQVA7QUFRRCxDQWpCTTs7OztBQW1CQSxJQUFNb0MsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ0MsRUFBRCxFQUFlQyxPQUFmLEVBQXFEO0FBQzVFLE1BQU1oQyxLQUFhLEdBQUcscUNBQWtCZ0MsT0FBbEIsRUFBdEI7QUFDQSxNQUFNckIsTUFBZSxHQUFHO0FBQ3RCQyxJQUFBQSxJQUFJLEVBQUVaLEtBRGdCO0FBRXRCYSxJQUFBQSxLQUFLLEVBQUVMLElBQUksQ0FBQ0QsR0FBTCxFQUZlO0FBR3RCRyxJQUFBQSxJQUFJLEVBQUVzQjtBQUhnQixHQUF4QjtBQU1BLE1BQU03QyxNQUFNLE9BQUdDLGFBQUgsc0JBQXVCWSxLQUF2QixFQUNEVyxNQURDLENBQVo7QUFLQSxTQUFPb0IsRUFBRSxDQUFDMUMsS0FBSCxDQUFTRixNQUFULEVBQ0pHLElBREksQ0FDQyxVQUFDQyxNQUFEO0FBQUEsV0FBeUJBLE1BQU0sQ0FBQ2EsSUFBUCxFQUF6QjtBQUFBLEdBREQsRUFFSmQsSUFGSSxDQUVDO0FBQUEsUUFBQ2UsR0FBRCx1RUFBTyxFQUFQO0FBQUEsV0FBY0EsR0FBZDtBQUFBLEdBRkQsV0FHRSxVQUFDWCxLQUFELEVBQWtCO0FBQ3ZCLFVBQU1BLEtBQU47QUFDRCxHQUxJLENBQVA7QUFNRCxDQW5CTTs7OztBQXFCQSxJQUFNdUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFDRixFQUFELEVBQWUxQixHQUFmLEVBQTZCNkIsUUFBN0IsRUFBK0NDLE1BQS9DLEVBQW9GO0FBQy9HLE1BQU1qQixjQUFjLEdBQUdhLEVBQUUsQ0FBQ2IsY0FBSCxDQUFrQixVQUFsQixDQUF2QjtBQUQrRyxNQUVuR2xCLEtBRm1HLEdBRTVFSyxHQUY0RSxDQUV4RytCLEdBRndHO0FBQUEsTUFFdEZDLE1BRnNGLEdBRTVFaEMsR0FGNEUsQ0FFNUZPLElBRjRGO0FBRy9HLE1BQU1LLE1BQU0sR0FBRyxxQ0FBa0JpQixRQUFsQixjQUE4QkcsTUFBOUIsY0FBd0NGLE1BQXhDLEVBQWY7QUFDQSxNQUFNaEIsSUFBUyxHQUFHO0FBQ2hCUCxJQUFBQSxJQUFJLEVBQUVLLE1BRFU7QUFFaEJKLElBQUFBLEtBQUssRUFBRUwsSUFBSSxDQUFDRCxHQUFMLEVBRlM7QUFHaEIrQixJQUFBQSxJQUFJLEVBQUVKO0FBSFUsR0FBbEI7QUFNQSxTQUFPaEIsY0FBYyxDQUFDRSxJQUFmLENBQW9CRCxJQUFwQixFQUEwQm5CLEtBQTFCLFlBQW9Da0MsUUFBcEMsY0FBZ0RDLE1BQWhELEdBQTBEN0MsSUFBMUQsQ0FBK0Q7QUFBQSxXQUFNZSxHQUFOO0FBQUEsR0FBL0QsQ0FBUDtBQUNELENBWE07Ozs7QUFhQSxJQUFNa0MsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ1IsRUFBRCxFQUFlUyxRQUFmLEVBQW1DTixRQUFuQyxFQUFxREMsTUFBckQ7QUFBQSxTQUN0QnRDLE9BQU8sQ0FBQ0wsR0FBUixDQUNFZ0QsUUFBUSxDQUFDQyxHQUFULENBQWEsVUFBQ3pDLEtBQUQ7QUFBQSxXQUFtQjhCLFNBQVMsQ0FBQ0MsRUFBRCxFQUFLL0IsS0FBTCxDQUFULENBQzdCVixJQUQ2QixDQUN4QixVQUFDZSxHQUFEO0FBQUEsYUFBa0I0QixhQUFhLENBQUNGLEVBQUQsRUFBSzFCLEdBQUwsRUFBVTZCLFFBQVYsRUFBb0JDLE1BQXBCLENBQS9CO0FBQUEsS0FEd0IsQ0FBbkI7QUFBQSxHQUFiLENBREYsQ0FEc0I7QUFBQSxDQUFqQjs7OztBQU9BLElBQU1PLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNYLEVBQUQsRUFBZUcsUUFBZixFQUFpQ0MsTUFBakMsRUFBeUNRLE9BQXpDLEVBQXlFO0FBQ2xHLE1BQU1DLElBQWMsR0FBRyx1QkFBTUQsT0FBTixFQUFlLGdCQUFmLEVBQWlDRixHQUFqQyxDQUFxQyxVQUFDcEMsR0FBRDtBQUFBLFdBQWlCLG9CQUFRQSxHQUFSLENBQWpCO0FBQUEsR0FBckMsQ0FBdkI7QUFDQSxNQUFNYSxjQUFjLEdBQUdhLEVBQUUsQ0FBQ2IsY0FBSCxDQUFrQixVQUFsQixDQUF2QjtBQUVBLFNBQU9BLGNBQWMsQ0FBQzJCLE9BQWYsQ0FBdUJWLE1BQXZCLEVBQ0o3QyxJQURJLENBQ0MsVUFBQ3dELEtBQUQsRUFBVztBQUNmLFFBQUdBLEtBQUssQ0FBQ0MsTUFBVCxFQUFpQjtBQUNmO0FBQ0EsYUFBT2xELE9BQU8sQ0FBQ0wsR0FBUixDQUNMc0QsS0FBSyxDQUFDTCxHQUFOLENBQVUsVUFBQ3RCLElBQUQsRUFBVTtBQUFBLFlBQ0w2QixPQURLLEdBQ003QixJQUROLENBQ1hQLElBRFc7QUFFbEIsWUFBTXpCLE1BQU0sT0FBR0MsYUFBSCxzQkFBc0I0RCxPQUF0QixDQUFaO0FBQ0EsZUFBT2pCLEVBQUUsQ0FBQzFDLEtBQUgsQ0FBU0YsTUFBVCxXQUF1QixVQUFDTyxLQUFELEVBQWtCO0FBQzlDLGdCQUFNQSxLQUFOO0FBQ0QsU0FGTSxDQUFQO0FBR0QsT0FORCxDQURLLEVBUUpKLElBUkksQ0FRQyxZQUFNO0FBQ1YsWUFBR3NELElBQUksQ0FBQ0csTUFBUixFQUFnQjtBQUNkO0FBQ0EsaUJBQU9SLFFBQVEsQ0FBQ1IsRUFBRCxFQUFLYSxJQUFMLEVBQVdWLFFBQVgsRUFBcUJDLE1BQXJCLENBQWY7QUFDRDs7QUFDRCxlQUFPLEVBQVA7QUFDRCxPQWRJLENBQVA7QUFlRCxLQWpCRCxNQWlCTyxJQUFHUyxJQUFJLENBQUNHLE1BQVIsRUFBZ0I7QUFDckI7QUFDQSxhQUFPUixRQUFRLENBQUNSLEVBQUQsRUFBS2EsSUFBTCxFQUFXVixRQUFYLEVBQXFCQyxNQUFyQixDQUFmO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0QsR0F4QkksV0F5QkUsVUFBQ3pDLEtBQUQsRUFBa0I7QUFDdkIsVUFBTUEsS0FBTjtBQUNELEdBM0JJLENBQVA7QUE0QkQsQ0FoQ00iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2UsIEVkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2FxbC1xdWVyeSc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2N1cnNvcic7XG5pbXBvcnQgd29yZHMgZnJvbSAnbG9kYXNoL3dvcmRzJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMnO1xuaW1wb3J0IHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAndGFncyc7XG5cbmV4cG9ydCBjb25zdCBnZXRUYWdMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciA9IDAsIHRvOiBudW1iZXIgPSAzMCk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdMaXN0XG4gICAgICBGSUxURVIgdC51c2VySWQgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIHQuYWRkZWRcbiAgICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJzZUlkKHRhZ0lkKSk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiB0Ll9rZXkgPT0gJHtmb3JtYXRJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWc6IFRhZ1R5cGUpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgbmFtZX0gPSB0YWc7XG5cbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVZhckNoYXIobmFtZSwgMzIpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZzogVGFnVHlwZSA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0YWdQb3N0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkLCBwb3N0SWQpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3RhZ1Bvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFkZGVkOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZ1Bvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlKS5lZGdlQ29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge19rZXk6IGVkZ2VJZCwgYWRkZWR9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIGB0YWdzLyR7dGFnSWR9YCwgYHBvc3RzLyR7cG9zdElkfWApXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHBvc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogVGFnVHlwZSA9IHt9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgaWQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKG5hbWUsIDMyKTtcblxuICBjb25zdCB1cGRhdGU6IFRhZ1R5cGUgPSB7XG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogZm9ybWF0TmFtZVxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGlkKTtcbiAgY29uc3QgdGFnSWQ6IHN0cmluZyA9ICFmb3JtYXRJZCA/IGNyZWF0ZUhhc2goYHRhZy0ke2Zvcm1hdE5hbWUudG9Mb3dlckNhc2UoKX1gLCBudWxsKSA6IGZvcm1hdElkO1xuXG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogdGFnSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt0YWdJZH19XG4gICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0lkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdFRhZ0lkfVxuICAgIFJFTU9WRSB0IElOIHRhZ3NcbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZyA9IChkYjogRGF0YWJhc2UsIHRhZ05hbWU6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCB0YWdJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnLSR7dGFnTmFtZX1gKTtcbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIF9rZXk6IHRhZ0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IHRhZ05hbWVcbiAgfTtcblxuICBjb25zdCBhcWxRcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3RhZ0lkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFIHt9XG4gICAgSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUYWdFZGdlID0gKGRiOiBEYXRhYmFzZSwgdGFnOiBUYWdUeXBlLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmVkZ2VDb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCB7X2lkOiB0YWdJZCwgX2tleTogdGFnS2V5fSA9IHRhZztcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgdGFnLSR7aXRlbVR5cGV9LSR7dGFnS2V5fS0ke2l0ZW1JZH1gKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICB0eXBlOiBpdGVtVHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHRhZ0lkLCBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YCkudGhlbigoKSA9PiB0YWcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpbmtUYWdzID0gKGRiOiBEYXRhYmFzZSwgdGFnTmFtZXM6IHN0cmluZ1tdLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZVtdPiA9PlxuICBQcm9taXNlLmFsbChcbiAgICB0YWdOYW1lcy5tYXAoKHRhZ0lkOiBzdHJpbmcpID0+IGNyZWF0ZVRhZyhkYiwgdGFnSWQpXG4gICAgICAudGhlbigodGFnOiBUYWdUeXBlKSA9PiBjcmVhdGVUYWdFZGdlKGRiLCB0YWcsIGl0ZW1UeXBlLCBpdGVtSWQpKSlcbiAgKTtcblxuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRhZ3MgPSAoZGI6IERhdGFiYXNlLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQsIGNvbnRlbnQpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCB0YWdzOiBzdHJpbmdbXSA9IHdvcmRzKGNvbnRlbnQsIC8jW2EtekEtWlxcZC1dKy9nKS5tYXAoKHRhZzogc3RyaW5nKSA9PiBwYXJzZUlkKHRhZykpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmVkZ2VDb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZClcbiAgICAudGhlbigoZWRnZXMpID0+IHtcbiAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzVGFnZ2VkYDtcbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShhcWxRcnkpLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZih0YWdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgdGFnc1xuICAgICAgICAgICAgICByZXR1cm4gbGlua1RhZ3MoZGIsIHRhZ3MsIGl0ZW1UeXBlLCBpdGVtSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbVR5cGUsIGl0ZW1JZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl19
397
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3RhZ3MudHMiXSwibmFtZXMiOlsiZXZlbnRDYXRlZ29yeSIsImdldFRhZ0xpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJsaW1pdCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImxpc3QiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0VGFnIiwidGFnSWQiLCJmb3JtYXRJZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXh0IiwidGFnIiwiYWRkVGFnIiwibm93IiwiRGF0ZSIsImRlc2NyaXB0aW9uIiwibmFtZSIsImluc2VydCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwidGFnUG9zdCIsInBvc3RJZCIsImVkZ2VJZCIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImVkZ2UiLCJfZnJvbSIsIl90byIsInNhdmUiLCJyZXR1cm5OZXciLCJwb3N0IiwidXBkYXRlVGFnIiwiaXRlbSIsImlkIiwiZm9ybWF0TmFtZSIsInVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiZGVsZXRlVGFnIiwiZm9ybWF0VGFnSWQiLCJjcmVhdGVUYWciLCJkYiIsInRhZ05hbWUiLCJjcmVhdGVUYWdFZGdlIiwiaXRlbVR5cGUiLCJpdGVtSWQiLCJfaWQiLCJ0YWdLZXkiLCJ0eXBlIiwibGlua1RhZ3MiLCJ0YWdOYW1lcyIsIm1hcCIsImV4dHJhY3RUYWdzIiwiY29udGVudCIsInRhZ3MiLCJpbkVkZ2VzIiwiZWRnZXMiLCJsZW5ndGgiLCJlZGdlS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFJQTs7QUFNQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFDRCxPQWRJLENBQVA7QUFlRCxLQWpCRCxNQWlCTyxJQUFHUyxJQUFJLENBQUNHLE1BQVIsRUFBZ0I7QUFDckI7QUFDQSxhQUFPUixRQUFRLENBQUNSLEVBQUQsRUFBS2EsSUFBTCxFQUFXVixRQUFYLEVBQXFCQyxNQUFyQixDQUFmO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0QsR0F4QkksV0F5QkUsVUFBQzdDLEtBQUQsRUFBa0I7QUFDdkIsVUFBTUEsS0FBTjtBQUNELEdBM0JJLENBQVA7QUE0QkQsQ0FoQ00iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQgd29yZHMgZnJvbSAnbG9kYXNoL3dvcmRzJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMnO1xuaW1wb3J0IHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAndGFncyc7XG5cbmV4cG9ydCBjb25zdCBnZXRUYWdMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciA9IDAsIHRvOiBudW1iZXIgPSAzMCk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdMaXN0XG4gICAgICBGSUxURVIgdC51c2VySWQgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIHQuYWRkZWRcbiAgICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJzZUlkKHRhZ0lkKSk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiB0Ll9rZXkgPT0gJHtmb3JtYXRJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWc6IFRhZ1R5cGUpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgbmFtZX0gPSB0YWc7XG5cbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgX2tleTogZm9ybWF0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVZhckNoYXIobmFtZSwgMzIpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZzogVGFnVHlwZSA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0YWdQb3N0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkLCBwb3N0SWQpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3RhZ1Bvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFkZGVkOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZ1Bvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlKS5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7X2Zyb206IGB0YWdzLyR7dGFnSWR9YCwgX2tleTogZWRnZUlkLCBfdG86IGBwb3N0cy8ke3Bvc3RJZH1gLCBhZGRlZH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlID0ge30pID0+IHBvc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogVGFnVHlwZSA9IHt9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiwgaWQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKG5hbWUsIDMyKTtcblxuICBjb25zdCB1cGRhdGU6IFRhZ1R5cGUgPSB7XG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogZm9ybWF0TmFtZVxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGlkKTtcbiAgY29uc3QgdGFnSWQ6IHN0cmluZyA9ICFmb3JtYXRJZCA/IGNyZWF0ZUhhc2goYHRhZy0ke2Zvcm1hdE5hbWUudG9Mb3dlckNhc2UoKX1gLCBudWxsKSA6IGZvcm1hdElkO1xuXG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogdGFnSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt0YWdJZH19XG4gICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0lkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdFRhZ0lkfVxuICAgIFJFTU9WRSB0IElOIHRhZ3NcbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZyA9IChkYjogRGF0YWJhc2UsIHRhZ05hbWU6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCB0YWdJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnLSR7dGFnTmFtZX1gKTtcbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIF9rZXk6IHRhZ0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IHRhZ05hbWVcbiAgfTtcblxuICBjb25zdCBhcWxRcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3RhZ0lkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFIHt9XG4gICAgSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUYWdFZGdlID0gKGRiOiBEYXRhYmFzZSwgdGFnOiBUYWdUeXBlLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IHtfaWQ6IHRhZ0lkLCBfa2V5OiB0YWdLZXl9ID0gdGFnO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGB0YWctJHtpdGVtVHlwZX0tJHt0YWdLZXl9LSR7aXRlbUlkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IHRhZ0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHR5cGU6IGl0ZW1UeXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pLnRoZW4oKCkgPT4gdGFnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaW5rVGFncyA9IChkYjogRGF0YWJhc2UsIHRhZ05hbWVzOiBzdHJpbmdbXSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT5cbiAgUHJvbWlzZS5hbGwoXG4gICAgdGFnTmFtZXMubWFwKCh0YWdJZDogc3RyaW5nKSA9PiBjcmVhdGVUYWcoZGIsIHRhZ0lkKVxuICAgICAgLnRoZW4oKHRhZzogVGFnVHlwZSkgPT4gY3JlYXRlVGFnRWRnZShkYiwgdGFnLCBpdGVtVHlwZSwgaXRlbUlkKSkpXG4gICk7XG5cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYWdzID0gKGRiOiBEYXRhYmFzZSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkLCBjb250ZW50KTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgdGFnczogc3RyaW5nW10gPSB3b3Jkcyhjb250ZW50LCAvI1thLXpBLVpcXGQtXSsvZykubWFwKCh0YWc6IHN0cmluZykgPT4gcGFyc2VJZCh0YWcpKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZClcbiAgICAudGhlbigoZWRnZXM6IGFueSkgPT4ge1xuICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaXNUYWdnZWRgO1xuICAgICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbVR5cGUsIGl0ZW1JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYodGFncy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRhZ3NcbiAgICAgICAgcmV0dXJuIGxpbmtUYWdzKGRiLCB0YWdzLCBpdGVtVHlwZSwgaXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXX0=
@@ -3,6 +3,9 @@ import { UserOptions, UserType } from '../types/users';
3
3
  export declare const getUserOptional: (fields: string[]) => any;
4
4
  export declare const parseUserOptions: (options?: UserOptions) => {
5
5
  limit: import("..").ArangoDBLimit;
6
+ from?: number;
7
+ to?: number;
8
+ username?: string;
6
9
  };
7
10
  export declare const addUser: (context: ApiContext, user: UserType) => Promise<UserType>;
8
11
  export declare const updateUser: (context: ApiContext, user: UserType) => Promise<UserType>;
@@ -10,8 +13,8 @@ export declare const deleteUser: (context: ApiContext, userId: string) => Promis
10
13
  export declare const deactivateUser: (context: ApiContext, userId: string) => Promise<UserType>;
11
14
  export declare const getSessionUser: (context: ApiContext) => Promise<UserType>;
12
15
  export declare const getUser: (context: ApiContext, userId: string) => Promise<UserType>;
13
- export declare const getUserList: (context: ApiContext, options?: UserOptions) => Promise<UserType>;
14
- export declare const getUsersByReaction: (context: ApiContext, reactionName: string, options?: UserOptions) => Promise<UserType>;
15
- export declare const getUsersByRecent: (context: ApiContext, options?: UserOptions) => Promise<UserType>;
16
- export declare const getUsersByUsername: (context: ApiContext, query: string, options?: UserOptions) => Promise<UserType>;
16
+ export declare const getUserList: (context: ApiContext, options?: UserOptions) => Promise<UserType[]>;
17
+ export declare const getUsersByReaction: (context: ApiContext, reactionName: string, options?: UserOptions) => Promise<UserType[]>;
18
+ export declare const getUsersByRecent: (context: ApiContext, options?: UserOptions) => Promise<UserType[]>;
19
+ export declare const getUsersByUsername: (context: ApiContext, query: string, options?: UserOptions) => Promise<UserType[]>;
17
20
  export declare const getDisplayName: (user?: UserType) => string;