@pepperi/lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.
149 lines • 16.4 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
// export class JsonFilter {
// ExpressionId: number;
// ComplexId: number;
// ApiName: string;
// Operation: string;
// Values: string[];
// constructor() {
// this.ExpressionId = 1;
// this.ApiName = '';
// this.Operation = '';
// this.Values = [];
// }
// initFromObj(obj: JsonFilter): void {
// if (obj) {
// this.ExpressionId = obj.ExpressionId;
// this.ApiName = obj.ApiName;
// this.Operation = obj.Operation;
// if (this.Values !== obj.Values) {
// this.Values = [];
// if (obj.Values) {
// obj.Values.forEach((value) => this.Values.push(value));
// }
// }
// }
// }
// Valid(): boolean {
// return this.Operation !== '' && this.ApiName !== '';
// }
// }
// export class JsonFilters {
// leftNode: string;
// rightNode: string;
// operator: string;
// ComplexId: number;
// constructor(left = '', right = '', operator = 'AND', complexId = 2) {
// this.leftNode = left;
// this.rightNode = right;
// this.operator = operator;
// this.ComplexId = complexId;
// }
// toString(): string {
// let retVal = '';
// if (this.leftNode !== '' && this.rightNode === '') {
// retVal = this.leftNode;
// } else if (this.leftNode === '' && this.rightNode !== '') {
// retVal = this.rightNode;
// } else if (this.leftNode !== '' && this.rightNode !== '') {
// retVal = '{ "ComplexId":' + this.ComplexId + ',';
// retVal += ' "Operation":"' + this.operator + '",';
// retVal += ' "LeftNode": ' + this.leftNode + ',';
// retVal += ' "RightNode": ' + this.rightNode + '}';
// }
// return retVal;
// }
// }
// export enum DATE_RANGE {
// None = 0,
// InTheLast = 1,
// Today = 2,
// ThisWeek = 3,
// ThisMonth = 4,
// /*Before = 5, After = 6,*/ Between = 5,
// DueIn = 6,
// On = 7,
// NotInTheLast = 8,
// NotDueIn = 9,
// IsEmpty = 10,
// IsNotEmpty = 11,
// }
// export enum DATE_PERIOD {
// None = 0,
// Days = 1,
// Weeks = 2,
// Months = 3,
// Years = 4,
// }
// export enum DATE_RANGE_VIEWTYPE {
// None = 0,
// Period = 1,
// OneCalendar = 2,
// TwoCalendars = 3,
// NoCalendars = 4,
// }
export class UtilitiesService {
constructor() { }
parseDate(dateStr, showTime = false) {
let retVal = null;
if (dateStr !== '') {
retVal = new Date(dateStr);
const dateText = dateStr.split('-');
if (dateText.length === 3 && !showTime) {
const year = Number(dateText[0]);
const month = Number(dateText[1]) - 1;
const day = Number(dateText[2]);
retVal = new Date(year, month, day);
}
}
if (retVal && isNaN(retVal.getTime())) {
retVal = null;
}
return retVal;
}
stringifyDate(date, showTime = false) {
if (date) {
const dateText = [];
dateText.push(date.getFullYear(), '-', date.getMonth() + 1, '-', date.getDate());
if (showTime) {
dateText.push('T', (date.getHours() < 10 ? '0' : '') + date.getHours(), ':', (date.getMinutes() < 10 ? '0' : '') + date.getMinutes(), ':', (date.getSeconds() < 10 ? '0' : '') + date.getSeconds(), 'Z');
}
return dateText.join('');
}
else {
return '';
}
}
stringifyDateWithOffset(date, showTime = false) {
if (showTime) {
const offsetMinutes = new Date().getTimezoneOffset() * -1;
date.setMinutes(date.getMinutes() - offsetMinutes);
}
return this.stringifyDate(date, showTime);
}
isValueHtml(value) {
let res = false;
const REGEXP = /<\/?[a-z][\s\S]*>/i;
res = REGEXP.test(value);
return res;
}
isJsonString(str) {
try {
JSON.parse(str);
}
catch (e) {
return false;
}
return true;
}
}
UtilitiesService.ɵfac = function UtilitiesService_Factory(t) { return new (t || UtilitiesService)(); };
UtilitiesService.ɵprov = i0.ɵɵdefineInjectable({ token: UtilitiesService, factory: UtilitiesService.ɵfac, providedIn: 'root' });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(UtilitiesService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], function () { return []; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wZXBwZXJpLWxpYi9zcmMvY29yZS9jb21tb24vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFekMsNEJBQTRCO0FBQzVCLDRCQUE0QjtBQUM1Qix5QkFBeUI7QUFDekIsdUJBQXVCO0FBQ3ZCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixRQUFRO0FBRVIsMkNBQTJDO0FBQzNDLHFCQUFxQjtBQUNyQixvREFBb0Q7QUFDcEQsMENBQTBDO0FBQzFDLDhDQUE4QztBQUU5QyxnREFBZ0Q7QUFDaEQsb0NBQW9DO0FBQ3BDLG9DQUFvQztBQUNwQyw4RUFBOEU7QUFDOUUsb0JBQW9CO0FBQ3BCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osUUFBUTtBQUVSLHlCQUF5QjtBQUN6QiwrREFBK0Q7QUFDL0QsUUFBUTtBQUNSLElBQUk7QUFFSiw2QkFBNkI7QUFDN0Isd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIseUJBQXlCO0FBRXpCLDRFQUE0RTtBQUM1RSxnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQyxzQ0FBc0M7QUFDdEMsUUFBUTtBQUVSLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsK0RBQStEO0FBQy9ELHNDQUFzQztBQUN0QyxzRUFBc0U7QUFDdEUsdUNBQXVDO0FBQ3ZDLHNFQUFzRTtBQUN0RSxnRUFBZ0U7QUFDaEUsaUVBQWlFO0FBQ2pFLCtEQUErRDtBQUMvRCxpRUFBaUU7QUFDakUsWUFBWTtBQUNaLHlCQUF5QjtBQUN6QixRQUFR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SUFFRCx1QkFBdUIsQ0FBQyxJQUFVLEVBQUUsV0FBb0IsS0FBSztRQUN6RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztTQUN0RDtRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3JCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNoQixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUNwQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUNwQixJQUFJO1lBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnRkFyRVEsZ0JBQWdCO3dEQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQUZiLE1BQU07a0RBRVQsZ0JBQWdCO2NBSDVCLFVBQVU7ZUFBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vLyBleHBvcnQgY2xhc3MgSnNvbkZpbHRlciB7XHJcbi8vICAgICBFeHByZXNzaW9uSWQ6IG51bWJlcjtcclxuLy8gICAgIENvbXBsZXhJZDogbnVtYmVyO1xyXG4vLyAgICAgQXBpTmFtZTogc3RyaW5nO1xyXG4vLyAgICAgT3BlcmF0aW9uOiBzdHJpbmc7XHJcbi8vICAgICBWYWx1ZXM6IHN0cmluZ1tdO1xyXG4vLyAgICAgY29uc3RydWN0b3IoKSB7XHJcbi8vICAgICAgICAgdGhpcy5FeHByZXNzaW9uSWQgPSAxO1xyXG4vLyAgICAgICAgIHRoaXMuQXBpTmFtZSA9ICcnO1xyXG4vLyAgICAgICAgIHRoaXMuT3BlcmF0aW9uID0gJyc7XHJcbi8vICAgICAgICAgdGhpcy5WYWx1ZXMgPSBbXTtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICBpbml0RnJvbU9iaihvYmo6IEpzb25GaWx0ZXIpOiB2b2lkIHtcclxuLy8gICAgICAgICBpZiAob2JqKSB7XHJcbi8vICAgICAgICAgICAgIHRoaXMuRXhwcmVzc2lvbklkID0gb2JqLkV4cHJlc3Npb25JZDtcclxuLy8gICAgICAgICAgICAgdGhpcy5BcGlOYW1lID0gb2JqLkFwaU5hbWU7XHJcbi8vICAgICAgICAgICAgIHRoaXMuT3BlcmF0aW9uID0gb2JqLk9wZXJhdGlvbjtcclxuXHJcbi8vICAgICAgICAgICAgIGlmICh0aGlzLlZhbHVlcyAhPT0gb2JqLlZhbHVlcykge1xyXG4vLyAgICAgICAgICAgICAgICAgdGhpcy5WYWx1ZXMgPSBbXTtcclxuLy8gICAgICAgICAgICAgICAgIGlmIChvYmouVmFsdWVzKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgb2JqLlZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5WYWx1ZXMucHVzaCh2YWx1ZSkpO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLk9wZXJhdGlvbiAhPT0gJycgJiYgdGhpcy5BcGlOYW1lICE9PSAnJztcclxuLy8gICAgIH1cclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGNsYXNzIEpzb25GaWx0ZXJzIHtcclxuLy8gICAgIGxlZnROb2RlOiBzdHJpbmc7XHJcbi8vICAgICByaWdodE5vZGU6IHN0cmluZztcclxuLy8gICAgIG9wZXJhdG9yOiBzdHJpbmc7XHJcbi8vICAgICBDb21wbGV4SWQ6IG51bWJlcjtcclxuXHJcbi8vICAgICBjb25zdHJ1Y3RvcihsZWZ0ID0gJycsIHJpZ2h0ID0gJycsIG9wZXJhdG9yID0gJ0FORCcsIGNvbXBsZXhJZCA9IDIpIHtcclxuLy8gICAgICAgICB0aGlzLmxlZnROb2RlID0gbGVmdDtcclxuLy8gICAgICAgICB0aGlzLnJpZ2h0Tm9kZSA9IHJpZ2h0O1xyXG4vLyAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcclxuLy8gICAgICAgICB0aGlzLkNvbXBsZXhJZCA9IGNvbXBsZXhJZDtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4vLyAgICAgICAgIGxldCByZXRWYWwgPSAnJztcclxuLy8gICAgICAgICBpZiAodGhpcy5sZWZ0Tm9kZSAhPT0gJycgJiYgdGhpcy5yaWdodE5vZGUgPT09ICcnKSB7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCA9IHRoaXMubGVmdE5vZGU7XHJcbi8vICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnROb2RlID09PSAnJyAmJiB0aGlzLnJpZ2h0Tm9kZSAhPT0gJycpIHtcclxuLy8gICAgICAgICAgICAgcmV0VmFsID0gdGhpcy5yaWdodE5vZGU7XHJcbi8vICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnROb2RlICE9PSAnJyAmJiB0aGlzLnJpZ2h0Tm9kZSAhPT0gJycpIHtcclxuLy8gICAgICAgICAgICAgcmV0VmFsID0gJ3sgXCJDb21wbGV4SWRcIjonICsgdGhpcy5Db21wbGV4SWQgKyAnLCc7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCArPSAnIFwiT3BlcmF0aW9uXCI6XCInICsgdGhpcy5vcGVyYXRvciArICdcIiwnO1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgKz0gJyBcIkxlZnROb2RlXCI6ICcgKyB0aGlzLmxlZnROb2RlICsgJywnO1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgKz0gJyBcIlJpZ2h0Tm9kZVwiOiAnICsgdGhpcy5yaWdodE5vZGUgKyAnfSc7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICAgIHJldHVybiByZXRWYWw7XHJcbi8vICAgICB9XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBlbnVtIERBVEVfUkFOR0Uge1xyXG4vLyAgICAgTm9uZSA9IDAsXHJcbi8vICAgICBJblRoZUxhc3QgPSAxLFxyXG4vLyAgICAgVG9kYXkgPSAyLFxyXG4vLyAgICAgVGhpc1dlZWsgPSAzLFxyXG4vLyAgICAgVGhpc01vbnRoID0gNCxcclxuLy8gICAgIC8qQmVmb3JlID0gNSwgQWZ0ZXIgPSA2LCovIEJldHdlZW4gPSA1LFxyXG4vLyAgICAgRHVlSW4gPSA2LFxyXG4vLyAgICAgT24gPSA3LFxyXG4vLyAgICAgTm90SW5UaGVMYXN0ID0gOCxcclxuLy8gICAgIE5vdER1ZUluID0gOSxcclxuLy8gICAgIElzRW1wdHkgPSAxMCxcclxuLy8gICAgIElzTm90RW1wdHkgPSAxMSxcclxuLy8gfVxyXG4vLyBleHBvcnQgZW51bSBEQVRFX1BFUklPRCB7XHJcbi8vICAgICBOb25lID0gMCxcclxuLy8gICAgIERheXMgPSAxLFxyXG4vLyAgICAgV2Vla3MgPSAyLFxyXG4vLyAgICAgTW9udGhzID0gMyxcclxuLy8gICAgIFllYXJzID0gNCxcclxuLy8gfVxyXG4vLyBleHBvcnQgZW51bSBEQVRFX1JBTkdFX1ZJRVdUWVBFIHtcclxuLy8gICAgIE5vbmUgPSAwLFxyXG4vLyAgICAgUGVyaW9kID0gMSxcclxuLy8gICAgIE9uZUNhbGVuZGFyID0gMixcclxuLy8gICAgIFR3b0NhbGVuZGFycyA9IDMsXHJcbi8vICAgICBOb0NhbGVuZGFycyA9IDQsXHJcbi8vIH1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdGllc1NlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBsZXQgcmV0VmFsID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0ZVN0ciAhPT0gJycpIHtcclxuICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoID09PSAzICYmICFzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlVGV4dFswXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlVGV4dFsxXSkgLSAxO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVUZXh0WzJdKTtcclxuICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXRWYWwgJiYgaXNOYU4ocmV0VmFsLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgcmV0VmFsID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZhbDtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdpZnlEYXRlKGRhdGU6IERhdGUsIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gW107XHJcbiAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goZGF0ZS5nZXRGdWxsWWVhcigpLCAnLScsIGRhdGUuZ2V0TW9udGgoKSArIDEsICctJywgZGF0ZS5nZXREYXRlKCkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlVGV4dC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICdUJyxcclxuICAgICAgICAgICAgICAgICAgICAoZGF0ZS5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJzonLFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRlLmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgZGF0ZS5nZXRNaW51dGVzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJzonLFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRlLmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgZGF0ZS5nZXRTZWNvbmRzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJ1onXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZVRleHQuam9pbignJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdpZnlEYXRlV2l0aE9mZnNldChkYXRlOiBEYXRlLCBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xO1xyXG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgLSBvZmZzZXRNaW51dGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeURhdGUoZGF0ZSwgc2hvd1RpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsdWVIdG1sKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgUkVHRVhQID0gLzxcXC8/W2Etel1bXFxzXFxTXSo+L2k7XHJcbiAgICAgICAgcmVzID0gUkVHRVhQLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSnNvblN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIEpTT04ucGFyc2Uoc3RyKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19