UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

121 lines 19.4 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ // from https://github.com/hsuanxyz/ng-time-parser import { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common'; import { isNotNil } from 'ng-zorro-antd/core/util'; export class NgTimeParser { constructor(format, localeId) { this.format = format; this.localeId = localeId; this.regex = null; this.matchMap = { hour: null, minute: null, second: null, periodNarrow: null, periodWide: null, periodAbbreviated: null }; this.genRegexp(); } toDate(str) { const result = this.getTimeResult(str); const time = new Date(); if (isNotNil(result === null || result === void 0 ? void 0 : result.hour)) { time.setHours(result.hour); } if (isNotNil(result === null || result === void 0 ? void 0 : result.minute)) { time.setMinutes(result.minute); } if (isNotNil(result === null || result === void 0 ? void 0 : result.second)) { time.setSeconds(result.second); } if ((result === null || result === void 0 ? void 0 : result.period) === 1 && time.getHours() < 12) { time.setHours(time.getHours() + 12); } return time; } getTimeResult(str) { const match = this.regex.exec(str); let period = null; if (match) { if (isNotNil(this.matchMap.periodNarrow)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).indexOf(match[this.matchMap.periodNarrow + 1]); } if (isNotNil(this.matchMap.periodWide)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).indexOf(match[this.matchMap.periodWide + 1]); } if (isNotNil(this.matchMap.periodAbbreviated)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).indexOf(match[this.matchMap.periodAbbreviated + 1]); } return { hour: isNotNil(this.matchMap.hour) ? Number.parseInt(match[this.matchMap.hour + 1], 10) : null, minute: isNotNil(this.matchMap.minute) ? Number.parseInt(match[this.matchMap.minute + 1], 10) : null, second: isNotNil(this.matchMap.second) ? Number.parseInt(match[this.matchMap.second + 1], 10) : null, period }; } else { return null; } } genRegexp() { let regexStr = this.format.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$&'); const hourRegex = /h{1,2}/i; const minuteRegex = /m{1,2}/; const secondRegex = /s{1,2}/; const periodNarrow = /aaaaa/; const periodWide = /aaaa/; const periodAbbreviated = /a{1,3}/; const hourMatch = hourRegex.exec(this.format); const minuteMatch = minuteRegex.exec(this.format); const secondMatch = secondRegex.exec(this.format); const periodNarrowMatch = periodNarrow.exec(this.format); let periodWideMatch = null; let periodAbbreviatedMatch = null; if (!periodNarrowMatch) { periodWideMatch = periodWide.exec(this.format); } if (!periodWideMatch && !periodNarrowMatch) { periodAbbreviatedMatch = periodAbbreviated.exec(this.format); } const matchs = [hourMatch, minuteMatch, secondMatch, periodNarrowMatch, periodWideMatch, periodAbbreviatedMatch] .filter(m => !!m) .sort((a, b) => a.index - b.index); matchs.forEach((match, index) => { switch (match) { case hourMatch: this.matchMap.hour = index; regexStr = regexStr.replace(hourRegex, '(\\d{1,2})'); break; case minuteMatch: this.matchMap.minute = index; regexStr = regexStr.replace(minuteRegex, '(\\d{1,2})'); break; case secondMatch: this.matchMap.second = index; regexStr = regexStr.replace(secondRegex, '(\\d{1,2})'); break; case periodNarrowMatch: this.matchMap.periodNarrow = index; const periodsNarrow = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).join('|'); regexStr = regexStr.replace(periodNarrow, `(${periodsNarrow})`); break; case periodWideMatch: this.matchMap.periodWide = index; const periodsWide = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).join('|'); regexStr = regexStr.replace(periodWide, `(${periodsWide})`); break; case periodAbbreviatedMatch: this.matchMap.periodAbbreviated = index; const periodsAbbreviated = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).join('|'); regexStr = regexStr.replace(periodAbbreviated, `(${periodsAbbreviated})`); break; } }); this.regex = new RegExp(regexStr); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvdnN0cy93b3JrLzEvcy9jb21wb25lbnRzL2NvcmUvdGltZS8iLCJzb3VyY2VzIjpbInRpbWUtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGtEQUFrRDtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBU25ELE1BQU0sT0FBTyxZQUFZO0lBV3ZCLFlBQW9CLE1BQWMsRUFBVSxRQUFnQjtRQUF4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQVY1RCxVQUFLLEdBQVcsSUFBSyxDQUFDO1FBQ3RCLGFBQVEsR0FBcUM7WUFDM0MsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDO1FBR0EsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FB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LElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUixLQUFLLGVBQWU7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDakMsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLHNCQUFzQjtvQkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEgsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7b0JBQzFFLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9oc3Vhbnh5ei9uZy10aW1lLXBhcnNlclxuaW1wb3J0IHsgRm9ybVN0eWxlLCBnZXRMb2NhbGVEYXlQZXJpb2RzLCBUcmFuc2xhdGlvbldpZHRoIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGlzTm90TmlsIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSZXN1bHQge1xuICBob3VyOiBudW1iZXIgfCBudWxsO1xuICBtaW51dGU6IG51bWJlciB8IG51bGw7XG4gIHNlY29uZDogbnVtYmVyIHwgbnVsbDtcbiAgcGVyaW9kOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgTmdUaW1lUGFyc2VyIHtcbiAgcmVnZXg6IFJlZ0V4cCA9IG51bGwhO1xuICBtYXRjaE1hcDogeyBba2V5OiBzdHJpbmddOiBudWxsIHwgbnVtYmVyIH0gPSB7XG4gICAgaG91cjogbnVsbCxcbiAgICBtaW51dGU6IG51bGwsXG4gICAgc2Vjb25kOiBudWxsLFxuICAgIHBlcmlvZE5hcnJvdzogbnVsbCxcbiAgICBwZXJpb2RXaWRlOiBudWxsLFxuICAgIHBlcmlvZEFiYnJldmlhdGVkOiBudWxsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtYXQ6IHN0cmluZywgcHJpdmF0ZSBsb2NhbGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nZW5SZWdleHAoKTtcbiAgfVxuXG4gIHRvRGF0ZShzdHI6IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0VGltZVJlc3VsdChzdHIpO1xuICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKGlzTm90TmlsKHJlc3VsdD8uaG91cikpIHtcbiAgICAgIHRpbWUuc2V0SG91cnMocmVzdWx0IS5ob3VyKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb3ROaWwocmVzdWx0Py5taW51dGUpKSB7XG4gICAgICB0aW1lLnNldE1pbnV0ZXMocmVzdWx0IS5taW51dGUpO1xuICAgIH1cblxuICAgIGlmIChpc05vdE5pbChyZXN1bHQ/LnNlY29uZCkpIHtcbiAgICAgIHRpbWUuc2V0U2Vjb25kcyhyZXN1bHQhLnNlY29uZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdD8ucGVyaW9kID09PSAxICYmIHRpbWUuZ2V0SG91cnMoKSA8IDEyKSB7XG4gICAgICB0aW1lLnNldEhvdXJzKHRpbWUuZ2V0SG91cnMoKSArIDEyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZTtcbiAgfVxuXG4gIGdldFRpbWVSZXN1bHQoc3RyOiBzdHJpbmcpOiBUaW1lUmVzdWx0IHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLnJlZ2V4LmV4ZWMoc3RyKTtcbiAgICBsZXQgcGVyaW9kID0gbnVsbDtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLm1hdGNoTWFwLnBlcmlvZE5hcnJvdykpIHtcbiAgICAgICAgcGVyaW9kID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLmxvY2FsZUlkLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLk5hcnJvdykuaW5kZXhPZihcbiAgICAgICAgICBtYXRjaFt0aGlzLm1hdGNoTWFwLnBlcmlvZE5hcnJvdyArIDFdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5wZXJpb2RXaWRlKSkge1xuICAgICAgICBwZXJpb2QgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMubG9jYWxlSWQsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSkuaW5kZXhPZihtYXRjaFt0aGlzLm1hdGNoTWFwLnBlcmlvZFdpZGUgKyAxXSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5wZXJpb2RBYmJyZXZpYXRlZCkpIHtcbiAgICAgICAgcGVyaW9kID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLmxvY2FsZUlkLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKS5pbmRleE9mKFxuICAgICAgICAgIG1hdGNoW3RoaXMubWF0Y2hNYXAucGVyaW9kQWJicmV2aWF0ZWQgKyAxXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG91cjogaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5ob3VyKSA/IE51bWJlci5wYXJzZUludChtYXRjaFt0aGlzLm1hdGNoTWFwLmhvdXIgKyAxXSwgMTApIDogbnVsbCxcbiAgICAgICAgbWludXRlOiBpc05vdE5pbCh0aGlzLm1hdGNoTWFwLm1pbnV0ZSkgPyBOdW1iZXIucGFyc2VJbnQobWF0Y2hbdGhpcy5tYXRjaE1hcC5taW51dGUgKyAxXSwgMTApIDogbnVsbCxcbiAgICAgICAgc2Vjb25kOiBpc05vdE5pbCh0aGlzLm1hdGNoTWFwLnNlY29uZCkgPyBOdW1iZXIucGFyc2VJbnQobWF0Y2hbdGhpcy5tYXRjaE1hcC5zZWNvbmQgKyAxXSwgMTApIDogbnVsbCxcbiAgICAgICAgcGVyaW9kXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZW5SZWdleHAoKTogdm9pZCB7XG4gICAgbGV0IHJlZ2V4U3RyID0gdGhpcy5mb3JtYXQucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkJicpO1xuICAgIGNvbnN0IGhvdXJSZWdleCA9IC9oezEsMn0vaTtcbiAgICBjb25zdCBtaW51dGVSZWdleCA9IC9tezEsMn0vO1xuICAgIGNvbnN0IHNlY29uZFJlZ2V4ID0gL3N7MSwyfS87XG4gICAgY29uc3QgcGVyaW9kTmFycm93ID0gL2FhYWFhLztcbiAgICBjb25zdCBwZXJpb2RXaWRlID0gL2FhYWEvO1xuICAgIGNvbnN0IHBlcmlvZEFiYnJldmlhdGVkID0gL2F7MSwzfS87XG5cbiAgICBjb25zdCBob3VyTWF0Y2ggPSBob3VyUmVnZXguZXhlYyh0aGlzLmZvcm1hdCk7XG4gICAgY29uc3QgbWludXRlTWF0Y2ggPSBtaW51dGVSZWdleC5leGVjKHRoaXMuZm9ybWF0KTtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZFJlZ2V4LmV4ZWModGhpcy5mb3JtYXQpO1xuICAgIGNvbnN0IHBlcmlvZE5hcnJvd01hdGNoID0gcGVyaW9kTmFycm93LmV4ZWModGhpcy5mb3JtYXQpO1xuICAgIGxldCBwZXJpb2RXaWRlTWF0Y2g6IG51bGwgfCBSZWdFeHBFeGVjQXJyYXkgPSBudWxsO1xuICAgIGxldCBwZXJpb2RBYmJyZXZpYXRlZE1hdGNoOiBudWxsIHwgUmVnRXhwRXhlY0FycmF5ID0gbnVsbDtcbiAgICBpZiAoIXBlcmlvZE5hcnJvd01hdGNoKSB7XG4gICAgICBwZXJpb2RXaWRlTWF0Y2ggPSBwZXJpb2RXaWRlLmV4ZWModGhpcy5mb3JtYXQpO1xuICAgIH1cbiAgICBpZiAoIXBlcmlvZFdpZGVNYXRjaCAmJiAhcGVyaW9kTmFycm93TWF0Y2gpIHtcbiAgICAgIHBlcmlvZEFiYnJldmlhdGVkTWF0Y2ggPSBwZXJpb2RBYmJyZXZpYXRlZC5leGVjKHRoaXMuZm9ybWF0KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaHMgPSBbaG91ck1hdGNoLCBtaW51dGVNYXRjaCwgc2Vjb25kTWF0Y2gsIHBlcmlvZE5hcnJvd01hdGNoLCBwZXJpb2RXaWRlTWF0Y2gsIHBlcmlvZEFiYnJldmlhdGVkTWF0Y2hdXG4gICAgICAuZmlsdGVyKG0gPT4gISFtKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEhLmluZGV4IC0gYiEuaW5kZXgpO1xuXG4gICAgbWF0Y2hzLmZvckVhY2goKG1hdGNoLCBpbmRleCkgPT4ge1xuICAgICAgc3dpdGNoIChtYXRjaCkge1xuICAgICAgICBjYXNlIGhvdXJNYXRjaDpcbiAgICAgICAgICB0aGlzLm1hdGNoTWFwLmhvdXIgPSBpbmRleDtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2UoaG91clJlZ2V4LCAnKFxcXFxkezEsMn0pJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgbWludXRlTWF0Y2g6XG4gICAgICAgICAgdGhpcy5tYXRjaE1hcC5taW51dGUgPSBpbmRleDtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2UobWludXRlUmVnZXgsICcoXFxcXGR7MSwyfSknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzZWNvbmRNYXRjaDpcbiAgICAgICAgICB0aGlzLm1hdGNoTWFwLnNlY29uZCA9IGluZGV4O1xuICAgICAgICAgIHJlZ2V4U3RyID0gcmVnZXhTdHIucmVwbGFjZShzZWNvbmRSZWdleCwgJyhcXFxcZHsxLDJ9KScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHBlcmlvZE5hcnJvd01hdGNoOlxuICAgICAgICAgIHRoaXMubWF0Y2hNYXAucGVyaW9kTmFycm93ID0gaW5kZXg7XG4gICAgICAgICAgY29uc3QgcGVyaW9kc05hcnJvdyA9IGdldExvY2FsZURheVBlcmlvZHModGhpcy5sb2NhbGVJZCwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5OYXJyb3cpLmpvaW4oJ3wnKTtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2UocGVyaW9kTmFycm93LCBgKCR7cGVyaW9kc05hcnJvd30pYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgcGVyaW9kV2lkZU1hdGNoOlxuICAgICAgICAgIHRoaXMubWF0Y2hNYXAucGVyaW9kV2lkZSA9IGluZGV4O1xuICAgICAgICAgIGNvbnN0IHBlcmlvZHNXaWRlID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLmxvY2FsZUlkLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLldpZGUpLmpvaW4oJ3wnKTtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2UocGVyaW9kV2lkZSwgYCgke3BlcmlvZHNXaWRlfSlgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBwZXJpb2RBYmJyZXZpYXRlZE1hdGNoOlxuICAgICAgICAgIHRoaXMubWF0Y2hNYXAucGVyaW9kQWJicmV2aWF0ZWQgPSBpbmRleDtcbiAgICAgICAgICBjb25zdCBwZXJpb2RzQWJicmV2aWF0ZWQgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMubG9jYWxlSWQsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpLmpvaW4oJ3wnKTtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2UocGVyaW9kQWJicmV2aWF0ZWQsIGAoJHtwZXJpb2RzQWJicmV2aWF0ZWR9KWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdleCA9IG5ldyBSZWdFeHAocmVnZXhTdHIpO1xuICB9XG59XG4iXX0=