@smarterplan/ngx-smarterplan-core 1.2.45 → 1.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2020/lib/components/csv-export/csv-export.component.mjs +59 -59
- package/esm2020/lib/components/loader/loader.component.mjs +23 -23
- package/esm2020/lib/components/menu-bar/avatar/avatar.component.mjs +80 -80
- package/esm2020/lib/components/menu-bar/menu-bar.component.mjs +99 -99
- package/esm2020/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +384 -384
- package/esm2020/lib/components/menu-bar/range-date-picker/range-date-picker.component.mjs +147 -147
- package/esm2020/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +40 -40
- package/esm2020/lib/components/search-bar/search-bar.component.mjs +63 -63
- package/esm2020/lib/components/support-modal/support-modal.component.mjs +66 -66
- package/esm2020/lib/config.mjs +4 -4
- package/esm2020/lib/helpers.service.mjs +470 -470
- package/esm2020/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +69 -69
- package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +51 -51
- package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +61 -61
- package/esm2020/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +158 -158
- package/esm2020/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +85 -85
- package/esm2020/lib/matterport-extensions/scene-component/SceneComponent.mjs +128 -128
- package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +249 -249
- package/esm2020/lib/matterport-extensions/tv-player/TvPlayer.mjs +98 -98
- package/esm2020/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +64 -64
- package/esm2020/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +221 -221
- package/esm2020/lib/mattertagData.mjs +165 -165
- package/esm2020/lib/ngx-smarterplan-core.module.mjs +122 -122
- package/esm2020/lib/ngx-smarterplan-core.service.mjs +14 -14
- package/esm2020/lib/pipes/duration-to-string.pipe.mjs +66 -66
- package/esm2020/lib/pipes/format-date-number-to-digits.pipe.mjs +30 -30
- package/esm2020/lib/pipes/hashtag-from-id.pipe.mjs +26 -26
- package/esm2020/lib/pipes/safe-url.pipe.mjs +20 -20
- package/esm2020/lib/pipes/time-date-to-local-string.pipe.mjs +104 -104
- package/esm2020/lib/pipes/username-from-id.pipe.mjs +29 -29
- package/esm2020/lib/services/amplify-cache.service.mjs +72 -72
- package/esm2020/lib/services/base-tab.service.mjs +24 -24
- package/esm2020/lib/services/baseVisibility.service.mjs +18 -18
- package/esm2020/lib/services/content.service.mjs +135 -135
- package/esm2020/lib/services/filter.service.mjs +599 -599
- package/esm2020/lib/services/intervention.service.mjs +236 -236
- package/esm2020/lib/services/locale.service.mjs +45 -45
- package/esm2020/lib/services/matterport-import.service.mjs +340 -340
- package/esm2020/lib/services/matterport.service.mjs +1587 -1587
- package/esm2020/lib/services/models/affectation.service.mjs +60 -60
- package/esm2020/lib/services/models/base-object.service.mjs +70 -70
- package/esm2020/lib/services/models/capture.service.mjs +34 -34
- package/esm2020/lib/services/models/comment.service.mjs +98 -98
- package/esm2020/lib/services/models/domain.service.mjs +78 -78
- package/esm2020/lib/services/models/equipment.service.mjs +683 -683
- package/esm2020/lib/services/models/event.service.mjs +128 -128
- package/esm2020/lib/services/models/feature.service.mjs +380 -380
- package/esm2020/lib/services/models/hashtag.service.mjs +38 -38
- package/esm2020/lib/services/models/layer.service.mjs +33 -33
- package/esm2020/lib/services/models/measurement.service.mjs +199 -199
- package/esm2020/lib/services/models/mission.service.mjs +206 -206
- package/esm2020/lib/services/models/navigation.service.mjs +92 -92
- package/esm2020/lib/services/models/node.service.mjs +31 -31
- package/esm2020/lib/services/models/object3D.service.mjs +364 -364
- package/esm2020/lib/services/models/operation.service.mjs +59 -59
- package/esm2020/lib/services/models/organisation.service.mjs +73 -73
- package/esm2020/lib/services/models/plan.service.mjs +799 -799
- package/esm2020/lib/services/models/poi.service.mjs +103 -103
- package/esm2020/lib/services/models/profile.service.mjs +58 -58
- package/esm2020/lib/services/models/property.service.mjs +44 -44
- package/esm2020/lib/services/models/space.service.mjs +204 -204
- package/esm2020/lib/services/models/template.service.mjs +41 -41
- package/esm2020/lib/services/models/ticket.service.mjs +526 -526
- package/esm2020/lib/services/models/visit.service.mjs +130 -130
- package/esm2020/lib/services/models/zone.service.mjs +225 -225
- package/esm2020/lib/services/navigator.service.mjs +212 -212
- package/esm2020/lib/services/s3.service.mjs +137 -137
- package/esm2020/lib/services/search.service.mjs +124 -124
- package/esm2020/lib/services/support.service.mjs +42 -42
- package/esm2020/lib/services/tag.service.mjs +111 -111
- package/esm2020/lib/services/user.service.mjs +501 -501
- package/esm2020/lib/services/validators.service.mjs +50 -50
- package/esm2020/lib/services/viewer.service.mjs +389 -389
- package/esm2020/lib/services/zone-drawer.service.mjs +76 -76
- package/esm2020/lib/services/zoneChange.service.mjs +30 -30
- package/esm2020/lib/types.service.mjs +311 -311
- package/esm2020/lib/validators/email.directive.mjs +7 -7
- package/esm2020/lib/validators/no-empty.directive.mjs +12 -12
- package/esm2020/lib/validators/number.directive.mjs +12 -12
- package/esm2020/lib/validators/text.directive.mjs +12 -12
- package/esm2020/public-api.mjs +72 -72
- package/esm2020/smarterplan-ngx-smarterplan-core.mjs +4 -4
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +13014 -13014
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +12263 -12263
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/components/csv-export/csv-export.component.d.ts +18 -18
- package/lib/components/loader/loader.component.d.ts +10 -10
- package/lib/components/menu-bar/avatar/avatar.component.d.ts +21 -21
- package/lib/components/menu-bar/menu-bar.component.d.ts +38 -38
- package/lib/components/menu-bar/navigation-bar/navigation-bar.component.d.ts +73 -73
- package/lib/components/menu-bar/range-date-picker/range-date-picker.component.d.ts +35 -35
- package/lib/components/modal-switch-visit/modal-switch-visit.component.d.ts +22 -22
- package/lib/components/search-bar/search-bar.component.d.ts +16 -16
- package/lib/components/support-modal/support-modal.component.d.ts +26 -26
- package/lib/config.d.ts +22 -22
- package/lib/helpers.service.d.ts +79 -79
- package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +26 -26
- package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts +31 -31
- package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +37 -37
- package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts +42 -42
- package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts +46 -46
- package/lib/matterport-extensions/scene-component/SceneComponent.d.ts +388 -388
- package/lib/matterport-extensions/security-camera/SecurityCamera.d.ts +47 -47
- package/lib/matterport-extensions/tv-player/TvPlayer.d.ts +26 -26
- package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +26 -26
- package/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.d.ts +43 -43
- package/lib/mattertagData.d.ts +70 -70
- package/lib/ngx-smarterplan-core.module.d.ts +29 -29
- package/lib/ngx-smarterplan-core.service.d.ts +6 -6
- package/lib/pipes/duration-to-string.pipe.d.ts +12 -12
- package/lib/pipes/format-date-number-to-digits.pipe.d.ts +10 -10
- package/lib/pipes/hashtag-from-id.pipe.d.ts +10 -10
- package/lib/pipes/safe-url.pipe.d.ts +10 -10
- package/lib/pipes/time-date-to-local-string.pipe.d.ts +16 -16
- package/lib/pipes/username-from-id.pipe.d.ts +11 -11
- package/lib/services/amplify-cache.service.d.ts +37 -37
- package/lib/services/base-tab.service.d.ts +10 -10
- package/lib/services/baseVisibility.service.d.ts +9 -9
- package/lib/services/content.service.d.ts +28 -28
- package/lib/services/filter.service.d.ts +60 -60
- package/lib/services/intervention.service.d.ts +25 -25
- package/lib/services/locale.service.d.ts +23 -23
- package/lib/services/matterport-import.service.d.ts +53 -53
- package/lib/services/matterport.service.d.ts +336 -336
- package/lib/services/models/affectation.service.d.ts +14 -14
- package/lib/services/models/base-object.service.d.ts +20 -20
- package/lib/services/models/capture.service.d.ts +13 -13
- package/lib/services/models/comment.service.d.ts +26 -26
- package/lib/services/models/domain.service.d.ts +19 -19
- package/lib/services/models/equipment.service.d.ts +93 -93
- package/lib/services/models/event.service.d.ts +43 -43
- package/lib/services/models/feature.service.d.ts +75 -75
- package/lib/services/models/hashtag.service.d.ts +13 -13
- package/lib/services/models/layer.service.d.ts +11 -11
- package/lib/services/models/measurement.service.d.ts +51 -51
- package/lib/services/models/mission.service.d.ts +39 -39
- package/lib/services/models/navigation.service.d.ts +29 -29
- package/lib/services/models/node.service.d.ts +12 -12
- package/lib/services/models/object3D.service.d.ts +57 -57
- package/lib/services/models/operation.service.d.ts +15 -15
- package/lib/services/models/organisation.service.d.ts +19 -19
- package/lib/services/models/plan.service.d.ts +133 -133
- package/lib/services/models/poi.service.d.ts +25 -25
- package/lib/services/models/profile.service.d.ts +16 -16
- package/lib/services/models/property.service.d.ts +13 -13
- package/lib/services/models/space.service.d.ts +46 -46
- package/lib/services/models/template.service.d.ts +15 -15
- package/lib/services/models/ticket.service.d.ts +93 -93
- package/lib/services/models/visit.service.d.ts +24 -24
- package/lib/services/models/zone.service.d.ts +50 -50
- package/lib/services/navigator.service.d.ts +61 -61
- package/lib/services/s3.service.d.ts +14 -14
- package/lib/services/search.service.d.ts +20 -20
- package/lib/services/support.service.d.ts +17 -17
- package/lib/services/tag.service.d.ts +29 -29
- package/lib/services/user.service.d.ts +118 -118
- package/lib/services/validators.service.d.ts +18 -18
- package/lib/services/viewer.service.d.ts +110 -110
- package/lib/services/zone-drawer.service.d.ts +7 -7
- package/lib/services/zoneChange.service.d.ts +17 -17
- package/lib/types.service.d.ts +842 -842
- package/lib/validators/email.directive.d.ts +2 -2
- package/lib/validators/no-empty.directive.d.ts +2 -2
- package/lib/validators/number.directive.d.ts +2 -2
- package/lib/validators/text.directive.d.ts +2 -2
- package/package.json +2 -2
- package/public-api.d.ts +64 -64
- package/smarterplan-ngx-smarterplan-core.d.ts +5 -5
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
/* eslint-disable class-methods-use-this */
|
|
2
|
-
import { Inject, Injectable } from "@angular/core";
|
|
3
|
-
import { Subject } from "rxjs";
|
|
4
|
-
import { dateHasExpired } from "../../helpers.service";
|
|
5
|
-
import { ProfileStatus, RoleStatus } from "../../types.service";
|
|
6
|
-
import { DateTime } from "luxon";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class MissionService {
|
|
9
|
-
constructor(
|
|
10
|
-
// private affectationService: AffectationService,
|
|
11
|
-
apiInjected) {
|
|
12
|
-
this.currentMissionsUpdated = new Subject();
|
|
13
|
-
this.API = apiInjected;
|
|
14
|
-
}
|
|
15
|
-
async getMissionsFromUserID(userID) {
|
|
16
|
-
return this.API.__proto__.MissionsByUser(userID).then((missions) => {
|
|
17
|
-
return missions.items.filter((mis) => !mis.deletedAt);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
async getMissionsByOrderedOrganisation(orderedOrgID) {
|
|
21
|
-
return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then((response) => response.items);
|
|
22
|
-
}
|
|
23
|
-
async getMissionsByOrganisation(orgID) {
|
|
24
|
-
return this.API.__proto__.MissionsByOrganisation(orgID).then((response) => response.items);
|
|
25
|
-
}
|
|
26
|
-
async create(mission) {
|
|
27
|
-
const updMission = await this.API.__proto__.CreateMission(mission);
|
|
28
|
-
console.log("Mission created", updMission);
|
|
29
|
-
await this.checkIfCurrentUserMissionChanged(updMission);
|
|
30
|
-
return updMission;
|
|
31
|
-
}
|
|
32
|
-
async update(mission) {
|
|
33
|
-
const updMission = await this.API.__proto__.UpdateMission(mission);
|
|
34
|
-
console.log("Mission updated", updMission);
|
|
35
|
-
await this.checkIfCurrentUserMissionChanged(updMission);
|
|
36
|
-
return updMission;
|
|
37
|
-
}
|
|
38
|
-
async assertRoleForUserInOrg(user, org, role) {
|
|
39
|
-
return this.getMissionsFromUserID(user.id).then((missions) => {
|
|
40
|
-
if (missions) {
|
|
41
|
-
const misOrg = missions.filter((mis) => {
|
|
42
|
-
return mis.organisationID === org.id && mis.role === role;
|
|
43
|
-
});
|
|
44
|
-
return misOrg.length > 0;
|
|
45
|
-
}
|
|
46
|
-
return false;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
async getMissionsByOrderedOrganisationBySpace(ordOrgID, spaceID) {
|
|
50
|
-
return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {
|
|
51
|
-
eq: spaceID,
|
|
52
|
-
}).then((mis) => mis.items);
|
|
53
|
-
}
|
|
54
|
-
async softDeleteMission(missionID) {
|
|
55
|
-
// const hardDelete = await this.canHardDeteleMission(mission.id);
|
|
56
|
-
// if (hardDelete) {
|
|
57
|
-
// return this.hardDeleteMission(mission.id);
|
|
58
|
-
// }
|
|
59
|
-
console.log("Soft Deleting mission");
|
|
60
|
-
const missionUpd = await this.update({
|
|
61
|
-
id: missionID,
|
|
62
|
-
deletedAt: Date.now(),
|
|
63
|
-
});
|
|
64
|
-
await this.checkIfCurrentUserMissionChanged(missionUpd);
|
|
65
|
-
return missionUpd;
|
|
66
|
-
}
|
|
67
|
-
async list() {
|
|
68
|
-
const mis = await this.API.__proto__.ListMissions();
|
|
69
|
-
return mis.items.filter((m) => !m.deletedAt);
|
|
70
|
-
}
|
|
71
|
-
// async canHardDeteleMission(missionID: string): Promise<boolean> {
|
|
72
|
-
// const events = (
|
|
73
|
-
// await this.API.ListEvents({ ownerID: { eq: missionID } })
|
|
74
|
-
// ).items;
|
|
75
|
-
// if (events.length > 0) {
|
|
76
|
-
// return false;
|
|
77
|
-
// }
|
|
78
|
-
// const comments = (
|
|
79
|
-
// await this.API.ListComments({ ownerID: { eq: missionID } })
|
|
80
|
-
// ).items;
|
|
81
|
-
// if (comments.length > 0) {
|
|
82
|
-
// return false;
|
|
83
|
-
// }
|
|
84
|
-
// const affectations =
|
|
85
|
-
// await this.affectationService.getAffectationsFromMissionID(
|
|
86
|
-
// missionID,
|
|
87
|
-
// );
|
|
88
|
-
// if (affectations.length > 0) {
|
|
89
|
-
// return false;
|
|
90
|
-
// }
|
|
91
|
-
// return true;
|
|
92
|
-
// }
|
|
93
|
-
async hardDeleteMission(missionID) {
|
|
94
|
-
return this.API.__proto__.DeleteMission({ id: missionID });
|
|
95
|
-
}
|
|
96
|
-
getActivatedMissions(missions) {
|
|
97
|
-
const activated = [];
|
|
98
|
-
missions.map(async (mission) => {
|
|
99
|
-
const isActivated = mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);
|
|
100
|
-
if (isActivated) {
|
|
101
|
-
activated.push(mission);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
return activated;
|
|
105
|
-
}
|
|
106
|
-
async getMissionsForZone(zoneID) {
|
|
107
|
-
return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter((mis) => !mis.deletedAt);
|
|
108
|
-
}
|
|
109
|
-
async getMissionsForSpace(spaceID) {
|
|
110
|
-
return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items);
|
|
111
|
-
}
|
|
112
|
-
activateMission(mis) {
|
|
113
|
-
if (mis &&
|
|
114
|
-
(!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))) {
|
|
115
|
-
const groups = mis.groups ? mis.groups : [];
|
|
116
|
-
groups.push(ProfileStatus.ACTIVE);
|
|
117
|
-
this.update({ id: mis.id, groups });
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
async getMissionsByTemplate(templateID) {
|
|
121
|
-
return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter((mis) => !mis.deletedAt);
|
|
122
|
-
}
|
|
123
|
-
async getMission(missionID) {
|
|
124
|
-
return this.API.__proto__.GetMission(missionID);
|
|
125
|
-
}
|
|
126
|
-
async getMissionsByZoneByRole(zoneID, role) {
|
|
127
|
-
return (await this.API.__proto__.MissionsByZoneByRole(zoneID, { eq: role }, null, { deletedAt: { attributeExists: false } }, 200)).items;
|
|
128
|
-
}
|
|
129
|
-
async checkIfCurrentUserMissionChanged(changedMission) {
|
|
130
|
-
if (this.currentUserID === changedMission.userID) {
|
|
131
|
-
this.currentMissionsUpdated.next(true);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
async instantMissionsOfCurrent(currentUserID) {
|
|
135
|
-
this.currentUserID = currentUserID;
|
|
136
|
-
let missions = await this.getMissionsFromUserID(currentUserID);
|
|
137
|
-
/** Filter to keep only available missions */
|
|
138
|
-
missions = missions.filter((mission) => {
|
|
139
|
-
const hasExpired = dateHasExpired(mission.endDateTime);
|
|
140
|
-
/** Update this.lastExpiredMission */
|
|
141
|
-
if (hasExpired) {
|
|
142
|
-
const lastExpiredDate = this.lastExpiredMission
|
|
143
|
-
? new Date(this.lastExpiredMission.endDateTime)
|
|
144
|
-
: null;
|
|
145
|
-
const dateExpired = new Date(mission.endDateTime);
|
|
146
|
-
if (!lastExpiredDate || dateExpired > lastExpiredDate) {
|
|
147
|
-
this.lastExpiredMission = mission;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return !hasExpired;
|
|
151
|
-
});
|
|
152
|
-
if (missions.some((mis) => mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {
|
|
153
|
-
// workflow for VISITOR_MUSEUM
|
|
154
|
-
return missions;
|
|
155
|
-
}
|
|
156
|
-
/** Keep only started missions */
|
|
157
|
-
let nextMissionDate = null;
|
|
158
|
-
missions = missions.filter((mission) => {
|
|
159
|
-
const started = mission.startDateTime
|
|
160
|
-
? dateHasExpired(mission.startDateTime)
|
|
161
|
-
: true;
|
|
162
|
-
/** Update next mission to start */
|
|
163
|
-
if (!started) {
|
|
164
|
-
const missionDate = new Date(mission.startDateTime);
|
|
165
|
-
if (!nextMissionDate || missionDate < nextMissionDate) {
|
|
166
|
-
this.nextMissionToStart = mission;
|
|
167
|
-
nextMissionDate = missionDate;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return started;
|
|
171
|
-
});
|
|
172
|
-
return missions.length > 0 ? missions : null;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)
|
|
176
|
-
* @param template VisitTemplate
|
|
177
|
-
* @param missions Mission[] missions for this visit
|
|
178
|
-
* @returns Mission[] filtered missions
|
|
179
|
-
*/
|
|
180
|
-
filterMissionsAssitedToLiveForTemplate(template, missions) {
|
|
181
|
-
const visitStartTimestamp = template.realStartedAt;
|
|
182
|
-
return missions.filter((mis) => {
|
|
183
|
-
if (!mis.connectedToLiveAt) {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
if (mis.connectedToLiveAt.length === 0) {
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];
|
|
190
|
-
const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();
|
|
191
|
-
return lastConnectedAtTimestamp > visitStartTimestamp;
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
MissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, deps: [{ token: 'currentAPIService' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
-
MissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, providedIn: "root" });
|
|
197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, decorators: [{
|
|
198
|
-
type: Injectable,
|
|
199
|
-
args: [{
|
|
200
|
-
providedIn: "root",
|
|
201
|
-
}]
|
|
202
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
203
|
-
type: Inject,
|
|
204
|
-
args: ['currentAPIService']
|
|
205
|
-
}] }]; } });
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLGFBQWEsRUFBRSxVQUFVLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDL0csT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFLakMsTUFBTSxPQUFPLGNBQWM7SUFXdkI7SUFDSSxrREFBa0Q7SUFDckIsV0FBZ0I7UUFaakQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQWM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQWM7UUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxZQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDZCQUE2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QUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQ0FBc0MsQ0FBQyxRQUF1QixFQUFFLFFBQW1CO1FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO2dCQUN4QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlFLE9BQU8sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzsyR0E1UFEsY0FBYyxrQkFhWCxtQkFBbUI7K0dBYnRCLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFjUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRhdGVIYXNFeHBpcmVkIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMuc2VydmljZVwiO1xuaW1wb3J0IHsgTWlzc2lvbiwgT3JnYW5pc2F0aW9uLCBQcm9maWxlLCBQcm9maWxlU3RhdHVzLCBSb2xlU3RhdHVzLCBWaXNpdFRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3R5cGVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgTWlzc2lvblNlcnZpY2Uge1xuICAgIGN1cnJlbnRNaXNzaW9uc1VwZGF0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgbGFzdEV4cGlyZWRNaXNzaW9uOiBNaXNzaW9uO1xuXG4gICAgbmV4dE1pc3Npb25Ub1N0YXJ0OiBNaXNzaW9uO1xuXG4gICAgY3VycmVudFVzZXJJRDogc3RyaW5nO1xuXG4gICAgQVBJOiBhbnk7IC8vQVdTXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgLy8gcHJpdmF0ZSBhZmZlY3RhdGlvblNlcnZpY2U6IEFmZmVjdGF0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55XG4gICAgKSB7XG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGcm9tVXNlcklEKHVzZXJJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5VXNlcih1c2VySUQpLnRoZW4oKG1pc3Npb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnMuaXRlbXMuZmlsdGVyKChtaXMpID0+ICFtaXMuZGVsZXRlZEF0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb24oXG4gICAgICAgIG9yZGVyZWRPcmdJRDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8TWlzc2lvbltdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb24ob3JkZXJlZE9yZ0lEKS50aGVuKFxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlPcmdhbmlzYXRpb24ob3JnSUQpLnRoZW4oXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZShtaXNzaW9uOiBNaXNzaW9uKTogUHJvbWlzZTxNaXNzaW9uPiB7XG4gICAgICAgIGNvbnN0IHVwZE1pc3Npb24gPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTWlzc2lvbihtaXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJNaXNzaW9uIGNyZWF0ZWRcIiwgdXBkTWlzc2lvbik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQodXBkTWlzc2lvbik7XG4gICAgICAgIHJldHVybiB1cGRNaXNzaW9uO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZShtaXNzaW9uOiBhbnkpOiBQcm9taXNlPE1pc3Npb24+IHtcbiAgICAgICAgY29uc3QgdXBkTWlzc2lvbiA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVNaXNzaW9uKG1pc3Npb24pO1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1pc3Npb24gdXBkYXRlZFwiLCB1cGRNaXNzaW9uKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0lmQ3VycmVudFVzZXJNaXNzaW9uQ2hhbmdlZCh1cGRNaXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHVwZE1pc3Npb247XG4gICAgfVxuXG4gICAgYXN5bmMgYXNzZXJ0Um9sZUZvclVzZXJJbk9yZyhcbiAgICAgICAgdXNlcjogUHJvZmlsZSxcbiAgICAgICAgb3JnOiBPcmdhbmlzYXRpb24sXG4gICAgICAgIHJvbGU6IFJvbGVTdGF0dXMsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1pc3Npb25zRnJvbVVzZXJJRCh1c2VyLmlkKS50aGVuKChtaXNzaW9ucykgPT4ge1xuICAgICAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlzT3JnID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pcy5vcmdhbmlzYXRpb25JRCA9PT0gb3JnLmlkICYmIG1pcy5yb2xlID09PSByb2xlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtaXNPcmcubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb25CeVNwYWNlKFxuICAgICAgICBvcmRPcmdJRDogc3RyaW5nLFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbkJ5U3BhY2Uob3JkT3JnSUQsIHtcbiAgICAgICAgICAgIGVxOiBzcGFjZUlELFxuICAgICAgICB9KS50aGVuKChtaXMpID0+IG1pcy5pdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc29mdERlbGV0ZU1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcbiAgICAgICAgLy8gY29uc3QgaGFyZERlbGV0ZSA9IGF3YWl0IHRoaXMuY2FuSGFyZERldGVsZU1pc3Npb24obWlzc2lvbi5pZCk7XG4gICAgICAgIC8vIGlmIChoYXJkRGVsZXRlKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5oYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zb2xlLmxvZyhcIlNvZnQgRGVsZXRpbmcgbWlzc2lvblwiKTtcbiAgICAgICAgY29uc3QgbWlzc2lvblVwZCA9IGF3YWl0IHRoaXMudXBkYXRlKHtcbiAgICAgICAgICAgIGlkOiBtaXNzaW9uSUQsXG4gICAgICAgICAgICBkZWxldGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKG1pc3Npb25VcGQpO1xuICAgICAgICByZXR1cm4gbWlzc2lvblVwZDtcbiAgICB9XG5cbiAgICBhc3luYyBsaXN0KCk6IFByb21pc2U8TWlzc2lvbltdPiB7XG4gICAgICAgIGNvbnN0IG1pcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0TWlzc2lvbnMoKTtcbiAgICAgICAgcmV0dXJuIG1pcy5pdGVtcy5maWx0ZXIoKG0pID0+ICFtLmRlbGV0ZWRBdCk7XG4gICAgfVxuXG4gICAgLy8gYXN5bmMgY2FuSGFyZERldGVsZU1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyAgICAgY29uc3QgZXZlbnRzID0gKFxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdEV2ZW50cyh7IG93bmVySUQ6IHsgZXE6IG1pc3Npb25JRCB9IH0pXG4gICAgLy8gICAgICkuaXRlbXM7XG4gICAgLy8gICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGNvbW1lbnRzID0gKFxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdENvbW1lbnRzKHsgb3duZXJJRDogeyBlcTogbWlzc2lvbklEIH0gfSlcbiAgICAvLyAgICAgKS5pdGVtcztcbiAgICAvLyAgICAgaWYgKGNvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBhZmZlY3RhdGlvbnMgPVxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5hZmZlY3RhdGlvblNlcnZpY2UuZ2V0QWZmZWN0YXRpb25zRnJvbU1pc3Npb25JRChcbiAgICAvLyAgICAgICAgICAgICBtaXNzaW9uSUQsXG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICBpZiAoYWZmZWN0YXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9XG5cbiAgICBhc3luYyBoYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZU1pc3Npb24oeyBpZDogbWlzc2lvbklEIH0pO1xuICAgIH1cblxuICAgIGdldEFjdGl2YXRlZE1pc3Npb25zKG1pc3Npb25zOiBNaXNzaW9uW10pOiBNaXNzaW9uW10ge1xuICAgICAgICBjb25zdCBhY3RpdmF0ZWQgPSBbXTtcbiAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2YXRlZCA9XG4gICAgICAgICAgICAgICAgbWlzc2lvbi5ncm91cHMgJiYgbWlzc2lvbi5ncm91cHMuaW5jbHVkZXMoUHJvZmlsZVN0YXR1cy5BQ1RJVkUpO1xuICAgICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZhdGVkLnB1c2gobWlzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWN0aXZhdGVkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE1pc3Npb25zRm9yWm9uZSh6b25lSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbltdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlab25lKHpvbmVJRCkpLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgIChtaXMpID0+ICFtaXMuZGVsZXRlZEF0LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE1pc3Npb25zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5U3BhY2Uoc3BhY2VJRCkudGhlbigobWlzc2lvbnMpID0+IG1pc3Npb25zLml0ZW1zKTtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZU1pc3Npb24obWlzOiBNaXNzaW9uKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1pcyAmJlxuICAgICAgICAgICAgKCFtaXMuZ3JvdXBzIHx8ICFtaXMuZ3JvdXBzLmluY2x1ZGVzKFByb2ZpbGVTdGF0dXMuQUNUSVZFKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cHMgPSBtaXMuZ3JvdXBzID8gbWlzLmdyb3VwcyA6IFtdO1xuICAgICAgICAgICAgZ3JvdXBzLnB1c2goUHJvZmlsZVN0YXR1cy5BQ1RJVkUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBpZDogbWlzLmlkLCBncm91cHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5VGVtcGxhdGUodGVtcGxhdGVJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVRlbXBsYXRlKHRlbXBsYXRlSUQpKS5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAobWlzKSA9PiAhbWlzLmRlbGV0ZWRBdCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRNaXNzaW9uKG1pc3Npb25JRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0TWlzc2lvbihtaXNzaW9uSUQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE1pc3Npb25zQnlab25lQnlSb2xlKFxuICAgICAgICB6b25lSUQ6IHN0cmluZyxcbiAgICAgICAgcm9sZTogUm9sZVN0YXR1cyxcbiAgICApOiBQcm9taXNlPE1pc3Npb25bXT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlab25lQnlSb2xlKFxuICAgICAgICAgICAgICAgIHpvbmVJRCxcbiAgICAgICAgICAgICAgICB7IGVxOiByb2xlIH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB7IGRlbGV0ZWRBdDogeyBhdHRyaWJ1dGVFeGlzdHM6IGZhbHNlIH0gfSxcbiAgICAgICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICApXG4gICAgICAgICkuaXRlbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQoY2hhbmdlZE1pc3Npb246IE1pc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXJJRCA9PT0gY2hhbmdlZE1pc3Npb24udXNlcklEKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaXNzaW9uc1VwZGF0ZWQubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGluc3RhbnRNaXNzaW9uc09mQ3VycmVudChcbiAgICAgICAgY3VycmVudFVzZXJJRDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8TWlzc2lvbltdIHwgbnVsbD4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VySUQgPSBjdXJyZW50VXNlcklEO1xuICAgICAgICBsZXQgbWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldE1pc3Npb25zRnJvbVVzZXJJRChjdXJyZW50VXNlcklEKTtcblxuICAgICAgICAvKiogRmlsdGVyIHRvIGtlZXAgb25seSBhdmFpbGFibGUgbWlzc2lvbnMgKi9cbiAgICAgICAgbWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0V4cGlyZWQgPSBkYXRlSGFzRXhwaXJlZChtaXNzaW9uLmVuZERhdGVUaW1lKTtcblxuICAgICAgICAgICAgLyoqIFVwZGF0ZSB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbiAqL1xuICAgICAgICAgICAgaWYgKGhhc0V4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXhwaXJlZERhdGUgPSB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvblxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uLmVuZERhdGVUaW1lKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUV4cGlyZWQgPSBuZXcgRGF0ZShtaXNzaW9uLmVuZERhdGVUaW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RFeHBpcmVkRGF0ZSB8fCBkYXRlRXhwaXJlZCA+IGxhc3RFeHBpcmVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbiA9IG1pc3Npb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICFoYXNFeHBpcmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWlzc2lvbnMuc29tZSgobWlzKSA9PiBtaXMucm9sZSA9PT0gUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTSkgJiYgbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gd29ya2Zsb3cgZm9yIFZJU0lUT1JfTVVTRVVNXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgLyoqIEtlZXAgb25seSBzdGFydGVkIG1pc3Npb25zICovXG4gICAgICAgIGxldCBuZXh0TWlzc2lvbkRhdGUgPSBudWxsO1xuICAgICAgICBtaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcigobWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRlZCA9IG1pc3Npb24uc3RhcnREYXRlVGltZVxuICAgICAgICAgICAgICAgID8gZGF0ZUhhc0V4cGlyZWQobWlzc2lvbi5zdGFydERhdGVUaW1lKVxuICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIC8qKiBVcGRhdGUgbmV4dCBtaXNzaW9uIHRvIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaXNzaW9uRGF0ZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0TWlzc2lvbkRhdGUgfHwgbWlzc2lvbkRhdGUgPCBuZXh0TWlzc2lvbkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TWlzc2lvblRvU3RhcnQgPSBtaXNzaW9uO1xuICAgICAgICAgICAgICAgICAgICBuZXh0TWlzc2lvbkRhdGUgPSBtaXNzaW9uRGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5sZW5ndGggPiAwID8gbWlzc2lvbnMgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhlIG1pc3Npb25zIHRoYXQgYXNzaXN0ZWQgdG8gbGl2ZSBvZiB0aGUgdmlzaXQgKGJ5IGNvbXBhcmluZyB0aGUgcmVhbFN0YXJ0VGltZSBvZiBWaXNpdFRlbXBsYXRlIGFuZCBjb25uZWN0ZWRBdCB0aW1lKVxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSBWaXNpdFRlbXBsYXRlIFxuICAgICAqIEBwYXJhbSBtaXNzaW9ucyBNaXNzaW9uW10gbWlzc2lvbnMgZm9yIHRoaXMgdmlzaXRcbiAgICAgKiBAcmV0dXJucyBNaXNzaW9uW10gZmlsdGVyZWQgbWlzc2lvbnNcbiAgICAgKi9cbiAgICBmaWx0ZXJNaXNzaW9uc0Fzc2l0ZWRUb0xpdmVGb3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVmlzaXRUZW1wbGF0ZSwgbWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XG4gICAgICAgIGNvbnN0IHZpc2l0U3RhcnRUaW1lc3RhbXAgPSB0ZW1wbGF0ZS5yZWFsU3RhcnRlZEF0O1xuICAgICAgICByZXR1cm4gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcbiAgICAgICAgICAgIGlmICghbWlzLmNvbm5lY3RlZFRvTGl2ZUF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pcy5jb25uZWN0ZWRUb0xpdmVBdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29ubmVjdGVkQXQgPSBtaXMuY29ubmVjdGVkVG9MaXZlQXRbbWlzLmNvbm5lY3RlZFRvTGl2ZUF0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgbGFzdENvbm5lY3RlZEF0VGltZXN0YW1wID0gRGF0ZVRpbWUuZnJvbUlTTyhsYXN0Q29ubmVjdGVkQXQpLnRvTWlsbGlzKCk7XG4gICAgICAgICAgICByZXR1cm4gbGFzdENvbm5lY3RlZEF0VGltZXN0YW1wID4gdmlzaXRTdGFydFRpbWVzdGFtcDtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
1
|
+
/* eslint-disable class-methods-use-this */
|
|
2
|
+
import { Inject, Injectable } from "@angular/core";
|
|
3
|
+
import { Subject } from "rxjs";
|
|
4
|
+
import { dateHasExpired } from "../../helpers.service";
|
|
5
|
+
import { ProfileStatus, RoleStatus } from "../../types.service";
|
|
6
|
+
import { DateTime } from "luxon";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class MissionService {
|
|
9
|
+
constructor(
|
|
10
|
+
// private affectationService: AffectationService,
|
|
11
|
+
apiInjected) {
|
|
12
|
+
this.currentMissionsUpdated = new Subject();
|
|
13
|
+
this.API = apiInjected;
|
|
14
|
+
}
|
|
15
|
+
async getMissionsFromUserID(userID) {
|
|
16
|
+
return this.API.__proto__.MissionsByUser(userID).then((missions) => {
|
|
17
|
+
return missions.items.filter((mis) => !mis.deletedAt);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async getMissionsByOrderedOrganisation(orderedOrgID) {
|
|
21
|
+
return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then((response) => response.items);
|
|
22
|
+
}
|
|
23
|
+
async getMissionsByOrganisation(orgID) {
|
|
24
|
+
return this.API.__proto__.MissionsByOrganisation(orgID).then((response) => response.items);
|
|
25
|
+
}
|
|
26
|
+
async create(mission) {
|
|
27
|
+
const updMission = await this.API.__proto__.CreateMission(mission);
|
|
28
|
+
console.log("Mission created", updMission);
|
|
29
|
+
await this.checkIfCurrentUserMissionChanged(updMission);
|
|
30
|
+
return updMission;
|
|
31
|
+
}
|
|
32
|
+
async update(mission) {
|
|
33
|
+
const updMission = await this.API.__proto__.UpdateMission(mission);
|
|
34
|
+
console.log("Mission updated", updMission);
|
|
35
|
+
await this.checkIfCurrentUserMissionChanged(updMission);
|
|
36
|
+
return updMission;
|
|
37
|
+
}
|
|
38
|
+
async assertRoleForUserInOrg(user, org, role) {
|
|
39
|
+
return this.getMissionsFromUserID(user.id).then((missions) => {
|
|
40
|
+
if (missions) {
|
|
41
|
+
const misOrg = missions.filter((mis) => {
|
|
42
|
+
return mis.organisationID === org.id && mis.role === role;
|
|
43
|
+
});
|
|
44
|
+
return misOrg.length > 0;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async getMissionsByOrderedOrganisationBySpace(ordOrgID, spaceID) {
|
|
50
|
+
return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {
|
|
51
|
+
eq: spaceID,
|
|
52
|
+
}).then((mis) => mis.items);
|
|
53
|
+
}
|
|
54
|
+
async softDeleteMission(missionID) {
|
|
55
|
+
// const hardDelete = await this.canHardDeteleMission(mission.id);
|
|
56
|
+
// if (hardDelete) {
|
|
57
|
+
// return this.hardDeleteMission(mission.id);
|
|
58
|
+
// }
|
|
59
|
+
console.log("Soft Deleting mission");
|
|
60
|
+
const missionUpd = await this.update({
|
|
61
|
+
id: missionID,
|
|
62
|
+
deletedAt: Date.now(),
|
|
63
|
+
});
|
|
64
|
+
await this.checkIfCurrentUserMissionChanged(missionUpd);
|
|
65
|
+
return missionUpd;
|
|
66
|
+
}
|
|
67
|
+
async list() {
|
|
68
|
+
const mis = await this.API.__proto__.ListMissions();
|
|
69
|
+
return mis.items.filter((m) => !m.deletedAt);
|
|
70
|
+
}
|
|
71
|
+
// async canHardDeteleMission(missionID: string): Promise<boolean> {
|
|
72
|
+
// const events = (
|
|
73
|
+
// await this.API.ListEvents({ ownerID: { eq: missionID } })
|
|
74
|
+
// ).items;
|
|
75
|
+
// if (events.length > 0) {
|
|
76
|
+
// return false;
|
|
77
|
+
// }
|
|
78
|
+
// const comments = (
|
|
79
|
+
// await this.API.ListComments({ ownerID: { eq: missionID } })
|
|
80
|
+
// ).items;
|
|
81
|
+
// if (comments.length > 0) {
|
|
82
|
+
// return false;
|
|
83
|
+
// }
|
|
84
|
+
// const affectations =
|
|
85
|
+
// await this.affectationService.getAffectationsFromMissionID(
|
|
86
|
+
// missionID,
|
|
87
|
+
// );
|
|
88
|
+
// if (affectations.length > 0) {
|
|
89
|
+
// return false;
|
|
90
|
+
// }
|
|
91
|
+
// return true;
|
|
92
|
+
// }
|
|
93
|
+
async hardDeleteMission(missionID) {
|
|
94
|
+
return this.API.__proto__.DeleteMission({ id: missionID });
|
|
95
|
+
}
|
|
96
|
+
getActivatedMissions(missions) {
|
|
97
|
+
const activated = [];
|
|
98
|
+
missions.map(async (mission) => {
|
|
99
|
+
const isActivated = mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);
|
|
100
|
+
if (isActivated) {
|
|
101
|
+
activated.push(mission);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return activated;
|
|
105
|
+
}
|
|
106
|
+
async getMissionsForZone(zoneID) {
|
|
107
|
+
return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter((mis) => !mis.deletedAt);
|
|
108
|
+
}
|
|
109
|
+
async getMissionsForSpace(spaceID) {
|
|
110
|
+
return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items);
|
|
111
|
+
}
|
|
112
|
+
activateMission(mis) {
|
|
113
|
+
if (mis &&
|
|
114
|
+
(!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))) {
|
|
115
|
+
const groups = mis.groups ? mis.groups : [];
|
|
116
|
+
groups.push(ProfileStatus.ACTIVE);
|
|
117
|
+
this.update({ id: mis.id, groups });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async getMissionsByTemplate(templateID) {
|
|
121
|
+
return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter((mis) => !mis.deletedAt);
|
|
122
|
+
}
|
|
123
|
+
async getMission(missionID) {
|
|
124
|
+
return this.API.__proto__.GetMission(missionID);
|
|
125
|
+
}
|
|
126
|
+
async getMissionsByZoneByRole(zoneID, role) {
|
|
127
|
+
return (await this.API.__proto__.MissionsByZoneByRole(zoneID, { eq: role }, null, { deletedAt: { attributeExists: false } }, 200)).items;
|
|
128
|
+
}
|
|
129
|
+
async checkIfCurrentUserMissionChanged(changedMission) {
|
|
130
|
+
if (this.currentUserID === changedMission.userID) {
|
|
131
|
+
this.currentMissionsUpdated.next(true);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async instantMissionsOfCurrent(currentUserID) {
|
|
135
|
+
this.currentUserID = currentUserID;
|
|
136
|
+
let missions = await this.getMissionsFromUserID(currentUserID);
|
|
137
|
+
/** Filter to keep only available missions */
|
|
138
|
+
missions = missions.filter((mission) => {
|
|
139
|
+
const hasExpired = dateHasExpired(mission.endDateTime);
|
|
140
|
+
/** Update this.lastExpiredMission */
|
|
141
|
+
if (hasExpired) {
|
|
142
|
+
const lastExpiredDate = this.lastExpiredMission
|
|
143
|
+
? new Date(this.lastExpiredMission.endDateTime)
|
|
144
|
+
: null;
|
|
145
|
+
const dateExpired = new Date(mission.endDateTime);
|
|
146
|
+
if (!lastExpiredDate || dateExpired > lastExpiredDate) {
|
|
147
|
+
this.lastExpiredMission = mission;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return !hasExpired;
|
|
151
|
+
});
|
|
152
|
+
if (missions.some((mis) => mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {
|
|
153
|
+
// workflow for VISITOR_MUSEUM
|
|
154
|
+
return missions;
|
|
155
|
+
}
|
|
156
|
+
/** Keep only started missions */
|
|
157
|
+
let nextMissionDate = null;
|
|
158
|
+
missions = missions.filter((mission) => {
|
|
159
|
+
const started = mission.startDateTime
|
|
160
|
+
? dateHasExpired(mission.startDateTime)
|
|
161
|
+
: true;
|
|
162
|
+
/** Update next mission to start */
|
|
163
|
+
if (!started) {
|
|
164
|
+
const missionDate = new Date(mission.startDateTime);
|
|
165
|
+
if (!nextMissionDate || missionDate < nextMissionDate) {
|
|
166
|
+
this.nextMissionToStart = mission;
|
|
167
|
+
nextMissionDate = missionDate;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return started;
|
|
171
|
+
});
|
|
172
|
+
return missions.length > 0 ? missions : null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)
|
|
176
|
+
* @param template VisitTemplate
|
|
177
|
+
* @param missions Mission[] missions for this visit
|
|
178
|
+
* @returns Mission[] filtered missions
|
|
179
|
+
*/
|
|
180
|
+
filterMissionsAssitedToLiveForTemplate(template, missions) {
|
|
181
|
+
const visitStartTimestamp = template.realStartedAt;
|
|
182
|
+
return missions.filter((mis) => {
|
|
183
|
+
if (!mis.connectedToLiveAt) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if (mis.connectedToLiveAt.length === 0) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];
|
|
190
|
+
const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();
|
|
191
|
+
return lastConnectedAtTimestamp > visitStartTimestamp;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
MissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, deps: [{ token: 'currentAPIService' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
+
MissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, providedIn: "root" });
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, decorators: [{
|
|
198
|
+
type: Injectable,
|
|
199
|
+
args: [{
|
|
200
|
+
providedIn: "root",
|
|
201
|
+
}]
|
|
202
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
203
|
+
type: Inject,
|
|
204
|
+
args: ['currentAPIService']
|
|
205
|
+
}] }]; } });
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLGFBQWEsRUFBRSxVQUFVLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDL0csT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFLakMsTUFBTSxPQUFPLGNBQWM7SUFXdkI7SUFDSSxrREFBa0Q7SUFDckIsV0FBZ0I7UUFaakQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQWM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQWM7UUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxZQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDZCQUE2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QUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQ0FBc0MsQ0FBQyxRQUF1QixFQUFFLFFBQW1CO1FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO2dCQUN4QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlFLE9BQU8sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzsyR0E1UFEsY0FBYyxrQkFhWCxtQkFBbUI7K0dBYnRCLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFjUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRhdGVIYXNFeHBpcmVkIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNaXNzaW9uLCBPcmdhbmlzYXRpb24sIFByb2ZpbGUsIFByb2ZpbGVTdGF0dXMsIFJvbGVTdGF0dXMsIFZpc2l0VGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNaXNzaW9uU2VydmljZSB7XHJcbiAgICBjdXJyZW50TWlzc2lvbnNVcGRhdGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBsYXN0RXhwaXJlZE1pc3Npb246IE1pc3Npb247XHJcblxyXG4gICAgbmV4dE1pc3Npb25Ub1N0YXJ0OiBNaXNzaW9uO1xyXG5cclxuICAgIGN1cnJlbnRVc2VySUQ6IHN0cmluZztcclxuXHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBwcml2YXRlIGFmZmVjdGF0aW9uU2VydmljZTogQWZmZWN0YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0Zyb21Vc2VySUQodXNlcklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVVzZXIodXNlcklEKS50aGVuKChtaXNzaW9ucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnMuaXRlbXMuZmlsdGVyKChtaXMpID0+ICFtaXMuZGVsZXRlZEF0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICBvcmRlcmVkT3JnSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8TWlzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihvcmRlcmVkT3JnSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmdJRCkudGhlbihcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZShtaXNzaW9uOiBNaXNzaW9uKTogUHJvbWlzZTxNaXNzaW9uPiB7XHJcbiAgICAgICAgY29uc3QgdXBkTWlzc2lvbiA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVNaXNzaW9uKG1pc3Npb24pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWlzc2lvbiBjcmVhdGVkXCIsIHVwZE1pc3Npb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQodXBkTWlzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHVwZE1pc3Npb247XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlKG1pc3Npb246IGFueSk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIGNvbnN0IHVwZE1pc3Npb24gPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlTWlzc2lvbihtaXNzaW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1pc3Npb24gdXBkYXRlZFwiLCB1cGRNaXNzaW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKHVwZE1pc3Npb24pO1xyXG4gICAgICAgIHJldHVybiB1cGRNaXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFzc2VydFJvbGVGb3JVc2VySW5PcmcoXHJcbiAgICAgICAgdXNlcjogUHJvZmlsZSxcclxuICAgICAgICBvcmc6IE9yZ2FuaXNhdGlvbixcclxuICAgICAgICByb2xlOiBSb2xlU3RhdHVzLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKHVzZXIuaWQpLnRoZW4oKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlzT3JnID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlzLm9yZ2FuaXNhdGlvbklEID09PSBvcmcuaWQgJiYgbWlzLnJvbGUgPT09IHJvbGU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNPcmcubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb25CeVNwYWNlKFxyXG4gICAgICAgIG9yZE9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uQnlTcGFjZShvcmRPcmdJRCwge1xyXG4gICAgICAgICAgICBlcTogc3BhY2VJRCxcclxuICAgICAgICB9KS50aGVuKChtaXMpID0+IG1pcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc29mdERlbGV0ZU1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICAvLyBjb25zdCBoYXJkRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyBpZiAoaGFyZERlbGV0ZSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5oYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTb2Z0IERlbGV0aW5nIG1pc3Npb25cIik7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvblVwZCA9IGF3YWl0IHRoaXMudXBkYXRlKHtcclxuICAgICAgICAgICAgaWQ6IG1pc3Npb25JRCxcclxuICAgICAgICAgICAgZGVsZXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQobWlzc2lvblVwZCk7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25VcGQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIGNvbnN0IG1pcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0TWlzc2lvbnMoKTtcclxuICAgICAgICByZXR1cm4gbWlzLml0ZW1zLmZpbHRlcigobSkgPT4gIW0uZGVsZXRlZEF0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3luYyBjYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gICAgIGNvbnN0IGV2ZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdEV2ZW50cyh7IG93bmVySUQ6IHsgZXE6IG1pc3Npb25JRCB9IH0pXHJcbiAgICAvLyAgICAgKS5pdGVtcztcclxuICAgIC8vICAgICBpZiAoZXZlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBjb25zdCBjb21tZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdENvbW1lbnRzKHsgb3duZXJJRDogeyBlcTogbWlzc2lvbklEIH0gfSlcclxuICAgIC8vICAgICApLml0ZW1zO1xyXG4gICAgLy8gICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3QgYWZmZWN0YXRpb25zID1cclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5hZmZlY3RhdGlvblNlcnZpY2UuZ2V0QWZmZWN0YXRpb25zRnJvbU1pc3Npb25JRChcclxuICAgIC8vICAgICAgICAgICAgIG1pc3Npb25JRCxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICBpZiAoYWZmZWN0YXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBhc3luYyBoYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTWlzc2lvbih7IGlkOiBtaXNzaW9uSUQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aXZhdGVkTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkID0gW107XHJcbiAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZhdGVkID1cclxuICAgICAgICAgICAgICAgIG1pc3Npb24uZ3JvdXBzICYmIG1pc3Npb24uZ3JvdXBzLmluY2x1ZGVzKFByb2ZpbGVTdGF0dXMuQUNUSVZFKTtcclxuICAgICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWQucHVzaChtaXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhY3RpdmF0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5Wm9uZSh6b25lSUQpKS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+ICFtaXMuZGVsZXRlZEF0LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oKG1pc3Npb25zKSA9PiBtaXNzaW9ucy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aXZhdGVNaXNzaW9uKG1pczogTWlzc2lvbikge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbWlzICYmXHJcbiAgICAgICAgICAgICghbWlzLmdyb3VwcyB8fCAhbWlzLmdyb3Vwcy5pbmNsdWRlcyhQcm9maWxlU3RhdHVzLkFDVElWRSkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IG1pcy5ncm91cHMgPyBtaXMuZ3JvdXBzIDogW107XHJcbiAgICAgICAgICAgIGdyb3Vwcy5wdXNoKFByb2ZpbGVTdGF0dXMuQUNUSVZFKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBpZDogbWlzLmlkLCBncm91cHMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1pc3Npb25zQnlUZW1wbGF0ZSh0ZW1wbGF0ZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlUZW1wbGF0ZSh0ZW1wbGF0ZUlEKSkuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobWlzKSA9PiAhbWlzLmRlbGV0ZWRBdCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldE1pc3Npb24obWlzc2lvbklEKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5Wm9uZUJ5Um9sZShcclxuICAgICAgICB6b25lSUQ6IHN0cmluZyxcclxuICAgICAgICByb2xlOiBSb2xlU3RhdHVzLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVpvbmVCeVJvbGUoXHJcbiAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICB7IGVxOiByb2xlIH0sXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgeyBkZWxldGVkQXQ6IHsgYXR0cmlidXRlRXhpc3RzOiBmYWxzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAyMDAsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLml0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKGNoYW5nZWRNaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXJJRCA9PT0gY2hhbmdlZE1pc3Npb24udXNlcklEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zVXBkYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnN0YW50TWlzc2lvbnNPZkN1cnJlbnQoXHJcbiAgICAgICAgY3VycmVudFVzZXJJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10gfCBudWxsPiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlcklEID0gY3VycmVudFVzZXJJRDtcclxuICAgICAgICBsZXQgbWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldE1pc3Npb25zRnJvbVVzZXJJRChjdXJyZW50VXNlcklEKTtcclxuXHJcbiAgICAgICAgLyoqIEZpbHRlciB0byBrZWVwIG9ubHkgYXZhaWxhYmxlIG1pc3Npb25zICovXHJcbiAgICAgICAgbWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzRXhwaXJlZCA9IGRhdGVIYXNFeHBpcmVkKG1pc3Npb24uZW5kRGF0ZVRpbWUpO1xyXG5cclxuICAgICAgICAgICAgLyoqIFVwZGF0ZSB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbiAqL1xyXG4gICAgICAgICAgICBpZiAoaGFzRXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEV4cGlyZWREYXRlID0gdGhpcy5sYXN0RXhwaXJlZE1pc3Npb25cclxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uLmVuZERhdGVUaW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVFeHBpcmVkID0gbmV3IERhdGUobWlzc2lvbi5lbmREYXRlVGltZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RFeHBpcmVkRGF0ZSB8fCBkYXRlRXhwaXJlZCA+IGxhc3RFeHBpcmVkRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uID0gbWlzc2lvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gIWhhc0V4cGlyZWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChtaXNzaW9ucy5zb21lKChtaXMpID0+IG1pcy5yb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNKSAmJiBtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdvcmtmbG93IGZvciBWSVNJVE9SX01VU0VVTVxyXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKiBLZWVwIG9ubHkgc3RhcnRlZCBtaXNzaW9ucyAqL1xyXG4gICAgICAgIGxldCBuZXh0TWlzc2lvbkRhdGUgPSBudWxsO1xyXG4gICAgICAgIG1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBtaXNzaW9uLnN0YXJ0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gZGF0ZUhhc0V4cGlyZWQobWlzc2lvbi5zdGFydERhdGVUaW1lKVxyXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICAvKiogVXBkYXRlIG5leHQgbWlzc2lvbiB0byBzdGFydCAqL1xyXG4gICAgICAgICAgICBpZiAoIXN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25EYXRlID0gbmV3IERhdGUobWlzc2lvbi5zdGFydERhdGVUaW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICghbmV4dE1pc3Npb25EYXRlIHx8IG1pc3Npb25EYXRlIDwgbmV4dE1pc3Npb25EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TWlzc2lvblRvU3RhcnQgPSBtaXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRNaXNzaW9uRGF0ZSA9IG1pc3Npb25EYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydGVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5sZW5ndGggPiAwID8gbWlzc2lvbnMgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsdGVycyB0aGUgbWlzc2lvbnMgdGhhdCBhc3Npc3RlZCB0byBsaXZlIG9mIHRoZSB2aXNpdCAoYnkgY29tcGFyaW5nIHRoZSByZWFsU3RhcnRUaW1lIG9mIFZpc2l0VGVtcGxhdGUgYW5kIGNvbm5lY3RlZEF0IHRpbWUpXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUgVmlzaXRUZW1wbGF0ZSBcclxuICAgICAqIEBwYXJhbSBtaXNzaW9ucyBNaXNzaW9uW10gbWlzc2lvbnMgZm9yIHRoaXMgdmlzaXRcclxuICAgICAqIEByZXR1cm5zIE1pc3Npb25bXSBmaWx0ZXJlZCBtaXNzaW9uc1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJNaXNzaW9uc0Fzc2l0ZWRUb0xpdmVGb3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVmlzaXRUZW1wbGF0ZSwgbWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgY29uc3QgdmlzaXRTdGFydFRpbWVzdGFtcCA9IHRlbXBsYXRlLnJlYWxTdGFydGVkQXQ7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmZpbHRlcigobWlzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbWlzLmNvbm5lY3RlZFRvTGl2ZUF0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pcy5jb25uZWN0ZWRUb0xpdmVBdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsYXN0Q29ubmVjdGVkQXQgPSBtaXMuY29ubmVjdGVkVG9MaXZlQXRbbWlzLmNvbm5lY3RlZFRvTGl2ZUF0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0Q29ubmVjdGVkQXRUaW1lc3RhbXAgPSBEYXRlVGltZS5mcm9tSVNPKGxhc3RDb25uZWN0ZWRBdCkudG9NaWxsaXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3RDb25uZWN0ZWRBdFRpbWVzdGFtcCA+IHZpc2l0U3RhcnRUaW1lc3RhbXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|