ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
163 lines (162 loc) • 30.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input } from "@angular/core";
import { MediaObserver } from "@angular/flex-layout";
import { XmatBreakpointKeys } from "../../models";
import { chunk, merge, map, forEach } from "lodash";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
var XmatSummaryComponent = /** @class */ (function () {
function XmatSummaryComponent(mediaService) {
var _a;
var _this = this;
this.summary = [];
this._currentMqAlias = "lg";
this._defaults = {
data: {},
printMap: {},
labelsMap: {},
columns: (_a = {},
_a[XmatBreakpointKeys.xl] = 1,
_a[XmatBreakpointKeys.lg] = 1,
_a[XmatBreakpointKeys.md] = 1,
_a[XmatBreakpointKeys.sm] = 1,
_a[XmatBreakpointKeys.xs] = 1,
_a)
};
this._subsCtrl$ = new Subject();
mediaService.asObservable()
.pipe(takeUntil(this._subsCtrl$))
.subscribe(function (changes) {
/** @type {?} */
var change = changes[0];
/** @type {?} */
var previousMqAlias = _this._currentMqAlias; // Clone previous state to check for columns change
if (previousMqAlias !== change.mqAlias) {
_this._currentMqAlias = change.mqAlias;
!!_this._config && _this._needsBuild(previousMqAlias, change.mqAlias) && _this._buildSummary();
}
});
}
Object.defineProperty(XmatSummaryComponent.prototype, "config", {
get: /**
* @return {?}
*/
function () {
return this._config;
},
set: /**
* @param {?} newValue
* @return {?}
*/
function (newValue) {
this._config = merge({}, this._defaults, newValue);
if (!Array.isArray(this._config.props) || !this._config.props.length) {
this._config.props = Object.keys(this._config.data);
}
this._checkColumnsConfig();
this._buildSummary();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
XmatSummaryComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this._subsCtrl$.next();
};
/**
* @return {?}
*/
XmatSummaryComponent.prototype._buildSummary = /**
* @return {?}
*/
function () {
/** @type {?} */
var chunks = Math.ceil(this._config.props.length / (this._config.columns[this._currentMqAlias] || 1));
// console.info(`XMAT-SUMMARY => ${chunks} CHUNKS FOR ${this._config.props.length} PROPS`);
this.summary = Object.keys(this._config.data).length ? chunk(this._mapData(), chunks) : void 0;
};
/**
* @return {?}
*/
XmatSummaryComponent.prototype._checkColumnsConfig = /**
* @return {?}
*/
function () {
var _this = this;
forEach(this._config.columns, function (value, mqAlias) {
if (typeof value !== typeof 0 || value < 1) {
_this._config.columns[mqAlias] = 1;
}
if (value > _this._config.props.length) {
_this._config.columns[mqAlias] = Math.max(1, _this._config.props.length);
}
});
};
/**
* @return {?}
*/
XmatSummaryComponent.prototype._mapData = /**
* @return {?}
*/
function () {
var _this = this;
return map(this._config.props, function (k) {
/** @type {?} */
var value = _this._config.data[k];
return /** @type {?} */ ({
value: _this._config.printMap[k] ? _this._config.printMap[k](value) : value,
description: _this._config.labelsMap[k] !== void 0 ? _this._config.labelsMap[k] : k
});
});
};
/**
* @param {?} previousMqAlias
* @param {?} nextMqAlias
* @return {?}
*/
XmatSummaryComponent.prototype._needsBuild = /**
* @param {?} previousMqAlias
* @param {?} nextMqAlias
* @return {?}
*/
function (previousMqAlias, nextMqAlias) {
return this._config.columns[previousMqAlias] !== this._config.columns[nextMqAlias];
};
XmatSummaryComponent.decorators = [
{ type: Component, args: [{
selector: "xmat-summary",
template: "<div class=\"xmat-summary\"\n fxLayout=\"row wrap\"\n fxLayoutGap=\"2%\">\n <div fxFlex=\"98\"\n [fxFlex.xl]=\"98 / config.columns.xl\"\n [fxFlex.lg]=\"98 / config.columns.lg\"\n [fxFlex.md]=\"98 / config.columns.md\"\n [fxFlex.sm]=\"98 / config.columns.sm\"\n [fxFlex.xs]=\"98 / config.columns.xs\"\n *ngFor=\"let column of summary\">\n <div fxLayout\n class=\"xmat-summary-row\"\n *ngFor=\"let field of column\">\n <div fxFlex=\"35\"\n [ngClass]=\"{'xmat-capitalize-first': !config.noCapitalize}\"\n class=\"xmat-text-left\">\n <strong>{{field.description}}</strong>\n </div>\n <div fxFlex=\"65\"\n class=\"xmat-text-right\">\n {{field.value}}\n </div>\n </div>\n </div>\n</div>",
styles: [".mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-badge-small .mat-badge-content{font-size:6px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-content,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}.mat-table{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif}.mat-expansion-panel-header{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.34375em) scale(.75);transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.34374em) scale(.75);transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28122em) scale(.75);transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28121em) scale(.75);transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.2812em) scale(.75);transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-.59375em) scale(.75);transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-.59374em) scale(.75);transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.59375em) scale(.75);transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.59374em) scale(.75);transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0}.mat-tooltip{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-simple-snackbar{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-nested-tree-node,.mat-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;-webkit-transition:opacity,-webkit-transform cubic-bezier(0,0,.2,1);transition:opacity,transform cubic-bezier(0,0,.2,1),-webkit-transform cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}@media (-ms-high-contrast:active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:-webkit-box;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:-webkit-box;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@-webkit-keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-start{/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto!important;overflow:hidden!important;padding:2px 0!important;box-sizing:content-box!important}.xmat-summary .xmat-summary-row{padding-top:8px;border-bottom:1px dotted rgba(0,0,0,.2);-webkit-box-align:center;align-items:center;line-height:24px;position:relative}.xmat-summary .xmat-summary-row i.fa-chevron-right{line-height:32px}.xmat-summary .xmat-summary-row i.extra-info-toggle{position:absolute;right:0}"]
}] }
];
/** @nocollapse */
XmatSummaryComponent.ctorParameters = function () { return [
{ type: MediaObserver }
]; };
XmatSummaryComponent.propDecorators = {
config: [{ type: Input }]
};
return XmatSummaryComponent;
}());
export { XmatSummaryComponent };
if (false) {
/** @type {?} */
XmatSummaryComponent.prototype.summary;
/** @type {?} */
XmatSummaryComponent.prototype._currentMqAlias;
/** @type {?} */
XmatSummaryComponent.prototype._config;
/** @type {?} */
XmatSummaryComponent.prototype._defaults;
/** @type {?} */
XmatSummaryComponent.prototype._subsCtrl$;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXQtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMveG1hdC1zdW1tYXJ5L3htYXQtc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBYyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQWdDLE1BQU0sY0FBYyxDQUFDO0FBRS9FLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0lBeUNyQyw4QkFBWSxZQUEyQjs7UUFBdkMsaUJBV0M7UUE3QkQsZUFBMEIsRUFBRSxDQUFDOytCQUVLLElBQUk7eUJBRUM7WUFDbkMsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLFNBQVMsRUFBRSxFQUFFO1lBQ2IsT0FBTztnQkFDSCxHQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBRyxDQUFDO2dCQUMxQixHQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBRyxDQUFDO2dCQUMxQixHQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBRyxDQUFDO2dCQUMxQixHQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBRyxDQUFDO2dCQUMxQixHQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBRyxDQUFDO21CQUM3QjtTQUNKOzBCQUNtQyxJQUFJLE9BQU8sRUFBUTtRQUduRCxZQUFZLENBQUMsWUFBWSxFQUFFO2FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFD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LEdBQUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMseUJBQU87Z0JBQ0gsS0FBSyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDekUsV0FBVyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RSxFQUFDO1NBQ25CLENBQUMsQ0FBQztLQUNOOzs7Ozs7SUFFUywwQ0FBVzs7Ozs7SUFBckIsVUFBc0IsZUFBdUIsRUFBRSxXQUFXO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDdEY7O2dCQXRGSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLGs1QkFBNEM7O2lCQUUvQzs7OztnQkFab0IsYUFBYTs7O3lCQWU3QixLQUFLOzsrQkFoQlY7O1NBY2Esb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3l9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge01lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyfSBmcm9tIFwiQGFuZ3VsYXIvZmxleC1sYXlvdXRcIjtcbi8vXG5pbXBvcnQge1htYXRCcmVha3BvaW50S2V5cywgWG1hdFNlbGVjdCwgWG1hdFN1bW1hcnlDb25maWd9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcbi8vXG5pbXBvcnQge2NodW5rLCBtZXJnZSwgbWFwLCBmb3JFYWNofSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInhtYXQtc3VtbWFyeVwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4veG1hdC1zdW1tYXJ5LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3htYXQtc3VtbWFyeS5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBYbWF0U3VtbWFyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb25maWcobmV3VmFsdWU6IFhtYXRTdW1tYXJ5Q29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IG1lcmdlKHt9LCB0aGlzLl9kZWZhdWx0cywgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fY29uZmlnLnByb3BzKSB8fCAhdGhpcy5fY29uZmlnLnByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLnByb3BzID0gT2JqZWN0LmtleXModGhpcy5fY29uZmlnLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoZWNrQ29sdW1uc0NvbmZpZygpO1xuICAgICAgICB0aGlzLl9idWlsZFN1bW1hcnkoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnKCk6IFhtYXRTdW1tYXJ5Q29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG5cbiAgICBzdW1tYXJ5OiBYbWF0U2VsZWN0W11bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfY3VycmVudE1xQWxpYXM6IHN0cmluZyA9IFwibGdcIjtcbiAgICBwcml2YXRlIF9jb25maWc6IFhtYXRTdW1tYXJ5Q29uZmlnO1xuICAgIHByaXZhdGUgX2RlZmF1bHRzOiBYbWF0U3VtbWFyeUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIHByaW50TWFwOiB7fSxcbiAgICAgICAgbGFiZWxzTWFwOiB7fSxcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgICAgW1htYXRCcmVha3BvaW50S2V5cy54bF06IDEsXG4gICAgICAgICAgICBbWG1hdEJyZWFrcG9pbnRLZXlzLmxnXTogMSxcbiAgICAgICAgICAgIFtYbWF0QnJlYWtwb2ludEtleXMubWRdOiAxLFxuICAgICAgICAgICAgW1htYXRCcmVha3BvaW50S2V5cy5zbV06IDEsXG4gICAgICAgICAgICBbWG1hdEJyZWFrcG9pbnRLZXlzLnhzXTogMSxcbiAgICAgICAgfVxuICAgIH07XG4gICAgcHJpdmF0ZSBfc3Vic0N0cmwkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKG1lZGlhU2VydmljZTogTWVkaWFPYnNlcnZlcikge1xuICAgICAgICBtZWRpYVNlcnZpY2UuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3N1YnNDdHJsJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZXM6IE1lZGlhQ2hhbmdlW10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbMF07XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01xQWxpYXMgPSB0aGlzLl9jdXJyZW50TXFBbGlhczsgLy8gQ2xvbmUgcHJldmlvdXMgc3RhdGUgdG8gY2hlY2sgZm9yIGNvbHVtbnMgY2hhbmdlXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNcUFsaWFzICE9PSBjaGFuZ2UubXFBbGlhcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRNcUFsaWFzID0gY2hhbmdlLm1xQWxpYXM7XG4gICAgICAgICAgICAgICAgISF0aGlzLl9jb25maWcgJiYgdGhpcy5fbmVlZHNCdWlsZChwcmV2aW91c01xQWxpYXMsIGNoYW5nZS5tcUFsaWFzKSAmJiB0aGlzLl9idWlsZFN1bW1hcnkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNDdHJsJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9idWlsZFN1bW1hcnkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IE1hdGguY2VpbCh0aGlzLl9jb25maWcucHJvcHMubGVuZ3RoIC8gKHRoaXMuX2NvbmZpZy5jb2x1bW5zW3RoaXMuX2N1cnJlbnRNcUFsaWFzXSB8fCAxKSk7XG4gICAgICAgIC8vIGNvbnNvbGUuaW5mbyhgWE1BVC1TVU1NQVJZID0+ICR7Y2h1bmtzfSBDSFVOS1MgRk9SICR7dGhpcy5fY29uZmlnLnByb3BzLmxlbmd0aH0gUFJPUFNgKTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5ID0gT2JqZWN0LmtleXModGhpcy5fY29uZmlnLmRhdGEpLmxlbmd0aCA/IGNodW5rKHRoaXMuX21hcERhdGEoKSwgY2h1bmtzKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NoZWNrQ29sdW1uc0NvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLl9jb25maWcuY29sdW1ucywgKHZhbHVlOiBudW1iZXIsIG1xQWxpYXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZW9mIDAgfHwgdmFsdWUgPCAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLmNvbHVtbnNbbXFBbGlhc10gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID4gdGhpcy5fY29uZmlnLnByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5jb2x1bW5zW21xQWxpYXNdID0gTWF0aC5tYXgoMSwgdGhpcy5fY29uZmlnLnByb3BzLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9tYXBEYXRhKCk6IFhtYXRTZWxlY3RbXSB7XG4gICAgICAgIHJldHVybiBtYXAodGhpcy5fY29uZmlnLnByb3BzLCAoazogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZy5kYXRhW2tdO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fY29uZmlnLnByaW50TWFwW2tdID8gdGhpcy5fY29uZmlnLnByaW50TWFwW2tdKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLl9jb25maWcubGFiZWxzTWFwW2tdICE9PSB2b2lkIDAgPyB0aGlzLl9jb25maWcubGFiZWxzTWFwW2tdIDoga1xuICAgICAgICAgICAgfSBhcyBYbWF0U2VsZWN0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX25lZWRzQnVpbGQocHJldmlvdXNNcUFsaWFzOiBzdHJpbmcsIG5leHRNcUFsaWFzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY29sdW1uc1twcmV2aW91c01xQWxpYXNdICE9PSB0aGlzLl9jb25maWcuY29sdW1uc1tuZXh0TXFBbGlhc107XG4gICAgfVxuXG59XG4iXX0=