@acorex/core 4.0.22 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +2 -23
  2. package/acorex-core.d.ts +1 -0
  3. package/{esm2015/acorex-core.js → esm2020/acorex-core.mjs} +1 -1
  4. package/esm2020/lib/classes/base-page.class.mjs +28 -0
  5. package/esm2020/lib/classes/color.class.mjs +49 -0
  6. package/esm2020/lib/classes/datetime.class.mjs +314 -0
  7. package/esm2020/lib/classes/menu.class.mjs +27 -0
  8. package/esm2020/lib/classes/navigator.class.mjs +2 -0
  9. package/esm2020/lib/classes/popup.class.mjs +2 -0
  10. package/esm2020/lib/classes/promise.class.mjs +19 -0
  11. package/esm2020/lib/classes/sectionlist.class.mjs +2 -0
  12. package/esm2020/lib/classes/select.class.mjs +3 -0
  13. package/esm2020/lib/core.module.mjs +27 -0
  14. package/esm2020/lib/error/error.class.mjs +2 -0
  15. package/esm2020/lib/error/error.module.mjs +19 -0
  16. package/esm2020/lib/error/error.service.mjs +21 -0
  17. package/esm2020/lib/events/keyboard.mjs +2 -0
  18. package/esm2020/lib/http/http-error.class.mjs +2 -0
  19. package/esm2020/lib/http/http-events.interceptor.mjs +3 -0
  20. package/esm2020/lib/http/http-request.class.mjs +2 -0
  21. package/esm2020/lib/http/http-result.class.mjs +21 -0
  22. package/esm2020/lib/http/http.module.mjs +37 -0
  23. package/esm2020/lib/http/http.service.mjs +145 -0
  24. package/esm2020/lib/locale/en.json +253 -0
  25. package/esm2020/lib/locale/fa.json +242 -0
  26. package/esm2020/lib/pipe/datetime.pipe.mjs +25 -0
  27. package/esm2020/lib/pipe/htmlToText.pipe.mjs +25 -0
  28. package/esm2020/lib/services/config.mjs +29 -0
  29. package/esm2020/lib/services/event.service.mjs +36 -0
  30. package/esm2020/lib/services/navigator.service.mjs +10 -0
  31. package/esm2020/lib/services/storage.service.mjs +16 -0
  32. package/esm2020/lib/translator/translator.mjs +26 -0
  33. package/esm2020/lib/translator/translator.module.mjs +25 -0
  34. package/esm2020/lib/translator/translator.pipe.mjs +24 -0
  35. package/esm2020/lib/translator/translator.service.mjs +21 -0
  36. package/esm2020/lib/utils/array/array-util.mjs +133 -0
  37. package/esm2020/lib/utils/html/html-util.mjs +192 -0
  38. package/esm2020/lib/utils/html/html.module.mjs +19 -0
  39. package/esm2020/lib/utils/math/math-util.mjs +6 -0
  40. package/esm2020/lib/utils/object/object-util.mjs +83 -0
  41. package/esm2020/lib/utils/render/on-demand-preload-strategy.service.mjs +21 -0
  42. package/esm2020/lib/utils/render/render.service.mjs +103 -0
  43. package/esm2020/lib/utils/render/rendering.module.mjs +35 -0
  44. package/esm2020/lib/utils/scroll/scroll.directive.mjs +54 -0
  45. package/esm2020/lib/utils/scroll/scroll.module.mjs +19 -0
  46. package/esm2020/lib/utils/separator/separator.module.mjs +19 -0
  47. package/esm2020/lib/utils/separator/separator.pipe.mjs +33 -0
  48. package/esm2020/public-api.mjs +43 -0
  49. package/fesm2015/acorex-core.mjs +2123 -0
  50. package/fesm2015/acorex-core.mjs.map +1 -0
  51. package/fesm2020/acorex-core.mjs +2119 -0
  52. package/fesm2020/acorex-core.mjs.map +1 -0
  53. package/lib/classes/base-page.class.d.ts +13 -0
  54. package/lib/classes/color.class.d.ts +17 -0
  55. package/lib/classes/datetime.class.d.ts +63 -0
  56. package/lib/classes/menu.class.d.ts +34 -0
  57. package/lib/classes/navigator.class.d.ts +5 -0
  58. package/lib/classes/popup.class.d.ts +12 -0
  59. package/lib/classes/promise.class.d.ts +7 -0
  60. package/lib/classes/sectionlist.class.d.ts +8 -0
  61. package/lib/classes/select.class.d.ts +7 -0
  62. package/lib/core.module.d.ts +9 -0
  63. package/lib/error/error.class.d.ts +4 -0
  64. package/lib/error/error.module.d.ts +7 -0
  65. package/lib/error/error.service.d.ts +13 -0
  66. package/lib/events/keyboard.d.ts +2 -0
  67. package/lib/http/http-error.class.d.ts +7 -0
  68. package/lib/http/http-events.interceptor.d.ts +10 -0
  69. package/lib/http/http-request.class.d.ts +14 -0
  70. package/lib/http/http-result.class.d.ts +11 -0
  71. package/lib/http/http.module.d.ts +10 -0
  72. package/lib/http/http.service.d.ts +23 -0
  73. package/lib/pipe/datetime.pipe.d.ts +8 -0
  74. package/lib/pipe/htmlToText.pipe.d.ts +7 -0
  75. package/lib/{config/configs.d.ts → services/config.d.ts} +1 -1
  76. package/lib/services/event.service.d.ts +9 -0
  77. package/lib/services/navigator.service.d.ts +8 -0
  78. package/lib/services/storage.service.d.ts +7 -0
  79. package/lib/{translation → translator}/translator.d.ts +0 -0
  80. package/lib/translator/translator.module.d.ts +8 -0
  81. package/lib/translator/translator.pipe.d.ts +8 -0
  82. package/lib/translator/translator.service.d.ts +8 -0
  83. package/lib/utils/array/array-util.d.ts +6 -0
  84. package/lib/utils/html/html-util.d.ts +62 -0
  85. package/lib/utils/html/html.module.d.ts +8 -0
  86. package/lib/utils/math/math-util.d.ts +3 -0
  87. package/lib/utils/object/object-util.d.ts +7 -0
  88. package/lib/utils/render/on-demand-preload-strategy.service.d.ts +10 -0
  89. package/lib/utils/render/render.service.d.ts +18 -0
  90. package/lib/utils/render/rendering.module.d.ts +8 -0
  91. package/lib/utils/scroll/scroll.directive.d.ts +18 -0
  92. package/lib/utils/scroll/scroll.module.d.ts +8 -0
  93. package/lib/utils/separator/separator.module.d.ts +8 -0
  94. package/lib/utils/separator/separator.pipe.d.ts +8 -0
  95. package/package.json +24 -12
  96. package/public-api.d.ts +42 -4
  97. package/acorex-core.metadata.json +0 -1
  98. package/bundles/acorex-core.umd.js +0 -678
  99. package/bundles/acorex-core.umd.js.map +0 -1
  100. package/bundles/acorex-core.umd.min.js +0 -2
  101. package/bundles/acorex-core.umd.min.js.map +0 -1
  102. package/esm2015/lib/config/configs.js +0 -29
  103. package/esm2015/lib/dateTime/datetime.class.js +0 -226
  104. package/esm2015/lib/dateTime/datetime.module.js +0 -13
  105. package/esm2015/lib/dateTime/datetime.pipe.js +0 -22
  106. package/esm2015/lib/dateTime/georgian.calendar.js +0 -145
  107. package/esm2015/lib/dateTime/index.js +0 -5
  108. package/esm2015/lib/translation/index.js +0 -4
  109. package/esm2015/lib/translation/translation.module.js +0 -13
  110. package/esm2015/lib/translation/translator.js +0 -26
  111. package/esm2015/lib/translation/translator.pipe.js +0 -11
  112. package/esm2015/lib/utils/object-util.js +0 -83
  113. package/esm2015/public-api.js +0 -5
  114. package/fesm2015/acorex-core.js +0 -563
  115. package/fesm2015/acorex-core.js.map +0 -1
  116. package/lib/dateTime/datetime.class.d.ts +0 -83
  117. package/lib/dateTime/datetime.module.d.ts +0 -2
  118. package/lib/dateTime/datetime.pipe.d.ts +0 -5
  119. package/lib/dateTime/georgian.calendar.d.ts +0 -17
  120. package/lib/dateTime/index.d.ts +0 -4
  121. package/lib/translation/index.d.ts +0 -3
  122. package/lib/translation/translation.module.d.ts +0 -2
  123. package/lib/translation/translator.pipe.d.ts +0 -4
  124. package/lib/utils/object-util.d.ts +0 -7
@@ -1,563 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- import { Pipe, NgModule } from '@angular/core';
3
- import merge from 'lodash-es/merge';
4
-
5
- // @dynamic
6
- class AXObjectUtil {
7
- static deepJSONClone(obj) {
8
- return obj ? JSON.parse(JSON.stringify(obj)) : null;
9
- }
10
- static deepCopy(obj) {
11
- let copy;
12
- // Handle the 3 simple types, and null or undefined
13
- if (null == obj || 'object' !== typeof obj) {
14
- return obj;
15
- }
16
- // Handle Date
17
- if (obj instanceof Date) {
18
- copy = new Date();
19
- copy.setTime(obj.getTime());
20
- return copy;
21
- }
22
- // Handle Array
23
- if (obj instanceof Array) {
24
- copy = [];
25
- for (let i = 0, len = obj.length; i < len; i++) {
26
- copy[i] = AXObjectUtil.deepCopy(obj[i]);
27
- }
28
- return copy;
29
- }
30
- // Handle Object
31
- if (obj instanceof Object) {
32
- copy = {};
33
- for (const attr in obj) {
34
- if (obj.hasOwnProperty(attr)) {
35
- copy[attr] = AXObjectUtil.deepCopy(obj[attr]);
36
- }
37
- }
38
- return copy;
39
- }
40
- throw new Error('Unable to copy obj! Its type isn\'t supported.');
41
- }
42
- static fetchProp(obj, prop) {
43
- if (typeof obj === 'undefined') {
44
- return false;
45
- }
46
- const index = prop.indexOf('.');
47
- if (index > -1) {
48
- return AXObjectUtil.fetchProp(obj[prop.substring(0, index)], prop.substr(index + 1));
49
- }
50
- return obj[prop];
51
- }
52
- static getPropByPath(obj, path, defaultVal) {
53
- path = path
54
- .replace(/\[/g, '.')
55
- .replace(/]/g, '')
56
- .split('.');
57
- path.forEach((level) => {
58
- if (obj) {
59
- obj = obj[level];
60
- }
61
- });
62
- if (obj === undefined) {
63
- return defaultVal;
64
- }
65
- return obj;
66
- }
67
- static setPropByPath(obj, path, value) {
68
- if (Object(obj) !== obj) {
69
- return obj;
70
- } // When obj is not an object
71
- // If not yet an array, get the keys from the string-path
72
- if (!Array.isArray(path)) {
73
- path = path.toString().match(/[^.[\]]+/g) || [];
74
- }
75
- path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one
76
- Object(a[c]) === a[c] // Does the key exist and is its value an object?
77
- // Yes: then follow that path
78
- ? a[c]
79
- // No: create the key. Is the next key a potential array-index?
80
- : a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]
81
- ? [] // Yes: assign a new array object
82
- : {}, // No: assign a new plain object
83
- obj)[path[path.length - 1]] = value; // Finally assign the value to the last key
84
- return obj; // Return the top-level object to allow chaining
85
- }
86
- }
87
-
88
- // @dynamic
89
- class AXConfig {
90
- static get onChange() {
91
- return AXConfig.dataChangeSubject.asObservable();
92
- }
93
- static set(arg1, arg2) {
94
- if (arg1 && typeof arg1 == 'string') {
95
- AXObjectUtil.setPropByPath(AXConfig.dataModel, arg1, arg2);
96
- AXConfig.dataChangeSubject.next(AXConfig.dataModel);
97
- return;
98
- }
99
- if (arg1 && typeof arg1 == 'object') {
100
- Object.assign(AXConfig.dataModel, arg1);
101
- AXConfig.dataChangeSubject.next(AXConfig.dataModel);
102
- return;
103
- }
104
- if (!arg1 && !arg2) {
105
- return AXConfig.dataChangeSubject.asObservable();
106
- }
107
- }
108
- static get(path, defaultValue) {
109
- return AXObjectUtil.getPropByPath(AXConfig.dataModel, path) || defaultValue;
110
- }
111
- }
112
- AXConfig.dataModel = {};
113
- AXConfig.dataChangeSubject = new Subject();
114
-
115
- const AX_CALENDARS = [
116
- {
117
- name: 'gregorian',
118
- type: 'GeorgianCalendar'
119
- },
120
- {
121
- name: 'jalali',
122
- type: 'JalaliCalendar'
123
- }
124
- ];
125
- // @dynamic
126
- class AXDateTime {
127
- constructor(value = new Date(), calendar = AXConfig.get('dateTime.type') || 'gregorian') {
128
- this._calendar =
129
- typeof calendar == 'string'
130
- ? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)
131
- : calendar;
132
- if (value instanceof Date) {
133
- this._date = value;
134
- }
135
- else {
136
- this._date = new Date(value);
137
- }
138
- }
139
- static convert(value, calendar = AXConfig.get('dateTime.type') || 'gregorian') {
140
- let date;
141
- if (typeof value === 'string' || value instanceof String) {
142
- date = new AXDateTime(value, calendar);
143
- }
144
- else if (value instanceof Date) {
145
- date = new AXDateTime(value, calendar);
146
- }
147
- else if (value instanceof AXDateTime) {
148
- date = new AXDateTime(value.date, calendar);
149
- }
150
- return date;
151
- }
152
- get date() {
153
- return this._date;
154
- }
155
- get calendar() {
156
- return this._calendar;
157
- }
158
- clone() {
159
- return new AXDateTime(this.date, this.calendar.name());
160
- }
161
- get dayInMonth() {
162
- return this._calendar.dayInMonth(this.date);
163
- }
164
- get dayOfYear() {
165
- return this._calendar.dayOfYear(this.date);
166
- }
167
- get dayInWeek() {
168
- return this._calendar.dayInWeek(this.date);
169
- }
170
- get hour() {
171
- return this._date.getHours();
172
- }
173
- get minute() {
174
- return this._date.getMinutes();
175
- }
176
- get second() {
177
- return this._date.getSeconds();
178
- }
179
- get year() {
180
- return this._calendar.year(this.date);
181
- }
182
- get monthOfYear() {
183
- return this._calendar.monthOfYear(this.date);
184
- }
185
- get month() {
186
- return new AXCalendarMonth(this);
187
- }
188
- add(unit, amount) {
189
- return this._calendar.add(this.date, unit, amount);
190
- }
191
- set(unit = 'day', value) {
192
- return this._calendar.set(this.date, unit, value);
193
- }
194
- duration(end, unit = 'day') {
195
- const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));
196
- return range.duration();
197
- }
198
- startOf(unit = 'day') {
199
- return this._calendar.startOf(this.date, unit);
200
- }
201
- endOf(unit = 'day') {
202
- return this._calendar.endOf(this.date, unit);
203
- }
204
- format(format = AXConfig.get('dateTime.shortDateFormat') ||
205
- 'DDD, dd MMM yyyy') {
206
- format = format.replace('ss', this.pad(this.date.getSeconds(), 2));
207
- format = format.replace('s', this.date.getSeconds().toString());
208
- format = format.replace('dd', this.pad(this.calendar.dayInMonth(this.date), 2));
209
- format = format.replace('d', this.calendar.dayInMonth(this.date).toString());
210
- format = format.replace('mm', this.pad(this.date.getMinutes(), 2));
211
- format = format.replace('m', this.date.getMinutes().toString());
212
- format = format.replace('MMMM', this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]);
213
- format = format.replace('MMM', this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]);
214
- format = format.replace('MM', this.pad(this.calendar.monthOfYear(this.date), 2));
215
- format = format.replace(/M(?![ao])/, this.calendar.monthOfYear(this.date).toString());
216
- format = format.replace('DDDD', this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1]);
217
- format = format.replace('DDD', this.calendar.dayShortNames[this.calendar.dayInWeek(this.date) - 1]);
218
- format = format.replace(/D(?!e)/, this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1].substring(0, 3));
219
- format = format.replace('yyyy', this.calendar.year(this.date).toString());
220
- format = format.replace('YYYY', this.calendar.year(this.date).toString());
221
- format = format.replace('yy', this.calendar.year(this.date).toString().substring(2));
222
- format = format.replace('YY', this.calendar.year(this.date).toString().substring(2));
223
- format = format.replace('HH', this.pad(this.date.getHours(), 2));
224
- format = format.replace('H', this.date.getHours().toString());
225
- return format;
226
- }
227
- pad(n, width, z = '0') {
228
- n = n + '';
229
- return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
230
- }
231
- toString() {
232
- return this.format();
233
- }
234
- equal(value, unit = 'day') {
235
- return this.compaire(value, unit) == 0;
236
- }
237
- compaire(value, unit = 'day') {
238
- // TODO:
239
- const val = AXDateTime.convert(value);
240
- if (this.date == val.date) {
241
- return 0;
242
- }
243
- else if (this.date > val.date) {
244
- return 1;
245
- }
246
- else {
247
- return -1;
248
- }
249
- }
250
- convert(calendar) {
251
- return AXDateTime.convert(this, calendar);
252
- }
253
- }
254
- class AXCalendarMonth {
255
- constructor(date) {
256
- this.index = date.date.getMonth();
257
- this.name = date.format('MMMM');
258
- this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));
259
- }
260
- get range() {
261
- return this._range;
262
- }
263
- set range(v) {
264
- this._range = v;
265
- }
266
- }
267
- class AXDateTimeRange {
268
- constructor(startTime, endTime) {
269
- this.startTime = startTime;
270
- this.endTime = endTime;
271
- }
272
- duration() {
273
- const result = {
274
- miliseconds: 0,
275
- seconds: 0,
276
- minutes: 0,
277
- hours: 0,
278
- days: 0,
279
- months: 0,
280
- years: 0,
281
- total: {
282
- miliseconds: 0,
283
- seconds: 0,
284
- minutes: 0,
285
- hours: 0,
286
- days: 0,
287
- weeks: 0,
288
- months: 0,
289
- years: 0,
290
- },
291
- };
292
- const one_second = 1000;
293
- const one_min = one_second * 60;
294
- const one_hour = one_min * 60;
295
- const one_day = one_hour * 24;
296
- const one_week = one_day * 7;
297
- const one_year = 365.25 * one_day;
298
- const one_month = one_year / 12;
299
- const startTime = this.startTime.date.getTime();
300
- const endTime = this.endTime.date.getTime();
301
- const diff = Math.abs(endTime - startTime);
302
- //
303
- result.total.miliseconds = diff;
304
- result.total.seconds = Number((diff / one_second).toFixed(2));
305
- result.total.minutes = Number((diff / one_min).toFixed(2));
306
- result.total.hours = Number((diff / one_hour).toFixed(2));
307
- result.total.days = Number((diff / one_day).toFixed(2));
308
- result.total.weeks = Number((diff / one_week).toFixed(2));
309
- //
310
- // let months = (this.endTime.year - this.startTime.year) * 12;
311
- // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;
312
- // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {
313
- // months--;
314
- // }
315
- // result.total.months = Math.abs(months);
316
- // TODO: review
317
- result.total.months = Number((diff / one_month).toFixed(2));
318
- result.total.years = Number((diff / one_year).toFixed(2));
319
- //
320
- result.miliseconds = result.total.miliseconds % 1000;
321
- result.seconds = Number((result.total.seconds % 60).toFixed(0));
322
- result.minutes = Number((result.total.minutes % 60).toFixed(0));
323
- result.hours = Number((result.total.hours % 24).toFixed(0));
324
- // TODO: review
325
- result.days = Number((result.total.days % 30.4).toFixed(0));
326
- result.months = Number((result.total.months % 12).toFixed(0));
327
- result.years = Number(result.total.years.toFixed(0));
328
- return result;
329
- }
330
- enumurate(unit = 'day') {
331
- // TODO: ??
332
- return [];
333
- }
334
- includes(value, unit = 'day') {
335
- // TODO: ??
336
- return true;
337
- }
338
- }
339
-
340
- class AXDateTimePipe {
341
- constructor() { }
342
- transform(value, format, calendar) {
343
- if (value == null) {
344
- return '';
345
- }
346
- const date = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);
347
- if (!format) {
348
- return date.toString();
349
- }
350
- else {
351
- return date.format(format);
352
- }
353
- }
354
- }
355
- AXDateTimePipe.decorators = [
356
- { type: Pipe, args: [{ name: 'axDate' },] }
357
- ];
358
- AXDateTimePipe.ctorParameters = () => [];
359
-
360
- class AXDateTimeModule {
361
- }
362
- AXDateTimeModule.decorators = [
363
- { type: NgModule, args: [{
364
- imports: [],
365
- exports: [AXDateTimePipe],
366
- declarations: [AXDateTimePipe],
367
- providers: [],
368
- },] }
369
- ];
370
-
371
- class GeorgianCalendar {
372
- constructor() {
373
- this.monthNames = [
374
- "January", "February", "March",
375
- "April", "May", "June", "July",
376
- "August", "September", "October",
377
- "November", "December"
378
- ];
379
- this.monthShortNames = [
380
- "Jan", "Feb", "Mar",
381
- "Apr", "May", "Jun", "Jul",
382
- "Aug", "Sep", "Oct",
383
- "Nov", "Dec"
384
- ];
385
- this.dayNames = [
386
- "Sunday", "Monday", "Tuesday", "Wednesday",
387
- "Thursday", "Friday", "Saturday"
388
- ];
389
- this.dayShortNames = [
390
- "Sun", "Mon", "Tue", "Wed",
391
- "Thu", "Fri", "Sat"
392
- ];
393
- }
394
- name() {
395
- return 'gregorian';
396
- }
397
- dayInMonth(date) {
398
- return date.getDate();
399
- }
400
- dayOfYear(date) {
401
- const start = +new Date(date.getFullYear(), 0, 0);
402
- const diff = +date - start;
403
- const oneDay = 1000 * 60 * 60 * 24;
404
- return Math.floor(diff / oneDay);
405
- }
406
- dayInWeek(date) {
407
- return date.getDay() + 1;
408
- }
409
- year(date) {
410
- return date.getFullYear();
411
- }
412
- monthOfYear(date) {
413
- return date.getMonth() + 1;
414
- }
415
- add(date, unit, amount) {
416
- let value = date.valueOf();
417
- switch (unit) {
418
- case 'second':
419
- value += 1000 * amount;
420
- break;
421
- case 'minute':
422
- value += 60000 * amount;
423
- break;
424
- case 'hour':
425
- value += 3600000 * amount;
426
- break;
427
- case 'month':
428
- const v = new Date(value);
429
- var mo = date.getMonth();
430
- var yr = date.getFullYear();
431
- mo = (mo + amount) % 12;
432
- if (0 > mo) {
433
- yr += (date.getMonth() + amount - mo - 12) / 12;
434
- mo += 12;
435
- }
436
- else
437
- yr += ((date.getMonth() + amount - mo) / 12);
438
- v.setMonth(mo);
439
- v.setFullYear(yr);
440
- value = v.valueOf();
441
- break;
442
- case 'week':
443
- value += 7 * 86400000 * amount;
444
- break;
445
- case 'year':
446
- const yv = new Date(value);
447
- yv.setFullYear(yv.getFullYear() + amount);
448
- value = v.valueOf();
449
- break;
450
- case 'day':
451
- default:
452
- value += 86400000 * amount;
453
- }
454
- return new AXDateTime(new Date(value), this.name());
455
- }
456
- set(date, unit, value) {
457
- throw new Error("Method not implemented.");
458
- }
459
- startOf(date, unit) {
460
- const clone = new Date(date.valueOf());
461
- switch (unit) {
462
- case 'second':
463
- clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
464
- return new AXDateTime(clone, this.name());
465
- case 'minute':
466
- clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
467
- return new AXDateTime(clone, this.name());
468
- case 'hour':
469
- clone.setHours(clone.getHours(), 0, 0, 0);
470
- return new AXDateTime(clone, this.name());
471
- default:
472
- case 'day':
473
- clone.setHours(0, 0, 0, 0);
474
- return new AXDateTime(clone, this.name());
475
- case "week":
476
- const diff = clone.getDate() - clone.getDay() + (clone.getDay() === 0 ? -6 : 1);
477
- clone.setDate(diff);
478
- return new AXDateTime(clone, this.name()).startOf('day');
479
- case "month":
480
- clone.setDate(1);
481
- return new AXDateTime(clone, this.name()).startOf('day');
482
- case "year":
483
- clone.setMonth(0);
484
- clone.setDate(1);
485
- return new AXDateTime(clone, this.name()).startOf('day');
486
- }
487
- }
488
- endOf(date, unit) {
489
- const clone = new Date(date.valueOf());
490
- switch (unit) {
491
- case 'second':
492
- clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
493
- return new AXDateTime(clone, this.name());
494
- case 'minute':
495
- clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
496
- return new AXDateTime(clone, this.name());
497
- case 'hour':
498
- clone.setHours(clone.getHours(), 59, 59, 999);
499
- return new AXDateTime(clone, this.name());
500
- default:
501
- case 'day':
502
- clone.setHours(23, 59, 59, 999);
503
- return new AXDateTime(clone, this.name());
504
- case 'week':
505
- return this.startOf(date, 'week').add('day', 6).endOf('day');
506
- case 'month':
507
- return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');
508
- case "year":
509
- clone.setMonth(11);
510
- return new AXDateTime(clone, this.name()).endOf('month');
511
- }
512
- }
513
- }
514
-
515
- // @dynamic
516
- class AXTranslator {
517
- static get onChange() {
518
- return AXTranslator.dataChangeSubject.asObservable();
519
- }
520
- static load(lang, value) {
521
- if (typeof value === 'object') {
522
- if (!AXTranslator[`__data__${lang}`]) {
523
- AXTranslator[`__data__${lang}`] = {};
524
- }
525
- AXTranslator[`__data__${lang}`] = merge(AXTranslator[`__data__${lang}`], value);
526
- }
527
- }
528
- static use(lang) {
529
- AXTranslator.lang = lang;
530
- }
531
- static get(key, lang) {
532
- return AXObjectUtil.getPropByPath(AXTranslator[`__data__${lang || AXTranslator.lang}`], key) || key;
533
- }
534
- }
535
- AXTranslator.lang = 'en';
536
- AXTranslator.dataChangeSubject = new Subject();
537
-
538
- class AXTranslatorPipe {
539
- transform(value, lang) {
540
- return AXTranslator.get(value, lang);
541
- }
542
- }
543
- AXTranslatorPipe.decorators = [
544
- { type: Pipe, args: [{ name: 'trans', pure: true },] }
545
- ];
546
-
547
- class AXTranslationModule {
548
- }
549
- AXTranslationModule.decorators = [
550
- { type: NgModule, args: [{
551
- imports: [],
552
- exports: [AXTranslatorPipe],
553
- declarations: [AXTranslatorPipe],
554
- providers: [],
555
- },] }
556
- ];
557
-
558
- /**
559
- * Generated bundle index. Do not edit.
560
- */
561
-
562
- export { AXCalendarMonth, AXConfig, AXDateTime, AXDateTimeModule, AXDateTimePipe, AXDateTimeRange, AXObjectUtil, AXTranslationModule, AXTranslator, AXTranslatorPipe, AX_CALENDARS, GeorgianCalendar };
563
- //# sourceMappingURL=acorex-core.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-core.js","sources":["../../projects/acorex/core/src/lib/utils/object-util.ts","../../projects/acorex/core/src/lib/config/configs.ts","../../projects/acorex/core/src/lib/dateTime/datetime.class.ts","../../projects/acorex/core/src/lib/dateTime/datetime.pipe.ts","../../projects/acorex/core/src/lib/dateTime/datetime.module.ts","../../projects/acorex/core/src/lib/dateTime/georgian.calendar.ts","../../projects/acorex/core/src/lib/translation/translator.ts","../../projects/acorex/core/src/lib/translation/translator.pipe.ts","../../projects/acorex/core/src/lib/translation/translation.module.ts","../../../../projects/acorex/core/src/acorex-core.ts"],"sourcesContent":["// @dynamic\r\nexport class AXObjectUtil {\r\n static deepJSONClone(obj: any): any {\r\n return obj ? JSON.parse(JSON.stringify(obj)) : null;\r\n }\r\n\r\n static deepCopy(obj) {\r\n let copy;\r\n // Handle the 3 simple types, and null or undefined\r\n if (null == obj || 'object' !== typeof obj) { return obj; }\r\n // Handle Date\r\n if (obj instanceof Date) {\r\n copy = new Date();\r\n copy.setTime(obj.getTime());\r\n return copy;\r\n }\r\n // Handle Array\r\n if (obj instanceof Array) {\r\n copy = [];\r\n for (let i = 0, len = obj.length; i < len; i++) {\r\n copy[i] = AXObjectUtil.deepCopy(obj[i]);\r\n }\r\n return copy;\r\n }\r\n // Handle Object\r\n if (obj instanceof Object) {\r\n copy = {};\r\n for (const attr in obj) {\r\n if (obj.hasOwnProperty(attr)) { copy[attr] = AXObjectUtil.deepCopy(obj[attr]); }\r\n }\r\n return copy;\r\n }\r\n throw new Error('Unable to copy obj! Its type isn\\'t supported.');\r\n }\r\n\r\n static fetchProp(obj, prop: string) {\r\n if (typeof obj === 'undefined') {\r\n return false;\r\n }\r\n const index = prop.indexOf('.');\r\n\r\n if (index > -1) {\r\n return AXObjectUtil.fetchProp(obj[prop.substring(0, index)], prop.substr(index + 1));\r\n }\r\n\r\n return obj[prop];\r\n }\r\n\r\n static getPropByPath(obj, path, defaultVal?) {\r\n path = path\r\n .replace(/\\[/g, '.')\r\n .replace(/]/g, '')\r\n .split('.');\r\n\r\n path.forEach((level) => {\r\n if (obj) {\r\n obj = obj[level];\r\n }\r\n });\r\n\r\n if (obj === undefined) {\r\n return defaultVal;\r\n }\r\n return obj;\r\n }\r\n\r\n static setPropByPath(obj, path, value) {\r\n if (Object(obj) !== obj) { return obj; } // When obj is not an object\r\n // If not yet an array, get the keys from the string-path\r\n if (!Array.isArray(path)) { path = path.toString().match(/[^.[\\]]+/g) || []; }\r\n path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one\r\n Object(a[c]) === a[c] // Does the key exist and is its value an object?\r\n // Yes: then follow that path\r\n ? a[c]\r\n // No: create the key. Is the next key a potential array-index?\r\n : a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]\r\n ? [] // Yes: assign a new array object\r\n : {}, // No: assign a new plain object\r\n obj)[path[path.length - 1]] = value; // Finally assign the value to the last key\r\n return obj; // Return the top-level object to allow chaining\r\n }\r\n}","import { Subject, Observable } from 'rxjs';\r\nimport { AXObjectUtil } from '../utils/object-util';\r\n\r\n// @dynamic\r\nexport class AXConfig {\r\n private static dataModel: any = {};\r\n private static dataChangeSubject = new Subject<any>();\r\n\r\n\r\n static get onChange(): Observable<any> {\r\n return AXConfig.dataChangeSubject.asObservable();\r\n }\r\n\r\n static set(config: any): any;\r\n static set(path: string, value?: any): void;\r\n static set(arg1?: any, arg2?: any) {\r\n\r\n if (arg1 && typeof arg1 == 'string') {\r\n AXObjectUtil.setPropByPath(AXConfig.dataModel, arg1, arg2);\r\n AXConfig.dataChangeSubject.next(AXConfig.dataModel);\r\n return;\r\n }\r\n if (arg1 && typeof arg1 == 'object') {\r\n Object.assign(AXConfig.dataModel, arg1);\r\n AXConfig.dataChangeSubject.next(AXConfig.dataModel);\r\n return;\r\n }\r\n if (!arg1 && !arg2) {\r\n return AXConfig.dataChangeSubject.asObservable();\r\n }\r\n }\r\n\r\n static get(path: string, defaultValue?: any): any {\r\n return AXObjectUtil.getPropByPath(AXConfig.dataModel, path) || defaultValue;\r\n }\r\n}","import { AXConfig } from '../config/configs';\r\n\r\n\r\nexport const AX_CALENDARS: any[] = [\r\n {\r\n name: 'gregorian',\r\n type: 'GeorgianCalendar'\r\n },\r\n {\r\n name: 'jalali',\r\n type: 'JalaliCalendar'\r\n }\r\n];\r\nexport type TimeUnit =\r\n | 'second'\r\n | 'minute'\r\n | 'hour'\r\n | 'day'\r\n | 'month'\r\n | 'year'\r\n | 'week';\r\n\r\nexport interface AXCalendar {\r\n monthNames: string[];\r\n\r\n monthShortNames: string[];\r\n\r\n dayNames: string[];\r\n\r\n dayShortNames: string[];\r\n\r\n name(): string;\r\n\r\n dayInMonth(date: Date): number;\r\n\r\n dayOfYear(date: Date): number;\r\n\r\n dayInWeek(date: Date): number;\r\n\r\n year(date: Date): number;\r\n\r\n monthOfYear(date: Date): number;\r\n\r\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\r\n\r\n set(date: Date, unit: TimeUnit, value: number): AXDateTime;\r\n\r\n startOf(date: Date, unit: TimeUnit): AXDateTime;\r\n\r\n endOf(date: Date, unit: TimeUnit): AXDateTime;\r\n}\r\n\r\n// @dynamic\r\nexport class AXDateTime {\r\n static convert(\r\n value: any,\r\n calendar: string = AXConfig.get('dateTime.type') || 'gregorian'\r\n ): AXDateTime {\r\n let date: AXDateTime;\r\n if (typeof value === 'string' || value instanceof String) {\r\n date = new AXDateTime(value as string, calendar);\r\n } else if (value instanceof Date) {\r\n date = new AXDateTime(value as Date, calendar);\r\n } else if (value instanceof AXDateTime) {\r\n date = new AXDateTime(value.date, calendar);\r\n }\r\n return date;\r\n }\r\n\r\n private _date: Date;\r\n get date(): Date {\r\n return this._date;\r\n }\r\n\r\n private _calendar: AXCalendar;\r\n get calendar(): AXCalendar {\r\n return this._calendar;\r\n }\r\n\r\n constructor(\r\n value: Date | string = new Date(),\r\n calendar: string | AXCalendar = AXConfig.get('dateTime.type') || 'gregorian'\r\n ) {\r\n this._calendar =\r\n typeof calendar == 'string'\r\n ? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)\r\n : calendar;\r\n if (value instanceof Date) {\r\n this._date = value as Date;\r\n } else {\r\n this._date = new Date(value);\r\n }\r\n }\r\n\r\n clone(): AXDateTime {\r\n return new AXDateTime(this.date, this.calendar.name());\r\n }\r\n\r\n get dayInMonth(): number {\r\n return this._calendar.dayInMonth(this.date);\r\n }\r\n\r\n get dayOfYear(): number {\r\n return this._calendar.dayOfYear(this.date);\r\n }\r\n\r\n get dayInWeek(): number {\r\n return this._calendar.dayInWeek(this.date);\r\n }\r\n\r\n get hour(): number {\r\n return this._date.getHours();\r\n }\r\n\r\n get minute(): number {\r\n return this._date.getMinutes();\r\n }\r\n\r\n get second(): number {\r\n return this._date.getSeconds();\r\n }\r\n\r\n get year(): number {\r\n return this._calendar.year(this.date);\r\n }\r\n\r\n get monthOfYear(): number {\r\n return this._calendar.monthOfYear(this.date);\r\n }\r\n\r\n get month(): AXCalendarMonth {\r\n return new AXCalendarMonth(this);\r\n }\r\n\r\n add(unit: TimeUnit, amount: number): AXDateTime {\r\n return this._calendar.add(this.date, unit, amount);\r\n }\r\n\r\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\r\n return this._calendar.set(this.date, unit, value);\r\n }\r\n\r\n duration(\r\n end: AXDateTime | Date | string,\r\n unit: TimeUnit = 'day'\r\n ): AXTimeSpan {\r\n const range = new AXDateTimeRange(\r\n this,\r\n AXDateTime.convert(end, this.calendar.name())\r\n );\r\n return range.duration();\r\n }\r\n\r\n startOf(unit: TimeUnit = 'day'): AXDateTime {\r\n return this._calendar.startOf(this.date, unit);\r\n }\r\n\r\n endOf(unit: TimeUnit = 'day'): AXDateTime {\r\n return this._calendar.endOf(this.date, unit);\r\n }\r\n\r\n format(\r\n format: string = AXConfig.get('dateTime.shortDateFormat') ||\r\n 'DDD, dd MMM yyyy'\r\n ): string {\r\n format = format.replace('ss', this.pad(this.date.getSeconds(), 2));\r\n format = format.replace('s', this.date.getSeconds().toString());\r\n format = format.replace(\r\n 'dd',\r\n this.pad(this.calendar.dayInMonth(this.date), 2)\r\n );\r\n format = format.replace(\r\n 'd',\r\n this.calendar.dayInMonth(this.date).toString()\r\n );\r\n format = format.replace('mm', this.pad(this.date.getMinutes(), 2));\r\n format = format.replace('m', this.date.getMinutes().toString());\r\n format = format.replace(\r\n 'MMMM',\r\n this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'MMM',\r\n this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'MM',\r\n this.pad(this.calendar.monthOfYear(this.date), 2)\r\n );\r\n format = format.replace(\r\n /M(?![ao])/,\r\n this.calendar.monthOfYear(this.date).toString()\r\n );\r\n format = format.replace(\r\n 'DDDD',\r\n this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'DDD',\r\n this.calendar.dayShortNames[this.calendar.dayInWeek(this.date) - 1]\r\n );\r\n format = format.replace(\r\n /D(?!e)/,\r\n this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1].substring(\r\n 0,\r\n 3\r\n )\r\n );\r\n format = format.replace('yyyy', this.calendar.year(this.date).toString());\r\n format = format.replace('YYYY', this.calendar.year(this.date).toString());\r\n format = format.replace(\r\n 'yy',\r\n this.calendar.year(this.date).toString().substring(2)\r\n );\r\n format = format.replace(\r\n 'YY',\r\n this.calendar.year(this.date).toString().substring(2)\r\n );\r\n format = format.replace('HH', this.pad(this.date.getHours(), 2));\r\n format = format.replace('H', this.date.getHours().toString());\r\n return format;\r\n }\r\n\r\n private pad(n, width, z = '0') {\r\n n = n + '';\r\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\r\n }\r\n\r\n toString(): string {\r\n return this.format();\r\n }\r\n\r\n equal(value: any, unit: TimeUnit = 'day') {\r\n return this.compaire(value, unit) == 0;\r\n }\r\n\r\n compaire(value: any, unit: TimeUnit = 'day') {\r\n // TODO:\r\n const val = AXDateTime.convert(value);\r\n if (this.date == val.date) {\r\n return 0;\r\n } else if (this.date > val.date) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n convert(calendar: string) {\r\n return AXDateTime.convert(this, calendar);\r\n }\r\n}\r\n\r\nexport class AXCalendarMonth {\r\n private _range: AXDateTimeRange;\r\n public get range(): AXDateTimeRange {\r\n return this._range;\r\n }\r\n public set range(v: AXDateTimeRange) {\r\n this._range = v;\r\n }\r\n\r\n constructor(date: AXDateTime) {\r\n this.index = date.date.getMonth();\r\n this.name = date.format('MMMM');\r\n this.range = new AXDateTimeRange(\r\n new AXDateTime(date.startOf('month').date, date.calendar),\r\n new AXDateTime(date.endOf('month').date, date.calendar)\r\n );\r\n }\r\n\r\n private readonly index: number;\r\n private readonly name: string;\r\n}\r\n\r\nexport interface AXTimeSpanTotal {\r\n miliseconds: number;\r\n seconds: number;\r\n minutes: number;\r\n hours: number;\r\n days: number;\r\n weeks: number;\r\n months: number;\r\n years: number;\r\n}\r\n\r\nexport interface AXTimeSpan {\r\n miliseconds: number;\r\n seconds: number;\r\n minutes: number;\r\n hours: number;\r\n days: number;\r\n months: number;\r\n years: number;\r\n total: AXTimeSpanTotal;\r\n}\r\n\r\nexport class AXDateTimeRange {\r\n constructor(public startTime: AXDateTime, public endTime: AXDateTime) {}\r\n\r\n duration(): AXTimeSpan {\r\n const result: AXTimeSpan = {\r\n miliseconds: 0,\r\n seconds: 0,\r\n minutes: 0,\r\n hours: 0,\r\n days: 0,\r\n months: 0,\r\n years: 0,\r\n total: {\r\n miliseconds: 0,\r\n seconds: 0,\r\n minutes: 0,\r\n hours: 0,\r\n days: 0,\r\n weeks: 0,\r\n months: 0,\r\n years: 0,\r\n },\r\n };\r\n\r\n const one_second = 1000;\r\n const one_min = one_second * 60;\r\n const one_hour = one_min * 60;\r\n const one_day = one_hour * 24;\r\n const one_week = one_day * 7;\r\n const one_year = 365.25 * one_day;\r\n const one_month = one_year / 12;\r\n const startTime = this.startTime.date.getTime();\r\n const endTime = this.endTime.date.getTime();\r\n const diff = Math.abs(endTime - startTime);\r\n //\r\n result.total.miliseconds = diff;\r\n result.total.seconds = Number((diff / one_second).toFixed(2));\r\n result.total.minutes = Number((diff / one_min).toFixed(2));\r\n result.total.hours = Number((diff / one_hour).toFixed(2));\r\n result.total.days = Number((diff / one_day).toFixed(2));\r\n result.total.weeks = Number((diff / one_week).toFixed(2));\r\n //\r\n // let months = (this.endTime.year - this.startTime.year) * 12;\r\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\r\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\r\n // months--;\r\n // }\r\n // result.total.months = Math.abs(months);\r\n // TODO: review\r\n result.total.months = Number((diff / one_month).toFixed(2));\r\n result.total.years = Number((diff / one_year).toFixed(2));\r\n //\r\n result.miliseconds = result.total.miliseconds % 1000;\r\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\r\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\r\n result.hours = Number((result.total.hours % 24).toFixed(0));\r\n // TODO: review\r\n result.days = Number((result.total.days % 30.4).toFixed(0));\r\n result.months = Number((result.total.months % 12).toFixed(0));\r\n result.years = Number(result.total.years.toFixed(0));\r\n return result;\r\n }\r\n\r\n enumurate(unit: TimeUnit = 'day'): AXDateTime[] {\r\n // TODO: ??\r\n return [];\r\n }\r\n\r\n includes(value: AXDateTime, unit: TimeUnit = 'day'): boolean {\r\n // TODO: ??\r\n return true;\r\n }\r\n\r\n // getViewCompaire(view) {\r\n // switch (view) {\r\n // case 'day':\r\n // return 'YMD';\r\n // case 'month':\r\n // return 'YM';\r\n // case 'year':\r\n // return 'Y';\r\n // }\r\n // }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\nimport { AXDateTime } from './datetime.class';\r\n\r\n@Pipe({ name: 'axDate' })\r\nexport class AXDateTimePipe implements PipeTransform {\r\n constructor() { }\r\n\r\n transform(value: any, format?: string, calendar?: string): string {\r\n if (value == null) {\r\n return '';\r\n }\r\n const date: AXDateTime = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);\r\n if (!format) {\r\n return date.toString();\r\n }\r\n else {\r\n return date.format(format);\r\n }\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { AXDateTimePipe } from './datetime.pipe';\r\n\r\n\r\n@NgModule({\r\n imports: [],\r\n exports: [AXDateTimePipe],\r\n declarations: [AXDateTimePipe],\r\n providers: [],\r\n})\r\nexport class AXDateTimeModule { }\r\n","import { AXCalendar, AXDateTime, TimeUnit } from \"./datetime.class\";\r\n\r\nexport class GeorgianCalendar implements AXCalendar {\r\n\r\n monthNames = [\r\n \"January\", \"February\", \"March\",\r\n \"April\", \"May\", \"June\", \"July\",\r\n \"August\", \"September\", \"October\",\r\n \"November\", \"December\"\r\n ];\r\n\r\n monthShortNames = [\r\n \"Jan\", \"Feb\", \"Mar\",\r\n \"Apr\", \"May\", \"Jun\", \"Jul\",\r\n \"Aug\", \"Sep\", \"Oct\",\r\n \"Nov\", \"Dec\"\r\n ];\r\n\r\n dayNames = [\r\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\r\n \"Thursday\", \"Friday\", \"Saturday\"\r\n ];\r\n\r\n dayShortNames = [\r\n \"Sun\", \"Mon\", \"Tue\", \"Wed\",\r\n \"Thu\", \"Fri\", \"Sat\"\r\n ];\r\n\r\n name(): string {\r\n return 'gregorian'\r\n }\r\n\r\n dayInMonth(date: Date): number {\r\n return date.getDate();\r\n }\r\n\r\n dayOfYear(date: Date): number {\r\n const start = +new Date(date.getFullYear(), 0, 0);\r\n const diff = +date - start;\r\n const oneDay = 1000 * 60 * 60 * 24;\r\n return Math.floor(diff / oneDay);\r\n }\r\n\r\n dayInWeek(date: Date): number {\r\n return date.getDay() + 1;\r\n }\r\n\r\n year(date: Date): number {\r\n return date.getFullYear();\r\n }\r\n\r\n monthOfYear(date: Date): number {\r\n return date.getMonth() + 1;\r\n }\r\n\r\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\r\n let value = date.valueOf();\r\n switch (unit) {\r\n case 'second':\r\n value += 1000 * amount;\r\n break\r\n case 'minute':\r\n value += 60000 * amount;\r\n break\r\n case 'hour':\r\n value += 3600000 * amount;\r\n break\r\n case 'month':\r\n const v = new Date(value);\r\n var mo = date.getMonth();\r\n var yr = date.getFullYear();\r\n mo = (mo + amount) % 12;\r\n if (0 > mo) {\r\n yr += (date.getMonth() + amount - mo - 12) / 12;\r\n mo += 12;\r\n }\r\n else\r\n yr += ((date.getMonth() + amount - mo) / 12);\r\n v.setMonth(mo);\r\n v.setFullYear(yr);\r\n value = v.valueOf();\r\n break\r\n case 'week':\r\n value += 7 * 86400000 * amount;\r\n break\r\n case 'year':\r\n const yv = new Date(value);\r\n yv.setFullYear(yv.getFullYear() + amount);\r\n value = v.valueOf();\r\n break\r\n case 'day':\r\n default:\r\n value += 86400000 * amount;\r\n }\r\n return new AXDateTime(new Date(value), this.name());\r\n }\r\n\r\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n startOf(date: Date, unit: TimeUnit): AXDateTime {\r\n const clone = new Date(date.valueOf());\r\n switch (unit) {\r\n case 'second':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\r\n return new AXDateTime(clone, this.name());\r\n case 'minute':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n case 'hour':\r\n clone.setHours(clone.getHours(), 0, 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n default:\r\n case 'day':\r\n clone.setHours(0, 0, 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n case \"week\":\r\n const diff = clone.getDate() - clone.getDay() + (clone.getDay() === 0 ? -6 : 1);\r\n clone.setDate(diff)\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n case \"month\":\r\n clone.setDate(1)\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n case \"year\":\r\n clone.setMonth(0);\r\n clone.setDate(1);\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n }\r\n }\r\n\r\n endOf(date: Date, unit: TimeUnit): AXDateTime {\r\n const clone = new Date(date.valueOf());\r\n switch (unit) {\r\n case 'second':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'minute':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'hour':\r\n clone.setHours(clone.getHours(), 59, 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n default:\r\n case 'day':\r\n clone.setHours(23, 59, 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'week':\r\n return this.startOf(date, 'week').add('day', 6).endOf('day');\r\n case 'month':\r\n return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');\r\n case \"year\":\r\n clone.setMonth(11);\r\n return new AXDateTime(clone, this.name()).endOf('month');\r\n }\r\n }\r\n}","import { Subject, Observable } from 'rxjs';\r\nimport merge from 'lodash-es/merge';\r\nimport { AXObjectUtil } from '../utils/object-util';\r\n\r\n// @dynamic\r\nexport class AXTranslator {\r\n private static lang: string = 'en';\r\n private static dataChangeSubject = new Subject<any>();\r\n\r\n\r\n static get onChange(): Observable<any> {\r\n return AXTranslator.dataChangeSubject.asObservable();\r\n }\r\n\r\n public static load(lang: string, value: any) {\r\n if (typeof value === 'object') {\r\n if (!AXTranslator[`__data__${lang}`]) {\r\n AXTranslator[`__data__${lang}`] = {};\r\n }\r\n AXTranslator[`__data__${lang}`] = merge(AXTranslator[`__data__${lang}`], value);\r\n }\r\n }\r\n\r\n public static use(lang: string) {\r\n AXTranslator.lang = lang;\r\n }\r\n\r\n public static get(key: string, lang?: string): string {\r\n return AXObjectUtil.getPropByPath(AXTranslator[`__data__${lang || AXTranslator.lang}`], key) || key;\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { AXTranslator } from './translator';\r\n\r\n@Pipe({ name: 'trans', pure: true })\r\nexport class AXTranslatorPipe implements PipeTransform {\r\n transform(value: string, lang?: string): string {\r\n return AXTranslator.get(value, lang);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AXTranslatorPipe } from './translator.pipe';\r\n\r\n@NgModule({\r\n imports: [],\r\n exports: [AXTranslatorPipe],\r\n declarations: [AXTranslatorPipe],\r\n providers: [],\r\n})\r\nexport class AXTranslationModule {\r\n \r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAAA;MACa,YAAY;IACrB,OAAO,aAAa,CAAC,GAAQ;QACzB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;KACvD;IAED,OAAO,QAAQ,CAAC,GAAG;QACf,IAAI,IAAI,CAAC;;QAET,IAAI,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,CAAC;SAAE;;QAE3D,IAAI,GAAG,YAAY,IAAI,EAAE;YACrB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;SACf;;QAED,IAAI,GAAG,YAAY,KAAK,EAAE;YACtB,IAAI,GAAG,EAAE,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,OAAO,IAAI,CAAC;SACf;;QAED,IAAI,GAAG,YAAY,MAAM,EAAE;YACvB,IAAI,GAAG,EAAE,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;gBACpB,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;iBAAE;aACnF;YACD,OAAO,IAAI,CAAC;SACf;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;KACrE;IAED,OAAO,SAAS,CAAC,GAAG,EAAE,IAAY;QAC9B,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,OAAO,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SACxF;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;KACpB;IAED,OAAO,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAW;QACvC,IAAI,GAAG,IAAI;aACN,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK;YACf,IAAI,GAAG,EAAE;gBACL,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;aACpB;SACJ,CAAC,CAAC;QAEH,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,OAAO,UAAU,CAAC;SACrB;QACD,OAAO,GAAG,CAAC;KACd;IAED,OAAO,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK;QACjC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,CAAC;SAAE;;QAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SAAE;QAC9E,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;cAEf,CAAC,CAAC,CAAC,CAAC;;cAEJ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;kBAC9C,EAAE;kBACF,EAAE;QACZ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxC,OAAO,GAAG,CAAC;KACd;;;AC7EL;MACa,QAAQ;IAKjB,WAAW,QAAQ;QACf,OAAO,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACpD;IAID,OAAO,GAAG,CAAC,IAAU,EAAE,IAAU;QAE7B,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;YACjC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpD,OAAO;SACV;QACD,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpD,OAAO;SACV;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAChB,OAAO,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACpD;KACJ;IAED,OAAO,GAAG,CAAC,IAAY,EAAE,YAAkB;QACvC,OAAO,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC;KAC/E;;AA7Bc,kBAAS,GAAQ,EAAE,CAAC;AACpB,0BAAiB,GAAG,IAAI,OAAO,EAAO;;MCH5C,YAAY,GAAU;IAC/B;QACI,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,kBAAkB;KAC3B;IACD;QACI,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;KACzB;EACH;AAwCF;MACa,UAAU;IA0BrB,YACE,QAAuB,IAAI,IAAI,EAAE,EACjC,WAAgC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,WAAW;QAE5E,IAAI,CAAC,SAAS;YACZ,OAAO,QAAQ,IAAI,QAAQ;kBACvB,IAAI,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;kBAClE,QAAQ,CAAC;QACf,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,IAAI,CAAC,KAAK,GAAG,KAAa,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;SAC9B;KACF;IAtCD,OAAO,OAAO,CACZ,KAAU,EACV,WAAmB,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,WAAW;QAE/D,IAAI,IAAgB,CAAC;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE;YACxD,IAAI,GAAG,IAAI,UAAU,CAAC,KAAe,EAAE,QAAQ,CAAC,CAAC;SAClD;aAAM,IAAI,KAAK,YAAY,IAAI,EAAE;YAChC,IAAI,GAAG,IAAI,UAAU,CAAC,KAAa,EAAE,QAAQ,CAAC,CAAC;SAChD;aAAM,IAAI,KAAK,YAAY,UAAU,EAAE;YACtC,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,CAAC;KACb;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAGD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAiBD,KAAK;QACH,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;KACxD;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7C;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5C;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5C;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;KAChC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;KAChC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,IAAI,KAAK;QACP,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,GAAG,CAAC,IAAc,EAAE,MAAc;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACpD;IAED,GAAG,CAAC,OAAiB,KAAK,EAAE,KAAa;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACnD;IAED,QAAQ,CACN,GAA+B,EAC/B,OAAiB,KAAK;QAEtB,MAAM,KAAK,GAAG,IAAI,eAAe,CAC/B,IAAI,EACJ,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAC9C,CAAC;QACF,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KACzB;IAED,OAAO,CAAC,OAAiB,KAAK;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAChD;IAED,KAAK,CAAC,OAAiB,KAAK;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC9C;IAED,MAAM,CACJ,SAAiB,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACvD,kBAAkB;QAEpB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,EACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACjD,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAC/C,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACnE,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxE,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,EACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAClD,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,WAAW,EACX,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAChD,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/D,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACpE,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACtE,CAAC,EACD,CAAC,CACF,CACF,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACtD,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACtD,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC;KACf;IAEO,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG;QAC3B,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KAC5E;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;KACtB;IAED,KAAK,CAAC,KAAU,EAAE,OAAiB,KAAK;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;IAED,QAAQ,CAAC,KAAU,EAAE,OAAiB,KAAK;;QAEzC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;YACzB,OAAO,CAAC,CAAC;SACV;aAAM,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE;YAC/B,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,CAAC,CAAC,CAAC;SACX;KACF;IAED,OAAO,CAAC,QAAgB;QACtB,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC3C;CACF;MAEY,eAAe;IAS1B,YAAY,IAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACzD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CACxD,CAAC;KACH;IAdD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAW,KAAK,CAAC,CAAkB;QACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACjB;CAaF;MAwBY,eAAe;IAC1B,YAAmB,SAAqB,EAAS,OAAmB;QAAjD,cAAS,GAAT,SAAS,CAAY;QAAS,YAAO,GAAP,OAAO,CAAY;KAAI;IAExE,QAAQ;QACN,MAAM,MAAM,GAAe;YACzB,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;aACT;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,UAAU,GAAG,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAClC,MAAM,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;;QAE3C,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;QAS1D,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;QAE1D,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACrD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;QAE5D,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;IAED,SAAS,CAAC,OAAiB,KAAK;;QAE9B,OAAO,EAAE,CAAC;KACX;IAED,QAAQ,CAAC,KAAiB,EAAE,OAAiB,KAAK;;QAEhD,OAAO,IAAI,CAAC;KACb;;;MC5WU,cAAc;IACvB,iBAAiB;IAEjB,SAAS,CAAC,KAAU,EAAE,MAAe,EAAE,QAAiB;QACpD,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,OAAO,EAAE,CAAC;SACb;QACD,MAAM,IAAI,GAAe,KAAK,YAAY,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC1B;aACI;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC9B;KACJ;;;YAfJ,IAAI,SAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;;;;MCOX,gBAAgB;;;YAN5B,QAAQ,SAAC;gBACN,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,CAAC,cAAc,CAAC;gBACzB,YAAY,EAAE,CAAC,cAAc,CAAC;gBAC9B,SAAS,EAAE,EAAE;aAChB;;;MCPY,gBAAgB;IAA7B;QAEI,eAAU,GAAG;YACT,SAAS,EAAE,UAAU,EAAE,OAAO;YAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9B,QAAQ,EAAE,WAAW,EAAE,SAAS;YAChC,UAAU,EAAE,UAAU;SACzB,CAAC;QAEF,oBAAe,GAAG;YACd,KAAK,EAAE,KAAK,EAAE,KAAK;YACnB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC1B,KAAK,EAAE,KAAK,EAAE,KAAK;YACnB,KAAK,EAAE,KAAK;SACf,CAAC;QAEF,aAAQ,GAAG;YACP,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW;YAC1C,UAAU,EAAE,QAAQ,EAAE,UAAU;SACnC,CAAC;QAEF,kBAAa,GAAG;YACZ,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC1B,KAAK,EAAE,KAAK,EAAE,KAAK;SACtB,CAAC;KAkIL;IAhIG,IAAI;QACA,OAAO,WAAW,CAAA;KACrB;IAED,UAAU,CAAC,IAAU;QACjB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,SAAS,CAAC,IAAU;QAChB,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;KACpC;IAED,SAAS,CAAC,IAAU;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC5B;IAED,IAAI,CAAC,IAAU;QACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;KAC7B;IAED,WAAW,CAAC,IAAU;QAClB,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC9B;IAED,GAAG,CAAC,IAAU,EAAE,IAAc,EAAE,MAAc;QAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,QAAQ,IAAI;YACR,KAAK,QAAQ;gBACT,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC;gBACvB,MAAK;YACT,KAAK,QAAQ;gBACT,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC;gBACxB,MAAK;YACT,KAAK,MAAM;gBACP,KAAK,IAAI,OAAO,GAAG,MAAM,CAAC;gBAC1B,MAAK;YACT,KAAK,OAAO;gBACR,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,EAAE,EAAE;oBACR,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;oBAChD,EAAE,IAAI,EAAE,CAAC;iBACZ;;oBAEG,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAK;YACT,KAAK,MAAM;gBACP,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;gBAC/B,MAAK;YACT,KAAK,MAAM;gBACP,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC;gBAC1C,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAK;YACT,KAAK,KAAK,CAAC;YACX;gBACI,KAAK,IAAI,QAAQ,GAAG,MAAM,CAAC;SAClC;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACvD;IAED,GAAG,CAAC,IAAU,EAAE,IAAc,EAAE,KAAa;QACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC9C;IAED,OAAO,CAAC,IAAU,EAAE,IAAc;QAC9B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,QAAQ,IAAI;YACR,KAAK,QAAQ;gBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC5E,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,QAAQ;gBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACP,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,QAAQ;YACR,KAAK,KAAK;gBACN,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACP,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACnB,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7D,KAAK,OAAO;gBACR,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAChB,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7D,KAAK,MAAM;gBACP,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjB,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAChE;KACJ;IAED,KAAK,CAAC,IAAU,EAAE,IAAc;QAC5B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,QAAQ,IAAI;YACR,KAAK,QAAQ;gBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9E,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,QAAQ;gBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9D,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACP,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,QAAQ;YACR,KAAK,KAAK;gBACN,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChC,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjE,KAAK,OAAO;gBACR,OAAO,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1G,KAAK,MAAM;gBACP,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnB,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAChE;KACJ;;;ACvJL;MACa,YAAY;IAKrB,WAAW,QAAQ;QACf,OAAO,YAAY,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACxD;IAEM,OAAO,IAAI,CAAC,IAAY,EAAE,KAAU;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE;gBAClC,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;aACxC;YACD,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SACnF;KACJ;IAEM,OAAO,GAAG,CAAC,IAAY;QAC1B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;KAC5B;IAEM,OAAO,GAAG,CAAC,GAAW,EAAE,IAAa;QACxC,OAAO,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;KACvG;;AAvBc,iBAAI,GAAW,IAAI,CAAC;AACpB,8BAAiB,GAAG,IAAI,OAAO,EAAO;;MCH5C,gBAAgB;IACzB,SAAS,CAAC,KAAa,EAAE,IAAa;QAClC,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACxC;;;YAJJ,IAAI,SAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;;;MCMtB,mBAAmB;;;YAN/B,QAAQ,SAAC;gBACN,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,YAAY,EAAE,CAAC,gBAAgB,CAAC;gBAChC,SAAS,EAAE,EAAE;aAChB;;;ACRD;;;;;;"}