ng-easycommerce 0.0.689 → 0.0.690
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/bundles/ng-easycommerce.umd.js +262 -78
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +3 -2
- package/esm2015/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +237 -85
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +3 -2
- package/esm5/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +263 -85
- package/fesm2015/ng-easycommerce.js +236 -78
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +262 -78
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.d.ts +34 -32
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -4,119 +4,275 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Component,
|
|
8
|
-
import {
|
|
9
|
-
import { ComponentHelper } from "../../../classes/component-helper";
|
|
10
|
-
import { ConnectionService } from '../../../api/connection.service';
|
|
7
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
8
|
+
import { ComponentHelper } from '../../../classes/component-helper';
|
|
11
9
|
import { ToastService } from '../../../utils/toast.service';
|
|
12
|
-
import { Constants } from '../../../core.consts';
|
|
13
10
|
import { CartService } from '../../../services/cart.service';
|
|
14
|
-
import { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';
|
|
15
|
-
import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';
|
|
16
11
|
let MobbexEcComponent = class MobbexEcComponent extends ComponentHelper {
|
|
17
|
-
constructor(
|
|
12
|
+
constructor(toastrService, cartService) {
|
|
18
13
|
super();
|
|
19
|
-
this.renderer = renderer;
|
|
20
|
-
this.connection = connection;
|
|
21
14
|
this.toastrService = toastrService;
|
|
22
|
-
this.consts = consts;
|
|
23
15
|
this.cartService = cartService;
|
|
24
|
-
this.toastr = toastr;
|
|
25
|
-
this.activedRoute = activedRoute;
|
|
26
|
-
this.sanitizer = sanitizer;
|
|
27
|
-
this.modalService = modalService;
|
|
28
16
|
this.method = null;
|
|
29
17
|
this.total_amount = 0;
|
|
30
18
|
this.user_data = null;
|
|
31
19
|
this.ready = new EventEmitter();
|
|
32
|
-
this.loading =
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
-
|
|
20
|
+
this.loading = true;
|
|
21
|
+
this.processing = false;
|
|
22
|
+
this.url = null;
|
|
23
|
+
this.checkoutData = null;
|
|
24
|
+
this.popup = null;
|
|
25
|
+
this.pollTimer = null;
|
|
26
|
+
this.startedAt = 0;
|
|
27
|
+
this.finished = false;
|
|
28
|
+
this.checkoutKey = '';
|
|
29
|
+
this.bc = null;
|
|
30
|
+
this.checkoutRequestInFlight = false;
|
|
31
|
+
this.openCheckout = () => {
|
|
32
|
+
if (!this.url || this.processing || typeof window === 'undefined')
|
|
33
|
+
return;
|
|
34
|
+
this.clearStateKeys();
|
|
35
|
+
this.finished = false;
|
|
36
|
+
this.processing = true;
|
|
37
|
+
this.startedAt = Date.now();
|
|
38
|
+
this.popup = window.open(this.url, '_blank');
|
|
39
|
+
if (!this.popup || this.popup.closed) {
|
|
40
|
+
this.processing = false;
|
|
41
|
+
this.toastrService.show('No se pudo abrir la pasarela de pago. Verifique que su navegador permita nuevas pestañas.');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
47
44
|
try {
|
|
48
|
-
|
|
49
|
-
this.loading = true;
|
|
50
|
-
state && console.log(state);
|
|
51
|
-
if (state) {
|
|
52
|
-
this.loading = false;
|
|
53
|
-
sessionStorage.removeItem('state');
|
|
54
|
-
localStorage.removeItem('state');
|
|
55
|
-
if (state == 'success') {
|
|
56
|
-
this.ready.emit(true);
|
|
57
|
-
}
|
|
58
|
-
if (state == 'cancel') {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (state == 'failure') {
|
|
62
|
-
this.processError('');
|
|
63
|
-
}
|
|
64
|
-
this.modalRef.hide();
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
setTimeout(() => {
|
|
68
|
-
this.callState();
|
|
69
|
-
}, 5000);
|
|
45
|
+
this.popup.opener = null;
|
|
70
46
|
}
|
|
71
|
-
catch (
|
|
72
|
-
|
|
47
|
+
catch (_a) {
|
|
48
|
+
// Nothing to do.
|
|
73
49
|
}
|
|
50
|
+
this.startPolling();
|
|
74
51
|
};
|
|
75
|
-
this.
|
|
76
|
-
this.
|
|
77
|
-
|
|
52
|
+
this.cancelCheckout = () => {
|
|
53
|
+
if (this.finished)
|
|
54
|
+
return;
|
|
55
|
+
this.finishWithState('cancel', true);
|
|
78
56
|
};
|
|
79
57
|
this.getCheckoutMobbex = () => {
|
|
58
|
+
if (this.checkoutRequestInFlight)
|
|
59
|
+
return;
|
|
80
60
|
this.loading = true;
|
|
81
|
-
this.
|
|
61
|
+
this.checkoutRequestInFlight = true;
|
|
62
|
+
const payload = this.user_data || this.allData || {};
|
|
63
|
+
this.paymentServiceInst.getCheckoutMobbex(payload).then(res => {
|
|
82
64
|
var _a, _b, _c, _d;
|
|
83
|
-
this.
|
|
84
|
-
this.
|
|
65
|
+
this.checkoutData = res || null;
|
|
66
|
+
this.checkoutKey = String(((_b = (_a = res) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.id) || this.cartService.cart_token || '');
|
|
67
|
+
this.url = ((_d = (_c = res) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.url) || null;
|
|
68
|
+
this.safeSetStorage('mobbex:checkout-id', this.checkoutKey);
|
|
85
69
|
this.loading = false;
|
|
86
|
-
|
|
87
|
-
this.
|
|
70
|
+
this.checkoutRequestInFlight = false;
|
|
71
|
+
if (!this.url) {
|
|
72
|
+
this.processError('operation-error');
|
|
73
|
+
}
|
|
74
|
+
}, () => {
|
|
88
75
|
this.loading = false;
|
|
76
|
+
this.checkoutRequestInFlight = false;
|
|
77
|
+
this.processError('operation-error');
|
|
89
78
|
});
|
|
90
79
|
};
|
|
80
|
+
this.onStorage = (event) => {
|
|
81
|
+
var _a;
|
|
82
|
+
if (!((_a = event) === null || _a === void 0 ? void 0 : _a.key) || this.finished)
|
|
83
|
+
return;
|
|
84
|
+
if (!this.getStateKeys().includes(event.key))
|
|
85
|
+
return;
|
|
86
|
+
const state = this.normalizeState(event.newValue);
|
|
87
|
+
if (state) {
|
|
88
|
+
this.finishWithState(state, true);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
this.onMessage = (event) => {
|
|
92
|
+
this.onBroadcastMessage(event);
|
|
93
|
+
};
|
|
94
|
+
this.clearStorageState = () => {
|
|
95
|
+
sessionStorage.removeItem('state');
|
|
96
|
+
localStorage.removeItem('state');
|
|
97
|
+
};
|
|
98
|
+
this.processError = (err) => {
|
|
99
|
+
this.toastrService.show(err !== '' ? err : 'payment-error');
|
|
100
|
+
};
|
|
91
101
|
this.ecOnConstruct();
|
|
92
102
|
}
|
|
93
103
|
ngOnInit() {
|
|
94
|
-
|
|
104
|
+
if (typeof window !== 'undefined') {
|
|
105
|
+
window.addEventListener('storage', this.onStorage);
|
|
106
|
+
window.addEventListener('message', this.onMessage);
|
|
107
|
+
if (window.BroadcastChannel) {
|
|
108
|
+
this.bc = new BroadcastChannel('mobbex_payment');
|
|
109
|
+
this.bc.onmessage = (event) => this.onBroadcastMessage(event);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
this.loadCheckout();
|
|
95
113
|
this.ecOnInit();
|
|
96
114
|
}
|
|
97
115
|
ngOnDestroy() {
|
|
98
|
-
|
|
116
|
+
if (typeof window !== 'undefined') {
|
|
117
|
+
window.removeEventListener('storage', this.onStorage);
|
|
118
|
+
window.removeEventListener('message', this.onMessage);
|
|
119
|
+
}
|
|
120
|
+
if (this.bc) {
|
|
121
|
+
try {
|
|
122
|
+
this.bc.close();
|
|
123
|
+
}
|
|
124
|
+
catch (_a) {
|
|
125
|
+
// Nothing to do.
|
|
126
|
+
}
|
|
127
|
+
this.bc = null;
|
|
128
|
+
}
|
|
129
|
+
this.stopPolling();
|
|
130
|
+
this.closePopup();
|
|
131
|
+
}
|
|
132
|
+
loadCheckout() {
|
|
133
|
+
if (!this.paymentServiceInst || !this.method)
|
|
134
|
+
return;
|
|
135
|
+
if (this.url && !this.loading)
|
|
136
|
+
return;
|
|
137
|
+
this.getCheckoutMobbex();
|
|
138
|
+
}
|
|
139
|
+
startPolling() {
|
|
140
|
+
this.stopPolling();
|
|
141
|
+
this.pollTimer = setInterval(() => {
|
|
142
|
+
var _a, _b, _c, _d, _e, _f;
|
|
143
|
+
if (this.finished) {
|
|
144
|
+
this.stopPolling();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const state = this.readState();
|
|
148
|
+
if (state) {
|
|
149
|
+
this.finishWithState(state, true);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if ((_a = this.popup) === null || _a === void 0 ? void 0 : _a.closed) {
|
|
153
|
+
this.finishWithState('cancel', true);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const rawTimeoutMinutes = Number((_f = (_d = (_c = (_b = this.checkoutData) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.timeout, (_d !== null && _d !== void 0 ? _d : (_e = this.checkoutData) === null || _e === void 0 ? void 0 : _e.timeout)), (_f !== null && _f !== void 0 ? _f : 60)));
|
|
157
|
+
const timeoutMinutes = Number.isFinite(rawTimeoutMinutes) && rawTimeoutMinutes > 0 ? rawTimeoutMinutes : 60;
|
|
158
|
+
const timeoutMs = Math.max(5, timeoutMinutes + 1) * 60 * 1000;
|
|
159
|
+
if (Date.now() - this.startedAt > timeoutMs) {
|
|
160
|
+
this.finishWithState('failure', true, 'Tiempo de espera agotado al procesar el pago con Mobbex.');
|
|
161
|
+
}
|
|
162
|
+
}, 1000);
|
|
163
|
+
}
|
|
164
|
+
onBroadcastMessage(event) {
|
|
165
|
+
var _a;
|
|
166
|
+
const payload = (_a = event) === null || _a === void 0 ? void 0 : _a.data;
|
|
167
|
+
if (!payload || payload.type !== 'mobbex:state' || this.finished)
|
|
168
|
+
return;
|
|
169
|
+
if (this.checkoutKey && payload.checkoutKey && payload.checkoutKey !== this.checkoutKey)
|
|
170
|
+
return;
|
|
171
|
+
const state = this.normalizeState(payload.state);
|
|
172
|
+
if (state) {
|
|
173
|
+
this.finishWithState(state, true);
|
|
174
|
+
}
|
|
99
175
|
}
|
|
100
|
-
|
|
101
|
-
|
|
176
|
+
finishWithState(state, closePopup = false, customMessage = '') {
|
|
177
|
+
if (this.finished)
|
|
178
|
+
return;
|
|
179
|
+
this.finished = true;
|
|
180
|
+
this.processing = false;
|
|
181
|
+
this.stopPolling();
|
|
182
|
+
if (closePopup) {
|
|
183
|
+
this.closePopup();
|
|
184
|
+
}
|
|
185
|
+
this.clearStateKeys();
|
|
186
|
+
if (state === 'success' || state === 'pending') {
|
|
187
|
+
this.ready.emit(true);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.processError(customMessage || (state === 'cancel' ? 'Se canceló el pago con Mobbex' : ''));
|
|
102
191
|
}
|
|
103
|
-
|
|
192
|
+
readState() {
|
|
193
|
+
const keys = this.getStateKeys();
|
|
194
|
+
for (const key of keys) {
|
|
195
|
+
const value = this.safeGetStorage(key);
|
|
196
|
+
const normalized = this.normalizeState(value);
|
|
197
|
+
if (normalized)
|
|
198
|
+
return normalized;
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
normalizeState(value) {
|
|
203
|
+
const raw = String(value || '').toLowerCase();
|
|
204
|
+
if (!raw)
|
|
205
|
+
return null;
|
|
206
|
+
if (raw === '200' || raw === 'ok' || raw === 'success')
|
|
207
|
+
return 'success';
|
|
208
|
+
if (raw === 'pending' || raw === 'in_process' || raw === 'in_review' || raw === 'challenge')
|
|
209
|
+
return 'pending';
|
|
210
|
+
if (raw === 'cancel' || raw === '0' || raw === 'none')
|
|
211
|
+
return 'cancel';
|
|
212
|
+
if (raw === 'failure' || raw === 'error' || raw === 'expired' || raw === '401')
|
|
213
|
+
return 'failure';
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
getStateKeys() {
|
|
217
|
+
const keys = ['state'];
|
|
218
|
+
if (this.checkoutKey) {
|
|
219
|
+
keys.unshift(`mobbex:state:${this.checkoutKey}`);
|
|
220
|
+
}
|
|
221
|
+
return keys;
|
|
222
|
+
}
|
|
223
|
+
clearStateKeys() {
|
|
104
224
|
this.clearStorageState();
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
225
|
+
if (this.checkoutKey) {
|
|
226
|
+
this.safeRemoveStorage(`mobbex:state:${this.checkoutKey}`);
|
|
227
|
+
this.safeRemoveStorage('mobbex:checkout-id');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
stopPolling() {
|
|
231
|
+
if (this.pollTimer) {
|
|
232
|
+
clearInterval(this.pollTimer);
|
|
233
|
+
this.pollTimer = null;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
closePopup() {
|
|
237
|
+
if (!this.popup)
|
|
238
|
+
return;
|
|
239
|
+
try {
|
|
240
|
+
if (!this.popup.closed)
|
|
241
|
+
this.popup.close();
|
|
242
|
+
}
|
|
243
|
+
catch (_a) {
|
|
244
|
+
// Nothing to do.
|
|
245
|
+
}
|
|
246
|
+
this.popup = null;
|
|
247
|
+
}
|
|
248
|
+
safeGetStorage(key) {
|
|
249
|
+
try {
|
|
250
|
+
return localStorage.getItem(key);
|
|
251
|
+
}
|
|
252
|
+
catch (_a) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
safeRemoveStorage(key) {
|
|
257
|
+
try {
|
|
258
|
+
localStorage.removeItem(key);
|
|
259
|
+
}
|
|
260
|
+
catch (_a) {
|
|
261
|
+
// Nothing to do.
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
safeSetStorage(key, value) {
|
|
265
|
+
try {
|
|
266
|
+
localStorage.setItem(key, value);
|
|
267
|
+
}
|
|
268
|
+
catch (_a) {
|
|
269
|
+
// Nothing to do.
|
|
270
|
+
}
|
|
108
271
|
}
|
|
109
272
|
};
|
|
110
273
|
MobbexEcComponent.ctorParameters = () => [
|
|
111
|
-
{ type: Renderer2 },
|
|
112
|
-
{ type: ConnectionService },
|
|
113
274
|
{ type: ToastService },
|
|
114
|
-
{ type:
|
|
115
|
-
{ type: CartService },
|
|
116
|
-
{ type: ToastService },
|
|
117
|
-
{ type: ActivatedRoute },
|
|
118
|
-
{ type: DomSanitizer },
|
|
119
|
-
{ type: BsModalService }
|
|
275
|
+
{ type: CartService }
|
|
120
276
|
];
|
|
121
277
|
__decorate([
|
|
122
278
|
Input()
|
|
@@ -136,16 +292,12 @@ __decorate([
|
|
|
136
292
|
__decorate([
|
|
137
293
|
Output()
|
|
138
294
|
], MobbexEcComponent.prototype, "ready", void 0);
|
|
139
|
-
__decorate([
|
|
140
|
-
ViewChild('template')
|
|
141
|
-
], MobbexEcComponent.prototype, "template", void 0);
|
|
142
295
|
MobbexEcComponent = __decorate([
|
|
143
296
|
Component({
|
|
144
297
|
selector: 'app-mobbex-ec',
|
|
145
|
-
template: "<div class=\"text-center\">\n <h3>Continuar con el pago en Mobbex</h3>\n <p *ngIf=\"method\" class=\"px-5\">{{ method?.description }}</p>\n <p *ngIf=\"method\" class=\"px-5\">{{ method?.instructions }}</p>\n <ng-container *ngIf=\"
|
|
146
|
-
|
|
147
|
-
styles: [".half-width{width:49%!important}.ml-1{margin-left:1%}#card-form{height:450px}.iframeStyle{height:800px;width:100%;max-height:800px}"]
|
|
298
|
+
template: "<div class=\"text-center\">\n <h3>Continuar con el pago en Mobbex</h3>\n <p *ngIf=\"method\" class=\"px-5\">{{ method?.description }}</p>\n <p *ngIf=\"method\" class=\"px-5\">{{ method?.instructions }}</p>\n\n <ng-container *ngIf=\"loading; else checkoutReady\">\n <div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n <app-loading-full-ec></app-loading-full-ec>\n <p class=\"mt-3 px-5 mobbex-note\">Preparando la pasarela de pago...</p>\n </div>\n </ng-container>\n\n <ng-template #checkoutReady>\n <p class=\"mt-3 px-5 mobbex-note\">\n Se abrir\u00E1 una nueva pesta\u00F1a para completar el pago.\n </p>\n\n <div class=\"d-flex flex-column align-items-center\">\n <button\n class=\"btn btn-outline-secondary comprar\"\n [disabled]=\"processing || !url\"\n (click)=\"openCheckout()\">\n Ir al sitio de Mobbex\n </button>\n\n <a\n *ngIf=\"url\"\n class=\"mt-2 small mobbex-link\"\n [href]=\"url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.preventDefault(); openCheckout()\">\n Si el bot\u00F3n no abre una nueva pesta\u00F1a, toc\u00E1 aqu\u00ED para continuar.\n </a>\n\n <button\n *ngIf=\"processing\"\n type=\"button\"\n class=\"btn btn-link text-secondary mt-2\"\n (click)=\"cancelCheckout()\">\n Cancelar pago\n </button>\n\n <p *ngIf=\"!url\" class=\"mt-2 px-5 text-danger\">\n No fue posible preparar la pasarela de pago.\n </p>\n </div>\n </ng-template>\n</div>\n",
|
|
299
|
+
styles: [".mobbex-note{color:#6c757d}"]
|
|
148
300
|
})
|
|
149
301
|
], MobbexEcComponent);
|
|
150
302
|
export { MobbexEcComponent };
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iYmV4LWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvd2lkZ2V0cy1lYy9tb2JiZXgtZWMvbW9iYmV4LWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBU2pFLElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWtCLFNBQVEsZUFBZTtJQW9CbEQsWUFBbUIsUUFBbUIsRUFDM0IsVUFBNkIsRUFDN0IsYUFBMkIsRUFDM0IsTUFBaUIsRUFDakIsV0FBd0IsRUFDeEIsTUFBb0IsRUFDcEIsWUFBNEIsRUFDNUIsU0FBdUIsRUFDdkIsWUFBNEI7UUFDbkMsS0FBSyxFQUFFLENBQUM7UUFUTyxh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QixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUNBQWlDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BKLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0NBZ0VKLENBQUE7O1lBL0ZnQyxTQUFTO1lBQ2YsaUJBQWlCO1lBQ2QsWUFBWTtZQUNuQixTQUFTO1lBQ0osV0FBVztZQUNoQixZQUFZO1lBQ04sY0FBYztZQUNqQixZQUFZO1lBQ1QsY0FBYzs7QUExQjlCO0lBQVIsS0FBSyxFQUFFOzZEQUFvQjtBQUNuQjtJQUFSLEtBQUssRUFBRTtpREFBZTtBQUNkO0lBQVIsS0FBSyxFQUFFO3VEQUFrQjtBQUNqQjtJQUFSLEtBQUssRUFBRTtrREFBUztBQUNSO0lBQVIsS0FBSyxFQUFFO29EQUFrQjtBQUNoQjtJQUFULE1BQU0sRUFBRTtnREFBNEI7QUFDZDtJQUF0QixTQUFTLENBQUMsVUFBVSxDQUFDO21EQUFzQztBQVJuRCxpQkFBaUI7SUFON0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGVBQWU7UUFDekIsc2hDQUF1QztRQUV2QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7O0tBQzlCLENBQUM7R0FDVyxpQkFBaUIsQ0FtSDdCO1NBbkhZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiwgSW5qZWN0LCBPbkNoYW5nZXMsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlclwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwsIFNhZmVVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJzTW9kYWxSZWYsIEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5kZWNsYXJlIHZhciAkIDogYW55IFxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1tb2JiZXgtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnbW9iYmV4LWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnbW9iYmV4LWVjLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQnNNb2RhbFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1vYmJleEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgICBASW5wdXQoKSBwYXltZW50U2VydmljZUluc3Q7XG4gICAgQElucHV0KCkgbWV0aG9kID0gbnVsbDtcbiAgICBASW5wdXQoKSB0b3RhbF9hbW91bnQgPSAwO1xuICAgIEBJbnB1dCgpIGFsbERhdGE7XG4gICAgQElucHV0KCkgdXNlcl9kYXRhID0gbnVsbDtcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGUnKSBwcm90ZWN0ZWQgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcHJvdGVjdGVkIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgZGF0YU1vYmJleDtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHVibGljIGlzRG9ibGVBdXRoID0gZmFsc2U7XG4gICAgcHVibGljIHVybHMgPSBbXTtcbiAgICBwdWJsaWMgdXJsO1xuICAgIHB1YmxpYyBjbG9zZU1vZGFsID0gJydcbiAgICBwdWJsaWMgdmVudGFuYVxuICAgIHByb3RlY3RlZCBkYXRhUmVkaXJlY3QgPSAoKSA9PiB0aGlzLmNvbnN0cy5nZXRVcmxCYXNlKCkgKydzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9yZWRzeXMvcmVkaXJlY3QvJyArIHRoaXMuY2FydFNlcnZpY2UuY2FydF90b2tlbiArICcvcHJvY2Vzcy1wYXltZW50JztcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHVibGljIHRvYXN0cjogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWN0aXZlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHVibGljIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldENoZWNrb3V0TW9iYmV4KClcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU0UgREVTVFJPWkFcIik7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU0UgQ0FNQklPXCIpO1xuICAgIH1cblxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZVN0YXRlKClcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHsgY2xhc3M6ICdtb2RhbC1sZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQgJywga2V5Ym9hcmQ6IGZhbHNlLCBiYWNrZHJvcDogJ3N0YXRpYycsIGFuaW1hdGVkOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmNsb3NlTW9kYWwgPSAnJ1xuICAgICAgICB0aGlzLmNhbGxTdGF0ZSgpXG4gICAgfVxuXG4gICAgY2xlYXJTdG9yYWdlU3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3N0YXRlJylcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3N0YXRlJylcbiAgICB9XG5cbiAgICBjbGlja0Nsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlTW9kYWwgPSAnY2FuY2VsJ1xuICAgICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKVxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcignU2UgY2FuY2VsbyBlbCBwYWdvIGNvbiBtb2JiZXgnKVxuICAgIH1cblxuXG4gICAgY2FsbFN0YXRlID0gKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5jbG9zZU1vZGFsICE9ICcnID8gdGhpcy5jbG9zZU1vZGFsIDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0YXRlJylcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIHN0YXRlICYmIGNvbnNvbGUubG9nKHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnc3RhdGUnKVxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzdGF0ZScpXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9yKCcnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsU3RhdGUoKVxuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9ICAgXG4gICAgfVxuXG4gICAgcHJvY2Vzc0Vycm9yID0gKGVycikgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnIgIT0gJycgPyBlcnIgOiAncGF5bWVudC1lcnJvcicpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEVOVklPIEJBQ0sgIFwiLCBlcnIpO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0TW9iYmV4ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgIHRoaXMucGF5bWVudFNlcnZpY2VJbnN0LmdldENoZWNrb3V0TW9iYmV4KHRoaXMuYWxsRGF0YSkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTW9iYmV4ID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMudXJsID0gcmVzPy5kYXRhPy51cmwgJiYgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHJlcz8uZGF0YT8udXJsKVxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcignb3BlcmF0aW9uLWVycm9yJylcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuXG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iYmV4LWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvd2lkZ2V0cy1lYy9tb2JiZXgtZWMvbW9iYmV4LWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVM3RCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFrQixTQUFRLGVBQWU7SUFzQmxELFlBQ1csYUFBMkIsRUFDM0IsV0FBd0I7UUFFL0IsS0FBSyxFQUFFLENBQUM7UUFIRCxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXJCMUIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDaEIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFFekIsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFDekIsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFDNUIsY0FBUyxHQUFRLElBQUksQ0FBQztRQUN0QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixPQUFFLEdB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QUMsV0FBTTtZQUNKLGlCQUFpQjtTQUNwQjtJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDN0MsSUFBSTtZQUNBLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO1FBQUMsV0FBTTtZQUNKLGlCQUFpQjtTQUNwQjtJQUNMLENBQUM7Q0FDSixDQUFBOztZQWhRNkIsWUFBWTtZQUNkLFdBQVc7O0FBdEIxQjtJQUFSLEtBQUssRUFBRTs2REFBb0I7QUFDbkI7SUFBUixLQUFLLEVBQUU7aURBQWU7QUFDZDtJQUFSLEtBQUssRUFBRTt1REFBa0I7QUFDakI7SUFBUixLQUFLLEVBQUU7a0RBQVM7QUFDUjtJQUFSLEtBQUssRUFBRTtvREFBa0I7QUFDaEI7SUFBVCxNQUFNLEVBQUU7Z0RBQTRCO0FBUDVCLGlCQUFpQjtJQUw3QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsZUFBZTtRQUN6Qix3MURBQXVDOztLQUUxQyxDQUFDO0dBQ1csaUJBQWlCLENBdVI3QjtTQXZSWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcblxudHlwZSBQYXltZW50U3RhdGUgPSAnc3VjY2VzcycgfCAncGVuZGluZycgfCAnZmFpbHVyZScgfCAnY2FuY2VsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtbW9iYmV4LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ21vYmJleC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ21vYmJleC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1vYmJleEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcGF5bWVudFNlcnZpY2VJbnN0O1xuICAgIEBJbnB1dCgpIG1ldGhvZCA9IG51bGw7XG4gICAgQElucHV0KCkgdG90YWxfYW1vdW50ID0gMDtcbiAgICBASW5wdXQoKSBhbGxEYXRhO1xuICAgIEBJbnB1dCgpIHVzZXJfZGF0YSA9IG51bGw7XG4gICAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICAgIHB1YmxpYyBwcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgcHVibGljIHVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGNoZWNrb3V0RGF0YTogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIHBvcHVwOiBXaW5kb3cgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvbGxUaW1lcjogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIHN0YXJ0ZWRBdCA9IDA7XG4gICAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2hlY2tvdXRLZXkgPSAnJztcbiAgICBwcml2YXRlIGJjOiBCcm9hZGNhc3RDaGFubmVsIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBjaGVja291dFJlcXVlc3RJbkZsaWdodCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5vblN0b3JhZ2UgYXMgYW55KTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5vbk1lc3NhZ2UgYXMgYW55KTtcbiAgICAgICAgICAgIGlmICgod2luZG93IGFzIGFueSkuQnJvYWRjYXN0Q2hhbm5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnbW9iYmV4X3BheW1lbnQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJjLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB0aGlzLm9uQnJvYWRjYXN0TWVzc2FnZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkQ2hlY2tvdXQoKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5vblN0b3JhZ2UgYXMgYW55KTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5vbk1lc3NhZ2UgYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYykge1xuICAgICAgICAgICAgdHJ5IHsgdGhpcy5iYy5jbG9zZSgpOyB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iYyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICB9XG5cbiAgICBvcGVuQ2hlY2tvdXQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy51cmwgfHwgdGhpcy5wcm9jZXNzaW5nIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jbGVhclN0YXRlS2V5cygpO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4odGhpcy51cmwsICdfYmxhbmsnKTtcblxuICAgICAgICBpZiAoIXRoaXMucG9wdXAgfHwgdGhpcy5wb3B1cC5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ05vIHNlIHB1ZG8gYWJyaXIgbGEgcGFzYXJlbGEgZGUgcGFnby4gVmVyaWZpcXVlIHF1ZSBzdSBuYXZlZ2Fkb3IgcGVybWl0YSBudWV2YXMgcGVzdGHDsWFzLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucG9wdXAub3BlbmVyID0gbnVsbDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLlxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFBvbGxpbmcoKTtcbiAgICB9XG5cbiAgICBjYW5jZWxDaGVja291dCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5maW5pc2hXaXRoU3RhdGUoJ2NhbmNlbCcsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2hlY2tvdXRNb2JiZXggPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0UmVxdWVzdEluRmxpZ2h0KSByZXR1cm47XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRSZXF1ZXN0SW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy51c2VyX2RhdGEgfHwgdGhpcy5hbGxEYXRhIHx8IHt9O1xuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlSW5zdC5nZXRDaGVja291dE1vYmJleChwYXlsb2FkKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0RGF0YSA9IHJlcyB8fCBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRLZXkgPSBTdHJpbmcocmVzPy5kYXRhPy5pZCB8fCB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRfdG9rZW4gfHwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMudXJsID0gcmVzPy5kYXRhPy51cmwgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNhZmVTZXRTdG9yYWdlKCdtb2JiZXg6Y2hlY2tvdXQtaWQnLCB0aGlzLmNoZWNrb3V0S2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0UmVxdWVzdEluRmxpZ2h0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9yKCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRSZXF1ZXN0SW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcignb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkQ2hlY2tvdXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXltZW50U2VydmljZUluc3QgfHwgIXRoaXMubWV0aG9kKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tvdXRNb2JiZXgoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UG9sbGluZygpIHtcbiAgICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuXG4gICAgICAgIHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucmVhZFN0YXRlKCk7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaFdpdGhTdGF0ZShzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hXaXRoU3RhdGUoJ2NhbmNlbCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmF3VGltZW91dE1pbnV0ZXMgPSBOdW1iZXIodGhpcy5jaGVja291dERhdGE/LmRhdGE/LnRpbWVvdXQgPz8gdGhpcy5jaGVja291dERhdGE/LnRpbWVvdXQgPz8gNjApO1xuICAgICAgICAgICAgY29uc3QgdGltZW91dE1pbnV0ZXMgPSBOdW1iZXIuaXNGaW5pdGUocmF3VGltZW91dE1pbnV0ZXMpICYmIHJhd1RpbWVvdXRNaW51dGVzID4gMCA/IHJhd1RpbWVvdXRNaW51dGVzIDogNjA7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSBNYXRoLm1heCg1LCB0aW1lb3V0TWludXRlcyArIDEpICogNjAgKiAxMDAwO1xuICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0ZWRBdCA+IHRpbWVvdXRNcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoV2l0aFN0YXRlKCdmYWlsdXJlJywgdHJ1ZSwgJ1RpZW1wbyBkZSBlc3BlcmEgYWdvdGFkbyBhbCBwcm9jZXNhciBlbCBwYWdvIGNvbiBNb2JiZXguJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TdG9yYWdlID0gKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudD8ua2V5IHx8IHRoaXMuZmluaXNoZWQpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGV2ZW50LmtleSkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm5vcm1hbGl6ZVN0YXRlKGV2ZW50Lm5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaFdpdGhTdGF0ZShzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMub25Ccm9hZGNhc3RNZXNzYWdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQnJvYWRjYXN0TWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBldmVudD8uZGF0YTtcbiAgICAgICAgaWYgKCFwYXlsb2FkIHx8IHBheWxvYWQudHlwZSAhPT0gJ21vYmJleDpzdGF0ZScgfHwgdGhpcy5maW5pc2hlZCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jaGVja291dEtleSAmJiBwYXlsb2FkLmNoZWNrb3V0S2V5ICYmIHBheWxvYWQuY2hlY2tvdXRLZXkgIT09IHRoaXMuY2hlY2tvdXRLZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm5vcm1hbGl6ZVN0YXRlKHBheWxvYWQuc3RhdGUpO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoV2l0aFN0YXRlKHN0YXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoV2l0aFN0YXRlKHN0YXRlOiBQYXltZW50U3RhdGUsIGNsb3NlUG9wdXAgPSBmYWxzZSwgY3VzdG9tTWVzc2FnZSA9ICcnKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuXG4gICAgICAgIGlmIChjbG9zZVBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZUtleXMoKTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJyB8fCBzdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvcihjdXN0b21NZXNzYWdlIHx8IChzdGF0ZSA9PT0gJ2NhbmNlbCcgPyAnU2UgY2FuY2Vsw7MgZWwgcGFnbyBjb24gTW9iYmV4JyA6ICcnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkU3RhdGUoKTogUGF5bWVudFN0YXRlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmdldFN0YXRlS2V5cygpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zYWZlR2V0U3RvcmFnZShrZXkpO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplU3RhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHJldHVybiBub3JtYWxpemVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVTdGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFBheW1lbnRTdGF0ZSB8IG51bGwge1xuICAgICAgICBjb25zdCByYXcgPSBTdHJpbmcodmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHJhdyA9PT0gJzIwMCcgfHwgcmF3ID09PSAnb2snIHx8IHJhdyA9PT0gJ3N1Y2Nlc3MnKSByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgICBpZiAocmF3ID09PSAncGVuZGluZycgfHwgcmF3ID09PSAnaW5fcHJvY2VzcycgfHwgcmF3ID09PSAnaW5fcmV2aWV3JyB8fCByYXcgPT09ICdjaGFsbGVuZ2UnKSByZXR1cm4gJ3BlbmRpbmcnO1xuICAgICAgICBpZiAocmF3ID09PSAnY2FuY2VsJyB8fCByYXcgPT09ICcwJyB8fCByYXcgPT09ICdub25lJykgcmV0dXJuICdjYW5jZWwnO1xuICAgICAgICBpZiAocmF3ID09PSAnZmFpbHVyZScgfHwgcmF3ID09PSAnZXJyb3InIHx8IHJhdyA9PT0gJ2V4cGlyZWQnIHx8IHJhdyA9PT0gJzQwMScpIHJldHVybiAnZmFpbHVyZSc7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhdGVLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IFsnc3RhdGUnXTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tvdXRLZXkpIHtcbiAgICAgICAgICAgIGtleXMudW5zaGlmdChgbW9iYmV4OnN0YXRlOiR7dGhpcy5jaGVja291dEtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU3RvcmFnZVN0YXRlID0gKCkgPT4ge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdzdGF0ZScpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc3RhdGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU3RhdGVLZXlzKCkge1xuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZVN0YXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrb3V0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNhZmVSZW1vdmVTdG9yYWdlKGBtb2JiZXg6c3RhdGU6JHt0aGlzLmNoZWNrb3V0S2V5fWApO1xuICAgICAgICAgICAgdGhpcy5zYWZlUmVtb3ZlU3RvcmFnZSgnbW9iYmV4OmNoZWNrb3V0LWlkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NFcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coZXJyICE9PSAnJyA/IGVyciA6ICdwYXltZW50LWVycm9yJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9wUG9sbGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMucG9sbFRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMucG9sbFRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VQb3B1cCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wdXAuY2xvc2VkKSB0aGlzLnBvcHVwLmNsb3NlKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVwID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhZmVHZXRTdG9yYWdlKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2FmZVJlbW92ZVN0b3JhZ2Uoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2FmZVNldFN0b3JhZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|