tango-app-ui-ticket-user 3.0.54-dev → 3.0.55-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/audit-management/audit-management.component.mjs +97 -48
- package/esm2022/lib/components/audit-workspace/audit-workspace.component.mjs +126 -79
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +3 -3
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/lib/components/edge-cameraview/edge-cameraview.component.mjs +3 -3
- package/esm2022/lib/components/edgeapp-log/edgeapp-log.component.mjs +3 -3
- package/esm2022/lib/components/edit-details/edit-details.component.mjs +3 -3
- package/esm2022/lib/components/infratickets/infratickets.component.mjs +9 -8
- package/esm2022/lib/components/installation/installation.component.mjs +3 -3
- package/esm2022/lib/components/store-activity/store-activity.component.mjs +3 -3
- package/esm2022/lib/components/store-info/store-info.component.mjs +3 -3
- package/esm2022/lib/components/takeremote/takeremote.component.mjs +3 -3
- package/esm2022/lib/components/tango-ticket-users/tango-ticket-users.component.mjs +5 -4
- package/esm2022/lib/components/tickets/tickets.component.mjs +3 -3
- package/esm2022/lib/components/viewhistory/viewhistory.component.mjs +10 -6
- package/esm2022/lib/route-wrappers/edge-wrapper.module.mjs +4 -4
- package/esm2022/lib/services/data.service.mjs +3 -3
- package/esm2022/lib/services/excel.service.mjs +3 -3
- package/esm2022/lib/services/ticket-infra.service.mjs +7 -4
- package/esm2022/lib/tango-ticket-users-routing.module.mjs +4 -4
- package/esm2022/lib/tango-ticket-users.module.mjs +4 -4
- package/fesm2022/{tango-app-ui-ticket-user-edge-wrapper.module-fMqNK7aH.mjs → tango-app-ui-ticket-user-edge-wrapper.module-CFDk0tvS.mjs} +5 -5
- package/fesm2022/{tango-app-ui-ticket-user-edge-wrapper.module-fMqNK7aH.mjs.map → tango-app-ui-ticket-user-edge-wrapper.module-CFDk0tvS.mjs.map} +1 -1
- package/fesm2022/tango-app-ui-ticket-user.mjs +287 -186
- package/fesm2022/tango-app-ui-ticket-user.mjs.map +1 -1
- package/lib/components/audit-management/audit-management.component.d.ts +22 -4
- package/lib/components/audit-workspace/audit-workspace.component.d.ts +14 -3
- package/lib/components/infratickets/infratickets.component.d.ts +1 -0
- package/lib/components/tango-ticket-users/tango-ticket-users.component.d.ts +1 -0
- package/lib/components/viewhistory/viewhistory.component.d.ts +1 -0
- package/lib/services/ticket-infra.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import dayjs from 'dayjs';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/router";
|
|
5
6
|
import * as i2 from "../../services/ticket-infra.service";
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "
|
|
7
|
+
import * as i3 from "tango-app-ui-global";
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i5 from "@angular/common";
|
|
10
|
+
import * as i6 from "tango-app-ui-shared";
|
|
8
11
|
export class AuditManagementComponent {
|
|
9
12
|
changedetector;
|
|
10
13
|
router;
|
|
11
14
|
audit;
|
|
15
|
+
gs;
|
|
16
|
+
modalService;
|
|
12
17
|
dataSource = [];
|
|
13
18
|
size = 10;
|
|
14
19
|
offset = 1;
|
|
@@ -39,10 +44,22 @@ export class AuditManagementComponent {
|
|
|
39
44
|
datalist;
|
|
40
45
|
itemheight;
|
|
41
46
|
searchAudit;
|
|
42
|
-
|
|
47
|
+
selectedType;
|
|
48
|
+
selectedClient;
|
|
49
|
+
cildEvent = new EventEmitter();
|
|
50
|
+
// @ViewChild('AuditZone') AuditZone:any;
|
|
51
|
+
sortColumName = '';
|
|
52
|
+
sortBy = 1;
|
|
53
|
+
unsubscribe = [];
|
|
54
|
+
destroy$ = new Subject();
|
|
55
|
+
headerFilter;
|
|
56
|
+
paginationSizes = [10, 20, 30];
|
|
57
|
+
constructor(changedetector, router, audit, gs, modalService) {
|
|
43
58
|
this.changedetector = changedetector;
|
|
44
59
|
this.router = router;
|
|
45
60
|
this.audit = audit;
|
|
61
|
+
this.gs = gs;
|
|
62
|
+
this.modalService = modalService;
|
|
46
63
|
}
|
|
47
64
|
ngOnInit() {
|
|
48
65
|
this.size = 10;
|
|
@@ -54,7 +71,6 @@ export class AuditManagementComponent {
|
|
|
54
71
|
this.singledate = this.dayjs(new Date()).format('YYYY-MM-DD');
|
|
55
72
|
if ('user-info' in localStorage) {
|
|
56
73
|
this.userinfo = JSON.parse(localStorage.getItem('user-info') || '{}');
|
|
57
|
-
console.log('userinfo', this.userinfo);
|
|
58
74
|
this.user = this.userinfo?.user;
|
|
59
75
|
// this.getauditcard(this.filter)
|
|
60
76
|
this.searchData(this.searchAudit);
|
|
@@ -69,6 +85,11 @@ export class AuditManagementComponent {
|
|
|
69
85
|
});
|
|
70
86
|
}
|
|
71
87
|
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
this.unsubscribe.forEach((sb) => sb.unsubscribe());
|
|
90
|
+
this.destroy$.next(true);
|
|
91
|
+
this.destroy$.complete();
|
|
92
|
+
}
|
|
72
93
|
ngOnChanges(changes) {
|
|
73
94
|
if (changes['searchAudit']) {
|
|
74
95
|
this.searchData(changes['searchAudit'].currentValue);
|
|
@@ -76,53 +97,45 @@ export class AuditManagementComponent {
|
|
|
76
97
|
}
|
|
77
98
|
getauditdata() {
|
|
78
99
|
let isExport = false;
|
|
79
|
-
this.audit.getAudit(this.offset, parseInt(this.size.toString()), this.searchAudit, isExport).subscribe(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this.auditNoData = true;
|
|
83
|
-
}
|
|
84
|
-
else if (res && res.code == 200) {
|
|
85
|
-
this.datalist = res.data;
|
|
86
|
-
this.dataSource = res?.data?.result;
|
|
87
|
-
this.recordsTotal = res?.data?.count;
|
|
88
|
-
this.recordsCount = this.dataSource.length;
|
|
89
|
-
if (this.dataSource.length) {
|
|
90
|
-
this.auditLoading = false;
|
|
91
|
-
this.auditNoData = false;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
100
|
+
this.audit.getAudit(this.offset, parseInt(this.size.toString()), this.searchAudit, isExport).subscribe({
|
|
101
|
+
next: (res) => {
|
|
102
|
+
if (!res || res.code == 204) {
|
|
94
103
|
this.auditLoading = false;
|
|
95
104
|
this.auditNoData = true;
|
|
96
105
|
}
|
|
97
|
-
|
|
106
|
+
else if (res && res.code == 200) {
|
|
107
|
+
this.datalist = res.data;
|
|
108
|
+
this.dataSource = res?.data?.result;
|
|
109
|
+
this.recordsTotal = res?.data?.count;
|
|
110
|
+
this.recordsCount = this.dataSource.length;
|
|
111
|
+
if (this.recordsTotal < 10) {
|
|
112
|
+
this.paginationSizes = [this.recordsTotal];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.paginationSizes = [10, 20, 30];
|
|
116
|
+
}
|
|
117
|
+
if (this.dataSource.length) {
|
|
118
|
+
this.auditLoading = false;
|
|
119
|
+
this.auditNoData = false;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.auditLoading = false;
|
|
123
|
+
this.auditNoData = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
error: (err) => {
|
|
128
|
+
this.auditLoading = false;
|
|
129
|
+
this.auditNoData = true;
|
|
130
|
+
},
|
|
131
|
+
complete() { }
|
|
98
132
|
});
|
|
99
133
|
}
|
|
100
134
|
searchData(value) {
|
|
101
135
|
this.searchAudit = value;
|
|
102
136
|
this.getauditdata();
|
|
103
|
-
// this.audit.getAudit(1, parseInt(this.size.toString()), this.searchAudit, this.user).subscribe((res: any) => {
|
|
104
|
-
// if (!res || res.code == 204) {
|
|
105
|
-
// this.auditLoading = false;
|
|
106
|
-
// this.auditNoData = true;
|
|
107
|
-
// } else if (res && res.code == 200) {
|
|
108
|
-
// this.currentValue = 1; this.pageStart =0; this.pageEnd =5;
|
|
109
|
-
// this.dataSource = res?.data?.result;
|
|
110
|
-
// if (this.dataSource.length) {
|
|
111
|
-
// }
|
|
112
|
-
// this.recordsTotal = res?.data?.count;
|
|
113
|
-
// this.recordsCount = this.dataSource.length
|
|
114
|
-
// if (this.dataSource.length) {
|
|
115
|
-
// this.auditLoading = false;
|
|
116
|
-
// this.auditNoData = false;
|
|
117
|
-
// } else {
|
|
118
|
-
// this.auditLoading = false;
|
|
119
|
-
// this.auditNoData = true;
|
|
120
|
-
// }
|
|
121
|
-
// }
|
|
122
|
-
// })
|
|
123
137
|
}
|
|
124
138
|
mappingdata(data) {
|
|
125
|
-
console.log;
|
|
126
139
|
var obj = {
|
|
127
140
|
totalfiles: {}
|
|
128
141
|
};
|
|
@@ -137,6 +150,22 @@ export class AuditManagementComponent {
|
|
|
137
150
|
datechange(date) {
|
|
138
151
|
this.singledate = date;
|
|
139
152
|
}
|
|
153
|
+
redirectTozone(source) {
|
|
154
|
+
this.selectedClient = source?.clientId;
|
|
155
|
+
this.cildEvent.emit(this.selectedClient);
|
|
156
|
+
}
|
|
157
|
+
startZoneAudit(data) {
|
|
158
|
+
var obj = {
|
|
159
|
+
totalfiles: {}
|
|
160
|
+
};
|
|
161
|
+
if ('totalfiles' in sessionStorage) {
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
obj.totalfiles.queueName = data.queueName;
|
|
165
|
+
sessionStorage.setItem('totalfiles', JSON.stringify(obj));
|
|
166
|
+
}
|
|
167
|
+
this.router.navigate(['/tickets/audit']);
|
|
168
|
+
}
|
|
140
169
|
getToday() {
|
|
141
170
|
return new Date().toISOString().split('T')[0];
|
|
142
171
|
}
|
|
@@ -146,15 +175,35 @@ export class AuditManagementComponent {
|
|
|
146
175
|
}
|
|
147
176
|
onPageSizeChange(pageSize) {
|
|
148
177
|
this.size = pageSize;
|
|
178
|
+
this.offset = 1;
|
|
179
|
+
this.getauditdata();
|
|
180
|
+
}
|
|
181
|
+
sortData(value) {
|
|
182
|
+
this.sortColumName = value;
|
|
183
|
+
this.sortBy *= -1;
|
|
149
184
|
this.getauditdata();
|
|
150
185
|
}
|
|
151
|
-
|
|
152
|
-
|
|
186
|
+
setpageSize() {
|
|
187
|
+
if (this.recordsTotal < 10) {
|
|
188
|
+
return this.recordsTotal;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return this.size;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditManagementComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i2.TicketsService }, { token: i3.GlobalStateService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditManagementComponent, selector: "lib-audit-management", inputs: { searchAudit: "searchAudit", selectedType: "selectedType", selectedClient: "selectedClient" }, outputs: { cildEvent: "cildEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='traffic'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Draft</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\" > Start </button>\r\n <!-- *ngIf=\"!source?.isEnable\" -->\r\n <!-- <span class=\"badge py-3 px-4 fs-7 badge-light-secondary text-secondary text-capitalize\"\r\n >START</span> -->\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone' && !selectedClient\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td><span class=\"text-primary text-decoration-underline cursor-pointer\" (click)=\"redirectTozone(source)\">{{source?.clientName}}</span> \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Draft</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'&& selectedClient\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">Store Id\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name\r\n <span *ngIf=\"sortColumName === 'zoneName' && sortBy !== 1 || sortColumName !== 'zoneName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'zoneName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td>{{source?.storeName ? source?.storeName : '--'}}</td>\r\n <td>{{source?.storeId ? source?.storeId : '--'}}</td>\r\n <td><span>{{source?.zoneName ? source?.zoneName : '--'}}</span>\r\n </td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n\r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"startZoneAudit(source)\" [disabled]=\"!source?.isEnable\" > Start </button></td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>\r\n\r\n <ng-container *ngIf=\"auditLoading\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }] });
|
|
153
196
|
}
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditManagementComponent, decorators: [{
|
|
155
198
|
type: Component,
|
|
156
|
-
args: [{ selector: 'lib-audit-management', template: "<div class=\"card border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Client Name</th>\r\n <th>Client Id</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td>{{source?.clientName}}</td>\r\n <td>{{source?.clientId}}</td>\r\n <td>{{source?.pendingByQueue ? source?.pendingByQueue :'--'}}</td>\r\n <td>{{source?.pendingByUser ? source?.pendingByUser : '--'}}\r\n </td>\r\n <td>{{source?.completedCount ? source?.completedCount :'--'}}</td>\r\n \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\" > START </button>\r\n <!-- *ngIf=\"!source?.isEnable\" -->\r\n <!-- <span class=\"badge py-3 px-4 fs-7 badge-light-secondary text-secondary text-capitalize\"\r\n >START</span> -->\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"[10,20,30]\" [pageSize]=\"size\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"auditLoading\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n \r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}\n"] }]
|
|
157
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i2.TicketsService }], propDecorators: { searchAudit: [{
|
|
199
|
+
args: [{ selector: 'lib-audit-management', template: "<div class=\"card border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='traffic'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Draft</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\" > Start </button>\r\n <!-- *ngIf=\"!source?.isEnable\" -->\r\n <!-- <span class=\"badge py-3 px-4 fs-7 badge-light-secondary text-secondary text-capitalize\"\r\n >START</span> -->\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone' && !selectedClient\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td><span class=\"text-primary text-decoration-underline cursor-pointer\" (click)=\"redirectTozone(source)\">{{source?.clientName}}</span> \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Draft</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'&& selectedClient\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">Store Id\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name\r\n <span *ngIf=\"sortColumName === 'zoneName' && sortBy !== 1 || sortColumName !== 'zoneName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'zoneName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div></th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td>{{source?.storeName ? source?.storeName : '--'}}</td>\r\n <td>{{source?.storeId ? source?.storeId : '--'}}</td>\r\n <td><span>{{source?.zoneName ? source?.zoneName : '--'}}</span>\r\n </td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n\r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"startZoneAudit(source)\" [disabled]=\"!source?.isEnable\" > Start </button></td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>\r\n\r\n <ng-container *ngIf=\"auditLoading\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}\n"] }]
|
|
200
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i2.TicketsService }, { type: i3.GlobalStateService }, { type: i4.NgbModal }], propDecorators: { searchAudit: [{
|
|
201
|
+
type: Input
|
|
202
|
+
}], selectedType: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], selectedClient: [{
|
|
158
205
|
type: Input
|
|
206
|
+
}], cildEvent: [{
|
|
207
|
+
type: Output
|
|
159
208
|
}] } });
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbWFuYWdlbWVudC9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYW5hZ2VtZW50L2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNEIsS0FBSyxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUVuRyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7OztBQVExQixNQUFNLE9BQU8sd0JBQXdCO0lBZ0NmO0lBQ1Y7SUFBd0I7SUEvQmxDLFVBQVUsR0FBTyxFQUFFLENBQUM7SUFDcEIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLFdBQVcsR0FBUSxDQUFDLENBQUM7SUFDckIsU0FBUyxDQUFNO0lBQ2YsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLFlBQVksQ0FBTTtJQUNsQixZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLFdBQVcsR0FBUSxFQUFFLENBQUM7SUFDdEIsWUFBWSxHQUFZLElBQUksQ0FBQztJQUM3QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFNBQVMs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QXVHOEI7OzRGRDdGakIsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHNCQUFzQjt3SUFtQ3ZCLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdG9yUmVmLCBPbkluaXQsSW5wdXQsT25DaGFuZ2VzLFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWNrZXQtaW5mcmEuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdE1hbmFnZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25DaGFuZ2VzIHtcclxuXHJcbiAgZGF0YVNvdXJjZTphbnkgPSBbXTtcclxuICBzaXplOiBudW1iZXIgPSAxMDtcclxuICBvZmZzZXQ6IG51bWJlciA9IDE7XHJcbiAgb2Zmc2V0dmFsdWU6IGFueSA9IDA7XHJcbiAgcGFnZVZhbHVlOiBhbnk7XHJcbiAgcGFnZURpc3BsYXk6IGFueTtcclxuICBwYWdlU3RhcnQgPSAwO1xyXG4gIHBhZ2VFbmQgPSA1O1xyXG4gIG5leHRidG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGJhY2tidG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHBhZ2luYXRpb25TaXplID0gWzEwLCAyMF07XHJcbiAgY3VycmVudFZhbHVlID0gMTtcclxuICByZWNvcmRzQ291bnQ6IGFueTtcclxuICByZWNvcmRzVG90YWwgPSAwO1xyXG4gIHNlYXJjaFZhbHVlOiBhbnkgPSAnJztcclxuICBhdWRpdExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGF1ZGl0Tm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2luZ2xlZGF0ZTogYW55O1xyXG4gIGV4cG9ydEJ0blRleHQgPSAnRXhwb3J0J1xyXG4gIGxvZ2RhdGE6IGFueTtcclxuICBhY3RpdmVsb2dub2RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXI6IGFueSA9IDBcclxuICB1c2VyaW5mbzogYW55O1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgY2FyZGRhdGE6IGFueTtcclxuICB1c2VyOiBhbnk7XHJcbiAgZGF0YWxpc3Q6IGFueTtcclxuICBpdGVtaGVpZ2h0OiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoQXVkaXQ6YW55O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhdWRpdDogVGlja2V0c1NlcnZpY2UpIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaXplID0gMTA7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdhdWRpdCcpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0b3RhbGZpbGVzJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2p1bmsnKVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZW1wbG95ZWUnKVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgncmV0YWcnKVxyXG5cclxuICAgIHRoaXMuc2luZ2xlZGF0ZSA9IHRoaXMuZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREJylcclxuXHJcbiAgICBpZiAoJ3VzZXItaW5mbycgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgIHRoaXMudXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSB8fCAne30nKVxyXG4gICAgICBjb25zb2xlLmxvZygndXNlcmluZm8nLHRoaXMudXNlcmluZm8pXHJcbiAgICAgIHRoaXMudXNlciA9IHRoaXMudXNlcmluZm8/LnVzZXIgIFxyXG4gICAgICAvLyB0aGlzLmdldGF1ZGl0Y2FyZCh0aGlzLmZpbHRlcilcclxuICAgICAgdGhpcy5zZWFyY2hEYXRhKHRoaXMuc2VhcmNoQXVkaXQpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvdGlja2V0cy91c2Vyc1wiXSwgeyBxdWVyeVBhcmFtczoge3R5cGU6J2F1ZGl0J30gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF1ZGl0LnVzZXJEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyLWluZm8nLCBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3RpY2tldHMvdXNlcnNcIl0sIHsgcXVlcnlQYXJhbXM6IHt0eXBlOidhdWRpdCd9IH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICBpZihjaGFuZ2VzWydzZWFyY2hBdWRpdCddKXtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEoY2hhbmdlc1snc2VhcmNoQXVkaXQnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRhdWRpdGRhdGEoKSB7XHJcbiAgICBsZXQgaXNFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuYXVkaXQuZ2V0QXVkaXQodGhpcy5vZmZzZXQsIHBhcnNlSW50KHRoaXMuc2l6ZS50b1N0cmluZygpKSwgdGhpcy5zZWFyY2hBdWRpdCxpc0V4cG9ydCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXJlcyB8fCByZXMuY29kZSA9PSAyMDQpIHtcclxuICAgICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYXVkaXROb0RhdGEgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmRhdGFsaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRzVG90YWwgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ID0gdGhpcy5kYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHNlYXJjaERhdGEodmFsdWU6YW55KSB7XHJcbiAgICB0aGlzLnNlYXJjaEF1ZGl0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gICAgLy8gdGhpcy5hdWRpdC5nZXRBdWRpdCgxLCBwYXJzZUludCh0aGlzLnNpemUudG9TdHJpbmcoKSksIHRoaXMuc2VhcmNoQXVkaXQsIHRoaXMudXNlcikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAoIXJlcyB8fCByZXMuY29kZSA9PSAyMDQpIHtcclxuICAgIC8vICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gICAgIHRoaXMuYXVkaXROb0RhdGEgPSB0cnVlO1xyXG4gICAgLy8gICB9IGVsc2UgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgIC8vICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IDE7ICAgdGhpcy5wYWdlU3RhcnQgPTA7IHRoaXMucGFnZUVuZCA9NTtcclxuICAgIC8vICAgICB0aGlzLmRhdGFTb3VyY2UgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgIC8vICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IHJlcz8uZGF0YT8uY291bnQ7XHJcbiAgICAvLyAgICAgdGhpcy5yZWNvcmRzQ291bnQgPSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAvLyAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gZmFsc2U7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBtYXBwaW5nZGF0YShkYXRhOiBhbnkpIHtcclxuICBjb25zb2xlLmxvZ1xyXG4gICAgdmFyIG9iajogYW55ID0ge1xyXG4gICAgICB0b3RhbGZpbGVzOiB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgndG90YWxmaWxlcycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmoudG90YWxmaWxlcy5xdWV1ZU5hbWUgPSBkYXRhLnF1ZXVlTmFtZVxyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b3RhbGZpbGVzJywgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgIH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3RpY2tldHMvYXVkaXQnXSlcclxuXHJcbiAgfVxyXG4gIFxyXG4gIGRhdGVjaGFuZ2UoZGF0ZTogYW55KSB7XHJcbiAgICB0aGlzLnNpbmdsZWRhdGUgPSBkYXRlXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0VG9kYXkoKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuIH1cclxuIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OmFueSl7XHJcbiAgIHRoaXMub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuIH1cclxuIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6YW55KXtcclxuICAgIHRoaXMuc2l6ZSA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLTBcIj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHAtMFwiPiAtLT5cclxuICAgICAgICA8IS0tIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgZnctYm9sZCB0ZXh0LWRhcmtcIj5BdWRpdCBNYW5hZ2VtZW50PC9zcGFuPiAtLT5cclxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIGZzLTUgbXQtMVwiPlxyXG4gICAgICAgICAgICBUb3RhbCB7e2RhdGFsaXN0ID8gZGF0YWxpc3Q/LnRvdGFsU3RvcmVzOicwJ319IFN0b3JlczwvcD4gLS0+XHJcbiAgICAgICAgPCEtLSA8L2gzPiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXIgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy02XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNoYW5nZSk9XCJzZWFyY2hEYXRhKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB3LTMwMHB4IHBzLTE0XCIgbmFtZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBDbGllbnQgTmFtZSAvIElEXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiBbZGlzYWJsZWRdPVwiYXVkaXRMb2FkaW5nIHx8IGF1ZGl0Tm9EYXRhXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRBc1hsc3goKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm1zLTJcIj57e2V4cG9ydEJ0blRleHR9fTwvc3Bhbj4gPC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMCBwdC0xMFwiICpuZ0lmPVwiIWF1ZGl0TG9hZGluZyAmJiAhYXVkaXROb0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNsaWVudCBOYW1lPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNsaWVudCBJZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBRdWV1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBVc2VyPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Db21wbGV0ZWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgZGF0YVNvdXJjZSA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50SWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnBlbmRpbmdCeVF1ZXVlID8gc291cmNlPy5wZW5kaW5nQnlRdWV1ZSA6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8ucGVuZGluZ0J5VXNlciA/IHNvdXJjZT8ucGVuZGluZ0J5VXNlciA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY29tcGxldGVkQ291bnQgPyBzb3VyY2U/LmNvbXBsZXRlZENvdW50IDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0biBidG4tb3V0bGluZSB0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1hcHBpbmdkYXRhKHNvdXJjZSlcIiBbZGlzYWJsZWRdPVwiIXNvdXJjZT8uaXNFbmFibGVcIiA+IFNUQVJUIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAqbmdJZj1cIiFzb3VyY2U/LmlzRW5hYmxlXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiYmFkZ2UgcHktMyBweC00IGZzLTcgYmFkZ2UtbGlnaHQtc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5IHRleHQtY2FwaXRhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+U1RBUlQ8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJzaXplXCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJyZWNvcmRzVG90YWxcIiBbcGFnaW5hdGlvblNpemVzXT1cIlsxMCwyMCwzMF1cIiBbcGFnZVNpemVdPVwic2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF1ZGl0TG9hZGluZ1wiID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF1ZGl0Tm9EYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctMjVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj4gXHJcbiAgXHJcbiAgICA8IS0tIDxhcHAtZGF0ZS1yYW5nZS1waWNrZXIgbmFtZT1cImFwcC1yYW5nZS1waWNrZXItc2luZ2xlXCIgdHlwZT1cInNpbmdsZVwiIChjaGFuZ2UpPVwiZGF0ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICBpZD1cImRhdGVjbGFzc1wiPlxyXG4gIDwvYXBwLWRhdGUtcmFuZ2UtcGlja2VyPiAtLT4iXX0=
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbWFuYWdlbWVudC9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYW5hZ2VtZW50L2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNEIsS0FBSyxFQUEyRCxNQUFNLEVBQUMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpKLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUsxQixPQUFPLEVBQUUsT0FBTyxFQUFhLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU8xQyxNQUFNLE9BQU8sd0JBQXdCO0lBMENmO0lBQ1Y7SUFBd0I7SUFBOEI7SUFBOEI7SUF6QzlGLFVBQVUsR0FBTyxFQUFFLENBQUM7SUFDcEIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLFdBQVcsR0FBUSxDQUFDLENBQUM7SUFDckIsU0FBUyxDQUFNO0lBQ2YsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLFlBQVksQ0FBTTtJQUNsQixZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLFdBQVcsR0FB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RyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMzQjthQUFJO1lBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2xCO0lBQ0YsQ0FBQzt3R0FwTFcsd0JBQXdCOzRGQUF4Qix3QkFBd0IsOE5DZHJDLHVtc0JBa1I4Qjs7NEZEcFFqQix3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usc0JBQXNCO2dNQW1DdkIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCxJbnB1dCxPbkNoYW5nZXMsU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBWaWV3Q2hpbGQsIHZpZXdDaGlsZCwgT3V0cHV0LEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldC1pbmZyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LW1hbmFnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0TWFuYWdlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkNoYW5nZXMsT25EZXN0cm95IHtcclxuXHJcbiAgZGF0YVNvdXJjZTphbnkgPSBbXTtcclxuICBzaXplOiBudW1iZXIgPSAxMDtcclxuICBvZmZzZXQ6IG51bWJlciA9IDE7XHJcbiAgb2Zmc2V0dmFsdWU6IGFueSA9IDA7XHJcbiAgcGFnZVZhbHVlOiBhbnk7XHJcbiAgcGFnZURpc3BsYXk6IGFueTtcclxuICBwYWdlU3RhcnQgPSAwO1xyXG4gIHBhZ2VFbmQgPSA1O1xyXG4gIG5leHRidG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGJhY2tidG46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHBhZ2luYXRpb25TaXplID0gWzEwLCAyMF07XHJcbiAgY3VycmVudFZhbHVlID0gMTtcclxuICByZWNvcmRzQ291bnQ6IGFueTtcclxuICByZWNvcmRzVG90YWwgPSAwO1xyXG4gIHNlYXJjaFZhbHVlOiBhbnkgPSAnJztcclxuICBhdWRpdExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGF1ZGl0Tm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2luZ2xlZGF0ZTogYW55O1xyXG4gIGV4cG9ydEJ0blRleHQgPSAnRXhwb3J0J1xyXG4gIGxvZ2RhdGE6IGFueTtcclxuICBhY3RpdmVsb2dub2RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXI6IGFueSA9IDBcclxuICB1c2VyaW5mbzogYW55O1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgY2FyZGRhdGE6IGFueTtcclxuICB1c2VyOiBhbnk7XHJcbiAgZGF0YWxpc3Q6IGFueTtcclxuICBpdGVtaGVpZ2h0OiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoQXVkaXQ6YW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkVHlwZTphbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRDbGllbnQ6YW55O1xyXG4gIEBPdXRwdXQoKSBjaWxkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyBAVmlld0NoaWxkKCdBdWRpdFpvbmUnKSBBdWRpdFpvbmU6YW55O1xyXG4gIHNvcnRDb2x1bU5hbWU6IGFueSA9ICcnO1xyXG4gIHNvcnRCeTogYW55ID0gMTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGhlYWRlckZpbHRlcjogYW55O1xyXG4gIHBhZ2luYXRpb25TaXplczphbnkgPSBbMTAsMjAsMzBdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhdWRpdDogVGlja2V0c1NlcnZpY2UscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UscHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2l6ZSA9IDEwO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXVkaXQnKVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90YWxmaWxlcycpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdqdW5rJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VtcGxveWVlJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuXHJcbiAgICB0aGlzLnNpbmdsZWRhdGUgPSB0aGlzLmRheWpzKG5ldyBEYXRlKCkpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXHJcblxyXG4gICAgaWYgKCd1c2VyLWluZm8nIGluIGxvY2FsU3RvcmFnZSkge1xyXG4gICAgICB0aGlzLnVzZXJpbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlci1pbmZvJykgfHwgJ3t9JylcclxuICAgICAgdGhpcy51c2VyID0gdGhpcy51c2VyaW5mbz8udXNlciAgXHJcbiAgICAgIC8vIHRoaXMuZ2V0YXVkaXRjYXJkKHRoaXMuZmlsdGVyKVxyXG4gICAgICB0aGlzLnNlYXJjaERhdGEodGhpcy5zZWFyY2hBdWRpdCk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi90aWNrZXRzL3VzZXJzXCJdLCB7IHF1ZXJ5UGFyYW1zOiB7dHlwZTonYXVkaXQnfSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXVkaXQudXNlckRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXItaW5mbycsIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKSk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvdGlja2V0cy91c2Vyc1wiXSwgeyBxdWVyeVBhcmFtczoge3R5cGU6J2F1ZGl0J30gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmZvckVhY2goKHNiKSA9PiBzYi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgaWYoY2hhbmdlc1snc2VhcmNoQXVkaXQnXSl7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhKGNoYW5nZXNbJ3NlYXJjaEF1ZGl0J10uY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0YXVkaXRkYXRhKCkge1xyXG4gICAgbGV0IGlzRXhwb3J0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmF1ZGl0LmdldEF1ZGl0KHRoaXMub2Zmc2V0LCBwYXJzZUludCh0aGlzLnNpemUudG9TdHJpbmcoKSksdGhpcy5zZWFyY2hBdWRpdCxpc0V4cG9ydCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICBpZiAoIXJlcyB8fCByZXMuY29kZSA9PSAyMDQpIHtcclxuICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZGF0YWxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRzVG90YWwgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRzQ291bnQgPSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICBpZih0aGlzLnJlY29yZHNUb3RhbCA8IDEwKXsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy5yZWNvcmRzVG90YWxdfWVsc2Uge3RoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLDIwLDMwXX1cclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXROb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gIFxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjooZXJyOmFueSk9PiB7XHJcbiAgICAgICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGUoKSB7fVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBzZWFyY2hEYXRhKHZhbHVlOmFueSkge1xyXG4gICAgdGhpcy5zZWFyY2hBdWRpdCA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICB9XHJcblxyXG4gIG1hcHBpbmdkYXRhKGRhdGE6IGFueSkge1xyXG4gICAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgdG90YWxmaWxlczoge1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoJ3RvdGFsZmlsZXMnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqLnRvdGFsZmlsZXMucXVldWVOYW1lID0gZGF0YS5xdWV1ZU5hbWVcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b3RhbGZpbGVzJywgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy90aWNrZXRzL2F1ZGl0J10pXHJcbiAgfVxyXG4gIFxyXG4gIGRhdGVjaGFuZ2UoZGF0ZTogYW55KSB7XHJcbiAgICB0aGlzLnNpbmdsZWRhdGUgPSBkYXRlXHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFRvem9uZShzb3VyY2U6YW55KXtcclxuICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gc291cmNlPy5jbGllbnRJZDtcclxuICAgICB0aGlzLmNpbGRFdmVudC5lbWl0KHRoaXMuc2VsZWN0ZWRDbGllbnQpXHJcbiAgfVxyXG5cclxuICBzdGFydFpvbmVBdWRpdChkYXRhOmFueSl7XHJcbiAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgIHRvdGFsZmlsZXM6IHtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICgndG90YWxmaWxlcycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmoudG90YWxmaWxlcy5xdWV1ZU5hbWUgPSBkYXRhLnF1ZXVlTmFtZVxyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b3RhbGZpbGVzJywgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgIH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3RpY2tldHMvYXVkaXQnXSlcclxuICB9XHJcblxyXG4gIGdldFRvZGF5KCkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiB9XHJcbiBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDphbnkpe1xyXG4gICB0aGlzLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgIHRoaXMuZ2V0YXVkaXRkYXRhKCk7XHJcbiB9XHJcbiBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOmFueSl7XHJcbiAgICB0aGlzLnNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMuZ2V0YXVkaXRkYXRhKCk7XHJcbiB9XHJcbiBzb3J0RGF0YSh2YWx1ZTphbnkpe1xyXG4gIHRoaXMuc29ydENvbHVtTmFtZSA9IHZhbHVlO1xyXG4gIHRoaXMuc29ydEJ5ICo9IC0xO1xyXG4gIHRoaXMuZ2V0YXVkaXRkYXRhKCk7XHJcbiB9XHJcblxyXG4gc2V0cGFnZVNpemUoKXtcclxuICBpZih0aGlzLnJlY29yZHNUb3RhbCA8IDEwKXtcclxuICAgICByZXR1cm4gdGhpcy5yZWNvcmRzVG90YWw7XHJcbiAgfWVsc2V7IFxyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZTtcclxuICB9XHJcbiB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci0wXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwLTBcIj4gLS0+XHJcbiAgICAgICAgPCEtLSA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIGZ3LWJvbGQgdGV4dC1kYXJrXCI+QXVkaXQgTWFuYWdlbWVudDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgPCEtLSA8cCBjbGFzcz1cInRleHQtZ3JheS00MDAgZnctYm9sZCBmcy01IG10LTFcIj5cclxuICAgICAgICAgICAgVG90YWwge3tkYXRhbGlzdCA/IGRhdGFsaXN0Py50b3RhbFN0b3JlczonMCd9fSBTdG9yZXM8L3A+IC0tPlxyXG4gICAgICAgIDwhLS0gPC9oMz4gLS0+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyIFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtNlwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy0zMDBweCBwcy0xNFwiIG5hbWU9XCJzZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgQ2xpZW50IE5hbWUgLyBJRFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgW2Rpc2FibGVkXT1cImF1ZGl0TG9hZGluZyB8fCBhdWRpdE5vRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0QXNYbHN4KClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+e3tleHBvcnRCdG5UZXh0fX08L3NwYW4+IDwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB4LTAgcHQtMTBcIiAqbmdJZj1cIiFhdWRpdExvYWRpbmcgJiYgIWF1ZGl0Tm9EYXRhICYmIHNlbGVjdGVkVHlwZSA9PT0ndHJhZmZpYydcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnY2xpZW50TmFtZScpXCI+Q2xpZW50IE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnY2xpZW50TmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdjbGllbnROYW1lJyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnY2xpZW50SWQnKVwiPkNsaWVudCBJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50SWQnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnY2xpZW50SWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50SWQnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgUXVldWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgVXNlcjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q29tcGxldGVkPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgc291cmNlIG9mIGRhdGFTb3VyY2UgOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+IHt7c291cmNlPy5jbGllbnROYW1lfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTNcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic291cmNlPy5pc0RyYWZ0XCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG14LTJcIj5EcmFmdDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzQXNzaWduZWRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXgtMlwiPkFzc2lnbmVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50SWQgPyBzb3VyY2U/LmNsaWVudElkIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8ucGVuZGluZ0J5UXVldWUgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8ucGVuZGluZ0J5VXNlciA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY29tcGxldGVkQ291bnQgPz8gJy0tJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzb3VyY2U/LmNvbXBsZXRlZENvdW50XCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTBweCBoLTEwcHggcm91bmRlZC01IGJnLXN1Y2Nlc3MgbWUtNVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NvdXJjZT8uY29tcGxldGVkUmF0aW99fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4gYnRuLW91dGxpbmUgdGV4dC1jYXBpdGFsaXplIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtYXBwaW5nZGF0YShzb3VyY2UpXCIgW2Rpc2FibGVkXT1cIiFzb3VyY2U/LmlzRW5hYmxlXCIgPiBTdGFydCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKm5nSWY9XCIhc291cmNlPy5pc0VuYWJsZVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImJhZGdlIHB5LTMgcHgtNCBmcy03IGJhZGdlLWxpZ2h0LXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeSB0ZXh0LWNhcGl0YWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlNUQVJUPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwic2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwicmVjb3Jkc1RvdGFsXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwic2V0cGFnZVNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweC0wIHB0LTEwXCIgKm5nSWY9XCIhYXVkaXRMb2FkaW5nICYmICFhdWRpdE5vRGF0YSAmJiBzZWxlY3RlZFR5cGUgPT09J3pvbmUnICYmICFzZWxlY3RlZENsaWVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYm90dG9tLWJvcmRlciB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjbGllbnROYW1lJylcIj5DbGllbnQgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdjbGllbnROYW1lJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ2NsaWVudE5hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50TmFtZScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NsaWVudElkJylcIj5DbGllbnQgSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50SWQnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnY2xpZW50SWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50SWQnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgUXVldWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBVc2VyPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbXBsZXRlZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgZGF0YVNvdXJjZSA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5IHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVkaXJlY3RUb3pvbmUoc291cmNlKVwiPnt7c291cmNlPy5jbGllbnROYW1lfX08L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTNcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzRHJhZnRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXgtMlwiPkRyYWZ0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic291cmNlPy5pc0Fzc2lnbmVkXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG14LTJcIj5Bc3NpZ25lZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LmNsaWVudElkID8gc291cmNlPy5jbGllbnRJZCA6ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8ucGVuZGluZ0J5UXVldWUgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlVc2VyID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4ge3tzb3VyY2U/LmNvbXBsZXRlZENvdW50ID8/ICctLSd9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzb3VyY2U/LmNvbXBsZXRlZENvdW50XCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMHB4IGgtMTBweCByb3VuZGVkLTUgYmctc3VjY2VzcyBtZS01XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tzb3VyY2U/LmNvbXBsZXRlZFJhdGlvfX0gJTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJzaXplXCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweC0wIHB0LTEwXCIgKm5nSWY9XCIhYXVkaXRMb2FkaW5nICYmICFhdWRpdE5vRGF0YSAmJiBzZWxlY3RlZFR5cGUgPT09J3pvbmUnJiYgc2VsZWN0ZWRDbGllbnRcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj4gIFxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnc3RvcmVOYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVJZCcpXCI+U3RvcmUgSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZUlkJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ3N0b3JlSWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVJZCcgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd6b25lTmFtZScpXCI+Wm9uZSBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVOYW1lJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ3pvbmVOYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVOYW1lJyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgVXNlcjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbXBsZXRlZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgZGF0YVNvdXJjZSA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnN0b3JlTmFtZSA/IHNvdXJjZT8uc3RvcmVOYW1lIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnN0b3JlSWQgPyBzb3VyY2U/LnN0b3JlSWQgOiAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Bhbj57e3NvdXJjZT8uem9uZU5hbWUgPyBzb3VyY2U/LnpvbmVOYW1lIDogJy0tJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlVc2VyID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY29tcGxldGVkQ291bnQgPz8gJy0tJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic291cmNlPy5jb21wbGV0ZWRDb3VudFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMHB4IGgtMTBweCByb3VuZGVkLTUgYmctc3VjY2VzcyBtZS01XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NvdXJjZT8uY29tcGxldGVkUmF0aW99fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPiBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0biBidG4tb3V0bGluZSB0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhcnRab25lQXVkaXQoc291cmNlKVwiIFtkaXNhYmxlZF09XCIhc291cmNlPy5pc0VuYWJsZVwiID4gU3RhcnQgPC9idXR0b24+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwic2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpdExvYWRpbmdcIiA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpdE5vRGF0YVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+IFxyXG5cclxuICAgIDwhLS0gPGFwcC1kYXRlLXJhbmdlLXBpY2tlciBuYW1lPVwiYXBwLXJhbmdlLXBpY2tlci1zaW5nbGVcIiB0eXBlPVwic2luZ2xlXCIgKGNoYW5nZSk9XCJkYXRlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgIGlkPVwiZGF0ZWNsYXNzXCI+XHJcbiAgPC9hcHAtZGF0ZS1yYW5nZS1waWNrZXI+IC0tPiJdfQ==
|