@secrecy/lib 1.0.0-dev.23 → 1.0.0-dev.26

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 (156) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/__tests__/client/client.test.ts +81 -0
  3. package/__tests__/client/folder.test.ts +302 -0
  4. package/__tests__/client/mail.test.ts +476 -0
  5. package/__tests__/client/timing.test.ts +35 -0
  6. package/__tests__/client/utils.ts +41 -0
  7. package/__tests__/client/vFile.test.ts +207 -0
  8. package/__tests__/index.test.ts +171 -0
  9. package/commitlint.config.cjs +3 -0
  10. package/{lib/zeus → dist}/index.d.ts +1347 -1416
  11. package/dist/index.js +255 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/index.mjs +255 -0
  14. package/dist/index.mjs.map +1 -0
  15. package/docs/assets/css/main.css +2660 -0
  16. package/docs/assets/images/icons.png +0 -0
  17. package/docs/assets/images/icons@2x.png +0 -0
  18. package/docs/assets/images/widgets.png +0 -0
  19. package/docs/assets/images/widgets@2x.png +0 -0
  20. package/docs/assets/js/main.js +248 -0
  21. package/docs/assets/js/search.js +1 -0
  22. package/docs/classes/baseclient.baseclient-1.html +1165 -0
  23. package/docs/classes/client.secrecyclient.html +2527 -0
  24. package/docs/enums/index.sodium.base64_variants.html +205 -0
  25. package/docs/index.html +198 -0
  26. package/docs/interfaces/client_types.draftmail.html +335 -0
  27. package/docs/interfaces/client_types.filecontentbase.html +231 -0
  28. package/docs/interfaces/client_types.filecontentcloud.html +244 -0
  29. package/docs/interfaces/client_types.filecontentreceivedmail.html +244 -0
  30. package/docs/interfaces/client_types.filecontentsentmail.html +230 -0
  31. package/docs/interfaces/client_types.receivedmail.html +363 -0
  32. package/docs/interfaces/client_types.sentmail.html +335 -0
  33. package/docs/interfaces/crypto.keypair.html +202 -0
  34. package/docs/interfaces/index.sodium.cryptobox.html +185 -0
  35. package/docs/interfaces/index.sodium.cryptokx.html +185 -0
  36. package/docs/interfaces/index.sodium.keypair.html +199 -0
  37. package/docs/interfaces/index.sodium.messagetag.html +185 -0
  38. package/docs/interfaces/index.sodium.secretbox.html +185 -0
  39. package/docs/interfaces/index.sodium.stateaddress.html +171 -0
  40. package/docs/interfaces/index.sodium.stringcryptobox.html +185 -0
  41. package/docs/interfaces/index.sodium.stringcryptokx.html +185 -0
  42. package/docs/interfaces/index.sodium.stringkeypair.html +199 -0
  43. package/docs/interfaces/index.sodium.stringmessagetag.html +185 -0
  44. package/docs/interfaces/index.sodium.stringsecretbox.html +185 -0
  45. package/docs/interfaces/utils_store_buddy.storebuddy.html +333 -0
  46. package/docs/modules/baseclient.html +929 -0
  47. package/docs/modules/cache.html +185 -0
  48. package/docs/modules/client.html +207 -0
  49. package/docs/modules/client_convert_file.html +216 -0
  50. package/docs/modules/client_convert_folder.html +303 -0
  51. package/docs/modules/client_convert_vfile.html +216 -0
  52. package/docs/modules/client_helpers.html +311 -0
  53. package/docs/modules/client_storage.html +167 -0
  54. package/docs/modules/client_types.html +1227 -0
  55. package/docs/modules/client_types_file.html +233 -0
  56. package/docs/modules/client_types_filesonusersonapplications.html +168 -0
  57. package/docs/modules/client_types_folder.html +383 -0
  58. package/docs/modules/client_types_inputs.html +263 -0
  59. package/docs/modules/client_types_mail.html +181 -0
  60. package/docs/modules/client_types_queries.html +199 -0
  61. package/docs/modules/client_types_userappsettings.html +163 -0
  62. package/docs/modules/client_types_vfile.html +364 -0
  63. package/docs/modules/crypto.html +366 -0
  64. package/docs/modules/crypto_file.html +344 -0
  65. package/docs/modules/index.html +779 -0
  66. package/docs/modules/index.sodium.html +6039 -0
  67. package/docs/modules/minify.html +183 -0
  68. package/docs/modules/minify_lz4.html +279 -0
  69. package/docs/modules/popuptools.html +259 -0
  70. package/docs/modules/sodium.html +167 -0
  71. package/docs/modules/utils.html +219 -0
  72. package/docs/modules/utils_store_buddy.html +208 -0
  73. package/docs/modules/utils_time.html +330 -0
  74. package/docs/modules/worker_md5.html +156 -0
  75. package/docs/modules/worker_sodium.html +231 -0
  76. package/docs/modules/worker_workercodes.html +157 -0
  77. package/docs/modules.html +235 -0
  78. package/index.html +21 -0
  79. package/jest.config.ts +27 -0
  80. package/jest.setup.ts +6 -0
  81. package/package.json +39 -47
  82. package/release.config.cjs +15 -0
  83. package/tsup.config.ts +23 -0
  84. package/lib/BaseClient.d.ts +0 -274
  85. package/lib/BaseClient.js +0 -2228
  86. package/lib/PopupTools.d.ts +0 -17
  87. package/lib/PopupTools.js +0 -213
  88. package/lib/ZeusThunder.d.ts +0 -2
  89. package/lib/ZeusThunder.js +0 -113
  90. package/lib/cache.d.ts +0 -7
  91. package/lib/cache.js +0 -5
  92. package/lib/client/admin/index.d.ts +0 -11
  93. package/lib/client/admin/index.js +0 -198
  94. package/lib/client/convert/file.d.ts +0 -5
  95. package/lib/client/convert/file.js +0 -39
  96. package/lib/client/convert/folder.d.ts +0 -8
  97. package/lib/client/convert/folder.js +0 -264
  98. package/lib/client/convert/mail.d.ts +0 -3
  99. package/lib/client/convert/mail.js +0 -46
  100. package/lib/client/convert/vFile.d.ts +0 -5
  101. package/lib/client/convert/vFile.js +0 -164
  102. package/lib/client/helpers.d.ts +0 -23
  103. package/lib/client/helpers.js +0 -116
  104. package/lib/client/index.d.ts +0 -172
  105. package/lib/client/index.js +0 -6178
  106. package/lib/client/storage.d.ts +0 -7
  107. package/lib/client/storage.js +0 -12
  108. package/lib/client/types/File.d.ts +0 -21
  109. package/lib/client/types/File.js +0 -3
  110. package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  111. package/lib/client/types/FilesOnUsersOnApplications.js +0 -3
  112. package/lib/client/types/Folder.d.ts +0 -68
  113. package/lib/client/types/Folder.js +0 -7
  114. package/lib/client/types/Inputs.d.ts +0 -21
  115. package/lib/client/types/Inputs.js +0 -3
  116. package/lib/client/types/UserAppNotifications.d.ts +0 -6
  117. package/lib/client/types/UserAppNotifications.js +0 -3
  118. package/lib/client/types/UserAppSettings.d.ts +0 -7
  119. package/lib/client/types/UserAppSettings.js +0 -3
  120. package/lib/client/types/VFile.d.ts +0 -62
  121. package/lib/client/types/VFile.js +0 -4
  122. package/lib/client/types/index.d.ts +0 -154
  123. package/lib/client/types/index.js +0 -10
  124. package/lib/client/types/queries.d.ts +0 -535
  125. package/lib/client/types/queries.js +0 -192
  126. package/lib/crypto/file.d.ts +0 -14
  127. package/lib/crypto/file.js +0 -291
  128. package/lib/crypto/index.d.ts +0 -12
  129. package/lib/crypto/index.js +0 -37
  130. package/lib/error.d.ts +0 -30
  131. package/lib/error.js +0 -3
  132. package/lib/index.d.ts +0 -13
  133. package/lib/index.js +0 -42
  134. package/lib/minify/index.d.ts +0 -2
  135. package/lib/minify/index.js +0 -28
  136. package/lib/minify/lz4.d.ts +0 -5
  137. package/lib/minify/lz4.js +0 -633
  138. package/lib/sodium.d.ts +0 -3
  139. package/lib/sodium.js +0 -28
  140. package/lib/utils/store-buddy.d.ts +0 -14
  141. package/lib/utils/store-buddy.js +0 -69
  142. package/lib/utils/time.d.ts +0 -10
  143. package/lib/utils/time.js +0 -22
  144. package/lib/utils.d.ts +0 -4
  145. package/lib/utils.js +0 -188
  146. package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
  147. package/lib/worker/__mock__/sodium.worker.js +0 -46
  148. package/lib/worker/md5.d.ts +0 -1
  149. package/lib/worker/md5.js +0 -43
  150. package/lib/worker/sodium.d.ts +0 -3
  151. package/lib/worker/sodium.js +0 -155
  152. package/lib/worker/workerCodes.d.ts +0 -2
  153. package/lib/worker/workerCodes.js +0 -3
  154. package/lib/zeus/const.d.ts +0 -2
  155. package/lib/zeus/const.js +0 -2267
  156. package/lib/zeus/index.js +0 -549
package/lib/BaseClient.js DELETED
@@ -1,2228 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
-
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
-
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
-
9
- /* eslint-disable @typescript-eslint/naming-convention */
10
- import { serialize } from "bson";
11
- import { getLink } from "@secrecy/lib-utils";
12
- import { usersCache } from "./cache.js";
13
- import { getStorage } from "./client/storage.js";
14
- import { Selector } from "./zeus/index.js";
15
- import { createThunder } from "./ZeusThunder.js";
16
-
17
- function internalToPaymentInfos(p) {
18
- return _objectSpread(_objectSpread({}, p), {}, {
19
- currentSubscription: _objectSpread(_objectSpread({}, p.currentSubscription), {}, {
20
- state: p.currentSubscription.state,
21
- collectionMethod: p.currentSubscription.collectionMethod,
22
- activatedAt: p.currentSubscription.activatedAt ? new Date(p.currentSubscription.activatedAt) : null,
23
- createdAt: p.currentSubscription.createdAt ? new Date(p.currentSubscription.createdAt) : null,
24
- updatedAt: p.currentSubscription.updatedAt ? new Date(p.currentSubscription.updatedAt) : null,
25
- trialEndsAt: p.currentSubscription.trialEndsAt ? new Date(p.currentSubscription.trialEndsAt) : null,
26
- trialStartedAt: p.currentSubscription.trialStartedAt ? new Date(p.currentSubscription.trialStartedAt) : null,
27
- pausedAt: p.currentSubscription.pausedAt ? new Date(p.currentSubscription.pausedAt) : null,
28
- currentPeriodEndsAt: p.currentSubscription.currentPeriodEndsAt ? new Date(p.currentSubscription.currentPeriodEndsAt) : null,
29
- currentPeriodStartedAt: p.currentSubscription.currentPeriodStartedAt ? new Date(p.currentSubscription.currentPeriodStartedAt) : null,
30
- canceledAt: p.currentSubscription.canceledAt ? new Date(p.currentSubscription.canceledAt) : null,
31
- expiresAt: p.currentSubscription.expiresAt ? new Date(p.currentSubscription.expiresAt) : null
32
- }),
33
- invoices: p.invoices.map(function (i) {
34
- return _objectSpread(_objectSpread({}, i), {}, {
35
- date: new Date(i.date),
36
- due: new Date(i.due),
37
- status: i.status
38
- });
39
- })
40
- });
41
- }
42
-
43
- var plansCodes = ["basic_month", "advanced_month", "pro_month", "basic_year", "advanced_year", "pro_year"];
44
- export function isValidPlan(planCode) {
45
- return plansCodes.includes(planCode);
46
- }
47
-
48
- var getUserSelector = function getUserSelector(userId, withPublicKey) {
49
- var _Selector = Selector("Query")({
50
- user: [{
51
- userId: userId
52
- }, {
53
- "...on ErrorNotFound": {
54
- __typename: true,
55
- message: true,
56
- field: true
57
- },
58
- "...on UserResponse": {
59
- __typename: true,
60
- user: {
61
- id: true,
62
- firstname: true,
63
- lastname: true,
64
- lang: true,
65
- publicKey: withPublicKey ? true : undefined,
66
- email: true,
67
- phone: true,
68
- role: true,
69
- deletedAt: true,
70
- lastLogin: true
71
- }
72
- }
73
- }]
74
- }),
75
- user = _Selector.user;
76
-
77
- return user;
78
- };
79
-
80
- function getUser(_x) {
81
- return _getUser.apply(this, arguments);
82
- }
83
-
84
- function _getUser() {
85
- _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(params) {
86
- var selector, _yield$params$client, userResponse;
87
-
88
- return _regeneratorRuntime.wrap(function _callee27$(_context27) {
89
- while (1) {
90
- switch (_context27.prev = _context27.next) {
91
- case 0:
92
- selector = getUserSelector(params.userId, params.withPublicKey);
93
- _context27.next = 3;
94
- return params.client("query")({
95
- user: selector
96
- });
97
-
98
- case 3:
99
- _yield$params$client = _context27.sent;
100
- userResponse = _yield$params$client.user;
101
-
102
- if (userResponse) {
103
- _context27.next = 7;
104
- break;
105
- }
106
-
107
- return _context27.abrupt("return", null);
108
-
109
- case 7:
110
- if (!(userResponse.__typename === "ErrorNotFound")) {
111
- _context27.next = 9;
112
- break;
113
- }
114
-
115
- return _context27.abrupt("return", userResponse);
116
-
117
- case 9:
118
- if (userResponse.user) {
119
- _context27.next = 11;
120
- break;
121
- }
122
-
123
- return _context27.abrupt("return", null);
124
-
125
- case 11:
126
- return _context27.abrupt("return", {
127
- __typename: "SuccessResponse",
128
- data: _objectSpread(_objectSpread({}, userResponse.user), {}, {
129
- lastLogin: new Date(userResponse.user.lastLogin),
130
- deletedAt: userResponse.user.deletedAt ? new Date(userResponse.user.deletedAt) : null
131
- })
132
- });
133
-
134
- case 12:
135
- case "end":
136
- return _context27.stop();
137
- }
138
- }
139
- }, _callee27);
140
- }));
141
- return _getUser.apply(this, arguments);
142
- }
143
-
144
- export var BaseClient = /*#__PURE__*/function () {
145
- function BaseClient(session, env) {
146
- this.sessionId = session;
147
- this.client = BaseClient._getBaseClient(env, session);
148
- }
149
-
150
- var _proto = BaseClient.prototype;
151
-
152
- _proto.sessions = /*#__PURE__*/function () {
153
- var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
154
- var data, userResponse, _userResponse$user$se, _sessions2;
155
-
156
- return _regeneratorRuntime.wrap(function _callee$(_context) {
157
- while (1) {
158
- switch (_context.prev = _context.next) {
159
- case 0:
160
- _context.next = 2;
161
- return this.client("query")({
162
- user: [{}, {
163
- "...on ErrorNotFound": {
164
- __typename: true,
165
- field: true,
166
- message: true
167
- },
168
- "...on UserResponse": {
169
- __typename: true,
170
- user: {
171
- sessions: {
172
- id: true,
173
- lastActivity: true,
174
- userAgent: true,
175
- ip: true,
176
- city: true,
177
- country: true,
178
- appSessions: {
179
- id: true,
180
- lastActivity: true,
181
- userAgent: true,
182
- ip: true,
183
- city: true,
184
- country: true,
185
- userApp: {
186
- app: {
187
- name: true
188
- }
189
- }
190
- }
191
- }
192
- }
193
- }
194
- }]
195
- });
196
-
197
- case 2:
198
- data = _context.sent;
199
-
200
- if (data.user) {
201
- _context.next = 5;
202
- break;
203
- }
204
-
205
- return _context.abrupt("return", null);
206
-
207
- case 5:
208
- userResponse = data.user;
209
-
210
- if (!(userResponse.__typename === "UserResponse")) {
211
- _context.next = 11;
212
- break;
213
- }
214
-
215
- if (userResponse.user) {
216
- _context.next = 9;
217
- break;
218
- }
219
-
220
- return _context.abrupt("return", null);
221
-
222
- case 9:
223
- _sessions2 = (_userResponse$user$se = userResponse.user.sessions.map(function (s) {
224
- return {
225
- id: s.id,
226
- ip: s.ip,
227
- city: s.city,
228
- country: s.country,
229
- lastActivity: s.lastActivity ? new Date(s.lastActivity) : undefined,
230
- userAgent: s.userAgent,
231
- appSessions: s.appSessions.map(function (a) {
232
- var _a$userApp$app$name, _a$userApp;
233
-
234
- return {
235
- id: a.id,
236
- ip: a.ip,
237
- city: a.city,
238
- country: a.country,
239
- lastActivity: a.lastActivity ? new Date(a.lastActivity) : undefined,
240
- userAgent: a.userAgent,
241
- app: (_a$userApp$app$name = (_a$userApp = a.userApp) == null ? void 0 : _a$userApp.app.name) != null ? _a$userApp$app$name : ""
242
- };
243
- })
244
- };
245
- })) != null ? _userResponse$user$se : [];
246
- return _context.abrupt("return", {
247
- __typename: "SuccessResponse",
248
- data: _sessions2
249
- });
250
-
251
- case 11:
252
- return _context.abrupt("return", userResponse);
253
-
254
- case 12:
255
- case "end":
256
- return _context.stop();
257
- }
258
- }
259
- }, _callee, this);
260
- }));
261
-
262
- function sessions() {
263
- return _sessions.apply(this, arguments);
264
- }
265
-
266
- return sessions;
267
- }();
268
-
269
- _proto.logout = /*#__PURE__*/function () {
270
- var _logout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sessionId) {
271
- var local, session;
272
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
273
- while (1) {
274
- switch (_context2.prev = _context2.next) {
275
- case 0:
276
- if (!sessionId) {
277
- local = getStorage(false);
278
- session = getStorage(true);
279
- local.jwt.clear();
280
- local.userAppKeys.clear();
281
- local.userAppSession.clear();
282
- session.jwt.clear();
283
- session.userAppKeys.clear();
284
- session.userAppSession.clear();
285
- usersCache.clear();
286
- }
287
-
288
- _context2.prev = 1;
289
- _context2.next = 4;
290
- return this.client("mutation")({
291
- logout: [{
292
- sessionId: sessionId
293
- }, {
294
- "...on ErrorAccessDenied": {
295
- __typename: true,
296
- message: true
297
- },
298
- "...on ErrorBasic": {
299
- __typename: true,
300
- message: true
301
- },
302
- "...on LogoutResponse": {
303
- __typename: true,
304
- logout: true
305
- }
306
- }]
307
- });
308
-
309
- case 4:
310
- _context2.next = 8;
311
- break;
312
-
313
- case 6:
314
- _context2.prev = 6;
315
- _context2.t0 = _context2["catch"](1);
316
-
317
- case 8:
318
- case "end":
319
- return _context2.stop();
320
- }
321
- }
322
- }, _callee2, this, [[1, 6]]);
323
- }));
324
-
325
- function logout(_x2) {
326
- return _logout.apply(this, arguments);
327
- }
328
-
329
- return logout;
330
- }();
331
-
332
- _proto.me = /*#__PURE__*/function () {
333
- var _me = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(params) {
334
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
335
- while (1) {
336
- switch (_context3.prev = _context3.next) {
337
- case 0:
338
- return _context3.abrupt("return", this.user(params || {
339
- withPublicKey: true
340
- }));
341
-
342
- case 1:
343
- case "end":
344
- return _context3.stop();
345
- }
346
- }
347
- }, _callee3, this);
348
- }));
349
-
350
- function me(_x3) {
351
- return _me.apply(this, arguments);
352
- }
353
-
354
- return me;
355
- }();
356
-
357
- BaseClient.user = /*#__PURE__*/function () {
358
- var _user = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(params, sessionId) {
359
- var user;
360
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
361
- while (1) {
362
- switch (_context4.prev = _context4.next) {
363
- case 0:
364
- _context4.next = 2;
365
- return getUser({
366
- client: this._getBaseClient(params.env, sessionId),
367
- userId: params.userId,
368
- withPublicKey: params.withPublicKey
369
- });
370
-
371
- case 2:
372
- user = _context4.sent;
373
-
374
- if (user) {
375
- _context4.next = 5;
376
- break;
377
- }
378
-
379
- return _context4.abrupt("return", null);
380
-
381
- case 5:
382
- if (!(user.__typename === "ErrorNotFound")) {
383
- _context4.next = 7;
384
- break;
385
- }
386
-
387
- return _context4.abrupt("return", user);
388
-
389
- case 7:
390
- if (user) {
391
- usersCache.set(user.data.id, user.data);
392
- }
393
-
394
- return _context4.abrupt("return", user);
395
-
396
- case 9:
397
- case "end":
398
- return _context4.stop();
399
- }
400
- }
401
- }, _callee4, this);
402
- }));
403
-
404
- function user(_x4, _x5) {
405
- return _user.apply(this, arguments);
406
- }
407
-
408
- return user;
409
- }();
410
-
411
- _proto.user = /*#__PURE__*/function () {
412
- var _user2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(params) {
413
- var user;
414
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
415
- while (1) {
416
- switch (_context5.prev = _context5.next) {
417
- case 0:
418
- _context5.next = 2;
419
- return getUser({
420
- client: this.client,
421
- userId: params.userId,
422
- withPublicKey: params.withPublicKey
423
- });
424
-
425
- case 2:
426
- user = _context5.sent;
427
-
428
- if (user) {
429
- _context5.next = 5;
430
- break;
431
- }
432
-
433
- return _context5.abrupt("return", null);
434
-
435
- case 5:
436
- if (!(user.__typename === "ErrorNotFound")) {
437
- _context5.next = 7;
438
- break;
439
- }
440
-
441
- return _context5.abrupt("return", user);
442
-
443
- case 7:
444
- if (user) {
445
- usersCache.set(user.data.id, user.data);
446
- }
447
-
448
- return _context5.abrupt("return", user);
449
-
450
- case 9:
451
- case "end":
452
- return _context5.stop();
453
- }
454
- }
455
- }, _callee5, this);
456
- }));
457
-
458
- function user(_x6) {
459
- return _user2.apply(this, arguments);
460
- }
461
-
462
- return user;
463
- }();
464
-
465
- _proto.updateProfile = /*#__PURE__*/function () {
466
- var _updateProfile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref) {
467
- var firstname, lastname, lang, _yield$this$client, updateProfile;
468
-
469
- return _regeneratorRuntime.wrap(function _callee6$(_context6) {
470
- while (1) {
471
- switch (_context6.prev = _context6.next) {
472
- case 0:
473
- firstname = _ref.firstname, lastname = _ref.lastname, lang = _ref.lang;
474
- _context6.next = 3;
475
- return this.client("mutation")({
476
- updateProfile: [{
477
- firstname: firstname,
478
- lastname: lastname,
479
- lang: lang
480
- }, {
481
- "...on ErrorAccessDenied": {
482
- __typename: true,
483
- message: true
484
- },
485
- "...on ErrorNotFound": {
486
- __typename: true,
487
- message: true
488
- },
489
- "...on UpdateProfileResponse": {
490
- __typename: true,
491
- updateProfile: {
492
- id: true,
493
- firstname: true,
494
- lastname: true,
495
- lang: true,
496
- email: true,
497
- phone: true,
498
- role: true,
499
- deletedAt: true,
500
- lastLogin: true
501
- }
502
- }
503
- }]
504
- });
505
-
506
- case 3:
507
- _yield$this$client = _context6.sent;
508
- updateProfile = _yield$this$client.updateProfile;
509
-
510
- if (updateProfile) {
511
- _context6.next = 7;
512
- break;
513
- }
514
-
515
- return _context6.abrupt("return", null);
516
-
517
- case 7:
518
- if (!(updateProfile.__typename === "ErrorAccessDenied")) {
519
- _context6.next = 9;
520
- break;
521
- }
522
-
523
- return _context6.abrupt("return", updateProfile);
524
-
525
- case 9:
526
- if (!(updateProfile.__typename === "ErrorNotFound")) {
527
- _context6.next = 11;
528
- break;
529
- }
530
-
531
- return _context6.abrupt("return", updateProfile);
532
-
533
- case 11:
534
- if (updateProfile.updateProfile) {
535
- _context6.next = 13;
536
- break;
537
- }
538
-
539
- return _context6.abrupt("return", null);
540
-
541
- case 13:
542
- return _context6.abrupt("return", {
543
- __typename: "SuccessResponse",
544
- data: {
545
- email: updateProfile.updateProfile.email,
546
- firstname: updateProfile.updateProfile.firstname,
547
- id: updateProfile.updateProfile.id,
548
- lang: updateProfile.updateProfile.lang,
549
- lastLogin: new Date(updateProfile.updateProfile.lastLogin),
550
- lastname: updateProfile.updateProfile.lastname,
551
- phone: updateProfile.updateProfile.phone,
552
- role: updateProfile.updateProfile.role,
553
- deletedAt: updateProfile.updateProfile.deletedAt ? new Date(updateProfile.updateProfile.deletedAt) : null
554
- }
555
- });
556
-
557
- case 14:
558
- case "end":
559
- return _context6.stop();
560
- }
561
- }
562
- }, _callee6, this);
563
- }));
564
-
565
- function updateProfile(_x7) {
566
- return _updateProfile.apply(this, arguments);
567
- }
568
-
569
- return updateProfile;
570
- }();
571
-
572
- BaseClient.plans = /*#__PURE__*/function () {
573
- var _plans = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(env, sessionId) {
574
- var _yield$BaseClient$_ge, plans;
575
-
576
- return _regeneratorRuntime.wrap(function _callee7$(_context7) {
577
- while (1) {
578
- switch (_context7.prev = _context7.next) {
579
- case 0:
580
- _context7.next = 2;
581
- return BaseClient._getBaseClient(env, sessionId)("query")({
582
- plans: {
583
- "...on PlanResponse": {
584
- __typename: true,
585
- plan: {
586
- kind: true,
587
- codes: true,
588
- limits: {
589
- downloadBandwidth: true,
590
- downloadCount: true,
591
- hardFileCount: true,
592
- hardFileSize: true,
593
- perFileSize: true,
594
- uploadBandwidth: true,
595
- uploadCount: true,
596
- receivedMails: {
597
- count: true,
598
- fileCount: true,
599
- fileSize: true,
600
- hardCount: true,
601
- hardFileCount: true,
602
- hardFileSize: true,
603
- perFileSize: true
604
- },
605
- sentMails: {
606
- count: true,
607
- fileCount: true,
608
- fileSize: true,
609
- hardCount: true,
610
- hardFileCount: true,
611
- hardFileSize: true,
612
- perFileSize: true
613
- }
614
- }
615
- }
616
- }
617
- }
618
- });
619
-
620
- case 2:
621
- _yield$BaseClient$_ge = _context7.sent;
622
- plans = _yield$BaseClient$_ge.plans;
623
-
624
- if (plans) {
625
- _context7.next = 6;
626
- break;
627
- }
628
-
629
- return _context7.abrupt("return", null);
630
-
631
- case 6:
632
- return _context7.abrupt("return", {
633
- __typename: "SuccessResponse",
634
- data: plans.plan
635
- });
636
-
637
- case 7:
638
- case "end":
639
- return _context7.stop();
640
- }
641
- }
642
- }, _callee7);
643
- }));
644
-
645
- function plans(_x8, _x9) {
646
- return _plans.apply(this, arguments);
647
- }
648
-
649
- return plans;
650
- }();
651
-
652
- _proto.pay = /*#__PURE__*/function () {
653
- var _pay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(planCode, input, autoRenew) {
654
- var _pay$pay;
655
-
656
- var _yield$this$client2, pay;
657
-
658
- return _regeneratorRuntime.wrap(function _callee8$(_context8) {
659
- while (1) {
660
- switch (_context8.prev = _context8.next) {
661
- case 0:
662
- _context8.next = 2;
663
- return this.client("mutation")({
664
- pay: [{
665
- input: input,
666
- planCode: planCode,
667
- autoRenew: autoRenew
668
- }, {
669
- "...on ErrorAccessDenied": {
670
- __typename: true,
671
- message: true
672
- },
673
- "...on PayResponse": {
674
- __typename: true,
675
- pay: true
676
- }
677
- }]
678
- });
679
-
680
- case 2:
681
- _yield$this$client2 = _context8.sent;
682
- pay = _yield$this$client2.pay;
683
-
684
- if (pay) {
685
- _context8.next = 6;
686
- break;
687
- }
688
-
689
- return _context8.abrupt("return", null);
690
-
691
- case 6:
692
- if (!(pay.__typename === "ErrorAccessDenied")) {
693
- _context8.next = 8;
694
- break;
695
- }
696
-
697
- return _context8.abrupt("return", pay);
698
-
699
- case 8:
700
- return _context8.abrupt("return", {
701
- __typename: "SuccessResponse",
702
- data: (_pay$pay = pay.pay) != null ? _pay$pay : false
703
- });
704
-
705
- case 9:
706
- case "end":
707
- return _context8.stop();
708
- }
709
- }
710
- }, _callee8, this);
711
- }));
712
-
713
- function pay(_x10, _x11, _x12) {
714
- return _pay.apply(this, arguments);
715
- }
716
-
717
- return pay;
718
- }();
719
-
720
- _proto.cancelPayment = /*#__PURE__*/function () {
721
- var _cancelPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
722
- var _cancelPayment$cancel;
723
-
724
- var _yield$this$client3, cancelPayment;
725
-
726
- return _regeneratorRuntime.wrap(function _callee9$(_context9) {
727
- while (1) {
728
- switch (_context9.prev = _context9.next) {
729
- case 0:
730
- _context9.next = 2;
731
- return this.client("mutation")({
732
- cancelPayment: {
733
- "...on ErrorAccessDenied": {
734
- __typename: true,
735
- message: true
736
- },
737
- "...on CancelPaymentResponse": {
738
- __typename: true,
739
- cancelPayment: true
740
- }
741
- }
742
- });
743
-
744
- case 2:
745
- _yield$this$client3 = _context9.sent;
746
- cancelPayment = _yield$this$client3.cancelPayment;
747
-
748
- if (cancelPayment) {
749
- _context9.next = 6;
750
- break;
751
- }
752
-
753
- return _context9.abrupt("return", null);
754
-
755
- case 6:
756
- if (!(cancelPayment.__typename === "ErrorAccessDenied")) {
757
- _context9.next = 8;
758
- break;
759
- }
760
-
761
- return _context9.abrupt("return", cancelPayment);
762
-
763
- case 8:
764
- return _context9.abrupt("return", {
765
- __typename: "SuccessResponse",
766
- data: (_cancelPayment$cancel = cancelPayment.cancelPayment) != null ? _cancelPayment$cancel : false
767
- });
768
-
769
- case 9:
770
- case "end":
771
- return _context9.stop();
772
- }
773
- }
774
- }, _callee9, this);
775
- }));
776
-
777
- function cancelPayment() {
778
- return _cancelPayment.apply(this, arguments);
779
- }
780
-
781
- return cancelPayment;
782
- }();
783
-
784
- _proto.paymentInfos = /*#__PURE__*/function () {
785
- var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
786
- var _yield$this$client4, paymentInfos, result;
787
-
788
- return _regeneratorRuntime.wrap(function _callee10$(_context10) {
789
- while (1) {
790
- switch (_context10.prev = _context10.next) {
791
- case 0:
792
- _context10.next = 2;
793
- return this.client("query")({
794
- paymentInfos: {
795
- "...on ErrorAccessDenied": {
796
- __typename: true,
797
- message: true
798
- },
799
- "...on PaymentInfosResponse": {
800
- __typename: true,
801
- paymentInfos: {
802
- hostedUrl: true,
803
- currentSubscription: {
804
- autorenew: true,
805
- activatedAt: true,
806
- currentPeriodEndsAt: true,
807
- currentPeriodStartedAt: true,
808
- canceledAt: true,
809
- createdAt: true,
810
- expiresAt: true,
811
- pausedAt: true,
812
- trialEndsAt: true,
813
- trialStartedAt: true,
814
- updatedAt: true,
815
- state: true,
816
- collectionMethod: true,
817
- plan: true,
818
- planCode: true,
819
- total: true
820
- },
821
- invoices: {
822
- pdf: true,
823
- date: true,
824
- due: true,
825
- status: true,
826
- total: true,
827
- name: true,
828
- currency: true
829
- }
830
- }
831
- }
832
- }
833
- });
834
-
835
- case 2:
836
- _yield$this$client4 = _context10.sent;
837
- paymentInfos = _yield$this$client4.paymentInfos;
838
-
839
- if (paymentInfos) {
840
- _context10.next = 6;
841
- break;
842
- }
843
-
844
- return _context10.abrupt("return", null);
845
-
846
- case 6:
847
- if (!(paymentInfos.__typename === "ErrorAccessDenied")) {
848
- _context10.next = 8;
849
- break;
850
- }
851
-
852
- return _context10.abrupt("return", paymentInfos);
853
-
854
- case 8:
855
- if (paymentInfos.paymentInfos) {
856
- _context10.next = 10;
857
- break;
858
- }
859
-
860
- return _context10.abrupt("return", null);
861
-
862
- case 10:
863
- result = internalToPaymentInfos(paymentInfos.paymentInfos);
864
- return _context10.abrupt("return", {
865
- __typename: "SuccessResponse",
866
- data: result
867
- });
868
-
869
- case 12:
870
- case "end":
871
- return _context10.stop();
872
- }
873
- }
874
- }, _callee10, this);
875
- }));
876
-
877
- function paymentInfos() {
878
- return _paymentInfos.apply(this, arguments);
879
- }
880
-
881
- return paymentInfos;
882
- }();
883
-
884
- _proto.limits = /*#__PURE__*/function () {
885
- var _limits = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {
886
- var _yield$this$client5, limits, cloud, mail;
887
-
888
- return _regeneratorRuntime.wrap(function _callee11$(_context11) {
889
- while (1) {
890
- switch (_context11.prev = _context11.next) {
891
- case 0:
892
- _context11.next = 2;
893
- return this.client("query")({
894
- limits: {
895
- "...on ErrorAccessDenied": {
896
- __typename: true,
897
- message: true
898
- },
899
- "...on ErrorLimit": {
900
- __typename: true,
901
- message: true
902
- },
903
- "...on ErrorNotExist": {
904
- __typename: true,
905
- message: true
906
- },
907
- "...on ErrorNotFound": {
908
- __typename: true,
909
- message: true
910
- },
911
- "...on QueryLimits": {
912
- __typename: true,
913
- cloud: {
914
- size: true,
915
- maxSize: true,
916
- count: true,
917
- maxCount: true
918
- },
919
- mail: {
920
- received: {
921
- count: true,
922
- maxCount: true,
923
- fileCount: true,
924
- maxFileCount: true,
925
- fileSize: true,
926
- maxFileSize: true
927
- },
928
- sent: {
929
- count: true,
930
- maxCount: true,
931
- fileCount: true,
932
- maxFileCount: true,
933
- fileSize: true,
934
- maxFileSize: true
935
- }
936
- }
937
- }
938
- }
939
- });
940
-
941
- case 2:
942
- _yield$this$client5 = _context11.sent;
943
- limits = _yield$this$client5.limits;
944
-
945
- if (limits) {
946
- _context11.next = 6;
947
- break;
948
- }
949
-
950
- return _context11.abrupt("return", null);
951
-
952
- case 6:
953
- if (!(limits.__typename === "ErrorAccessDenied")) {
954
- _context11.next = 8;
955
- break;
956
- }
957
-
958
- return _context11.abrupt("return", limits);
959
-
960
- case 8:
961
- if (!(limits.__typename === "ErrorNotExist")) {
962
- _context11.next = 10;
963
- break;
964
- }
965
-
966
- return _context11.abrupt("return", limits);
967
-
968
- case 10:
969
- if (!(limits.__typename === "ErrorLimit")) {
970
- _context11.next = 12;
971
- break;
972
- }
973
-
974
- return _context11.abrupt("return", limits);
975
-
976
- case 12:
977
- if (!(limits.__typename === "ErrorNotFound")) {
978
- _context11.next = 14;
979
- break;
980
- }
981
-
982
- return _context11.abrupt("return", limits);
983
-
984
- case 14:
985
- cloud = limits.cloud, mail = limits.mail;
986
- return _context11.abrupt("return", {
987
- __typename: "SuccessResponse",
988
- data: {
989
- cloud: {
990
- count: BigInt(cloud.count),
991
- size: BigInt(cloud.size),
992
- maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
993
- maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
994
- },
995
- mail: {
996
- received: {
997
- count: BigInt(mail.received.count),
998
- maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
999
- fileCount: BigInt(mail.received.fileCount),
1000
- maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
1001
- fileSize: BigInt(mail.received.fileSize),
1002
- maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
1003
- },
1004
- sent: {
1005
- count: BigInt(mail.sent.count),
1006
- maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
1007
- fileCount: BigInt(mail.sent.fileCount),
1008
- maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
1009
- fileSize: BigInt(mail.sent.fileSize),
1010
- maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
1011
- }
1012
- }
1013
- }
1014
- });
1015
-
1016
- case 16:
1017
- case "end":
1018
- return _context11.stop();
1019
- }
1020
- }
1021
- }, _callee11, this);
1022
- }));
1023
-
1024
- function limits() {
1025
- return _limits.apply(this, arguments);
1026
- }
1027
-
1028
- return limits;
1029
- }();
1030
-
1031
- _proto.godFatherAndChildren = /*#__PURE__*/function () {
1032
- var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
1033
- var _yield$this$client6, user;
1034
-
1035
- return _regeneratorRuntime.wrap(function _callee12$(_context12) {
1036
- while (1) {
1037
- switch (_context12.prev = _context12.next) {
1038
- case 0:
1039
- _context12.next = 2;
1040
- return this.client("query")({
1041
- user: [{}, {
1042
- "...on ErrorNotFound": {
1043
- __typename: true,
1044
- message: true
1045
- },
1046
- "...on UserResponse": {
1047
- __typename: true,
1048
- godChildren: {
1049
- id: true,
1050
- firstname: true,
1051
- lastname: true,
1052
- email: true,
1053
- phone: true
1054
- },
1055
- godFather: {
1056
- id: true,
1057
- firstname: true,
1058
- lastname: true,
1059
- email: true,
1060
- phone: true
1061
- }
1062
- }
1063
- }]
1064
- });
1065
-
1066
- case 2:
1067
- _yield$this$client6 = _context12.sent;
1068
- user = _yield$this$client6.user;
1069
-
1070
- if (user) {
1071
- _context12.next = 6;
1072
- break;
1073
- }
1074
-
1075
- return _context12.abrupt("return", null);
1076
-
1077
- case 6:
1078
- if (!(user.__typename === "ErrorNotFound")) {
1079
- _context12.next = 8;
1080
- break;
1081
- }
1082
-
1083
- return _context12.abrupt("return", user);
1084
-
1085
- case 8:
1086
- return _context12.abrupt("return", {
1087
- __typename: "SuccessResponse",
1088
- data: {
1089
- godChildren: user.godChildren,
1090
- godFather: user.godFather
1091
- }
1092
- });
1093
-
1094
- case 9:
1095
- case "end":
1096
- return _context12.stop();
1097
- }
1098
- }
1099
- }, _callee12, this);
1100
- }));
1101
-
1102
- function godFatherAndChildren() {
1103
- return _godFatherAndChildren.apply(this, arguments);
1104
- }
1105
-
1106
- return godFatherAndChildren;
1107
- }();
1108
-
1109
- BaseClient.updateAppDBConfig = /*#__PURE__*/function () {
1110
- var _updateAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref2) {
1111
- var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfigMutation;
1112
-
1113
- return _regeneratorRuntime.wrap(function _callee13$(_context13) {
1114
- while (1) {
1115
- switch (_context13.prev = _context13.next) {
1116
- case 0:
1117
- appCode = _ref2.appCode, config = _ref2.config, env = _ref2.env, sessionId = _ref2.sessionId;
1118
- _context13.next = 3;
1119
- return BaseClient._getBaseClient(env, sessionId)("mutation")({
1120
- dbConfigMutation: [{
1121
- appCode: appCode,
1122
- config: JSON.stringify(config)
1123
- }, {
1124
- "...on ErrorAccessDenied": {
1125
- __typename: true,
1126
- message: true
1127
- },
1128
- "...on DbConfigMutationResponse": {
1129
- __typename: true,
1130
- dbConfigMutation: true
1131
- }
1132
- }]
1133
- });
1134
-
1135
- case 3:
1136
- _yield$BaseClient$_ge2 = _context13.sent;
1137
- dbConfigMutation = _yield$BaseClient$_ge2.dbConfigMutation;
1138
-
1139
- if (dbConfigMutation) {
1140
- _context13.next = 7;
1141
- break;
1142
- }
1143
-
1144
- return _context13.abrupt("return", null);
1145
-
1146
- case 7:
1147
- if (!(dbConfigMutation.__typename === "ErrorAccessDenied")) {
1148
- _context13.next = 9;
1149
- break;
1150
- }
1151
-
1152
- return _context13.abrupt("return", dbConfigMutation);
1153
-
1154
- case 9:
1155
- return _context13.abrupt("return", {
1156
- __typename: "SuccessResponse",
1157
- data: dbConfigMutation.dbConfigMutation
1158
- });
1159
-
1160
- case 10:
1161
- case "end":
1162
- return _context13.stop();
1163
- }
1164
- }
1165
- }, _callee13);
1166
- }));
1167
-
1168
- function updateAppDBConfig(_x13) {
1169
- return _updateAppDBConfig.apply(this, arguments);
1170
- }
1171
-
1172
- return updateAppDBConfig;
1173
- }();
1174
-
1175
- BaseClient.getAppDBConfig = /*#__PURE__*/function () {
1176
- var _getAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(appCode, env, sessionId) {
1177
- var _yield$BaseClient$_ge3, dbConfig;
1178
-
1179
- return _regeneratorRuntime.wrap(function _callee14$(_context14) {
1180
- while (1) {
1181
- switch (_context14.prev = _context14.next) {
1182
- case 0:
1183
- _context14.next = 2;
1184
- return BaseClient._getBaseClient(env, sessionId)("query")({
1185
- dbConfig: [{
1186
- appCode: appCode
1187
- }, {
1188
- "...on ErrorAccessDenied": {
1189
- __typename: true,
1190
- message: true
1191
- },
1192
- "...on ErrorNotFound": {
1193
- __typename: true,
1194
- message: true
1195
- },
1196
- "...on ErrorNotExist": {
1197
- __typename: true,
1198
- message: true
1199
- },
1200
- "...on DbConfigResponse": {
1201
- __typename: true,
1202
- json: true
1203
- }
1204
- }]
1205
- });
1206
-
1207
- case 2:
1208
- _yield$BaseClient$_ge3 = _context14.sent;
1209
- dbConfig = _yield$BaseClient$_ge3.dbConfig;
1210
-
1211
- if (dbConfig) {
1212
- _context14.next = 6;
1213
- break;
1214
- }
1215
-
1216
- return _context14.abrupt("return", null);
1217
-
1218
- case 6:
1219
- if (!(dbConfig.__typename === "ErrorAccessDenied")) {
1220
- _context14.next = 8;
1221
- break;
1222
- }
1223
-
1224
- return _context14.abrupt("return", dbConfig);
1225
-
1226
- case 8:
1227
- if (!(dbConfig.__typename === "ErrorNotFound")) {
1228
- _context14.next = 10;
1229
- break;
1230
- }
1231
-
1232
- return _context14.abrupt("return", dbConfig);
1233
-
1234
- case 10:
1235
- if (!(dbConfig.__typename === "ErrorNotExist")) {
1236
- _context14.next = 12;
1237
- break;
1238
- }
1239
-
1240
- return _context14.abrupt("return", dbConfig);
1241
-
1242
- case 12:
1243
- return _context14.abrupt("return", {
1244
- __typename: "SuccessResponse",
1245
- data: dbConfig.json
1246
- });
1247
-
1248
- case 13:
1249
- case "end":
1250
- return _context14.stop();
1251
- }
1252
- }
1253
- }, _callee14);
1254
- }));
1255
-
1256
- function getAppDBConfig(_x14, _x15, _x16) {
1257
- return _getAppDBConfig.apply(this, arguments);
1258
- }
1259
-
1260
- return getAppDBConfig;
1261
- }();
1262
-
1263
- BaseClient.getFAQ = /*#__PURE__*/function () {
1264
- var _getFAQ = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref3) {
1265
- var lang, env, sessionId, _yield$BaseClient$_ge4, faq;
1266
-
1267
- return _regeneratorRuntime.wrap(function _callee15$(_context15) {
1268
- while (1) {
1269
- switch (_context15.prev = _context15.next) {
1270
- case 0:
1271
- lang = _ref3.lang, env = _ref3.env, sessionId = _ref3.sessionId;
1272
- _context15.next = 3;
1273
- return BaseClient._getBaseClient(env, sessionId)("query")({
1274
- faq: [{
1275
- lang: lang
1276
- }, {
1277
- "...on ErrorAccessDenied": {
1278
- __typename: true,
1279
- message: true
1280
- },
1281
- "...on FaqResponse": {
1282
- __typename: true,
1283
- faq: {
1284
- answer: true,
1285
- order: true,
1286
- question: true
1287
- }
1288
- }
1289
- }]
1290
- });
1291
-
1292
- case 3:
1293
- _yield$BaseClient$_ge4 = _context15.sent;
1294
- faq = _yield$BaseClient$_ge4.faq;
1295
-
1296
- if (faq) {
1297
- _context15.next = 7;
1298
- break;
1299
- }
1300
-
1301
- return _context15.abrupt("return", null);
1302
-
1303
- case 7:
1304
- if (!(faq.__typename === "ErrorAccessDenied")) {
1305
- _context15.next = 9;
1306
- break;
1307
- }
1308
-
1309
- return _context15.abrupt("return", faq);
1310
-
1311
- case 9:
1312
- return _context15.abrupt("return", {
1313
- __typename: "SuccessResponse",
1314
- data: faq.faq
1315
- });
1316
-
1317
- case 10:
1318
- case "end":
1319
- return _context15.stop();
1320
- }
1321
- }
1322
- }, _callee15);
1323
- }));
1324
-
1325
- function getFAQ(_x17) {
1326
- return _getFAQ.apply(this, arguments);
1327
- }
1328
-
1329
- return getFAQ;
1330
- }();
1331
-
1332
- BaseClient.getBlog = /*#__PURE__*/function () {
1333
- var _getBlog = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(_ref4) {
1334
- var env, lang, sessionId, _yield$BaseClient$_ge5, blog;
1335
-
1336
- return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1337
- while (1) {
1338
- switch (_context16.prev = _context16.next) {
1339
- case 0:
1340
- env = _ref4.env, lang = _ref4.lang, sessionId = _ref4.sessionId;
1341
- _context16.next = 3;
1342
- return BaseClient._getBaseClient(env, sessionId)("query")({
1343
- blog: [{
1344
- lang: lang
1345
- }, {
1346
- "...on ErrorLangNotExist": {
1347
- __typename: true,
1348
- message: true
1349
- },
1350
- "...on BlogResponse": {
1351
- __typename: true,
1352
- blogItems: {
1353
- id: true,
1354
- blogId: true,
1355
- author: true,
1356
- body: true,
1357
- date: true,
1358
- image: true,
1359
- imageAlt: true,
1360
- summary: true,
1361
- title: true,
1362
- order: true
1363
- }
1364
- }
1365
- }]
1366
- });
1367
-
1368
- case 3:
1369
- _yield$BaseClient$_ge5 = _context16.sent;
1370
- blog = _yield$BaseClient$_ge5.blog;
1371
-
1372
- if (blog) {
1373
- _context16.next = 7;
1374
- break;
1375
- }
1376
-
1377
- return _context16.abrupt("return", null);
1378
-
1379
- case 7:
1380
- if (!(blog.__typename === "ErrorLangNotExist")) {
1381
- _context16.next = 9;
1382
- break;
1383
- }
1384
-
1385
- return _context16.abrupt("return", blog);
1386
-
1387
- case 9:
1388
- return _context16.abrupt("return", {
1389
- __typename: "SuccessResponse",
1390
- data: blog.blogItems.map(function (b) {
1391
- return _objectSpread(_objectSpread({}, b), {}, {
1392
- date: new Date(b.date)
1393
- });
1394
- })
1395
- });
1396
-
1397
- case 10:
1398
- case "end":
1399
- return _context16.stop();
1400
- }
1401
- }
1402
- }, _callee16);
1403
- }));
1404
-
1405
- function getBlog(_x18) {
1406
- return _getBlog.apply(this, arguments);
1407
- }
1408
-
1409
- return getBlog;
1410
- }();
1411
-
1412
- _proto.reportUser = /*#__PURE__*/function () {
1413
- var _reportUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(reportedUserId, customMessage) {
1414
- var _yield$this$client7, sendReport;
1415
-
1416
- return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1417
- while (1) {
1418
- switch (_context17.prev = _context17.next) {
1419
- case 0:
1420
- _context17.next = 2;
1421
- return this.client("mutation")({
1422
- sendReport: [{
1423
- reportedUserId: reportedUserId,
1424
- customMessage: customMessage
1425
- }, {
1426
- "...on ErrorAccessDenied": {
1427
- __typename: true,
1428
- message: true
1429
- },
1430
- "...on ErrorNotFound": {
1431
- __typename: true,
1432
- message: true
1433
- },
1434
- "...on SendReportResponse": {
1435
- __typename: true,
1436
- sendReport: {
1437
- id: true,
1438
- customMessage: true,
1439
- user: {
1440
- id: true,
1441
- firstname: true,
1442
- lastname: true,
1443
- email: true
1444
- },
1445
- reportedUser: {
1446
- id: true,
1447
- firstname: true,
1448
- lastname: true,
1449
- email: true
1450
- }
1451
- }
1452
- }
1453
- }]
1454
- });
1455
-
1456
- case 2:
1457
- _yield$this$client7 = _context17.sent;
1458
- sendReport = _yield$this$client7.sendReport;
1459
-
1460
- if (sendReport) {
1461
- _context17.next = 6;
1462
- break;
1463
- }
1464
-
1465
- return _context17.abrupt("return", null);
1466
-
1467
- case 6:
1468
- if (!(sendReport.__typename === "ErrorAccessDenied")) {
1469
- _context17.next = 8;
1470
- break;
1471
- }
1472
-
1473
- return _context17.abrupt("return", sendReport);
1474
-
1475
- case 8:
1476
- if (!(sendReport.__typename === "ErrorNotFound")) {
1477
- _context17.next = 10;
1478
- break;
1479
- }
1480
-
1481
- return _context17.abrupt("return", sendReport);
1482
-
1483
- case 10:
1484
- if (sendReport.sendReport) {
1485
- _context17.next = 12;
1486
- break;
1487
- }
1488
-
1489
- return _context17.abrupt("return", null);
1490
-
1491
- case 12:
1492
- return _context17.abrupt("return", {
1493
- __typename: "SuccessResponse",
1494
- data: sendReport.sendReport
1495
- });
1496
-
1497
- case 13:
1498
- case "end":
1499
- return _context17.stop();
1500
- }
1501
- }
1502
- }, _callee17, this);
1503
- }));
1504
-
1505
- function reportUser(_x19, _x20) {
1506
- return _reportUser.apply(this, arguments);
1507
- }
1508
-
1509
- return reportUser;
1510
- }();
1511
-
1512
- BaseClient.deleteUser = /*#__PURE__*/function () {
1513
- var _deleteUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref5) {
1514
- var sessionId, userId, env, _yield$BaseClient$_ge6, deleteUser;
1515
-
1516
- return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1517
- while (1) {
1518
- switch (_context18.prev = _context18.next) {
1519
- case 0:
1520
- sessionId = _ref5.sessionId, userId = _ref5.userId, env = _ref5.env;
1521
- _context18.next = 3;
1522
- return BaseClient._getBaseClient(env, sessionId)("mutation")({
1523
- deleteUser: [{
1524
- userId: userId
1525
- }, {
1526
- "...on ErrorAccessDenied": {
1527
- __typename: true,
1528
- message: true
1529
- },
1530
- "...on DeleteUserResponse": {
1531
- __typename: true,
1532
- deleteUser: true
1533
- }
1534
- }]
1535
- });
1536
-
1537
- case 3:
1538
- _yield$BaseClient$_ge6 = _context18.sent;
1539
- deleteUser = _yield$BaseClient$_ge6.deleteUser;
1540
-
1541
- if (deleteUser) {
1542
- _context18.next = 7;
1543
- break;
1544
- }
1545
-
1546
- return _context18.abrupt("return", null);
1547
-
1548
- case 7:
1549
- if (!(deleteUser.__typename === "ErrorAccessDenied")) {
1550
- _context18.next = 9;
1551
- break;
1552
- }
1553
-
1554
- return _context18.abrupt("return", deleteUser);
1555
-
1556
- case 9:
1557
- if (deleteUser.deleteUser) {
1558
- _context18.next = 11;
1559
- break;
1560
- }
1561
-
1562
- return _context18.abrupt("return", null);
1563
-
1564
- case 11:
1565
- return _context18.abrupt("return", {
1566
- __typename: "SuccessResponse",
1567
- data: deleteUser.deleteUser
1568
- });
1569
-
1570
- case 12:
1571
- case "end":
1572
- return _context18.stop();
1573
- }
1574
- }
1575
- }, _callee18);
1576
- }));
1577
-
1578
- function deleteUser(_x21) {
1579
- return _deleteUser.apply(this, arguments);
1580
- }
1581
-
1582
- return deleteUser;
1583
- }();
1584
-
1585
- _proto.dbGet = /*#__PURE__*/function () {
1586
- var _dbGet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19(_ref6) {
1587
- var field, userId, _yield$this$client8, dbGet;
1588
-
1589
- return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1590
- while (1) {
1591
- switch (_context19.prev = _context19.next) {
1592
- case 0:
1593
- field = _ref6.field, userId = _ref6.userId;
1594
- _context19.next = 3;
1595
- return this.client("query")({
1596
- dbGet: [{
1597
- field: field,
1598
- userId: userId
1599
- }, {
1600
- "...on ErrorAccessDenied": {
1601
- __typename: true,
1602
- message: true
1603
- },
1604
- "...on ErrorNotExist": {
1605
- __typename: true,
1606
- message: true
1607
- },
1608
- "...on ErrorNotFound": {
1609
- __typename: true,
1610
- message: true
1611
- },
1612
- "...on DbGetResponse": {
1613
- __typename: true,
1614
- json: true
1615
- }
1616
- }]
1617
- });
1618
-
1619
- case 3:
1620
- _yield$this$client8 = _context19.sent;
1621
- dbGet = _yield$this$client8.dbGet;
1622
-
1623
- if (dbGet) {
1624
- _context19.next = 7;
1625
- break;
1626
- }
1627
-
1628
- return _context19.abrupt("return", null);
1629
-
1630
- case 7:
1631
- if (!(dbGet.__typename === "ErrorAccessDenied")) {
1632
- _context19.next = 9;
1633
- break;
1634
- }
1635
-
1636
- return _context19.abrupt("return", dbGet);
1637
-
1638
- case 9:
1639
- if (!(dbGet.__typename === "ErrorNotExist")) {
1640
- _context19.next = 11;
1641
- break;
1642
- }
1643
-
1644
- return _context19.abrupt("return", dbGet);
1645
-
1646
- case 11:
1647
- if (!(dbGet.__typename === "ErrorNotFound")) {
1648
- _context19.next = 13;
1649
- break;
1650
- }
1651
-
1652
- return _context19.abrupt("return", dbGet);
1653
-
1654
- case 13:
1655
- return _context19.abrupt("return", {
1656
- __typename: "SuccessResponse",
1657
- data: dbGet.json
1658
- });
1659
-
1660
- case 14:
1661
- case "end":
1662
- return _context19.stop();
1663
- }
1664
- }
1665
- }, _callee19, this);
1666
- }));
1667
-
1668
- function dbGet(_x22) {
1669
- return _dbGet.apply(this, arguments);
1670
- }
1671
-
1672
- return dbGet;
1673
- }();
1674
-
1675
- _proto.dbSet = /*#__PURE__*/function () {
1676
- var _dbSet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(_ref7) {
1677
- var value, userId, _yield$this$client9, dbSet;
1678
-
1679
- return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1680
- while (1) {
1681
- switch (_context20.prev = _context20.next) {
1682
- case 0:
1683
- value = _ref7.value, userId = _ref7.userId;
1684
-
1685
- if (!(typeof value !== "object")) {
1686
- _context20.next = 3;
1687
- break;
1688
- }
1689
-
1690
- throw new Error("value should be an object including fields you want to update.");
1691
-
1692
- case 3:
1693
- _context20.next = 5;
1694
- return this.client("mutation")({
1695
- dbSet: [{
1696
- userId: userId,
1697
- value: serialize(value).toString("base64")
1698
- }, {
1699
- "...on ErrorAccessDenied": {
1700
- __typename: true,
1701
- message: true
1702
- },
1703
- "...on ErrorNotFound": {
1704
- __typename: true,
1705
- message: true
1706
- },
1707
- "...on DbSetResponse": {
1708
- __typename: true,
1709
- dbSet: true
1710
- }
1711
- }]
1712
- });
1713
-
1714
- case 5:
1715
- _yield$this$client9 = _context20.sent;
1716
- dbSet = _yield$this$client9.dbSet;
1717
-
1718
- if (dbSet) {
1719
- _context20.next = 9;
1720
- break;
1721
- }
1722
-
1723
- return _context20.abrupt("return", null);
1724
-
1725
- case 9:
1726
- if (!(dbSet.__typename === "ErrorAccessDenied")) {
1727
- _context20.next = 11;
1728
- break;
1729
- }
1730
-
1731
- return _context20.abrupt("return", dbSet);
1732
-
1733
- case 11:
1734
- if (!(dbSet.__typename === "ErrorNotFound")) {
1735
- _context20.next = 13;
1736
- break;
1737
- }
1738
-
1739
- return _context20.abrupt("return", dbSet);
1740
-
1741
- case 13:
1742
- if (dbSet.dbSet) {
1743
- _context20.next = 15;
1744
- break;
1745
- }
1746
-
1747
- return _context20.abrupt("return", null);
1748
-
1749
- case 15:
1750
- return _context20.abrupt("return", {
1751
- __typename: "SuccessResponse",
1752
- data: dbSet.dbSet.res
1753
- });
1754
-
1755
- case 16:
1756
- case "end":
1757
- return _context20.stop();
1758
- }
1759
- }
1760
- }, _callee20, this);
1761
- }));
1762
-
1763
- function dbSet(_x23) {
1764
- return _dbSet.apply(this, arguments);
1765
- }
1766
-
1767
- return dbSet;
1768
- }();
1769
-
1770
- _proto.dbSearch = /*#__PURE__*/function () {
1771
- var _dbSearch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref8) {
1772
- var search, field, _yield$this$client10, dbSearch;
1773
-
1774
- return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1775
- while (1) {
1776
- switch (_context21.prev = _context21.next) {
1777
- case 0:
1778
- search = _ref8.search, field = _ref8.field;
1779
- _context21.next = 3;
1780
- return this.client("query")({
1781
- dbSearch: [{
1782
- search: search,
1783
- field: field
1784
- }, {
1785
- "...on ErrorAccessDenied": {
1786
- __typename: true,
1787
- message: true
1788
- },
1789
- "...on ErrorBasic": {
1790
- __typename: true,
1791
- message: true
1792
- },
1793
- "...on ErrorNotExist": {
1794
- __typename: true,
1795
- message: true
1796
- },
1797
- "...on DbSearchResponse": {
1798
- __typename: true,
1799
- json: true
1800
- }
1801
- }]
1802
- });
1803
-
1804
- case 3:
1805
- _yield$this$client10 = _context21.sent;
1806
- dbSearch = _yield$this$client10.dbSearch;
1807
-
1808
- if (dbSearch) {
1809
- _context21.next = 7;
1810
- break;
1811
- }
1812
-
1813
- return _context21.abrupt("return", null);
1814
-
1815
- case 7:
1816
- if (!(dbSearch.__typename === "ErrorAccessDenied")) {
1817
- _context21.next = 9;
1818
- break;
1819
- }
1820
-
1821
- return _context21.abrupt("return", dbSearch);
1822
-
1823
- case 9:
1824
- if (!(dbSearch.__typename === "ErrorBasic")) {
1825
- _context21.next = 11;
1826
- break;
1827
- }
1828
-
1829
- return _context21.abrupt("return", dbSearch);
1830
-
1831
- case 11:
1832
- if (!(dbSearch.__typename === "ErrorNotExist")) {
1833
- _context21.next = 13;
1834
- break;
1835
- }
1836
-
1837
- return _context21.abrupt("return", dbSearch);
1838
-
1839
- case 13:
1840
- return _context21.abrupt("return", {
1841
- __typename: "SuccessResponse",
1842
- data: dbSearch.json
1843
- });
1844
-
1845
- case 14:
1846
- case "end":
1847
- return _context21.stop();
1848
- }
1849
- }
1850
- }, _callee21, this);
1851
- }));
1852
-
1853
- function dbSearch(_x24) {
1854
- return _dbSearch.apply(this, arguments);
1855
- }
1856
-
1857
- return dbSearch;
1858
- }();
1859
-
1860
- _proto.deleteFolder = /*#__PURE__*/function () {
1861
- var _deleteFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(_ref9) {
1862
- var _deleteFolder$deleteF;
1863
-
1864
- var id, _yield$this$client11, deleteFolder;
1865
-
1866
- return _regeneratorRuntime.wrap(function _callee22$(_context22) {
1867
- while (1) {
1868
- switch (_context22.prev = _context22.next) {
1869
- case 0:
1870
- id = _ref9.id;
1871
- _context22.next = 3;
1872
- return this.client("mutation")({
1873
- deleteFolder: [{
1874
- id: id
1875
- }, {
1876
- "...on ErrorNotExist": {
1877
- __typename: true,
1878
- message: true
1879
- },
1880
- "...on ErrorAccessDenied": {
1881
- __typename: true,
1882
- message: true
1883
- },
1884
- "...on DeleteFolderResponse": {
1885
- __typename: true,
1886
- deleteFolder: true
1887
- }
1888
- }]
1889
- });
1890
-
1891
- case 3:
1892
- _yield$this$client11 = _context22.sent;
1893
- deleteFolder = _yield$this$client11.deleteFolder;
1894
-
1895
- if (deleteFolder) {
1896
- _context22.next = 7;
1897
- break;
1898
- }
1899
-
1900
- return _context22.abrupt("return", null);
1901
-
1902
- case 7:
1903
- if (!(deleteFolder.__typename === "ErrorNotExist")) {
1904
- _context22.next = 9;
1905
- break;
1906
- }
1907
-
1908
- return _context22.abrupt("return", deleteFolder);
1909
-
1910
- case 9:
1911
- if (!(deleteFolder.__typename === "ErrorAccessDenied")) {
1912
- _context22.next = 11;
1913
- break;
1914
- }
1915
-
1916
- return _context22.abrupt("return", deleteFolder);
1917
-
1918
- case 11:
1919
- return _context22.abrupt("return", {
1920
- __typename: "SuccessResponse",
1921
- data: (_deleteFolder$deleteF = deleteFolder.deleteFolder) != null ? _deleteFolder$deleteF : false
1922
- });
1923
-
1924
- case 12:
1925
- case "end":
1926
- return _context22.stop();
1927
- }
1928
- }
1929
- }, _callee22, this);
1930
- }));
1931
-
1932
- function deleteFolder(_x25) {
1933
- return _deleteFolder.apply(this, arguments);
1934
- }
1935
-
1936
- return deleteFolder;
1937
- }();
1938
-
1939
- _proto.moveFolders = /*#__PURE__*/function () {
1940
- var _moveFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref10) {
1941
- var _moveFolders$moveFold;
1942
-
1943
- var foldersId, parentFolderId, _yield$this$client12, moveFolders;
1944
-
1945
- return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1946
- while (1) {
1947
- switch (_context23.prev = _context23.next) {
1948
- case 0:
1949
- foldersId = _ref10.foldersId, parentFolderId = _ref10.parentFolderId;
1950
- _context23.next = 3;
1951
- return this.client("mutation")({
1952
- moveFolders: [{
1953
- foldersId: foldersId,
1954
- parentFolderId: parentFolderId
1955
- }, {
1956
- "...on ErrorAccessDenied": {
1957
- __typename: true,
1958
- message: true
1959
- },
1960
- "...on MoveFoldersResponse": {
1961
- __typename: true,
1962
- moveFolders: true
1963
- }
1964
- }]
1965
- });
1966
-
1967
- case 3:
1968
- _yield$this$client12 = _context23.sent;
1969
- moveFolders = _yield$this$client12.moveFolders;
1970
-
1971
- if (moveFolders) {
1972
- _context23.next = 7;
1973
- break;
1974
- }
1975
-
1976
- return _context23.abrupt("return", null);
1977
-
1978
- case 7:
1979
- if (!(moveFolders.__typename === "ErrorAccessDenied")) {
1980
- _context23.next = 9;
1981
- break;
1982
- }
1983
-
1984
- return _context23.abrupt("return", moveFolders);
1985
-
1986
- case 9:
1987
- return _context23.abrupt("return", {
1988
- __typename: "SuccessResponse",
1989
- data: (_moveFolders$moveFold = moveFolders.moveFolders) != null ? _moveFolders$moveFold : false
1990
- });
1991
-
1992
- case 10:
1993
- case "end":
1994
- return _context23.stop();
1995
- }
1996
- }
1997
- }, _callee23, this);
1998
- }));
1999
-
2000
- function moveFolders(_x26) {
2001
- return _moveFolders.apply(this, arguments);
2002
- }
2003
-
2004
- return moveFolders;
2005
- }();
2006
-
2007
- _proto.moveFiles = /*#__PURE__*/function () {
2008
- var _moveFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref11) {
2009
- var _moveFiles$moveFiles;
2010
-
2011
- var filesId, parentFolderId, _yield$this$client13, moveFiles;
2012
-
2013
- return _regeneratorRuntime.wrap(function _callee24$(_context24) {
2014
- while (1) {
2015
- switch (_context24.prev = _context24.next) {
2016
- case 0:
2017
- filesId = _ref11.filesId, parentFolderId = _ref11.parentFolderId;
2018
- _context24.next = 3;
2019
- return this.client("mutation")({
2020
- moveFiles: [{
2021
- filesId: filesId,
2022
- parentFolderId: parentFolderId
2023
- }, {
2024
- "...on ErrorAccessDenied": {
2025
- __typename: true,
2026
- message: true
2027
- },
2028
- "...on MoveFilesResponse": {
2029
- __typename: true,
2030
- moveFiles: true
2031
- }
2032
- }]
2033
- });
2034
-
2035
- case 3:
2036
- _yield$this$client13 = _context24.sent;
2037
- moveFiles = _yield$this$client13.moveFiles;
2038
-
2039
- if (moveFiles) {
2040
- _context24.next = 7;
2041
- break;
2042
- }
2043
-
2044
- return _context24.abrupt("return", null);
2045
-
2046
- case 7:
2047
- if (!(moveFiles.__typename === "ErrorAccessDenied")) {
2048
- _context24.next = 9;
2049
- break;
2050
- }
2051
-
2052
- return _context24.abrupt("return", moveFiles);
2053
-
2054
- case 9:
2055
- return _context24.abrupt("return", {
2056
- __typename: "SuccessResponse",
2057
- data: (_moveFiles$moveFiles = moveFiles.moveFiles) != null ? _moveFiles$moveFiles : false
2058
- });
2059
-
2060
- case 10:
2061
- case "end":
2062
- return _context24.stop();
2063
- }
2064
- }
2065
- }, _callee24, this);
2066
- }));
2067
-
2068
- function moveFiles(_x27) {
2069
- return _moveFiles.apply(this, arguments);
2070
- }
2071
-
2072
- return moveFiles;
2073
- }();
2074
-
2075
- _proto.folderSize = /*#__PURE__*/function () {
2076
- var _folderSize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref12) {
2077
- var folderId, _yield$this$client14, folderSize;
2078
-
2079
- return _regeneratorRuntime.wrap(function _callee25$(_context25) {
2080
- while (1) {
2081
- switch (_context25.prev = _context25.next) {
2082
- case 0:
2083
- folderId = _ref12.folderId;
2084
- _context25.next = 3;
2085
- return this.client("query")({
2086
- folderSize: [{
2087
- folderId: folderId
2088
- }, {
2089
- "...on ErrorAccessDenied": {
2090
- __typename: true,
2091
- message: true
2092
- },
2093
- "...on FolderSizeResponse": {
2094
- __typename: true,
2095
- size: true,
2096
- sizeBefore: true
2097
- }
2098
- }]
2099
- });
2100
-
2101
- case 3:
2102
- _yield$this$client14 = _context25.sent;
2103
- folderSize = _yield$this$client14.folderSize;
2104
-
2105
- if (folderSize) {
2106
- _context25.next = 7;
2107
- break;
2108
- }
2109
-
2110
- return _context25.abrupt("return", null);
2111
-
2112
- case 7:
2113
- if (!(folderSize.__typename === "ErrorAccessDenied")) {
2114
- _context25.next = 9;
2115
- break;
2116
- }
2117
-
2118
- return _context25.abrupt("return", folderSize);
2119
-
2120
- case 9:
2121
- return _context25.abrupt("return", {
2122
- __typename: "SuccessResponse",
2123
- data: {
2124
- size: BigInt(folderSize.size),
2125
- sizeBefore: BigInt(folderSize.sizeBefore)
2126
- }
2127
- });
2128
-
2129
- case 10:
2130
- case "end":
2131
- return _context25.stop();
2132
- }
2133
- }
2134
- }, _callee25, this);
2135
- }));
2136
-
2137
- function folderSize(_x28) {
2138
- return _folderSize.apply(this, arguments);
2139
- }
2140
-
2141
- return folderSize;
2142
- }();
2143
-
2144
- _proto.getSponsorshipLink = /*#__PURE__*/function () {
2145
- var _getSponsorshipLink = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref13) {
2146
- var backUrl, me;
2147
- return _regeneratorRuntime.wrap(function _callee26$(_context26) {
2148
- while (1) {
2149
- switch (_context26.prev = _context26.next) {
2150
- case 0:
2151
- backUrl = _ref13.backUrl;
2152
- _context26.next = 3;
2153
- return this.me({
2154
- withPublicKey: false
2155
- });
2156
-
2157
- case 3:
2158
- me = _context26.sent;
2159
-
2160
- if (me) {
2161
- _context26.next = 6;
2162
- break;
2163
- }
2164
-
2165
- return _context26.abrupt("return", null);
2166
-
2167
- case 6:
2168
- if (!(me.__typename === "ErrorNotFound")) {
2169
- _context26.next = 8;
2170
- break;
2171
- }
2172
-
2173
- return _context26.abrupt("return", null);
2174
-
2175
- case 8:
2176
- return _context26.abrupt("return", getLink({
2177
- app: "auth",
2178
- path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
2179
- }));
2180
-
2181
- case 9:
2182
- case "end":
2183
- return _context26.stop();
2184
- }
2185
- }
2186
- }, _callee26, this);
2187
- }));
2188
-
2189
- function getSponsorshipLink(_x29) {
2190
- return _getSponsorshipLink.apply(this, arguments);
2191
- }
2192
-
2193
- return getSponsorshipLink;
2194
- }();
2195
-
2196
- return BaseClient;
2197
- }();
2198
-
2199
- BaseClient.getBaseUrl = function (env, graphcdn) {
2200
- if (env === void 0) {
2201
- env = "prod";
2202
- }
2203
-
2204
- if (graphcdn === void 0) {
2205
- graphcdn = true;
2206
- }
2207
-
2208
- if (process.env.NODE_ENV === "test") {
2209
- return "http://localhost:4000/graphql";
2210
- }
2211
-
2212
- switch (env) {
2213
- case "prod":
2214
- return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
2215
-
2216
- case "staging":
2217
- return "https://api.staging.secrecy.me/graphql";
2218
-
2219
- case "dev":
2220
- default:
2221
- return "https://api.dev.secrecy.me/graphql";
2222
- }
2223
- };
2224
-
2225
- BaseClient._getBaseClient = function (env, session) {
2226
- return createThunder(BaseClient.getBaseUrl(env), session);
2227
- };
2228
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwidG90YWwiLCJwZGYiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsIkJpZ0ludCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZGJDb25maWciLCJqc29uIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0l0ZW1zIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJkYlNldCIsInZhbHVlIiwiRXJyb3IiLCJ0b1N0cmluZyIsInJlcyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwicHJvY2VzcyIsIk5PREVfRU5WIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBR0EsU0FBU0EsU0FBVCxRQUEwQixNQUExQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0Isb0JBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixZQUEzQjtBQUdBLFNBQVNDLFVBQVQsUUFBMkIscUJBQTNCO0FBUUEsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxTQUFTQyxhQUFULFFBQThCLGtCQUE5Qjs7QUFzTEEsU0FBU0Msc0JBQVQsQ0FBZ0NDLENBQWhDLEVBQXVFO0FBQ3JFLHlDQUNLQSxDQURMO0FBRUVDLElBQUFBLG1CQUFtQixrQ0FDZEQsQ0FBQyxDQUFDQyxtQkFEWTtBQUVqQkMsTUFBQUEsS0FBSyxFQUFFRixDQUFDLENBQUNDLG1CQUFGLENBQXNCQyxLQUZaO0FBR2pCQyxNQUFBQSxnQkFBZ0IsRUFBRUgsQ0FBQyxDQUFDQyxtQkFBRixDQUNmRSxnQkFKYztBQUtqQkMsTUFBQUEsV0FBVyxFQUFFSixDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUF0QixHQUNULElBQUlDLElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBL0IsQ0FEUyxHQUVULElBUGE7QUFRakJFLE1BQUFBLFNBQVMsRUFBRU4sQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBdEIsR0FDUCxJQUFJRCxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQS9CLENBRE8sR0FF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SSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Q3BELGFBQWEsQ0FBQ21ELFVBQVUsQ0FBQ3dILFVBQVgsQ0FBc0J0SCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyBhcyBETFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50IH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IHNlcmlhbGl6ZSB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBnZXRMaW5rIH0gZnJvbSBcIkBzZWNyZWN5L2xpYi11dGlsc1wiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVGh1bmRlciB9IGZyb20gXCIuL1pldXNUaHVuZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxhbmdOb3RFeGlzdCxcbiAgRXJyb3JCYXNpY1xufSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTdWNjZXNzUmVzcG9uc2U8VD4gPSB7XG4gIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCI7XG4gIGRhdGE6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIGZpZWxkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB3aXRoUHVibGljS2V5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRmFxSXRlbSA9IHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCbG9nSXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYmxvZ0lkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGltYWdlOiBzdHJpbmc7XG4gIGltYWdlQWx0OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJCYXNlID0ge1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBVc2VyUm9sZTtcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGxhc3RMb2dpbjogRGF0ZTtcbiAgbGFuZzogTGFuZztcbn07XG5cbnR5cGUgV2l0aFB1YmxpY0tleSA9IHsgd2l0aFB1YmxpY0tleT86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVXNlcjxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+ID0gVCBleHRlbmRzIHtcbiAgd2l0aFB1YmxpY0tleTogdHJ1ZTtcbn1cbiAgPyBVc2VyQmFzZSAmIHsgcHVibGljS2V5OiBzdHJpbmcgfVxuICA6IFVzZXJCYXNlO1xuXG50eXBlIENsYXNzR2V0VXNlclBhcmFtcyA9IFdpdGhQdWJsaWNLZXkgJiB7XG4gIHVzZXJJZD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VT4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IocGFyYW1zLnVzZXJJZCwgcGFyYW1zLndpdGhQdWJsaWNLZXkpO1xuICBjb25zdCB7IHVzZXI6IHVzZXJSZXNwb25zZSB9ID0gYXdhaXQgcGFyYW1zLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICB1c2VyOiBzZWxlY3RvclxuICB9KTtcblxuICBpZiAoIXVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgIHJldHVybiB1c2VyUmVzcG9uc2U7XG4gIH1cblxuICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgZGF0YToge1xuICAgICAgLi4udXNlclJlc3BvbnNlLnVzZXIsXG4gICAgICBsYXN0TG9naW46IG5ldyBEYXRlKHVzZXJSZXNwb25zZS51c2VyLmxhc3RMb2dpbiksXG4gICAgICBkZWxldGVkQXQ6IHVzZXJSZXNwb25zZS51c2VyLmRlbGV0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVzZXJSZXNwb25zZS51c2VyLmRlbGV0ZWRBdClcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDbG91ZExpbWl0cyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ6IGJpZ2ludCB8IG51bGw7XG4gIHNpemU6IGJpZ2ludDtcbiAgbWF4U2l6ZTogYmlnaW50IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHNWYWx1ZXMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBmaWxlU2l6ZTogYmlnaW50O1xuICBtYXhGaWxlU2l6ZTogYmlnaW50IHwgbnVsbDtcbiAgZmlsZUNvdW50OiBiaWdpbnQ7XG4gIG1heEZpbGVDb3VudDogYmlnaW50IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5TGltaXRzID0ge1xuICBjbG91ZDogQ2xvdWRMaW1pdHM7XG4gIG1haWw6IHtcbiAgICBzZW50OiBNYWlsTGltaXRzVmFsdWVzO1xuICAgIHJlY2VpdmVkOiBNYWlsTGltaXRzVmFsdWVzO1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGllbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGdldEJhc2VVcmwgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52ID0gXCJwcm9kXCIsXG4gICAgZ3JhcGhjZG4gPSB0cnVlXG4gICk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MDAwL2dyYXBocWxcIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGVudikge1xuICAgICAgY2FzZSBcInByb2RcIjpcbiAgICAgICAgcmV0dXJuIGdyYXBoY2RuXG4gICAgICAgICAgPyBcImh0dHBzOi8vc2VjcmVjeS5ncmFwaGNkbi5hcHBcIlxuICAgICAgICAgIDogXCJodHRwczovL2FwaS5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICAgIGNhc2UgXCJzdGFnaW5nXCI6XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vYXBpLnN0YWdpbmcuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwiZGV2XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5kZXYuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9nZXRCYXNlQ2xpZW50ID0gKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPiA9PlxuICAgIGNyZWF0ZVRodW5kZXIoQmFzZUNsaWVudC5nZXRCYXNlVXJsKGVudiksIHNlc3Npb24pO1xuXG4gIHByb3RlY3RlZCBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIHB1YmxpYyBzZXNzaW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBzdHJpbmcsIGVudjogU2VjcmVjeUVudikge1xuICAgIHRoaXMuc2Vzc2lvbklkID0gc2Vzc2lvbjtcbiAgICB0aGlzLmNsaWVudCA9IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNlc3Npb25zKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXJTZXNzaW9uW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmllbGQ6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBzZXNzaW9uczoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGFwcFNlc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgICAgICB1c2VyQXBwOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcDoge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBkYXRhLnVzZXI7XG4gICAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIlVzZXJSZXNwb25zZVwiKSB7XG4gICAgICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Vzc2lvbnM6IFVzZXJTZXNzaW9uW10gPVxuICAgICAgICB1c2VyUmVzcG9uc2UudXNlci5zZXNzaW9ucy5tYXAocyA9PiAoe1xuICAgICAgICAgIGlkOiBzLmlkLFxuICAgICAgICAgIGlwOiBzLmlwLFxuICAgICAgICAgIGNpdHk6IHMuY2l0eSxcbiAgICAgICAgICBjb3VudHJ5OiBzLmNvdW50cnksXG4gICAgICAgICAgbGFzdEFjdGl2aXR5OiBzLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKHMubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyQWdlbnQ6IHMudXNlckFnZW50LFxuICAgICAgICAgIGFwcFNlc3Npb25zOiBzLmFwcFNlc3Npb25zLm1hcChhID0+ICh7XG4gICAgICAgICAgICBpZDogYS5pZCxcbiAgICAgICAgICAgIGlwOiBhLmlwLFxuICAgICAgICAgICAgY2l0eTogYS5jaXR5LFxuICAgICAgICAgICAgY291bnRyeTogYS5jb3VudHJ5LFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiBhLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKGEubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogYS51c2VyQWdlbnQsXG4gICAgICAgICAgICBhcHA6IGEudXNlckFwcD8uYXBwLm5hbWUgPz8gXCJcIlxuICAgICAgICAgIH0pKVxuICAgICAgICB9KSkgPz8gW107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBzZXNzaW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlclJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgY29uc3QgbG9jYWwgPSBnZXRTdG9yYWdlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgICAgbG9jYWwuand0LmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHNlc3Npb24uand0LmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICB1c2Vyc0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgbG9nb3V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gTG9nb3V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsb2dvdXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy9cbiAgICB9XG4gIH1cblxuICBhc3luYyBtZTxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+KFxuICAgIHBhcmFtcz86IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIocGFyYW1zIHx8ICh7IHdpdGhQdWJsaWNLZXk6IHRydWUgfSBhcyBUKSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXNlcjxUIGV4dGVuZHMgU3RhdGljR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBULFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5fZ2V0QmFzZUNsaWVudChwYXJhbXMuZW52LCBzZXNzaW9uSWQpLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5kYXRhLmlkLCB1c2VyLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUHJvZmlsZSh7XG4gICAgZmlyc3RuYW1lLFxuICAgIGxhc3RuYW1lLFxuICAgIGxhbmdcbiAgfToge1xuICAgIGZpcnN0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBsYXN0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBsYW5nOiBMYW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXI+IHwgRXJyb3JOb3RGb3VuZCB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVwZGF0ZVByb2ZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlUHJvZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlyc3RuYW1lLFxuICAgICAgICAgIGxhc3RuYW1lLFxuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVQcm9maWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZVByb2ZpbGU6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVByb2ZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBlbWFpbDogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmVtYWlsLFxuICAgICAgICBmaXJzdG5hbWU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5maXJzdG5hbWUsXG4gICAgICAgIGlkOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuaWQsXG4gICAgICAgIGxhbmc6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5sYW5nLFxuICAgICAgICBsYXN0TG9naW46IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5sYXN0TG9naW4pLFxuICAgICAgICBsYXN0bmFtZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhc3RuYW1lLFxuICAgICAgICBwaG9uZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLnBob25lLFxuICAgICAgICByb2xlOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUucm9sZSxcbiAgICAgICAgZGVsZXRlZEF0OiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0XG4gICAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGxhbnMoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8UGxhbltdPiB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBsYW5zIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIFwiLi4ub24gUGxhblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHBsYW46IHtcbiAgICAgICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgICAgICBjb2RlczogdHJ1ZSxcbiAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgZG93bmxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VudE1haWxzOiB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBsYW5zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHBsYW5zLnBsYW5cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGF5KFxuICAgIHBsYW5Db2RlOiBTZWNyZWN5UGxhbnNDb2RlcyxcbiAgICBpbnB1dDogUGF5SW5wdXQsXG4gICAgYXV0b1JlbmV3PzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBheSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBwYXk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHBsYW5Db2RlLFxuICAgICAgICAgIGF1dG9SZW5ld1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBQYXlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcGF5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXBheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBheS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBwYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBwYXkucGF5ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFBheW1lbnQoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBjYW5jZWxQYXltZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNhbmNlbFBheW1lbnQ6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gQ2FuY2VsUGF5bWVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbFBheW1lbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFjYW5jZWxQYXltZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsUGF5bWVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjYW5jZWxQYXltZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogY2FuY2VsUGF5bWVudC5jYW5jZWxQYXltZW50ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxQYXltZW50SW5mb3M+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcGF5bWVudEluZm9zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBQYXltZW50SW5mb3NSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgICAgIGhvc3RlZFVybDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgICAgICBhY3RpdmF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3JlYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHBhdXNlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgICAgIHBsYW46IHRydWUsXG4gICAgICAgICAgICAgIHBsYW5Db2RlOiB0cnVlLFxuICAgICAgICAgICAgICB0b3RhbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgICAgIHBkZjogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlLFxuICAgICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50SW5mb3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcGF5bWVudEluZm9zO1xuICAgIH1cblxuICAgIGlmICghcGF5bWVudEluZm9zLnBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsVG9QYXltZW50SW5mb3MocGF5bWVudEluZm9zLnBheW1lbnRJbmZvcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8UXVlcnlMaW1pdHM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gUXVlcnlMaW1pdHNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFpbDoge1xuICAgICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghbGltaXRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsb3VkLCBtYWlsIH0gPSBsaW1pdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KGNsb3VkLmNvdW50KSxcbiAgICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgICAgbWF4Q291bnQ6IGNsb3VkLm1heENvdW50ID8gQmlnSW50KGNsb3VkLm1heENvdW50KSA6IG51bGwsXG4gICAgICAgICAgbWF4U2l6ZTogY2xvdWQubWF4U2l6ZSA/IEJpZ0ludChjbG91ZC5tYXhTaXplKSA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgbWFpbDoge1xuICAgICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwucmVjZWl2ZWQubWF4Q291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5yZWNlaXZlZC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnNlbnQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwuc2VudC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnNlbnQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVTaXplOiBCaWdJbnQobWFpbC5zZW50LmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5zZW50Lm1heEZpbGVTaXplKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ29kRmF0aGVyQW5kQ2hpbGRyZW4oKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBnb2RDaGlsZHJlbjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ29kRmF0aGVyOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBnb2RDaGlsZHJlbjogdXNlci5nb2RDaGlsZHJlbixcbiAgICAgICAgZ29kRmF0aGVyOiB1c2VyLmdvZEZhdGhlclxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXBkYXRlQXBwREJDb25maWcoe1xuICAgIGFwcENvZGUsXG4gICAgY29uZmlnLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGFwcENvZGU6IHN0cmluZztcbiAgICBjb25maWc6IEFwcERCQ29uZmlnO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8QXBwREJDb25maWc+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZ011dGF0aW9uIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiQ29uZmlnTXV0YXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGUsXG4gICAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnTXV0YXRpb25SZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJDb25maWdNdXRhdGlvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZ011dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWdNdXRhdGlvbi5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ011dGF0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWdNdXRhdGlvbi5kYkNvbmZpZ011dGF0aW9uXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRBcHBEQkNvbmZpZyhcbiAgICBhcHBDb2RlOiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwicXVlcnlcIikoe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnLmpzb25cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEZBUSh7XG4gICAgbGFuZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBsYW5nPzogTGFuZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZhcUl0ZW1bXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZhcSB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBmYXE6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmFxUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZhcToge1xuICAgICAgICAgICAgICBhbnN3ZXI6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBxdWVzdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmYXEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmYXEuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmFxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZmFxLmZhcVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QmxvZyh7XG4gICAgZW52LFxuICAgIGxhbmcsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgbGFuZz86IExhbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxCbG9nSXRlbVtdPiB8IEVycm9yTGFuZ05vdEV4aXN0IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgYmxvZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBibG9nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGFuZ05vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEJsb2dSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgYmxvZ0l0ZW1zOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBibG9nSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYm9keTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgICAgIGltYWdlQWx0OiB0cnVlLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYmxvZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJsb2cuX190eXBlbmFtZSA9PT0gXCJFcnJvckxhbmdOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gYmxvZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGJsb2cuYmxvZ0l0ZW1zLm1hcChiID0+ICh7IC4uLmIsIGRhdGU6IG5ldyBEYXRlKGIuZGF0ZSkgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFNlbmRSZXBvcnQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNlbmRSZXBvcnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2VuZFJlcG9ydDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVwb3J0ZWRVc2VySWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNlbmRSZXBvcnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2VuZFJlcG9ydDoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXBvcnRlZFVzZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZFJlcG9ydC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQuc2VuZFJlcG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW5kUmVwb3J0LnNlbmRSZXBvcnRcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVVzZXIgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlVXNlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZVVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlVXNlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVVc2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlVXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVVc2VyO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlVXNlci5kZWxldGVVc2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZVVzZXIuZGVsZXRlVXNlclxuICAgIH07XG4gIH1cblxuICBhc3luYyBkYkdldDxVPih7XG4gICAgZmllbGQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFU+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRiR2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiR2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJHZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiR2V0Lmpzb25cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2V0LmRiU2V0LnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJTZWFyY2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvblxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXIoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvck5vdEV4aXN0IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGb2xkZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRm9sZGVyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZUZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRm9sZGVyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZUZvbGRlci5kZWxldGVGb2xkZXIgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZvbGRlcnMoe1xuICAgIGZvbGRlcnNJZCxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVyc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRm9sZGVyc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlRm9sZGVyczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtb3ZlRm9sZGVycykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGb2xkZXJzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVGb2xkZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbW92ZUZvbGRlcnMubW92ZUZvbGRlcnMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZpbGVzKHtcbiAgICBmaWxlc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGaWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRmlsZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZUZpbGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVGaWxlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGaWxlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlRmlsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlRmlsZXMubW92ZUZpbGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGb2xkZXJTaXplPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGb2xkZXJTaXplUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXJTaXplLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZvbGRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgICBzaXplQmVmb3JlOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplQmVmb3JlKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRTcG9uc29yc2hpcExpbmsoe1xuICAgIGJhY2tVcmxcbiAgfToge1xuICAgIGJhY2tVcmw6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCBtZSA9IGF3YWl0IHRoaXMubWUoeyB3aXRoUHVibGljS2V5OiBmYWxzZSB9KTtcblxuICAgIGlmICghbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExpbmsoe1xuICAgICAgYXBwOiBcImF1dGhcIixcbiAgICAgIHBhdGg6IGAvc2lnbi11cD9nZj0ke2J0b2EobWUuZGF0YS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==