tin-spa 2.2.3 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/esm2020/lib/components/accounts/accountDialog.component.mjs +2 -2
  2. package/esm2020/lib/components/accounts/accounts.component.mjs +2 -2
  3. package/esm2020/lib/components/attach/attach.component.mjs +1 -20
  4. package/esm2020/lib/components/change-password/change-password.component.mjs +2 -2
  5. package/esm2020/lib/components/create-account/create-account.component.mjs +2 -2
  6. package/esm2020/lib/components/customers/customers.component.mjs +2 -2
  7. package/esm2020/lib/components/date/date.component.mjs +23 -16
  8. package/esm2020/lib/components/departments/departments.component.mjs +6 -26
  9. package/esm2020/lib/components/employees/employees.component.mjs +10 -53
  10. package/esm2020/lib/components/form/form.component.mjs +2 -2
  11. package/esm2020/lib/components/inventory/inventory.component.mjs +2 -2
  12. package/esm2020/lib/components/inventory/quantityDialog.component.mjs +2 -2
  13. package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +2 -2
  14. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +2 -2
  15. package/esm2020/lib/components/login/login.component.mjs +2 -2
  16. package/esm2020/lib/components/logs/logs.component.mjs +2 -2
  17. package/esm2020/lib/components/membership/membership.component.mjs +2 -2
  18. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +2 -2
  19. package/esm2020/lib/components/plans/plans.component.mjs +2 -2
  20. package/esm2020/lib/components/positions/positions.component.mjs +13 -6
  21. package/esm2020/lib/components/profile/profile.component.mjs +2 -2
  22. package/esm2020/lib/components/recover-account/recover-account.component.mjs +2 -2
  23. package/esm2020/lib/components/roles/addRoleDialog.component.mjs +2 -2
  24. package/esm2020/lib/components/roles/roles.component.mjs +2 -2
  25. package/esm2020/lib/components/settings/settings.component.mjs +2 -2
  26. package/esm2020/lib/components/signup/signup.component.mjs +2 -2
  27. package/esm2020/lib/components/suppliers/suppliers.component.mjs +2 -2
  28. package/esm2020/lib/components/table/detailsDialog.component.mjs +72 -142
  29. package/esm2020/lib/components/table/table.component.mjs +151 -333
  30. package/esm2020/lib/components/table-action/table-action.component.mjs +46 -0
  31. package/esm2020/lib/components/table-header/table-header.component.mjs +52 -0
  32. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +78 -139
  33. package/esm2020/lib/components/table-internal/table-internal.component.mjs +153 -334
  34. package/esm2020/lib/components/table-row/table-row.component.mjs +58 -0
  35. package/esm2020/lib/components/tasks/tasks.component.mjs +2 -2
  36. package/esm2020/lib/components/tenant-settings/inviteDialog.component.mjs +2 -2
  37. package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +2 -2
  38. package/esm2020/lib/components/tenants/tenants.component.mjs +2 -2
  39. package/esm2020/lib/components/tiles/tiles.component.mjs +2 -2
  40. package/esm2020/lib/components/transactions/transactDialog.component.mjs +2 -2
  41. package/esm2020/lib/components/transactions/transactions.component.mjs +2 -2
  42. package/esm2020/lib/components/users/users.component.mjs +2 -2
  43. package/esm2020/lib/components/viewer/viewer.component.mjs +2 -2
  44. package/esm2020/lib/components/welcome/welcome.component.mjs +2 -2
  45. package/esm2020/lib/services/button.service.mjs +100 -0
  46. package/esm2020/lib/services/condition.service.mjs +32 -0
  47. package/esm2020/lib/services/datalib.service.mjs +387 -0
  48. package/esm2020/lib/services/dialog.service.mjs +38 -0
  49. package/esm2020/lib/services/table-config.service.mjs +26 -0
  50. package/esm2020/lib/tin-spa.module.mjs +6 -3
  51. package/esm2020/public-api.mjs +3 -2
  52. package/fesm2015/tin-spa.mjs +963 -1075
  53. package/fesm2015/tin-spa.mjs.map +1 -1
  54. package/fesm2020/tin-spa.mjs +970 -1070
  55. package/fesm2020/tin-spa.mjs.map +1 -1
  56. package/lib/components/accounts/accountDialog.component.d.ts +1 -1
  57. package/lib/components/accounts/accounts.component.d.ts +1 -1
  58. package/lib/components/attach/attach.component.d.ts +0 -19
  59. package/lib/components/change-password/change-password.component.d.ts +1 -1
  60. package/lib/components/create-account/create-account.component.d.ts +1 -1
  61. package/lib/components/customers/customers.component.d.ts +1 -1
  62. package/lib/components/date/date.component.d.ts +10 -9
  63. package/lib/components/departments/departments.component.d.ts +2 -5
  64. package/lib/components/employees/employees.component.d.ts +3 -14
  65. package/lib/components/form/form.component.d.ts +1 -1
  66. package/lib/components/inventory/inventory.component.d.ts +1 -1
  67. package/lib/components/inventory/quantityDialog.component.d.ts +1 -1
  68. package/lib/components/invitations-table/invitations-table.component.d.ts +1 -1
  69. package/lib/components/list-dialog/list-dialog.component.d.ts +1 -1
  70. package/lib/components/login/login.component.d.ts +1 -1
  71. package/lib/components/logs/logs.component.d.ts +1 -1
  72. package/lib/components/membership/membership.component.d.ts +1 -1
  73. package/lib/components/nav-menu/nav-menu.component.d.ts +1 -1
  74. package/lib/components/plans/plans.component.d.ts +1 -1
  75. package/lib/components/positions/positions.component.d.ts +5 -1
  76. package/lib/components/profile/profile.component.d.ts +1 -1
  77. package/lib/components/recover-account/recover-account.component.d.ts +1 -1
  78. package/lib/components/roles/addRoleDialog.component.d.ts +1 -1
  79. package/lib/components/roles/roles.component.d.ts +1 -1
  80. package/lib/components/settings/settings.component.d.ts +1 -1
  81. package/lib/components/signup/signup.component.d.ts +1 -1
  82. package/lib/components/suppliers/suppliers.component.d.ts +1 -1
  83. package/lib/components/table/detailsDialog.component.d.ts +11 -4
  84. package/lib/components/table/table.component.d.ts +28 -15
  85. package/lib/components/table-action/table-action.component.d.ts +22 -0
  86. package/lib/components/table-header/table-header.component.d.ts +22 -0
  87. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +16 -6
  88. package/lib/components/table-internal/table-internal.component.d.ts +28 -15
  89. package/lib/components/table-row/table-row.component.d.ts +28 -0
  90. package/lib/components/tasks/tasks.component.d.ts +1 -1
  91. package/lib/components/tenant-settings/inviteDialog.component.d.ts +1 -1
  92. package/lib/components/tenant-settings/tenant-settings.component.d.ts +1 -1
  93. package/lib/components/tenants/tenants.component.d.ts +1 -1
  94. package/lib/components/tiles/tiles.component.d.ts +1 -1
  95. package/lib/components/transactions/transactDialog.component.d.ts +1 -1
  96. package/lib/components/transactions/transactions.component.d.ts +1 -1
  97. package/lib/components/users/users.component.d.ts +1 -1
  98. package/lib/components/viewer/viewer.component.d.ts +1 -1
  99. package/lib/components/welcome/welcome.component.d.ts +1 -1
  100. package/lib/services/button.service.d.ts +27 -0
  101. package/lib/services/condition.service.d.ts +10 -0
  102. package/lib/services/{data.service.d.ts → datalib.service.d.ts} +15 -1
  103. package/lib/services/dialog.service.d.ts +18 -0
  104. package/lib/services/table-config.service.d.ts +8 -0
  105. package/lib/tin-spa.module.d.ts +8 -5
  106. package/package.json +1 -1
  107. package/public-api.d.ts +2 -1
  108. package/esm2020/lib/services/data.service.mjs +0 -236
@@ -1,236 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { AppConfig, CapItem } from '../classes/Classes';
3
- import { BehaviorSubject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./http.service";
6
- import * as i2 from "@angular/router";
7
- export class DataServiceLib {
8
- constructor(httpService, router, route) {
9
- this.httpService = httpService;
10
- this.router = router;
11
- this.route = route;
12
- this.appConfig = new AppConfig();
13
- this.appConfigSource = new BehaviorSubject(this.appConfig);
14
- this.appConfigObserv = this.appConfigSource.asObservable();
15
- this.capHome = new CapItem;
16
- this.capAdmin = new CapItem;
17
- this.capUsers = new CapItem;
18
- this.capRoles = new CapItem;
19
- this.capLogs = new CapItem;
20
- this.capSettings = new CapItem;
21
- this.capMultitenant = new CapItem;
22
- this.capTenants = new CapItem;
23
- this.capMembership = new CapItem;
24
- this.capPlans = new CapItem;
25
- this.capGeneral = new CapItem;
26
- this.capCustomers = new CapItem;
27
- this.capInventory = new CapItem;
28
- this.capAccounts = new CapItem;
29
- this.capSuppliers = new CapItem;
30
- this.capTasks = new CapItem;
31
- this.capHR = new CapItem;
32
- this.capEmployees = new CapItem;
33
- this.capDepartments = new CapItem;
34
- this.capPositions = new CapItem;
35
- this.capGrades = new CapItem;
36
- this.tmpProfileuserName = "";
37
- this.isProcessing = false;
38
- this.appConfig.appName = "App-Name";
39
- this.appConfig.logo = "./assets/logo.png";
40
- this.appConfig.ADAuth = true;
41
- this.appConfig.capItems = [this.capMultitenant, this.capAdmin, this.capHome];
42
- this.capHome.name = "cap1";
43
- this.capHome.display = "Home";
44
- this.capHome.link = "home";
45
- this.capHome.icon = "home";
46
- this.capAdmin.name = "cap2";
47
- this.capAdmin.display = "Admin";
48
- this.capAdmin.icon = "security";
49
- this.capAdmin.capSubItems = [this.capUsers, this.capRoles, this.capLogs, this.capSettings];
50
- this.capUsers.name = "cap3";
51
- this.capUsers.display = "Users";
52
- this.capUsers.link = "home/admin/users";
53
- this.capUsers.icon = "group";
54
- this.capRoles.name = "cap4";
55
- this.capRoles.display = "Roles";
56
- this.capRoles.link = "home/admin/roles";
57
- this.capRoles.icon = "work";
58
- this.capLogs.name = "cap5";
59
- this.capLogs.display = "Logs";
60
- this.capLogs.link = "home/admin/logs";
61
- this.capLogs.icon = "text_snippet";
62
- this.capSettings.name = "cap6";
63
- this.capSettings.display = "Settings";
64
- this.capSettings.link = "home/admin/settings";
65
- this.capSettings.icon = "settings";
66
- this.capMultitenant.name = "cap7";
67
- this.capMultitenant.display = "Multitenant";
68
- this.capMultitenant.icon = "apartment";
69
- this.capMultitenant.capSubItems = [this.capTenants, this.capMembership, this.capPlans];
70
- this.capTenants.name = "cap8";
71
- this.capTenants.display = "Tenants";
72
- this.capTenants.link = "home/admin/tenants";
73
- this.capMembership.name = "cap9";
74
- this.capMembership.display = "Membership";
75
- this.capMembership.link = "home/admin/membership";
76
- this.capPlans.name = "cap10";
77
- this.capPlans.display = "Plans";
78
- this.capPlans.link = "home/admin/plans";
79
- this.capGeneral.name = "cap11";
80
- this.capGeneral.display = "General";
81
- this.capGeneral.capSubItems = [this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
82
- this.capCustomers.name = "cap12";
83
- this.capCustomers.display = "Customers";
84
- this.capCustomers.link = "home/admin/customers";
85
- this.capCustomers.icon = "group";
86
- this.capInventory.name = "cap13";
87
- this.capInventory.display = "Inventory";
88
- this.capInventory.link = "home/admin/inventory";
89
- this.capInventory.icon = "storefront";
90
- this.capAccounts.name = "cap14";
91
- this.capAccounts.display = "Accounts";
92
- this.capAccounts.link = "home/admin/accounts";
93
- this.capAccounts.icon = "account_balance_wallet";
94
- this.capSuppliers.name = "cap15";
95
- this.capSuppliers.display = "Suppliers";
96
- this.capSuppliers.link = "home/admin/suppliers";
97
- this.capSuppliers.icon = "groups";
98
- this.capTasks.name = "cap16";
99
- this.capTasks.display = "Tasks";
100
- this.capTasks.link = "home/admin/tasks";
101
- this.capTasks.icon = "task_alt";
102
- this.capHR.name = "cap17";
103
- this.capHR.display = "HR";
104
- this.capHR.link = "home/admin/hr";
105
- this.capHR.icon = "diversity_3";
106
- this.capHR.capSubItems = [this.capEmployees, this.capDepartments, this.capPositions, this.capGrades];
107
- this.capEmployees.name = "cap17";
108
- this.capEmployees.display = "Employees";
109
- this.capEmployees.link = "home/admin/employees";
110
- this.capEmployees.icon = "group";
111
- this.capDepartments.name = "cap17";
112
- this.capDepartments.display = "Departments";
113
- this.capDepartments.link = "home/admin/departments";
114
- this.capDepartments.icon = "business_center";
115
- this.capPositions.name = "cap17";
116
- this.capPositions.display = "Positions";
117
- this.capPositions.link = "home/admin/positions";
118
- this.capPositions.icon = "picture_in_picture_medium";
119
- this.capGrades.name = "cap17";
120
- this.capGrades.display = "Grades";
121
- this.capGrades.link = "home/admin/grades";
122
- this.capGrades.icon = "grading";
123
- }
124
- UpdateAppConfig(config) {
125
- this.appConfigSource.next(config);
126
- this.appConfig = config;
127
- }
128
- CallApi(action, data = '') {
129
- if (!action.method) {
130
- return this.httpService.Get(action.url);
131
- }
132
- if (action.method == 'get') {
133
- return this.httpService.Get(action.url);
134
- }
135
- else if (action.method == 'post') {
136
- if (action.isFormData) {
137
- return this.httpService.Post_FormData(action.url, data);
138
- }
139
- else {
140
- return this.httpService.Post(action.url, data);
141
- }
142
- }
143
- else {
144
- return this.httpService.Post(action.url, data);
145
- }
146
- }
147
- CheckWelcomed(path = 'home/admin/welcome') {
148
- this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {
149
- if (!x.data) {
150
- this.Navigate(path);
151
- }
152
- });
153
- }
154
- Navigate(path) {
155
- this.router.navigate([path]);
156
- }
157
- NavigateWithValue(path, value) {
158
- this.router.navigate([path], {
159
- queryParams: { v: value },
160
- queryParamsHandling: 'merge',
161
- skipLocationChange: false
162
- });
163
- }
164
- GetNavigationValue() {
165
- if (this.route.snapshot.queryParams["v"] != undefined) {
166
- return this.route.snapshot.queryParams["v"];
167
- }
168
- else {
169
- return "";
170
- }
171
- }
172
- //Users
173
- GetUser() {
174
- return this.httpService.Get("User/all/x");
175
- }
176
- RegisterAccount(u) {
177
- return this.httpService.Post("User/register", u);
178
- }
179
- GetUserByID(val) {
180
- return this.httpService.Get(`User/id/${val}`);
181
- }
182
- UpdateUser(profile) {
183
- return this.httpService.Post("User/edit", profile);
184
- }
185
- UnlockUser(user) {
186
- return this.httpService.Post("User/unlock", user);
187
- }
188
- LockUser(user) {
189
- return this.httpService.Post("User/lock", user);
190
- }
191
- DeleteUser(user) {
192
- return this.httpService.Post("User/delete", user);
193
- }
194
- Login(u) {
195
- return this.httpService.Post("User/login", u);
196
- }
197
- ChangePassword(u) {
198
- return this.httpService.Post("User/changepassword-self", u);
199
- }
200
- ChangePasswordAdmin(u) {
201
- return this.httpService.Post("User/changepassword-admin", u);
202
- }
203
- SelfReset(u) {
204
- return this.httpService.Post("Basic/SelfReset", u);
205
- }
206
- //Roles
207
- PostRole(role, action) {
208
- return this.httpService.Post(`Role?action=${action}`, role);
209
- }
210
- PutRole(role) {
211
- return this.httpService.Put("Role", role);
212
- }
213
- GetRole(by, val) {
214
- return this.httpService.Get("Role/all/x");
215
- }
216
- //Logs
217
- GetLog(by, val) {
218
- return this.httpService.Get("Log/all/x");
219
- }
220
- //Settings
221
- GetSetting(by, val) {
222
- return this.httpService.Get("Setting/all/x");
223
- }
224
- UpdateSetting(setting, action) {
225
- return this.httpService.Post(`Setting?action=${action}`, setting);
226
- }
227
- }
228
- 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 });
229
- DataServiceLib.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, providedIn: 'root' });
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, decorators: [{
231
- type: Injectable,
232
- args: [{
233
- providedIn: 'root'
234
- }]
235
- }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBVSxTQUFTLEVBQUUsT0FBTyxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7OztBQU9uRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUFvQixXQUF3QixFQUFTLE1BQWMsRUFBVSxLQUFxQjtRQUE5RSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXVIbEcsY0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBTTdELFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixZQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUUxQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzdCLGVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN6QixrQkFBYSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzVCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUV2QixlQUFV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Q0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBR0QsT0FBTztJQUVBLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxPQUFPLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBSUQsTUFBTTtJQUNDLE1BQU0sQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRCxVQUFVO0lBQ0gsVUFBVSxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDOzsyR0FuU1UsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgQXBwQ29uZmlnLCBDYXBJdGVtLCBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlTGliIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHJcbiAgICB0aGlzLmFwcENvbmZpZy5hcHBOYW1lID0gXCJBcHAtTmFtZVwiO1xyXG4gICAgdGhpcy5hcHBDb25maWcubG9nbyA9IFwiLi9hc3NldHMvbG9nby5wbmdcIlxyXG4gICAgdGhpcy5hcHBDb25maWcuQURBdXRoID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBwQ29uZmlnLmNhcEl0ZW1zID0gW3RoaXMuY2FwTXVsdGl0ZW5hbnQsIHRoaXMuY2FwQWRtaW4sIHRoaXMuY2FwSG9tZV07XHJcblxyXG5cclxuICAgIHRoaXMuY2FwSG9tZS5uYW1lID0gXCJjYXAxXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUuZGlzcGxheSA9IFwiSG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmxpbmsgPSBcImhvbWVcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5pY29uID1cImhvbWVcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBBZG1pbi5uYW1lID0gXCJjYXAyXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmRpc3BsYXkgPSBcIkFkbWluXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmljb24gPSBcInNlY3VyaXR5XCJcclxuICAgIHRoaXMuY2FwQWRtaW4uY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBVc2VycywgdGhpcy5jYXBSb2xlcywgdGhpcy5jYXBMb2dzLCB0aGlzLmNhcFNldHRpbmdzXTtcclxuXHJcbiAgICB0aGlzLmNhcFVzZXJzLm5hbWUgPSBcImNhcDNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMuZGlzcGxheSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMubGluayA9IFwiaG9tZS9hZG1pbi91c2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5pY29uID0gXCJncm91cFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUm9sZXMubmFtZSA9IFwiY2FwNFwiXHJcbiAgICB0aGlzLmNhcFJvbGVzLmRpc3BsYXkgPSBcIlJvbGVzXCI7XHJcbiAgICB0aGlzLmNhcFJvbGVzLmxpbmsgPSBcImhvbWUvYWRtaW4vcm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMuaWNvbiA9IFwid29ya1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTG9ncy5uYW1lID0gXCJjYXA1XCJcclxuICAgIHRoaXMuY2FwTG9ncy5kaXNwbGF5ID0gXCJMb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MubGluayA9IFwiaG9tZS9hZG1pbi9sb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MuaWNvbiA9IFwidGV4dF9zbmlwcGV0XCI7XHJcblxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5uYW1lID0gXCJjYXA2XCJcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MuZGlzcGxheSA9IFwiU2V0dGluZ3NcIjtcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MubGluayA9IFwiaG9tZS9hZG1pbi9zZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5pY29uID1cInNldHRpbmdzXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQubmFtZSA9IFwiY2FwN1wiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmRpc3BsYXkgPSBcIk11bHRpdGVuYW50XCI7XHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50Lmljb24gPSBcImFwYXJ0bWVudFwiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwVGVuYW50cywgdGhpcy5jYXBNZW1iZXJzaGlwLCB0aGlzLmNhcFBsYW5zIF07XHJcblxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLm5hbWUgPSBcImNhcDhcIlxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmRpc3BsYXkgPSBcIlRlbmFudHNcIjtcclxuICAgIHRoaXMuY2FwVGVuYW50cy5saW5rID0gXCJob21lL2FkbWluL3RlbmFudHNcIjtcclxuXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubmFtZSA9IFwiY2FwOVwiXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAuZGlzcGxheSA9IFwiTWVtYmVyc2hpcFwiO1xyXG4gICAgdGhpcy5jYXBNZW1iZXJzaGlwLmxpbmsgPSBcImhvbWUvYWRtaW4vbWVtYmVyc2hpcFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUGxhbnMubmFtZSA9IFwiY2FwMTBcIlxyXG4gICAgdGhpcy5jYXBQbGFucy5kaXNwbGF5ID0gXCJQbGFuc1wiO1xyXG4gICAgdGhpcy5jYXBQbGFucy5saW5rID0gXCJob21lL2FkbWluL3BsYW5zXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwR2VuZXJhbC5uYW1lID0gXCJjYXAxMVwiXHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuZGlzcGxheSA9IFwiR2VuZXJhbFwiO1xyXG4gICAgdGhpcy5jYXBHZW5lcmFsLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwQ3VzdG9tZXJzLCB0aGlzLmNhcEludmVudG9yeSwgdGhpcy5jYXBBY2NvdW50cywgdGhpcy5jYXBTdXBwbGllcnMsIHRoaXMuY2FwVGFza3NdO1xyXG5cclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLm5hbWUgPSBcImNhcDEyXCJcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmRpc3BsYXkgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubGluayA9IFwiaG9tZS9hZG1pbi9jdXN0b21lcnNcIjtcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5uYW1lID0gXCJjYXAxM1wiXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5kaXNwbGF5ID0gXCJJbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmxpbmsgPSBcImhvbWUvYWRtaW4vaW52ZW50b3J5XCI7XHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5pY29uID0gXCJzdG9yZWZyb250XCJcclxuXHJcbiAgICB0aGlzLmNhcEFjY291bnRzLm5hbWUgPSBcImNhcDE0XCJcclxuICAgIHRoaXMuY2FwQWNjb3VudHMuZGlzcGxheSA9IFwiQWNjb3VudHNcIjtcclxuICAgIHRoaXMuY2FwQWNjb3VudHMubGluayA9IFwiaG9tZS9hZG1pbi9hY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5pY29uID0gXCJhY2NvdW50X2JhbGFuY2Vfd2FsbGV0XCJcclxuXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5uYW1lID0gXCJjYXAxNVwiXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5kaXNwbGF5ID0gXCJTdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmxpbmsgPSBcImhvbWUvYWRtaW4vc3VwcGxpZXJzXCI7XHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5pY29uID0gXCJncm91cHNcIlxyXG5cclxuICAgIHRoaXMuY2FwVGFza3MubmFtZSA9IFwiY2FwMTZcIlxyXG4gICAgdGhpcy5jYXBUYXNrcy5kaXNwbGF5ID0gXCJUYXNrc1wiO1xyXG4gICAgdGhpcy5jYXBUYXNrcy5saW5rID0gXCJob21lL2FkbWluL3Rhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmljb24gPSBcInRhc2tfYWx0XCJcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIUi5uYW1lID0gXCJjYXAxN1wiXHJcbiAgICB0aGlzLmNhcEhSLmRpc3BsYXkgPSBcIkhSXCI7XHJcbiAgICB0aGlzLmNhcEhSLmxpbmsgPSBcImhvbWUvYWRtaW4vaHJcIjtcclxuICAgIHRoaXMuY2FwSFIuaWNvbiA9IFwiZGl2ZXJzaXR5XzNcIlxyXG4gICAgdGhpcy5jYXBIUi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcEVtcGxveWVlcyx0aGlzLmNhcERlcGFydG1lbnRzLHRoaXMuY2FwUG9zaXRpb25zLHRoaXMuY2FwR3JhZGVzXVxyXG5cclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmRpc3BsYXkgPSBcIkVtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubGluayA9IFwiaG9tZS9hZG1pbi9lbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuZGlzcGxheSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubGluayA9IFwiaG9tZS9hZG1pbi9kZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5pY29uID0gXCJidXNpbmVzc19jZW50ZXJcIlxyXG5cclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmRpc3BsYXkgPSBcIlBvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9wb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmljb24gPSBcInBpY3R1cmVfaW5fcGljdHVyZV9tZWRpdW1cIlxyXG5cclxuICAgIHRoaXMuY2FwR3JhZGVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwR3JhZGVzLmRpc3BsYXkgPSBcIkdyYWRlc1wiO1xyXG4gICAgdGhpcy5jYXBHcmFkZXMubGluayA9IFwiaG9tZS9hZG1pbi9ncmFkZXNcIjtcclxuICAgIHRoaXMuY2FwR3JhZGVzLmljb24gPSBcImdyYWRpbmdcIlxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBwcml2YXRlIGFwcENvbmZpZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5hcHBDb25maWcpO1xyXG4gIHB1YmxpYyBhcHBDb25maWdPYnNlcnYgPSB0aGlzLmFwcENvbmZpZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBVcGRhdGVBcHBDb25maWcoY29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgIHRoaXMuYXBwQ29uZmlnU291cmNlLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuYXBwQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgY2FwSG9tZSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFkbWluID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVXNlcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBSb2xlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcExvZ3MgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZXR0aW5ncyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBNdWx0aXRlbmFudCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFRlbmFudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBNZW1iZXJzaGlwID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUGxhbnMgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwR2VuZXJhbCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEN1c3RvbWVycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEludmVudG9yeSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFjY291bnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU3VwcGxpZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGFza3MgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwSFIgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBFbXBsb3llZXMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBEZXBhcnRtZW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFBvc2l0aW9ucyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEdyYWRlcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBwdWJsaWMgdG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuXHJcblxyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgQ2FsbEFwaShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55ID0gJycgKSB7XHJcblxyXG4gICAgaWYgKCFhY3Rpb24ubWV0aG9kKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KGFjdGlvbi51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGFjdGlvbi5tZXRob2QgPT0nZ2V0Jyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKTtcclxuICAgIH0gZWxzZSBpZiAoYWN0aW9uLm1ldGhvZCA9PSAncG9zdCcpe1xyXG5cclxuICAgICAgaWYgKGFjdGlvbi5pc0Zvcm1EYXRhKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0X0Zvcm1EYXRhKGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hlY2tXZWxjb21lZChwYXRoOiBzdHJpbmcgPSAnaG9tZS9hZG1pbi93ZWxjb21lJykge1xyXG4gICAgdGhpcy5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3dlbGNvbWUveCcgfSkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5OYXZpZ2F0ZShwYXRoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBwdWJsaWMgTmF2aWdhdGUocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlV2l0aFZhbHVlKHBhdGg6IHN0cmluZywgdmFsdWUgOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHY6IHZhbHVlIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldE5hdmlnYXRpb25WYWx1ZSgpe1xyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInZcIl1cclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0bXBBY2NvdW50SUQ7XHJcblxyXG5cclxuXHJcbiAgLy9Vc2Vyc1xyXG4gIHB1YmxpYyBHZXRVc2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KFwiVXNlci9hbGwveFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWdpc3RlckFjY291bnQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvcmVnaXN0ZXJcIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0VXNlckJ5SUQodmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChgVXNlci9pZC8ke3ZhbH1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVVc2VyKHByb2ZpbGUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2VkaXRcIiwgcHJvZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVW5sb2NrVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci91bmxvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9ja1wiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEZWxldGVVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2RlbGV0ZVwiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2dpbih1OiBVc2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9sb2dpblwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZCh1KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9jaGFuZ2VwYXNzd29yZC1zZWxmXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIENoYW5nZVBhc3N3b3JkQWRtaW4odSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtYWRtaW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZlJlc2V0KHU6IFVzZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIkJhc2ljL1NlbGZSZXNldFwiLCB1KTtcclxuICB9XHJcblxyXG5cclxuICAvL1JvbGVzXHJcblxyXG4gIHB1YmxpYyBQb3N0Um9sZShyb2xlLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgUm9sZT9hY3Rpb249JHthY3Rpb259YCwgcm9sZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHV0Um9sZShyb2xlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5QdXQoXCJSb2xlXCIsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFJvbGUoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlJvbGUvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vTG9nc1xyXG4gIHB1YmxpYyBHZXRMb2coYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIkxvZy9hbGwveFwiKTtcclxuICB9XHJcblxyXG5cclxuICAvL1NldHRpbmdzXHJcbiAgcHVibGljIEdldFNldHRpbmcoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlNldHRpbmcvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlU2V0dGluZyhzZXR0aW5nLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgU2V0dGluZz9hY3Rpb249JHthY3Rpb259YCwgc2V0dGluZyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=