UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

623 lines (622 loc) 39.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter, ApplicationRef } from '@angular/core'; import { Option } from '../../../../../decorator/Option.decorator'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; import { FileSelector } from '../../../../../component/dataview/input/FileSelector.component'; import { I18N } from '../../../../../decorator/I18N.decorator'; var /** @type {?} */ TYPE_NAME = "material-file-selector"; var MaterialFileSelector = /** @class */ (function (_super) { tslib_1.__extends(MaterialFileSelector, _super); function MaterialFileSelector(elementRef, needFocusService, applicationRef) { var _this = _super.call(this, elementRef, needFocusService) || this; _this._applicationRef = applicationRef; _this._bgColor = '#ededed'; //extract(@CLR_1, 7); return _this; } /** * @return {?} */ MaterialFileSelector.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); }; /** * @param {?} inputValue * @param {?} results * @return {?} */ MaterialFileSelector.prototype.onValidationEnd = /** * @param {?} inputValue * @param {?} results * @return {?} */ function (inputValue, results) { //! do sthing }; /** * @param {?} data * @param {?} inputVal * @return {?} */ MaterialFileSelector.prototype.onDataChange = /** * @param {?} data * @param {?} inputVal * @return {?} */ function (data, inputVal) { // throw new Error("Method not implemented."); }; /** * @param {?} $event * @return {?} */ MaterialFileSelector.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { // throw new Error("Method not implemented."); }; /** * @param {?} $event * @return {?} */ MaterialFileSelector.prototype.doLostFocus = /** * @param {?} $event * @return {?} */ function ($event) { // throw new Error("Method not implemented."); }; /** * @return {?} */ MaterialFileSelector.prototype.getAllowMultipleSelect = /** * @return {?} */ function () { return this.allowMultipleSelect; }; /** * @param {?} file * @return {?} */ MaterialFileSelector.prototype.handleFiles = /** * @param {?} file * @return {?} */ function (file) { if (this.isAccept(file.files)) { this.addFiles(file.files, event); } }; /** * @return {?} */ MaterialFileSelector.prototype.openFileSelector = /** * @return {?} */ function () { document.getElementById('file').click(); }; /** * @return {?} */ MaterialFileSelector.prototype.isSelfDataDirty = /** * @return {?} */ function () { var /** @type {?} */ d1 = FileSelector.resolveMappedData(this.field, this.originalValue); var /** @type {?} */ d2 = this.getInputValue(); if (d1 !== d2) { return true; } return false; }; /** * @param {?} data * @return {?} */ MaterialFileSelector.prototype.selfSaveData = /** * @param {?} data * @return {?} */ function (data) { if (data !== undefined && data !== null) { this.originalValue = JSON.parse(JSON.stringify(data)); } else { this.originalValue = data; } }; /** * @return {?} */ MaterialFileSelector.prototype.selfResetData = /** * @return {?} */ function () { this.setInputValue(this.originalValue); }; /** * @return {?} */ MaterialFileSelector.prototype.getWidth = /** * @return {?} */ function () { return this.width; }; /** * @param {?} width * @return {?} */ MaterialFileSelector.prototype.setWidth = /** * @param {?} width * @return {?} */ function (width) { return this.width = width; }; /** * @return {?} */ MaterialFileSelector.prototype.getHeight = /** * @return {?} */ function () { return this.height; }; /** * @param {?} height * @return {?} */ MaterialFileSelector.prototype.setHeight = /** * @param {?} height * @return {?} */ function (height) { return this.height = height; }; /** * @return {?} */ MaterialFileSelector.prototype.getLabel = /** * @return {?} */ function () { return this.label; }; /** * @param {?} label * @return {?} */ MaterialFileSelector.prototype.setLabel = /** * @param {?} label * @return {?} */ function (label) { return this.label = label; }; /** * @return {?} */ MaterialFileSelector.prototype.getDescription = /** * @return {?} */ function () { return this.description; }; /** * @param {?} description * @return {?} */ MaterialFileSelector.prototype.setDescription = /** * @param {?} description * @return {?} */ function (description) { return this.description = description; }; /** * @param {?} event * @param {?} format * @param {?} data * @return {?} */ MaterialFileSelector.prototype.isAcceptDragData = /** * @param {?} event * @param {?} format * @param {?} data * @return {?} */ function (event, format, data) { return this.isAccept(event.dataTransfer.files); }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.getDragOverDataTransfer = /** * @param {?} event * @return {?} */ function (event) { return; }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.onDragEnter = /** * @param {?} event * @return {?} */ function (event) { this._bgColor = '#d6d6d6'; //extract(@CLR_1, 5); this._applicationRef.tick(); }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.onDragOver = /** * @param {?} event * @return {?} */ function (event) { }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.onDragLeave = /** * @param {?} event * @return {?} */ function (event) { this._bgColor = '#ededed'; //extract(@CLR_1, 7); this._applicationRef.tick(); }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.onDrop = /** * @param {?} event * @return {?} */ function (event) { }; /** * @param {?} event * @param {?} data * @return {?} */ MaterialFileSelector.prototype.onDropAccepted = /** * @param {?} event * @param {?} data * @return {?} */ function (event, data) { var _this = this; this._bgColor = '#ededed'; //extract(@CLR_1, 7); this._applicationRef.tick(); event.preventDefault(); var /** @type {?} */ files = event.dataTransfer.files; this.addFiles(files, event); clearTimeout(this._timeout); this._timeout = setTimeout(function () { _this.setDefaultState(); _this._applicationRef.tick(); }, 5000); }; /** * @param {?} event * @return {?} */ MaterialFileSelector.prototype.onDropRejected = /** * @param {?} event * @return {?} */ function (event) { var _this = this; this._applicationRef.tick(); event.preventDefault(); clearTimeout(this._timeout); this._timeout = setTimeout(function () { _this.setDefaultState(); _this._applicationRef.tick(); }, 5000); }; MaterialFileSelector.TYPE_NAME = TYPE_NAME; MaterialFileSelector.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div (click)=\"file.click()\" class=\"material-file-selector\" [style.background-color]=\"_bgColor\" [dropAccept]=\"'FILES'\"\n [phxDroppable]=\"this\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n <div class=\"material-file-selector-box\">\n <div class=\"icon-clouds \">\n <div class=\"icon-clouds-text\">\n {{getFiles().length}}\n <div class=\"icon-clouds-text-type\">\n {{getLabel()}}\n </div>\n </div>\n </div>\n <div *ngIf=\"isAcceptStatus() && getAlertMessage() === null\">\n {{getDescription()}}\n </div>\n <div *ngIf=\"isAcceptStatus() && getAlertMessage() !== null\">\n {{getAlertMessage()}}\n </div>\n <div *ngIf=\"!isAcceptStatus() && getAlertMessage() !== null\" style=\"color: red;\">\n {{getAlertMessage()}}\n </div>\n </div>\n <input #file type=\"file\" style=\"display: none;\" [multiple]=\"getAllowMultipleSelect()\" (change)=\"handleFiles(file)\">\n</div>\n", },] }, ]; /** @nocollapse */ MaterialFileSelector.ctorParameters = function () { return [ { type: ElementRef, }, { type: NeedFocusService, }, { type: ApplicationRef, }, ]; }; MaterialFileSelector.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "maxFilesize": [{ type: Input },], "allowMultipleSelect": [{ type: Input },], "fileTypes": [{ type: Input },], "label": [{ type: Input },], "description": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialFileSelector.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialFileSelector.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], MaterialFileSelector.prototype, "maxFilesize", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "allowMultipleSelect", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Array) ], MaterialFileSelector.prototype, "fileTypes", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "label", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "description", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "height", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "selectEvent", void 0); return MaterialFileSelector; }(FileSelector)); export { MaterialFileSelector }; function MaterialFileSelector_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialFileSelector.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialFileSelector.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialFileSelector.propDecorators; /** @type {?} */ MaterialFileSelector.TYPE_NAME; /** @type {?} */ MaterialFileSelector.prototype.dataParent; /** @type {?} */ MaterialFileSelector.prototype.ignoreParentData; /** @type {?} */ MaterialFileSelector.prototype.data; /** @type {?} */ MaterialFileSelector.prototype.ignoreParentDisabled; /** @type {?} */ MaterialFileSelector.prototype.delegateHistory; /** @type {?} */ MaterialFileSelector.prototype.onDisabled; /** @type {?} */ MaterialFileSelector.prototype.onEnabled; /** @type {?} */ MaterialFileSelector.prototype.loadingEnabled; /** @type {?} */ MaterialFileSelector.prototype.i18nKey; /** @type {?} */ MaterialFileSelector.prototype.bypass; /** @type {?} */ MaterialFileSelector.prototype.options; /** @type {?} */ MaterialFileSelector.prototype.disabled; /** @type {?} */ MaterialFileSelector.prototype.field; /** @type {?} */ MaterialFileSelector.prototype.name; /** @type {?} */ MaterialFileSelector.prototype.typeOfData; /** @type {?} */ MaterialFileSelector.prototype.readOnly; /** @type {?} */ MaterialFileSelector.prototype.help; /** @type {?} */ MaterialFileSelector.prototype.maxFilesize; /** @type {?} */ MaterialFileSelector.prototype.allowMultipleSelect; /** @type {?} */ MaterialFileSelector.prototype.fileTypes; /** @type {?} */ MaterialFileSelector.prototype.label; /** @type {?} */ MaterialFileSelector.prototype.description; /** @type {?} */ MaterialFileSelector.prototype.width; /** @type {?} */ MaterialFileSelector.prototype.height; /** @type {?} */ MaterialFileSelector.prototype.loadEvent; /** @type {?} */ MaterialFileSelector.prototype.startValidateEvent; /** @type {?} */ MaterialFileSelector.prototype.endValidateEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.focusEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.lostFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeChangeEvent; /** @type {?} */ MaterialFileSelector.prototype.changeEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeSelectEvent; /** @type {?} */ MaterialFileSelector.prototype.selectEvent; /** @type {?} */ MaterialFileSelector.prototype.originalValue; /** @type {?} */ MaterialFileSelector.prototype._bgColor; /** @type {?} */ MaterialFileSelector.prototype._applicationRef; /** @type {?} */ MaterialFileSelector.prototype._timeout; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxGaWxlU2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsRmlsZVNlbGVjdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUkvRCxxQkFBTSxTQUFTLEdBQVcsd0JBQXdCLENBQUM7O0lBOEJULGdEQUFZO0lBaUlsRCw4QkFBWSxVQUFzQixFQUFFLGdCQUFrQyxFQUFFLGNBQThCO1FBQXRHLFlBQ0ksa0JBQU0sVUFBVSxFQUFFLGdCQUFnQixDQUFDLFNBSXRDO1FBRkcsS0FBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsS0FBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7O0tBQzdCOzs7O0lBRU0sdUNBQVE7Ozs7UUFDWCxpQkFBTSxRQUFRLFdBQUUsQ0FBQzs7Ozs7OztJQUdYLDhDQUFlOzs7OztJQUF6QixVQUEwQixVQUFlLEVBQUUsT0FBMkI7O0tBRXJFOzs7Ozs7SUFFUywyQ0FBWTs7Ozs7SUFBdEIsVUFBdUIsSUFBUyxFQUFFLFFBQWE7O0tBRTlDOzs7OztJQUVTLHNDQUFPOzs7O0lBQWpCLFVBQWtCLE1BQWE7O0tBRTlCOzs7OztJQUVTLDBDQUFXOzs7O0lB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QUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFNUixNQUFNLENBQUMsTUFBTSxDQUFDOzBDQUNNLFlBQVk7OztRQUloQyxNQUFNLENBQUMsZUFBZSxDQUFDOzBDQUNNLFlBQVk7OztRQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDOzBDQUNNLFlBQVk7OztRQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7MENBQ00sWUFBWTs7O1FBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7MENBQ00sWUFBWTs7O1FBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7MENBQ00sWUFBWTs7O1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7MENBQ00sWUFBWTs7O1FBR2xDLE1BQU0sRUFBRTswQ0FDb0IsWUFBWTs7O1FBRXhDLE1BQU0sRUFBRTswQ0FDYyxZQUFZOzsrQkFwS3ZDO0VBMEMwQyxZQUFZO1NBQXpDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IElEcm9wcGFibGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSURyb3BwYWJsZSc7XG5pbXBvcnQgeyBEcmFnRGF0YVRyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL0RyYWdEYXRhVHJhbnNmZXInO1xuaW1wb3J0IHsgRmlsZVNlbGVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0ZpbGVTZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0RhdGEnO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcIm1hdGVyaWFsLWZpbGUtc2VsZWN0b3JcIjtcblxuQENvbXBvbmVudCh7XG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICAgIHRlbXBsYXRlOiBgPGRpdiAoY2xpY2spPVwiZmlsZS5jbGljaygpXCIgY2xhc3M9XCJtYXRlcmlhbC1maWxlLXNlbGVjdG9yXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiX2JnQ29sb3JcIiBbZHJvcEFjY2VwdF09XCInRklMRVMnXCJcbiAgICBbcGh4RHJvcHBhYmxlXT1cInRoaXNcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0ZXJpYWwtZmlsZS1zZWxlY3Rvci1ib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2xvdWRzIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2xvdWRzLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7e2dldEZpbGVzKCkubGVuZ3RofX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMtdGV4dC10eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0TGFiZWwoKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0FjY2VwdFN0YXR1cygpICYmIGdldEFsZXJ0TWVzc2FnZSgpID09PSBudWxsXCI+XG4gICAgICAgICAgICB7e2dldERlc2NyaXB0aW9uKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgIT09IG51bGxcIj5cbiAgICAgICAgICAgIHt7Z2V0QWxlcnRNZXNzYWdlKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0FjY2VwdFN0YXR1cygpICYmIGdldEFsZXJ0TWVzc2FnZSgpICE9PSBudWxsXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPlxuICAgICAgICAgICAge3tnZXRBbGVydE1lc3NhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dCAjZmlsZSB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBbbXVsdGlwbGVdPVwiZ2V0QWxsb3dNdWx0aXBsZVNlbGVjdCgpXCIgKGNoYW5nZSk9XCJoYW5kbGVGaWxlcyhmaWxlKVwiPlxuPC9kaXY+XG5gLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbEZpbGVTZWxlY3RvciBleHRlbmRzIEZpbGVTZWxlY3RvciBpbXBsZW1lbnRzIE9uSW5pdCwgSURyb3BwYWJsZSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gICAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWxwOiBhbnk7XG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY0ZpbGVTZWxlY3RvclxuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG1heEZpbGVzaXplOiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgYWxsb3dNdWx0aXBsZVNlbGVjdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBmaWxlVHlwZXM6IHN0cmluZ1tdO1xuICAgIC8vIC0tLSBzZWxmXG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGxhYmVsOiBzdHJpbmc7XG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcblxuICAgIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICAgIEBPdXRwdXQoJ3BoeExvYWQnKVxuICAgIEBPcHRpb24oJ2xvYWQnKVxuICAgIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgICBAT3V0cHV0KCdwaHhTdGFydFZhbGlkYXRlJylcbiAgICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgICBwcm90ZWN0ZWQgc3RhcnRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhFbmRWYWxpZGF0ZScpXG4gICAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICAgIHByb3RlY3RlZCBlbmRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVGb2N1cycpXG4gICAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICAgIHByb3RlY3RlZCBiZWZvcmVGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhGb2N1cycpXG4gICAgQE9wdGlvbignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gICAgcHJvdGVjdGVkIGxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVDaGFuZ2UnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICAgIEBPcHRpb24oJ2NoYW5nZScpXG4gICAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjRmlsZVNlbGVjdG9yXG4gICAgQE91dHB1dCgncGh4QmVmb3JlU2VsZWN0JylcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeFNlbGVjdCcpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBwcm90ZWN0ZWQgb3JpZ2luYWxWYWx1ZTogYW55O1xuXG4gICAgcHVibGljIF9iZ0NvbG9yOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmO1xuICAgIHByaXZhdGUgX3RpbWVvdXQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZiA9IGFwcGxpY2F0aW9uUmVmO1xuICAgICAgICB0aGlzLl9iZ0NvbG9yID0gJyNlZGVkZWQnOy8vZXh0cmFjdChAQ0xSXzEsIDcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IGFueSwgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogdm9pZCB7XG4gICAgICAgIC8vISBkbyBzdGhpbmdcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EYXRhQ2hhbmdlKGRhdGE6IGFueSwgaW5wdXRWYWw6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkb0xvc3RGb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxvd011bHRpcGxlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWxlcyhmaWxlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY2NlcHQoZmlsZS5maWxlcykpIHsgXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGVzKGZpbGUuZmlsZXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRmlsZVNlbGVjdG9yKCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZScpLmNsaWNrKCk7XG4gICAgfSBcblxuICAgIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7IFxuICAgICAgICBsZXQgZDEgPSBGaWxlU2VsZWN0b3IucmVzb2x2ZU1hcHBlZERhdGEodGhpcy5maWVsZCwgdGhpcy5vcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgbGV0IGQyID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgIGlmIChkMSAhPT0gZDIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTsgXG4gICAgfVxuXG4gICAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWR0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0V2lkdGgod2lkdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEhlaWdodChoZWlnaHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWNjZXB0RHJhZ0RhdGEoZXZlbnQ6IGFueSwgZm9ybWF0OiBzdHJpbmcsIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FjY2VwdChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREcmFnT3ZlckRhdGFUcmFuc2ZlcihldmVudDogYW55KTogRHJhZ0RhdGFUcmFuc2ZlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9iZ0NvbG9yID0gJyNkNmQ2ZDYnOy8vZXh0cmFjdChAQ0xSXzEsIDUpO1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wQWNjZXB0ZWQoZXZlbnQ6IGFueSwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB2YXIgZmlsZXM6IEZpbGVbXSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcztcblxuICAgICAgICB0aGlzLmFkZEZpbGVzKGZpbGVzLCBldmVudCk7XG4gXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJvcFJlamVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxufVxuIl19