@acorex/components 18.14.1-next.0 → 18.14.1-next.1
Sign up to get free protection for your applications and to get access to all the features.
- package/calendar/lib/calendar.component.d.ts +16 -5
- package/calendar/lib/calendar.module.d.ts +2 -1
- package/check-box/lib/check-box.component.d.ts +13 -5
- package/cron-job/README.md +3 -0
- package/cron-job/index.d.ts +8 -0
- package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +31 -0
- package/cron-job/lib/cron-job.module.d.ts +25 -0
- package/cron-job/lib/cron-job.service.d.ts +22 -0
- package/cron-job/lib/day/day.component.d.ts +22 -0
- package/cron-job/lib/day/day.model.d.ts +61 -0
- package/cron-job/lib/day/day.service.d.ts +17 -0
- package/cron-job/lib/hours/hours.component.d.ts +14 -0
- package/cron-job/lib/hours/hours.model.d.ts +5 -0
- package/cron-job/lib/hours/hours.service.d.ts +13 -0
- package/cron-job/lib/minutes/minutes.component.d.ts +14 -0
- package/cron-job/lib/minutes/minutes.model.d.ts +5 -0
- package/cron-job/lib/minutes/minutes.service.d.ts +13 -0
- package/cron-job/lib/month/month.component.d.ts +16 -0
- package/cron-job/lib/month/month.model.d.ts +5 -0
- package/cron-job/lib/month/month.service.d.ts +14 -0
- package/cron-job/lib/seconds/seconds.component.d.ts +14 -0
- package/cron-job/lib/seconds/seconds.model.d.ts +5 -0
- package/cron-job/lib/seconds/seconds.service.d.ts +13 -0
- package/cron-job/lib/types/iexpression.d.ts +3 -0
- package/cron-job/lib/types/shared.model.d.ts +37 -0
- package/cron-job/lib/year/year.component.d.ts +15 -0
- package/cron-job/lib/year/year.model.d.ts +16 -0
- package/cron-job/lib/year/year.service.d.ts +12 -0
- package/datetime-input/lib/datetime-input.component.d.ts +9 -0
- package/datetime-picker/lib/datetime-picker.component.d.ts +1 -0
- package/esm2022/calendar/lib/calendar.component.mjs +186 -158
- package/esm2022/calendar/lib/calendar.module.mjs +5 -4
- package/esm2022/check-box/lib/check-box.component.mjs +39 -22
- package/esm2022/cron-job/acorex-components-cron-job.mjs +5 -0
- package/esm2022/cron-job/index.mjs +9 -0
- package/esm2022/cron-job/lib/cron-job-container/cron-job-container.component.mjs +90 -0
- package/esm2022/cron-job/lib/cron-job.module.mjs +80 -0
- package/esm2022/cron-job/lib/cron-job.service.mjs +60 -0
- package/esm2022/cron-job/lib/day/day.component.mjs +61 -0
- package/esm2022/cron-job/lib/day/day.model.mjs +88 -0
- package/esm2022/cron-job/lib/day/day.service.mjs +196 -0
- package/esm2022/cron-job/lib/hours/hours.component.mjs +38 -0
- package/esm2022/cron-job/lib/hours/hours.model.mjs +8 -0
- package/esm2022/cron-job/lib/hours/hours.service.mjs +82 -0
- package/esm2022/cron-job/lib/minutes/minutes.component.mjs +38 -0
- package/esm2022/cron-job/lib/minutes/minutes.model.mjs +8 -0
- package/esm2022/cron-job/lib/minutes/minutes.service.mjs +82 -0
- package/esm2022/cron-job/lib/month/month.component.mjs +47 -0
- package/esm2022/cron-job/lib/month/month.model.mjs +8 -0
- package/esm2022/cron-job/lib/month/month.service.mjs +96 -0
- package/esm2022/cron-job/lib/seconds/seconds.component.mjs +38 -0
- package/esm2022/cron-job/lib/seconds/seconds.model.mjs +8 -0
- package/esm2022/cron-job/lib/seconds/seconds.service.mjs +82 -0
- package/esm2022/cron-job/lib/types/iexpression.mjs +2 -0
- package/esm2022/cron-job/lib/types/shared.model.mjs +49 -0
- package/esm2022/cron-job/lib/year/year.component.mjs +45 -0
- package/esm2022/cron-job/lib/year/year.model.mjs +28 -0
- package/esm2022/cron-job/lib/year/year.service.mjs +82 -0
- package/esm2022/datetime-input/lib/datetime-input.component.mjs +38 -10
- package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +17 -4
- package/esm2022/list/lib/list.component.mjs +3 -3
- package/esm2022/loading/lib/loading.component.mjs +7 -3
- package/esm2022/loading/lib/loading.service.mjs +3 -3
- package/esm2022/radio/lib/radio.component.mjs +3 -3
- package/esm2022/selection-list/lib/selection-list.component.mjs +70 -28
- package/esm2022/text-box/lib/text-box.component.mjs +11 -8
- package/fesm2022/acorex-components-calendar.mjs +187 -159
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +39 -22
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +1191 -0
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -0
- package/fesm2022/acorex-components-datetime-input.mjs +36 -8
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +15 -2
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +2 -2
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +8 -4
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +2 -2
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +69 -27
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +10 -7
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/package.json +7 -1
- package/selection-list/lib/selection-list.component.d.ts +26 -6
- package/text-box/lib/text-box.component.d.ts +2 -2
@@ -0,0 +1,61 @@
|
|
1
|
+
import { afterNextRender, Component, inject, ViewEncapsulation } from '@angular/core';
|
2
|
+
import { DropDownItem } from '../types/shared.model';
|
3
|
+
import { BaseOnMonthType, BaseOnWeekType, DayType } from './day.model';
|
4
|
+
import { DayService } from './day.service';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
import * as i1 from "@acorex/components/decorators";
|
7
|
+
import * as i2 from "@angular/forms";
|
8
|
+
import * as i3 from "@acorex/components/select-box";
|
9
|
+
import * as i4 from "@acorex/components/form";
|
10
|
+
import * as i5 from "@acorex/components/check-box";
|
11
|
+
import * as i6 from "@angular/common";
|
12
|
+
import * as i7 from "@acorex/core/translation";
|
13
|
+
export class AXCronDayComponent {
|
14
|
+
constructor() {
|
15
|
+
this.dayService = inject(DayService);
|
16
|
+
this.boWeekDropDownList = [];
|
17
|
+
this.boMonthDropDownList = [];
|
18
|
+
this.daysIndexInMonth = [1, 2, 3, 4, 5];
|
19
|
+
this.zeroTo30 = [];
|
20
|
+
this.#init = afterNextRender(() => {
|
21
|
+
for (const [i, day] of this.daysList.entries())
|
22
|
+
this.boWeekDropDownList[i] = new DropDownItem(i + 1, day);
|
23
|
+
for (let i = 0; i < 31; i++) {
|
24
|
+
this.zeroTo30[i] = i;
|
25
|
+
this.boMonthDropDownList[i] = new DropDownItem(i + 1, (i + 1).toString());
|
26
|
+
}
|
27
|
+
});
|
28
|
+
}
|
29
|
+
#init;
|
30
|
+
changeHandler(e) {
|
31
|
+
this.dayService.dayModel.baseOnWeek.custom.specific.values = e.component.selectedItems;
|
32
|
+
}
|
33
|
+
changeHandler2(e) {
|
34
|
+
this.dayService.dayModel.baseOnMonth.custom.specific.values = e.component.selectedItems;
|
35
|
+
}
|
36
|
+
get daysList() {
|
37
|
+
return this.dayService.daysList;
|
38
|
+
}
|
39
|
+
get isBoWeek() {
|
40
|
+
return this.dayService.dayModel.type === DayType.BOWeek ? true : false;
|
41
|
+
}
|
42
|
+
get isBoMonth() {
|
43
|
+
return this.dayService.dayModel.type === DayType.BOMonth ? true : false;
|
44
|
+
}
|
45
|
+
get isBoWeekCustom() {
|
46
|
+
return this.dayService.dayModel.baseOnWeek.type === BaseOnWeekType.Custom ? true : false;
|
47
|
+
}
|
48
|
+
get isBoMonthCustom() {
|
49
|
+
return this.dayService.dayModel.baseOnMonth.type === BaseOnMonthType.Custom ? true : false;
|
50
|
+
}
|
51
|
+
get isBoMonthBefore() {
|
52
|
+
return this.dayService.dayModel.baseOnMonth.type === BaseOnMonthType.Before ? true : false;
|
53
|
+
}
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCronDayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXCronDayComponent, selector: "ax-cron-day", ngImport: i0, template: "<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option1\"\n value=\"every\"\n [(ngModel)]=\"dayService.dayModel.type\"\n checked\n />\n <label for=\"option1\">{{ 'Every' | translate | async }} {{ 'time.day' | translate | async }}</label>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option2\"\n value=\"boweek\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on week' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"boweek\"\n id=\"boweekLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n\n <span>{{ 'On the last' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.last.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of the month' | translate | async }}</span>\n </div>\n\n <div>\n <div class=\"ax-radio-container\">\n <input\n type=\"radio\"\n class=\"ax-radio\"\n name=\"boweek\"\n id=\"boweekCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n <label for=\"boweekLast\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n <label>{{ 'Specific day(s) of week (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth\"\n >\n </ax-check-box>\n\n <span>{{ 'On the' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysIndexInMonth\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.xst\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of month' | translate | async }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option3\"\n value=\"bomonth\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on Month' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthLast\">{{ 'On the Last day of the month' | translate | async }}</label>\n </div>\n\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"before\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthBefore\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.before\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) before the end of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthCustom\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n\n <label>{{ 'Specific day(s) of month (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"boMonthDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler2($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["ax-cron-day .ax-radio-container,ax-cron-hours .ax-radio-container,ax-cron-minutes .ax-radio-container,ax-cron-month .ax-radio-container,ax-cron-seconds .ax-radio-container,ax-cron-year .ax-radio-container{margin-bottom:.5rem;display:flex;align-items:center}ax-cron-day .ax-radio-container input,ax-cron-hours .ax-radio-container input,ax-cron-minutes .ax-radio-container input,ax-cron-month .ax-radio-container input,ax-cron-seconds .ax-radio-container input,ax-cron-year .ax-radio-container input{margin-inline-end:.5rem}ax-cron-day .ax-block-container,ax-cron-hours .ax-block-container,ax-cron-minutes .ax-block-container,ax-cron-month .ax-block-container,ax-cron-seconds .ax-block-container,ax-cron-year .ax-block-container{padding-inline-start:1.5rem}ax-cron-day .ax-block-container .ax-every-container,ax-cron-hours .ax-block-container .ax-every-container,ax-cron-minutes .ax-block-container .ax-every-container,ax-cron-month .ax-block-container .ax-every-container,ax-cron-seconds .ax-block-container .ax-every-container,ax-cron-year .ax-block-container .ax-every-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-every-container ax-form,ax-cron-hours .ax-block-container .ax-every-container ax-form,ax-cron-minutes .ax-block-container .ax-every-container ax-form,ax-cron-month .ax-block-container .ax-every-container ax-form,ax-cron-seconds .ax-block-container .ax-every-container ax-form,ax-cron-year .ax-block-container .ax-every-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-specific-container,ax-cron-hours .ax-block-container .ax-specific-container,ax-cron-minutes .ax-block-container .ax-specific-container,ax-cron-month .ax-block-container .ax-specific-container,ax-cron-seconds .ax-block-container .ax-specific-container,ax-cron-year .ax-block-container .ax-specific-container{margin-block:.5rem}ax-cron-day .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-month .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-year .ax-block-container .ax-specific-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container,ax-cron-hours .ax-block-container .ax-between-container,ax-cron-minutes .ax-block-container .ax-between-container,ax-cron-month .ax-block-container .ax-between-container,ax-cron-seconds .ax-block-container .ax-between-container,ax-cron-year .ax-block-container .ax-between-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-between-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-between-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-between-container .ax-flex-container,ax-cron-month .ax-block-container .ax-between-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-between-container .ax-flex-container,ax-cron-year .ax-block-container .ax-between-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container ax-form,ax-cron-hours .ax-block-container .ax-between-container ax-form,ax-cron-minutes .ax-block-container .ax-between-container ax-form,ax-cron-month .ax-block-container .ax-between-container ax-form,ax-cron-seconds .ax-block-container .ax-between-container ax-form,ax-cron-year .ax-block-container .ax-between-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-week-container,ax-cron-hours .ax-block-container .ax-week-container,ax-cron-minutes .ax-block-container .ax-week-container,ax-cron-month .ax-block-container .ax-week-container,ax-cron-seconds .ax-block-container .ax-week-container,ax-cron-year .ax-block-container .ax-week-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-week-container ax-form,ax-cron-hours .ax-block-container .ax-week-container ax-form,ax-cron-minutes .ax-block-container .ax-week-container ax-form,ax-cron-month .ax-block-container .ax-week-container ax-form,ax-cron-seconds .ax-block-container .ax-week-container ax-form,ax-cron-year .ax-block-container .ax-week-container ax-form{width:fit-content;margin-inline:.5rem}\n"], dependencies: [{ kind: "component", type: i1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "textTemplate", "dataSource", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed"] }, { kind: "component", type: i4.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i4.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "component", type: i5.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "checked", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
56
|
+
}
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCronDayComponent, decorators: [{
|
58
|
+
type: Component,
|
59
|
+
args: [{ selector: 'ax-cron-day', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option1\"\n value=\"every\"\n [(ngModel)]=\"dayService.dayModel.type\"\n checked\n />\n <label for=\"option1\">{{ 'Every' | translate | async }} {{ 'time.day' | translate | async }}</label>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option2\"\n value=\"boweek\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on week' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"boweek\"\n id=\"boweekLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n\n <span>{{ 'On the last' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.last.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of the month' | translate | async }}</span>\n </div>\n\n <div>\n <div class=\"ax-radio-container\">\n <input\n type=\"radio\"\n class=\"ax-radio\"\n name=\"boweek\"\n id=\"boweekCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n <label for=\"boweekLast\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n <label>{{ 'Specific day(s) of week (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth\"\n >\n </ax-check-box>\n\n <span>{{ 'On the' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysIndexInMonth\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.xst\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of month' | translate | async }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option3\"\n value=\"bomonth\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on Month' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthLast\">{{ 'On the Last day of the month' | translate | async }}</label>\n </div>\n\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"before\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthBefore\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.before\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) before the end of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthCustom\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n\n <label>{{ 'Specific day(s) of month (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"boMonthDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler2($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["ax-cron-day .ax-radio-container,ax-cron-hours .ax-radio-container,ax-cron-minutes .ax-radio-container,ax-cron-month .ax-radio-container,ax-cron-seconds .ax-radio-container,ax-cron-year .ax-radio-container{margin-bottom:.5rem;display:flex;align-items:center}ax-cron-day .ax-radio-container input,ax-cron-hours .ax-radio-container input,ax-cron-minutes .ax-radio-container input,ax-cron-month .ax-radio-container input,ax-cron-seconds .ax-radio-container input,ax-cron-year .ax-radio-container input{margin-inline-end:.5rem}ax-cron-day .ax-block-container,ax-cron-hours .ax-block-container,ax-cron-minutes .ax-block-container,ax-cron-month .ax-block-container,ax-cron-seconds .ax-block-container,ax-cron-year .ax-block-container{padding-inline-start:1.5rem}ax-cron-day .ax-block-container .ax-every-container,ax-cron-hours .ax-block-container .ax-every-container,ax-cron-minutes .ax-block-container .ax-every-container,ax-cron-month .ax-block-container .ax-every-container,ax-cron-seconds .ax-block-container .ax-every-container,ax-cron-year .ax-block-container .ax-every-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-every-container ax-form,ax-cron-hours .ax-block-container .ax-every-container ax-form,ax-cron-minutes .ax-block-container .ax-every-container ax-form,ax-cron-month .ax-block-container .ax-every-container ax-form,ax-cron-seconds .ax-block-container .ax-every-container ax-form,ax-cron-year .ax-block-container .ax-every-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-specific-container,ax-cron-hours .ax-block-container .ax-specific-container,ax-cron-minutes .ax-block-container .ax-specific-container,ax-cron-month .ax-block-container .ax-specific-container,ax-cron-seconds .ax-block-container .ax-specific-container,ax-cron-year .ax-block-container .ax-specific-container{margin-block:.5rem}ax-cron-day .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-month .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-year .ax-block-container .ax-specific-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container,ax-cron-hours .ax-block-container .ax-between-container,ax-cron-minutes .ax-block-container .ax-between-container,ax-cron-month .ax-block-container .ax-between-container,ax-cron-seconds .ax-block-container .ax-between-container,ax-cron-year .ax-block-container .ax-between-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-between-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-between-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-between-container .ax-flex-container,ax-cron-month .ax-block-container .ax-between-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-between-container .ax-flex-container,ax-cron-year .ax-block-container .ax-between-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container ax-form,ax-cron-hours .ax-block-container .ax-between-container ax-form,ax-cron-minutes .ax-block-container .ax-between-container ax-form,ax-cron-month .ax-block-container .ax-between-container ax-form,ax-cron-seconds .ax-block-container .ax-between-container ax-form,ax-cron-year .ax-block-container .ax-between-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-week-container,ax-cron-hours .ax-block-container .ax-week-container,ax-cron-minutes .ax-block-container .ax-week-container,ax-cron-month .ax-block-container .ax-week-container,ax-cron-seconds .ax-block-container .ax-week-container,ax-cron-year .ax-block-container .ax-week-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-week-container ax-form,ax-cron-hours .ax-block-container .ax-week-container ax-form,ax-cron-minutes .ax-block-container .ax-week-container ax-form,ax-cron-month .ax-block-container .ax-week-container ax-form,ax-cron-seconds .ax-block-container .ax-week-container ax-form,ax-cron-year .ax-block-container .ax-week-container ax-form{width:fit-content;margin-inline:.5rem}\n"] }]
|
60
|
+
}] });
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jcm9uLWpvYi9zcmMvbGliL2RheS9kYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Nyb24tam9iL3NyYy9saWIvZGF5L2RheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFRM0MsTUFBTSxPQUFPLGtCQUFrQjtJQU4vQjtRQU9FLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEIsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBbUIsRUFBRSxDQUFDO1FBRXpDLHFCQUFnQixHQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFbEMsVUFBSyxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBaUNKO0lBeENDLEtBQUssQ0FPRjtJQUVPLGFBQWEsQ0FBQyxDQUFzQjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDekYsQ0FBQztJQUVTLGNBQWMsQ0FBQyxDQUFzQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQWMsUUFBUTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekUsQ0FBQztJQUVELElBQWMsU0FBUztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBYyxjQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDOzhHQWhEVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixtRENaL0Isc2dUQTRUQTs7MkZEaFRhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIENvbXBvbmVudCwgaW5qZWN0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJvcERvd25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcbmltcG9ydCB7IEJhc2VPbk1vbnRoVHlwZSwgQmFzZU9uV2Vla1R5cGUsIERheVR5cGUgfSBmcm9tICcuL2RheS5tb2RlbCc7XG5pbXBvcnQgeyBEYXlTZXJ2aWNlIH0gZnJvbSAnLi9kYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWNyb24tZGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jcm9uLWpvYi5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEFYQ3JvbkRheUNvbXBvbmVudCB7XG4gIGRheVNlcnZpY2UgPSBpbmplY3QoRGF5U2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJvV2Vla0Ryb3BEb3duTGlzdDogRHJvcERvd25JdGVtW10gPSBbXTtcbiAgcHJvdGVjdGVkIGJvTW9udGhEcm9wRG93bkxpc3Q6IERyb3BEb3duSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIGRheXNJbmRleEluTW9udGg6IG51bWJlcltdID0gWzEsIDIsIDMsIDQsIDVdO1xuICBwcm90ZWN0ZWQgemVyb1RvMzA6IG51bWJlcltdID0gW107XG5cbiAgI2luaXQgPSBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgIGZvciAoY29uc3QgW2ksIGRheV0gb2YgdGhpcy5kYXlzTGlzdC5lbnRyaWVzKCkpIHRoaXMuYm9XZWVrRHJvcERvd25MaXN0W2ldID0gbmV3IERyb3BEb3duSXRlbShpICsgMSwgZGF5KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzE7IGkrKykge1xuICAgICAgdGhpcy56ZXJvVG8zMFtpXSA9IGk7XG4gICAgICB0aGlzLmJvTW9udGhEcm9wRG93bkxpc3RbaV0gPSBuZXcgRHJvcERvd25JdGVtKGkgKyAxLCAoaSArIDEpLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGNoYW5nZUhhbmRsZXIoZTogQVhWYWx1ZUNoYW5nZWRFdmVudCkge1xuICAgIHRoaXMuZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMgPSBlLmNvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoYW5nZUhhbmRsZXIyKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnNwZWNpZmljLnZhbHVlcyA9IGUuY29tcG9uZW50LnNlbGVjdGVkSXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRheXNMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5c0xpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQm9XZWVrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwudHlwZSA9PT0gRGF5VHlwZS5CT1dlZWsgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQm9Nb250aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9Nb250aCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb1dlZWtDdXN0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPT09IEJhc2VPbldlZWtUeXBlLkN1c3RvbSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb01vbnRoQ3VzdG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkN1c3RvbSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb01vbnRoQmVmb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkJlZm9yZSA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXJhZGlvLWNvbnRhaW5lclwiPlxuICA8aW5wdXRcbiAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICB0eXBlPVwicmFkaW9cIlxuICAgIG5hbWU9XCJvcHRpb25cIlxuICAgIGlkPVwib3B0aW9uMVwiXG4gICAgdmFsdWU9XCJldmVyeVwiXG4gICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGVcIlxuICAgIGNoZWNrZWRcbiAgLz5cbiAgPGxhYmVsIGZvcj1cIm9wdGlvbjFcIj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX0ge3sgJ3RpbWUuZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiYXgtcmFkaW9cIlxuICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgbmFtZT1cIm9wdGlvblwiXG4gICAgaWQ9XCJvcHRpb24yXCJcbiAgICB2YWx1ZT1cImJvd2Vla1wiXG4gICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGVcIlxuICAvPlxuICA8bGFiZWwgZm9yPVwib3B0aW9uMlwiPnt7ICdCYXNlIG9uIHdlZWsnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJheC1ibG9jay1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXdlZWstY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBuYW1lPVwiYm93ZWVrXCJcbiAgICAgIGlkPVwiYm93ZWVrTGFzdFwiXG4gICAgICB2YWx1ZT1cImxhc3RcIlxuICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrXCJcbiAgICAvPlxuXG4gICAgPHNwYW4+e3sgJ09uIHRoZSBsYXN0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvV2Vla1wiXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmxhc3QuZGF5XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgPC9heC1mb3JtPlxuXG4gICAgPHNwYW4+e3sgJ29mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJheC1yYWRpb1wiXG4gICAgICAgIG5hbWU9XCJib3dlZWtcIlxuICAgICAgICBpZD1cImJvd2Vla0N1c3RvbVwiXG4gICAgICAgIHZhbHVlPVwiY3VzdG9tXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsudHlwZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWtcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJib3dlZWtMYXN0XCI+e3sgJ0N1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtYmxvY2stY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtd2Vlay1jb250YWluZXJcIj5cbiAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmlzUmVwZWF0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvV2VlayB8fCAhaXNCb1dlZWtDdXN0b21cIlxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXlzTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmludGVydmFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnZGF5KHMpIHN0YXJ0aW5nIG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuc3RhcnRBdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2F4LWZvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNwZWNpZmljLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC1jb250YWluZXJcIj5cbiAgICAgICAgICA8YXgtY2hlY2stYm94XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxuICAgICAgICAgIDxsYWJlbD57eyAnU3BlY2lmaWMgZGF5KHMpIG9mIHdlZWsgKGNob29zZSBvbmUgb3IgbWFueSknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YXgtZm9ybT5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VsZWN0IGRheShzKScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2F4LWZvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImF4LXdlZWstY29udGFpbmVyXCI+XG4gICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLmRheU9mTW9udGguaXNEYXlPZk1vbnRoXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnT24gdGhlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF5c0luZGV4SW5Nb250aFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC54c3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9heC1zZWxlY3QtYm94PlxuICAgICAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICAgICAgPC9heC1mb3JtPlxuXG4gICAgICAgIDxzcGFuPnt7ICdzdCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cblxuICAgICAgICA8YXgtZm9ybSBjbGFzcz1cImF4LXNtXCI+XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImJvV2Vla0Ryb3BEb3duTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9heC1zZWxlY3QtYm94PlxuICAgICAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICAgICAgPC9heC1mb3JtPlxuXG4gICAgICAgIDxzcGFuPnt7ICdvZiBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiYXgtcmFkaW9cIlxuICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgbmFtZT1cIm9wdGlvblwiXG4gICAgaWQ9XCJvcHRpb24zXCJcbiAgICB2YWx1ZT1cImJvbW9udGhcIlxuICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC50eXBlXCJcbiAgLz5cbiAgPGxhYmVsIGZvcj1cIm9wdGlvbjJcIj57eyAnQmFzZSBvbiBNb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LWJsb2NrLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBuYW1lPVwiYm9tb250aFwiXG4gICAgICBpZD1cImJvbW9udGhMYXN0XCJcbiAgICAgIHZhbHVlPVwibGFzdFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aFwiXG4gICAgLz5cbiAgICA8bGFiZWwgZm9yPVwiYm9tb250aExhc3RcIj57eyAnT24gdGhlIExhc3QgZGF5IG9mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJheC13ZWVrLWNvbnRhaW5lclwiPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJheC1yYWRpb1wiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgbmFtZT1cImJvbW9udGhcIlxuICAgICAgaWQ9XCJib21vbnRoTGFzdFwiXG4gICAgICB2YWx1ZT1cImJlZm9yZVwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aFwiXG4gICAgLz5cblxuICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhCZWZvcmVcIlxuICAgICAgICAgIFtkYXRhU291cmNlXT1cInplcm9UbzMwXCJcbiAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5iZWZvcmVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICA8L2F4LWZvcm0+XG5cbiAgICA8c3Bhbj57eyAnZGF5KHMpIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImF4LWJsb2NrLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1yYWRpby1jb250YWluZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgbmFtZT1cImJvbW9udGhcIlxuICAgICAgICBpZD1cImJvbW9udGhDdXN0b21cIlxuICAgICAgICB2YWx1ZT1cImN1c3RvbVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC50eXBlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGhcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJib21vbnRoQ3VzdG9tXCI+e3sgJ0N1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtYmxvY2stY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtd2Vlay1jb250YWluZXJcIj5cbiAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhDdXN0b21cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmlzUmVwZWF0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGggfHwgIWlzQm9Nb250aEN1c3RvbVwiXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInplcm9UbzMwXCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnZGF5KHMpIHN0YXJ0aW5nIG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhDdXN0b21cIlxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ6ZXJvVG8zMFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnJlcGVhdC5zdGFydEF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnc3Qgb2YgdGhlIG1vbnRoJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zcGVjaWZpYy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXgtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGggfHwgIWlzQm9Nb250aEN1c3RvbVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnNwZWNpZmljLmlzU3BlY2VmaWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICAgIDxsYWJlbD57eyAnU3BlY2lmaWMgZGF5KHMpIG9mIG1vbnRoIChjaG9vc2Ugb25lIG9yIG1hbnkpJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGF4LWZvcm0+XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aCB8fCAhaXNCb01vbnRoQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9Nb250aERyb3BEb3duTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlbGVjdCBkYXkocyknIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJjaGFuZ2VIYW5kbGVyMigkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LWNsZWFyLWJ1dHRvbj48L2F4LWNsZWFyLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
@@ -0,0 +1,88 @@
|
|
1
|
+
export class Day {
|
2
|
+
constructor() {
|
3
|
+
this.type = DayType.Every;
|
4
|
+
this.baseOnWeek = new BaseOnWeek();
|
5
|
+
this.baseOnMonth = new BaseOnMonth();
|
6
|
+
}
|
7
|
+
}
|
8
|
+
export class BaseOnMonth {
|
9
|
+
constructor() {
|
10
|
+
this.type = BaseOnMonthType.Last;
|
11
|
+
this.custom = new BaseOnMonthCustom();
|
12
|
+
this.before = 1;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
export class BaseOnWeek {
|
16
|
+
constructor() {
|
17
|
+
this.type = BaseOnWeekType.Last;
|
18
|
+
this.last = new Last();
|
19
|
+
this.custom = new BaseOnWeekCustom();
|
20
|
+
}
|
21
|
+
}
|
22
|
+
export class BaseOnWeekCustom {
|
23
|
+
constructor() {
|
24
|
+
this.repeat = new BaseOnWeekRepeat();
|
25
|
+
this.specific = new Specific();
|
26
|
+
this.dayOfMonth = new DayOfMonth();
|
27
|
+
}
|
28
|
+
}
|
29
|
+
export class BaseOnMonthCustom {
|
30
|
+
constructor() {
|
31
|
+
this.repeat = new BaseOnMonthRepeat();
|
32
|
+
this.specific = new Specific();
|
33
|
+
}
|
34
|
+
}
|
35
|
+
export class Last {
|
36
|
+
constructor() {
|
37
|
+
this.day = 1;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
export class BaseRepeat {
|
41
|
+
constructor() {
|
42
|
+
this.isRepeat = false;
|
43
|
+
this.interval = 1;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
export class BaseOnWeekRepeat extends BaseRepeat {
|
47
|
+
constructor() {
|
48
|
+
super(...arguments);
|
49
|
+
this.startAt = 1;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
export class BaseOnMonthRepeat extends BaseRepeat {
|
53
|
+
constructor() {
|
54
|
+
super(...arguments);
|
55
|
+
this.startAt = 1;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
export class Specific {
|
59
|
+
constructor() {
|
60
|
+
this.isSpecefic = false;
|
61
|
+
this.values = [];
|
62
|
+
}
|
63
|
+
}
|
64
|
+
export class DayOfMonth {
|
65
|
+
constructor() {
|
66
|
+
this.isDayOfMonth = false;
|
67
|
+
this.xst = 1;
|
68
|
+
this.day = 1;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
export var DayType;
|
72
|
+
(function (DayType) {
|
73
|
+
DayType["Every"] = "every";
|
74
|
+
DayType["BOWeek"] = "boweek";
|
75
|
+
DayType["BOMonth"] = "bomonth";
|
76
|
+
})(DayType || (DayType = {}));
|
77
|
+
export var BaseOnWeekType;
|
78
|
+
(function (BaseOnWeekType) {
|
79
|
+
BaseOnWeekType["Last"] = "last";
|
80
|
+
BaseOnWeekType["Custom"] = "custom";
|
81
|
+
})(BaseOnWeekType || (BaseOnWeekType = {}));
|
82
|
+
export var BaseOnMonthType;
|
83
|
+
(function (BaseOnMonthType) {
|
84
|
+
BaseOnMonthType["Last"] = "last";
|
85
|
+
BaseOnMonthType["Before"] = "before";
|
86
|
+
BaseOnMonthType["Custom"] = "custom";
|
87
|
+
})(BaseOnMonthType || (BaseOnMonthType = {}));
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Nyb24tam9iL3NyYy9saWIvZGF5L2RheS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sR0FBRztJQUFoQjtRQUNFLFNBQUksR0FBWSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlCLGVBQVUsR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzFDLGdCQUFXLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDRSxTQUFJLEdBQW9CLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDN0MsV0FBTSxHQUFzQixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsV0FBTSxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBQ0UsU0FBSSxHQUFtQixjQUFjLENBQUMsSUFBSSxDQUFDO1FBQzNDLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLFdBQU0sR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BELENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFDRSxXQUFNLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxhQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxlQUFVLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ0UsV0FBTSxHQUFzQixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsYUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLElBQUk7SUFBakI7UUFDRSxRQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsVUFBVTtJQUFoRDs7UUFDRSxZQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFVBQVU7SUFBakQ7O1FBQ0UsWUFBTyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxRQUFRO0lBQXJCO1FBQ0UsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQW1CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUF2QjtRQUNFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixRQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztDQUFBO0FBRUQsTUFBTSxDQUFOLElBQVksT0FJWDtBQUpELFdBQVksT0FBTztJQUNqQiwwQkFBZSxDQUFBO0lBQ2YsNEJBQWlCLENBQUE7SUFDakIsOEJBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLE9BQU8sS0FBUCxPQUFPLFFBSWxCO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QiwrQkFBYSxDQUFBO0lBQ2IsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixnQ0FBYSxDQUFBO0lBQ2Isb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJvcERvd25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIERheSB7XG4gIHR5cGU6IERheVR5cGUgPSBEYXlUeXBlLkV2ZXJ5O1xuICBiYXNlT25XZWVrOiBCYXNlT25XZWVrID0gbmV3IEJhc2VPbldlZWsoKTtcbiAgYmFzZU9uTW9udGg6IEJhc2VPbk1vbnRoID0gbmV3IEJhc2VPbk1vbnRoKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25Nb250aCB7XG4gIHR5cGU6IEJhc2VPbk1vbnRoVHlwZSA9IEJhc2VPbk1vbnRoVHlwZS5MYXN0O1xuICBjdXN0b206IEJhc2VPbk1vbnRoQ3VzdG9tID0gbmV3IEJhc2VPbk1vbnRoQ3VzdG9tKCk7XG4gIGJlZm9yZSA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25XZWVrIHtcbiAgdHlwZTogQmFzZU9uV2Vla1R5cGUgPSBCYXNlT25XZWVrVHlwZS5MYXN0O1xuICBsYXN0OiBMYXN0ID0gbmV3IExhc3QoKTtcbiAgY3VzdG9tOiBCYXNlT25XZWVrQ3VzdG9tID0gbmV3IEJhc2VPbldlZWtDdXN0b20oKTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VPbldlZWtDdXN0b20ge1xuICByZXBlYXQ6IEJhc2VPbldlZWtSZXBlYXQgPSBuZXcgQmFzZU9uV2Vla1JlcGVhdCgpO1xuICBzcGVjaWZpYzogU3BlY2lmaWMgPSBuZXcgU3BlY2lmaWMoKTtcbiAgZGF5T2ZNb250aDogRGF5T2ZNb250aCA9IG5ldyBEYXlPZk1vbnRoKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25Nb250aEN1c3RvbSB7XG4gIHJlcGVhdDogQmFzZU9uTW9udGhSZXBlYXQgPSBuZXcgQmFzZU9uTW9udGhSZXBlYXQoKTtcbiAgc3BlY2lmaWM6IFNwZWNpZmljID0gbmV3IFNwZWNpZmljKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMYXN0IHtcbiAgZGF5ID0gMTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VSZXBlYXQge1xuICBpc1JlcGVhdCA9IGZhbHNlO1xuICBpbnRlcnZhbCA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25XZWVrUmVwZWF0IGV4dGVuZHMgQmFzZVJlcGVhdCB7XG4gIHN0YXJ0QXQgPSAxO1xufVxuXG5leHBvcnQgY2xhc3MgQmFzZU9uTW9udGhSZXBlYXQgZXh0ZW5kcyBCYXNlUmVwZWF0IHtcbiAgc3RhcnRBdCA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBTcGVjaWZpYyB7XG4gIGlzU3BlY2VmaWMgPSBmYWxzZTtcbiAgdmFsdWVzOiBEcm9wRG93bkl0ZW1bXSA9IFtdO1xufVxuXG5leHBvcnQgY2xhc3MgRGF5T2ZNb250aCB7XG4gIGlzRGF5T2ZNb250aCA9IGZhbHNlO1xuICB4c3QgPSAxO1xuICBkYXkgPSAxO1xufVxuXG5leHBvcnQgZW51bSBEYXlUeXBlIHtcbiAgRXZlcnkgPSAnZXZlcnknLFxuICBCT1dlZWsgPSAnYm93ZWVrJyxcbiAgQk9Nb250aCA9ICdib21vbnRoJyxcbn1cblxuZXhwb3J0IGVudW0gQmFzZU9uV2Vla1R5cGUge1xuICBMYXN0ID0gJ2xhc3QnLFxuICBDdXN0b20gPSAnY3VzdG9tJyxcbn1cblxuZXhwb3J0IGVudW0gQmFzZU9uTW9udGhUeXBlIHtcbiAgTGFzdCA9ICdsYXN0JyxcbiAgQmVmb3JlID0gJ2JlZm9yZScsXG4gIEN1c3RvbSA9ICdjdXN0b20nLFxufVxuIl19
|
@@ -0,0 +1,196 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { StringService } from '../cron-job.service';
|
3
|
+
import { RegexItemsIndex } from '../types/shared.model';
|
4
|
+
import { BaseOnMonthType, BaseOnWeekType, Day, DayType } from './day.model';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
import * as i1 from "../cron-job.service";
|
7
|
+
export class DayService {
|
8
|
+
constructor(stringService) {
|
9
|
+
this.stringService = stringService;
|
10
|
+
this.daysList = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
11
|
+
this.dayModel = new Day();
|
12
|
+
}
|
13
|
+
getExpression() {
|
14
|
+
let boMonthExp = '';
|
15
|
+
let boWeekExp = '';
|
16
|
+
if (this.dayModel.type === DayType.Every) {
|
17
|
+
boMonthExp = '?';
|
18
|
+
boWeekExp = '*';
|
19
|
+
}
|
20
|
+
else if (this.dayModel.type === DayType.BOMonth) {
|
21
|
+
boWeekExp = '?';
|
22
|
+
if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Last) {
|
23
|
+
boMonthExp = 'L';
|
24
|
+
}
|
25
|
+
else if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Before) {
|
26
|
+
const before = this.dayModel.baseOnMonth.before;
|
27
|
+
boMonthExp = `L-${before}`;
|
28
|
+
}
|
29
|
+
else if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Custom) {
|
30
|
+
if (this.dayModel.baseOnMonth.custom.repeat.isRepeat) {
|
31
|
+
const interval = this.dayModel.baseOnMonth.custom.repeat.interval;
|
32
|
+
const startAt = this.dayModel.baseOnMonth.custom.repeat.startAt;
|
33
|
+
boMonthExp = `${startAt}/${interval}`;
|
34
|
+
}
|
35
|
+
if (this.dayModel.baseOnMonth.custom.specific.isSpecefic) {
|
36
|
+
const specificValues = this.dayModel.baseOnMonth.custom.specific.values.map((v) => {
|
37
|
+
return v.id;
|
38
|
+
});
|
39
|
+
if (specificValues.length !== 0)
|
40
|
+
boMonthExp = this.stringService.addComma(boMonthExp);
|
41
|
+
boMonthExp = boMonthExp.concat(specificValues.join(','));
|
42
|
+
}
|
43
|
+
if (boMonthExp === '')
|
44
|
+
boMonthExp = '*';
|
45
|
+
}
|
46
|
+
}
|
47
|
+
else if (this.dayModel.type === DayType.BOWeek) {
|
48
|
+
boMonthExp = '?';
|
49
|
+
if (this.dayModel.baseOnWeek.type === BaseOnWeekType.Last) {
|
50
|
+
const lastDay = this.dayModel.baseOnWeek.last.day;
|
51
|
+
boWeekExp = `${lastDay}L`;
|
52
|
+
}
|
53
|
+
else if (this.dayModel.baseOnWeek.type === BaseOnWeekType.Custom) {
|
54
|
+
if (this.dayModel.baseOnWeek.custom.repeat.isRepeat) {
|
55
|
+
const interval = this.dayModel.baseOnWeek.custom.repeat.interval;
|
56
|
+
const startAt = this.dayModel.baseOnWeek.custom.repeat.startAt;
|
57
|
+
boWeekExp = `${startAt}/${interval}`;
|
58
|
+
}
|
59
|
+
if (this.dayModel.baseOnWeek.custom.specific.isSpecefic) {
|
60
|
+
const specificValues = this.dayModel.baseOnWeek.custom.specific.values.map((v) => {
|
61
|
+
return v.id;
|
62
|
+
});
|
63
|
+
if (specificValues.length !== 0)
|
64
|
+
boWeekExp = this.stringService.addComma(boWeekExp);
|
65
|
+
boWeekExp = boWeekExp.concat(specificValues.join(','));
|
66
|
+
}
|
67
|
+
if (this.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth) {
|
68
|
+
boWeekExp = this.stringService.addComma(boWeekExp);
|
69
|
+
const day = this.dayModel.baseOnWeek.custom.dayOfMonth.day;
|
70
|
+
const xst = this.dayModel.baseOnWeek.custom.dayOfMonth.xst;
|
71
|
+
boWeekExp = boWeekExp.concat(`${day}#${xst}`);
|
72
|
+
}
|
73
|
+
if (boWeekExp === '')
|
74
|
+
boWeekExp = '*';
|
75
|
+
}
|
76
|
+
}
|
77
|
+
return [boWeekExp, boMonthExp];
|
78
|
+
}
|
79
|
+
expressionValidation(preCronExpressionPattern, newCronExpressionPattern) {
|
80
|
+
const preCronExpressionPatternArray = preCronExpressionPattern.split(' ');
|
81
|
+
const newCronExpressionPatternArray = newCronExpressionPattern.split(' ');
|
82
|
+
const dayOfWeekRegex = this.stringService.getRegexItem(newCronExpressionPattern, RegexItemsIndex.DayOfWeek);
|
83
|
+
const dayOfMonthRegex = this.stringService.getRegexItem(newCronExpressionPattern, RegexItemsIndex.DayOfMonth);
|
84
|
+
const isDayOfWeekChanged = preCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] !==
|
85
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek];
|
86
|
+
const isDayOfMonthChanged = preCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] !==
|
87
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth];
|
88
|
+
const isBasedOnWeek = dayOfWeekRegex !== '*' && dayOfWeekRegex !== '?';
|
89
|
+
const isBasedOnMonth = dayOfMonthRegex !== '?';
|
90
|
+
if (isDayOfWeekChanged && isBasedOnMonth) {
|
91
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] = '?';
|
92
|
+
return newCronExpressionPatternArray.join(' ');
|
93
|
+
}
|
94
|
+
else if (isDayOfWeekChanged && !isBasedOnWeek) {
|
95
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] = '*';
|
96
|
+
return newCronExpressionPatternArray.join(' ');
|
97
|
+
}
|
98
|
+
if (isDayOfMonthChanged && isBasedOnWeek) {
|
99
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] = '?';
|
100
|
+
return newCronExpressionPatternArray.join(' ');
|
101
|
+
}
|
102
|
+
else if (isDayOfMonthChanged && !isBasedOnMonth) {
|
103
|
+
newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] = '*';
|
104
|
+
return newCronExpressionPatternArray.join(' ');
|
105
|
+
}
|
106
|
+
return newCronExpressionPattern;
|
107
|
+
}
|
108
|
+
reversExpression(cronExpressionPattern) {
|
109
|
+
this.dayModel = new Day();
|
110
|
+
const dayOfWeekRegex = this.stringService.getRegexItem(cronExpressionPattern, RegexItemsIndex.DayOfWeek);
|
111
|
+
const dayOfMonthRegex = this.stringService.getRegexItem(cronExpressionPattern, RegexItemsIndex.DayOfMonth);
|
112
|
+
const isBasedOnWeek = dayOfWeekRegex !== '*' && dayOfWeekRegex !== '?';
|
113
|
+
const isBasedOnMonth = dayOfMonthRegex !== '?';
|
114
|
+
const isEveryDay = !isBasedOnWeek && !isBasedOnMonth;
|
115
|
+
if (isEveryDay) {
|
116
|
+
this.dayModel.type = DayType.Every;
|
117
|
+
return;
|
118
|
+
}
|
119
|
+
if (isBasedOnWeek) {
|
120
|
+
this.dayModel.type = DayType.BOWeek;
|
121
|
+
this.reversExpressionBasedOnWeek(dayOfWeekRegex);
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
if (isBasedOnMonth) {
|
125
|
+
this.dayModel.type = DayType.BOMonth;
|
126
|
+
this.reversExpressionBasedOnMonth(dayOfMonthRegex);
|
127
|
+
return;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
reversExpressionBasedOnWeek(regex) {
|
131
|
+
// **Regex pattern to check id custom or not**
|
132
|
+
const regexPattern = new RegExp('^[0-9]L$');
|
133
|
+
const isCustom = !regexPattern.test(regex);
|
134
|
+
if (!isCustom) {
|
135
|
+
this.dayModel.baseOnWeek.type = BaseOnWeekType.Last;
|
136
|
+
this.dayModel.baseOnWeek.last.day = parseInt(regex[0]);
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
this.dayModel.baseOnWeek.type = BaseOnWeekType.Custom;
|
140
|
+
const intervalData = this.stringService.getIntervalCronData(regex);
|
141
|
+
const hasIntervalItems = intervalData !== undefined;
|
142
|
+
if (hasIntervalItems) {
|
143
|
+
this.dayModel.baseOnWeek.custom.repeat.isRepeat = true;
|
144
|
+
this.dayModel.baseOnWeek.custom.repeat.interval = intervalData?.interval;
|
145
|
+
this.dayModel.baseOnWeek.custom.repeat.startAt = intervalData?.startAt;
|
146
|
+
}
|
147
|
+
const specificData = this.stringService.getSpecificCronData(regex, this.daysList);
|
148
|
+
const hasSpecificItems = specificData !== undefined;
|
149
|
+
if (hasSpecificItems) {
|
150
|
+
this.dayModel.baseOnWeek.custom.specific.isSpecefic = true;
|
151
|
+
this.dayModel.baseOnWeek.custom.specific.values = specificData;
|
152
|
+
}
|
153
|
+
const dayOfMonthData = this.stringService.getDayOfMonthCronData(regex);
|
154
|
+
const hasDayOfMonthDataItem = dayOfMonthData !== undefined;
|
155
|
+
if (hasDayOfMonthDataItem) {
|
156
|
+
this.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth = true;
|
157
|
+
this.dayModel.baseOnWeek.custom.dayOfMonth.day = dayOfMonthData?.day;
|
158
|
+
this.dayModel.baseOnWeek.custom.dayOfMonth.xst = dayOfMonthData?.xst;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
reversExpressionBasedOnMonth(regex) {
|
162
|
+
const isLastDayOfMonth = regex == 'L';
|
163
|
+
if (isLastDayOfMonth) {
|
164
|
+
this.dayModel.baseOnMonth.type = BaseOnMonthType.Last;
|
165
|
+
return;
|
166
|
+
}
|
167
|
+
// **Regex pattern to check if id before or not**
|
168
|
+
const regexPattern = new RegExp('^L-[0-9]+$');
|
169
|
+
const isCustom = !regexPattern.test(regex);
|
170
|
+
if (!isCustom) {
|
171
|
+
this.dayModel.baseOnMonth.type = BaseOnMonthType.Before;
|
172
|
+
this.dayModel.baseOnMonth.before = parseInt(regex.substr(2));
|
173
|
+
return;
|
174
|
+
}
|
175
|
+
this.dayModel.baseOnMonth.type = BaseOnMonthType.Custom;
|
176
|
+
const intervalData = this.stringService.getIntervalCronData(regex);
|
177
|
+
const hasIntervalItems = intervalData !== undefined;
|
178
|
+
if (hasIntervalItems) {
|
179
|
+
this.dayModel.baseOnMonth.custom.repeat.isRepeat = true;
|
180
|
+
this.dayModel.baseOnMonth.custom.repeat.interval = intervalData?.interval;
|
181
|
+
this.dayModel.baseOnMonth.custom.repeat.startAt = intervalData?.startAt;
|
182
|
+
}
|
183
|
+
const specificData = this.stringService.getSpecificCronData(regex, this.daysList);
|
184
|
+
const hasSpecificItems = specificData !== undefined;
|
185
|
+
if (hasSpecificItems) {
|
186
|
+
this.dayModel.baseOnMonth.custom.specific.isSpecefic = true;
|
187
|
+
this.dayModel.baseOnMonth.custom.specific.values = specificData;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService, deps: [{ token: i1.StringService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
191
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService }); }
|
192
|
+
}
|
193
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService, decorators: [{
|
194
|
+
type: Injectable
|
195
|
+
}], ctorParameters: () => [{ type: i1.StringService }] });
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY3Jvbi1qb2Ivc3JjL2xpYi9kYXkvZGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLFVBQVU7SUFHckIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFEaEQsYUFBUSxHQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNqQixTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUQsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNuQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUVoRCxVQUFVLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ2hFLFVBQVUsR0FBRyxHQUFHLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNoRixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2QsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7d0JBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUV0RixVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsSUFBSSxVQUFVLEtBQUssRUFBRTtvQkFBRSxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakQsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBRWxELFNBQVMsR0FBRyxHQUFHLE9BQU8sR0FBRyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDL0QsU0FBUyxHQUFHLEdBQUcsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDeEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQy9FLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDZCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQzt3QkFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXBGLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekQsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzVELFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7b0JBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO29CQUUzRCxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELElBQUksU0FBUyxLQUFLLEVBQUU7b0JBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQixDQUFDLHdCQUFnQyxFQUFFLHdCQUFnQztRQUNyRixNQUFNLDZCQUE2QixHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLDZCQUE2QixHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxRSxNQUFNLGNBQWMsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDNUQsd0JBQXdCLEVBQ3hCLGVBQWUsQ0FBQyxTQUFTLENBQzFCLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDN0Qsd0JBQXdCLEVBQ3hCLGVBQWUsQ0FBQyxVQUFVLENBQzNCLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUN0Qiw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQ3hELDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLG1CQUFtQixHQUN2Qiw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQ3pELDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU1RCxNQUFNLGFBQWEsR0FBRyxjQUFjLEtBQUssR0FBRyxJQUFJLGNBQWMsS0FBSyxHQUFHLENBQUM7UUFDdkUsTUFBTSxjQUFjLEdBQUcsZUFBZSxLQUFLLEdBQUcsQ0FBQztRQUUvQyxJQUFJLGtCQUFrQixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3pDLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDaEUsT0FBTyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksa0JBQWtCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2hFLE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLG1CQUFtQixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDL0QsT0FBTyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksbUJBQW1CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRCw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQy9ELE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxxQkFBNkI7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUM1RCxxQkFBcUIsRUFDckIsZUFBZSxDQUFDLFNBQVMsQ0FDMUIsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUM3RCxxQkFBcUIsRUFDckIsZUFBZSxDQUFDLFVBQVUsQ0FDM0IsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGNBQWMsS0FBSyxHQUFHLElBQUksY0FBYyxLQUFLLEdBQUcsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFZLENBQUMsYUFBYSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzlELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNyQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkQsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBYTtRQUN2Qyw4Q0FBOEM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxNQUFNLGdCQUFnQixHQUFHLFlBQVksS0FBSyxTQUFTLENBQUM7UUFDcEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsUUFBa0IsQ0FBQztZQUNuRixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxZQUFZLEVBQUUsT0FBaUIsQ0FBQztRQUNuRixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxLQUFLLFNBQVMsQ0FBQztRQUNwRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFlBQW1DLENBQUM7UUFDeEYsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLEtBQUssU0FBUyxDQUFDO1FBQzNELElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsY0FBYyxFQUFFLEdBQWEsQ0FBQztZQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxjQUFjLEVBQUUsR0FBYSxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsS0FBYTtRQUN4QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7UUFDdEMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRXhELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLFFBQWtCLENBQUM7WUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxFQUFFLE9BQWlCLENBQUM7UUFDcEYsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRixNQUFNLGdCQUFnQixHQUFHLFlBQVksS0FBSyxTQUFTLENBQUM7UUFDcEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFtQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDOzhHQXhOVSxVQUFVO2tIQUFWLFVBQVU7OzJGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdHJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vY3Jvbi1qb2Iuc2VydmljZSc7XG5pbXBvcnQgeyBJRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzL2lleHByZXNzaW9uJztcbmltcG9ydCB7IERyb3BEb3duSXRlbSwgUmVnZXhJdGVtc0luZGV4IH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcbmltcG9ydCB7IEJhc2VPbk1vbnRoVHlwZSwgQmFzZU9uV2Vla1R5cGUsIERheSwgRGF5VHlwZSB9IGZyb20gJy4vZGF5Lm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERheVNlcnZpY2UgaW1wbGVtZW50cyBJRXhwcmVzc2lvbiB7XG4gIGRheU1vZGVsOiBEYXk7XG4gIGRheXNMaXN0OiBBcnJheTxzdHJpbmc+ID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0cmluZ1NlcnZpY2U6IFN0cmluZ1NlcnZpY2UpIHtcbiAgICB0aGlzLmRheU1vZGVsID0gbmV3IERheSgpO1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpOiBhbnkge1xuICAgIGxldCBib01vbnRoRXhwID0gJyc7XG4gICAgbGV0IGJvV2Vla0V4cCA9ICcnO1xuICAgIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuRXZlcnkpIHtcbiAgICAgIGJvTW9udGhFeHAgPSAnPyc7XG4gICAgICBib1dlZWtFeHAgPSAnKic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9Nb250aCkge1xuICAgICAgYm9XZWVrRXhwID0gJz8nO1xuICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkxhc3QpIHtcbiAgICAgICAgYm9Nb250aEV4cCA9ICdMJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC50eXBlID09PSBCYXNlT25Nb250aFR5cGUuQmVmb3JlKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGguYmVmb3JlO1xuXG4gICAgICAgIGJvTW9udGhFeHAgPSBgTC0ke2JlZm9yZX1gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPT09IEJhc2VPbk1vbnRoVHlwZS5DdXN0b20pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnJlcGVhdC5pc1JlcGVhdCkge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuc3RhcnRBdDtcbiAgICAgICAgICBib01vbnRoRXhwID0gYCR7c3RhcnRBdH0vJHtpbnRlcnZhbH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy5pc1NwZWNlZmljKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNWYWx1ZXMgPSB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdi5pZDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlcy5sZW5ndGggIT09IDApIGJvTW9udGhFeHAgPSB0aGlzLnN0cmluZ1NlcnZpY2UuYWRkQ29tbWEoYm9Nb250aEV4cCk7XG5cbiAgICAgICAgICBib01vbnRoRXhwID0gYm9Nb250aEV4cC5jb25jYXQoc3BlY2lmaWNWYWx1ZXMuam9pbignLCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9Nb250aEV4cCA9PT0gJycpIGJvTW9udGhFeHAgPSAnKic7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9XZWVrKSB7XG4gICAgICBib01vbnRoRXhwID0gJz8nO1xuICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay50eXBlID09PSBCYXNlT25XZWVrVHlwZS5MYXN0KSB7XG4gICAgICAgIGNvbnN0IGxhc3REYXkgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsubGFzdC5kYXk7XG5cbiAgICAgICAgYm9XZWVrRXhwID0gYCR7bGFzdERheX1MYDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPT09IEJhc2VPbldlZWtUeXBlLkN1c3RvbSkge1xuICAgICAgICBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmludGVydmFsO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnJlcGVhdC5zdGFydEF0O1xuICAgICAgICAgIGJvV2Vla0V4cCA9IGAke3N0YXJ0QXR9LyR7aW50ZXJ2YWx9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5zcGVjaWZpYy5pc1NwZWNlZmljKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNWYWx1ZXMgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnNwZWNpZmljLnZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2LmlkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVzLmxlbmd0aCAhPT0gMCkgYm9XZWVrRXhwID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmFkZENvbW1hKGJvV2Vla0V4cCk7XG5cbiAgICAgICAgICBib1dlZWtFeHAgPSBib1dlZWtFeHAuY29uY2F0KHNwZWNpZmljVmFsdWVzLmpvaW4oJywnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5pc0RheU9mTW9udGgpIHtcbiAgICAgICAgICBib1dlZWtFeHAgPSB0aGlzLnN0cmluZ1NlcnZpY2UuYWRkQ29tbWEoYm9XZWVrRXhwKTtcblxuICAgICAgICAgIGNvbnN0IGRheSA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXk7XG4gICAgICAgICAgY29uc3QgeHN0ID0gdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5kYXlPZk1vbnRoLnhzdDtcblxuICAgICAgICAgIGJvV2Vla0V4cCA9IGJvV2Vla0V4cC5jb25jYXQoYCR7ZGF5fSMke3hzdH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9XZWVrRXhwID09PSAnJykgYm9XZWVrRXhwID0gJyonO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbYm9XZWVrRXhwLCBib01vbnRoRXhwXTtcbiAgfVxuXG4gIGV4cHJlc3Npb25WYWxpZGF0aW9uKHByZUNyb25FeHByZXNzaW9uUGF0dGVybjogc3RyaW5nLCBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlQ3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXkgPSBwcmVDcm9uRXhwcmVzc2lvblBhdHRlcm4uc3BsaXQoJyAnKTtcbiAgICBjb25zdCBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheSA9IG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybi5zcGxpdCgnICcpO1xuXG4gICAgY29uc3QgZGF5T2ZXZWVrUmVnZXg6IHN0cmluZyA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRSZWdleEl0ZW0oXG4gICAgICBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm4sXG4gICAgICBSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrLFxuICAgICk7XG4gICAgY29uc3QgZGF5T2ZNb250aFJlZ2V4OiBzdHJpbmcgPSB0aGlzLnN0cmluZ1NlcnZpY2UuZ2V0UmVnZXhJdGVtKFxuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuLFxuICAgICAgUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGgsXG4gICAgKTtcblxuICAgIGNvbnN0IGlzRGF5T2ZXZWVrQ2hhbmdlZCA9XG4gICAgICBwcmVDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheVtSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrXSAhPT1cbiAgICAgIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5W1JlZ2V4SXRlbXNJbmRleC5EYXlPZldlZWtdO1xuICAgIGNvbnN0IGlzRGF5T2ZNb250aENoYW5nZWQgPVxuICAgICAgcHJlQ3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdICE9PVxuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdO1xuXG4gICAgY29uc3QgaXNCYXNlZE9uV2VlayA9IGRheU9mV2Vla1JlZ2V4ICE9PSAnKicgJiYgZGF5T2ZXZWVrUmVnZXggIT09ICc/JztcbiAgICBjb25zdCBpc0Jhc2VkT25Nb250aCA9IGRheU9mTW9udGhSZWdleCAhPT0gJz8nO1xuXG4gICAgaWYgKGlzRGF5T2ZXZWVrQ2hhbmdlZCAmJiBpc0Jhc2VkT25Nb250aCkge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdID0gJz8nO1xuICAgICAgcmV0dXJuIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5LmpvaW4oJyAnKTtcbiAgICB9IGVsc2UgaWYgKGlzRGF5T2ZXZWVrQ2hhbmdlZCAmJiAhaXNCYXNlZE9uV2Vlaykge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdID0gJyonO1xuICAgICAgcmV0dXJuIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEYXlPZk1vbnRoQ2hhbmdlZCAmJiBpc0Jhc2VkT25XZWVrKSB7XG4gICAgICBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheVtSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrXSA9ICc/JztcbiAgICAgIHJldHVybiBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheS5qb2luKCcgJyk7XG4gICAgfSBlbHNlIGlmIChpc0RheU9mTW9udGhDaGFuZ2VkICYmICFpc0Jhc2VkT25Nb250aCkge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mV2Vla10gPSAnKic7XG4gICAgICByZXR1cm4gbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXkuam9pbignICcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm47XG4gIH1cblxuICByZXZlcnNFeHByZXNzaW9uKGNyb25FeHByZXNzaW9uUGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXlNb2RlbCA9IG5ldyBEYXkoKTtcbiAgICBjb25zdCBkYXlPZldlZWtSZWdleDogc3RyaW5nID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldFJlZ2V4SXRlbShcbiAgICAgIGNyb25FeHByZXNzaW9uUGF0dGVybixcbiAgICAgIFJlZ2V4SXRlbXNJbmRleC5EYXlPZldlZWssXG4gICAgKTtcbiAgICBjb25zdCBkYXlPZk1vbnRoUmVnZXg6IHN0cmluZyA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRSZWdleEl0ZW0oXG4gICAgICBjcm9uRXhwcmVzc2lvblBhdHRlcm4sXG4gICAgICBSZWdleEl0ZW1zSW5kZXguRGF5T2ZNb250aCxcbiAgICApO1xuXG4gICAgY29uc3QgaXNCYXNlZE9uV2VlayA9IGRheU9mV2Vla1JlZ2V4ICE9PSAnKicgJiYgZGF5T2ZXZWVrUmVnZXggIT09ICc/JztcbiAgICBjb25zdCBpc0Jhc2VkT25Nb250aCA9IGRheU9mTW9udGhSZWdleCAhPT0gJz8nO1xuICAgIGNvbnN0IGlzRXZlcnlEYXk6IGJvb2xlYW4gPSAhaXNCYXNlZE9uV2VlayAmJiAhaXNCYXNlZE9uTW9udGg7XG4gICAgaWYgKGlzRXZlcnlEYXkpIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwudHlwZSA9IERheVR5cGUuRXZlcnk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQmFzZWRPbldlZWspIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwudHlwZSA9IERheVR5cGUuQk9XZWVrO1xuICAgICAgdGhpcy5yZXZlcnNFeHByZXNzaW9uQmFzZWRPbldlZWsoZGF5T2ZXZWVrUmVnZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0Jhc2VkT25Nb250aCkge1xuICAgICAgdGhpcy5kYXlNb2RlbC50eXBlID0gRGF5VHlwZS5CT01vbnRoO1xuICAgICAgdGhpcy5yZXZlcnNFeHByZXNzaW9uQmFzZWRPbk1vbnRoKGRheU9mTW9udGhSZWdleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcmV2ZXJzRXhwcmVzc2lvbkJhc2VkT25XZWVrKHJlZ2V4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAqKlJlZ2V4IHBhdHRlcm4gdG8gY2hlY2sgaWQgY3VzdG9tIG9yIG5vdCoqXG4gICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXlswLTldTCQnKTtcbiAgICBjb25zdCBpc0N1c3RvbSA9ICFyZWdleFBhdHRlcm4udGVzdChyZWdleCk7XG4gICAgaWYgKCFpc0N1c3RvbSkge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPSBCYXNlT25XZWVrVHlwZS5MYXN0O1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmxhc3QuZGF5ID0gcGFyc2VJbnQocmVnZXhbMF0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay50eXBlID0gQmFzZU9uV2Vla1R5cGUuQ3VzdG9tO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldEludGVydmFsQ3JvbkRhdGEocmVnZXgpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsSXRlbXMgPSBpbnRlcnZhbERhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzSW50ZXJ2YWxJdGVtcykge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQgPSB0cnVlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaW50ZXJ2YWwgPSBpbnRlcnZhbERhdGE/LmludGVydmFsIGFzIG51bWJlcjtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LnN0YXJ0QXQgPSBpbnRlcnZhbERhdGE/LnN0YXJ0QXQgYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRTcGVjaWZpY0Nyb25EYXRhKHJlZ2V4LCB0aGlzLmRheXNMaXN0KTtcbiAgICBjb25zdCBoYXNTcGVjaWZpY0l0ZW1zID0gc3BlY2lmaWNEYXRhICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc1NwZWNpZmljSXRlbXMpIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpYyA9IHRydWU7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnNwZWNpZmljLnZhbHVlcyA9IHNwZWNpZmljRGF0YSBhcyBBcnJheTxEcm9wRG93bkl0ZW0+O1xuICAgIH1cblxuICAgIGNvbnN0IGRheU9mTW9udGhEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldERheU9mTW9udGhDcm9uRGF0YShyZWdleCk7XG4gICAgY29uc3QgaGFzRGF5T2ZNb250aERhdGFJdGVtID0gZGF5T2ZNb250aERhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRGF5T2ZNb250aERhdGFJdGVtKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLmRheU9mTW9udGguaXNEYXlPZk1vbnRoID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXkgPSBkYXlPZk1vbnRoRGF0YT8uZGF5IGFzIG51bWJlcjtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC54c3QgPSBkYXlPZk1vbnRoRGF0YT8ueHN0IGFzIG51bWJlcjtcbiAgICB9XG4gIH1cblxuICByZXZlcnNFeHByZXNzaW9uQmFzZWRPbk1vbnRoKHJlZ2V4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0xhc3REYXlPZk1vbnRoID0gcmVnZXggPT0gJ0wnO1xuICAgIGlmIChpc0xhc3REYXlPZk1vbnRoKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPSBCYXNlT25Nb250aFR5cGUuTGFzdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAqKlJlZ2V4IHBhdHRlcm4gdG8gY2hlY2sgaWYgaWQgYmVmb3JlIG9yIG5vdCoqXG4gICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXkwtWzAtOV0rJCcpO1xuICAgIGNvbnN0IGlzQ3VzdG9tID0gIXJlZ2V4UGF0dGVybi50ZXN0KHJlZ2V4KTtcbiAgICBpZiAoIWlzQ3VzdG9tKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPSBCYXNlT25Nb250aFR5cGUuQmVmb3JlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5iZWZvcmUgPSBwYXJzZUludChyZWdleC5zdWJzdHIoMikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9IEJhc2VPbk1vbnRoVHlwZS5DdXN0b207XG5cbiAgICBjb25zdCBpbnRlcnZhbERhdGEgPSB0aGlzLnN0cmluZ1NlcnZpY2UuZ2V0SW50ZXJ2YWxDcm9uRGF0YShyZWdleCk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxJdGVtcyA9IGludGVydmFsRGF0YSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChoYXNJbnRlcnZhbEl0ZW1zKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQgPSB0cnVlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsID0gaW50ZXJ2YWxEYXRhPy5pbnRlcnZhbCBhcyBudW1iZXI7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuc3RhcnRBdCA9IGludGVydmFsRGF0YT8uc3RhcnRBdCBhcyBudW1iZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldFNwZWNpZmljQ3JvbkRhdGEocmVnZXgsIHRoaXMuZGF5c0xpc3QpO1xuICAgIGNvbnN0IGhhc1NwZWNpZmljSXRlbXMgPSBzcGVjaWZpY0RhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzU3BlY2lmaWNJdGVtcykge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpYyA9IHRydWU7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMgPSBzcGVjaWZpY0RhdGEgYXMgQXJyYXk8RHJvcERvd25JdGVtPjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|