@secrecy/lib 1.0.0-dev.8 → 1.0.0-dev.81
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.
- package/README.md +1 -1
- package/dist/BaseClient.d.ts +104 -0
- package/dist/BaseClient.js +430 -0
- package/{lib → dist}/PopupTools.d.ts +1 -1
- package/dist/PopupTools.js +196 -0
- package/{lib → dist}/ZeusThunder.d.ts +0 -0
- package/dist/ZeusThunder.js +65 -0
- package/dist/cache.d.ts +6 -0
- package/dist/cache.js +4 -0
- package/dist/client/SecrecyAppClient.d.ts +17 -0
- package/dist/client/SecrecyAppClient.js +227 -0
- package/dist/client/SecrecyCloudClient.d.ts +89 -0
- package/dist/client/SecrecyCloudClient.js +1411 -0
- package/dist/client/SecrecyDbClient.d.ts +21 -0
- package/dist/client/SecrecyDbClient.js +177 -0
- package/dist/client/SecrecyMailClient.d.ts +42 -0
- package/dist/client/SecrecyMailClient.js +1022 -0
- package/dist/client/SecrecyPayClient.d.ts +28 -0
- package/dist/client/SecrecyPayClient.js +68 -0
- package/dist/client/SecrecyWalletClient.d.ts +30 -0
- package/dist/client/SecrecyWalletClient.js +73 -0
- package/{lib → dist}/client/convert/file.d.ts +3 -3
- package/dist/client/convert/file.js +33 -0
- package/dist/client/convert/mail.d.ts +3 -0
- package/dist/client/convert/mail.js +43 -0
- package/dist/client/convert/node.d.ts +9 -0
- package/dist/client/convert/node.js +88 -0
- package/{lib → dist}/client/helpers.d.ts +6 -1
- package/dist/client/helpers.js +119 -0
- package/dist/client/index.d.ts +34 -0
- package/dist/client/index.js +46 -0
- package/{lib → dist}/client/storage.d.ts +0 -0
- package/dist/client/storage.js +12 -0
- package/dist/client/types/File.d.ts +14 -0
- package/dist/client/types/File.js +3 -0
- package/{lib → dist}/client/types/Inputs.d.ts +2 -7
- package/dist/client/types/Inputs.js +3 -0
- package/dist/client/types/Node.d.ts +56 -0
- package/dist/client/types/Node.js +3 -0
- package/{lib → dist}/client/types/UserAppNotifications.d.ts +1 -1
- package/dist/client/types/UserAppNotifications.js +3 -0
- package/{lib → dist}/client/types/UserAppSettings.d.ts +1 -3
- package/dist/client/types/UserAppSettings.js +3 -0
- package/{lib → dist}/client/types/index.d.ts +9 -43
- package/dist/client/types/index.js +8 -0
- package/dist/client/types/selectors.d.ts +400 -0
- package/dist/client/types/selectors.js +135 -0
- package/{lib → dist}/crypto/file.d.ts +0 -0
- package/dist/crypto/file.js +195 -0
- package/{lib → dist}/crypto/index.d.ts +0 -0
- package/dist/crypto/index.js +45 -0
- package/dist/error.d.ts +33 -0
- package/dist/error.js +3 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +10 -0
- package/{lib → dist}/minify/index.d.ts +0 -0
- package/dist/minify/index.js +23 -0
- package/{lib → dist}/minify/lz4.d.ts +0 -0
- package/dist/minify/lz4.js +539 -0
- package/{lib → dist}/sodium.d.ts +0 -0
- package/dist/sodium.js +6 -0
- package/{lib → dist}/utils/store-buddy.d.ts +0 -0
- package/dist/utils/store-buddy.js +58 -0
- package/{lib → dist}/utils/time.d.ts +0 -0
- package/dist/utils/time.js +12 -0
- package/{lib → dist/utils}/utils.d.ts +0 -0
- package/dist/utils/utils.js +47 -0
- package/{lib → dist}/worker/md5.d.ts +0 -0
- package/dist/worker/md5.js +24 -0
- package/{lib → dist}/worker/sodium.d.ts +0 -0
- package/dist/worker/sodium.js +118 -0
- package/{lib → dist}/worker/workerCodes.d.ts +0 -0
- package/dist/worker/workerCodes.js +255 -0
- package/{lib → dist}/zeus/const.d.ts +5 -0
- package/dist/zeus/const.js +1670 -0
- package/dist/zeus/index.d.ts +7896 -0
- package/dist/zeus/index.js +602 -0
- package/package.json +64 -54
- package/lib/BaseClient.d.ts +0 -266
- package/lib/BaseClient.js +0 -1332
- package/lib/PopupTools.js +0 -213
- package/lib/ZeusThunder.js +0 -112
- package/lib/cache.d.ts +0 -7
- package/lib/cache.js +0 -5
- package/lib/client/convert/file.js +0 -39
- package/lib/client/convert/folder.d.ts +0 -8
- package/lib/client/convert/folder.js +0 -264
- package/lib/client/convert/mail.d.ts +0 -3
- package/lib/client/convert/mail.js +0 -46
- package/lib/client/convert/vFile.d.ts +0 -5
- package/lib/client/convert/vFile.js +0 -164
- package/lib/client/helpers.js +0 -116
- package/lib/client/index.d.ts +0 -168
- package/lib/client/index.js +0 -3795
- package/lib/client/storage.js +0 -12
- package/lib/client/types/File.d.ts +0 -21
- package/lib/client/types/File.js +0 -2
- package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
- package/lib/client/types/FilesOnUsersOnApplications.js +0 -2
- package/lib/client/types/Folder.d.ts +0 -68
- package/lib/client/types/Folder.js +0 -7
- package/lib/client/types/Inputs.js +0 -2
- package/lib/client/types/UserAppNotifications.js +0 -2
- package/lib/client/types/UserAppSettings.js +0 -2
- package/lib/client/types/VFile.d.ts +0 -62
- package/lib/client/types/VFile.js +0 -4
- package/lib/client/types/index.js +0 -9
- package/lib/client/types/queries.d.ts +0 -535
- package/lib/client/types/queries.js +0 -192
- package/lib/crypto/file.js +0 -291
- package/lib/crypto/index.js +0 -37
- package/lib/index.d.ts +0 -11
- package/lib/index.js +0 -40
- package/lib/minify/index.js +0 -28
- package/lib/minify/lz4.js +0 -633
- package/lib/sodium.js +0 -28
- package/lib/utils/store-buddy.js +0 -69
- package/lib/utils/time.js +0 -22
- package/lib/utils.js +0 -188
- package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
- package/lib/worker/__mock__/sodium.worker.js +0 -57
- package/lib/worker/md5.js +0 -43
- package/lib/worker/sodium.js +0 -155
- package/lib/worker/workerCodes.js +0 -3
- package/lib/zeus/const.js +0 -1644
- package/lib/zeus/index.d.ts +0 -26279
- package/lib/zeus/index.js +0 -552
package/lib/BaseClient.js
DELETED
|
@@ -1,1332 +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); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
8
|
-
|
|
9
|
-
import { serialize } from "bson";
|
|
10
|
-
import { usersCache } from "./cache.js";
|
|
11
|
-
import { getStorage } from "./client/storage.js";
|
|
12
|
-
import { Selectors } from "./zeus/index.js";
|
|
13
|
-
import { createThunder } from "./ZeusThunder.js";
|
|
14
|
-
|
|
15
|
-
function internalToPaymentInfos(p) {
|
|
16
|
-
return _objectSpread(_objectSpread({}, p), {}, {
|
|
17
|
-
currentSubscription: _objectSpread(_objectSpread({}, p.currentSubscription), {}, {
|
|
18
|
-
state: p.currentSubscription.state,
|
|
19
|
-
collectionMethod: p.currentSubscription.collectionMethod,
|
|
20
|
-
activatedAt: p.currentSubscription.activatedAt ? new Date(p.currentSubscription.activatedAt) : null,
|
|
21
|
-
createdAt: p.currentSubscription.createdAt ? new Date(p.currentSubscription.createdAt) : null,
|
|
22
|
-
updatedAt: p.currentSubscription.updatedAt ? new Date(p.currentSubscription.updatedAt) : null,
|
|
23
|
-
trialEndsAt: p.currentSubscription.trialEndsAt ? new Date(p.currentSubscription.trialEndsAt) : null,
|
|
24
|
-
trialStartedAt: p.currentSubscription.trialStartedAt ? new Date(p.currentSubscription.trialStartedAt) : null,
|
|
25
|
-
pausedAt: p.currentSubscription.pausedAt ? new Date(p.currentSubscription.pausedAt) : null,
|
|
26
|
-
currentPeriodEndsAt: p.currentSubscription.currentPeriodEndsAt ? new Date(p.currentSubscription.currentPeriodEndsAt) : null,
|
|
27
|
-
currentPeriodStartedAt: p.currentSubscription.currentPeriodStartedAt ? new Date(p.currentSubscription.currentPeriodStartedAt) : null,
|
|
28
|
-
canceledAt: p.currentSubscription.canceledAt ? new Date(p.currentSubscription.canceledAt) : null,
|
|
29
|
-
expiresAt: p.currentSubscription.expiresAt ? new Date(p.currentSubscription.expiresAt) : null
|
|
30
|
-
}),
|
|
31
|
-
invoices: p.invoices.map(function (i) {
|
|
32
|
-
return _objectSpread(_objectSpread({}, i), {}, {
|
|
33
|
-
date: new Date(i.date),
|
|
34
|
-
due: new Date(i.due),
|
|
35
|
-
status: i.status
|
|
36
|
-
});
|
|
37
|
-
})
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
var plansCodes = ["basic_month", "advanced_month", "pro_month", "basic_year", "advanced_year", "pro_year"];
|
|
42
|
-
export function isValidPlan(planCode) {
|
|
43
|
-
return plansCodes.includes(planCode);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
var getUserSelector = function getUserSelector(userId, withPublicKey) {
|
|
47
|
-
var _Selectors$query = Selectors.query({
|
|
48
|
-
user: [{
|
|
49
|
-
userId: userId
|
|
50
|
-
}, {
|
|
51
|
-
id: true,
|
|
52
|
-
firstname: true,
|
|
53
|
-
lastname: true,
|
|
54
|
-
lang: true,
|
|
55
|
-
publicKey: withPublicKey ? true : undefined,
|
|
56
|
-
email: true,
|
|
57
|
-
phone: true,
|
|
58
|
-
role: true,
|
|
59
|
-
deletedAt: true,
|
|
60
|
-
lastLogin: true
|
|
61
|
-
}]
|
|
62
|
-
}),
|
|
63
|
-
user = _Selectors$query.user;
|
|
64
|
-
|
|
65
|
-
return user;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
function getUser(_x) {
|
|
69
|
-
return _getUser.apply(this, arguments);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function _getUser() {
|
|
73
|
-
_getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(params) {
|
|
74
|
-
var selector, _yield$params$client$, user;
|
|
75
|
-
|
|
76
|
-
return _regeneratorRuntime.wrap(function _callee26$(_context26) {
|
|
77
|
-
while (1) {
|
|
78
|
-
switch (_context26.prev = _context26.next) {
|
|
79
|
-
case 0:
|
|
80
|
-
selector = getUserSelector(params.userId, params.withPublicKey);
|
|
81
|
-
_context26.next = 3;
|
|
82
|
-
return params.client.query({
|
|
83
|
-
user: selector
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
case 3:
|
|
87
|
-
_yield$params$client$ = _context26.sent;
|
|
88
|
-
user = _yield$params$client$.user;
|
|
89
|
-
|
|
90
|
-
if (user) {
|
|
91
|
-
_context26.next = 7;
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return _context26.abrupt("return", null);
|
|
96
|
-
|
|
97
|
-
case 7:
|
|
98
|
-
return _context26.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
|
|
99
|
-
lastLogin: new Date(user.lastLogin),
|
|
100
|
-
deletedAt: user.deletedAt ? new Date(user.deletedAt) : null
|
|
101
|
-
}));
|
|
102
|
-
|
|
103
|
-
case 8:
|
|
104
|
-
case "end":
|
|
105
|
-
return _context26.stop();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}, _callee26);
|
|
109
|
-
}));
|
|
110
|
-
return _getUser.apply(this, arguments);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export var BaseClient = /*#__PURE__*/function () {
|
|
114
|
-
function BaseClient(session, env) {
|
|
115
|
-
this.client = void 0;
|
|
116
|
-
this.sessionId = void 0;
|
|
117
|
-
this.sessionId = session;
|
|
118
|
-
this.client = BaseClient._getBaseClient(env, session);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
var _proto = BaseClient.prototype;
|
|
122
|
-
|
|
123
|
-
_proto.sessions = /*#__PURE__*/function () {
|
|
124
|
-
var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
125
|
-
var _data$user$sessions$m, _data$user;
|
|
126
|
-
|
|
127
|
-
var data, sessions;
|
|
128
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
129
|
-
while (1) {
|
|
130
|
-
switch (_context.prev = _context.next) {
|
|
131
|
-
case 0:
|
|
132
|
-
_context.next = 2;
|
|
133
|
-
return this.client.query({
|
|
134
|
-
user: [{}, {
|
|
135
|
-
sessions: {
|
|
136
|
-
id: true,
|
|
137
|
-
lastActivity: true,
|
|
138
|
-
userAgent: true,
|
|
139
|
-
ip: true,
|
|
140
|
-
city: true,
|
|
141
|
-
country: true,
|
|
142
|
-
appSessions: {
|
|
143
|
-
id: true,
|
|
144
|
-
lastActivity: true,
|
|
145
|
-
userAgent: true,
|
|
146
|
-
ip: true,
|
|
147
|
-
city: true,
|
|
148
|
-
country: true,
|
|
149
|
-
userApp: {
|
|
150
|
-
app: {
|
|
151
|
-
name: true
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}]
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
case 2:
|
|
160
|
-
data = _context.sent;
|
|
161
|
-
sessions = (_data$user$sessions$m = (_data$user = data.user) == null ? void 0 : _data$user.sessions.map(function (s) {
|
|
162
|
-
return {
|
|
163
|
-
id: s.id,
|
|
164
|
-
ip: s.ip,
|
|
165
|
-
city: s.city,
|
|
166
|
-
country: s.country,
|
|
167
|
-
lastActivity: s.lastActivity ? new Date(s.lastActivity) : undefined,
|
|
168
|
-
userAgent: s.userAgent,
|
|
169
|
-
appSessions: s.appSessions.map(function (a) {
|
|
170
|
-
var _a$userApp$app$name, _a$userApp;
|
|
171
|
-
|
|
172
|
-
return {
|
|
173
|
-
id: a.id,
|
|
174
|
-
ip: a.ip,
|
|
175
|
-
city: a.city,
|
|
176
|
-
country: a.country,
|
|
177
|
-
lastActivity: a.lastActivity ? new Date(a.lastActivity) : undefined,
|
|
178
|
-
userAgent: a.userAgent,
|
|
179
|
-
app: (_a$userApp$app$name = (_a$userApp = a.userApp) == null ? void 0 : _a$userApp.app.name) != null ? _a$userApp$app$name : ""
|
|
180
|
-
};
|
|
181
|
-
})
|
|
182
|
-
};
|
|
183
|
-
})) != null ? _data$user$sessions$m : [];
|
|
184
|
-
return _context.abrupt("return", sessions);
|
|
185
|
-
|
|
186
|
-
case 5:
|
|
187
|
-
case "end":
|
|
188
|
-
return _context.stop();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}, _callee, this);
|
|
192
|
-
}));
|
|
193
|
-
|
|
194
|
-
function sessions() {
|
|
195
|
-
return _sessions.apply(this, arguments);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return sessions;
|
|
199
|
-
}();
|
|
200
|
-
|
|
201
|
-
_proto.logout = /*#__PURE__*/function () {
|
|
202
|
-
var _logout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sessionId) {
|
|
203
|
-
var local, session;
|
|
204
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
205
|
-
while (1) {
|
|
206
|
-
switch (_context2.prev = _context2.next) {
|
|
207
|
-
case 0:
|
|
208
|
-
if (!sessionId) {
|
|
209
|
-
local = getStorage(false);
|
|
210
|
-
session = getStorage(true);
|
|
211
|
-
local.jwt.clear();
|
|
212
|
-
local.userAppKeys.clear();
|
|
213
|
-
local.userAppSession.clear();
|
|
214
|
-
session.jwt.clear();
|
|
215
|
-
session.userAppKeys.clear();
|
|
216
|
-
session.userAppSession.clear();
|
|
217
|
-
usersCache.clear();
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
_context2.prev = 1;
|
|
221
|
-
_context2.next = 4;
|
|
222
|
-
return this.client.mutation({
|
|
223
|
-
logout: [{
|
|
224
|
-
sessionId: sessionId
|
|
225
|
-
}, true]
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
case 4:
|
|
229
|
-
_context2.next = 8;
|
|
230
|
-
break;
|
|
231
|
-
|
|
232
|
-
case 6:
|
|
233
|
-
_context2.prev = 6;
|
|
234
|
-
_context2.t0 = _context2["catch"](1);
|
|
235
|
-
|
|
236
|
-
case 8:
|
|
237
|
-
case "end":
|
|
238
|
-
return _context2.stop();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}, _callee2, this, [[1, 6]]);
|
|
242
|
-
}));
|
|
243
|
-
|
|
244
|
-
function logout(_x2) {
|
|
245
|
-
return _logout.apply(this, arguments);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return logout;
|
|
249
|
-
}();
|
|
250
|
-
|
|
251
|
-
_proto.me = /*#__PURE__*/function () {
|
|
252
|
-
var _me = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(params) {
|
|
253
|
-
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
254
|
-
while (1) {
|
|
255
|
-
switch (_context3.prev = _context3.next) {
|
|
256
|
-
case 0:
|
|
257
|
-
return _context3.abrupt("return", this.user(params || {
|
|
258
|
-
withPublicKey: true
|
|
259
|
-
}));
|
|
260
|
-
|
|
261
|
-
case 1:
|
|
262
|
-
case "end":
|
|
263
|
-
return _context3.stop();
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}, _callee3, this);
|
|
267
|
-
}));
|
|
268
|
-
|
|
269
|
-
function me(_x3) {
|
|
270
|
-
return _me.apply(this, arguments);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return me;
|
|
274
|
-
}();
|
|
275
|
-
|
|
276
|
-
BaseClient.user = /*#__PURE__*/function () {
|
|
277
|
-
var _user = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(params, sessionId) {
|
|
278
|
-
var user;
|
|
279
|
-
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
280
|
-
while (1) {
|
|
281
|
-
switch (_context4.prev = _context4.next) {
|
|
282
|
-
case 0:
|
|
283
|
-
_context4.next = 2;
|
|
284
|
-
return getUser({
|
|
285
|
-
client: this._getBaseClient(params.env, sessionId),
|
|
286
|
-
userId: params.userId
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
case 2:
|
|
290
|
-
user = _context4.sent;
|
|
291
|
-
|
|
292
|
-
if (user) {
|
|
293
|
-
usersCache.set(user.id, user);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
return _context4.abrupt("return", user);
|
|
297
|
-
|
|
298
|
-
case 5:
|
|
299
|
-
case "end":
|
|
300
|
-
return _context4.stop();
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}, _callee4, this);
|
|
304
|
-
}));
|
|
305
|
-
|
|
306
|
-
function user(_x4, _x5) {
|
|
307
|
-
return _user.apply(this, arguments);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
return user;
|
|
311
|
-
}();
|
|
312
|
-
|
|
313
|
-
_proto.user = /*#__PURE__*/function () {
|
|
314
|
-
var _user2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(params) {
|
|
315
|
-
var user;
|
|
316
|
-
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
317
|
-
while (1) {
|
|
318
|
-
switch (_context5.prev = _context5.next) {
|
|
319
|
-
case 0:
|
|
320
|
-
_context5.next = 2;
|
|
321
|
-
return getUser({
|
|
322
|
-
client: this.client,
|
|
323
|
-
userId: params.userId,
|
|
324
|
-
withPublicKey: params.withPublicKey
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
case 2:
|
|
328
|
-
user = _context5.sent;
|
|
329
|
-
|
|
330
|
-
if (user) {
|
|
331
|
-
usersCache.set(user.id, user);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
return _context5.abrupt("return", user);
|
|
335
|
-
|
|
336
|
-
case 5:
|
|
337
|
-
case "end":
|
|
338
|
-
return _context5.stop();
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}, _callee5, this);
|
|
342
|
-
}));
|
|
343
|
-
|
|
344
|
-
function user(_x6) {
|
|
345
|
-
return _user2.apply(this, arguments);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
return user;
|
|
349
|
-
}();
|
|
350
|
-
|
|
351
|
-
_proto.updateProfile = /*#__PURE__*/function () {
|
|
352
|
-
var _updateProfile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref) {
|
|
353
|
-
var firstname, lastname, lang, _yield$this$client$mu, updateProfile;
|
|
354
|
-
|
|
355
|
-
return _regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
356
|
-
while (1) {
|
|
357
|
-
switch (_context6.prev = _context6.next) {
|
|
358
|
-
case 0:
|
|
359
|
-
firstname = _ref.firstname, lastname = _ref.lastname, lang = _ref.lang;
|
|
360
|
-
_context6.next = 3;
|
|
361
|
-
return this.client.mutation({
|
|
362
|
-
updateProfile: [{
|
|
363
|
-
firstname: firstname,
|
|
364
|
-
lastname: lastname,
|
|
365
|
-
lang: lang
|
|
366
|
-
}, {
|
|
367
|
-
id: true,
|
|
368
|
-
firstname: true,
|
|
369
|
-
lastname: true,
|
|
370
|
-
lang: true,
|
|
371
|
-
email: true,
|
|
372
|
-
phone: true,
|
|
373
|
-
role: true,
|
|
374
|
-
deletedAt: true,
|
|
375
|
-
lastLogin: true
|
|
376
|
-
}]
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
case 3:
|
|
380
|
-
_yield$this$client$mu = _context6.sent;
|
|
381
|
-
updateProfile = _yield$this$client$mu.updateProfile;
|
|
382
|
-
|
|
383
|
-
if (updateProfile) {
|
|
384
|
-
_context6.next = 7;
|
|
385
|
-
break;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
throw new Error("Should not happen");
|
|
389
|
-
|
|
390
|
-
case 7:
|
|
391
|
-
return _context6.abrupt("return", _objectSpread(_objectSpread({}, updateProfile), {}, {
|
|
392
|
-
lastLogin: new Date(updateProfile.lastLogin),
|
|
393
|
-
deletedAt: updateProfile.deletedAt ? new Date(updateProfile.deletedAt) : null
|
|
394
|
-
}));
|
|
395
|
-
|
|
396
|
-
case 8:
|
|
397
|
-
case "end":
|
|
398
|
-
return _context6.stop();
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}, _callee6, this);
|
|
402
|
-
}));
|
|
403
|
-
|
|
404
|
-
function updateProfile(_x7) {
|
|
405
|
-
return _updateProfile.apply(this, arguments);
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
return updateProfile;
|
|
409
|
-
}();
|
|
410
|
-
|
|
411
|
-
BaseClient.plans = /*#__PURE__*/function () {
|
|
412
|
-
var _plans = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(env, sessionId) {
|
|
413
|
-
var _yield$BaseClient$_ge, plans;
|
|
414
|
-
|
|
415
|
-
return _regeneratorRuntime.wrap(function _callee7$(_context7) {
|
|
416
|
-
while (1) {
|
|
417
|
-
switch (_context7.prev = _context7.next) {
|
|
418
|
-
case 0:
|
|
419
|
-
_context7.next = 2;
|
|
420
|
-
return BaseClient._getBaseClient(env, sessionId).query({
|
|
421
|
-
plans: {
|
|
422
|
-
kind: true,
|
|
423
|
-
codes: true,
|
|
424
|
-
limits: {
|
|
425
|
-
downloadBandwidth: true,
|
|
426
|
-
downloadCount: true,
|
|
427
|
-
hardFileCount: true,
|
|
428
|
-
hardFileSize: true,
|
|
429
|
-
perFileSize: true,
|
|
430
|
-
uploadBandwidth: true,
|
|
431
|
-
uploadCount: true,
|
|
432
|
-
receivedMails: {
|
|
433
|
-
count: true,
|
|
434
|
-
fileCount: true,
|
|
435
|
-
fileSize: true,
|
|
436
|
-
hardCount: true,
|
|
437
|
-
hardFileCount: true,
|
|
438
|
-
hardFileSize: true,
|
|
439
|
-
perFileSize: true
|
|
440
|
-
},
|
|
441
|
-
sentMails: {
|
|
442
|
-
count: true,
|
|
443
|
-
fileCount: true,
|
|
444
|
-
fileSize: true,
|
|
445
|
-
hardCount: true,
|
|
446
|
-
hardFileCount: true,
|
|
447
|
-
hardFileSize: true,
|
|
448
|
-
perFileSize: true
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
});
|
|
453
|
-
|
|
454
|
-
case 2:
|
|
455
|
-
_yield$BaseClient$_ge = _context7.sent;
|
|
456
|
-
plans = _yield$BaseClient$_ge.plans;
|
|
457
|
-
return _context7.abrupt("return", plans);
|
|
458
|
-
|
|
459
|
-
case 5:
|
|
460
|
-
case "end":
|
|
461
|
-
return _context7.stop();
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
}, _callee7);
|
|
465
|
-
}));
|
|
466
|
-
|
|
467
|
-
function plans(_x8, _x9) {
|
|
468
|
-
return _plans.apply(this, arguments);
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
return plans;
|
|
472
|
-
}();
|
|
473
|
-
|
|
474
|
-
_proto.pay = /*#__PURE__*/function () {
|
|
475
|
-
var _pay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(planCode, input, autoRenew) {
|
|
476
|
-
var _yield$this$client$mu2, pay;
|
|
477
|
-
|
|
478
|
-
return _regeneratorRuntime.wrap(function _callee8$(_context8) {
|
|
479
|
-
while (1) {
|
|
480
|
-
switch (_context8.prev = _context8.next) {
|
|
481
|
-
case 0:
|
|
482
|
-
_context8.next = 2;
|
|
483
|
-
return this.client.mutation({
|
|
484
|
-
pay: [{
|
|
485
|
-
input: input,
|
|
486
|
-
planCode: planCode,
|
|
487
|
-
autoRenew: autoRenew
|
|
488
|
-
}, true]
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
case 2:
|
|
492
|
-
_yield$this$client$mu2 = _context8.sent;
|
|
493
|
-
pay = _yield$this$client$mu2.pay;
|
|
494
|
-
return _context8.abrupt("return", pay != null ? pay : false);
|
|
495
|
-
|
|
496
|
-
case 5:
|
|
497
|
-
case "end":
|
|
498
|
-
return _context8.stop();
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}, _callee8, this);
|
|
502
|
-
}));
|
|
503
|
-
|
|
504
|
-
function pay(_x10, _x11, _x12) {
|
|
505
|
-
return _pay.apply(this, arguments);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
return pay;
|
|
509
|
-
}();
|
|
510
|
-
|
|
511
|
-
_proto.cancelPayment = /*#__PURE__*/function () {
|
|
512
|
-
var _cancelPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
|
|
513
|
-
var _yield$this$client$mu3, cancelPayment;
|
|
514
|
-
|
|
515
|
-
return _regeneratorRuntime.wrap(function _callee9$(_context9) {
|
|
516
|
-
while (1) {
|
|
517
|
-
switch (_context9.prev = _context9.next) {
|
|
518
|
-
case 0:
|
|
519
|
-
_context9.next = 2;
|
|
520
|
-
return this.client.mutation({
|
|
521
|
-
cancelPayment: true
|
|
522
|
-
});
|
|
523
|
-
|
|
524
|
-
case 2:
|
|
525
|
-
_yield$this$client$mu3 = _context9.sent;
|
|
526
|
-
cancelPayment = _yield$this$client$mu3.cancelPayment;
|
|
527
|
-
return _context9.abrupt("return", cancelPayment != null ? cancelPayment : false);
|
|
528
|
-
|
|
529
|
-
case 5:
|
|
530
|
-
case "end":
|
|
531
|
-
return _context9.stop();
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
}, _callee9, this);
|
|
535
|
-
}));
|
|
536
|
-
|
|
537
|
-
function cancelPayment() {
|
|
538
|
-
return _cancelPayment.apply(this, arguments);
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
return cancelPayment;
|
|
542
|
-
}();
|
|
543
|
-
|
|
544
|
-
_proto.paymentInfos = /*#__PURE__*/function () {
|
|
545
|
-
var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
|
|
546
|
-
var _yield$this$client$qu, paymentInfos;
|
|
547
|
-
|
|
548
|
-
return _regeneratorRuntime.wrap(function _callee10$(_context10) {
|
|
549
|
-
while (1) {
|
|
550
|
-
switch (_context10.prev = _context10.next) {
|
|
551
|
-
case 0:
|
|
552
|
-
_context10.next = 2;
|
|
553
|
-
return this.client.query({
|
|
554
|
-
paymentInfos: {
|
|
555
|
-
hostedUrl: true,
|
|
556
|
-
currentSubscription: {
|
|
557
|
-
autorenew: true,
|
|
558
|
-
activatedAt: true,
|
|
559
|
-
currentPeriodEndsAt: true,
|
|
560
|
-
currentPeriodStartedAt: true,
|
|
561
|
-
canceledAt: true,
|
|
562
|
-
createdAt: true,
|
|
563
|
-
expiresAt: true,
|
|
564
|
-
pausedAt: true,
|
|
565
|
-
trialEndsAt: true,
|
|
566
|
-
trialStartedAt: true,
|
|
567
|
-
updatedAt: true,
|
|
568
|
-
state: true,
|
|
569
|
-
collectionMethod: true,
|
|
570
|
-
plan: true,
|
|
571
|
-
planCode: true,
|
|
572
|
-
total: true
|
|
573
|
-
},
|
|
574
|
-
invoices: {
|
|
575
|
-
pdf: true,
|
|
576
|
-
date: true,
|
|
577
|
-
due: true,
|
|
578
|
-
status: true,
|
|
579
|
-
total: true,
|
|
580
|
-
name: true,
|
|
581
|
-
currency: true
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
});
|
|
585
|
-
|
|
586
|
-
case 2:
|
|
587
|
-
_yield$this$client$qu = _context10.sent;
|
|
588
|
-
paymentInfos = _yield$this$client$qu.paymentInfos;
|
|
589
|
-
|
|
590
|
-
if (paymentInfos) {
|
|
591
|
-
_context10.next = 6;
|
|
592
|
-
break;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
return _context10.abrupt("return", null);
|
|
596
|
-
|
|
597
|
-
case 6:
|
|
598
|
-
return _context10.abrupt("return", internalToPaymentInfos(paymentInfos));
|
|
599
|
-
|
|
600
|
-
case 7:
|
|
601
|
-
case "end":
|
|
602
|
-
return _context10.stop();
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}, _callee10, this);
|
|
606
|
-
}));
|
|
607
|
-
|
|
608
|
-
function paymentInfos() {
|
|
609
|
-
return _paymentInfos.apply(this, arguments);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
return paymentInfos;
|
|
613
|
-
}();
|
|
614
|
-
|
|
615
|
-
_proto.limits = /*#__PURE__*/function () {
|
|
616
|
-
var _limits = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {
|
|
617
|
-
var _yield$this$client$qu2, limits, cloud, mail;
|
|
618
|
-
|
|
619
|
-
return _regeneratorRuntime.wrap(function _callee11$(_context11) {
|
|
620
|
-
while (1) {
|
|
621
|
-
switch (_context11.prev = _context11.next) {
|
|
622
|
-
case 0:
|
|
623
|
-
_context11.next = 2;
|
|
624
|
-
return this.client.query({
|
|
625
|
-
limits: {
|
|
626
|
-
cloud: {
|
|
627
|
-
size: true,
|
|
628
|
-
maxSize: true,
|
|
629
|
-
count: true,
|
|
630
|
-
maxCount: true
|
|
631
|
-
},
|
|
632
|
-
mail: {
|
|
633
|
-
received: {
|
|
634
|
-
count: true,
|
|
635
|
-
maxCount: true,
|
|
636
|
-
fileCount: true,
|
|
637
|
-
maxFileCount: true,
|
|
638
|
-
fileSize: true,
|
|
639
|
-
maxFileSize: true
|
|
640
|
-
},
|
|
641
|
-
sent: {
|
|
642
|
-
count: true,
|
|
643
|
-
maxCount: true,
|
|
644
|
-
fileCount: true,
|
|
645
|
-
maxFileCount: true,
|
|
646
|
-
fileSize: true,
|
|
647
|
-
maxFileSize: true
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
});
|
|
652
|
-
|
|
653
|
-
case 2:
|
|
654
|
-
_yield$this$client$qu2 = _context11.sent;
|
|
655
|
-
limits = _yield$this$client$qu2.limits;
|
|
656
|
-
|
|
657
|
-
if (limits) {
|
|
658
|
-
_context11.next = 6;
|
|
659
|
-
break;
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
return _context11.abrupt("return", null);
|
|
663
|
-
|
|
664
|
-
case 6:
|
|
665
|
-
cloud = limits.cloud, mail = limits.mail;
|
|
666
|
-
return _context11.abrupt("return", {
|
|
667
|
-
cloud: {
|
|
668
|
-
count: BigInt(cloud.count),
|
|
669
|
-
size: BigInt(cloud.size),
|
|
670
|
-
maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
|
|
671
|
-
maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
|
|
672
|
-
},
|
|
673
|
-
mail: {
|
|
674
|
-
received: {
|
|
675
|
-
count: BigInt(mail.received.count),
|
|
676
|
-
maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
|
|
677
|
-
fileCount: BigInt(mail.received.fileCount),
|
|
678
|
-
maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
|
|
679
|
-
fileSize: BigInt(mail.received.fileSize),
|
|
680
|
-
maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
|
|
681
|
-
},
|
|
682
|
-
sent: {
|
|
683
|
-
count: BigInt(mail.sent.count),
|
|
684
|
-
maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
|
|
685
|
-
fileCount: BigInt(mail.sent.fileCount),
|
|
686
|
-
maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
|
|
687
|
-
fileSize: BigInt(mail.sent.fileSize),
|
|
688
|
-
maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
});
|
|
692
|
-
|
|
693
|
-
case 8:
|
|
694
|
-
case "end":
|
|
695
|
-
return _context11.stop();
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
}, _callee11, this);
|
|
699
|
-
}));
|
|
700
|
-
|
|
701
|
-
function limits() {
|
|
702
|
-
return _limits.apply(this, arguments);
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
return limits;
|
|
706
|
-
}();
|
|
707
|
-
|
|
708
|
-
_proto.godFatherAndChildren = /*#__PURE__*/function () {
|
|
709
|
-
var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
|
|
710
|
-
var _user$godFather;
|
|
711
|
-
|
|
712
|
-
var _yield$this$client$qu3, user;
|
|
713
|
-
|
|
714
|
-
return _regeneratorRuntime.wrap(function _callee12$(_context12) {
|
|
715
|
-
while (1) {
|
|
716
|
-
switch (_context12.prev = _context12.next) {
|
|
717
|
-
case 0:
|
|
718
|
-
_context12.next = 2;
|
|
719
|
-
return this.client.query({
|
|
720
|
-
user: [{}, {
|
|
721
|
-
godChildren: {
|
|
722
|
-
id: true,
|
|
723
|
-
firstname: true,
|
|
724
|
-
lastname: true,
|
|
725
|
-
email: true,
|
|
726
|
-
phone: true
|
|
727
|
-
},
|
|
728
|
-
godFather: {
|
|
729
|
-
id: true,
|
|
730
|
-
firstname: true,
|
|
731
|
-
lastname: true,
|
|
732
|
-
email: true,
|
|
733
|
-
phone: true
|
|
734
|
-
}
|
|
735
|
-
}]
|
|
736
|
-
});
|
|
737
|
-
|
|
738
|
-
case 2:
|
|
739
|
-
_yield$this$client$qu3 = _context12.sent;
|
|
740
|
-
user = _yield$this$client$qu3.user;
|
|
741
|
-
|
|
742
|
-
if (user) {
|
|
743
|
-
_context12.next = 6;
|
|
744
|
-
break;
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
return _context12.abrupt("return", null);
|
|
748
|
-
|
|
749
|
-
case 6:
|
|
750
|
-
return _context12.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
|
|
751
|
-
godFather: (_user$godFather = user.godFather) != null ? _user$godFather : null
|
|
752
|
-
}));
|
|
753
|
-
|
|
754
|
-
case 7:
|
|
755
|
-
case "end":
|
|
756
|
-
return _context12.stop();
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
}, _callee12, this);
|
|
760
|
-
}));
|
|
761
|
-
|
|
762
|
-
function godFatherAndChildren() {
|
|
763
|
-
return _godFatherAndChildren.apply(this, arguments);
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
return godFatherAndChildren;
|
|
767
|
-
}();
|
|
768
|
-
|
|
769
|
-
BaseClient.updateAppDBConfig = /*#__PURE__*/function () {
|
|
770
|
-
var _updateAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref2) {
|
|
771
|
-
var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfig;
|
|
772
|
-
|
|
773
|
-
return _regeneratorRuntime.wrap(function _callee13$(_context13) {
|
|
774
|
-
while (1) {
|
|
775
|
-
switch (_context13.prev = _context13.next) {
|
|
776
|
-
case 0:
|
|
777
|
-
appCode = _ref2.appCode, config = _ref2.config, env = _ref2.env, sessionId = _ref2.sessionId;
|
|
778
|
-
_context13.next = 3;
|
|
779
|
-
return BaseClient._getBaseClient(env, sessionId).mutation({
|
|
780
|
-
dbConfig: [{
|
|
781
|
-
appCode: appCode,
|
|
782
|
-
config: JSON.stringify(config)
|
|
783
|
-
}, true]
|
|
784
|
-
});
|
|
785
|
-
|
|
786
|
-
case 3:
|
|
787
|
-
_yield$BaseClient$_ge2 = _context13.sent;
|
|
788
|
-
dbConfig = _yield$BaseClient$_ge2.dbConfig;
|
|
789
|
-
return _context13.abrupt("return", dbConfig);
|
|
790
|
-
|
|
791
|
-
case 6:
|
|
792
|
-
case "end":
|
|
793
|
-
return _context13.stop();
|
|
794
|
-
}
|
|
795
|
-
}
|
|
796
|
-
}, _callee13);
|
|
797
|
-
}));
|
|
798
|
-
|
|
799
|
-
function updateAppDBConfig(_x13) {
|
|
800
|
-
return _updateAppDBConfig.apply(this, arguments);
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
return updateAppDBConfig;
|
|
804
|
-
}();
|
|
805
|
-
|
|
806
|
-
BaseClient.getAppDBConfig = /*#__PURE__*/function () {
|
|
807
|
-
var _getAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(appCode, env, sessionId) {
|
|
808
|
-
var _yield$BaseClient$_ge3, dbConfig;
|
|
809
|
-
|
|
810
|
-
return _regeneratorRuntime.wrap(function _callee14$(_context14) {
|
|
811
|
-
while (1) {
|
|
812
|
-
switch (_context14.prev = _context14.next) {
|
|
813
|
-
case 0:
|
|
814
|
-
_context14.next = 2;
|
|
815
|
-
return BaseClient._getBaseClient(env, sessionId).query({
|
|
816
|
-
dbConfig: [{
|
|
817
|
-
appCode: appCode
|
|
818
|
-
}, true]
|
|
819
|
-
});
|
|
820
|
-
|
|
821
|
-
case 2:
|
|
822
|
-
_yield$BaseClient$_ge3 = _context14.sent;
|
|
823
|
-
dbConfig = _yield$BaseClient$_ge3.dbConfig;
|
|
824
|
-
return _context14.abrupt("return", dbConfig);
|
|
825
|
-
|
|
826
|
-
case 5:
|
|
827
|
-
case "end":
|
|
828
|
-
return _context14.stop();
|
|
829
|
-
}
|
|
830
|
-
}
|
|
831
|
-
}, _callee14);
|
|
832
|
-
}));
|
|
833
|
-
|
|
834
|
-
function getAppDBConfig(_x14, _x15, _x16) {
|
|
835
|
-
return _getAppDBConfig.apply(this, arguments);
|
|
836
|
-
}
|
|
837
|
-
|
|
838
|
-
return getAppDBConfig;
|
|
839
|
-
}();
|
|
840
|
-
|
|
841
|
-
BaseClient.getFAQ = /*#__PURE__*/function () {
|
|
842
|
-
var _getFAQ = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref3) {
|
|
843
|
-
var lang, env, sessionId, _yield$BaseClient$_ge4, faq;
|
|
844
|
-
|
|
845
|
-
return _regeneratorRuntime.wrap(function _callee15$(_context15) {
|
|
846
|
-
while (1) {
|
|
847
|
-
switch (_context15.prev = _context15.next) {
|
|
848
|
-
case 0:
|
|
849
|
-
lang = _ref3.lang, env = _ref3.env, sessionId = _ref3.sessionId;
|
|
850
|
-
_context15.next = 3;
|
|
851
|
-
return BaseClient._getBaseClient(env, sessionId).query({
|
|
852
|
-
faq: [{
|
|
853
|
-
lang: lang
|
|
854
|
-
}, {
|
|
855
|
-
answer: true,
|
|
856
|
-
order: true,
|
|
857
|
-
question: true
|
|
858
|
-
}]
|
|
859
|
-
});
|
|
860
|
-
|
|
861
|
-
case 3:
|
|
862
|
-
_yield$BaseClient$_ge4 = _context15.sent;
|
|
863
|
-
faq = _yield$BaseClient$_ge4.faq;
|
|
864
|
-
return _context15.abrupt("return", faq);
|
|
865
|
-
|
|
866
|
-
case 6:
|
|
867
|
-
case "end":
|
|
868
|
-
return _context15.stop();
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
}, _callee15);
|
|
872
|
-
}));
|
|
873
|
-
|
|
874
|
-
function getFAQ(_x17) {
|
|
875
|
-
return _getFAQ.apply(this, arguments);
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
return getFAQ;
|
|
879
|
-
}();
|
|
880
|
-
|
|
881
|
-
BaseClient.getBlog = /*#__PURE__*/function () {
|
|
882
|
-
var _getBlog = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(_ref4) {
|
|
883
|
-
var env, lang, sessionId, _yield$BaseClient$_ge5, blog;
|
|
884
|
-
|
|
885
|
-
return _regeneratorRuntime.wrap(function _callee16$(_context16) {
|
|
886
|
-
while (1) {
|
|
887
|
-
switch (_context16.prev = _context16.next) {
|
|
888
|
-
case 0:
|
|
889
|
-
env = _ref4.env, lang = _ref4.lang, sessionId = _ref4.sessionId;
|
|
890
|
-
_context16.next = 3;
|
|
891
|
-
return BaseClient._getBaseClient(env, sessionId).query({
|
|
892
|
-
blog: [{
|
|
893
|
-
lang: lang
|
|
894
|
-
}, {
|
|
895
|
-
id: true,
|
|
896
|
-
blogId: true,
|
|
897
|
-
author: true,
|
|
898
|
-
body: true,
|
|
899
|
-
date: true,
|
|
900
|
-
image: true,
|
|
901
|
-
imageAlt: true,
|
|
902
|
-
summary: true,
|
|
903
|
-
title: true,
|
|
904
|
-
order: true
|
|
905
|
-
}]
|
|
906
|
-
});
|
|
907
|
-
|
|
908
|
-
case 3:
|
|
909
|
-
_yield$BaseClient$_ge5 = _context16.sent;
|
|
910
|
-
blog = _yield$BaseClient$_ge5.blog;
|
|
911
|
-
return _context16.abrupt("return", blog.map(function (b) {
|
|
912
|
-
return _objectSpread(_objectSpread({}, b), {}, {
|
|
913
|
-
date: new Date(b.date)
|
|
914
|
-
});
|
|
915
|
-
}));
|
|
916
|
-
|
|
917
|
-
case 6:
|
|
918
|
-
case "end":
|
|
919
|
-
return _context16.stop();
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
}, _callee16);
|
|
923
|
-
}));
|
|
924
|
-
|
|
925
|
-
function getBlog(_x18) {
|
|
926
|
-
return _getBlog.apply(this, arguments);
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
return getBlog;
|
|
930
|
-
}();
|
|
931
|
-
|
|
932
|
-
_proto.reportUser = /*#__PURE__*/function () {
|
|
933
|
-
var _reportUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(reportedUserId, customMessage) {
|
|
934
|
-
var _yield$this$client$mu4, sendReport;
|
|
935
|
-
|
|
936
|
-
return _regeneratorRuntime.wrap(function _callee17$(_context17) {
|
|
937
|
-
while (1) {
|
|
938
|
-
switch (_context17.prev = _context17.next) {
|
|
939
|
-
case 0:
|
|
940
|
-
_context17.next = 2;
|
|
941
|
-
return this.client.mutation({
|
|
942
|
-
sendReport: [{
|
|
943
|
-
reportedUserId: reportedUserId,
|
|
944
|
-
customMessage: customMessage
|
|
945
|
-
}, {
|
|
946
|
-
id: true,
|
|
947
|
-
customMessage: true,
|
|
948
|
-
user: {
|
|
949
|
-
id: true,
|
|
950
|
-
firstname: true,
|
|
951
|
-
lastname: true,
|
|
952
|
-
email: true
|
|
953
|
-
},
|
|
954
|
-
reportedUser: {
|
|
955
|
-
id: true,
|
|
956
|
-
firstname: true,
|
|
957
|
-
lastname: true,
|
|
958
|
-
email: true
|
|
959
|
-
}
|
|
960
|
-
}]
|
|
961
|
-
});
|
|
962
|
-
|
|
963
|
-
case 2:
|
|
964
|
-
_yield$this$client$mu4 = _context17.sent;
|
|
965
|
-
sendReport = _yield$this$client$mu4.sendReport;
|
|
966
|
-
return _context17.abrupt("return", sendReport);
|
|
967
|
-
|
|
968
|
-
case 5:
|
|
969
|
-
case "end":
|
|
970
|
-
return _context17.stop();
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
}, _callee17, this);
|
|
974
|
-
}));
|
|
975
|
-
|
|
976
|
-
function reportUser(_x19, _x20) {
|
|
977
|
-
return _reportUser.apply(this, arguments);
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
return reportUser;
|
|
981
|
-
}();
|
|
982
|
-
|
|
983
|
-
BaseClient.deleteUser = /*#__PURE__*/function () {
|
|
984
|
-
var _deleteUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref5) {
|
|
985
|
-
var sessionId, userId, env, _yield$BaseClient$_ge6, deleteUser;
|
|
986
|
-
|
|
987
|
-
return _regeneratorRuntime.wrap(function _callee18$(_context18) {
|
|
988
|
-
while (1) {
|
|
989
|
-
switch (_context18.prev = _context18.next) {
|
|
990
|
-
case 0:
|
|
991
|
-
sessionId = _ref5.sessionId, userId = _ref5.userId, env = _ref5.env;
|
|
992
|
-
_context18.next = 3;
|
|
993
|
-
return BaseClient._getBaseClient(env, sessionId).mutation({
|
|
994
|
-
deleteUser: [{
|
|
995
|
-
userId: userId
|
|
996
|
-
}, true]
|
|
997
|
-
});
|
|
998
|
-
|
|
999
|
-
case 3:
|
|
1000
|
-
_yield$BaseClient$_ge6 = _context18.sent;
|
|
1001
|
-
deleteUser = _yield$BaseClient$_ge6.deleteUser;
|
|
1002
|
-
return _context18.abrupt("return", deleteUser != null ? deleteUser : false);
|
|
1003
|
-
|
|
1004
|
-
case 6:
|
|
1005
|
-
case "end":
|
|
1006
|
-
return _context18.stop();
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
}, _callee18);
|
|
1010
|
-
}));
|
|
1011
|
-
|
|
1012
|
-
function deleteUser(_x21) {
|
|
1013
|
-
return _deleteUser.apply(this, arguments);
|
|
1014
|
-
}
|
|
1015
|
-
|
|
1016
|
-
return deleteUser;
|
|
1017
|
-
}();
|
|
1018
|
-
|
|
1019
|
-
_proto.dbGet = /*#__PURE__*/function () {
|
|
1020
|
-
var _dbGet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19(_ref6) {
|
|
1021
|
-
var field, userId, _yield$this$client$qu4, dbGet;
|
|
1022
|
-
|
|
1023
|
-
return _regeneratorRuntime.wrap(function _callee19$(_context19) {
|
|
1024
|
-
while (1) {
|
|
1025
|
-
switch (_context19.prev = _context19.next) {
|
|
1026
|
-
case 0:
|
|
1027
|
-
field = _ref6.field, userId = _ref6.userId;
|
|
1028
|
-
_context19.next = 3;
|
|
1029
|
-
return this.client.query({
|
|
1030
|
-
dbGet: [{
|
|
1031
|
-
field: field,
|
|
1032
|
-
userId: userId
|
|
1033
|
-
}, true]
|
|
1034
|
-
});
|
|
1035
|
-
|
|
1036
|
-
case 3:
|
|
1037
|
-
_yield$this$client$qu4 = _context19.sent;
|
|
1038
|
-
dbGet = _yield$this$client$qu4.dbGet;
|
|
1039
|
-
return _context19.abrupt("return", dbGet.res);
|
|
1040
|
-
|
|
1041
|
-
case 6:
|
|
1042
|
-
case "end":
|
|
1043
|
-
return _context19.stop();
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1046
|
-
}, _callee19, this);
|
|
1047
|
-
}));
|
|
1048
|
-
|
|
1049
|
-
function dbGet(_x22) {
|
|
1050
|
-
return _dbGet.apply(this, arguments);
|
|
1051
|
-
}
|
|
1052
|
-
|
|
1053
|
-
return dbGet;
|
|
1054
|
-
}();
|
|
1055
|
-
|
|
1056
|
-
_proto.dbSet = /*#__PURE__*/function () {
|
|
1057
|
-
var _dbSet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(_ref7) {
|
|
1058
|
-
var value, userId, _yield$this$client$mu5, dbSet;
|
|
1059
|
-
|
|
1060
|
-
return _regeneratorRuntime.wrap(function _callee20$(_context20) {
|
|
1061
|
-
while (1) {
|
|
1062
|
-
switch (_context20.prev = _context20.next) {
|
|
1063
|
-
case 0:
|
|
1064
|
-
value = _ref7.value, userId = _ref7.userId;
|
|
1065
|
-
|
|
1066
|
-
if (!(typeof value !== "object")) {
|
|
1067
|
-
_context20.next = 3;
|
|
1068
|
-
break;
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
throw new Error("value should be an object including fields you want to update.");
|
|
1072
|
-
|
|
1073
|
-
case 3:
|
|
1074
|
-
_context20.next = 5;
|
|
1075
|
-
return this.client.mutation({
|
|
1076
|
-
dbSet: [{
|
|
1077
|
-
userId: userId,
|
|
1078
|
-
value: serialize(value).toString("base64")
|
|
1079
|
-
}, true]
|
|
1080
|
-
});
|
|
1081
|
-
|
|
1082
|
-
case 5:
|
|
1083
|
-
_yield$this$client$mu5 = _context20.sent;
|
|
1084
|
-
dbSet = _yield$this$client$mu5.dbSet;
|
|
1085
|
-
return _context20.abrupt("return", dbSet.res);
|
|
1086
|
-
|
|
1087
|
-
case 8:
|
|
1088
|
-
case "end":
|
|
1089
|
-
return _context20.stop();
|
|
1090
|
-
}
|
|
1091
|
-
}
|
|
1092
|
-
}, _callee20, this);
|
|
1093
|
-
}));
|
|
1094
|
-
|
|
1095
|
-
function dbSet(_x23) {
|
|
1096
|
-
return _dbSet.apply(this, arguments);
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
|
-
return dbSet;
|
|
1100
|
-
}();
|
|
1101
|
-
|
|
1102
|
-
_proto.dbSearch = /*#__PURE__*/function () {
|
|
1103
|
-
var _dbSearch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref8) {
|
|
1104
|
-
var search, field, _yield$this$client$qu5, dbSearch;
|
|
1105
|
-
|
|
1106
|
-
return _regeneratorRuntime.wrap(function _callee21$(_context21) {
|
|
1107
|
-
while (1) {
|
|
1108
|
-
switch (_context21.prev = _context21.next) {
|
|
1109
|
-
case 0:
|
|
1110
|
-
search = _ref8.search, field = _ref8.field;
|
|
1111
|
-
_context21.next = 3;
|
|
1112
|
-
return this.client.query({
|
|
1113
|
-
dbSearch: [{
|
|
1114
|
-
search: search,
|
|
1115
|
-
field: field
|
|
1116
|
-
}, true]
|
|
1117
|
-
});
|
|
1118
|
-
|
|
1119
|
-
case 3:
|
|
1120
|
-
_yield$this$client$qu5 = _context21.sent;
|
|
1121
|
-
dbSearch = _yield$this$client$qu5.dbSearch;
|
|
1122
|
-
return _context21.abrupt("return", dbSearch);
|
|
1123
|
-
|
|
1124
|
-
case 6:
|
|
1125
|
-
case "end":
|
|
1126
|
-
return _context21.stop();
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
}, _callee21, this);
|
|
1130
|
-
}));
|
|
1131
|
-
|
|
1132
|
-
function dbSearch(_x24) {
|
|
1133
|
-
return _dbSearch.apply(this, arguments);
|
|
1134
|
-
}
|
|
1135
|
-
|
|
1136
|
-
return dbSearch;
|
|
1137
|
-
}();
|
|
1138
|
-
|
|
1139
|
-
_proto.deleteFolder = /*#__PURE__*/function () {
|
|
1140
|
-
var _deleteFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(_ref9) {
|
|
1141
|
-
var id, _yield$this$client$mu6, deleteFolder;
|
|
1142
|
-
|
|
1143
|
-
return _regeneratorRuntime.wrap(function _callee22$(_context22) {
|
|
1144
|
-
while (1) {
|
|
1145
|
-
switch (_context22.prev = _context22.next) {
|
|
1146
|
-
case 0:
|
|
1147
|
-
id = _ref9.id;
|
|
1148
|
-
_context22.next = 3;
|
|
1149
|
-
return this.client.mutation({
|
|
1150
|
-
deleteFolder: [{
|
|
1151
|
-
id: id
|
|
1152
|
-
}, true]
|
|
1153
|
-
});
|
|
1154
|
-
|
|
1155
|
-
case 3:
|
|
1156
|
-
_yield$this$client$mu6 = _context22.sent;
|
|
1157
|
-
deleteFolder = _yield$this$client$mu6.deleteFolder;
|
|
1158
|
-
return _context22.abrupt("return", deleteFolder != null ? deleteFolder : false);
|
|
1159
|
-
|
|
1160
|
-
case 6:
|
|
1161
|
-
case "end":
|
|
1162
|
-
return _context22.stop();
|
|
1163
|
-
}
|
|
1164
|
-
}
|
|
1165
|
-
}, _callee22, this);
|
|
1166
|
-
}));
|
|
1167
|
-
|
|
1168
|
-
function deleteFolder(_x25) {
|
|
1169
|
-
return _deleteFolder.apply(this, arguments);
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
|
-
return deleteFolder;
|
|
1173
|
-
}();
|
|
1174
|
-
|
|
1175
|
-
_proto.moveFolders = /*#__PURE__*/function () {
|
|
1176
|
-
var _moveFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref10) {
|
|
1177
|
-
var foldersId, parentFolderId, _yield$this$client$mu7, moveFolders;
|
|
1178
|
-
|
|
1179
|
-
return _regeneratorRuntime.wrap(function _callee23$(_context23) {
|
|
1180
|
-
while (1) {
|
|
1181
|
-
switch (_context23.prev = _context23.next) {
|
|
1182
|
-
case 0:
|
|
1183
|
-
foldersId = _ref10.foldersId, parentFolderId = _ref10.parentFolderId;
|
|
1184
|
-
_context23.next = 3;
|
|
1185
|
-
return this.client.mutation({
|
|
1186
|
-
moveFolders: [{
|
|
1187
|
-
foldersId: foldersId,
|
|
1188
|
-
parentFolderId: parentFolderId
|
|
1189
|
-
}, true]
|
|
1190
|
-
});
|
|
1191
|
-
|
|
1192
|
-
case 3:
|
|
1193
|
-
_yield$this$client$mu7 = _context23.sent;
|
|
1194
|
-
moveFolders = _yield$this$client$mu7.moveFolders;
|
|
1195
|
-
return _context23.abrupt("return", moveFolders != null ? moveFolders : false);
|
|
1196
|
-
|
|
1197
|
-
case 6:
|
|
1198
|
-
case "end":
|
|
1199
|
-
return _context23.stop();
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1202
|
-
}, _callee23, this);
|
|
1203
|
-
}));
|
|
1204
|
-
|
|
1205
|
-
function moveFolders(_x26) {
|
|
1206
|
-
return _moveFolders.apply(this, arguments);
|
|
1207
|
-
}
|
|
1208
|
-
|
|
1209
|
-
return moveFolders;
|
|
1210
|
-
}();
|
|
1211
|
-
|
|
1212
|
-
_proto.moveFiles = /*#__PURE__*/function () {
|
|
1213
|
-
var _moveFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref11) {
|
|
1214
|
-
var filesId, parentFolderId, _yield$this$client$mu8, moveFiles;
|
|
1215
|
-
|
|
1216
|
-
return _regeneratorRuntime.wrap(function _callee24$(_context24) {
|
|
1217
|
-
while (1) {
|
|
1218
|
-
switch (_context24.prev = _context24.next) {
|
|
1219
|
-
case 0:
|
|
1220
|
-
filesId = _ref11.filesId, parentFolderId = _ref11.parentFolderId;
|
|
1221
|
-
_context24.next = 3;
|
|
1222
|
-
return this.client.mutation({
|
|
1223
|
-
moveFiles: [{
|
|
1224
|
-
filesId: filesId,
|
|
1225
|
-
parentFolderId: parentFolderId
|
|
1226
|
-
}, true]
|
|
1227
|
-
});
|
|
1228
|
-
|
|
1229
|
-
case 3:
|
|
1230
|
-
_yield$this$client$mu8 = _context24.sent;
|
|
1231
|
-
moveFiles = _yield$this$client$mu8.moveFiles;
|
|
1232
|
-
return _context24.abrupt("return", moveFiles != null ? moveFiles : false);
|
|
1233
|
-
|
|
1234
|
-
case 6:
|
|
1235
|
-
case "end":
|
|
1236
|
-
return _context24.stop();
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
}, _callee24, this);
|
|
1240
|
-
}));
|
|
1241
|
-
|
|
1242
|
-
function moveFiles(_x27) {
|
|
1243
|
-
return _moveFiles.apply(this, arguments);
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
return moveFiles;
|
|
1247
|
-
}();
|
|
1248
|
-
|
|
1249
|
-
_proto.folderSize = /*#__PURE__*/function () {
|
|
1250
|
-
var _folderSize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref12) {
|
|
1251
|
-
var folderId, _yield$this$client$qu6, folderSize;
|
|
1252
|
-
|
|
1253
|
-
return _regeneratorRuntime.wrap(function _callee25$(_context25) {
|
|
1254
|
-
while (1) {
|
|
1255
|
-
switch (_context25.prev = _context25.next) {
|
|
1256
|
-
case 0:
|
|
1257
|
-
folderId = _ref12.folderId;
|
|
1258
|
-
_context25.next = 3;
|
|
1259
|
-
return this.client.query({
|
|
1260
|
-
folderSize: [{
|
|
1261
|
-
folderId: folderId
|
|
1262
|
-
}, {
|
|
1263
|
-
size: true,
|
|
1264
|
-
sizeBefore: true
|
|
1265
|
-
}]
|
|
1266
|
-
});
|
|
1267
|
-
|
|
1268
|
-
case 3:
|
|
1269
|
-
_yield$this$client$qu6 = _context25.sent;
|
|
1270
|
-
folderSize = _yield$this$client$qu6.folderSize;
|
|
1271
|
-
|
|
1272
|
-
if (folderSize) {
|
|
1273
|
-
_context25.next = 7;
|
|
1274
|
-
break;
|
|
1275
|
-
}
|
|
1276
|
-
|
|
1277
|
-
return _context25.abrupt("return", null);
|
|
1278
|
-
|
|
1279
|
-
case 7:
|
|
1280
|
-
return _context25.abrupt("return", {
|
|
1281
|
-
size: BigInt(folderSize.size),
|
|
1282
|
-
sizeBefore: BigInt(folderSize.sizeBefore)
|
|
1283
|
-
});
|
|
1284
|
-
|
|
1285
|
-
case 8:
|
|
1286
|
-
case "end":
|
|
1287
|
-
return _context25.stop();
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
}, _callee25, this);
|
|
1291
|
-
}));
|
|
1292
|
-
|
|
1293
|
-
function folderSize(_x28) {
|
|
1294
|
-
return _folderSize.apply(this, arguments);
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
|
-
return folderSize;
|
|
1298
|
-
}();
|
|
1299
|
-
|
|
1300
|
-
return BaseClient;
|
|
1301
|
-
}();
|
|
1302
|
-
|
|
1303
|
-
BaseClient.getBaseUrl = function (env, graphcdn) {
|
|
1304
|
-
if (env === void 0) {
|
|
1305
|
-
env = "prod";
|
|
1306
|
-
}
|
|
1307
|
-
|
|
1308
|
-
if (graphcdn === void 0) {
|
|
1309
|
-
graphcdn = true;
|
|
1310
|
-
}
|
|
1311
|
-
|
|
1312
|
-
if (process.env.NODE_ENV === "test") {
|
|
1313
|
-
return "http://localhost:4000/graphql";
|
|
1314
|
-
}
|
|
1315
|
-
|
|
1316
|
-
switch (env) {
|
|
1317
|
-
case "prod":
|
|
1318
|
-
return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
|
|
1319
|
-
|
|
1320
|
-
case "staging":
|
|
1321
|
-
return "https://api.staging.secrecy.me/graphql";
|
|
1322
|
-
|
|
1323
|
-
case "dev":
|
|
1324
|
-
default:
|
|
1325
|
-
return "https://api.dev.secrecy.me/graphql";
|
|
1326
|
-
}
|
|
1327
|
-
};
|
|
1328
|
-
|
|
1329
|
-
BaseClient._getBaseClient = function (env, session) {
|
|
1330
|
-
return createThunder(BaseClient.getBaseUrl(env), session);
|
|
1331
|
-
};
|
|
1332
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsInVzZXJzQ2FjaGUiLCJnZXRTdG9yYWdlIiwiU2VsZWN0b3JzIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInF1ZXJ5IiwidXNlciIsImlkIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJsYW5nIiwicHVibGljS2V5IiwidW5kZWZpbmVkIiwiZW1haWwiLCJwaG9uZSIsInJvbGUiLCJkZWxldGVkQXQiLCJsYXN0TG9naW4iLCJnZXRVc2VyIiwicGFyYW1zIiwic2VsZWN0b3IiLCJjbGllbnQiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsImRhdGEiLCJzIiwiYSIsImxvZ291dCIsImxvY2FsIiwiand0IiwiY2xlYXIiLCJ1c2VyQXBwS2V5cyIsInVzZXJBcHBTZXNzaW9uIiwibXV0YXRpb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJFcnJvciIsInBsYW5zIiwia2luZCIsImNvZGVzIiwibGltaXRzIiwiZG93bmxvYWRCYW5kd2lkdGgiLCJkb3dubG9hZENvdW50IiwiaGFyZEZpbGVDb3VudCIsImhhcmRGaWxlU2l6ZSIsInBlckZpbGVTaXplIiwidXBsb2FkQmFuZHdpZHRoIiwidXBsb2FkQ291bnQiLCJyZWNlaXZlZE1haWxzIiwiY291bnQiLCJmaWxlQ291bnQiLCJmaWxlU2l6ZSIsImhhcmRDb3VudCIsInNlbnRNYWlscyIsInBheSIsImlucHV0IiwiYXV0b1JlbmV3IiwiY2FuY2VsUGF5bWVudCIsInBheW1lbnRJbmZvcyIsImhvc3RlZFVybCIsImF1dG9yZW5ldyIsInBsYW4iLCJ0b3RhbCIsInBkZiIsImN1cnJlbmN5IiwiY2xvdWQiLCJzaXplIiwibWF4U2l6ZSIsIm1heENvdW50IiwibWFpbCIsInJlY2VpdmVkIiwibWF4RmlsZUNvdW50IiwibWF4RmlsZVNpemUiLCJzZW50IiwiQmlnSW50IiwiZ29kRmF0aGVyQW5kQ2hpbGRyZW4iLCJnb2RDaGlsZHJlbiIsImdvZEZhdGhlciIsInVwZGF0ZUFwcERCQ29uZmlnIiwiYXBwQ29kZSIsImNvbmZpZyIsImRiQ29uZmlnIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJmaWVsZCIsInJlcyIsImRiU2V0IiwidmFsdWUiLCJ0b1N0cmluZyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwicHJvY2VzcyIsIk5PREVfRU5WIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBLFNBQVNBLFNBQVQsUUFBMEIsTUFBMUI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLFlBQTNCO0FBR0EsU0FBU0MsVUFBVCxRQUEyQixxQkFBM0I7QUFRQSxTQUFTQyxTQUFULFFBQTBCLGlCQUExQjtBQUNBLFNBQVNDLGFBQVQsUUFBOEIsa0JBQTlCOztBQXlLQSxTQUFTQyxzQkFBVCxDQUFnQ0MsQ0FBaEMsRUFBdUU7QUFDckUseUNBQ0tBLENBREw7QUFFRUMsSUFBQUEsbUJBQW1CLGtDQUNkRCxDQUFDLENBQUNDLG1CQURZO0FBRWpCQyxNQUFBQSxLQUFLLEVBQUVGLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JDLEtBRlo7QUFHakJDLE1BQUFBLGdCQUFnQixFQUFFSCxDQUFDLENBQUNDLG1CQUFGLENBQ2ZFLGdCQUpjO0FBS2pCQyxNQUFBQSxXQUFXLEVBQUVKLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQXRCLEdBQ1QsSUFBSUMsSUFBSixDQUFTTCxDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUEvQixDQURTLEdBRVQsSUFQYTtBQVFqQkUsTUFBQUEsU0FBUyxFQUFFTixDQUFDLENBQUNDLG1CQUFGLENBQXNCSyxTQUF0QixHQUNQLElBQUlELElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBL0IsQ0FETyxHQUVQLElBVmE7QUFXakJDLE1BQUFBLFNBQVMsRUFBRVAsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQk0sU0FBdEIsR0FDUCxJQUFJRixJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JNLFNBQS9CLENBRE8sR0FFUCxJQWJhO0FBY2pCQyxNQUFBQSxXQUFXLEVBQUVSLENB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QlcsSUFsQlg7O0FBQUE7QUFBQSxpREFxQlM7QUFDTHRELGdCQUFBQSxJQUFJLEVBQUVRLE1BQU0sQ0FBQzhDLFVBQVUsQ0FBQ3RELElBQVosQ0FEUDtBQUVMd0QsZ0JBQUFBLFVBQVUsRUFBRWhELE1BQU0sQ0FBQzhDLFVBQVUsQ0FBQ0UsVUFBWjtBQUZiLGVBckJUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBL3FCRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFhbEgsVSxDQUNZbUgsVSxHQUFhLFVBQ2xDakgsR0FEa0MsRUFFbENrSCxRQUZrQyxFQUd2QjtBQUFBLE1BRlhsSCxHQUVXO0FBRlhBLElBQUFBLEdBRVcsR0FGTyxNQUVQO0FBQUE7O0FBQUEsTUFEWGtILFFBQ1c7QUFEWEEsSUFBQUEsUUFDVyxHQURBLElBQ0E7QUFBQTs7QUFDWCxNQUFJQyxPQUFPLENBQUNuSCxHQUFSLENBQVlvSCxRQUFaLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DLFdBQU8sK0JBQVA7QUFDRDs7QUFFRCxVQUFRcEgsR0FBUjtBQUNFLFNBQUssTUFBTDtBQUNFLGFBQU9rSCxRQUFRLEdBQ1gsOEJBRFcsR0FFWCxnQ0FGSjs7QUFHRixTQUFLLFNBQUw7QUFDRSxhQUFPLHdDQUFQOztBQUNGLFNBQUssS0FBTDtBQUNBO0FBQ0UsYUFBTyxvQ0FBUDtBQVRKO0FBV0QsQzs7QUFwQlVwSCxVLENBc0JhSSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Q2hELGFBQWEsQ0FBQytDLFVBQVUsQ0FBQ21ILFVBQVgsQ0FBc0JqSCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgYXMgRExQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9ycyB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRodW5kZXIgfSBmcm9tIFwiLi9aZXVzVGh1bmRlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9ycy5xdWVyeSh7XG4gICAgdXNlcjogW1xuICAgICAgeyB1c2VySWQgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgIHB1YmxpY0tleTogd2l0aFB1YmxpY0tleSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICByZXR1cm4gdXNlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCI7XG4gIGlzQXJyYXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc051bGxhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzS2V5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZyA9IHtcbiAgZmllbGRzOiBBcHBEQkNvbmZpZ0ZpZWxkW107XG59O1xuXG5leHBvcnQgdHlwZSBGYXFJdGVtID0ge1xuICBvcmRlcjogbnVtYmVyO1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBhbnN3ZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEJsb2dJdGVtID0ge1xuICBpZDogc3RyaW5nO1xuICBibG9nSWQ6IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgaW1hZ2U6IHN0cmluZztcbiAgaW1hZ2VBbHQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckJhc2UgPSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IFVzZXJSb2xlO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVsZXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbGFzdExvZ2luOiBEYXRlO1xuICBsYW5nOiBMYW5nO1xufTtcblxudHlwZSBXaXRoUHVibGljS2V5ID0geyB3aXRoUHVibGljS2V5PzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBVc2VyPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4gPSBUIGV4dGVuZHMge1xuICB3aXRoUHVibGljS2V5OiB0cnVlO1xufVxuICA/IFVzZXJCYXNlICYgeyBwdWJsaWNLZXk6IHN0cmluZyB9XG4gIDogVXNlckJhc2U7XG5cbnR5cGUgQ2xhc3NHZXRVc2VyUGFyYW1zID0gV2l0aFB1YmxpY0tleSAmIHtcbiAgdXNlcklkPzogc3RyaW5nO1xufTtcbnR5cGUgR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcbn07XG5cbnR5cGUgU3RhdGljR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgZW52OiBTZWNyZWN5RW52O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcjxVIGV4dGVuZHMgV2l0aFB1YmxpY0tleT4oXG4gIHBhcmFtczogR2V0VXNlclBhcmFtc1xuKTogUHJvbWlzZTxVc2VyPFU+IHwgbnVsbD4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFVzZXJTZWxlY3RvcihwYXJhbXMudXNlcklkLCBwYXJhbXMud2l0aFB1YmxpY0tleSk7XG4gIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgcGFyYW1zLmNsaWVudC5xdWVyeSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyLmxhc3RMb2dpbiksXG4gICAgZGVsZXRlZEF0OiB1c2VyLmRlbGV0ZWRBdCA/IG5ldyBEYXRlKHVzZXIuZGVsZXRlZEF0KSA6IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9ncmFwaHFsXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwic3RhZ2luZ1wiOlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5zdGFnaW5nLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy5jbGllbnQgPSBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBzZXNzaW9ucygpOiBQcm9taXNlPFVzZXJTZXNzaW9uW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHNlc3Npb25zOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICBhcHBTZXNzaW9uczoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICB1c2VyQXBwOiB7XG4gICAgICAgICAgICAgICAgYXBwOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXNzaW9uczogVXNlclNlc3Npb25bXSA9XG4gICAgICBkYXRhLnVzZXI/LnNlc3Npb25zLm1hcChzID0+ICh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBpcDogcy5pcCxcbiAgICAgICAgY2l0eTogcy5jaXR5LFxuICAgICAgICBjb3VudHJ5OiBzLmNvdW50cnksXG4gICAgICAgIGxhc3RBY3Rpdml0eTogcy5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShzLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXJBZ2VudDogcy51c2VyQWdlbnQsXG4gICAgICAgIGFwcFNlc3Npb25zOiBzLmFwcFNlc3Npb25zLm1hcChhID0+ICh7XG4gICAgICAgICAgaWQ6IGEuaWQsXG4gICAgICAgICAgaXA6IGEuaXAsXG4gICAgICAgICAgY2l0eTogYS5jaXR5LFxuICAgICAgICAgIGNvdW50cnk6IGEuY291bnRyeSxcbiAgICAgICAgICBsYXN0QWN0aXZpdHk6IGEubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUoYS5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHVzZXJBZ2VudDogYS51c2VyQWdlbnQsXG4gICAgICAgICAgYXBwOiBhLnVzZXJBcHA/LmFwcC5uYW1lID8/IFwiXCJcbiAgICAgICAgfSkpXG4gICAgICB9KSkgPz8gW107XG5cbiAgICByZXR1cm4gc2Vzc2lvbnM7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zdCBsb2NhbCA9IGdldFN0b3JhZ2UoZmFsc2UpO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGdldFN0b3JhZ2UodHJ1ZSk7XG4gICAgICBsb2NhbC5qd3QuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi5qd3QuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHVzZXJzQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgbG9nb3V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbklkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy9cbiAgICB9XG4gIH1cblxuICBhc3luYyBtZTxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+KFxuICAgIHBhcmFtcz86IFRcbiAgKTogUHJvbWlzZTxVc2VyPFQ+IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIocGFyYW1zIHx8ICh7IHdpdGhQdWJsaWNLZXk6IHRydWUgfSBhcyBUKSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXNlcjxUIGV4dGVuZHMgU3RhdGljR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBULFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxVc2VyPFQ+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5fZ2V0QmFzZUNsaWVudChwYXJhbXMuZW52LCBzZXNzaW9uSWQpLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkXG4gICAgfSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5pZCwgdXNlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KHBhcmFtczogVCk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmlkLCB1c2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFVzZXI+IHtcbiAgICBjb25zdCB7IHVwZGF0ZVByb2ZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZVByb2ZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpcnN0bmFtZSxcbiAgICAgICAgICBsYXN0bmFtZSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlUHJvZmlsZSxcbiAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXBkYXRlUHJvZmlsZS5sYXN0TG9naW4pLFxuICAgICAgZGVsZXRlZEF0OiB1cGRhdGVQcm9maWxlLmRlbGV0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0KVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBsYW5zKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8UGxhbltdPiB7XG4gICAgY29uc3QgeyBwbGFucyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkucXVlcnkoe1xuICAgICAgcGxhbnM6IHtcbiAgICAgICAga2luZDogdHJ1ZSxcbiAgICAgICAgY29kZXM6IHRydWUsXG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgIGRvd25sb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgIGRvd25sb2FkQ291bnQ6IHRydWUsXG4gICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgcGVyRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgdXBsb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgIHVwbG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbnRNYWlsczoge1xuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBsYW5zO1xuICB9XG5cbiAgYXN5bmMgcGF5KFxuICAgIHBsYW5Db2RlOiBTZWNyZWN5UGxhbnNDb2RlcyxcbiAgICBpbnB1dDogUGF5SW5wdXQsXG4gICAgYXV0b1JlbmV3PzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBwYXkgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXkgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjYW5jZWxQYXltZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgY2FuY2VsUGF5bWVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgY2FuY2VsUGF5bWVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhbmNlbFBheW1lbnQgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBwYXltZW50SW5mb3MoKTogUHJvbWlzZTxQYXltZW50SW5mb3MgfCBudWxsPiB7XG4gICAgY29uc3QgeyBwYXltZW50SW5mb3MgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICBob3N0ZWRVcmw6IHRydWUsXG4gICAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgICAgICBhdXRvcmVuZXc6IHRydWUsXG4gICAgICAgICAgYWN0aXZhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0OiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGVkQXQ6IHRydWUsXG4gICAgICAgICAgY3JlYXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGV4cGlyZXNBdDogdHJ1ZSxcbiAgICAgICAgICBwYXVzZWRBdDogdHJ1ZSxcbiAgICAgICAgICB0cmlhbEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICB0cmlhbFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgY29sbGVjdGlvbk1ldGhvZDogdHJ1ZSxcbiAgICAgICAgICBwbGFuOiB0cnVlLFxuICAgICAgICAgIHBsYW5Db2RlOiB0cnVlLFxuXG4gICAgICAgICAgdG90YWw6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgaW52b2ljZXM6IHtcbiAgICAgICAgICBwZGY6IHRydWUsXG4gICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICBkdWU6IHRydWUsXG4gICAgICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgICAgIHRvdGFsOiB0cnVlLFxuICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgY3VycmVuY3k6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHBheW1lbnRJbmZvcyk7XG4gIH1cblxuICBhc3luYyBsaW1pdHMoKTogUHJvbWlzZTxRdWVyeUxpbWl0cyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgbGltaXRzOiB7XG4gICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1haWw6IHtcbiAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWxpbWl0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjbG91ZCwgbWFpbCB9ID0gbGltaXRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3VkOiB7XG4gICAgICAgIGNvdW50OiBCaWdJbnQoY2xvdWQuY291bnQpLFxuICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgIG1heENvdW50OiBjbG91ZC5tYXhDb3VudCA/IEJpZ0ludChjbG91ZC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICBtYXhTaXplOiBjbG91ZC5tYXhTaXplID8gQmlnSW50KGNsb3VkLm1heFNpemUpIDogbnVsbFxuICAgICAgfSxcbiAgICAgIG1haWw6IHtcbiAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgIG1heENvdW50OiBtYWlsLnJlY2VpdmVkLm1heENvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heENvdW50KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwuc2VudC5jb3VudCksXG4gICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnNlbnQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwuc2VudC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnNlbnQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdvZEZhdGhlckFuZENoaWxkcmVuKCk6IFByb21pc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4gfCBudWxsPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgZ29kQ2hpbGRyZW46IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnb2RGYXRoZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi51c2VyLFxuICAgICAgZ29kRmF0aGVyOiB1c2VyLmdvZEZhdGhlciA/PyBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVBcHBEQkNvbmZpZyh7XG4gICAgYXBwQ29kZSxcbiAgICBjb25maWcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgYXBwQ29kZTogc3RyaW5nO1xuICAgIGNvbmZpZzogQXBwREJDb25maWc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEFwcERCQ29uZmlnPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkubXV0YXRpb24oe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGUsXG4gICAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRBcHBEQkNvbmZpZyhcbiAgICBhcHBDb2RlOiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxBcHBEQkNvbmZpZz4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpLnF1ZXJ5KHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRGQVEoe1xuICAgIGxhbmcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgbGFuZz86IExhbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZhcUl0ZW1bXT4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKS5xdWVyeSh7XG4gICAgICBmYXE6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFuc3dlcjogdHJ1ZSxcbiAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICBxdWVzdGlvbjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFxO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEJsb2coe1xuICAgIGVudixcbiAgICBsYW5nLFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIGxhbmc/OiBMYW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxCbG9nSXRlbVtdPiB7XG4gICAgY29uc3QgeyBibG9nIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKS5xdWVyeSh7XG4gICAgICBibG9nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBibG9nSWQ6IHRydWUsXG4gICAgICAgICAgYXV0aG9yOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHRydWUsXG4gICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICBpbWFnZTogdHJ1ZSxcbiAgICAgICAgICBpbWFnZUFsdDogdHJ1ZSxcbiAgICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgICAgIHRpdGxlOiB0cnVlLFxuICAgICAgICAgIG9yZGVyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBibG9nLm1hcChiID0+ICh7IC4uLmIsIGRhdGU6IG5ldyBEYXRlKGIuZGF0ZSkgfSkpO1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTZW5kUmVwb3J0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgeyBzZW5kUmVwb3J0IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVVc2VyIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKS5tdXRhdGlvbih7XG4gICAgICBkZWxldGVVc2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlbGV0ZVVzZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkYkdldDxVPih7XG4gICAgZmllbGQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFU+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkYkdldDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkdldC5yZXM7XG4gIH1cblxuICBhc3luYyBkYlNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdmFsdWU6IFU7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYlNldC5yZXM7XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCB7IGRiU2VhcmNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYlNlYXJjaDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlcih7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG1vdmVGb2xkZXJzKHtcbiAgICBmb2xkZXJzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZvbGRlcnNJZDogc3RyaW5nW107XG4gICAgcGFyZW50Rm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBtb3ZlRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW92ZUZvbGRlcnMgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZXMoe1xuICAgIGZpbGVzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBtb3ZlRmlsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVzSWQsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vdmVGaWxlcyA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZvbGRlclNpemUgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXJTaXplIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZm9sZGVyU2l6ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgc2l6ZUJlZm9yZTogQmlnSW50KGZvbGRlclNpemUuc2l6ZUJlZm9yZSlcbiAgICB9O1xuICB9XG59XG4iXX0=
|