lamb-web-lib
Version:
LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).
283 lines • 30.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
/**
* @license
* Copyright Lamb Team. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Component, Input, QueryList, Directive, ContentChild, ContentChildren, TemplateRef, Output, EventEmitter, } from '@angular/core';
import { LambTabConfig } from './tab-config';
var LambTabGroupTitleDirective = /** @class */ (function () {
function LambTabGroupTitleDirective(templateRef) {
this.templateRef = templateRef;
}
LambTabGroupTitleDirective.decorators = [
{ type: Directive, args: [{
selector: 'ng-template[lambTabGroupTitle]',
},] },
];
LambTabGroupTitleDirective.ctorParameters = function () { return [
{ type: TemplateRef }
]; };
return LambTabGroupTitleDirective;
}());
export { LambTabGroupTitleDirective };
if (false) {
/** @type {?} */
LambTabGroupTitleDirective.prototype.templateRef;
}
var LambTabTitleDirective = /** @class */ (function () {
function LambTabTitleDirective(templateRef) {
this.templateRef = templateRef;
}
LambTabTitleDirective.decorators = [
{ type: Directive, args: [{
selector: 'ng-template[lambTabTitle]',
},] },
];
LambTabTitleDirective.ctorParameters = function () { return [
{ type: TemplateRef }
]; };
return LambTabTitleDirective;
}());
export { LambTabTitleDirective };
if (false) {
/** @type {?} */
LambTabTitleDirective.prototype.templateRef;
}
var LambTabContentDirective = /** @class */ (function () {
function LambTabContentDirective(templateRef) {
this.templateRef = templateRef;
}
LambTabContentDirective.decorators = [
{ type: Directive, args: [{
selector: 'ng-template[lambTabContent]',
},] },
];
LambTabContentDirective.ctorParameters = function () { return [
{ type: TemplateRef }
]; };
return LambTabContentDirective;
}());
export { LambTabContentDirective };
if (false) {
/** @type {?} */
LambTabContentDirective.prototype.templateRef;
}
/** @type {?} */
var nextId = 0;
var LambTabDirective = /** @class */ (function () {
function LambTabDirective() {
this.id = "lamb-tab-" + nextId++;
this.disabled = false;
}
LambTabDirective.decorators = [
{ type: Directive, args: [{
// tslint:disable-next-line:directive-selector
selector: 'lamb-tab',
},] },
];
LambTabDirective.propDecorators = {
id: [{ type: Input }],
title: [{ type: Input }],
icon: [{ type: Input }],
disabled: [{ type: Input }],
contentTemplate: [{ type: ContentChild, args: [LambTabContentDirective,] }],
titleTemplate: [{ type: ContentChild, args: [LambTabTitleDirective,] }]
};
return LambTabDirective;
}());
export { LambTabDirective };
if (false) {
/** @type {?} */
LambTabDirective.prototype.id;
/** @type {?} */
LambTabDirective.prototype.title;
/** @type {?} */
LambTabDirective.prototype.icon;
/** @type {?} */
LambTabDirective.prototype.disabled;
/** @type {?} */
LambTabDirective.prototype.contentTemplate;
/** @type {?} */
LambTabDirective.prototype.titleTemplate;
}
/**
* @record
*/
export function LambTabChangeEvent() { }
if (false) {
/**
* Id de la pestaña actualmente activa.
* @type {?}
*/
LambTabChangeEvent.prototype.activeId;
/**
* Id de la pestaña recién seleccionada.
* @type {?}
*/
LambTabChangeEvent.prototype.nextId;
/**
* Función que evitará el cambio de pertaña si se llama.
* @type {?}
*/
LambTabChangeEvent.prototype.preventDefault;
}
var LambTabGroupComponent = /** @class */ (function () {
function LambTabGroupComponent(config) {
this.config = config;
/**
* Id del tab activo.
*/
// public currentActiveId: string;
/**
* Cuando cambia de tab se destruira el contenido anterior o solo se oculatará?
*/
this.destroyOnHide = true;
/**
* Emite cuando hay cambios de tabs.
*/
this.tabChange = new EventEmitter();
this.type = this.config.type;
this.justify = this.config.justify;
this.orientation = this.config.orientation;
}
Object.defineProperty(LambTabGroupComponent.prototype, "justify", {
set: /**
* @param {?} className
* @return {?}
*/
function (className) {
if (className === 'fill' || className === 'justified') {
this.justifyClass = "nav-" + className;
}
else {
this.justifyClass = "justify-content-" + className;
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} tabId
* @return {?}
*/
LambTabGroupComponent.prototype.onSelect = /**
* @param {?} tabId
* @return {?}
*/
function (tabId) {
/** @type {?} */
var selectedTab = this.getTabById(tabId);
if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {
/** @type {?} */
var defaultPrevented_1 = false;
this.tabChange.emit({
activeId: this.activeId,
nextId: selectedTab.id,
preventDefault: function () { defaultPrevented_1 = true; },
});
if (!defaultPrevented_1) {
this.activeId = selectedTab.id;
// this.currentActiveId = this.activeId;
}
}
};
/**
* @return {?}
*/
LambTabGroupComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
// this.currentActiveId = this.activeId;
};
/**
* @return {?}
*/
LambTabGroupComponent.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
/** @type {?} */
var activeTab = this.getTabById(this.activeId);
this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);
// this.currentActiveId = this.activeId;
};
/**
* @param {?} id
* @return {?}
*/
LambTabGroupComponent.prototype.getTabById = /**
* @param {?} id
* @return {?}
*/
function (id) {
/** @type {?} */
var tabsWithId = this.tabs.filter(function (tab) { return tab.id === id; });
return tabsWithId.length ? tabsWithId[0] : null;
};
LambTabGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'lamb-tab-group',
exportAs: 'lambTabset',
template: "<!-- <ul class=\"nav justify-content-center\" id=\"myTab\" role=\"tablist\"> -->\n<div class=\"row\">\n <div [class]=\"'col-md-' + (orientation === 'horizontal' ? '12' : '2' ) \">\n <!-- <div class=\"card\">\n <div class=\"card-body\"> -->\n <ul *ngIf=\"orientation === 'horizontal' && tabGroupTitle?.templateRef\" class=\"nav flex-column lamb-nav-group-title\">\n <li class=\"nav-item-group-title\">\n <ng-template [ngTemplateOutlet]=\"tabGroupTitle?.templateRef\">\n </ng-template>\n </li>\n </ul>\n <ul [class]=\"'nav nav-' + type + (orientation === 'horizontal' ? ' ' + justifyClass + ' lamb-nav-horizontal' : ' flex-column lamb-ul-nav-vertical' )\"\n id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item-group-title\" *ngIf=\"orientation === 'vertical' && tabGroupTitle?.templateRef\">\n <ng-template [ngTemplateOutlet]=\"tabGroupTitle?.templateRef\">\n </ng-template>\n </li>\n <!-- <li> -->\n <!-- <ul>hola</ul> -->\n <!-- </li> -->\n <li *ngFor=\"let tab of tabs\" class=\"nav-item\">\n <a [id]=\"tab.id\" [class]=\"'nav-link' + (orientation === 'horizontal'? ' lamb-nav-horizontal': ' lamb-nav-vertical' )\" [class.active]=\"tab.id === activeId\"\n [class.disabled]=\"tab.disabled\" (click)=\"!!onSelect(tab.id)\" role=\"tab\" [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel': null)\" [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n <!-- data-toggle=\"tab\"\n aria-selected=\"true\" -->\n <ng-template [ngIf]=\"tab.icon\">\n <span>\n <i class=\"{{ tab.icon }} lamb-icon\"></i>\n </span>\n </ng-template>\n {{ tab.title }}\n <ng-template [ngTemplateOutlet]=\"tab.titleTemplate?.templateRef\"></ng-template>\n </a>\n </li>\n <!-- <ng-content select=\"lamb-tab-head\"></ng-content> -->\n </ul>\n <!-- </div>\n </div> -->\n </div>\n <div [class]=\"'col-md-' + (orientation === 'horizontal' ? '12' : '10' ) \">\n\n <div class=\"tab-content\" id=\"myTabContent\">\n <!-- <ng-content select=\"lamb-tab-body\"></ng-content> -->\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <!-- class=\"tab-pane fade {{ tab.id === activeId ? 'active': null }}\" -->\n <div class=\"tab-pane {{ tab.id === activeId ? 'active': null }}\" *ngIf=\"!destroyOnHide || tab.id === activeId\" role=\"tabpanel\"\n [attr.aria-labelledby]=\"tab.id\" id=\"{{ tab.id }}-panel\" [attr.aria-expanded]=\"tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTemplate?.templateRef\"></ng-template>\n </div>\n </ng-template>\n </div>\n </div>\n</div>",
styles: ["ul.nav{margin-bottom:.8rem;padding-left:0}ul.lamb-ul-nav-vertical{border-bottom:none}.nav-item-group-title{font-weight:400;text-transform:uppercase;padding:.5rem 1rem}.nav-item-group-title /deep/ i{width:50rem}.lamb-nav-group-title{margin-bottom:0!important;text-align:center}.nav-item{text-transform:uppercase;font-weight:400}.nav-item .nav-link{cursor:pointer;font-size:.7rem}.nav-item .nav-link.lamb-nav-vertical{border-right:.214rem solid transparent;display:flex;min-height:2.5rem}.nav-item .nav-link.lamb-nav-horizontal{border-bottom:.214rem solid transparent;display:flex}.nav-item .nav-link:not(.disabled).active,.nav-item .nav-link:not(.disabled).active:focus,.nav-item .nav-link:not(.disabled).active:hover{font-weight:500}.nav-item .nav-link ::ng-deep .lamb-icon{font-size:medium;margin-right:6px}.nav-item .nav-link.disabled{cursor:not-allowed}.nav-item .nav-link.disabled:focus,.nav-item .nav-link.disabled:hover{color:inherit}"],
},] },
];
LambTabGroupComponent.ctorParameters = function () { return [
{ type: LambTabConfig }
]; };
LambTabGroupComponent.propDecorators = {
tabs: [{ type: ContentChildren, args: [LambTabDirective,] }],
tabGroupTitle: [{ type: ContentChild, args: [LambTabGroupTitleDirective,] }],
activeId: [{ type: Input }],
destroyOnHide: [{ type: Input }],
tabChange: [{ type: Output }],
justify: [{ type: Input }],
orientation: [{ type: Input }],
type: [{ type: Input }]
};
return LambTabGroupComponent;
}());
export { LambTabGroupComponent };
if (false) {
/** @type {?} */
LambTabGroupComponent.prototype.justifyClass;
/** @type {?} */
LambTabGroupComponent.prototype.tabs;
/** @type {?} */
LambTabGroupComponent.prototype.tabGroupTitle;
/**
* Id del tab que saldrá activado por defecto.
* @type {?}
*/
LambTabGroupComponent.prototype.activeId;
/**
* Cuando cambia de tab se destruira el contenido anterior o solo se oculatará?
* @type {?}
*/
LambTabGroupComponent.prototype.destroyOnHide;
/**
* Emite cuando hay cambios de tabs.
* @type {?}
*/
LambTabGroupComponent.prototype.tabChange;
/** @type {?} */
LambTabGroupComponent.prototype.orientation;
/** @type {?} */
LambTabGroupComponent.prototype.type;
/** @type {?} */
LambTabGroupComponent.prototype.config;
}
/** @type {?} */
export var LAMB_TABS_COMPONENTS = [
LambTabGroupComponent,
LambTabDirective,
LambTabTitleDirective,
LambTabContentDirective,
LambTabGroupTitleDirective,
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9sYW1iLXdlYi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU9BLE9BQU8sRUFDSCxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFDM0IsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQ3hDLFdBQVcsRUFBdUIsTUFBTSxFQUFFLFlBQVksR0FDekQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QztJQUlJLG9DQUFtQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFBSSxDQUFDOztnQkFKeEQsU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxnQ0FBZ0M7aUJBQzdDOzs7Z0JBTkcsV0FBVzs7SUFTZixpQ0FBQztDQUFBLEFBTEQsSUFLQztTQUZZLDBCQUEwQjs7O0lBQ3ZCLGlEQUFvQzs7QUFHcEQ7SUFJSSwrQkFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQUksQ0FBQzs7Z0JBSnhELFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO2lCQUN4Qzs7O2dCQWJHLFdBQVc7O0lBZ0JmLDRCQUFDO0NBQUEsQUFMRCxJQUtDO1NBRlkscUJBQXFCOzs7SUFDbEIsNENBQW9DOztBQUdwRDtJQUlJLGlDQUFtQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFBSSxDQUFDOztnQkFKeEQsU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSw2QkFBNkI7aUJBQzFDOzs7Z0JBcEJHLFdBQVc7O0lBdUJmLDhCQUFDO0NBQUEsQUFMRCxJQUtDO1NBRlksdUJBQXVCOzs7SUFDcEIsOENBQW9DOzs7SUFHaEQsTUFBTSxHQUFHLENBQUM7QUFFZDtJQUFBO1FBTWEsT0FB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YW0uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgSW5wdXQsIFF1ZXJ5TGlzdCxcclxuICAgIERpcmVjdGl2ZSwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sXHJcbiAgICBUZW1wbGF0ZVJlZiwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGFtYlRhYkNvbmZpZyB9IGZyb20gJy4vdGFiLWNvbmZpZyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbGFtYlRhYkdyb3VwVGl0bGVdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJUYWJHcm91cFRpdGxlRGlyZWN0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PikgeyB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtsYW1iVGFiVGl0bGVdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJUYWJUaXRsZURpcmVjdGl2ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbGFtYlRhYkNvbnRlbnRdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJUYWJDb250ZW50RGlyZWN0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PikgeyB9XHJcbn1cclxuXHJcbmxldCBuZXh0SWQgPSAwO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2xhbWItdGFiJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJUYWJEaXJlY3RpdmUge1xyXG5cclxuICAgIEBJbnB1dCgpIGlkID0gYGxhbWItdGFiLSR7bmV4dElkKyt9YDtcclxuXHJcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIGljb246IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoTGFtYlRhYkNvbnRlbnREaXJlY3RpdmUpIGNvbnRlbnRUZW1wbGF0ZTogTGFtYlRhYkNvbnRlbnREaXJlY3RpdmU7XHJcbiAgICBAQ29udGVudENoaWxkKExhbWJUYWJUaXRsZURpcmVjdGl2ZSkgdGl0bGVUZW1wbGF0ZTogTGFtYlRhYlRpdGxlRGlyZWN0aXZlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExhbWJUYWJDaGFuZ2VFdmVudCB7XHJcbiAgICAvKipcclxuICAgICAqIElkIGRlIGxhIHBlc3Rhw7FhIGFjdHVhbG1lbnRlIGFjdGl2YS5cclxuICAgICAqL1xyXG4gICAgYWN0aXZlSWQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIElkIGRlIGxhIHBlc3Rhw7FhIHJlY2nDqW4gc2VsZWNjaW9uYWRhLlxyXG4gICAgICovXHJcbiAgICBuZXh0SWQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmNpw7NuIHF1ZSBldml0YXLDoSBlbCBjYW1iaW8gZGUgcGVydGHDsWEgc2kgc2UgbGxhbWEuXHJcbiAgICAgKi9cclxuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xyXG5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xhbWItdGFiLWdyb3VwJyxcclxuICAgIGV4cG9ydEFzOiAnbGFtYlRhYnNldCcsXHJcbiAgICB0ZW1wbGF0ZTogYDwhLS0gPHVsIGNsYXNzPVwibmF2IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBpZD1cIm15VGFiXCIgcm9sZT1cInRhYmxpc3RcIj4gLS0+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbWQtJyArIChvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJzEyJyA6ICcyJyApIFwiPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+IC0tPlxyXG4gICAgICAgIDx1bCAqbmdJZj1cIm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgdGFiR3JvdXBUaXRsZT8udGVtcGxhdGVSZWZcIiBjbGFzcz1cIm5hdiBmbGV4LWNvbHVtbiBsYW1iLW5hdi1ncm91cC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbS1ncm91cC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYkdyb3VwVGl0bGU/LnRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHVsIFtjbGFzc109XCInbmF2IG5hdi0nICsgdHlwZSArIChvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJyAnICsganVzdGlmeUNsYXNzICsgJyBsYW1iLW5hdi1ob3Jpem9udGFsJyA6ICcgZmxleC1jb2x1bW4gbGFtYi11bC1uYXYtdmVydGljYWwnIClcIlxyXG4gICAgICAgICAgICBpZD1cIm15VGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0tZ3JvdXAtdGl0bGVcIiAqbmdJZj1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmIHRhYkdyb3VwVGl0bGU/LnRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiR3JvdXBUaXRsZT8udGVtcGxhdGVSZWZcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwhLS0gPGxpPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8dWw+aG9sYTwvdWw+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDwvbGk+IC0tPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW2lkXT1cInRhYi5pZFwiIFtjbGFzc109XCInbmF2LWxpbmsnICsgKG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc/ICcgbGFtYi1uYXYtaG9yaXpvbnRhbCc6ICcgbGFtYi1uYXYtdmVydGljYWwnIClcIiBbY2xhc3MuYWN0aXZlXT1cInRhYi5pZCA9PT0gYWN0aXZlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIiAoY2xpY2spPVwiISFvblNlbGVjdCh0YWIuaWQpXCIgcm9sZT1cInRhYlwiIFthdHRyLnRhYmluZGV4XT1cIih0YWIuZGlzYWJsZWQgPyAnLTEnOiB1bmRlZmluZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIighZGVzdHJveU9uSGlkZSB8fCB0YWIuaWQgPT09IGFjdGl2ZUlkID8gdGFiLmlkICsgJy1wYW5lbCc6IG51bGwpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJ0YWIuaWQgPT09IGFjdGl2ZUlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInRhYi5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gZGF0YS10b2dnbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cInRydWVcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGFiLmljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7IHRhYi5pY29uIH19IGxhbWItaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdGFiLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYi50aXRsZVRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRlbnQgc2VsZWN0PVwibGFtYi10YWItaGVhZFwiPjwvbmctY29udGVudD4gLS0+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICA8IS0tIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyAob3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICcxMicgOiAnMTAnICkgXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiIGlkPVwibXlUYWJDb250ZW50XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRlbnQgc2VsZWN0PVwibGFtYi10YWItYm9keVwiPjwvbmctY29udGVudD4gLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtdGFiIFtuZ0Zvck9mXT1cInRhYnNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gY2xhc3M9XCJ0YWItcGFuZSBmYWRlIHt7IHRhYi5pZCA9PT0gYWN0aXZlSWQgPyAnYWN0aXZlJzogbnVsbCB9fVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIHt7IHRhYi5pZCA9PT0gYWN0aXZlSWQgPyAnYWN0aXZlJzogbnVsbCB9fVwiICpuZ0lmPVwiIWRlc3Ryb3lPbkhpZGUgfHwgdGFiLmlkID09PSBhY3RpdmVJZFwiIHJvbGU9XCJ0YWJwYW5lbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRhYi5pZFwiIGlkPVwie3sgdGFiLmlkIH19LXBhbmVsXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJ0YWIuaWQgPT09IGFjdGl2ZUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYi5jb250ZW50VGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmAsXHJcbiAgICBzdHlsZXM6IFtgdWwubmF2e21hcmdpbi1ib3R0b206LjhyZW07cGFkZGluZy1sZWZ0OjB9dWwubGFtYi11bC1uYXYtdmVydGljYWx7Ym9yZGVyLWJvdHRvbTpub25lfS5uYXYtaXRlbS1ncm91cC10aXRsZXtmb250LXdlaWdodDo0MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6LjVyZW0gMXJlbX0ubmF2LWl0ZW0tZ3JvdXAtdGl0bGUgL2RlZXAvIGl7d2lkdGg6NTByZW19LmxhbWItbmF2LWdyb3VwLXRpdGxle21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5hdi1pdGVte3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo0MDB9Lm5hdi1pdGVtIC5uYXYtbGlua3tjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6LjdyZW19Lm5hdi1pdGVtIC5uYXYtbGluay5sYW1iLW5hdi12ZXJ0aWNhbHtib3JkZXItcmlnaHQ6LjIxNHJlbSBzb2xpZCB0cmFuc3BhcmVudDtkaXNwbGF5OmZsZXg7bWluLWhlaWdodDoyLjVyZW19Lm5hdi1pdGVtIC5uYXYtbGluay5sYW1iLW5hdi1ob3Jpem9udGFse2JvcmRlci1ib3R0b206LjIxNHJlbSBzb2xpZCB0cmFuc3BhcmVudDtkaXNwbGF5OmZsZXh9Lm5hdi1pdGVtIC5uYXYtbGluazpub3QoLmRpc2FibGVkKS5hY3RpdmUsLm5hdi1pdGVtIC5uYXYtbGluazpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsLm5hdi1pdGVtIC5uYXYtbGluazpub3QoLmRpc2FibGVkKS5hY3RpdmU6aG92ZXJ7Zm9udC13ZWlnaHQ6NTAwfS5uYXYtaXRlbSAubmF2LWxpbmsgOjpuZy1kZWVwIC5sYW1iLWljb257Zm9udC1zaXplOm1lZGl1bTttYXJnaW4tcmlnaHQ6NnB4fS5uYXYtaXRlbSAubmF2LWxpbmsuZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5uYXYtaXRlbSAubmF2LWxpbmsuZGlzYWJsZWQ6Zm9jdXMsLm5hdi1pdGVtIC5uYXYtbGluay5kaXNhYmxlZDpob3Zlcntjb2xvcjppbmhlcml0fWBdLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIExhbWJUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgICBqdXN0aWZ5Q2xhc3M6IHN0cmluZztcclxuICAgIEBDb250ZW50Q2hpbGRyZW4oTGFtYlRhYkRpcmVjdGl2ZSkgdGFiczogUXVlcnlMaXN0PExhbWJUYWJEaXJlY3RpdmU+O1xyXG4gICAgQENvbnRlbnRDaGlsZChMYW1iVGFiR3JvdXBUaXRsZURpcmVjdGl2ZSkgdGFiR3JvdXBUaXRsZTogTGFtYlRhYkdyb3VwVGl0bGVEaXJlY3RpdmU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZCBkZWwgdGFiIHF1ZSBzYWxkcsOhIGFjdGl2YWRvIHBvciBkZWZlY3RvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBhY3RpdmVJZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWQgZGVsIHRhYiBhY3Rpdm8uXHJcbiAgICAgKi9cclxuICAgIC8vIHB1YmxpYyBjdXJyZW50QWN0aXZlSWQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEN1YW5kbyBjYW1iaWEgZGUgdGFiIHNlIGRlc3RydWlyYSBlbCBjb250ZW5pZG8gYW50ZXJpb3IgbyBzb2xvIHNlIG9jdWxhdGFyw6E/XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGRlc3Ryb3lPbkhpZGUgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdGUgY3VhbmRvIGhheSBjYW1iaW9zIGRlIHRhYnMuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB0YWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExhbWJUYWJDaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGp1c3RpZnkoY2xhc3NOYW1lOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyB8ICdmaWxsJyB8ICdqdXN0aWZpZWQnKSB7XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ2ZpbGwnIHx8IGNsYXNzTmFtZSA9PT0gJ2p1c3RpZmllZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5qdXN0aWZ5Q2xhc3MgPSBgbmF2LSR7Y2xhc3NOYW1lfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5qdXN0aWZ5Q2xhc3MgPSBganVzdGlmeS1jb250ZW50LSR7Y2xhc3NOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0KHRhYklkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRhYiA9IHRoaXMuZ2V0VGFiQnlJZCh0YWJJZCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVGFiICYmICFzZWxlY3RlZFRhYi5kaXNhYmxlZCAmJiB0aGlzLmFjdGl2ZUlkICE9PSBzZWxlY3RlZFRhYi5pZCkge1xyXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRhYkNoYW5nZS5lbWl0KFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUlkOiB0aGlzLmFjdGl2ZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5leHRJZDogc2VsZWN0ZWRUYWIuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSWQgPSBzZWxlY3RlZFRhYi5pZDtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY3VycmVudEFjdGl2ZUlkID0gdGhpcy5hY3RpdmVJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBMYW1iVGFiQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy50eXBlID0gdGhpcy5jb25maWcudHlwZTtcclxuICAgICAgICB0aGlzLmp1c3RpZnkgPSB0aGlzLmNvbmZpZy5qdXN0aWZ5O1xyXG4gICAgICAgIHRoaXMub3JpZW50YXRpb24gPSB0aGlzLmNvbmZpZy5vcmllbnRhdGlvbjtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIHRoaXMuY3VycmVudEFjdGl2ZUlkID0gdGhpcy5hY3RpdmVJZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpIHR5cGU6ICd0YWJzcycgfCAncGlsbHMnO1xyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcclxuICAgICAgICBjb25zdCBhY3RpdmVUYWIgPSB0aGlzLmdldFRhYkJ5SWQodGhpcy5hY3RpdmVJZCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVJZCA9IGFjdGl2ZVRhYiA/IGFjdGl2ZVRhYi5pZCA6ICh0aGlzLnRhYnMubGVuZ3RoID8gdGhpcy50YWJzLmZpcnN0LmlkIDogbnVsbCk7XHJcbiAgICAgICAgLy8gdGhpcy5jdXJyZW50QWN0aXZlSWQgPSB0aGlzLmFjdGl2ZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGFiQnlJZChpZDogc3RyaW5nKTogTGFtYlRhYkRpcmVjdGl2ZSB7XHJcbiAgICAgICAgY29uc3QgdGFic1dpdGhJZDogTGFtYlRhYkRpcmVjdGl2ZVtdID0gdGhpcy50YWJzLmZpbHRlcih0YWIgPT4gdGFiLmlkID09PSBpZCk7XHJcbiAgICAgICAgcmV0dXJuIHRhYnNXaXRoSWQubGVuZ3RoID8gdGFic1dpdGhJZFswXSA6IG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBMQU1CX1RBQlNfQ09NUE9ORU5UUyA9IFtcclxuICAgIExhbWJUYWJHcm91cENvbXBvbmVudCxcclxuICAgIExhbWJUYWJEaXJlY3RpdmUsXHJcbiAgICBMYW1iVGFiVGl0bGVEaXJlY3RpdmUsXHJcbiAgICBMYW1iVGFiQ29udGVudERpcmVjdGl2ZSxcclxuICAgIExhbWJUYWJHcm91cFRpdGxlRGlyZWN0aXZlLFxyXG5dO1xyXG5cclxuXHJcbiJdfQ==