@acorex/core 5.0.4 → 5.0.8

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 (47) hide show
  1. package/README.md +24 -24
  2. package/acorex-core.d.ts +5 -5
  3. package/bundles/acorex-core.umd.js +1238 -818
  4. package/bundles/acorex-core.umd.js.map +1 -1
  5. package/config/tailwind.config.js +258 -0
  6. package/esm2015/acorex-core.js +4 -4
  7. package/esm2015/lib/config/configs.js +30 -29
  8. package/esm2015/lib/core.module.js +18 -18
  9. package/esm2015/lib/dateTime/datetime.class.js +260 -236
  10. package/esm2015/lib/dateTime/datetime.module.js +31 -18
  11. package/esm2015/lib/dateTime/datetime.pipe.js +25 -25
  12. package/esm2015/lib/dateTime/georgian.calendar.js +162 -145
  13. package/esm2015/lib/dateTime/index.js +5 -5
  14. package/esm2015/lib/dateTime/jalali.calendar.js +327 -0
  15. package/esm2015/lib/platform/index.js +1 -1
  16. package/esm2015/lib/platform/platform.service.js +119 -119
  17. package/esm2015/lib/translation/index.js +4 -4
  18. package/esm2015/lib/translation/translation.module.js +18 -18
  19. package/esm2015/lib/translation/translator.js +26 -26
  20. package/esm2015/lib/translation/translator.pipe.js +15 -15
  21. package/esm2015/lib/utils/drawing-util.js +27 -0
  22. package/esm2015/lib/utils/index.js +4 -3
  23. package/esm2015/lib/utils/object-util.js +83 -83
  24. package/esm2015/lib/utils/safe.pipe.js +30 -30
  25. package/esm2015/public-api.js +11 -11
  26. package/fesm2015/acorex-core.js +1120 -715
  27. package/fesm2015/acorex-core.js.map +1 -1
  28. package/lib/config/configs.d.ts +9 -9
  29. package/lib/core.module.d.ts +7 -7
  30. package/lib/dateTime/datetime.class.d.ts +86 -96
  31. package/lib/dateTime/datetime.module.d.ts +8 -7
  32. package/lib/dateTime/datetime.pipe.d.ts +8 -8
  33. package/lib/dateTime/georgian.calendar.d.ts +19 -17
  34. package/lib/dateTime/index.d.ts +4 -4
  35. package/lib/dateTime/jalali.calendar.d.ts +34 -0
  36. package/lib/platform/index.d.ts +1 -1
  37. package/lib/platform/platform.service.d.ts +22 -22
  38. package/lib/translation/index.d.ts +3 -3
  39. package/lib/translation/translation.module.d.ts +7 -7
  40. package/lib/translation/translator.d.ts +9 -9
  41. package/lib/translation/translator.pipe.d.ts +7 -7
  42. package/lib/utils/drawing-util.d.ts +17 -0
  43. package/lib/utils/index.d.ts +3 -2
  44. package/lib/utils/object-util.d.ts +7 -7
  45. package/lib/utils/safe.pipe.d.ts +10 -10
  46. package/package.json +17 -17
  47. package/public-api.d.ts +10 -10
@@ -1,236 +1,260 @@
1
- import { AXConfig } from '../config/configs';
2
- export const AX_CALENDARS = [
3
- {
4
- name: 'gregorian',
5
- type: 'GeorgianCalendar'
6
- },
7
- {
8
- name: 'jalali',
9
- type: 'JalaliCalendar'
10
- }
11
- ];
12
- /**
13
- * Standard links:
14
- * {@link Foo} or {@linkplain Foo} or [[Foo]]
15
- *
16
- * Code links: (Puts Foo inside <code> tags)
17
- * {@linkcode Foo} or [[`Foo`]]
18
- */
19
- // @dynamic
20
- export class AXDateTime {
21
- constructor(value = new Date(), calendar = AXConfig.get('dateTime.type') || 'gregorian') {
22
- this._calendar =
23
- typeof calendar == 'string'
24
- ? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)
25
- : calendar;
26
- if (value instanceof Date) {
27
- this._date = value;
28
- }
29
- else {
30
- this._date = new Date(value);
31
- }
32
- }
33
- static convert(value, calendar = AXConfig.get('dateTime.type') || 'gregorian') {
34
- let date;
35
- if (typeof value === 'string' || value instanceof String) {
36
- date = new AXDateTime(value, calendar);
37
- }
38
- else if (value instanceof Date) {
39
- date = new AXDateTime(value, calendar);
40
- }
41
- else if (value instanceof AXDateTime) {
42
- date = new AXDateTime(value.date, calendar);
43
- }
44
- return date;
45
- }
46
- /**
47
- * This comment _supports_ [Markdown](https://marked.js.org/)
48
- */
49
- get date() {
50
- return this._date;
51
- }
52
- get calendar() {
53
- return this._calendar;
54
- }
55
- clone() {
56
- return new AXDateTime(this.date, this.calendar.name());
57
- }
58
- get dayInMonth() {
59
- return this._calendar.dayInMonth(this.date);
60
- }
61
- get dayOfYear() {
62
- return this._calendar.dayOfYear(this.date);
63
- }
64
- get dayInWeek() {
65
- return this._calendar.dayInWeek(this.date);
66
- }
67
- get hour() {
68
- return this._date.getHours();
69
- }
70
- get minute() {
71
- return this._date.getMinutes();
72
- }
73
- get second() {
74
- return this._date.getSeconds();
75
- }
76
- get year() {
77
- return this._calendar.year(this.date);
78
- }
79
- get monthOfYear() {
80
- return this._calendar.monthOfYear(this.date);
81
- }
82
- get month() {
83
- return new AXCalendarMonth(this);
84
- }
85
- add(unit, amount) {
86
- return this._calendar.add(this.date, unit, amount);
87
- }
88
- set(unit = 'day', value) {
89
- return this._calendar.set(this.date, unit, value);
90
- }
91
- duration(end, unit = 'day') {
92
- const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));
93
- return range.duration();
94
- }
95
- startOf(unit = 'day') {
96
- return this._calendar.startOf(this.date, unit);
97
- }
98
- endOf(unit = 'day') {
99
- return this._calendar.endOf(this.date, unit);
100
- }
101
- format(format = AXConfig.get('dateTime.shortDateFormat') ||
102
- 'DDD, dd MMM yyyy') {
103
- format = format.replace('ss', this.pad(this.date.getSeconds(), 2));
104
- format = format.replace('s', this.date.getSeconds().toString());
105
- format = format.replace('dd', this.pad(this.calendar.dayInMonth(this.date), 2));
106
- format = format.replace('d', this.calendar.dayInMonth(this.date).toString());
107
- format = format.replace('mm', this.pad(this.date.getMinutes(), 2));
108
- format = format.replace('m', this.date.getMinutes().toString());
109
- format = format.replace('MMMM', this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]);
110
- format = format.replace('MMM', this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]);
111
- format = format.replace('MM', this.pad(this.calendar.monthOfYear(this.date), 2));
112
- format = format.replace(/M(?![ao])/, this.calendar.monthOfYear(this.date).toString());
113
- format = format.replace('DDDD', this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1]);
114
- format = format.replace('DDD', this.calendar.dayShortNames[this.calendar.dayInWeek(this.date) - 1]);
115
- format = format.replace(/D(?!e)/, this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1].substring(0, 3));
116
- format = format.replace('yyyy', this.calendar.year(this.date).toString());
117
- format = format.replace('YYYY', this.calendar.year(this.date).toString());
118
- format = format.replace('yy', this.calendar.year(this.date).toString().substring(2));
119
- format = format.replace('YY', this.calendar.year(this.date).toString().substring(2));
120
- format = format.replace('HH', this.pad(this.date.getHours(), 2));
121
- format = format.replace('H', this.date.getHours().toString());
122
- return format;
123
- }
124
- pad(n, width, z = '0') {
125
- n = n + '';
126
- return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
127
- }
128
- toString() {
129
- return this.format();
130
- }
131
- equal(value, unit = 'day') {
132
- return this.compaire(value, unit) == 0;
133
- }
134
- compaire(value, unit = 'day') {
135
- // TODO:
136
- const val = AXDateTime.convert(value);
137
- if (this.date == val.date) {
138
- return 0;
139
- }
140
- else if (this.date > val.date) {
141
- return 1;
142
- }
143
- else {
144
- return -1;
145
- }
146
- }
147
- convert(calendar) {
148
- return AXDateTime.convert(this, calendar);
149
- }
150
- }
151
- export class AXCalendarMonth {
152
- constructor(date) {
153
- this.index = date.date.getMonth();
154
- this.name = date.format('MMMM');
155
- this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));
156
- }
157
- get range() {
158
- return this._range;
159
- }
160
- set range(v) {
161
- this._range = v;
162
- }
163
- }
164
- export class AXDateTimeRange {
165
- constructor(startTime, endTime) {
166
- this.startTime = startTime;
167
- this.endTime = endTime;
168
- }
169
- duration() {
170
- const result = {
171
- miliseconds: 0,
172
- seconds: 0,
173
- minutes: 0,
174
- hours: 0,
175
- days: 0,
176
- months: 0,
177
- years: 0,
178
- total: {
179
- miliseconds: 0,
180
- seconds: 0,
181
- minutes: 0,
182
- hours: 0,
183
- days: 0,
184
- weeks: 0,
185
- months: 0,
186
- years: 0,
187
- },
188
- };
189
- const one_second = 1000;
190
- const one_min = one_second * 60;
191
- const one_hour = one_min * 60;
192
- const one_day = one_hour * 24;
193
- const one_week = one_day * 7;
194
- const one_year = 365.25 * one_day;
195
- const one_month = one_year / 12;
196
- const startTime = this.startTime.date.getTime();
197
- const endTime = this.endTime.date.getTime();
198
- const diff = Math.abs(endTime - startTime);
199
- //
200
- result.total.miliseconds = diff;
201
- result.total.seconds = Number((diff / one_second).toFixed(2));
202
- result.total.minutes = Number((diff / one_min).toFixed(2));
203
- result.total.hours = Number((diff / one_hour).toFixed(2));
204
- result.total.days = Number((diff / one_day).toFixed(2));
205
- result.total.weeks = Number((diff / one_week).toFixed(2));
206
- //
207
- // let months = (this.endTime.year - this.startTime.year) * 12;
208
- // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;
209
- // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {
210
- // months--;
211
- // }
212
- // result.total.months = Math.abs(months);
213
- // TODO: review
214
- result.total.months = Number((diff / one_month).toFixed(2));
215
- result.total.years = Number((diff / one_year).toFixed(2));
216
- //
217
- result.miliseconds = result.total.miliseconds % 1000;
218
- result.seconds = Number((result.total.seconds % 60).toFixed(0));
219
- result.minutes = Number((result.total.minutes % 60).toFixed(0));
220
- result.hours = Number((result.total.hours % 24).toFixed(0));
221
- // TODO: review
222
- result.days = Number((result.total.days % 30.4).toFixed(0));
223
- result.months = Number((result.total.months % 12).toFixed(0));
224
- result.years = Number(result.total.years.toFixed(0));
225
- return result;
226
- }
227
- enumurate(unit = 'day') {
228
- // TODO: ??
229
- return [];
230
- }
231
- includes(value, unit = 'day') {
232
- // TODO: ??
233
- return true;
234
- }
235
- }
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29yZS9zcmMvbGliL2RhdGVUaW1lL2RhdGV0aW1lLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc3QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVU7SUFDakM7UUFDRSxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsa0JBQWtCO0tBQ3pCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxnQkFBZ0I7S0FDdkI7Q0FDRixDQUFDO0FBMkNGOzs7Ozs7R0FNRztBQUNILFdBQVc7QUFDWCxNQUFNLE9BQU8sVUFBVTtJQThCckIsWUFDRSxRQUF1QixJQUFJLElBQUksRUFBRSxFQUNqQyxXQUFnQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFdBQVc7UUFFNUUsSUFBSSxDQUFDLFNBQVM7WUFDWixPQUFPLFFBQVEsSUFBSSxRQUFRO2dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztnQkFDcEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQWEsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUExQ0QsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFVLEVBQ1YsV0FBbUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxl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LGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFDRixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDckIsUUFBUSxFQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3RFLENBQUMsRUFDRCxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBQ0YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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S0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELGVBQWU7UUFDZixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFpQixLQUFLO1FBQzlCLFdBQVc7UUFDWCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBaUIsRUFBRSxPQUFpQixLQUFLO1FBQ2hELFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FZRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZ3MnO1xuXG5cbmV4cG9ydCBjb25zdCBBWF9DQUxFTkRBUlM6IGFueVtdID0gW1xuICB7XG4gICAgbmFtZTogJ2dyZWdvcmlhbicsXG4gICAgdHlwZTogJ0dlb3JnaWFuQ2FsZW5kYXInXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnamFsYWxpJyxcbiAgICB0eXBlOiAnSmFsYWxpQ2FsZW5kYXInXG4gIH1cbl07XG5leHBvcnQgdHlwZSBUaW1lVW5pdCA9XG4gIHwgJ3NlY29uZCdcbiAgfCAnbWludXRlJ1xuICB8ICdob3VyJ1xuICB8ICdkYXknXG4gIHwgJ21vbnRoJ1xuICB8ICd5ZWFyJ1xuICB8ICd3ZWVrJztcblxuZXhwb3J0IGludGVyZmFjZSBBWENhbGVuZGFyIHtcbiAgbW9udGhOYW1lczogc3RyaW5nW107XG5cbiAgbW9udGhTaG9ydE5hbWVzOiBzdHJpbmdbXTtcblxuICBkYXlOYW1lczogc3RyaW5nW107XG5cbiAgZGF5U2hvcnROYW1lczogc3RyaW5nW107XG5cbiAgbmFtZSgpOiBzdHJpbmc7XG5cbiAgZGF5SW5Nb250aChkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGRheUluV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICBtb250aE9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWU7XG5cbiAgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWU7XG5cbiAgLyoqXG4gKiBUaGlzIGNvbW1lbnQgX3N1cHBvcnRzXyBbTWFya2Rvd25dKGh0dHBzOi8vbWFya2VkLmpzLm9yZy8pXG4gKi9cbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIGxpbmtzOlxuICoge0BsaW5rIEZvb30gb3Ige0BsaW5rcGxhaW4gRm9vfSBvciBbW0Zvb11dXG4gKlxuICogQ29kZSBsaW5rczogKFB1dHMgRm9vIGluc2lkZSA8Y29kZT4gdGFncylcbiAqIHtAbGlua2NvZGUgRm9vfSBvciBbW2BGb29gXV1cbiAqL1xuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lIHtcbiAgc3RhdGljIGNvbnZlcnQoXG4gICAgdmFsdWU6IGFueSxcbiAgICBjYWxlbmRhcjogc3RyaW5nID0gQVhDb25maWcuZ2V0KCdkYXRlVGltZS50eXBlJykgfHwgJ2dyZWdvcmlhbidcbiAgKTogQVhEYXRlVGltZSB7XG4gICAgbGV0IGRhdGU6IEFYRGF0ZVRpbWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIGRhdGUgPSBuZXcgQVhEYXRlVGltZSh2YWx1ZSBhcyBzdHJpbmcsIGNhbGVuZGFyKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZSA9IG5ldyBBWERhdGVUaW1lKHZhbHVlIGFzIERhdGUsIGNhbGVuZGFyKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQVhEYXRlVGltZSkge1xuICAgICAgZGF0ZSA9IG5ldyBBWERhdGVUaW1lKHZhbHVlLmRhdGUsIGNhbGVuZGFyKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuXG4gIHByaXZhdGUgX2RhdGU6IERhdGU7XG4gICAgLyoqXG4gKiBUaGlzIGNvbW1lbnQgX3N1cHBvcnRzXyBbTWFya2Rvd25dKGh0dHBzOi8vbWFya2VkLmpzLm9yZy8pXG4gKi9cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XG4gIH1cblxuICBwcml2YXRlIF9jYWxlbmRhcjogQVhDYWxlbmRhcjtcbiAgZ2V0IGNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nID0gbmV3IERhdGUoKSxcbiAgICBjYWxlbmRhcjogc3RyaW5nIHwgQVhDYWxlbmRhciA9IEFYQ29uZmlnLmdldCgnZGF0ZVRpbWUudHlwZScpIHx8ICdncmVnb3JpYW4nXG4gICkge1xuICAgIHRoaXMuX2NhbGVuZGFyID1cbiAgICAgIHR5cGVvZiBjYWxlbmRhciA9PSAnc3RyaW5nJ1xuICAgICAgICA/IGV2YWwoYG5ldyAke0FYX0NBTEVOREFSUy5maW5kKChjKSA9PiBjLm5hbWUgPT0gY2FsZW5kYXIpLnR5cGV9KClgKVxuICAgICAgICA6IGNhbGVuZGFyO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMuX2RhdGUgPSB2YWx1ZSBhcyBEYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZSh0aGlzLmRhdGUsIHRoaXMuY2FsZW5kYXIubmFtZSgpKTtcbiAgfVxuXG4gIGdldCBkYXlJbk1vbnRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheUluTW9udGgodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBkYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgZGF5SW5XZWVrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheUluV2Vlayh0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IGhvdXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRIb3VycygpO1xuICB9XG5cbiAgZ2V0IG1pbnV0ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldE1pbnV0ZXMoKTtcbiAgfVxuXG4gIGdldCBzZWNvbmQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRTZWNvbmRzKCk7XG4gIH1cblxuICBnZXQgeWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgbW9udGhPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBtb250aCgpOiBBWENhbGVuZGFyTW9udGgge1xuICAgIHJldHVybiBuZXcgQVhDYWxlbmRhck1vbnRoKHRoaXMpO1xuICB9XG5cbiAgYWRkKHVuaXQ6IFRpbWVVbml0LCBhbW91bnQ6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5hZGQodGhpcy5kYXRlLCB1bml0LCBhbW91bnQpO1xuICB9XG5cbiAgc2V0KHVuaXQ6IFRpbWVVbml0ID0gJ2RheScsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMuZGF0ZSwgdW5pdCwgdmFsdWUpO1xuICB9XG5cbiAgZHVyYXRpb24oXG4gICAgZW5kOiBBWERhdGVUaW1lIHwgRGF0ZSB8IHN0cmluZyxcbiAgICB1bml0OiBUaW1lVW5pdCA9ICdkYXknXG4gICk6IEFYVGltZVNwYW4ge1xuICAgIGNvbnN0IHJhbmdlID0gbmV3IEFYRGF0ZVRpbWVSYW5nZShcbiAgICAgIHRoaXMsXG4gICAgICBBWERhdGVUaW1lLmNvbnZlcnQoZW5kLCB0aGlzLmNhbGVuZGFyLm5hbWUoKSlcbiAgICApO1xuICAgIHJldHVybiByYW5nZS5kdXJhdGlvbigpO1xuICB9XG5cbiAgc3RhcnRPZih1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnN0YXJ0T2YodGhpcy5kYXRlLCB1bml0KTtcbiAgfVxuXG4gIGVuZE9mKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZW5kT2YodGhpcy5kYXRlLCB1bml0KTtcbiAgfVxuXG4gIGZvcm1hdChcbiAgICBmb3JtYXQ6IHN0cmluZyA9IEFYQ29uZmlnLmdldCgnZGF0ZVRpbWUuc2hvcnREYXRlRm9ybWF0JykgfHxcbiAgICAgICdEREQsIGRkIE1NTSB5eXl5J1xuICApOiBzdHJpbmcge1xuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdzcycsIHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCksIDIpKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgncycsIHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAnZGQnLFxuICAgICAgdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlJbk1vbnRoKHRoaXMuZGF0ZSksIDIpXG4gICAgKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICdkJyxcbiAgICAgIHRoaXMuY2FsZW5kYXIuZGF5SW5Nb250aCh0aGlzLmRhdGUpLnRvU3RyaW5nKClcbiAgICApO1xuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdtbScsIHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRNaW51dGVzKCksIDIpKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnbScsIHRoaXMuZGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAnTU1NTScsXG4gICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoTmFtZXNbdGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpIC0gMV1cbiAgICApO1xuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgJ01NTScsXG4gICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoU2hvcnROYW1lc1t0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxXVxuICAgICk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAnTU0nLFxuICAgICAgdGhpcy5wYWQodGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpLCAyKVxuICAgICk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAvTSg/IVthb10pLyxcbiAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKS50b1N0cmluZygpXG4gICAgKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICdEREREJyxcbiAgICAgIHRoaXMuY2FsZW5kYXIuZGF5TmFtZXNbdGhpcy5jYWxlbmRhci5kYXlJbldlZWsodGhpcy5kYXRlKSAtIDFdXG4gICAgKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICdEREQnLFxuICAgICAgdGhpcy5jYWxlbmRhci5kYXlTaG9ydE5hbWVzW3RoaXMuY2FsZW5kYXIuZGF5SW5XZWVrKHRoaXMuZGF0ZSkgLSAxXVxuICAgICk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAvRCg/IWUpLyxcbiAgICAgIHRoaXMuY2FsZW5kYXIuZGF5TmFtZXNbdGhpcy5jYWxlbmRhci5kYXlJbldlZWsodGhpcy5kYXRlKSAtIDFdLnN1YnN0cmluZyhcbiAgICAgICAgMCxcbiAgICAgICAgM1xuICAgICAgKVxuICAgICk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ3l5eXknLCB0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKS50b1N0cmluZygpKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnWVlZWScsIHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCkpO1xuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgJ3l5JyxcbiAgICAgIHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpXG4gICAgKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICdZWScsXG4gICAgICB0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKS50b1N0cmluZygpLnN1YnN0cmluZygyKVxuICAgICk7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ0hIJywgdGhpcy5wYWQodGhpcy5kYXRlLmdldEhvdXJzKCksIDIpKTtcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnSCcsIHRoaXMuZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xuICAgIG4gPSBuICsgJyc7XG4gICAgcmV0dXJuIG4ubGVuZ3RoID49IHdpZHRoID8gbiA6IG5ldyBBcnJheSh3aWR0aCAtIG4ubGVuZ3RoICsgMSkuam9pbih6KSArIG47XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdCgpO1xuICB9XG5cbiAgZXF1YWwodmFsdWU6IGFueSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jykge1xuICAgIHJldHVybiB0aGlzLmNvbXBhaXJlKHZhbHVlLCB1bml0KSA9PSAwO1xuICB9XG5cbiAgY29tcGFpcmUodmFsdWU6IGFueSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jykge1xuICAgIC8vIFRPRE86XG4gICAgY29uc3QgdmFsID0gQVhEYXRlVGltZS5jb252ZXJ0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5kYXRlID09IHZhbC5kYXRlKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZSA+IHZhbC5kYXRlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnQoY2FsZW5kYXI6IHN0cmluZykge1xuICAgIHJldHVybiBBWERhdGVUaW1lLmNvbnZlcnQodGhpcywgY2FsZW5kYXIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBWENhbGVuZGFyTW9udGgge1xuICBwcml2YXRlIF9yYW5nZTogQVhEYXRlVGltZVJhbmdlO1xuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IEFYRGF0ZVRpbWVSYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmFuZ2UodjogQVhEYXRlVGltZVJhbmdlKSB7XG4gICAgdGhpcy5fcmFuZ2UgPSB2O1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuaW5kZXggPSBkYXRlLmRhdGUuZ2V0TW9udGgoKTtcbiAgICB0aGlzLm5hbWUgPSBkYXRlLmZvcm1hdCgnTU1NTScpO1xuICAgIHRoaXMucmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5zdGFydE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5lbmRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW5Ub3RhbCB7XG4gIG1pbGlzZWNvbmRzOiBudW1iZXI7XG4gIHNlY29uZHM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBob3VyczogbnVtYmVyO1xuICBkYXlzOiBudW1iZXI7XG4gIHdlZWtzOiBudW1iZXI7XG4gIG1vbnRoczogbnVtYmVyO1xuICB5ZWFyczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW4ge1xuICBtaWxpc2Vjb25kczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG1pbnV0ZXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgZGF5czogbnVtYmVyO1xuICBtb250aHM6IG51bWJlcjtcbiAgeWVhcnM6IG51bWJlcjtcbiAgdG90YWw6IEFYVGltZVNwYW5Ub3RhbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVSYW5nZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydFRpbWU6IEFYRGF0ZVRpbWUsIHB1YmxpYyBlbmRUaW1lOiBBWERhdGVUaW1lKSB7IH1cblxuICBkdXJhdGlvbigpOiBBWFRpbWVTcGFuIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYVGltZVNwYW4gPSB7XG4gICAgICBtaWxpc2Vjb25kczogMCxcbiAgICAgIHNlY29uZHM6IDAsXG4gICAgICBtaW51dGVzOiAwLFxuICAgICAgaG91cnM6IDAsXG4gICAgICBkYXlzOiAwLFxuICAgICAgbW9udGhzOiAwLFxuICAgICAgeWVhcnM6IDAsXG4gICAgICB0b3RhbDoge1xuICAgICAgICBtaWxpc2Vjb25kczogMCxcbiAgICAgICAgc2Vjb25kczogMCxcbiAgICAgICAgbWludXRlczogMCxcbiAgICAgICAgaG91cnM6IDAsXG4gICAgICAgIGRheXM6IDAsXG4gICAgICAgIHdlZWtzOiAwLFxuICAgICAgICBtb250aHM6IDAsXG4gICAgICAgIHllYXJzOiAwLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lX3NlY29uZCA9IDEwMDA7XG4gICAgY29uc3Qgb25lX21pbiA9IG9uZV9zZWNvbmQgKiA2MDtcbiAgICBjb25zdCBvbmVfaG91ciA9IG9uZV9taW4gKiA2MDtcbiAgICBjb25zdCBvbmVfZGF5ID0gb25lX2hvdXIgKiAyNDtcbiAgICBjb25zdCBvbmVfd2VlayA9IG9uZV9kYXkgKiA3O1xuICAgIGNvbnN0IG9uZV95ZWFyID0gMzY1LjI1ICogb25lX2RheTtcbiAgICBjb25zdCBvbmVfbW9udGggPSBvbmVfeWVhciAvIDEyO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRUaW1lLmRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLmVuZFRpbWUuZGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuICAgIC8vXG4gICAgcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzID0gZGlmZjtcbiAgICByZXN1bHQudG90YWwuc2Vjb25kcyA9IE51bWJlcigoZGlmZiAvIG9uZV9zZWNvbmQpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5taW51dGVzID0gTnVtYmVyKChkaWZmIC8gb25lX21pbikudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLmhvdXJzID0gTnVtYmVyKChkaWZmIC8gb25lX2hvdXIpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5kYXlzID0gTnVtYmVyKChkaWZmIC8gb25lX2RheSkudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLndlZWtzID0gTnVtYmVyKChkaWZmIC8gb25lX3dlZWspLnRvRml4ZWQoMikpO1xuICAgIC8vXG4gICAgLy8gbGV0IG1vbnRocyA9ICh0aGlzLmVuZFRpbWUueWVhciAtIHRoaXMuc3RhcnRUaW1lLnllYXIpICogMTI7XG4gICAgLy8gbW9udGhzICs9IHRoaXMuZW5kVGltZS5tb250aE9mWWVhciAtIHRoaXMuc3RhcnRUaW1lLm1vbnRoT2ZZZWFyICsgMTtcbiAgICAvLyBpZiAodGhpcy5lbmRUaW1lLmRheU9mWWVhciA8IHRoaXMuc3RhcnRUaW1lLmRheU9mWWVhcikge1xuICAgIC8vICAgICBtb250aHMtLTtcbiAgICAvLyB9XG4gICAgLy8gcmVzdWx0LnRvdGFsLm1vbnRocyA9IE1hdGguYWJzKG1vbnRocyk7XG4gICAgLy8gVE9ETzogcmV2aWV3XG4gICAgcmVzdWx0LnRvdGFsLm1vbnRocyA9IE51bWJlcigoZGlmZiAvIG9uZV9tb250aCkudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLnllYXJzID0gTnVtYmVyKChkaWZmIC8gb25lX3llYXIpLnRvRml4ZWQoMikpO1xuICAgIC8vXG4gICAgcmVzdWx0Lm1pbGlzZWNvbmRzID0gcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzICUgMTAwMDtcbiAgICByZXN1bHQuc2Vjb25kcyA9IE51bWJlcigocmVzdWx0LnRvdGFsLnNlY29uZHMgJSA2MCkudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0Lm1pbnV0ZXMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5taW51dGVzICUgNjApLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5ob3VycyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmhvdXJzICUgMjQpLnRvRml4ZWQoMCkpO1xuICAgIC8vIFRPRE86IHJldmlld1xuICAgIHJlc3VsdC5kYXlzID0gTnVtYmVyKChyZXN1bHQudG90YWwuZGF5cyAlIDMwLjQpLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5tb250aHMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5tb250aHMgJSAxMikudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0LnllYXJzID0gTnVtYmVyKHJlc3VsdC50b3RhbC55ZWFycy50b0ZpeGVkKDApKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZW51bXVyYXRlKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lW10ge1xuICAgIC8vIFRPRE86ID8/XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaW5jbHVkZXModmFsdWU6IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiA/P1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gZ2V0Vmlld0NvbXBhaXJlKHZpZXcpIHtcbiAgLy8gICAgIHN3aXRjaCAodmlldykge1xuICAvLyAgICAgICAgIGNhc2UgJ2RheSc6XG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWU1EJztcbiAgLy8gICAgICAgICBjYXNlICdtb250aCc6XG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWU0nO1xuICAvLyAgICAgICAgIGNhc2UgJ3llYXInOlxuICAvLyAgICAgICAgICAgICByZXR1cm4gJ1knO1xuICAvLyAgICAgfVxuICAvLyB9XG59XG4iXX0=
1
+ import { AXConfig } from '../config/configs';
2
+ // @dynamic
3
+ export class AXDateTime {
4
+ constructor(value = new Date(), calendar = AXConfig.get('dateTime.type') || 'gregorian') {
5
+ this._calendar =
6
+ // typeof calendar == 'string'
7
+ // ? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)
8
+ // : calendar;
9
+ typeof calendar == 'string'
10
+ ? AXConfig.get(`dateTime.calendars.${calendar}`)
11
+ : calendar;
12
+ if (value instanceof Date) {
13
+ this._date = value;
14
+ }
15
+ else {
16
+ this._date = new Date(value);
17
+ }
18
+ }
19
+ static convert(value, calendar = AXConfig.get('dateTime.type') || 'gregorian') {
20
+ let date;
21
+ if (typeof value === 'string' || value instanceof String) {
22
+ date = new AXDateTime(value, calendar);
23
+ }
24
+ else if (value instanceof Date) {
25
+ date = new AXDateTime(value, calendar);
26
+ }
27
+ else if (value instanceof AXDateTime) {
28
+ date = new AXDateTime(value.date, calendar);
29
+ }
30
+ return date;
31
+ }
32
+ get date() {
33
+ return this._date;
34
+ }
35
+ get calendar() {
36
+ return this._calendar;
37
+ }
38
+ clone() {
39
+ return new AXDateTime(this.date, this.calendar.name());
40
+ }
41
+ get dayOfMonth() {
42
+ return this._calendar.dayOfMonth(this.date);
43
+ }
44
+ get dayOfYear() {
45
+ return this._calendar.dayOfYear(this.date);
46
+ }
47
+ get dayOfWeek() {
48
+ return this._calendar.dayOfWeek(this.date);
49
+ }
50
+ get hour() {
51
+ return this._date.getHours();
52
+ }
53
+ get minute() {
54
+ return this._date.getMinutes();
55
+ }
56
+ get second() {
57
+ return this._date.getSeconds();
58
+ }
59
+ get year() {
60
+ return this._calendar.year(this.date);
61
+ }
62
+ get monthOfYear() {
63
+ return this._calendar.monthOfYear(this.date);
64
+ }
65
+ get weekOfYear() {
66
+ return this._calendar.weekOfYear(this.date);
67
+ }
68
+ get month() {
69
+ return new AXCalendarMonth(this);
70
+ }
71
+ add(unit, amount) {
72
+ return this._calendar.add(this.date, unit, amount);
73
+ }
74
+ set(unit = 'day', value) {
75
+ return this._calendar.set(this.date, unit, value);
76
+ }
77
+ duration(end, unit = 'day') {
78
+ const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));
79
+ return range.duration();
80
+ }
81
+ startOf(unit = 'day') {
82
+ return this._calendar.startOf(this.date, unit);
83
+ }
84
+ endOf(unit = 'day') {
85
+ return this._calendar.endOf(this.date, unit);
86
+ }
87
+ format(format = AXConfig.get('dateTime.shortDateFormat') ||
88
+ 'DDD, dd MMM yyyy') {
89
+ format = format.replace('ss', this.pad(this.date.getSeconds(), 2));
90
+ format = format.replace('s', this.date.getSeconds().toString());
91
+ format = format.replace('dd', this.pad(this.calendar.dayOfMonth(this.date), 2));
92
+ format = format.replace('d', this.calendar.dayOfMonth(this.date).toString());
93
+ format = format.replace('mm', this.pad(this.date.getMinutes(), 2));
94
+ format = format.replace('m', this.date.getMinutes().toString());
95
+ format = format.replace('MMMM', this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]);
96
+ format = format.replace('MMM', this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]);
97
+ format = format.replace('MM', this.pad(this.calendar.monthOfYear(this.date), 2));
98
+ format = format.replace(/M(?![ao])/, this.calendar.monthOfYear(this.date).toString());
99
+ format = format.replace('DDDD', this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1]);
100
+ format = format.replace('DDD', this.calendar.dayShortNames[this.calendar.dayOfWeek(this.date) - 1]);
101
+ format = format.replace(/D(?!e)/, this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1].substring(0, 3));
102
+ format = format.replace('yyyy', this.calendar.year(this.date).toString());
103
+ format = format.replace('YYYY', this.calendar.year(this.date).toString());
104
+ format = format.replace('yy', this.calendar.year(this.date).toString().substring(2));
105
+ format = format.replace('YY', this.calendar.year(this.date).toString().substring(2));
106
+ format = format.replace('HH', this.pad(this.date.getHours(), 2));
107
+ format = format.replace('H', this.date.getHours().toString());
108
+ return format;
109
+ }
110
+ pad(n, width, z = '0') {
111
+ n = n + '';
112
+ return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
113
+ }
114
+ toString() {
115
+ return this.format();
116
+ }
117
+ equal(value, unit = 'day') {
118
+ return this.compare(value, unit) == 0;
119
+ }
120
+ compare(value, unit = 'day') {
121
+ const val = AXDateTime.convert(value);
122
+ const func = (v1, v2) => {
123
+ if (v1 == v2) {
124
+ return 0;
125
+ }
126
+ else if (v1 > v2) {
127
+ return 1;
128
+ }
129
+ else {
130
+ return -1;
131
+ }
132
+ };
133
+ let p = 0;
134
+ switch (unit) {
135
+ case 'year':
136
+ return func(this.year, val.year);
137
+ case 'week':
138
+ p = this.compare(val, 'year');
139
+ return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;
140
+ case 'month':
141
+ p = this.compare(val, 'year');
142
+ return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;
143
+ case 'day':
144
+ p = this.compare(val, 'year');
145
+ return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;
146
+ case 'hour':
147
+ p = this.compare(val, 'day');
148
+ return p == 0 ? func(this.hour, val.hour) : p;
149
+ case 'minute':
150
+ p = this.compare(val, 'hour');
151
+ return p == 0 ? func(this.minute, val.minute) : p;
152
+ case 'second':
153
+ p = this.compare(val, 'minute');
154
+ return p == 0 ? func(this.second, val.second) : p;
155
+ default:
156
+ return func(this.date.getTime(), val.date.getTime());
157
+ }
158
+ }
159
+ convert(calendar) {
160
+ return AXDateTime.convert(this, calendar);
161
+ }
162
+ }
163
+ export class AXCalendarMonth {
164
+ constructor(date) {
165
+ this.index = date.date.getMonth();
166
+ this.name = date.format('MMMM');
167
+ this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));
168
+ }
169
+ get range() {
170
+ return this._range;
171
+ }
172
+ set range(v) {
173
+ this._range = v;
174
+ }
175
+ }
176
+ export class AXDateTimeRange {
177
+ constructor(startTime, endTime) {
178
+ this._startTime = startTime;
179
+ this._endTime = endTime;
180
+ }
181
+ get startTime() {
182
+ return this._startTime;
183
+ }
184
+ get endTime() {
185
+ return this._endTime;
186
+ }
187
+ duration() {
188
+ const result = {
189
+ miliseconds: 0,
190
+ seconds: 0,
191
+ minutes: 0,
192
+ hours: 0,
193
+ days: 0,
194
+ months: 0,
195
+ years: 0,
196
+ total: {
197
+ miliseconds: 0,
198
+ seconds: 0,
199
+ minutes: 0,
200
+ hours: 0,
201
+ days: 0,
202
+ weeks: 0,
203
+ months: 0,
204
+ years: 0,
205
+ },
206
+ };
207
+ const one_second = 1000;
208
+ const one_min = one_second * 60;
209
+ const one_hour = one_min * 60;
210
+ const one_day = one_hour * 24;
211
+ const one_week = one_day * 7;
212
+ const one_year = 365.25 * one_day;
213
+ const one_month = one_year / 12;
214
+ const startTime = this._startTime.date.getTime();
215
+ const endTime = this._endTime.date.getTime();
216
+ const diff = Math.abs(endTime - startTime);
217
+ //
218
+ result.total.miliseconds = diff;
219
+ result.total.seconds = Number((diff / one_second).toFixed(2));
220
+ result.total.minutes = Number((diff / one_min).toFixed(2));
221
+ result.total.hours = Number((diff / one_hour).toFixed(2));
222
+ result.total.days = Number((diff / one_day).toFixed(2));
223
+ result.total.weeks = Number((diff / one_week).toFixed(2));
224
+ //
225
+ // let months = (this.endTime.year - this.startTime.year) * 12;
226
+ // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;
227
+ // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {
228
+ // months--;
229
+ // }
230
+ // result.total.months = Math.abs(months);
231
+ // TODO: review
232
+ result.total.months = Number((diff / one_month).toFixed(2));
233
+ result.total.years = Number((diff / one_year).toFixed(2));
234
+ //
235
+ result.miliseconds = result.total.miliseconds % 1000;
236
+ result.seconds = Number((result.total.seconds % 60).toFixed(0));
237
+ result.minutes = Number((result.total.minutes % 60).toFixed(0));
238
+ result.hours = Number((result.total.hours % 24).toFixed(0));
239
+ // TODO: review
240
+ result.days = Number((result.total.days % 30.4).toFixed(0));
241
+ result.months = Number((result.total.months % 12).toFixed(0));
242
+ result.years = Number(result.total.years.toFixed(0));
243
+ return result;
244
+ }
245
+ enumurate(unit = 'day', amount = 1) {
246
+ // TODO: setptemper savingtime issue
247
+ const result = [];
248
+ let item = this._startTime.clone();
249
+ while (item.compare(this._endTime, unit) < 1) {
250
+ result.push(item);
251
+ item = item.add(unit, amount);
252
+ }
253
+ return result;
254
+ }
255
+ includes(value, unit = 'day') {
256
+ // TODO: ??
257
+ return true;
258
+ }
259
+ }
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29yZS9zcmMvbGliL2RhdGVUaW1lL2RhdGV0aW1lLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTBEN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBNEJyQixZQUNFLFFBQXVCLElBQUksSUFBSSxFQUFFLEVBQ2pDLFdBQWdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksV0FBVztRQUU1RSxJQUFJLENBQUMsU0FBUztZQUNaLDhCQUE4QjtZQUM5Qix5RUFBeUU7WUFDekUsZ0JBQWdCO1lBQ2hCLE9BQU8sUUFBUSxJQUFJLFFBQVE7Z0JBQ3pCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixRQUFRLEVBQUUsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQWEsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUEzQ0QsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFpQyxFQUNqQyxXQUFtQixRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFdBQVc7UUFFL0QsSUFBSSxJQUFnQixDQUFDO1FBQ3JCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUU7WUFDeEQsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNsRDthQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZ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QyxPQUFPLENBQ3JCLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUN0RSxDQUFDLEVBQ0QsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUNGLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ3JCLElBQUksRUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1FBQ0YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ3JCLElBQUksRUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1FBQ0YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFD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QU0sUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLEVBQUU7UUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxFQUFFO1FBQ0YsK0RBQStEO1FBQy9ELHVFQUF1RTtRQUN2RSwyREFBMkQ7UUFDM0QsZ0JBQWdCO1FBQ2hCLElBQUk7UUFDSiwwQ0FBMEM7UUFDMUMsZUFBZTtRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsRUFBRTtRQUNGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELGVBQWU7UUFDZixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFpQixLQUFLLEVBQUUsU0FBaUIsQ0FBQztRQUNsRCxvQ0FBb0M7UUFDcEMsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtTQUM5QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBaUIsRUFBRSxPQUFpQixLQUFLO1FBQ2hELFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FZRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZ3MnO1xyXG5cclxuXHJcbi8vIGV4cG9ydCBjb25zdCBBWF9DQUxFTkRBUlM6IGFueVtdID0gW1xyXG4vLyAgIHtcclxuLy8gICAgIG5hbWU6ICdncmVnb3JpYW4nLFxyXG4vLyAgICAgdHlwZTogJ0dlb3JnaWFuQ2FsZW5kYXInXHJcbi8vICAgfSxcclxuLy8gICB7XHJcbi8vICAgICBuYW1lOiAnamFsYWxpJyxcclxuLy8gICAgIHR5cGU6ICdKYWxhbGlDYWxlbmRhcidcclxuLy8gICB9XHJcbi8vIF07XHJcbmV4cG9ydCB0eXBlIFRpbWVVbml0ID1cclxuICB8ICdzZWNvbmQnXHJcbiAgfCAnbWludXRlJ1xyXG4gIHwgJ2hvdXInXHJcbiAgfCAnZGF5J1xyXG4gIHwgJ21vbnRoJ1xyXG4gIHwgJ3llYXInXHJcbiAgfCAnd2Vlayc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFYQ2FsZW5kYXIge1xyXG4gIG1vbnRoTmFtZXM6IHN0cmluZ1tdO1xyXG5cclxuICBtb250aFNob3J0TmFtZXM6IHN0cmluZ1tdO1xyXG5cclxuICBkYXlOYW1lczogc3RyaW5nW107XHJcblxyXG4gIGRheVNob3J0TmFtZXM6IHN0cmluZ1tdO1xyXG5cclxuICBuYW1lKCk6IHN0cmluZztcclxuXHJcbiAgZGF5T2ZNb250aChkYXRlOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuICBkYXlPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcclxuXHJcbiAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gIG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gIHdlZWtPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcclxuXHJcbiAgeWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuXHJcblxyXG4gIGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xyXG5cclxuICBzZXQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lO1xyXG5cclxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZTtcclxuXHJcblxyXG4gIGVuZE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZTtcclxufVxyXG5cclxuXHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lIHtcclxuICBzdGF0aWMgY29udmVydChcclxuICAgIHZhbHVlOiBEYXRlIHwgQVhEYXRlVGltZSB8IHN0cmluZyxcclxuICAgIGNhbGVuZGFyOiBzdHJpbmcgPSBBWENvbmZpZy5nZXQoJ2RhdGVUaW1lLnR5cGUnKSB8fCAnZ3JlZ29yaWFuJ1xyXG4gICk6IEFYRGF0ZVRpbWUge1xyXG4gICAgbGV0IGRhdGU6IEFYRGF0ZVRpbWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICBkYXRlID0gbmV3IEFYRGF0ZVRpbWUodmFsdWUgYXMgc3RyaW5nLCBjYWxlbmRhcik7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBkYXRlID0gbmV3IEFYRGF0ZVRpbWUodmFsdWUgYXMgRGF0ZSwgY2FsZW5kYXIpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUpIHtcclxuICAgICAgZGF0ZSA9IG5ldyBBWERhdGVUaW1lKHZhbHVlLmRhdGUsIGNhbGVuZGFyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2RhdGU6IERhdGU7XHJcblxyXG4gIGdldCBkYXRlKCk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWxlbmRhcjogQVhDYWxlbmRhcjtcclxuICBnZXQgY2FsZW5kYXIoKTogQVhDYWxlbmRhciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXI7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nID0gbmV3IERhdGUoKSxcclxuICAgIGNhbGVuZGFyOiBzdHJpbmcgfCBBWENhbGVuZGFyID0gQVhDb25maWcuZ2V0KCdkYXRlVGltZS50eXBlJykgfHwgJ2dyZWdvcmlhbidcclxuICApIHtcclxuICAgIHRoaXMuX2NhbGVuZGFyID1cclxuICAgICAgLy8gdHlwZW9mIGNhbGVuZGFyID09ICdzdHJpbmcnXHJcbiAgICAgIC8vICAgPyBldmFsKGBuZXcgJHtBWF9DQUxFTkRBUlMuZmluZCgoYykgPT4gYy5uYW1lID09IGNhbGVuZGFyKS50eXBlfSgpYClcclxuICAgICAgLy8gICA6IGNhbGVuZGFyO1xyXG4gICAgICB0eXBlb2YgY2FsZW5kYXIgPT0gJ3N0cmluZydcclxuICAgICAgICA/IEFYQ29uZmlnLmdldChgZGF0ZVRpbWUuY2FsZW5kYXJzLiR7Y2FsZW5kYXJ9YClcclxuICAgICAgICA6IGNhbGVuZGFyO1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICB0aGlzLl9kYXRlID0gdmFsdWUgYXMgRGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2RhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBBWERhdGVUaW1lIHtcclxuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZSh0aGlzLmRhdGUsIHRoaXMuY2FsZW5kYXIubmFtZSgpKTtcclxuICB9XHJcblxyXG4gIGdldCBkYXlPZk1vbnRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRheU9mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRheU9mV2VlaygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvdXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldEhvdXJzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgeWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnllYXIodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aE9mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2Vla09mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aCgpOiBBWENhbGVuZGFyTW9udGgge1xyXG4gICAgcmV0dXJuIG5ldyBBWENhbGVuZGFyTW9udGgodGhpcyk7XHJcbiAgfVxyXG5cclxuICBhZGQodW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMuZGF0ZSwgdW5pdCwgYW1vdW50KTtcclxuICB9XHJcblxyXG4gIHNldCh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMuZGF0ZSwgdW5pdCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZHVyYXRpb24oXHJcbiAgICBlbmQ6IERhdGUgfCBBWERhdGVUaW1lLFxyXG4gICAgdW5pdDogVGltZVVuaXQgPSAnZGF5J1xyXG4gICk6IEFYVGltZVNwYW4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBBWERhdGVUaW1lLmNvbnZlcnQoZW5kLCB0aGlzLmNhbGVuZGFyLm5hbWUoKSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmFuZ2UuZHVyYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0T2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnN0YXJ0T2YodGhpcy5kYXRlLCB1bml0KTtcclxuICB9XHJcblxyXG4gIGVuZE9mKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lIHtcclxuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5lbmRPZih0aGlzLmRhdGUsIHVuaXQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0KFxyXG4gICAgZm9ybWF0OiBzdHJpbmcgPSBBWENvbmZpZy5nZXQoJ2RhdGVUaW1lLnNob3J0RGF0ZUZvcm1hdCcpIHx8XHJcbiAgICAgICdEREQsIGRkIE1NTSB5eXl5J1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnc3MnLCB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLCAyKSk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgncycsIHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcclxuICAgICAgJ2RkJyxcclxuICAgICAgdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSksIDIpXHJcbiAgICApO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXHJcbiAgICAgICdkJyxcclxuICAgICAgdGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSkudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdtbScsIHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRNaW51dGVzKCksIDIpKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdtJywgdGhpcy5kYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxyXG4gICAgICAnTU1NTScsXHJcbiAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhOYW1lc1t0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxXVxyXG4gICAgKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxyXG4gICAgICAnTU1NJyxcclxuICAgICAgdGhpcy5jYWxlbmRhci5tb250aFNob3J0TmFtZXNbdGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpIC0gMV1cclxuICAgICk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcclxuICAgICAgJ01NJyxcclxuICAgICAgdGhpcy5wYWQodGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpLCAyKVxyXG4gICAgKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxyXG4gICAgICAvTSg/IVthb10pLyxcclxuICAgICAgdGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcclxuICAgICAgJ0REREQnLFxyXG4gICAgICB0aGlzLmNhbGVuZGFyLmRheU5hbWVzW3RoaXMuY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSkgLSAxXVxyXG4gICAgKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxyXG4gICAgICAnREREJyxcclxuICAgICAgdGhpcy5jYWxlbmRhci5kYXlTaG9ydE5hbWVzW3RoaXMuY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSkgLSAxXVxyXG4gICAgKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxyXG4gICAgICAvRCg/IWUpLyxcclxuICAgICAgdGhpcy5jYWxlbmRhci5kYXlOYW1lc1t0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpIC0gMV0uc3Vic3RyaW5nKFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgM1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ3l5eXknLCB0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKS50b1N0cmluZygpKTtcclxuICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdZWVlZJywgdGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcclxuICAgICAgJ3l5JyxcclxuICAgICAgdGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMilcclxuICAgICk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcclxuICAgICAgJ1lZJyxcclxuICAgICAgdGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMilcclxuICAgICk7XHJcbiAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnSEgnLCB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSwgMikpO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ0gnLCB0aGlzLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpKTtcclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xyXG4gICAgbiA9IG4gKyAnJztcclxuICAgIHJldHVybiBuLmxlbmd0aCA+PSB3aWR0aCA/IG4gOiBuZXcgQXJyYXkod2lkdGggLSBuLmxlbmd0aCArIDEpLmpvaW4oeikgKyBuO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1hdCgpO1xyXG4gIH1cclxuXHJcbiAgZXF1YWwodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlKHZhbHVlLCB1bml0KSA9PSAwO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZSh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcclxuICAgIGNvbnN0IHZhbCA9IEFYRGF0ZVRpbWUuY29udmVydCh2YWx1ZSk7XHJcbiAgICBjb25zdCBmdW5jID0gKHYxOiBudW1iZXIsIHYyOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHYxID09IHYyKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0gZWxzZSBpZiAodjEgPiB2Mikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHAgPSAwO1xyXG4gICAgc3dpdGNoICh1bml0KSB7XHJcbiAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMueWVhciwgdmFsLnllYXIpO1xyXG4gICAgICBjYXNlICd3ZWVrJzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcclxuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLndlZWtPZlllYXIsIHZhbC53ZWVrT2ZZZWFyKSA6IHA7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcclxuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLm1vbnRoT2ZZZWFyLCB2YWwubW9udGhPZlllYXIpIDogcDtcclxuICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcclxuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmRheU9mWWVhciwgdmFsLmRheU9mWWVhcikgOiBwO1xyXG4gICAgICBjYXNlICdob3VyJzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2RheScpO1xyXG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuaG91ciwgdmFsLmhvdXIpIDogcDtcclxuICAgICAgY2FzZSAnbWludXRlJzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2hvdXInKTtcclxuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLm1pbnV0ZSwgdmFsLm1pbnV0ZSkgOiBwO1xyXG4gICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnbWludXRlJyk7XHJcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5zZWNvbmQsIHZhbC5zZWNvbmQpIDogcDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLmRhdGUuZ2V0VGltZSgpLCB2YWwuZGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNvbnZlcnQoY2FsZW5kYXI6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIEFYRGF0ZVRpbWUuY29udmVydCh0aGlzLCBjYWxlbmRhcik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhDYWxlbmRhck1vbnRoIHtcclxuICBwcml2YXRlIF9yYW5nZTogQVhEYXRlVGltZVJhbmdlO1xyXG4gIHB1YmxpYyBnZXQgcmFuZ2UoKTogQVhEYXRlVGltZVJhbmdlIHtcclxuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcclxuICB9XHJcbiAgcHVibGljIHNldCByYW5nZSh2OiBBWERhdGVUaW1lUmFuZ2UpIHtcclxuICAgIHRoaXMuX3JhbmdlID0gdjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGRhdGU6IEFYRGF0ZVRpbWUpIHtcclxuICAgIHRoaXMuaW5kZXggPSBkYXRlLmRhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMubmFtZSA9IGRhdGUuZm9ybWF0KCdNTU1NJyk7XHJcbiAgICB0aGlzLnJhbmdlID0gbmV3IEFYRGF0ZVRpbWVSYW5nZShcclxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5zdGFydE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxyXG4gICAgICBuZXcgQVhEYXRlVGltZShkYXRlLmVuZE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleDogbnVtYmVyO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW5Ub3RhbCB7XHJcbiAgbWlsaXNlY29uZHM6IG51bWJlcjtcclxuICBzZWNvbmRzOiBudW1iZXI7XHJcbiAgbWludXRlczogbnVtYmVyO1xyXG4gIGhvdXJzOiBudW1iZXI7XHJcbiAgZGF5czogbnVtYmVyO1xyXG4gIHdlZWtzOiBudW1iZXI7XHJcbiAgbW9udGhzOiBudW1iZXI7XHJcbiAgeWVhcnM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuIHtcclxuICBtaWxpc2Vjb25kczogbnVtYmVyO1xyXG4gIHNlY29uZHM6IG51bWJlcjtcclxuICBtaW51dGVzOiBudW1iZXI7XHJcbiAgaG91cnM6IG51bWJlcjtcclxuICBkYXlzOiBudW1iZXI7XHJcbiAgbW9udGhzOiBudW1iZXI7XHJcbiAgeWVhcnM6IG51bWJlcjtcclxuICB0b3RhbDogQVhUaW1lU3BhblRvdGFsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZVJhbmdlIHtcclxuICBwcml2YXRlIF9zdGFydFRpbWU6IEFYRGF0ZVRpbWU7XHJcbiAgcHJpdmF0ZSBfZW5kVGltZTogQVhEYXRlVGltZTtcclxuXHJcbiAgcHVibGljIGdldCBzdGFydFRpbWUoKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBlbmRUaW1lKCk6IEFYRGF0ZVRpbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZFRpbWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihzdGFydFRpbWU6IEFYRGF0ZVRpbWUgLCBlbmRUaW1lOiBBWERhdGVUaW1lICkge1xyXG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xyXG4gICAgdGhpcy5fZW5kVGltZSA9IGVuZFRpbWU7XHJcbiAgfVxyXG5cclxuICBkdXJhdGlvbigpOiBBWFRpbWVTcGFuIHtcclxuICAgIGNvbnN0IHJlc3VsdDogQVhUaW1lU3BhbiA9IHtcclxuICAgICAgbWlsaXNlY29uZHM6IDAsXHJcbiAgICAgIHNlY29uZHM6IDAsXHJcbiAgICAgIG1pbnV0ZXM6IDAsXHJcbiAgICAgIGhvdXJzOiAwLFxyXG4gICAgICBkYXlzOiAwLFxyXG4gICAgICBtb250aHM6IDAsXHJcbiAgICAgIHllYXJzOiAwLFxyXG4gICAgICB0b3RhbDoge1xyXG4gICAgICAgIG1pbGlzZWNvbmRzOiAwLFxyXG4gICAgICAgIHNlY29uZHM6IDAsXHJcbiAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICBob3VyczogMCxcclxuICAgICAgICBkYXlzOiAwLFxyXG4gICAgICAgIHdlZWtzOiAwLFxyXG4gICAgICAgIG1vbnRoczogMCxcclxuICAgICAgICB5ZWFyczogMCxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25lX3NlY29uZCA9IDEwMDA7XHJcbiAgICBjb25zdCBvbmVfbWluID0gb25lX3NlY29uZCAqIDYwO1xyXG4gICAgY29uc3Qgb25lX2hvdXIgPSBvbmVfbWluICogNjA7XHJcbiAgICBjb25zdCBvbmVfZGF5ID0gb25lX2hvdXIgKiAyNDtcclxuICAgIGNvbnN0IG9uZV93ZWVrID0gb25lX2RheSAqIDc7XHJcbiAgICBjb25zdCBvbmVfeWVhciA9IDM2NS4yNSAqIG9uZV9kYXk7XHJcbiAgICBjb25zdCBvbmVfbW9udGggPSBvbmVfeWVhciAvIDEyO1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gdGhpcy5fc3RhcnRUaW1lLmRhdGUuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgZW5kVGltZSA9IHRoaXMuX2VuZFRpbWUuZGF0ZS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoZW5kVGltZSAtIHN0YXJ0VGltZSk7XHJcbiAgICAvL1xyXG4gICAgcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzID0gZGlmZjtcclxuICAgIHJlc3VsdC50b3RhbC5zZWNvbmRzID0gTnVtYmVyKChkaWZmIC8gb25lX3NlY29uZCkudG9GaXhlZCgyKSk7XHJcbiAgICByZXN1bHQudG90YWwubWludXRlcyA9IE51bWJlcigoZGlmZiAvIG9uZV9taW4pLnRvRml4ZWQoMikpO1xyXG4gICAgcmVzdWx0LnRvdGFsLmhvdXJzID0gTnVtYmVyKChkaWZmIC8gb25lX2hvdXIpLnRvRml4ZWQoMikpO1xyXG4gICAgcmVzdWx0LnRvdGFsLmRheXMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfZGF5KS50b0ZpeGVkKDIpKTtcclxuICAgIHJlc3VsdC50b3RhbC53ZWVrcyA9IE51bWJlcigoZGlmZiAvIG9uZV93ZWVrKS50b0ZpeGVkKDIpKTtcclxuICAgIC8vXHJcbiAgICAvLyBsZXQgbW9udGhzID0gKHRoaXMuZW5kVGltZS55ZWFyIC0gdGhpcy5zdGFydFRpbWUueWVhcikgKiAxMjtcclxuICAgIC8vIG1vbnRocyArPSB0aGlzLmVuZFRpbWUubW9udGhPZlllYXIgLSB0aGlzLnN0YXJ0VGltZS5tb250aE9mWWVhciArIDE7XHJcbiAgICAvLyBpZiAodGhpcy5lbmRUaW1lLmRheU9mWWVhciA8IHRoaXMuc3RhcnRUaW1lLmRheU9mWWVhcikge1xyXG4gICAgLy8gICAgIG1vbnRocy0tO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmVzdWx0LnRvdGFsLm1vbnRocyA9IE1hdGguYWJzKG1vbnRocyk7XHJcbiAgICAvLyBUT0RPOiByZXZpZXdcclxuICAgIHJlc3VsdC50b3RhbC5tb250aHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfbW9udGgpLnRvRml4ZWQoMikpO1xyXG4gICAgcmVzdWx0LnRvdGFsLnllYXJzID0gTnVtYmVyKChkaWZmIC8gb25lX3llYXIpLnRvRml4ZWQoMikpO1xyXG4gICAgLy9cclxuICAgIHJlc3VsdC5taWxpc2Vjb25kcyA9IHJlc3VsdC50b3RhbC5taWxpc2Vjb25kcyAlIDEwMDA7XHJcbiAgICByZXN1bHQuc2Vjb25kcyA9IE51bWJlcigocmVzdWx0LnRvdGFsLnNlY29uZHMgJSA2MCkudG9GaXhlZCgwKSk7XHJcbiAgICByZXN1bHQubWludXRlcyA9IE51bWJlcigocmVzdWx0LnRvdGFsLm1pbnV0ZXMgJSA2MCkudG9GaXhlZCgwKSk7XHJcbiAgICByZXN1bHQuaG91cnMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5ob3VycyAlIDI0KS50b0ZpeGVkKDApKTtcclxuICAgIC8vIFRPRE86IHJldmlld1xyXG4gICAgcmVzdWx0LmRheXMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5kYXlzICUgMzAuNCkudG9GaXhlZCgwKSk7XHJcbiAgICByZXN1bHQubW9udGhzID0gTnVtYmVyKChyZXN1bHQudG90YWwubW9udGhzICUgMTIpLnRvRml4ZWQoMCkpO1xyXG4gICAgcmVzdWx0LnllYXJzID0gTnVtYmVyKHJlc3VsdC50b3RhbC55ZWFycy50b0ZpeGVkKDApKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBlbnVtdXJhdGUodW5pdDogVGltZVVuaXQgPSAnZGF5JywgYW1vdW50OiBudW1iZXIgPSAxKTogQVhEYXRlVGltZVtdIHtcclxuICAgIC8vIFRPRE86IHNldHB0ZW1wZXIgc2F2aW5ndGltZSBpc3N1ZVxyXG4gICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lW10gPSBbXTtcclxuICAgIGxldCBpdGVtID0gdGhpcy5fc3RhcnRUaW1lLmNsb25lKCk7XHJcbiAgICB3aGlsZSAoaXRlbS5jb21wYXJlKHRoaXMuX2VuZFRpbWUsIHVuaXQpIDwgMSkge1xyXG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgaXRlbSA9IGl0ZW0uYWRkKHVuaXQsIGFtb3VudClcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpbmNsdWRlcyh2YWx1ZTogQVhEYXRlVGltZSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gVE9ETzogPz9cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Vmlld0NvbXBhaXJlKHZpZXcpIHtcclxuICAvLyAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgLy8gICAgICAgICBjYXNlICdkYXknOlxyXG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWU1EJztcclxuICAvLyAgICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gJ1lNJztcclxuICAvLyAgICAgICAgIGNhc2UgJ3llYXInOlxyXG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWSc7XHJcbiAgLy8gICAgIH1cclxuICAvLyB9XHJcbn1cclxuIl19