@hpe/angular-toolkit
Version:
Hewlett-Packard Enterprise : Angular toolkit for rapid project development
156 lines (153 loc) • 13.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
//=============================================================================
//===
//=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.
//===
//=== Use of this source code is governed by an MIT-style license that can be
//=== found in the LICENSE file
//=============================================================================
import { Component, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { AbstractFormComponent } from "../abstract-form-component";
//=============================================================================
export class InputCombo extends AbstractFormComponent {
constructor() {
super();
}
/**
* @return {?}
*/
get dataMap() {
return this._dataMap;
}
/**
* @param {?} map
* @return {?}
*/
set dataMap(map) {
this._dataMap = map;
this.key = "id";
this.value = "value";
let /** @type {?} */ list = [];
if (!this.required) {
list.push({
"id": null,
"value": null
});
}
for (let /** @type {?} */ key in map) {
let /** @type {?} */ name = Number(key);
let /** @type {?} */ value = map[key];
if (isNaN(name)) {
name = key;
}
list.push({
"id": name,
"value": value
});
}
this.data = list;
}
/**
* @param {?} keyValue
* @return {?}
*/
writeValue(keyValue) {
let /** @type {?} */ item = this.data.find((item) => {
return (item[this.key] == keyValue);
});
//--- Select first entry in case there is no match
if (item == null) {
if (this.data != null && this.data.length > 0) {
item = this.data[0];
}
}
this._selectedItem = item;
}
/**
* @return {?}
*/
get selectedItem() {
return this._selectedItem;
}
/**
* @param {?} newItem
* @return {?}
*/
set selectedItem(newItem) {
this._selectedItem = newItem;
this.onChange(newItem[this.key]);
}
/**
* @return {?}
*/
isProvided() {
return (this.selectedItem != null && this.selectedItem[this.key] != null);
}
}
InputCombo.decorators = [
{ type: Component, args: [{
selector: 'hpe-input-combo',
template: `<!--
=============================================================================
===
=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.
===
=== Use of this source code is governed by an MIT-style license that can be
=== found in the LICENSE file
=============================================================================
-->
<div class="ui-inputgroup spacing">
<hpe-form-label [icon]="icon" [label]="label"></hpe-form-label>
<p-dropdown [options] = "data"
[dataKey] = "key"
[optionLabel]= "value"
[(ngModel)] = "selectedItem"
[ngClass] = "getComponentClass()"
[style] = "{ 'width':'100%' }"
[disabled] = "!enabled">
</p-dropdown>
</div>
`,
styles: [`.spacing{margin-bottom:1rem}.control{width:100%}.required{border-right:5px solid #ff8d6d}.provided{border-right:5px solid #00a982}`],
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: InputCombo,
multi: true
}]
},] },
];
/** @nocollapse */
InputCombo.ctorParameters = () => [];
InputCombo.propDecorators = {
"key": [{ type: Input },],
"value": [{ type: Input },],
"data": [{ type: Input },],
"dataMap": [{ type: Input },],
};
function InputCombo_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
InputCombo.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
InputCombo.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
InputCombo.propDecorators;
/** @type {?} */
InputCombo.prototype.key;
/** @type {?} */
InputCombo.prototype.value;
/** @type {?} */
InputCombo.prototype.data;
/** @type {?} */
InputCombo.prototype._selectedItem;
/** @type {?} */
InputCombo.prototype._dataMap;
}
//=============================================================================
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY29tYm8uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHBlL2FuZ3VsYXItdG9vbGtpdC9ndWkvZm9ybS8iLCJzb3VyY2VzIjpbImlucHV0LWNvbWJvL2lucHV0LWNvbWJvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBVyxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQVUsZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFJakU7QUFtQ0EsTUFBTSxpQkFBa0IsU0FBUSxxQkFBcUI7SUF1QnBEO1FBQ0MsS0FBSyxFQUFFLENBQUM7S0FDUjs7OztRQVNHLE9BQU87UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0lBS3RCLElBQUksT0FBTyxDQUFDLEdBQVk7UUFFdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBUSxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBTSxPQUFPLENBQUM7UUFFeEIscUJBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVkLEVBQUUsQ0FBQyxDQUFFLENBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBRTtnQkFDVixJQUFJLEVBQU0sSUFBSTtnQkFDZCxPQUFPLEVBQUcsSUFBSTthQUNkLENBQUMsQ0FBQztTQUNIO1FBRUQsR0FBRyxDQUFDLENBQUMscUJBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckIscUJBQUksSUFBSSxHQUFVLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixxQkFBSSxLQUFLLEdBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksR0FBRyxHQUFHLENBQUM7YUFDWDtZQUVELElBQUksQ0FBQyxJQUFJLENBQUU7Z0JBQ1YsSUFBSSxFQUFNLElBQUk7Z0JBQ2QsT0FBTyxFQUFHLEtBQUs7YUFDZixDQUFDLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ2pCOzs7OztJQUlNLFVBQVUsQ0FBQyxRQUFRO1FBRXpCLHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUE7U0FDbkMsQ0FBQyxDQUFDOztRQUlILEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Q7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7Ozs7SUFLM0IsSUFBSSxZQUFZO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDMUI7Ozs7O0lBSUQsSUFBSSxZQUFZLENBQUMsT0FBTztRQUV2QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNqQzs7OztJQVFTLFVBQVU7UUFDbEIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7S0FDM0U7OztZQXBKRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFRLGlCQUFpQjtnQkFDakMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0JWO2dCQUNBLE1BQU0sRUFBRSxDQUFDLG9JQUFvSSxDQUFDO2dCQUM5SSxTQUFTLEVBQUssQ0FBRTt3QkFDZixPQUFPLEVBQU0saUJBQWlCO3dCQUM5QixXQUFXLEVBQUUsVUFBVTt3QkFDdkIsS0FBSyxFQUFRLElBQUk7cUJBQ2pCLENBQUM7YUFDRjs7Ozs7b0JBWUMsS0FBSztzQkFDTCxLQUFLO3FCQUNMLEtBQUs7d0JBdUJMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9ICAgICBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Fic3RyYWN0Rm9ybUNvbXBvbmVudH0gZnJvbSBcIi4uL2Fic3RyYWN0LWZvcm0tY29tcG9uZW50XCI7XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yICAgIDogICAnaHBlLWlucHV0LWNvbWJvJyxcblx0dGVtcGxhdGU6IGA8IS0tXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuPT09XG49PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuPT09XG49PT0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbj09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLS0+XG5cbjxkaXYgY2xhc3M9XCJ1aS1pbnB1dGdyb3VwIHNwYWNpbmdcIj5cblx0PGhwZS1mb3JtLWxhYmVsIFtpY29uXT1cImljb25cIiBbbGFiZWxdPVwibGFiZWxcIj48L2hwZS1mb3JtLWxhYmVsPlxuXG5cdDxwLWRyb3Bkb3duIFtvcHRpb25zXSAgICA9IFwiZGF0YVwiXG5cdFx0XHRcdFtkYXRhS2V5XSAgICA9IFwia2V5XCJcblx0XHRcdFx0W29wdGlvbkxhYmVsXT0gXCJ2YWx1ZVwiXG5cdFx0XHRcdFsobmdNb2RlbCldICA9IFwic2VsZWN0ZWRJdGVtXCJcblx0XHRcdFx0W25nQ2xhc3NdICAgID0gXCJnZXRDb21wb25lbnRDbGFzcygpXCJcblx0XHRcdFx0W3N0eWxlXSAgICAgID0gXCJ7ICd3aWR0aCc6JzEwMCUnIH1cIlxuXHRcdFx0XHRbZGlzYWJsZWRdICAgPSBcIiFlbmFibGVkXCI+XG5cdDwvcC1kcm9wZG93bj5cbjwvZGl2PlxuYCxcblx0c3R5bGVzOiBbYC5zcGFjaW5ne21hcmdpbi1ib3R0b206MXJlbX0uY29udHJvbHt3aWR0aDoxMDAlfS5yZXF1aXJlZHtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNmZjhkNmR9LnByb3ZpZGVke2JvcmRlci1yaWdodDo1cHggc29saWQgIzAwYTk4Mn1gXSxcblx0cHJvdmlkZXJzICAgOiBbIHtcblx0XHRwcm92aWRlICAgIDogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0dXNlRXhpc3Rpbmc6IElucHV0Q29tYm8sXG5cdFx0bXVsdGkgICAgICA6IHRydWVcblx0fV1cbn0pXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIElucHV0Q29tYm8gZXh0ZW5kcyBBYnN0cmFjdEZvcm1Db21wb25lbnQge1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBWYXJpYWJsZXNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0QElucHV0KCkga2V5ICAgOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHZhbHVlIDogc3RyaW5nO1xuXHRASW5wdXQoKSBkYXRhICA6IGFueVtdO1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgX3NlbGVjdGVkSXRlbSA6IGFueTtcblx0cHJpdmF0ZSBfZGF0YU1hcCAgICAgIDogT2JqZWN0O1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBDb25zdHJ1Y3RvclxuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIEFQSSBtZXRob2RzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdEBJbnB1dCgpXG5cdGdldCBkYXRhTWFwKCkgOiBPYmplY3Qge1xuXHRcdHJldHVybiB0aGlzLl9kYXRhTWFwO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0c2V0IGRhdGFNYXAobWFwIDogT2JqZWN0KSB7XG5cblx0XHR0aGlzLl9kYXRhTWFwID0gbWFwO1xuXHRcdHRoaXMua2V5ICAgICAgPSBcImlkXCI7XG5cdFx0dGhpcy52YWx1ZSAgICA9IFwidmFsdWVcIjtcblxuXHRcdGxldCBsaXN0ID0gW107XG5cblx0XHRpZiAoICEgdGhpcy5yZXF1aXJlZCkge1xuXHRcdFx0bGlzdC5wdXNoKCB7XG5cdFx0XHRcdFwiaWRcIiAgICA6IG51bGwsXG5cdFx0XHRcdFwidmFsdWVcIiA6IG51bGxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGtleSBpbiBtYXApIHtcblx0XHRcdGxldCBuYW1lICA6IGFueSA9IE51bWJlcihrZXkpO1xuXHRcdFx0bGV0IHZhbHVlIDogYW55ID0gbWFwW2tleV07XG5cblx0XHRcdGlmIChpc05hTihuYW1lKSkge1xuXHRcdFx0XHRuYW1lID0ga2V5O1xuXHRcdFx0fVxuXG5cdFx0XHRsaXN0LnB1c2goIHtcblx0XHRcdFx0XCJpZFwiICAgIDogbmFtZSxcblx0XHRcdFx0XCJ2YWx1ZVwiIDogdmFsdWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YSA9IGxpc3Q7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZShrZXlWYWx1ZSkge1xuXG5cdFx0bGV0IGl0ZW0gPSB0aGlzLmRhdGEuZmluZCggKGl0ZW0pID0+IHtcblx0XHRcdHJldHVybiAoaXRlbVt0aGlzLmtleV0gPT0ga2V5VmFsdWUpXG5cdFx0fSk7XG5cblx0XHQvLy0tLSBTZWxlY3QgZmlyc3QgZW50cnkgaW4gY2FzZSB0aGVyZSBpcyBubyBtYXRjaFxuXG5cdFx0aWYgKGl0ZW0gPT0gbnVsbCkge1xuXHRcdFx0aWYgKHRoaXMuZGF0YSAhPSBudWxsICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGl0ZW0gPSB0aGlzLmRhdGFbMF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2VsZWN0ZWRJdGVtID0gaXRlbTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdGdldCBzZWxlY3RlZEl0ZW0oKSA6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHNldCBzZWxlY3RlZEl0ZW0obmV3SXRlbSkge1xuXG5cdFx0dGhpcy5fc2VsZWN0ZWRJdGVtID0gbmV3SXRlbTtcblx0XHR0aGlzLm9uQ2hhbmdlKG5ld0l0ZW1bdGhpcy5rZXldKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBQcm90ZWN0ZWQgbWV0aG9kc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcm90ZWN0ZWQgaXNQcm92aWRlZCgpIDogYm9vbGVhbiB7XG5cdCBcdHJldHVybiAodGhpcy5zZWxlY3RlZEl0ZW0gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkSXRlbVt0aGlzLmtleV0gIT0gbnVsbCk7XG5cdH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIl19