@pkt/utils
Version:
188 lines • 18.3 kB
JavaScript
/**
* Check if value is a function.
*/
export function isFunction(value) {
return typeof value === 'function';
}
/**
* Check if value is a valid JSON.
*/
export function isJson(value) {
try {
JSON.parse(value);
return true;
}
catch (e) {
return false;
}
}
/**
* Check if value is a string primitive.
*/
export function isString(value) {
return objToStr(value) === '[object String]';
}
/**
* Check if value is a type primitive
*/
export function is(value, type) {
return objToStr(value) === `[object ${type}]`;
}
/**
* Check if value is a string primitive.
*
* isNonEmptyString(''); // -> false
*/
export function isNonEmptyString(value) {
return typeof value === 'string' && value !== '';
}
/**
* Check if value is undefined.
*
* isUndefined(void 0); // -> true
*/
export function isUndefined(value) {
return value === undefined;
}
export function isUndefinedOrEmptyString(value) {
return value === undefined || value === '';
}
/**
* Check if value is an Null.
*/
export function isNull(value) {
return value === null;
}
/**
* Check if value is null or undefined, the same as value == null.
*
* isNullOrUndefined(null); // -> true
* isNullOrUndefined(undefined); // -> true
* isNullOrUndefined(void 0); // -> true
*/
export function isNullOrUndefined(obj) {
return obj === null || obj === undefined;
}
/**
* Check if value is the language type of Object.
*
* isObject({}); // -> true
* isObject([]); // -> true
*/
export function isObject(value) {
return value instanceof Object;
}
export function isObjectAndNotArray(value) {
return isObject(value) && !Array.isArray(value);
}
export function isObjectAndNotArrayNotNode(value) {
return isObjectAndNotArray(value) && !isNode(value);
}
export function isNode(value) {
return value instanceof Node;
}
/**
* exists
* @param obj
* @returns boolean
*/
export function exists(obj) {
return !isNullOrUndefined(obj);
}
/**
* Check if value is classified as a Number primitive or object.
*/
export function isNum(value) {
return /^((-?\d+\.\d+)|(-?\d+)|(-?\.\d+))$/.test(value.toString());
}
/**
* Checks if value is classified as a Integer.
*/
export function isInt(value) {
return isNum(value) && value % 1 === 0;
}
/**
* Checks if value is classified as a Decimal.
*/
export function isDecimal(value) {
return isNum(value) && !isInt(value);
}
/**
* Check if number is odd.
*/
export function isOdd(value) {
if (!isInt(value)) {
return false;
}
return value % 2 !== 0;
}
/**
* Check if value is an IdCard.
*/
export function isIdCard(value) {
return typeof value === 'string' && /(^\d{15}$)|(^\d{17}([0-9]|X)$)/i.test(value);
}
/**
* Check if value is an Mobile.
*/
export function isMobile(value) {
return (typeof value === 'string' &&
/^(0|\+?86|17951)?(13[0-9]|14[579]|15[0-9]|16[6]|17[1-3,5-8]|18[0-9]|19[189])[0-9]{8}$/.test(value));
}
/**
* Check if value is an url address.
*/
export function isUrl(value) {
// eslint-disable-next-line no-useless-escape
return /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/.test(value);
}
/**
* Check if value is an IP address.
*/
export function isIp(value) {
const v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}';
const regV4 = new RegExp('^'.concat(v4, '$'));
const v6seg = '[a-fA-F\\d]{1,4}';
const v6 = [
'(',
'(?:'.concat(v6seg, ':){7}(?:').concat(v6seg, '|:)|'),
'(?:'.concat(v6seg, ':){6}(?:').concat(v4, '|:').concat(v6seg, '|:)|'),
'(?:'.concat(v6seg, ':){5}(?::').concat(v4, '|(:').concat(v6seg, '){1,2}|:)|'),
'(?:'
.concat(v6seg, ':){4}(?:(:')
.concat(v6seg, '){0,1}:')
.concat(v4, '|(:')
.concat(v6seg, '){1,3}|:)|'),
'(?:'
.concat(v6seg, ':){3}(?:(:')
.concat(v6seg, '){0,2}:')
.concat(v4, '|(:')
.concat(v6seg, '){1,4}|:)|'),
'(?:'
.concat(v6seg, ':){2}(?:(:')
.concat(v6seg, '){0,3}:')
.concat(v4, '|(:')
.concat(v6seg, '){1,5}|:)|'),
'(?:'
.concat(v6seg, ':){1}(?:(:')
.concat(v6seg, '){0,4}:')
.concat(v4, '|(:')
.concat(v6seg, '){1,6}|:)|'),
'(?::((?::'.concat(v6seg, '){0,5}:').concat(v4, '|(?::').concat(v6seg, '){1,7}|:))'),
')(%[0-9a-zA-Z]{1,})?'
].join('');
const regV6 = new RegExp('^'.concat(v6, '$'));
return regV4.test(value) || regV6.test(value);
}
/**
* Loosely validate an email address.
*/
export function isEmail(value) {
const regEmail = /.+@.+\..+/;
return regEmail.test(value);
}
function objToStr(val) {
const ObjToStr = Object.prototype.toString;
return ObjToStr.call(val);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlscy9zcmMvdmFsaWRhdGUvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWM7SUFDdkMsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7QUFDckMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUFjO0lBQ25DLElBQUksQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYztJQUNyQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFBaUIsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsRUFBRSxDQUFDLEtBQWMsRUFBRSxJQUFZO0lBQzdDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBMEM7SUFDekUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBMEI7SUFDcEQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBbUM7SUFDMUUsT0FBTyxLQUFLLEtBQUssU0FBUyxJ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QU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO2FBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDcEYsc0JBQXNCO0tBQ3ZCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU5QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWE7SUFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQzdCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBWTtJQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMzQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2FmZUFueSB9IGZyb20gJ0Bwa3QvdXRpbHMvdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSB2YWxpZCBKU09OLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNKc29uKHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHN0cmluZyBwcmltaXRpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqVG9TdHIodmFsdWUpID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHR5cGUgcHJpbWl0aXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh2YWx1ZTogU2FmZUFueSwgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmpUb1N0cih2YWx1ZSkgPT09IGBbb2JqZWN0ICR7dHlwZX1dYDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHN0cmluZyBwcmltaXRpdmUuXG4gKlxuICogaXNOb25FbXB0eVN0cmluZygnJyk7IC8vIC0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICpcbiAqIGlzVW5kZWZpbmVkKHZvaWQgMCk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmRlZmluZWQgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBOdWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsKHZhbHVlOiBudWxsIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZSBzYW1lIGFzIHZhbHVlID09IG51bGwuXG4gKlxuICogaXNOdWxsT3JVbmRlZmluZWQobnVsbCk7IC8vIC0+IHRydWVcbiAqIGlzTnVsbE9yVW5kZWZpbmVkKHVuZGVmaW5lZCk7IC8vIC0+IHRydWVcbiAqIGlzTnVsbE9yVW5kZWZpbmVkKHZvaWQgMCk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKG9iajogbnVsbCB8IHVuZGVmaW5lZCB8IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyB0aGUgbGFuZ3VhZ2UgdHlwZSBvZiBPYmplY3QuXG4gKlxuICogaXNPYmplY3Qoe30pOyAvLyAtPiB0cnVlXG4gKiBpc09iamVjdChbXSk7IC8vIC0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0QW5kTm90QXJyYXkodmFsdWU6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdEFuZE5vdEFycmF5Tm90Tm9kZSh2YWx1ZTogU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNPYmplY3RBbmROb3RBcnJheSh2YWx1ZSkgJiYgIWlzTm9kZSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGUodmFsdWU6IFNhZmVBbnkpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZTtcbn1cblxuLyoqXG4gKiBleGlzdHNcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhvYmo6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtKHZhbHVlOiBzdHJpbmcgfCBTYWZlQW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAvXigoLT9cXGQrXFwuXFxkKyl8KC0/XFxkKyl8KC0/XFwuXFxkKykpJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgY2xhc3NpZmllZCBhcyBhIEludGVnZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogbnVtYmVyIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOdW0odmFsdWUpICYmIHZhbHVlICUgMSA9PT0gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgY2xhc3NpZmllZCBhcyBhIERlY2ltYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlY2ltYWwodmFsdWU6IG51bWJlciB8IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTnVtKHZhbHVlKSAmJiAhaXNJbnQodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIG51bWJlciBpcyBvZGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09kZCh2YWx1ZTogbnVtYmVyIHwgU2FmZUFueSk6IGJvb2xlYW4ge1xuICBpZiAoIWlzSW50KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgJSAyICE9PSAwO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGFuIElkQ2FyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWRDYXJkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgLyheXFxkezE1fSQpfCheXFxkezE3fShbMC05XXxYKSQpL2kudGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gTW9iaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAvXigwfFxcKz84NnwxNzk1MSk/KDEzWzAtOV18MTRbNTc5XXwxNVswLTldfDE2WzZdfDE3WzEtMyw1LThdfDE4WzAtOV18MTlbMTg5XSlbMC05XXs4fSQvLnRlc3QoXG4gICAgICB2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiB1cmwgYWRkcmVzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIHJldHVybiAvKCgoXmh0dHBzPzooPzpcXC9cXC8pPykoPzpbLTs6Jj1cXCtcXCQsXFx3XStAKT9bQS1aYS16MC05Li1dKyg/OjpcXGQrKT98KD86d3d3LnxbLTs6Jj1cXCtcXCQsXFx3XStAKVtBLVphLXowLTkuLV0rKSgoPzpcXC9bXFwrfiVcXC8uXFx3LV9dKik/XFw/Pyg/OlstXFwrPSY7JUAuXFx3X10qKSM/KD86W1xcd10qKSk/KSQvLnRlc3QoXG4gICAgdmFsdWVcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBJUCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJcCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHY0ID1cbiAgICAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuICBjb25zdCByZWdWNCA9IG5ldyBSZWdFeHAoJ14nLmNvbmNhdCh2NCwgJyQnKSk7XG4gIGNvbnN0IHY2c2VnID0gJ1thLWZBLUZcXFxcZF17MSw0fSc7XG4gIGNvbnN0IHY2ID0gW1xuICAgICcoJyxcbiAgICAnKD86Jy5jb25jYXQodjZzZWcsICc6KXs3fSg/OicpLmNvbmNhdCh2NnNlZywgJ3w6KXwnKSxcbiAgICAnKD86Jy5jb25jYXQodjZzZWcsICc6KXs2fSg/OicpLmNvbmNhdCh2NCwgJ3w6JykuY29uY2F0KHY2c2VnLCAnfDopfCcpLFxuICAgICcoPzonLmNvbmNhdCh2NnNlZywgJzopezV9KD86OicpLmNvbmNhdCh2NCwgJ3woOicpLmNvbmNhdCh2NnNlZywgJyl7MSwyfXw6KXwnKSxcbiAgICAnKD86J1xuICAgICAgLmNvbmNhdCh2NnNlZywgJzopezR9KD86KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MCwxfTonKVxuICAgICAgLmNvbmNhdCh2NCwgJ3woOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXsxLDN9fDopfCcpLFxuICAgICcoPzonXG4gICAgICAuY29uY2F0KHY2c2VnLCAnOil7M30oPzooOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDJ9OicpXG4gICAgICAuY29uY2F0KHY0LCAnfCg6JylcbiAgICAgIC5jb25jYXQodjZzZWcsICcpezEsNH18Oil8JyksXG4gICAgJyg/OidcbiAgICAgIC5jb25jYXQodjZzZWcsICc6KXsyfSg/Oig6JylcbiAgICAgIC5jb25jYXQodjZzZWcsICcpezAsM306JylcbiAgICAgIC5jb25jYXQodjQsICd8KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MSw1fXw6KXwnKSxcbiAgICAnKD86J1xuICAgICAgLmNvbmNhdCh2NnNlZywgJzopezF9KD86KDonKVxuICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MCw0fTonKVxuICAgICAgLmNvbmNhdCh2NCwgJ3woOicpXG4gICAgICAuY29uY2F0KHY2c2VnLCAnKXsxLDZ9fDopfCcpLFxuICAgICcoPzo6KCg/OjonLmNvbmNhdCh2NnNlZywgJyl7MCw1fTonKS5jb25jYXQodjQsICd8KD86OicpLmNvbmNhdCh2NnNlZywgJyl7MSw3fXw6KSknKSxcbiAgICAnKSglWzAtOWEtekEtWl17MSx9KT8nXG4gIF0uam9pbignJyk7XG4gIGNvbnN0IHJlZ1Y2ID0gbmV3IFJlZ0V4cCgnXicuY29uY2F0KHY2LCAnJCcpKTtcblxuICByZXR1cm4gcmVnVjQudGVzdCh2YWx1ZSkgfHwgcmVnVjYudGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogTG9vc2VseSB2YWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWFpbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJlZ0VtYWlsID0gLy4rQC4rXFwuLisvO1xuICByZXR1cm4gcmVnRW1haWwudGVzdCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG9ialRvU3RyKHZhbDogU2FmZUFueSk6IHN0cmluZyB7XG4gIGNvbnN0IE9ialRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbiAgcmV0dXJuIE9ialRvU3RyLmNhbGwodmFsKTtcbn1cbiJdfQ==