@secrecy/lib 1.0.0-dev.27 → 1.0.0-dev.28
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/dist/BaseClient.d.ts +274 -0
- package/dist/BaseClient.js +2227 -0
- package/dist/PopupTools.d.ts +17 -0
- package/dist/PopupTools.js +213 -0
- package/dist/ZeusThunder.d.ts +2 -0
- package/dist/ZeusThunder.js +113 -0
- package/dist/cache.d.ts +7 -0
- package/dist/cache.js +5 -0
- package/dist/client/admin/index.d.ts +11 -0
- package/dist/client/admin/index.js +198 -0
- package/dist/client/convert/file.d.ts +5 -0
- package/dist/client/convert/file.js +39 -0
- package/dist/client/convert/folder.d.ts +8 -0
- package/dist/client/convert/folder.js +264 -0
- package/dist/client/convert/mail.d.ts +3 -0
- package/dist/client/convert/mail.js +46 -0
- package/dist/client/convert/vFile.d.ts +5 -0
- package/dist/client/convert/vFile.js +164 -0
- package/dist/client/helpers.d.ts +23 -0
- package/dist/client/helpers.js +114 -0
- package/dist/client/index.d.ts +172 -0
- package/dist/client/index.js +6169 -0
- package/dist/client/storage.d.ts +7 -0
- package/dist/client/storage.js +12 -0
- package/dist/client/types/File.d.ts +21 -0
- package/dist/client/types/File.js +3 -0
- package/dist/client/types/FilesOnUsersOnApplications.d.ts +9 -0
- package/dist/client/types/FilesOnUsersOnApplications.js +3 -0
- package/dist/client/types/Folder.d.ts +68 -0
- package/dist/client/types/Folder.js +7 -0
- package/dist/client/types/Inputs.d.ts +21 -0
- package/dist/client/types/Inputs.js +3 -0
- package/dist/client/types/UserAppNotifications.d.ts +6 -0
- package/dist/client/types/UserAppNotifications.js +3 -0
- package/dist/client/types/UserAppSettings.d.ts +7 -0
- package/dist/client/types/UserAppSettings.js +3 -0
- package/dist/client/types/VFile.d.ts +62 -0
- package/dist/client/types/VFile.js +4 -0
- package/dist/client/types/index.d.ts +154 -0
- package/dist/client/types/index.js +10 -0
- package/dist/client/types/queries.d.ts +535 -0
- package/dist/client/types/queries.js +192 -0
- package/dist/crypto/file.d.ts +14 -0
- package/dist/crypto/file.js +291 -0
- package/dist/crypto/index.d.ts +12 -0
- package/dist/crypto/index.js +45 -0
- package/dist/error.d.ts +30 -0
- package/dist/error.js +3 -0
- package/dist/index.d.ts +13 -3857
- package/dist/index.js +42 -255
- package/dist/minify/index.d.ts +2 -0
- package/dist/minify/index.js +28 -0
- package/dist/minify/lz4.d.ts +5 -0
- package/dist/minify/lz4.js +633 -0
- package/dist/sodium.d.ts +3 -0
- package/dist/sodium.js +28 -0
- package/dist/utils/store-buddy.d.ts +14 -0
- package/dist/utils/store-buddy.js +69 -0
- package/dist/utils/time.d.ts +10 -0
- package/dist/utils/time.js +22 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +188 -0
- package/dist/worker/__mock__/sodium.worker.d.ts +19 -0
- package/dist/worker/__mock__/sodium.worker.js +46 -0
- package/dist/worker/md5.d.ts +1 -0
- package/dist/worker/md5.js +43 -0
- package/dist/worker/sodium.d.ts +3 -0
- package/dist/worker/sodium.js +155 -0
- package/dist/worker/workerCodes.d.ts +2 -0
- package/dist/worker/workerCodes.js +3 -0
- package/dist/zeus/const.d.ts +2 -0
- package/dist/zeus/const.js +2267 -0
- package/dist/zeus/index.d.ts +4043 -0
- package/dist/zeus/index.js +549 -0
- package/package.json +23 -14
- package/__tests__/client/client.test.ts +0 -81
- package/__tests__/client/folder.test.ts +0 -302
- package/__tests__/client/mail.test.ts +0 -476
- package/__tests__/client/timing.test.ts +0 -35
- package/__tests__/client/utils.ts +0 -41
- package/__tests__/client/vFile.test.ts +0 -207
- package/__tests__/index.test.ts +0 -171
- package/commitlint.config.cjs +0 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -255
- package/dist/index.mjs.map +0 -1
- package/docs/assets/css/main.css +0 -2660
- package/docs/assets/images/icons.png +0 -0
- package/docs/assets/images/icons@2x.png +0 -0
- package/docs/assets/images/widgets.png +0 -0
- package/docs/assets/images/widgets@2x.png +0 -0
- package/docs/assets/js/main.js +0 -248
- package/docs/assets/js/search.js +0 -1
- package/docs/classes/baseclient.baseclient-1.html +0 -1165
- package/docs/classes/client.secrecyclient.html +0 -2527
- package/docs/enums/index.sodium.base64_variants.html +0 -205
- package/docs/index.html +0 -198
- package/docs/interfaces/client_types.draftmail.html +0 -335
- package/docs/interfaces/client_types.filecontentbase.html +0 -231
- package/docs/interfaces/client_types.filecontentcloud.html +0 -244
- package/docs/interfaces/client_types.filecontentreceivedmail.html +0 -244
- package/docs/interfaces/client_types.filecontentsentmail.html +0 -230
- package/docs/interfaces/client_types.receivedmail.html +0 -363
- package/docs/interfaces/client_types.sentmail.html +0 -335
- package/docs/interfaces/crypto.keypair.html +0 -202
- package/docs/interfaces/index.sodium.cryptobox.html +0 -185
- package/docs/interfaces/index.sodium.cryptokx.html +0 -185
- package/docs/interfaces/index.sodium.keypair.html +0 -199
- package/docs/interfaces/index.sodium.messagetag.html +0 -185
- package/docs/interfaces/index.sodium.secretbox.html +0 -185
- package/docs/interfaces/index.sodium.stateaddress.html +0 -171
- package/docs/interfaces/index.sodium.stringcryptobox.html +0 -185
- package/docs/interfaces/index.sodium.stringcryptokx.html +0 -185
- package/docs/interfaces/index.sodium.stringkeypair.html +0 -199
- package/docs/interfaces/index.sodium.stringmessagetag.html +0 -185
- package/docs/interfaces/index.sodium.stringsecretbox.html +0 -185
- package/docs/interfaces/utils_store_buddy.storebuddy.html +0 -333
- package/docs/modules/baseclient.html +0 -929
- package/docs/modules/cache.html +0 -185
- package/docs/modules/client.html +0 -207
- package/docs/modules/client_convert_file.html +0 -216
- package/docs/modules/client_convert_folder.html +0 -303
- package/docs/modules/client_convert_vfile.html +0 -216
- package/docs/modules/client_helpers.html +0 -311
- package/docs/modules/client_storage.html +0 -167
- package/docs/modules/client_types.html +0 -1227
- package/docs/modules/client_types_file.html +0 -233
- package/docs/modules/client_types_filesonusersonapplications.html +0 -168
- package/docs/modules/client_types_folder.html +0 -383
- package/docs/modules/client_types_inputs.html +0 -263
- package/docs/modules/client_types_mail.html +0 -181
- package/docs/modules/client_types_queries.html +0 -199
- package/docs/modules/client_types_userappsettings.html +0 -163
- package/docs/modules/client_types_vfile.html +0 -364
- package/docs/modules/crypto.html +0 -366
- package/docs/modules/crypto_file.html +0 -344
- package/docs/modules/index.html +0 -779
- package/docs/modules/index.sodium.html +0 -6039
- package/docs/modules/minify.html +0 -183
- package/docs/modules/minify_lz4.html +0 -279
- package/docs/modules/popuptools.html +0 -259
- package/docs/modules/sodium.html +0 -167
- package/docs/modules/utils.html +0 -219
- package/docs/modules/utils_store_buddy.html +0 -208
- package/docs/modules/utils_time.html +0 -330
- package/docs/modules/worker_md5.html +0 -156
- package/docs/modules/worker_sodium.html +0 -231
- package/docs/modules/worker_workercodes.html +0 -157
- package/docs/modules.html +0 -235
- package/index.html +0 -21
- package/jest.config.ts +0 -27
- package/jest.setup.ts +0 -6
- package/release.config.cjs +0 -15
- package/tsup.config.ts +0 -26
|
@@ -0,0 +1,2227 @@
|
|
|
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.res
|
|
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
|
+
var apiUrl = process.env.SECRECY_API_URL;
|
|
2209
|
+
|
|
2210
|
+
if (apiUrl) {
|
|
2211
|
+
return apiUrl;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
switch (env) {
|
|
2215
|
+
case "prod":
|
|
2216
|
+
return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
|
|
2217
|
+
|
|
2218
|
+
case "dev":
|
|
2219
|
+
default:
|
|
2220
|
+
return "https://api.dev.secrecy.me/graphql";
|
|
2221
|
+
}
|
|
2222
|
+
};
|
|
2223
|
+
|
|
2224
|
+
BaseClient._getBaseClient = function (env, session) {
|
|
2225
|
+
return createThunder(BaseClient.getBaseUrl(env), session);
|
|
2226
|
+
};
|
|
2227
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwidG90YWwiLCJwZGYiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsIkJpZ0ludCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZGJDb25maWciLCJqc29uIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0l0ZW1zIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJyZXMiLCJkYlNldCIsInZhbHVlIiwiRXJyb3IiLCJ0b1N0cmluZyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwiYXBpVXJsIiwicHJvY2VzcyIsIlNFQ1JFQ1lfQVBJX1VSTCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUdBLFNBQVNBLFNBQVQsUUFBMEIsTUFBMUI7QUFDQSxTQUFTQyxPQUFULFFBQXdCLG9CQUF4QjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsWUFBM0I7QUFHQSxTQUFTQyxVQUFULFFBQTJCLHFCQUEzQjtBQVFBLFNBQVNDLFFBQVQsUUFBeUIsaUJBQXpCO0FBQ0EsU0FBU0MsYUFBVCxRQUE4QixrQkFBOUI7O0FBc0xBLFNBQVNDLHNCQUFULENBQWdDQyxDQUFoQyxFQUF1RTtBQUNyRSx5Q0FDS0EsQ0FETDtBQUVFQyxJQUFBQSxtQkFBbUIsa0NBQ2RELENBQUMsQ0FBQ0MsbUJBRFk7QUFFakJDLE1BQUFBLEtBQUssRUFBRUYsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkMsS0FGWjtBQUdqQkMsTUFBQUEsZ0JBQWdCLEVBQUVILENBQUMsQ0FBQ0MsbUJBQUYsQ0FDZkUsZ0JBSmM7QUFLakJDLE1BQUFBLFdBQVcsRUFBRUosQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBdEIsR0FDVCxJQUFJQyxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQS9CLENBRFMsR0FFVCxJQVBhO0FBUWpCRSxNQUFBQSxTQUFTLEVBQUVOLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQXRCLEdBQ1AsSUFBSUQsSUFBSixDQUFTTCxDQUFDLENBQUNDLG1CQUFGLENBQXNC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ekgsVSxDQXFCYUksYyxHQUFpQixVQUN2Q0YsR0FEdUMsRUFFdkNELE9BRnVDO0FBQUEsU0FJdkNwRCxhQUFhLENBQUNtRCxVQUFVLENBQUN3SCxVQUFYLENBQXNCdEgsR0FBdEIsQ0FBRCxFQUE2QkQsT0FBN0IsQ0FKMEI7QUFBQSxDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5pbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgYXMgRExQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgZ2V0TGluayB9IGZyb20gXCJAc2VjcmVjeS9saWItdXRpbHNcIjtcbmltcG9ydCB7IHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyU2Vzc2lvbiB9IGZyb20gXCIuL2NsaWVudC90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vY2xpZW50L2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiLi9jbGllbnQvc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBMYW5nLFxuICBQYXlJbnB1dFR5cGUsXG4gIFBsYW5LaW5kLFxuICBUaHVuZGVyLFxuICBVc2VyUm9sZVxufSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRodW5kZXIgfSBmcm9tIFwiLi9aZXVzVGh1bmRlci5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBFcnJvckFjY2Vzc0RlbmllZCxcbiAgRXJyb3JMaW1pdCxcbiAgRXJyb3JOb3RGb3VuZCxcbiAgRXJyb3JOb3RFeGlzdCxcbiAgRXJyb3JMYW5nTm90RXhpc3QsXG4gIEVycm9yQmFzaWNcbn0gZnJvbSBcIi4vZXJyb3IuanNcIjtcblxuZXhwb3J0IHR5cGUgU3VjY2Vzc1Jlc3BvbnNlPFQ+ID0ge1xuICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiO1xuICBkYXRhOiBUO1xufTtcblxuZXhwb3J0IHR5cGUgRG93bmxvYWRQcm9ncmVzcyA9IERMUHJvZ3Jlc3M7XG5cbmV4cG9ydCB0eXBlIFBheUlucHV0ID0ge1xuICB0eXBlOiBQYXlJbnB1dFR5cGU7XG4gIHRva2VuOiBzdHJpbmc7XG4gIGZpcnN0TmFtZTogc3RyaW5nO1xuICBsYXN0TmFtZTogc3RyaW5nO1xuICBzdHJlZXQ6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBjaXR5OiBzdHJpbmc7XG4gIGNvdW50cnk6IHN0cmluZztcbiAgbW9udGg6IHN0cmluZztcbiAgeWVhcjogc3RyaW5nO1xuICBjdnY6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzID0ge1xuICBjb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTGltaXRzID0ge1xuICBkb3dubG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZG93bmxvYWRDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwZXJGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVjZWl2ZWRNYWlsczogTWFpbExpbWl0cztcbiAgc2VudE1haWxzOiBNYWlsTGltaXRzO1xuICB1cGxvYWRCYW5kd2lkdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHVwbG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgR29kVXNlciA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RGYXRoZXJBbmRDaGlsZHJlbiA9IHtcbiAgZ29kRmF0aGVyOiBHb2RVc2VyIHwgbnVsbDtcbiAgZ29kQ2hpbGRyZW46IEdvZFVzZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW4gPSB7XG4gIGNvZGVzOiBzdHJpbmdbXTtcbiAga2luZDogUGxhbktpbmQ7XG4gIGxpbWl0czogTGltaXRzO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uU3RhdGUgPVxuICB8IFwiYWN0aXZlXCJcbiAgfCBcImNhbmNlbGVkXCJcbiAgfCBcInBhdXNlZFwiXG4gIHwgXCJleHBpcmVkXCJcbiAgfCBcImZ1dHVyZVwiXG4gIHwgXCJpbl90cmlhbFwiXG4gIHwgXCJsaXZlXCJcbiAgfCBcInBhc3RfZHVlXCI7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2QgPSBcImF1dG9tYXRpY1wiIHwgXCJtYW51YWxcIjtcblxudHlwZSBJbnRlcm5hbFN1YnNjcmlwdGlvbiA9IHtcbiAgYXV0b3JlbmV3OiBib29sZWFuO1xuICBhY3RpdmF0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY2FuY2VsZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZXNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBhdXNlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbFN0YXJ0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHVwZGF0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IHN0cmluZztcbiAgc3RhdGU6IHN0cmluZztcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxudHlwZSBSZWN1cmx5SW52b2ljZVN0YXR1cyA9XG4gIHwgXCJwZW5kaW5nXCJcbiAgfCBcInBhaWRcIlxuICB8IFwiZmFpbGVkXCJcbiAgfCBcInBhc3RfZHVlXCJcbiAgfCBcIm9wZW5cIlxuICB8IFwiY2xvc2VkXCJcbiAgfCBcInZvaWRlZFwiXG4gIHwgXCJwcm9jZXNzaW5nXCI7XG5cbnR5cGUgSW50ZXJuYWxSZWN1cmx5SW52b2ljZXMgPSB7XG4gIHBkZjogc3RyaW5nO1xuICBkYXRlOiBzdHJpbmc7XG4gIGR1ZTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgdG90YWw6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW5jeTogc3RyaW5nO1xufTtcblxudHlwZSBJbnRlcm5hbFBheW1lbnRJbmZvcyA9IHtcbiAgaG9zdGVkVXJsOiBzdHJpbmc7XG4gIGN1cnJlbnRTdWJzY3JpcHRpb246IEludGVybmFsU3Vic2NyaXB0aW9uO1xuICBpbnZvaWNlczogSW50ZXJuYWxSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvbiA9IHtcbiAgYXV0b3JlbmV3OiBib29sZWFuO1xuICBhY3RpdmF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kRW5kc0F0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY2FuY2VsZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjcmVhdGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBhdXNlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsRW5kc0F0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHVwZGF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjb2xsZWN0aW9uTWV0aG9kOiBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kO1xuICBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGU7XG4gIHBsYW4/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwbGFuQ29kZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGR1ZTogRGF0ZTtcbiAgc3RhdHVzOiBSZWN1cmx5SW52b2ljZVN0YXR1cztcbiAgdG90YWw6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW5jeTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpbnZvaWNlczogUmVjdXJseUludm9pY2VzW107XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kUmVwb3J0ID0ge1xuICBpZDogc3RyaW5nO1xuICB1c2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIHJlcG9ydGVkVXNlcjoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICB9O1xuICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwOiBJbnRlcm5hbFBheW1lbnRJbmZvcyk6IFBheW1lbnRJbmZvcyB7XG4gIHJldHVybiB7XG4gICAgLi4ucCxcbiAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAuLi5wLmN1cnJlbnRTdWJzY3JpcHRpb24sXG4gICAgICBzdGF0ZTogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnN0YXRlIGFzIFN1YnNjcmlwdGlvblN0YXRlLFxuICAgICAgY29sbGVjdGlvbk1ldGhvZDogcC5jdXJyZW50U3Vic2NyaXB0aW9uXG4gICAgICAgIC5jb2xsZWN0aW9uTWV0aG9kIGFzIFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2QsXG4gICAgICBhY3RpdmF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmFjdGl2YXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmFjdGl2YXRlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBjcmVhdGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3JlYXRlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICB1cGRhdGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udXBkYXRlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICB0cmlhbEVuZHNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnRyaWFsRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLnRyaWFsRW5kc0F0KVxuICAgICAgICA6IG51bGwsXG4gICAgICB0cmlhbFN0YXJ0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnRyaWFsU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLnRyaWFsU3RhcnRlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBwYXVzZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnBhdXNlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLnBhdXNlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBjdXJyZW50UGVyaW9kRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZEVuZHNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZFN0YXJ0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBjYW5jZWxlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uY2FuY2VsZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0KVxuICAgICAgICA6IG51bGwsXG4gICAgICBleHBpcmVzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uZXhwaXJlc0F0KVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuICAgIGludm9pY2VzOiBwLmludm9pY2VzLm1hcChpID0+ICh7XG4gICAgICAuLi5pLFxuICAgICAgZGF0ZTogbmV3IERhdGUoaS5kYXRlKSxcbiAgICAgIGR1ZTogbmV3IERhdGUoaS5kdWUpLFxuICAgICAgc3RhdHVzOiBpLnN0YXR1cyBhcyBSZWN1cmx5SW52b2ljZVN0YXR1c1xuICAgIH0pKVxuICB9O1xufVxuXG5jb25zdCBwbGFuc0NvZGVzID0gW1xuICBcImJhc2ljX21vbnRoXCIsXG4gIFwiYWR2YW5jZWRfbW9udGhcIixcbiAgXCJwcm9fbW9udGhcIixcbiAgXCJiYXNpY195ZWFyXCIsXG4gIFwiYWR2YW5jZWRfeWVhclwiLFxuICBcInByb195ZWFyXCJcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFNlY3JlY3lQbGFuc0NvZGVzID0gdHlwZW9mIHBsYW5zQ29kZXNbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQbGFuKHBsYW5Db2RlOiBzdHJpbmcpOiBwbGFuQ29kZSBpcyBTZWNyZWN5UGxhbnNDb2RlcyB7XG4gIHJldHVybiBwbGFuc0NvZGVzLmluY2x1ZGVzKHBsYW5Db2RlIGFzIFNlY3JlY3lQbGFuc0NvZGVzKTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlckRhdGE8XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4+ID0ge1xuICBpc1N1cGVydXNlcjogYm9vbGVhbjtcbiAgaXNTZWFyY2hhYmxlOiBib29sZWFuO1xufSAmIFQ7XG5cbmV4cG9ydCB0eXBlIEZvbGRlclNpemUgPSB7IHNpemU6IGJpZ2ludDsgc2l6ZUJlZm9yZTogYmlnaW50IH07XG5cbmNvbnN0IGdldFVzZXJTZWxlY3RvciA9IChcbiAgdXNlcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICB3aXRoUHVibGljS2V5OiBib29sZWFuIHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgY29uc3QgeyB1c2VyIH0gPSBTZWxlY3RvcihcIlF1ZXJ5XCIpKHtcbiAgICB1c2VyOiBbXG4gICAgICB7IHVzZXJJZCB9LFxuICAgICAge1xuICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICBmaWVsZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogd2l0aFB1YmxpY0tleSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIHJldHVybiB1c2VyO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWdGaWVsZCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIjtcbiAgaXNBcnJheT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzTnVsbGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0VkaXRhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNLZXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnID0ge1xuICBmaWVsZHM6IEFwcERCQ29uZmlnRmllbGRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZhcUl0ZW0gPSB7XG4gIG9yZGVyOiBudW1iZXI7XG4gIHF1ZXN0aW9uOiBzdHJpbmc7XG4gIGFuc3dlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQmxvZ0l0ZW0gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJsb2dJZDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBhdXRob3I6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBkYXRlOiBEYXRlO1xuICBpbWFnZTogc3RyaW5nO1xuICBpbWFnZUFsdDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQmFzZSA9IHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgcm9sZTogVXNlclJvbGU7XG4gIGZpcnN0bmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBkZWxldGVkQXQ6IERhdGUgfCBudWxsO1xuICBsYXN0TG9naW46IERhdGU7XG4gIGxhbmc6IExhbmc7XG59O1xuXG50eXBlIFdpdGhQdWJsaWNLZXkgPSB7IHdpdGhQdWJsaWNLZXk/OiBib29sZWFuIH07XG5cbmV4cG9ydCB0eXBlIFVzZXI8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PiA9IFQgZXh0ZW5kcyB7XG4gIHdpdGhQdWJsaWNLZXk6IHRydWU7XG59XG4gID8gVXNlckJhc2UgJiB7IHB1YmxpY0tleTogc3RyaW5nIH1cbiAgOiBVc2VyQmFzZTtcblxudHlwZSBDbGFzc0dldFVzZXJQYXJhbXMgPSBXaXRoUHVibGljS2V5ICYge1xuICB1c2VySWQ/OiBzdHJpbmc7XG59O1xudHlwZSBHZXRVc2VyUGFyYW1zID0gQ2xhc3NHZXRVc2VyUGFyYW1zICYge1xuICBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xufTtcblxudHlwZSBTdGF0aWNHZXRVc2VyUGFyYW1zID0gQ2xhc3NHZXRVc2VyUGFyYW1zICYge1xuICBlbnY6IFNlY3JlY3lFbnY7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRVc2VyPFUgZXh0ZW5kcyBXaXRoUHVibGljS2V5PihcbiAgcGFyYW1zOiBHZXRVc2VyUGFyYW1zXG4pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFU+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0VXNlclNlbGVjdG9yKHBhcmFtcy51c2VySWQsIHBhcmFtcy53aXRoUHVibGljS2V5KTtcbiAgY29uc3QgeyB1c2VyOiB1c2VyUmVzcG9uc2UgfSA9IGF3YWl0IHBhcmFtcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VyUmVzcG9uc2UuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICByZXR1cm4gdXNlclJlc3BvbnNlO1xuICB9XG5cbiAgaWYgKCF1c2VyUmVzcG9uc2UudXNlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgIGRhdGE6IHtcbiAgICAgIC4uLnVzZXJSZXNwb25zZS51c2VyLFxuICAgICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyUmVzcG9uc2UudXNlci5sYXN0TG9naW4pLFxuICAgICAgZGVsZXRlZEF0OiB1c2VyUmVzcG9uc2UudXNlci5kZWxldGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZSh1c2VyUmVzcG9uc2UudXNlci5kZWxldGVkQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFwaVVybCA9IHByb2Nlc3MuZW52LlNFQ1JFQ1lfQVBJX1VSTDtcbiAgICBpZiAoYXBpVXJsKSB7XG4gICAgICByZXR1cm4gYXBpVXJsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZW52KSB7XG4gICAgICBjYXNlIFwicHJvZFwiOlxuICAgICAgICByZXR1cm4gZ3JhcGhjZG5cbiAgICAgICAgICA/IFwiaHR0cHM6Ly9zZWNyZWN5LmdyYXBoY2RuLmFwcFwiXG4gICAgICAgICAgOiBcImh0dHBzOi8vYXBpLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy5jbGllbnQgPSBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBzZXNzaW9ucygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyU2Vzc2lvbltdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhcHBTZXNzaW9uczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdXNlckFwcDoge1xuICAgICAgICAgICAgICAgICAgICBhcHA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGF0YS51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdXNlclJlc3BvbnNlID0gZGF0YS51c2VyO1xuICAgIGlmICh1c2VyUmVzcG9uc2UuX190eXBlbmFtZSA9PT0gXCJVc2VyUmVzcG9uc2VcIikge1xuICAgICAgaWYgKCF1c2VyUmVzcG9uc2UudXNlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlc3Npb25zOiBVc2VyU2Vzc2lvbltdID1cbiAgICAgICAgdXNlclJlc3BvbnNlLnVzZXIuc2Vzc2lvbnMubWFwKHMgPT4gKHtcbiAgICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgICBpcDogcy5pcCxcbiAgICAgICAgICBjaXR5OiBzLmNpdHksXG4gICAgICAgICAgY291bnRyeTogcy5jb3VudHJ5LFxuICAgICAgICAgIGxhc3RBY3Rpdml0eTogcy5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShzLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXNlckFnZW50OiBzLnVzZXJBZ2VudCxcbiAgICAgICAgICBhcHBTZXNzaW9uczogcy5hcHBTZXNzaW9ucy5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGEuaWQsXG4gICAgICAgICAgICBpcDogYS5pcCxcbiAgICAgICAgICAgIGNpdHk6IGEuY2l0eSxcbiAgICAgICAgICAgIGNvdW50cnk6IGEuY291bnRyeSxcbiAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogYS5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShhLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IGEudXNlckFnZW50LFxuICAgICAgICAgICAgYXBwOiBhLnVzZXJBcHA/LmFwcC5uYW1lID8/IFwiXCJcbiAgICAgICAgICB9KSlcbiAgICAgICAgfSkpID8/IFtdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogc2Vzc2lvbnNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0U3RvcmFnZShmYWxzZSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZ2V0U3RvcmFnZSh0cnVlKTtcbiAgICAgIGxvY2FsLmp3dC5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLmp3dC5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgdXNlcnNDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIExvZ291dFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbG9nb3V0OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuX2dldEJhc2VDbGllbnQocGFyYW1zLmVudiwgc2Vzc2lvbklkKSxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5kYXRhLmlkLCB1c2VyLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgYXN5bmMgdXNlcjxUIGV4dGVuZHMgQ2xhc3NHZXRVc2VyUGFyYW1zPihcbiAgICBwYXJhbXM6IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICB1c2VySWQ6IHBhcmFtcy51c2VySWQsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyPiB8IEVycm9yTm90Rm91bmQgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVQcm9maWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZVByb2ZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpcnN0bmFtZSxcbiAgICAgICAgICBsYXN0bmFtZSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlUHJvZmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVQcm9maWxlOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQcm9maWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVByb2ZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZW1haWw6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5lbWFpbCxcbiAgICAgICAgZmlyc3RuYW1lOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZmlyc3RuYW1lLFxuICAgICAgICBpZDogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmlkLFxuICAgICAgICBsYW5nOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUubGFuZyxcbiAgICAgICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUubGFzdExvZ2luKSxcbiAgICAgICAgbGFzdG5hbWU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5sYXN0bmFtZSxcbiAgICAgICAgcGhvbmU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5waG9uZSxcbiAgICAgICAgcm9sZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLnJvbGUsXG4gICAgICAgIGRlbGV0ZWRBdDogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmRlbGV0ZWRBdFxuICAgICAgICAgID8gbmV3IERhdGUodXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmRlbGV0ZWRBdClcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBsYW5zKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFBsYW5bXT4gfCBudWxsPiB7XG4gICAgY29uc3QgeyBwbGFucyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBwbGFuczoge1xuICAgICAgICBcIi4uLm9uIFBsYW5SZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwbGFuOiB7XG4gICAgICAgICAgICBraW5kOiB0cnVlLFxuICAgICAgICAgICAgY29kZXM6IHRydWUsXG4gICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgZG93bmxvYWRCYW5kd2lkdGg6IHRydWUsXG4gICAgICAgICAgICAgIGRvd25sb2FkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbnRNYWlsczoge1xuICAgICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwbGFucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBwbGFucy5wbGFuXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBheShcbiAgICBwbGFuQ29kZTogU2VjcmVjeVBsYW5zQ29kZXMsXG4gICAgaW5wdXQ6IFBheUlucHV0LFxuICAgIGF1dG9SZW5ldz86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBwYXkgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcGF5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwbGFuQ29kZSxcbiAgICAgICAgICBhdXRvUmVuZXdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUGF5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHBheTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXkuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcGF5O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcGF5LnBheSA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBjYW5jZWxQYXltZW50KCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgY2FuY2VsUGF5bWVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBjYW5jZWxQYXltZW50OiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIENhbmNlbFBheW1lbnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxQYXltZW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghY2FuY2VsUGF5bWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNhbmNlbFBheW1lbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gY2FuY2VsUGF5bWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGNhbmNlbFBheW1lbnQuY2FuY2VsUGF5bWVudCA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXltZW50SW5mb3MoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8UGF5bWVudEluZm9zPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHBheW1lbnRJbmZvcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gUGF5bWVudEluZm9zUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgcGF5bWVudEluZm9zOiB7XG4gICAgICAgICAgICBob3N0ZWRVcmw6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgIGF1dG9yZW5ldzogdHJ1ZSxcbiAgICAgICAgICAgICAgYWN0aXZhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGNhbmNlbGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGNyZWF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZXhwaXJlc0F0OiB0cnVlLFxuICAgICAgICAgICAgICBwYXVzZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHJpYWxFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHRyaWFsU3RhcnRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICB1cGRhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uTWV0aG9kOiB0cnVlLFxuICAgICAgICAgICAgICBwbGFuOiB0cnVlLFxuICAgICAgICAgICAgICBwbGFuQ29kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdG90YWw6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnZvaWNlczoge1xuICAgICAgICAgICAgICBwZGY6IHRydWUsXG4gICAgICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGR1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgICAgICAgICB0b3RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGF5bWVudEluZm9zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHBheW1lbnRJbmZvcztcbiAgICB9XG5cbiAgICBpZiAoIXBheW1lbnRJbmZvcy5wYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHBheW1lbnRJbmZvcy5wYXltZW50SW5mb3MpO1xuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0cygpOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFF1ZXJ5TGltaXRzPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBsaW1pdHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbGltaXRzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTGltaXRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFF1ZXJ5TGltaXRzXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgICBzaXplOiB0cnVlLFxuICAgICAgICAgICAgbWF4U2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1haWw6IHtcbiAgICAgICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWxpbWl0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjbG91ZCwgbWFpbCB9ID0gbGltaXRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgY291bnQ6IEJpZ0ludChjbG91ZC5jb3VudCksXG4gICAgICAgICAgc2l6ZTogQmlnSW50KGNsb3VkLnNpemUpLFxuICAgICAgICAgIG1heENvdW50OiBjbG91ZC5tYXhDb3VudCA/IEJpZ0ludChjbG91ZC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICAgIG1heFNpemU6IGNsb3VkLm1heFNpemUgPyBCaWdJbnQoY2xvdWQubWF4U2l6ZSkgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIG1haWw6IHtcbiAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmNvdW50KSxcbiAgICAgICAgICAgIG1heENvdW50OiBtYWlsLnJlY2VpdmVkLm1heENvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4Q291bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZUNvdW50KSxcbiAgICAgICAgICAgIG1heEZpbGVDb3VudDogbWFpbC5yZWNlaXZlZC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVTaXplOiBCaWdJbnQobWFpbC5yZWNlaXZlZC5maWxlU2l6ZSksXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogbWFpbC5yZWNlaXZlZC5tYXhGaWxlU2l6ZVxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgIGNvdW50OiBCaWdJbnQobWFpbC5zZW50LmNvdW50KSxcbiAgICAgICAgICAgIG1heENvdW50OiBtYWlsLnNlbnQubWF4Q291bnQgPyBCaWdJbnQobWFpbC5zZW50Lm1heENvdW50KSA6IG51bGwsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnNlbnQuZmlsZUNvdW50KSxcbiAgICAgICAgICAgIG1heEZpbGVDb3VudDogbWFpbC5zZW50Lm1heEZpbGVDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnNlbnQubWF4RmlsZUNvdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwuc2VudC5maWxlU2l6ZSksXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogbWFpbC5zZW50Lm1heEZpbGVTaXplXG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdvZEZhdGhlckFuZENoaWxkcmVuKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPEdvZEZhdGhlckFuZENoaWxkcmVuPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZ29kQ2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdvZEZhdGhlcjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZ29kQ2hpbGRyZW46IHVzZXIuZ29kQ2hpbGRyZW4sXG4gICAgICAgIGdvZEZhdGhlcjogdXNlci5nb2RGYXRoZXJcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVwZGF0ZUFwcERCQ29uZmlnKHtcbiAgICBhcHBDb2RlLFxuICAgIGNvbmZpZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBhcHBDb2RlOiBzdHJpbmc7XG4gICAgY29uZmlnOiBBcHBEQkNvbmZpZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEFwcERCQ29uZmlnPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGJDb25maWdNdXRhdGlvbiB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYkNvbmZpZ011dGF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlLFxuICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkNvbmZpZ011dGF0aW9uUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiQ29uZmlnTXV0YXRpb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWdNdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnTXV0YXRpb24uX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWdNdXRhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnTXV0YXRpb24uZGJDb25maWdNdXRhdGlvblxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QXBwREJDb25maWcoXG4gICAgYXBwQ29kZTogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8QXBwREJDb25maWc+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcInF1ZXJ5XCIpKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkNvbmZpZ1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWc7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWc7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZy5qc29uXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRGQVEoe1xuICAgIGxhbmcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgbGFuZz86IExhbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGYXFJdGVtW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmYXEgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgZmFxOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZhcVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmYXE6IHtcbiAgICAgICAgICAgICAgYW5zd2VyOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgcXVlc3Rpb246IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmFxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmFxLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZhcTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGZhcS5mYXFcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEJsb2coe1xuICAgIGVudixcbiAgICBsYW5nLFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIGxhbmc/OiBMYW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8QmxvZ0l0ZW1bXT4gfCBFcnJvckxhbmdOb3RFeGlzdCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGJsb2cgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgYmxvZzogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxhbmdOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBCbG9nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGJsb2dJdGVtczoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYmxvZ0lkOiB0cnVlLFxuICAgICAgICAgICAgICBhdXRob3I6IHRydWUsXG4gICAgICAgICAgICAgIGJvZHk6IHRydWUsXG4gICAgICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGltYWdlOiB0cnVlLFxuICAgICAgICAgICAgICBpbWFnZUFsdDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWJsb2cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChibG9nLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMYW5nTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGJsb2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBibG9nLmJsb2dJdGVtcy5tYXAoYiA9PiAoeyAuLi5iLCBkYXRlOiBuZXcgRGF0ZShiLmRhdGUpIH0pKVxuICAgIH07XG4gIH1cblxuICBhc3luYyByZXBvcnRVc2VyKFxuICAgIHJlcG9ydGVkVXNlcklkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxTZW5kUmVwb3J0PiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBzZW5kUmVwb3J0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNlbmRSZXBvcnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcG9ydGVkVXNlcklkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTZW5kUmVwb3J0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRSZXBvcnQ6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGN1c3RvbU1lc3NhZ2U6IHRydWUsXG4gICAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2VuZFJlcG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNlbmRSZXBvcnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZFJlcG9ydC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNlbmRSZXBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKCFzZW5kUmVwb3J0LnNlbmRSZXBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2VuZFJlcG9ydC5zZW5kUmVwb3J0XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkZWxldGVVc2VyKHtcbiAgICBzZXNzaW9uSWQsXG4gICAgdXNlcklkLFxuICAgIGVudlxuICB9OiB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVVc2VyIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZVVzZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZVVzZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlVXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZVVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlVXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIWRlbGV0ZVVzZXIuZGVsZXRlVXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVVc2VyLmRlbGV0ZVVzZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJHZXQ8VT4oe1xuICAgIGZpZWxkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkdldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYkdldDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkdldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiR2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkdldC5qc29uLnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdmFsdWU6IFU7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiU2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYlNldDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmICghZGJTZXQuZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZXQuZGJTZXQucmVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiU2VhcmNoPFQ+KHtcbiAgICBzZWFyY2gsXG4gICAgZmllbGRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNlYXJjaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2VhcmNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYlNlYXJjaC5qc29uXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlcih7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yTm90RXhpc3QgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZUZvbGRlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVGb2xkZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRm9sZGVyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRm9sZGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlRm9sZGVyLmRlbGV0ZUZvbGRlciA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBtb3ZlRm9sZGVycyh7XG4gICAgZm9sZGVyc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBtb3ZlRm9sZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVyc0lkLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIE1vdmVGb2xkZXJzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1vdmVGb2xkZXJzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVGb2xkZXJzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW92ZUZvbGRlcnMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbW92ZUZvbGRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlRm9sZGVycy5tb3ZlRm9sZGVycyA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZXMoe1xuICAgIGZpbGVzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZpbGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlc0lkLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIE1vdmVGaWxlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlRmlsZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghbW92ZUZpbGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW92ZUZpbGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVGaWxlcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1vdmVGaWxlcy5tb3ZlRmlsZXMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyU2l6ZSh7XG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZvbGRlclNpemU+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXJTaXplIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGZvbGRlclNpemU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZvbGRlclNpemVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemVCZWZvcmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZm9sZGVyU2l6ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZvbGRlclNpemUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZm9sZGVyU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2l6ZTogQmlnSW50KGZvbGRlclNpemUuc2l6ZSksXG4gICAgICAgIHNpemVCZWZvcmU6IEJpZ0ludChmb2xkZXJTaXplLnNpemVCZWZvcmUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNwb25zb3JzaGlwTGluayh7XG4gICAgYmFja1VybFxuICB9OiB7XG4gICAgYmFja1VybDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWUgPSBhd2FpdCB0aGlzLm1lKHsgd2l0aFB1YmxpY0tleTogZmFsc2UgfSk7XG5cbiAgICBpZiAoIW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRMaW5rKHtcbiAgICAgIGFwcDogXCJhdXRoXCIsXG4gICAgICBwYXRoOiBgL3NpZ24tdXA/Z2Y9JHtidG9hKG1lLmRhdGEuZW1haWwpfSZhdT0ke2J0b2EoYmFja1VybCl9YFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|