client-core-services 1.0.0

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 (120) hide show
  1. package/README.md +24 -0
  2. package/esm2020/client-core-services.mjs +5 -0
  3. package/esm2020/lib/my-lib.module.mjs +98 -0
  4. package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
  5. package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
  6. package/esm2020/lib/services/api/api.service.mjs +611 -0
  7. package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
  8. package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
  9. package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
  10. package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
  11. package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
  12. package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
  13. package/esm2020/lib/services/chart/chart.service.mjs +166 -0
  14. package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
  15. package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
  16. package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
  17. package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
  18. package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
  19. package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
  20. package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
  21. package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
  22. package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
  23. package/esm2020/lib/services/download/download.service.mjs +151 -0
  24. package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
  25. package/esm2020/lib/services/env/env.service.mjs +232 -0
  26. package/esm2020/lib/services/env/serverHostList.mjs +56 -0
  27. package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
  28. package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
  29. package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
  30. package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
  31. package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
  32. package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
  33. package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
  34. package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
  35. package/esm2020/lib/services/loader/loader.service.mjs +17 -0
  36. package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
  37. package/esm2020/lib/services/model/model.service.mjs +30 -0
  38. package/esm2020/lib/services/notify/notification.service.mjs +84 -0
  39. package/esm2020/lib/services/operator/operator.service.mjs +58 -0
  40. package/esm2020/lib/services/permission/permission.service.mjs +88 -0
  41. package/esm2020/lib/services/router/router.service.mjs +78 -0
  42. package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
  43. package/esm2020/lib/services/storage/storage.service.mjs +749 -0
  44. package/esm2020/lib/services/tree-component/interface.mjs +6 -0
  45. package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
  46. package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
  47. package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
  48. package/esm2020/lib/shared/configuration/config.mjs +76 -0
  49. package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
  50. package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
  51. package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
  52. package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
  53. package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
  54. package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
  55. package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
  56. package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
  57. package/esm2020/lib/shared/platform.mjs +2 -0
  58. package/esm2020/public-api.mjs +53 -0
  59. package/fesm2015/client-core-services.mjs +15487 -0
  60. package/fesm2015/client-core-services.mjs.map +1 -0
  61. package/fesm2020/client-core-services.mjs +15482 -0
  62. package/fesm2020/client-core-services.mjs.map +1 -0
  63. package/index.d.ts +5 -0
  64. package/lib/my-lib.module.d.ts +18 -0
  65. package/lib/services/api/api-call/api-call.service.d.ts +60 -0
  66. package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
  67. package/lib/services/api/api.service.d.ts +88 -0
  68. package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
  69. package/lib/services/api/auth/auth.service.d.ts +50 -0
  70. package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
  71. package/lib/services/api/common-api/common-api.service.d.ts +22 -0
  72. package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
  73. package/lib/services/api/public-api/public-api.service.d.ts +14 -0
  74. package/lib/services/chart/chart.service.d.ts +21 -0
  75. package/lib/services/check-if/check-if.service.d.ts +50 -0
  76. package/lib/services/common-utils/common-function.service.d.ts +84 -0
  77. package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
  78. package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
  79. package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
  80. package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
  81. package/lib/services/data-share/data-share.service.d.ts +174 -0
  82. package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
  83. package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
  84. package/lib/services/download/download.service.d.ts +35 -0
  85. package/lib/services/encryption/encryption.service.d.ts +8 -0
  86. package/lib/services/env/env.service.d.ts +44 -0
  87. package/lib/services/env/serverHostList.d.ts +9 -0
  88. package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
  89. package/lib/services/form/form-control/form-control.service.d.ts +44 -0
  90. package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
  91. package/lib/services/form/form-value/form-value.service.d.ts +32 -0
  92. package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
  93. package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
  94. package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
  95. package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
  96. package/lib/services/loader/loader.service.d.ts +8 -0
  97. package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
  98. package/lib/services/model/model.service.d.ts +11 -0
  99. package/lib/services/notify/notification.service.d.ts +22 -0
  100. package/lib/services/operator/operator.service.d.ts +27 -0
  101. package/lib/services/permission/permission.service.d.ts +18 -0
  102. package/lib/services/router/router.service.d.ts +14 -0
  103. package/lib/services/storage/cookies.service.d.ts +11 -0
  104. package/lib/services/storage/storage.service.d.ts +132 -0
  105. package/lib/services/tree-component/interface.d.ts +13 -0
  106. package/lib/services/tree-component/tree-component.service.d.ts +38 -0
  107. package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
  108. package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
  109. package/lib/shared/configuration/config.d.ts +144 -0
  110. package/lib/shared/configuration/editor-config.d.ts +72 -0
  111. package/lib/shared/enums/common.enum.d.ts +16 -0
  112. package/lib/shared/enums/config.enum.d.ts +54 -0
  113. package/lib/shared/enums/end-point.enum.d.ts +66 -0
  114. package/lib/shared/enums/flags.enum.d.ts +18 -0
  115. package/lib/shared/enums/keycodes.enum.d.ts +120 -0
  116. package/lib/shared/enums/operator_type.enum.d.ts +9 -0
  117. package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
  118. package/lib/shared/platform.d.ts +1 -0
  119. package/package.json +40 -0
  120. package/public-api.d.ts +49 -0
@@ -0,0 +1,283 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Operator } from '../../operator/operator.service';
3
+ import * as i0 from "@angular/core";
4
+ export class CoreFunctionService {
5
+ // commonOperators:any={
6
+ // eq :"EQUAL",
7
+ // in : "IN",
8
+ // neq : "NOT_EQUAL",
9
+ // // stwic : "STARTS_WITH_IGNORE_CASE",
10
+ // cnts : "CONTAINS"
11
+ // };
12
+ constructor() { }
13
+ isNotBlank(value) {
14
+ if (value && value != undefined && value != null && value != '' && JSON.stringify(value) != "{}" && JSON.stringify(value) != "[]") {
15
+ return true;
16
+ }
17
+ else {
18
+ return false;
19
+ }
20
+ }
21
+ getModulesFromMapObject(obj) {
22
+ let user = obj.user;
23
+ let permissions = obj.permission;
24
+ let rollList = obj.rollList;
25
+ let utvn = {};
26
+ let modules = [];
27
+ let permissionList = {};
28
+ if (permissions && Object.keys(permissions).length > 0) {
29
+ Object.keys(permissions).forEach((mokey, i) => {
30
+ let moduleObj = {};
31
+ let module = permissions[mokey];
32
+ if (module && module.details) {
33
+ moduleObj = module.details;
34
+ }
35
+ let menuList = [];
36
+ if (module && module.menuMap) {
37
+ let menuMap = module.menuMap;
38
+ if (Object.keys(menuMap).length > 0) {
39
+ Object.keys(menuMap).forEach((mekey, j) => {
40
+ let menuobj = {};
41
+ let menu = menuMap[mekey];
42
+ if (menu && menu.details) {
43
+ menuobj = menu.details;
44
+ }
45
+ let submenuList = [];
46
+ if (menu && menu.submenuMap) {
47
+ let submenuMap = menu.submenuMap;
48
+ if (Object.keys(submenuMap).length > 0) {
49
+ Object.keys(submenuMap).forEach((smkey, k) => {
50
+ let submenuObj = {};
51
+ let submenu = submenuMap[smkey];
52
+ if (submenu && submenu.details) {
53
+ submenuObj = submenu.details;
54
+ }
55
+ this.setTabOrPermission(submenu, permissionList, submenuObj);
56
+ submenuList.push(submenuObj);
57
+ });
58
+ }
59
+ }
60
+ else {
61
+ this.setTabOrPermission(menu, permissionList, menuobj);
62
+ }
63
+ if (submenuList && submenuList.length > 0) {
64
+ menuobj['submenu'] = this.sortMenu(submenuList);
65
+ }
66
+ else {
67
+ menuobj['submenu'] = null;
68
+ }
69
+ menuList.push(menuobj);
70
+ });
71
+ }
72
+ }
73
+ if (menuList && menuList.length > 0) {
74
+ moduleObj['menu_list'] = this.sortMenu(menuList);
75
+ }
76
+ else {
77
+ moduleObj['menu_list'] = null;
78
+ }
79
+ modules.push(moduleObj);
80
+ });
81
+ }
82
+ let modifiedModules = this.setDefaultIndexForModules(modules);
83
+ utvn['modules'] = this.sortMenu(modifiedModules);
84
+ utvn['permission'] = permissionList;
85
+ utvn['user'] = user;
86
+ utvn['rollList'] = rollList;
87
+ return utvn;
88
+ }
89
+ setTabOrPermission(menu, permissionList, menuObj) {
90
+ let tabList = [];
91
+ if (menu && menu.templateTabMap) {
92
+ let tabsMap = menu.templateTabMap;
93
+ if (Object.keys(tabsMap).length > 0) {
94
+ Object.keys(tabsMap).forEach((tkey, l) => {
95
+ let tab = tabsMap[tkey];
96
+ const modifyTab = {};
97
+ modifyTab['field_name'] = tkey;
98
+ modifyTab['label'] = tab?.label;
99
+ modifyTab['grid'] = tab?.grid;
100
+ if (tab && tab.details && tab.details._id) {
101
+ modifyTab['_id'] = tab.details._id;
102
+ }
103
+ tabList.push(modifyTab);
104
+ if (tkey in permissionList) {
105
+ if (tab && tab.access) {
106
+ let oldPermissoin = permissionList[tkey];
107
+ let newPermission = tab.access;
108
+ if (newPermission && newPermission.length > 0) {
109
+ newPermission.forEach((permission) => {
110
+ if (!oldPermissoin.includes(permission)) {
111
+ oldPermissoin.push(permission);
112
+ }
113
+ });
114
+ }
115
+ permissionList[tkey] = oldPermissoin;
116
+ }
117
+ }
118
+ else {
119
+ if (tab && tab.access) {
120
+ permissionList[tkey] = tab.access;
121
+ }
122
+ }
123
+ });
124
+ }
125
+ }
126
+ menuObj['tabList'] = tabList;
127
+ }
128
+ setDefaultIndexForModules(modules) {
129
+ if (modules?.length > 0) {
130
+ let maxIndex = modules.length;
131
+ modules.forEach((module) => {
132
+ if (!module?.index) {
133
+ module["index"] = maxIndex;
134
+ }
135
+ });
136
+ }
137
+ return modules;
138
+ }
139
+ sortMenu(menuList) {
140
+ let list = [];
141
+ let mlist = menuList.sort((a, b) => {
142
+ if (a.index === b.index) {
143
+ // If `index` is the same, sort by `name` alphabetically
144
+ return a.name.localeCompare(b.name);
145
+ }
146
+ else {
147
+ // Otherwise, sort by `index`
148
+ return a.index - b.index;
149
+ }
150
+ });
151
+ if (mlist && mlist.length > 0) {
152
+ mlist.forEach((m) => {
153
+ list.push(m);
154
+ });
155
+ }
156
+ return list;
157
+ }
158
+ convertListToColonString(list, type, key) {
159
+ let value = "";
160
+ if (type.toLowerCase() == 'text') {
161
+ if (list && list.length > 0) {
162
+ for (let index = 0; index < list.length; index++) {
163
+ const str = list[index];
164
+ if ((index + 1) == list.length) {
165
+ value = value + str;
166
+ }
167
+ else {
168
+ value = value + str + ':';
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return value;
174
+ }
175
+ prepareTemplate(tempList, moduleName) {
176
+ let preParedList = {};
177
+ if (tempList && tempList.length > 0) {
178
+ tempList.forEach((temp) => {
179
+ let name = moduleName + "_" + temp.name;
180
+ preParedList[name] = temp;
181
+ });
182
+ }
183
+ return preParedList;
184
+ }
185
+ getTempNameFromPayload(payload) {
186
+ let value = '';
187
+ if (Object.keys(payload).length > 0) {
188
+ let crList = payload['crList'];
189
+ if (crList && crList.length > 0) {
190
+ let criteria = crList[0];
191
+ value = criteria['fValue'];
192
+ }
193
+ }
194
+ return value;
195
+ }
196
+ getJsonSizeInKilobyte(obj) {
197
+ const bytes = new TextEncoder().encode(JSON.stringify(obj)).length;
198
+ const kiloBytes = (bytes / 1024).toFixed(2);
199
+ //const megaBytes = kiloBytes / 1024;
200
+ return Number(kiloBytes);
201
+ }
202
+ removeSpaceFromString(str) {
203
+ if (str && typeof str == "string") {
204
+ return str.trim();
205
+ }
206
+ else {
207
+ return str;
208
+ }
209
+ }
210
+ checkBlankProperties(data) {
211
+ const objWithoutNull = { ...data };
212
+ Object.keys(objWithoutNull).forEach(key => {
213
+ if (objWithoutNull[key] === "") {
214
+ objWithoutNull[key] = null;
215
+ }
216
+ });
217
+ return objWithoutNull;
218
+ }
219
+ // getOperators(type:string,dataTye?:string){
220
+ // let operatorList = {...this.commonOperators};
221
+ // switch (type){
222
+ // case "date":
223
+ // operatorList['cntsic'] = 'CONTAINS_IGNORE_CASE';
224
+ // operatorList['lt'] = 'LESS_THAN';
225
+ // operatorList['lte'] = "RANGE_BORDER_LESS_THAN_INCLUSIVE";
226
+ // operatorList['gt'] = 'GREATER_THAN';
227
+ // operatorList['gte'] = 'RANGE_BORDER_GREATER_THAN_INCLUSIVE';
228
+ // break;
229
+ // case "number":
230
+ // operatorList['lt'] = 'LESS_THAN';
231
+ // operatorList['lte'] = "RANGE_BORDER_LESS_THAN_INCLUSIVE";
232
+ // operatorList['gt'] = 'GREATER_THAN';
233
+ // operatorList['gte'] = 'RANGE_BORDER_GREATER_THAN_INCLUSIVE';
234
+ // break;
235
+ // case "string":
236
+ // operatorList['stw'] = "STARTS_WITH";
237
+ // operatorList['stwic'] = "STARTS_WITH_IGNORE_CASE";
238
+ // operatorList['edw'] = 'ENDS_WITH';
239
+ // operatorList['edwic'] = 'ENDS_WITH_IGNORE_CASE';
240
+ // operatorList['cntsic'] = 'CONTAINS_IGNORE_CASE';
241
+ // operatorList['ncnts'] = 'NOT_CONTAINS';
242
+ // operatorList['ncntsic'] = 'NOT_CONTAINS_IGNORE_CASE';
243
+ // break;
244
+ // default:
245
+ // break;
246
+ // }
247
+ // let sortValue = this.sortOperators(operatorList);
248
+ // if(dataTye == 'list'){
249
+ // return this.mapObjectToListOfString(sortValue);
250
+ // }else{
251
+ // return sortValue;
252
+ // }
253
+ // }
254
+ getOperators(type, name) {
255
+ return Operator.getOperators(type, name);
256
+ }
257
+ sortOperators(operatorList) {
258
+ const sortedKeys = Object.keys(operatorList).sort();
259
+ const sortedOperatorList = {};
260
+ sortedKeys.forEach(key => {
261
+ sortedOperatorList[key] = operatorList[key];
262
+ });
263
+ return sortedOperatorList;
264
+ }
265
+ mapObjectToListOfString(mapObject) {
266
+ let List = [];
267
+ if (mapObject && Object.keys(mapObject).length > 0) {
268
+ Object.keys(mapObject).forEach((key) => {
269
+ List.push(mapObject[key]);
270
+ });
271
+ }
272
+ return List;
273
+ }
274
+ }
275
+ CoreFunctionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
276
+ CoreFunctionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, providedIn: 'root' });
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, decorators: [{
278
+ type: Injectable,
279
+ args: [{
280
+ providedIn: 'root'
281
+ }]
282
+ }], ctorParameters: function () { return []; } });
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mdW5jdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24tdXRpbHMvY29yZS1mdW5jdGlvbi9jb3JlLWZ1bmN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBTTNELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLDBDQUEwQztJQUMxQyxzQkFBc0I7SUFDdEIsS0FBSztJQUVMLGdCQUFnQixDQUFDO0lBQ2pCLFVBQVUsQ0FBQyxLQUFTO1FBQ2xCLElBQUcsS0FBSyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFDO1lBQy9ILE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBSTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBQ0QsdUJBQXVCLENBQUMsR0FBTztRQUM3QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3BCLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUM1QixJQUFJLElBQUksR0FBTyxFQUFFLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFHLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksU0FBUyxHQUFPLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFDO29CQUMxQixTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDNUI7Z0JBQ0QsSUFBSSxRQUFRLEdBQU8sRUFBRSxDQUFDO2dCQUN0QixJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFDO29CQUMxQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUM3QixJQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQzt3QkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFFLEVBQUU7NEJBQ3ZDLElBQUksT0FBTyxHQUFPLEVBQUUsQ0FBQzs0QkFDckIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUMxQixJQUFHLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFDO2dDQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs2QkFDeEI7NEJBQ0QsSUFBSSxXQUFXLEdBQU8sRUFBRSxDQUFDOzRCQUN6QixJQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFDO2dDQUN6QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dDQUNqQyxJQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztvQ0FDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFFLEVBQUU7d0NBQzFDLElBQUksVUFBVSxHQUFPLEVBQUUsQ0FBQzt3Q0FDeEIsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dDQUNoQyxJQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFDOzRDQUM1QixVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQzt5Q0FDOUI7d0NBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsVUFBVSxDQUFDLENBQUM7d0NBQzNELFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0NBQy9CLENBQUMsQ0FBQyxDQUFDO2lDQUNKOzZCQUNGO2lDQUFJO2dDQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUMsY0FBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDOzZCQUN0RDs0QkFDRCxJQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQ0FDdkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7NkJBQ2pEO2lDQUFJO2dDQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7NkJBQzNCOzRCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3pCLENBQUMsQ0FBQyxDQUFBO3FCQUNIO2lCQUNGO2dCQUNELElBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO29CQUNqQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbEQ7cUJBQUk7b0JBQ0gsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDL0I7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELGtCQUFrQixDQUFDLElBQVEsRUFBQyxjQUFrQixFQUFDLE9BQVc7UUFDeEQsSUFBSSxPQUFPLEdBQUssRUFBRSxDQUFDO1FBQ25CLElBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUM7WUFDN0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxJQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxTQUFTLEdBQU8sRUFBRSxDQUFDO29CQUN6QixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMvQixTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQztvQkFDaEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUM7b0JBQzlCLElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUM7d0JBQ3ZDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQTtxQkFDbkM7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDeEIsSUFBRyxJQUFJLElBQUksY0FBYyxFQUFDO3dCQUN4QixJQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFDOzRCQUNuQixJQUFJLGFBQWEsR0FBaUIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN2RCxJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDOzRCQUMvQixJQUFHLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQ0FDM0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWlCLEVBQUUsRUFBRTtvQ0FDMUMsSUFBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUM7d0NBQ3JDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUNBQ2hDO2dDQUNILENBQUMsQ0FBQyxDQUFDOzZCQUNKOzRCQUNELGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7eUJBQ3RDO3FCQUNGO3lCQUFJO3dCQUNILElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUM7NEJBQ25CLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3lCQUNuQztxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxPQUFXO1FBQ25DLElBQUcsT0FBTyxFQUFFLE1BQU0sR0FBQyxDQUFDLEVBQUM7WUFDbkIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQTtZQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVSxFQUFFLEVBQUU7Z0JBQzdCLElBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO29CQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO2lCQUMxQjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsUUFBUSxDQUFDLFFBQVk7UUFDbkIsSUFBSSxJQUFJLEdBQUssRUFBRSxDQUFDO1FBQ2hCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFLLEVBQUMsQ0FBSyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZCLHdEQUF3RDtnQkFDeEQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0gsNkJBQTZCO2dCQUM3QixPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBRyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUssRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELHdCQUF3QixDQUFDLElBQVEsRUFBQyxJQUFRLEVBQUMsR0FBVztRQUNwRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLEVBQUM7WUFDOUIsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ3pCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLElBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBQzt3QkFDNUIsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7cUJBQ3JCO3lCQUFJO3dCQUNILEtBQUssR0FBRyxLQUFLLEdBQUksR0FBRyxHQUFFLEdBQUcsQ0FBQztxQkFDM0I7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsZUFBZSxDQUFDLFFBQVksRUFBQyxVQUFpQjtRQUM1QyxJQUFJLFlBQVksR0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBRyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVEsRUFBRSxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxVQUFVLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxPQUFXO1FBQ2hDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ2pDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixJQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztnQkFDN0IsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxHQUFPO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLHFDQUFxQztRQUNyQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QscUJBQXFCLENBQUMsR0FBVTtRQUM5QixJQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUM7WUFDL0IsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7YUFBSTtZQUNILE9BQU8sR0FBRyxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsSUFBUTtRQUMzQixNQUFNLGNBQWMsR0FBTyxFQUFDLEdBQUcsSUFBSSxFQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM5QixjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQzVCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsNkNBQTZDO0lBQzdDLGtEQUFrRDtJQUNsRCxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLHlEQUF5RDtJQUN6RCwwQ0FBMEM7SUFDMUMsa0VBQWtFO0lBQ2xFLDZDQUE2QztJQUM3QyxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQiwwQ0FBMEM7SUFDMUMsa0VBQWtFO0lBQ2xFLDZDQUE2QztJQUM3QyxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQiw2Q0FBNkM7SUFDN0MsMkRBQTJEO0lBQzNELDJDQUEyQztJQUMzQyx5REFBeUQ7SUFDekQseURBQXlEO0lBQ3pELGdEQUFnRDtJQUNoRCw4REFBOEQ7SUFDOUQsZUFBZTtJQUNmLGVBQWU7SUFDZixlQUFlO0lBQ2YsTUFBTTtJQUNOLHNEQUFzRDtJQUN0RCwyQkFBMkI7SUFDM0Isc0RBQXNEO0lBQ3RELFdBQVc7SUFDWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUNOLElBQUk7SUFFSixZQUFZLENBQUMsSUFBa0IsRUFBQyxJQUFXO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFnQjtRQUM1QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25ELE1BQU0sa0JBQWtCLEdBQU8sRUFBRSxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxrQkFBa0IsQ0FBQztJQUM3QixDQUFDO0lBQ0QsdUJBQXVCLENBQUMsU0FBYTtRQUNuQyxJQUFJLElBQUksR0FBTyxFQUFFLENBQUM7UUFDbEIsSUFBRyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7aUhBelFVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9vcGVyYXRvci9vcGVyYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yX3R5cGUuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlRnVuY3Rpb25TZXJ2aWNlIHtcclxuICAvLyBjb21tb25PcGVyYXRvcnM6YW55PXtcclxuICAvLyAgIGVxIDpcIkVRVUFMXCIsXHJcbiAgLy8gICBpbiA6IFwiSU5cIixcclxuICAvLyAgIG5lcSA6IFwiTk9UX0VRVUFMXCIsXHJcbiAgLy8gICAvLyBzdHdpYyA6IFwiU1RBUlRTX1dJVEhfSUdOT1JFX0NBU0VcIixcclxuICAvLyAgIGNudHMgOiBcIkNPTlRBSU5TXCJcclxuICAvLyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gIGlzTm90QmxhbmsodmFsdWU6YW55KXtcclxuICAgIGlmKHZhbHVlICYmIHZhbHVlICE9IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9ICcnICYmIEpTT04uc3RyaW5naWZ5KHZhbHVlKSAhPSBcInt9XCIgJiYgSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9IFwiW11cIil7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0TW9kdWxlc0Zyb21NYXBPYmplY3Qob2JqOmFueSl7XHJcbiAgICBsZXQgdXNlciA9IG9iai51c2VyO1xyXG4gICAgbGV0IHBlcm1pc3Npb25zID0gb2JqLnBlcm1pc3Npb247XHJcbiAgICBsZXQgcm9sbExpc3QgPSBvYmoucm9sbExpc3Q7XHJcbiAgICBsZXQgdXR2bjphbnkgPSB7fTtcclxuICAgIGxldCBtb2R1bGVzOmFueSA9IFtdO1xyXG4gICAgbGV0IHBlcm1pc3Npb25MaXN0ID0ge307XHJcbiAgICBpZihwZXJtaXNzaW9ucyAmJiBPYmplY3Qua2V5cyhwZXJtaXNzaW9ucykubGVuZ3RoID4gMCl7XHJcbiAgICAgIE9iamVjdC5rZXlzKHBlcm1pc3Npb25zKS5mb3JFYWNoKChtb2tleSxpKSA9PiB7XHJcbiAgICAgICAgbGV0IG1vZHVsZU9iajphbnkgPSB7fTtcclxuICAgICAgICBsZXQgbW9kdWxlID0gcGVybWlzc2lvbnNbbW9rZXldO1xyXG4gICAgICAgIGlmKG1vZHVsZSAmJiBtb2R1bGUuZGV0YWlscyl7XHJcbiAgICAgICAgICBtb2R1bGVPYmogPSBtb2R1bGUuZGV0YWlscztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1lbnVMaXN0OmFueSA9IFtdO1xyXG4gICAgICAgIGlmKG1vZHVsZSAmJiBtb2R1bGUubWVudU1hcCl7XHJcbiAgICAgICAgICBsZXQgbWVudU1hcCA9IG1vZHVsZS5tZW51TWFwO1xyXG4gICAgICAgICAgaWYoT2JqZWN0LmtleXMobWVudU1hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1lbnVNYXApLmZvckVhY2goKG1la2V5LGopID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbWVudW9iajphbnkgPSB7fTtcclxuICAgICAgICAgICAgICBsZXQgbWVudSA9IG1lbnVNYXBbbWVrZXldO1xyXG4gICAgICAgICAgICAgIGlmKG1lbnUgJiYgbWVudS5kZXRhaWxzKXtcclxuICAgICAgICAgICAgICAgIG1lbnVvYmogPSBtZW51LmRldGFpbHM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBzdWJtZW51TGlzdDphbnkgPSBbXTtcclxuICAgICAgICAgICAgICBpZihtZW51ICYmIG1lbnUuc3VibWVudU1hcCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3VibWVudU1hcCA9IG1lbnUuc3VibWVudU1hcDtcclxuICAgICAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHN1Ym1lbnVNYXApLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzdWJtZW51TWFwKS5mb3JFYWNoKChzbWtleSxrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Ym1lbnVPYmo6YW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Ym1lbnUgPSBzdWJtZW51TWFwW3Nta2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZihzdWJtZW51ICYmIHN1Ym1lbnUuZGV0YWlscyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJtZW51T2JqID0gc3VibWVudS5kZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYk9yUGVybWlzc2lvbihzdWJtZW51LHBlcm1pc3Npb25MaXN0LHN1Ym1lbnVPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1lbnVMaXN0LnB1c2goc3VibWVudU9iaik7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJPclBlcm1pc3Npb24obWVudSxwZXJtaXNzaW9uTGlzdCxtZW51b2JqKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoc3VibWVudUxpc3QgJiYgc3VibWVudUxpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBtZW51b2JqWydzdWJtZW51J10gPSB0aGlzLnNvcnRNZW51KHN1Ym1lbnVMaXN0KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG1lbnVvYmpbJ3N1Ym1lbnUnXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lbnVMaXN0LnB1c2gobWVudW9iaik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKG1lbnVMaXN0ICYmIG1lbnVMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgbW9kdWxlT2JqWydtZW51X2xpc3QnXSA9IHRoaXMuc29ydE1lbnUobWVudUxpc3QpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgbW9kdWxlT2JqWydtZW51X2xpc3QnXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vZHVsZXMucHVzaChtb2R1bGVPYmopO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGxldCBtb2RpZmllZE1vZHVsZXMgPSB0aGlzLnNldERlZmF1bHRJbmRleEZvck1vZHVsZXMobW9kdWxlcyk7XHJcbiAgICB1dHZuWydtb2R1bGVzJ10gPSB0aGlzLnNvcnRNZW51KG1vZGlmaWVkTW9kdWxlcylcclxuICAgIHV0dm5bJ3Blcm1pc3Npb24nXSA9IHBlcm1pc3Npb25MaXN0O1xyXG4gICAgdXR2blsndXNlciddID0gdXNlcjtcclxuICAgIHV0dm5bJ3JvbGxMaXN0J10gPSByb2xsTGlzdDtcclxuICAgIHJldHVybiB1dHZuO1xyXG4gIH1cclxuICBzZXRUYWJPclBlcm1pc3Npb24obWVudTphbnkscGVybWlzc2lvbkxpc3Q6YW55LG1lbnVPYmo6YW55KXtcclxuICAgIGxldCB0YWJMaXN0OmFueT1bXTtcclxuICAgIGlmKG1lbnUgJiYgbWVudS50ZW1wbGF0ZVRhYk1hcCl7XHJcbiAgICAgIGxldCB0YWJzTWFwID0gbWVudS50ZW1wbGF0ZVRhYk1hcDtcclxuICAgICAgaWYoT2JqZWN0LmtleXModGFic01hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGFic01hcCkuZm9yRWFjaCgodGtleSxsKSA9PiB7XHJcbiAgICAgICAgICBsZXQgdGFiID0gdGFic01hcFt0a2V5XTtcclxuICAgICAgICAgIGNvbnN0IG1vZGlmeVRhYjphbnkgPSB7fTtcclxuICAgICAgICAgIG1vZGlmeVRhYlsnZmllbGRfbmFtZSddID0gdGtleTtcclxuICAgICAgICAgIG1vZGlmeVRhYlsnbGFiZWwnXSA9IHRhYj8ubGFiZWw7XHJcbiAgICAgICAgICBtb2RpZnlUYWJbJ2dyaWQnXSA9IHRhYj8uZ3JpZDtcclxuICAgICAgICAgIGlmKHRhYiAmJiB0YWIuZGV0YWlscyAmJiB0YWIuZGV0YWlscy5faWQpe1xyXG4gICAgICAgICAgICBtb2RpZnlUYWJbJ19pZCddID0gdGFiLmRldGFpbHMuX2lkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YWJMaXN0LnB1c2gobW9kaWZ5VGFiKTtcclxuICAgICAgICAgIGlmKHRrZXkgaW4gcGVybWlzc2lvbkxpc3Qpe1xyXG4gICAgICAgICAgICBpZih0YWIgJiYgdGFiLmFjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgbGV0IG9sZFBlcm1pc3NvaW46QXJyYXk8c3RyaW5nPiA9IHBlcm1pc3Npb25MaXN0W3RrZXldO1xyXG4gICAgICAgICAgICAgIGxldCBuZXdQZXJtaXNzaW9uID0gdGFiLmFjY2VzcztcclxuICAgICAgICAgICAgICBpZihuZXdQZXJtaXNzaW9uICYmIG5ld1Blcm1pc3Npb24ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBuZXdQZXJtaXNzaW9uLmZvckVhY2goKHBlcm1pc3Npb246c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmKCFvbGRQZXJtaXNzb2luLmluY2x1ZGVzKHBlcm1pc3Npb24pKXtcclxuICAgICAgICAgICAgICAgICAgICBvbGRQZXJtaXNzb2luLnB1c2gocGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwZXJtaXNzaW9uTGlzdFt0a2V5XSA9IG9sZFBlcm1pc3NvaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZih0YWIgJiYgdGFiLmFjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbkxpc3RbdGtleV0gPSB0YWIuYWNjZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIG1lbnVPYmpbJ3RhYkxpc3QnXT10YWJMaXN0O1xyXG4gIH1cclxuICBzZXREZWZhdWx0SW5kZXhGb3JNb2R1bGVzKG1vZHVsZXM6YW55KXtcclxuICAgIGlmKG1vZHVsZXM/Lmxlbmd0aD4wKXtcclxuICAgICAgbGV0IG1heEluZGV4ID0gbW9kdWxlcy5sZW5ndGhcclxuICAgICAgbW9kdWxlcy5mb3JFYWNoKChtb2R1bGU6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoIW1vZHVsZT8uaW5kZXgpe1xyXG4gICAgICAgIG1vZHVsZVtcImluZGV4XCJdID0gbWF4SW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgfVxyXG4gIHNvcnRNZW51KG1lbnVMaXN0OmFueSl7XHJcbiAgICBsZXQgbGlzdDphbnk9W107XHJcbiAgICBsZXQgbWxpc3QgPSBtZW51TGlzdC5zb3J0KChhOmFueSxiOmFueSkgPT4ge1xyXG4gICAgICBpZiAoYS5pbmRleCA9PT0gYi5pbmRleCkge1xyXG4gICAgICAgIC8vIElmIGBpbmRleGAgaXMgdGhlIHNhbWUsIHNvcnQgYnkgYG5hbWVgIGFscGhhYmV0aWNhbGx5XHJcbiAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHNvcnQgYnkgYGluZGV4YFxyXG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmKG1saXN0ICYmIG1saXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICBtbGlzdC5mb3JFYWNoKChtOmFueSkgPT4ge1xyXG4gICAgICAgIGxpc3QucHVzaChtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcbiAgY29udmVydExpc3RUb0NvbG9uU3RyaW5nKGxpc3Q6YW55LHR5cGU6YW55LGtleT86c3RyaW5nKXtcclxuICAgIGxldCB2YWx1ZSA9IFwiXCI7XHJcbiAgICBpZih0eXBlLnRvTG93ZXJDYXNlKCkgPT0gJ3RleHQnKXtcclxuICAgICAgaWYobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3Qgc3RyID0gbGlzdFtpbmRleF07XHJcbiAgICAgICAgICBpZigoaW5kZXggKyAxKSA9PSBsaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyBzdHI7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAgKyBzdHIgKyc6JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgcHJlcGFyZVRlbXBsYXRlKHRlbXBMaXN0OmFueSxtb2R1bGVOYW1lOnN0cmluZyl7XHJcbiAgICBsZXQgcHJlUGFyZWRMaXN0OmFueSA9IHt9O1xyXG4gICAgaWYodGVtcExpc3QgJiYgdGVtcExpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRlbXBMaXN0LmZvckVhY2goKHRlbXA6YW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lK1wiX1wiK3RlbXAubmFtZTtcclxuICAgICAgICBwcmVQYXJlZExpc3RbbmFtZV0gPSB0ZW1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcmVQYXJlZExpc3Q7XHJcbiAgfVxyXG4gIGdldFRlbXBOYW1lRnJvbVBheWxvYWQocGF5bG9hZDphbnkpe1xyXG4gICAgbGV0IHZhbHVlID0gJyc7XHJcbiAgICBpZihPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGggPiAwKXtcclxuICAgICAgbGV0IGNyTGlzdCA9IHBheWxvYWRbJ2NyTGlzdCddO1xyXG4gICAgICBpZihjckxpc3QgJiYgY3JMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGxldCBjcml0ZXJpYSA9IGNyTGlzdFswXTtcclxuICAgICAgICB2YWx1ZSA9IGNyaXRlcmlhWydmVmFsdWUnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBnZXRKc29uU2l6ZUluS2lsb2J5dGUob2JqOmFueSl7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShvYmopKS5sZW5ndGg7XHJcbiAgICBjb25zdCBraWxvQnl0ZXMgPSAoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDIpO1xyXG4gICAgLy9jb25zdCBtZWdhQnl0ZXMgPSBraWxvQnl0ZXMgLyAxMDI0O1xyXG4gICAgcmV0dXJuIE51bWJlcihraWxvQnl0ZXMpO1xyXG4gIH1cclxuICByZW1vdmVTcGFjZUZyb21TdHJpbmcoc3RyOnN0cmluZyl7XHJcbiAgICBpZihzdHIgJiYgdHlwZW9mIHN0ciA9PSBcInN0cmluZ1wiKXtcclxuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tCbGFua1Byb3BlcnRpZXMoZGF0YTphbnkpIHtcclxuICAgIGNvbnN0IG9ialdpdGhvdXROdWxsOmFueSA9IHsuLi5kYXRhfTtcclxuICAgIE9iamVjdC5rZXlzKG9ialdpdGhvdXROdWxsKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmIChvYmpXaXRob3V0TnVsbFtrZXldID09PSBcIlwiKSB7XHJcbiAgICAgICAgb2JqV2l0aG91dE51bGxba2V5XSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9ialdpdGhvdXROdWxsO1xyXG4gIH1cclxuICAvLyBnZXRPcGVyYXRvcnModHlwZTpzdHJpbmcsZGF0YVR5ZT86c3RyaW5nKXtcclxuICAvLyAgIGxldCBvcGVyYXRvckxpc3QgPSB7Li4udGhpcy5jb21tb25PcGVyYXRvcnN9O1xyXG4gIC8vICAgc3dpdGNoICh0eXBlKXtcclxuICAvLyAgICAgY2FzZSBcImRhdGVcIjpcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2NudHNpYyddID0gJ0NPTlRBSU5TX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2x0J10gPSAnTEVTU19USEFOJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2x0ZSddID0gXCJSQU5HRV9CT1JERVJfTEVTU19USEFOX0lOQ0xVU0lWRVwiO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZ3QnXSA9ICdHUkVBVEVSX1RIQU4nO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZ3RlJ10gPSAnUkFOR0VfQk9SREVSX0dSRUFURVJfVEhBTl9JTkNMVVNJVkUnO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydsdCddID0gJ0xFU1NfVEhBTic7XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydsdGUnXSA9IFwiUkFOR0VfQk9SREVSX0xFU1NfVEhBTl9JTkNMVVNJVkVcIjtcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2d0J10gPSAnR1JFQVRFUl9USEFOJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2d0ZSddID0gJ1JBTkdFX0JPUkRFUl9HUkVBVEVSX1RIQU5fSU5DTFVTSVZFJztcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnc3R3J10gPSBcIlNUQVJUU19XSVRIXCI7XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydzdHdpYyddID0gXCJTVEFSVFNfV0lUSF9JR05PUkVfQ0FTRVwiO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZWR3J10gPSAnRU5EU19XSVRIJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2Vkd2ljJ10gPSAnRU5EU19XSVRIX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2NudHNpYyddID0gJ0NPTlRBSU5TX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ25jbnRzJ10gPSAnTk9UX0NPTlRBSU5TJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ25jbnRzaWMnXSA9ICdOT1RfQ09OVEFJTlNfSUdOT1JFX0NBU0UnO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IHNvcnRWYWx1ZSA9IHRoaXMuc29ydE9wZXJhdG9ycyhvcGVyYXRvckxpc3QpO1xyXG4gIC8vICAgaWYoZGF0YVR5ZSA9PSAnbGlzdCcpe1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3RUb0xpc3RPZlN0cmluZyhzb3J0VmFsdWUpO1xyXG4gIC8vICAgfWVsc2V7XHJcbiAgLy8gICAgIHJldHVybiBzb3J0VmFsdWU7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZXRPcGVyYXRvcnModHlwZTogT3BlcmF0b3JUeXBlLG5hbWU6c3RyaW5nKXtcclxuICAgIHJldHVybiBPcGVyYXRvci5nZXRPcGVyYXRvcnModHlwZSxuYW1lKTtcclxuICB9XHJcblxyXG4gIHNvcnRPcGVyYXRvcnMob3BlcmF0b3JMaXN0OmFueSl7XHJcbiAgICBjb25zdCBzb3J0ZWRLZXlzID0gT2JqZWN0LmtleXMob3BlcmF0b3JMaXN0KS5zb3J0KCk7XHJcbiAgICAgY29uc3Qgc29ydGVkT3BlcmF0b3JMaXN0OmFueSA9IHt9O1xyXG4gICAgIHNvcnRlZEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICBzb3J0ZWRPcGVyYXRvckxpc3Rba2V5XSA9IG9wZXJhdG9yTGlzdFtrZXldO1xyXG4gICAgIH0pO1xyXG5cclxuICAgICByZXR1cm4gc29ydGVkT3BlcmF0b3JMaXN0O1xyXG4gIH1cclxuICBtYXBPYmplY3RUb0xpc3RPZlN0cmluZyhtYXBPYmplY3Q6YW55KXtcclxuICAgIGxldCBMaXN0OmFueSA9IFtdO1xyXG4gICAgaWYobWFwT2JqZWN0ICYmIE9iamVjdC5rZXlzKG1hcE9iamVjdCkubGVuZ3RoID4gMCl7XHJcbiAgICAgIE9iamVjdC5rZXlzKG1hcE9iamVjdCkuZm9yRWFjaCgoa2V5KT0+e1xyXG4gICAgICAgIExpc3QucHVzaChtYXBPYmplY3Rba2V5XSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gTGlzdDtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,202 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../data-share/data-share.service";
4
+ export class CustomvalidationService {
5
+ constructor(dataShareService) {
6
+ this.dataShareService = dataShareService;
7
+ }
8
+ patternValidator() {
9
+ return (control) => {
10
+ if (!control.value) {
11
+ return null;
12
+ }
13
+ const regex = new RegExp('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[~!@#$%^&*?.=()-+])(?=.*?[0-9]).{8,}$');
14
+ let valid = regex.test(control.value);
15
+ let msg = "Minimum 8 characters";
16
+ if (!valid) {
17
+ //let checkNo = new RegExp('^(?=.*?[0-9])$').test(control.value);
18
+ if (!new RegExp('[0-9]').test(control.value)) {
19
+ msg = "At least one number";
20
+ }
21
+ else if (!new RegExp('[A-Z]').test(control.value)) {
22
+ msg = "At least one uppercase letter";
23
+ }
24
+ else if (!new RegExp('[~!@#$%^&*?.=()-+]').test(control.value)) {
25
+ msg = "At least one special character";
26
+ }
27
+ else if (!new RegExp('[a-z]').test(control.value)) {
28
+ msg = "At least one lowercase letter";
29
+ }
30
+ else {
31
+ msg = "Minimum 8 characters";
32
+ }
33
+ }
34
+ else if (this.checkCommonPassword(control.value)) {
35
+ valid = false;
36
+ msg = "Common Passwords are not allowed";
37
+ }
38
+ return valid ? null : { invalidPassword: msg };
39
+ };
40
+ }
41
+ checkCommonPassword(value) {
42
+ let check = false;
43
+ let commonPasswordList = ['Test@123', 'Test@12345'];
44
+ for (let index = 0; index < commonPasswordList.length; index++) {
45
+ const element = commonPasswordList[index];
46
+ if (element === value) {
47
+ check = true;
48
+ break;
49
+ }
50
+ }
51
+ return check;
52
+ }
53
+ checkDates(endDate, startDate) {
54
+ return (formGroup) => {
55
+ const startDateControl = formGroup.controls[startDate];
56
+ const endDateControl = formGroup.controls[endDate];
57
+ const date1 = new Date(startDateControl.value);
58
+ const date2 = new Date(endDateControl.value);
59
+ if (date1 > date2) {
60
+ endDateControl.setErrors({ notValid: true });
61
+ }
62
+ else {
63
+ endDateControl.setErrors(null);
64
+ }
65
+ };
66
+ }
67
+ MatchPassword(password, confirmPassword) {
68
+ return (formGroup) => {
69
+ const passwordControl = formGroup.controls[password];
70
+ const confirmPasswordControl = formGroup.controls[confirmPassword];
71
+ if (!passwordControl || !confirmPasswordControl) {
72
+ return null;
73
+ }
74
+ if (confirmPasswordControl.errors && !confirmPasswordControl.errors.passwordMismatch) {
75
+ return null;
76
+ }
77
+ if (passwordControl.value !== confirmPasswordControl.value) {
78
+ confirmPasswordControl.setErrors({ passwordMismatch: true });
79
+ }
80
+ else {
81
+ confirmPasswordControl.setErrors(null);
82
+ }
83
+ };
84
+ }
85
+ userNameValidator(userControl) {
86
+ return new Promise(resolve => {
87
+ setTimeout(() => {
88
+ if (this.validateUserName(userControl.value)) {
89
+ resolve({ userNameNotAvailable: true });
90
+ }
91
+ else {
92
+ resolve(null);
93
+ }
94
+ }, 1000);
95
+ });
96
+ }
97
+ validateUserName(userName) {
98
+ const UserList = ['ankit', 'admin', 'user', 'superuser'];
99
+ return (UserList.indexOf(userName) > -1);
100
+ }
101
+ checkLimit(min, max) {
102
+ return (c) => {
103
+ if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {
104
+ return { 'range': true };
105
+ }
106
+ return null;
107
+ };
108
+ }
109
+ isValidGSTNumber(control) {
110
+ return new Promise((resolve) => {
111
+ setTimeout(() => {
112
+ let gstin = control.value;
113
+ if (gstin == "" || gstin == null || gstin == undefined || (gstin.length == 2 && gstin.toUpperCase() == "NA")) {
114
+ resolve(null);
115
+ }
116
+ if (gstin != null && gstin.length !== 15) {
117
+ resolve({ invalidGSTNumber: true });
118
+ }
119
+ if (this.validatePattern(gstin)) {
120
+ const check = gstin[14];
121
+ const checkCondition = check === this.calcCheckSum(gstin.toUpperCase());
122
+ if (checkCondition) {
123
+ resolve(null);
124
+ const object = {
125
+ "name": "gst_number",
126
+ "value": control.value
127
+ };
128
+ this.dataShareService.setValidationCondition(object);
129
+ }
130
+ else {
131
+ resolve({ invalidGSTNumber: true });
132
+ const object = {
133
+ "name": "invalid"
134
+ };
135
+ this.dataShareService.setValidationCondition(object);
136
+ }
137
+ }
138
+ resolve({ invalidGSTNumber: true });
139
+ const object = {
140
+ "name": "invalid"
141
+ };
142
+ this.dataShareService.setValidationCondition(object);
143
+ }, 1000);
144
+ });
145
+ }
146
+ calcCheckSum(gstin) {
147
+ var GSTN_CODEPOINT_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
148
+ var factor = 2;
149
+ var sum = 0;
150
+ var checkCodePoint = 0;
151
+ var mod = GSTN_CODEPOINT_CHARS.length;
152
+ var i;
153
+ for (i = gstin.length - 2; i >= 0; i--) {
154
+ var codePoint = -1;
155
+ for (var j = 0; j < GSTN_CODEPOINT_CHARS.length; j++) {
156
+ if (GSTN_CODEPOINT_CHARS[j] === gstin[i]) {
157
+ codePoint = j;
158
+ }
159
+ }
160
+ var digit = factor * codePoint;
161
+ factor = factor === 2 ? 1 : 2;
162
+ digit = Math.floor(digit / mod) + (digit % mod);
163
+ sum += digit;
164
+ }
165
+ checkCodePoint = (mod - (sum % mod)) % mod;
166
+ return GSTN_CODEPOINT_CHARS[checkCodePoint];
167
+ }
168
+ // GSTIN Regex validation result
169
+ validatePattern(gstin) {
170
+ // eslint-disable-next-line max-len
171
+ // var gstinRegexPattern = /^([0-2][0-9]|[3][0-8])[A-Z]{3}[ABCFGHLJPTK][A-Z]\d{4}[A-Z][A-Z0-9][Z][A-Z0-9]$/;
172
+ const regex = new RegExp('^[0-9]{2}[A-Z]{4}[A-Z0-9]{1}[0-9]{4}[A-Z]{1}[1-9]{1}[A-Z]{1}[A-Z0-9]{1}$');
173
+ const valid = regex.test(gstin);
174
+ return valid;
175
+ //return gstinRegexPattern.test(gstin);
176
+ }
177
+ isValidData(control) {
178
+ return new Promise(resolve => {
179
+ setTimeout(() => {
180
+ let data = control.value;
181
+ if (data == "" || data == null || data == undefined) {
182
+ resolve(null);
183
+ }
184
+ else if (typeof data == 'object') {
185
+ resolve(null);
186
+ }
187
+ else {
188
+ resolve({ invaliData: true });
189
+ }
190
+ }, 1000);
191
+ });
192
+ }
193
+ }
194
+ CustomvalidationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, deps: [{ token: i1.DataShareService }], target: i0.ɵɵFactoryTarget.Injectable });
195
+ CustomvalidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, providedIn: 'root' });
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, decorators: [{
197
+ type: Injectable,
198
+ args: [{
199
+ providedIn: 'root'
200
+ }]
201
+ }], ctorParameters: function () { return [{ type: i1.DataShareService }]; } });
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tdmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jdXN0b212YWxpZGF0aW9uL2N1c3RvbXZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUNVLGdCQUFpQztRQUFqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO0lBQ3ZDLENBQUM7SUFFTCxnQkFBZ0I7UUFDZCxPQUFPLENBQUMsT0FBd0IsRUFBMEIsRUFBRTtZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsT0FBTyxJQUFLLENBQUM7YUFDZDtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDakcsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUM7WUFDakMsSUFBRyxDQUFDLEtBQUssRUFBQztnQkFDUixpRUFBaUU7Z0JBQ2pFLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUMxQyxHQUFHLEdBQUcscUJBQXFCLENBQUM7aUJBQzdCO3FCQUFLLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUNoRCxHQUFHLEdBQUcsK0JBQStCLENBQUM7aUJBQ3ZDO3FCQUFLLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxvQkFBb0Is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dUJBQXVCLGNBRnRCLE1BQU07NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVNoYXJlU2VydmljZSB9IGZyb20gJy4uL2RhdGEtc2hhcmUvZGF0YS1zaGFyZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRhdGFTaGFyZVNlcnZpY2U6RGF0YVNoYXJlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHBhdHRlcm5WYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGwhO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXig/PS4qP1tBLVpdKSg/PS4qP1thLXpdKSg/PS4qP1t+IUAjJCVeJio/Lj0oKS0rXSkoPz0uKj9bMC05XSkuezgsfSQnKTtcclxuICAgICAgbGV0IHZhbGlkID0gcmVnZXgudGVzdChjb250cm9sLnZhbHVlKTtcclxuICAgICAgbGV0IG1zZyA9IFwiTWluaW11bSA4IGNoYXJhY3RlcnNcIjtcclxuICAgICAgaWYoIXZhbGlkKXtcclxuICAgICAgICAvL2xldCBjaGVja05vID0gbmV3IFJlZ0V4cCgnXig/PS4qP1swLTldKSQnKS50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGlmKCFuZXcgUmVnRXhwKCdbMC05XScpLnRlc3QoY29udHJvbC52YWx1ZSkpe1xyXG4gICAgICAgICAgbXNnID0gXCJBdCBsZWFzdCBvbmUgbnVtYmVyXCI7XHJcbiAgICAgICAgfWVsc2UgaWYoIW5ldyBSZWdFeHAoJ1tBLVpdJykudGVzdChjb250cm9sLnZhbHVlKSl7XHJcbiAgICAgICAgICBtc2cgPSBcIkF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyXCI7XHJcbiAgICAgICAgfWVsc2UgaWYoIW5ldyBSZWdFeHAoJ1t+IUAjJCVeJio/Lj0oKS0rXScpLnRlc3QoY29udHJvbC52YWx1ZSkpe1xyXG4gICAgICAgICAgbXNnID0gXCJBdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXJcIjtcclxuICAgICAgICB9ZWxzZSBpZighbmV3IFJlZ0V4cCgnW2Etel0nKS50ZXN0KGNvbnRyb2wudmFsdWUpKXtcclxuICAgICAgICAgIG1zZyA9IFwiQXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBsZXR0ZXJcIjtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIG1zZyA9IFwiTWluaW11bSA4IGNoYXJhY3RlcnNcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuY2hlY2tDb21tb25QYXNzd29yZChjb250cm9sLnZhbHVlKSl7XHJcbiAgICAgICAgdmFsaWQgPSBmYWxzZVxyXG4gICAgICAgIG1zZyA9IFwiQ29tbW9uIFBhc3N3b3JkcyBhcmUgbm90IGFsbG93ZWRcIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsaWQgPyBudWxsISA6IHsgaW52YWxpZFBhc3N3b3JkOiBtc2cgfTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGNoZWNrQ29tbW9uUGFzc3dvcmQodmFsdWU6c3RyaW5nKXtcclxuICAgIGxldCBjaGVjayA9IGZhbHNlO1xyXG4gICAgbGV0IGNvbW1vblBhc3N3b3JkTGlzdCA9IFsnVGVzdEAxMjMnLCdUZXN0QDEyMzQ1J107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29tbW9uUGFzc3dvcmRMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gY29tbW9uUGFzc3dvcmRMaXN0W2luZGV4XTtcclxuICAgICAgaWYoZWxlbWVudCA9PT0gdmFsdWUpe1xyXG4gICAgICAgIGNoZWNrID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoZWNrO1xyXG4gIH1cclxuICBjaGVja0RhdGVzKGVuZERhdGU6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbc3RhcnREYXRlXTtcclxuICAgICAgY29uc3QgZW5kRGF0ZUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZW5kRGF0ZV07XHJcbiAgICAgIGNvbnN0IGRhdGUxID1uZXcgRGF0ZShzdGFydERhdGVDb250cm9sLnZhbHVlKTtcclxuICAgICAgY29uc3QgZGF0ZTIgPW5ldyBEYXRlKGVuZERhdGVDb250cm9sLnZhbHVlKTtcclxuICAgICAgaWYoZGF0ZTEgPiBkYXRlMikge1xyXG4gICAgICAgIGVuZERhdGVDb250cm9sLnNldEVycm9ycyh7IG5vdFZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBlbmREYXRlQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuIH1cclxuXHJcbiAgTWF0Y2hQYXNzd29yZChwYXNzd29yZDogYW55LCBjb25maXJtUGFzc3dvcmQ6IGFueSkge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOmFueSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhc3N3b3JkQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1twYXNzd29yZF07XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbY29uZmlybVBhc3N3b3JkXTtcclxuXHJcbiAgICAgIGlmICghcGFzc3dvcmRDb250cm9sIHx8ICFjb25maXJtUGFzc3dvcmRDb250cm9sKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maXJtUGFzc3dvcmRDb250cm9sLmVycm9ycyAmJiAhY29uZmlybVBhc3N3b3JkQ29udHJvbC5lcnJvcnMucGFzc3dvcmRNaXNtYXRjaCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFzc3dvcmRDb250cm9sLnZhbHVlICE9PSBjb25maXJtUGFzc3dvcmRDb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgY29uZmlybVBhc3N3b3JkQ29udHJvbC5zZXRFcnJvcnMoeyBwYXNzd29yZE1pc21hdGNoOiB0cnVlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1c2VyTmFtZVZhbGlkYXRvcih1c2VyQ29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlVXNlck5hbWUodXNlckNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHsgdXNlck5hbWVOb3RBdmFpbGFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVVc2VyTmFtZSh1c2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBVc2VyTGlzdCA9IFsnYW5raXQnLCAnYWRtaW4nLCAndXNlcicsICdzdXBlcnVzZXInXTtcclxuICAgIHJldHVybiAoVXNlckxpc3QuaW5kZXhPZih1c2VyTmFtZSkgPiAtMSk7XHJcbiAgfVxyXG4gIGNoZWNrTGltaXQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICAgIGlmIChjLnZhbHVlICYmIChpc05hTihjLnZhbHVlKSB8fCBjLnZhbHVlIDwgbWluIHx8IGMudmFsdWUgPiBtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICdyYW5nZSc6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuICBpc1ZhbGlkR1NUTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGxldCBnc3RpbiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAoZ3N0aW4gPT0gXCJcIiB8fCBnc3RpbiA9PSBudWxsIHx8IGdzdGluID09IHVuZGVmaW5lZCB8fCAoZ3N0aW4ubGVuZ3RoID09IDIgJiYgZ3N0aW4udG9VcHBlckNhc2UoKSA9PSBcIk5BXCIpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoIG51bGwgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChnc3RpbiAhPSBudWxsICYmIGdzdGluLmxlbmd0aCAhPT0gMTUpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGludmFsaWRHU1ROdW1iZXI6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVBhdHRlcm4oZ3N0aW4pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gZ3N0aW5bMTRdO1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja0NvbmRpdGlvbiA9IGNoZWNrID09PSB0aGlzLmNhbGNDaGVja1N1bShnc3Rpbi50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgICAgICBpZihjaGVja0NvbmRpdGlvbil7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IFwiZ3N0X251bWJlclwiLFxyXG4gICAgICAgICAgICAgICAgXCJ2YWx1ZVwiIDogY29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmRhdGFTaGFyZVNlcnZpY2Uuc2V0VmFsaWRhdGlvbkNvbmRpdGlvbihvYmplY3QpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICByZXNvbHZlKHsgaW52YWxpZEdTVE51bWJlcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IFwiaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNoYXJlU2VydmljZS5zZXRWYWxpZGF0aW9uQ29uZGl0aW9uKG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUoeyBpbnZhbGlkR1NUTnVtYmVyOiB0cnVlIH0pO1xyXG4gICAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICBcIm5hbWVcIiA6IFwiaW52YWxpZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhdGFTaGFyZVNlcnZpY2Uuc2V0VmFsaWRhdGlvbkNvbmRpdGlvbihvYmplY3QpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgY2FsY0NoZWNrU3VtKGdzdGluOmFueSkge1xyXG4gICAgdmFyIEdTVE5fQ09ERVBPSU5UX0NIQVJTID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XHJcbiAgICB2YXIgZmFjdG9yID0gMjtcclxuICAgIHZhciBzdW0gPSAwO1xyXG4gICAgdmFyIGNoZWNrQ29kZVBvaW50ID0gMDtcclxuICAgIHZhciBtb2QgPSBHU1ROX0NPREVQT0lOVF9DSEFSUy5sZW5ndGg7XHJcbiAgICB2YXIgaTtcclxuXHJcbiAgICBmb3IgKGkgPSBnc3Rpbi5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICB2YXIgY29kZVBvaW50ID0gLTE7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgR1NUTl9DT0RFUE9JTlRfQ0hBUlMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoR1NUTl9DT0RFUE9JTlRfQ0hBUlNbal0gPT09IGdzdGluW2ldKSB7XHJcbiAgICAgICAgICBjb2RlUG9pbnQgPSBqO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgZGlnaXQgPSBmYWN0b3IgKiBjb2RlUG9pbnQ7XHJcbiAgICAgIGZhY3RvciA9IGZhY3RvciA9PT0gMiA/IDEgOiAyO1xyXG4gICAgICBkaWdpdCA9IE1hdGguZmxvb3IoZGlnaXQgLyBtb2QpICsgKGRpZ2l0ICUgbW9kKTtcclxuICAgICAgc3VtICs9IGRpZ2l0O1xyXG4gICAgfVxyXG4gICAgY2hlY2tDb2RlUG9pbnQgPSAobW9kIC0gKHN1bSAlIG1vZCkpICUgbW9kO1xyXG4gICAgcmV0dXJuIEdTVE5fQ09ERVBPSU5UX0NIQVJTW2NoZWNrQ29kZVBvaW50XTtcclxuICB9XHJcblxyXG4gIC8vIEdTVElOIFJlZ2V4IHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgdmFsaWRhdGVQYXR0ZXJuKGdzdGluOmFueSkge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuICAgIC8vIHZhciBnc3RpblJlZ2V4UGF0dGVybiA9IC9eKFswLTJdWzAtOV18WzNdWzAtOF0pW0EtWl17M31bQUJDRkdITEpQVEtdW0EtWl1cXGR7NH1bQS1aXVtBLVowLTldW1pdW0EtWjAtOV0kLztcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlswLTldezJ9W0EtWl17NH1bQS1aMC05XXsxfVswLTldezR9W0EtWl17MX1bMS05XXsxfVtBLVpdezF9W0EtWjAtOV17MX0kJyk7XHJcbiAgICBjb25zdCB2YWxpZCA9IHJlZ2V4LnRlc3QoZ3N0aW4pO1xyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgLy9yZXR1cm4gZ3N0aW5SZWdleFBhdHRlcm4udGVzdChnc3Rpbik7XHJcbiAgfVxyXG4gIGlzVmFsaWREYXRhKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAoZGF0YSA9PSBcIlwiIHx8IGRhdGEgPT0gbnVsbCB8fCBkYXRhID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCBudWxsICk7XHJcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgZGF0YSA9PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGludmFsaURhdGE6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,70 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class AuthDataShareService {
5
+ constructor() {
6
+ this.signinResponse = new Subject();
7
+ this.authenticated = new BehaviorSubject(false);
8
+ this.forgot = new Subject();
9
+ this.settingData = new Subject();
10
+ this.signUpResponse = new Subject();
11
+ this.otpResponse = new Subject();
12
+ this.OtpAutoLoginData = {};
13
+ this.createPwd = new Subject();
14
+ this.userInfo = new Subject();
15
+ this.sessionexpired = new Subject();
16
+ this.resetPass = new Subject();
17
+ this.authResponce = new Subject();
18
+ }
19
+ setSigninResponse(responce) {
20
+ this.signinResponse.next(responce);
21
+ }
22
+ setAuthentication(responce) {
23
+ this.authenticated.next(responce);
24
+ }
25
+ getAuthentication() {
26
+ return this.authenticated;
27
+ }
28
+ setForgot(responce) {
29
+ this.forgot.next(responce);
30
+ }
31
+ restSettingModule(value) {
32
+ this.settingData.next(value);
33
+ }
34
+ setSignUpResponse(response) {
35
+ this.signUpResponse.next(response);
36
+ }
37
+ setOtpResponse(response) {
38
+ this.otpResponse.next(response);
39
+ }
40
+ setOtpAutoLogin(response) {
41
+ this.OtpAutoLoginData = response;
42
+ }
43
+ getOtpAutoLogin() {
44
+ return this.OtpAutoLoginData;
45
+ }
46
+ setChangePwd(responce) {
47
+ this.createPwd.next(responce);
48
+ }
49
+ setUserInfo(responce) {
50
+ this.userInfo.next(responce);
51
+ }
52
+ setSessionExpired(responce) {
53
+ this.sessionexpired.next(responce);
54
+ }
55
+ resetPassword(responce) {
56
+ this.resetPass.next(responce);
57
+ }
58
+ setAuthenticationResponce(responce) {
59
+ this.authResponce.next(responce);
60
+ }
61
+ }
62
+ AuthDataShareService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
63
+ AuthDataShareService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, providedIn: 'root' });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, decorators: [{
65
+ type: Injectable,
66
+ args: [{
67
+ providedIn: 'root'
68
+ }]
69
+ }], ctorParameters: function () { return []; } });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1kYXRhLXNoYXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2RhdGEtc2hhcmUvYXV0aC1kYXRhLXNoYXJlL2F1dGgtZGF0YS1zaGFyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUtoRCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQjtRQWRBLG1CQUFjLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBb0IsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckUsV0FBTSxHQUFnQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3pDLGdCQUFXLEdBQWdCLElBQUksT0FBTyxFQUFPLENBQUM7UUFDOUMsbUJBQWMsR0FBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFPLEVBQUUsQ0FBQTtRQUN6QixjQUFTLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkMsYUFBUSxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLG1CQUFjLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsY0FBUyxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7SUFHMUIsQ0FBQztJQUVqQixpQkFBaUIsQ0FBQyxRQUFZO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxTQUFTLENBQUMsUUFBWTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBUztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBWTtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLFFBQVk7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxRQUFZO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUE7SUFDbEMsQ0FBQztJQUNELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBQ0QsWUFBWSxDQUFDLFFBQVk7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFZO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFZO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxhQUFhLENBQUMsUUFBWTtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QseUJBQXlCLENBQUMsUUFBWTtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDOztrSEEzRFUsb0JBQW9CO3NIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aERhdGFTaGFyZVNlcnZpY2Uge1xyXG5cclxuICBzaWduaW5SZXNwb25zZTpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGF1dGhlbnRpY2F0ZWQ6U3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGZvcmdvdDpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgc2V0dGluZ0RhdGE6U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHNpZ25VcFJlc3BvbnNlOlN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgb3RwUmVzcG9uc2U6U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBPdHBBdXRvTG9naW5EYXRhOmFueSA9IHt9XHJcbiAgY3JlYXRlUHdkOlN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgdXNlckluZm86U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBzZXNzaW9uZXhwaXJlZDpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHJlc2V0UGFzczpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGF1dGhSZXNwb25jZTpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgc2V0U2lnbmluUmVzcG9uc2UocmVzcG9uY2U6YW55KXtcclxuICAgIHRoaXMuc2lnbmluUmVzcG9uc2UubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG4gIHNldEF1dGhlbnRpY2F0aW9uKHJlc3BvbmNlOmJvb2xlYW4pe1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkLm5leHQocmVzcG9uY2UpO1xyXG4gIH1cclxuICBnZXRBdXRoZW50aWNhdGlvbigpe1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZDtcclxuICB9XHJcbiAgc2V0Rm9yZ290KHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLmZvcmdvdC5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgcmVzdFNldHRpbmdNb2R1bGUodmFsdWU6YW55KXtcclxuICAgIHRoaXMuc2V0dGluZ0RhdGEubmV4dCh2YWx1ZSlcclxuICB9XHJcbiAgc2V0U2lnblVwUmVzcG9uc2UocmVzcG9uc2U6YW55KXtcclxuICAgIHRoaXMuc2lnblVwUmVzcG9uc2UubmV4dChyZXNwb25zZSk7XHJcbiAgfVxyXG4gIHNldE90cFJlc3BvbnNlKHJlc3BvbnNlOmFueSl7XHJcbiAgICB0aGlzLm90cFJlc3BvbnNlLm5leHQocmVzcG9uc2UpO1xyXG4gIH1cclxuICBzZXRPdHBBdXRvTG9naW4ocmVzcG9uc2U6YW55KXtcclxuICAgIHRoaXMuT3RwQXV0b0xvZ2luRGF0YSA9IHJlc3BvbnNlXHJcbiAgfVxyXG4gIGdldE90cEF1dG9Mb2dpbigpe1xyXG4gICAgcmV0dXJuIHRoaXMuT3RwQXV0b0xvZ2luRGF0YTtcclxuICB9XHJcbiAgc2V0Q2hhbmdlUHdkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLmNyZWF0ZVB3ZC5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgc2V0VXNlckluZm8ocmVzcG9uY2U6YW55KXtcclxuICAgIHRoaXMudXNlckluZm8ubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG4gIHNldFNlc3Npb25FeHBpcmVkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLnNlc3Npb25leHBpcmVkLm5leHQocmVzcG9uY2UpO1xyXG4gIH1cclxuICByZXNldFBhc3N3b3JkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLnJlc2V0UGFzcy5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgc2V0QXV0aGVudGljYXRpb25SZXNwb25jZShyZXNwb25jZTphbnkpe1xyXG4gICAgdGhpcy5hdXRoUmVzcG9uY2UubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=