@esfaenza/admin-module 15.2.26 → 15.2.28

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.
Files changed (39) hide show
  1. package/esm2020/lib/admin-module.comms.service.mjs +4 -4
  2. package/esm2020/lib/admin-module.module.mjs +5 -5
  3. package/esm2020/lib/components/_shared/node_detail.component.loc.mjs +4 -4
  4. package/esm2020/lib/components/_shared/node_detail.component.mjs +4 -4
  5. package/esm2020/lib/components/audits/adm_audits.component.loc.mjs +4 -4
  6. package/esm2020/lib/components/audits/adm_audits.component.mjs +16 -19
  7. package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.loc.mjs +4 -4
  8. package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.mjs +18 -21
  9. package/esm2020/lib/components/enqueues/adm_enq.component.loc.mjs +4 -4
  10. package/esm2020/lib/components/enqueues/adm_enq.component.mjs +16 -18
  11. package/esm2020/lib/components/logs/adm_logs.component.loc.mjs +4 -4
  12. package/esm2020/lib/components/logs/adm_logs.component.mjs +12 -14
  13. package/esm2020/lib/components/metrics/metrics_search.component.loc.mjs +4 -4
  14. package/esm2020/lib/components/metrics/metrics_search.component.mjs +46 -50
  15. package/esm2020/lib/components/profiler/adm_profiler.component.loc.mjs +4 -4
  16. package/esm2020/lib/components/profiler/adm_profiler.component.mjs +24 -32
  17. package/esm2020/lib/components/topact/topact_search.component.loc.mjs +4 -4
  18. package/esm2020/lib/components/topact/topact_search.component.mjs +30 -35
  19. package/esm2020/lib/components/workers/adm_wrk.component.loc.mjs +4 -4
  20. package/esm2020/lib/components/workers/adm_wrk.component.mjs +29 -48
  21. package/esm2020/lib/models/components/ProfilerDataNode.loc.mjs +4 -4
  22. package/esm2020/lib/pipes/format_time.pipe.mjs +4 -4
  23. package/esm2020/lib/services/admin-module.base.service.mjs +131 -0
  24. package/fesm2015/esfaenza-admin-module.mjs +367 -241
  25. package/fesm2015/esfaenza-admin-module.mjs.map +1 -1
  26. package/fesm2020/esfaenza-admin-module.mjs +334 -268
  27. package/fesm2020/esfaenza-admin-module.mjs.map +1 -1
  28. package/lib/components/audits/adm_audits.component.d.ts +4 -4
  29. package/lib/components/dynamic_views/adm_dynamic_views.component.d.ts +5 -5
  30. package/lib/components/enqueues/adm_enq.component.d.ts +4 -4
  31. package/lib/components/logs/adm_logs.component.d.ts +4 -4
  32. package/lib/components/metrics/metrics_search.component.d.ts +5 -5
  33. package/lib/components/profiler/adm_profiler.component.d.ts +6 -7
  34. package/lib/components/topact/topact_search.component.d.ts +4 -4
  35. package/lib/components/workers/adm_wrk.component.d.ts +7 -5
  36. package/lib/services/admin-module.base.service.d.ts +41 -0
  37. package/package.json +5 -12
  38. package/esm2020/lib/models/externals/Repository.mjs +0 -25
  39. package/lib/models/externals/Repository.d.ts +0 -24
@@ -0,0 +1,131 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ import { HttpParams } from "@angular/common/http";
4
+ // ES
5
+ import { MessageService } from "@esfaenza/extensions";
6
+ import { HTTPService } from "@esfaenza/httpservice";
7
+ import { firstValueFrom, catchError, of } from "rxjs";
8
+ import * as i0 from "@angular/core";
9
+ // Chiamate ai Repository
10
+ const GET_Director_ChangeProcessConsumerGroup = "/api/Director/ChangeProcessConsumerGroup";
11
+ const GET_Director_ClearAllCaches = "/api/Director/ClearAllCaches";
12
+ const GET_Director_GetConsumerGroups = "/api/Director/GetConsumerGroups#cache";
13
+ const GET_Director_GetInfos = "/api/Director/GetInfos";
14
+ const GET_Director_GetMetrics = "/api/Director/GetMetrics";
15
+ const POST_Director_GetMetrics = "/api/Director/GetMetrics";
16
+ const POST_Director_GetProfilerDataNodes = "/api/Director/GetProfilerDataNodes";
17
+ const POST_Director_GetServerAudits = "/api/Director/GetServerAudits";
18
+ const POST_Director_GetDynamicViewData = "/api/Director/GetDynamicViewData";
19
+ const POST_Director_GetServerLocks = "/api/Director/GetServerLocks";
20
+ const GET_Director_GetServerLogs = "/api/Director/GetServerLogs";
21
+ const GET_Director_GetDynamicViews = "/api/Director/GetDynamicViews";
22
+ const POST_Director_GetServerWorkers = "/api/Director/GetServerWorkers";
23
+ const POST_Director_GetTopActivities = "/api/Director/GetTopActivities";
24
+ const GET_Director_GetWorkerStatus = "/api/Director/GetWorkerStatus";
25
+ const GET_Director_InvalidateServerSideCache = "/api/Director/InvalidateServerSideCache";
26
+ const GET_Director_KillProcess = "/api/Director/KillProcess";
27
+ const GET_Director_SetProcessTracing = "/api/Director/SetProcessTracing";
28
+ const GET_Director_StartWorker = "/api/Director/StartWorker";
29
+ const GET_Director_StopWorker = "/api/Director/StopWorker";
30
+ const GET_Director_GetNodeStats = "/api/Director/GetNodeStats";
31
+ const GET_Director_GetSessionStats = "/api/Director/GetSessionStats";
32
+ export class AdminModuleBaseService {
33
+ constructor(injector) {
34
+ this.injector = injector;
35
+ this.http = this.injector.get(HTTPService);
36
+ this.msgExts = this.injector.get(MessageService);
37
+ }
38
+ async getServerWorkers(sv) {
39
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerWorkers, sv));
40
+ return ret;
41
+ }
42
+ async doSetProcessTracing(instanceid, sid, serial, enable) {
43
+ var pars = new HttpParams()
44
+ .set("instanceid", instanceid)
45
+ .set("sid", sid)
46
+ .set("serial", serial)
47
+ .set("enable", enable);
48
+ let ret = await firstValueFrom(this.http.get(GET_Director_SetProcessTracing, pars));
49
+ return ret;
50
+ }
51
+ async doKillProcess(instanceid, sid, serial) {
52
+ var pars = new HttpParams()
53
+ .set("instanceid", instanceid)
54
+ .set("sid", sid)
55
+ .set("serial", serial);
56
+ let ret = await firstValueFrom(this.http.get(GET_Director_KillProcess, pars));
57
+ return ret;
58
+ }
59
+ async doChangeProcessConsumerGroup(instanceid, sid, serial, consumerGroup) {
60
+ var pars = new HttpParams()
61
+ .set("instanceid", instanceid)
62
+ .set("sid", sid)
63
+ .set("serial", serial)
64
+ .set("consumer_group", consumerGroup);
65
+ let ret = await firstValueFrom(this.http.get(GET_Director_ChangeProcessConsumerGroup, pars));
66
+ return ret;
67
+ }
68
+ async getConsumerGroups() {
69
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetConsumerGroups));
70
+ return ret;
71
+ }
72
+ async getServerLogs() {
73
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetServerLogs));
74
+ return ret;
75
+ }
76
+ async getTopActivities(sv) {
77
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetTopActivities, sv));
78
+ return ret;
79
+ }
80
+ async getInfos() {
81
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetInfos, null, null, false).pipe(catchError(_ => of(null))));
82
+ return ret;
83
+ }
84
+ async getNodeStats(nodeId) {
85
+ let pars = new HttpParams().set("nodeId", nodeId);
86
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetNodeStats, pars));
87
+ return ret;
88
+ }
89
+ async getSessionStats(sid, serial) {
90
+ let pars = new HttpParams().set('sid', sid).set('serial', serial);
91
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetSessionStats, pars));
92
+ return ret;
93
+ }
94
+ async getProfilerDataNodes(sv) {
95
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetProfilerDataNodes, sv));
96
+ return ret;
97
+ }
98
+ async getMetrics(sv) {
99
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetMetrics, sv));
100
+ return ret;
101
+ }
102
+ async getMetricsList(from, to) {
103
+ let pars = new HttpParams()
104
+ .set("from", from || "")
105
+ .set("to", to || "");
106
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetMetrics, pars));
107
+ return ret.sort((a, b) => a.name.localeCompare(b.name));
108
+ }
109
+ async getServerLocks(sv) {
110
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerLocks, sv));
111
+ return ret;
112
+ }
113
+ async getDynamicViewData(sv) {
114
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetDynamicViewData, sv));
115
+ return ret;
116
+ }
117
+ async getDynamicViews() {
118
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetDynamicViews));
119
+ return ret;
120
+ }
121
+ async getServerAudits(sv) {
122
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerAudits, sv));
123
+ return ret;
124
+ }
125
+ }
126
+ AdminModuleBaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
127
+ AdminModuleBaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService });
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService, decorators: [{
129
+ type: Injectable
130
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbW9kdWxlLmJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL2FkbWluLW1vZHVsZS5iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELEtBQUs7QUFDTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFhdEQseUJBQXlCO0FBQ3pCLE1BQU0sdUNBQXVDLEdBQVcsMENBQTBDLENBQUM7QUFDbkcsTUFBTSwyQkFBMkIsR0FBVyw4QkFBOEIsQ0FBQztBQUMzRSxNQUFNLDhCQUE4QixHQUFXLHVDQUF1QyxDQUFDO0FBQ3ZGLE1BQU0scUJBQXFCLEdBQVcsd0JBQXdCLENBQUM7QUFDL0QsTUFBTSx1QkFBdUIsR0FBVywwQkFBMEIsQ0FBQztBQUNuRSxNQUFNLHdCQUF3QixHQUFXLDBCQUEwQixDQUFDO0FBQ3BFLE1BQU0sa0NBQWtDLEdBQVcsb0NBQW9DLENBQUM7QUFDeEYsTUFBTSw2QkFBNkIsR0FBVywrQkFBK0IsQ0FBQztBQUM5RSxNQUFNLGdDQUFnQyxHQUFXLGtDQUFrQyxDQUFDO0FBQ3BGLE1BQU0sNEJBQTRCLEdBQVcsOEJBQThCLENBQUM7QUFDNUUsTUFBTSwwQkFBMEIsR0FBVyw2QkFBNkIsQ0FBQztBQUN6RSxNQUFNLDRCQUE0QixHQUFXLCtCQUErQixDQUFDO0FBQzdFLE1BQU0sOEJBQThCLEdBQVcsZ0NBQWdD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LEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFhO1FBQ3JDLElBQUksR0FBRyxHQUFjLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFZLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQW9CO1FBQ2hELElBQUksR0FBRyxHQUFxQixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUIsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6SCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixJQUFJLEdBQUcsR0FBZSxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFjO1FBQ3ZDLElBQUksR0FBRyxHQUFlLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOztvSEFuSFEsc0JBQXNCO3dIQUF0QixzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG4vLyBFU1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBIVFRQU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IFByb2Nlc3Nlc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvUHJvY2Vzc2VzVmlld1wiO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgY2F0Y2hFcnJvciwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuaW1wb3J0IHsgVG9wQWN0aXZpdGllc0RhdGFWaWV3IH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL1RvcEFjdGl2aXRpZXNEYXRhVmlld1wiO1xyXG5pbXBvcnQgeyBEaXJlY3RvckluZm9zIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL0RpcmVjdG9ySW5mb3NcIjtcclxuaW1wb3J0IHsgTm9kZVN0YXRzIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL05vZGVTdGF0c1wiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RhdHMgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvU2Vzc2lvblN0YXRzXCI7XHJcbmltcG9ydCB7IFByb2ZpbGVyRGF0YU5vZGVzVmlldyB9IGZyb20gXCIuLi9tb2RlbHMvY29tcG9uZW50cy9Qcm9maWxlckRhdGFOb2Rlc1ZpZXdcIjtcclxuaW1wb3J0IHsgTWV0cmljc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvTWV0cmljc1ZpZXdcIjtcclxuaW1wb3J0IHsgTWV0cmljIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL01ldHJpY1wiO1xyXG5pbXBvcnQgeyBMb2Nrc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvTG9ja3NWaWV3XCI7XHJcbmltcG9ydCB7IER5bmFtaWNWaWV3c1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvRHluYW1pY1ZpZXdzVmlld1wiO1xyXG5pbXBvcnQgeyBBdWRpdHNWaWV3IH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL0F1ZGl0c1ZpZXdcIjtcclxuXHJcbi8vIENoaWFtYXRlIGFpIFJlcG9zaXRvcnlcclxuY29uc3QgR0VUX0RpcmVjdG9yX0NoYW5nZVByb2Nlc3NDb25zdW1lckdyb3VwOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvQ2hhbmdlUHJvY2Vzc0NvbnN1bWVyR3JvdXBcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0NsZWFyQWxsQ2FjaGVzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvQ2xlYXJBbGxDYWNoZXNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldENvbnN1bWVyR3JvdXBzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0Q29uc3VtZXJHcm91cHMjY2FjaGVcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldEluZm9zOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0SW5mb3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldE1ldHJpY3M6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRNZXRyaWNzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0TWV0cmljczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldE1ldHJpY3NcIjtcclxuY29uc3QgUE9TVF9EaXJlY3Rvcl9HZXRQcm9maWxlckRhdGFOb2Rlczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFByb2ZpbGVyRGF0YU5vZGVzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyQXVkaXRzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0U2VydmVyQXVkaXRzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0RHluYW1pY1ZpZXdEYXRhOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0RHluYW1pY1ZpZXdEYXRhXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyTG9ja3M6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRTZXJ2ZXJMb2Nrc1wiO1xyXG5jb25zdCBHRVRfRGlyZWN0b3JfR2V0U2VydmVyTG9nczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFNlcnZlckxvZ3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldER5bmFtaWNWaWV3czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldER5bmFtaWNWaWV3c1wiO1xyXG5jb25zdCBQT1NUX0RpcmVjdG9yX0dldFNlcnZlcldvcmtlcnM6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRTZXJ2ZXJXb3JrZXJzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0VG9wQWN0aXZpdGllczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFRvcEFjdGl2aXRpZXNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldFdvcmtlclN0YXR1czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFdvcmtlclN0YXR1c1wiO1xyXG5jb25zdCBHRVRfRGlyZWN0b3JfSW52YWxpZGF0ZVNlcnZlclNpZGVDYWNoZTogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0ludmFsaWRhdGVTZXJ2ZXJTaWRlQ2FjaGVcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0tpbGxQcm9jZXNzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvS2lsbFByb2Nlc3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1NldFByb2Nlc3NUcmFjaW5nOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvU2V0UHJvY2Vzc1RyYWNpbmdcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1N0YXJ0V29ya2VyOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvU3RhcnRXb3JrZXJcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1N0b3BXb3JrZXI6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9TdG9wV29ya2VyXCI7XHJcbmNvbnN0IEdFVF9EaXJlY3Rvcl9HZXROb2RlU3RhdHM6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXROb2RlU3RhdHNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldFNlc3Npb25TdGF0czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFNlc3Npb25TdGF0c1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWRtaW5Nb2R1bGVCYXNlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgaHR0cDogSFRUUFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgbXNnRXh0czogTWVzc2FnZVNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICB0aGlzLmh0dHAgPSB0aGlzLmluamVjdG9yLmdldChIVFRQU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzID0gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXJ2ZXJXb3JrZXJzKHN2OiBQcm9jZXNzZXNWaWV3KTogUHJvbWlzZTxQcm9jZXNzZXNWaWV3PiB7XHJcbiAgICAgICAgbGV0IHJldDogUHJvY2Vzc2VzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFByb2Nlc3Nlc1ZpZXc+KFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyV29ya2Vycywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb1NldFByb2Nlc3NUcmFjaW5nKGluc3RhbmNlaWQ6IHN0cmluZywgc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nLCBlbmFibGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHBhcnMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgICAgICAgIC5zZXQoXCJpbnN0YW5jZWlkXCIsIGluc3RhbmNlaWQpXHJcbiAgICAgICAgICAgIC5zZXQoXCJzaWRcIiwgc2lkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2VyaWFsXCIsIHNlcmlhbClcclxuICAgICAgICAgICAgLnNldChcImVuYWJsZVwiLCBlbmFibGUpO1xyXG5cclxuICAgICAgICBsZXQgcmV0OiBzdHJpbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PHN0cmluZz4oR0VUX0RpcmVjdG9yX1NldFByb2Nlc3NUcmFjaW5nLCBwYXJzKSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9LaWxsUHJvY2VzcyhpbnN0YW5jZWlkOiBzdHJpbmcsIHNpZDogc3RyaW5nLCBzZXJpYWw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHBhcnMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgICAgICAgIC5zZXQoXCJpbnN0YW5jZWlkXCIsIGluc3RhbmNlaWQpXHJcbiAgICAgICAgICAgIC5zZXQoXCJzaWRcIiwgc2lkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2VyaWFsXCIsIHNlcmlhbCk7XHJcblxyXG4gICAgICAgIGxldCByZXQ6IHN0cmluZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8c3RyaW5nPihHRVRfRGlyZWN0b3JfS2lsbFByb2Nlc3MsIHBhcnMpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb0NoYW5nZVByb2Nlc3NDb25zdW1lckdyb3VwKGluc3RhbmNlaWQ6IHN0cmluZywgc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nLCBjb25zdW1lckdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwYXJzID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KFwiaW5zdGFuY2VpZFwiLCBpbnN0YW5jZWlkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2lkXCIsIHNpZClcclxuICAgICAgICAgICAgLnNldChcInNlcmlhbFwiLCBzZXJpYWwpXHJcbiAgICAgICAgICAgIC5zZXQoXCJjb25zdW1lcl9ncm91cFwiLCBjb25zdW1lckdyb3VwKTtcclxuXHJcbiAgICAgICAgbGV0IHJldDogc3RyaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxzdHJpbmc+KEdFVF9EaXJlY3Rvcl9DaGFuZ2VQcm9jZXNzQ29uc3VtZXJHcm91cCwgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldENvbnN1bWVyR3JvdXBzKCk6IFByb21pc2U8S2V5VmFsdWVbXT4ge1xyXG4gICAgICAgIGxldCByZXQ6IEtleVZhbHVlW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PEtleVZhbHVlW10+KEdFVF9EaXJlY3Rvcl9HZXRDb25zdW1lckdyb3VwcykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlcnZlckxvZ3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgcmV0OiBzdHJpbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PHN0cmluZz4oR0VUX0RpcmVjdG9yX0dldFNlcnZlckxvZ3MpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRUb3BBY3Rpdml0aWVzKHN2OiBUb3BBY3Rpdml0aWVzRGF0YVZpZXcpOiBQcm9taXNlPFRvcEFjdGl2aXRpZXNEYXRhVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IFRvcEFjdGl2aXRpZXNEYXRhVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFRvcEFjdGl2aXRpZXNEYXRhVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRUb3BBY3Rpdml0aWVzLCBzdikpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9zKCk6IFByb21pc2U8RGlyZWN0b3JJbmZvcz4ge1xyXG4gICAgICAgIGxldCByZXQ6IERpcmVjdG9ySW5mb3MgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PERpcmVjdG9ySW5mb3M+KEdFVF9EaXJlY3Rvcl9HZXRJbmZvcywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKG51bGwgYXMgRGlyZWN0b3JJbmZvcykpKSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Tm9kZVN0YXRzKG5vZGVJZDogc3RyaW5nKTogUHJvbWlzZTxOb2RlU3RhdHM+IHtcclxuICAgICAgICBsZXQgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KFwibm9kZUlkXCIsIG5vZGVJZCk7XHJcbiAgICAgICAgbGV0IHJldDogTm9kZVN0YXRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxOb2RlU3RhdHM+KEdFVF9EaXJlY3Rvcl9HZXROb2RlU3RhdHMsIHBhcnMpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uU3RhdHMoc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uU3RhdHM+IHtcclxuICAgICAgICBsZXQgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdzaWQnLCBzaWQpLnNldCgnc2VyaWFsJywgc2VyaWFsKTtcclxuICAgICAgICBsZXQgcmV0OiBTZXNzaW9uU3RhdHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PFNlc3Npb25TdGF0cz4oR0VUX0RpcmVjdG9yX0dldFNlc3Npb25TdGF0cywgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFByb2ZpbGVyRGF0YU5vZGVzKHN2OiBQcm9maWxlckRhdGFOb2Rlc1ZpZXcpOiBQcm9taXNlPFByb2ZpbGVyRGF0YU5vZGVzVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IFByb2ZpbGVyRGF0YU5vZGVzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFByb2ZpbGVyRGF0YU5vZGVzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRQcm9maWxlckRhdGFOb2Rlcywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRNZXRyaWNzKHN2OiBNZXRyaWNzVmlldyk6IFByb21pc2U8TWV0cmljc1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBNZXRyaWNzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PE1ldHJpY3NWaWV3PihQT1NUX0RpcmVjdG9yX0dldE1ldHJpY3MsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWV0cmljc0xpc3QoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogUHJvbWlzZTxNZXRyaWNbXT4ge1xyXG4gICAgICAgIGxldCBwYXJzID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KFwiZnJvbVwiLCBmcm9tIHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5zZXQoXCJ0b1wiLCB0byB8fCBcIlwiKTtcclxuXHJcbiAgICAgICAgbGV0IHJldDogTWV0cmljW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE1ldHJpY1tdPihHRVRfRGlyZWN0b3JfR2V0TWV0cmljcywgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlcnZlckxvY2tzKHN2OiBMb2Nrc1ZpZXcpOiBQcm9taXNlPExvY2tzVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IExvY2tzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PExvY2tzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRTZXJ2ZXJMb2Nrcywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXREeW5hbWljVmlld0RhdGEoc3Y6IER5bmFtaWNWaWV3c1ZpZXcpOiBQcm9taXNlPER5bmFtaWNWaWV3c1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBEeW5hbWljVmlld3NWaWV3ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RHluYW1pY1ZpZXdzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXREeW5hbWljVmlld0RhdGEsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHluYW1pY1ZpZXdzKCk6IFByb21pc2U8S2V5VmFsdWVbXT4ge1xyXG4gICAgICAgIGxldCByZXQ6IEtleVZhbHVlW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PEtleVZhbHVlW10+KEdFVF9EaXJlY3Rvcl9HZXREeW5hbWljVmlld3MpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXJ2ZXJBdWRpdHMoc3Y6IEF1ZGl0c1ZpZXcpOiBQcm9taXNlPEF1ZGl0c1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBBdWRpdHNWaWV3ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8QXVkaXRzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRTZXJ2ZXJBdWRpdHMsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxufSJdfQ==