@senior-gestao-empresarial/angular-components 8.0.1 → 8.0.2
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.
|
@@ -2,11 +2,19 @@ import { Injectable, inject } from '@angular/core';
|
|
|
2
2
|
import { filter, finalize, map, switchMap, take } from 'rxjs/operators';
|
|
3
3
|
import { Client, FrameImpl, } from '@stomp/stompjs';
|
|
4
4
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
-
|
|
5
|
+
// O entry point padrão do `sockjs-client` (`lib/entry.js`) é código-fonte
|
|
6
|
+
// browserify que lê o `global` do Node no momento em que o módulo é avaliado.
|
|
7
|
+
// O bundler do Angular não injeta mais esse objeto, o que quebrava a aplicação
|
|
8
|
+
// no bootstrap e exigia um polyfill (`window.global = window`) em cada consumidor.
|
|
9
|
+
// O bundle pré-compilado em `dist/sockjs` já carrega o próprio shim de `global`,
|
|
10
|
+
// expondo a mesma API sem depender de nada do ambiente Node.
|
|
11
|
+
// @ts-expect-error O pacote só publica tipagem para o entry point padrão.
|
|
12
|
+
import SockJSBundle from 'sockjs-client/dist/sockjs';
|
|
6
13
|
import { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';
|
|
7
14
|
import { UserInformationService } from './user-information.service';
|
|
8
15
|
import { PrimitiveManager } from './models';
|
|
9
16
|
import * as i0 from "@angular/core";
|
|
17
|
+
const SockJS = SockJSBundle;
|
|
10
18
|
const RECONNECT_INTERVAL_MILLISECONDS = 3000;
|
|
11
19
|
const CONNECTION_TIMEOUT_MILLISECONDS = 5000;
|
|
12
20
|
export class WebsocketService {
|
|
@@ -331,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
331
339
|
providedIn: 'root',
|
|
332
340
|
}]
|
|
333
341
|
}] });
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvd2Vic29ja2V0L3NyYy9saWIvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBSUgsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUc1QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUM3QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUs3QyxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSXFCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXhELGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFB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L2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIElGcmFtZSxcbiAgICBTdG9tcENvbmZpZyxcbiAgICBTdG9tcFN1YnNjcmlwdGlvbixcbiAgICBDbGllbnQsXG4gICAgRnJhbWVJbXBsLFxufSBmcm9tICdAc3RvbXAvc3RvbXBqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCBTb2NrSlMgZnJvbSAnc29ja2pzLWNsaWVudCc7XG5pbXBvcnQgeyBBc3luY0xvY2sgfSBmcm9tICdAc2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgVXNlckluZm9ybWF0aW9uU2VydmljZSB9IGZyb20gJy4vdXNlci1pbmZvcm1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW1pdGl2ZU1hbmFnZXIgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBPbkV2ZW50T3B0aW9ucywgUHJpbWl0aXZlRXZlbnQgfSBmcm9tICcuL3Byb3RvY29scyc7XG5cbmNvbnN0IFJFQ09OTkVDVF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMgPSAzMDAwO1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckluZm9ybWF0aW9uU2VydmljZSA9IGluamVjdChVc2VySW5mb3JtYXRpb25TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3IkID0gbmV3IFN1YmplY3Q8SUZyYW1lPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaWJlZCQgPSBuZXcgU3ViamVjdDxQcmltaXRpdmVNYW5hZ2VyPGFueT4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZU1hbmFnZXJzOiBNYXA8c3RyaW5nLCBQcmltaXRpdmVNYW5hZ2VyPGFueT4+ID1cbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25Mb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuXG4gICAgcHJpdmF0ZSBzdG9tcENsaWVudCE6IENsaWVudDtcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdG9tcGpzIGRlYnVnIGxvZ3MgYW5kIGFkZGl0aW9uYWwgaW5mb1xuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVidWdFbmFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHN0YXJ0cyB0aGUgY29ubmVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSB8fCB0aGlzLmlzQ29ubmVjdGluZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9tcENvbmZpZzogU3RvbXBDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0RmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyh0aGlzLmdldFN1YnNjcmlwdGlvblVybCgpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5OiBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25Db25uZWN0OiB0aGlzLmhhbmRsZU9uQ29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25EaXNjb25uZWN0OiB0aGlzLmhhbmRsZU9uRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uU3RvbXBFcnJvcjogdGhpcy5oYW5kbGVPblN0b21wRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBvbldlYlNvY2tldEVycm9yOiB0aGlzLmhhbmRsZU9uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50ID0gbmV3IENsaWVudChzdG9tcENvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IGRpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldC4gVGhlIHJlY29ubmVjdCBsb29wIHdpbGwgYmUgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcmltaXRpdmVNYW5hZ2VyIG9mIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvbXBDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgdHJpbmcgdG8gY29ubmVjdFxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0Nvbm5lY3RpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLnN0b21wQ2xpZW50LmNvbm5lY3RlZCAmJiB0aGlzLnN0b21wQ2xpZW50LmFjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKChwKSA9PiBwID09PSB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPHZvaWQ+YFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWNvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPEZyYW1lSW1wbD5gXG4gICAgICovXG4gICAgcHVibGljIG9uRXJyb3IoKTogT2JzZXJ2YWJsZTxJRnJhbWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHR5cGVQYXJhbSBgPFQ+YCBPYmplY3QgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgb2JzZXJ2YWJsZSBmb3IgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxQcmltaXRpdmVFdmVudDxUPj5gIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIHRoZSBzZXJ2aWNlIGNhbGxzIHRoZSBwcmltaXRpdmUuXG4gICAgICovXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XG4gICAgICAgIGNvbnN0IHsgZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcblxuICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPSB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KFxuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAuZ2V0RXZlbnRPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zaWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBmb3IgdGhlIHByaW1pdGl2ZS5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcG9yIGVtaXRpciB1bWEgbm90aWZpY2HDp8OjbyBhcMOzcyBvIHN1YnNjcmliZSBkbyBldmVudG8gcGVsYSBwcmltZWlyYSB2ZXouXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJzY3JpYmUob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkoZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJpbWl0aXZlTWFuYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN1YnNjcmlwdGlvbk9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT09IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignV1MgZGVidWc6ICcgKyBtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmZvKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dTIGluZm86ICcgKyBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uQ29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IHJlY29ubmVjdGVkLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgZGlzY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRDbG9zZShkYXRhOiBDbG9zZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gRXhlY3V0b3JTdWJzY3JpYmFibGVDaGFubmVsJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ28gYXdheScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdBdXRoZW50aWNhdGlvbkVycm9yJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXInKSAhPT1cbiAgICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uRXJyb3InLFxuICAgICAgICAgICAgICAgIG5ldyBGcmFtZUltcGwoe1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25TdG9tcEVycm9yKGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdTdG9tcEVycm9yJywgZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmluZm8oJ0F1dGhlbnRpY2F0aW9uIGVycm9yLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhOiBJRnJhbWUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZGF0YT8uaGVhZGVycz8uWydtZXNzYWdlJ107XG4gICAgICAgIGlmICghZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZm9yYmlkZGVuZXhjZXB0aW9uJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRFcnJvcihkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1dlYlNvY2tldEVycm9yJywgZGF0YSBhcyBJRnJhbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3Iob3JpZ2luOiBzdHJpbmcsIGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmVycm9yKG9yaWdpbiwgZGF0YSk7XG4gICAgICAgIHRoaXMuZXJyb3IkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWNvbm5lY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RQcmltaXRpdmVzKCk7XG4gICAgICAgIHRoaXMucmVjb25uZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFByaW1pdGl2ZXMoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9ucyhwcmltaXRpdmVNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oXG4gICAgICAgIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgICAgIHByaW1pdGl2ZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2F1dGhUb2tlbn0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlOiBzdHJpbmdcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICBkb21haW46IHN0cmluZyxcbiAgICAgICAgc2VydmljZTogc3RyaW5nLFxuICAgICAgICBwcmltaXRpdmU6IHN0cmluZ1xuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxhbnk+XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICAgICdNYW51YWxseSBkaXNjb25uZWN0aW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYnNlcnZlcnNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZm9yRWFjaCgocHJpbWl0aXZlTWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzQ291bnQgKz0gcHJpbWl0aXZlTWFuYWdlci5nZXRPYnNlcnZlcnNDb3VudCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzQ291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbjxUPihcbiAgICAgICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPlxuICAgICk6IFN0b21wU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuc3Vic2NyaWJlKGRlc3RpbmF0aW9uLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSB8fCAne30nKTtcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnM8VD4oXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuID0gdGhpcy5idWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuID0gdGhpcy5nZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4sXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICk7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4sXG4gICAgICAgICAgICBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlblxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmliZWQkLm5leHQocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRXZWJTb2NrZXRVcmwoKX0vc3Vic2NyaXB0aW9uYDtcbiAgICB9XG59XG4iXX0=
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvd2Vic29ja2V0L3NyYy9saWIvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBSUgsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRTVELDBFQUEwRTtBQUMxRSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLG1GQUFtRjtBQUNuRixpRkFBaUY7QUFDakYsNkRBQTZEO0FBQzdELDBFQUEwRTtBQUMxRSxPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUc1QyxNQUFNLE1BQU0sR0FBRyxZQUFtQyxDQUFDO0FBRW5ELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBSzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUFIN0I7UUFJcUIsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFeEQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pE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Ozs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgSUZyYW1lLFxuICAgIFN0b21wQ29uZmlnLFxuICAgIFN0b21wU3Vic2NyaXB0aW9uLFxuICAgIENsaWVudCxcbiAgICBGcmFtZUltcGwsXG59IGZyb20gJ0BzdG9tcC9zdG9tcGpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgU29ja0pTU3RhdGljIGZyb20gJ3NvY2tqcy1jbGllbnQnO1xuLy8gTyBlbnRyeSBwb2ludCBwYWRyw6NvIGRvIGBzb2NranMtY2xpZW50YCAoYGxpYi9lbnRyeS5qc2ApIMOpIGPDs2RpZ28tZm9udGVcbi8vIGJyb3dzZXJpZnkgcXVlIGzDqiBvIGBnbG9iYWxgIGRvIE5vZGUgbm8gbW9tZW50byBlbSBxdWUgbyBtw7NkdWxvIMOpIGF2YWxpYWRvLlxuLy8gTyBidW5kbGVyIGRvIEFuZ3VsYXIgbsOjbyBpbmpldGEgbWFpcyBlc3NlIG9iamV0bywgbyBxdWUgcXVlYnJhdmEgYSBhcGxpY2HDp8Ojb1xuLy8gbm8gYm9vdHN0cmFwIGUgZXhpZ2lhIHVtIHBvbHlmaWxsIChgd2luZG93Lmdsb2JhbCA9IHdpbmRvd2ApIGVtIGNhZGEgY29uc3VtaWRvci5cbi8vIE8gYnVuZGxlIHByw6ktY29tcGlsYWRvIGVtIGBkaXN0L3NvY2tqc2AgasOhIGNhcnJlZ2EgbyBwcsOzcHJpbyBzaGltIGRlIGBnbG9iYWxgLFxuLy8gZXhwb25kbyBhIG1lc21hIEFQSSBzZW0gZGVwZW5kZXIgZGUgbmFkYSBkbyBhbWJpZW50ZSBOb2RlLlxuLy8gQHRzLWV4cGVjdC1lcnJvciBPIHBhY290ZSBzw7MgcHVibGljYSB0aXBhZ2VtIHBhcmEgbyBlbnRyeSBwb2ludCBwYWRyw6NvLlxuaW1wb3J0IFNvY2tKU0J1bmRsZSBmcm9tICdzb2NranMtY2xpZW50L2Rpc3Qvc29ja2pzJztcbmltcG9ydCB7IEFzeW5jTG9jayB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBVc2VySW5mb3JtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91c2VyLWluZm9ybWF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJpbWl0aXZlTWFuYWdlciB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IE9uRXZlbnRPcHRpb25zLCBQcmltaXRpdmVFdmVudCB9IGZyb20gJy4vcHJvdG9jb2xzJztcblxuY29uc3QgU29ja0pTID0gU29ja0pTQnVuZGxlIGFzIHR5cGVvZiBTb2NrSlNTdGF0aWM7XG5cbmNvbnN0IFJFQ09OTkVDVF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMgPSAzMDAwO1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckluZm9ybWF0aW9uU2VydmljZSA9IGluamVjdChVc2VySW5mb3JtYXRpb25TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3IkID0gbmV3IFN1YmplY3Q8SUZyYW1lPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaWJlZCQgPSBuZXcgU3ViamVjdDxQcmltaXRpdmVNYW5hZ2VyPGFueT4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZU1hbmFnZXJzOiBNYXA8c3RyaW5nLCBQcmltaXRpdmVNYW5hZ2VyPGFueT4+ID1cbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25Mb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuXG4gICAgcHJpdmF0ZSBzdG9tcENsaWVudCE6IENsaWVudDtcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdG9tcGpzIGRlYnVnIGxvZ3MgYW5kIGFkZGl0aW9uYWwgaW5mb1xuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVidWdFbmFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHN0YXJ0cyB0aGUgY29ubmVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSB8fCB0aGlzLmlzQ29ubmVjdGluZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9tcENvbmZpZzogU3RvbXBDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0RmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyh0aGlzLmdldFN1YnNjcmlwdGlvblVybCgpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5OiBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25Db25uZWN0OiB0aGlzLmhhbmRsZU9uQ29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25EaXNjb25uZWN0OiB0aGlzLmhhbmRsZU9uRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uU3RvbXBFcnJvcjogdGhpcy5oYW5kbGVPblN0b21wRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBvbldlYlNvY2tldEVycm9yOiB0aGlzLmhhbmRsZU9uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50ID0gbmV3IENsaWVudChzdG9tcENvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IGRpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldC4gVGhlIHJlY29ubmVjdCBsb29wIHdpbGwgYmUgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcmltaXRpdmVNYW5hZ2VyIG9mIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvbXBDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgdHJpbmcgdG8gY29ubmVjdFxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0Nvbm5lY3RpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLnN0b21wQ2xpZW50LmNvbm5lY3RlZCAmJiB0aGlzLnN0b21wQ2xpZW50LmFjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKChwKSA9PiBwID09PSB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPHZvaWQ+YFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWNvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPEZyYW1lSW1wbD5gXG4gICAgICovXG4gICAgcHVibGljIG9uRXJyb3IoKTogT2JzZXJ2YWJsZTxJRnJhbWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHR5cGVQYXJhbSBgPFQ+YCBPYmplY3QgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgb2JzZXJ2YWJsZSBmb3IgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxQcmltaXRpdmVFdmVudDxUPj5gIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIHRoZSBzZXJ2aWNlIGNhbGxzIHRoZSBwcmltaXRpdmUuXG4gICAgICovXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XG4gICAgICAgIGNvbnN0IHsgZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcblxuICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPSB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KFxuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAuZ2V0RXZlbnRPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zaWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBmb3IgdGhlIHByaW1pdGl2ZS5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcG9yIGVtaXRpciB1bWEgbm90aWZpY2HDp8OjbyBhcMOzcyBvIHN1YnNjcmliZSBkbyBldmVudG8gcGVsYSBwcmltZWlyYSB2ZXouXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJzY3JpYmUob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkoZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJpbWl0aXZlTWFuYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN1YnNjcmlwdGlvbk9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT09IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignV1MgZGVidWc6ICcgKyBtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmZvKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dTIGluZm86ICcgKyBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uQ29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IHJlY29ubmVjdGVkLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgZGlzY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRDbG9zZShkYXRhOiBDbG9zZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gRXhlY3V0b3JTdWJzY3JpYmFibGVDaGFubmVsJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ28gYXdheScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdBdXRoZW50aWNhdGlvbkVycm9yJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXInKSAhPT1cbiAgICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uRXJyb3InLFxuICAgICAgICAgICAgICAgIG5ldyBGcmFtZUltcGwoe1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25TdG9tcEVycm9yKGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdTdG9tcEVycm9yJywgZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmluZm8oJ0F1dGhlbnRpY2F0aW9uIGVycm9yLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhOiBJRnJhbWUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZGF0YT8uaGVhZGVycz8uWydtZXNzYWdlJ107XG4gICAgICAgIGlmICghZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZm9yYmlkZGVuZXhjZXB0aW9uJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRFcnJvcihkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1dlYlNvY2tldEVycm9yJywgZGF0YSBhcyBJRnJhbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3Iob3JpZ2luOiBzdHJpbmcsIGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmVycm9yKG9yaWdpbiwgZGF0YSk7XG4gICAgICAgIHRoaXMuZXJyb3IkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWNvbm5lY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RQcmltaXRpdmVzKCk7XG4gICAgICAgIHRoaXMucmVjb25uZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFByaW1pdGl2ZXMoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9ucyhwcmltaXRpdmVNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oXG4gICAgICAgIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgICAgIHByaW1pdGl2ZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2F1dGhUb2tlbn0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlOiBzdHJpbmdcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICBkb21haW46IHN0cmluZyxcbiAgICAgICAgc2VydmljZTogc3RyaW5nLFxuICAgICAgICBwcmltaXRpdmU6IHN0cmluZ1xuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxhbnk+XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICAgICdNYW51YWxseSBkaXNjb25uZWN0aW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYnNlcnZlcnNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZm9yRWFjaCgocHJpbWl0aXZlTWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzQ291bnQgKz0gcHJpbWl0aXZlTWFuYWdlci5nZXRPYnNlcnZlcnNDb3VudCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzQ291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbjxUPihcbiAgICAgICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPlxuICAgICk6IFN0b21wU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuc3Vic2NyaWJlKGRlc3RpbmF0aW9uLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSB8fCAne30nKTtcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnM8VD4oXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuID0gdGhpcy5idWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuID0gdGhpcy5nZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4sXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICk7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4sXG4gICAgICAgICAgICBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlblxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmliZWQkLm5leHQocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRXZWJTb2NrZXRVcmwoKX0vc3Vic2NyaXB0aW9uYDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { Injectable, inject } from '@angular/core';
|
|
|
3
3
|
import { filter, take, finalize, switchMap, map } from 'rxjs/operators';
|
|
4
4
|
import { Client, FrameImpl } from '@stomp/stompjs';
|
|
5
5
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
6
|
-
import
|
|
6
|
+
import SockJSBundle from 'sockjs-client/dist/sockjs';
|
|
7
7
|
import { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';
|
|
8
8
|
import { get } from 'js-cookie';
|
|
9
9
|
|
|
@@ -71,6 +71,7 @@ class PrimitiveManager {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
const SockJS = SockJSBundle;
|
|
74
75
|
const RECONNECT_INTERVAL_MILLISECONDS = 3000;
|
|
75
76
|
const CONNECTION_TIMEOUT_MILLISECONDS = 5000;
|
|
76
77
|
class WebsocketService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"senior-gestao-empresarial-angular-components-websocket.mjs","sources":["../../projects/snr-erpx-angular-components/websocket/src/lib/user-information.service.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/models/primitive-manager.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/websocket.service.ts","../../projects/snr-erpx-angular-components/websocket/src/senior-gestao-empresarial-angular-components-websocket.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { get as getCookie } from 'js-cookie';\n\ninterface AuthToken {\n access_token?: string;\n username?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserInformationService {\n private static readonly BASE_URL_COOKIE_KEY = 'com.senior.base.url';\n private static readonly TOKEN_COOKIE_KEY = 'com.senior.token';\n\n public getAuthToken(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.access_token;\n }\n\n public getTenantDomain(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.username?.split('@')[1];\n }\n\n public getWebSocketUrl(): string {\n let baseUrl = getCookie(UserInformationService.BASE_URL_COOKIE_KEY);\n if (baseUrl && !baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n return (baseUrl ?? '') + 'websocket';\n }\n}\n","import { StompSubscription } from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport { PrimitiveEvent } from '../protocols/primitive-event';\n\nexport class PrimitiveManager<T> {\n public domain: string;\n public service: string;\n public primitive: string;\n\n private readonly stompSubscriptions: StompSubscription[];\n private readonly event$: Subject<PrimitiveEvent<T>>;\n private readonly subscribed$: BehaviorSubject<boolean>;\n\n public constructor(domain: string, service: string, primitive: string) {\n this.domain = domain;\n this.service = service;\n this.primitive = primitive;\n\n this.stompSubscriptions = [];\n this.event$ = new Subject<PrimitiveEvent<T>>();\n this.subscribed$ = new BehaviorSubject(false);\n }\n\n public unsubscribe(): void {\n this.event$.complete();\n\n for (const stompSubscription of this.stompSubscriptions) {\n stompSubscription.unsubscribe();\n }\n\n this.subscribed$.complete();\n }\n\n public fireEvent(event: PrimitiveEvent<T>): void {\n this.event$.next(event);\n }\n\n public subscribe(...subscriptions: StompSubscription[]): void {\n this.stompSubscriptions.push(...subscriptions);\n this.subscribed$.next(true);\n }\n\n public getEventObservable(): Observable<PrimitiveEvent<T>> {\n return this.event$.asObservable();\n }\n\n public getSubscriptionObservable(): Observable<boolean> {\n return this.subscribed$.asObservable();\n }\n\n public getObserversCount(): number {\n return this.event$.observers.length;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { filter, finalize, map, switchMap, take } from 'rxjs/operators';\nimport {\n IFrame,\n StompConfig,\n StompSubscription,\n Client,\n FrameImpl,\n} from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport SockJS from 'sockjs-client';\nimport { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';\nimport { UserInformationService } from './user-information.service';\nimport { PrimitiveManager } from './models';\nimport { OnEventOptions, PrimitiveEvent } from './protocols';\n\nconst RECONNECT_INTERVAL_MILLISECONDS = 3000;\nconst CONNECTION_TIMEOUT_MILLISECONDS = 5000;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n private readonly userInformationService = inject(UserInformationService);\n\n private readonly connected$ = new BehaviorSubject<boolean>(false);\n private readonly disconnected$ = new Subject<void>();\n private readonly reconnected$ = new Subject<void>();\n private readonly error$ = new Subject<IFrame>();\n private readonly subscribed$ = new Subject<PrimitiveManager<any>>();\n\n private readonly primitiveManagers: Map<string, PrimitiveManager<any>> =\n new Map<string, PrimitiveManager<any>>();\n private readonly connectionLock = new AsyncLock();\n\n private stompClient!: Client;\n private debugEnable = false;\n private lostConnection = false;\n\n /**\n * Enables stompjs debug logs and additional info\n */\n public enableDebugLogs(): void {\n this.debugEnable = true;\n }\n\n /**\n * Manually starts the connection\n */\n public async connect(): Promise<void> {\n await this.connectionLock.acquire();\n\n try {\n if (this.isConnected() || this.isConnecting()) {\n return;\n }\n this.lostConnection = false;\n\n const stompConfig: StompConfig = {\n webSocketFactory: () => {\n return new SockJS(this.getSubscriptionUrl(), null, {\n timeout: CONNECTION_TIMEOUT_MILLISECONDS,\n });\n },\n connectionTimeout: CONNECTION_TIMEOUT_MILLISECONDS,\n reconnectDelay: RECONNECT_INTERVAL_MILLISECONDS,\n debug: this.debug.bind(this),\n onConnect: this.handleOnConnected.bind(this),\n onDisconnect: this.handleOnDisconnect.bind(this),\n onWebSocketClose: this.handleOnWebSocketClose.bind(this),\n onStompError: this.handleOnStompError.bind(this),\n onWebSocketError: this.handleOnWebSocketError.bind(this),\n };\n\n this.debug('Connecting the Webscoket');\n\n this.stompClient = new Client(stompConfig);\n this.stompClient.activate();\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Manually disconnect the websocket. The reconnect loop will be stopped.\n */\n public async disconnect(): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.connectionLock.acquire();\n try {\n for (const primitiveManager of this.primitiveManagers.values()) {\n primitiveManager.unsubscribe();\n }\n\n this.primitiveManagers.clear();\n this.connected$.next(false);\n\n if (this.stompClient) {\n await this.stompClient.deactivate();\n }\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Check if the websocket is connected\n * @return `boolean` representing if the websocket is connected\n */\n public isConnected(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return this.stompClient.connected;\n }\n\n /**\n * Check if the websocket is tring to connect\n * @return `boolean` representing if the websocket status\n */\n public isConnecting(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return !this.stompClient.connected && this.stompClient.active;\n }\n\n /**\n * Event responsable to emit an event when the connection is established.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<boolean>`\n */\n public onConnect(): Observable<boolean> {\n return this.connected$.asObservable().pipe(filter((p) => p === true));\n }\n\n /**\n * Event responsable to emit an event when the connection is closed.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onDisconnect(): Observable<void> {\n return this.disconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when the connection is reestablished.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onReconnect(): Observable<void> {\n return this.reconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when an error ocurred.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<FrameImpl>`\n */\n public onError(): Observable<IFrame> {\n return this.error$.asObservable();\n }\n\n /**\n * Event responsible to emit an event when a primitive is called.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @typeParam `<T>` Object type that will be used in the observable for the `data` property.\n * @param {OnEventOptions} options Configurations for the event.\n * @return `Observable<PrimitiveEvent<T>>` Observable that emits an event when the service calls the primitive.\n */\n public onEvent<T>(options: OnEventOptions): Observable<PrimitiveEvent<T>> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n const existingPrimitiveManager = this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager.getEventObservable();\n }\n\n const primitiveManager = new PrimitiveManager<T>(\n domain,\n service,\n primitive\n );\n this.primitiveManagers.set(key, primitiveManager);\n\n void this.connect().then(() => {\n this.onConnect()\n .pipe(take(1))\n .subscribe(() => {\n this.createStompSubscriptions(primitiveManager);\n });\n });\n\n return primitiveManager\n .getEventObservable()\n .pipe(\n finalize(\n () =>\n void this.unsubscribePrimitiveOnFinalize(\n primitiveManager\n )\n )\n );\n }\n\n /**\n * Event responsible to emit an event when a subscription is created for the primitive.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @param {OnEventOptions} options Configurations for the event.\n * Observable responsável por emitir uma notificação após o subscribe do evento pela primeira vez.\n * @return `Observable<boolean>` Observable that emits an event when the service calls the primitive.\n */\n public onSubscribe(options: OnEventOptions): Observable<boolean> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n return this.onConnect().pipe(\n take(1),\n switchMap(() => {\n const existingPrimitiveManager =\n this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager\n .getSubscriptionObservable()\n .pipe(take(1));\n }\n\n return this.subscribed$.asObservable().pipe(\n filter((primitiveManager) => {\n return (\n this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n ) === key\n );\n }),\n map(() => true),\n take(1)\n );\n })\n );\n }\n\n private debug(message: string, ...optionalParams: unknown[]): void {\n if (!this.debugEnable) {\n return;\n }\n console.warn('WS debug: ' + message, ...optionalParams);\n }\n\n private info(message: string): void {\n console.warn('WS info: ' + message);\n }\n\n private handleOnConnected(): void {\n this.info('Webscoket connected');\n\n this.connected$.next(true);\n if (this.lostConnection) {\n this.info('Webscoket reconnected, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private handleOnDisconnect(): void {\n this.info('Webscoket disconnected');\n\n this.connected$.next(false);\n this.disconnected$.next();\n }\n\n private handleOnWebSocketClose(data: CloseEvent): void {\n if (data?.reason === '') {\n this.lostConnection = true;\n this.handleError(\n 'Failed to send message to ExecutorSubscribableChannel',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data?.reason?.toLowerCase().indexOf('go away') !== -1) {\n this.lostConnection = true;\n this.handleError(\n 'AuthenticationError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (\n data?.reason?.toLowerCase().indexOf('cannot connect to server') !==\n -1\n ) {\n this.lostConnection = true;\n this.handleError(\n 'ConnectionError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data.wasClean) {\n return;\n }\n\n this.lostConnection = true;\n }\n\n private handleOnStompError(data: IFrame): void {\n this.handleError('StompError', data);\n\n if (this.isAuthenticationError(data)) {\n this.info('Authentication error, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private isAuthenticationError(data: IFrame): boolean {\n const errorMessage = data?.headers?.['message'];\n if (!errorMessage) {\n return false;\n }\n\n return errorMessage.toLowerCase().indexOf('forbiddenexception') !== -1;\n }\n\n private handleOnWebSocketError(data: unknown): void {\n this.handleError('WebSocketError', data as IFrame);\n }\n\n private handleError(origin: string, data: IFrame): void {\n console.error(origin, data);\n this.error$.next(data);\n }\n\n private handleReconnection(): void {\n this.lostConnection = false;\n this.reconnectPrimitives();\n this.reconnected$.next();\n }\n\n private reconnectPrimitives(): void {\n for (const primitiveManager of this.primitiveManagers.values()) {\n this.createStompSubscriptions(primitiveManager);\n }\n }\n\n private buildSubscriptionUrlWithToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const authToken = this.userInformationService.getAuthToken();\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${authToken}/${domain}/${service}/${primitive}`;\n }\n\n private getSubscriptionUrlWithoutToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${domain}/${service}/${primitive}`;\n }\n\n private buildPrimitiveManagerKey(\n domain: string,\n service: string,\n primitive: string\n ): string {\n return `${domain}/${service}/${primitive}`;\n }\n\n private async unsubscribePrimitiveOnFinalize(\n primitiveManager: PrimitiveManager<any>\n ): Promise<void> {\n primitiveManager.unsubscribe();\n\n const key = this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n this.primitiveManagers.delete(key);\n\n await this.disconnectIfNoMoreObservables();\n }\n\n private async disconnectIfNoMoreObservables(): Promise<void> {\n if (this.getObserversCount() === 0) {\n this.debug(\n 'Manually disconnecting because there are no more observers'\n );\n await this.disconnect();\n }\n }\n\n private getObserversCount(): number {\n let observersCount = 0;\n\n this.primitiveManagers.forEach((primitiveManager) => {\n observersCount += primitiveManager.getObserversCount();\n });\n\n return observersCount;\n }\n\n private createStompSubscription<T>(\n destination: string,\n primitiveManager: PrimitiveManager<T>\n ): StompSubscription {\n return this.stompClient.subscribe(destination, (message) => {\n const event = JSON.parse(message.body || '{}');\n primitiveManager.fireEvent(event);\n });\n }\n\n private createStompSubscriptions<T>(\n primitiveManager: PrimitiveManager<T>\n ): void {\n const subscriptionUrlWithToken = this.buildSubscriptionUrlWithToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n const subscriptionUrlWithoutToken = this.getSubscriptionUrlWithoutToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n const stompSubscriptionWithToken = this.createStompSubscription(\n subscriptionUrlWithToken,\n primitiveManager\n );\n const stompSubscriptionWithoutToken = this.createStompSubscription(\n subscriptionUrlWithoutToken,\n primitiveManager\n );\n primitiveManager.subscribe(\n stompSubscriptionWithToken,\n stompSubscriptionWithoutToken\n );\n this.subscribed$.next(primitiveManager);\n }\n\n private getSubscriptionUrl(): string {\n return `${this.userInformationService.getWebSocketUrl()}/subscription`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getCookie"],"mappings":";;;;;;;;;MAWa,sBAAsB,CAAA;aACP,IAAmB,CAAA,mBAAA,GAAG,qBAAH,CAAyB,EAAA;aAC5C,IAAgB,CAAA,gBAAA,GAAG,kBAAH,CAAsB,EAAA;IAEvD,YAAY,GAAA;QACf,MAAM,WAAW,GACbA,GAAS,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAc,CAAC;QACvD,OAAO,SAAS,CAAC,YAAY,CAAC;KACjC;IAEM,eAAe,GAAA;QAClB,MAAM,WAAW,GACbA,GAAS,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAc,CAAC;QACvD,OAAO,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5C;IAEM,eAAe,GAAA;QAClB,IAAI,OAAO,GAAGA,GAAS,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;QACpE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,OAAO,IAAI,GAAG,CAAC;SAClB;AACD,QAAA,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,WAAW,CAAC;KACxC;+GAxBQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFnB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAET,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCNY,gBAAgB,CAAA;AASzB,IAAA,WAAA,CAAmB,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAA;AACjE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAE3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAqB,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;KACjD;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAEvB,QAAA,KAAK,MAAM,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACrD,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACnC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC/B;AAEM,IAAA,SAAS,CAAC,KAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAEM,SAAS,CAAC,GAAG,aAAkC,EAAA;QAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/B;IAEM,kBAAkB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACrC;IAEM,yBAAyB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KAC1C;IAEM,iBAAiB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;KACvC;AACJ;;ACrCD,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAC7C,MAAM,+BAA+B,GAAG,IAAI,CAAC;MAKhC,gBAAgB,CAAA;AAH7B,IAAA,WAAA,GAAA;AAIqB,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAyB,CAAC;AAEnD,QAAA,IAAA,CAAA,iBAAiB,GAC9B,IAAI,GAAG,EAAiC,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,SAAS,EAAE,CAAC;QAG1C,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACpB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAqblC,KAAA;AAnbG;;AAEG;IACI,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;AAED;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;AAChB,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAEpC,QAAA,IAAI;YACA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC3C,OAAO;aACV;AACD,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAE5B,YAAA,MAAM,WAAW,GAAgB;gBAC7B,gBAAgB,EAAE,MAAK;oBACnB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE;AAC/C,wBAAA,OAAO,EAAE,+BAA+B;AAC3C,qBAAA,CAAC,CAAC;iBACN;AACD,gBAAA,iBAAiB,EAAE,+BAA+B;AAClD,gBAAA,cAAc,EAAE,+BAA+B;gBAC/C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5C,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChD,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxD,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChD,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;aAC3D,CAAC;AAEF,YAAA,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAEvC,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;SAC/B;gBAAS;AACN,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SACvC;KACJ;AAED;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACrB,OAAO;SACV;AAED,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI;YACA,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE;gBAC5D,gBAAgB,CAAC,WAAW,EAAE,CAAC;aAClC;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE5B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;aACvC;SACJ;gBAAS;AACN,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SACvC;KACJ;AAED;;;AAGG;IACI,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC;SAChB;AAED,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;KACrC;AAED;;;AAGG;IACI,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC;SAChB;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;KACjE;AAED;;;;AAIG;IACI,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;KACzE;AAED;;;;AAIG;IACI,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;KAC5C;AAED;;;;AAIG;IACI,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KAC3C;AAED;;;;AAIG;IACI,OAAO,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACrC;AAED;;;;;;AAMG;AACI,IAAA,OAAO,CAAI,OAAuB,EAAA;QACrC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAEtE,MAAM,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,wBAAwB,EAAE;AAC1B,YAAA,OAAO,wBAAwB,CAAC,kBAAkB,EAAE,CAAC;SACxD;QAED,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CACzC,MAAM,EACN,OAAO,EACP,SAAS,CACZ,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAElD,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;YAC1B,IAAI,CAAC,SAAS,EAAE;AACX,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;AACpD,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,gBAAgB;AAClB,aAAA,kBAAkB,EAAE;AACpB,aAAA,IAAI,CACD,QAAQ,CACJ,MACI,KAAK,IAAI,CAAC,8BAA8B,CACpC,gBAAgB,CACnB,CACR,CACJ,CAAC;KACT;AAED;;;;;;AAMG;AACI,IAAA,WAAW,CAAC,OAAuB,EAAA;QACtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEtE,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACxB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAK;YACX,MAAM,wBAAwB,GAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,wBAAwB,EAAE;AAC1B,gBAAA,OAAO,wBAAwB;AAC1B,qBAAA,yBAAyB,EAAE;AAC3B,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACtB;AAED,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,CACvC,MAAM,CAAC,CAAC,gBAAgB,KAAI;gBACxB,QACI,IAAI,CAAC,wBAAwB,CACzB,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,SAAS,CAC7B,KAAK,GAAG,EACX;AACN,aAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,IAAI,CAAC,CAAC,CAAC,CACV,CAAC;SACL,CAAC,CACL,CAAC;KACL;AAEO,IAAA,KAAK,CAAC,OAAe,EAAE,GAAG,cAAyB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QACD,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC;KAC3D;AAEO,IAAA,IAAI,CAAC,OAAe,EAAA;AACxB,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;KACvC;IAEO,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC7D,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;KACJ;IAEO,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;AAEO,IAAA,sBAAsB,CAAC,IAAgB,EAAA;AAC3C,QAAA,IAAI,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CACZ,uDAAuD,EACvD,IAAI,SAAS,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,IAAI;AAClB,gBAAA,OAAO,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,MAAM;AACvB,iBAAA;AACJ,aAAA,CAAC,CACL,CAAC;YACF,OAAO;SACV;AAED,QAAA,IAAI,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CACZ,qBAAqB,EACrB,IAAI,SAAS,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,IAAI;AAClB,gBAAA,OAAO,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,MAAM;AACvB,iBAAA;AACJ,aAAA,CAAC,CACL,CAAC;YACF,OAAO;SACV;QAED,IACI,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC;YAC/D,CAAC,CAAC,EACJ;AACE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CACZ,iBAAiB,EACjB,IAAI,SAAS,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,IAAI;AAClB,gBAAA,OAAO,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,MAAM;AACvB,iBAAA;AACJ,aAAA,CAAC,CACL,CAAC;YACF,OAAO;SACV;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;KACJ;AAEO,IAAA,qBAAqB,CAAC,IAAY,EAAA;QACtC,MAAM,YAAY,GAAG,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,KAAK,CAAC;SAChB;AAED,QAAA,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1E;AAEO,IAAA,sBAAsB,CAAC,IAAa,EAAA;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAc,CAAC,CAAC;KACtD;IAEO,WAAW,CAAC,MAAc,EAAE,IAAY,EAAA;AAC5C,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1B;IAEO,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;IAEO,mBAAmB,GAAA;QACvB,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE;AAC5D,YAAA,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;SACnD;KACJ;AAEO,IAAA,6BAA6B,CACjC,MAAc,EACd,OAAe,EACf,SAAiB,EAAA;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,CAAC;QAC7D,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;KAC5E;AAEO,IAAA,8BAA8B,CAClC,MAAc,EACd,OAAe,EACf,SAAiB,EAAA;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,CAAC;QAC7D,OAAO,CAAA,OAAA,EAAU,MAAM,CAAI,CAAA,EAAA,MAAM,IAAI,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;KAC/D;AAEO,IAAA,wBAAwB,CAC5B,MAAc,EACd,OAAe,EACf,SAAiB,EAAA;AAEjB,QAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,OAAO,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;KAC9C;IAEO,MAAM,8BAA8B,CACxC,gBAAuC,EAAA;QAEvC,gBAAgB,CAAC,WAAW,EAAE,CAAC;AAE/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CACrC,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,SAAS,CAC7B,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEnC,QAAA,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;KAC9C;AAEO,IAAA,MAAM,6BAA6B,GAAA;AACvC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,KAAK,CACN,4DAA4D,CAC/D,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;SAC3B;KACJ;IAEO,iBAAiB,GAAA;QACrB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,gBAAgB,KAAI;AAChD,YAAA,cAAc,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;AAC3D,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,cAAc,CAAC;KACzB;IAEO,uBAAuB,CAC3B,WAAmB,EACnB,gBAAqC,EAAA;QAErC,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,KAAI;AACvD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAC/C,YAAA,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,wBAAwB,CAC5B,gBAAqC,EAAA;AAErC,QAAA,MAAM,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CAC/D,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,SAAS,CAC7B,CAAC;AACF,QAAA,MAAM,2BAA2B,GAAG,IAAI,CAAC,8BAA8B,CACnE,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,SAAS,CAC7B,CAAC;QAEF,MAAM,0BAA0B,GAAG,IAAI,CAAC,uBAAuB,CAC3D,wBAAwB,EACxB,gBAAgB,CACnB,CAAC;QACF,MAAM,6BAA6B,GAAG,IAAI,CAAC,uBAAuB,CAC9D,2BAA2B,EAC3B,gBAAgB,CACnB,CAAC;AACF,QAAA,gBAAgB,CAAC,SAAS,CACtB,0BAA0B,EAC1B,6BAA6B,CAChC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC3C;IAEO,kBAAkB,GAAA;QACtB,OAAO,CAAA,EAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,eAAe,CAAC;KAC1E;+GAncQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;ACrBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"senior-gestao-empresarial-angular-components-websocket.mjs","sources":["../../projects/snr-erpx-angular-components/websocket/src/lib/user-information.service.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/models/primitive-manager.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/websocket.service.ts","../../projects/snr-erpx-angular-components/websocket/src/senior-gestao-empresarial-angular-components-websocket.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { get as getCookie } from 'js-cookie';\n\ninterface AuthToken {\n access_token?: string;\n username?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserInformationService {\n private static readonly BASE_URL_COOKIE_KEY = 'com.senior.base.url';\n private static readonly TOKEN_COOKIE_KEY = 'com.senior.token';\n\n public getAuthToken(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.access_token;\n }\n\n public getTenantDomain(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.username?.split('@')[1];\n }\n\n public getWebSocketUrl(): string {\n let baseUrl = getCookie(UserInformationService.BASE_URL_COOKIE_KEY);\n if (baseUrl && !baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n return (baseUrl ?? '') + 'websocket';\n }\n}\n","import { StompSubscription } from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport { PrimitiveEvent } from '../protocols/primitive-event';\n\nexport class PrimitiveManager<T> {\n public domain: string;\n public service: string;\n public primitive: string;\n\n private readonly stompSubscriptions: StompSubscription[];\n private readonly event$: Subject<PrimitiveEvent<T>>;\n private readonly subscribed$: BehaviorSubject<boolean>;\n\n public constructor(domain: string, service: string, primitive: string) {\n this.domain = domain;\n this.service = service;\n this.primitive = primitive;\n\n this.stompSubscriptions = [];\n this.event$ = new Subject<PrimitiveEvent<T>>();\n this.subscribed$ = new BehaviorSubject(false);\n }\n\n public unsubscribe(): void {\n this.event$.complete();\n\n for (const stompSubscription of this.stompSubscriptions) {\n stompSubscription.unsubscribe();\n }\n\n this.subscribed$.complete();\n }\n\n public fireEvent(event: PrimitiveEvent<T>): void {\n this.event$.next(event);\n }\n\n public subscribe(...subscriptions: StompSubscription[]): void {\n this.stompSubscriptions.push(...subscriptions);\n this.subscribed$.next(true);\n }\n\n public getEventObservable(): Observable<PrimitiveEvent<T>> {\n return this.event$.asObservable();\n }\n\n public getSubscriptionObservable(): Observable<boolean> {\n return this.subscribed$.asObservable();\n }\n\n public getObserversCount(): number {\n return this.event$.observers.length;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { filter, finalize, map, switchMap, take } from 'rxjs/operators';\nimport {\n IFrame,\n StompConfig,\n StompSubscription,\n Client,\n FrameImpl,\n} from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport type SockJSStatic from 'sockjs-client';\n// O entry point padrão do `sockjs-client` (`lib/entry.js`) é código-fonte\n// browserify que lê o `global` do Node no momento em que o módulo é avaliado.\n// O bundler do Angular não injeta mais esse objeto, o que quebrava a aplicação\n// no bootstrap e exigia um polyfill (`window.global = window`) em cada consumidor.\n// O bundle pré-compilado em `dist/sockjs` já carrega o próprio shim de `global`,\n// expondo a mesma API sem depender de nada do ambiente Node.\n// @ts-expect-error O pacote só publica tipagem para o entry point padrão.\nimport SockJSBundle from 'sockjs-client/dist/sockjs';\nimport { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';\nimport { UserInformationService } from './user-information.service';\nimport { PrimitiveManager } from './models';\nimport { OnEventOptions, PrimitiveEvent } from './protocols';\n\nconst SockJS = SockJSBundle as typeof SockJSStatic;\n\nconst RECONNECT_INTERVAL_MILLISECONDS = 3000;\nconst CONNECTION_TIMEOUT_MILLISECONDS = 5000;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n private readonly userInformationService = inject(UserInformationService);\n\n private readonly connected$ = new BehaviorSubject<boolean>(false);\n private readonly disconnected$ = new Subject<void>();\n private readonly reconnected$ = new Subject<void>();\n private readonly error$ = new Subject<IFrame>();\n private readonly subscribed$ = new Subject<PrimitiveManager<any>>();\n\n private readonly primitiveManagers: Map<string, PrimitiveManager<any>> =\n new Map<string, PrimitiveManager<any>>();\n private readonly connectionLock = new AsyncLock();\n\n private stompClient!: Client;\n private debugEnable = false;\n private lostConnection = false;\n\n /**\n * Enables stompjs debug logs and additional info\n */\n public enableDebugLogs(): void {\n this.debugEnable = true;\n }\n\n /**\n * Manually starts the connection\n */\n public async connect(): Promise<void> {\n await this.connectionLock.acquire();\n\n try {\n if (this.isConnected() || this.isConnecting()) {\n return;\n }\n this.lostConnection = false;\n\n const stompConfig: StompConfig = {\n webSocketFactory: () => {\n return new SockJS(this.getSubscriptionUrl(), null, {\n timeout: CONNECTION_TIMEOUT_MILLISECONDS,\n });\n },\n connectionTimeout: CONNECTION_TIMEOUT_MILLISECONDS,\n reconnectDelay: RECONNECT_INTERVAL_MILLISECONDS,\n debug: this.debug.bind(this),\n onConnect: this.handleOnConnected.bind(this),\n onDisconnect: this.handleOnDisconnect.bind(this),\n onWebSocketClose: this.handleOnWebSocketClose.bind(this),\n onStompError: this.handleOnStompError.bind(this),\n onWebSocketError: this.handleOnWebSocketError.bind(this),\n };\n\n this.debug('Connecting the Webscoket');\n\n this.stompClient = new Client(stompConfig);\n this.stompClient.activate();\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Manually disconnect the websocket. The reconnect loop will be stopped.\n */\n public async disconnect(): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.connectionLock.acquire();\n try {\n for (const primitiveManager of this.primitiveManagers.values()) {\n primitiveManager.unsubscribe();\n }\n\n this.primitiveManagers.clear();\n this.connected$.next(false);\n\n if (this.stompClient) {\n await this.stompClient.deactivate();\n }\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Check if the websocket is connected\n * @return `boolean` representing if the websocket is connected\n */\n public isConnected(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return this.stompClient.connected;\n }\n\n /**\n * Check if the websocket is tring to connect\n * @return `boolean` representing if the websocket status\n */\n public isConnecting(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return !this.stompClient.connected && this.stompClient.active;\n }\n\n /**\n * Event responsable to emit an event when the connection is established.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<boolean>`\n */\n public onConnect(): Observable<boolean> {\n return this.connected$.asObservable().pipe(filter((p) => p === true));\n }\n\n /**\n * Event responsable to emit an event when the connection is closed.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onDisconnect(): Observable<void> {\n return this.disconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when the connection is reestablished.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onReconnect(): Observable<void> {\n return this.reconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when an error ocurred.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<FrameImpl>`\n */\n public onError(): Observable<IFrame> {\n return this.error$.asObservable();\n }\n\n /**\n * Event responsible to emit an event when a primitive is called.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @typeParam `<T>` Object type that will be used in the observable for the `data` property.\n * @param {OnEventOptions} options Configurations for the event.\n * @return `Observable<PrimitiveEvent<T>>` Observable that emits an event when the service calls the primitive.\n */\n public onEvent<T>(options: OnEventOptions): Observable<PrimitiveEvent<T>> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n const existingPrimitiveManager = this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager.getEventObservable();\n }\n\n const primitiveManager = new PrimitiveManager<T>(\n domain,\n service,\n primitive\n );\n this.primitiveManagers.set(key, primitiveManager);\n\n void this.connect().then(() => {\n this.onConnect()\n .pipe(take(1))\n .subscribe(() => {\n this.createStompSubscriptions(primitiveManager);\n });\n });\n\n return primitiveManager\n .getEventObservable()\n .pipe(\n finalize(\n () =>\n void this.unsubscribePrimitiveOnFinalize(\n primitiveManager\n )\n )\n );\n }\n\n /**\n * Event responsible to emit an event when a subscription is created for the primitive.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @param {OnEventOptions} options Configurations for the event.\n * Observable responsável por emitir uma notificação após o subscribe do evento pela primeira vez.\n * @return `Observable<boolean>` Observable that emits an event when the service calls the primitive.\n */\n public onSubscribe(options: OnEventOptions): Observable<boolean> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n return this.onConnect().pipe(\n take(1),\n switchMap(() => {\n const existingPrimitiveManager =\n this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager\n .getSubscriptionObservable()\n .pipe(take(1));\n }\n\n return this.subscribed$.asObservable().pipe(\n filter((primitiveManager) => {\n return (\n this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n ) === key\n );\n }),\n map(() => true),\n take(1)\n );\n })\n );\n }\n\n private debug(message: string, ...optionalParams: unknown[]): void {\n if (!this.debugEnable) {\n return;\n }\n console.warn('WS debug: ' + message, ...optionalParams);\n }\n\n private info(message: string): void {\n console.warn('WS info: ' + message);\n }\n\n private handleOnConnected(): void {\n this.info('Webscoket connected');\n\n this.connected$.next(true);\n if (this.lostConnection) {\n this.info('Webscoket reconnected, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private handleOnDisconnect(): void {\n this.info('Webscoket disconnected');\n\n this.connected$.next(false);\n this.disconnected$.next();\n }\n\n private handleOnWebSocketClose(data: CloseEvent): void {\n if (data?.reason === '') {\n this.lostConnection = true;\n this.handleError(\n 'Failed to send message to ExecutorSubscribableChannel',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data?.reason?.toLowerCase().indexOf('go away') !== -1) {\n this.lostConnection = true;\n this.handleError(\n 'AuthenticationError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (\n data?.reason?.toLowerCase().indexOf('cannot connect to server') !==\n -1\n ) {\n this.lostConnection = true;\n this.handleError(\n 'ConnectionError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data.wasClean) {\n return;\n }\n\n this.lostConnection = true;\n }\n\n private handleOnStompError(data: IFrame): void {\n this.handleError('StompError', data);\n\n if (this.isAuthenticationError(data)) {\n this.info('Authentication error, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private isAuthenticationError(data: IFrame): boolean {\n const errorMessage = data?.headers?.['message'];\n if (!errorMessage) {\n return false;\n }\n\n return errorMessage.toLowerCase().indexOf('forbiddenexception') !== -1;\n }\n\n private handleOnWebSocketError(data: unknown): void {\n this.handleError('WebSocketError', data as IFrame);\n }\n\n private handleError(origin: string, data: IFrame): void {\n console.error(origin, data);\n this.error$.next(data);\n }\n\n private handleReconnection(): void {\n this.lostConnection = false;\n this.reconnectPrimitives();\n this.reconnected$.next();\n }\n\n private reconnectPrimitives(): void {\n for (const primitiveManager of this.primitiveManagers.values()) {\n this.createStompSubscriptions(primitiveManager);\n }\n }\n\n private buildSubscriptionUrlWithToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const authToken = this.userInformationService.getAuthToken();\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${authToken}/${domain}/${service}/${primitive}`;\n }\n\n private getSubscriptionUrlWithoutToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${domain}/${service}/${primitive}`;\n }\n\n private buildPrimitiveManagerKey(\n domain: string,\n service: string,\n primitive: string\n ): string {\n return `${domain}/${service}/${primitive}`;\n }\n\n private async unsubscribePrimitiveOnFinalize(\n primitiveManager: PrimitiveManager<any>\n ): Promise<void> {\n primitiveManager.unsubscribe();\n\n const key = this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n this.primitiveManagers.delete(key);\n\n await this.disconnectIfNoMoreObservables();\n }\n\n private async disconnectIfNoMoreObservables(): Promise<void> {\n if (this.getObserversCount() === 0) {\n this.debug(\n 'Manually disconnecting because there are no more observers'\n );\n await this.disconnect();\n }\n }\n\n private getObserversCount(): number {\n let observersCount = 0;\n\n this.primitiveManagers.forEach((primitiveManager) => {\n observersCount += primitiveManager.getObserversCount();\n });\n\n return observersCount;\n }\n\n private createStompSubscription<T>(\n destination: string,\n primitiveManager: PrimitiveManager<T>\n ): StompSubscription {\n return this.stompClient.subscribe(destination, (message) => {\n const event = JSON.parse(message.body || '{}');\n primitiveManager.fireEvent(event);\n });\n }\n\n private createStompSubscriptions<T>(\n primitiveManager: PrimitiveManager<T>\n ): void {\n const subscriptionUrlWithToken = this.buildSubscriptionUrlWithToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n const subscriptionUrlWithoutToken = this.getSubscriptionUrlWithoutToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n const stompSubscriptionWithToken = this.createStompSubscription(\n subscriptionUrlWithToken,\n primitiveManager\n );\n const stompSubscriptionWithoutToken = this.createStompSubscription(\n subscriptionUrlWithoutToken,\n primitiveManager\n );\n primitiveManager.subscribe(\n stompSubscriptionWithToken,\n stompSubscriptionWithoutToken\n );\n this.subscribed$.next(primitiveManager);\n }\n\n private getSubscriptionUrl(): string {\n return `${this.userInformationService.getWebSocketUrl()}/subscription`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getCookie"],"mappings":"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"}
|
package/package.json
CHANGED