UNPKG

ftable

Version:
184 lines (182 loc) 24.2 kB
/** * @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'; export class DateFFilterComponent { constructor() { this.filter = new EventEmitter(); this.minDay = ''; this.minMonth = ''; this.minYear = ''; this.maxDay = ''; this.maxMonth = ''; this.maxYear = ''; } /** * @param {?} mode * @param {?} max * @param {?} event * @return {?} */ onKeyUp(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 {?} */ const fn = function (name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear) { return d => { return ((/** @type {?} */ (d))).filter(x => { console.log(name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear); /** @type {?} */ const 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 {?} */ reset() { 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: ` <table class='ft-ffilter-table ft-ffilter-date-table'> <tr class='ft-ffilter-column'> <td class='ft-ffilter-row ft-ffilter-dd-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-day" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp("minDay", 2, $event)' #minDayRef /> </td> <td class='ft-ffilter-row ft-ffilter-mm-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-month" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp("minMonth", 2, $event)' #minMonthRef /> </td> <td class='ft-ffilter-row ft-ffilter-yyyy-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-year" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp("minYear", 4, $event)' #minYearRef /> </td> </tr> <tr class='ft-ffilter-column'> <td class='ft-ffilter-row ft-ffilter-dd-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-day" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp("maxDay" , 2, $event)' #maxDayRef /> </td> <td class='ft-ffilter-row ft-ffilter-mm-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-month" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp("maxMonth", 2, $event)' #maxMonthRef /> </td> <td class='ft-ffilter-row ft-ffilter-yyyy-row'> <input class="ft-i ft-i-ffilter ft-i-ffilter-year" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp("maxYear", 4, $event)' #maxYearRef /> </td> </tr> </table> <!-- <div class='ft-ffilter'> <div class="ft-filter-date ft-div1-ffilter"> <input class="ft-i ft-i-filter ft-i-filter-day" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp("minDay", 2, $event)' #minDayRef /> <input class="ft-i ft-i-filter ft-i-filter-month" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp("minMonth", 2, $event)' #minMonthRef /> <input class="ft-i ft-i-filter ft-i-filter-year" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp("minYear", 4, $event)' #minYearRef /> </div> <div class="ft-filter-date ft-div2-ffilter"> <input class="ft-i ft-i-filter ft-i-filter-day" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp("maxDay" , 2, $event)' #maxDayRef /> <input class="ft-i ft-i-filter ft-i-filter-month" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp("maxMonth", 2, $event)' #maxMonthRef /> <input class="ft-i ft-i-filter ft-i-filter-year" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp("maxYear", 4, $event)' #maxYearRef /> </div> </div> --> `, styles: [` :host { flex:1; }`] }] } ]; 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZWZmaWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnRhYmxlLyIsInNvdXJjZXMiOlsibGliL2ZmaWx0ZXIvZmlsdGVycy9kYXRlZmZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvRHRELE1BQU0sT0FBTyxvQkFBb0I7SUFoRGpDO1FBOERZLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd2RCxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFlBQU8sR0FBRyxFQUFFLENBQUM7SUE4RHRCLENBQUM7Ozs7Ozs7SUE1REMsT0FBTyxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsS0FBSztRQUN0QyxnQ0FBZ0M7UUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUMvQywwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFbkUsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3pDO2lCQUNJLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3pDO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFOztrQkFDeEIsRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTztnQkFDN0UsT0FBTyxDQUFDLENBQUMsRUFBRTtvQkFDVCxPQUFPLENBQUMsbUJBQU8sQ0FBQyxFQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7OzhCQUNsRSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFDbEUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFDdEUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOzRCQUNuRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NEJBQzdELENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NEJBQ3RFLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUN2RSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqTDthQUFNOztnQkFDRCxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN6SixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDaEY7SUFFSCxDQUFDOzs7O0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7O1lBbklGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNUO3lCQUNROztJQUVQO2FBQ0g7OzsyQkFHRSxTQUFTLFNBQUMsV0FBVzs2QkFDckIsU0FBUyxTQUFDLGFBQWE7NEJBQ3ZCLFNBQVMsU0FBQyxZQUFZOzJCQUV0QixTQUFTLFNBQUMsV0FBVzs2QkFDckIsU0FBUyxTQUFDLGFBQWE7NEJBQ3ZCLFNBQVMsU0FBQyxZQUFZO3FCQUd0QixLQUFLO3dCQUNMLEtBQUs7eUJBQ0wsS0FBSztxQkFFTCxNQUFNOzs7O0lBYlAsNENBQWlEOztJQUNqRCw4Q0FBcUQ7O0lBQ3JELDZDQUFtRDs7SUFFbkQsNENBQWlEOztJQUNqRCw4Q0FBcUQ7O0lBQ3JELDZDQUFtRDs7SUFHbkQsc0NBQStCOztJQUMvQix5Q0FBK0I7O0lBQy9CLDBDQUFtQzs7SUFFbkMsc0NBQThEOztJQUc5RCxzQ0FBbUI7O0lBQ25CLHdDQUFxQjs7SUFDckIsdUNBQW9COztJQUNwQixzQ0FBbUI7O0lBQ25CLHdDQUFxQjs7SUFDckIsdUNBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBGRmlsdGVyQmFzZSB9IGZyb20gJy4vZmZpbHRlci5iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gIDx0YWJsZSBjbGFzcz0nZnQtZmZpbHRlci10YWJsZSBmdC1mZmlsdGVyLWRhdGUtdGFibGUnPlxyXG4gIDx0ciBjbGFzcz0nZnQtZmZpbHRlci1jb2x1bW4nPlxyXG4gICAgICA8dGQgY2xhc3M9J2Z0LWZmaWx0ZXItcm93ICBmdC1mZmlsdGVyLWRkLXJvdyc+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmZpbHRlciBmdC1pLWZmaWx0ZXItZGF5XCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSdkZCcgICAgWyhuZ01vZGVsKV09J21pbkRheScgICAoa2V5dXApPSdvbktleVVwKFwibWluRGF5XCIsICAgMiwgJGV2ZW50KScgICNtaW5EYXlSZWYgLz5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRkIGNsYXNzPSdmdC1mZmlsdGVyLXJvdyAgZnQtZmZpbHRlci1tbS1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLW1vbnRoXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSdtbScgICAgWyhuZ01vZGVsKV09J21pbk1vbnRoJyAoa2V5dXApPSdvbktleVVwKFwibWluTW9udGhcIiwgMiwgJGV2ZW50KScgI21pbk1vbnRoUmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXIteXl5eS1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLXllYXJcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J3l5eXknICBbKG5nTW9kZWwpXT0nbWluWWVhcicgIChrZXl1cCk9J29uS2V5VXAoXCJtaW5ZZWFyXCIsICA0LCAkZXZlbnQpJyAgICNtaW5ZZWFyUmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgPC90cj5cclxuICA8dHIgY2xhc3M9J2Z0LWZmaWx0ZXItY29sdW1uJz5cclxuICAgICAgPHRkIGNsYXNzPSdmdC1mZmlsdGVyLXJvdyAgZnQtZmZpbHRlci1kZC1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLWRheVwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nZGQnICAgIFsobmdNb2RlbCldPSdtYXhEYXknICAgKGtleXVwKT0nb25LZXlVcChcIm1heERheVwiICwgIDIsICRldmVudCknICAjbWF4RGF5UmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXItbW0tcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtYXhNb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1heE1vbnRoXCIsIDIsICRldmVudCknICAjbWF4TW9udGhSZWYgLz5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRkIGNsYXNzPSdmdC1mZmlsdGVyLXJvdyAgZnQtZmZpbHRlci15eXl5LXJvdyc+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmZpbHRlciBmdC1pLWZmaWx0ZXIteWVhclwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0neXl5eScgIFsobmdNb2RlbCldPSdtYXhZZWFyJyAgKGtleXVwKT0nb25LZXlVcChcIm1heFllYXJcIiwgIDQsICRldmVudCknICAjbWF4WWVhclJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gIDwvdHI+XHJcbjwvdGFibGU+XHJcbiAgPCEtLVxyXG4gIDxkaXYgY2xhc3M9J2Z0LWZmaWx0ZXInPlxyXG4gICAgPGRpdiBjbGFzcz1cImZ0LWZpbHRlci1kYXRlIGZ0LWRpdjEtZmZpbHRlclwiPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1kYXlcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J2RkJyAgICBbKG5nTW9kZWwpXT0nbWluRGF5JyAgIChrZXl1cCk9J29uS2V5VXAoXCJtaW5EYXlcIiwgICAyLCAkZXZlbnQpJyAgI21pbkRheVJlZiAvPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtaW5Nb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1pbk1vbnRoXCIsIDIsICRldmVudCknICNtaW5Nb250aFJlZiAvPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci15ZWFyXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSd5eXl5JyAgWyhuZ01vZGVsKV09J21pblllYXInICAoa2V5dXApPSdvbktleVVwKFwibWluWWVhclwiLCAgNCwgJGV2ZW50KScgICAjbWluWWVhclJlZiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnQtZmlsdGVyLWRhdGUgZnQtZGl2Mi1mZmlsdGVyXCI+XHJcbiAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmlsdGVyIGZ0LWktZmlsdGVyLWRheVwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nZGQnICAgIFsobmdNb2RlbCldPSdtYXhEYXknICAgKGtleXVwKT0nb25LZXlVcChcIm1heERheVwiICwgIDIsICRldmVudCknICAjbWF4RGF5UmVmIC8+XHJcbiAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmlsdGVyIGZ0LWktZmlsdGVyLW1vbnRoXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSdtbScgICAgWyhuZ01vZGVsKV09J21heE1vbnRoJyAoa2V5dXApPSdvbktleVVwKFwibWF4TW9udGhcIiwgMiwgJGV2ZW50KScgICNtYXhNb250aFJlZiAvPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci15ZWFyXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSd5eXl5JyAgWyhuZ01vZGVsKV09J21heFllYXInICAoa2V5dXApPSdvbktleVVwKFwibWF4WWVhclwiLCAgNCwgJGV2ZW50KScgICNtYXhZZWFyUmVmIC8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgLS0+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgOmhvc3QgeyBmbGV4OjE7XHJcbiAgfWBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRGF0ZUZGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBGRmlsdGVyQmFzZSB7XHJcbiAgQFZpZXdDaGlsZChcIm1pbkRheVJlZlwiKSBfZWxNaW5EYXlSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm1pbk1vbnRoUmVmXCIpIF9lbE1pbk1vbnRoUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtaW5ZZWFyUmVmXCIpIF9lbE1pblllYXJSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJtYXhEYXlSZWZcIikgX2VsTWF4RGF5UmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtYXhNb250aFJlZlwiKSBfZWxNYXhNb250aFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWF4WWVhclJlZlwiKSBfZWxNYXhZZWFyUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuXHJcbiAgQElucHV0KCkgcHVibGljIHNvdXJjZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdGhlckRhdGE6IGFueTtcclxuICBASW5wdXQoKSBwdWJsaWMgY29sdW1uTmFtZTogc3RyaW5nO1xyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHJcbiAgcHVibGljIG1pbkRheSA9ICcnO1xyXG4gIHB1YmxpYyBtaW5Nb250aCA9ICcnO1xyXG4gIHB1YmxpYyBtaW5ZZWFyID0gJyc7XHJcbiAgcHVibGljIG1heERheSA9ICcnO1xyXG4gIHB1YmxpYyBtYXhNb250aCA9ICcnO1xyXG4gIHB1YmxpYyBtYXhZZWFyID0gJyc7XHJcblxyXG4gIG9uS2V5VXAobW9kZTogc3RyaW5nLCBtYXg6IG51bWJlciwgZXZlbnQpIHtcclxuICAgIC8vIElnbm9yZSBpZiBEZWxldGUgb3IgQmFja3NwYWNlXHJcbiAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gOCAmJiBldmVudC5rZXlDb2RlICE9PSA0Nikge1xyXG4gICAgICAvLyBmaWx0ZXIgbGV0dGVycyBhbmQgVHJpbVxyXG4gICAgICB0aGlzW21vZGVdID0gdGhpc1ttb2RlXS5tYXRjaCgvWzAtOV0qLykuam9pbignJykuc3Vic3RyaW5nKDAsIG1heCk7XHJcblxyXG4gICAgICAvLyBNb3ZlIGZvY3VzIGZvciBVWFxyXG4gICAgICBpZiAobW9kZSA9PT0gJ21pbkRheScgJiYgKHRoaXNbbW9kZV0ubGVuZ3RoID09PSAyIHx8IGV2ZW50LmtleUNvZGUgPT09IDM5KSkge1xyXG4gICAgICAgIHRoaXMuX2VsTWluTW9udGhSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtaW5Nb250aCcgJiYgKHRoaXNbbW9kZV0ubGVuZ3RoID09PSAyIHx8IGV2ZW50LmtleUNvZGUgPT09IDM5KSkge1xyXG4gICAgICAgIHRoaXMuX2VsTWluWWVhclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ21pblllYXInICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gNCB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1heERheVJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ21heERheScgJiYgKHRoaXNbbW9kZV0ubGVuZ3RoID09PSAyIHx8IGV2ZW50LmtleUNvZGUgPT09IDM5KSkge1xyXG4gICAgICAgIHRoaXMuX2VsTWF4TW9udGhSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtYXhNb250aCcgJiYgKHRoaXNbbW9kZV0ubGVuZ3RoID09PSAyIHx8IGV2ZW50LmtleUNvZGUgPT09IDM5KSkge1xyXG4gICAgICAgIHRoaXMuX2VsTWF4WWVhclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ21heFllYXInICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gNCB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1pbkRheVJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdmcm9udGVuZCcpIHtcclxuICAgICAgY29uc3QgZm4gPSBmdW5jdGlvbiAobmFtZSwgbWluRGF5LCBtaW5Nb250aCwgbWluWWVhciwgbWF4RGF5LCBtYXhNb250aCwgbWF4WWVhcikge1xyXG4gICAgICAgIHJldHVybiBkID0+IHtcclxuICAgICAgICAgIHJldHVybiAoPGFueVtdPmQpLmZpbHRlcih4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobmFtZSwgbWluRGF5LCBtaW5Nb250aCwgbWluWWVhciwgbWF4RGF5LCBtYXhNb250aCwgbWF4WWVhcik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh4W25hbWVdKTtcclxuICAgICAgICAgICAgcmV0dXJuIChtaW5EYXkubGVuZ3RoID4gMCA/IE51bWJlcihtaW5EYXkpIDw9IGRhdGUuZ2V0RGF0ZSgpIDogdHJ1ZSkgJiZcclxuICAgICAgICAgICAgICAobWluTW9udGgubGVuZ3RoID4gMCA/IE51bWJlcihtaW5Nb250aCkgPD0gZGF0ZS5nZXRNb250aCgpICsgMSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1pblllYXIubGVuZ3RoID4gMCA/IE51bWJlcihtaW5ZZWFyKSA8PSBkYXRlLmdldEZ1bGxZZWFyKCkgOiB0cnVlKSAmJlxyXG4gICAgICAgICAgICAgIChtYXhEYXkubGVuZ3RoID4gMCA/IE51bWJlcihtYXhEYXkpID49IGRhdGUuZ2V0RGF0ZSgpIDogdHJ1ZSkgJiZcclxuICAgICAgICAgICAgICAobWF4TW9udGgubGVuZ3RoID4gMCA/IE51bWJlcihtYXhNb250aCkgPj0gZGF0ZS5nZXRNb250aCgpICsgMSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1heFllYXIubGVuZ3RoID4gMCA/IE51bWJlcihtYXhZZWFyKSA+PSBkYXRlLmdldEZ1bGxZZWFyKCkgOiB0cnVlKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lOiB0aGlzLmNvbHVtbk5hbWUsIHR5cGU6ICdkYXRlJywgYXBwbHk6IGZuKHRoaXMuY29sdW1uTmFtZSwgdGhpcy5taW5EYXksIHRoaXMubWluTW9udGgsIHRoaXMubWluWWVhciwgdGhpcy5tYXhEYXksIHRoaXMubWF4TW9udGgsIHRoaXMubWF4WWVhcikgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcmVzdWx0ID0geyBtaW5EYXk6IHRoaXMubWluRGF5LCBtaW5Nb250aDogdGhpcy5taW5Nb250aCwgbWluWWVhcjogdGhpcy5taW5ZZWFyLCBtYXhEYXk6IHRoaXMubWF4RGF5LCBtYXhNb250aDogdGhpcy5tYXhNb250aCwgbWF4WWVhcjogdGhpcy5tYXhZZWFyIH07XHJcbiAgICAgIHRoaXMuZmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lOiB0aGlzLmNvbHVtbk5hbWUsIHR5cGU6ICdkYXRlJywgYXBwbHk6IHJlc3VsdCB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMubWluRGF5ID0gJyc7XHJcbiAgICB0aGlzLm1pbk1vbnRoID0gJyc7XHJcbiAgICB0aGlzLm1pblllYXIgPSAnJztcclxuICAgIHRoaXMubWF4RGF5ID0gJyc7XHJcbiAgICB0aGlzLm1heE1vbnRoID0gJyc7XHJcbiAgICB0aGlzLm1heFllYXIgPSAnJztcclxuICAgIHRoaXMuZmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lOiB0aGlzLmNvbHVtbk5hbWUsIGFwcGx5OiBudWxsIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=