mgx-circular-progress-bar
Version:
A library for circular progress bars components, an elegant way to rappresent your percentages.
138 lines (137 loc) • 15.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, ViewChild, ElementRef, TemplateRef } from '@angular/core';
export class MgxCircularProgressFullBarComponent {
constructor() {
this.total = 1;
this.barValue = 0;
this.percentage = 0;
this.diameter = 150;
this.color = '#3282b8';
this.bgColor = '#eee';
this.contentSize = 83;
this.pathPosition = 90;
this.mgxPrefix = 'mgx-circular-progress-full-bar';
this.percentual = 0;
this.context = { percentual: 0, $implicit: 0 };
}
/**
* @return {?}
*/
ngOnChanges() {
/** @type {?} */
const circle = this.circlePath.nativeElement;
/** @type {?} */
const len = 2 * Math.PI * this.pathPosition;
circle.style.strokeDasharray = len;
this.showWarnings();
this.percentual = +this.percentage || (+this.barValue / +this.total) * 100;
this.percentual = isNaN(this.percentual) ? 0 : +this.percentual.toFixed(2);
if (this.percentual > 100) {
circle.style.strokeDashoffset = 0;
this.percentual = 100;
}
else {
circle.style.strokeDashoffset = len - (this.percentual / 100) * len;
}
this.context.percentual = this.percentual;
this.context.$implicit = this.percentual;
}
/**
* @return {?}
*/
showWarnings() {
if (!this.percentual || isNaN(this.percentual)) {
if (isNaN(this.barValue)) {
console.warn(`${this.mgxPrefix} barValue: ${this.barValue}`);
}
else if (isNaN(this.total)) {
console.warn(`${this.mgxPrefix} total: ${this.total}`);
}
else if (this.barValue > this.total) {
console.warn(`${this.mgxPrefix} barValue: ${this.barValue} is more than total: ${this.total}`);
}
}
}
/**
* @param {?=} reducer
* @return {?}
*/
getFontSize(reducer = 1) {
return `${(this.fontSize || (this.diameter / 4)) / reducer}px`;
}
}
MgxCircularProgressFullBarComponent.decorators = [
{ type: Component, args: [{
selector: 'mgx-circular-progress-full-bar',
template: `<div class="contain">
<svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" [ngStyle]="{'width.px': diameter, 'height.px': diameter }"
viewBox="0 0 200 200">
<circle id="base-circle" [attr.fill]="bgColor" stroke-width="15" cx="100" cy="100" [attr.r]="contentSize" />
<circle id="path" #circlePath [attr.stroke]="color" fill="none" stroke-width="15" cx="100" cy="100"
[attr.r]="pathPosition" rotate="50" />
</svg>
<div class="label">
<ng-container *ngIf="contentTemplate; else projectContent">
<ng-template *ngTemplateOutlet="contentTemplate; context: context"></ng-template>
</ng-container>
<ng-template #projectContent>
<div #contentRef>
<ng-content></ng-content>
</div>
<div *ngIf="!contentRef?.childNodes?.length" [style.font-size]="getFontSize()">{{percentual}}<span
[style.font-size]="getFontSize(1.2)">%</span></div>
</ng-template>
</div>
</div>`,
styles: [`.contain{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;box-sizing:border-box;position:relative}#path{transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);transform-origin:center center;-webkit-transform-origin:center center;-ms-transform-origin:center center;-moz-transform-origin:center center;transition:stroke-dashoffset .3s ease-in-out;-webkit-transition:stroke-dashoffset .3s ease-in-out;-ms-transition:stroke-dashoffset .3s ease-in-out;-moz-transition:stroke-dashoffset .3s ease-in-out}#pie-path{transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg)}.label{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;font-family:Kreon VariableFont;color:#7f8c8d}`]
},] },
];
/** @nocollapse */
MgxCircularProgressFullBarComponent.ctorParameters = () => [];
MgxCircularProgressFullBarComponent.propDecorators = {
total: [{ type: Input }],
barValue: [{ type: Input }],
percentage: [{ type: Input }],
contentTemplate: [{ type: Input }],
diameter: [{ type: Input }],
fontSize: [{ type: Input }],
color: [{ type: Input }],
bgColor: [{ type: Input }],
contentSize: [{ type: Input }],
pathPosition: [{ type: Input }],
circlePath: [{ type: ViewChild, args: ['circlePath',] }]
};
if (false) {
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.total;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.barValue;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.percentage;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.contentTemplate;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.diameter;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.fontSize;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.color;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.bgColor;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.contentSize;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.pathPosition;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.circlePath;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.mgxPrefix;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.percentual;
/** @type {?} */
MgxCircularProgressFullBarComponent.prototype.context;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWd4LWNpcmN1bGFyLXByb2dyZXNzLWZ1bGwtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21neC1jaXJjdWxhci1wcm9ncmVzcy1iYXIvIiwic291cmNlcyI6WyJsaWIvbWd4LWNpcmN1bGFyLXByb2dyZXNzLWZ1bGwtYmFyL21neC1jaXJjdWxhci1wcm9ncmVzcy1mdWxsLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMEJoRyxNQUFNO0lBb0JKO3FCQWxCeUIsQ0FBQzt3QkFDRSxDQUFDOzBCQUNDLENBQUM7d0JBSUgsR0FBRztxQkFFTixTQUFTO3VCQUNQLE1BQU07MkJBQ0YsRUFBRTs0QkFDRCxFQUFFO3lCQUdkLGdDQUFnQzswQkFDL0IsQ0FBQzt1QkFDUCxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtLQUU3Qjs7OztJQUVqQixXQUFXOztRQUNULE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDOztRQUM3QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRTNFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUUxQzs7OztJQUVPLFlBQVk7UUFDbEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsY0FBYyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUM5RDtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLFdBQVcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDeEQ7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGNBQWMsSUFBSSxDQUFDLFFBQVEsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2hHO1NBQ0Y7Ozs7OztJQUdILFdBQVcsQ0FBQyxVQUFrQixDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQztLQUNoRTs7O1lBbkZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO2dCQUMxQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkw7Z0JBQ0wsTUFBTSxFQUFFLENBQUMseWpDQUF5akMsQ0FBQzthQUNwa0M7Ozs7O29CQUdFLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzhCQUdMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLO29CQUNMLEtBQUs7c0JBQ0wsS0FBSzswQkFDTCxLQUFLOzJCQUNMLEtBQUs7eUJBQ0wsU0FBUyxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWd4LWNpcmN1bGFyLXByb2dyZXNzLWZ1bGwtYmFyJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiY29udGFpblwiPlxuICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHg9XCIwXCIgeT1cIjBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoLnB4JzogZGlhbWV0ZXIsICdoZWlnaHQucHgnOiBkaWFtZXRlciB9XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyMDAgMjAwXCI+XG4gICAgICAgIDxjaXJjbGUgaWQ9XCJiYXNlLWNpcmNsZVwiIFthdHRyLmZpbGxdPVwiYmdDb2xvclwiIHN0cm9rZS13aWR0aD1cIjE1XCIgY3g9XCIxMDBcIiBjeT1cIjEwMFwiIFthdHRyLnJdPVwiY29udGVudFNpemVcIiAvPlxuICAgICAgICA8Y2lyY2xlIGlkPVwicGF0aFwiICNjaXJjbGVQYXRoIFthdHRyLnN0cm9rZV09XCJjb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMTVcIiBjeD1cIjEwMFwiIGN5PVwiMTAwXCJcbiAgICAgICAgICAgIFthdHRyLnJdPVwicGF0aFBvc2l0aW9uXCIgcm90YXRlPVwiNTBcIiAvPlxuICAgIDwvc3ZnPlxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFRlbXBsYXRlOyBlbHNlIHByb2plY3RDb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwcm9qZWN0Q29udGVudD5cbiAgICAgICAgICAgIDxkaXYgI2NvbnRlbnRSZWY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbnRlbnRSZWY/LmNoaWxkTm9kZXM/Lmxlbmd0aFwiIFtzdHlsZS5mb250LXNpemVdPVwiZ2V0Rm9udFNpemUoKVwiPnt7cGVyY2VudHVhbH19PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCJnZXRGb250U2l6ZSgxLjIpXCI+JiMzNzs8L3NwYW4+PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L2Rpdj5gLFxuICBzdHlsZXM6IFtgLmNvbnRhaW57ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9I3BhdGh7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1vei10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyOy1tcy10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7LW1vei10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAuM3MgZWFzZS1pbi1vdXQ7LXdlYmtpdC10cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dDstbXMtdHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAuM3MgZWFzZS1pbi1vdXQ7LW1vei10cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dH0jcGllLXBhdGh7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1vei10cmFuc2Zvcm06cm90YXRlKC05MGRlZyl9LmxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LWZhbWlseTpLcmVvbiBWYXJpYWJsZUZvbnQ7Y29sb3I6IzdmOGM4ZH1gXVxufSlcbmV4cG9ydCBjbGFzcyBNZ3hDaXJjdWxhclByb2dyZXNzRnVsbEJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgdG90YWw6IG51bWJlciA9IDE7XG4gIEBJbnB1dCgpIGJhclZhbHVlOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwZXJjZW50YWdlOiBudW1iZXIgPSAwO1xuXG4gIC8qIERpc3BsYXkgc2VjdGlvbiAqL1xuICBASW5wdXQoKSBjb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGRpYW1ldGVyOiBudW1iZXIgPSAxNTA7XG4gIEBJbnB1dCgpIGZvbnRTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmcgPSAnIzMyODJiOCc7XG4gIEBJbnB1dCgpIGJnQ29sb3I6IHN0cmluZyA9ICcjZWVlJztcbiAgQElucHV0KCkgY29udGVudFNpemU6IG51bWJlciA9IDgzO1xuICBASW5wdXQoKSBwYXRoUG9zaXRpb246IG51bWJlciA9IDkwO1xuICBAVmlld0NoaWxkKCdjaXJjbGVQYXRoJykgY2lyY2xlUGF0aDogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIG1neFByZWZpeCA9ICdtZ3gtY2lyY3VsYXItcHJvZ3Jlc3MtZnVsbC1iYXInO1xuICBwZXJjZW50dWFsOiBudW1iZXIgPSAwO1xuICBjb250ZXh0OiBhbnkgPSB7IHBlcmNlbnR1YWw6IDAsICRpbXBsaWNpdDogMCB9O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgY29uc3QgY2lyY2xlID0gdGhpcy5jaXJjbGVQYXRoLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgbGVuID0gMiAqIE1hdGguUEkgKiB0aGlzLnBhdGhQb3NpdGlvbjtcbiAgICBjaXJjbGUuc3R5bGUuc3Ryb2tlRGFzaGFycmF5ID0gbGVuO1xuXG4gICAgdGhpcy5zaG93V2FybmluZ3MoKTtcblxuICAgIHRoaXMucGVyY2VudHVhbCA9ICt0aGlzLnBlcmNlbnRhZ2UgfHwgKCt0aGlzLmJhclZhbHVlIC8gK3RoaXMudG90YWwpICogMTAwO1xuXG4gICAgdGhpcy5wZXJjZW50dWFsID0gaXNOYU4odGhpcy5wZXJjZW50dWFsKSA/IDAgOiArdGhpcy5wZXJjZW50dWFsLnRvRml4ZWQoMik7XG5cbiAgICBpZiAodGhpcy5wZXJjZW50dWFsID4gMTAwKSB7XG4gICAgICBjaXJjbGUuc3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IDA7XG4gICAgICB0aGlzLnBlcmNlbnR1YWwgPSAxMDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNpcmNsZS5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gbGVuIC0gKHRoaXMucGVyY2VudHVhbCAvIDEwMCkgKiBsZW47XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0LnBlcmNlbnR1YWwgPSB0aGlzLnBlcmNlbnR1YWw7XG4gICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMucGVyY2VudHVhbDtcblxuICB9XG5cbiAgcHJpdmF0ZSBzaG93V2FybmluZ3MoKSB7XG4gICAgaWYgKCF0aGlzLnBlcmNlbnR1YWwgfHwgaXNOYU4odGhpcy5wZXJjZW50dWFsKSkge1xuICAgICAgaWYgKGlzTmFOKHRoaXMuYmFyVmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm1neFByZWZpeH0gYmFyVmFsdWU6ICR7dGhpcy5iYXJWYWx1ZX1gKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOYU4odGhpcy50b3RhbCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubWd4UHJlZml4fSB0b3RhbDogJHt0aGlzLnRvdGFsfWApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmJhclZhbHVlID4gdGhpcy50b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5tZ3hQcmVmaXh9IGJhclZhbHVlOiAke3RoaXMuYmFyVmFsdWV9IGlzIG1vcmUgdGhhbiB0b3RhbDogJHt0aGlzLnRvdGFsfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZvbnRTaXplKHJlZHVjZXI6IG51bWJlciA9IDEpIHtcbiAgICByZXR1cm4gYCR7KHRoaXMuZm9udFNpemUgfHwgKHRoaXMuZGlhbWV0ZXIgLyA0KSkgLyByZWR1Y2VyfXB4YDtcbiAgfVxuXG59XG4iXX0=