cf-common-lib
Version:
Object Validators and Utilities
335 lines • 22 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
var PropagatorUtilService = /** @class */ (function () {
function PropagatorUtilService() {
}
/**
* @param {?} objects
* @param {?} keyName
* @param {?} value
* @param {?} ignoreCase
* @return {?}
*/
PropagatorUtilService.prototype.findInObjectsArrayFromKey = /**
* @param {?} objects
* @param {?} keyName
* @param {?} value
* @param {?} ignoreCase
* @return {?}
*/
function (objects, keyName, value, ignoreCase) {
if (ignoreCase) {
return objects.find((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item[keyName].toLowerCase() == value.toLowerCase();
}));
}
return objects.find((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item[keyName] == value;
}));
};
;
/**
* @param {?} objects
* @param {?} keyName
* @return {?}
*/
PropagatorUtilService.prototype.extractKeysFromObjectsList = /**
* @param {?} objects
* @param {?} keyName
* @return {?}
*/
function (objects, keyName) {
return objects.map((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item[keyName];
}));
};
;
/**
* @param {?} objects
* @param {?} key
* @param {?} value
* @return {?}
*/
PropagatorUtilService.prototype.objectArrayIndexOf = /**
* @param {?} objects
* @param {?} key
* @param {?} value
* @return {?}
*/
function (objects, key, value) {
return this.extractKeysFromObjectsList(objects, key).indexOf(value);
};
;
/**
* @param {?} objects
* @param {?} key
* @param {?} value
* @return {?}
*/
PropagatorUtilService.prototype.objectArrayFindFromKey = /**
* @param {?} objects
* @param {?} key
* @param {?} value
* @return {?}
*/
function (objects, key, value) {
/** @type {?} */
var index = this.extractKeysFromObjectsList(objects, key).indexOf(value);
if (index === -1) {
return;
}
return objects[index];
};
;
/**
* @param {?} objects
* @param {?} keyName
* @param {?} value
* @return {?}
*/
PropagatorUtilService.prototype.filterInObjectsArrayFromKey = /**
* @param {?} objects
* @param {?} keyName
* @param {?} value
* @return {?}
*/
function (objects, keyName, value) {
return objects.filter((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item[keyName] === value;
}));
};
;
/**
* @param {?} objects
* @param {?} keys
* @param {?} keyName
* @return {?}
*/
PropagatorUtilService.prototype.filterObjectsFromKeys = /**
* @param {?} objects
* @param {?} keys
* @param {?} keyName
* @return {?}
*/
function (objects, keys, keyName) {
return objects.filter((/**
* @param {?} item
* @return {?}
*/
function (item) {
return keys.indexOf(item[keyName]) !== -1;
}));
};
;
/**
* @param {?} _arr
* @return {?}
*/
PropagatorUtilService.prototype.flattenArray = /**
* @param {?} _arr
* @return {?}
*/
function (_arr) {
return _flattenArray(_arr);
/**
* @param {?} _arr
* @return {?}
*/
function _flattenArray(_arr) {
return _arr.reduce((/**
* @param {?} _acc
* @param {?} _value
* @return {?}
*/
function (_acc, _value) {
return Array.isArray(_value)
? _acc.concat(_flattenArray(_value))
: _acc.concat(_value);
}), []);
}
};
/**
* @param {?} callback
* @param {...?} urls
* @return {?}
*/
PropagatorUtilService.prototype.jsCssScriptInjector = /**
* @param {?} callback
* @param {...?} urls
* @return {?}
*/
function (callback) {
var urls = [];
for (var _i = 1; _i < arguments.length; _i++) {
urls[_i - 1] = arguments[_i];
}
/** @type {?} */
var _count = 0;
/** @type {?} */
var _element;
this.flattenArray(urls).forEach((/**
* @param {?} _url
* @return {?}
*/
function (_url) {
if (_url.endsWith(".js")) {
_element = document.createElement('script');
_element.src = _url;
_element.type = 'text/javascript';
_element.async = true;
}
if (_url.endsWith(".css")) {
_element = document.createElement('link');
_element.rel = "stylesheet";
_element.href = _url;
}
if (callback) {
_element.addEventListener("load", (/**
* @return {?}
*/
function () {
_count++;
if (_count == urls.length) {
callback(urls);
}
}));
}
document.getElementsByTagName('head')[0].appendChild(_element);
}));
};
/**
* @param {?} x
* @param {?} y
* @return {?}
*/
PropagatorUtilService.prototype.isObjectsEqual = /**
* @param {?} x
* @param {?} y
* @return {?}
*/
function (x, y) {
return _objectEquals(x, y);
/**
* @param {?} x
* @param {?} y
* @return {?}
*/
function _objectEquals(x, y) {
if (x === null || x === undefined || y === null || y === undefined) {
return x === y;
}
// after this just checking type of one would be enough
if (x.constructor !== y.constructor) {
return false;
}
// if they are functions, they should exactly refer to same one (because of closures)
if (x instanceof Function) {
return x === y;
}
// if they are regexps, they should exactly refer to same one (it is hard to better equality check on current ES)
if (x instanceof RegExp) {
return x === y;
}
if (x === y || x.valueOf() === y.valueOf()) {
return true;
}
if (Array.isArray(x) && x.length !== y.length) {
return false;
}
// if they are dates, they must had equal valueOf
if (x instanceof Date) {
return false;
}
// if they are strictly equal, they both need to be object at least
if (!(x instanceof Object)) {
return false;
}
if (!(y instanceof Object)) {
return false;
}
// recursive object equality check
/** @type {?} */
var p = Object.keys(x);
return Object.keys(y).every((/**
* @param {?} i
* @return {?}
*/
function (i) { return p.indexOf(i) !== -1; })) &&
p.every((/**
* @param {?} i
* @return {?}
*/
function (i) { return _objectEquals(x[i], y[i]); }));
}
};
/**
* @param {?} _exclude
* @param {?} _list
* @return {?}
*/
PropagatorUtilService.prototype.excludeValuesFromObjectList = /**
* @param {?} _exclude
* @param {?} _list
* @return {?}
*/
function (_exclude, _list) {
return _excludeValuesFromObjectList(_exclude, _list);
/**
* @param {?} _exclude
* @param {?} _list
* @return {?}
*/
function _excludeValuesFromObjectList(_exclude, _list) {
/** @type {?} */
var temp = [];
for (var _ex in _exclude) {
_exclude[_ex].forEach((/**
* @param {?} _item
* @return {?}
*/
function (_item) {
temp = _list.filter((/**
* @param {?} book
* @return {?}
*/
function (book) {
return book[_ex] != _item;
}));
_list = temp;
}));
}
return _list;
}
};
PropagatorUtilService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PropagatorUtilService.ctorParameters = function () { return []; };
/** @nocollapse */ PropagatorUtilService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PropagatorUtilService_Factory() { return new PropagatorUtilService(); }, token: PropagatorUtilService, providedIn: "root" });
return PropagatorUtilService;
}());
export { PropagatorUtilService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGFnYXRvci11dGlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jZi1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3Byb3BhZ2F0b3ItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQztJQUtJO0lBQWdCLENBQUM7Ozs7Ozs7O0lBRWpCLHlEQUF5Qjs7Ozs7OztJQUF6QixVQUEyQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVO1FBQy9ELElBQUksVUFBVSxFQUFHO1lBQ2hCLE9BQU8sT0FBTyxDQUFDLElBQUk7Ozs7WUFBRSxVQUFBLElBQUk7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFFLE9BQU8sQ0FBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3RCxDQUFDLEVBQUMsQ0FBQztTQUNIO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSTs7OztRQUFFLFVBQUEsSUFBSTtZQUN4QixPQUFPLElBQUksQ0FBRSxPQUFPLENBQUUsSUFBSSxLQUFLLENBQUM7UUFDakMsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDO0lBQUEsQ0FBQzs7Ozs7O0lBR0gsMERBQTBCOzs7OztJQUExQixVQUE0QixPQUFPLEVBQUcsT0FBTztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxHQUFHOzs7O1FBQUUsVUFBQSxJQUFJO1lBQ3ZCLE9BQU8sSUFBSSxDQUFFLE9BQU8sQ0FBRSxDQUFDO1FBQ3hCLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQztJQUFBLENBQUM7Ozs7Ozs7SUFHRixrREFBa0I7Ozs7OztJQUFsQixVQUFvQixPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUs7UUFDdEMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBRSxDQUFDLE9BQU8sQ0FBRSxLQUFL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NUIsQ0FBQyxFQUFDLENBQUM7b0JBQ0gsS0FBSyxHQUFHLElBQUksQ0FBRTtnQkFDZixDQUFDLEVBQUMsQ0FBQzthQUNIO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBRUYsQ0FBQzs7Z0JBakpELFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7O2dDQUpEO0NBdUpDLEFBckpELElBcUpDO1NBbEpZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGFnYXRvclV0aWxTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBmaW5kSW5PYmplY3RzQXJyYXlGcm9tS2V5KCBvYmplY3RzLCBrZXlOYW1lLCB2YWx1ZSwgaWdub3JlQ2FzZSApIHtcblx0XHRcdGlmKCBpZ25vcmVDYXNlICkge1xuXHRcdFx0XHRyZXR1cm4gb2JqZWN0cy5maW5kKCBpdGVtID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gaXRlbVsga2V5TmFtZSBdLnRvTG93ZXJDYXNlKCkgPT0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XHRcblx0XHRcdH0gXG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maW5kKCBpdGVtID0+e1xuXHRcdFx0XHRyZXR1cm4gaXRlbVsga2V5TmFtZSBdID09IHZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXG5cdGV4dHJhY3RLZXlzRnJvbU9iamVjdHNMaXN0KCBvYmplY3RzICwga2V5TmFtZSApIHtcblx0XHRyZXR1cm4gb2JqZWN0cy5tYXAoIGl0ZW0gPT4ge1xuXHRcdFx0cmV0dXJuIGl0ZW1bIGtleU5hbWUgXTtcblx0XHR9KTtcblx0fTtcblxuXG5cdG9iamVjdEFycmF5SW5kZXhPZiggb2JqZWN0cywga2V5LCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gdGhpcy5leHRyYWN0S2V5c0Zyb21PYmplY3RzTGlzdCggb2JqZWN0cywga2V5ICkuaW5kZXhPZiggdmFsdWUgKTtcblx0fTtcblxuXHRvYmplY3RBcnJheUZpbmRGcm9tS2V5KCBvYmplY3RzLCBrZXksIHZhbHVlICkge1xuXHRcdGxldCAgaW5kZXggPSB0aGlzLmV4dHJhY3RLZXlzRnJvbU9iamVjdHNMaXN0KCBvYmplY3RzLCBrZXkgKS5pbmRleE9mKCB2YWx1ZSApO1xuXHRcdGlmKCBpbmRleCA9PT0gLTEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiBvYmplY3RzWyBpbmRleCBdO1xuXHR9O1xuXG5cdGZpbHRlckluT2JqZWN0c0FycmF5RnJvbUtleSggb2JqZWN0cywga2V5TmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoaXRlbSA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtWyBrZXlOYW1lIF0gPT09IHZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRmaWx0ZXJPYmplY3RzRnJvbUtleXMoIG9iamVjdHMsIGtleXMsIGtleU5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoIGl0ZW0gPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5cy5pbmRleE9mKCBpdGVtWyBrZXlOYW1lIF0pICE9PSAtMTtcblx0XHRcdH0pO1xuICAgIH07XG4gICAgXG5cdGZsYXR0ZW5BcnJheShfYXJyKXsgXG5cblx0XHRyZXR1cm4gX2ZsYXR0ZW5BcnJheShfYXJyKTtcblxuICAgICAgICBmdW5jdGlvbiBfZmxhdHRlbkFycmF5KF9hcnIpe1xuICAgICAgICAgICAgcmV0dXJuIF9hcnIucmVkdWNlKGZ1bmN0aW9uKF9hY2MsIF92YWx1ZSl7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShfdmFsdWUpIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYWNjLmNvbmNhdChfZmxhdHRlbkFycmF5KF92YWx1ZSkpXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF9hY2MuY29uY2F0KF92YWx1ZSk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0gXG4gICAgICAgXG4gICAgICAgIFxuXHR9XG5cdFxuXHRqc0Nzc1NjcmlwdEluamVjdG9yKGNhbGxiYWNrLCAuLi51cmxzKSB7XG4gICAgICAgIGxldCBfY291bnQgPSAwO1xuICAgICAgICBsZXQgX2VsZW1lbnQ7IFxuIFxuICAgICAgICB0aGlzLmZsYXR0ZW5BcnJheSh1cmxzKS5mb3JFYWNoKF91cmwgPT4geyAgXG4gICAgICAgICAgICBpZihfdXJsLmVuZHNXaXRoKFwiLmpzXCIpKSB7XG4gICAgICAgICAgICAgICAgX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgICAgIF9lbGVtZW50LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihfdXJsLmVuZHNXaXRoKFwiLmNzc1wiKSkge1xuICAgICAgICAgICAgICAgIF9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOyBcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5yZWwgPSBcInN0eWxlc2hlZXRcIjtcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5ocmVmID0gX3VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrKSB7IFxuICAgICAgICAgICAgICAgIF9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBfY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgaWYoX2NvdW50PT11cmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJscyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoX2VsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuXHRcdH1cblx0XHRcblxuXHRpc09iamVjdHNFcXVhbCh4LCB5KXtcblxuXHRcdHJldHVybiBfb2JqZWN0RXF1YWxzKHgsIHkpIDtcblx0XHRcblx0XHRmdW5jdGlvbiBfb2JqZWN0RXF1YWxzKHgsIHkpIHsgIFxuXHRcdFx0aWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IG51bGwgfHwgeSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB4ID09PSB5OyB9XG5cdFx0XHQvLyBhZnRlciB0aGlzIGp1c3QgY2hlY2tpbmcgdHlwZSBvZiBvbmUgd291bGQgYmUgZW5vdWdoXG5cdFx0XHRpZiAoeC5jb25zdHJ1Y3RvciAhPT0geS5jb25zdHJ1Y3RvcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdC8vIGlmIHRoZXkgYXJlIGZ1bmN0aW9ucywgdGhleSBzaG91bGQgZXhhY3RseSByZWZlciB0byBzYW1lIG9uZSAoYmVjYXVzZSBvZiBjbG9zdXJlcylcblx0XHRcdGlmICh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHsgcmV0dXJuIHggPT09IHk7IH1cblx0XHRcdC8vIGlmIHRoZXkgYXJlIHJlZ2V4cHMsIHRoZXkgc2hvdWxkIGV4YWN0bHkgcmVmZXIgdG8gc2FtZSBvbmUgKGl0IGlzIGhhcmQgdG8gYmV0dGVyIGVxdWFsaXR5IGNoZWNrIG9uIGN1cnJlbnQgRVMpXG5cdFx0XHRpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkgeyByZXR1cm4geCA9PT0geTsgfVxuXHRcdFx0aWYgKHggPT09IHkgfHwgeC52YWx1ZU9mKCkgPT09IHkudmFsdWVPZigpKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh4KSAmJiB4Lmxlbmd0aCAhPT0geS5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XG5cdFx0XHQvLyBpZiB0aGV5IGFyZSBkYXRlcywgdGhleSBtdXN0IGhhZCBlcXVhbCB2YWx1ZU9mXG5cdFx0XHRpZiAoeCBpbnN0YW5jZW9mIERhdGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XG5cdFx0XHQvLyBpZiB0aGV5IGFyZSBzdHJpY3RseSBlcXVhbCwgdGhleSBib3RoIG5lZWQgdG8gYmUgb2JqZWN0IGF0IGxlYXN0XG5cdFx0XHRpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmICghKHkgaW5zdGFuY2VvZiBPYmplY3QpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFxuXHRcdFx0Ly8gcmVjdXJzaXZlIG9iamVjdCBlcXVhbGl0eSBjaGVja1xuXHRcdFx0dmFyIHAgPSBPYmplY3Qua2V5cyh4KTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyh5KS5ldmVyeShmdW5jdGlvbiAoaSkgeyByZXR1cm4gcC5pbmRleE9mKGkpICE9PSAtMTsgfSkgJiZcblx0XHRcdFx0cC5ldmVyeShmdW5jdGlvbiAoaSkgeyByZXR1cm4gX29iamVjdEVxdWFscyh4W2ldLCB5W2ldKTsgfSk7XG5cdFx0fVxuXHR9XG5cblxuXHRleGNsdWRlVmFsdWVzRnJvbU9iamVjdExpc3QoX2V4Y2x1ZGUsIF9saXN0KXtcblxuXHRcdHJldHVybiBfZXhjbHVkZVZhbHVlc0Zyb21PYmplY3RMaXN0KF9leGNsdWRlLCBfbGlzdClcblxuXHRcdGZ1bmN0aW9uIF9leGNsdWRlVmFsdWVzRnJvbU9iamVjdExpc3QoX2V4Y2x1ZGUsIF9saXN0KXtcblx0XHRcdGxldCB0ZW1wID0gW107XG5cdFx0XHRmb3IodmFyIF9leCBpbiBfZXhjbHVkZSl7IFxuXHRcdFx0XHRfZXhjbHVkZVtfZXhdLmZvckVhY2goZnVuY3Rpb24oX2l0ZW0peyBcblx0XHRcdFx0XHR0ZW1wID0gX2xpc3QuZmlsdGVyKGZ1bmN0aW9uKGJvb2speyAgXG5cdFx0XHRcdFx0XHRyZXR1cm4gYm9va1tfZXhdICE9IF9pdGVtIDsgXG5cdFx0XHRcdFx0fSk7ICAgXG5cdFx0XHRcdFx0X2xpc3QgPSB0ZW1wIDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IFxuXHRcdFx0cmV0dXJuIF9saXN0O1xuXHRcdH1cblxuXHR9XG5cblx0XG5cbn1cbiJdfQ==