@cloudbase/container 2.5.29-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
29
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
31
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
32
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
33
+ };
34
+ var __metadata = (this && this.__metadata) || function (k, v) {
35
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
36
+ };
37
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
38
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
39
+ return new (P || (P = Promise))(function (resolve, reject) {
40
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
41
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
42
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
43
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
44
+ });
45
+ };
46
+ var __generator = (this && this.__generator) || function (thisArg, body) {
47
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
48
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
49
+ function verb(n) { return function (v) { return step([n, v]); }; }
50
+ function step(op) {
51
+ if (f) throw new TypeError("Generator is already executing.");
52
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
53
+ 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;
54
+ if (y = 0, t) op = [op[0] & 2, t.value];
55
+ switch (op[0]) {
56
+ case 0: case 1: t = op; break;
57
+ case 4: _.label++; return { value: op[1], done: false };
58
+ case 5: _.label++; y = op[1]; op = [0]; continue;
59
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
60
+ default:
61
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
62
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
63
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
64
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
65
+ if (t[2]) _.ops.pop();
66
+ _.trys.pop(); continue;
67
+ }
68
+ op = body.call(thisArg, _);
69
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
70
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
71
+ }
72
+ };
73
+ var __rest = (this && this.__rest) || function (s, e) {
74
+ var t = {};
75
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
76
+ t[p] = s[p];
77
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
78
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
79
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
80
+ t[p[i]] = s[p[i]];
81
+ }
82
+ return t;
83
+ };
84
+ var __importDefault = (this && this.__importDefault) || function (mod) {
85
+ return (mod && mod.__esModule) ? mod : { "default": mod };
86
+ };
87
+ Object.defineProperty(exports, "__esModule", { value: true });
88
+ exports.registerContainers = void 0;
89
+ var utilities_1 = require("@cloudbase/utilities");
90
+ var decompress_1 = __importDefault(require("brotli/decompress"));
91
+ var go_wams_exec_1 = __importDefault(require("./go_wams_exec"));
92
+ var getSdkName = utilities_1.constants.getSdkName, ERRORS = utilities_1.constants.ERRORS, COMMUNITY_SITE_URL = utilities_1.constants.COMMUNITY_SITE_URL;
93
+ var execCallback = utilities_1.utils.execCallback, printWarn = utilities_1.utils.printWarn;
94
+ var catchErrorsDecorator = utilities_1.helpers.catchErrorsDecorator;
95
+ var COMPONENT_NAME = 'container';
96
+ function request(_a) {
97
+ var url = _a.url, _b = _a.method, method = _b === void 0 ? 'GET' : _b, _c = _a.header, header = _c === void 0 ? {} : _c, data = _a.data, _d = _a.timeout, timeout = _d === void 0 ? 60000 : _d, _e = _a.dataType, dataType = _e === void 0 ? 'json' : _e, _f = _a.responseType, responseType = _f === void 0 ? 'text' : _f;
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ var headers, _g, signal, abort;
100
+ return __generator(this, function (_h) {
101
+ headers = __assign({}, header);
102
+ if (typeof data === 'object' && !(data instanceof ArrayBuffer || ArrayBuffer.isView(data))) {
103
+ if (!headers['Content-Type'] && !headers['content-type']) {
104
+ headers['Content-Type'] = 'application/json';
105
+ }
106
+ try {
107
+ data = JSON.stringify(data);
108
+ }
109
+ catch (e) {
110
+ throw new Error(JSON.stringify({
111
+ code: ERRORS.INVALID_PARAMS,
112
+ msg: "[".concat(COMPONENT_NAME, ".callContainer] invalid data with content-type: application/json"),
113
+ }));
114
+ }
115
+ }
116
+ _g = new AbortController(), signal = _g.signal, abort = _g.abort;
117
+ return [2, Promise.race([
118
+ new Promise(function (_, reject) {
119
+ setTimeout(function () {
120
+ var error = new Error('请求超时');
121
+ error.code = 'SERVER_TIMEOUT';
122
+ reject(error);
123
+ abort();
124
+ }, timeout);
125
+ }),
126
+ fetch(url, {
127
+ method: method,
128
+ headers: headers,
129
+ body: data,
130
+ signal: signal,
131
+ }).then(function (response) {
132
+ if (responseType === 'arrayBuffer') {
133
+ return response.arrayBuffer();
134
+ }
135
+ if (dataType === 'json') {
136
+ try {
137
+ return response.json();
138
+ }
139
+ catch (e) {
140
+ throw new Error("[".concat(getSdkName(), "][").concat(ERRORS.INVALID_PARAMS, "][").concat(COMPONENT_NAME, ".callContainer] response data must be json"));
141
+ }
142
+ }
143
+ return response.text();
144
+ }),
145
+ ])];
146
+ });
147
+ });
148
+ }
149
+ var InvalieParamsError = (function (_super) {
150
+ __extends(InvalieParamsError, _super);
151
+ function InvalieParamsError(scope, message) {
152
+ var msg = JSON.stringify({
153
+ code: ERRORS.INVALID_PARAMS,
154
+ msg: "[".concat(scope, "] ").concat(message),
155
+ });
156
+ return _super.call(this, msg) || this;
157
+ }
158
+ return InvalieParamsError;
159
+ }(Error));
160
+ var CloudbaseContainers = (function () {
161
+ function CloudbaseContainers(config) {
162
+ this.config = config;
163
+ if (!this.config.wasmUrl) {
164
+ throw new Error(JSON.stringify({
165
+ code: ERRORS.INVALID_PARAMS,
166
+ msg: "[".concat(COMPONENT_NAME, "] \u7F3A\u5C11 wasmUrl"),
167
+ }));
168
+ }
169
+ this.wasm = getExportFunction(this.config.wasmUrl, {
170
+ utils: {
171
+ info: function (e) {
172
+ console.log(e);
173
+ },
174
+ request: request,
175
+ },
176
+ });
177
+ }
178
+ CloudbaseContainers.prototype.callContainer = function (options, callback) {
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ var callContainer, url, _a, method, _b, header, data, _c, timeout, _d, dataType, _e, responseType, restOptions, res, e_1;
181
+ return __generator(this, function (_f) {
182
+ switch (_f.label) {
183
+ case 0: return [4, this.initContainer(this.config)];
184
+ case 1:
185
+ _f.sent();
186
+ return [4, this.wasm];
187
+ case 2:
188
+ callContainer = (_f.sent()).callContainer;
189
+ url = options.url, _a = options.method, method = _a === void 0 ? 'GET' : _a, _b = options.header, header = _b === void 0 ? {} : _b, data = options.data, _c = options.timeout, timeout = _c === void 0 ? 60000 : _c, _d = options.dataType, dataType = _d === void 0 ? 'json' : _d, _e = options.responseType, responseType = _e === void 0 ? 'text' : _e, restOptions = __rest(options, ["url", "method", "header", "data", "timeout", "dataType", "responseType"]);
190
+ if (!url) {
191
+ throw new InvalieParamsError("".concat(COMPONENT_NAME, ".callContainer"), 'invalid request url');
192
+ }
193
+ _f.label = 3;
194
+ case 3:
195
+ _f.trys.push([3, 5, , 6]);
196
+ return [4, new Promise(function (resolve, reject) {
197
+ var params = __assign({ url: url, method: method, header: header, data: data, timeout: timeout, dataType: dataType, responseType: responseType }, restOptions);
198
+ callContainer(__assign(__assign({}, params), { success: resolve, fail: function (res) {
199
+ var data = (res || {}).data;
200
+ var error = new Error((data === null || data === void 0 ? void 0 : data.message) || 'call container error');
201
+ error.code = (data === null || data === void 0 ? void 0 : data.code) || 'UNKNOWN_ERROR';
202
+ reject(error);
203
+ } }));
204
+ })];
205
+ case 4:
206
+ res = _f.sent();
207
+ return [2, execCallback(callback, null, res)];
208
+ case 5:
209
+ e_1 = _f.sent();
210
+ execCallback(callback, e_1);
211
+ return [3, 6];
212
+ case 6: return [2];
213
+ }
214
+ });
215
+ });
216
+ };
217
+ CloudbaseContainers.prototype.initContainer = function (config) {
218
+ return __awaiter(this, void 0, void 0, function () {
219
+ var initContainer;
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0: return [4, this.wasm];
223
+ case 1:
224
+ initContainer = (_a.sent()).initContainer;
225
+ if (!this.containerInitPromise) {
226
+ this.containerInitPromise = new Promise(function (resolve, reject) {
227
+ initContainer({
228
+ config: config,
229
+ success: function (res) {
230
+ if (String(res.statusCode) !== '200') {
231
+ reject(new Error(JSON.stringify({
232
+ code: 'INIT_ERROR',
233
+ msg: "[".concat(COMPONENT_NAME, "] ").concat(res.statusCode, " ").concat(JSON.stringify(res.data)),
234
+ })));
235
+ }
236
+ resolve(res);
237
+ },
238
+ fail: function (res) {
239
+ reject(new Error(JSON.stringify({
240
+ code: 'INIT_ERROR',
241
+ msg: "[".concat(COMPONENT_NAME, "] ").concat(JSON.stringify(res.data)),
242
+ })));
243
+ this._containerInitPromis = null;
244
+ },
245
+ });
246
+ });
247
+ }
248
+ return [2, this.containerInitPromise];
249
+ }
250
+ });
251
+ });
252
+ };
253
+ __decorate([
254
+ catchErrorsDecorator({
255
+ customInfo: {
256
+ className: 'Cloudbase',
257
+ methodName: 'callContainer',
258
+ },
259
+ title: '调用失败',
260
+ messages: [
261
+ '请确认以下各项:',
262
+ ' 1 - 调用 callContainer() 的语法或参数是否正确',
263
+ ' 2 - 域名 & 路径是否存在',
264
+ "\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
265
+ ],
266
+ }),
267
+ __metadata("design:type", Function),
268
+ __metadata("design:paramtypes", [Object, Function]),
269
+ __metadata("design:returntype", Promise)
270
+ ], CloudbaseContainers.prototype, "callContainer", null);
271
+ return CloudbaseContainers;
272
+ }());
273
+ var component = {
274
+ name: COMPONENT_NAME,
275
+ namespace: 'container',
276
+ entity: function (config) {
277
+ if (this.containerInstance) {
278
+ printWarn(ERRORS.INVALID_OPERATION, 'every cloudbase instance should has only one container object');
279
+ return this.containerInstance;
280
+ }
281
+ var instance = new CloudbaseContainers(config);
282
+ this.containerInstance = instance;
283
+ this.callContainer = instance.callContainer.bind(instance);
284
+ return this.containerInstance;
285
+ },
286
+ };
287
+ try {
288
+ cloudbase.registerComponent(component);
289
+ }
290
+ catch (e) { }
291
+ function registerContainers(app) {
292
+ try {
293
+ app.registerComponent(component);
294
+ }
295
+ catch (e) {
296
+ console.warn(e);
297
+ }
298
+ }
299
+ exports.registerContainers = registerContainers;
300
+ function getExportFunction(url, module, mode) {
301
+ if (mode === void 0) { mode = 'go'; }
302
+ return __awaiter(this, void 0, void 0, function () {
303
+ function instantiateStreaming(resp, importObject, brotliCompressed) {
304
+ if (brotliCompressed === void 0) { brotliCompressed = false; }
305
+ return __awaiter(this, void 0, void 0, function () {
306
+ var source, buffer;
307
+ return __generator(this, function (_a) {
308
+ switch (_a.label) {
309
+ case 0:
310
+ if (!(brotliCompressed || !WebAssembly.instantiateStreaming)) return [3, 3];
311
+ return [4, resp];
312
+ case 1: return [4, (_a.sent()).arrayBuffer()];
313
+ case 2:
314
+ source = _a.sent();
315
+ buffer = brotliCompressed ? (0, decompress_1.default)(new Int8Array(source)) : source;
316
+ return [2, WebAssembly.instantiate(buffer, importObject)];
317
+ case 3: return [2, WebAssembly.instantiateStreaming(resp, importObject)];
318
+ }
319
+ });
320
+ });
321
+ }
322
+ var importObject, go, brotliCompressed, reuslt;
323
+ return __generator(this, function (_a) {
324
+ switch (_a.label) {
325
+ case 0:
326
+ importObject = __assign({ env: {
327
+ memoryBase: 0,
328
+ tableBase: 0,
329
+ memory: new WebAssembly.Memory({
330
+ initial: 256,
331
+ }),
332
+ } }, module);
333
+ brotliCompressed = isBrotliCompressed(url);
334
+ if (mode === 'go') {
335
+ go = new go_wams_exec_1.default();
336
+ go._initedModulePromise = new Promise(function (resolve) {
337
+ go._initedModuleResolve = resolve;
338
+ });
339
+ importObject = __assign(__assign({}, go.importObject), { env: __assign(__assign({}, go.importObject.env), { exportModule: function (module) {
340
+ return go._initedModuleResolve(module);
341
+ } }) });
342
+ }
343
+ return [4, instantiateStreaming(fetch(url), importObject, brotliCompressed)];
344
+ case 1:
345
+ reuslt = _a.sent();
346
+ if (!(mode === 'go')) return [3, 3];
347
+ return [4, Promise.race([
348
+ go.run(reuslt.instance),
349
+ new Promise(function (resolve) { return setTimeout(function () {
350
+ resolve(null);
351
+ }, 500); }),
352
+ ])];
353
+ case 2:
354
+ _a.sent();
355
+ return [2, { callContainer: window.callContainer, initContainer: window.initContainer }];
356
+ case 3: return [2, reuslt.instance.exports];
357
+ }
358
+ });
359
+ });
360
+ }
361
+ function isBrotliCompressed(url) {
362
+ var brotliCompressed = false;
363
+ var pathname = '';
364
+ try {
365
+ var a = document.createElement('a');
366
+ a.href = url;
367
+ pathname = a.pathname;
368
+ }
369
+ catch (e) {
370
+ try {
371
+ var res = new URL(url);
372
+ pathname = res === null || res === void 0 ? void 0 : res.pathname;
373
+ }
374
+ catch (e) {
375
+ pathname = url;
376
+ }
377
+ }
378
+ if (/\.br$/.test(pathname)) {
379
+ brotliCompressed = true;
380
+ }
381
+ return brotliCompressed;
382
+ }
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLGtEQUFnRTtBQUVoRSxpRUFBMEM7QUFFMUMsZ0VBQStCO0FBSXZCLElBQUEsVUFBVSxHQUFpQyxxQkFBUyxXQUExQyxFQUFFLE1BQU0sR0FBeUIscUJBQVMsT0FBbEMsRUFBRSxrQkFBa0IsR0FBSyxxQkFBUyxtQkFBZCxDQUFjO0FBQ3BELElBQUEsWUFBWSxHQUFnQixpQkFBSyxhQUFyQixFQUFFLFNBQVMsR0FBSyxpQkFBSyxVQUFWLENBQVU7QUFDakMsSUFBQSxvQkFBb0IsR0FBSyxtQkFBTyxxQkFBWixDQUFZO0FBRXhDLElBQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQTtBQUtsQyxTQUFlLE9BQU8sQ0FBQyxFQWdCdEI7UUFmQyxHQUFHLFNBQUEsRUFDSCxjQUFjLEVBQWQsTUFBTSxtQkFBRyxLQUFLLEtBQUEsRUFDZCxjQUFXLEVBQVgsTUFBTSxtQkFBRyxFQUFFLEtBQUEsRUFDWCxJQUFJLFVBQUEsRUFDSixlQUFlLEVBQWYsT0FBTyxtQkFBRyxLQUFLLEtBQUEsRUFDZixnQkFBaUIsRUFBakIsUUFBUSxtQkFBRyxNQUFNLEtBQUEsRUFDakIsb0JBQXFCLEVBQXJCLFlBQVksbUJBQUcsTUFBTSxLQUFBOzs7O1lBVWYsT0FBTyxnQkFBUSxNQUFNLENBQUUsQ0FBQTtZQUU3QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzFGLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENB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ICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuaW1wb3J0IHsgSUNhbGxDb250YWluZXJPcHRpb25zLCBJQ29udGlhbmVyQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb250YWluZXInXG5pbXBvcnQgeyBjb25zdGFudHMsIHV0aWxzLCBoZWxwZXJzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG4vLyBpbXBvcnQgYnJvdGxpUHJvbWlzZSBmcm9tICdicm90bGktZGVjLXdhc20nIC8vIEltcG9ydCB0aGUgZGVmYXVsdCBleHBvcnRcbmltcG9ydCBkZWNvbXByZXNzIGZyb20gJ2Jyb3RsaS9kZWNvbXByZXNzJ1xuXG5pbXBvcnQgR28gZnJvbSAnLi9nb193YW1zX2V4ZWMnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5cbmNvbnN0IHsgZ2V0U2RrTmFtZSwgRVJST1JTLCBDT01NVU5JVFlfU0lURV9VUkwgfSA9IGNvbnN0YW50c1xuY29uc3QgeyBleGVjQ2FsbGJhY2ssIHByaW50V2FybiB9ID0gdXRpbHNcbmNvbnN0IHsgY2F0Y2hFcnJvcnNEZWNvcmF0b3IgfSA9IGhlbHBlcnNcblxuY29uc3QgQ09NUE9ORU5UX05BTUUgPSAnY29udGFpbmVyJ1xuXG4vKipcbiAqIOWwgeijheWvuem9kCB3eC5yZXF1ZXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3Qoe1xuICB1cmwsXG4gIG1ldGhvZCA9ICdHRVQnLFxuICBoZWFkZXIgPSB7fSxcbiAgZGF0YSxcbiAgdGltZW91dCA9IDYwMDAwLFxuICBkYXRhVHlwZSA9ICdqc29uJyxcbiAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxufToge1xuICB1cmw6IHN0cmluZ1xuICBkYXRhPzogc3RyaW5nIHwgb2JqZWN0IHwgQXJyYXlCdWZmZXJcbiAgaGVhZGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICB0aW1lb3V0PzogbnVtYmVyXG4gIG1ldGhvZD86IHN0cmluZ1xuICBkYXRhVHlwZT86ICdqc29uJyB8IHN0cmluZ1xuICByZXNwb25zZVR5cGU/OiAndGV4dCcgfCAnYXJyYXlCdWZmZXInXG59KSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7IC4uLmhlYWRlciB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpKSB7XG4gICAgaWYgKCFoZWFkZXJzWydDb250ZW50LVR5cGUnXSAmJiAhaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb2RlOiBFUlJPUlMuSU5WQUxJRF9QQVJBTVMsXG4gICAgICAgIG1zZzogYFske0NPTVBPTkVOVF9OQU1FfS5jYWxsQ29udGFpbmVyXSBpbnZhbGlkIGRhdGEgd2l0aCBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gLFxuICAgICAgfSksKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHsgc2lnbmFsLCBhYm9ydCB9ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCfor7fmsYLotoXml7YnKVxuICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9ICdTRVJWRVJfVElNRU9VVCdcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICBhYm9ydCgpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH0pLFxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKClcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhVHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbJHtnZXRTZGtOYW1lKCl9XVske0VSUk9SUy5JTlZBTElEX1BBUkFNU31dWyR7Q09NUE9ORU5UX05BTUV9LmNhbGxDb250YWluZXJdIHJlc3BvbnNlIGRhdGEgbXVzdCBiZSBqc29uYCwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KClcbiAgICB9KSxcbiAgXSlcbn1cblxuY2xhc3MgSW52YWxpZVBhcmFtc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IG1zZyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvZGU6IEVSUk9SUy5JTlZBTElEX1BBUkFNUyxcbiAgICAgIG1zZzogYFske3Njb3BlfV0gJHttZXNzYWdlfWAsXG4gICAgfSlcbiAgICBzdXBlcihtc2cpXG4gIH1cbn1cblxuaW50ZXJmYWNlIElDYWxsVGNiQ29udGFpbmVyT3B0aW9ucyBleHRlbmRzIElDYWxsQ29udGFpbmVyT3B0aW9ucyB7XG4gIHN1Y2Nlc3M6IChyZXM6IHsgc3RhdHVzQ29kZTogc3RyaW5nIHwgbnVtYmVyOyBoZWFkZXI6IElDYWxsQ29udGFpbmVyT3B0aW9uc1snaGVhZGVyJ107IGRhdGE6IGFueSB9KSA9PiB2b2lkXG4gIGZhaWw6IChyZXM6IHsgZGF0YTogeyBjb2RlOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IHZvaWRcbn1cblxuaW50ZXJmYWNlIElJbml0VGNiQ29udGFpbmVyT3B0aW9ucyB7XG4gIGNvbmZpZzogT21pdDxJQ29udGlhbmVyQ29uZmlnLCAnd2FzbVVybCc+XG4gIHN1Y2Nlc3M6IChyZXM6IHsgc3RhdHVzQ29kZTogc3RyaW5nIHwgbnVtYmVyOyBoZWFkZXI6IElDYWxsQ29udGFpbmVyT3B0aW9uc1snaGVhZGVyJ107IGRhdGE6IGFueSB9KSA9PiB2b2lkXG4gIGZhaWw6IChyZXM6IHsgZGF0YTogeyBjb2RlOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IHZvaWRcbn1cblxuY2xhc3MgQ2xvdWRiYXNlQ29udGFpbmVycyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29udGlhbmVyQ29uZmlnXG4gIHByaXZhdGUgd2FzbTogUHJvbWlzZTxXZWJBc3NlbWJseS5FeHBvcnRzPlxuICBwcml2YXRlIGNvbnRhaW5lckluaXRQcm9taXNlOiAvKiBQcm9taXNlPGFueT4qLyBhbnkgfCBudWxsXG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJQ29udGlhbmVyQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICBpZiAoIXRoaXMuY29uZmlnLndhc21VcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvZGU6IEVSUk9SUy5JTlZBTElEX1BBUkFNUyxcbiAgICAgICAgbXNnOiBgWyR7Q09NUE9ORU5UX05BTUV9XSDnvLrlsJEgd2FzbVVybGAsXG4gICAgICB9KSwpXG4gICAgfVxuICAgIHRoaXMud2FzbSA9IGdldEV4cG9ydEZ1bmN0aW9uKHRoaXMuY29uZmlnLndhc21VcmwsIHtcbiAgICAgIHV0aWxzOiB7XG4gICAgICAgIGluZm8oZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIGN1c3RvbUluZm86IHtcbiAgICAgIGNsYXNzTmFtZTogJ0Nsb3VkYmFzZScsXG4gICAgICBtZXRob2ROYW1lOiAnY2FsbENvbnRhaW5lcicsXG4gICAgfSxcbiAgICB0aXRsZTogJ+iwg+eUqOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBjYWxsQ29udGFpbmVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDln5/lkI0gJiDot6/lvoTmmK/lkKblrZjlnKgnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGNhbGxDb250YWluZXIob3B0aW9uczogSUNhbGxDb250YWluZXJPcHRpb25zLCBjYWxsYmFjaz86IEZ1bmN0aW9uKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0Q29udGFpbmVyKHRoaXMuY29uZmlnKVxuICAgIGNvbnN0IHsgY2FsbENvbnRhaW5lciB9OiB7IGNhbGxDb250YWluZXI6IChvcHRpb25zOiBJQ2FsbFRjYkNvbnRhaW5lck9wdGlvbnMpID0+IHZvaWQgfSA9IChhd2FpdCB0aGlzLndhc20pIGFzIGFueVxuXG4gICAgY29uc3Qge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kID0gJ0dFVCcsXG4gICAgICBoZWFkZXIgPSB7fSxcbiAgICAgIGRhdGEsXG4gICAgICB0aW1lb3V0ID0gNjAwMDAsXG4gICAgICBkYXRhVHlwZSA9ICdqc29uJyxcbiAgICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JyxcbiAgICAgIC4uLnJlc3RPcHRpb25zXG4gICAgfSA9IG9wdGlvbnNcblxuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZVBhcmFtc0Vycm9yKGAke0NPTVBPTkVOVF9OQU1FfS5jYWxsQ29udGFpbmVyYCwgJ2ludmFsaWQgcmVxdWVzdCB1cmwnKVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgdXJsLCBtZXRob2QsIGhlYWRlciwgZGF0YSwgdGltZW91dCwgZGF0YVR5cGUsIHJlc3BvbnNlVHlwZSwgLi4ucmVzdE9wdGlvbnMgfVxuXG4gICAgICAgIGNhbGxDb250YWluZXIoe1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICBzdWNjZXNzOiByZXNvbHZlLFxuICAgICAgICAgIGZhaWw6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzIHx8IHt9XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihkYXRhPy5tZXNzYWdlIHx8ICdjYWxsIGNvbnRhaW5lciBlcnJvcicpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IGRhdGE/LmNvZGUgfHwgJ1VOS05PV05fRVJST1InXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICByZXR1cm4gZXhlY0NhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCByZXMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXhlY0NhbGxiYWNrKGNhbGxiYWNrLCBlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRDb250YWluZXIoY29uZmlnOiBPbWl0PElDb250aWFuZXJDb25maWcsICd3YXNtVXJsJz4pIHtcbiAgICBjb25zdCB7IGluaXRDb250YWluZXIgfTogeyBpbml0Q29udGFpbmVyOiAob3B0aW9uczogSUluaXRUY2JDb250YWluZXJPcHRpb25zKSA9PiB2b2lkIH0gPSAoYXdhaXQgdGhpcy53YXNtKSBhcyBhbnlcbiAgICBpZiAoIXRoaXMuY29udGFpbmVySW5pdFByb21pc2UpIHtcbiAgICAgIHRoaXMuY29udGFpbmVySW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGluaXRDb250YWluZXIoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBzdWNjZXNzKHJlcykge1xuICAgICAgICAgICAgaWYgKFN0cmluZyhyZXMuc3RhdHVzQ29kZSkgIT09ICcyMDAnKSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTklUX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtc2c6IGBbJHtDT01QT05FTlRfTkFNRX1dICR7cmVzLnN0YXR1c0NvZGV9ICR7SlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpfWAsXG4gICAgICAgICAgICAgIH0pLCksKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGNvZGU6ICdJTklUX0VSUk9SJyxcbiAgICAgICAgICAgICAgbXNnOiBgWyR7Q09NUE9ORU5UX05BTUV9XSAke0pTT04uc3RyaW5naWZ5KHJlcy5kYXRhKX1gLFxuICAgICAgICAgICAgfSksKSwpXG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJbml0UHJvbWlzID0gbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluaXRQcm9taXNlXG4gIH1cbn1cblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiAnY29udGFpbmVyJyxcbiAgZW50aXR5KGNvbmZpZzogSUNvbnRpYW5lckNvbmZpZykge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgY29udGFpbmVyIG9iamVjdCcpXG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IENsb3VkYmFzZUNvbnRhaW5lcnMoY29uZmlnKVxuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UgPSBpbnN0YW5jZVxuICAgIHRoaXMuY2FsbENvbnRhaW5lciA9IGluc3RhbmNlLmNhbGxDb250YWluZXIuYmluZChpbnN0YW5jZSlcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlXG4gIH0sXG59XG50cnkge1xuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGFpbmVycyhhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXhwb3J0RnVuY3Rpb24odXJsLCBtb2R1bGUsIG1vZGUgPSAnZ28nKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIGluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3AsIGltcG9ydE9iamVjdCwgYnJvdGxpQ29tcHJlc3NlZCA9IGZhbHNlKSB7XG4gICAgaWYgKGJyb3RsaUNvbXByZXNzZWQgfHwgIVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCAoYXdhaXQgcmVzcCkuYXJyYXlCdWZmZXIoKVxuICAgICAgY29uc3QgYnVmZmVyID0gYnJvdGxpQ29tcHJlc3NlZCA/IGRlY29tcHJlc3MobmV3IEludDhBcnJheShzb3VyY2UpKSA6IHNvdXJjZVxuICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJ1ZmZlciwgaW1wb3J0T2JqZWN0KVxuICAgIH1cblxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwLCBpbXBvcnRPYmplY3QpXG4gIH1cblxuICBsZXQgaW1wb3J0T2JqZWN0ID0ge1xuICAgIGVudjoge1xuICAgICAgbWVtb3J5QmFzZTogMCxcbiAgICAgIHRhYmxlQmFzZTogMCxcbiAgICAgIG1lbW9yeTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7XG4gICAgICAgIGluaXRpYWw6IDI1NixcbiAgICAgIH0pLFxuICAgICAgLy8gdGFibGU6IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7XG4gICAgICAvLyAgIGluaXRpYWw6IDIsXG4gICAgICAvLyAgIGVsZW1lbnQ6ICdhbnlmdW5jJyxcbiAgICAgIC8vIH0pLFxuICAgIH0sXG4gICAgLi4ubW9kdWxlLFxuICB9XG4gIGxldCBnb1xuICBjb25zdCBicm90bGlDb21wcmVzc2VkID0gaXNCcm90bGlDb21wcmVzc2VkKHVybClcblxuICBpZiAobW9kZSA9PT0gJ2dvJykge1xuICAgIGdvID0gbmV3IEdvKClcbiAgICBnby5faW5pdGVkTW9kdWxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBnby5faW5pdGVkTW9kdWxlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICB9KVxuICAgIGltcG9ydE9iamVjdCA9IHtcbiAgICAgIC4uLmdvLmltcG9ydE9iamVjdCxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5nby5pbXBvcnRPYmplY3QuZW52LFxuICAgICAgICBleHBvcnRNb2R1bGUobW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGdvLl9pbml0ZWRNb2R1bGVSZXNvbHZlKG1vZHVsZSlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1c2x0ID0gYXdhaXQgaW5zdGFudGlhdGVTdHJlYW1pbmcoZmV0Y2godXJsKSwgaW1wb3J0T2JqZWN0LCBicm90bGlDb21wcmVzc2VkKVxuXG4gIGlmIChtb2RlID09PSAnZ28nKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGdvLnJ1bihyZXVzbHQuaW5zdGFuY2UpLFxuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgfSwgNTAwKSwpLFxuICAgIF0pXG5cbiAgICByZXR1cm4geyBjYWxsQ29udGFpbmVyOiAod2luZG93IGFzIGFueSkuY2FsbENvbnRhaW5lciwgaW5pdENvbnRhaW5lcjogKHdpbmRvdyBhcyBhbnkpLmluaXRDb250YWluZXIgfVxuICB9XG5cbiAgLy8gaWYgKG1vZGUgPT09ICdnbycpIHtcbiAgLy8gICBnby5ydW4ocmV1c2x0Lmluc3RhbmNlKVxuICAvLyAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGdvLl9pbml0ZWRNb2R1bGVQcm9taXNlXG4gIC8vICAgcmV0dXJuIG1vZHVsZVxuICAvLyB9XG5cbiAgcmV0dXJuIHJldXNsdC5pbnN0YW5jZS5leHBvcnRzXG59XG5cbmZ1bmN0aW9uIGlzQnJvdGxpQ29tcHJlc3NlZCh1cmwpIHtcbiAgbGV0IGJyb3RsaUNvbXByZXNzZWQgPSBmYWxzZVxuXG4gIGxldCBwYXRobmFtZSA9ICcnXG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgIGEuaHJlZiA9IHVybFxuICAgIHBhdGhuYW1lID0gYS5wYXRobmFtZVxuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBVUkwodXJsKVxuICAgICAgcGF0aG5hbWUgPSByZXM/LnBhdGhuYW1lXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcGF0aG5hbWUgPSB1cmxcbiAgICB9XG4gIH1cblxuICBpZiAoL1xcLmJyJC8udGVzdChwYXRobmFtZSkpIHtcbiAgICBicm90bGlDb21wcmVzc2VkID0gdHJ1ZVxuICB9XG4gIHJldHVybiBicm90bGlDb21wcmVzc2VkXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;