@material-extra/timepicker
Version:
Material timepicker component
163 lines • 23.1 kB
JavaScript
import { TimepickerUtil } from './timepicker.util';
export class Duration {
constructor(hour, minute, second) {
this.hour = hour;
this.minute = minute;
this.second = second;
}
static parseTimes(times) {
let hour, minute, second;
if (times.length > 1) {
hour = parseInt(times[0], 10);
minute = parseInt(times[1], 10);
if (TimepickerUtil.isRealNumber(hour) && TimepickerUtil.isRealNumber(minute)) {
if (times.length > 2) {
second = parseInt(times[2], 10);
}
if (!TimepickerUtil.isRealNumber(second)) {
second = 0;
}
if (hour < 0) {
hour = 0;
}
if (minute < 0) {
minute = 0;
}
if (second < 0) {
second = 0;
}
hour %= 24;
minute %= 60;
second %= 60;
if (hour < 12 && times.length > 2 && times[2].toLowerCase().includes('pm')) {
hour += 12;
}
return new Duration(hour, minute, second);
}
}
return null;
}
static valueOf(hour, minute, second) {
return new Duration(hour, minute, second);
}
static zero() {
return new Duration(0, 0, 0);
}
static fromMillis(count) {
if (count < 0) {
return null;
}
return new Duration(Math.floor(count / Duration.matrix.hours.milliseconds) % Duration.matrix.days.hours, Math.floor(count / Duration.matrix.minutes.milliseconds) % Duration.matrix.hours.minutes, Math.floor(count / Duration.matrix.seconds.milliseconds) % Duration.matrix.minutes.seconds);
}
static fromString(value, separator) {
if (typeof value === 'string') {
let time;
if (typeof separator === 'string') {
time = Duration.parseTimes(value.split(separator));
if (time) {
return time;
}
}
time = Duration.parseTimes(value.split(':'));
if (time) {
return time;
}
time = Duration.parseTimes(value.split('-'));
if (time) {
return time;
}
time = Duration.parseTimes(value.split('.'));
if (time) {
return time;
}
time = Duration.parseTimes(value.split(';'));
if (time) {
return time;
}
time = Duration.parseTimes(value.split(','));
if (time) {
return time;
}
}
return null;
}
static fromDate(value) {
if (value instanceof Date) {
return new Duration(value.getHours(), value.getMinutes(), value.getSeconds());
}
return null;
}
static now(second = true) {
const now = new Date();
return new Duration(now.getHours(), now.getMinutes(), second ? now.getSeconds() : 0);
}
clone() {
return new Duration(this.hour, this.minute, this.second);
}
getValue(type) {
if (['hour', 'minute', 'second'].includes(type)) {
return this[type];
}
return null;
}
setValue(type, value) {
if (['hour', 'minute', 'second'].includes(type)) {
this[type] = value;
}
return this;
}
setNew(type, value) {
const result = new Duration(this.hour, this.minute, this.second);
if (['hour', 'minute', 'second'].includes(type)) {
result[type] = value;
}
return result;
}
format(format) {
if (format) {
const replace = (f, v, r) => {
let match;
while (true) {
match = r.match(f);
if (match && typeof match[0] === 'string') {
r = r.replace(match[0], String(v).padStart(match[0].length, '0'));
}
else {
break;
}
}
return r;
};
let result = format;
result = replace(/h+/i, this.hour, result);
result = replace(/m+/i, this.minute, result);
result = replace(/s+/i, this.second, result);
return result;
}
else {
return `${String(this.hour).padStart(2, '0')}:${String(this.minute).padStart(2, '0')}:${String(this.second).padStart(2, '0')}`;
}
}
milliseconds() {
return this.hour * Duration.matrix.hours.milliseconds +
this.minute * Duration.matrix.minutes.milliseconds +
this.second * Duration.matrix.seconds.milliseconds;
}
setToDate(value) {
value.setHours(this.hour);
value.setMinutes(this.minute);
value.setSeconds(this.second);
value.setMilliseconds(0);
return value;
}
equals(value) {
return value != null && this.hour === value.hour && this.minute === value.minute && this.second === value.second;
}
}
Duration.matrix = {
days: { hours: 24, minutes: 1440, seconds: 86400, milliseconds: 86400000 },
hours: { minutes: 60, seconds: 3600, milliseconds: 3600000 },
minutes: { seconds: 60, milliseconds: 60000 },
seconds: { milliseconds: 1000 }
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Eb2N1bWVudHMvTGlicmFyeS9Bbmd1bGFyL21hdGVyaWFsLWV4dGVuZC9wcm9qZWN0cy9tYXRlcmlhbC90aW1lcGlja2VyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90aW1lcGlja2VyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQVdqRCxNQUFNLE9BQU8sUUFBUTtJQVlqQixZQUFZLElBQVksRUFBRSxNQUFjLEVBQUUsTUFBYztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFlO1FBQ3JDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoQyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUUsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbEIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ25DO2dCQUNELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FB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SSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDM0QsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFXO1FBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFlO1FBQ2xCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNySCxDQUFDOztBQXRMTSxlQUFNLEdBQVE7SUFDakIsSUFBSSxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBQztJQUN4RSxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBQztJQUMxRCxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUM7SUFDM0MsT0FBTyxFQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQztDQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUaW1lcGlja2VyVXRpbH0gZnJvbSAnLi90aW1lcGlja2VyLnV0aWwnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDbG9ja1R5cGUgPSAnaG91cicgfCAnbWludXRlJyB8ICdzZWNvbmQnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDbGlja1R5cGUgPSAnb2snIHwgJ2NhbmNlbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsb2NrQ2hhbmdlIHtcclxuICAgIHR5cGU6IENsb2NrVHlwZTtcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEdXJhdGlvbiB7XHJcbiAgICBzdGF0aWMgbWF0cml4OiBhbnkgPSB7XHJcbiAgICAgICAgZGF5czoge2hvdXJzOiAyNCwgbWludXRlczogMTQ0MCwgc2Vjb25kczogODY0MDAsIG1pbGxpc2Vjb25kczogODY0MDAwMDB9LFxyXG4gICAgICAgIGhvdXJzOiB7bWludXRlczogNjAsIHNlY29uZHM6IDM2MDAsIG1pbGxpc2Vjb25kczogMzYwMDAwMH0sXHJcbiAgICAgICAgbWludXRlczoge3NlY29uZHM6IDYwLCBtaWxsaXNlY29uZHM6IDYwMDAwfSxcclxuICAgICAgICBzZWNvbmRzOiB7bWlsbGlzZWNvbmRzOiAxMDAwfVxyXG4gICAgfTtcclxuXHJcbiAgICBob3VyOiBudW1iZXI7XHJcbiAgICBtaW51dGU6IG51bWJlcjtcclxuICAgIHNlY29uZDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gaG91cjtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IG1pbnV0ZTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBwYXJzZVRpbWVzKHRpbWVzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGxldCBob3VyLCBtaW51dGUsIHNlY29uZDtcclxuICAgICAgICBpZiAodGltZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBob3VyID0gcGFyc2VJbnQodGltZXNbMF0sIDEwKTtcclxuICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGltZXNbMV0sIDEwKTtcclxuICAgICAgICAgICAgaWYgKFRpbWVwaWNrZXJVdGlsLmlzUmVhbE51bWJlcihob3VyKSAmJiBUaW1lcGlja2VyVXRpbC5pc1JlYWxOdW1iZXIobWludXRlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludCh0aW1lc1syXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFUaW1lcGlja2VyVXRpbC5pc1JlYWxOdW1iZXIoc2Vjb25kKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWludXRlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBob3VyICU9IDI0O1xyXG4gICAgICAgICAgICAgICAgbWludXRlICU9IDYwO1xyXG4gICAgICAgICAgICAgICAgc2Vjb25kICU9IDYwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIgJiYgdGltZXMubGVuZ3RoID4gMiAmJiB0aW1lc1syXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdwbScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWx1ZU9mKGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogRHVyYXRpb24ge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB6ZXJvKCk6IER1cmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gbmV3IER1cmF0aW9uKDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50OiBudW1iZXIpOiBEdXJhdGlvbiB7XHJcbiAgICAgICAgaWYgKGNvdW50IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbihcclxuICAgICAgICAgICAgTWF0aC5mbG9vcihjb3VudCAvIER1cmF0aW9uLm1hdHJpeC5ob3Vycy5taWxsaXNlY29uZHMpICUgRHVyYXRpb24ubWF0cml4LmRheXMuaG91cnMsXHJcbiAgICAgICAgICAgIE1hdGguZmxvb3IoY291bnQgLyBEdXJhdGlvbi5tYXRyaXgubWludXRlcy5taWxsaXNlY29uZHMpICUgRHVyYXRpb24ubWF0cml4LmhvdXJzLm1pbnV0ZXMsXHJcbiAgICAgICAgICAgIE1hdGguZmxvb3IoY291bnQgLyBEdXJhdGlvbi5tYXRyaXguc2Vjb25kcy5taWxsaXNlY29uZHMpICUgRHVyYXRpb24ubWF0cml4Lm1pbnV0ZXMuc2Vjb25kc1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdHJpbmcodmFsdWU6IHN0cmluZywgc2VwYXJhdG9yPzogc3RyaW5nKTogRHVyYXRpb24ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlcGFyYXRvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRpbWUgPSBEdXJhdGlvbi5wYXJzZVRpbWVzKHZhbHVlLnNwbGl0KHNlcGFyYXRvcikpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aW1lID0gRHVyYXRpb24ucGFyc2VUaW1lcyh2YWx1ZS5zcGxpdCgnOicpKTtcclxuICAgICAgICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpbWUgPSBEdXJhdGlvbi5wYXJzZVRpbWVzKHZhbHVlLnNwbGl0KCctJykpO1xyXG4gICAgICAgICAgICBpZiAodGltZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGltZSA9IER1cmF0aW9uLnBhcnNlVGltZXModmFsdWUuc3BsaXQoJy4nKSk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aW1lID0gRHVyYXRpb24ucGFyc2VUaW1lcyh2YWx1ZS5zcGxpdCgnOycpKTtcclxuICAgICAgICAgICAgaWYgKHRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpbWUgPSBEdXJhdGlvbi5wYXJzZVRpbWVzKHZhbHVlLnNwbGl0KCcsJykpO1xyXG4gICAgICAgICAgICBpZiAodGltZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21EYXRlKHZhbHVlOiBEYXRlKTogRHVyYXRpb24ge1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCksIHZhbHVlLmdldFNlY29uZHMoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3coc2Vjb25kOiBib29sZWFuID0gdHJ1ZSk6IER1cmF0aW9uIHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24obm93LmdldEhvdXJzKCksIG5vdy5nZXRNaW51dGVzKCksIHNlY29uZCA/IG5vdy5nZXRTZWNvbmRzKCkgOiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9uZSgpOiBEdXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWUodHlwZTogQ2xvY2tUeXBlKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1t0eXBlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUodHlwZTogQ2xvY2tUeXBlLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKFsnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgICAgICAgdGhpc1t0eXBlXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXROZXcodHlwZTogQ2xvY2tUeXBlLCB2YWx1ZTogbnVtYmVyKTogRHVyYXRpb24ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRHVyYXRpb24gPSBuZXcgRHVyYXRpb24odGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgIGlmIChbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFt0eXBlXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdChmb3JtYXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZSA9IChmLCB2LCByKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gci5tYXRjaChmKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgdHlwZW9mIG1hdGNoWzBdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG1hdGNoWzBdLCBTdHJpbmcodikucGFkU3RhcnQobWF0Y2hbMF0ubGVuZ3RoLCAnMCcpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVwbGFjZSgvaCsvaSwgdGhpcy5ob3VyLCByZXN1bHQpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXBsYWNlKC9tKy9pLCB0aGlzLm1pbnV0ZSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVwbGFjZSgvcysvaSwgdGhpcy5zZWNvbmQsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke1N0cmluZyh0aGlzLmhvdXIpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHRoaXMubWludXRlKS5wYWRTdGFydCgyLCAnMCcpfToke1N0cmluZyh0aGlzLnNlY29uZCkucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ob3VyICogRHVyYXRpb24ubWF0cml4LmhvdXJzLm1pbGxpc2Vjb25kcyArXHJcbiAgICAgICAgICAgIHRoaXMubWludXRlICogRHVyYXRpb24ubWF0cml4Lm1pbnV0ZXMubWlsbGlzZWNvbmRzICtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmQgKiBEdXJhdGlvbi5tYXRyaXguc2Vjb25kcy5taWxsaXNlY29uZHM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VG9EYXRlKHZhbHVlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICAgICAgdmFsdWUuc2V0SG91cnModGhpcy5ob3VyKTtcclxuICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKHRoaXMubWludXRlKTtcclxuICAgICAgICB2YWx1ZS5zZXRTZWNvbmRzKHRoaXMuc2Vjb25kKTtcclxuICAgICAgICB2YWx1ZS5zZXRNaWxsaXNlY29uZHMoMCk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGVxdWFscyh2YWx1ZTogRHVyYXRpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0aGlzLmhvdXIgPT09IHZhbHVlLmhvdXIgJiYgdGhpcy5taW51dGUgPT09IHZhbHVlLm1pbnV0ZSAmJiB0aGlzLnNlY29uZCA9PT0gdmFsdWUuc2Vjb25kO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==