jconsumer-shared 0.0.2 → 0.0.3

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 (67) hide show
  1. package/esm2022/lib/account-service.mjs +21 -0
  2. package/esm2022/lib/auth-service.mjs +155 -0
  3. package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
  4. package/esm2022/lib/common.service.mjs +38 -0
  5. package/esm2022/lib/error-message.service.mjs +22 -0
  6. package/esm2022/lib/file-service.mjs +229 -0
  7. package/esm2022/lib/group-storage.service.mjs +66 -0
  8. package/esm2022/lib/i8n.module.mjs +43 -0
  9. package/esm2022/lib/local-storage.service.mjs +77 -0
  10. package/esm2022/lib/phone-input/phone-input.component.mjs +127 -0
  11. package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
  12. package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
  13. package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
  14. package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
  15. package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
  16. package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
  17. package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
  18. package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
  19. package/esm2022/lib/project-messages.mjs +146 -0
  20. package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1422 -0
  21. package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +77 -0
  22. package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
  23. package/esm2022/lib/session-storage.service.mjs +57 -0
  24. package/esm2022/lib/shared.service.mjs +24 -2
  25. package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
  26. package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
  27. package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
  28. package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
  29. package/esm2022/lib/storage.service.mjs +75 -0
  30. package/esm2022/lib/word-processor.service.mjs +181 -0
  31. package/esm2022/public-api.mjs +27 -1
  32. package/fesm2022/jconsumer-shared.mjs +3522 -26
  33. package/fesm2022/jconsumer-shared.mjs.map +1 -1
  34. package/jconsumer-shared-0.0.3.tgz +0 -0
  35. package/lib/account-service.d.ts +9 -0
  36. package/lib/auth-service.d.ts +43 -0
  37. package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
  38. package/lib/common.service.d.ts +9 -0
  39. package/lib/error-message.service.d.ts +5 -0
  40. package/lib/file-service.d.ts +26 -0
  41. package/lib/group-storage.service.d.ts +14 -0
  42. package/lib/i8n.module.d.ts +12 -0
  43. package/lib/local-storage.service.d.ts +34 -0
  44. package/lib/phone-input/phone-input.component.d.ts +25 -0
  45. package/lib/phone-input/phone-input.module.d.ts +9 -0
  46. package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
  47. package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
  48. package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
  49. package/lib/pipes/filter/filter.pipe.d.ts +7 -0
  50. package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
  51. package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
  52. package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
  53. package/lib/project-messages.d.ts +1 -0
  54. package/lib/questionaire/edit/questionnaire.component.d.ts +151 -0
  55. package/lib/questionaire/edit/questionnaire.module.d.ts +19 -0
  56. package/lib/questionaire/questionaire-service.d.ts +28 -0
  57. package/lib/session-storage.service.d.ts +26 -0
  58. package/lib/shared.service.d.ts +12 -3
  59. package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
  60. package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
  61. package/lib/spinner/loading-spinner.component.d.ts +11 -0
  62. package/lib/spinner/loading-spinner.module.d.ts +9 -0
  63. package/lib/storage.service.d.ts +16 -0
  64. package/lib/word-processor.service.d.ts +80 -0
  65. package/package.json +1 -1
  66. package/public-api.d.ts +26 -0
  67. package/jconsumer-shared-0.0.2.tgz +0 -0
@@ -0,0 +1,448 @@
1
+ import { Injectable } from "@angular/core";
2
+ import moment from 'moment';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../service-meta";
5
+ /**
6
+ * Class which handles date/time related functions
7
+ */
8
+ export class DateTimeProcessor {
9
+ servicemeta;
10
+ REGION_LANGUAGE = "en-US";
11
+ TIME_ZONE_REGION = "Asia/Kolkata";
12
+ myweekdaysSchedule = [
13
+ "",
14
+ "Sun",
15
+ "Mon",
16
+ "Tue",
17
+ "Wed",
18
+ "Thu",
19
+ "Fri",
20
+ "Sat"
21
+ ];
22
+ constructor(servicemeta) {
23
+ this.servicemeta = servicemeta;
24
+ }
25
+ /**
26
+ *
27
+ * @param date1
28
+ * @param date2
29
+ * @returns difference between the two dates
30
+ */
31
+ getdaysdifffromDates(date1, date2) {
32
+ let firstdate;
33
+ let seconddate;
34
+ if (date1 === 'now') {
35
+ firstdate = new Date();
36
+ }
37
+ else {
38
+ firstdate = new Date(date1);
39
+ }
40
+ seconddate = new Date(date2);
41
+ const hours = Math.abs(firstdate.getTime() - seconddate.getTime()) / 36e5; // 36e5 is the scientific notation for 60*60*1000
42
+ return { 'hours': hours };
43
+ }
44
+ /**
45
+ *
46
+ * @param time
47
+ * @returns
48
+ */
49
+ getTimeAsNumberOfMinutes(time) {
50
+ const timeParts = time.split(':');
51
+ const timeInMinutes = (parseInt(timeParts[0], 10) * 60) + parseInt(timeParts[1], 10);
52
+ return timeInMinutes;
53
+ }
54
+ /**
55
+ * convert year-month-day to day-monthname-year
56
+ * @param psdate
57
+ * @param params
58
+ * @returns
59
+ */
60
+ formatDate(psdate, params = []) {
61
+ const monthNames = {
62
+ '01': 'Jan',
63
+ '02': 'Feb',
64
+ '03': 'Mar',
65
+ '04': 'Apr',
66
+ '05': 'May',
67
+ '06': 'Jun',
68
+ '07': 'Jul',
69
+ '08': 'Aug',
70
+ '09': 'Sep',
71
+ '10': 'Oct',
72
+ '11': 'Nov',
73
+ '12': 'Dec'
74
+ };
75
+ const darr = psdate.split('-');
76
+ if (params['rettype'] === 'monthname') {
77
+ darr[1] = monthNames[darr[1]];
78
+ return darr[1] + ' ' + darr[2];
79
+ }
80
+ else if (params['rettype'] === 'fullarr') {
81
+ darr[1] = monthNames[darr[1]];
82
+ return darr;
83
+ }
84
+ else {
85
+ return darr[1] + ' ' + darr[2];
86
+ }
87
+ }
88
+ /**
89
+ *
90
+ * @param i
91
+ * @returns
92
+ */
93
+ addZero(i) {
94
+ if (i < 10) {
95
+ i = '0' + i;
96
+ }
97
+ return i;
98
+ }
99
+ /**
100
+ *
101
+ * @param time
102
+ * @param secreq
103
+ * @returns
104
+ */
105
+ convert24HourtoAmPm(time, secreq) {
106
+ const timesp = time.split(':');
107
+ let hr = parseInt(timesp[0], 10);
108
+ const min = parseInt(timesp[1], 10);
109
+ const sec = parseInt(timesp[2], 10);
110
+ let ampm = '';
111
+ let retstr = '';
112
+ if (hr >= 12) {
113
+ hr = hr - 12;
114
+ if (hr === 0) {
115
+ hr = 12;
116
+ ampm = 'PM';
117
+ }
118
+ else if (hr < 0) {
119
+ ampm = 'AM';
120
+ }
121
+ else {
122
+ ampm = 'PM';
123
+ }
124
+ }
125
+ else if (hr === 0) {
126
+ hr = 12;
127
+ ampm = 'AM';
128
+ }
129
+ else {
130
+ ampm = 'AM';
131
+ }
132
+ retstr = this.addZero(hr) + ':' + this.addZero(min);
133
+ if (secreq) {
134
+ retstr += ':' + sec;
135
+ }
136
+ retstr += ' ' + ampm;
137
+ return retstr;
138
+ }
139
+ /**
140
+ *
141
+ * @param mins
142
+ * @returns
143
+ */
144
+ providerConvertMinutesToHourMinute(mins) {
145
+ let rethr = '';
146
+ let retmin = '';
147
+ if (mins > 0) {
148
+ const hr = Math.floor(mins / 60);
149
+ const min = Math.floor(mins % 60);
150
+ if (hr > 0) {
151
+ if (hr > 1) {
152
+ rethr = hr + ' Hrs';
153
+ }
154
+ else {
155
+ rethr = hr + ' Hr';
156
+ }
157
+ }
158
+ if (min > 0) {
159
+ if (min > 1) {
160
+ retmin = ' ' + min + ' Mins';
161
+ }
162
+ else {
163
+ retmin = ' ' + min + ' Min';
164
+ }
165
+ }
166
+ }
167
+ else {
168
+ retmin = '' + 0 + ' Min';
169
+ }
170
+ return rethr + retmin;
171
+ }
172
+ /**
173
+ *
174
+ * @param mins
175
+ * @returns
176
+ */
177
+ convertMinutesToHourMinute(mins) {
178
+ let rethr = '';
179
+ let retmin = '';
180
+ if (mins > 0) {
181
+ const hr = Math.floor(mins / 60);
182
+ const min = Math.floor(mins % 60);
183
+ if (hr > 0) {
184
+ if (hr > 1) {
185
+ rethr = hr + ' hours';
186
+ }
187
+ else {
188
+ rethr = hr + ' hour';
189
+ }
190
+ }
191
+ if (min > 0) {
192
+ if (min > 1) {
193
+ retmin = ' ' + min + ' minutes';
194
+ }
195
+ else {
196
+ retmin = ' ' + min + ' minute';
197
+ }
198
+ }
199
+ }
200
+ else {
201
+ retmin = '' + 0 + ' minutes';
202
+ }
203
+ return rethr + retmin;
204
+ }
205
+ /**
206
+ *
207
+ * @param mins
208
+ * @returns
209
+ */
210
+ convertMinutesToHourMinuteForCheckin(mins) {
211
+ let rethr = '';
212
+ let retmin = '';
213
+ if (mins > 0) {
214
+ const hr = Math.floor(mins / 60);
215
+ const min = Math.floor(mins % 60);
216
+ if (hr > 0) {
217
+ if (hr > 1) {
218
+ rethr = hr + 'Hrs';
219
+ }
220
+ else {
221
+ rethr = hr + 'Hr';
222
+ }
223
+ }
224
+ if (min > 0) {
225
+ if (min > 1) {
226
+ retmin = ' ' + min + 'Mins';
227
+ }
228
+ else {
229
+ retmin = ' ' + min + 'Min';
230
+ }
231
+ }
232
+ }
233
+ else {
234
+ retmin = '' + 0 + 'Min';
235
+ }
236
+ return rethr + retmin;
237
+ }
238
+ /**
239
+ *
240
+ * @param time
241
+ * @returns
242
+ */
243
+ getDateFromTimeString(time) {
244
+ const startTime = new Date();
245
+ const parts = time.match(/(\d+):(\d+) (AM|PM)/);
246
+ if (parts) {
247
+ let hours = parseInt(parts[1], 0);
248
+ const minutes = parseInt(parts[2], 0);
249
+ const tt = parts[3];
250
+ if (tt === 'PM' && hours < 12) {
251
+ hours += 12;
252
+ }
253
+ startTime.setHours(hours, minutes, 0, 0);
254
+ }
255
+ return startTime;
256
+ }
257
+ /**
258
+ *
259
+ * @param dt
260
+ * @param mod
261
+ * @returns
262
+ */
263
+ stringtoDate(dt, mod) {
264
+ let dtsarr;
265
+ if (dt) {
266
+ dtsarr = dt.split(' ');
267
+ const dtarr = dtsarr[0].split('-');
268
+ let retval = '';
269
+ if (mod === 'all') {
270
+ retval = dtarr[2] + '/' + dtarr[1] + '/' + dtarr[0] + ' ' + dtsarr[1] + ' ' + dtsarr[2];
271
+ }
272
+ else if (mod === 'date') {
273
+ retval = dtarr[2] + '/' + dtarr[1] + '/' + dtarr[0];
274
+ }
275
+ else if (mod === 'time') {
276
+ retval = dtsarr[1] + ' ' + dtsarr[2];
277
+ }
278
+ return retval;
279
+ }
280
+ else {
281
+ return '';
282
+ }
283
+ }
284
+ /**
285
+ *
286
+ * @param date
287
+ * @returns
288
+ */
289
+ transformToYMDFormat(date) {
290
+ console.log("In transformToYMDFormat:", date);
291
+ const server = date.toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
292
+ const serverdate = moment(server).format();
293
+ const newdate = new Date(serverdate);
294
+ const dd = newdate.getDate();
295
+ const mm = newdate.getMonth() + 1;
296
+ const y = newdate.getFullYear();
297
+ const date1 = y + '-' + mm + '-' + dd;
298
+ return date1;
299
+ }
300
+ /**
301
+ *
302
+ * @param dateStr
303
+ * @returns
304
+ */
305
+ formatDateDisplay(dateStr) {
306
+ const pubDate = new Date(dateStr);
307
+ const obtshowdate = this.addZero(pubDate.getDate()) + '/' + this.addZero((pubDate.getMonth() + 1)) + '/' + pubDate.getFullYear();
308
+ return obtshowdate;
309
+ }
310
+ /**
311
+ *
312
+ * @returns
313
+ */
314
+ getMoment() {
315
+ return moment;
316
+ }
317
+ /**
318
+ *
319
+ * @param num
320
+ * @returns
321
+ */
322
+ getDay(num) {
323
+ return this.myweekdaysSchedule[num];
324
+ }
325
+ /**
326
+ * Convert Date to String in YYYYMMDD format
327
+ * @param inputDate input date
328
+ * @returns string
329
+ */
330
+ getStringFromDate_YYYYMMDD(inputDate) {
331
+ const today = new Date(inputDate);
332
+ const dd = today.getDate();
333
+ const mm = today.getMonth() + 1; // January is 0!
334
+ const yyyy = today.getFullYear();
335
+ let cday = '';
336
+ if (dd < 10) {
337
+ cday = '0' + dd;
338
+ }
339
+ else {
340
+ cday = '' + dd;
341
+ }
342
+ let cmon;
343
+ if (mm < 10) {
344
+ cmon = '0' + mm;
345
+ }
346
+ else {
347
+ cmon = '' + mm;
348
+ }
349
+ const dateString = yyyy + '-' + cmon + '-' + cday;
350
+ return dateString;
351
+ }
352
+ getLocaleDateFromServer(serverDate) {
353
+ return new Date(serverDate.split(' ')[0]).toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
354
+ }
355
+ getToday(serverDate) {
356
+ let today;
357
+ today = new Date(serverDate.split(' ')[0]).toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
358
+ today = new Date(today);
359
+ const dd = today.getDate();
360
+ const mm = today.getMonth() + 1; // January is 0!
361
+ const yyyy = today.getFullYear();
362
+ let cday = '';
363
+ if (dd < 10) {
364
+ cday = '0' + dd;
365
+ }
366
+ else {
367
+ cday = '' + dd;
368
+ }
369
+ let cmon;
370
+ if (mm < 10) {
371
+ cmon = '0' + mm;
372
+ }
373
+ else {
374
+ cmon = '' + mm;
375
+ }
376
+ const dtoday = yyyy + '-' + cmon + '-' + cday;
377
+ return dtoday;
378
+ }
379
+ isFutureDate(serverDate, appmtDate) {
380
+ let today;
381
+ today = this.getToday(serverDate);
382
+ const dt0 = today.toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
383
+ const dt2 = moment(dt0, 'YYYY-MM-DD HH:mm').format();
384
+ const date2 = new Date(dt2);
385
+ const dte0 = appmtDate.toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
386
+ const dte2 = moment(dte0, 'YYYY-MM-DD HH:mm').format();
387
+ const datee2 = new Date(dte2);
388
+ if (datee2.getTime() !== date2.getTime()) { // this is to decide whether future date selection is to be displayed. This is displayed if the sel_checkindate is a future date
389
+ return true;
390
+ }
391
+ else {
392
+ return false;
393
+ }
394
+ }
395
+ getMomentDate(pdate) {
396
+ return moment(pdate, 'YYYY-MM-DD HH:mm').format();
397
+ }
398
+ /**
399
+ *
400
+ * @param date
401
+ * @returns
402
+ */
403
+ transformToMMDDYYYY_(date) {
404
+ const server = date.toLocaleString(this.REGION_LANGUAGE, { timeZone: this.TIME_ZONE_REGION });
405
+ const serverdate = moment(server).format();
406
+ const newdate = new Date(serverdate);
407
+ const dd = newdate.getDate();
408
+ const mm = newdate.getMonth() + 1;
409
+ const y = newdate.getFullYear();
410
+ const date1 = mm + '/' + dd + '/' + y;
411
+ return date1;
412
+ }
413
+ getCurrentUTCdatetimestring() {
414
+ const curdate = new Date();
415
+ const cdate = new Date(Date.UTC(curdate.getUTCFullYear(), curdate.getUTCMonth(), curdate.getUTCDate(), curdate.getUTCHours(), curdate.getUTCMinutes(), curdate.getUTCSeconds(), curdate.getUTCMilliseconds()));
416
+ return cdate.toISOString();
417
+ }
418
+ getSystemDate() {
419
+ return this.servicemeta.httpGet('provider/server/date');
420
+ }
421
+ AMHourto24(date, time12) {
422
+ const time = time12;
423
+ let hours = Number(time.match(/^(\d+)/)[1]);
424
+ const minutes = Number(time.match(/:(\d+)/)[1]);
425
+ const AMPM = time.match(/\s(.*)$/)[1];
426
+ if (AMPM === 'PM' && hours < 12) {
427
+ hours = hours + 12;
428
+ }
429
+ if (AMPM === 'AM' && hours === 12) {
430
+ hours = hours - 12;
431
+ }
432
+ const sHours = hours;
433
+ const sMinutes = minutes;
434
+ const mom_date = moment(date);
435
+ mom_date.set('hour', sHours);
436
+ mom_date.set('minute', sMinutes);
437
+ return mom_date;
438
+ }
439
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DateTimeProcessor, deps: [{ token: i1.ServiceMeta }], target: i0.ɵɵFactoryTarget.Injectable });
440
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DateTimeProcessor, providedIn: 'root' });
441
+ }
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DateTimeProcessor, decorators: [{
443
+ type: Injectable,
444
+ args: [{
445
+ providedIn: 'root'
446
+ }]
447
+ }], ctorParameters: () => [{ type: i1.ServiceMeta }] });
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcHJvY2Vzc29yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvY2FsZW5kYXIvZGF0ZS10aW1lL2RhdGV0aW1lLXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7QUFPNUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBZVI7SUFicEIsZUFBZSxHQUFHLE9BQU8sQ0FBQztJQUMxQixnQkFBZ0IsR0FBRyxjQUFjLENBQUM7SUFDbEMsa0JBQWtCLEdBQUc7UUFDbkIsRUFBRTtRQUNGLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7S0FDTixDQUFDO0lBRUYsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRWpEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsS0FBVSxFQUFFLEtBQVU7UUFDekMsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFB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SUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzt1R0E5WlEsaUJBQWlCOzJHQUFqQixpQkFBaUIsY0FOaEIsTUFBTTs7MkZBTVAsaUJBQWlCO2tCQVA3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IFNlcnZpY2VNZXRhIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UtbWV0YVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5cclxuLyoqXHJcbiAqIENsYXNzIHdoaWNoIGhhbmRsZXMgZGF0ZS90aW1lIHJlbGF0ZWQgZnVuY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQcm9jZXNzb3Ige1xyXG5cclxuICBSRUdJT05fTEFOR1VBR0UgPSBcImVuLVVTXCI7XHJcbiAgVElNRV9aT05FX1JFR0lPTiA9IFwiQXNpYS9Lb2xrYXRhXCI7XHJcbiAgbXl3ZWVrZGF5c1NjaGVkdWxlID0gW1xyXG4gICAgXCJcIixcclxuICAgIFwiU3VuXCIsXHJcbiAgICBcIk1vblwiLFxyXG4gICAgXCJUdWVcIixcclxuICAgIFwiV2VkXCIsXHJcbiAgICBcIlRodVwiLFxyXG4gICAgXCJGcmlcIixcclxuICAgIFwiU2F0XCJcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2VtZXRhOiBTZXJ2aWNlTWV0YSkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBkYXRlMSBcclxuICAgKiBAcGFyYW0gZGF0ZTIgXHJcbiAgICogQHJldHVybnMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXNcclxuICAgKi9cclxuICBnZXRkYXlzZGlmZmZyb21EYXRlcyhkYXRlMTogYW55LCBkYXRlMjogYW55KSB7XHJcbiAgICBsZXQgZmlyc3RkYXRlO1xyXG4gICAgbGV0IHNlY29uZGRhdGU7XHJcbiAgICBpZiAoZGF0ZTEgPT09ICdub3cnKSB7XHJcbiAgICAgIGZpcnN0ZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaXJzdGRhdGUgPSBuZXcgRGF0ZShkYXRlMSk7XHJcbiAgICB9XHJcbiAgICBzZWNvbmRkYXRlID0gbmV3IERhdGUoZGF0ZTIpO1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmFicyhmaXJzdGRhdGUuZ2V0VGltZSgpIC0gc2Vjb25kZGF0ZS5nZXRUaW1lKCkpIC8gMzZlNTsgLy8gMzZlNSBpcyB0aGUgc2NpZW50aWZpYyBub3RhdGlvbiBmb3IgNjAqNjAqMTAwMFxyXG4gICAgcmV0dXJuIHsgJ2hvdXJzJzogaG91cnMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB0aW1lIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldFRpbWVBc051bWJlck9mTWludXRlcyh0aW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRpbWVQYXJ0cyA9IHRpbWUuc3BsaXQoJzonKTtcclxuICAgIGNvbnN0IHRpbWVJbk1pbnV0ZXMgPSAocGFyc2VJbnQodGltZVBhcnRzWzBdLCAxMCkgKiA2MCkgKyBwYXJzZUludCh0aW1lUGFydHNbMV0sIDEwKTtcclxuICAgIHJldHVybiB0aW1lSW5NaW51dGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBjb252ZXJ0IHllYXItbW9udGgtZGF5IHRvIGRheS1tb250aG5hbWUteWVhclxyXG4gICAqIEBwYXJhbSBwc2RhdGUgXHJcbiAgICogQHBhcmFtIHBhcmFtcyBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBmb3JtYXREYXRlKHBzZGF0ZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IFtdKSB7XHJcbiAgICBjb25zdCBtb250aE5hbWVzOiBhbnkgPSB7XHJcbiAgICAgICcwMSc6ICdKYW4nLFxyXG4gICAgICAnMDInOiAnRmViJyxcclxuICAgICAgJzAzJzogJ01hcicsXHJcbiAgICAgICcwNCc6ICdBcHInLFxyXG4gICAgICAnMDUnOiAnTWF5JyxcclxuICAgICAgJzA2JzogJ0p1bicsXHJcbiAgICAgICcwNyc6ICdKdWwnLFxyXG4gICAgICAnMDgnOiAnQXVnJyxcclxuICAgICAgJzA5JzogJ1NlcCcsXHJcbiAgICAgICcxMCc6ICdPY3QnLFxyXG4gICAgICAnMTEnOiAnTm92JyxcclxuICAgICAgJzEyJzogJ0RlYydcclxuICAgIH07XHJcbiAgICBjb25zdCBkYXJyID0gcHNkYXRlLnNwbGl0KCctJyk7XHJcbiAgICBpZiAocGFyYW1zWydyZXR0eXBlJ10gPT09ICdtb250aG5hbWUnKSB7XHJcbiAgICAgIGRhcnJbMV0gPSBtb250aE5hbWVzW2RhcnJbMV1dO1xyXG4gICAgICByZXR1cm4gZGFyclsxXSArICcgJyArIGRhcnJbMl07XHJcbiAgICB9IGVsc2UgaWYgKHBhcmFtc1sncmV0dHlwZSddID09PSAnZnVsbGFycicpIHtcclxuICAgICAgZGFyclsxXSA9IG1vbnRoTmFtZXNbZGFyclsxXV07XHJcbiAgICAgIHJldHVybiBkYXJyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRhcnJbMV0gKyAnICcgKyBkYXJyWzJdO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBhZGRaZXJvKGk6IGFueSkge1xyXG4gICAgaWYgKGkgPCAxMCkge1xyXG4gICAgICBpID0gJzAnICsgaTtcclxuICAgIH1cclxuICAgIHJldHVybiBpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdGltZSBcclxuICAgKiBAcGFyYW0gc2VjcmVxIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbnZlcnQyNEhvdXJ0b0FtUG0odGltZTogc3RyaW5nLCBzZWNyZXE/OmFueSkge1xyXG4gICAgY29uc3QgdGltZXNwID0gdGltZS5zcGxpdCgnOicpO1xyXG4gICAgbGV0IGhyID0gcGFyc2VJbnQodGltZXNwWzBdLCAxMCk7XHJcbiAgICBjb25zdCBtaW4gPSBwYXJzZUludCh0aW1lc3BbMV0sIDEwKTtcclxuICAgIGNvbnN0IHNlYyA9IHBhcnNlSW50KHRpbWVzcFsyXSwgMTApO1xyXG4gICAgbGV0IGFtcG0gPSAnJztcclxuICAgIGxldCByZXRzdHIgPSAnJztcclxuICAgIGlmIChociA+PSAxMikge1xyXG4gICAgICBociA9IGhyIC0gMTI7XHJcbiAgICAgIGlmIChociA9PT0gMCkge1xyXG4gICAgICAgIGhyID0gMTI7XHJcbiAgICAgICAgYW1wbSA9ICdQTSc7XHJcbiAgICAgIH0gZWxzZSBpZiAoaHIgPCAwKSB7XHJcbiAgICAgICAgYW1wbSA9ICdBTSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW1wbSA9ICdQTSc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaHIgPT09IDApIHtcclxuICAgICAgaHIgPSAxMjtcclxuICAgICAgYW1wbSA9ICdBTSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhbXBtID0gJ0FNJztcclxuICAgIH1cclxuICAgIHJldHN0ciA9IHRoaXMuYWRkWmVybyhocikgKyAnOicgKyB0aGlzLmFkZFplcm8obWluKTtcclxuICAgIGlmIChzZWNyZXEpIHtcclxuICAgICAgcmV0c3RyICs9ICc6JyArIHNlYztcclxuICAgIH1cclxuICAgIHJldHN0ciArPSAnICcgKyBhbXBtO1xyXG4gICAgcmV0dXJuIHJldHN0cjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBtaW5zIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHByb3ZpZGVyQ29udmVydE1pbnV0ZXNUb0hvdXJNaW51dGUobWluczogYW55KSB7XHJcbiAgICBsZXQgcmV0aHIgPSAnJztcclxuICAgIGxldCByZXRtaW4gPSAnJztcclxuICAgIGlmIChtaW5zID4gMCkge1xyXG4gICAgICBjb25zdCBociA9IE1hdGguZmxvb3IobWlucyAvIDYwKTtcclxuICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcihtaW5zICUgNjApO1xyXG4gICAgICBpZiAoaHIgPiAwKSB7XHJcbiAgICAgICAgaWYgKGhyID4gMSkge1xyXG4gICAgICAgICAgcmV0aHIgPSBociArICcgSHJzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0aHIgPSBociArICcgSHInO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobWluID4gMCkge1xyXG4gICAgICAgIGlmIChtaW4gPiAxKSB7XHJcbiAgICAgICAgICByZXRtaW4gPSAnICcgKyBtaW4gKyAnIE1pbnMnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXRtaW4gPSAnICcgKyBtaW4gKyAnIE1pbic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXRtaW4gPSAnJyArIDAgKyAnIE1pbic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0aHIgKyByZXRtaW47XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBtaW5zIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbnZlcnRNaW51dGVzVG9Ib3VyTWludXRlKG1pbnM6IGFueSkge1xyXG4gICAgbGV0IHJldGhyID0gJyc7XHJcbiAgICBsZXQgcmV0bWluID0gJyc7XHJcbiAgICBpZiAobWlucyA+IDApIHtcclxuICAgICAgY29uc3QgaHIgPSBNYXRoLmZsb29yKG1pbnMgLyA2MCk7XHJcbiAgICAgIGNvbnN0IG1pbiA9IE1hdGguZmxvb3IobWlucyAlIDYwKTtcclxuICAgICAgaWYgKGhyID4gMCkge1xyXG4gICAgICAgIGlmIChociA+IDEpIHtcclxuICAgICAgICAgIHJldGhyID0gaHIgKyAnIGhvdXJzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0aHIgPSBociArICcgaG91cic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChtaW4gPiAwKSB7XHJcbiAgICAgICAgaWYgKG1pbiA+IDEpIHtcclxuICAgICAgICAgIHJldG1pbiA9ICcgJyArIG1pbiArICcgbWludXRlcyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldG1pbiA9ICcgJyArIG1pbiArICcgbWludXRlJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldG1pbiA9ICcnICsgMCArICcgbWludXRlcyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0aHIgKyByZXRtaW47XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBtaW5zIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbnZlcnRNaW51dGVzVG9Ib3VyTWludXRlRm9yQ2hlY2tpbihtaW5zOiBhbnkpIHtcclxuICAgIGxldCByZXRociA9ICcnO1xyXG4gICAgbGV0IHJldG1pbiA9ICcnO1xyXG4gICAgaWYgKG1pbnMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IGhyID0gTWF0aC5mbG9vcihtaW5zIC8gNjApO1xyXG4gICAgICBjb25zdCBtaW4gPSBNYXRoLmZsb29yKG1pbnMgJSA2MCk7XHJcbiAgICAgIGlmIChociA+IDApIHtcclxuICAgICAgICBpZiAoaHIgPiAxKSB7XHJcbiAgICAgICAgICByZXRociA9IGhyICsgJ0hycyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldGhyID0gaHIgKyAnSHInO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobWluID4gMCkge1xyXG4gICAgICAgIGlmIChtaW4gPiAxKSB7XHJcbiAgICAgICAgICByZXRtaW4gPSAnICcgKyBtaW4gKyAnTWlucyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldG1pbiA9ICcgJyArIG1pbiArICdNaW4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0bWluID0gJycgKyAwICsgJ01pbic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0aHIgKyByZXRtaW47XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB0aW1lIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldERhdGVGcm9tVGltZVN0cmluZyh0aW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHRpbWUubWF0Y2goLyhcXGQrKTooXFxkKykgKEFNfFBNKS8pO1xyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgIGxldCBob3VycyA9IHBhcnNlSW50KHBhcnRzWzFdLCAwKTtcclxuICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KHBhcnRzWzJdLCAwKTtcclxuICAgICAgY29uc3QgdHQgPSBwYXJ0c1szXTtcclxuICAgICAgaWYgKHR0ID09PSAnUE0nICYmIGhvdXJzIDwgMTIpIHtcclxuICAgICAgICBob3VycyArPSAxMjtcclxuICAgICAgfVxyXG4gICAgICBzdGFydFRpbWUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXJ0VGltZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGR0IFxyXG4gICAqIEBwYXJhbSBtb2QgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgc3RyaW5ndG9EYXRlKGR0OiBzdHJpbmcsIG1vZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgZHRzYXJyO1xyXG4gICAgaWYgKGR0KSB7XHJcbiAgICAgIGR0c2FyciA9IGR0LnNwbGl0KCcgJyk7XHJcbiAgICAgIGNvbnN0IGR0YXJyID0gZHRzYXJyWzBdLnNwbGl0KCctJyk7XHJcbiAgICAgIGxldCByZXR2YWwgPSAnJztcclxuICAgICAgaWYgKG1vZCA9PT0gJ2FsbCcpIHtcclxuICAgICAgICByZXR2YWwgPSBkdGFyclsyXSArICcvJyArIGR0YXJyWzFdICsgJy8nICsgZHRhcnJbMF0gKyAnICcgKyBkdHNhcnJbMV0gKyAnICcgKyBkdHNhcnJbMl07XHJcbiAgICAgIH0gZWxzZSBpZiAobW9kID09PSAnZGF0ZScpIHtcclxuICAgICAgICByZXR2YWwgPSBkdGFyclsyXSArICcvJyArIGR0YXJyWzFdICsgJy8nICsgZHRhcnJbMF07XHJcbiAgICAgIH0gZWxzZSBpZiAobW9kID09PSAndGltZScpIHtcclxuICAgICAgICByZXR2YWwgPSBkdHNhcnJbMV0gKyAnICcgKyBkdHNhcnJbMl07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRhdGUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtVG9ZTURGb3JtYXQoZGF0ZTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkluIHRyYW5zZm9ybVRvWU1ERm9ybWF0OlwiLCBkYXRlKTtcclxuICAgIGNvbnN0IHNlcnZlciA9IGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5SRUdJT05fTEFOR1VBR0UsIHsgdGltZVpvbmU6IHRoaXMuVElNRV9aT05FX1JFR0lPTiB9KTtcclxuICAgIGNvbnN0IHNlcnZlcmRhdGUgPSBtb21lbnQoc2VydmVyKS5mb3JtYXQoKTtcclxuICAgIGNvbnN0IG5ld2RhdGUgPSBuZXcgRGF0ZShzZXJ2ZXJkYXRlKTtcclxuICAgIGNvbnN0IGRkID0gbmV3ZGF0ZS5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBtbSA9IG5ld2RhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICBjb25zdCB5ID0gbmV3ZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgZGF0ZTEgPSB5ICsgJy0nICsgbW0gKyAnLScgKyBkZDtcclxuICAgIHJldHVybiBkYXRlMTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRhdGVTdHIgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZm9ybWF0RGF0ZURpc3BsYXkoZGF0ZVN0cjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwdWJEYXRlID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICBjb25zdCBvYnRzaG93ZGF0ZSA9IHRoaXMuYWRkWmVybyhwdWJEYXRlLmdldERhdGUoKSkgKyAnLycgKyB0aGlzLmFkZFplcm8oKHB1YkRhdGUuZ2V0TW9udGgoKSArIDEpKSArICcvJyArIHB1YkRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHJldHVybiBvYnRzaG93ZGF0ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0TW9tZW50KCkge1xyXG4gICAgcmV0dXJuIG1vbWVudDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG51bSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXREYXkobnVtOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLm15d2Vla2RheXNTY2hlZHVsZVtudW1dO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBEYXRlIHRvIFN0cmluZyBpbiBZWVlZTU1ERCBmb3JtYXRcclxuICAgKiBAcGFyYW0gaW5wdXREYXRlIGlucHV0IGRhdGVcclxuICAgKiBAcmV0dXJucyBzdHJpbmdcclxuICAgKi9cclxuICBnZXRTdHJpbmdGcm9tRGF0ZV9ZWVlZTU1ERChpbnB1dERhdGU6IGFueSkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZShpbnB1dERhdGUpO1xyXG4gICAgY29uc3QgZGQgPSB0b2RheS5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBtbSA9IHRvZGF5LmdldE1vbnRoKCkgKyAxOyAvLyBKYW51YXJ5IGlzIDAhXHJcbiAgICBjb25zdCB5eXl5ID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBjZGF5ID0gJyc7XHJcbiAgICBpZiAoZGQgPCAxMCkge1xyXG4gICAgICBjZGF5ID0gJzAnICsgZGQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjZGF5ID0gJycgKyBkZDtcclxuICAgIH1cclxuICAgIGxldCBjbW9uO1xyXG4gICAgaWYgKG1tIDwgMTApIHtcclxuICAgICAgY21vbiA9ICcwJyArIG1tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY21vbiA9ICcnICsgbW07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0geXl5eSArICctJyArIGNtb24gKyAnLScgKyBjZGF5O1xyXG4gICAgcmV0dXJuIGRhdGVTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRMb2NhbGVEYXRlRnJvbVNlcnZlcihzZXJ2ZXJEYXRlOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShzZXJ2ZXJEYXRlLnNwbGl0KCcgJylbMF0pLnRvTG9jYWxlU3RyaW5nKHRoaXMuUkVHSU9OX0xBTkdVQUdFLCB7IHRpbWVab25lOiB0aGlzLlRJTUVfWk9ORV9SRUdJT04gfSlcclxuICB9XHJcblxyXG4gIGdldFRvZGF5KHNlcnZlckRhdGU6IGFueSkge1xyXG4gICAgbGV0IHRvZGF5OiBhbnk7XHJcbiAgICB0b2RheSA9IG5ldyBEYXRlKHNlcnZlckRhdGUuc3BsaXQoJyAnKVswXSkudG9Mb2NhbGVTdHJpbmcodGhpcy5SRUdJT05fTEFOR1VBR0UsIHsgdGltZVpvbmU6IHRoaXMuVElNRV9aT05FX1JFR0lPTiB9KTtcclxuICAgIHRvZGF5ID0gbmV3IERhdGUodG9kYXkpO1xyXG4gICAgY29uc3QgZGQgPSB0b2RheS5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBtbSA9IHRvZGF5LmdldE1vbnRoKCkgKyAxOyAvLyBKYW51YXJ5IGlzIDAhXHJcbiAgICBjb25zdCB5eXl5ID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBjZGF5ID0gJyc7XHJcbiAgICBpZiAoZGQgPCAxMCkge1xyXG4gICAgICBjZGF5ID0gJzAnICsgZGQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjZGF5ID0gJycgKyBkZDtcclxuICAgIH1cclxuICAgIGxldCBjbW9uO1xyXG4gICAgaWYgKG1tIDwgMTApIHtcclxuICAgICAgY21vbiA9ICcwJyArIG1tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY21vbiA9ICcnICsgbW07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkdG9kYXkgPSB5eXl5ICsgJy0nICsgY21vbiArICctJyArIGNkYXk7XHJcbiAgICByZXR1cm4gZHRvZGF5O1xyXG4gIH1cclxuXHJcbiAgaXNGdXR1cmVEYXRlKHNlcnZlckRhdGU6IGFueSwgYXBwbXREYXRlOiBhbnkpIHtcclxuICAgIGxldCB0b2RheTogYW55O1xyXG4gICAgdG9kYXkgPSB0aGlzLmdldFRvZGF5KHNlcnZlckRhdGUpO1xyXG4gICAgY29uc3QgZHQwID0gdG9kYXkudG9Mb2NhbGVTdHJpbmcodGhpcy5SRUdJT05fTEFOR1VBR0UsIHsgdGltZVpvbmU6IHRoaXMuVElNRV9aT05FX1JFR0lPTiB9KTtcclxuICAgIGNvbnN0IGR0MiA9IG1vbWVudChkdDAsICdZWVlZLU1NLUREIEhIOm1tJykuZm9ybWF0KCk7XHJcbiAgICBjb25zdCBkYXRlMiA9IG5ldyBEYXRlKGR0Mik7XHJcbiAgICBjb25zdCBkdGUwID0gYXBwbXREYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMuUkVHSU9OX0xBTkdVQUdFLCB7IHRpbWVab25lOiB0aGlzLlRJTUVfWk9ORV9SRUdJT04gfSk7XHJcbiAgICBjb25zdCBkdGUyID0gbW9tZW50KGR0ZTAsICdZWVlZLU1NLUREIEhIOm1tJykuZm9ybWF0KCk7XHJcbiAgICBjb25zdCBkYXRlZTIgPSBuZXcgRGF0ZShkdGUyKTtcclxuICAgIGlmIChkYXRlZTIuZ2V0VGltZSgpICE9PSBkYXRlMi5nZXRUaW1lKCkpIHsgLy8gdGhpcyBpcyB0byBkZWNpZGUgd2hldGhlciBmdXR1cmUgZGF0ZSBzZWxlY3Rpb24gaXMgdG8gYmUgZGlzcGxheWVkLiBUaGlzIGlzIGRpc3BsYXllZCBpZiB0aGUgc2VsX2NoZWNraW5kYXRlIGlzIGEgZnV0dXJlIGRhdGVcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9tZW50RGF0ZShwZGF0ZTogYW55KSB7XHJcbiAgICByZXR1cm4gbW9tZW50KHBkYXRlLCAnWVlZWS1NTS1ERCBISDptbScpLmZvcm1hdCgpO1xyXG4gIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZGF0ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICAgICB0cmFuc2Zvcm1Ub01NRERZWVlZXyhkYXRlOiBhbnkpIHtcclxuICAgICAgY29uc3Qgc2VydmVyID0gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLlJFR0lPTl9MQU5HVUFHRSwgeyB0aW1lWm9uZTogdGhpcy5USU1FX1pPTkVfUkVHSU9OIH0pO1xyXG4gICAgICBjb25zdCBzZXJ2ZXJkYXRlID0gbW9tZW50KHNlcnZlcikuZm9ybWF0KCk7XHJcbiAgICAgIGNvbnN0IG5ld2RhdGUgPSBuZXcgRGF0ZShzZXJ2ZXJkYXRlKTtcclxuICAgICAgY29uc3QgZGQgPSBuZXdkYXRlLmdldERhdGUoKTtcclxuICAgICAgY29uc3QgbW0gPSBuZXdkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICBjb25zdCB5ID0gbmV3ZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBkYXRlMSA9IG1tICsgJy8nICsgZGQgKyAnLycgKyB5O1xyXG4gICAgICByZXR1cm4gZGF0ZTE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVUQ2RhdGV0aW1lc3RyaW5nKCkge1xyXG4gICAgICBjb25zdCBjdXJkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgY29uc3QgY2RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhjdXJkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGN1cmRhdGUuZ2V0VVRDTW9udGgoKSwgY3VyZGF0ZS5nZXRVVENEYXRlKCksIGN1cmRhdGUuZ2V0VVRDSG91cnMoKSxcclxuICAgICAgICBjdXJkYXRlLmdldFVUQ01pbnV0ZXMoKSwgY3VyZGF0ZS5nZXRVVENTZWNvbmRzKCksIGN1cmRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpKTtcclxuICAgICAgcmV0dXJuIGNkYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3lzdGVtRGF0ZSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VydmljZW1ldGEuaHR0cEdldCgncHJvdmlkZXIvc2VydmVyL2RhdGUnKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQU1Ib3VydG8yNChkYXRlOiBhbnksIHRpbWUxMjogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aW1lMTI7XHJcbiAgICAgIGxldCBob3VycyA9IE51bWJlcih0aW1lLm1hdGNoKC9eKFxcZCspLylbMV0pO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKHRpbWUubWF0Y2goLzooXFxkKykvKVsxXSk7XHJcbiAgICAgIGNvbnN0IEFNUE0gPSB0aW1lLm1hdGNoKC9cXHMoLiopJC8pWzFdO1xyXG4gICAgICBpZiAoQU1QTSA9PT0gJ1BNJyAmJiBob3VycyA8IDEyKSB7IGhvdXJzID0gaG91cnMgKyAxMjsgfVxyXG4gICAgICBpZiAoQU1QTSA9PT0gJ0FNJyAmJiBob3VycyA9PT0gMTIpIHsgaG91cnMgPSBob3VycyAtIDEyOyB9XHJcbiAgICAgIGNvbnN0IHNIb3VycyA9IGhvdXJzO1xyXG4gICAgICBjb25zdCBzTWludXRlcyA9IG1pbnV0ZXM7XHJcbiAgICAgIGNvbnN0IG1vbV9kYXRlID0gbW9tZW50KGRhdGUpO1xyXG4gICAgICBtb21fZGF0ZS5zZXQoJ2hvdXInLCBzSG91cnMpO1xyXG4gICAgICBtb21fZGF0ZS5zZXQoJ21pbnV0ZScsIHNNaW51dGVzKTtcclxuICAgICAgcmV0dXJuIG1vbV9kYXRlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CommonService {
4
+ constructor() { }
5
+ groupBy(xs, key) {
6
+ return xs.reduce(function (rv, x) {
7
+ (rv[x[key]] = rv[x[key]] || []).push(x);
8
+ return rv;
9
+ }, {});
10
+ }
11
+ isNumeric(evt) {
12
+ const inputKeyCode = evt.keyCode ? evt.keyCode : evt.which;
13
+ if ((inputKeyCode >= 48 && inputKeyCode <= 57) || inputKeyCode === 8 || inputKeyCode === 46) {
14
+ return true;
15
+ }
16
+ else {
17
+ evt.preventDefault();
18
+ return false;
19
+ }
20
+ }
21
+ showlogoicon(logo) {
22
+ if (logo == null || logo === '') {
23
+ return '../../assets/images/no_image_icon.png';
24
+ }
25
+ else {
26
+ return logo;
27
+ }
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommonService, providedIn: 'root' });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommonService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: 'root'
36
+ }]
37
+ }], ctorParameters: () => [] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGFBQWE7SUFFeEIsZ0JBQWdCLENBQUM7SUFFakIsT0FBTyxDQUFDLEVBQU8sRUFBRSxHQUFRO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQU8sRUFBRSxDQUFNO1lBQ3hDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBQ0QsU0FBUyxDQUFDLEdBQVE7UUFDaEIsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksWUFBWSxLQUFLLENBQUMsSUFBSSxZQUFZLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDNUYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxPQUFPLHVDQUF1QyxDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzt1R0F6QlUsYUFBYTsyR0FBYixhQUFhLGNBRlosTUFBTTs7MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZ3JvdXBCeSh4czogYW55LCBrZXk6IGFueSkge1xyXG4gICAgcmV0dXJuIHhzLnJlZHVjZShmdW5jdGlvbiAocnY6IGFueSwgeDogYW55KSB7XHJcbiAgICAgIChydlt4W2tleV1dID0gcnZbeFtrZXldXSB8fCBbXSkucHVzaCh4KTtcclxuICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuICBpc051bWVyaWMoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnN0IGlucHV0S2V5Q29kZSA9IGV2dC5rZXlDb2RlID8gZXZ0LmtleUNvZGUgOiBldnQud2hpY2g7XHJcbiAgICBpZiAoKGlucHV0S2V5Q29kZSA+PSA0OCAmJiBpbnB1dEtleUNvZGUgPD0gNTcpIHx8IGlucHV0S2V5Q29kZSA9PT0gOCB8fCBpbnB1dEtleUNvZGUgPT09IDQ2KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd2xvZ29pY29uKGxvZ286IGFueSkge1xyXG4gICAgaWYgKGxvZ28gPT0gbnVsbCB8fCBsb2dvID09PSAnJykge1xyXG4gICAgICByZXR1cm4gJy4uLy4uL2Fzc2V0cy9pbWFnZXMvbm9faW1hZ2VfaWNvbi5wbmcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGxvZ287XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { Injectable } from "@angular/core";
2
+ Injectable({
3
+ providedIn: 'root'
4
+ });
5
+ export class ErrorMessagingService {
6
+ API_ERROR = 'There was a problem while connecting to our server. Please try again.';
7
+ constructor() {
8
+ }
9
+ getApiError(error) {
10
+ console.log("Get Api Error:", error);
11
+ if (error.error && typeof error.error === 'string') {
12
+ return error.error;
13
+ }
14
+ else if (typeof error === 'string') {
15
+ return error;
16
+ }
17
+ else {
18
+ return this.API_ERROR;
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2Vycm9yLW1lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLFVBQVUsQ0FBQztJQUNQLFVBQVUsRUFBRSxNQUFNO0NBQ3JCLENBQUMsQ0FBQTtBQUVGLE1BQU0sT0FBTyxxQkFBcUI7SUFFOUIsU0FBUyxHQUFHLHVFQUF1RSxDQUFDO0lBRXBGO0lBQ0EsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuSW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvck1lc3NhZ2luZ1NlcnZpY2Uge1xyXG5cclxuICAgIEFQSV9FUlJPUiA9ICdUaGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGNvbm5lY3RpbmcgdG8gb3VyIHNlcnZlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG4gICAgZ2V0QXBpRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR2V0IEFwaSBFcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICAgIGlmIChlcnJvci5lcnJvciAmJiB0eXBlb2YgZXJyb3IuZXJyb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5lcnJvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSV9FUlJPUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19