@posiwise/admin-module 0.0.180 → 0.0.181
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/fesm2022/posiwise-admin-module.mjs +463 -441
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/index.mjs +0 -87
- package/esm2022/lib/admin-guard.service.mjs +0 -44
- package/esm2022/lib/admin-module.routing.mjs +0 -919
- package/esm2022/lib/admin.module.mjs +0 -485
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
- package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
- package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
- package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
- package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
- package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
- package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
- package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
- package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
- package/esm2022/lib/shared/routers/routers.mjs +0 -40
- package/esm2022/posiwise-admin-module.mjs +0 -5
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, Injector } from '@angular/core';
|
|
2
|
-
import { AdminDataService } from '@posiwise/admin-module-utils';
|
|
3
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
-
import { AhoyService, PermissionService } from '@posiwise/common-services';
|
|
5
|
-
import { PAGE_SIZE } from '@posiwise/common-utilities';
|
|
6
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@posiwise/common-services";
|
|
9
|
-
import * as i2 from "@posiwise/admin-module-utils";
|
|
10
|
-
import * as i3 from "primeng/table";
|
|
11
|
-
import * as i4 from "primeng/api";
|
|
12
|
-
import * as i5 from "primeng/dropdown";
|
|
13
|
-
import * as i6 from "primeng/multiselect";
|
|
14
|
-
import * as i7 from "primeng/inputtext";
|
|
15
|
-
import * as i8 from "primeng/calendar";
|
|
16
|
-
import * as i9 from "@ng-bootstrap/ng-bootstrap";
|
|
17
|
-
import * as i10 from "@angular/common";
|
|
18
|
-
import * as i11 from "@angular/forms";
|
|
19
|
-
import * as i12 from "@angular/router";
|
|
20
|
-
import * as i13 from "primeng/progressspinner";
|
|
21
|
-
import * as i14 from "@posiwise/shared-components";
|
|
22
|
-
import * as i15 from "@posiwise/directives";
|
|
23
|
-
import * as i16 from "@jsverse/transloco";
|
|
24
|
-
import * as i17 from "@posiwise/pipes";
|
|
25
|
-
export class AhoyVisitsComponent extends AppBaseComponent {
|
|
26
|
-
constructor(injector, ahoyService, adminDataService, cdr) {
|
|
27
|
-
super(injector);
|
|
28
|
-
this.ahoyService = ahoyService;
|
|
29
|
-
this.adminDataService = adminDataService;
|
|
30
|
-
this.cdr = cdr;
|
|
31
|
-
this.page = 1;
|
|
32
|
-
this.userPage = 1;
|
|
33
|
-
this.stopLoading = false;
|
|
34
|
-
this.data = {
|
|
35
|
-
visits: [],
|
|
36
|
-
object_count: 0,
|
|
37
|
-
unfiltered_count: 0
|
|
38
|
-
};
|
|
39
|
-
this.loading = true;
|
|
40
|
-
this.isLoaded = false;
|
|
41
|
-
this.userLoading = false;
|
|
42
|
-
this.searchText = '';
|
|
43
|
-
this.userSearchText = '';
|
|
44
|
-
this.microServices = [];
|
|
45
|
-
this.selectedOption = [];
|
|
46
|
-
this.criteria = [];
|
|
47
|
-
this.searchOptions = [];
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
this.subscriptionId = PermissionService.selectedSubscription?.id;
|
|
51
|
-
this.microServices = HelperService.getMicroServices(this.appConfig.links);
|
|
52
|
-
this.loadUser();
|
|
53
|
-
}
|
|
54
|
-
ngAfterViewChecked() {
|
|
55
|
-
this.cdr.detectChanges();
|
|
56
|
-
}
|
|
57
|
-
onLazyLoad(event) {
|
|
58
|
-
const pageDetails = HelperService.onTableLazyLoad(event);
|
|
59
|
-
this.page = pageDetails.page;
|
|
60
|
-
this.getAhoyVisits({
|
|
61
|
-
page: this.page,
|
|
62
|
-
page_size: PAGE_SIZE,
|
|
63
|
-
order_by: pageDetails.sortField,
|
|
64
|
-
order_direction: pageDetails.sortOrder,
|
|
65
|
-
search: this.searchText
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
onPanelShow() {
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
const multiSelectPanelWrapper = document.querySelector('.p-multiselect-items-wrapper');
|
|
71
|
-
if (multiSelectPanelWrapper) {
|
|
72
|
-
if (this.scrollListener) {
|
|
73
|
-
multiSelectPanelWrapper.removeEventListener('scroll', this.scrollListener);
|
|
74
|
-
}
|
|
75
|
-
this.scrollListener = this.onScroll.bind(this);
|
|
76
|
-
multiSelectPanelWrapper.addEventListener('scroll', this.scrollListener);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.log('MultiSelect panel not found.');
|
|
80
|
-
}
|
|
81
|
-
}, 0);
|
|
82
|
-
}
|
|
83
|
-
onScroll(event) {
|
|
84
|
-
const element = event.target;
|
|
85
|
-
if (element.scrollHeight - element.scrollTop === element.clientHeight) {
|
|
86
|
-
this.loadUser();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
loadUser() {
|
|
90
|
-
if (this.stopLoading || this.userSearchText !== '') {
|
|
91
|
-
this.userLoading = false;
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
this.userLoading = true;
|
|
95
|
-
this.adminDataService
|
|
96
|
-
.getUsers({
|
|
97
|
-
page: this.userPage,
|
|
98
|
-
page_size: PAGE_SIZE,
|
|
99
|
-
search: this.userSearchText
|
|
100
|
-
}, this.subscriptionId)
|
|
101
|
-
.then(result => {
|
|
102
|
-
this.userLoading = false;
|
|
103
|
-
if (result.length === 0) {
|
|
104
|
-
this.stopLoading = true;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
const validResults = result.filter(user => user.value && user.label);
|
|
108
|
-
this.searchOptions = [...this.searchOptions, ...validResults];
|
|
109
|
-
this.userPage++;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
getAhoyVisits(paging) {
|
|
114
|
-
this.isLoaded = false;
|
|
115
|
-
const service = this.microServices.find(x => x.name === this.selectedMicroService) ??
|
|
116
|
-
this.microServices.find(x => x.value === this.appConfig.links?.main_api);
|
|
117
|
-
const obj = {
|
|
118
|
-
...paging,
|
|
119
|
-
...(this.startDate && this.endDate
|
|
120
|
-
? {
|
|
121
|
-
start_at: new Date(this.startDate).toISOString(),
|
|
122
|
-
end_at: new Date(this.endDate).toISOString()
|
|
123
|
-
}
|
|
124
|
-
: {}),
|
|
125
|
-
search: this.searchText || '',
|
|
126
|
-
user_ids: this.selectedOption?.join(',') || undefined
|
|
127
|
-
// NOSONAR
|
|
128
|
-
};
|
|
129
|
-
Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key]);
|
|
130
|
-
this.ahoyService
|
|
131
|
-
.getAhoyVisits(obj, service, paging)
|
|
132
|
-
.subscribe((response) => {
|
|
133
|
-
this.data = response;
|
|
134
|
-
})
|
|
135
|
-
.add(() => {
|
|
136
|
-
this.loading = false;
|
|
137
|
-
this.isLoaded = true;
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
onDateSelection() {
|
|
141
|
-
if (this.startDate && this.endDate) {
|
|
142
|
-
this.getAhoyVisits({
|
|
143
|
-
page: this.page,
|
|
144
|
-
page_size: PAGE_SIZE
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
onServiceChange(value) {
|
|
149
|
-
this.selectedMicroService = value;
|
|
150
|
-
this.getAhoyVisits({ page: this.page, page_size: PAGE_SIZE });
|
|
151
|
-
}
|
|
152
|
-
onSearchOptionChange($event) {
|
|
153
|
-
this.criteria = [];
|
|
154
|
-
this.selectedOption = $event.value;
|
|
155
|
-
this.getAhoyVisits({
|
|
156
|
-
page: this.page,
|
|
157
|
-
page_size: PAGE_SIZE
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
handleFilter($event) {
|
|
161
|
-
this.userSearchText = $event.filter;
|
|
162
|
-
this.stopLoading = false;
|
|
163
|
-
this.userPage = 1;
|
|
164
|
-
this.adminDataService
|
|
165
|
-
.getUsers({
|
|
166
|
-
page: this.userPage,
|
|
167
|
-
page_size: PAGE_SIZE,
|
|
168
|
-
search: this.userSearchText
|
|
169
|
-
}, this.subscriptionId)
|
|
170
|
-
.then(result => {
|
|
171
|
-
const newUsers = result.filter(user => user.value &&
|
|
172
|
-
user.label &&
|
|
173
|
-
!this.selectedOption.some(selected => selected.value === user.value));
|
|
174
|
-
newUsers.forEach(user => {
|
|
175
|
-
const index = this.searchOptions.findIndex(existing => existing.value === user.value);
|
|
176
|
-
if (index !== -1) {
|
|
177
|
-
console.log('Removing user');
|
|
178
|
-
this.searchOptions.splice(index, 1);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
this.searchOptions = [...this.searchOptions, ...newUsers];
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
ngOnDestroy() {
|
|
185
|
-
super.ngOnDestroy();
|
|
186
|
-
const multiVisitSelectPanel = HelperService.getMultiSelectPanel();
|
|
187
|
-
if (multiVisitSelectPanel && this.scrollListener) {
|
|
188
|
-
multiVisitSelectPanel.removeEventListener('scroll', this.scrollListener);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AhoyVisitsComponent, deps: [{ token: i0.Injector }, { token: i1.AhoyService }, { token: i2.AdminDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
192
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AhoyVisitsComponent, selector: "pw-ahoy-visits", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Ahoy Visits</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.visits\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"'started_at'\"\n [sortOrder]=\"-1\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <p-dropdown\n [options]=\"microServices\"\n (onChange)=\"onServiceChange($event.value)\"\n [placeholder]=\"'Select Service'\"\n optionLabel=\"name\"\n optionValue=\"name\">\n </p-dropdown>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect #multiSelector [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n [lazy]=\"true\"\n (scroll)=\"onScroll($event)\"\n (onPanelShow)=\"onPanelShow()\"\n [loading]=\"userLoading\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"yy-M-dd\"\n >\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"yy-M-dd\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search Visits...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"browser\">\n {{ 'Admin.Tracking.Browser' | transloco }}\n <p-sortIcon field=\"browser\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"device_type\">\n {{ 'Admin.Tracking.DeviceType' | transloco }}\n <p-sortIcon field=\"device_type\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"ip\">\n {{ 'Admin.Tracking.Ip' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"referring_domain\">\n {{ 'Admin.Tracking.Domain' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"landing_page\">\n {{ 'Admin.Tracking.LandingPage' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"country\">\n {{ 'Admin.Tracking.Country' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"region\">\n {{ 'Admin.Tracking.Region' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"city\">\n {{ 'Admin.Tracking.City' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"os\">\n {{ 'Admin.Tracking.Os' | transloco }}\n <p-sortIcon field=\"os\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.User' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"started_at\">\n {{ 'Admin.Tracking.StartedAt' | transloco }}\n <p-sortIcon field=\"started_at\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-visits>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Browser\">{{ visits.browser }}</td>\n <td data-head=\"Device Type\">{{ visits.device_type }}</td>\n <td data-head=\"IP\">{{ visits.ip }}</td>\n <td data-head=\"referring_domain\">\n <span [ngbTooltip]=\"visits.referring_domain\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.referring_domain | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"landing_page\">\n <span [ngbTooltip]=\"visits.landing_page\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.landing_page | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"country\">\n <span [ngbTooltip]=\"visits.country\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.country | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"region\">\n <span [ngbTooltip]=\"visits.region\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.region | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"city\">\n <span [ngbTooltip]=\"visits.city\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.city | textTruncate: 20 }}\n </span></td>\n <td data-head=\"OS\">{{ visits.os }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"visits?.user_id\">\n <span *ngIf=\"visits?.user\"><a [routerLink]=\"['/members', visits?.user?.slug]\">{{ visits?.user?.first_name }} {{ visits?.user?.last_name }}</a></span>\n <span *ngIf=\"!visits?.user\">{{ visits?.user_id }}</span>\n </span>\n </td>\n <td data-head=\"Started At\">{{ visits.started_at | dateFormat : 'datetime' }}</td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoVistitsDataMessage' | transloco\"> </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.table-responsive td,.table-responsive th{font-size:11px!important}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i8.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i15.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i17.TextTruncatePipe, name: "textTruncate" }] }); }
|
|
193
|
-
}
|
|
194
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AhoyVisitsComponent, decorators: [{
|
|
195
|
-
type: Component,
|
|
196
|
-
args: [{ selector: 'pw-ahoy-visits', template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Ahoy Visits</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.visits\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"'started_at'\"\n [sortOrder]=\"-1\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <p-dropdown\n [options]=\"microServices\"\n (onChange)=\"onServiceChange($event.value)\"\n [placeholder]=\"'Select Service'\"\n optionLabel=\"name\"\n optionValue=\"name\">\n </p-dropdown>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect #multiSelector [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n [lazy]=\"true\"\n (scroll)=\"onScroll($event)\"\n (onPanelShow)=\"onPanelShow()\"\n [loading]=\"userLoading\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"yy-M-dd\"\n >\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"yy-M-dd\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search Visits...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"browser\">\n {{ 'Admin.Tracking.Browser' | transloco }}\n <p-sortIcon field=\"browser\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"device_type\">\n {{ 'Admin.Tracking.DeviceType' | transloco }}\n <p-sortIcon field=\"device_type\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"ip\">\n {{ 'Admin.Tracking.Ip' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"referring_domain\">\n {{ 'Admin.Tracking.Domain' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"landing_page\">\n {{ 'Admin.Tracking.LandingPage' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"country\">\n {{ 'Admin.Tracking.Country' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"region\">\n {{ 'Admin.Tracking.Region' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"city\">\n {{ 'Admin.Tracking.City' | transloco }}\n <p-sortIcon field=\"ip\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"os\">\n {{ 'Admin.Tracking.Os' | transloco }}\n <p-sortIcon field=\"os\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.User' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"started_at\">\n {{ 'Admin.Tracking.StartedAt' | transloco }}\n <p-sortIcon field=\"started_at\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-visits>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Browser\">{{ visits.browser }}</td>\n <td data-head=\"Device Type\">{{ visits.device_type }}</td>\n <td data-head=\"IP\">{{ visits.ip }}</td>\n <td data-head=\"referring_domain\">\n <span [ngbTooltip]=\"visits.referring_domain\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.referring_domain | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"landing_page\">\n <span [ngbTooltip]=\"visits.landing_page\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.landing_page | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"country\">\n <span [ngbTooltip]=\"visits.country\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.country | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"region\">\n <span [ngbTooltip]=\"visits.region\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.region | textTruncate: 20 }}\n </span>\n </td>\n <td data-head=\"city\">\n <span [ngbTooltip]=\"visits.city\"\n tooltipClass=\"custom-tooltip\"\n placement=\"top\" container=\"body\"> {{ visits.city | textTruncate: 20 }}\n </span></td>\n <td data-head=\"OS\">{{ visits.os }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"visits?.user_id\">\n <span *ngIf=\"visits?.user\"><a [routerLink]=\"['/members', visits?.user?.slug]\">{{ visits?.user?.first_name }} {{ visits?.user?.last_name }}</a></span>\n <span *ngIf=\"!visits?.user\">{{ visits?.user_id }}</span>\n </span>\n </td>\n <td data-head=\"Started At\">{{ visits.started_at | dateFormat : 'datetime' }}</td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoVistitsDataMessage' | transloco\"> </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.table-responsive td,.table-responsive th{font-size:11px!important}\n"] }]
|
|
197
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AhoyService }, { type: i2.AdminDataService }, { type: i0.ChangeDetectorRef }] });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWhveS12aXNpdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RyYWNraW5nL2Fob3ktdmlzaXRzL2Fob3ktdmlzaXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90cmFja2luZy9haG95LXZpc2l0cy9haG95LXZpc2l0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXekQsTUFBTSxPQUFPLG1CQUNULFNBQVEsZ0JBQWdCO0lBb0N4QixZQUNJLFFBQWtCLEVBQ0QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLEdBQXNCO1FBRXZDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUpDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQ25DLFNBQUksR0FBRyxDQUFDLENBQUM7UUFFVCxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsZ0JBQVcsR0FB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QUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUMzRSxDQUFDO1lBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQ3RDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUM1QyxDQUFDO2dCQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVsRSxJQUFJLHFCQUFxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDTCxDQUFDOytHQW5OUSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw2RUN4QmhDLCsrUEFvTUE7OzRGRDVLYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBZG1pbkRhdGFTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaG95U2VydmljZSwgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFBBR0VfU0laRSwgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IExhenlMb2FkRXZlbnQsIFNlbGVjdEl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7IEFob3lWaXNpdFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS90cmFja2luZy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWFob3ktdmlzaXRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWhveS12aXNpdHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Fob3ktdmlzaXRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWhveVZpc2l0c0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuICAgIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSB1c2VyUGFnZSA9IDE7XG4gICAgcHJpdmF0ZSBzdG9wTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgZGF0YTogQWhveVZpc2l0UmVzcG9uc2UgPSB7XG4gICAgICAgIHZpc2l0czogW10sXG4gICAgICAgIG9iamVjdF9jb3VudDogMCxcbiAgICAgICAgdW5maWx0ZXJlZF9jb3VudDogMFxuICAgIH07XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIHVzZXJMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBzZWFyY2hUZXh0ID0gJyc7XG4gICAgdXNlclNlYXJjaFRleHQgPSAnJztcblxuICAgIG1pY3JvU2VydmljZXMgPSBbXTtcblxuICAgIHNlbGVjdGVkTWljcm9TZXJ2aWNlOiBzdHJpbmc7XG5cbiAgICBzdGFydERhdGU6IHN0cmluZztcbiAgICBlbmREYXRlOiBzdHJpbmc7XG5cbiAgICBzZWxlY3RlZE9wdGlvbjogU2VsZWN0SXRlbVtdID0gW107XG4gICAgZmlsdGVyU291cmNlOiBzdHJpbmdbXTtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBjcml0ZXJpYSA9IFtdO1xuICAgIHNlYXJjaE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWhveVNlcnZpY2U6IEFob3lTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluRGF0YVNlcnZpY2U6IEFkbWluRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMubWljcm9TZXJ2aWNlcyA9IEhlbHBlclNlcnZpY2UuZ2V0TWljcm9TZXJ2aWNlcyh0aGlzLmFwcENvbmZpZy5saW5rcyk7XG4gICAgICAgIHRoaXMubG9hZFVzZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldEFob3lWaXNpdHMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblBhbmVsU2hvdygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aVNlbGVjdFBhbmVsV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLW11bHRpc2VsZWN0LWl0ZW1zLXdyYXBwZXInKTtcblxuICAgICAgICAgICAgaWYgKG11bHRpU2VsZWN0UGFuZWxXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlTZWxlY3RQYW5lbFdyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXIgPSB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3RQYW5lbFdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNdWx0aVNlbGVjdCBwYW5lbCBub3QgZm91bmQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCA9PT0gZWxlbWVudC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFVzZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRVc2VyKCkge1xuICAgICAgICBpZiAodGhpcy5zdG9wTG9hZGluZyB8fCB0aGlzLnVzZXJTZWFyY2hUZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy51c2VyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluRGF0YVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVc2VycyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMudXNlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMudXNlclNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcExvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkUmVzdWx0cyA9IHJlc3VsdC5maWx0ZXIodXNlciA9PiB1c2VyLnZhbHVlICYmIHVzZXIubGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMgPSBbLi4udGhpcy5zZWFyY2hPcHRpb25zLCAuLi52YWxpZFJlc3VsdHNdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQYWdlKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBaG95VmlzaXRzKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2VydmljZSA9XG4gICAgICAgICAgICB0aGlzLm1pY3JvU2VydmljZXMuZmluZCh4ID0+IHgubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1pY3JvU2VydmljZSkgPz9cbiAgICAgICAgICAgIHRoaXMubWljcm9TZXJ2aWNlcy5maW5kKHggPT4geC52YWx1ZSA9PT0gdGhpcy5hcHBDb25maWcubGlua3M/Lm1haW5fYXBpKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgLi4ucGFnaW5nLFxuICAgICAgICAgICAgLi4uKHRoaXMuc3RhcnREYXRlICYmIHRoaXMuZW5kRGF0ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F0OiBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbmRfYXQ6IG5ldyBEYXRlKHRoaXMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHQgfHwgJycsXG4gICAgICAgICAgICB1c2VyX2lkczogdGhpcy5zZWxlY3RlZE9wdGlvbj8uam9pbignLCcpIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gTk9TT05BUlxuICAgICAgICB9O1xuICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IG9ialtrZXldID09PSB1bmRlZmluZWQgJiYgZGVsZXRlIG9ialtrZXldKTtcblxuICAgICAgICB0aGlzLmFob3lTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWhveVZpc2l0cyhvYmosIHNlcnZpY2UsIHBhZ2luZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBaG95VmlzaXRSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25EYXRlU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFob3lWaXNpdHMoe1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlcnZpY2VDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWljcm9TZXJ2aWNlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZ2V0QWhveVZpc2l0cyh7IHBhZ2U6IHRoaXMucGFnZSwgcGFnZV9zaXplOiBQQUdFX1NJWkUgfSk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY3JpdGVyaWEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9ICRldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRBaG95VmlzaXRzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVGaWx0ZXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMudXNlclNlYXJjaFRleHQgPSAkZXZlbnQuZmlsdGVyO1xuICAgICAgICB0aGlzLnN0b3BMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXNlclBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmFkbWluRGF0YVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVc2VycyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMudXNlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMudXNlclNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VXNlcnMgPSByZXN1bHQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICB1c2VyID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5zZWxlY3RlZE9wdGlvbi5zb21lKHNlbGVjdGVkID0+IHNlbGVjdGVkLnZhbHVlID09PSB1c2VyLnZhbHVlKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBuZXdVc2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VhcmNoT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyA9PiBleGlzdGluZy52YWx1ZSA9PT0gdXNlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgdXNlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMgPSBbLi4udGhpcy5zZWFyY2hPcHRpb25zLCAuLi5uZXdVc2Vyc107XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgbXVsdGlWaXNpdFNlbGVjdFBhbmVsID0gSGVscGVyU2VydmljZS5nZXRNdWx0aVNlbGVjdFBhbmVsKCk7XG5cbiAgICAgICAgaWYgKG11bHRpVmlzaXRTZWxlY3RQYW5lbCAmJiB0aGlzLnNjcm9sbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBtdWx0aVZpc2l0U2VsZWN0UGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGUgcC0wIGZsb2F0LXN0YXJ0XCI+QWhveSBWaXNpdHM8L2gyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMFwiIFtjbGFzcy5oaWRlVGFibGVdPVwiZGF0YS51bmZpbHRlcmVkX2NvdW50ID09PSAwXCI+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLW1hbmFnZW1lbnQtdGFibGUgdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgIDxwLXRhYmxlICNkdFxuICAgICAgW3ZhbHVlXT1cImRhdGEudmlzaXRzXCJcbiAgICAgIFtwYWdpbmF0b3JdPVwiZGF0YS5vYmplY3RfY291bnQgIT09IDBcIlxuICAgICAgW2xhenldPVwidHJ1ZVwiXG4gICAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgICAgW3RvdGFsUmVjb3Jkc109XCJkYXRhLm9iamVjdF9jb3VudFwiXG4gICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgIFtzb3J0RmllbGRdPVwiJ3N0YXJ0ZWRfYXQnXCJcbiAgICAgIFtzb3J0T3JkZXJdPVwiLTFcIlxuICAgICAgW2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCI+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiAqcmJhY0FsbG93PVwiJ1N1cGVyQWRtaW4nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLXNtLTIgbWItMiBtYi1tZC0wXCI+XG4gICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJtaWNyb1NlcnZpY2VzXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uU2VydmljZUNoYW5nZSgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgU2VydmljZSdcIlxuICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cIm5hbWVcIj5cbiAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCAjbXVsdGlTZWxlY3RvciBbb3B0aW9uc109XCJzZWFyY2hPcHRpb25zXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uU2VhcmNoT3B0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSB1c2Vyc1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyU291cmNlXCJcbiAgICAgICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUGFuZWxTaG93KT1cIm9uUGFuZWxTaG93KClcIlxuICAgICAgICAgICAgICBbbG9hZGluZ109XCJ1c2VyTG9hZGluZ1wiXG4gICAgICAgICAgICAgIChvbkZpbHRlcik9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XG4gICAgICAgICAgICA8cC1jYWxlbmRhciBbc2hvd1RpbWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAob25TZWxlY3QpPVwib25EYXRlU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1N0YXJ0IERhdGUnXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdGFydERhdGVcIlxuICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9XCJ5eS1NLWRkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxuICAgICAgICAgICAgPHAtY2FsZW5kYXIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cIm9uRGF0ZVNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERhdGVcIlxuICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9XCJ5eS1NLWRkXCI+XG4gICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFZpc2l0cy4uLlwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm13LTkwIGZvcm0tY29udHJvbCBiZy13aGl0ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiYnJvd3NlclwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlRyYWNraW5nLkJyb3dzZXInIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImJyb3dzZXJcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImRldmljZV90eXBlXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuRGV2aWNlVHlwZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiZGV2aWNlX3R5cGVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImlwXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuSXAnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImlwXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJyZWZlcnJpbmdfZG9tYWluXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuRG9tYWluJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpcFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibGFuZGluZ19wYWdlXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuTGFuZGluZ1BhZ2UnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImlwXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJjb3VudHJ5XCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuQ291bnRyeScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaXBcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInJlZ2lvblwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlRyYWNraW5nLlJlZ2lvbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaXBcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImNpdHlcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5UcmFja2luZy5DaXR5JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpcFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwib3NcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5UcmFja2luZy5PcycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwib3NcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuVXNlcicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic3RhcnRlZF9hdFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlRyYWNraW5nLlN0YXJ0ZWRBdCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic3RhcnRlZF9hdFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LXZpc2l0cz5cbiAgICAgICAgPHRyIFtjbGFzcy5kLW5vbmVdPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJCcm93c2VyXCI+e3sgdmlzaXRzLmJyb3dzZXIgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJEZXZpY2UgVHlwZVwiPnt7IHZpc2l0cy5kZXZpY2VfdHlwZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIklQXCI+e3sgdmlzaXRzLmlwIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwicmVmZXJyaW5nX2RvbWFpblwiPlxuICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwidmlzaXRzLnJlZmVycmluZ19kb21haW5cIlxuICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiICBjb250YWluZXI9XCJib2R5XCI+IHt7IHZpc2l0cy5yZWZlcnJpbmdfZG9tYWluIHwgdGV4dFRydW5jYXRlOiAyMCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cImxhbmRpbmdfcGFnZVwiPlxuICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwidmlzaXRzLmxhbmRpbmdfcGFnZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCIgIGNvbnRhaW5lcj1cImJvZHlcIj4ge3sgdmlzaXRzLmxhbmRpbmdfcGFnZSB8IHRleHRUcnVuY2F0ZTogMjAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiY291bnRyeVwiPlxuICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwidmlzaXRzLmNvdW50cnlcIlxuICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiICBjb250YWluZXI9XCJib2R5XCI+IHt7IHZpc2l0cy5jb3VudHJ5IHwgdGV4dFRydW5jYXRlOiAyMCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cInJlZ2lvblwiPlxuICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwidmlzaXRzLnJlZ2lvblwiXG4gICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCIgIGNvbnRhaW5lcj1cImJvZHlcIj4ge3sgdmlzaXRzLnJlZ2lvbiB8IHRleHRUcnVuY2F0ZTogMjAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJjaXR5XCI+XG4gICAgICAgICAgICA8c3BhbiBbbmdiVG9vbHRpcF09XCJ2aXNpdHMuY2l0eVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCIgIGNvbnRhaW5lcj1cImJvZHlcIj4ge3sgdmlzaXRzLmNpdHkgfCB0ZXh0VHJ1bmNhdGU6IDIwIH19XG4gICAgICAgICAgICA8L3NwYW4+PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiT1NcIj57eyB2aXNpdHMub3MgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJVc2VyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZpc2l0cz8udXNlcl9pZFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZpc2l0cz8udXNlclwiPjxhIFtyb3V0ZXJMaW5rXT1cIlsnL21lbWJlcnMnLCB2aXNpdHM/LnVzZXI/LnNsdWddXCI+e3sgdmlzaXRzPy51c2VyPy5maXJzdF9uYW1lIH19IHt7IHZpc2l0cz8udXNlcj8ubGFzdF9uYW1lIH19PC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdmlzaXRzPy51c2VyXCI+e3sgdmlzaXRzPy51c2VyX2lkIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlN0YXJ0ZWQgQXRcIj57eyB2aXNpdHMuc3RhcnRlZF9hdCB8IGRhdGVGb3JtYXQgOiAnZGF0ZXRpbWUnIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuICAgIDxkaXYgKm5nSWY9XCIgZGF0YS5vYmplY3RfY291bnQgPT09IDAgJiYgZGF0YS51bmZpbHRlcmVkX2NvdW50ICE9PSAwXCI+XG4gICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgW2Rlc2NyaXB0aW9uXT1cIidTZWFyY2guTm9EYXRhRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICA8L3B3LW5vLWRhdGE+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7ICBkYXRhLm9iamVjdF9jb3VudCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiBkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDBcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLkFob3kuTm9WaXN0aXRzRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuIl19
|