@cloudbase/auth 2.26.1 → 2.26.3

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.
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.applyUserV1Compat = exports.AuthV1Compat = exports.AnonymousAuthProvider = exports.CustomAuthProvider = exports.WeixinAuthProvider = void 0;
51
+ var oauth_1 = require("@cloudbase/oauth");
52
+ var utilities_1 = require("./utilities");
53
+ var WeixinAuthProvider = (function () {
54
+ function WeixinAuthProvider(_options) {
55
+ }
56
+ WeixinAuthProvider.prototype.signInWithRedirect = function () {
57
+ throw new Error('[v1 兼容] WeixinAuthProvider.signInWithRedirect() 在当前版本中无法实现。'
58
+ + ' 建议使用 auth.signInWithOAuth({ provider: \'providerId\' }) 替代。');
59
+ };
60
+ WeixinAuthProvider.prototype.getRedirectResult = function (_options) {
61
+ return __awaiter(this, void 0, void 0, function () {
62
+ return __generator(this, function (_a) {
63
+ throw new Error('[v1 兼容] WeixinAuthProvider.getRedirectResult() 在当前版本中无法实现。'
64
+ + ' 建议使用 auth.verifyOAuth({ code, state, provider }) 替代。');
65
+ });
66
+ });
67
+ };
68
+ WeixinAuthProvider.prototype.getLinkRedirectResult = function (_options) {
69
+ return __awaiter(this, void 0, void 0, function () {
70
+ return __generator(this, function (_a) {
71
+ throw new Error('[v1 兼容] WeixinAuthProvider.getLinkRedirectResult() 在当前版本中无法实现。'
72
+ + ' 建议使用 auth.linkIdentity({ provider: \'providerId\' }) 替代。');
73
+ });
74
+ });
75
+ };
76
+ return WeixinAuthProvider;
77
+ }());
78
+ exports.WeixinAuthProvider = WeixinAuthProvider;
79
+ var CustomAuthProvider = (function () {
80
+ function CustomAuthProvider(options) {
81
+ this.authInstance = options.authInstance;
82
+ }
83
+ CustomAuthProvider.prototype.signIn = function (ticket) {
84
+ return __awaiter(this, void 0, void 0, function () {
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0: return [4, this.authInstance.signInWithCustomTicket(function () { return Promise.resolve(ticket); })];
88
+ case 1:
89
+ _a.sent();
90
+ return [2];
91
+ }
92
+ });
93
+ });
94
+ };
95
+ return CustomAuthProvider;
96
+ }());
97
+ exports.CustomAuthProvider = CustomAuthProvider;
98
+ var AnonymousAuthProvider = (function () {
99
+ function AnonymousAuthProvider(options) {
100
+ this.authInstance = options.authInstance;
101
+ }
102
+ AnonymousAuthProvider.prototype.signIn = function () {
103
+ return __awaiter(this, void 0, void 0, function () {
104
+ return __generator(this, function (_a) {
105
+ switch (_a.label) {
106
+ case 0: return [4, this.authInstance.signInAnonymously({})];
107
+ case 1:
108
+ _a.sent();
109
+ return [2];
110
+ }
111
+ });
112
+ });
113
+ };
114
+ return AnonymousAuthProvider;
115
+ }());
116
+ exports.AnonymousAuthProvider = AnonymousAuthProvider;
117
+ var AuthV1Compat = (function () {
118
+ function AuthV1Compat() {
119
+ }
120
+ AuthV1Compat.prototype.weixinAuthProvider = function (options) {
121
+ return new WeixinAuthProvider({
122
+ authInstance: this,
123
+ appid: options.appid,
124
+ scope: options.scope,
125
+ });
126
+ };
127
+ AuthV1Compat.prototype.customAuthProvider = function () {
128
+ return new CustomAuthProvider({
129
+ authInstance: this,
130
+ });
131
+ };
132
+ AuthV1Compat.prototype.anonymousAuthProvider = function () {
133
+ return new AnonymousAuthProvider({
134
+ authInstance: this,
135
+ });
136
+ };
137
+ AuthV1Compat.prototype.signUpWithEmailAndPassword = function (email, password) {
138
+ return __awaiter(this, void 0, void 0, function () {
139
+ return __generator(this, function (_a) {
140
+ switch (_a.label) {
141
+ case 0:
142
+ if (typeof email !== 'string') {
143
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'email must be a string');
144
+ }
145
+ if (typeof password !== 'string') {
146
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'password must be a string');
147
+ }
148
+ return [4, this.signUp({
149
+ email: email,
150
+ password: password,
151
+ })];
152
+ case 1: return [2, _a.sent()];
153
+ }
154
+ });
155
+ });
156
+ };
157
+ AuthV1Compat.prototype.signInWithEmailAndPassword = function (email, password) {
158
+ return __awaiter(this, void 0, void 0, function () {
159
+ return __generator(this, function (_a) {
160
+ switch (_a.label) {
161
+ case 0:
162
+ if (typeof email !== 'string') {
163
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'email must be a string');
164
+ }
165
+ if (typeof password !== 'string') {
166
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'password must be a string');
167
+ }
168
+ return [4, this.signIn({
169
+ username: email,
170
+ password: password,
171
+ })];
172
+ case 1:
173
+ _a.sent();
174
+ return [2, this.createLoginState()];
175
+ }
176
+ });
177
+ });
178
+ };
179
+ AuthV1Compat.prototype.sendPasswordResetEmail = function (email) {
180
+ return __awaiter(this, void 0, void 0, function () {
181
+ return __generator(this, function (_a) {
182
+ switch (_a.label) {
183
+ case 0:
184
+ if (typeof email !== 'string') {
185
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'email must be a string');
186
+ }
187
+ return [4, this.getVerification({ email: email })];
188
+ case 1:
189
+ _a.sent();
190
+ return [2];
191
+ }
192
+ });
193
+ });
194
+ };
195
+ AuthV1Compat.prototype.signInWithUsernameAndPassword = function (username, password) {
196
+ return __awaiter(this, void 0, void 0, function () {
197
+ return __generator(this, function (_a) {
198
+ switch (_a.label) {
199
+ case 0:
200
+ if (typeof username !== 'string') {
201
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'username must be a string');
202
+ }
203
+ if (typeof password !== 'string') {
204
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'password must be a string');
205
+ }
206
+ return [4, this.signIn({
207
+ username: username,
208
+ password: password,
209
+ })];
210
+ case 1:
211
+ _a.sent();
212
+ return [2, this.createLoginState()];
213
+ }
214
+ });
215
+ });
216
+ };
217
+ AuthV1Compat.prototype.sendPhoneCode = function (phoneNumber) {
218
+ return __awaiter(this, void 0, void 0, function () {
219
+ var formattedPhone;
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0:
223
+ if (typeof phoneNumber !== 'string') {
224
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneNumber must be a string');
225
+ }
226
+ formattedPhone = this.formatPhone(phoneNumber);
227
+ return [4, this.getVerification({ phone_number: formattedPhone })];
228
+ case 1:
229
+ _a.sent();
230
+ return [2, true];
231
+ }
232
+ });
233
+ });
234
+ };
235
+ AuthV1Compat.prototype.signUpWithPhoneCode = function (phoneNumber, phoneCode, password) {
236
+ return __awaiter(this, void 0, void 0, function () {
237
+ var formattedPhone;
238
+ return __generator(this, function (_a) {
239
+ switch (_a.label) {
240
+ case 0:
241
+ if (typeof phoneNumber !== 'string') {
242
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneNumber must be a string');
243
+ }
244
+ if (typeof phoneCode !== 'string') {
245
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneCode must be a string');
246
+ }
247
+ formattedPhone = this.formatPhone(phoneNumber);
248
+ return [4, this.signUp(__assign({ phone_number: formattedPhone, verification_code: phoneCode }, (password ? { password: password } : {})))];
249
+ case 1:
250
+ _a.sent();
251
+ return [2, this.createLoginState()];
252
+ }
253
+ });
254
+ });
255
+ };
256
+ AuthV1Compat.prototype.signInWithPhoneCodeOrPassword = function (params) {
257
+ return __awaiter(this, void 0, void 0, function () {
258
+ var phoneNumber, phoneCode, password, formattedPhone;
259
+ return __generator(this, function (_a) {
260
+ switch (_a.label) {
261
+ case 0:
262
+ phoneNumber = params.phoneNumber, phoneCode = params.phoneCode, password = params.password;
263
+ if (typeof phoneNumber !== 'string') {
264
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneNumber must be a string');
265
+ }
266
+ formattedPhone = this.formatPhone(phoneNumber);
267
+ if (!password) return [3, 2];
268
+ return [4, this.signIn({
269
+ username: formattedPhone,
270
+ password: password,
271
+ })];
272
+ case 1:
273
+ _a.sent();
274
+ return [3, 5];
275
+ case 2:
276
+ if (!phoneCode) return [3, 4];
277
+ return [4, this.signIn({
278
+ username: formattedPhone,
279
+ verification_token: phoneCode,
280
+ })];
281
+ case 3:
282
+ _a.sent();
283
+ return [3, 5];
284
+ case 4:
285
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneCode or password must be provided');
286
+ _a.label = 5;
287
+ case 5: return [2, this.createLoginState()];
288
+ }
289
+ });
290
+ });
291
+ };
292
+ AuthV1Compat.prototype.forceResetPwdByPhoneCode = function (params) {
293
+ return __awaiter(this, void 0, void 0, function () {
294
+ var phoneNumber, phoneCode, password, formattedPhone;
295
+ return __generator(this, function (_a) {
296
+ switch (_a.label) {
297
+ case 0:
298
+ phoneNumber = params.phoneNumber, phoneCode = params.phoneCode, password = params.password;
299
+ if (typeof phoneNumber !== 'string') {
300
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneNumber must be a string');
301
+ }
302
+ if (typeof phoneCode !== 'string') {
303
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'phoneCode must be a string');
304
+ }
305
+ if (typeof password !== 'string') {
306
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'password must be a string');
307
+ }
308
+ formattedPhone = this.formatPhone(phoneNumber);
309
+ return [4, this.resetPassword({
310
+ phone_number: formattedPhone,
311
+ new_password: password,
312
+ verification_token: phoneCode,
313
+ })];
314
+ case 1:
315
+ _a.sent();
316
+ return [4, this.signIn({
317
+ username: formattedPhone,
318
+ password: password,
319
+ })];
320
+ case 2:
321
+ _a.sent();
322
+ return [2, this.createLoginState()];
323
+ }
324
+ });
325
+ });
326
+ };
327
+ AuthV1Compat.prototype.shouldRefreshAccessToken = function (_callback) {
328
+ throw new Error('[v1 兼容] shouldRefreshAccessToken() 在当前版本中无法实现。'
329
+ + ' 建议使用 auth.onAuthStateChange(callback) 来监听 TOKEN_REFRESHED 事件替代。');
330
+ };
331
+ AuthV1Compat.prototype.onLoginStateExpired = function (callback) {
332
+ var _this = this;
333
+ this.onLoginStateChanged(function (params) {
334
+ if ((params === null || params === void 0 ? void 0 : params.eventType) === oauth_1.LOGIN_STATE_CHANGED_TYPE.CREDENTIALS_ERROR) {
335
+ callback.call(_this);
336
+ }
337
+ });
338
+ };
339
+ AuthV1Compat.prototype.onAccessTokenRefreshed = function (callback) {
340
+ var _this = this;
341
+ this.onAuthStateChange(function (event) {
342
+ if (event === oauth_1.AUTH_STATE_CHANGED_TYPE.TOKEN_REFRESHED) {
343
+ callback.call(_this);
344
+ }
345
+ });
346
+ };
347
+ AuthV1Compat.prototype.onAnonymousConverted = function (callback) {
348
+ var _this = this;
349
+ this.onAuthStateChange(function (event) {
350
+ if (event === oauth_1.AUTH_STATE_CHANGED_TYPE.SIGNED_IN) {
351
+ callback.call(_this);
352
+ }
353
+ });
354
+ };
355
+ AuthV1Compat.prototype.onLoginTypeChanged = function (callback) {
356
+ var _this = this;
357
+ this.onAuthStateChange(function (event) {
358
+ if (event === oauth_1.AUTH_STATE_CHANGED_TYPE.SIGNED_IN || event === oauth_1.AUTH_STATE_CHANGED_TYPE.SIGNED_OUT) {
359
+ callback.call(_this);
360
+ }
361
+ });
362
+ };
363
+ return AuthV1Compat;
364
+ }());
365
+ exports.AuthV1Compat = AuthV1Compat;
366
+ function applyUserV1Compat(UserClass) {
367
+ UserClass.prototype.linkWithTicket = function (_ticket) {
368
+ return __awaiter(this, void 0, void 0, function () {
369
+ return __generator(this, function (_a) {
370
+ throw new Error('[v1 兼容] User.linkWithTicket() 在当前版本中无法实现。'
371
+ + ' 建议使用 auth.signInWithCustomTicket(() => Promise.resolve(ticket)) 替代。');
372
+ });
373
+ });
374
+ };
375
+ UserClass.prototype.linkWithRedirect = function (_provider) {
376
+ throw new Error('[v1 兼容] User.linkWithRedirect() 在当前版本中无法实现。'
377
+ + ' 建议使用 auth.linkIdentity({ provider: \'providerId\' }) 替代。');
378
+ };
379
+ UserClass.prototype.updateEmail = function (newEmail, _password) {
380
+ return __awaiter(this, void 0, void 0, function () {
381
+ return __generator(this, function (_a) {
382
+ switch (_a.label) {
383
+ case 0:
384
+ if (typeof newEmail !== 'string') {
385
+ (0, utilities_1.throwError)(utilities_1.ERRORS.INVALID_PARAMS, 'newEmail must be a string');
386
+ }
387
+ return [4, this.updateUserBasicInfo({
388
+ email: newEmail,
389
+ })];
390
+ case 1:
391
+ _a.sent();
392
+ return [2];
393
+ }
394
+ });
395
+ });
396
+ };
397
+ UserClass.prototype.linkWithPhoneNumber = function (_phoneNumber, _phoneCode) {
398
+ return __awaiter(this, void 0, void 0, function () {
399
+ return __generator(this, function (_a) {
400
+ throw new Error('[v1 兼容] User.linkWithPhoneNumber() 在当前版本中无法实现。'
401
+ + ' 建议使用 auth.bindPhoneNumber({ phone_number, verification_token, sudo_token }) 替代。');
402
+ });
403
+ });
404
+ };
405
+ UserClass.prototype.updatePhoneNumber = function (_phoneNumber, _phoneCode) {
406
+ return __awaiter(this, void 0, void 0, function () {
407
+ return __generator(this, function (_a) {
408
+ throw new Error('[v1 兼容] User.updatePhoneNumber() 在当前版本中无法实现。'
409
+ + ' 建议使用 auth.updateUser({ phone: newPhoneNumber }) 替代。');
410
+ });
411
+ });
412
+ };
413
+ UserClass.prototype.unlink = function (_loginType) {
414
+ return __awaiter(this, void 0, void 0, function () {
415
+ return __generator(this, function (_a) {
416
+ throw new Error('[v1 兼容] User.unlink() 在当前版本中无法实现。'
417
+ + ' 建议使用 auth.unlinkIdentity({ provider: loginType }) 替代。');
418
+ });
419
+ });
420
+ };
421
+ }
422
+ exports.applyUserV1Compat = applyUserV1Compat;
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjEtY29tcGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3YxLWNvbXBhdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLDBDQUd5QjtBQUN6Qix5Q0FHb0I7QUFXcEI7SUFDRSw0QkFBWSxRQUlYO0lBRUQsQ0FBQztJQU1NLCtDQUFrQixHQUF6QjtRQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZEO2NBQ3pFLDhEQUE4RCxDQUFFLENBQUE7SUFDdEUsQ0FBQztJQU1ZLDhDQUFpQixHQUE5QixVQUErQixRQUc5Qjs7O2dCQUNDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTREO3NCQUN4RSx1REFBdUQsQ0FBRSxDQUFBOzs7S0FDOUQ7SUFNWSxrREFBcUIsR0FBbEMsVUFBbUMsUUFFbEM7OztnQkFDQyxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRTtzQkFDNUUsMkRBQTJELENBQUUsQ0FBQTs7O0tBQ2xFO0lBQ0gseUJBQUM7QUFBRCxDQUFDLEFBeENELElBd0NDO0FBeENZLGdEQUFrQjtBQWdEL0I7SUFHRSw0QkFBWSxPQUVYO1FBQ0MsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFBO0lBQzFDLENBQUM7SUFPWSxtQ0FBTSxHQUFuQixVQUFvQixNQUFjOzs7OzRCQUVoQyxXQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsY0FBTSxPQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQXZCLENBQXVCLENBQUMsRUFBQTs7d0JBQTdFLFNBQTZFLENBQUE7Ozs7O0tBQzlFO0lBQ0gseUJBQUM7QUFBRCxDQUFDLEFBbEJELElBa0JDO0FBbEJZLGdEQUFrQjtBQTBCL0I7SUFHRSwrQkFBWSxPQUVYO1FBQ0MsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFB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QzdELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDO2NBQ3pELDJEQUEyRCxDQUFFLENBQUE7SUFDbkUsQ0FBQyxDQUFBO0lBTUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBZ0IsUUFBZ0IsRUFBRSxTQUFrQjs7Ozs7d0JBQ3BGLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFOzRCQUNoQyxJQUFBLHNCQUFVLEVBQUMsa0JBQU0sQ0FBQyxjQUFjLEVBQUUsMkJBQTJCLENBQUMsQ0FBQTt5QkFDL0Q7d0JBR0QsV0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUM7Z0NBQzdCLEtBQUssRUFBRSxRQUFROzZCQUNoQixDQUFDLEVBQUE7O3dCQUZGLFNBRUUsQ0FBQTs7Ozs7S0FDSCxDQUFBO0lBT0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxVQUFnQixZQUFvQixFQUFFLFVBQWtCOzs7Z0JBQ2hHLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdEO3NCQUM1RCxrRkFBa0YsQ0FBRSxDQUFBOzs7S0FDekYsQ0FBQTtJQU9ELFNBQVMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBZ0IsWUFBb0IsRUFBRSxVQUFrQjs7O2dCQUM5RixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QztzQkFDMUQsc0RBQXNELENBQUUsQ0FBQTs7O0tBQzdELENBQUE7SUFPRCxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFnQixVQUFrQjs7O2dCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQztzQkFDL0Msd0RBQXdELENBQUUsQ0FBQTs7O0tBQy9ELENBQUE7QUFDSCxDQUFDO0FBaEVELDhDQWdFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2VsZXNzLWNvbnN0cnVjdG9yICovXG4vKipcbiAqIHYxIOWFvOWuueWxglxuICog5pys5paH5Lu25YyF5ZCrIHYxIOeJiOacrOeahCBQcm92aWRlciDnsbvjgIFBdXRoIHYxIOWFvOWuueaWueazleWSjCBVc2VyIHYxIOWFvOWuueaWueazleOAglxuICogQXV0aCDnsbvpgJrov4cgZXh0ZW5kcyBBdXRoVjFDb21wYXQg5p2l57un5om/IHYxIOaWueazleOAglxuICogVXNlciDnsbvpgJrov4cgYXBwbHlVc2VyVjFDb21wYXQgbWl4aW4g5p2l5omp5bGVIHYxIOaWueazleOAglxuICovXG5pbXBvcnQgdHlwZSB7IGF1dGhNb2RlbHMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHtcbiAgTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRSxcbn0gZnJvbSAnQGNsb3VkYmFzZS9vYXV0aCdcbmltcG9ydCB7XG4gIHRocm93RXJyb3IsXG4gIEVSUk9SUyxcbn0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgdHlwZSB7IFNpZ25VcFJlcyB9IGZyb20gJy4vdHlwZSdcblxuLy8gPT09PT09PT09PSB2MSDlhbzlrrkgUHJvdmlkZXIg57G7ID09PT09PT09PT1cblxuLyoqXG4gKiB2MSDlvq7kv6HnmbvlvZUgUHJvdmlkZXJcbiAqIOS9v+eUqOaWueW8jzogYXV0aC53ZWl4aW5BdXRoUHJvdmlkZXIoeyBhcHBpZCwgc2NvcGUgfSkuc2lnbkluV2l0aFJlZGlyZWN0KClcbiAqXG4gKiBAZGVwcmVjYXRlZCB2MSDlhbzlrrkgQVBJ44CC5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aE9BdXRoKHsgcHJvdmlkZXIgfSkg5pu/5Luj44CCXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWl4aW5BdXRoUHJvdmlkZXIge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczoge1xuICAgIGF1dGhJbnN0YW5jZTogYW55XG4gICAgYXBwaWQ6IHN0cmluZ1xuICAgIHNjb3BlOiBzdHJpbmdcbiAgfSkge1xuICAgIC8vIHYxIOWFvOWuueexu++8jOaJgOacieaWueazleWdh+aKm+WHuuW8guW4uOaPkOekuuabv+S7o+aWueahiFxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgIJcbiAgICog5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aE9BdXRoKHsgcHJvdmlkZXI6ICdwcm92aWRlcklkJyB9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyBzaWduSW5XaXRoUmVkaXJlY3QoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbdjEg5YW85a65XSBXZWl4aW5BdXRoUHJvdmlkZXIuc2lnbkluV2l0aFJlZGlyZWN0KCkg5Zyo5b2T5YmN54mI5pys5Lit5peg5rOV5a6e546w44CCJ1xuICAgICAgKyAnIOW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbldpdGhPQXV0aCh7IHByb3ZpZGVyOiBcXCdwcm92aWRlcklkXFwnIH0pIOabv+S7o+OAgicsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgIJcbiAgICog5bu66K6u5L2/55SoIGF1dGgudmVyaWZ5T0F1dGgoeyBjb2RlLCBzdGF0ZSwgcHJvdmlkZXIgfSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVkaXJlY3RSZXN1bHQoX29wdGlvbnM/OiB7XG4gICAgY3JlYXRlVXNlcj86IGJvb2xlYW5cbiAgICBzeW5jVXNlckluZm8/OiBib29sZWFuXG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignW3YxIOWFvOWuuV0gV2VpeGluQXV0aFByb3ZpZGVyLmdldFJlZGlyZWN0UmVzdWx0KCkg5Zyo5b2T5YmN54mI5pys5Lit5peg5rOV5a6e546w44CCJ1xuICAgICAgKyAnIOW7uuiuruS9v+eUqCBhdXRoLnZlcmlmeU9BdXRoKHsgY29kZSwgc3RhdGUsIHByb3ZpZGVyIH0pIOabv+S7o+OAgicsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgIJcbiAgICog5bu66K6u5L2/55SoIGF1dGgubGlua0lkZW50aXR5KHsgcHJvdmlkZXI6ICdwcm92aWRlcklkJyB9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMaW5rUmVkaXJlY3RSZXN1bHQoX29wdGlvbnM/OiB7XG4gICAgd2l0aFVuaW9uSWQ/OiBib29sZWFuXG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1t2MSDlhbzlrrldIFdlaXhpbkF1dGhQcm92aWRlci5nZXRMaW5rUmVkaXJlY3RSZXN1bHQoKSDlnKjlvZPliY3niYjmnKzkuK3ml6Dms5Xlrp7njrDjgIInXG4gICAgICArICcg5bu66K6u5L2/55SoIGF1dGgubGlua0lkZW50aXR5KHsgcHJvdmlkZXI6IFxcJ3Byb3ZpZGVySWRcXCcgfSkg5pu/5Luj44CCJywpXG4gIH1cbn1cblxuLyoqXG4gKiB2MSDoh6rlrprkuYnnmbvlvZUgUHJvdmlkZXJcbiAqIOS9v+eUqOaWueW8jzogYXV0aC5jdXN0b21BdXRoUHJvdmlkZXIoKS5zaWduSW4odGlja2V0KVxuICpcbiAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgILlu7rorq7kvb/nlKggYXV0aC5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KCgpID0+IFByb21pc2UucmVzb2x2ZSh0aWNrZXQpKSDmm7/ku6PjgIJcbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUF1dGhQcm92aWRlciB7XG4gIHByaXZhdGUgYXV0aEluc3RhbmNlOiBhbnlcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7XG4gICAgYXV0aEluc3RhbmNlOiBhbnlcbiAgfSkge1xuICAgIHRoaXMuYXV0aEluc3RhbmNlID0gb3B0aW9ucy5hdXRoSW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiDkvb/nlKjoh6rlrprkuYnnmbvlvZXlh63mja4gdGlja2V0IOeZu+W9leS6keW8gOWPkVxuICAgKiBAcGFyYW0gdGlja2V0IOiHquWumuS5ieeZu+W9lSB0aWNrZXRcbiAgICogQGRlcHJlY2F0ZWQgdjEg5YW85a65IEFQSeOAguW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRpY2tldCkpIOabv+S7o+OAglxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25Jbih0aWNrZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduSW5XaXRoQ3VzdG9tVGlja2V0IOaWueazlVxuICAgIGF3YWl0IHRoaXMuYXV0aEluc3RhbmNlLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRpY2tldCkpXG4gIH1cbn1cblxuLyoqXG4gKiB2MSDljL/lkI3nmbvlvZUgUHJvdmlkZXJcbiAqIOS9v+eUqOaWueW8jzogYXV0aC5hbm9ueW1vdXNBdXRoUHJvdmlkZXIoKS5zaWduSW4oKVxuICpcbiAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgILlu7rorq7kvb/nlKggYXV0aC5zaWduSW5Bbm9ueW1vdXNseSh7fSkg5pu/5Luj44CCXG4gKi9cbmV4cG9ydCBjbGFzcyBBbm9ueW1vdXNBdXRoUHJvdmlkZXIge1xuICBwcml2YXRlIGF1dGhJbnN0YW5jZTogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczoge1xuICAgIGF1dGhJbnN0YW5jZTogYW55XG4gIH0pIHtcbiAgICB0aGlzLmF1dGhJbnN0YW5jZSA9IG9wdGlvbnMuYXV0aEluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICog5Yy/5ZCN55m75b2V5LqR5byA5Y+RXG4gICAqIEBkZXByZWNhdGVkIHYxIOWFvOWuuSBBUEnjgILlu7rorq7kvb/nlKggYXV0aC5zaWduSW5Bbm9ueW1vdXNseSh7fSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduSW5Bbm9ueW1vdXNseSDmlrnms5VcbiAgICBhd2FpdCB0aGlzLmF1dGhJbnN0YW5jZS5zaWduSW5Bbm9ueW1vdXNseSh7fSlcbiAgfVxufVxuXG4vLyA9PT09PT09PT09IEF1dGggdjEg5YW85a655Z+657G7ID09PT09PT09PT1cblxuLyoqXG4gKiBBdXRoVjFDb21wYXQg5Z+657G777yM5o+Q5L6bIHYxIOeJiOacrOeahOWFvOWuuSBBUEkg5pa55rOV44CCXG4gKiBBdXRoIOexu+mAmui/hyBleHRlbmRzIEF1dGhWMUNvbXBhdCDmnaXnu6fmib/ov5nkupvmlrnms5XjgIJcbiAqXG4gKiDms6jmhI/vvJrmraTnsbvkuK3nmoTmlrnms5XpgJrov4cgdGhpcyDorr/pl67lrZDnsbsgQXV0aCDnmoTmlrnms5XlkozlsZ7mgKfvvIxcbiAqIOWMheaLrDogc2lnbkluLCBzaWduVXAsIHNpZ25JbldpdGhDdXN0b21UaWNrZXQsIHNpZ25JbkFub255bW91c2x5LFxuICogZ2V0VmVyaWZpY2F0aW9uLCByZXNldFBhc3N3b3JkLCBvbkxvZ2luU3RhdGVDaGFuZ2VkLCBvbkF1dGhTdGF0ZUNoYW5nZSxcbiAqIGNyZWF0ZUxvZ2luU3RhdGUsIGZvcm1hdFBob25lLCBjb25maWcsIHNpZ25JbldpdGhPQXV0aCDnrYnjgIJcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAtLSBhYnN0cmFjdCDln7rnsbvkuK0gYWJzdHJhY3Qg5aOw5piO5LiOIHB1YmxpYyDmlrnms5XmjpLluo/kuI3pgILnlKjluLjop4Top4TliJlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoVjFDb21wYXQge1xuICBhYnN0cmFjdCByZWFkb25seSBjb25maWc6IGFueVxuXG4gIC8vID09PT09PT09PT0gdjEg5YW85a65IEFQSSDmlrnms5UgPT09PT09PT09PVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOiOt+WPlueUqOS6juW+ruS/oeeZu+W9leeahCBXZWl4aW5BdXRoUHJvdmlkZXIgLy8gY3NwZWxsOmlnbm9yZSB3ZWl4aW4gV2VpeGluXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbldpdGhPQXV0aCh7IHByb3ZpZGVyOiBhcHBpZCB9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyB3ZWl4aW5BdXRoUHJvdmlkZXIob3B0aW9uczogeyBhcHBpZDogc3RyaW5nOyBzY29wZTogc3RyaW5nIH0pOiBXZWl4aW5BdXRoUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgV2VpeGluQXV0aFByb3ZpZGVyKHtcbiAgICAgIGF1dGhJbnN0YW5jZTogdGhpcyxcbiAgICAgIGFwcGlkOiBvcHRpb25zLmFwcGlkLFxuICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOiOt+WPlueUqOS6juiHquWumuS5ieeZu+W9leeahCBDdXN0b21BdXRoUHJvdmlkZXJcbiAgICogQGRlcHJlY2F0ZWQg5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aEN1c3RvbVRpY2tldCgoKSA9PiBQcm9taXNlLnJlc29sdmUodGlja2V0KSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgY3VzdG9tQXV0aFByb3ZpZGVyKCk6IEN1c3RvbUF1dGhQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBDdXN0b21BdXRoUHJvdmlkZXIoe1xuICAgICAgYXV0aEluc3RhbmNlOiB0aGlzLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDojrflj5bnlKjkuo7ljL/lkI3nmbvlvZXnmoQgQW5vbnltb3VzQXV0aFByb3ZpZGVyXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbkFub255bW91c2x5KHt9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyBhbm9ueW1vdXNBdXRoUHJvdmlkZXIoKTogQW5vbnltb3VzQXV0aFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IEFub255bW91c0F1dGhQcm92aWRlcih7XG4gICAgICBhdXRoSW5zdGFuY2U6IHRoaXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOS9v+eUqOmCrueuseWSjOWvhueggeazqOWGjOS6keW8gOWPkei0puaIt1xuICAgKiBAZGVwcmVjYXRlZCDlu7rorq7kvb/nlKggYXV0aC5zaWduVXAoeyBlbWFpbCwgcGFzc3dvcmQgfSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblVwV2l0aEVtYWlsQW5kUGFzc3dvcmQoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8U2lnblVwUmVzPiB7XG4gICAgaWYgKHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAnZW1haWwgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3Bhc3N3b3JkIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduVXAg5pa55rOVXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnblVwKHtcbiAgICAgIGVtYWlsLFxuICAgICAgcGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOS9v+eUqOmCrueuseWSjOWvhueggeeZu+W9leS6keW8gOWPkVxuICAgKiBAZGVwcmVjYXRlZCDlu7rorq7kvb/nlKggYXV0aC5zaWduSW5XaXRoUGFzc3dvcmQoeyBlbWFpbCwgcGFzc3dvcmQgfSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEVtYWlsQW5kUGFzc3dvcmQoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAnZW1haWwgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3Bhc3N3b3JkIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduSW4g5pa55rOVXG4gICAgYXdhaXQgdGhpcy5zaWduSW4oe1xuICAgICAgdXNlcm5hbWU6IGVtYWlsLFxuICAgICAgcGFzc3dvcmQsXG4gICAgfSlcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOWPkemAgemHjee9ruWvhueggeeahOmCruS7tlxuICAgKiBAZGVwcmVjYXRlZCDlu7rorq7kvb/nlKggYXV0aC5yZXNldFBhc3N3b3JkRm9yRW1haWwoZW1haWwpIOabv+S7o+OAglxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbmRQYXNzd29yZFJlc2V0RW1haWwoZW1haWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0eXBlb2YgZW1haWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VtYWlsIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBnZXRWZXJpZmljYXRpb24g5pa55rOVXG4gICAgYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24oeyBlbWFpbCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHYxIEFQSTog5L2/55So55So5oi35ZCN5a+G56CB55m75b2V5LqR5byA5Y+RXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbldpdGhQYXNzd29yZCh7IHVzZXJuYW1lLCBwYXNzd29yZCB9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoVXNlcm5hbWVBbmRQYXNzd29yZCh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAncGFzc3dvcmQgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgLy8g5L2/55SoIEF1dGgg5bey5pyJ55qEIHNpZ25JbiDmlrnms5VcbiAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICB1c2VybmFtZSxcbiAgICAgIHBhc3N3b3JkLFxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDlj5HpgIHmiYvmnLrpqozor4HnoIFcbiAgICogQGRlcHJlY2F0ZWQg5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aE90cCh7IHBob25lIH0pIOaIliBhdXRoLmdldFZlcmlmaWNhdGlvbih7IHBob25lX251bWJlciB9KSDmm7/ku6PjgIJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kUGhvbmVDb2RlKHBob25lTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodHlwZW9mIHBob25lTnVtYmVyICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdwaG9uZU51bWJlciBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICAvLyDkvb/nlKggQXV0aCDlt7LmnInnmoQgZ2V0VmVyaWZpY2F0aW9uIOaWueazlVxuICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwaG9uZU51bWJlcilcbiAgICBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbih7IHBob25lX251bWJlcjogZm9ybWF0dGVkUGhvbmUgfSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIHYxIEFQSTog5omL5py65Y+35rOo5YaM77yI5pSv5oyB55+t5L+h6aqM6K+B56CBK+WvhueggeaWueW8j++8iVxuICAgKiBAZGVwcmVjYXRlZCDlu7rorq7kvb/nlKggYXV0aC5zaWduVXAoeyBwaG9uZV9udW1iZXIsIHZlcmlmaWNhdGlvbl9jb2RlLCBwYXNzd29yZD8gfSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblVwV2l0aFBob25lQ29kZShwaG9uZU51bWJlcjogc3RyaW5nLCBwaG9uZUNvZGU6IHN0cmluZywgcGFzc3dvcmQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh0eXBlb2YgcGhvbmVOdW1iZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3Bob25lTnVtYmVyIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHBob25lQ29kZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAncGhvbmVDb2RlIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwaG9uZU51bWJlcilcblxuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduVXAg5pa55rOVXG4gICAgYXdhaXQgdGhpcy5zaWduVXAoe1xuICAgICAgcGhvbmVfbnVtYmVyOiBmb3JtYXR0ZWRQaG9uZSxcbiAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBwaG9uZUNvZGUsXG4gICAgICAuLi4ocGFzc3dvcmQgPyB7IHBhc3N3b3JkIH0gOiB7fSksXG4gICAgfSlcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOaJi+acuuWPt+eZu+W9le+8iOaUr+aMgeefreS/oemqjOivgeeggSBvciDlr4bnoIHmlrnlvI/vvIlcbiAgICogQGRlcHJlY2F0ZWQg5a+G56CB5pa55byP5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aFBhc3N3b3JkKHsgcGhvbmUsIHBhc3N3b3JkIH0pIOabv+S7o++8m1xuICAgKiDpqozor4HnoIHmlrnlvI/lu7rorq7kvb/nlKggYXV0aC5zaWduSW5XaXRoT3RwKHsgcGhvbmUgfSkg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFBob25lQ29kZU9yUGFzc3dvcmQocGFyYW1zOiB7XG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZ1xuICAgIHBob25lQ29kZT86IHN0cmluZ1xuICAgIHBhc3N3b3JkPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgcGhvbmVOdW1iZXIsIHBob25lQ29kZSwgcGFzc3dvcmQgfSA9IHBhcmFtc1xuICAgIGlmICh0eXBlb2YgcGhvbmVOdW1iZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3Bob25lTnVtYmVyIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwaG9uZU51bWJlcilcblxuICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgLy8g5L2/55SoIEF1dGgg5bey5pyJ55qEIHNpZ25JbiDmlrnms5Xov5vooYzlr4bnoIHnmbvlvZVcbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgICAgdXNlcm5hbWU6IGZvcm1hdHRlZFBob25lLFxuICAgICAgICBwYXNzd29yZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChwaG9uZUNvZGUpIHtcbiAgICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBzaWduSW4g5pa55rOV6L+b6KGM6aqM6K+B56CB55m75b2VXG4gICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgIHVzZXJuYW1lOiBmb3JtYXR0ZWRQaG9uZSxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiBwaG9uZUNvZGUsXG4gICAgICB9IGFzIGFueSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdwaG9uZUNvZGUgb3IgcGFzc3dvcmQgbXVzdCBiZSBwcm92aWRlZCcpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIHYxIEFQSTog5omL5py65Y+35by65Yi26YeN572u5a+G56CBXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLnJlc2V0UGFzc3dvcmRGb3JFbWFpbChwaG9uZU51bWJlcikg5pu/5Luj44CCXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9yY2VSZXNldFB3ZEJ5UGhvbmVDb2RlKHBhcmFtczoge1xuICAgIHBob25lTnVtYmVyOiBzdHJpbmdcbiAgICBwaG9uZUNvZGU6IHN0cmluZ1xuICAgIHBhc3N3b3JkOiBzdHJpbmdcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyBwaG9uZU51bWJlciwgcGhvbmVDb2RlLCBwYXNzd29yZCB9ID0gcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBwaG9uZU51bWJlciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAncGhvbmVOdW1iZXIgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGhvbmVDb2RlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdwaG9uZUNvZGUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3Bhc3N3b3JkIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwaG9uZU51bWJlcilcblxuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCByZXNldFBhc3N3b3JkIOaWueazlVxuICAgIGF3YWl0IHRoaXMucmVzZXRQYXNzd29yZCh7XG4gICAgICBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogcGhvbmVDb2RlLFxuICAgIH0pXG5cbiAgICAvLyDph43nva7lr4bnoIHmiJDlip/lkI7kvb/nlKggQXV0aCDlt7LmnInnmoQgc2lnbkluIOaWueazleiHquWKqOeZu+W9lVxuICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgIHVzZXJuYW1lOiBmb3JtYXR0ZWRQaG9uZSxcbiAgICAgIHBhc3N3b3JkLFxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDmjqXmlLbkuIDkuKrlm57osIPlh73mlbDvvIzlnKjliLfmlrDnn63mnJ/orr/pl67ku6TniYzliY3osIPnlKjvvIzmoLnmja7ov5Tlm57lgLzlhrPlrprmmK/lkKbliLfmlrBcbiAgICogQGRlcHJlY2F0ZWQgdjEg5YW85a65IEFQSe+8jOW9k+WJjSB2MyBTREsg5Lit5peg55u05o6l5a+55bqU5pa55rOV44CCXG4gICAqIOW7uuiuruS9v+eUqCBhdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrKSDnm5HlkKwgVE9LRU5fUkVGUkVTSEVEIOS6i+S7tuabv+S7o+OAglxuICAgKi9cbiAgcHVibGljIHNob3VsZFJlZnJlc2hBY2Nlc3NUb2tlbihfY2FsbGJhY2s6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1t2MSDlhbzlrrldIHNob3VsZFJlZnJlc2hBY2Nlc3NUb2tlbigpIOWcqOW9k+WJjeeJiOacrOS4reaXoOazleWunueOsOOAgidcbiAgICAgICsgJyDlu7rorq7kvb/nlKggYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShjYWxsYmFjaykg5p2l55uR5ZCsIFRPS0VOX1JFRlJFU0hFRCDkuovku7bmm7/ku6PjgIInLClcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOaOpeaUtuS4gOS4quWbnuiwg+WHveaVsO+8jOWcqOeZu+W9leeKtuaAgei/h+acn+aXtuiwg+eUqFxuICAgKiBAZGVwcmVjYXRlZCDlu7rorq7kvb/nlKggYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShjYWxsYmFjaykg5pu/5Luj77yM55uR5ZCsIFNJR05FRF9PVVQg5LqL5Lu244CCXG4gICAqL1xuICBwdWJsaWMgb25Mb2dpblN0YXRlRXhwaXJlZChjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAvLyDkvb/nlKggQXV0aCDlt7LmnInnmoQgb25Mb2dpblN0YXRlQ2hhbmdlZCDmlrnms5VcbiAgICB0aGlzLm9uTG9naW5TdGF0ZUNoYW5nZWQoKHBhcmFtcykgPT4ge1xuICAgICAgaWYgKHBhcmFtcz8uZXZlbnRUeXBlID09PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDmjqXmlLbkuIDkuKrlm57osIPlh73mlbDvvIzlnKjnn63mnJ/orr/pl67ku6TniYzliLfmlrDlkI7osIPnlKhcbiAgICogQGRlcHJlY2F0ZWQg5bu66K6u5L2/55SoIGF1dGgub25BdXRoU3RhdGVDaGFuZ2UoY2FsbGJhY2spIOabv+S7o++8jOebkeWQrCBUT0tFTl9SRUZSRVNIRUQg5LqL5Lu244CCXG4gICAqL1xuICBwdWJsaWMgb25BY2Nlc3NUb2tlblJlZnJlc2hlZChjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAvLyDkvb/nlKggQXV0aCDlt7LmnInnmoQgb25BdXRoU3RhdGVDaGFuZ2Ug5pa55rOVXG4gICAgdGhpcy5vbkF1dGhTdGF0ZUNoYW5nZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCA9PT0gQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuVE9LRU5fUkVGUkVTSEVEKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHYxIEFQSTog5o6l5pS25LiA5Liq5Zue6LCD5Ye95pWw77yM5Zyo5Yy/5ZCN55m75b2V54q25oCB6KKr6L2s5o2i5ZCO6LCD55SoXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrKSDmm7/ku6PvvIznm5HlkKwgU0lHTkVEX0lOIOS6i+S7tuOAglxuICAgKi9cbiAgcHVibGljIG9uQW5vbnltb3VzQ29udmVydGVkKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIC8vIOS9v+eUqCBBdXRoIOW3suacieeahCBvbkF1dGhTdGF0ZUNoYW5nZSDmlrnms5VcbiAgICB0aGlzLm9uQXV0aFN0YXRlQ2hhbmdlKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4pIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDmjqXmlLbkuIDkuKrlm57osIPlh73mlbDvvIzlnKjnmbvlvZXnsbvlnovlj5HnlJ/lj5jljJblkI7osIPnlKhcbiAgICogQGRlcHJlY2F0ZWQg5bu66K6u5L2/55SoIGF1dGgub25BdXRoU3RhdGVDaGFuZ2UoY2FsbGJhY2spIOabv+S7o++8jOebkeWQrCBTSUdORURfSU4gLyBTSUdORURfT1VUIOS6i+S7tuOAglxuICAgKi9cbiAgcHVibGljIG9uTG9naW5UeXBlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAvLyDkvb/nlKggQXV0aCDlt7LmnInnmoQgb25BdXRoU3RhdGVDaGFuZ2Ug5pa55rOVXG4gICAgdGhpcy5vbkF1dGhTdGF0ZUNoYW5nZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCA9PT0gQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIHx8IGV2ZW50ID09PSBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfT1VUKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gPT09PT09PT09PSDlo7DmmI7lrZDnsbsgQXV0aCDpnIDopoHmj5DkvpvnmoTmlrnms5Uv5bGe5oCnID09PT09PT09PT1cbiAgYWJzdHJhY3Qgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxhbnk+XG4gIGFic3RyYWN0IHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCAmIHsgcGhvbmU/OiBzdHJpbmcgfSk6IFByb21pc2U8U2lnblVwUmVzPlxuICBhYnN0cmFjdCBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KGdldFRpY2tGbj86IGF1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZuKTogUHJvbWlzZTxhbnk+XG4gIGFic3RyYWN0IHNpZ25JbkFub255bW91c2x5KHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+XG4gIGFic3RyYWN0IGdldFZlcmlmaWNhdGlvbihwYXJhbXM6IGFueSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT5cbiAgYWJzdHJhY3QgcmVzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+XG4gIGFic3RyYWN0IG9uTG9naW5TdGF0ZUNoYW5nZWQoY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPlxuICBhYnN0cmFjdCBvbkF1dGhTdGF0ZUNoYW5nZShjYWxsYmFjazogYW55KTogYW55XG4gIGFic3RyYWN0IGNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zPzogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+XG4gIGFic3RyYWN0IHNpZ25JbldpdGhPQXV0aChwYXJhbXM6IGFueSk6IFByb21pc2U8YW55PlxuICBhYnN0cmFjdCBncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+XG4gIGFic3RyYWN0IGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPlxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZm9ybWF0UGhvbmUocGhvbmU6IHN0cmluZyk6IHN0cmluZ1xufVxuXG4vLyA9PT09PT09PT09IFVzZXIgdjEg5YW85a65IG1peGluID09PT09PT09PT1cblxuLyoqXG4gKiDlsIYgdjEg5YW85a655pa55rOV5bqU55So5YiwIFVzZXIg57G755qEIHByb3RvdHlwZSDkuIrjgIJcbiAqIOWcqCBpbmRleC50cyDkuK3osIPnlKg6IGFwcGx5VXNlclYxQ29tcGF0KFVzZXIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVVzZXJWMUNvbXBhdChVc2VyQ2xhc3M6IGFueSk6IHZvaWQge1xuICAvKipcbiAgICogdjEgQVBJOiDlsIblvZPliY3otKbmiLfkuI7oh6rlrprkuYnnmbvlvZUgVGlja2V0IOi/m+ihjOe7keWumlxuICAgKiBAZGVwcmVjYXRlZCB2MSDlhbzlrrkgQVBJ77yM5b2T5YmN54mI5pys5Lit5peg5rOV55u05o6l5a6e546w44CCXG4gICAqIOW7uuiuruS9v+eUqCBhdXRoLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRpY2tldCkpIOabv+S7o+OAglxuICAgKi9cbiAgVXNlckNsYXNzLnByb3RvdHlwZS5saW5rV2l0aFRpY2tldCA9IGFzeW5jIGZ1bmN0aW9uIChfdGlja2V0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1t2MSDlhbzlrrldIFVzZXIubGlua1dpdGhUaWNrZXQoKSDlnKjlvZPliY3niYjmnKzkuK3ml6Dms5Xlrp7njrDjgIInXG4gICAgICArICcg5bu66K6u5L2/55SoIGF1dGguc2lnbkluV2l0aEN1c3RvbVRpY2tldCgoKSA9PiBQcm9taXNlLnJlc29sdmUodGlja2V0KSkg5pu/5Luj44CCJywpXG4gIH1cblxuICAvKipcbiAgICogdjEgQVBJOiDlsIblvZPliY3otKbmiLfkuI7nrKzkuInmlrnpibTmnYPmj5DkvpvmlrnvvIjku6Xph43lrprlkJHlvaLlvI/vvInov5vooYznu5HlrppcbiAgICogQGRlcHJlY2F0ZWQg5bu66K6u5L2/55SoIGF1dGgubGlua0lkZW50aXR5KHsgcHJvdmlkZXI6ICdwcm92aWRlcklkJyB9KSDmm7/ku6PjgIJcbiAgICovXG4gIFVzZXJDbGFzcy5wcm90b3R5cGUubGlua1dpdGhSZWRpcmVjdCA9IGZ1bmN0aW9uIChfcHJvdmlkZXI6IGFueSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignW3YxIOWFvOWuuV0gVXNlci5saW5rV2l0aFJlZGlyZWN0KCkg5Zyo5b2T5YmN54mI5pys5Lit5peg5rOV5a6e546w44CCJ1xuICAgICAgKyAnIOW7uuiuruS9v+eUqCBhdXRoLmxpbmtJZGVudGl0eSh7IHByb3ZpZGVyOiBcXCdwcm92aWRlcklkXFwnIH0pIOabv+S7o+OAgicsKVxuICB9XG5cbiAgLyoqXG4gICAqIHYxIEFQSTog5pu05paw5b2T5YmN55qE55m75b2V6YKu566xXG4gICAqIEBkZXByZWNhdGVkIOW7uuiuruS9v+eUqCBhdXRoLnVwZGF0ZVVzZXIoeyBlbWFpbDogbmV3RW1haWwgfSkg5pu/5Luj44CCXG4gICAqL1xuICBVc2VyQ2xhc3MucHJvdG90eXBlLnVwZGF0ZUVtYWlsID0gYXN5bmMgZnVuY3Rpb24gKG5ld0VtYWlsOiBzdHJpbmcsIF9wYXNzd29yZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0eXBlb2YgbmV3RW1haWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ25ld0VtYWlsIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIC8vIOS9v+eUqCBVc2VyIOW3suacieeahCB1cGRhdGVVc2VyQmFzaWNJbmZvIOaWueazlVxuICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyh7XG4gICAgICBlbWFpbDogbmV3RW1haWwsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOe7keWumuaJi+acuuWPt1xuICAgKiBAZGVwcmVjYXRlZCB2MSDlhbzlrrkgQVBJ77yM5b2T5YmN54mI5pys5Lit5peg5rOV55u05o6l5ZyoIFVzZXIg5LiK5a6e546w44CCXG4gICAqIOW7uuiuruS9v+eUqCBhdXRoLmJpbmRQaG9uZU51bWJlcih7IHBob25lX251bWJlciwgdmVyaWZpY2F0aW9uX3Rva2VuLCBzdWRvX3Rva2VuIH0pIOabv+S7o+OAglxuICAgKi9cbiAgVXNlckNsYXNzLnByb3RvdHlwZS5saW5rV2l0aFBob25lTnVtYmVyID0gYXN5bmMgZnVuY3Rpb24gKF9waG9uZU51bWJlcjogc3RyaW5nLCBfcGhvbmVDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1t2MSDlhbzlrrldIFVzZXIubGlua1dpdGhQaG9uZU51bWJlcigpIOWcqOW9k+WJjeeJiOacrOS4reaXoOazleWunueOsOOAgidcbiAgICAgICsgJyDlu7rorq7kvb/nlKggYXV0aC5iaW5kUGhvbmVOdW1iZXIoeyBwaG9uZV9udW1iZXIsIHZlcmlmaWNhdGlvbl90b2tlbiwgc3Vkb190b2tlbiB9KSDmm7/ku6PjgIInLClcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOabtOaWsOaJi+acuuWPt1xuICAgKiBAZGVwcmVjYXRlZCB2MSDlhbzlrrkgQVBJ77yM5b2T5YmN54mI5pys5Lit5peg5rOV55u05o6l5ZyoIFVzZXIg5LiK5a6e546w44CCXG4gICAqIOW7uuiuruS9v+eUqCBhdXRoLnVwZGF0ZVVzZXIoeyBwaG9uZTogbmV3UGhvbmVOdW1iZXIgfSkg5pu/5Luj44CCXG4gICAqL1xuICBVc2VyQ2xhc3MucHJvdG90eXBlLnVwZGF0ZVBob25lTnVtYmVyID0gYXN5bmMgZnVuY3Rpb24gKF9waG9uZU51bWJlcjogc3RyaW5nLCBfcGhvbmVDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1t2MSDlhbzlrrldIFVzZXIudXBkYXRlUGhvbmVOdW1iZXIoKSDlnKjlvZPliY3niYjmnKzkuK3ml6Dms5Xlrp7njrDjgIInXG4gICAgICArICcg5bu66K6u5L2/55SoIGF1dGgudXBkYXRlVXNlcih7IHBob25lOiBuZXdQaG9uZU51bWJlciB9KSDmm7/ku6PjgIInLClcbiAgfVxuXG4gIC8qKlxuICAgKiB2MSBBUEk6IOino+e7keafkOS4queZu+W9leaWueW8j1xuICAgKiBAZGVwcmVjYXRlZCB2MSDlhbzlrrkgQVBJ77yM5b2T5YmN54mI5pys5Lit5peg5rOV55u05o6l5ZyoIFVzZXIg5LiK5a6e546w44CCXG4gICAqIOW7uuiuruS9v+eUqCBhdXRoLnVubGlua0lkZW50aXR5KHsgcHJvdmlkZXI6IGxvZ2luVHlwZSB9KSDmm7/ku6PjgIJcbiAgICovXG4gIFVzZXJDbGFzcy5wcm90b3R5cGUudW5saW5rID0gYXN5bmMgZnVuY3Rpb24gKF9sb2dpblR5cGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignW3YxIOWFvOWuuV0gVXNlci51bmxpbmsoKSDlnKjlvZPliY3niYjmnKzkuK3ml6Dms5Xlrp7njrDjgIInXG4gICAgICArICcg5bu66K6u5L2/55SoIGF1dGgudW5saW5rSWRlbnRpdHkoeyBwcm92aWRlcjogbG9naW5UeXBlIH0pIOabv+S7o+OAgicsKVxuICB9XG59XG4iXX0=
@@ -180,6 +180,7 @@ var dealUserAdapter = function (config, adapter) {
180
180
  var reqClassParams = {
181
181
  timeout: 10000,
182
182
  restrictedMethods: ['get', 'post', 'upload', 'download', 'request'],
183
+ auth: config.auth,
183
184
  };
184
185
  var adapterReq_1 = new adapter.reqClass(reqClassParams);
185
186
  data.baseRequest = function (url, options) {
@@ -264,4 +265,4 @@ export var useAuthAdapter = function (config) {
264
265
  }
265
266
  return dealAuthAdapter(config, config.adapter);
266
267
  };
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUs1QztJQUVFLGdDQUFZLE1BQW1GOztRQUM3RixJQUFJO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxZQUFZLEtBQUksQ0FBQyxDQUFBLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLFVBQVUsS0FBSSxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUE7U0FDM0c7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsWUFBWSxLQUFJLEVBQUUsQ0FBQTtTQUMvQztJQUNILENBQUM7SUFNSyx3Q0FBTyxHQUFiLFVBQWMsR0FBVzs7O2dCQUN2QixXQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFBOzs7S0FDdEM7SUFPSywyQ0FBVSxHQUFoQixVQUFpQixHQUFXOzs7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBOzs7O0tBQ2xDO0lBUUssd0NBQU8sR0FBYixVQUFjLEdBQVcsRUFBRSxLQUFhOzs7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTs7OztLQUN0QztJQUVELDRDQUFXLEdBQVgsVUFBWSxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFD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QUFjLEVBQUU7WUFDdkIsV0FBVyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1lBQzdDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO1NBQ2hDO1FBRUQsNkJBQVksSUFBSSxHQUFLLFdBQVcsRUFBRTtLQUNuQztJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQTtLQUMzQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLFVBQUMsTUFBbUI7SUFFaEQsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFLLE1BQU0sQ0FBQyxPQUFlLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUNoRSxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQy9DO0lBRUQsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNoRCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IGFkYXB0ZXJGb3JXeE1wIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgdHlwZSB7IEF1dGhPcHRpb25zIH0gZnJvbSAnQGNsb3VkYmFzZS9vYXV0aCdcblxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmNsYXNzIE9hdXRoQ2xpZW50U3RvcmFnZUJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgbG9jYWxTdG9yYWdlXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IHsgbG9jYWxTdG9yYWdlOiBhbnkgLyogU3RvcmFnZUludGVyZmFjZSAqLzsgYWRhcHRlcjogU0RLQWRhcHRlckludGVyZmFjZSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlID0gY29uZmlnPy5sb2NhbFN0b3JhZ2UgfHwgKGNvbmZpZz8uYWRhcHRlcj8ucm9vdD8uZ2xvYmFsVGhpcyB8fCBnbG9iYWxUaGlzKS5sb2NhbFN0b3JhZ2VcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBjb25maWc/LmxvY2FsU3RvcmFnZSB8fCB7fVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgSXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZykge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBJdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgc2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpXG4gIH1cblxuICByZW1vdmVJdGVtU3luYyhrZXk6IHN0cmluZykge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KVxuICB9XG59XG5cbi8qKlxuICogY29weSB0byBnaXRAZ2l0LndvYS5jb206UUJhc2UvbGNhcC9kYXRhc291cmNlLmdpdC9wYWNrYWdlcy9jbG91ZC1zZGsvY29tbW9uXG4gKiDlkIzmraXkv67mlLlcbiAqL1xuY29uc3QgVVJMX1JFRyA9IC9eW146XSs6XFwvXFwvW14vXSsoXFwvW14/I10rKS9cblxuY29uc3QgZGVhbEFkYXB0ZXJSZXF1ZXN0RGF0YSA9IChyZXMsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVxdWVzdElkID0gb3B0aW9ucz8uaGVhZGVycz8uWyd4LXJlcXVlc3QtaWQnXVxuXG4gIGlmICghcmVzKSB7XG4gICAgcmVzID0ge31cbiAgfVxuXG4gIGlmIChyZXM/LmNvZGUgfHwgcmVzPy5kYXRhPy5lcnJvcl9jb2RlKSB7XG4gICAgcmVzID0ge1xuICAgICAgZXJyb3I6IHJlcy5jb2RlIHx8IHJlcy5kYXRhLmVycm9yLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHJlcy5kYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IHJlcy5tZXNzYWdlIHx8IHJlcy5jb2RlIHx8IHJlcy5kYXRhLmVycm9yX2NvZGUsXG4gICAgICByZXF1ZXN0X2lkOiByZXMucmVxdWVzdElkLFxuICAgICAgZXJyb3JfY29kZTogcmVzLmRhdGE/LmVycm9yX2NvZGUsXG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXM/LnJlcXVlc3RfaWQpIHtcbiAgICByZXMucmVxdWVzdF9pZCA9IHJlcy5yZXF1ZXN0X2lkIHx8IHJlcXVlc3RJZFxuICB9XG5cbiAgaWYgKHJlcz8uZXJyb3IpIHtcbiAgICByZXMuZXJyb3JfdXJpID0gZ2V0VXJsUGF0aChvcHRpb25zPy51cmwpXG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgcmV0dXJuIHJlcz8uZGF0YSB8fCB7fVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU9hdXRoQ2xpZW50UmVxdWVzdChyZXFDbGFzcykge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBib2R5PzogYW55IHwgbnVsbFxuICAgICAgaGVhZGVycz86IGFueSB8IG51bGxcbiAgICAgIG1ldGhvZD86IHN0cmluZ1xuICAgICAgW2tleTogc3RyaW5nXTogYW55XG4gICAgfSxcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpXG4gICAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29weU9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGNvcHlPcHRpb25zLmJvZHkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhc2sgPSB3eC5yZXF1ZXN0KHtcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhOiBjb3B5T3B0aW9ucy5ib2R5LFxuICAgICAgICB0aW1lb3V0OiByZXFDbGFzcy5fdGltZW91dCxcbiAgICAgICAgbWV0aG9kOiBjb3B5T3B0aW9ucy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGhlYWRlcjogY29weU9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICByZXMgPSBkZWFsQWRhcHRlclJlcXVlc3REYXRhKHJlcywgeyAuLi5vcHRpb25zLCB1cmwgfSlcblxuICAgICAgICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChyZXMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUocmVzKVxuICAgICAgICB9LFxuICAgICAgICBmYWlsKGVycikge1xuICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICBlcnJvcjogJ3VucmVhY2hhYmxlJyxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlKGVycikge1xuICAgICAgICAgIGlmICghZXJyIHx8ICFlcnIuZXJyTXNnKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXFDbGFzcy5fdGltZW91dCB8fCByZXFDbGFzcy5fcmVzdHJpY3RlZE1ldGhvZHMuaW5kZXhPZigncmVxdWVzdCcpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgZXJyTXNnIH0gPSBlcnJcbiAgICAgICAgICBpZiAoZXJyTXNnID09PSAncmVxdWVzdDpmYWlsIHRpbWVvdXQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4ocmVxQ2xhc3MuX3RpbWVvdXRNc2cpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0YXNrLmFib3J0KClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogR2V0IHVybCBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRVcmxQYXRoKHVybDogc3RyaW5nKSB7XG4gIC8vIHJldHVybiBwYXRoIGlmIG1hdGNoZWQsIG9yIG9yaWdpbmFsIHVybFxuICByZXR1cm4gVVJMX1JFRy50ZXN0KHVybCkgPyBSZWdFeHAuJDEgOiB1cmxcbn1cblxuLyoqXG4gKiDnlKjmiLfoh6rlrprkuYlhZGFwdGVy5aSE55CGXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gYWRhcHRlclxuICogQHJldHVybnNcbiAqL1xuY29uc3QgZGVhbFVzZXJBZGFwdGVyID0gKGNvbmZpZzogQXV0aE9wdGlvbnMsIGFkYXB0ZXI6IFNES0FkYXB0ZXJJbnRlcmZhY2UpID0+IHtcbiAgY29uc3QgZGF0YSA9IHsgLi4uY29uZmlnIH1cblxuICB0cnkge1xuICAgIGlmICghY29uZmlnPy5zdG9yYWdlICYmIGFkYXB0ZXI/LmxvY2FsU3RvcmFnZSkge1xuICAgICAgZGF0YS5zdG9yYWdlID0gbmV3IE9hdXRoQ2xpZW50U3RvcmFnZUJhc2UoeyBsb2NhbFN0b3JhZ2U6IGFkYXB0ZXIubG9jYWxTdG9yYWdlLCBhZGFwdGVyIH0pXG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcuY2FwdGNoYU9wdGlvbnMgJiYgYWRhcHRlcj8uY2FwdGNoYU9wdGlvbnMpIHtcbiAgICAgIGRhdGEuY2FwdGNoYU9wdGlvbnMgPSBhZGFwdGVyLmNhcHRjaGFPcHRpb25zXG4gICAgfVxuXG4gICAgLy8g55So5oi35pyq5Lyg5YWlYmFzZVJlcXVlc3TlkoxyZXF1ZXN05pe25aSE55CGXG4gICAgLy8gT0F1dGgyQ2xpZW505LyY5YWI5LulIGJhc2VSZXF1ZXN0IOS4uuWHhlxuICAgIC8vIEF1dGgg5Zyo5rKh5pyJIHJlcXVlc3Qg55qE5pe25YCZ5Lya5Yid5aeL5YyWIENhcHRjaGHvvIzku47ogIzkvb/nlKggQ2FwdGNoYSDnmoQgcmVxdWVzdFxuICAgIGlmICghY29uZmlnLmJhc2VSZXF1ZXN0ICYmICFjb25maWcucmVxdWVzdCAmJiBhZGFwdGVyPy5yZXFDbGFzcykge1xuICAgICAgY29uc3QgcmVxQ2xhc3NQYXJhbXMgPSB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICByZXN0cmljdGVkTWV0aG9kczogWydnZXQnLCAncG9zdCcsICd1cGxvYWQnLCAnZG93bmxvYWQnLCAncmVxdWVzdCddLFxuICAgICAgfVxuICAgICAgY29uc3QgYWRhcHRlclJlcSA9IG5ldyBhZGFwdGVyLnJlcUNsYXNzKHJlcUNsYXNzUGFyYW1zKVxuICAgICAgZGF0YS5iYXNlUmVxdWVzdCA9IGFzeW5jIGZ1bmN0aW9uICh1cmw6IHN0cmluZywgb3B0aW9ucz86IHsgbWV0aG9kPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBsZXQgcmVzOiBhbnkgPSB7fVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RUeXBlID0gb3B0aW9ucy5tZXRob2Q/LnRvTG9jYWxlTG93ZXJDYXNlKCkgfHwgJ3Bvc3QnXG5cbiAgICAgICAgY29uc3QgZnVuYyA9IGFkYXB0ZXJSZXE/LltyZXF1ZXN0VHlwZV0/LmJpbmQ/LihhZGFwdGVyUmVxKVxuXG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCDjgJAke3JlcXVlc3RUeXBlfeOAkSByZXF1ZXN0IG1ldGhvZGApXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIOWFvOWuuemdnuWwj+eoi+W6j+eahGFkYXB0ZXJcbiAgICAgICAgICBpZiAoKCFvcHRpb25zLmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10gfHwgb3B0aW9ucy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpICYmICFbJ3N0cmluZycsICd1bmRlZmluZWQnXS5pbmNsdWRlcyh0eXBlb2Ygb3B0aW9ucy5ib2R5KSkge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5kYXRhIHx8IG9wdGlvbnMuYm9keVxuICAgICAgICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5ib2R5KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXMgPSBhd2FpdCBmdW5jKHsgdXJsLCAuLi5vcHRpb25zIH0pXG4gICAgICAgICAgcmVzID0gZGVhbEFkYXB0ZXJSZXF1ZXN0RGF0YShyZXMsIHsgLi4ub3B0aW9ucywgdXJsIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVzID0geyAuLi5lcnJvcj8uZGF0YSwgLi4uZXJyb3IgfVxuICAgICAgICAgIHRocm93IHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcz8uZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKCd1c2VyIGFkYXB0ZXIgZ2VuZXJhdGUgZmFpbDonLCBlKVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiDlhoXnva7pu5jorqRhZGFwdGVy5aSE55CGXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBkZWFsQXV0aEFkYXB0ZXIgPSAoY29uZmlnOiBBdXRoT3B0aW9ucywgYWRhcHRlcjogU0RLQWRhcHRlckludGVyZmFjZSkgPT4ge1xuICBjb25zdCBkYXRhID0geyAuLi5jb25maWcgfVxuICBjb25zdCBhdXRoT3B0aW9uczogYW55ID0ge31cblxuICBpZiAoYWRhcHRlcj8uY2FwdGNoYU9wdGlvbnMpIHtcbiAgICBkYXRhLmNhcHRjaGFPcHRpb25zID0gYWRhcHRlci5jYXB0Y2hhT3B0aW9uc1xuICB9XG5cbiAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkgfHwgKGNvbmZpZy5zdG9yYWdlICYmIGNvbmZpZy5iYXNlUmVxdWVzdCkpIHJldHVybiBkYXRhXG5cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3QgeyBsb2NhbFN0b3JhZ2UsIHJlcUNsYXNzOiBSZXFDbGFzcyB9ID0gYWRhcHRlckZvcld4TXAuZ2VuQWRhcHRlcih7fSlcbiAgICBpZiAobG9jYWxTdG9yYWdlKSB7XG4gICAgICBhdXRoT3B0aW9ucy5zdG9yYWdlID0gbmV3IE9hdXRoQ2xpZW50U3RvcmFnZUJhc2UoeyBsb2NhbFN0b3JhZ2UsIGFkYXB0ZXIgfSlcbiAgICB9XG4gICAgaWYgKFJlcUNsYXNzKSB7XG4gICAgICBjb25zdCByZXFDbGFzcyA9IG5ldyBSZXFDbGFzcyh7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICByZXN0cmljdGVkTWV0aG9kczogWydnZXQnLCAncG9zdCcsICd1cGxvYWQnLCAnZG93bmxvYWQnLCAncmVxdWVzdCddLFxuICAgICAgfSlcbiAgICAgIGF1dGhPcHRpb25zLnJlcXVlc3QgPSBnZW5lcmF0ZU9hdXRoQ2xpZW50UmVxdWVzdChyZXFDbGFzcylcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jYXB0Y2hhT3B0aW9ucykge1xuICAgICAgYXV0aE9wdGlvbnMuYmFzZVJlcXVlc3QgPSBhdXRoT3B0aW9ucy5yZXF1ZXN0XG4gICAgICBhdXRoT3B0aW9ucy5yZXF1ZXN0ID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgLi4uYXV0aE9wdGlvbnMgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignYWRhcHRlciBnZW5lcmF0ZSBmYWlsOicsIGUpXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG5leHBvcnQgY29uc3QgdXNlQXV0aEFkYXB0ZXIgPSAoY29uZmlnOiBBdXRoT3B0aW9ucykgPT4ge1xuICAvLyDlhbzlrrnlvq7mkK1jbG91ZC1zZGvvvIxhdXRo5LitanMtc2Rr6buY6K6k55qEYWRhcHRlcuS4jei/m+ihjOmFjee9rlxuICBpZiAoY29uZmlnLmFkYXB0ZXIgJiYgKGNvbmZpZy5hZGFwdGVyIGFzIGFueSkudHlwZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgcmV0dXJuIGRlYWxVc2VyQWRhcHRlcihjb25maWcsIGNvbmZpZy5hZGFwdGVyKVxuICB9XG5cbiAgcmV0dXJuIGRlYWxBdXRoQWRhcHRlcihjb25maWcsIGNvbmZpZy5hZGFwdGVyKVxufVxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUs1QztJQUVFLGdDQUFZLE1BQW1GOztRQUM3RixJQUFJO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxZQUFZLEtBQUksQ0FBQyxDQUFBLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLFVBQVUsS0FBSSxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUE7U0FDM0c7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsWUFBWSxLQUFJLEVBQUUsQ0FBQTtTQUMvQztJQUNILENBQUM7SUFNSyx3Q0FBTyxHQUFiLFVBQWMsR0FBVzs7O2dCQUN2QixXQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFBOzs7S0FDdEM7SUFPSywyQ0FBVSxHQUFoQixVQUFpQixHQUFXOzs7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBOzs7O0tBQ2xDO0lBUUssd0NBQU8sR0FBYixVQUFjLEdBQVcsRUFBRSxLQUFhOzs7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTs7OztLQUN0QztJQUVELDRDQUFXLEdBQVgsVUFBWSxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFD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Q0FBQTtTQUMzRDtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUE7WUFDN0MsV0FBVyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7U0FDaEM7UUFFRCw2QkFBWSxJQUFJLEdBQUssV0FBVyxFQUFFO0tBQ25DO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFBO0tBQzNDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUcsVUFBQyxNQUFtQjtJQUVoRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUssTUFBTSxDQUFDLE9BQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ2hFLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDL0M7SUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ2hELENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNES0FkYXB0ZXJJbnRlcmZhY2UgfSBmcm9tICdAY2xvdWRiYXNlL2FkYXB0ZXItaW50ZXJmYWNlJ1xuaW1wb3J0IHsgYWRhcHRlckZvcld4TXAgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB0eXBlIHsgQXV0aE9wdGlvbnMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuY2xhc3MgT2F1dGhDbGllbnRTdG9yYWdlQmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhbFN0b3JhZ2VcbiAgY29uc3RydWN0b3IoY29uZmlnPzogeyBsb2NhbFN0b3JhZ2U6IGFueSAvKiBTdG9yYWdlSW50ZXJmYWNlICovOyBhZGFwdGVyOiBTREtBZGFwdGVySW50ZXJmYWNlIH0pIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBjb25maWc/LmxvY2FsU3RvcmFnZSB8fCAoY29uZmlnPy5hZGFwdGVyPy5yb290Py5nbG9iYWxUaGlzIHx8IGdsb2JhbFRoaXMpLmxvY2FsU3RvcmFnZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IGNvbmZpZz8ubG9jYWxTdG9yYWdlIHx8IHt9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nIHwgbnVsbD59XG4gICAqL1xuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBJdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpXG4gIH1cblxuICAvKipcbiAgICogU2V0IEl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKVxuICB9XG5cbiAgZ2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIH1cblxuICBzZXRJdGVtU3luYyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSlcbiAgfVxuXG4gIHJlbW92ZUl0ZW1TeW5jKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpXG4gIH1cbn1cblxuLyoqXG4gKiBjb3B5IHRvIGdpdEBnaXQud29hLmNvbTpRQmFzZS9sY2FwL2RhdGFzb3VyY2UuZ2l0L3BhY2thZ2VzL2Nsb3VkLXNkay9jb21tb25cbiAqIOWQjOatpeS/ruaUuVxuICovXG5jb25zdCBVUkxfUkVHID0gL15bXjpdKzpcXC9cXC9bXi9dKyhcXC9bXj8jXSspL1xuXG5jb25zdCBkZWFsQWRhcHRlclJlcXVlc3REYXRhID0gKHJlcywgb3B0aW9ucykgPT4ge1xuICBjb25zdCByZXF1ZXN0SWQgPSBvcHRpb25zPy5oZWFkZXJzPy5bJ3gtcmVxdWVzdC1pZCddXG5cbiAgaWYgKCFyZXMpIHtcbiAgICByZXMgPSB7fVxuICB9XG5cbiAgaWYgKHJlcz8uY29kZSB8fCByZXM/LmRhdGE/LmVycm9yX2NvZGUpIHtcbiAgICByZXMgPSB7XG4gICAgICBlcnJvcjogcmVzLmNvZGUgfHwgcmVzLmRhdGEuZXJyb3IsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogcmVzLmRhdGEuZXJyb3JfZGVzY3JpcHRpb24gfHwgcmVzLm1lc3NhZ2UgfHwgcmVzLmNvZGUgfHwgcmVzLmRhdGEuZXJyb3JfY29kZSxcbiAgICAgIHJlcXVlc3RfaWQ6IHJlcy5yZXF1ZXN0SWQsXG4gICAgICBlcnJvcl9jb2RlOiByZXMuZGF0YT8uZXJyb3JfY29kZSxcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlcz8ucmVxdWVzdF9pZCkge1xuICAgIHJlcy5yZXF1ZXN0X2lkID0gcmVzLnJlcXVlc3RfaWQgfHwgcmVxdWVzdElkXG4gIH1cblxuICBpZiAocmVzPy5lcnJvcikge1xuICAgIHJlcy5lcnJvcl91cmkgPSBnZXRVcmxQYXRoKG9wdGlvbnM/LnVybClcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICByZXR1cm4gcmVzPy5kYXRhIHx8IHt9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlT2F1dGhDbGllbnRSZXF1ZXN0KHJlcUNsYXNzKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJvZHk/OiBhbnkgfCBudWxsXG4gICAgICBoZWFkZXJzPzogYW55IHwgbnVsbFxuICAgICAgbWV0aG9kPzogc3RyaW5nXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnlcbiAgICB9LFxuICApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gT2JqZWN0cyBtdXN0IGJlIGNvcGllZCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN1Y2ggYXMgYm9keS5cbiAgICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucylcbiAgICAgIGlmIChjb3B5T3B0aW9ucy5ib2R5ICYmIHR5cGVvZiBjb3B5T3B0aW9ucy5ib2R5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb3B5T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoY29weU9wdGlvbnMuYm9keSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFzayA9IHd4LnJlcXVlc3Qoe1xuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGE6IGNvcHlPcHRpb25zLmJvZHksXG4gICAgICAgIHRpbWVvdXQ6IHJlcUNsYXNzLl90aW1lb3V0LFxuICAgICAgICBtZXRob2Q6IGNvcHlPcHRpb25zLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgaGVhZGVyOiBjb3B5T3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICBzdWNjZXNzKHJlcykge1xuICAgICAgICAgIHJlcyA9IGRlYWxBZGFwdGVyUmVxdWVzdERhdGEocmVzLCB7IC4uLm9wdGlvbnMsIHVybCB9KVxuXG4gICAgICAgICAgaWYgKHJlcy5lcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KHJlcylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgIH0sXG4gICAgICAgIGZhaWwoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgIGVycm9yOiAndW5yZWFjaGFibGUnLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGUoZXJyKSB7XG4gICAgICAgICAgaWYgKCFlcnIgfHwgIWVyci5lcnJNc2cpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlcUNsYXNzLl90aW1lb3V0IHx8IHJlcUNsYXNzLl9yZXN0cmljdGVkTWV0aG9kcy5pbmRleE9mKCdyZXF1ZXN0JykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBlcnJNc2cgfSA9IGVyclxuICAgICAgICAgIGlmIChlcnJNc2cgPT09ICdyZXF1ZXN0OmZhaWwgdGltZW91dCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihyZXFDbGFzcy5fdGltZW91dE1zZylcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRhc2suYWJvcnQoKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdXJsIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFVybFBhdGgodXJsOiBzdHJpbmcpIHtcbiAgLy8gcmV0dXJuIHBhdGggaWYgbWF0Y2hlZCwgb3Igb3JpZ2luYWwgdXJsXG4gIHJldHVybiBVUkxfUkVHLnRlc3QodXJsKSA/IFJlZ0V4cC4kMSA6IHVybFxufVxuXG4vKipcbiAqIOeUqOaIt+iHquWumuS5iWFkYXB0ZXLlpITnkIZcbiAqIEBwYXJhbSBjb25maWdcbiAqIEBwYXJhbSBhZGFwdGVyXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBkZWFsVXNlckFkYXB0ZXIgPSAoY29uZmlnOiBBdXRoT3B0aW9ucywgYWRhcHRlcjogU0RLQWRhcHRlckludGVyZmFjZSkgPT4ge1xuICBjb25zdCBkYXRhID0geyAuLi5jb25maWcgfVxuXG4gIHRyeSB7XG4gICAgaWYgKCFjb25maWc/LnN0b3JhZ2UgJiYgYWRhcHRlcj8ubG9jYWxTdG9yYWdlKSB7XG4gICAgICBkYXRhLnN0b3JhZ2UgPSBuZXcgT2F1dGhDbGllbnRTdG9yYWdlQmFzZSh7IGxvY2FsU3RvcmFnZTogYWRhcHRlci5sb2NhbFN0b3JhZ2UsIGFkYXB0ZXIgfSlcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5jYXB0Y2hhT3B0aW9ucyAmJiBhZGFwdGVyPy5jYXB0Y2hhT3B0aW9ucykge1xuICAgICAgZGF0YS5jYXB0Y2hhT3B0aW9ucyA9IGFkYXB0ZXIuY2FwdGNoYU9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyDnlKjmiLfmnKrkvKDlhaViYXNlUmVxdWVzdOWSjHJlcXVlc3Tml7blpITnkIZcbiAgICAvLyBPQXV0aDJDbGllbnTkvJjlhYjku6UgYmFzZVJlcXVlc3Qg5Li65YeGXG4gICAgLy8gQXV0aCDlnKjmsqHmnIkgcmVxdWVzdCDnmoTml7blgJnkvJrliJ3lp4vljJYgQ2FwdGNoYe+8jOS7juiAjOS9v+eUqCBDYXB0Y2hhIOeahCByZXF1ZXN0XG4gICAgaWYgKCFjb25maWcuYmFzZVJlcXVlc3QgJiYgIWNvbmZpZy5yZXF1ZXN0ICYmIGFkYXB0ZXI/LnJlcUNsYXNzKSB7XG4gICAgICBjb25zdCByZXFDbGFzc1BhcmFtcyA9IHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIHJlc3RyaWN0ZWRNZXRob2RzOiBbJ2dldCcsICdwb3N0JywgJ3VwbG9hZCcsICdkb3dubG9hZCcsICdyZXF1ZXN0J10sXG4gICAgICAgIGF1dGg6IGNvbmZpZy5hdXRoLFxuICAgICAgfVxuICAgICAgY29uc3QgYWRhcHRlclJlcSA9IG5ldyBhZGFwdGVyLnJlcUNsYXNzKHJlcUNsYXNzUGFyYW1zKVxuICAgICAgZGF0YS5iYXNlUmVxdWVzdCA9IGFzeW5jIGZ1bmN0aW9uICh1cmw6IHN0cmluZywgb3B0aW9ucz86IHsgbWV0aG9kPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBsZXQgcmVzOiBhbnkgPSB7fVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RUeXBlID0gb3B0aW9ucy5tZXRob2Q/LnRvTG9jYWxlTG93ZXJDYXNlKCkgfHwgJ3Bvc3QnXG5cbiAgICAgICAgY29uc3QgZnVuYyA9IGFkYXB0ZXJSZXE/LltyZXF1ZXN0VHlwZV0/LmJpbmQ/LihhZGFwdGVyUmVxKVxuXG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCDjgJAke3JlcXVlc3RUeXBlfeOAkSByZXF1ZXN0IG1ldGhvZGApXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIOWFvOWuuemdnuWwj+eoi+W6j+eahGFkYXB0ZXJcbiAgICAgICAgICBpZiAoKCFvcHRpb25zLmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10gfHwgb3B0aW9ucy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpICYmICFbJ3N0cmluZycsICd1bmRlZmluZWQnXS5pbmNsdWRlcyh0eXBlb2Ygb3B0aW9ucy5ib2R5KSkge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5kYXRhIHx8IG9wdGlvbnMuYm9keVxuICAgICAgICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5ib2R5KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXMgPSBhd2FpdCBmdW5jKHsgdXJsLCAuLi5vcHRpb25zIH0pXG4gICAgICAgICAgcmVzID0gZGVhbEFkYXB0ZXJSZXF1ZXN0RGF0YShyZXMsIHsgLi4ub3B0aW9ucywgdXJsIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVzID0geyAuLi5lcnJvcj8uZGF0YSwgLi4uZXJyb3IgfVxuICAgICAgICAgIHRocm93IHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcz8uZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKCd1c2VyIGFkYXB0ZXIgZ2VuZXJhdGUgZmFpbDonLCBlKVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiDlhoXnva7pu5jorqRhZGFwdGVy5aSE55CGXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBkZWFsQXV0aEFkYXB0ZXIgPSAoY29uZmlnOiBBdXRoT3B0aW9ucywgYWRhcHRlcjogU0RLQWRhcHRlckludGVyZmFjZSkgPT4ge1xuICBjb25zdCBkYXRhID0geyAuLi5jb25maWcgfVxuICBjb25zdCBhdXRoT3B0aW9uczogYW55ID0ge31cblxuICBpZiAoYWRhcHRlcj8uY2FwdGNoYU9wdGlvbnMpIHtcbiAgICBkYXRhLmNhcHRjaGFPcHRpb25zID0gYWRhcHRlci5jYXB0Y2hhT3B0aW9uc1xuICB9XG5cbiAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkgfHwgKGNvbmZpZy5zdG9yYWdlICYmIGNvbmZpZy5iYXNlUmVxdWVzdCkpIHJldHVybiBkYXRhXG5cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3QgeyBsb2NhbFN0b3JhZ2UsIHJlcUNsYXNzOiBSZXFDbGFzcyB9ID0gYWRhcHRlckZvcld4TXAuZ2VuQWRhcHRlcih7fSlcbiAgICBpZiAobG9jYWxTdG9yYWdlKSB7XG4gICAgICBhdXRoT3B0aW9ucy5zdG9yYWdlID0gbmV3IE9hdXRoQ2xpZW50U3RvcmFnZUJhc2UoeyBsb2NhbFN0b3JhZ2UsIGFkYXB0ZXIgfSlcbiAgICB9XG4gICAgaWYgKFJlcUNsYXNzKSB7XG4gICAgICBjb25zdCByZXFDbGFzcyA9IG5ldyBSZXFDbGFzcyh7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICByZXN0cmljdGVkTWV0aG9kczogWydnZXQnLCAncG9zdCcsICd1cGxvYWQnLCAnZG93bmxvYWQnLCAncmVxdWVzdCddLFxuICAgICAgfSlcbiAgICAgIGF1dGhPcHRpb25zLnJlcXVlc3QgPSBnZW5lcmF0ZU9hdXRoQ2xpZW50UmVxdWVzdChyZXFDbGFzcylcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jYXB0Y2hhT3B0aW9ucykge1xuICAgICAgYXV0aE9wdGlvbnMuYmFzZVJlcXVlc3QgPSBhdXRoT3B0aW9ucy5yZXF1ZXN0XG4gICAgICBhdXRoT3B0aW9ucy5yZXF1ZXN0ID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgLi4uYXV0aE9wdGlvbnMgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignYWRhcHRlciBnZW5lcmF0ZSBmYWlsOicsIGUpXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG5leHBvcnQgY29uc3QgdXNlQXV0aEFkYXB0ZXIgPSAoY29uZmlnOiBBdXRoT3B0aW9ucykgPT4ge1xuICAvLyDlhbzlrrnlvq7mkK1jbG91ZC1zZGvvvIxhdXRo5LitanMtc2Rr6buY6K6k55qEYWRhcHRlcuS4jei/m+ihjOmFjee9rlxuICBpZiAoY29uZmlnLmFkYXB0ZXIgJiYgKGNvbmZpZy5hZGFwdGVyIGFzIGFueSkudHlwZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgcmV0dXJuIGRlYWxVc2VyQWRhcHRlcihjb25maWcsIGNvbmZpZy5hZGFwdGVyKVxuICB9XG5cbiAgcmV0dXJuIGRlYWxBdXRoQWRhcHRlcihjb25maWcsIGNvbmZpZy5hZGFwdGVyKVxufVxuIl19