ftable
Version:
Angular 6/7 Tables
152 lines • 24.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component } from '@angular/core';
import { EventEmitter } from '@angular/core';
import { Output } from '@angular/core';
import { Input } from '@angular/core';
import { ViewChild, ElementRef } from '@angular/core';
var DateFFilterComponent = /** @class */ (function () {
function DateFFilterComponent() {
this.filter = new EventEmitter();
this.minDay = '';
this.minMonth = '';
this.minYear = '';
this.maxDay = '';
this.maxMonth = '';
this.maxYear = '';
}
/**
* @param {?} mode
* @param {?} max
* @param {?} event
* @return {?}
*/
DateFFilterComponent.prototype.onKeyUp = /**
* @param {?} mode
* @param {?} max
* @param {?} event
* @return {?}
*/
function (mode, max, event) {
// Ignore if Delete or Backspace
if (event.keyCode !== 8 && event.keyCode !== 46) {
// filter letters and Trim
this[mode] = this[mode].match(/[0-9]*/).join('').substring(0, max);
// Move focus for UX
if (mode === 'minDay' && (this[mode].length === 2 || event.keyCode === 39)) {
this._elMinMonthRef.nativeElement.focus();
}
else if (mode === 'minMonth' && (this[mode].length === 2 || event.keyCode === 39)) {
this._elMinYearRef.nativeElement.focus();
}
else if (mode === 'minYear' && (this[mode].length === 4 || event.keyCode === 39)) {
this._elMaxDayRef.nativeElement.focus();
}
else if (mode === 'maxDay' && (this[mode].length === 2 || event.keyCode === 39)) {
this._elMaxMonthRef.nativeElement.focus();
}
else if (mode === 'maxMonth' && (this[mode].length === 2 || event.keyCode === 39)) {
this._elMaxYearRef.nativeElement.focus();
}
else if (mode === 'maxYear' && (this[mode].length === 4 || event.keyCode === 39)) {
this._elMinDayRef.nativeElement.focus();
}
}
if (this.source === 'frontend') {
/** @type {?} */
var fn = function (name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear) {
return function (d) {
return ((/** @type {?} */ (d))).filter(function (x) {
console.log(name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear);
/** @type {?} */
var date = new Date(x[name]);
return (minDay.length > 0 ? Number(minDay) <= date.getDate() : true) &&
(minMonth.length > 0 ? Number(minMonth) <= date.getMonth() + 1 : true) &&
(minYear.length > 0 ? Number(minYear) <= date.getFullYear() : true) &&
(maxDay.length > 0 ? Number(maxDay) >= date.getDate() : true) &&
(maxMonth.length > 0 ? Number(maxMonth) >= date.getMonth() + 1 : true) &&
(maxYear.length > 0 ? Number(maxYear) >= date.getFullYear() : true);
});
};
};
this.filter.emit({ columnName: this.columnName, type: 'date', apply: fn(this.columnName, this.minDay, this.minMonth, this.minYear, this.maxDay, this.maxMonth, this.maxYear) });
}
else {
/** @type {?} */
var result = { minDay: this.minDay, minMonth: this.minMonth, minYear: this.minYear, maxDay: this.maxDay, maxMonth: this.maxMonth, maxYear: this.maxYear };
this.filter.emit({ columnName: this.columnName, type: 'date', apply: result });
}
};
/**
* @return {?}
*/
DateFFilterComponent.prototype.reset = /**
* @return {?}
*/
function () {
this.minDay = '';
this.minMonth = '';
this.minYear = '';
this.maxDay = '';
this.maxMonth = '';
this.maxYear = '';
this.filter.emit({ columnName: this.columnName, apply: null });
};
DateFFilterComponent.decorators = [
{ type: Component, args: [{
template: "\n\n <table class='ft-ffilter-table ft-ffilter-date-table'>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row ft-ffilter-dd-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-day\" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp(\"minDay\", 2, $event)' #minDayRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-mm-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-month\" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp(\"minMonth\", 2, $event)' #minMonthRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-yyyy-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-year\" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp(\"minYear\", 4, $event)' #minYearRef />\n </td>\n </tr>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row ft-ffilter-dd-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-day\" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp(\"maxDay\" , 2, $event)' #maxDayRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-mm-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-month\" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp(\"maxMonth\", 2, $event)' #maxMonthRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-yyyy-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-year\" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp(\"maxYear\", 4, $event)' #maxYearRef />\n </td>\n </tr>\n</table>\n <!--\n <div class='ft-ffilter'>\n <div class=\"ft-filter-date ft-div1-ffilter\">\n <input class=\"ft-i ft-i-filter ft-i-filter-day\" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp(\"minDay\", 2, $event)' #minDayRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-month\" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp(\"minMonth\", 2, $event)' #minMonthRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-year\" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp(\"minYear\", 4, $event)' #minYearRef />\n </div>\n <div class=\"ft-filter-date ft-div2-ffilter\">\n <input class=\"ft-i ft-i-filter ft-i-filter-day\" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp(\"maxDay\" , 2, $event)' #maxDayRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-month\" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp(\"maxMonth\", 2, $event)' #maxMonthRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-year\" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp(\"maxYear\", 4, $event)' #maxYearRef />\n </div>\n </div>\n\n -->\n ",
styles: ["\n :host { flex:1;\n }"]
}] }
];
DateFFilterComponent.propDecorators = {
_elMinDayRef: [{ type: ViewChild, args: ["minDayRef",] }],
_elMinMonthRef: [{ type: ViewChild, args: ["minMonthRef",] }],
_elMinYearRef: [{ type: ViewChild, args: ["minYearRef",] }],
_elMaxDayRef: [{ type: ViewChild, args: ["maxDayRef",] }],
_elMaxMonthRef: [{ type: ViewChild, args: ["maxMonthRef",] }],
_elMaxYearRef: [{ type: ViewChild, args: ["maxYearRef",] }],
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
return DateFFilterComponent;
}());
export { DateFFilterComponent };
if (false) {
/** @type {?} */
DateFFilterComponent.prototype._elMinDayRef;
/** @type {?} */
DateFFilterComponent.prototype._elMinMonthRef;
/** @type {?} */
DateFFilterComponent.prototype._elMinYearRef;
/** @type {?} */
DateFFilterComponent.prototype._elMaxDayRef;
/** @type {?} */
DateFFilterComponent.prototype._elMaxMonthRef;
/** @type {?} */
DateFFilterComponent.prototype._elMaxYearRef;
/** @type {?} */
DateFFilterComponent.prototype.source;
/** @type {?} */
DateFFilterComponent.prototype.otherData;
/** @type {?} */
DateFFilterComponent.prototype.columnName;
/** @type {?} */
DateFFilterComponent.prototype.filter;
/** @type {?} */
DateFFilterComponent.prototype.minDay;
/** @type {?} */
DateFFilterComponent.prototype.minMonth;
/** @type {?} */
DateFFilterComponent.prototype.minYear;
/** @type {?} */
DateFFilterComponent.prototype.maxDay;
/** @type {?} */
DateFFilterComponent.prototype.maxMonth;
/** @type {?} */
DateFFilterComponent.prototype.maxYear;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZWZmaWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnRhYmxlLyIsInNvdXJjZXMiOlsibGliL2ZmaWx0ZXIvZmlsdGVycy9kYXRlZmZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdEQ7SUFBQTtRQThEWSxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHdkQsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO0lBOER0QixDQUFDOzs7Ozs7O0lBNURDLHNDQUFPOzs7Ozs7SUFBUCxVQUFRLElBQVksRUFBRSxHQUFXLEVBQUUsS0FBSztRQUN0QyxnQ0FBZ0M7UUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUMvQywwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFbkUsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3pDO2lCQUNJLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFD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RW5DLHNDQUE4RDs7SUFHOUQsc0NBQW1COztJQUNuQix3Q0FBcUI7O0lBQ3JCLHVDQUFvQjs7SUFDcEIsc0NBQW1COztJQUNuQix3Q0FBcUI7O0lBQ3JCLHVDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRkZpbHRlckJhc2UgfSBmcm9tICcuL2ZmaWx0ZXIuYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogYFxyXG5cclxuICA8dGFibGUgY2xhc3M9J2Z0LWZmaWx0ZXItdGFibGUgZnQtZmZpbHRlci1kYXRlLXRhYmxlJz5cclxuICA8dHIgY2xhc3M9J2Z0LWZmaWx0ZXItY29sdW1uJz5cclxuICAgICAgPHRkIGNsYXNzPSdmdC1mZmlsdGVyLXJvdyAgZnQtZmZpbHRlci1kZC1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLWRheVwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nZGQnICAgIFsobmdNb2RlbCldPSdtaW5EYXknICAgKGtleXVwKT0nb25LZXlVcChcIm1pbkRheVwiLCAgIDIsICRldmVudCknICAjbWluRGF5UmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXItbW0tcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtaW5Nb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1pbk1vbnRoXCIsIDIsICRldmVudCknICNtaW5Nb250aFJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQgY2xhc3M9J2Z0LWZmaWx0ZXItcm93ICBmdC1mZmlsdGVyLXl5eXktcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci15ZWFyXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSd5eXl5JyAgWyhuZ01vZGVsKV09J21pblllYXInICAoa2V5dXApPSdvbktleVVwKFwibWluWWVhclwiLCAgNCwgJGV2ZW50KScgICAjbWluWWVhclJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gIDwvdHI+XHJcbiAgPHRyIGNsYXNzPSdmdC1mZmlsdGVyLWNvbHVtbic+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXItZGQtcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci1kYXlcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J2RkJyAgICBbKG5nTW9kZWwpXT0nbWF4RGF5JyAgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhEYXlcIiAsICAyLCAkZXZlbnQpJyAgI21heERheVJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQgY2xhc3M9J2Z0LWZmaWx0ZXItcm93ICBmdC1mZmlsdGVyLW1tLXJvdyc+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmZpbHRlciBmdC1pLWZmaWx0ZXItbW9udGhcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J21tJyAgICBbKG5nTW9kZWwpXT0nbWF4TW9udGgnIChrZXl1cCk9J29uS2V5VXAoXCJtYXhNb250aFwiLCAyLCAkZXZlbnQpJyAgI21heE1vbnRoUmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXIteXl5eS1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLXllYXJcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J3l5eXknICBbKG5nTW9kZWwpXT0nbWF4WWVhcicgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhZZWFyXCIsICA0LCAkZXZlbnQpJyAgI21heFllYXJSZWYgLz5cclxuICAgICAgPC90ZD5cclxuICA8L3RyPlxyXG48L3RhYmxlPlxyXG4gIDwhLS1cclxuICA8ZGl2IGNsYXNzPSdmdC1mZmlsdGVyJz5cclxuICAgIDxkaXYgY2xhc3M9XCJmdC1maWx0ZXItZGF0ZSBmdC1kaXYxLWZmaWx0ZXJcIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXItZGF5XCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSdkZCcgICAgWyhuZ01vZGVsKV09J21pbkRheScgICAoa2V5dXApPSdvbktleVVwKFwibWluRGF5XCIsICAgMiwgJGV2ZW50KScgICNtaW5EYXlSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXItbW9udGhcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J21tJyAgICBbKG5nTW9kZWwpXT0nbWluTW9udGgnIChrZXl1cCk9J29uS2V5VXAoXCJtaW5Nb250aFwiLCAyLCAkZXZlbnQpJyAjbWluTW9udGhSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXIteWVhclwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0neXl5eScgIFsobmdNb2RlbCldPSdtaW5ZZWFyJyAgKGtleXVwKT0nb25LZXlVcChcIm1pblllYXJcIiwgIDQsICRldmVudCknICAgI21pblllYXJSZWYgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ0LWZpbHRlci1kYXRlIGZ0LWRpdjItZmZpbHRlclwiPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1kYXlcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J2RkJyAgICBbKG5nTW9kZWwpXT0nbWF4RGF5JyAgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhEYXlcIiAsICAyLCAkZXZlbnQpJyAgI21heERheVJlZiAvPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtYXhNb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1heE1vbnRoXCIsIDIsICRldmVudCknICAjbWF4TW9udGhSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXIteWVhclwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0neXl5eScgIFsobmdNb2RlbCldPSdtYXhZZWFyJyAgKGtleXVwKT0nb25LZXlVcChcIm1heFllYXJcIiwgIDQsICRldmVudCknICAjbWF4WWVhclJlZiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIC0tPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gIDpob3N0IHsgZmxleDoxO1xyXG4gIH1gXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVGRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgRkZpbHRlckJhc2Uge1xyXG4gIEBWaWV3Q2hpbGQoXCJtaW5EYXlSZWZcIikgX2VsTWluRGF5UmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtaW5Nb250aFJlZlwiKSBfZWxNaW5Nb250aFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWluWWVhclJlZlwiKSBfZWxNaW5ZZWFyUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKFwibWF4RGF5UmVmXCIpIF9lbE1heERheVJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWF4TW9udGhSZWZcIikgX2VsTWF4TW9udGhSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm1heFllYXJSZWZcIikgX2VsTWF4WWVhclJlZjogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3VyY2U6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgb3RoZXJEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk5hbWU6IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblxyXG4gIHB1YmxpYyBtaW5EYXkgPSAnJztcclxuICBwdWJsaWMgbWluTW9udGggPSAnJztcclxuICBwdWJsaWMgbWluWWVhciA9ICcnO1xyXG4gIHB1YmxpYyBtYXhEYXkgPSAnJztcclxuICBwdWJsaWMgbWF4TW9udGggPSAnJztcclxuICBwdWJsaWMgbWF4WWVhciA9ICcnO1xyXG5cclxuICBvbktleVVwKG1vZGU6IHN0cmluZywgbWF4OiBudW1iZXIsIGV2ZW50KSB7XHJcbiAgICAvLyBJZ25vcmUgaWYgRGVsZXRlIG9yIEJhY2tzcGFjZVxyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IDggJiYgZXZlbnQua2V5Q29kZSAhPT0gNDYpIHtcclxuICAgICAgLy8gZmlsdGVyIGxldHRlcnMgYW5kIFRyaW1cclxuICAgICAgdGhpc1ttb2RlXSA9IHRoaXNbbW9kZV0ubWF0Y2goL1swLTldKi8pLmpvaW4oJycpLnN1YnN0cmluZygwLCBtYXgpO1xyXG5cclxuICAgICAgLy8gTW92ZSBmb2N1cyBmb3IgVVhcclxuICAgICAgaWYgKG1vZGUgPT09ICdtaW5EYXknICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1pbk1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtb2RlID09PSAnbWluTW9udGgnICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1pblllYXJSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtaW5ZZWFyJyAmJiAodGhpc1ttb2RlXS5sZW5ndGggPT09IDQgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpKSB7XHJcbiAgICAgICAgdGhpcy5fZWxNYXhEYXlSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtYXhEYXknICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1heE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtb2RlID09PSAnbWF4TW9udGgnICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1heFllYXJSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtYXhZZWFyJyAmJiAodGhpc1ttb2RlXS5sZW5ndGggPT09IDQgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpKSB7XHJcbiAgICAgICAgdGhpcy5fZWxNaW5EYXlSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnZnJvbnRlbmQnKSB7XHJcbiAgICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKG5hbWUsIG1pbkRheSwgbWluTW9udGgsIG1pblllYXIsIG1heERheSwgbWF4TW9udGgsIG1heFllYXIpIHtcclxuICAgICAgICByZXR1cm4gZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKDxhbnlbXT5kKS5maWx0ZXIoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG5hbWUsIG1pbkRheSwgbWluTW9udGgsIG1pblllYXIsIG1heERheSwgbWF4TW9udGgsIG1heFllYXIpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeFtuYW1lXSk7XHJcbiAgICAgICAgICAgIHJldHVybiAobWluRGF5Lmxlbmd0aCA+IDAgPyBOdW1iZXIobWluRGF5KSA8PSBkYXRlLmdldERhdGUoKSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1pbk1vbnRoLmxlbmd0aCA+IDAgPyBOdW1iZXIobWluTW9udGgpIDw9IGRhdGUuZ2V0TW9udGgoKSArIDEgOiB0cnVlKSAmJlxyXG4gICAgICAgICAgICAgIChtaW5ZZWFyLmxlbmd0aCA+IDAgPyBOdW1iZXIobWluWWVhcikgPD0gZGF0ZS5nZXRGdWxsWWVhcigpIDogdHJ1ZSkgJiZcclxuICAgICAgICAgICAgICAobWF4RGF5Lmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4RGF5KSA+PSBkYXRlLmdldERhdGUoKSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1heE1vbnRoLmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4TW9udGgpID49IGRhdGUuZ2V0TW9udGgoKSArIDEgOiB0cnVlKSAmJlxyXG4gICAgICAgICAgICAgIChtYXhZZWFyLmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4WWVhcikgPj0gZGF0ZS5nZXRGdWxsWWVhcigpIDogdHJ1ZSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCB0eXBlOiAnZGF0ZScsIGFwcGx5OiBmbih0aGlzLmNvbHVtbk5hbWUsIHRoaXMubWluRGF5LCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pblllYXIsIHRoaXMubWF4RGF5LCB0aGlzLm1heE1vbnRoLCB0aGlzLm1heFllYXIpIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IHsgbWluRGF5OiB0aGlzLm1pbkRheSwgbWluTW9udGg6IHRoaXMubWluTW9udGgsIG1pblllYXI6IHRoaXMubWluWWVhciwgbWF4RGF5OiB0aGlzLm1heERheSwgbWF4TW9udGg6IHRoaXMubWF4TW9udGgsIG1heFllYXI6IHRoaXMubWF4WWVhciB9O1xyXG4gICAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCB0eXBlOiAnZGF0ZScsIGFwcGx5OiByZXN1bHQgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm1pbkRheSA9ICcnO1xyXG4gICAgdGhpcy5taW5Nb250aCA9ICcnO1xyXG4gICAgdGhpcy5taW5ZZWFyID0gJyc7XHJcbiAgICB0aGlzLm1heERheSA9ICcnO1xyXG4gICAgdGhpcy5tYXhNb250aCA9ICcnO1xyXG4gICAgdGhpcy5tYXhZZWFyID0gJyc7XHJcbiAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCBhcHBseTogbnVsbCB9KTtcclxuICB9XHJcbn1cclxuIl19