tango-app-ui-manage-stores 3.0.8 → 3.0.10-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.
Files changed (36) hide show
  1. package/esm2022/lib/components/add-stores/add-stores.component.mjs +211 -7
  2. package/esm2022/lib/components/add-stores-form/add-stores-form.component.mjs +19 -65
  3. package/esm2022/lib/components/create-group/create-group.component.mjs +220 -0
  4. package/esm2022/lib/components/group-delete-popup/group-delete-popup.component.mjs +53 -0
  5. package/esm2022/lib/components/group-details/group-details.component.mjs +179 -0
  6. package/esm2022/lib/components/tango-manage-groups/tango-manage-groups.component.mjs +218 -0
  7. package/esm2022/lib/components/tango-manage-stores/tango-manage-stores.component.mjs +250 -57
  8. package/esm2022/lib/interfaces/store.interface.mjs +2 -1
  9. package/esm2022/lib/route-wrappers/stores-edgeapp-wrapper.module.mjs +18 -0
  10. package/esm2022/lib/services/group.service.mjs +59 -0
  11. package/esm2022/lib/services/stores.service.mjs +44 -5
  12. package/esm2022/lib/tango-manage-stores-routing.module.mjs +7 -3
  13. package/esm2022/lib/tango-manage-stores.module.mjs +24 -9
  14. package/esm2022/lib/utils/filters/filters.component.mjs +163 -0
  15. package/fesm2022/tango-app-ui-manage-stores-stores-edgeapp-wrapper.module-B31pXvD_.mjs +21 -0
  16. package/fesm2022/tango-app-ui-manage-stores-stores-edgeapp-wrapper.module-B31pXvD_.mjs.map +1 -0
  17. package/fesm2022/tango-app-ui-manage-stores.mjs +1390 -207
  18. package/fesm2022/tango-app-ui-manage-stores.mjs.map +1 -1
  19. package/lib/components/add-stores/add-stores.component.d.ts +9 -0
  20. package/lib/components/add-stores-form/add-stores-form.component.d.ts +0 -2
  21. package/lib/components/create-group/create-group.component.d.ts +41 -0
  22. package/lib/components/group-delete-popup/group-delete-popup.component.d.ts +17 -0
  23. package/lib/components/group-details/group-details.component.d.ts +37 -0
  24. package/lib/components/tango-manage-groups/tango-manage-groups.component.d.ts +38 -0
  25. package/lib/components/tango-manage-stores/tango-manage-stores.component.d.ts +18 -4
  26. package/lib/interfaces/store.interface.d.ts +22 -3
  27. package/lib/route-wrappers/stores-edgeapp-wrapper.module.d.ts +6 -0
  28. package/lib/services/group.service.d.ts +20 -0
  29. package/lib/services/stores.service.d.ts +11 -5
  30. package/lib/tango-manage-stores.module.d.ts +13 -8
  31. package/lib/utils/filters/filters.component.d.ts +33 -0
  32. package/package.json +1 -1
  33. package/esm2022/lib/utils/pagination/pagination.component.mjs +0 -48
  34. package/esm2022/lib/utils/utils.module.mjs +0 -30
  35. package/lib/utils/pagination/pagination.component.d.ts +0 -17
  36. package/lib/utils/utils.module.d.ts +0 -10
@@ -1,27 +1,83 @@
1
1
  import { Component, } from "@angular/core";
2
2
  import Swal from "sweetalert2";
3
+ import { NavigationEnd } from "@angular/router";
4
+ import { filter } from "rxjs";
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "tango-app-ui-metronics";
5
7
  import * as i2 from "../../services/stores.service";
6
8
  import * as i3 from "../../services/excel.service";
7
9
  import * as i4 from "tango-app-ui-shared";
8
- import * as i5 from "@angular/common";
9
- import * as i6 from "@angular/router";
10
+ import * as i5 from "@angular/router";
11
+ import * as i6 from "@angular/common";
10
12
  import * as i7 from "@angular/forms";
11
- import * as i8 from "../../utils/pagination/pagination.component";
13
+ import * as i8 from "../tango-manage-groups/tango-manage-groups.component";
14
+ import * as i9 from "../group-details/group-details.component";
15
+ import * as i10 from "../../utils/filters/filters.component";
12
16
  export class TangoManageStoresComponent {
13
17
  pageInfo;
14
18
  storesService;
15
19
  changeDetector;
16
20
  excelService;
17
21
  gs;
22
+ router;
18
23
  // Table
24
+ filterOptions = [
25
+ {
26
+ Description: "Completeness",
27
+ Issues: [
28
+ { text: "25%", id: "1" },
29
+ { text: "50%", id: "2" },
30
+ { text: "75%", id: "3" },
31
+ { text: "100%", id: "4" },
32
+ ],
33
+ },
34
+ {
35
+ Description: "Status",
36
+ Issues: [
37
+ { text: "Live", id: "1" },
38
+ { text: "Onboarded", id: "2" },
39
+ { text: "Paired", id: "3" },
40
+ { text: "Installation Failed", id: "4" },
41
+ { text: "Infra Issue", id: "5" },
42
+ { text: "Deactivated", id: "6" },
43
+ ],
44
+ },
45
+ {
46
+ Description: "Issue",
47
+ Issues: [
48
+ { text: "Application Issue", id: "1" },
49
+ { text: "Camera Issue", id: "2" },
50
+ { text: "Internet Issue", id: "3" },
51
+ { text: "Store Operation", id: "4" },
52
+ { text: "System Issue", id: "5" },
53
+ ],
54
+ },
55
+ {
56
+ Description: "Issue Types",
57
+ Issues: [
58
+ { text: "Pending from Client", id: "1" },
59
+ { text: "Pending from Tango", id: "2" },
60
+ ],
61
+ },
62
+ {
63
+ Description: "Country",
64
+ Issues: [],
65
+ },
66
+ {
67
+ Description: "State",
68
+ Issues: [],
69
+ },
70
+ {
71
+ Description: "City",
72
+ Issues: [],
73
+ },
74
+ ];
19
75
  searchValue;
20
76
  storeList = [];
21
77
  storeList_req;
22
78
  pagination;
23
- loading;
24
- noData;
79
+ loading = true;
80
+ noData = false;
25
81
  supportEmail;
26
82
  columns = [
27
83
  {
@@ -33,17 +89,26 @@ export class TangoManageStoresComponent {
33
89
  direction: 0,
34
90
  },
35
91
  ];
36
- constructor(pageInfo, storesService, changeDetector, excelService, gs) {
92
+ paginationSizes = [10, 20, 30];
93
+ // selectedtab :any= '';
94
+ receivedData = "stores";
95
+ $headerFilters;
96
+ constructor(pageInfo, storesService, changeDetector, excelService, gs, router) {
37
97
  this.pageInfo = pageInfo;
38
98
  this.storesService = storesService;
39
99
  this.changeDetector = changeDetector;
40
100
  this.excelService = excelService;
41
101
  this.gs = gs;
102
+ this.router = router;
42
103
  this.gs.environment.subscribe((env) => {
43
104
  if (env) {
44
105
  this.supportEmail = env.support_email;
45
106
  }
46
107
  });
108
+ this.getCountries();
109
+ }
110
+ receiveGroupData(data) {
111
+ this.receivedData = data;
47
112
  }
48
113
  setPageData() {
49
114
  this.pageInfo.setTitle("Stores");
@@ -54,46 +119,161 @@ export class TangoManageStoresComponent {
54
119
  ]);
55
120
  }
56
121
  ngOnInit() {
122
+ this.gs.dataRangeValue.subscribe({
123
+ next: (data) => {
124
+ this.$headerFilters = data;
125
+ this.storeList_req = {
126
+ clientId: data?.client,
127
+ fromDate: data?.date?.startDate || new Date().toISOString().split("T")[0],
128
+ toDate: data?.date?.endDate || new Date().toISOString().split("T")[0],
129
+ limit: 10,
130
+ offset: 1,
131
+ sortBy: "storeId",
132
+ sortOrder: 1,
133
+ search: "",
134
+ };
135
+ this.pagination = {
136
+ offset: 1,
137
+ limit: 10,
138
+ totalCount: 0,
139
+ totalPages: 0,
140
+ };
141
+ this.loadTable();
142
+ },
143
+ });
144
+ this.router.events
145
+ .pipe(filter((event) => event instanceof NavigationEnd))
146
+ .subscribe(() => {
147
+ const isStoresActive = this.router.isActive("/manage/stores", true);
148
+ const isGroupsActive = this.router.isActive("/manage/stores/groups", true);
149
+ if (isStoresActive) {
150
+ }
151
+ if (isGroupsActive) {
152
+ }
153
+ });
57
154
  this.setPageData();
58
- this.storeList_req = {
59
- clientId: 11,
60
- fromDate: new Date().toISOString().split("T")[0],
61
- toDate: new Date().toISOString().split("T")[0],
62
- limit: 10,
63
- offset: 1,
64
- sortBy: "storeId",
65
- sortOrder: 1,
66
- search: "",
67
- };
68
- this.pagination = {
69
- offset: 1,
70
- limit: 10,
71
- totalCount: 0,
72
- totalPages: 0,
73
- };
74
- this.loadTable();
75
155
  }
76
156
  searchStore() {
77
157
  this.storeList_req.search = this.searchValue;
78
158
  this.loadTable();
79
159
  }
80
- applyFilter() { }
160
+ Selecttabs(value) {
161
+ this.receivedData = value;
162
+ }
163
+ applyFilter(filters) {
164
+ this.loadTable();
165
+ }
166
+ getCountries() {
167
+ this.storesService.getCountries().subscribe({
168
+ next: (res) => {
169
+ if (res && res.code === 200) {
170
+ let extractedData = [];
171
+ for (const item of res.data) {
172
+ extractedData.push({
173
+ text: item.name,
174
+ id: item.isoCode
175
+ });
176
+ }
177
+ this.filterOptions[4].Issues = extractedData;
178
+ this.getStates();
179
+ }
180
+ else {
181
+ this.filterOptions[4].Issues = [];
182
+ }
183
+ },
184
+ error: () => {
185
+ this.filterOptions[4].Issues = [];
186
+ },
187
+ complete: () => {
188
+ }
189
+ });
190
+ }
191
+ getStates() {
192
+ this.storesService.getStates({ country: 'IN' }).subscribe({
193
+ next: (res) => {
194
+ if (res && res.code === 200) {
195
+ let extractedData = [];
196
+ for (const item of res.data) {
197
+ extractedData.push({
198
+ text: item.name,
199
+ id: item.isoCode
200
+ });
201
+ }
202
+ this.filterOptions[5].Issues = extractedData;
203
+ this.getCities();
204
+ }
205
+ else {
206
+ this.filterOptions[5].Issues = [];
207
+ }
208
+ },
209
+ error: () => {
210
+ this.filterOptions[5].Issues = [];
211
+ },
212
+ complete: () => {
213
+ }
214
+ });
215
+ }
216
+ getCities() {
217
+ this.storesService.getCities({ country: 'IN', state: 'TN' }).subscribe({
218
+ next: (res) => {
219
+ if (res && res.code === 200) {
220
+ let extractedData = [];
221
+ for (const item of res.data) {
222
+ extractedData.push({
223
+ text: item.name,
224
+ id: item.isoCode
225
+ });
226
+ }
227
+ this.filterOptions[6].Issues = extractedData;
228
+ }
229
+ else {
230
+ this.filterOptions[6].Issues = [];
231
+ }
232
+ },
233
+ error: () => {
234
+ this.filterOptions[6].Issues = [];
235
+ },
236
+ complete: () => {
237
+ }
238
+ });
239
+ }
81
240
  loadTable() {
82
241
  this.loading = true;
83
- this.storesService.getStoreList(this.storeList_req).subscribe((res) => {
84
- if (res && res.code === 200) {
85
- this.storeList = res.data.results;
86
- this.pagination = {
87
- offset: res.data.offset,
88
- limit: res.data.limit,
89
- totalCount: res.data.totalCount,
90
- totalPages: res.data.totalPages,
91
- };
92
- this.noData = false;
242
+ this.storesService.getStoreList(this.storeList_req).subscribe({
243
+ next: (res) => {
93
244
  this.loading = false;
245
+ if (res && res.code === 200) {
246
+ this.storeList = res.data.results;
247
+ this.pagination = {
248
+ offset: res.data.offset,
249
+ limit: res.data.limit,
250
+ totalCount: res.data.totalCount,
251
+ totalPages: res.data.totalPages,
252
+ };
253
+ if (res.data.totalCount < 10) {
254
+ this.paginationSizes = [res.data.totalCount];
255
+ }
256
+ else {
257
+ this.paginationSizes = [10, 20, 30];
258
+ }
259
+ this.noData = false;
260
+ // this.loading = false;
261
+ this.changeDetector.detectChanges();
262
+ }
263
+ else {
264
+ this.storeList = [];
265
+ this.pagination = {
266
+ offset: 1,
267
+ limit: 10,
268
+ totalCount: 0,
269
+ totalPages: 0,
270
+ };
271
+ // this.loading = false;
272
+ this.noData = true;
273
+ }
94
274
  this.changeDetector.detectChanges();
95
- }
96
- else {
275
+ },
276
+ error: () => {
97
277
  this.storeList = [];
98
278
  this.pagination = {
99
279
  offset: 1,
@@ -103,17 +283,10 @@ export class TangoManageStoresComponent {
103
283
  };
104
284
  this.loading = false;
105
285
  this.noData = true;
106
- }
107
- }, (error) => {
108
- this.storeList = [];
109
- this.pagination = {
110
- offset: 1,
111
- limit: 10,
112
- totalCount: 0,
113
- totalPages: 0,
114
- };
115
- this.loading = false;
116
- this.noData = true;
286
+ },
287
+ complete: () => {
288
+ this.loading = false;
289
+ },
117
290
  });
118
291
  }
119
292
  exportXLSX() {
@@ -129,10 +302,14 @@ export class TangoManageStoresComponent {
129
302
  }
130
303
  let excelData = [];
131
304
  var req = {
132
- clientId: 11,
133
- fromDate: new Date().toISOString().split("T")[0],
134
- toDate: new Date().toISOString().split("T")[0],
135
- limit: 1000,
305
+ clientId: this.$headerFilters.client,
306
+ fromDate: this.$headerFilters.date?.startDate
307
+ ? this.$headerFilters.startDate
308
+ : new Date().toISOString().split("T")[0],
309
+ toDate: this.$headerFilters.date?.endDate
310
+ ? this.$headerFilters.endDate
311
+ : new Date().toISOString().split("T")[0],
312
+ limit: 10000,
136
313
  offset: 1,
137
314
  sortBy: "storeId",
138
315
  sortOrder: 1,
@@ -160,7 +337,9 @@ export class TangoManageStoresComponent {
160
337
  }
161
338
  });
162
339
  }
163
- navigateTo() { }
340
+ navigateToStore(store) {
341
+ this.router.navigate([`manage/stores/${store.storeId}/settings`]);
342
+ }
164
343
  onPageChange(pageOffset) {
165
344
  this.storeList_req.offset = pageOffset;
166
345
  this.pagination.offset = pageOffset;
@@ -171,6 +350,9 @@ export class TangoManageStoresComponent {
171
350
  this.pagination.limit = pageSize;
172
351
  this.loadTable();
173
352
  }
353
+ isLinkActive(link) {
354
+ return this.router.isActive(link, true);
355
+ }
174
356
  editStore() { }
175
357
  // onSort({ column, direction }: SortEvent | any) {
176
358
  // console.log({column,direction})
@@ -215,11 +397,22 @@ export class TangoManageStoresComponent {
215
397
  colDirection(column) {
216
398
  return this.columns.filter((el) => el.column == column)[0].direction;
217
399
  }
218
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: TangoManageStoresComponent, deps: [{ token: i1.PageInfoService }, { token: i2.StoresService }, { token: i0.ChangeDetectorRef }, { token: i3.ExcelService }, { token: i4.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
219
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: TangoManageStoresComponent, selector: "lib-tango-manage-stores", ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores</span>\r\n <span class=\"text-sub mb-2\">{{pagination.totalCount ? pagination.totalCount : '--'}} total stores</span>\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-3\">\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\" [(ngModel)]=\"searchValue\"\r\n (change)=\"searchStore()\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Filter</span> </button>\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n <button routerLink=\"/manage/stores/addition-method\" type=\"button\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add Store</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"!loading && !noData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"cursor-pointer\">\r\n <tr>\r\n <!-- <th>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </th> -->\r\n <th (click)=\"onSort('storeId')\">Store Info\r\n <span *ngIf=\"colDirection('storeId')===-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 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=\"colDirection('storeId')===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>\r\n </th>\r\n <th (click)=\"onSort('storeProfile.address')\">Location\r\n <span *ngIf=\"colDirection('storeProfile.address')===-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 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=\"colDirection('storeProfile.address')===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>\r\n </th>\r\n <th>SPOC Contact <span></span> </th>\r\n <th>Downtime <span></span> </th>\r\n <th>Status <span></span> </th>\r\n <th>Status Detail <span></span> </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let store of storeList;let i=index;\">\r\n <tr>\r\n <!-- <td>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </td> -->\r\n <td>\r\n <div class=\"table-title\">{{store?.storeName}}</div>\r\n <div class=\"table-sub\">ID : {{store?.storeId}} \r\n <span class=\"my-1 mx-1\">\r\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"#12B76A\" />\r\n </svg>\r\n 0%\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.storeProfile?.address}}, </div>\r\n <div class=\"table-sub\">{{store?.storeProfile?.city}}, {{store?.storeProfile?.state}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.spocDetails[0]?.email}}</div>\r\n <div class=\"table-sub\">{{store?.spocDetails[0]?.contact}}</div>\r\n </td>\r\n <td class=\"fw-semibold\">NA</td>\r\n <td><span class=\"badge badge-light-primary\">Onboarded</span></td>\r\n <td>\r\n <div class=\"table-title\">Internet Issue</div>\r\n <div class=\"table-sub\">Pending from Client</div>\r\n </td>\r\n <td>\r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span>Config</span>\r\n </button>\r\n <span class=\"dropdown\">\r\n <button style=\"border: none;background-color: white\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18.0001 18.8334C18.4603 18.8334 18.8334 18.4603 18.8334 18C18.8334 17.5398 18.4603 17.1667 18.0001 17.1667C17.5398 17.1667 17.1667 17.5398 17.1667 18C17.1667 18.4603 17.5398 18.8334 18.0001 18.8334Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 13C18.4603 13 18.8334 12.6269 18.8334 12.1667C18.8334 11.7065 18.4603 11.3334 18.0001 11.3334C17.5398 11.3334 17.1667 11.7065 17.1667 12.1667C17.1667 12.6269 17.5398 13 18.0001 13Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 24.6667C18.4603 24.6667 18.8334 24.2936 18.8334 23.8334C18.8334 23.3731 18.4603 23 18.0001 23C17.5398 23 17.1667 23.3731 17.1667 23.8334C17.1667 24.2936 17.5398 24.6667 18.0001 24.6667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><button class=\"dropdown-item\" type=\"button\">Edit Store</button></li>\r\n <li><button class=\"dropdown-item\" type=\"button\">Deactivate</button></li>\r\n </ul>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"[10,20,30]\" [pageSize]=\"pagination.limit\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"loading && !noData\" >\r\n <div class=\"row card d-flex justify-content-center align-items-center\">\r\n <div class=\"loader\">\r\n <svg viewBox=\"0 0 120 120\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"load one\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <circle class=\"load two\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <circle class=\"load three\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <g>\r\n <circle class=\"point one\" cx=\"45\" cy=\"70\" r=\"5\" />\r\n <circle class=\"point two\" cx=\"60\" cy=\"70\" r=\"5\" />\r\n <circle class=\"point three\" cx=\"75\" cy=\"70\" r=\"5\" />\r\n </g>\r\n </svg>\r\n </div>\r\n <h5 class=\"text-gray-800 fw-bolder text-center\">Loading Data...</h5>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData && !loading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img style=\"width: 140px;\" src=\"../../../../assets/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n</div>\r\n", styles: [".text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.form-control{color:var(--Gray-500, #667085)!important;font-size:14.56px!important;font-weight:400!important;line-height:21.84px!important;border-radius:7.28px!important;border:.91px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 .91px 1.82px #1018280d!important}\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: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }] });
400
+ paginationSize() {
401
+ if (this.pagination.totalCount < 10) {
402
+ return this.pagination.totalCount;
403
+ }
404
+ else {
405
+ return this.pagination.limit;
406
+ }
407
+ }
408
+ goToEdgeApp(store) {
409
+ this.router.navigate(['/manage/stores/edge-app/edge-email-journey'], { queryParams: { store: store._id } });
410
+ }
411
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: TangoManageStoresComponent, deps: [{ token: i1.PageInfoService }, { token: i2.StoresService }, { token: i0.ChangeDetectorRef }, { token: i3.ExcelService }, { token: i4.GlobalStateService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
412
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: TangoManageStoresComponent, selector: "lib-tango-manage-stores", ngImport: i0, template: "<div class=\"card mb-5\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex overflow-auto mb-2\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs-2x justify-content-center align-items-center border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('stores')\">\r\n <a [ngClass]=\"receivedData === 'stores'?'btn activebtn':''\" class=\"fw-semibold nav-link me-6\">\r\n Stores\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('groups')\">\r\n <a [ngClass]=\"receivedData === 'groups' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">Groups\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"\" *ngIf=\"receivedData === 'stores'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores</span>\r\n <span class=\"text-sub mb-2\">{{pagination.totalCount ? pagination.totalCount : '--'}} total stores</span>\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 <ng-container *ngIf=\"!loading && !noData\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\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\" [(ngModel)]=\"searchValue\" (change)=\"searchStore()\" class=\"form-control ps-14 me-2\"\r\n placeholder=\"Search\" autocomplete=\"off\" />\r\n <!-- filter Start -->\r\n <lib-filters-custom [dataObject]=\"filterOptions\" (AppliedFilters)=\"applyFilter($event)\"></lib-filters-custom>\r\n <!-- filter End -->\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n </ng-container>\r\n <button routerLink=\"/manage/stores/addition-method\" type=\"button\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add Store</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"!loading && !noData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead class=\"cursor-pointer\">\r\n <tr>\r\n <!-- <th>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </th> -->\r\n <th (click)=\"onSort('storeId')\">Store Info\r\n <span *ngIf=\"colDirection('storeId')===-1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"colDirection('storeId')===1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th (click)=\"onSort('storeProfile.address')\">Location\r\n <span *ngIf=\"colDirection('storeProfile.address')===-1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"colDirection('storeProfile.address')===1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th>SPOC Contact <span></span> </th>\r\n <th>Downtime <span></span> </th>\r\n <th>Status <span></span> </th>\r\n <th>Status Detail <span></span> </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let store of storeList;let i=index;\">\r\n <tr>\r\n <!-- <td>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </td> -->\r\n <td>\r\n <div (click)=\"navigateToStore(store);\" class=\"table-title cursor-pointer\">{{store?.storeName}}</div>\r\n <div class=\"table-sub\">ID : {{store?.storeId}}\r\n <span class=\"my-1 mx-1\">\r\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"#12B76A\" />\r\n </svg>\r\n 0%\r\n </span>\r\n </div>\r\n </td>\r\n <td class=\"w-200px\">\r\n @if (store?.storeProfile?.address) {\r\n <div class=\"table-title\">{{store?.storeProfile?.address}}, </div>\r\n } @else {\r\n <div class=\"table-title\">NA</div>\r\n }\r\n @if (store?.storeProfile?.city && store?.storeProfile?.state) {\r\n <div *ngIf=\"\" class=\"table-sub\">{{store?.storeProfile?.city}},{{store?.storeProfile?.state}}</div>\r\n } @else {\r\n <div class=\"table-sub\">NA</div>\r\n }\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.spocDetails[0]?.email || 'NA'}}</div>\r\n <div class=\"table-sub\">{{store?.spocDetails[0]?.contact || 'NA'}}</div>\r\n </td>\r\n <td class=\"fw-semibold\">NA</td>\r\n <td><span class=\"badge badge-light-primary\">Onboarded</span></td>\r\n <td>\r\n <div class=\"table-title\">Internet Issue</div>\r\n <div class=\"table-sub\">Pending from Client</div>\r\n </td>\r\n <td>\r\n <button type=\"button\" (click)=\"goToEdgeApp(store)\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span>Config</span>\r\n </button>\r\n <span class=\"dropdown\">\r\n <button style=\"border: none;background-color: white\"\r\n data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18.0001 18.8334C18.4603 18.8334 18.8334 18.4603 18.8334 18C18.8334 17.5398 18.4603 17.1667 18.0001 17.1667C17.5398 17.1667 17.1667 17.5398 17.1667 18C17.1667 18.4603 17.5398 18.8334 18.0001 18.8334Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 13C18.4603 13 18.8334 12.6269 18.8334 12.1667C18.8334 11.7065 18.4603 11.3334 18.0001 11.3334C17.5398 11.3334 17.1667 11.7065 17.1667 12.1667C17.1667 12.6269 17.5398 13 18.0001 13Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 24.6667C18.4603 24.6667 18.8334 24.2936 18.8334 23.8334C18.8334 23.3731 18.4603 23 18.0001 23C17.5398 23 17.1667 23.3731 17.1667 23.8334C17.1667 24.2936 17.5398 24.6667 18.0001 24.6667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><button class=\"dropdown-item\" type=\"button\">Edit Store</button></li>\r\n <li><button class=\"dropdown-item\" type=\"button\">Deactivate</button></li>\r\n </ul>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading && !noData\" >\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 </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData && !loading\">\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\" 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 </div>\r\n\r\n <div *ngIf=\"\" class=\"d-flex justify-content-center mt-20 w-100\">\r\n <div class=\"w-350px d-grid align-items-center text-center\">\r\n <img class=\"mx-auto\" src=\"./assets/tango/Images/storesIllustration.png\" alt=\"\">\r\n <span class=\"illustcontent\"> Start by adding stores</span>\r\n <span class=\"text-sub\">You can view all your added stores here</span>\r\n <button class=\"btn btn-primary w-100 mt-10\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.16675V15.8334M4.1665 10.0001H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add Stores</button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"\" *ngIf=\"receivedData === 'groups'\">\r\n <lib-tango-manage-groups (dataEvent)=\"receiveGroupData($event)\"></lib-tango-manage-groups>\r\n <!-- <lib-group-details *ngIf=\"\"></lib-group-details> -->\r\n <!-- <router-outlet></router-outlet> -->\r\n</div>\r\n\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Group Details Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-group-details (dataEvent)=\"receiveGroupData($event)\"></lib-group-details>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->", styles: [".text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.form-control{color:var(--Gray-500, #667085)!important;font-size:14.56px!important;font-weight:400!important;line-height:21.84px!important;border-radius:7.28px!important;border:.91px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 .91px 1.82px #1018280d!important}.illustcontent{color:var(--Gray-900, #101828);font-size:16px;font-weight:600}.nav-item .nav-link{color:var(--Gray-500, #667085);font-size:16px;font-weight:500}.activebtn{color:var(--Primary-700, #009BF3)!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;font-size:16px!important;font-weight:500!important}.img-src{width:25%;height:20%}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i8.TangoManageGroupsComponent, selector: "lib-tango-manage-groups", outputs: ["dataEvent"] }, { kind: "component", type: i9.GroupDetailsComponent, selector: "lib-group-details", outputs: ["dataEvent"] }, { kind: "component", type: i10.FiltersComponent, selector: "lib-filters-custom", inputs: ["dataObject"], outputs: ["AppliedFilters"] }] });
220
413
  }
221
414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: TangoManageStoresComponent, decorators: [{
222
415
  type: Component,
223
- args: [{ selector: "lib-tango-manage-stores", template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores</span>\r\n <span class=\"text-sub mb-2\">{{pagination.totalCount ? pagination.totalCount : '--'}} total stores</span>\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-3\">\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\" [(ngModel)]=\"searchValue\"\r\n (change)=\"searchStore()\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Filter</span> </button>\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n <button routerLink=\"/manage/stores/addition-method\" type=\"button\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add Store</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"!loading && !noData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"cursor-pointer\">\r\n <tr>\r\n <!-- <th>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </th> -->\r\n <th (click)=\"onSort('storeId')\">Store Info\r\n <span *ngIf=\"colDirection('storeId')===-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 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=\"colDirection('storeId')===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>\r\n </th>\r\n <th (click)=\"onSort('storeProfile.address')\">Location\r\n <span *ngIf=\"colDirection('storeProfile.address')===-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 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=\"colDirection('storeProfile.address')===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>\r\n </th>\r\n <th>SPOC Contact <span></span> </th>\r\n <th>Downtime <span></span> </th>\r\n <th>Status <span></span> </th>\r\n <th>Status Detail <span></span> </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let store of storeList;let i=index;\">\r\n <tr>\r\n <!-- <td>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </td> -->\r\n <td>\r\n <div class=\"table-title\">{{store?.storeName}}</div>\r\n <div class=\"table-sub\">ID : {{store?.storeId}} \r\n <span class=\"my-1 mx-1\">\r\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"#12B76A\" />\r\n </svg>\r\n 0%\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.storeProfile?.address}}, </div>\r\n <div class=\"table-sub\">{{store?.storeProfile?.city}}, {{store?.storeProfile?.state}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.spocDetails[0]?.email}}</div>\r\n <div class=\"table-sub\">{{store?.spocDetails[0]?.contact}}</div>\r\n </td>\r\n <td class=\"fw-semibold\">NA</td>\r\n <td><span class=\"badge badge-light-primary\">Onboarded</span></td>\r\n <td>\r\n <div class=\"table-title\">Internet Issue</div>\r\n <div class=\"table-sub\">Pending from Client</div>\r\n </td>\r\n <td>\r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span>Config</span>\r\n </button>\r\n <span class=\"dropdown\">\r\n <button style=\"border: none;background-color: white\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18.0001 18.8334C18.4603 18.8334 18.8334 18.4603 18.8334 18C18.8334 17.5398 18.4603 17.1667 18.0001 17.1667C17.5398 17.1667 17.1667 17.5398 17.1667 18C17.1667 18.4603 17.5398 18.8334 18.0001 18.8334Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 13C18.4603 13 18.8334 12.6269 18.8334 12.1667C18.8334 11.7065 18.4603 11.3334 18.0001 11.3334C17.5398 11.3334 17.1667 11.7065 17.1667 12.1667C17.1667 12.6269 17.5398 13 18.0001 13Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 24.6667C18.4603 24.6667 18.8334 24.2936 18.8334 23.8334C18.8334 23.3731 18.4603 23 18.0001 23C17.5398 23 17.1667 23.3731 17.1667 23.8334C17.1667 24.2936 17.5398 24.6667 18.0001 24.6667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><button class=\"dropdown-item\" type=\"button\">Edit Store</button></li>\r\n <li><button class=\"dropdown-item\" type=\"button\">Deactivate</button></li>\r\n </ul>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"[10,20,30]\" [pageSize]=\"pagination.limit\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"loading && !noData\" >\r\n <div class=\"row card d-flex justify-content-center align-items-center\">\r\n <div class=\"loader\">\r\n <svg viewBox=\"0 0 120 120\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"load one\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <circle class=\"load two\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <circle class=\"load three\" cx=\"60\" cy=\"60\" r=\"40\" />\r\n <g>\r\n <circle class=\"point one\" cx=\"45\" cy=\"70\" r=\"5\" />\r\n <circle class=\"point two\" cx=\"60\" cy=\"70\" r=\"5\" />\r\n <circle class=\"point three\" cx=\"75\" cy=\"70\" r=\"5\" />\r\n </g>\r\n </svg>\r\n </div>\r\n <h5 class=\"text-gray-800 fw-bolder text-center\">Loading Data...</h5>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData && !loading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img style=\"width: 140px;\" src=\"../../../../assets/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n</div>\r\n", styles: [".text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.form-control{color:var(--Gray-500, #667085)!important;font-size:14.56px!important;font-weight:400!important;line-height:21.84px!important;border-radius:7.28px!important;border:.91px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 .91px 1.82px #1018280d!important}\n"] }]
224
- }], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.StoresService }, { type: i0.ChangeDetectorRef }, { type: i3.ExcelService }, { type: i4.GlobalStateService }] });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tbWFuYWdlLXN0b3Jlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc3RvcmVzL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2Utc3RvcmVzL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy90YW5nby1tYW5hZ2Utc3RvcmVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7O0FBZ0IvQixNQUFNLE9BQU8sMEJBQTBCO0lBb0IzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdkJWLFFBQVE7SUFDUixXQUFXLENBQU07SUFDakIsU0FBUyxHQUFnQixFQUFFLENBQUM7SUFDNUIsYUFBYSxDQUFnQjtJQUM3QixVQUFVLENBQWE7SUFDdkIsT0FBTyxDQUFVO0lBQ2pCLE1BQU0sQ0FBVTtJQUNoQixZQUFZLENBQVM7SUFDckIsT0FBTyxHQUFVO1FBQ2Y7WUFDRSxNQUFNLEVBQUUsU0FBUztZQUNqQixTQUFTLEVBQUUsQ0FBQztTQUNiO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsc0JBQXNCO1lBQzlCLFNBQVMsRUFBRSxDQUFDO1NBQ2I7S0FDRixDQUFDO0lBQ0YsWUFDVSxRQUF5QixFQUN6QixhQUE0QixFQUM1QixjQUFpQyxFQUNqQyxZQUEwQixFQUMxQixFQUFzQjtRQUp0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsaUJB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QVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RSxDQUFDO3VHQXJOVSwwQkFBMEI7MkZBQTFCLDBCQUEwQiwrREM1QnZDLDhnZUF1TUE7OzJGRDNLYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktbWV0cm9uaWNzXCI7XHJcbmltcG9ydCB7XHJcbiAgc3RvcmVMaXN0LFxyXG4gIHN0b3JlTGlzdF9yZXEsXHJcbn0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvc3RvcmUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFN0b3Jlc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2VcIjtcclxuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5leHBvcnQgaW50ZXJmYWNlIHBhZ2luYXRpb24ge1xyXG4gIGxpbWl0OiBudW1iZXI7XHJcbiAgb2Zmc2V0OiBudW1iZXI7XHJcbiAgdG90YWxQYWdlczogbnVtYmVyO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRhbmdvLW1hbmFnZS1zdG9yZXNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvTWFuYWdlU3RvcmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyBUYWJsZVxyXG4gIHNlYXJjaFZhbHVlOiBhbnk7XHJcbiAgc3RvcmVMaXN0OiBzdG9yZUxpc3RbXSA9IFtdO1xyXG4gIHN0b3JlTGlzdF9yZXE6IHN0b3JlTGlzdF9yZXE7XHJcbiAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbjtcclxuICBsb2FkaW5nOiBib29sZWFuO1xyXG4gIG5vRGF0YTogYm9vbGVhbjtcclxuICBzdXBwb3J0RW1haWw6IHN0cmluZztcclxuICBjb2x1bW5zOiBhbnlbXSA9IFtcclxuICAgIHtcclxuICAgICAgY29sdW1uOiBcInN0b3JlSWRcIixcclxuICAgICAgZGlyZWN0aW9uOiAxLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29sdW1uOiBcInN0b3JlUHJvZmlsZS5hZGRyZXNzXCIsXHJcbiAgICAgIGRpcmVjdGlvbjogMCxcclxuICAgIH0sXHJcbiAgXTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmVzU2VydmljZTogU3RvcmVzU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBleGNlbFNlcnZpY2U6IEV4Y2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5zdXBwb3J0RW1haWwgPSBlbnYuc3VwcG9ydF9lbWFpbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJTdG9yZXNcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiVG8gb3B0aW1pemUgYW5kIGltcHJvdmUgZXhpc3RpbmcgYWxnb3JpdGhtXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiTWFuYWdlXCIsIHBhdGg6IFwiL21hbmFnZVwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIk1hbmFnZVwiLCBwYXRoOiBcIi9tYW5hZ2VcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgIHRoaXMuc3RvcmVMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IDExLFxyXG4gICAgICBmcm9tRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcclxuICAgICAgdG9EYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLFxyXG4gICAgICBsaW1pdDogMTAsXHJcbiAgICAgIG9mZnNldDogMSxcclxuICAgICAgc29ydEJ5OiBcInN0b3JlSWRcIixcclxuICAgICAgc29ydE9yZGVyOiAxLFxyXG4gICAgICBzZWFyY2g6IFwiXCIsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgdG90YWxQYWdlczogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoU3RvcmUoKSB7XHJcbiAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc2VhcmNoID0gdGhpcy5zZWFyY2hWYWx1ZTtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcigpIHt9XHJcblxyXG4gIGxvYWRUYWJsZSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuZ2V0U3RvcmVMaXN0KHRoaXMuc3RvcmVMaXN0X3JlcSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEucmVzdWx0cztcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICAgICAgb2Zmc2V0OiByZXMuZGF0YS5vZmZzZXQsXHJcbiAgICAgICAgICAgIGxpbWl0OiByZXMuZGF0YS5saW1pdCxcclxuICAgICAgICAgICAgdG90YWxDb3VudDogcmVzLmRhdGEudG90YWxDb3VudCxcclxuICAgICAgICAgICAgdG90YWxQYWdlczogcmVzLmRhdGEudG90YWxQYWdlcyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgbGltaXQ6IDEwLFxyXG4gICAgICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRYTFNYKCkge1xyXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi50b3RhbENvdW50ID4gMTAwMDApIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICB0aXRsZTogXCJFeHBvcnQgRmFpbGVkIVwiLFxyXG4gICAgICAgIGhlaWdodEF1dG86IGZhbHNlLFxyXG4gICAgICAgIGljb246IFwiZXJyb3JcIixcclxuICAgICAgICBodG1sOiBgTG9va3MgTGlrZSB0aGUgRGF0YSBJcyBIdWdlLCBZb3UgQ2FuIFNlbGVjdCBhIFNtYWxsZXIgRGF0ZSBSYW5nZSwgb3IgUGxlYXNlIFJlYWNoIE91dCB0byBUYW5nbyA8YSBocmVmPVwiJHt0aGlzLnN1cHBvcnRFbWFpbH1cIj4ke3RoaXMuc3VwcG9ydEVtYWlsfTwvYT4gZm9yIEZ1cnRoZXIgQXNzaXN0YW5jZS5gLFxyXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBleGNlbERhdGE6IGFueSA9IFtdO1xyXG4gICAgdmFyIHJlcTogc3RvcmVMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IDExLFxyXG4gICAgICBmcm9tRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcclxuICAgICAgdG9EYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLFxyXG4gICAgICBsaW1pdDogMTAwMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICBzb3J0Qnk6IFwic3RvcmVJZFwiLFxyXG4gICAgICBzb3J0T3JkZXI6IDEsXHJcbiAgICAgIHNlYXJjaDogXCJcIixcclxuICAgIH07XHJcbiAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuZ2V0U3RvcmVMaXN0KHJlcSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhLnJlc3VsdHMgJiYgcmVzLmRhdGEucmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgICByZXMuZGF0YS5yZXN1bHRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZXhjZWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBTdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgIFN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIFNwb2NOYW1lOiBlbGVtZW50LnNwb2NEZXRhaWxzWzBdPy5uYW1lLFxyXG4gICAgICAgICAgICBTcG9jRW1haWw6IGVsZW1lbnQuc3BvY0RldGFpbHNbMF0/LmVtYWlsLFxyXG4gICAgICAgICAgICBTcG9jUGhvbmU6IGVsZW1lbnQuc3BvY0RldGFpbHNbMF0/LmNvbnRhY3QsXHJcbiAgICAgICAgICAgIGFwcElkOiBlbGVtZW50LmFwcElkLFxyXG4gICAgICAgICAgICBzdG9yZVR5cGU6IGVsZW1lbnQuc3RvcmVUeXBlPy50eXBlLFxyXG4gICAgICAgICAgICBMb2NhdGlvbjogZWxlbWVudC5zdG9yZVByb2ZpbGU/LmFkZHJlc3MgfHwgXCJcIixcclxuICAgICAgICAgICAgY291bnRyeTogZWxlbWVudC5zdG9yZVByb2ZpbGU/LmNvdW50cnkgfHwgXCJcIixcclxuICAgICAgICAgICAgc3RhdGU6IGVsZW1lbnQuc3RvcmVQcm9maWxlPy5zdGF0ZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBjaXR5OiBlbGVtZW50LnN0b3JlUHJvZmlsZT8uY2l0eSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBwaW5jb2RlOiBlbGVtZW50LnN0b3JlUHJvZmlsZT8ucGluY29kZSB8fCBcIlwiLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUoZXhjZWxEYXRhLCBcIlN0b3JlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG8oKSB7fVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0b3JlTGlzdF9yZXEub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5vZmZzZXQgPSBwYWdlT2Zmc2V0O1xyXG4gICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdG9yZUxpc3RfcmVxLmxpbWl0ID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0U3RvcmUoKSB7fVxyXG5cclxuICAvLyBvblNvcnQoeyBjb2x1bW4sIGRpcmVjdGlvbiB9OiBTb3J0RXZlbnQgfCBhbnkpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKHtjb2x1bW4sZGlyZWN0aW9ufSlcclxuICAvLyAgIHRoaXMuaGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAvLyAgICAgaWYgKGhlYWRlci5zb3J0YWJsZSAhPT0gY29sdW1uKSB7XHJcbiAgLy8gICAgICAgaGVhZGVyLmRpcmVjdGlvbiA9IFwiXCI7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJcIikge1xyXG4gIC8vICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydEJ5ID0gXCJzdG9yZUlkXCI7XHJcbiAgLy8gICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0T3JkZXIgPSAxO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNvcnRCeSA9IGNvbHVtbjtcclxuICAvLyAgICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNvcnRPcmRlciA9IChkaXJlY3Rpb24gPT0gXCJhc2NcIikgPyAxIDogLTE7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgb25Tb3J0KGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChlbC5jb2x1bW4gPT0gY29sdW1uKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNvcnRCeSA9IGNvbHVtbjtcclxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnNbaV0uZGlyZWN0aW9uID0gMTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0T3JkZXIgPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnNbaV0uZGlyZWN0aW9uID0gLTE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydE9yZGVyID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbnNbaV0uZGlyZWN0aW9uID09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnNbaV0uZGlyZWN0aW9uID0gMDtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0T3JkZXIgPSAtMTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0QnkgPSBcInN0b3JlSWRcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9IDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIGNvbERpcmVjdGlvbihjb2x1bW46IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcigoZWwpID0+IGVsLmNvbHVtbiA9PSBjb2x1bW4pWzBdLmRpcmVjdGlvbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPlN0b3Jlczwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+e3twYWdpbmF0aW9uLnRvdGFsQ291bnQgPyBwYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAnLS0nfX0gdG90YWwgc3RvcmVzPC9zcGFuPlxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlYXJjaFN0b3JlKClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtZS0yXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMEgxNU0yLjUgNUgxNy41TTcuNSAxNUgxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj5GaWx0ZXI8L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJvdXRlckxpbms9XCIvbWFuYWdlL3N0b3Jlcy9hZGRpdGlvbi1tZXRob2RcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXgtMiByb3VuZGVkLTMgdGV4dC1ub3dyYXBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm1zLTIgdGV4dC13aGl0ZVwiPkFkZCBTdG9yZTwvc3Bhbj4gPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtaW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2hlY2tlZD1cImNoZWNrZWRcIiBuYW1lPVwiQ2hlY2tib3hlczFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVJZCcpXCI+U3RvcmUgSW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sRGlyZWN0aW9uKCdzdG9yZUlkJyk9PT0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sRGlyZWN0aW9uKCdzdG9yZUlkJyk9PT0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVQcm9maWxlLmFkZHJlc3MnKVwiPkxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xEaXJlY3Rpb24oJ3N0b3JlUHJvZmlsZS5hZGRyZXNzJyk9PT0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sRGlyZWN0aW9uKCdzdG9yZVByb2ZpbGUuYWRkcmVzcycpPT09MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNQT0MgQ29udGFjdCA8c3Bhbj48L3NwYW4+ICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRvd250aW1lIDxzcGFuPjwvc3Bhbj4gIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzIDxzcGFuPjwvc3Bhbj4gIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzIERldGFpbCA8c3Bhbj48L3NwYW4+ICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBzdG9yZUxpc3Q7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtaW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPVwiY2hlY2tlZFwiIG5hbWU9XCJDaGVja2JveGVzMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3tzdG9yZT8uc3RvcmVOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXN1YlwiPklEIDoge3tzdG9yZT8uc3RvcmVJZH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteS0xIG14LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDggOFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNFwiIGN5PVwiNFwiIHI9XCIzXCIgZmlsbD1cIiMxMkI3NkFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57e3N0b3JlPy5zdG9yZVByb2ZpbGU/LmFkZHJlc3N9fSwgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1zdWJcIj57e3N0b3JlPy5zdG9yZVByb2ZpbGU/LmNpdHl9fSwge3tzdG9yZT8uc3RvcmVQcm9maWxlPy5zdGF0ZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7c3RvcmU/LnNwb2NEZXRhaWxzWzBdPy5lbWFpbH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1zdWJcIj57e3N0b3JlPy5zcG9jRGV0YWlsc1swXT8uY29udGFjdH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPk5BPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+T25ib2FyZGVkPC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5JbnRlcm5ldCBJc3N1ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc3ViXCI+UGVuZGluZyBmcm9tIENsaWVudDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNvbmZpZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJib3JkZXI6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogd2hpdGVcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguMDAwMSAxOC44MzM0QzE4LjQ2MDMgMTguODMzNCAxOC44MzM0IDE4LjQ2MDMgMTguODMzNCAxOEMxOC44MzM0IDE3LjUzOTggMTguNDYwMyAxNy4xNjY3IDE4LjAwMDEgMTcuMTY2N0MxNy41Mzk4IDE3LjE2NjcgMTcuMTY2NyAxNy41Mzk4IDE3LjE2NjcgMThDMTcuMTY2NyAxOC40NjAzIDE3LjUzOTggMTguODMzNCAxOC4wMDAxIDE4LjgzMzRaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguMDAwMSAxM0MxOC40NjAzIDEzIDE4LjgzMzQgMTIuNjI2OSAxOC44MzM0IDEyLjE2NjdDMTguODMzNCAxMS43MDY1IDE4LjQ2MDMgMTEuMzMzNCAxOC4wMDAxIDExLjMzMzRDMTcuNTM5OCAxMS4zMzM0IDE3LjE2NjcgMTEuNzA2NSAxNy4xNjY3IDEyLjE2NjdDMTcuMTY2NyAxMi42MjY5IDE3LjUzOTggMTMgMTguMDAwMSAxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOC4wMDAxIDI0LjY2NjdDMTguNDYwMyAyNC42NjY3IDE4LjgzMzQgMjQuMjkzNiAxOC44MzM0IDIzLjgzMzRDMTguODMzNCAyMy4zNzMxIDE4LjQ2MDMgMjMgMTguMDAwMSAyM0MxNy41Mzk4IDIzIDE3LjE2NjcgMjMuMzczMSAxNy4xNjY3IDIzLjgzMzRDMTcuMTY2NyAyNC4yOTM2IDE3LjUzOTggMjQuNjY2NyAxOC4wMDAxIDI0LjY2NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiPkVkaXQgU3RvcmU8L2J1dHRvbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCI+RGVhY3RpdmF0ZTwvYnV0dG9uPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnaW5hdGlvbi5saW1pdFwiIFtjdXJyZW50UGFnZV09XCJwYWdpbmF0aW9uLm9mZnNldFwiXHJcbiAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJwYWdpbmF0aW9uLnRvdGFsQ291bnRcIiBbcGFnaW5hdGlvblNpemVzXT1cIlsxMCwyMCwzMF1cIiBbcGFnZVNpemVdPVwicGFnaW5hdGlvbi5saW1pdFwiXHJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgIW5vRGF0YVwiID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjYXJkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxMjAgMTIwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImxvYWQgb25lXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwibG9hZCB0d29cIiBjeD1cIjYwXCIgY3k9XCI2MFwiIHI9XCI0MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJsb2FkIHRocmVlXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwb2ludCBvbmVcIiBjeD1cIjQ1XCIgY3k9XCI3MFwiIHI9XCI1XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwb2ludCB0d29cIiBjeD1cIjYwXCIgY3k9XCI3MFwiIHI9XCI1XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwb2ludCB0aHJlZVwiIGN4PVwiNzVcIiBjeT1cIjcwXCIgcj1cIjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtZ3JheS04MDAgZnctYm9sZGVyIHRleHQtY2VudGVyXCI+TG9hZGluZyBEYXRhLi4uPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzdHlsZT1cIndpZHRoOiAxNDBweDtcIiBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
416
+ args: [{ selector: "lib-tango-manage-stores", template: "<div class=\"card mb-5\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex overflow-auto mb-2\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs-2x justify-content-center align-items-center border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('stores')\">\r\n <a [ngClass]=\"receivedData === 'stores'?'btn activebtn':''\" class=\"fw-semibold nav-link me-6\">\r\n Stores\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('groups')\">\r\n <a [ngClass]=\"receivedData === 'groups' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">Groups\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"\" *ngIf=\"receivedData === 'stores'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores</span>\r\n <span class=\"text-sub mb-2\">{{pagination.totalCount ? pagination.totalCount : '--'}} total stores</span>\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 <ng-container *ngIf=\"!loading && !noData\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\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\" [(ngModel)]=\"searchValue\" (change)=\"searchStore()\" class=\"form-control ps-14 me-2\"\r\n placeholder=\"Search\" autocomplete=\"off\" />\r\n <!-- filter Start -->\r\n <lib-filters-custom [dataObject]=\"filterOptions\" (AppliedFilters)=\"applyFilter($event)\"></lib-filters-custom>\r\n <!-- filter End -->\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n </ng-container>\r\n <button routerLink=\"/manage/stores/addition-method\" type=\"button\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add Store</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"!loading && !noData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead class=\"cursor-pointer\">\r\n <tr>\r\n <!-- <th>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </th> -->\r\n <th (click)=\"onSort('storeId')\">Store Info\r\n <span *ngIf=\"colDirection('storeId')===-1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"colDirection('storeId')===1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th (click)=\"onSort('storeProfile.address')\">Location\r\n <span *ngIf=\"colDirection('storeProfile.address')===-1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"colDirection('storeProfile.address')===1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th>SPOC Contact <span></span> </th>\r\n <th>Downtime <span></span> </th>\r\n <th>Status <span></span> </th>\r\n <th>Status Detail <span></span> </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let store of storeList;let i=index;\">\r\n <tr>\r\n <!-- <td>\r\n <form class=\"form\">\r\n <div class=\"form-group\">\r\n <div class=\"checkbox-inline\">\r\n <label class=\"checkbox\">\r\n <input type=\"checkbox\" checked=\"checked\" name=\"Checkboxes1\">\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </td> -->\r\n <td>\r\n <div (click)=\"navigateToStore(store);\" class=\"table-title cursor-pointer\">{{store?.storeName}}</div>\r\n <div class=\"table-sub\">ID : {{store?.storeId}}\r\n <span class=\"my-1 mx-1\">\r\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"#12B76A\" />\r\n </svg>\r\n 0%\r\n </span>\r\n </div>\r\n </td>\r\n <td class=\"w-200px\">\r\n @if (store?.storeProfile?.address) {\r\n <div class=\"table-title\">{{store?.storeProfile?.address}}, </div>\r\n } @else {\r\n <div class=\"table-title\">NA</div>\r\n }\r\n @if (store?.storeProfile?.city && store?.storeProfile?.state) {\r\n <div *ngIf=\"\" class=\"table-sub\">{{store?.storeProfile?.city}},{{store?.storeProfile?.state}}</div>\r\n } @else {\r\n <div class=\"table-sub\">NA</div>\r\n }\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{store?.spocDetails[0]?.email || 'NA'}}</div>\r\n <div class=\"table-sub\">{{store?.spocDetails[0]?.contact || 'NA'}}</div>\r\n </td>\r\n <td class=\"fw-semibold\">NA</td>\r\n <td><span class=\"badge badge-light-primary\">Onboarded</span></td>\r\n <td>\r\n <div class=\"table-title\">Internet Issue</div>\r\n <div class=\"table-sub\">Pending from Client</div>\r\n </td>\r\n <td>\r\n <button type=\"button\" (click)=\"goToEdgeApp(store)\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span>Config</span>\r\n </button>\r\n <span class=\"dropdown\">\r\n <button style=\"border: none;background-color: white\"\r\n data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18.0001 18.8334C18.4603 18.8334 18.8334 18.4603 18.8334 18C18.8334 17.5398 18.4603 17.1667 18.0001 17.1667C17.5398 17.1667 17.1667 17.5398 17.1667 18C17.1667 18.4603 17.5398 18.8334 18.0001 18.8334Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 13C18.4603 13 18.8334 12.6269 18.8334 12.1667C18.8334 11.7065 18.4603 11.3334 18.0001 11.3334C17.5398 11.3334 17.1667 11.7065 17.1667 12.1667C17.1667 12.6269 17.5398 13 18.0001 13Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.0001 24.6667C18.4603 24.6667 18.8334 24.2936 18.8334 23.8334C18.8334 23.3731 18.4603 23 18.0001 23C17.5398 23 17.1667 23.3731 17.1667 23.8334C17.1667 24.2936 17.5398 24.6667 18.0001 24.6667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><button class=\"dropdown-item\" type=\"button\">Edit Store</button></li>\r\n <li><button class=\"dropdown-item\" type=\"button\">Deactivate</button></li>\r\n </ul>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading && !noData\" >\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 </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData && !loading\">\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\" 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 </div>\r\n\r\n <div *ngIf=\"\" class=\"d-flex justify-content-center mt-20 w-100\">\r\n <div class=\"w-350px d-grid align-items-center text-center\">\r\n <img class=\"mx-auto\" src=\"./assets/tango/Images/storesIllustration.png\" alt=\"\">\r\n <span class=\"illustcontent\"> Start by adding stores</span>\r\n <span class=\"text-sub\">You can view all your added stores here</span>\r\n <button class=\"btn btn-primary w-100 mt-10\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.16675V15.8334M4.1665 10.0001H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add Stores</button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"\" *ngIf=\"receivedData === 'groups'\">\r\n <lib-tango-manage-groups (dataEvent)=\"receiveGroupData($event)\"></lib-tango-manage-groups>\r\n <!-- <lib-group-details *ngIf=\"\"></lib-group-details> -->\r\n <!-- <router-outlet></router-outlet> -->\r\n</div>\r\n\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Group Details Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-group-details (dataEvent)=\"receiveGroupData($event)\"></lib-group-details>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->", styles: [".text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.form-control{color:var(--Gray-500, #667085)!important;font-size:14.56px!important;font-weight:400!important;line-height:21.84px!important;border-radius:7.28px!important;border:.91px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 .91px 1.82px #1018280d!important}.illustcontent{color:var(--Gray-900, #101828);font-size:16px;font-weight:600}.nav-item .nav-link{color:var(--Gray-500, #667085);font-size:16px;font-weight:500}.activebtn{color:var(--Primary-700, #009BF3)!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;font-size:16px!important;font-weight:500!important}.img-src{width:25%;height:20%}\n"] }]
417
+ }], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.StoresService }, { type: i0.ChangeDetectorRef }, { type: i3.ExcelService }, { type: i4.GlobalStateService }, { type: i5.Router }] });
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tbWFuYWdlLXN0b3Jlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc3RvcmVzL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2Utc3RvcmVzL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy90YW5nby1tYW5hZ2Utc3RvcmVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFnQjlCLE1BQU0sT0FBTywwQkFBMEI7SUE0RTNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWhGVixRQUFRO0lBQ1IsYUFBYSxHQUFVO1FBQ3JCO1lBQ0UsV0FBVyxFQUFFLGNBQWM7WUFDM0IsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUN4QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDeEIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2FBQzFCO1NBQ0Y7UUFDRDtZQUNFLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLE1BQU0sRUFBRTtn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O1lBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDbkM7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw0Q0FBNEMsQ0FBQyxFQUFDLEVBQUMsV0FBVyxFQUFFLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDekcsQ0FBQzt1R0EzWlUsMEJBQTBCOzJGQUExQiwwQkFBMEIsK0RDN0J2Qyx1aW5CQWdSZTs7MkZEblBGLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLW1ldHJvbmljc1wiO1xyXG5pbXBvcnQgeyBzdG9yZUxpc3QsIHN0b3JlTGlzdF9yZXEgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zdG9yZS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU3RvcmVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZXhjZWwuc2VydmljZVwiO1xyXG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5leHBvcnQgaW50ZXJmYWNlIHBhZ2luYXRpb24ge1xyXG4gIGxpbWl0OiBudW1iZXI7XHJcbiAgb2Zmc2V0OiBudW1iZXI7XHJcbiAgdG90YWxQYWdlczogbnVtYmVyO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRhbmdvLW1hbmFnZS1zdG9yZXNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RhbmdvLW1hbmFnZS1zdG9yZXMuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvTWFuYWdlU3RvcmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyBUYWJsZVxyXG4gIGZpbHRlck9wdGlvbnM6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogXCJDb21wbGV0ZW5lc3NcIixcclxuICAgICAgSXNzdWVzOiBbXHJcbiAgICAgICAgeyB0ZXh0OiBcIjI1JVwiLCBpZDogXCIxXCIgfSxcclxuICAgICAgICB7IHRleHQ6IFwiNTAlXCIsIGlkOiBcIjJcIiB9LFxyXG4gICAgICAgIHsgdGV4dDogXCI3NSVcIiwgaWQ6IFwiM1wiIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIjEwMCVcIiwgaWQ6IFwiNFwiIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogXCJTdGF0dXNcIixcclxuICAgICAgSXNzdWVzOiBbXHJcbiAgICAgICAgeyB0ZXh0OiBcIkxpdmVcIiwgaWQ6IFwiMVwiIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIk9uYm9hcmRlZFwiLCBpZDogXCIyXCIgfSxcclxuICAgICAgICB7IHRleHQ6IFwiUGFpcmVkXCIsIGlkOiBcIjNcIiB9LFxyXG4gICAgICAgIHsgdGV4dDogXCJJbnN0YWxsYXRpb24gRmFpbGVkXCIsIGlkOiBcIjRcIiB9LFxyXG4gICAgICAgIHsgdGV4dDogXCJJbmZyYSBJc3N1ZVwiLCBpZDogXCI1XCIgfSxcclxuICAgICAgICB7IHRleHQ6IFwiRGVhY3RpdmF0ZWRcIiwgaWQ6IFwiNlwiIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogXCJJc3N1ZVwiLFxyXG4gICAgICBJc3N1ZXM6IFtcclxuICAgICAgICB7IHRleHQ6IFwiQXBwbGljYXRpb24gSXNzdWVcIiwgaWQ6IFwiMVwiIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIkNhbWVyYSBJc3N1ZVwiLCBpZDogXCIyXCIgfSxcclxuICAgICAgICB7IHRleHQ6IFwiSW50ZXJuZXQgSXNzdWVcIiwgaWQ6IFwiM1wiIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIlN0b3JlIE9wZXJhdGlvblwiLCBpZDogXCI0XCIgfSxcclxuICAgICAgICB7IHRleHQ6IFwiU3lzdGVtIElzc3VlXCIsIGlkOiBcIjVcIiB9LFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgRGVzY3JpcHRpb246IFwiSXNzdWUgVHlwZXNcIixcclxuICAgICAgSXNzdWVzOiBbXHJcbiAgICAgICAgeyB0ZXh0OiBcIlBlbmRpbmcgZnJvbSBDbGllbnRcIiwgaWQ6IFwiMVwiIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIlBlbmRpbmcgZnJvbSBUYW5nb1wiLCBpZDogXCIyXCIgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIERlc2NyaXB0aW9uOiBcIkNvdW50cnlcIixcclxuICAgICAgSXNzdWVzOiBbXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIERlc2NyaXB0aW9uOiBcIlN0YXRlXCIsXHJcbiAgICAgIElzc3VlczogW10sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogXCJDaXR5XCIsXHJcbiAgICAgIElzc3VlczogW10sXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2VhcmNoVmFsdWU6IGFueTtcclxuICBzdG9yZUxpc3Q6IHN0b3JlTGlzdFtdID0gW107XHJcbiAgc3RvcmVMaXN0X3JlcTogc3RvcmVMaXN0X3JlcTtcclxuICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1cHBvcnRFbWFpbDogc3RyaW5nO1xyXG4gIGNvbHVtbnM6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBjb2x1bW46IFwic3RvcmVJZFwiLFxyXG4gICAgICBkaXJlY3Rpb246IDEsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBjb2x1bW46IFwic3RvcmVQcm9maWxlLmFkZHJlc3NcIixcclxuICAgICAgZGlyZWN0aW9uOiAwLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHBhZ2luYXRpb25TaXplczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMF07XHJcbiAgLy8gc2VsZWN0ZWR0YWIgOmFueT0gJyc7XHJcbiAgcmVjZWl2ZWREYXRhOiBzdHJpbmcgPSBcInN0b3Jlc1wiO1xyXG4gICRoZWFkZXJGaWx0ZXJzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZXNTZXJ2aWNlOiBTdG9yZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGV4Y2VsU2VydmljZTogRXhjZWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5zdXBwb3J0RW1haWwgPSBlbnYuc3VwcG9ydF9lbWFpbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdldENvdW50cmllcygpO1xyXG4gIH1cclxuXHJcbiAgcmVjZWl2ZUdyb3VwRGF0YShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVjZWl2ZWREYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIlN0b3Jlc1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0RGVzY3JpcHRpb24oXCJUbyBvcHRpbWl6ZSBhbmQgaW1wcm92ZSBleGlzdGluZyBhbGdvcml0aG1cIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogXCJNYW5hZ2VcIiwgcGF0aDogXCIvbWFuYWdlXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiTWFuYWdlXCIsIHBhdGg6IFwiL21hbmFnZVwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy4kaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3RfcmVxID0ge1xyXG4gICAgICAgICAgY2xpZW50SWQ6IGRhdGE/LmNsaWVudCxcclxuICAgICAgICAgIGZyb21EYXRlOlxyXG4gICAgICAgICAgICBkYXRhPy5kYXRlPy5zdGFydERhdGUgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0YT8uZGF0ZT8uZW5kRGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLFxyXG4gICAgICAgICAgbGltaXQ6IDEwLFxyXG4gICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgc29ydEJ5OiBcInN0b3JlSWRcIixcclxuICAgICAgICAgIHNvcnRPcmRlcjogMSxcclxuICAgICAgICAgIHNlYXJjaDogXCJcIixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICAgIG9mZnNldDogMSxcclxuICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICAgICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzU3RvcmVzQWN0aXZlID0gdGhpcy5yb3V0ZXIuaXNBY3RpdmUoXCIvbWFuYWdlL3N0b3Jlc1wiLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBpc0dyb3Vwc0FjdGl2ZSA9IHRoaXMucm91dGVyLmlzQWN0aXZlKFxyXG4gICAgICAgICAgXCIvbWFuYWdlL3N0b3Jlcy9ncm91cHNcIixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpc1N0b3Jlc0FjdGl2ZSkge1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNHcm91cHNBY3RpdmUpIHtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFN0b3JlKCkge1xyXG4gICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNlYXJjaCA9IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgU2VsZWN0dGFicyh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnJlY2VpdmVkRGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoZmlsdGVyczphbnkpIHtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb3VudHJpZXMoKSB7XHJcbiAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuZ2V0Q291bnRyaWVzKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgbGV0IGV4dHJhY3RlZERhdGEgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGV4dHJhY3RlZERhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaXNvQ29kZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zWzRdLklzc3VlcyA9IGV4dHJhY3RlZERhdGE7XHJcbiAgICAgICAgICB0aGlzLmdldFN0YXRlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnNbNF0uSXNzdWVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjooKT0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnNbNF0uSXNzdWVzID0gW107XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTooKT0+e1xyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFN0YXRlcygpIHtcclxuICAgIHRoaXMuc3RvcmVzU2VydmljZS5nZXRTdGF0ZXMoe2NvdW50cnk6ICdJTid9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBsZXQgZXh0cmFjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgZXh0cmFjdGVkRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBpZDogaXRlbS5pc29Db2RlXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnNbNV0uSXNzdWVzID0gZXh0cmFjdGVkRGF0YTtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2l0aWVzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uc1s1XS5Jc3N1ZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOigpPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uc1s1XS5Jc3N1ZXMgPSBbXTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6KCk9PntcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDaXRpZXMoKSB7XHJcbiAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuZ2V0Q2l0aWVzKHtjb3VudHJ5OiAnSU4nLHN0YXRlOiAnVE4nfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzOmFueSk9PntcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgbGV0IGV4dHJhY3RlZERhdGEgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGV4dHJhY3RlZERhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaXNvQ29kZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zWzZdLklzc3VlcyA9IGV4dHJhY3RlZERhdGE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uc1s2XS5Jc3N1ZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOigpPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uc1s2XS5Jc3N1ZXMgPSBbXTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOigpPT57XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbG9hZFRhYmxlKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVzU2VydmljZS5nZXRTdG9yZUxpc3QodGhpcy5zdG9yZUxpc3RfcmVxKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEucmVzdWx0cztcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICAgICAgb2Zmc2V0OiByZXMuZGF0YS5vZmZzZXQsXHJcbiAgICAgICAgICAgIGxpbWl0OiByZXMuZGF0YS5saW1pdCxcclxuICAgICAgICAgICAgdG90YWxDb3VudDogcmVzLmRhdGEudG90YWxDb3VudCxcclxuICAgICAgICAgICAgdG90YWxQYWdlczogcmVzLmRhdGEudG90YWxQYWdlcyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAocmVzLmRhdGEudG90YWxDb3VudCA8IDEwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gW3Jlcy5kYXRhLnRvdGFsQ291bnRdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgbGltaXQ6IDEwLFxyXG4gICAgICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFhMU1goKSB7XHJcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQgPiAxMDAwMCkge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIHRpdGxlOiBcIkV4cG9ydCBGYWlsZWQhXCIsXHJcbiAgICAgICAgaGVpZ2h0QXV0bzogZmFsc2UsXHJcbiAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgIGh0bWw6IGBMb29rcyBMaWtlIHRoZSBEYXRhIElzIEh1Z2UsIFlvdSBDYW4gU2VsZWN0IGEgU21hbGxlciBEYXRlIFJhbmdlLCBvciBQbGVhc2UgUmVhY2ggT3V0IHRvIFRhbmdvIDxhIGhyZWY9XCIke3RoaXMuc3VwcG9ydEVtYWlsfVwiPiR7dGhpcy5zdXBwb3J0RW1haWx9PC9hPiBmb3IgRnVydGhlciBBc3Npc3RhbmNlLmAsXHJcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4Y2VsRGF0YTogYW55ID0gW107XHJcbiAgICB2YXIgcmVxOiBzdG9yZUxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmRhdGU/LnN0YXJ0RGF0ZVxyXG4gICAgICAgID8gdGhpcy4kaGVhZGVyRmlsdGVycy5zdGFydERhdGVcclxuICAgICAgICA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sXHJcbiAgICAgIHRvRGF0ZTogdGhpcy4kaGVhZGVyRmlsdGVycy5kYXRlPy5lbmREYXRlXHJcbiAgICAgICAgPyB0aGlzLiRoZWFkZXJGaWx0ZXJzLmVuZERhdGVcclxuICAgICAgICA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sXHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICBzb3J0Qnk6IFwic3RvcmVJZFwiLFxyXG4gICAgICBzb3J0T3JkZXI6IDEsXHJcbiAgICAgIHNlYXJjaDogXCJcIixcclxuICAgIH07XHJcbiAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuZ2V0U3RvcmVMaXN0KHJlcSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhLnJlc3VsdHMgJiYgcmVzLmRhdGEucmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgICByZXMuZGF0YS5yZXN1bHRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZXhjZWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBTdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgIFN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIFNwb2NOYW1lOiBlbGVtZW50LnNwb2NEZXRhaWxzWzBdPy5uYW1lLFxyXG4gICAgICAgICAgICBTcG9jRW1haWw6IGVsZW1lbnQuc3BvY0RldGFpbHNbMF0/LmVtYWlsLFxyXG4gICAgICAgICAgICBTcG9jUGhvbmU6IGVsZW1lbnQuc3BvY0RldGFpbHNbMF0/LmNvbnRhY3QsXHJcbiAgICAgICAgICAgIGFwcElkOiBlbGVtZW50LmFwcElkLFxyXG4gICAgICAgICAgICBzdG9yZVR5cGU6IGVsZW1lbnQuc3RvcmVUeXBlPy50eXBlLFxyXG4gICAgICAgICAgICBMb2NhdGlvbjogZWxlbWVudC5zdG9yZVByb2ZpbGU/LmFkZHJlc3MgfHwgXCJcIixcclxuICAgICAgICAgICAgY291bnRyeTogZWxlbWVudC5zdG9yZVByb2ZpbGU/LmNvdW50cnkgfHwgXCJcIixcclxuICAgICAgICAgICAgc3RhdGU6IGVsZW1lbnQuc3RvcmVQcm9maWxlPy5zdGF0ZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBjaXR5OiBlbGVtZW50LnN0b3JlUHJvZmlsZT8uY2l0eSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBwaW5jb2RlOiBlbGVtZW50LnN0b3JlUHJvZmlsZT8ucGluY29kZSB8fCBcIlwiLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUoZXhjZWxEYXRhLCBcIlN0b3JlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgbmF2aWdhdGVUb1N0b3JlKHN0b3JlOiBhbnkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgbWFuYWdlL3N0b3Jlcy8ke3N0b3JlLnN0b3JlSWR9L3NldHRpbmdzYF0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2VPZmZzZXQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdG9yZUxpc3RfcmVxLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5saW1pdCA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLmxpbWl0ID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNMaW5rQWN0aXZlKGxpbms6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKGxpbmssIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFN0b3JlKCkge31cclxuXHJcbiAgLy8gb25Tb3J0KHsgY29sdW1uLCBkaXJlY3Rpb24gfTogU29ydEV2ZW50IHwgYW55KSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh7Y29sdW1uLGRpcmVjdGlvbn0pXHJcbiAgLy8gICB0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgLy8gICAgIGlmIChoZWFkZXIuc29ydGFibGUgIT09IGNvbHVtbikge1xyXG4gIC8vICAgICAgIGhlYWRlci5kaXJlY3Rpb24gPSBcIlwiO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIGlmIChkaXJlY3Rpb24gPT09IFwiXCIpIHtcclxuICAvLyAgICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNvcnRCeSA9IFwic3RvcmVJZFwiO1xyXG4gIC8vICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydE9yZGVyID0gMTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0QnkgPSBjb2x1bW47XHJcbiAgLy8gICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0T3JkZXIgPSAoZGlyZWN0aW9uID09IFwiYXNjXCIpID8gMSA6IC0xO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICAvLyB9XHJcblxyXG4gIG9uU29ydChjb2x1bW46IHN0cmluZykge1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGVsOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZWwuY29sdW1uID09IGNvbHVtbikge1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0X3JlcS5zb3J0QnkgPSBjb2x1bW47XHJcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5kaXJlY3Rpb24gPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9IDE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydE9yZGVyID0gMTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uc1tpXS5kaXJlY3Rpb24gPT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3RfcmVxLnNvcnRPcmRlciA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zW2ldLmRpcmVjdGlvbiA9IDA7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydE9yZGVyID0gLTE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdF9yZXEuc29ydEJ5ID0gXCJzdG9yZUlkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1tpXS5kaXJlY3Rpb24gPSAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBjb2xEaXJlY3Rpb24oY29sdW1uOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGVsKSA9PiBlbC5jb2x1bW4gPT0gY29sdW1uKVswXS5kaXJlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0aW9uU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi50b3RhbENvdW50IDwgMTApIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi50b3RhbENvdW50O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbi5saW1pdDtcclxuICAgIH1cclxuICB9XHJcbiAgZ29Ub0VkZ2VBcHAoc3RvcmU6YW55KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL2VkZ2UtYXBwL2VkZ2UtZW1haWwtam91cm5leSddLHtxdWVyeVBhcmFtczoge3N0b3JlOiBzdG9yZS5faWR9fSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIG1iLTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHQtMiBwYi0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBvdmVyZmxvdy1hdXRvIG1iLTJcIj5cclxuICAgICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzLTJ4ICBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdHRhYnMoJ3N0b3JlcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwicmVjZWl2ZWREYXRhID09PSAnc3RvcmVzJz8nYnRuIGFjdGl2ZWJ0bic6JydcIiBjbGFzcz1cImZ3LXNlbWlib2xkIG5hdi1saW5rIG1lLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdHRhYnMoJ2dyb3VwcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwicmVjZWl2ZWREYXRhID09PSAnZ3JvdXBzJyB8fCByZWNlaXZlZERhdGEgPT09ICdHcm91cCBEZXRhaWxzIFZhbHVlJz8gJ2J0biBhY3RpdmVidG4nOicnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBtZS02XCI+R3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ3N0b3JlcydcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTNcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5TdG9yZXM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj57e3BhZ2luYXRpb24udG90YWxDb3VudCA/IHBhZ2luYXRpb24udG90YWxDb3VudCA6ICctLSd9fSB0b3RhbCBzdG9yZXM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIChjaGFuZ2UpPVwic2VhcmNoU3RvcmUoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZmlsdGVyIFN0YXJ0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzLWN1c3RvbSBbZGF0YU9iamVjdF09XCJmaWx0ZXJPcHRpb25zXCIgKEFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVyKCRldmVudClcIj48L2xpYi1maWx0ZXJzLWN1c3RvbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZmlsdGVyIEVuZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcm91dGVyTGluaz1cIi9tYW5hZ2Uvc3RvcmVzL2FkZGl0aW9uLW1ldGhvZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXgtMiByb3VuZGVkLTMgdGV4dC1ub3dyYXBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMSA0LjE2NjYzVjE1LjgzMzNNNC4xNjY3NSA5Ljk5OTk2SDE1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5BZGQgU3RvcmU8L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9XCJjaGVja2VkXCIgbmFtZT1cIkNoZWNrYm94ZXMxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIChjbGljayk9XCJvblNvcnQoJ3N0b3JlSWQnKVwiPlN0b3JlIEluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xEaXJlY3Rpb24oJ3N0b3JlSWQnKT09PS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbERpcmVjdGlvbignc3RvcmVJZCcpPT09MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIChjbGljayk9XCJvblNvcnQoJ3N0b3JlUHJvZmlsZS5hZGRyZXNzJylcIj5Mb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbERpcmVjdGlvbignc3RvcmVQcm9maWxlLmFkZHJlc3MnKT09PS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbERpcmVjdGlvbignc3RvcmVQcm9maWxlLmFkZHJlc3MnKT09PTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TUE9DIENvbnRhY3QgPHNwYW4+PC9zcGFuPiA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Eb3dudGltZSA8c3Bhbj48L3NwYW4+IDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlN0YXR1cyA8c3Bhbj48L3NwYW4+IDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlN0YXR1cyBEZXRhaWwgPHNwYW4+PC9zcGFuPiA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb25zPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlTGlzdDtsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPVwiY2hlY2tlZFwiIG5hbWU9XCJDaGVja2JveGVzMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm5hdmlnYXRlVG9TdG9yZShzdG9yZSk7XCIgY2xhc3M9XCJ0YWJsZS10aXRsZSBjdXJzb3ItcG9pbnRlclwiPnt7c3RvcmU/LnN0b3JlTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc3ViXCI+SUQgOiB7e3N0b3JlPy5zdG9yZUlkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm15LTEgbXgtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDggOFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI0XCIgY3k9XCI0XCIgcj1cIjNcIiBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwJVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3LTIwMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHN0b3JlPy5zdG9yZVByb2ZpbGU/LmFkZHJlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57e3N0b3JlPy5zdG9yZVByb2ZpbGU/LmFkZHJlc3N9fSwgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5OQTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzdG9yZT8uc3RvcmVQcm9maWxlPy5jaXR5ICYmIHN0b3JlPy5zdG9yZVByb2ZpbGU/LnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlwiIGNsYXNzPVwidGFibGUtc3ViXCI+e3tzdG9yZT8uc3RvcmVQcm9maWxlPy5jaXR5fX0se3tzdG9yZT8uc3RvcmVQcm9maWxlPy5zdGF0ZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtc3ViXCI+TkE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3tzdG9yZT8uc3BvY0RldGFpbHNbMF0/LmVtYWlsIHx8ICdOQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXN1YlwiPnt7c3RvcmU/LnNwb2NEZXRhaWxzWzBdPy5jb250YWN0IHx8ICdOQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPk5BPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPk9uYm9hcmRlZDwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5JbnRlcm5ldCBJc3N1ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXN1YlwiPlBlbmRpbmcgZnJvbSBDbGllbnQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9FZGdlQXBwKHN0b3JlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q29uZmlnPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cImJvcmRlcjogbm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjAwMDEgMTguODMzNEMxOC40NjAzIDE4LjgzMzQgMTguODMzNCAxOC40NjAzIDE4LjgzMzQgMThDMTguODMzNCAxNy41Mzk4IDE4LjQ2MDMgMTcuMTY2NyAxOC4wMDAxIDE3LjE2NjdDMTcuNTM5OCAxNy4xNjY3IDE3LjE2NjcgMTcuNTM5OCAxNy4xNjY3IDE4QzE3LjE2NjcgMTguNDYwMyAxNy41Mzk4IDE4LjgzMzQgMTguMDAwMSAxOC44MzM0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguMDAwMSAxM0MxOC40NjAzIDEzIDE4LjgzMzQgMTIuNjI2OSAxOC44MzM0IDEyLjE2NjdDMTguODMzNCAxMS43MDY1IDE4LjQ2MDMgMTEuMzMzNCAxOC4wMDAxIDExLjMzMzRDMTcuNTM5OCAxMS4zMzM0IDE3LjE2NjcgMTEuNzA2NSAxNy4xNjY3IDEyLjE2NjdDMTcuMTY2NyAxMi42MjY5IDE3LjUzOTggMTMgMTguMDAwMSAxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjAwMDEgMjQuNjY2N0MxOC40NjAzIDI0LjY2NjcgMTguODMzNCAyNC4yOTM2IDE4LjgzMzQgMjMuODMzNEMxOC44MzM0IDIzLjM3MzEgMTguNDYwMyAyMyAxOC4wMDAxIDIzQzE3LjUzOTggMjMgMTcuMTY2NyAyMy4zNzMxIDE3LjE2NjcgMjMuODMzNEMxNy4xNjY3IDI0LjI5MzYgMTcuNTM5OCAyNC42NjY3IDE4LjAwMDEgMjQuNjY2N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIj5FZGl0IFN0b3JlPC9idXR0b24+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiPkRlYWN0aXZhdGU8L2J1dHRvbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cInBhZ2luYXRpb24ubGltaXRcIiBbY3VycmVudFBhZ2VdPVwicGFnaW5hdGlvbi5vZmZzZXRcIlxyXG4gICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwicGFnaW5hdGlvbi50b3RhbENvdW50XCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnaW5hdGlvblNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgIW5vRGF0YVwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGEgJiYgIWxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTIwIHctMTAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMzUwcHggZC1ncmlkIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwibXgtYXV0b1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy9zdG9yZXNJbGx1c3RyYXRpb24ucG5nXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWxsdXN0Y29udGVudFwiPiBTdGFydCBieSBhZGRpbmcgc3RvcmVzPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViXCI+WW91IGNhbiB2aWV3IGFsbCB5b3VyIGFkZGVkIHN0b3JlcyBoZXJlPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIG10LTEwXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTk5ODQgNC4xNjY3NVYxNS44MzM0TTQuMTY2NSAxMC4wMDAxSDE1LjgzMzJcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+IEFkZCBTdG9yZXM8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAnZ3JvdXBzJ1wiPlxyXG4gICAgPGxpYi10YW5nby1tYW5hZ2UtZ3JvdXBzIChkYXRhRXZlbnQpPVwicmVjZWl2ZUdyb3VwRGF0YSgkZXZlbnQpXCI+PC9saWItdGFuZ28tbWFuYWdlLWdyb3Vwcz5cclxuICAgIDwhLS0gPGxpYi1ncm91cC1kZXRhaWxzICpuZ0lmPVwiXCI+PC9saWItZ3JvdXAtZGV0YWlscz4gLS0+XHJcbiAgICA8IS0tIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD4gLS0+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS1iZWdpbjo6Um93LS0+XHJcbjxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09J0dyb3VwIERldGFpbHMgVmFsdWUnXCIgY2xhc3M9XCJyb3cgZ3gtNSBneC14bC0xMFwiPlxyXG4gICAgPCEtLWJlZ2luOjpDb2wtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHhsLTEyIGNvbC1tZC0xMiBjb2wteGwtMTIgY29sLWxnLTEyXCI+XHJcbiAgICAgICAgPGxpYi1ncm91cC1kZXRhaWxzIChkYXRhRXZlbnQpPVwicmVjZWl2ZUdyb3VwRGF0YSgkZXZlbnQpXCI+PC9saWItZ3JvdXAtZGV0YWlscz5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLWVuZDo6Q29sLS0+XHJcbjwvZGl2PlxyXG48IS0tZW5kOjpSb3ctLT4iXX0=