tin-spa 14.4.2 → 14.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2020/lib/classes/Classes.mjs +57 -32
- package/esm2020/lib/classes/LibClasses.mjs +2 -1
- package/esm2020/lib/classes/TinCore.mjs +194 -44
- package/esm2020/lib/components/alert/alert.component.mjs +12 -6
- package/esm2020/lib/components/attach/attach.component.mjs +49 -33
- package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
- package/esm2020/lib/components/cards/cards.component.mjs +103 -0
- package/esm2020/lib/components/date/date.component.mjs +4 -4
- package/esm2020/lib/components/email/email.component.mjs +19 -17
- package/esm2020/lib/components/form/form.component.mjs +142 -57
- package/esm2020/lib/components/html/html.component.mjs +34 -0
- package/esm2020/lib/components/label/label.component.mjs +6 -3
- package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
- package/esm2020/lib/components/money/money.component.mjs +26 -9
- package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
- package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
- package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +31 -27
- package/esm2020/lib/components/notes/notes.component.mjs +62 -0
- package/esm2020/lib/components/number/number.component.mjs +23 -8
- package/esm2020/lib/components/option/option.component.mjs +36 -14
- package/esm2020/lib/components/page/page.component.mjs +101 -0
- package/esm2020/lib/components/search/search.component.mjs +10 -5
- package/esm2020/lib/components/select/select.component.mjs +56 -129
- package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
- package/esm2020/lib/components/select-common/select-common.component.mjs +189 -0
- package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
- package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
- package/esm2020/lib/components/steps/steps.component.mjs +83 -61
- package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
- package/esm2020/lib/components/table/detailsDialog.component.mjs +169 -37
- package/esm2020/lib/components/table/table.component.mjs +136 -111
- package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
- package/esm2020/lib/components/table-header/table-header.component.mjs +12 -8
- package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +169 -35
- package/esm2020/lib/components/table-internal/table-internal.component.mjs +138 -112
- package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
- package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
- package/esm2020/lib/components/table-row/table-row.component.mjs +23 -4
- package/esm2020/lib/components/text/text.component.mjs +85 -40
- package/esm2020/lib/components/tiles/tiles.component.mjs +32 -20
- package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
- package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
- package/esm2020/lib/modules/admin/admin-routing.module.mjs +11 -1
- package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
- package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
- package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
- package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
- package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
- package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
- package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
- package/esm2020/lib/pages/customers/customers.component.mjs +9 -48
- package/esm2020/lib/pages/departments/departments.component.mjs +2 -4
- package/esm2020/lib/pages/employees/employees.component.mjs +3 -4
- package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
- package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
- package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
- package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +11 -10
- package/esm2020/lib/pages/login/login.component.mjs +52 -14
- package/esm2020/lib/pages/logs/logs.component.mjs +27 -22
- package/esm2020/lib/pages/membership/membership.component.mjs +15 -19
- package/esm2020/lib/pages/notifications/notifications.component.mjs +82 -6
- package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
- package/esm2020/lib/pages/plans/plans.component.mjs +16 -19
- package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
- package/esm2020/lib/pages/profile/profile.component.mjs +4 -3
- package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
- package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
- package/esm2020/lib/pages/roles/roles.component.mjs +77 -17
- package/esm2020/lib/pages/settings/settings.component.mjs +2 -11
- package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
- package/esm2020/lib/pages/suppliers/suppliers.component.mjs +3 -31
- package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
- package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +145 -72
- package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
- package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
- package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
- package/esm2020/lib/pages/users/users.component.mjs +115 -92
- package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
- package/esm2020/lib/select-context.directive.mjs +23 -0
- package/esm2020/lib/services/button.service.mjs +90 -30
- package/esm2020/lib/services/csv.service.mjs +1 -1
- package/esm2020/lib/services/datalib.service.mjs +504 -76
- package/esm2020/lib/services/dialog.service.mjs +24 -7
- package/esm2020/lib/services/notifications.service.mjs +33 -0
- package/esm2020/lib/services/table-config.service.mjs +55 -7
- package/esm2020/lib/tin-spa.module.mjs +46 -11
- package/esm2020/public-api.mjs +8 -1
- package/fesm2015/tin-spa.mjs +6158 -2594
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +6143 -2518
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/lib/classes/Classes.d.ts +231 -127
- package/lib/classes/LibClasses.d.ts +1 -0
- package/lib/classes/TinCore.d.ts +11 -3
- package/lib/components/attach/attach.component.d.ts +13 -6
- package/lib/components/capsules/capsules.component.d.ts +26 -0
- package/lib/components/cards/cards.component.d.ts +39 -0
- package/lib/components/email/email.component.d.ts +4 -3
- package/lib/components/form/form.component.d.ts +20 -11
- package/lib/components/html/html.component.d.ts +16 -0
- package/lib/components/label/label.component.d.ts +2 -1
- package/lib/components/money/money.component.d.ts +8 -1
- package/lib/components/multi-select/multi-select.component.d.ts +47 -0
- package/lib/components/multi-text/multi-text.component.d.ts +56 -0
- package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
- package/lib/components/notes/notes.component.d.ts +19 -0
- package/lib/components/number/number.component.d.ts +7 -1
- package/lib/components/option/option.component.d.ts +10 -2
- package/lib/components/page/page.component.d.ts +38 -0
- package/lib/components/search/search.component.d.ts +3 -1
- package/lib/components/select/select.component.d.ts +16 -37
- package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
- package/lib/components/select-common/select-common.component.d.ts +50 -0
- package/lib/components/select-internal/select-internal.component.d.ts +23 -0
- package/lib/components/select-lite/select-lite.component.d.ts +8 -0
- package/lib/components/steps/steps.component.d.ts +18 -9
- package/lib/components/suffix/suffix.component.d.ts +23 -0
- package/lib/components/table/detailsDialog.component.d.ts +24 -7
- package/lib/components/table/table.component.d.ts +15 -9
- package/lib/components/table-action/table-action.component.d.ts +4 -1
- package/lib/components/table-header/table-header.component.d.ts +3 -1
- package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
- package/lib/components/table-internal/table-internal.component.d.ts +15 -9
- package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
- package/lib/components/table-lite/table-lite.component.d.ts +91 -0
- package/lib/components/table-row/table-row.component.d.ts +4 -1
- package/lib/components/text/text.component.d.ts +16 -7
- package/lib/components/tiles/tiles.component.d.ts +4 -3
- package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
- package/lib/pages/app-models/app-models.component.d.ts +15 -0
- package/lib/pages/approvals/approvals.component.d.ts +10 -0
- package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
- package/lib/pages/customers/customers.component.d.ts +2 -8
- package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
- package/lib/pages/login/login.component.d.ts +7 -1
- package/lib/pages/logs/logs.component.d.ts +2 -6
- package/lib/pages/membership/membership.component.d.ts +2 -6
- package/lib/pages/notifications/notifications.component.d.ts +9 -1
- package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
- package/lib/pages/plans/plans.component.d.ts +2 -6
- package/lib/pages/roles/roles.component.d.ts +14 -2
- package/lib/pages/suppliers/suppliers.component.d.ts +1 -4
- package/lib/pages/tasks/tasks.component.d.ts +1 -1
- package/lib/pages/tenant-settings/tenant-settings.component.d.ts +12 -7
- package/lib/pages/tenants/tenants.component.d.ts +2 -2
- package/lib/pages/users/users.component.d.ts +8 -16
- package/lib/select-context.directive.d.ts +10 -0
- package/lib/services/button.service.d.ts +10 -7
- package/lib/services/datalib.service.d.ts +54 -10
- package/lib/services/dialog.service.d.ts +2 -2
- package/lib/services/notifications.service.d.ts +12 -0
- package/lib/services/table-config.service.d.ts +9 -1
- package/lib/tin-spa.module.d.ts +50 -33
- package/package.json +1 -1
- package/public-api.d.ts +7 -0
- package/esm2020/lib/pages/invitations/invitations.component.mjs +0 -14
- package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +0 -60
- package/lib/pages/invitations/invitations.component.d.ts +0 -8
- package/lib/pages/tenant-settings/inviteDialog.component.d.ts +0 -28
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { AppConfig, CapItem } from '../classes/Classes';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { BehaviorSubject, of, tap } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "./http.service";
|
|
6
6
|
import * as i2 from "@angular/router";
|
|
7
|
+
import * as i3 from "./auth.service";
|
|
7
8
|
export class DataServiceLib {
|
|
8
|
-
constructor(httpService, router, route) {
|
|
9
|
+
constructor(httpService, router, route, authService) {
|
|
9
10
|
this.httpService = httpService;
|
|
10
11
|
this.router = router;
|
|
11
12
|
this.route = route;
|
|
13
|
+
this.authService = authService;
|
|
12
14
|
this.appConfig = new AppConfig();
|
|
13
15
|
this.appConfigSource = new BehaviorSubject(this.appConfig);
|
|
14
16
|
this.appConfigObserv = this.appConfigSource.asObservable();
|
|
@@ -33,13 +35,57 @@ export class DataServiceLib {
|
|
|
33
35
|
this.capDepartments = new CapItem;
|
|
34
36
|
this.capPositions = new CapItem;
|
|
35
37
|
this.capGrades = new CapItem;
|
|
38
|
+
this.capApprovals = new CapItem;
|
|
39
|
+
this.capApprovalsConfig = new CapItem;
|
|
40
|
+
this.capNotifications = new CapItem;
|
|
41
|
+
this.capSelfApproval = new CapItem;
|
|
42
|
+
this.capAppModels = new CapItem;
|
|
43
|
+
this.capNotificationsConfig = new CapItem;
|
|
36
44
|
this.tmpProfileuserName = "";
|
|
37
45
|
this.isProcessing = false;
|
|
46
|
+
//--------------------------Departmemts Form-------------------------
|
|
47
|
+
this.departmentFormConfig = {
|
|
48
|
+
security: { allow: [this.capDepartments] },
|
|
49
|
+
title: 'Department',
|
|
50
|
+
fields: [
|
|
51
|
+
{ name: 'name', type: 'text', required: true },
|
|
52
|
+
],
|
|
53
|
+
loadAction: { url: 'departments/id' },
|
|
54
|
+
heroField: 'departmentID',
|
|
55
|
+
includeAudit: true,
|
|
56
|
+
};
|
|
57
|
+
this.editDepartmentButton = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
58
|
+
this.departmentDetailsConfig = {
|
|
59
|
+
formConfig: this.departmentFormConfig,
|
|
60
|
+
heroField: 'departmentID',
|
|
61
|
+
buttons: [this.editDepartmentButton],
|
|
62
|
+
};
|
|
63
|
+
//--------------------------Positions Form-------------------------
|
|
64
|
+
this.positionFormConfig = {
|
|
65
|
+
security: { allow: [this.capPositions] },
|
|
66
|
+
title: 'Position',
|
|
67
|
+
fields: [
|
|
68
|
+
{ name: 'name', type: 'text', required: true },
|
|
69
|
+
{ name: 'description', type: 'text', },
|
|
70
|
+
{ name: 'departmentID', alias: 'Department', type: 'select', loadAction: { url: 'departments/list/x' }, detailsConfig: this.departmentDetailsConfig },
|
|
71
|
+
],
|
|
72
|
+
loadAction: { url: 'positions/id' },
|
|
73
|
+
heroField: 'positionID',
|
|
74
|
+
includeAudit: true,
|
|
75
|
+
};
|
|
76
|
+
this.editPositionButton = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
77
|
+
this.positionDetailsConfig = {
|
|
78
|
+
formConfig: this.positionFormConfig,
|
|
79
|
+
heroField: 'positionID',
|
|
80
|
+
buttons: [this.editPositionButton],
|
|
81
|
+
};
|
|
82
|
+
//--------------------------Employees-------------------------
|
|
38
83
|
this.genders = [
|
|
39
84
|
{ name: 'Male', value: 1 },
|
|
40
85
|
{ name: 'Female', value: 2 }
|
|
41
86
|
];
|
|
42
87
|
this.employeeFormConfig = {
|
|
88
|
+
security: { allow: [this.capEmployees] },
|
|
43
89
|
fields: [
|
|
44
90
|
{ name: 'nationalID', type: 'text', alias: 'National ID', required: true },
|
|
45
91
|
{ name: 'gender', alias: 'Gender', type: 'select', options: this.genders, required: true },
|
|
@@ -47,20 +93,26 @@ export class DataServiceLib {
|
|
|
47
93
|
{ name: 'lastName', type: 'text', required: true },
|
|
48
94
|
{ name: 'dateOfBirth', type: 'date', alias: 'Date of Birth', required: true },
|
|
49
95
|
{ name: 'employmentDate', type: 'date', alias: 'Employment Date', required: true },
|
|
50
|
-
{ name: 'departmentID', alias: 'Department', type: 'select',
|
|
51
|
-
{ name: 'positionID', alias: 'Position', type: 'select',
|
|
52
|
-
{ name: 'employmentStatus', alias: 'Employment Status', type: 'select',
|
|
53
|
-
{ name: 'activeStatus', alias: 'Active Status', type: 'select',
|
|
96
|
+
{ name: 'departmentID', alias: 'Department', type: 'select', loadAction: { url: 'departments/list/x' }, detailsConfig: this.departmentDetailsConfig },
|
|
97
|
+
{ name: 'positionID', alias: 'Position', type: 'select', loadAction: { url: 'positions/list/x' }, masterField: 'departmentID', detailsConfig: this.positionDetailsConfig },
|
|
98
|
+
{ name: 'employmentStatus', alias: 'Employment Status', type: 'select', loadAction: { url: 'employees/list/employment-status' } },
|
|
99
|
+
{ name: 'activeStatus', alias: 'Active Status', type: 'select', loadAction: { url: 'employees/list/active-status' } },
|
|
100
|
+
{ name: 'passportNumber', type: 'text', alias: 'Passport Number' },
|
|
101
|
+
{ name: 'userName', type: 'select', alias: 'User', loadAction: { url: 'user/list/x' }, optionDisplay: 'name', optionValue: 'value', nullable: true, infoMessage: 'Related user account' },
|
|
54
102
|
{ name: 'address', type: 'text', rows: 2, span: true },
|
|
55
103
|
{ name: 'phone', type: 'text' },
|
|
56
104
|
{ name: 'email', type: 'text' },
|
|
57
105
|
{ name: 'note', type: 'text', rows: 2, span: true },
|
|
58
106
|
],
|
|
107
|
+
loadAction: { url: 'employees/id' },
|
|
108
|
+
heroField: 'employeeID',
|
|
109
|
+
includeAudit: true,
|
|
59
110
|
};
|
|
60
|
-
this.
|
|
111
|
+
this.employeesTableConfig = {
|
|
61
112
|
showFilter: true,
|
|
62
113
|
minColumns: ['name', 'departmentName', 'positionName'],
|
|
63
114
|
flatButtons: true,
|
|
115
|
+
logResponse: true,
|
|
64
116
|
columns: [
|
|
65
117
|
{ name: 'name', type: 'text' },
|
|
66
118
|
{ name: 'genderName', type: 'text', alias: 'Gender' },
|
|
@@ -68,33 +120,25 @@ export class DataServiceLib {
|
|
|
68
120
|
{ name: 'positionName', type: 'text', alias: 'Position' },
|
|
69
121
|
{ name: 'employmentStatusName', type: 'text', alias: 'Employment Status' },
|
|
70
122
|
{ name: 'activeStatusName', type: 'text', alias: 'Active Status' },
|
|
123
|
+
{ name: 'isLinked', type: 'checkbox', alias: 'Linked' },
|
|
71
124
|
],
|
|
72
125
|
buttons: [
|
|
73
|
-
{ name: 'create', display: 'Create', dialog: true, action: { url: '
|
|
126
|
+
{ name: 'create', display: 'Create', dialog: true, action: { url: 'employees?action=create', method: 'post' } },
|
|
74
127
|
{ name: 'view', dialog: true },
|
|
75
|
-
{ name: 'edit', dialog: true, action: { url: '
|
|
76
|
-
{ name: 'delete', dialog: true, action: { url: '
|
|
128
|
+
{ name: 'edit', dialog: true, action: { url: 'employees?action=edit', method: 'post' } },
|
|
129
|
+
{ name: 'delete', dialog: true, action: { url: 'employees?action=delete', method: 'post' } },
|
|
77
130
|
],
|
|
78
|
-
loadAction: { url: '
|
|
131
|
+
loadAction: { url: 'employees/all/x' },
|
|
79
132
|
formConfig: this.employeeFormConfig
|
|
80
133
|
};
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
{ name: 'name', type: 'text', required: true },
|
|
84
|
-
// { name: 'departmentID', alias: 'Department', type: 'select', options: [], optionDisplay: 'name', optionValue: 'departmentID' },
|
|
85
|
-
{ name: 'description', type: 'text', span: true },
|
|
86
|
-
],
|
|
87
|
-
loadAction: { url: 'positions/id' },
|
|
88
|
-
};
|
|
89
|
-
this.editPositionButton = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
90
|
-
this.positionTableConfig = {
|
|
134
|
+
//--------------------------Positions-------------------------
|
|
135
|
+
this.positionsTableConfig = {
|
|
91
136
|
showFilter: true,
|
|
92
|
-
minColumns: ['name', 'departmentName', 'salary'],
|
|
93
137
|
flatButtons: true,
|
|
94
138
|
columns: [
|
|
95
|
-
{ name: 'positionID', type: 'number', alias: 'ID' },
|
|
96
139
|
{ name: 'name', type: 'text' },
|
|
97
|
-
|
|
140
|
+
{ name: 'description', type: 'text' },
|
|
141
|
+
{ name: 'departmentName', type: 'chip', detailsConfig: this.departmentDetailsConfig, alias: 'Department' },
|
|
98
142
|
],
|
|
99
143
|
buttons: [
|
|
100
144
|
{ name: 'create', display: 'Create', dialog: true, action: { url: 'positions?action=create', method: 'post' } },
|
|
@@ -102,16 +146,15 @@ export class DataServiceLib {
|
|
|
102
146
|
name: 'view',
|
|
103
147
|
dialog: true,
|
|
104
148
|
detailsConfig: {
|
|
105
|
-
formConfig:
|
|
149
|
+
formConfig: this.positionFormConfig,
|
|
106
150
|
heroField: 'positionID',
|
|
107
151
|
buttons: [this.editPositionButton],
|
|
108
152
|
tableConfigs: [
|
|
109
153
|
{
|
|
110
|
-
...this.
|
|
111
|
-
loadAction: { url: '
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
title: 'Employees',
|
|
154
|
+
...this.employeesTableConfig,
|
|
155
|
+
loadAction: { url: 'employees/x/x' }, loadCriteria: 'position', loadIDField: 'positionID',
|
|
156
|
+
columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),
|
|
157
|
+
tabTitle: 'Employees',
|
|
115
158
|
elevation: 'none',
|
|
116
159
|
}
|
|
117
160
|
],
|
|
@@ -124,19 +167,12 @@ export class DataServiceLib {
|
|
|
124
167
|
formConfig: this.positionFormConfig
|
|
125
168
|
};
|
|
126
169
|
//--------------------------Departments-------------------------
|
|
127
|
-
this.departmentFormConfig = {
|
|
128
|
-
fields: [
|
|
129
|
-
{ name: 'name', type: 'text', required: true },
|
|
130
|
-
],
|
|
131
|
-
loadAction: { url: 'departments/id' },
|
|
132
|
-
};
|
|
133
|
-
this.editDepartmentButton = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
134
170
|
this.departmentTableConfig = {
|
|
135
171
|
showFilter: true,
|
|
136
172
|
minColumns: ['name'],
|
|
137
173
|
flatButtons: true,
|
|
138
174
|
columns: [
|
|
139
|
-
{ name: 'departmentID', type: 'number', alias: 'ID' },
|
|
175
|
+
// { name: 'departmentID', type: 'number', alias: 'ID' },
|
|
140
176
|
{ name: 'name', type: 'text' },
|
|
141
177
|
],
|
|
142
178
|
buttons: [
|
|
@@ -150,19 +186,16 @@ export class DataServiceLib {
|
|
|
150
186
|
buttons: [this.editDepartmentButton],
|
|
151
187
|
tableConfigs: [
|
|
152
188
|
{
|
|
153
|
-
...this.
|
|
154
|
-
loadAction: { url: '
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
title: 'Employees',
|
|
189
|
+
...this.employeesTableConfig,
|
|
190
|
+
loadAction: { url: 'employees/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',
|
|
191
|
+
columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),
|
|
192
|
+
tabTitle: 'Employees',
|
|
158
193
|
elevation: 'none',
|
|
159
194
|
},
|
|
160
195
|
{
|
|
161
|
-
...this.
|
|
162
|
-
loadAction: { url: '
|
|
163
|
-
|
|
164
|
-
loadIDField: 'departmentID',
|
|
165
|
-
title: 'Positions',
|
|
196
|
+
...this.positionsTableConfig,
|
|
197
|
+
loadAction: { url: 'positions/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',
|
|
198
|
+
tabTitle: 'Positions',
|
|
166
199
|
elevation: 'none',
|
|
167
200
|
}
|
|
168
201
|
],
|
|
@@ -174,6 +207,352 @@ export class DataServiceLib {
|
|
|
174
207
|
loadAction: { url: 'departments/all/x' },
|
|
175
208
|
formConfig: this.departmentFormConfig
|
|
176
209
|
};
|
|
210
|
+
//--------------------------Contact Persons-------------------------
|
|
211
|
+
this.contactPersonFormConfig = {
|
|
212
|
+
title: 'Contact Person',
|
|
213
|
+
includeAudit: true,
|
|
214
|
+
fields: [
|
|
215
|
+
{ name: 'name', type: 'text', span: true },
|
|
216
|
+
{ name: 'mobile', type: 'text' },
|
|
217
|
+
{ name: 'email', type: 'text' },
|
|
218
|
+
{ name: 'contactMethods', type: 'composite', span: true, subfields: [
|
|
219
|
+
{ name: 'canCall', type: 'checkbox', alias: 'Call' },
|
|
220
|
+
{ name: 'canSMS', type: 'checkbox', alias: 'SMS' },
|
|
221
|
+
{ name: 'canWhatsApp', type: 'checkbox', alias: 'WhatsApp' }
|
|
222
|
+
] },
|
|
223
|
+
],
|
|
224
|
+
reset: true
|
|
225
|
+
};
|
|
226
|
+
this.contactPersonTableConfig = {
|
|
227
|
+
tabTitle: 'Contacts',
|
|
228
|
+
showFilter: true,
|
|
229
|
+
minColumns: ['name', 'contactMethods'],
|
|
230
|
+
elevation: 'none',
|
|
231
|
+
flatButtons: true,
|
|
232
|
+
columns: [
|
|
233
|
+
{ name: 'name', type: 'text', },
|
|
234
|
+
{ name: 'mobile', type: 'text' },
|
|
235
|
+
{ name: 'email', type: 'text' },
|
|
236
|
+
{
|
|
237
|
+
name: 'contactMethods',
|
|
238
|
+
type: 'icon',
|
|
239
|
+
icons: [
|
|
240
|
+
{ name: 'call', color: 'green', condition: x => x.canCall, tip: 'Available for Calls' },
|
|
241
|
+
{ name: 'sms', color: 'green', condition: x => x.canSMS, tip: 'Available for SMS' },
|
|
242
|
+
{ name: 'forum', color: 'green', condition: x => x.canWhatsApp, tip: 'Available on WhatsApp' }
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
],
|
|
246
|
+
buttons: [
|
|
247
|
+
{ name: 'create', display: 'Add', dialog: true, action: { url: 'contactpersons?action=create', method: 'post' }, confirm: { message: 'Add contact person?' } },
|
|
248
|
+
{ name: 'edit', dialog: true, action: { url: 'contactpersons?action=edit', method: 'post' } },
|
|
249
|
+
{ name: 'delete', dialog: true, action: { url: 'contactpersons?action=delete', method: 'post' } }
|
|
250
|
+
],
|
|
251
|
+
formConfig: this.contactPersonFormConfig
|
|
252
|
+
};
|
|
253
|
+
//--------------------------Customers-------------------------
|
|
254
|
+
this.customerFormConfig = {
|
|
255
|
+
security: { allow: [this.capCustomers] },
|
|
256
|
+
includeAudit: true,
|
|
257
|
+
title: 'Customer',
|
|
258
|
+
fields: [
|
|
259
|
+
{ name: 'name', type: 'text', required: true },
|
|
260
|
+
{ name: 'phone', type: 'text' },
|
|
261
|
+
{ name: 'contactPerson', type: 'text' },
|
|
262
|
+
{ name: 'email', type: 'text' },
|
|
263
|
+
{ name: 'address', type: 'text', rows: 2, span: true },
|
|
264
|
+
{ name: 'customerTenantID', alias: 'Customer Tenant', type: 'text', loadAction: { url: 'tenants/list/x' }, nullable: true },
|
|
265
|
+
],
|
|
266
|
+
loadAction: { url: 'customers/id' },
|
|
267
|
+
heroField: 'customerID',
|
|
268
|
+
reset: true,
|
|
269
|
+
};
|
|
270
|
+
this.customerCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'customers?action=create', method: 'post' } };
|
|
271
|
+
this.customerEditButton = { name: 'edit', dialog: true, action: { url: 'customers?action=edit', method: 'post' } };
|
|
272
|
+
this.customerDetailsConfig = {
|
|
273
|
+
formConfig: this.customerFormConfig,
|
|
274
|
+
heroField: 'customerID',
|
|
275
|
+
tableConfigs: [
|
|
276
|
+
{
|
|
277
|
+
...this.contactPersonTableConfig,
|
|
278
|
+
loadAction: { url: 'contactpersons/customer/x' },
|
|
279
|
+
loadCriteria: 'customer',
|
|
280
|
+
loadIDField: 'customerID'
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
buttons: [
|
|
284
|
+
this.customerCreateButton,
|
|
285
|
+
this.customerEditButton
|
|
286
|
+
]
|
|
287
|
+
};
|
|
288
|
+
this.customersTableConfig = {
|
|
289
|
+
showFilter: true,
|
|
290
|
+
minColumns: ['name'],
|
|
291
|
+
flatButtons: true,
|
|
292
|
+
logResponse: true,
|
|
293
|
+
maxButtonsCount: 3,
|
|
294
|
+
collapseButtons: true,
|
|
295
|
+
columns: [
|
|
296
|
+
{ name: 'name', type: 'text' },
|
|
297
|
+
{ name: 'phone', type: 'text' },
|
|
298
|
+
{ name: 'contactPerson', type: 'text' },
|
|
299
|
+
{ name: 'isLinked', type: 'checkbox', alias: 'Linked' },
|
|
300
|
+
],
|
|
301
|
+
buttons: [
|
|
302
|
+
this.customerCreateButton,
|
|
303
|
+
{ name: 'view', dialog: true, detailsConfig: this.customerDetailsConfig },
|
|
304
|
+
{ name: 'edit', dialog: true, detailsConfig: this.customerDetailsConfig },
|
|
305
|
+
{ name: 'delete', dialog: true, action: { url: 'customers?action=delete', method: 'post' } },
|
|
306
|
+
],
|
|
307
|
+
loadAction: { url: 'customers/all/x' },
|
|
308
|
+
formConfig: this.customerFormConfig
|
|
309
|
+
};
|
|
310
|
+
//--------------------------Suppliers-------------------------
|
|
311
|
+
this.supplierFormConfig = {
|
|
312
|
+
security: { allow: [this.capSuppliers] },
|
|
313
|
+
includeAudit: true,
|
|
314
|
+
title: 'Supplier',
|
|
315
|
+
fields: [
|
|
316
|
+
{ name: 'name', type: 'text', required: true },
|
|
317
|
+
{ name: 'phone', type: 'text' },
|
|
318
|
+
{ name: 'contactPerson', type: 'text' },
|
|
319
|
+
{ name: 'email', type: 'text' },
|
|
320
|
+
{ name: 'address', type: 'text', rows: 2, span: true },
|
|
321
|
+
],
|
|
322
|
+
loadAction: { url: 'suppliers/id' },
|
|
323
|
+
heroField: 'supplierID',
|
|
324
|
+
};
|
|
325
|
+
this.supplierCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'suppliers?action=create', method: 'post' } };
|
|
326
|
+
this.supplierEditButton = { name: 'edit', dialog: true, action: { url: 'suppliers?action=edit', method: 'post' } };
|
|
327
|
+
this.supplierDetailsConfig = {
|
|
328
|
+
formConfig: this.supplierFormConfig,
|
|
329
|
+
heroField: 'supplierID',
|
|
330
|
+
tableConfigs: [
|
|
331
|
+
{
|
|
332
|
+
...this.contactPersonTableConfig,
|
|
333
|
+
loadAction: { url: 'contactpersons/supplier/x' },
|
|
334
|
+
loadCriteria: 'supplier',
|
|
335
|
+
loadIDField: 'supplierID'
|
|
336
|
+
}
|
|
337
|
+
],
|
|
338
|
+
buttons: [
|
|
339
|
+
this.supplierCreateButton,
|
|
340
|
+
this.supplierEditButton,
|
|
341
|
+
]
|
|
342
|
+
};
|
|
343
|
+
this.suppliersTableConfig = {
|
|
344
|
+
showFilter: true,
|
|
345
|
+
minColumns: ['name'],
|
|
346
|
+
flatButtons: true,
|
|
347
|
+
columns: [
|
|
348
|
+
{ name: 'name', type: 'text' },
|
|
349
|
+
{ name: 'phone', type: 'text' },
|
|
350
|
+
{ name: 'contactPerson', type: 'text' },
|
|
351
|
+
],
|
|
352
|
+
buttons: [
|
|
353
|
+
this.supplierCreateButton,
|
|
354
|
+
{ name: 'view', dialog: true, detailsConfig: this.supplierDetailsConfig },
|
|
355
|
+
{ name: 'edit', dialog: true, detailsConfig: this.supplierDetailsConfig },
|
|
356
|
+
{ name: 'delete', dialog: true, action: { url: 'suppliers?action=delete', method: 'post' } },
|
|
357
|
+
],
|
|
358
|
+
loadAction: { url: 'suppliers/all/x' },
|
|
359
|
+
formConfig: this.supplierFormConfig
|
|
360
|
+
};
|
|
361
|
+
//--------------------------Notifications-------------------------
|
|
362
|
+
this.notificationOptions = [
|
|
363
|
+
{ name: 'UI Only', value: 1 },
|
|
364
|
+
{ name: 'UI + Email', value: 3 },
|
|
365
|
+
// { name: 'UI + Email + SMS', value: 7 },
|
|
366
|
+
{ name: 'UI + WhatsApp', value: 9 },
|
|
367
|
+
{ name: 'UI + Telegram', value: 17 },
|
|
368
|
+
{ name: 'UI + Telegram + WhatsApp', value: 25 },
|
|
369
|
+
{ name: 'All Channels', value: 31 }
|
|
370
|
+
];
|
|
371
|
+
//--------------------------Approvals-------------------------
|
|
372
|
+
this.approvalHistoryFormConfig = {
|
|
373
|
+
title: 'Approval History',
|
|
374
|
+
fields: [
|
|
375
|
+
{ name: 'levelName', type: 'text', readonly: true, alias: 'Level' },
|
|
376
|
+
{ name: 'statusName', type: 'text', readonly: true, alias: 'Status' },
|
|
377
|
+
{ name: 'comments', type: 'text', readonly: true, span: true, rows: 3, copyContent: true },
|
|
378
|
+
],
|
|
379
|
+
includeAudit: true
|
|
380
|
+
};
|
|
381
|
+
//Approval History
|
|
382
|
+
this.approvalHistoryTableConfig = {
|
|
383
|
+
tabTitle: 'Trail',
|
|
384
|
+
elevation: 'none',
|
|
385
|
+
minColumns: ['createdDate', 'levelName', 'statusName'],
|
|
386
|
+
flatButtons: true,
|
|
387
|
+
showFilter: true,
|
|
388
|
+
columns: [
|
|
389
|
+
{ name: 'createdDate', type: 'datetime', alias: 'Date' },
|
|
390
|
+
{ name: 'levelName', type: 'text', alias: 'Level' },
|
|
391
|
+
{
|
|
392
|
+
name: 'statusName', type: 'text', alias: 'Status',
|
|
393
|
+
colors: [
|
|
394
|
+
{ name: '#90A4AE', condition: x => x.status === 0 },
|
|
395
|
+
{ name: '#66BB6A', condition: x => x.status === 1 },
|
|
396
|
+
{ name: '#F44336', condition: x => x.status === 2 }
|
|
397
|
+
]
|
|
398
|
+
},
|
|
399
|
+
{ name: 'comments', type: 'text', },
|
|
400
|
+
{ name: 'createdByName', type: 'text', alias: 'By' },
|
|
401
|
+
],
|
|
402
|
+
buttons: [
|
|
403
|
+
{ name: 'view', dialog: true }
|
|
404
|
+
],
|
|
405
|
+
formConfig: this.approvalHistoryFormConfig,
|
|
406
|
+
loadAction: { url: 'approvalhistory/approval/x' },
|
|
407
|
+
loadCriteria: 'approval',
|
|
408
|
+
loadIDField: 'approvalID'
|
|
409
|
+
};
|
|
410
|
+
//approvals form
|
|
411
|
+
this.approvalFormConfig = {
|
|
412
|
+
title: 'Approval',
|
|
413
|
+
fields: [
|
|
414
|
+
{ name: 'blank', type: 'blank', span: true },
|
|
415
|
+
{ name: 'statusName', type: 'label', alias: 'Status', span: true },
|
|
416
|
+
{ name: 'message', type: 'text', required: true, span: true, rows: 3 },
|
|
417
|
+
],
|
|
418
|
+
loadAction: { url: 'approvals/id' },
|
|
419
|
+
heroField: 'approvalID'
|
|
420
|
+
};
|
|
421
|
+
// approval action dialog
|
|
422
|
+
this.approvalActionFormConfig = {
|
|
423
|
+
title: 'Approval Action',
|
|
424
|
+
fixedTitle: true,
|
|
425
|
+
fields: [
|
|
426
|
+
{
|
|
427
|
+
name: 'comments', type: 'text', required: false, span: true, rows: 3,
|
|
428
|
+
infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'
|
|
429
|
+
}
|
|
430
|
+
]
|
|
431
|
+
};
|
|
432
|
+
this.approveActionDetailsConfig = {
|
|
433
|
+
formConfig: {
|
|
434
|
+
...this.approvalActionFormConfig,
|
|
435
|
+
fields: [
|
|
436
|
+
{
|
|
437
|
+
name: 'comments', type: 'text', required: false, span: true, rows: 3,
|
|
438
|
+
infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'
|
|
439
|
+
}
|
|
440
|
+
],
|
|
441
|
+
},
|
|
442
|
+
mode: 'edit',
|
|
443
|
+
buttons: [
|
|
444
|
+
{ name: 'edit', display: 'Approve', color: 'green', action: { url: 'approve', method: 'post' } } //url preconfigured to be dynamic
|
|
445
|
+
]
|
|
446
|
+
};
|
|
447
|
+
this.declineActionDetailsConfig = {
|
|
448
|
+
formConfig: { ...this.approvalActionFormConfig,
|
|
449
|
+
fields: [
|
|
450
|
+
{
|
|
451
|
+
name: 'comments', type: 'text', required: true, span: true, rows: 3,
|
|
452
|
+
infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.',
|
|
453
|
+
hint: 'Decline comment is required !'
|
|
454
|
+
}
|
|
455
|
+
],
|
|
456
|
+
},
|
|
457
|
+
mode: 'edit',
|
|
458
|
+
buttons: [
|
|
459
|
+
{ name: 'edit', display: 'Decline', color: 'red', action: { url: 'decline', method: 'post' } } //url preconfigured to be dynamic
|
|
460
|
+
]
|
|
461
|
+
};
|
|
462
|
+
this.approveButton = {
|
|
463
|
+
name: 'approve', tip: 'Approve Request', dialog: true, inDialog: true, icon: { name: 'done' }, color: 'green', detailsConfig: this.approveActionDetailsConfig, ignorePendingApproval: true,
|
|
464
|
+
visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),
|
|
465
|
+
};
|
|
466
|
+
this.declineButton = {
|
|
467
|
+
name: 'decline', tip: 'Decline Request', dialog: true, inDialog: true, icon: { name: 'close' }, color: 'red', detailsConfig: this.declineActionDetailsConfig, ignorePendingApproval: true,
|
|
468
|
+
visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),
|
|
469
|
+
};
|
|
470
|
+
this.cancelButton = {
|
|
471
|
+
name: 'cancel', tip: 'Cancel Approval', inDialog: true, icon: { name: 'cancel' }, color: 'red', action: { url: 'cancel', method: 'post', }, ignorePendingApproval: true,
|
|
472
|
+
confirm: { message: 'Cancel approval request? This will revert changes and stop the approval process.' },
|
|
473
|
+
visible: x => x && x.canCancel
|
|
474
|
+
};
|
|
475
|
+
this.approvalDetailsConfig = {
|
|
476
|
+
formConfig: this.approvalFormConfig,
|
|
477
|
+
heroField: 'approvalID',
|
|
478
|
+
tableConfigs: [this.approvalHistoryTableConfig],
|
|
479
|
+
stepConfig: {
|
|
480
|
+
steps: [],
|
|
481
|
+
loadAction: { url: `approvals/steps/{id}` },
|
|
482
|
+
loadIDField: 'approvalID',
|
|
483
|
+
valueField: 'currentLevel'
|
|
484
|
+
},
|
|
485
|
+
buttons: [
|
|
486
|
+
this.approveButton,
|
|
487
|
+
this.declineButton,
|
|
488
|
+
this.cancelButton
|
|
489
|
+
]
|
|
490
|
+
};
|
|
491
|
+
this.viewApprovalButton = {
|
|
492
|
+
name: 'info', tip: 'Approval Information', dialog: true, icon: { name: 'info', }, detailsConfig: this.approvalDetailsConfig, ignorePendingApproval: true,
|
|
493
|
+
visible: x => x.canAction || x.canCancel
|
|
494
|
+
};
|
|
495
|
+
//received approvals
|
|
496
|
+
this.receivedApprovalsTableConfig = {
|
|
497
|
+
showFilter: true,
|
|
498
|
+
minColumns: ['message', 'statusName'],
|
|
499
|
+
minButtons: ['view', 'approve', 'decline'],
|
|
500
|
+
flatButtons: true,
|
|
501
|
+
greyOut: (x) => x.isGreyedOut,
|
|
502
|
+
// logResponse: true,
|
|
503
|
+
collapseButtons: true,
|
|
504
|
+
columns: [
|
|
505
|
+
{ name: 'createdDate', type: 'datetime', alias: 'Date' },
|
|
506
|
+
{ name: 'createdByName', alias: 'Request By', type: 'text' },
|
|
507
|
+
{ name: 'message', type: 'text' },
|
|
508
|
+
{
|
|
509
|
+
name: 'typeName', alias: 'Type', type: 'chip',
|
|
510
|
+
colors: [
|
|
511
|
+
{ name: '#66BB6A', condition: x => x.type === 0 },
|
|
512
|
+
{ name: 'orange', condition: x => x.type === 1 },
|
|
513
|
+
{ name: '#F44336', condition: x => x.type === 2 }
|
|
514
|
+
]
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
name: 'statusName', alias: 'Status', type: 'chip', detailsConfig: this.approvalDetailsConfig,
|
|
518
|
+
colors: [
|
|
519
|
+
{ name: '#90A4AE', condition: x => x.status === 0 },
|
|
520
|
+
{ name: '#66BB6A', condition: x => x.status === 1 },
|
|
521
|
+
{ name: '#F44336', condition: x => x.status === 2 }
|
|
522
|
+
]
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
name: 'currentLevelName', type: 'text', alias: 'Current Level',
|
|
526
|
+
icons: [
|
|
527
|
+
{ name: 'done', color: '#66BB6A', condition: x => x.status === 'Approved', tip: 'Approved' },
|
|
528
|
+
{ name: 'close', color: '#F44336', condition: x => x.status === 'Declined', tip: 'Declined' },
|
|
529
|
+
{ name: 'schedule', color: '#FFC107', condition: x => x.status === 'Pending', tip: 'Pending' }
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
{ name: 'updatedByName', alias: 'Actioned By', type: 'text' },
|
|
533
|
+
{ name: 'updatedDateDisplay', type: 'datetime', alias: 'Actioned Date' },
|
|
534
|
+
],
|
|
535
|
+
buttons: [
|
|
536
|
+
this.viewApprovalButton,
|
|
537
|
+
this.approveButton,
|
|
538
|
+
this.declineButton,
|
|
539
|
+
this.cancelButton,
|
|
540
|
+
],
|
|
541
|
+
loadAction: { url: 'approvals/all/x' }
|
|
542
|
+
};
|
|
543
|
+
//send approvals
|
|
544
|
+
this.sentApprovalsTableConfig = {
|
|
545
|
+
...this.receivedApprovalsTableConfig,
|
|
546
|
+
buttons: [
|
|
547
|
+
this.viewApprovalButton,
|
|
548
|
+
this.cancelButton,
|
|
549
|
+
],
|
|
550
|
+
loadAction: { url: 'approvals/sent/x' }
|
|
551
|
+
};
|
|
552
|
+
//---------------------------Other code
|
|
553
|
+
this.listCache = {};
|
|
554
|
+
this.cacheDuration = 1 * 60 * 1000;
|
|
555
|
+
this.cacheTimestamps = {};
|
|
177
556
|
this.appConfig.appName = "App-Name";
|
|
178
557
|
this.appConfig.logo = "./assets/logo.png";
|
|
179
558
|
this.appConfig.ADAuth = true;
|
|
@@ -217,7 +596,7 @@ export class DataServiceLib {
|
|
|
217
596
|
this.capPlans.link = "home/admin/plans";
|
|
218
597
|
this.capGeneral.name = "cap11";
|
|
219
598
|
this.capGeneral.display = "General";
|
|
220
|
-
this.capGeneral.capSubItems = [this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
|
|
599
|
+
this.capGeneral.capSubItems = [this.capNotifications, this.capApprovals, this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
|
|
221
600
|
this.capCustomers.name = "cap12";
|
|
222
601
|
this.capCustomers.display = "Customers";
|
|
223
602
|
this.capCustomers.link = "home/admin/customers";
|
|
@@ -237,56 +616,74 @@ export class DataServiceLib {
|
|
|
237
616
|
this.capTasks.name = "cap16";
|
|
238
617
|
this.capTasks.display = "Tasks";
|
|
239
618
|
this.capTasks.link = "home/admin/tasks";
|
|
240
|
-
this.capTasks.icon = "
|
|
619
|
+
this.capTasks.icon = "check_box";
|
|
241
620
|
this.capHR.name = "cap17";
|
|
242
621
|
this.capHR.display = "HR";
|
|
243
622
|
this.capHR.link = "home/admin/hr";
|
|
244
623
|
this.capHR.icon = "diversity_3";
|
|
245
|
-
this.capHR.capSubItems = [this.
|
|
246
|
-
this.capEmployees.name = "
|
|
624
|
+
this.capHR.capSubItems = [this.capDepartments, this.capPositions, this.capEmployees,];
|
|
625
|
+
this.capEmployees.name = "cap18";
|
|
247
626
|
this.capEmployees.display = "Employees";
|
|
248
627
|
this.capEmployees.link = "home/admin/employees";
|
|
249
628
|
this.capEmployees.icon = "group";
|
|
250
|
-
this.capDepartments.name = "
|
|
629
|
+
this.capDepartments.name = "cap19";
|
|
251
630
|
this.capDepartments.display = "Departments";
|
|
252
631
|
this.capDepartments.link = "home/admin/departments";
|
|
253
632
|
this.capDepartments.icon = "business_center";
|
|
254
|
-
this.capPositions.name = "
|
|
633
|
+
this.capPositions.name = "cap20";
|
|
255
634
|
this.capPositions.display = "Positions";
|
|
256
635
|
this.capPositions.link = "home/admin/positions";
|
|
257
636
|
this.capPositions.icon = "picture_in_picture_medium";
|
|
637
|
+
this.capApprovals.name = "cap21";
|
|
638
|
+
this.capApprovals.display = "Approvals";
|
|
639
|
+
this.capApprovals.link = "home/admin/approvals";
|
|
640
|
+
this.capApprovals.icon = "rule";
|
|
641
|
+
this.capApprovalsConfig.name = "cap22";
|
|
642
|
+
this.capApprovalsConfig.display = "Approvals Config";
|
|
643
|
+
this.capApprovalsConfig.link = "home/admin/approvals-config";
|
|
644
|
+
this.capApprovalsConfig.icon = "published_with_changes";
|
|
645
|
+
this.capApprovalsConfig.capSubItems = [this.capSelfApproval];
|
|
646
|
+
this.capSelfApproval.name = "cap23";
|
|
647
|
+
this.capSelfApproval.display = "Self Approvals";
|
|
648
|
+
this.capSelfApproval.isBool = true;
|
|
649
|
+
this.capNotifications.name = "cap24";
|
|
650
|
+
this.capNotifications.display = "Notifications";
|
|
651
|
+
this.capNotifications.link = "home/admin/notifications";
|
|
652
|
+
this.capNotifications.icon = "notifications";
|
|
653
|
+
this.capAppModels.name = "cap25";
|
|
654
|
+
this.capAppModels.display = "App Models";
|
|
655
|
+
this.capAppModels.link = "home/admin/appmodels";
|
|
656
|
+
// this.capAppModels.icon = "notifications"
|
|
657
|
+
this.capNotificationsConfig.name = "cap26";
|
|
658
|
+
this.capNotificationsConfig.display = "Notif Config";
|
|
659
|
+
this.capNotificationsConfig.link = "home/admin/notifications-config";
|
|
660
|
+
this.authService.myRoleObserv.subscribe((role) => {
|
|
661
|
+
this.myRole = role;
|
|
662
|
+
});
|
|
258
663
|
}
|
|
259
664
|
UpdateAppConfig(config) {
|
|
260
665
|
this.appConfigSource.next(config);
|
|
261
666
|
this.appConfig = config;
|
|
262
667
|
}
|
|
263
|
-
//--------------------------Employees-------------------------
|
|
264
|
-
loadEmployeesMeta() {
|
|
265
|
-
this.CallApi({ url: 'general/employeesmeta/x' }, "").subscribe((apiResponse) => {
|
|
266
|
-
this.employeeFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
|
|
267
|
-
this.employeeFormConfig.fields.find(x => x.name == 'positionID').masterOptions = apiResponse.data.positions;
|
|
268
|
-
this.employeeFormConfig.fields.find(x => x.name == 'employmentStatus').options = apiResponse.data.employmentStatuses;
|
|
269
|
-
this.employeeFormConfig.fields.find(x => x.name == 'activeStatus').options = apiResponse.data.activeStatuses;
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
//--------------------------Positions-------------------------
|
|
273
|
-
loadPositionMeta() {
|
|
274
|
-
// this.CallApi({ url: 'positions/meta/x' }, "").subscribe((apiResponse: ApiResponse) => {
|
|
275
|
-
// this.positionFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
|
|
276
|
-
// });
|
|
277
|
-
}
|
|
278
|
-
//---------------------------Other code
|
|
279
668
|
CallApi(action, data = '') {
|
|
280
|
-
if (!action
|
|
281
|
-
|
|
669
|
+
if (!action?.url) {
|
|
670
|
+
console.warn('Invalid action or missing URL');
|
|
671
|
+
return of({ success: false, message: 'Invalid action configuration' });
|
|
282
672
|
}
|
|
283
|
-
if (action.
|
|
673
|
+
if (action.url.includes('/list/')) {
|
|
674
|
+
return this.handleListCall(action);
|
|
675
|
+
}
|
|
676
|
+
console.log("calling", action);
|
|
677
|
+
if (!action.method || action.method == 'get') {
|
|
284
678
|
return this.httpService.Get(action.url);
|
|
285
679
|
}
|
|
286
680
|
else if (action.method == 'post') {
|
|
287
681
|
if (action.isFormData) {
|
|
288
682
|
return this.httpService.Post_FormData(action.url, data);
|
|
289
683
|
}
|
|
684
|
+
else if (action.url == 'approve' || action.url == 'decline' || action.url == 'cancel') {
|
|
685
|
+
return this.httpService.Post(`${data.endpoint}/approve?action=${action.url}`, data);
|
|
686
|
+
}
|
|
290
687
|
else {
|
|
291
688
|
return this.httpService.Post(action.url, data);
|
|
292
689
|
}
|
|
@@ -295,6 +692,37 @@ export class DataServiceLib {
|
|
|
295
692
|
return this.httpService.Post(action.url, data);
|
|
296
693
|
}
|
|
297
694
|
}
|
|
695
|
+
handleListCall(action) {
|
|
696
|
+
const cacheKey = action.url;
|
|
697
|
+
const currentTime = Date.now();
|
|
698
|
+
// Return cache if valid and not forcing refresh
|
|
699
|
+
if (!action.skipCache && this.listCache[cacheKey] && currentTime - this.cacheTimestamps[cacheKey] < this.cacheDuration) {
|
|
700
|
+
return of({
|
|
701
|
+
success: true,
|
|
702
|
+
data: this.listCache[cacheKey]
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
// Make API call and cache result
|
|
706
|
+
return this.httpService.Get(action.url).pipe(tap((response) => {
|
|
707
|
+
if (response.success && response?.data?.length > 0) {
|
|
708
|
+
this.listCache[cacheKey] = response.data;
|
|
709
|
+
this.cacheTimestamps[cacheKey] = currentTime;
|
|
710
|
+
}
|
|
711
|
+
}));
|
|
712
|
+
}
|
|
713
|
+
// Method to invalidate cache on data change
|
|
714
|
+
invalidateListCache(entityUrl) {
|
|
715
|
+
Object.keys(this.listCache).forEach(key => {
|
|
716
|
+
// Invalidate any cache entries related to this entity
|
|
717
|
+
if (key.includes(entityUrl)) {
|
|
718
|
+
delete this.listCache[key];
|
|
719
|
+
delete this.cacheTimestamps[key];
|
|
720
|
+
}
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
ClearCache() {
|
|
724
|
+
this.listCache = {};
|
|
725
|
+
}
|
|
298
726
|
CheckWelcomed(path = 'home/admin/welcome') {
|
|
299
727
|
this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {
|
|
300
728
|
if (!x.data) {
|
|
@@ -376,12 +804,12 @@ export class DataServiceLib {
|
|
|
376
804
|
return this.httpService.Post(`Setting?action=${action}`, setting);
|
|
377
805
|
}
|
|
378
806
|
}
|
|
379
|
-
DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
807
|
+
DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
380
808
|
DataServiceLib.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, providedIn: 'root' });
|
|
381
809
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, decorators: [{
|
|
382
810
|
type: Injectable,
|
|
383
811
|
args: [{
|
|
384
812
|
providedIn: 'root'
|
|
385
813
|
}]
|
|
386
|
-
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBdUIsU0FBUyxFQUFVLE9BQU8sRUFBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBUW5ELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLFdBQXdCLEVBQVMsTUFBYyxFQUFVLEtBQXFCO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBa0hsRyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFNN0QsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixnQkFBVyxHQUFHLElBQUksT0FBTyxDQUFDO1FBRTFCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDN0IsZUFBVSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDNUIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FB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QUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUdELE9BQU87SUFFQSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQWM7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxPQUFPLENBQUMsSUFBSTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUlELE1BQU07SUFDQyxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsVUFBVTtJQUNILFVBQVUsQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7MkdBaGRVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBBcHBDb25maWcsIEJ1dHRvbiwgQ2FwSXRlbSwgRm9ybUNvbmZpZywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy9MaWJDbGFzc2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlTGliIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHJcbiAgICB0aGlzLmFwcENvbmZpZy5hcHBOYW1lID0gXCJBcHAtTmFtZVwiO1xyXG4gICAgdGhpcy5hcHBDb25maWcubG9nbyA9IFwiLi9hc3NldHMvbG9nby5wbmdcIlxyXG4gICAgdGhpcy5hcHBDb25maWcuQURBdXRoID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBwQ29uZmlnLmNhcEl0ZW1zID0gW3RoaXMuY2FwTXVsdGl0ZW5hbnQsIHRoaXMuY2FwQWRtaW4sIHRoaXMuY2FwSG9tZV07XHJcblxyXG5cclxuICAgIHRoaXMuY2FwSG9tZS5uYW1lID0gXCJjYXAxXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUuZGlzcGxheSA9IFwiSG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmxpbmsgPSBcImhvbWVcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5pY29uID1cImhvbWVcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBBZG1pbi5uYW1lID0gXCJjYXAyXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmRpc3BsYXkgPSBcIkFkbWluXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmljb24gPSBcInNlY3VyaXR5XCJcclxuICAgIHRoaXMuY2FwQWRtaW4uY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBVc2VycywgdGhpcy5jYXBSb2xlcywgdGhpcy5jYXBMb2dzLCB0aGlzLmNhcFNldHRpbmdzXTtcclxuXHJcbiAgICB0aGlzLmNhcFVzZXJzLm5hbWUgPSBcImNhcDNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMuZGlzcGxheSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMubGluayA9IFwiaG9tZS9hZG1pbi91c2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5pY29uID0gXCJncm91cFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUm9sZXMubmFtZSA9IFwiY2FwNFwiXHJcbiAgICB0aGlzLmNhcFJvbGVzLmRpc3BsYXkgPSBcIlJvbGVzXCI7XHJcbiAgICB0aGlzLmNhcFJvbGVzLmxpbmsgPSBcImhvbWUvYWRtaW4vcm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMuaWNvbiA9IFwid29ya1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTG9ncy5uYW1lID0gXCJjYXA1XCJcclxuICAgIHRoaXMuY2FwTG9ncy5kaXNwbGF5ID0gXCJMb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MubGluayA9IFwiaG9tZS9hZG1pbi9sb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MuaWNvbiA9IFwidGV4dF9zbmlwcGV0XCI7XHJcblxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5uYW1lID0gXCJjYXA2XCJcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MuZGlzcGxheSA9IFwiU2V0dGluZ3NcIjtcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MubGluayA9IFwiaG9tZS9hZG1pbi9zZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5pY29uID1cInNldHRpbmdzXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQubmFtZSA9IFwiY2FwN1wiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmRpc3BsYXkgPSBcIk11bHRpdGVuYW50XCI7XHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50Lmljb24gPSBcImFwYXJ0bWVudFwiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwVGVuYW50cywgdGhpcy5jYXBNZW1iZXJzaGlwLCB0aGlzLmNhcFBsYW5zIF07XHJcblxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLm5hbWUgPSBcImNhcDhcIlxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmRpc3BsYXkgPSBcIlRlbmFudHNcIjtcclxuICAgIHRoaXMuY2FwVGVuYW50cy5saW5rID0gXCJob21lL2FkbWluL3RlbmFudHNcIjtcclxuXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubmFtZSA9IFwiY2FwOVwiXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAuZGlzcGxheSA9IFwiTWVtYmVyc2hpcFwiO1xyXG4gICAgdGhpcy5jYXBNZW1iZXJzaGlwLmxpbmsgPSBcImhvbWUvYWRtaW4vbWVtYmVyc2hpcFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUGxhbnMubmFtZSA9IFwiY2FwMTBcIlxyXG4gICAgdGhpcy5jYXBQbGFucy5kaXNwbGF5ID0gXCJQbGFuc1wiO1xyXG4gICAgdGhpcy5jYXBQbGFucy5saW5rID0gXCJob21lL2FkbWluL3BsYW5zXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwR2VuZXJhbC5uYW1lID0gXCJjYXAxMVwiXHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuZGlzcGxheSA9IFwiR2VuZXJhbFwiO1xyXG4gICAgdGhpcy5jYXBHZW5lcmFsLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwQ3VzdG9tZXJzLCB0aGlzLmNhcEludmVudG9yeSwgdGhpcy5jYXBBY2NvdW50cywgdGhpcy5jYXBTdXBwbGllcnMsIHRoaXMuY2FwVGFza3NdO1xyXG5cclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLm5hbWUgPSBcImNhcDEyXCJcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmRpc3BsYXkgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubGluayA9IFwiaG9tZS9hZG1pbi9jdXN0b21lcnNcIjtcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5uYW1lID0gXCJjYXAxM1wiXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5kaXNwbGF5ID0gXCJJbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmxpbmsgPSBcImhvbWUvYWRtaW4vaW52ZW50b3J5XCI7XHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5pY29uID0gXCJzdG9yZWZyb250XCJcclxuXHJcbiAgICB0aGlzLmNhcEFjY291bnRzLm5hbWUgPSBcImNhcDE0XCJcclxuICAgIHRoaXMuY2FwQWNjb3VudHMuZGlzcGxheSA9IFwiQWNjb3VudHNcIjtcclxuICAgIHRoaXMuY2FwQWNjb3VudHMubGluayA9IFwiaG9tZS9hZG1pbi9hY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5pY29uID0gXCJhY2NvdW50X2JhbGFuY2Vfd2FsbGV0XCJcclxuXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5uYW1lID0gXCJjYXAxNVwiXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5kaXNwbGF5ID0gXCJTdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmxpbmsgPSBcImhvbWUvYWRtaW4vc3VwcGxpZXJzXCI7XHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5pY29uID0gXCJncm91cHNcIlxyXG5cclxuICAgIHRoaXMuY2FwVGFza3MubmFtZSA9IFwiY2FwMTZcIlxyXG4gICAgdGhpcy5jYXBUYXNrcy5kaXNwbGF5ID0gXCJUYXNrc1wiO1xyXG4gICAgdGhpcy5jYXBUYXNrcy5saW5rID0gXCJob21lL2FkbWluL3Rhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmljb24gPSBcInRhc2tfYWx0XCJcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIUi5uYW1lID0gXCJjYXAxN1wiXHJcbiAgICB0aGlzLmNhcEhSLmRpc3BsYXkgPSBcIkhSXCI7XHJcbiAgICB0aGlzLmNhcEhSLmxpbmsgPSBcImhvbWUvYWRtaW4vaHJcIjtcclxuICAgIHRoaXMuY2FwSFIuaWNvbiA9IFwiZGl2ZXJzaXR5XzNcIlxyXG4gICAgdGhpcy5jYXBIUi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcEVtcGxveWVlcyx0aGlzLmNhcERlcGFydG1lbnRzLHRoaXMuY2FwUG9zaXRpb25zXVxyXG5cclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmRpc3BsYXkgPSBcIkVtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubGluayA9IFwiaG9tZS9hZG1pbi9lbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuZGlzcGxheSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubGluayA9IFwiaG9tZS9hZG1pbi9kZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5pY29uID0gXCJidXNpbmVzc19jZW50ZXJcIlxyXG5cclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmRpc3BsYXkgPSBcIlBvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9wb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmljb24gPSBcInBpY3R1cmVfaW5fcGljdHVyZV9tZWRpdW1cIlxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBwcml2YXRlIGFwcENvbmZpZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5hcHBDb25maWcpO1xyXG4gIHB1YmxpYyBhcHBDb25maWdPYnNlcnYgPSB0aGlzLmFwcENvbmZpZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBVcGRhdGVBcHBDb25maWcoY29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgIHRoaXMuYXBwQ29uZmlnU291cmNlLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuYXBwQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgY2FwSG9tZSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFkbWluID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVXNlcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBSb2xlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcExvZ3MgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZXR0aW5ncyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBNdWx0aXRlbmFudCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFRlbmFudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBNZW1iZXJzaGlwID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUGxhbnMgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwR2VuZXJhbCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEN1c3RvbWVycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEludmVudG9yeSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFjY291bnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU3VwcGxpZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGFza3MgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwSFIgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBFbXBsb3llZXMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBEZXBhcnRtZW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFBvc2l0aW9ucyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEdyYWRlcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBwdWJsaWMgdG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuXHJcblxyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FbXBsb3llZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgbG9hZEVtcGxveWVlc01ldGEoKSB7XHJcbiAgICB0aGlzLkNhbGxBcGkoeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlc21ldGEveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5lbXBsb3llZUZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2RlcGFydG1lbnRJRCcpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgubmFtZSA9PSAncG9zaXRpb25JRCcpLm1hc3Rlck9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLnBvc2l0aW9ucztcclxuICAgICAgdGhpcy5lbXBsb3llZUZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2VtcGxveW1lbnRTdGF0dXMnKS5vcHRpb25zID0gYXBpUmVzcG9uc2UuZGF0YS5lbXBsb3ltZW50U3RhdHVzZXM7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVGb3JtQ29uZmlnLmZpZWxkcy5maW5kKHggPT4geC5uYW1lID09ICdhY3RpdmVTdGF0dXMnKS5vcHRpb25zID0gYXBpUmVzcG9uc2UuZGF0YS5hY3RpdmVTdGF0dXNlcztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2VuZGVycyA9IFtcclxuICAgIHsgbmFtZTogJ01hbGUnLCB2YWx1ZTogMSB9LFxyXG4gICAgeyBuYW1lOiAnRmVtYWxlJywgdmFsdWU6IDIgfVxyXG4gIF1cclxuXHJcbiAgZW1wbG95ZWVGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hdGlvbmFsSUQnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnTmF0aW9uYWwgSUQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdnZW5kZXInLCBhbGlhczogJ0dlbmRlcicsIHR5cGU6ICdzZWxlY3QnLCBvcHRpb25zOiB0aGlzLmdlbmRlcnMsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2ZpcnN0TmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbGFzdE5hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RhdGVPZkJpcnRoJywgdHlwZTogJ2RhdGUnLCBhbGlhczogJ0RhdGUgb2YgQmlydGgnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50RGF0ZScsIHR5cGU6ICdkYXRlJywgYWxpYXM6ICdFbXBsb3ltZW50IERhdGUnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCBhbGlhczogJ0RlcGFydG1lbnQnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICdkZXBhcnRtZW50SUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bvc2l0aW9uSUQnLCBhbGlhczogJ1Bvc2l0aW9uJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAncG9zaXRpb25JRCcsIG1hc3RlckZpZWxkOiAnZGVwYXJ0bWVudElEJywgfSxcclxuICAgICAgeyBuYW1lOiAnZW1wbG95bWVudFN0YXR1cycsIGFsaWFzOiAnRW1wbG95bWVudCBTdGF0dXMnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgeyBuYW1lOiAnYWN0aXZlU3RhdHVzJywgYWxpYXM6ICdBY3RpdmUgU3RhdHVzJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FkZHJlc3MnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAncGhvbmUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnbm90ZScsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICB9XHJcblxyXG4gIGVtcGxveWVlVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbmFtZScsICdkZXBhcnRtZW50TmFtZScsICdwb3NpdGlvbk5hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2dlbmRlck5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnR2VuZGVyJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50TmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdEZXBhcnRtZW50JyB9LFxyXG4gICAgICB7IG5hbWU6ICdwb3NpdGlvbk5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnUG9zaXRpb24nIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnRTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0VtcGxveW1lbnQgU3RhdHVzJyB9LFxyXG4gICAgICB7IG5hbWU6ICdhY3RpdmVTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0FjdGl2ZSBTdGF0dXMnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZ2VuZXJhbC9lbXBsb3llZXM/YWN0aW9uPWNyZWF0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAgeyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZ2VuZXJhbC9lbXBsb3llZXM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2dlbmVyYWwvZW1wbG95ZWVzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlcy94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5lbXBsb3llZUZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUG9zaXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBsb2FkUG9zaXRpb25NZXRhKCkge1xyXG4gICAgLy8gdGhpcy5DYWxsQXBpKHsgdXJsOiAncG9zaXRpb25zL21ldGEveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgIC8vICAgdGhpcy5wb3NpdGlvbkZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2RlcGFydG1lbnRJRCcpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmRlcGFydG1lbnRzO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwb3NpdGlvbkZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgLy8geyBuYW1lOiAnZGVwYXJ0bWVudElEJywgYWxpYXM6ICdEZXBhcnRtZW50JywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAnZGVwYXJ0bWVudElEJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXNjcmlwdGlvbicsIHR5cGU6ICd0ZXh0Jywgc3BhbjogdHJ1ZSB9LFxyXG5cclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucy9pZCcgfSxcclxuICB9XHJcblxyXG4gIGVkaXRQb3NpdGlvbkJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnLCBzdWNjZXNzTWVzc2FnZTogJ0VkaXRlZCBTdWNjZXNzZnVsbHknIH0gfVxyXG5cclxuICBwb3NpdGlvblRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnLCAnZGVwYXJ0bWVudE5hbWUnLCAnc2FsYXJ5J10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAncG9zaXRpb25JRCcsIHR5cGU6ICdudW1iZXInLCBhbGlhczogJ0lEJyB9LFxyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogJ2RlcGFydG1lbnROYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0RlcGFydG1lbnQnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndmlldycsXHJcbiAgICAgICAgZGlhbG9nOiB0cnVlLFxyXG4gICAgICAgIGRldGFpbHNDb25maWc6IHtcclxuICAgICAgICAgIGZvcm1Db25maWc6IHsgLi4udGhpcy5wb3NpdGlvbkZvcm1Db25maWcsIGZpZWxkczogdGhpcy5wb3NpdGlvbkZvcm1Db25maWcuZmllbGRzLmZpbHRlcih4ID0+IHgubmFtZSAhPSAnZGVwYXJ0bWVudElEJykgfSxcclxuICAgICAgICAgIGhlcm9GaWVsZDogJ3Bvc2l0aW9uSUQnLFxyXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuZWRpdFBvc2l0aW9uQnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZVRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2VtcGxveWVlcy94JyB9LFxyXG4gICAgICAgICAgICAgIGxvYWRDcml0ZXJpYTogJ2VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgbG9hZElERmllbGQ6ICdwb3NpdGlvbklEJyxcclxuICAgICAgICAgICAgICB0aXRsZTogJ0VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmVkaXRQb3NpdGlvbkJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZXBhcnRtZW50cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBkZXBhcnRtZW50Rm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvaWQnIH0sXHJcbiAgfVxyXG5cclxuICBlZGl0RGVwYXJ0bWVudEJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcsIHN1Y2Nlc3NNZXNzYWdlOiAnRWRpdGVkIFN1Y2Nlc3NmdWxseScgfSB9XHJcblxyXG4gIGRlcGFydG1lbnRUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZGVwYXJ0bWVudElEJywgdHlwZTogJ251bWJlcicsIGFsaWFzOiAnSUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ3ZpZXcnLFxyXG4gICAgICAgIGRpYWxvZzogdHJ1ZSxcclxuICAgICAgICBkZXRhaWxzQ29uZmlnOiB7XHJcbiAgICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmRlcGFydG1lbnRGb3JtQ29uZmlnLFxyXG4gICAgICAgICAgaGVyb0ZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFt0aGlzLmVkaXREZXBhcnRtZW50QnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZVRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvZW1wbG95ZWVzL3gnIH0sXHJcbiAgICAgICAgICAgICAgbG9hZENyaXRlcmlhOiAnZW1wbG95ZWVzJyxcclxuICAgICAgICAgICAgICBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgdGl0bGU6ICdFbXBsb3llZXMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wb3NpdGlvblRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvcG9zaXRpb25zL3gnIH0sXHJcbiAgICAgICAgICAgICAgbG9hZENyaXRlcmlhOiAncG9zaXRpb25zJyxcclxuICAgICAgICAgICAgICBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgdGl0bGU6ICdQb3NpdGlvbnMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMuZWRpdERlcGFydG1lbnRCdXR0b24sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9hbGwveCcgfSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU90aGVyIGNvZGVcclxuXHJcbiAgcHVibGljIENhbGxBcGkoYWN0aW9uOiBBY3Rpb24sIGRhdGE6IGFueSA9ICcnICkge1xyXG5cclxuICAgIGlmICghYWN0aW9uLm1ldGhvZCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihhY3Rpb24ubWV0aG9kID09J2dldCcpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYWN0aW9uLnVybCk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi5tZXRob2QgPT0gJ3Bvc3QnKXtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaXNGb3JtRGF0YSl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdF9Gb3JtRGF0YShhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYWN0aW9uLnVybCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIENoZWNrV2VsY29tZWQocGF0aDogc3RyaW5nID0gJ2hvbWUvYWRtaW4vd2VsY29tZScpIHtcclxuICAgIHRoaXMuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC93ZWxjb21lL3gnIH0pLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICBpZiAoIXguZGF0YSkge1xyXG4gICAgICAgIHRoaXMuTmF2aWdhdGUocGF0aClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlKHBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBOYXZpZ2F0ZVdpdGhWYWx1ZShwYXRoOiBzdHJpbmcsIHZhbHVlIDogc3RyaW5nKXtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyB2OiB2YWx1ZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXROYXZpZ2F0aW9uVmFsdWUoKXtcclxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1widlwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG1wQWNjb3VudElEO1xyXG5cclxuXHJcblxyXG4gIC8vVXNlcnNcclxuICBwdWJsaWMgR2V0VXNlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlVzZXIvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVnaXN0ZXJBY2NvdW50KHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL3JlZ2lzdGVyXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFVzZXJCeUlEKHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYFVzZXIvaWQvJHt2YWx9YCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlVXNlcihwcm9maWxlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9lZGl0XCIsIHByb2ZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVubG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvdW5sb2NrXCIsIHVzZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvY2tVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2xvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRGVsZXRlVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9kZWxldGVcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9naW4odTogVXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9naW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hhbmdlUGFzc3dvcmQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtc2VsZlwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZEFkbWluKHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2NoYW5nZXBhc3N3b3JkLWFkbWluXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGZSZXNldCh1OiBVc2VyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJCYXNpYy9TZWxmUmVzZXRcIiwgdSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9Sb2xlc1xyXG5cclxuICBwdWJsaWMgUG9zdFJvbGUocm9sZSwgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFJvbGU/YWN0aW9uPSR7YWN0aW9ufWAsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFB1dFJvbGUocm9sZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUHV0KFwiUm9sZVwiLCByb2xlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRSb2xlKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJSb2xlL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvL0xvZ3NcclxuICBwdWJsaWMgR2V0TG9nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJMb2cvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9TZXR0aW5nc1xyXG4gIHB1YmxpYyBHZXRTZXR0aW5nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJTZXR0aW5nL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVwZGF0ZVNldHRpbmcoc2V0dGluZywgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFNldHRpbmc/YWN0aW9uPSR7YWN0aW9ufWAsIHNldHRpbmcpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
814
|
+
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.AuthService }]; } });
|
|
815
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBdUIsU0FBUyxFQUFVLE9BQU8sRUFBZ0QsTUFBTSxvQkFBb0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUzVELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLFdBQXdCLEVBQVMsTUFBYyxFQUFVLEtBQXFCLEVBQVUsV0FBd0I7UUFBaEgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQW9KcEksY0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBUTdELFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixZQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUUxQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzdCLGVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN6Qixr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Q0gsVUFBVSxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDOzsyR0FuOUJVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBBcHBDb25maWcsIEJ1dHRvbiwgQ2FwSXRlbSwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgRm9ybUNvbmZpZywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy9MaWJDbGFzc2VzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZUxpYiB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLCBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xyXG5cclxuICAgIHRoaXMuYXBwQ29uZmlnLmFwcE5hbWUgPSBcIkFwcC1OYW1lXCI7XHJcbiAgICB0aGlzLmFwcENvbmZpZy5sb2dvID0gXCIuL2Fzc2V0cy9sb2dvLnBuZ1wiXHJcbiAgICB0aGlzLmFwcENvbmZpZy5BREF1dGggPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuYXBwQ29uZmlnLmNhcEl0ZW1zID0gW3RoaXMuY2FwTXVsdGl0ZW5hbnQsIHRoaXMuY2FwQWRtaW4sIHRoaXMuY2FwSG9tZV07XHJcblxyXG5cclxuICAgIHRoaXMuY2FwSG9tZS5uYW1lID0gXCJjYXAxXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUuZGlzcGxheSA9IFwiSG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmxpbmsgPSBcImhvbWVcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5pY29uID1cImhvbWVcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBBZG1pbi5uYW1lID0gXCJjYXAyXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmRpc3BsYXkgPSBcIkFkbWluXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmljb24gPSBcInNlY3VyaXR5XCJcclxuICAgIHRoaXMuY2FwQWRtaW4uY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBVc2VycywgdGhpcy5jYXBSb2xlcywgdGhpcy5jYXBMb2dzLCB0aGlzLmNhcFNldHRpbmdzXTtcclxuXHJcbiAgICB0aGlzLmNhcFVzZXJzLm5hbWUgPSBcImNhcDNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMuZGlzcGxheSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMubGluayA9IFwiaG9tZS9hZG1pbi91c2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5pY29uID0gXCJncm91cFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUm9sZXMubmFtZSA9IFwiY2FwNFwiXHJcbiAgICB0aGlzLmNhcFJvbGVzLmRpc3BsYXkgPSBcIlJvbGVzXCI7XHJcbiAgICB0aGlzLmNhcFJvbGVzLmxpbmsgPSBcImhvbWUvYWRtaW4vcm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMuaWNvbiA9IFwid29ya1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTG9ncy5uYW1lID0gXCJjYXA1XCJcclxuICAgIHRoaXMuY2FwTG9ncy5kaXNwbGF5ID0gXCJMb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MubGluayA9IFwiaG9tZS9hZG1pbi9sb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MuaWNvbiA9IFwidGV4dF9zbmlwcGV0XCI7XHJcblxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5uYW1lID0gXCJjYXA2XCJcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MuZGlzcGxheSA9IFwiU2V0dGluZ3NcIjtcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MubGluayA9IFwiaG9tZS9hZG1pbi9zZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5pY29uID1cInNldHRpbmdzXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQubmFtZSA9IFwiY2FwN1wiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmRpc3BsYXkgPSBcIk11bHRpdGVuYW50XCI7XHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50Lmljb24gPSBcImFwYXJ0bWVudFwiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwVGVuYW50cywgdGhpcy5jYXBNZW1iZXJzaGlwLCB0aGlzLmNhcFBsYW5zIF07XHJcblxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLm5hbWUgPSBcImNhcDhcIlxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmRpc3BsYXkgPSBcIlRlbmFudHNcIjtcclxuICAgIHRoaXMuY2FwVGVuYW50cy5saW5rID0gXCJob21lL2FkbWluL3RlbmFudHNcIjtcclxuXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubmFtZSA9IFwiY2FwOVwiXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAuZGlzcGxheSA9IFwiTWVtYmVyc2hpcFwiO1xyXG4gICAgdGhpcy5jYXBNZW1iZXJzaGlwLmxpbmsgPSBcImhvbWUvYWRtaW4vbWVtYmVyc2hpcFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUGxhbnMubmFtZSA9IFwiY2FwMTBcIlxyXG4gICAgdGhpcy5jYXBQbGFucy5kaXNwbGF5ID0gXCJQbGFuc1wiO1xyXG4gICAgdGhpcy5jYXBQbGFucy5saW5rID0gXCJob21lL2FkbWluL3BsYW5zXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwR2VuZXJhbC5uYW1lID0gXCJjYXAxMVwiXHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuZGlzcGxheSA9IFwiR2VuZXJhbFwiO1xyXG4gICAgdGhpcy5jYXBHZW5lcmFsLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwTm90aWZpY2F0aW9ucyx0aGlzLmNhcEFwcHJvdmFscyx0aGlzLmNhcEN1c3RvbWVycywgdGhpcy5jYXBJbnZlbnRvcnksIHRoaXMuY2FwQWNjb3VudHMsIHRoaXMuY2FwU3VwcGxpZXJzLCB0aGlzLmNhcFRhc2tzXTtcclxuXHJcblxyXG5cclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLm5hbWUgPSBcImNhcDEyXCJcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmRpc3BsYXkgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubGluayA9IFwiaG9tZS9hZG1pbi9jdXN0b21lcnNcIjtcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5uYW1lID0gXCJjYXAxM1wiXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5kaXNwbGF5ID0gXCJJbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmxpbmsgPSBcImhvbWUvYWRtaW4vaW52ZW50b3J5XCI7XHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5pY29uID0gXCJzdG9yZWZyb250XCJcclxuXHJcbiAgICB0aGlzLmNhcEFjY291bnRzLm5hbWUgPSBcImNhcDE0XCJcclxuICAgIHRoaXMuY2FwQWNjb3VudHMuZGlzcGxheSA9IFwiQWNjb3VudHNcIjtcclxuICAgIHRoaXMuY2FwQWNjb3VudHMubGluayA9IFwiaG9tZS9hZG1pbi9hY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5pY29uID0gXCJhY2NvdW50X2JhbGFuY2Vfd2FsbGV0XCJcclxuXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5uYW1lID0gXCJjYXAxNVwiXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5kaXNwbGF5ID0gXCJTdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmxpbmsgPSBcImhvbWUvYWRtaW4vc3VwcGxpZXJzXCI7XHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5pY29uID0gXCJncm91cHNcIlxyXG5cclxuICAgIHRoaXMuY2FwVGFza3MubmFtZSA9IFwiY2FwMTZcIlxyXG4gICAgdGhpcy5jYXBUYXNrcy5kaXNwbGF5ID0gXCJUYXNrc1wiO1xyXG4gICAgdGhpcy5jYXBUYXNrcy5saW5rID0gXCJob21lL2FkbWluL3Rhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmljb24gPSBcImNoZWNrX2JveFwiXHJcblxyXG5cclxuICAgIHRoaXMuY2FwSFIubmFtZSA9IFwiY2FwMTdcIlxyXG4gICAgdGhpcy5jYXBIUi5kaXNwbGF5ID0gXCJIUlwiO1xyXG4gICAgdGhpcy5jYXBIUi5saW5rID0gXCJob21lL2FkbWluL2hyXCI7XHJcbiAgICB0aGlzLmNhcEhSLmljb24gPSBcImRpdmVyc2l0eV8zXCJcclxuICAgIHRoaXMuY2FwSFIuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBEZXBhcnRtZW50cywgdGhpcy5jYXBQb3NpdGlvbnMsIHRoaXMuY2FwRW1wbG95ZWVzLF1cclxuXHJcbiAgICB0aGlzLmNhcEVtcGxveWVlcy5uYW1lID0gXCJjYXAxOFwiXHJcbiAgICB0aGlzLmNhcEVtcGxveWVlcy5kaXNwbGF5ID0gXCJFbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmxpbmsgPSBcImhvbWUvYWRtaW4vZW1wbG95ZWVzXCI7XHJcbiAgICB0aGlzLmNhcEVtcGxveWVlcy5pY29uID0gXCJncm91cFwiXHJcblxyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5uYW1lID0gXCJjYXAxOVwiXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLmRpc3BsYXkgPSBcIkRlcGFydG1lbnRzXCI7XHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLmxpbmsgPSBcImhvbWUvYWRtaW4vZGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuaWNvbiA9IFwiYnVzaW5lc3NfY2VudGVyXCJcclxuXHJcbiAgICB0aGlzLmNhcFBvc2l0aW9ucy5uYW1lID0gXCJjYXAyMFwiXHJcbiAgICB0aGlzLmNhcFBvc2l0aW9ucy5kaXNwbGF5ID0gXCJQb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmxpbmsgPSBcImhvbWUvYWRtaW4vcG9zaXRpb25zXCI7XHJcbiAgICB0aGlzLmNhcFBvc2l0aW9ucy5pY29uID0gXCJwaWN0dXJlX2luX3BpY3R1cmVfbWVkaXVtXCJcclxuXHJcbiAgICB0aGlzLmNhcEFwcHJvdmFscy5uYW1lID0gXCJjYXAyMVwiXHJcbiAgICB0aGlzLmNhcEFwcHJvdmFscy5kaXNwbGF5ID0gXCJBcHByb3ZhbHNcIjtcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzLmxpbmsgPSBcImhvbWUvYWRtaW4vYXBwcm92YWxzXCI7XHJcbiAgICB0aGlzLmNhcEFwcHJvdmFscy5pY29uID0gXCJydWxlXCJcclxuXHJcbiAgICB0aGlzLmNhcEFwcHJvdmFsc0NvbmZpZy5uYW1lID0gXCJjYXAyMlwiXHJcbiAgICB0aGlzLmNhcEFwcHJvdmFsc0NvbmZpZy5kaXNwbGF5ID0gXCJBcHByb3ZhbHMgQ29uZmlnXCI7XHJcbiAgICB0aGlzLmNhcEFwcHJvdmFsc0NvbmZpZy5saW5rID0gXCJob21lL2FkbWluL2FwcHJvdmFscy1jb25maWdcIjtcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzQ29uZmlnLmljb24gPSBcInB1Ymxpc2hlZF93aXRoX2NoYW5nZXNcIlxyXG4gICAgdGhpcy5jYXBBcHByb3ZhbHNDb25maWcuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBTZWxmQXBwcm92YWxdXHJcblxyXG4gICAgdGhpcy5jYXBTZWxmQXBwcm92YWwubmFtZSA9IFwiY2FwMjNcIlxyXG4gICAgdGhpcy5jYXBTZWxmQXBwcm92YWwuZGlzcGxheSA9IFwiU2VsZiBBcHByb3ZhbHNcIjtcclxuICAgIHRoaXMuY2FwU2VsZkFwcHJvdmFsLmlzQm9vbCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYXBOb3RpZmljYXRpb25zLm5hbWUgPSBcImNhcDI0XCJcclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9ucy5kaXNwbGF5ID0gXCJOb3RpZmljYXRpb25zXCI7XHJcbiAgICB0aGlzLmNhcE5vdGlmaWNhdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9ub3RpZmljYXRpb25zXCI7XHJcbiAgICB0aGlzLmNhcE5vdGlmaWNhdGlvbnMuaWNvbiA9IFwibm90aWZpY2F0aW9uc1wiXHJcblxyXG4gICAgdGhpcy5jYXBBcHBNb2RlbHMubmFtZSA9IFwiY2FwMjVcIlxyXG4gICAgdGhpcy5jYXBBcHBNb2RlbHMuZGlzcGxheSA9IFwiQXBwIE1vZGVsc1wiO1xyXG4gICAgdGhpcy5jYXBBcHBNb2RlbHMubGluayA9IFwiaG9tZS9hZG1pbi9hcHBtb2RlbHNcIjtcclxuICAgIC8vIHRoaXMuY2FwQXBwTW9kZWxzLmljb24gPSBcIm5vdGlmaWNhdGlvbnNcIlxyXG5cclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9uc0NvbmZpZy5uYW1lID0gXCJjYXAyNlwiXHJcbiAgICB0aGlzLmNhcE5vdGlmaWNhdGlvbnNDb25maWcuZGlzcGxheSA9IFwiTm90aWYgQ29uZmlnXCI7XHJcbiAgICB0aGlzLmNhcE5vdGlmaWNhdGlvbnNDb25maWcubGluayA9IFwiaG9tZS9hZG1pbi9ub3RpZmljYXRpb25zLWNvbmZpZ1wiO1xyXG5cclxuXHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm15Um9sZU9ic2Vydi5zdWJzY3JpYmUoKHJvbGU6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm15Um9sZSA9IHJvbGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBhcHBDb25maWcgPSBuZXcgQXBwQ29uZmlnKCk7XHJcbiAgcHJpdmF0ZSBhcHBDb25maWdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuYXBwQ29uZmlnKTtcclxuICBwdWJsaWMgYXBwQ29uZmlnT2JzZXJ2ID0gdGhpcy5hcHBDb25maWdTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgVXBkYXRlQXBwQ29uZmlnKGNvbmZpZzogQXBwQ29uZmlnKSB7XHJcbiAgICB0aGlzLmFwcENvbmZpZ1NvdXJjZS5uZXh0KGNvbmZpZyk7XHJcbiAgICB0aGlzLmFwcENvbmZpZyA9IGNvbmZpZztcclxuICB9XHJcblxyXG4gIG15Um9sZTtcclxuXHJcbiAgY2FwSG9tZSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFkbWluID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVXNlcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBSb2xlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcExvZ3MgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZXR0aW5ncyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBNdWx0aXRlbmFudCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFRlbmFudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBNZW1iZXJzaGlwID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUGxhbnMgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwR2VuZXJhbCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEN1c3RvbWVycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEludmVudG9yeSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFjY291bnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU3VwcGxpZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGFza3MgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwSFIgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBFbXBsb3llZXMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBEZXBhcnRtZW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFBvc2l0aW9ucyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEdyYWRlcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBBcHByb3ZhbHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBBcHByb3ZhbHNDb25maWcgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBOb3RpZmljYXRpb25zID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU2VsZkFwcHJvdmFsID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQXBwTW9kZWxzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwTm90aWZpY2F0aW9uc0NvbmZpZyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBwdWJsaWMgdG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuXHJcblxyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlcGFydG1lbXRzIEZvcm0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgZGVwYXJ0bWVudEZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBzZWN1cml0eTogeyBhbGxvdzogW3RoaXMuY2FwRGVwYXJ0bWVudHNdIH0sXHJcbiAgICB0aXRsZSA6ICdEZXBhcnRtZW50JyxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvaWQnIH0sXHJcbiAgICBoZXJvRmllbGQ6ICdkZXBhcnRtZW50SUQnLFxyXG4gICAgaW5jbHVkZUF1ZGl0OiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgZWRpdERlcGFydG1lbnRCdXR0b246IEJ1dHRvbiA9IHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnLCBzdWNjZXNzTWVzc2FnZTogJ0VkaXRlZCBTdWNjZXNzZnVsbHknIH0gfVxyXG5cclxuICBkZXBhcnRtZW50RGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQ6ICdkZXBhcnRtZW50SUQnLFxyXG4gICAgYnV0dG9uczogW3RoaXMuZWRpdERlcGFydG1lbnRCdXR0b25dLFxyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Qb3NpdGlvbnMgRm9ybS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwb3NpdGlvbkZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBzZWN1cml0eTogeyBhbGxvdzogW3RoaXMuY2FwUG9zaXRpb25zXSB9LFxyXG4gICAgdGl0bGU6ICdQb3NpdGlvbicsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZGVzY3JpcHRpb24nLCB0eXBlOiAndGV4dCcsIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlcGFydG1lbnRJRCcsIGFsaWFzOiAnRGVwYXJ0bWVudCcsIHR5cGU6ICdzZWxlY3QnLCBsb2FkQWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzL2xpc3QveCcgfSwgZGV0YWlsc0NvbmZpZzogdGhpcy5kZXBhcnRtZW50RGV0YWlsc0NvbmZpZyB9LFxyXG5cclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucy9pZCcgfSxcclxuICAgIGhlcm9GaWVsZDogJ3Bvc2l0aW9uSUQnLFxyXG4gICAgaW5jbHVkZUF1ZGl0OiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgZWRpdFBvc2l0aW9uQnV0dG9uOiBCdXR0b24gPSB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcsIHN1Y2Nlc3NNZXNzYWdlOiAnRWRpdGVkIFN1Y2Nlc3NmdWxseScgfSB9XHJcblxyXG4gIHBvc2l0aW9uRGV0YWlsc0NvbmZpZyA6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnIDogdGhpcy5wb3NpdGlvbkZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQgOiAncG9zaXRpb25JRCcsXHJcbiAgICBidXR0b25zOiBbdGhpcy5lZGl0UG9zaXRpb25CdXR0b25dLFxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRW1wbG95ZWVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZW5kZXJzID0gW1xyXG4gICAgeyBuYW1lOiAnTWFsZScsIHZhbHVlOiAxIH0sXHJcbiAgICB7IG5hbWU6ICdGZW1hbGUnLCB2YWx1ZTogMiB9XHJcbiAgXVxyXG5cclxuICBlbXBsb3llZUZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBzZWN1cml0eSA6IHthbGxvdyA6IFt0aGlzLmNhcEVtcGxveWVlc119LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hdGlvbmFsSUQnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnTmF0aW9uYWwgSUQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdnZW5kZXInLCBhbGlhczogJ0dlbmRlcicsIHR5cGU6ICdzZWxlY3QnLCBvcHRpb25zOiB0aGlzLmdlbmRlcnMsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2ZpcnN0TmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbGFzdE5hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RhdGVPZkJpcnRoJywgdHlwZTogJ2RhdGUnLCBhbGlhczogJ0RhdGUgb2YgQmlydGgnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50RGF0ZScsIHR5cGU6ICdkYXRlJywgYWxpYXM6ICdFbXBsb3ltZW50IERhdGUnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCBhbGlhczogJ0RlcGFydG1lbnQnLCB0eXBlOiAnc2VsZWN0JywgbG9hZEFjdGlvbiA6IHsgdXJsIDogJ2RlcGFydG1lbnRzL2xpc3QveCd9LCBkZXRhaWxzQ29uZmlnOiB0aGlzLmRlcGFydG1lbnREZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bvc2l0aW9uSUQnLCBhbGlhczogJ1Bvc2l0aW9uJywgdHlwZTogJ3NlbGVjdCcsIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2xpc3QveCcgfSwgbWFzdGVyRmllbGQ6ICdkZXBhcnRtZW50SUQnLCBkZXRhaWxzQ29uZmlnOiB0aGlzLnBvc2l0aW9uRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50U3RhdHVzJywgYWxpYXM6ICdFbXBsb3ltZW50IFN0YXR1cycsIHR5cGU6ICdzZWxlY3QnLCBsb2FkQWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcy9saXN0L2VtcGxveW1lbnQtc3RhdHVzJyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2FjdGl2ZVN0YXR1cycsIGFsaWFzOiAnQWN0aXZlIFN0YXR1cycsIHR5cGU6ICdzZWxlY3QnLCBsb2FkQWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcy9saXN0L2FjdGl2ZS1zdGF0dXMnIH0gfSxcclxuICAgICAgeyBuYW1lOiAncGFzc3BvcnROdW1iZXInLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnUGFzc3BvcnQgTnVtYmVyJyB9LFxyXG4gICAgICB7IG5hbWU6ICd1c2VyTmFtZScsIHR5cGU6ICdzZWxlY3QnLCBhbGlhczogJ1VzZXInLCBsb2FkQWN0aW9uOiB7IHVybDogJ3VzZXIvbGlzdC94JyB9LCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAndmFsdWUnLCBudWxsYWJsZSA6IHRydWUsIGluZm9NZXNzYWdlIDogJ1JlbGF0ZWQgdXNlciBhY2NvdW50JyB9LFxyXG4gICAgICB7IG5hbWU6ICdhZGRyZXNzJywgdHlwZTogJ3RleHQnLCByb3dzOiAyLCBzcGFuOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bob25lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtYWlsJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ25vdGUnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcy9pZCcgfSxcclxuICAgIGhlcm9GaWVsZDogJ2VtcGxveWVlSUQnLFxyXG4gICAgaW5jbHVkZUF1ZGl0IDogdHJ1ZSxcclxuICB9XHJcblxyXG4gIGVtcGxveWVlc1RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnLCAnZGVwYXJ0bWVudE5hbWUnLCAncG9zaXRpb25OYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGxvZ1Jlc3BvbnNlIDogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdnZW5kZXJOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0dlbmRlcicgfSxcclxuICAgICAgeyBuYW1lOiAnZGVwYXJ0bWVudE5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnRGVwYXJ0bWVudCcgfSxcclxuICAgICAgeyBuYW1lOiAncG9zaXRpb25OYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ1Bvc2l0aW9uJyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50U3RhdHVzTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdFbXBsb3ltZW50IFN0YXR1cycgfSxcclxuICAgICAgeyBuYW1lOiAnYWN0aXZlU3RhdHVzTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdBY3RpdmUgU3RhdHVzJyB9LFxyXG4gICAgICB7IG5hbWU6ICdpc0xpbmtlZCcsIHR5cGU6ICdjaGVja2JveCcsIGFsaWFzOiAnTGlua2VkJyB9LFxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdlbXBsb3llZXM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcz9hY3Rpb249ZGVsZXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5lbXBsb3llZUZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUG9zaXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHBvc2l0aW9uc1RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXNjcmlwdGlvbicsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50TmFtZScsIHR5cGU6ICdjaGlwJywgZGV0YWlsc0NvbmZpZzogdGhpcy5kZXBhcnRtZW50RGV0YWlsc0NvbmZpZywgYWxpYXM6ICdEZXBhcnRtZW50JyB9LFxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ3ZpZXcnLFxyXG4gICAgICAgIGRpYWxvZzogdHJ1ZSxcclxuICAgICAgICBkZXRhaWxzQ29uZmlnOiB7XHJcbiAgICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZyAsXHJcbiAgICAgICAgICBoZXJvRmllbGQ6ICdwb3NpdGlvbklEJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFt0aGlzLmVkaXRQb3NpdGlvbkJ1dHRvbl0sXHJcbiAgICAgICAgICB0YWJsZUNvbmZpZ3M6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZW1wbG95ZWVzVGFibGVDb25maWcsXHJcbiAgICAgICAgICAgICAgbG9hZEFjdGlvbjogeyB1cmw6ICdlbXBsb3llZXMveC94JyB9LCBsb2FkQ3JpdGVyaWE6ICdwb3NpdGlvbicsIGxvYWRJREZpZWxkOiAncG9zaXRpb25JRCcsXHJcbiAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5lbXBsb3llZXNUYWJsZUNvbmZpZy5jb2x1bW5zLmZpbHRlcih4ID0+IFsnZGVwYXJ0bWVudE5hbWUnLCAncG9zaXRpb25OYW1lJ10uaW5jbHVkZXMoeC5uYW1lKSA9PSBmYWxzZSksXHJcbiAgICAgICAgICAgICAgdGFiVGl0bGU6ICdFbXBsb3llZXMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGhpcy5lZGl0UG9zaXRpb25CdXR0b24sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucz9hY3Rpb249ZGVsZXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5wb3NpdGlvbkZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVwYXJ0bWVudHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGRlcGFydG1lbnRUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgLy8geyBuYW1lOiAnZGVwYXJ0bWVudElEJywgdHlwZTogJ251bWJlcicsIGFsaWFzOiAnSUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ3ZpZXcnLFxyXG4gICAgICAgIGRpYWxvZzogdHJ1ZSxcclxuICAgICAgICBkZXRhaWxzQ29uZmlnOiB7XHJcbiAgICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmRlcGFydG1lbnRGb3JtQ29uZmlnLFxyXG4gICAgICAgICAgaGVyb0ZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFt0aGlzLmVkaXREZXBhcnRtZW50QnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZXNUYWJsZUNvbmZpZyxcclxuICAgICAgICAgICAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcy94L3gnIH0sIGxvYWRDcml0ZXJpYTogJ2RlcGFydG1lbnQnLCBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5lbXBsb3llZXNUYWJsZUNvbmZpZy5jb2x1bW5zLmZpbHRlcih4ID0+IFsnZGVwYXJ0bWVudE5hbWUnLCAncG9zaXRpb25OYW1lJ10uaW5jbHVkZXMoeC5uYW1lKSA9PSBmYWxzZSksXHJcbiAgICAgICAgICAgICAgdGFiVGl0bGU6ICdFbXBsb3llZXMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wb3NpdGlvbnNUYWJsZUNvbmZpZyxcclxuICAgICAgICAgICAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucy94L3gnIH0sIGxvYWRDcml0ZXJpYTogJ2RlcGFydG1lbnQnLCBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgdGFiVGl0bGU6ICdQb3NpdGlvbnMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMuZWRpdERlcGFydG1lbnRCdXR0b24sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9hbGwveCcgfSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ29udGFjdCBQZXJzb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGNvbnRhY3RQZXJzb25Gb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdDb250YWN0IFBlcnNvbicsXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0Jywgc3BhbiA6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbW9iaWxlJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtYWlsJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbnRhY3RNZXRob2RzJywgdHlwZTogJ2NvbXBvc2l0ZScsIHNwYW46IHRydWUsIHN1YmZpZWxkcyA6W1xyXG4gICAgICAgIHsgbmFtZTogJ2NhbkNhbGwnLCB0eXBlOiAnY2hlY2tib3gnLCBhbGlhczogJ0NhbGwnIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnY2FuU01TJywgdHlwZTogJ2NoZWNrYm94JywgYWxpYXM6ICdTTVMnIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnY2FuV2hhdHNBcHAnLCB0eXBlOiAnY2hlY2tib3gnLCBhbGlhczogJ1doYXRzQXBwJyB9XHJcbiAgICAgIF0gfSxcclxuXHJcbiAgICBdLFxyXG4gICAgcmVzZXQ6IHRydWVcclxuICB9O1xyXG5cclxuICBjb250YWN0UGVyc29uVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgdGFiVGl0bGU6ICdDb250YWN0cycsXHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJywgJ2NvbnRhY3RNZXRob2RzJ10sXHJcbiAgICBlbGV2YXRpb246ICdub25lJyxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCB9LFxyXG4gICAgICB7IG5hbWU6ICdtb2JpbGUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdjb250YWN0TWV0aG9kcycsXHJcbiAgICAgICAgdHlwZTogJ2ljb24nLFxyXG4gICAgICAgIGljb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICdjYWxsJywgY29sb3I6ICdncmVlbicsIGNvbmRpdGlvbjogeCA9PiB4LmNhbkNhbGwsIHRpcDogJ0F2YWlsYWJsZSBmb3IgQ2FsbHMnIH0sXHJcbiAgICAgICAgICB7IG5hbWU6ICdzbXMnLCBjb2xvcjogJ2dyZWVuJywgY29uZGl0aW9uOiB4ID0+IHguY2FuU01TLCB0aXA6ICdBdmFpbGFibGUgZm9yIFNNUycgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ2ZvcnVtJywgY29sb3I6ICdncmVlbicsIGNvbmRpdGlvbjogeCA9PiB4LmNhbldoYXRzQXBwLCB0aXA6ICdBdmFpbGFibGUgb24gV2hhdHNBcHAnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdBZGQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdjb250YWN0cGVyc29ucz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSwgY29uZmlybTogeyBtZXNzYWdlOiAnQWRkIGNvbnRhY3QgcGVyc29uPycgfSB9LFxyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnY29udGFjdHBlcnNvbnM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2NvbnRhY3RwZXJzb25zP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH1cclxuICAgIF0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmNvbnRhY3RQZXJzb25Gb3JtQ29uZmlnXHJcbiAgfTtcclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1DdXN0b21lcnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgY3VzdG9tZXJGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgc2VjdXJpdHk6IHsgYWxsb3c6IFt0aGlzLmNhcEN1c3RvbWVyc10gfSxcclxuICAgIGluY2x1ZGVBdWRpdDogdHJ1ZSxcclxuICAgIHRpdGxlIDogJ0N1c3RvbWVyJyxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdwaG9uZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdjb250YWN0UGVyc29uJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtYWlsJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FkZHJlc3MnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnY3VzdG9tZXJUZW5hbnRJRCcsIGFsaWFzOiAnQ3VzdG9tZXIgVGVuYW50JywgdHlwZTogJ3RleHQnLCBsb2FkQWN0aW9uOiB7IHVybDogJ3RlbmFudHMvbGlzdC94JyB9ICwgbnVsbGFibGU6IHRydWUgfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2N1c3RvbWVycy9pZCcgfSxcclxuICAgIGhlcm9GaWVsZDogJ2N1c3RvbWVySUQnLFxyXG5cclxuICAgIHJlc2V0OiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgY3VzdG9tZXJDcmVhdGVCdXR0b24gOiBCdXR0b24gPSB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnY3VzdG9tZXJzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH1cclxuICBjdXN0b21lckVkaXRCdXR0b246IEJ1dHRvbiA9IHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdjdXN0b21lcnM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH1cclxuXHJcbiAgY3VzdG9tZXJEZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZyA6IHRoaXMuY3VzdG9tZXJGb3JtQ29uZmlnLFxyXG4gICAgaGVyb0ZpZWxkIDogJ2N1c3RvbWVySUQnLFxyXG4gICAgdGFibGVDb25maWdzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICAuLi50aGlzLmNvbnRhY3RQZXJzb25UYWJsZUNvbmZpZyxcclxuICAgICAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2NvbnRhY3RwZXJzb25zL2N1c3RvbWVyL3gnIH0sXHJcbiAgICAgICAgbG9hZENyaXRlcmlhOiAnY3VzdG9tZXInLFxyXG4gICAgICAgIGxvYWRJREZpZWxkOiAnY3VzdG9tZXJJRCdcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgdGhpcy5jdXN0b21lckNyZWF0ZUJ1dHRvbixcclxuICAgICAgdGhpcy5jdXN0b21lckVkaXRCdXR0b25cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBjdXN0b21lcnNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGxvZ1Jlc3BvbnNlOiB0cnVlLFxyXG4gICAgbWF4QnV0dG9uc0NvdW50OiAzLFxyXG4gICAgY29sbGFwc2VCdXR0b25zIDogdHJ1ZSxcclxuXHJcbiAgICBjb2x1bW5zOiBbXHJcblxyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bob25lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbnRhY3RQZXJzb24nLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnaXNMaW5rZWQnLCB0eXBlOiAnY2hlY2tib3gnLCBhbGlhczogJ0xpbmtlZCcgfSxcclxuXHJcbiAgICBdLFxyXG5cclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgdGhpcy5jdXN0b21lckNyZWF0ZUJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogdGhpcy5jdXN0b21lckRldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogdGhpcy5jdXN0b21lckRldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnY3VzdG9tZXJzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG5cclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnY3VzdG9tZXJzL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5jdXN0b21lckZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU3VwcGxpZXJzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHN1cHBsaWVyRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHNlY3VyaXR5OiB7IGFsbG93OiBbdGhpcy5jYXBTdXBwbGllcnNdIH0sXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgICB0aXRsZTogJ1N1cHBsaWVyJyxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdwaG9uZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdjb250YWN0UGVyc29uJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtYWlsJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FkZHJlc3MnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgIF0sXHJcblxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdzdXBwbGllcnMvaWQnIH0sXHJcbiAgICBoZXJvRmllbGQ6ICdzdXBwbGllcklEJyxcclxuICB9XHJcblxyXG4gIHN1cHBsaWVyQ3JlYXRlQnV0dG9uIDogQnV0dG9uID0geyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3N1cHBsaWVycz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9XHJcbiAgc3VwcGxpZXJFZGl0QnV0dG9uIDogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3N1cHBsaWVycz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG5cclxuICBzdXBwbGllckRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnIDogdGhpcy5zdXBwbGllckZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQgOiAnc3VwcGxpZXJJRCcsXHJcbiAgICB0YWJsZUNvbmZpZ3M6IFtcclxuICAgICAge1xyXG4gICAgICAgIC4uLnRoaXMuY29udGFjdFBlcnNvblRhYmxlQ29uZmlnLFxyXG4gICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnY29udGFjdHBlcnNvbnMvc3VwcGxpZXIveCcgfSxcclxuICAgICAgICBsb2FkQ3JpdGVyaWE6ICdzdXBwbGllcicsXHJcbiAgICAgICAgbG9hZElERmllbGQ6ICdzdXBwbGllcklEJ1xyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgYnV0dG9ucyA6IFtcclxuICAgICAgdGhpcy5zdXBwbGllckNyZWF0ZUJ1dHRvbixcclxuICAgICAgdGhpcy5zdXBwbGllckVkaXRCdXR0b24sXHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgc3VwcGxpZXJzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbmFtZSddLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBjb2x1bW5zOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAncGhvbmUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnY29udGFjdFBlcnNvbicsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxuXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHRoaXMuc3VwcGxpZXJDcmVhdGVCdXR0b24sXHJcbiAgICAgIHsgbmFtZTogJ3ZpZXcnLCBkaWFsb2c6IHRydWUsIGRldGFpbHNDb25maWc6IHRoaXMuc3VwcGxpZXJEZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsICBkZXRhaWxzQ29uZmlnOiB0aGlzLnN1cHBsaWVyRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdzdXBwbGllcnM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcblxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdzdXBwbGllcnMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLnN1cHBsaWVyRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Ob3RpZmljYXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBub3RpZmljYXRpb25PcHRpb25zID0gW1xyXG4gICAgeyBuYW1lOiAnVUkgT25seScsIHZhbHVlOiAxIH0sXHJcbiAgICB7IG5hbWU6ICdVSSArIEVtYWlsJywgdmFsdWU6IDMgfSxcclxuICAgIC8vIHsgbmFtZTogJ1VJICsgRW1haWwgKyBTTVMnLCB2YWx1ZTogNyB9LFxyXG4gICAgeyBuYW1lOiAnVUkgKyBXaGF0c0FwcCcsIHZhbHVlOiA5IH0sXHJcbiAgICB7IG5hbWU6ICdVSSArIFRlbGVncmFtJywgdmFsdWU6IDE3IH0sXHJcbiAgICB7IG5hbWU6ICdVSSArIFRlbGVncmFtICsgV2hhdHNBcHAnLCB2YWx1ZTogMjUgfSxcclxuICAgIHsgbmFtZTogJ0FsbCBDaGFubmVscycsIHZhbHVlOiAzMSB9XHJcbiAgXVxyXG5cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1BcHByb3ZhbHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICBhcHByb3ZhbEhpc3RvcnlGb3JtQ29uZmlnIDogRm9ybUNvbmZpZyA9IHtcclxuICAgIHRpdGxlOiAnQXBwcm92YWwgSGlzdG9yeScsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbGV2ZWxOYW1lJywgdHlwZTogJ3RleHQnLCByZWFkb25seTogdHJ1ZSwgYWxpYXM6ICdMZXZlbCcgfSxcclxuICAgICAgeyBuYW1lOiAnc3RhdHVzTmFtZScsIHR5cGU6ICd0ZXh0JywgcmVhZG9ubHk6IHRydWUsIGFsaWFzOiAnU3RhdHVzJyB9LFxyXG4gICAgICB7IG5hbWU6ICdjb21tZW50cycsIHR5cGU6ICd0ZXh0JywgcmVhZG9ubHk6IHRydWUsIHNwYW46IHRydWUsIHJvd3M6IDMsIGNvcHlDb250ZW50OiB0cnVlIH0sXHJcbiAgICBdLFxyXG4gICAgaW5jbHVkZUF1ZGl0OiB0cnVlXHJcbiAgfVxyXG5cclxuICAvL0FwcHJvdmFsIEhpc3RvcnlcclxuICBhcHByb3ZhbEhpc3RvcnlUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICB0YWJUaXRsZTogJ1RyYWlsJyxcclxuICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgbWluQ29sdW1uczogWydjcmVhdGVkRGF0ZScsICdsZXZlbE5hbWUnLCAnc3RhdHVzTmFtZSddLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBzaG93RmlsdGVyIDogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlZERhdGUnLCB0eXBlOiAnZGF0ZXRpbWUnLCBhbGlhcyA6ICdEYXRlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdsZXZlbE5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnTGV2ZWwnIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnc3RhdHVzTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdTdGF0dXMnLFxyXG4gICAgICAgIGNvbG9yczogW1xyXG4gICAgICAgICAgeyBuYW1lOiAnIzkwQTRBRScsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMCB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnIzY2QkI2QScsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMSB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnI0Y0NDMzNicsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMiB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7IG5hbWU6ICdjb21tZW50cycsIHR5cGU6ICd0ZXh0JywgfSxcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlZEJ5TmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdCeScgfSxcclxuXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlIH1cclxuICAgIF0sXHJcblxyXG4gICAgZm9ybUNvbmZpZyA6IHRoaXMuYXBwcm92YWxIaXN0b3J5Rm9ybUNvbmZpZyxcclxuXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2FwcHJvdmFsaGlzdG9yeS9hcHByb3ZhbC94JyB9LFxyXG4gICAgbG9hZENyaXRlcmlhOiAnYXBwcm92YWwnLFxyXG4gICAgbG9hZElERmllbGQ6ICdhcHByb3ZhbElEJ1xyXG4gIH07XHJcblxyXG5cclxuXHJcbiAgLy9hcHByb3ZhbHMgZm9ybVxyXG4gIGFwcHJvdmFsRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHRpdGxlOiAnQXBwcm92YWwnLFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ2JsYW5rJywgdHlwZTogJ2JsYW5rJywgc3BhbjogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdzdGF0dXNOYW1lJywgdHlwZTogJ2xhYmVsJywgYWxpYXM6ICdTdGF0dXMnLCBzcGFuOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ21lc3NhZ2UnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlLCBzcGFuOiB0cnVlLCByb3dzOiAzIH0sXHJcblxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnYXBwcm92YWxzL2lkJyB9LFxyXG4gICAgaGVyb0ZpZWxkOiAnYXBwcm92YWxJRCdcclxuICB9O1xyXG5cclxuXHJcblxyXG5cclxuICAvLyBhcHByb3ZhbCBhY3Rpb24gZGlhbG9nXHJcbiAgYXBwcm92YWxBY3Rpb25Gb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdBcHByb3ZhbCBBY3Rpb24nLFxyXG4gICAgZml4ZWRUaXRsZTogdHJ1ZSxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2NvbW1lbnRzJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogZmFsc2UsIHNwYW46IHRydWUsIHJvd3M6IDMsXHJcbiAgICAgICAgaW5mb01lc3NhZ2U6ICdFbnRlciB5b3VyIGNvbW1lbnRzIGFib3V0IHRoaXMgYXBwcm92YWwgYWN0aW9uLiBUaGlzIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYXBwcm92YWwgaGlzdG9yeS4nXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBhcHByb3ZlQWN0aW9uRGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgIGZvcm1Db25maWc6IHtcclxuICAgICAgLi4udGhpcy5hcHByb3ZhbEFjdGlvbkZvcm1Db25maWcsXHJcbiAgICAgIGZpZWxkczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdjb21tZW50cycsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IGZhbHNlLCBzcGFuOiB0cnVlLCByb3dzOiAzLFxyXG4gICAgICAgICAgaW5mb01lc3NhZ2U6ICdFbnRlciB5b3VyIGNvbW1lbnRzIGFib3V0IHRoaXMgYXBwcm92YWwgYWN0aW9uLiBUaGlzIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYXBwcm92YWwgaGlzdG9yeS4nXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIG1vZGU6ICdlZGl0JyxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpc3BsYXk6ICdBcHByb3ZlJywgY29sb3I6ICdncmVlbicsIGFjdGlvbjogeyB1cmw6ICdhcHByb3ZlJywgbWV0aG9kOiAncG9zdCcgfSB9IC8vdXJsIHByZWNvbmZpZ3VyZWQgdG8gYmUgZHluYW1pY1xyXG4gICAgXVxyXG4gIH07XHJcblxyXG4gIGRlY2xpbmVBY3Rpb25EZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzogey4uLnRoaXMuYXBwcm92YWxBY3Rpb25Gb3JtQ29uZmlnLFxyXG4gICAgICBmaWVsZHM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnY29tbWVudHMnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlLCBzcGFuOiB0cnVlLCByb3dzOiAzLFxyXG4gICAgICAgICAgaW5mb01lc3NhZ2U6ICdFbnRlciB5b3VyIGNvbW1lbnRzIGFib3V0IHRoaXMgYXBwcm92YWwgYWN0aW9uLiBUaGlzIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYXBwcm92YWwgaGlzdG9yeS4nLFxyXG4gICAgICAgICAgaGludCA6ICdEZWNsaW5lIGNvbW1lbnQgaXMgcmVxdWlyZWQgISdcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAgbW9kZTogJ2VkaXQnLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlzcGxheTogJ0RlY2xpbmUnLCBjb2xvcjogJ3JlZCcsIGFjdGlvbjogeyB1cmw6ICdkZWNsaW5lJywgbWV0aG9kOiAncG9zdCcgfSB9IC8vdXJsIHByZWNvbmZpZ3VyZWQgdG8gYmUgZHluYW1pY1xyXG4gICAgXVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBhcHByb3ZlQnV0dG9uOiBCdXR0b24gPSB7XHJcbiAgICBuYW1lOiAnYXBwcm92ZScsIHRpcDogJ0FwcHJvdmUgUmVxdWVzdCcsIGRpYWxvZzogdHJ1ZSwgaW5EaWFsb2c6IHRydWUsIGljb246IHsgbmFtZTogJ2RvbmUnIH0sIGNvbG9yOiAnZ3JlZW4nLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmVBY3Rpb25EZXRhaWxzQ29uZmlnLCBpZ25vcmVQZW5kaW5nQXBwcm92YWw6IHRydWUsXHJcbiAgICB2aXNpYmxlOiB4ID0+IHggJiYgeC5jYW5BY3Rpb24gJiYgKCF4LmlzTXlBcHByb3ZhbFJlcXVlc3QgfHwgdGhpcy5teVJvbGVbdGhpcy5jYXBTZWxmQXBwcm92YWwubmFtZV0pLFxyXG4gIH1cclxuXHJcbiAgZGVjbGluZUJ1dHRvbjogQnV0dG9uID0ge1xyXG4gICAgbmFtZTogJ2RlY2xpbmUnLCB0aXA6ICdEZWNsaW5lIFJlcXVlc3QnLCBkaWFsb2c6IHRydWUsIGluRGlhbG9nOiB0cnVlLCBpY29uOiB7IG5hbWU6ICdjbG9zZScgfSwgY29sb3I6ICdyZWQnLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmRlY2xpbmVBY3Rpb25EZXRhaWxzQ29uZmlnLCBpZ25vcmVQZW5kaW5nQXBwcm92YWw6IHRydWUsXHJcbiAgICB2aXNpYmxlOiB4ID0+IHggJiYgeC5jYW5BY3Rpb24gJiYgKCF4LmlzTXlBcHByb3ZhbFJlcXVlc3QgfHwgdGhpcy5teVJvbGVbdGhpcy5jYXBTZWxmQXBwcm92YWwubmFtZV0pLFxyXG4gIH1cclxuXHJcbiAgY2FuY2VsQnV0dG9uOiBCdXR0b24gPSB7XHJcbiAgICBuYW1lOiAnY2FuY2VsJywgdGlwOiAnQ2FuY2VsIEFwcHJvdmFsJywgaW5EaWFsb2c6IHRydWUsIGljb246IHsgbmFtZTogJ2NhbmNlbCcgfSwgY29sb3I6ICdyZWQnLCBhY3Rpb246IHsgdXJsOiAnY2FuY2VsJywgbWV0aG9kOiAncG9zdCcsIH0sIGlnbm9yZVBlbmRpbmdBcHByb3ZhbDogdHJ1ZSwgLy91cmwgcHJlY29uZmlndXJlZCB0byBiZSBkeW5hbWljXHJcbiAgICBjb25maXJtOiB7IG1lc3NhZ2U6ICdDYW5jZWwgYXBwcm92YWwgcmVxdWVzdD8gVGhpcyB3aWxsIHJldmVydCBjaGFuZ2VzIGFuZCBzdG9wIHRoZSBhcHByb3ZhbCBwcm9jZXNzLicgfSxcclxuICAgIHZpc2libGU6IHggPT4geCAmJiB4LmNhbkNhbmNlbFxyXG4gIH1cclxuXHJcbiAgYXBwcm92YWxEZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5hcHByb3ZhbEZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQ6ICdhcHByb3ZhbElEJyxcclxuICAgIHRhYmxlQ29uZmlnczogW3RoaXMuYXBwcm92YWxIaXN0b3J5VGFibGVDb25maWddLFxyXG5cclxuICAgIHN0ZXBDb25maWc6IHtcclxuICAgICAgc3RlcHM6IFtdLFxyXG4gICAgICBsb2FkQWN0aW9uOiB7IHVybDogYGFwcHJvdmFscy9zdGVwcy97aWR9YCB9LFxyXG4gICAgICBsb2FkSURGaWVsZDogJ2FwcHJvdmFsSUQnLFxyXG4gICAgICB2YWx1ZUZpZWxkOiAnY3VycmVudExldmVsJ1xyXG4gICAgfSxcclxuXHJcbiAgICBidXR0b25zIDogW1xyXG4gICAgICB0aGlzLmFwcHJvdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuZGVjbGluZUJ1dHRvbixcclxuICAgICAgdGhpcy5jYW5jZWxCdXR0b25cclxuICAgIF1cclxuXHJcbiAgfTtcclxuXHJcblxyXG4gIHZpZXdBcHByb3ZhbEJ1dHRvbjogQnV0dG9uID0ge1xyXG4gICAgbmFtZTogJ2luZm8nLCB0aXA6ICdBcHByb3ZhbCBJbmZvcm1hdGlvbicsIGRpYWxvZzogdHJ1ZSwgaWNvbjogeyBuYW1lOiAnaW5mbycsICB9LCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmFsRGV0YWlsc0NvbmZpZywgaWdub3JlUGVuZGluZ0FwcHJvdmFsOiB0cnVlLFxyXG4gICAgdmlzaWJsZTogeCA9PiB4LmNhbkFjdGlvbiB8fCB4LmNhbkNhbmNlbFxyXG4gIH1cclxuXHJcblxyXG4gIC8vcmVjZWl2ZWQgYXBwcm92YWxzXHJcbiAgcmVjZWl2ZWRBcHByb3ZhbHNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWydtZXNzYWdlJywgJ3N0YXR1c05hbWUnXSxcclxuICAgIG1pbkJ1dHRvbnM6IFsndmlldycsICdhcHByb3ZlJywgJ2RlY2xpbmUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgZ3JleU91dDogKHgpID0+IHguaXNHcmV5ZWRPdXQsXHJcbiAgICAvLyBsb2dSZXNwb25zZTogdHJ1ZSxcclxuICAgIGNvbGxhcHNlQnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlZERhdGUnLCB0eXBlOiAnZGF0ZXRpbWUnLCBhbGlhczogJ0RhdGUnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZWRCeU5hbWUnLCBhbGlhczogJ1JlcXVlc3QgQnknLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnbWVzc2FnZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ3R5cGVOYW1lJywgYWxpYXM6ICdUeXBlJywgdHlwZTogJ2NoaXAnLFxyXG4gICAgICAgIGNvbG9yczogW1xyXG4gICAgICAgICAgeyBuYW1lOiAnIzY2QkI2QScsIGNvbmRpdGlvbjogeCA9PiB4LnR5cGUgPT09IDAgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ29yYW5nZScsIGNvbmRpdGlvbjogeCA9PiB4LnR5cGUgPT09IDEgfSxcclxuICAgICAgICAgIHsgbmFtZTogJyNGNDQzMzYnLCBjb25kaXRpb246IHggPT4geC50eXBlID09PSAyIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnc3RhdHVzTmFtZScsIGFsaWFzOiAnU3RhdHVzJywgdHlwZTogJ2NoaXAnLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmFsRGV0YWlsc0NvbmZpZyxcclxuICAgICAgICBjb2xvcnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogJyM5MEE0QUUnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09IDAgfSxcclxuICAgICAgICAgIHsgbmFtZTogJyM2NkJCNkEnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09IDEgfSxcclxuICAgICAgICAgIHsgbmFtZTogJyNGNDQzMzYnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09IDIgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdjdXJyZW50TGV2ZWxOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0N1cnJlbnQgTGV2ZWwnLFxyXG4gICAgICAgIGljb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICdkb25lJywgY29sb3I6ICcjNjZCQjZBJywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAnQXBwcm92ZWQnLCB0aXA6ICdBcHByb3ZlZCcgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ2Nsb3NlJywgY29sb3I6ICcjRjQ0MzM2JywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAnRGVjbGluZWQnLCB0aXA6ICdEZWNsaW5lZCcgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ3NjaGVkdWxlJywgY29sb3I6ICcjRkZDMTA3JywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAnUGVuZGluZycsIHRpcDogJ1BlbmRpbmcnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbmFtZTogJ3VwZGF0ZWRCeU5hbWUnLCBhbGlhczogJ0FjdGlvbmVkIEJ5JywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3VwZGF0ZWREYXRlRGlzcGxheScsIHR5cGU6ICdkYXRldGltZScsIGFsaWFzOiAnQWN0aW9uZWQgRGF0ZScgfSxcclxuICAgIF0sXHJcblxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB0aGlzLnZpZXdBcHByb3ZhbEJ1dHRvbixcclxuICAgICAgdGhpcy5hcHByb3ZlQnV0dG9uLFxyXG4gICAgICB0aGlzLmRlY2xpbmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLFxyXG4gICAgXSxcclxuXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2FwcHJvdmFscy9hbGwveCcgfVxyXG4gIH07XHJcblxyXG5cclxuICAvL3NlbmQgYXBwcm92YWxzXHJcbiAgc2VudEFwcHJvdmFsc1RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIC4uLnRoaXMucmVjZWl2ZWRBcHByb3ZhbHNUYWJsZUNvbmZpZyxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgdGhpcy52aWV3QXBwcm92YWxCdXR0b24sXHJcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnYXBwcm92YWxzL3NlbnQveCcgfVxyXG4gIH07XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU90aGVyIGNvZGVcclxuXHJcbiAgcHJpdmF0ZSBsaXN0Q2FjaGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICBwcml2YXRlIGNhY2hlRHVyYXRpb24gPSAxICogNjAgKiAxMDAwO1xyXG4gIHByaXZhdGUgY2FjaGVUaW1lc3RhbXBzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcblxyXG4gIHB1YmxpYyBDYWxsQXBpKGFjdGlvbjogQWN0aW9uLCBkYXRhOiBhbnkgPSAnJyApIHtcclxuXHJcblxyXG4gICAgaWYgKCFhY3Rpb24/LnVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgYWN0aW9uIG9yIG1pc3NpbmcgVVJMJyk7XHJcbiAgICAgIHJldHVybiBvZih7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAnSW52YWxpZCBhY3Rpb24gY29uZmlndXJhdGlvbicgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbi51cmwuaW5jbHVkZXMoJy9saXN0LycpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpc3RDYWxsKGFjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjYWxsaW5nXCIsIGFjdGlvbik7XHJcblxyXG5cclxuICAgIGlmICghYWN0aW9uLm1ldGhvZCB8fCBhY3Rpb24ubWV0aG9kID09J2dldCcpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYWN0aW9uLnVybCk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi5tZXRob2QgPT0gJ3Bvc3QnKXtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaXNGb3JtRGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3RfRm9ybURhdGEoYWN0aW9uLnVybCwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWN0aW9uLnVybCA9PSAnYXBwcm92ZScgfHwgYWN0aW9uLnVybCA9PSAnZGVjbGluZScgfHwgYWN0aW9uLnVybCA9PSAnY2FuY2VsJykge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KGAke2RhdGEuZW5kcG9pbnR9L2FwcHJvdmU/YWN0aW9uPSR7YWN0aW9uLnVybH1gLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYWN0aW9uLnVybCwgZGF0YSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxpc3RDYWxsKGFjdGlvbjogQWN0aW9uKSB7XHJcbiAgICBjb25zdCBjYWNoZUtleSA9IGFjdGlvbi51cmw7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgLy8gUmV0dXJuIGNhY2hlIGlmIHZhbGlkIGFuZCBub3QgZm9yY2luZyByZWZyZXNoXHJcbiAgICBpZiAoIWFjdGlvbi5za2lwQ2FjaGUgJiYgdGhpcy5saXN0Q2FjaGVbY2FjaGVLZXldICYmIGN1cnJlbnRUaW1lIC0gdGhpcy5jYWNoZVRpbWVzdGFtcHNbY2FjaGVLZXldIDwgdGhpcy5jYWNoZUR1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybiBvZih7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBkYXRhOiB0aGlzLmxpc3RDYWNoZVtjYWNoZUtleV1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBBUEkgY2FsbCBhbmQgY2FjaGUgcmVzdWx0XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYWN0aW9uLnVybCkucGlwZShcclxuICAgICAgdGFwKChyZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZT8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5saXN0Q2FjaGVbY2FjaGVLZXldID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIHRoaXMuY2FjaGVUaW1lc3RhbXBzW2NhY2hlS2V5XSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gaW52YWxpZGF0ZSBjYWNoZSBvbiBkYXRhIGNoYW5nZVxyXG4gIHB1YmxpYyBpbnZhbGlkYXRlTGlzdENhY2hlKGVudGl0eVVybDogc3RyaW5nKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxpc3RDYWNoZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAvLyBJbnZhbGlkYXRlIGFueSBjYWNoZSBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhpcyBlbnRpdHlcclxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhlbnRpdHlVcmwpKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdENhY2hlW2tleV07XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGVUaW1lc3RhbXBzW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIENsZWFyQ2FjaGUoKXtcclxuICAgIHRoaXMubGlzdENhY2hlID0ge307XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIENoZWNrV2VsY29tZWQocGF0aDogc3RyaW5nID0gJ2hvbWUvYWRtaW4vd2VsY29tZScpIHtcclxuICAgIHRoaXMuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC93ZWxjb21lL3gnIH0pLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICBpZiAoIXguZGF0YSkge1xyXG4gICAgICAgIHRoaXMuTmF2aWdhdGUocGF0aClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlKHBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBOYXZpZ2F0ZVdpdGhWYWx1ZShwYXRoOiBzdHJpbmcsIHZhbHVlIDogc3RyaW5nKXtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyB2OiB2YWx1ZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXROYXZpZ2F0aW9uVmFsdWUoKXtcclxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1widlwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG1wQWNjb3VudElEO1xyXG5cclxuXHJcblxyXG4gIC8vVXNlcnNcclxuICBwdWJsaWMgR2V0VXNlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlVzZXIvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVnaXN0ZXJBY2NvdW50KHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL3JlZ2lzdGVyXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFVzZXJCeUlEKHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYFVzZXIvaWQvJHt2YWx9YCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlVXNlcihwcm9maWxlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9lZGl0XCIsIHByb2ZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVubG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvdW5sb2NrXCIsIHVzZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvY2tVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2xvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRGVsZXRlVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9kZWxldGVcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9naW4odTogVXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9naW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hhbmdlUGFzc3dvcmQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtc2VsZlwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZEFkbWluKHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2NoYW5nZXBhc3N3b3JkLWFkbWluXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGZSZXNldCh1OiBVc2VyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJCYXNpYy9TZWxmUmVzZXRcIiwgdSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9Sb2xlc1xyXG5cclxuICBwdWJsaWMgUG9zdFJvbGUocm9sZSwgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFJvbGU/YWN0aW9uPSR7YWN0aW9ufWAsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFB1dFJvbGUocm9sZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUHV0KFwiUm9sZVwiLCByb2xlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRSb2xlKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJSb2xlL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvL0xvZ3NcclxuICBwdWJsaWMgR2V0TG9nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJMb2cvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9TZXR0aW5nc1xyXG4gIHB1YmxpYyBHZXRTZXR0aW5nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJTZXR0aW5nL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVwZGF0ZVNldHRpbmcoc2V0dGluZywgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFNldHRpbmc/YWN0aW9uPSR7YWN0aW9ufWAsIHNldHRpbmcpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|