@seniorsistemas/components-ai 1.3.0-master-e23db6ad → 1.3.0-master-07986db4
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/esm2022/lib/services/websocket.service.mjs +237 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/seniorsistemas-components-ai.mjs +236 -4
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/services/websocket.service.d.ts +68 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject, BehaviorSubject, filter, share, takeUntil } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./auth.service";
|
|
5
|
+
import * as i2 from "./cookie.service";
|
|
6
|
+
export class WebSocketService {
|
|
7
|
+
authService;
|
|
8
|
+
cookieService;
|
|
9
|
+
socket = null;
|
|
10
|
+
destroy$ = new Subject();
|
|
11
|
+
messages$ = new Subject();
|
|
12
|
+
connectionState$ = new BehaviorSubject('disconnected');
|
|
13
|
+
subscriptions = new Map();
|
|
14
|
+
subscriptionCounter = 0;
|
|
15
|
+
reconnectAttempts = 0;
|
|
16
|
+
maxReconnectAttempts = 5;
|
|
17
|
+
reconnectTimeout;
|
|
18
|
+
pendingSubscriptions = [];
|
|
19
|
+
constructor(authService, cookieService) {
|
|
20
|
+
this.authService = authService;
|
|
21
|
+
this.cookieService = cookieService;
|
|
22
|
+
}
|
|
23
|
+
/** Estado atual da conexão */
|
|
24
|
+
get state$() {
|
|
25
|
+
return this.connectionState$.asObservable();
|
|
26
|
+
}
|
|
27
|
+
/** Conecta ao WebSocket usando a URL base do cookie */
|
|
28
|
+
connect() {
|
|
29
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const wsUrl = this.buildWebSocketUrl();
|
|
33
|
+
if (!wsUrl) {
|
|
34
|
+
console.error('[WebSocketService] Não foi possível construir a URL do WebSocket. Cookie de URL base não encontrado.');
|
|
35
|
+
this.connectionState$.next('error');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.connectionState$.next('connecting');
|
|
39
|
+
try {
|
|
40
|
+
this.socket = new WebSocket(wsUrl);
|
|
41
|
+
this.socket.onopen = () => this.onOpen();
|
|
42
|
+
this.socket.onmessage = (event) => this.onMessage(event);
|
|
43
|
+
this.socket.onclose = (event) => this.onClose(event);
|
|
44
|
+
this.socket.onerror = () => this.onError();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('[WebSocketService] Erro ao criar WebSocket:', error);
|
|
48
|
+
this.connectionState$.next('error');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Desconecta do WebSocket */
|
|
52
|
+
disconnect() {
|
|
53
|
+
this.clearReconnect();
|
|
54
|
+
this.reconnectAttempts = 0;
|
|
55
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
56
|
+
// Enviar DISCONNECT STOMP
|
|
57
|
+
this.sendFrame('DISCONNECT', {}, '');
|
|
58
|
+
this.socket.close();
|
|
59
|
+
}
|
|
60
|
+
this.socket = null;
|
|
61
|
+
this.subscriptions.clear();
|
|
62
|
+
this.pendingSubscriptions = [];
|
|
63
|
+
this.connectionState$.next('disconnected');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Inscreve-se em um tópico baseado na configuração.
|
|
67
|
+
* Padrão do bind: /topic/{token}/{domain}/{service}/{primitive}
|
|
68
|
+
*/
|
|
69
|
+
subscribe(config) {
|
|
70
|
+
const destination = this.buildDestination(config);
|
|
71
|
+
const subId = `sub-${this.subscriptionCounter++}`;
|
|
72
|
+
// Se já conectado, envia SUBSCRIBE imediatamente
|
|
73
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN && this.connectionState$.value === 'connected') {
|
|
74
|
+
this.sendSubscribe(destination, subId);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Guarda para enviar após conexão
|
|
78
|
+
this.pendingSubscriptions.push({ destination, id: subId });
|
|
79
|
+
// Auto-conecta se não estiver conectado
|
|
80
|
+
if (this.connectionState$.value === 'disconnected') {
|
|
81
|
+
this.connect();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.subscriptions.set(subId, destination);
|
|
85
|
+
return this.messages$.pipe(filter(msg => msg.destination === destination), takeUntil(this.destroy$), share());
|
|
86
|
+
}
|
|
87
|
+
/** Remove a inscrição de um tópico */
|
|
88
|
+
unsubscribe(config) {
|
|
89
|
+
const destination = this.buildDestination(config);
|
|
90
|
+
const entry = [...this.subscriptions.entries()].find(([, dest]) => dest === destination);
|
|
91
|
+
if (entry) {
|
|
92
|
+
const [subId] = entry;
|
|
93
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
94
|
+
this.sendFrame('UNSUBSCRIBE', { id: subId }, '');
|
|
95
|
+
}
|
|
96
|
+
this.subscriptions.delete(subId);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
ngOnDestroy() {
|
|
100
|
+
this.disconnect();
|
|
101
|
+
this.destroy$.next();
|
|
102
|
+
this.destroy$.complete();
|
|
103
|
+
}
|
|
104
|
+
// ── Privados ──────────────────────────────────────────────
|
|
105
|
+
buildWebSocketUrl() {
|
|
106
|
+
const baseUrl = this.cookieService.getCookie('com.senior.base.url');
|
|
107
|
+
if (!baseUrl) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
// Converte http(s) para ws(s)
|
|
111
|
+
const wsUrl = baseUrl
|
|
112
|
+
.replace(/\/$/, '')
|
|
113
|
+
.replace(/^http/, 'ws');
|
|
114
|
+
return `${wsUrl}/websocket/subscription`;
|
|
115
|
+
}
|
|
116
|
+
buildDestination(config) {
|
|
117
|
+
const parts = ['/topic'];
|
|
118
|
+
if (config.userScoped) {
|
|
119
|
+
const token = this.authService.getAccessToken();
|
|
120
|
+
if (token) {
|
|
121
|
+
parts.push(token);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
parts.push(config.domain, config.service, config.primitive);
|
|
125
|
+
return parts.join('/');
|
|
126
|
+
}
|
|
127
|
+
onOpen() {
|
|
128
|
+
this.reconnectAttempts = 0;
|
|
129
|
+
// Enviar CONNECT STOMP
|
|
130
|
+
const headers = { 'accept-version': '1.2', 'heart-beat': '10000,10000' };
|
|
131
|
+
const token = this.authService.getAccessToken();
|
|
132
|
+
if (token) {
|
|
133
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
134
|
+
}
|
|
135
|
+
this.sendFrame('CONNECT', headers, '');
|
|
136
|
+
}
|
|
137
|
+
onMessage(event) {
|
|
138
|
+
const frame = this.parseFrame(event.data);
|
|
139
|
+
if (!frame)
|
|
140
|
+
return;
|
|
141
|
+
switch (frame.command) {
|
|
142
|
+
case 'CONNECTED':
|
|
143
|
+
this.connectionState$.next('connected');
|
|
144
|
+
this.resubscribeAll();
|
|
145
|
+
break;
|
|
146
|
+
case 'MESSAGE': {
|
|
147
|
+
const destination = frame.headers['destination'] || '';
|
|
148
|
+
let body = frame.body;
|
|
149
|
+
try {
|
|
150
|
+
body = JSON.parse(frame.body);
|
|
151
|
+
}
|
|
152
|
+
catch { /* mantém como string */ }
|
|
153
|
+
this.messages$.next({ destination, body, headers: frame.headers });
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'ERROR':
|
|
157
|
+
console.error('[WebSocketService] STOMP ERROR:', frame.body);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
onClose(event) {
|
|
162
|
+
this.connectionState$.next('disconnected');
|
|
163
|
+
if (!event.wasClean && this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
164
|
+
this.scheduleReconnect();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
onError() {
|
|
168
|
+
this.connectionState$.next('error');
|
|
169
|
+
}
|
|
170
|
+
scheduleReconnect() {
|
|
171
|
+
this.clearReconnect();
|
|
172
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
173
|
+
this.reconnectAttempts++;
|
|
174
|
+
console.log(`[WebSocketService] Reconectando em ${delay}ms (tentativa ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
175
|
+
this.reconnectTimeout = setTimeout(() => this.connect(), delay);
|
|
176
|
+
}
|
|
177
|
+
clearReconnect() {
|
|
178
|
+
if (this.reconnectTimeout) {
|
|
179
|
+
clearTimeout(this.reconnectTimeout);
|
|
180
|
+
this.reconnectTimeout = null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
resubscribeAll() {
|
|
184
|
+
// Re-inscreve subscriptions existentes
|
|
185
|
+
for (const [id, destination] of this.subscriptions.entries()) {
|
|
186
|
+
this.sendSubscribe(destination, id);
|
|
187
|
+
}
|
|
188
|
+
// Envia pendentes
|
|
189
|
+
for (const pending of this.pendingSubscriptions) {
|
|
190
|
+
this.sendSubscribe(pending.destination, pending.id);
|
|
191
|
+
}
|
|
192
|
+
this.pendingSubscriptions = [];
|
|
193
|
+
}
|
|
194
|
+
sendSubscribe(destination, id) {
|
|
195
|
+
this.sendFrame('SUBSCRIBE', { id, destination }, '');
|
|
196
|
+
}
|
|
197
|
+
// ── STOMP Frame helpers ───────────────────────────────────
|
|
198
|
+
sendFrame(command, headers, body) {
|
|
199
|
+
if (!this.socket || this.socket.readyState !== WebSocket.OPEN)
|
|
200
|
+
return;
|
|
201
|
+
let frame = `${command}\n`;
|
|
202
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
203
|
+
frame += `${key}:${value}\n`;
|
|
204
|
+
}
|
|
205
|
+
frame += `\n${body}\0`;
|
|
206
|
+
this.socket.send(frame);
|
|
207
|
+
}
|
|
208
|
+
parseFrame(data) {
|
|
209
|
+
// Heartbeat
|
|
210
|
+
if (data === '\n' || data === '\r\n' || data.trim() === '')
|
|
211
|
+
return null;
|
|
212
|
+
const lines = data.split('\n');
|
|
213
|
+
const command = lines[0].replace('\r', '');
|
|
214
|
+
const headers = {};
|
|
215
|
+
let i = 1;
|
|
216
|
+
for (; i < lines.length; i++) {
|
|
217
|
+
const line = lines[i].replace('\r', '');
|
|
218
|
+
if (line === '')
|
|
219
|
+
break;
|
|
220
|
+
const colonIndex = line.indexOf(':');
|
|
221
|
+
if (colonIndex > 0) {
|
|
222
|
+
headers[line.substring(0, colonIndex)] = line.substring(colonIndex + 1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const body = lines.slice(i + 1).join('\n').replace(/\0$/, '');
|
|
226
|
+
return { command, headers, body };
|
|
227
|
+
}
|
|
228
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, deps: [{ token: i1.AuthService }, { token: i2.CookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
229
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, providedIn: 'root' });
|
|
230
|
+
}
|
|
231
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, decorators: [{
|
|
232
|
+
type: Injectable,
|
|
233
|
+
args: [{
|
|
234
|
+
providedIn: 'root'
|
|
235
|
+
}]
|
|
236
|
+
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.CookieService }] });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQTJCdEYsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkYsTUFBTSxHQUFxQixJQUFJLENBQUM7SUFDdkIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0IsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFrQixjQUFjLENBQUMsQ0FBQztJQUNqRixhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUNiLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUNsQyxnQkFBZ0IsQ0FBTTtJQUN0QixvQkFBb0IsR0FBK0MsRUFBRSxDQUFDO0lBRTlFLFlBQ1UsV0FBd0IsRUFDeEIsYUFBNEI7UUFENUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDbkMsQ0FBQztJQUVKLDhCQUE4QjtJQUM5QixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFV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LENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7d0dBbFFVLGdCQUFnQjs0R0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgc2hhcmUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNvY2tldENvbmZpZyB7XG4gIC8qKiBEb23DrW5pbyBkbyBzZXJ2acOnbyAoZXg6ICdjcm14JykgKi9cbiAgZG9tYWluOiBzdHJpbmc7XG4gIC8qKiBOb21lIGRvIHNlcnZpw6dvIChleDogJ3NjaGVkdWxlJykgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogUHJpbWl0aXZhL2VudGlkYWRlIChleDogJ2FwcG9pbnRtZW50JykgKi9cbiAgcHJpbWl0aXZlOiBzdHJpbmc7XG4gIC8qKiBTZSB0cnVlLCBpbmNsdWkgbyB0b2tlbiBkbyB1c3XDoXJpbyBubyBiaW5kIHBhcmEgcmVjZWJlciBtZW5zYWdlbnMgZXNwZWPDrWZpY2FzIGRvIHVzdcOhcmlvICovXG4gIHVzZXJTY29wZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b21wTWVzc2FnZTxUID0gYW55PiB7XG4gIC8qKiBEZXN0aW5vL3TDs3BpY28gZGEgbWVuc2FnZW0gKi9cbiAgZGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIENvcnBvIGRhIG1lbnNhZ2VtIHBhcnNlYWRvICovXG4gIGJvZHk6IFQ7XG4gIC8qKiBIZWFkZXJzIGRhIG1lbnNhZ2VtIFNUT01QICovXG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbnR5cGUgQ29ubmVjdGlvblN0YXRlID0gJ2Rpc2Nvbm5lY3RlZCcgfCAnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdlcnJvcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHNvY2tldDogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VzJCA9IG5ldyBTdWJqZWN0PFN0b21wTWVzc2FnZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0aW9uU3RhdGU+KCdkaXNjb25uZWN0ZWQnKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25Db3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4UmVjb25uZWN0QXR0ZW1wdHMgPSA1O1xuICBwcml2YXRlIHJlY29ubmVjdFRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBwZW5kaW5nU3Vic2NyaXB0aW9uczogQXJyYXk8eyBkZXN0aW5hdGlvbjogc3RyaW5nOyBpZDogc3RyaW5nIH0+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlXG4gICkge31cblxuICAvKiogRXN0YWRvIGF0dWFsIGRhIGNvbmV4w6NvICovXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxDb25uZWN0aW9uU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uU3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqIENvbmVjdGEgYW8gV2ViU29ja2V0IHVzYW5kbyBhIFVSTCBiYXNlIGRvIGNvb2tpZSAqL1xuICBjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvY2tldCAmJiB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdzVXJsID0gdGhpcy5idWlsZFdlYlNvY2tldFVybCgpO1xuICAgIGlmICghd3NVcmwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXZWJTb2NrZXRTZXJ2aWNlXSBOw6NvIGZvaSBwb3Nzw612ZWwgY29uc3RydWlyIGEgVVJMIGRvIFdlYlNvY2tldC4gQ29va2llIGRlIFVSTCBiYXNlIG7Do28gZW5jb250cmFkby4nKTtcbiAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlJC5uZXh0KCdlcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlJC5uZXh0KCdjb25uZWN0aW5nJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTtcbiAgICAgIHRoaXMuc29ja2V0Lm9ub3BlbiA9ICgpID0+IHRoaXMub25PcGVuKCk7XG4gICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHRoaXMub25NZXNzYWdlKGV2ZW50KTtcbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQpID0+IHRoaXMub25DbG9zZShldmVudCk7XG4gICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKCkgPT4gdGhpcy5vbkVycm9yKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXZWJTb2NrZXRTZXJ2aWNlXSBFcnJvIGFvIGNyaWFyIFdlYlNvY2tldDonLCBlcnJvcik7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICAvKiogRGVzY29uZWN0YSBkbyBXZWJTb2NrZXQgKi9cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUmVjb25uZWN0KCk7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICBpZiAodGhpcy5zb2NrZXQgJiYgdGhpcy5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIC8vIEVudmlhciBESVNDT05ORUNUIFNUT01QXG4gICAgICB0aGlzLnNlbmRGcmFtZSgnRElTQ09OTkVDVCcsIHt9LCAnJyk7XG4gICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdTdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ2Rpc2Nvbm5lY3RlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2NyZXZlLXNlIGVtIHVtIHTDs3BpY28gYmFzZWFkbyBuYSBjb25maWd1cmHDp8Ojby5cbiAgICogUGFkcsOjbyBkbyBiaW5kOiAvdG9waWMve3Rva2VufS97ZG9tYWlufS97c2VydmljZX0ve3ByaW1pdGl2ZX1cbiAgICovXG4gIHN1YnNjcmliZTxUID0gYW55Pihjb25maWc6IFdlYlNvY2tldENvbmZpZyk6IE9ic2VydmFibGU8U3RvbXBNZXNzYWdlPFQ+PiB7XG4gICAgY29uc3QgZGVzdGluYXRpb24gPSB0aGlzLmJ1aWxkRGVzdGluYXRpb24oY29uZmlnKTtcbiAgICBjb25zdCBzdWJJZCA9IGBzdWItJHt0aGlzLnN1YnNjcmlwdGlvbkNvdW50ZXIrK31gO1xuXG4gICAgLy8gU2UgasOhIGNvbmVjdGFkbywgZW52aWEgU1VCU0NSSUJFIGltZWRpYXRhbWVudGVcbiAgICBpZiAodGhpcy5zb2NrZXQgJiYgdGhpcy5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiYgdGhpcy5jb25uZWN0aW9uU3RhdGUkLnZhbHVlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgdGhpcy5zZW5kU3Vic2NyaWJlKGRlc3RpbmF0aW9uLCBzdWJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEd1YXJkYSBwYXJhIGVudmlhciBhcMOzcyBjb25leMOjb1xuICAgICAgdGhpcy5wZW5kaW5nU3Vic2NyaXB0aW9ucy5wdXNoKHsgZGVzdGluYXRpb24sIGlkOiBzdWJJZCB9KTtcbiAgICAgIC8vIEF1dG8tY29uZWN0YSBzZSBuw6NvIGVzdGl2ZXIgY29uZWN0YWRvXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGUkLnZhbHVlID09PSAnZGlzY29ubmVjdGVkJykge1xuICAgICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KHN1YklkLCBkZXN0aW5hdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlcyQucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbiksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBzaGFyZSgpXG4gICAgKSBhcyBPYnNlcnZhYmxlPFN0b21wTWVzc2FnZTxUPj47XG4gIH1cblxuICAvKiogUmVtb3ZlIGEgaW5zY3Jpw6fDo28gZGUgdW0gdMOzcGljbyAqL1xuICB1bnN1YnNjcmliZShjb25maWc6IFdlYlNvY2tldENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5idWlsZERlc3RpbmF0aW9uKGNvbmZpZyk7XG4gICAgY29uc3QgZW50cnkgPSBbLi4udGhpcy5zdWJzY3JpcHRpb25zLmVudHJpZXMoKV0uZmluZCgoWywgZGVzdF0pID0+IGRlc3QgPT09IGRlc3RpbmF0aW9uKTtcblxuICAgIGlmIChlbnRyeSkge1xuICAgICAgY29uc3QgW3N1YklkXSA9IGVudHJ5O1xuICAgICAgaWYgKHRoaXMuc29ja2V0ICYmIHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICAgIHRoaXMuc2VuZEZyYW1lKCdVTlNVQlNDUklCRScsIHsgaWQ6IHN1YklkIH0sICcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3ViSWQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YWRvcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGJ1aWxkV2ViU29ja2V0VXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKCdjb20uc2VuaW9yLmJhc2UudXJsJyk7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ZSBodHRwKHMpIHBhcmEgd3MocylcbiAgICBjb25zdCB3c1VybCA9IGJhc2VVcmxcbiAgICAgIC5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgICAucmVwbGFjZSgvXmh0dHAvLCAnd3MnKTtcblxuICAgIHJldHVybiBgJHt3c1VybH0vd2Vic29ja2V0L3N1YnNjcmlwdGlvbmA7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVzdGluYXRpb24oY29uZmlnOiBXZWJTb2NrZXRDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gWycvdG9waWMnXTtcblxuICAgIGlmIChjb25maWcudXNlclNjb3BlZCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgcGFydHMucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFydHMucHVzaChjb25maWcuZG9tYWluLCBjb25maWcuc2VydmljZSwgY29uZmlnLnByaW1pdGl2ZSk7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJy8nKTtcbiAgfVxuXG4gIHByaXZhdGUgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIC8vIEVudmlhciBDT05ORUNUIFNUT01QXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ2FjY2VwdC12ZXJzaW9uJzogJzEuMicsICdoZWFydC1iZWF0JzogJzEwMDAwLDEwMDAwJyB9O1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3Rva2VufWA7XG4gICAgfVxuICAgIHRoaXMuc2VuZEZyYW1lKCdDT05ORUNUJywgaGVhZGVycywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lc3NhZ2UoZXZlbnQ6IE1lc3NhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5wYXJzZUZyYW1lKGV2ZW50LmRhdGEgYXMgc3RyaW5nKTtcbiAgICBpZiAoIWZyYW1lKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGZyYW1lLmNvbW1hbmQpIHtcbiAgICAgIGNhc2UgJ0NPTk5FQ1RFRCc6XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlJC5uZXh0KCdjb25uZWN0ZWQnKTtcbiAgICAgICAgdGhpcy5yZXN1YnNjcmliZUFsbCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnTUVTU0FHRSc6IHtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBmcmFtZS5oZWFkZXJzWydkZXN0aW5hdGlvbiddIHx8ICcnO1xuICAgICAgICBsZXQgYm9keTogYW55ID0gZnJhbWUuYm9keTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShmcmFtZS5ib2R5KTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIG1hbnTDqW0gY29tbyBzdHJpbmcgKi8gfVxuXG4gICAgICAgIHRoaXMubWVzc2FnZXMkLm5leHQoeyBkZXN0aW5hdGlvbiwgYm9keSwgaGVhZGVyczogZnJhbWUuaGVhZGVycyB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0VSUk9SJzpcbiAgICAgICAgY29uc29sZS5lcnJvcignW1dlYlNvY2tldFNlcnZpY2VdIFNUT01QIEVSUk9SOicsIGZyYW1lLmJvZHkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQ2xvc2UoZXZlbnQ6IENsb3NlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZGlzY29ubmVjdGVkJyk7XG4gICAgaWYgKCFldmVudC53YXNDbGVhbiAmJiB0aGlzLnJlY29ubmVjdEF0dGVtcHRzIDwgdGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0cykge1xuICAgICAgdGhpcy5zY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25FcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZXJyb3InKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZWNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlY29ubmVjdCgpO1xuICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpLCAzMDAwMCk7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuICAgIGNvbnNvbGUubG9nKGBbV2ViU29ja2V0U2VydmljZV0gUmVjb25lY3RhbmRvIGVtICR7ZGVsYXl9bXMgKHRlbnRhdGl2YSAke3RoaXMucmVjb25uZWN0QXR0ZW1wdHN9LyR7dGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0c30pYCk7XG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbm5lY3QoKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KTtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXN1YnNjcmliZUFsbCgpOiB2b2lkIHtcbiAgICAvLyBSZS1pbnNjcmV2ZSBzdWJzY3JpcHRpb25zIGV4aXN0ZW50ZXNcbiAgICBmb3IgKGNvbnN0IFtpZCwgZGVzdGluYXRpb25dIG9mIHRoaXMuc3Vic2NyaXB0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgIHRoaXMuc2VuZFN1YnNjcmliZShkZXN0aW5hdGlvbiwgaWQpO1xuICAgIH1cbiAgICAvLyBFbnZpYSBwZW5kZW50ZXNcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5wZW5kaW5nU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5zZW5kU3Vic2NyaWJlKHBlbmRpbmcuZGVzdGluYXRpb24sIHBlbmRpbmcuaWQpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdTdWJzY3JpcHRpb25zID0gW107XG4gIH1cblxuICBwcml2YXRlIHNlbmRTdWJzY3JpYmUoZGVzdGluYXRpb246IHN0cmluZywgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VuZEZyYW1lKCdTVUJTQ1JJQkUnLCB7IGlkLCBkZXN0aW5hdGlvbiB9LCAnJyk7XG4gIH1cblxuICAvLyDilIDilIAgU1RPTVAgRnJhbWUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHNlbmRGcmFtZShjb21tYW5kOiBzdHJpbmcsIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJvZHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zb2NrZXQgfHwgdGhpcy5zb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHJldHVybjtcblxuICAgIGxldCBmcmFtZSA9IGAke2NvbW1hbmR9XFxuYDtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgICAgZnJhbWUgKz0gYCR7a2V5fToke3ZhbHVlfVxcbmA7XG4gICAgfVxuICAgIGZyYW1lICs9IGBcXG4ke2JvZHl9XFwwYDtcbiAgICB0aGlzLnNvY2tldC5zZW5kKGZyYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VGcmFtZShkYXRhOiBzdHJpbmcpOiB7IGNvbW1hbmQ6IHN0cmluZzsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYm9keTogc3RyaW5nIH0gfCBudWxsIHtcbiAgICAvLyBIZWFydGJlYXRcbiAgICBpZiAoZGF0YSA9PT0gJ1xcbicgfHwgZGF0YSA9PT0gJ1xcclxcbicgfHwgZGF0YS50cmltKCkgPT09ICcnKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGxpbmVzID0gZGF0YS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgY29tbWFuZCA9IGxpbmVzWzBdLnJlcGxhY2UoJ1xccicsICcnKTtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgbGV0IGkgPSAxO1xuXG4gICAgZm9yICg7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldLnJlcGxhY2UoJ1xccicsICcnKTtcbiAgICAgIGlmIChsaW5lID09PSAnJykgYnJlYWs7XG4gICAgICBjb25zdCBjb2xvbkluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgICBpZiAoY29sb25JbmRleCA+IDApIHtcbiAgICAgICAgaGVhZGVyc1tsaW5lLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KV0gPSBsaW5lLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGxpbmVzLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKS5yZXBsYWNlKC9cXDAkLywgJycpO1xuICAgIHJldHVybiB7IGNvbW1hbmQsIGhlYWRlcnMsIGJvZHkgfTtcbiAgfVxufVxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -20,6 +20,7 @@ export { ThemeService } from './lib/services/theme.service';
|
|
|
20
20
|
export { TranslationService } from './lib/services/translation.service';
|
|
21
21
|
export { MaskService } from './lib/services/mask.service';
|
|
22
22
|
export { LocaleService } from './lib/services/locale.service';
|
|
23
|
+
export { WebSocketService } from './lib/services/websocket.service';
|
|
23
24
|
// ============================================================================
|
|
24
25
|
// COMPONENTS
|
|
25
26
|
// ============================================================================
|
|
@@ -105,4 +106,4 @@ export { FieldType, mergeUnique, getTypeInformation, isValidFilter, getProp, set
|
|
|
105
106
|
// export * from './lib/i18n/translation.config';
|
|
106
107
|
// export * from './lib/i18n/locale.config';
|
|
107
108
|
// export * from './lib/i18n/fallback';
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCwrRUFBK0U7QUFDL0UsU0FBUztBQUNULCtFQUErRTtBQUMvRSxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELCtFQUErRTtBQUMvRSxXQUFXO0FBQ1gsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQW9JLE1BQU0sK0JBQStCLENBQUM7QUFDaE0sT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFpSSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JNLE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFrRCxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFxQixNQUFNLHdEQUF3RCxDQUFDO0FBQ2xILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlEQUFpRCxD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cUM7QUFFckMsT0FBTztBQUNQLGlEQUFpRDtBQUNqRCw0Q0FBNEM7QUFDNUMsdUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAc2VuaW9yc2lzdGVtYXMvY29tcG9uZW50cy1haVxuICogXG4gKiBFc3RlIGFycXVpdm8gc2Vyw6EgcG9wdWxhZG8gY29uZm9ybWUgb3MgY29tcG9uZW50ZXMgZm9yZW0gbWlncmFkb3MuXG4gKiBQb3IgZW5xdWFudG8sIGV4cG9ydGEgYXBlbmFzIG8gbcOzZHVsbyBwcmluY2lwYWwuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTU9EVUxFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU0VSVklDRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IEVudGl0eVNlcnZpY2UsIHR5cGUgU29ydE1ldGEsIHR5cGUgTGlzdFBhcmFtcywgdHlwZSBCb2R5UGFyYW1zLCB0eXBlIEVudGl0eUxpc3RSZXNwb25zZSwgdHlwZSBUcmFuc2xhdGlvblNlcnZpY2UgYXMgVHJhbnNsYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuZXhwb3J0IHsgQXV0aFNlcnZpY2UsIHR5cGUgVXNlclRva2VuIH0gZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG5leHBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgdHlwZSBQZXJtaXNzaW9uUmVxdWVzdCwgdHlwZSBQZXJtaXNzaW9uUmVzcG9uc2UsIHR5cGUgQ2hlY2tBY2Nlc3NSZXF1ZXN0LCB0eXBlIENoZWNrQWNjZXNzUmVzcG9uc2UsIHR5cGUgQXV0aFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2VuaW9yVG9rZW5TZXJ2aWNlLCB0eXBlIFNlbmlvclRva2VuRGF0YSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlbmlvci10b2tlbi5zZXJ2aWNlJztcbmV4cG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuZXhwb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlLCB0eXBlIFN1cHBvcnRlZExhbmd1YWdlLCB0eXBlIFRyYW5zbGF0aW9uTG9hZGVyIH0gZnJvbSAnLi9saWIvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5leHBvcnQgeyBNYXNrU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL21hc2suc2VydmljZSc7XG5leHBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT01QT05FTlRTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBFeHBvcnREaWFsb2dDb21wb25lbnQsIHR5cGUgQ29sdW1uT3B0aW9uIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnQtZGlhbG9nL2V4cG9ydC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7IEJ1bGtEZWxldGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2J1bGstZGVsZXRlLWRpYWxvZy9idWxrLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0IHsgTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBJYXNzaXN0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvbG9hZGluZy9pYXNzaXN0LWljb24uY29tcG9uZW50JztcbmV4cG9ydCB7IEVudGl0eUxpc3RCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlL2VudGl0eS1saXN0LWJhc2UuY29tcG9uZW50JztcblxuLy8gRHluYW1pYyBGb3JtXG5leHBvcnQgeyBEeW5hbWljRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vbW9kZWxzL2R5bmFtaWMtZm9ybS5tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vZmllbGRzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTU9ERUxTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgdHlwZSB7IEJhc2VFbnRpdHkgfSBmcm9tICcuL2xpYi9tb2RlbHMvYmFzZS1lbnRpdHkuaW50ZXJmYWNlJztcbmV4cG9ydCB0eXBlIHsgXG4gIFRhYmxlQ29sdW1uLCBcbiAgRm9ybUZpZWxkIGFzIEVudGl0eUZvcm1GaWVsZCwgXG4gIEZpbHRlckZpZWxkLCBcbiAgRXhwb3J0RmllbGQsIFxuICBFbnRpdHlDb25maWcgXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgdHlwZSB7IFxuICBDb2x1bW5Db25maWcsIFxuICBMb29rdXBDb2x1bW4sIFxuICBGaWx0ZXJGaWVsZFNpemUsIFxuICBGaWx0ZXJTZWN0aW9uLCBcbiAgRmlsdGVyQ29uZmlnLCBcbiAgRm9ybUZpZWxkQ29uZmlnIGFzIEVudGl0eUZvcm1GaWVsZENvbmZpZywgXG4gIEVudGl0eUxpc3RDb25maWcgXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktbGlzdC5jb25maWcnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IFRSQU5TTEFUSU9OX0NPTkZJRywgU1VQUE9SVEVEX0xBTkdVQUdFUywgREVGQVVMVF9MQU5HVUFHRSwgbWFwVG9rZW5Mb2NhbGVUb0xhbmd1YWdlLCBnZXRMYW5ndWFnZUluZm8sIHR5cGUgTGFuZ3VhZ2VDb25maWcgfSBmcm9tICcuL2xpYi9jb25maWcvdHJhbnNsYXRpb24uY29uZmlnJztcbmV4cG9ydCB7IHByb3ZpZGVTZW5pb3JQcmltZU5HLCBTZW5pb3JQcmVzZXQsIHR5cGUgU2VuaW9yUHJpbWVOR0NvbmZpZyB9IGZyb20gJy4vbGliL2NvbmZpZy9wcmltZW5nLmNvbmZpZyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOVEVSQ0VQVE9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHsgYXBpSW50ZXJjZXB0b3IgfSBmcm9tICcuL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTk9UQTogT3MgZXhwb3J0cyBhYmFpeG8gc2Vyw6NvIGRlc2NvbWVudGFkb3MgY29uZm9ybWUgb3MgYXJxdWl2b3MgZm9yZW0gbWlncmFkb3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ09NUE9ORU5UUyAtIEJBU0Vcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktbGlzdC1iYXNlL2VudGl0eS1saXN0LWJhc2UuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktZm9ybS1iYXNlL2VudGl0eS1mb3JtLWJhc2UuY29tcG9uZW50JztcblxuLy8gQ09NUE9ORU5UUyAtIEZPUk1TXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL2VudGl0eS1mb3JtLWZpZWxkcy9lbnRpdHktZm9ybS1maWVsZHMuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybXMvZW50aXR5LWZvcm0tZGlhbG9nL2VudGl0eS1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9lbnRpdHktZm9ybS1kcmF3ZXIvZW50aXR5LWZvcm0tZHJhd2VyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL3N1Yi1yZXNvdXJjZS1mb3JtLWRpYWxvZy9zdWItcmVzb3VyY2UtZm9ybS1kaWFsb2cuY29tcG9uZW50JztcblxuLy8gQ09NUE9ORU5UUyAtIExJU1RTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xpc3RzL2Zvcm0tZmlsdGVyL2Zvcm0tZmlsdGVyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xpc3RzL2V4cG9ydC1kaWFsb2cvZXhwb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9idWxrLWRlbGV0ZS1kaWFsb2cvYnVsay1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBVSVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvZWRpdC1pbmxpbmUvZWRpdC1pbmxpbmUuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvbG9va3VwLWZpZWxkL2xvb2t1cC1maWVsZC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS9rYW5iYW4tYm9hcmQva2FuYmFuLWJvYXJkLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL3RoZW1lLXRvZ2dsZS90aGVtZS10b2dnbGUuY29tcG9uZW50JztcblxuLy8gU0VSVklDRVNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Nvb2tpZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlbmlvci10b2tlbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21hc2suc2VydmljZSc7XG5cbi8vIERJUkVDVElWRVNcbmV4cG9ydCB7IFBvc3RhbENvZGVNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9wb3N0YWwtY29kZS1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBEb2N1bWVudE1hc2tEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2RvY3VtZW50LW1hc2suZGlyZWN0aXZlJztcbmV4cG9ydCB7IFBob25lTWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcGhvbmUtbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgTW9uZXlNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9tb25leS1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBUYWJsZUxvYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3RhYmxlLWxvYWRpbmcvdGFibGUtbG9hZGluZy5kaXJlY3RpdmUnO1xuXG4vLyBQSVBFU1xuZXhwb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmV4cG9ydCB7IENwZlBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jcGYucGlwZSc7XG5leHBvcnQgeyBDbnBqUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2NucGoucGlwZSc7XG5leHBvcnQgeyBEb2N1bWVudFBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9kb2N1bWVudC5waXBlJztcbmV4cG9ydCB7IFBob25lUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL3Bob25lLnBpcGUnO1xuZXhwb3J0IHsgUG9zdGFsQ29kZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9wb3N0YWwtY29kZS5waXBlJztcbmV4cG9ydCB7IE1vbmV5UGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL21vbmV5LnBpcGUnO1xuZXhwb3J0IHsgRGF0ZUZvcm1hdFBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9kYXRlLWZvcm1hdC5waXBlJztcblxuLy8gVVRJTFNcbmV4cG9ydCB7IFRyYW5zbGF0aW9uSGVscGVyIH0gZnJvbSAnLi9saWIvdXRpbHMvdHJhbnNsYXRpb24uaGVscGVyJztcbmV4cG9ydCB7IFxuICBGaWVsZFR5cGUsXG4gIHR5cGUgRm9ybUZpZWxkIGFzIFV0aWxzRm9ybUZpZWxkLFxuICB0eXBlIE9wdGlvbixcbiAgdHlwZSBGaWx0ZXJUb2tlbixcbiAgbWVyZ2VVbmlxdWUsXG4gIGdldFR5cGVJbmZvcm1hdGlvbixcbiAgaXNWYWxpZEZpbHRlcixcbiAgZ2V0UHJvcCxcbiAgc2V0UHJvcCxcbiAgZ2V0TGFiZWxWYWx1ZVJlcXVlc3QsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgZ2V0RW51bVF1ZXJ5LFxuICBlc2NhcGVGaWx0ZXJWYWx1ZSxcbiAgY3JlYXRlRmlsdGVyU3RyaW5nLFxuICBjcmVhdGVGaWx0ZXJUb2tlbnMsXG4gIHJlc29sdmVSZWZzLFxuICBkZWVwQ2xvbmUsXG4gIGRlZXBFcXVhbCxcbiAgZGVib3VuY2UsXG4gIHRocm90dGxlXG59IGZyb20gJy4vbGliL3V0aWxzL3V0aWxzJztcblxuLy8gSU5URVJDRVBUT1JTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yJztcblxuLy8gTU9ERUxTIC0gSU5URVJGQUNFU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ludGVyZmFjZXMvYmFzZS1lbnRpdHkuaW50ZXJmYWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2VudGl0eS1jb25maWcuaW50ZXJmYWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2VudGl0eS1saXN0LmNvbmZpZyc7XG5cbi8vIE1PREVMUyAtIEVOVU1TXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZW51bXMvc3RhdHVzLmVudW0nO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudW1zL3R5cGUtcGVyc29uLmVudW0nO1xuXG4vLyBVVElMU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvdXRpbHMnO1xuXG4vLyBJMThOXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pMThuL3RyYW5zbGF0aW9uLmNvbmZpZyc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pMThuL2xvY2FsZS5jb25maWcnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi9mYWxsYmFjayc7XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCwrRUFBK0U7QUFDL0UsU0FBUztBQUNULCtFQUErRTtBQUMvRSxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELCtFQUErRTtBQUMvRSxXQUFXO0FBQ1gsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQW9JLE1BQU0sK0JBQStCLENBQUM7QUFDaE0sT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFpSSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JNLE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFrRCxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUEyQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdHLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBcUIsTUFBTSx3REFBd0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMs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QUFDakIsa0RBQWtEO0FBQ2xELHVEQUF1RDtBQUV2RCxRQUFRO0FBQ1IscUNBQXFDO0FBRXJDLE9BQU87QUFDUCxpREFBaUQ7QUFDakQsNENBQTRDO0FBQzVDLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQHNlbmlvcnNpc3RlbWFzL2NvbXBvbmVudHMtYWlcbiAqIFxuICogRXN0ZSBhcnF1aXZvIHNlcsOhIHBvcHVsYWRvIGNvbmZvcm1lIG9zIGNvbXBvbmVudGVzIGZvcmVtIG1pZ3JhZG9zLlxuICogUG9yIGVucXVhbnRvLCBleHBvcnRhIGFwZW5hcyBvIG3Ds2R1bG8gcHJpbmNpcGFsLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1PRFVMRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0ICogZnJvbSAnLi9saWIvYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNFUlZJQ0VTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBFbnRpdHlTZXJ2aWNlLCB0eXBlIFNvcnRNZXRhLCB0eXBlIExpc3RQYXJhbXMsIHR5cGUgQm9keVBhcmFtcywgdHlwZSBFbnRpdHlMaXN0UmVzcG9uc2UsIHR5cGUgVHJhbnNsYXRpb25TZXJ2aWNlIGFzIFRyYW5zbGF0aW9uU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhTZXJ2aWNlLCB0eXBlIFVzZXJUb2tlbiB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5leHBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY29va2llLnNlcnZpY2UnO1xuZXhwb3J0IHsgUGVybWlzc2lvblNlcnZpY2UsIHR5cGUgUGVybWlzc2lvblJlcXVlc3QsIHR5cGUgUGVybWlzc2lvblJlc3BvbnNlLCB0eXBlIENoZWNrQWNjZXNzUmVxdWVzdCwgdHlwZSBDaGVja0FjY2Vzc1Jlc3BvbnNlLCB0eXBlIEF1dGhTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCB7IFNlbmlvclRva2VuU2VydmljZSwgdHlwZSBTZW5pb3JUb2tlbkRhdGEgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG5leHBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSwgdHlwZSBTdXBwb3J0ZWRMYW5ndWFnZSwgdHlwZSBUcmFuc2xhdGlvbkxvYWRlciB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgTWFza1NlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuZXhwb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFdlYlNvY2tldFNlcnZpY2UsIHR5cGUgV2ViU29ja2V0Q29uZmlnLCB0eXBlIFN0b21wTWVzc2FnZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3dlYnNvY2tldC5zZXJ2aWNlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09NUE9ORU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHsgRXhwb3J0RGlhbG9nQ29tcG9uZW50LCB0eXBlIENvbHVtbk9wdGlvbiB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0LWRpYWxvZy9leHBvcnQtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBCdWxrRGVsZXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9idWxrLWRlbGV0ZS1kaWFsb2cvYnVsay1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50JztcbmV4cG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xuZXhwb3J0IHsgSWFzc2lzdEljb25Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xvYWRpbmcvaWFzc2lzdC1pY29uLmNvbXBvbmVudCc7XG5leHBvcnQgeyBFbnRpdHlMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5cbi8vIER5bmFtaWMgRm9ybVxuZXhwb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL21vZGVscy9keW5hbWljLWZvcm0ubW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1PREVMU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHR5cGUgeyBCYXNlRW50aXR5IH0gZnJvbSAnLi9saWIvbW9kZWxzL2Jhc2UtZW50aXR5LmludGVyZmFjZSc7XG5leHBvcnQgdHlwZSB7IFxuICBUYWJsZUNvbHVtbiwgXG4gIEZvcm1GaWVsZCBhcyBFbnRpdHlGb3JtRmllbGQsIFxuICBGaWx0ZXJGaWVsZCwgXG4gIEV4cG9ydEZpZWxkLCBcbiAgRW50aXR5Q29uZmlnIFxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWNvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0IHR5cGUgeyBcbiAgQ29sdW1uQ29uZmlnLCBcbiAgTG9va3VwQ29sdW1uLCBcbiAgRmlsdGVyRmllbGRTaXplLCBcbiAgRmlsdGVyU2VjdGlvbiwgXG4gIEZpbHRlckNvbmZpZywgXG4gIEZvcm1GaWVsZENvbmZpZyBhcyBFbnRpdHlGb3JtRmllbGRDb25maWcsIFxuICBFbnRpdHlMaXN0Q29uZmlnIFxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWxpc3QuY29uZmlnJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09ORklHXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBUUkFOU0xBVElPTl9DT05GSUcsIFNVUFBPUlRFRF9MQU5HVUFHRVMsIERFRkFVTFRfTEFOR1VBR0UsIG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSwgZ2V0TGFuZ3VhZ2VJbmZvLCB0eXBlIExhbmd1YWdlQ29uZmlnIH0gZnJvbSAnLi9saWIvY29uZmlnL3RyYW5zbGF0aW9uLmNvbmZpZyc7XG5leHBvcnQgeyBwcm92aWRlU2VuaW9yUHJpbWVORywgU2VuaW9yUHJlc2V0LCB0eXBlIFNlbmlvclByaW1lTkdDb25maWcgfSBmcm9tICcuL2xpYi9jb25maWcvcHJpbWVuZy5jb25maWcnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTlRFUkNFUFRPUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IGFwaUludGVyY2VwdG9yIH0gZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzL2FwaS5pbnRlcmNlcHRvcic7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5PVEE6IE9zIGV4cG9ydHMgYWJhaXhvIHNlcsOjbyBkZXNjb21lbnRhZG9zIGNvbmZvcm1lIG9zIGFycXVpdm9zIGZvcmVtIG1pZ3JhZG9zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIENPTVBPTkVOVFMgLSBCQVNFXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvZW50aXR5LWxpc3QtYmFzZS9lbnRpdHktbGlzdC1iYXNlLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvZW50aXR5LWZvcm0tYmFzZS9lbnRpdHktZm9ybS1iYXNlLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBGT1JNU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9lbnRpdHktZm9ybS1maWVsZHMvZW50aXR5LWZvcm0tZmllbGRzLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL2VudGl0eS1mb3JtLWRpYWxvZy9lbnRpdHktZm9ybS1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybXMvZW50aXR5LWZvcm0tZHJhd2VyL2VudGl0eS1mb3JtLWRyYXdlci5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9zdWItcmVzb3VyY2UtZm9ybS1kaWFsb2cvc3ViLXJlc291cmNlLWZvcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBMSVNUU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9mb3JtLWZpbHRlci9mb3JtLWZpbHRlci5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9leHBvcnQtZGlhbG9nL2V4cG9ydC1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGlzdHMvYnVsay1kZWxldGUtZGlhbG9nL2J1bGstZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xuXG4vLyBDT01QT05FTlRTIC0gVUlcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL2VkaXQtaW5saW5lL2VkaXQtaW5saW5lLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL2xvb2t1cC1maWVsZC9sb29rdXAtZmllbGQuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkva2FuYmFuLWJvYXJkL2thbmJhbi1ib2FyZC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS90aGVtZS10b2dnbGUvdGhlbWUtdG9nZ2xlLmNvbXBvbmVudCc7XG5cbi8vIFNFUlZJQ0VTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuXG4vLyBESVJFQ1RJVkVTXG5leHBvcnQgeyBQb3N0YWxDb2RlTWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcG9zdGFsLWNvZGUtbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgRG9jdW1lbnRNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9kb2N1bWVudC1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBQaG9uZU1hc2tEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3Bob25lLW1hc2suZGlyZWN0aXZlJztcbmV4cG9ydCB7IE1vbmV5TWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvbW9uZXktbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgVGFibGVMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlJztcblxuLy8gUElQRVNcbmV4cG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5leHBvcnQgeyBDcGZQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY3BmLnBpcGUnO1xuZXhwb3J0IHsgQ25walBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jbnBqLnBpcGUnO1xuZXhwb3J0IHsgRG9jdW1lbnRQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvZG9jdW1lbnQucGlwZSc7XG5leHBvcnQgeyBQaG9uZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9waG9uZS5waXBlJztcbmV4cG9ydCB7IFBvc3RhbENvZGVQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvcG9zdGFsLWNvZGUucGlwZSc7XG5leHBvcnQgeyBNb25leVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9tb25leS5waXBlJztcbmV4cG9ydCB7IERhdGVGb3JtYXRQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5cbi8vIFVUSUxTXG5leHBvcnQgeyBUcmFuc2xhdGlvbkhlbHBlciB9IGZyb20gJy4vbGliL3V0aWxzL3RyYW5zbGF0aW9uLmhlbHBlcic7XG5leHBvcnQgeyBcbiAgRmllbGRUeXBlLFxuICB0eXBlIEZvcm1GaWVsZCBhcyBVdGlsc0Zvcm1GaWVsZCxcbiAgdHlwZSBPcHRpb24sXG4gIHR5cGUgRmlsdGVyVG9rZW4sXG4gIG1lcmdlVW5pcXVlLFxuICBnZXRUeXBlSW5mb3JtYXRpb24sXG4gIGlzVmFsaWRGaWx0ZXIsXG4gIGdldFByb3AsXG4gIHNldFByb3AsXG4gIGdldExhYmVsVmFsdWVSZXF1ZXN0LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGdldEVudW1RdWVyeSxcbiAgZXNjYXBlRmlsdGVyVmFsdWUsXG4gIGNyZWF0ZUZpbHRlclN0cmluZyxcbiAgY3JlYXRlRmlsdGVyVG9rZW5zLFxuICByZXNvbHZlUmVmcyxcbiAgZGVlcENsb25lLFxuICBkZWVwRXF1YWwsXG4gIGRlYm91bmNlLFxuICB0aHJvdHRsZVxufSBmcm9tICcuL2xpYi91dGlscy91dGlscyc7XG5cbi8vIElOVEVSQ0VQVE9SU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzL2FwaS5pbnRlcmNlcHRvcic7XG5cbi8vIE1PREVMUyAtIElOVEVSRkFDRVNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2Jhc2UtZW50aXR5LmludGVyZmFjZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW50ZXJmYWNlcy9lbnRpdHktY29uZmlnLmludGVyZmFjZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW50ZXJmYWNlcy9lbnRpdHktbGlzdC5jb25maWcnO1xuXG4vLyBNT0RFTFMgLSBFTlVNU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudW1zL3N0YXR1cy5lbnVtJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9lbnVtcy90eXBlLXBlcnNvbi5lbnVtJztcblxuLy8gVVRJTFNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3V0aWxzJztcblxuLy8gSTE4TlxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi90cmFuc2xhdGlvbi5jb25maWcnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi9sb2NhbGUuY29uZmlnJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2kxOG4vZmFsbGJhY2snO1xuIl19
|
|
@@ -4,8 +4,8 @@ import * as i2 from '@angular/common';
|
|
|
4
4
|
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpParams } from '@angular/common/http';
|
|
7
|
-
import { throwError, BehaviorSubject, of, from, concatMap, catchError as catchError$1 } from 'rxjs';
|
|
8
|
-
import { map, catchError, filter } from 'rxjs/operators';
|
|
7
|
+
import { throwError, BehaviorSubject, of, Subject, filter, takeUntil, share, from, concatMap, catchError as catchError$1 } from 'rxjs';
|
|
8
|
+
import { map, catchError, filter as filter$1 } from 'rxjs/operators';
|
|
9
9
|
import * as i1$1 from 'primeng/config';
|
|
10
10
|
import { providePrimeNG } from 'primeng/config';
|
|
11
11
|
import * as i2$1 from '@angular/forms';
|
|
@@ -1963,6 +1963,238 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1963
1963
|
}]
|
|
1964
1964
|
}], ctorParameters: () => [{ type: i1$1.PrimeNG }, { type: TranslationService }] });
|
|
1965
1965
|
|
|
1966
|
+
class WebSocketService {
|
|
1967
|
+
authService;
|
|
1968
|
+
cookieService;
|
|
1969
|
+
socket = null;
|
|
1970
|
+
destroy$ = new Subject();
|
|
1971
|
+
messages$ = new Subject();
|
|
1972
|
+
connectionState$ = new BehaviorSubject('disconnected');
|
|
1973
|
+
subscriptions = new Map();
|
|
1974
|
+
subscriptionCounter = 0;
|
|
1975
|
+
reconnectAttempts = 0;
|
|
1976
|
+
maxReconnectAttempts = 5;
|
|
1977
|
+
reconnectTimeout;
|
|
1978
|
+
pendingSubscriptions = [];
|
|
1979
|
+
constructor(authService, cookieService) {
|
|
1980
|
+
this.authService = authService;
|
|
1981
|
+
this.cookieService = cookieService;
|
|
1982
|
+
}
|
|
1983
|
+
/** Estado atual da conexão */
|
|
1984
|
+
get state$() {
|
|
1985
|
+
return this.connectionState$.asObservable();
|
|
1986
|
+
}
|
|
1987
|
+
/** Conecta ao WebSocket usando a URL base do cookie */
|
|
1988
|
+
connect() {
|
|
1989
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
1990
|
+
return;
|
|
1991
|
+
}
|
|
1992
|
+
const wsUrl = this.buildWebSocketUrl();
|
|
1993
|
+
if (!wsUrl) {
|
|
1994
|
+
console.error('[WebSocketService] Não foi possível construir a URL do WebSocket. Cookie de URL base não encontrado.');
|
|
1995
|
+
this.connectionState$.next('error');
|
|
1996
|
+
return;
|
|
1997
|
+
}
|
|
1998
|
+
this.connectionState$.next('connecting');
|
|
1999
|
+
try {
|
|
2000
|
+
this.socket = new WebSocket(wsUrl);
|
|
2001
|
+
this.socket.onopen = () => this.onOpen();
|
|
2002
|
+
this.socket.onmessage = (event) => this.onMessage(event);
|
|
2003
|
+
this.socket.onclose = (event) => this.onClose(event);
|
|
2004
|
+
this.socket.onerror = () => this.onError();
|
|
2005
|
+
}
|
|
2006
|
+
catch (error) {
|
|
2007
|
+
console.error('[WebSocketService] Erro ao criar WebSocket:', error);
|
|
2008
|
+
this.connectionState$.next('error');
|
|
2009
|
+
}
|
|
2010
|
+
}
|
|
2011
|
+
/** Desconecta do WebSocket */
|
|
2012
|
+
disconnect() {
|
|
2013
|
+
this.clearReconnect();
|
|
2014
|
+
this.reconnectAttempts = 0;
|
|
2015
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
2016
|
+
// Enviar DISCONNECT STOMP
|
|
2017
|
+
this.sendFrame('DISCONNECT', {}, '');
|
|
2018
|
+
this.socket.close();
|
|
2019
|
+
}
|
|
2020
|
+
this.socket = null;
|
|
2021
|
+
this.subscriptions.clear();
|
|
2022
|
+
this.pendingSubscriptions = [];
|
|
2023
|
+
this.connectionState$.next('disconnected');
|
|
2024
|
+
}
|
|
2025
|
+
/**
|
|
2026
|
+
* Inscreve-se em um tópico baseado na configuração.
|
|
2027
|
+
* Padrão do bind: /topic/{token}/{domain}/{service}/{primitive}
|
|
2028
|
+
*/
|
|
2029
|
+
subscribe(config) {
|
|
2030
|
+
const destination = this.buildDestination(config);
|
|
2031
|
+
const subId = `sub-${this.subscriptionCounter++}`;
|
|
2032
|
+
// Se já conectado, envia SUBSCRIBE imediatamente
|
|
2033
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN && this.connectionState$.value === 'connected') {
|
|
2034
|
+
this.sendSubscribe(destination, subId);
|
|
2035
|
+
}
|
|
2036
|
+
else {
|
|
2037
|
+
// Guarda para enviar após conexão
|
|
2038
|
+
this.pendingSubscriptions.push({ destination, id: subId });
|
|
2039
|
+
// Auto-conecta se não estiver conectado
|
|
2040
|
+
if (this.connectionState$.value === 'disconnected') {
|
|
2041
|
+
this.connect();
|
|
2042
|
+
}
|
|
2043
|
+
}
|
|
2044
|
+
this.subscriptions.set(subId, destination);
|
|
2045
|
+
return this.messages$.pipe(filter(msg => msg.destination === destination), takeUntil(this.destroy$), share());
|
|
2046
|
+
}
|
|
2047
|
+
/** Remove a inscrição de um tópico */
|
|
2048
|
+
unsubscribe(config) {
|
|
2049
|
+
const destination = this.buildDestination(config);
|
|
2050
|
+
const entry = [...this.subscriptions.entries()].find(([, dest]) => dest === destination);
|
|
2051
|
+
if (entry) {
|
|
2052
|
+
const [subId] = entry;
|
|
2053
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
2054
|
+
this.sendFrame('UNSUBSCRIBE', { id: subId }, '');
|
|
2055
|
+
}
|
|
2056
|
+
this.subscriptions.delete(subId);
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
ngOnDestroy() {
|
|
2060
|
+
this.disconnect();
|
|
2061
|
+
this.destroy$.next();
|
|
2062
|
+
this.destroy$.complete();
|
|
2063
|
+
}
|
|
2064
|
+
// ── Privados ──────────────────────────────────────────────
|
|
2065
|
+
buildWebSocketUrl() {
|
|
2066
|
+
const baseUrl = this.cookieService.getCookie('com.senior.base.url');
|
|
2067
|
+
if (!baseUrl) {
|
|
2068
|
+
return null;
|
|
2069
|
+
}
|
|
2070
|
+
// Converte http(s) para ws(s)
|
|
2071
|
+
const wsUrl = baseUrl
|
|
2072
|
+
.replace(/\/$/, '')
|
|
2073
|
+
.replace(/^http/, 'ws');
|
|
2074
|
+
return `${wsUrl}/websocket/subscription`;
|
|
2075
|
+
}
|
|
2076
|
+
buildDestination(config) {
|
|
2077
|
+
const parts = ['/topic'];
|
|
2078
|
+
if (config.userScoped) {
|
|
2079
|
+
const token = this.authService.getAccessToken();
|
|
2080
|
+
if (token) {
|
|
2081
|
+
parts.push(token);
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
parts.push(config.domain, config.service, config.primitive);
|
|
2085
|
+
return parts.join('/');
|
|
2086
|
+
}
|
|
2087
|
+
onOpen() {
|
|
2088
|
+
this.reconnectAttempts = 0;
|
|
2089
|
+
// Enviar CONNECT STOMP
|
|
2090
|
+
const headers = { 'accept-version': '1.2', 'heart-beat': '10000,10000' };
|
|
2091
|
+
const token = this.authService.getAccessToken();
|
|
2092
|
+
if (token) {
|
|
2093
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
2094
|
+
}
|
|
2095
|
+
this.sendFrame('CONNECT', headers, '');
|
|
2096
|
+
}
|
|
2097
|
+
onMessage(event) {
|
|
2098
|
+
const frame = this.parseFrame(event.data);
|
|
2099
|
+
if (!frame)
|
|
2100
|
+
return;
|
|
2101
|
+
switch (frame.command) {
|
|
2102
|
+
case 'CONNECTED':
|
|
2103
|
+
this.connectionState$.next('connected');
|
|
2104
|
+
this.resubscribeAll();
|
|
2105
|
+
break;
|
|
2106
|
+
case 'MESSAGE': {
|
|
2107
|
+
const destination = frame.headers['destination'] || '';
|
|
2108
|
+
let body = frame.body;
|
|
2109
|
+
try {
|
|
2110
|
+
body = JSON.parse(frame.body);
|
|
2111
|
+
}
|
|
2112
|
+
catch { /* mantém como string */ }
|
|
2113
|
+
this.messages$.next({ destination, body, headers: frame.headers });
|
|
2114
|
+
break;
|
|
2115
|
+
}
|
|
2116
|
+
case 'ERROR':
|
|
2117
|
+
console.error('[WebSocketService] STOMP ERROR:', frame.body);
|
|
2118
|
+
break;
|
|
2119
|
+
}
|
|
2120
|
+
}
|
|
2121
|
+
onClose(event) {
|
|
2122
|
+
this.connectionState$.next('disconnected');
|
|
2123
|
+
if (!event.wasClean && this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
2124
|
+
this.scheduleReconnect();
|
|
2125
|
+
}
|
|
2126
|
+
}
|
|
2127
|
+
onError() {
|
|
2128
|
+
this.connectionState$.next('error');
|
|
2129
|
+
}
|
|
2130
|
+
scheduleReconnect() {
|
|
2131
|
+
this.clearReconnect();
|
|
2132
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
2133
|
+
this.reconnectAttempts++;
|
|
2134
|
+
console.log(`[WebSocketService] Reconectando em ${delay}ms (tentativa ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
2135
|
+
this.reconnectTimeout = setTimeout(() => this.connect(), delay);
|
|
2136
|
+
}
|
|
2137
|
+
clearReconnect() {
|
|
2138
|
+
if (this.reconnectTimeout) {
|
|
2139
|
+
clearTimeout(this.reconnectTimeout);
|
|
2140
|
+
this.reconnectTimeout = null;
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
resubscribeAll() {
|
|
2144
|
+
// Re-inscreve subscriptions existentes
|
|
2145
|
+
for (const [id, destination] of this.subscriptions.entries()) {
|
|
2146
|
+
this.sendSubscribe(destination, id);
|
|
2147
|
+
}
|
|
2148
|
+
// Envia pendentes
|
|
2149
|
+
for (const pending of this.pendingSubscriptions) {
|
|
2150
|
+
this.sendSubscribe(pending.destination, pending.id);
|
|
2151
|
+
}
|
|
2152
|
+
this.pendingSubscriptions = [];
|
|
2153
|
+
}
|
|
2154
|
+
sendSubscribe(destination, id) {
|
|
2155
|
+
this.sendFrame('SUBSCRIBE', { id, destination }, '');
|
|
2156
|
+
}
|
|
2157
|
+
// ── STOMP Frame helpers ───────────────────────────────────
|
|
2158
|
+
sendFrame(command, headers, body) {
|
|
2159
|
+
if (!this.socket || this.socket.readyState !== WebSocket.OPEN)
|
|
2160
|
+
return;
|
|
2161
|
+
let frame = `${command}\n`;
|
|
2162
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
2163
|
+
frame += `${key}:${value}\n`;
|
|
2164
|
+
}
|
|
2165
|
+
frame += `\n${body}\0`;
|
|
2166
|
+
this.socket.send(frame);
|
|
2167
|
+
}
|
|
2168
|
+
parseFrame(data) {
|
|
2169
|
+
// Heartbeat
|
|
2170
|
+
if (data === '\n' || data === '\r\n' || data.trim() === '')
|
|
2171
|
+
return null;
|
|
2172
|
+
const lines = data.split('\n');
|
|
2173
|
+
const command = lines[0].replace('\r', '');
|
|
2174
|
+
const headers = {};
|
|
2175
|
+
let i = 1;
|
|
2176
|
+
for (; i < lines.length; i++) {
|
|
2177
|
+
const line = lines[i].replace('\r', '');
|
|
2178
|
+
if (line === '')
|
|
2179
|
+
break;
|
|
2180
|
+
const colonIndex = line.indexOf(':');
|
|
2181
|
+
if (colonIndex > 0) {
|
|
2182
|
+
headers[line.substring(0, colonIndex)] = line.substring(colonIndex + 1);
|
|
2183
|
+
}
|
|
2184
|
+
}
|
|
2185
|
+
const body = lines.slice(i + 1).join('\n').replace(/\0$/, '');
|
|
2186
|
+
return { command, headers, body };
|
|
2187
|
+
}
|
|
2188
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, deps: [{ token: AuthService }, { token: CookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2189
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, providedIn: 'root' });
|
|
2190
|
+
}
|
|
2191
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, decorators: [{
|
|
2192
|
+
type: Injectable,
|
|
2193
|
+
args: [{
|
|
2194
|
+
providedIn: 'root'
|
|
2195
|
+
}]
|
|
2196
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: CookieService }] });
|
|
2197
|
+
|
|
1966
2198
|
class TranslatePipe {
|
|
1967
2199
|
translationService;
|
|
1968
2200
|
cdr;
|
|
@@ -2387,7 +2619,7 @@ class BreadcrumbComponent {
|
|
|
2387
2619
|
this.buildBreadcrumbs();
|
|
2388
2620
|
// Atualiza breadcrumbs quando a navegação muda
|
|
2389
2621
|
this.router.events
|
|
2390
|
-
.pipe(filter(event => event instanceof NavigationEnd))
|
|
2622
|
+
.pipe(filter$1(event => event instanceof NavigationEnd))
|
|
2391
2623
|
.subscribe(() => this.buildBreadcrumbs());
|
|
2392
2624
|
}
|
|
2393
2625
|
updateHomeItem() {
|
|
@@ -6680,5 +6912,5 @@ const throttle = (func, limit) => {
|
|
|
6680
6912
|
* Generated bundle index. Do not edit.
|
|
6681
6913
|
*/
|
|
6682
6914
|
|
|
6683
|
-
export { AngularComponentsModule, AuthService, BreadcrumbComponent, BulkDeleteDialogComponent, CnpjPipe, CookieService, CpfPipe, DEFAULT_LANGUAGE, DateFormatPipe, DocumentMaskDirective, DocumentPipe, DynamicFieldCheckboxComponent, DynamicFieldDateComponent, DynamicFieldDropdownComponent, DynamicFieldImageComponent, DynamicFieldLookupComponent, DynamicFieldMultiselectComponent, DynamicFieldNumberComponent, DynamicFieldTextComponent, DynamicFieldTextareaComponent, DynamicFieldTimeComponent, DynamicFieldWrapperComponent, DynamicFormComponent, EntityListBaseComponent, EntityService, ExportDialogComponent, FieldType, IassistIconComponent, LoadingComponent, LocaleService, MaskService, MoneyMaskDirective, MoneyPipe, PermissionService, PhoneMaskDirective, PhonePipe, PostalCodeMaskDirective, PostalCodePipe, SUPPORTED_LANGUAGES, SeniorPreset, SeniorTokenService, TRANSLATION_CONFIG, TableLoadingDirective, ThemeService, TranslatePipe, TranslationHelper, TranslationService, apiInterceptor, createFilterString, createFilterTokens, debounce, deepClone, deepEqual, escapeFilterValue, getEnumQuery, getLabelValueRequest, getLanguageInfo, getProp, getSuggestionValue, getTypeInformation, isValidFilter, mapTokenLocaleToLanguage, mergeUnique, provideSeniorPrimeNG, resolveRefs, setProp, throttle };
|
|
6915
|
+
export { AngularComponentsModule, AuthService, BreadcrumbComponent, BulkDeleteDialogComponent, CnpjPipe, CookieService, CpfPipe, DEFAULT_LANGUAGE, DateFormatPipe, DocumentMaskDirective, DocumentPipe, DynamicFieldCheckboxComponent, DynamicFieldDateComponent, DynamicFieldDropdownComponent, DynamicFieldImageComponent, DynamicFieldLookupComponent, DynamicFieldMultiselectComponent, DynamicFieldNumberComponent, DynamicFieldTextComponent, DynamicFieldTextareaComponent, DynamicFieldTimeComponent, DynamicFieldWrapperComponent, DynamicFormComponent, EntityListBaseComponent, EntityService, ExportDialogComponent, FieldType, IassistIconComponent, LoadingComponent, LocaleService, MaskService, MoneyMaskDirective, MoneyPipe, PermissionService, PhoneMaskDirective, PhonePipe, PostalCodeMaskDirective, PostalCodePipe, SUPPORTED_LANGUAGES, SeniorPreset, SeniorTokenService, TRANSLATION_CONFIG, TableLoadingDirective, ThemeService, TranslatePipe, TranslationHelper, TranslationService, WebSocketService, apiInterceptor, createFilterString, createFilterTokens, debounce, deepClone, deepEqual, escapeFilterValue, getEnumQuery, getLabelValueRequest, getLanguageInfo, getProp, getSuggestionValue, getTypeInformation, isValidFilter, mapTokenLocaleToLanguage, mergeUnique, provideSeniorPrimeNG, resolveRefs, setProp, throttle };
|
|
6684
6916
|
//# sourceMappingURL=seniorsistemas-components-ai.mjs.map
|