@greg-md/ng-flex-css-layout
Version:
Flex-CSS-Layout is an alternative behaviour of Flex-Layout directives, that will still work with Angular Universal and App Shell.
405 lines (404 loc) • 28.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Directive, ElementRef, Input, Renderer2, Optional, Self, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { ReplaySubject } from 'rxjs';
import { FlexCssService } from './flex-css.service';
import { BaseDirective } from './directive';
import { LayoutDirective } from './layout.directive';
var /** @type {?} */ TRULY = ['true', true, 1];
/**
* @param {?} value
* @return {?}
*/
export function isTrueValue(value) {
return value === '' || TRULY.indexOf(value) >= 0;
}
var ShowHideDirective = /** @class */ (function (_super) {
tslib_1.__extends(ShowHideDirective, _super);
function ShowHideDirective(elementRef, renderer, service, layout, platformId) {
var _this = _super.call(this, elementRef, renderer) || this;
_this.service = service;
_this.layout = layout;
_this.platformId = platformId;
_this.fcValues = {};
_this.observer$ = new ReplaySubject(1);
return _this;
}
Object.defineProperty(ShowHideDirective.prototype, "show", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['all'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xs'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['sm'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['md'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lg'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xl'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showLtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-sm'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showLtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-md'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showLtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-lg'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showLtXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-xl'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showGtXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-xs'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showGtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-sm'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showGtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-md'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "showGtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-lg'] = isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hide", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['all'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xs'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['sm'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['md'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lg'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xl'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideLtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-sm'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideLtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-md'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideLtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-lg'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideLtXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-xl'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideGtXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-xs'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideGtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-sm'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideGtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-md'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
Object.defineProperty(ShowHideDirective.prototype, "hideGtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-lg'] = !isTrueValue(val); },
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
ShowHideDirective.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.reload();
};
/**
* @return {?}
*/
ShowHideDirective.prototype.reload = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ classNames = [];
var /** @type {?} */ display = this.getDisplayStyle();
this.breakpoints.forEach(function (breakpoint) {
classNames.push(_this.service.addShowHide(display, _this.fcValues[breakpoint], breakpoint));
});
this.setClassNames(classNames);
this.observer$.next(this.fcValues);
};
/**
* @return {?}
*/
ShowHideDirective.prototype.getDisplayStyle = /**
* @return {?}
*/
function () {
return this.layout ? 'flex' : (this.getElementStyle(this.elementRef.nativeElement, 'display')
|| this.fcDisplayDefault
|| 'block');
};
/**
* @param {?} element
* @param {?} styleName
* @return {?}
*/
ShowHideDirective.prototype.getElementStyle = /**
* @param {?} element
* @param {?} styleName
* @return {?}
*/
function (element, styleName) {
return (element ? element.style[styleName] || element.style.getPropertyValue(styleName) : '')
|| (isPlatformBrowser(this.platformId) ? getComputedStyle(element).getPropertyValue(styleName) : '');
};
Object.defineProperty(ShowHideDirective.prototype, "breakpoints", {
get: /**
* @return {?}
*/
function () {
return Object.keys(this.fcValues);
},
enumerable: true,
configurable: true
});
ShowHideDirective.decorators = [
{ type: Directive, args: [{
selector: "\n [fcShow],\n [fcShow.xs], [fcShow.sm], [fcShow.md], [fcShow.lg], [fcShow.xl],\n [fcShow.lt-sm], [fcShow.lt-md], [fcShow.lt-lg], [fcShow.lt-xl],\n [fcShow.gt-xs], [fcShow.gt-sm], [fcShow.gt-md], [fcShow.gt-lg],\n [fcHide],\n [fcHide.xs], [fcHide.sm], [fcHide.md], [fcHide.lg], [fcHide.xl],\n [fcHide.lt-sm], [fcHide.lt-md], [fcHide.lt-lg], [fcHide.lt-xl],\n [fcHide.gt-xs], [fcHide.gt-sm], [fcHide.gt-md], [fcHide.gt-lg]\n ",
},] },
];
/** @nocollapse */
ShowHideDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: FlexCssService },
{ type: LayoutDirective, decorators: [{ type: Optional }, { type: Self }] },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
]; };
ShowHideDirective.propDecorators = {
fcDisplayDefault: [{ type: Input }],
show: [{ type: Input, args: ['fcShow',] }],
showXs: [{ type: Input, args: ['fcShow.xs',] }],
showSm: [{ type: Input, args: ['fcShow.sm',] }],
showMd: [{ type: Input, args: ['fcShow.md',] }],
showLg: [{ type: Input, args: ['fcShow.lg',] }],
showXl: [{ type: Input, args: ['fcShow.xl',] }],
showLtSm: [{ type: Input, args: ['fcShow.lt-sm',] }],
showLtMd: [{ type: Input, args: ['fcShow.lt-md',] }],
showLtLg: [{ type: Input, args: ['fcShow.lt-lg',] }],
showLtXl: [{ type: Input, args: ['fcShow.lt-xl',] }],
showGtXs: [{ type: Input, args: ['fcShow.gt-xs',] }],
showGtSm: [{ type: Input, args: ['fcShow.gt-sm',] }],
showGtMd: [{ type: Input, args: ['fcShow.gt-md',] }],
showGtLg: [{ type: Input, args: ['fcShow.gt-lg',] }],
hide: [{ type: Input, args: ['fcHide',] }],
hideXs: [{ type: Input, args: ['fcHide.xs',] }],
hideSm: [{ type: Input, args: ['fcHide.sm',] }],
hideMd: [{ type: Input, args: ['fcHide.md',] }],
hideLg: [{ type: Input, args: ['fcHide.lg',] }],
hideXl: [{ type: Input, args: ['fcHide.xl',] }],
hideLtSm: [{ type: Input, args: ['fcHide.lt-sm',] }],
hideLtMd: [{ type: Input, args: ['fcHide.lt-md',] }],
hideLtLg: [{ type: Input, args: ['fcHide.lt-lg',] }],
hideLtXl: [{ type: Input, args: ['fcHide.lt-xl',] }],
hideGtXs: [{ type: Input, args: ['fcHide.gt-xs',] }],
hideGtSm: [{ type: Input, args: ['fcHide.gt-sm',] }],
hideGtMd: [{ type: Input, args: ['fcHide.gt-md',] }],
hideGtLg: [{ type: Input, args: ['fcHide.gt-lg',] }]
};
return ShowHideDirective;
}(BaseDirective));
export { ShowHideDirective };
function ShowHideDirective_tsickle_Closure_declarations() {
/** @type {?} */
ShowHideDirective.prototype.fcValues;
/** @type {?} */
ShowHideDirective.prototype.observer$;
/** @type {?} */
ShowHideDirective.prototype.fcDisplayDefault;
/** @type {?} */
ShowHideDirective.prototype.service;
/** @type {?} */
ShowHideDirective.prototype.layout;
/** @type {?} */
ShowHideDirective.prototype.platformId;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1oaWRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BncmVnLW1kL25nLWZsZXgtY3NzLWxheW91dC8iLCJzb3VyY2VzIjpbImxpYi9zaG93LWhpZGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQscUJBQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7QUFFaEMsTUFBTSxzQkFBc0IsS0FBVTtJQUNwQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNsRDs7SUFjc0MsNkNBQWE7SUF5Q2xELDJCQUNFLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ1gsU0FDb0IsTUFBdUIsRUFDcEIsVUFBa0I7UUFMbkQsWUFPRSxrQkFBTSxVQUFVLEVBQUUsUUFBUSxDQUFDLFNBQzVCO1FBTFMsYUFBTyxHQUFQLE9BQU87UUFDYSxZQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNwQixnQkFBVSxHQUFWLFVBQVUsQ0FBUTt5QkE3Qy9CLEVBQUU7MEJBRUQsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDOztLQThDeEM7SUExQ0Qsc0JBQTJCLG1DQUFJOzs7OztRQUEvQixVQUFnQyxHQUFHLElBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbEYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbEYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbEYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbEYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbEYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFFbEYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFFdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDdkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFFdkYsc0JBQTJCLG1DQUFJOzs7OztRQUEvQixVQUFnQyxHQUFHLElBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7T0FBQTtJQUNuRixzQkFBMkIscUNBQU07Ozs7O1FBQWpDLFVBQWtDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztPQUFBO0lBQ25GLHNCQUEyQixxQ0FBTTs7Ozs7UUFBakMsVUFBa0MsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDbkYsc0JBQTJCLHFDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7T0FBQTtJQUNuRixzQkFBMkIscUNBQU07Ozs7O1FBQWpDLFVBQWtDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztPQUFBO0lBQ25GLHNCQUEyQixxQ0FBTTs7Ozs7UUFBakMsVUFBa0MsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFFbkYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7T0FBQTtJQUN4RixzQkFBMkIsdUNBQVE7Ozs7O1FBQW5DLFVBQW9DLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztPQUFBO0lBQ3hGLHNCQUEyQix1Q0FBUTs7Ozs7UUFBbkMsVUFBb0MsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDeEYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7T0FBQTtJQUV4RixzQkFBMkIsdUNBQVE7Ozs7O1FBQW5DLFVBQW9DLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztPQUFBO0lBQ3hGLHNCQUEyQix1Q0FBUTs7Ozs7UUFBbkMsVUFBb0MsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7O09BQUE7SUFDeEYsc0JBQTJCLHVDQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7T0FBQTtJQUN4RixzQkFBMkIsdUNBQVE7Ozs7O1FBQW5DLFVBQW9DLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztPQUFBOzs7O0lBWXhGLHVDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNmOzs7O0lBRUQsa0NBQU07OztJQUFOO1FBQUEsaUJBWUM7UUFYQyxxQkFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXRCLHFCQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVO1lBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUMzRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNwQzs7OztJQUVELDJDQUFlOzs7SUFBZjtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO2VBQzNELElBQUksQ0FBQyxnQkFBZ0I7ZUFDckIsT0FBTyxDQUNYLENBQUM7S0FDSDs7Ozs7O0lBRUQsMkNBQWU7Ozs7O0lBQWYsVUFBZ0IsT0FBTyxFQUFFLFNBQVM7UUFDaEMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztlQUN4RixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hHO0lBRUQsc0JBQUksMENBQVc7Ozs7UUFBZjtZQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNuQzs7O09BQUE7O2dCQWhHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG1iQVNUO2lCQUNGOzs7O2dCQXpCbUIsVUFBVTtnQkFBUyxTQUFTO2dCQUl2QyxjQUFjO2dCQUVkLGVBQWUsdUJBaUVuQixRQUFRLFlBQUksSUFBSTtnQkFDMEIsTUFBTSx1QkFBaEQsTUFBTSxTQUFDLFdBQVc7OzttQ0F6Q3BCLEtBQUs7dUJBRUwsS0FBSyxTQUFDLFFBQVE7eUJBQ2QsS0FBSyxTQUFDLFdBQVc7eUJBQ2pCLEtBQUssU0FBQyxXQUFXO3lCQUNqQixLQUFLLFNBQUMsV0FBVzt5QkFDakIsS0FBSyxTQUFDLFdBQVc7eUJBQ2pCLEtBQUssU0FBQyxXQUFXOzJCQUVqQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFFcEIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7dUJBRXBCLEtBQUssU0FBQyxRQUFRO3lCQUNkLEtBQUssU0FBQyxXQUFXO3lCQUNqQixLQUFLLFNBQUMsV0FBVzt5QkFDakIsS0FBSyxTQUFDLFdBQVc7eUJBQ2pCLEtBQUssU0FBQyxXQUFXO3lCQUNqQixLQUFLLFNBQUMsV0FBVzsyQkFFakIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7MkJBRXBCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzs0QkFqRXZCO0VBMEJ1QyxhQUFhO1NBQXZDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiwgT25DaGFuZ2VzLCBPcHRpb25hbCwgU2VsZiwgSW5qZWN0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGbGV4Q3NzU2VydmljZSB9IGZyb20gJy4vZmxleC1jc3Muc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi9sYXlvdXQuZGlyZWN0aXZlJztcblxuY29uc3QgVFJVTFkgPSBbJ3RydWUnLCB0cnVlLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHJ1ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCBUUlVMWS5pbmRleE9mKHZhbHVlKSA+PSAwO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBcbiAgW2ZjU2hvd10sXG4gIFtmY1Nob3cueHNdLCBbZmNTaG93LnNtXSwgW2ZjU2hvdy5tZF0sIFtmY1Nob3cubGddLCBbZmNTaG93LnhsXSxcbiAgW2ZjU2hvdy5sdC1zbV0sIFtmY1Nob3cubHQtbWRdLCBbZmNTaG93Lmx0LWxnXSwgW2ZjU2hvdy5sdC14bF0sXG4gIFtmY1Nob3cuZ3QteHNdLCBbZmNTaG93Lmd0LXNtXSwgW2ZjU2hvdy5ndC1tZF0sIFtmY1Nob3cuZ3QtbGddLFxuICBbZmNIaWRlXSxcbiAgW2ZjSGlkZS54c10sIFtmY0hpZGUuc21dLCBbZmNIaWRlLm1kXSwgW2ZjSGlkZS5sZ10sIFtmY0hpZGUueGxdLFxuICBbZmNIaWRlLmx0LXNtXSwgW2ZjSGlkZS5sdC1tZF0sIFtmY0hpZGUubHQtbGddLCBbZmNIaWRlLmx0LXhsXSxcbiAgW2ZjSGlkZS5ndC14c10sIFtmY0hpZGUuZ3Qtc21dLCBbZmNIaWRlLmd0LW1kXSwgW2ZjSGlkZS5ndC1sZ11cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2hvd0hpZGVEaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcmVhZG9ubHkgZmNWYWx1ZXMgPSB7fTtcblxuICByZWFkb25seSBvYnNlcnZlciQgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcblxuICBASW5wdXQoKSBmY0Rpc3BsYXlEZWZhdWx0O1xuXG4gIEBJbnB1dCgnZmNTaG93JykgICAgICAgc2V0IHNob3codmFsKSAgeyB0aGlzLmZjVmFsdWVzWydhbGwnXSA9IGlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY1Nob3cueHMnKSAgICBzZXQgc2hvd1hzKHZhbCkgeyB0aGlzLmZjVmFsdWVzWyd4cyddID0gaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjU2hvdy5zbScpICAgIHNldCBzaG93U20odmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ3NtJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG4gIEBJbnB1dCgnZmNTaG93Lm1kJykgICAgc2V0IHNob3dNZCh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snbWQnXSA9IGlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY1Nob3cubGcnKSAgICBzZXQgc2hvd0xnKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsZyddID0gaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjU2hvdy54bCcpICAgIHNldCBzaG93WGwodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ3hsJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG5cbiAgQElucHV0KCdmY1Nob3cubHQtc20nKSBzZXQgc2hvd0x0U20odmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LXNtJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG4gIEBJbnB1dCgnZmNTaG93Lmx0LW1kJykgc2V0IHNob3dMdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1tZCddID0gaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjU2hvdy5sdC1sZycpIHNldCBzaG93THRMZyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snbHQtbGcnXSA9IGlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY1Nob3cubHQteGwnKSBzZXQgc2hvd0x0WGwodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LXhsJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG5cbiAgQElucHV0KCdmY1Nob3cuZ3QteHMnKSBzZXQgc2hvd0d0WHModmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LXhzJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG4gIEBJbnB1dCgnZmNTaG93Lmd0LXNtJykgc2V0IHNob3dHdFNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1zbSddID0gaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjU2hvdy5ndC1tZCcpIHNldCBzaG93R3RNZCh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QtbWQnXSA9IGlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY1Nob3cuZ3QtbGcnKSBzZXQgc2hvd0d0TGcodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LWxnJ10gPSBpc1RydWVWYWx1ZSh2YWwpOyB9XG5cbiAgQElucHV0KCdmY0hpZGUnKSAgICAgICBzZXQgaGlkZSh2YWwpICB7IHRoaXMuZmNWYWx1ZXNbJ2FsbCddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUueHMnKSAgICBzZXQgaGlkZVhzKHZhbCkgeyB0aGlzLmZjVmFsdWVzWyd4cyddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUuc20nKSAgICBzZXQgaGlkZVNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydzbSddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUubWQnKSAgICBzZXQgaGlkZU1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydtZCddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUubGcnKSAgICBzZXQgaGlkZUxnKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsZyddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUueGwnKSAgICBzZXQgaGlkZVhsKHZhbCkgeyB0aGlzLmZjVmFsdWVzWyd4bCddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cblxuICBASW5wdXQoJ2ZjSGlkZS5sdC1zbScpIHNldCBoaWRlTHRTbSh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snbHQtc20nXSA9ICFpc1RydWVWYWx1ZSh2YWwpOyB9XG4gIEBJbnB1dCgnZmNIaWRlLmx0LW1kJykgc2V0IGhpZGVMdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1tZCddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUubHQtbGcnKSBzZXQgaGlkZUx0TGcodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LWxnJ10gPSAhaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjSGlkZS5sdC14bCcpIHNldCBoaWRlTHRYbCh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snbHQteGwnXSA9ICFpc1RydWVWYWx1ZSh2YWwpOyB9XG5cbiAgQElucHV0KCdmY0hpZGUuZ3QteHMnKSBzZXQgaGlkZUd0WHModmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LXhzJ10gPSAhaXNUcnVlVmFsdWUodmFsKTsgfVxuICBASW5wdXQoJ2ZjSGlkZS5ndC1zbScpIHNldCBoaWRlR3RTbSh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3Qtc20nXSA9ICFpc1RydWVWYWx1ZSh2YWwpOyB9XG4gIEBJbnB1dCgnZmNIaWRlLmd0LW1kJykgc2V0IGhpZGVHdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1tZCddID0gIWlzVHJ1ZVZhbHVlKHZhbCk7IH1cbiAgQElucHV0KCdmY0hpZGUuZ3QtbGcnKSBzZXQgaGlkZUd0TGcodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LWxnJ10gPSAhaXNUcnVlVmFsdWUodmFsKTsgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNlcnZpY2U6IEZsZXhDc3NTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZSxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcm90ZWN0ZWQgcGxhdGZvcm1JZDogT2JqZWN0XG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtdO1xuXG4gICAgY29uc3QgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheVN0eWxlKCk7XG5cbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBjbGFzc05hbWVzLnB1c2godGhpcy5zZXJ2aWNlLmFkZFNob3dIaWRlKGRpc3BsYXksIHRoaXMuZmNWYWx1ZXNbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0Q2xhc3NOYW1lcyhjbGFzc05hbWVzKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIkLm5leHQodGhpcy5mY1ZhbHVlcyk7XG4gIH1cblxuICBnZXREaXNwbGF5U3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0ID8gJ2ZsZXgnIDogKFxuICAgICAgdGhpcy5nZXRFbGVtZW50U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JylcbiAgICAgIHx8IHRoaXMuZmNEaXNwbGF5RGVmYXVsdFxuICAgICAgfHwgJ2Jsb2NrJ1xuICAgICk7XG4gIH1cblxuICBnZXRFbGVtZW50U3R5bGUoZWxlbWVudCwgc3R5bGVOYW1lKSB7XG4gICAgcmV0dXJuIChlbGVtZW50ID8gZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdIHx8IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpIDogJycpXG4gICAgICB8fCAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpIDogJycpO1xuICB9XG5cbiAgZ2V0IGJyZWFrcG9pbnRzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZjVmFsdWVzKTtcbiAgfVxufVxuIl19