angular2-tinymce
Version:
Angular component for TinyMCE MCE WYSIWYG editor
417 lines (416 loc) • 32.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, forwardRef, NgZone, Inject, Input, EventEmitter, Output } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { TinymceDefaultOptions } from './angular2-tinymce-lib.default';
import 'tinymce/tinymce.min';
import 'tinymce/themes/modern/theme';
import 'tinymce/plugins/link/plugin.js';
import 'tinymce/plugins/paste/plugin.js';
import 'tinymce/plugins/table/plugin.js';
import 'tinymce/plugins/advlist/plugin.js';
import 'tinymce/plugins/autoresize/plugin.js';
import 'tinymce/plugins/lists/plugin.js';
import 'tinymce/plugins/code/plugin.js';
/** @type {?} */
var noop = function () {
};
var ɵ0 = noop;
var TinymceComponent = /** @class */ (function () {
function TinymceComponent(zone, globalOptions) {
this.zone = zone;
this.globalOptions = globalOptions;
this.click = new EventEmitter();
this.dblclick = new EventEmitter();
this.mousedown = new EventEmitter();
this.mouseup = new EventEmitter();
this.mousemove = new EventEmitter();
this.mouseover = new EventEmitter();
this.mouseout = new EventEmitter();
this.mouseenter = new EventEmitter();
this.mouseleave = new EventEmitter();
this.keydown = new EventEmitter();
this.keypress = new EventEmitter();
this.keyup = new EventEmitter();
this.contextmenu = new EventEmitter();
this.paste = new EventEmitter();
this.init = new EventEmitter();
this.focus = new EventEmitter();
this.blur = new EventEmitter();
this.beforeSetContent = new EventEmitter();
this.setContent = new EventEmitter();
this.getContent = new EventEmitter();
this.preProcess = new EventEmitter();
this.postProcess = new EventEmitter();
this.nodeChange = new EventEmitter();
this.undo = new EventEmitter();
this.redo = new EventEmitter();
this.change = new EventEmitter();
this.dirty = new EventEmitter();
this.remove = new EventEmitter();
this.execCommand = new EventEmitter();
this.pastePreProcess = new EventEmitter();
this.pastePostProcess = new EventEmitter();
this.elementId = 'tiny-' + Math.random().toString(36).substring(2);
this.onTouchedCallback = noop;
this.onChangeCallback = noop;
}
/**
* @return {?}
*/
TinymceComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.options = Object.assign(new TinymceDefaultOptions(), this.globalOptions, this.optionsOverride);
this.options.selector = '#' + this.elementId;
this.options.setup = function (editor) {
_this.setupEvents(editor);
};
this.options.init_instance_callback = function (editor) {
if (editor && _this.value) {
editor.setContent(_this.value);
}
_this.editor = editor;
};
};
/**
* @return {?}
*/
TinymceComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
if (this.options.baseURL) {
tinymce.baseURL = this.options.baseURL;
}
tinymce.init(this.options);
};
/**
* @return {?}
*/
TinymceComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
tinymce.remove(this.editor);
};
Object.defineProperty(TinymceComponent.prototype, "value", {
// get accessor
get: /**
* @return {?}
*/
function () {
return this.innerValue;
},
// set accessor including call the onchange callback
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
var _this = this;
if (v !== this.innerValue) {
this.innerValue = v;
this.zone.run(function () {
_this.onChangeCallback(v);
});
}
},
enumerable: true,
configurable: true
});
// From ControlValueAccessor interface
/**
* @param {?} value
* @return {?}
*/
TinymceComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value !== this.innerValue) {
this.innerValue = value;
if (!value) {
value = '';
}
if (this.editor && this.editor.initialized) {
this.editor.setContent(value);
}
}
};
/**
* @param {?} fn
* @return {?}
*/
TinymceComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChangeCallback = fn;
};
/**
* @param {?} fn
* @return {?}
*/
TinymceComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouchedCallback = fn;
};
/**
* @param {?} editor
* @return {?}
*/
TinymceComponent.prototype.setupEvents = /**
* @param {?} editor
* @return {?}
*/
function (editor) {
var _this = this;
editor.on('change keyup', function () {
/** @type {?} */
var content = editor.getContent();
_this.value = content;
});
editor.on('click', function (e) {
_this.click.emit(e);
});
editor.on('dblclick', function (e) {
_this.dblclick.emit(e);
});
editor.on('mousedown', function (e) {
_this.mousedown.emit(e);
});
editor.on('mouseup', function (e) {
_this.mouseup.emit(e);
});
editor.on('mousemove', function (e) {
_this.mousemove.emit(e);
});
editor.on('mouseover', function (e) {
_this.mouseover.emit(e);
});
editor.on('mouseout', function (e) {
_this.mouseout.emit(e);
});
editor.on('mouseenter', function (e) {
_this.mouseenter.emit(e);
});
editor.on('mouseleave', function (e) {
_this.mouseleave.emit(e);
});
editor.on('keydown', function (e) {
_this.keydown.emit(e);
});
editor.on('keypress', function (e) {
_this.keypress.emit(e);
});
editor.on('keyup', function (e) {
_this.keyup.emit(e);
});
editor.on('contextmenu', function (e) {
_this.contextmenu.emit(e);
});
editor.on('paste', function (e) {
_this.paste.emit(e);
});
editor.on('init', function (e) {
_this.init.emit(e);
});
editor.on('focus', function (e) {
_this.focus.emit(e);
});
editor.on('blur', function (e) {
_this.blur.emit(e);
});
editor.on('BeforeSetContent', function (e) {
_this.beforeSetContent.emit(e);
});
editor.on('SetContent', function (e) {
_this.setContent.emit(e);
});
editor.on('GetContent', function (e) {
_this.getContent.emit(e);
});
editor.on('PreProcess', function (e) {
_this.preProcess.emit(e);
});
editor.on('PostProcess', function (e) {
_this.postProcess.emit(e);
});
editor.on('NodeChange', function (e) {
_this.nodeChange.emit(e);
});
editor.on('Undo', function (e) {
_this.undo.emit(e);
});
editor.on('Redo', function (e) {
_this.redo.emit(e);
});
editor.on('Change', function (e) {
_this.change.emit(e);
});
editor.on('Dirty', function (e) {
_this.dirty.emit(e);
});
editor.on('Remove', function (e) {
_this.remove.emit(e);
});
editor.on('ExecCommand', function (e) {
_this.execCommand.emit(e);
});
editor.on('PastePreProcess', function (e) {
_this.pastePreProcess.emit(e);
});
editor.on('PastePostProcess', function (e) {
_this.pastePostProcess.emit(e);
});
};
TinymceComponent.decorators = [
{ type: Component, args: [{
selector: 'app-tinymce',
template: '<div id="{{elementId}}"></div>',
exportAs: 'tinymce',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return TinymceComponent; }),
multi: true
}
]
}] }
];
/** @nocollapse */
TinymceComponent.ctorParameters = function () { return [
{ type: NgZone },
{ type: undefined, decorators: [{ type: Inject, args: ['TINYMCE_CONFIG',] }] }
]; };
TinymceComponent.propDecorators = {
optionsOverride: [{ type: Input, args: ['options',] }],
click: [{ type: Output }],
dblclick: [{ type: Output }],
mousedown: [{ type: Output }],
mouseup: [{ type: Output }],
mousemove: [{ type: Output }],
mouseover: [{ type: Output }],
mouseout: [{ type: Output }],
mouseenter: [{ type: Output }],
mouseleave: [{ type: Output }],
keydown: [{ type: Output }],
keypress: [{ type: Output }],
keyup: [{ type: Output }],
contextmenu: [{ type: Output }],
paste: [{ type: Output }],
init: [{ type: Output }],
focus: [{ type: Output }],
blur: [{ type: Output }],
beforeSetContent: [{ type: Output }],
setContent: [{ type: Output }],
getContent: [{ type: Output }],
preProcess: [{ type: Output }],
postProcess: [{ type: Output }],
nodeChange: [{ type: Output }],
undo: [{ type: Output }],
redo: [{ type: Output }],
change: [{ type: Output }],
dirty: [{ type: Output }],
remove: [{ type: Output }],
execCommand: [{ type: Output }],
pastePreProcess: [{ type: Output }],
pastePostProcess: [{ type: Output }]
};
return TinymceComponent;
}());
export { TinymceComponent };
if (false) {
/** @type {?} */
TinymceComponent.prototype.optionsOverride;
/** @type {?} */
TinymceComponent.prototype.click;
/** @type {?} */
TinymceComponent.prototype.dblclick;
/** @type {?} */
TinymceComponent.prototype.mousedown;
/** @type {?} */
TinymceComponent.prototype.mouseup;
/** @type {?} */
TinymceComponent.prototype.mousemove;
/** @type {?} */
TinymceComponent.prototype.mouseover;
/** @type {?} */
TinymceComponent.prototype.mouseout;
/** @type {?} */
TinymceComponent.prototype.mouseenter;
/** @type {?} */
TinymceComponent.prototype.mouseleave;
/** @type {?} */
TinymceComponent.prototype.keydown;
/** @type {?} */
TinymceComponent.prototype.keypress;
/** @type {?} */
TinymceComponent.prototype.keyup;
/** @type {?} */
TinymceComponent.prototype.contextmenu;
/** @type {?} */
TinymceComponent.prototype.paste;
/** @type {?} */
TinymceComponent.prototype.init;
/** @type {?} */
TinymceComponent.prototype.focus;
/** @type {?} */
TinymceComponent.prototype.blur;
/** @type {?} */
TinymceComponent.prototype.beforeSetContent;
/** @type {?} */
TinymceComponent.prototype.setContent;
/** @type {?} */
TinymceComponent.prototype.getContent;
/** @type {?} */
TinymceComponent.prototype.preProcess;
/** @type {?} */
TinymceComponent.prototype.postProcess;
/** @type {?} */
TinymceComponent.prototype.nodeChange;
/** @type {?} */
TinymceComponent.prototype.undo;
/** @type {?} */
TinymceComponent.prototype.redo;
/** @type {?} */
TinymceComponent.prototype.change;
/** @type {?} */
TinymceComponent.prototype.dirty;
/** @type {?} */
TinymceComponent.prototype.remove;
/** @type {?} */
TinymceComponent.prototype.execCommand;
/** @type {?} */
TinymceComponent.prototype.pastePreProcess;
/** @type {?} */
TinymceComponent.prototype.pastePostProcess;
/** @type {?} */
TinymceComponent.prototype.elementId;
/** @type {?} */
TinymceComponent.prototype.editor;
/** @type {?} */
TinymceComponent.prototype.onTouchedCallback;
/** @type {?} */
TinymceComponent.prototype.onChangeCallback;
/** @type {?} */
TinymceComponent.prototype.innerValue;
/** @type {?} */
TinymceComponent.prototype.options;
/** @type {?} */
TinymceComponent.prototype.zone;
/** @type {?} */
TinymceComponent.prototype.globalOptions;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhcjItdGlueW1jZS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhcjItdGlueW1jZS8iLCJzb3VyY2VzIjpbImxpYi9hbmd1bGFyMi10aW55bWNlLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd2RSxPQUFPLHFCQUFxQixDQUFDO0FBSTdCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxnQ0FBZ0MsQ0FBQzs7QUFFeEMsSUFBTSxJQUFJLEdBQUc7Q0FDWixDQUFDOzs7SUEwREQsMEJBQ1MsTUFDMEIsYUFBNkI7UUFEdkQsU0FBSSxHQUFKLElBQUk7UUFDc0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO3FCQTNDOUMsSUFBSSxZQUFZLEVBQUU7d0JBQ2YsSUFBSSxZQUFZLEVBQUU7eUJBQ2pCLElBQUksWUFBWSxFQUFFO3VCQUNwQixJQUFJLFlBQVksRUFBRTt5QkFDaEIsSUFBSSxZQUFZLEVBQUU7eUJBQ2xCLElBQUksWUFBWSxFQUFFO3dCQUNuQixJQUFJLFlBQVksRUFBRTswQkFDaEIsSUFBSSxZQUFZLEVBQUU7MEJBQ2xCLElBQUksWUFBWSxFQUFFO3VCQUNyQixJQUFJLFlBQVksRUFBRTt3QkFDakIsSUFBSSxZQUFZLEVBQUU7cUJBQ3JCLElBQUksWUFBWSxFQUFFOzJCQUNaLElBQUksWUFBWSxFQUFFO3FCQUN4QixJQUFJLFlBQVksRUFBRTtvQkFDbkIsSUFBSSxZQUFZLEVBQUU7cUJBQ2pCLElBQUksWUFBWSxFQUFFO29CQUNuQixJQUFJLFlBQVksRUFBRTtnQ0FDTixJQUFJLFlBQVksRUFBRTswQkFDeEIsSUFBSSxZQUFZLEVBQUU7MEJBQ2xCLElBQUksWUFBWSxFQUFFOzBCQUNsQixJQUFJLFlBQVksRUFBRTsyQkFDakIsSUFBSSxZQUFZLEVBQUU7MEJBQ25CLElBQUksWUFBWSxFQUFFO29CQUN4QixJQUFJLFlBQVksRUFBRTtvQkFDbEIsSUFBSSxZQUFZLEVBQUU7c0JBQ2hCLElBQUksWUFBWSxFQUFFO3FCQUNuQixJQUFJLFlBQVksRUFBRTtzQkFDakIsSUFBSSxZQUFZLEVBQUU7MkJBQ2IsSUFBSSxZQUFZLEVBQUU7K0JBQ2QsSUFBSSxZQUFZLEVBQUU7Z0NBQ2pCLElBQUksWUFBWSxFQUFFO3lCQUVwQixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lDQUdwQyxJQUFJO2dDQUNDLElBQUk7S0FVaEQ7Ozs7SUFFRCxtQ0FBUTs7O0lBQVI7UUFBQSxpQkFZQztRQVhBLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsVUFBQSxNQUFNO1lBQzFCLEtBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsVUFBQSxNQUFNO1lBQzNDLElBQUksTUFBTSxJQUFJLEtBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1lBQ0QsS0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDckIsQ0FBQztLQUNGOzs7O0lBRUQsMENBQWU7OztJQUFmO1FBQ0MsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN6QixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7Ozs7SUFFRCxzQ0FBVzs7O0lBQVg7UUFDQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1QjtJQUdELHNCQUFJLG1DQUFLO1FBRFQsZUFBZTs7OztRQUNmO1lBQ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3ZCO1FBRUQsb0RBQW9EOzs7OztRQUNwRCxVQUFVLENBQU07WUFBaEIsaUJBUUM7WUFQQSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ2IsS0FBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QixDQUFDLENBQUM7YUFFSDtTQUNEOzs7T0FYQTtJQWFELHNDQUFzQzs7Ozs7SUFDdEMscUNBQVU7Ozs7SUFBVixVQUFXLEtBQVU7UUFDcEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNYLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDWDtZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUI7U0FDRDtLQUNEOzs7OztJQUVELDJDQUFnQjs7OztJQUFoQixVQUFpQixFQUFPO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7S0FDM0I7Ozs7O0lBRUQsNENBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQU87UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztLQUM1Qjs7Ozs7SUFFRCxzQ0FBVzs7OztJQUFYLFVBQVksTUFBTTtRQUFsQixpQkFrR0M7UUFqR0EsTUFBTSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUU7O1lBQ3pCLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxLQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFBLENBQUM7WUFDbkIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBQSxDQUFDO1lBQ3RCLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQUEsQ0FBQztZQUN2QixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFBLENBQUM7WUFDckIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBQSxDQUFDO1lBQ3ZCLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQUEsQ0FBQztZQUN2QixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFBLENBQUM7WUFDdEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQSxDQUFDO1lBQ3hCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQUEsQ0FBQztZQUN4QixLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFBLENBQUM7WUFDckIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBQSxDQUFDO1lBQ3RCLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUEsQ0FBQztZQUNuQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFBLENBQUM7WUFDekIsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO1lBQ25CLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25CLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQUEsQ0FBQztZQUNsQixLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFBLENBQUM7WUFDbkIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBQSxDQUFDO1lBQ2xCLEtBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsVUFBQSxDQUFDO1lBQzlCLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQSxDQUFDO1lBQ3hCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQUEsQ0FBQztZQUN4QixLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFBLENBQUM7WUFDeEIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBQSxDQUFDO1lBQ3pCLEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQUEsQ0FBQztZQUN4QixLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFBLENBQUM7WUFDbEIsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBQSxDQUFDO1lBQ2xCLEtBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQUEsQ0FBQztZQUNwQixLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFBLENBQUM7WUFDbkIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBQSxDQUFDO1lBQ3BCLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQUEsQ0FBQztZQUN6QixLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQUEsQ0FBQztZQUM3QixLQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFVBQUEsQ0FBQztZQUM5QixLQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCLENBQUMsQ0FBQztLQUNIOztnQkEvTkQsU0FBUyxTQUFDO29CQUNWLFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsU0FBUztvQkFDbkIsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLGdCQUFnQixFQUFoQixDQUFnQixDQUFDOzRCQUMvQyxLQUFLLEVBQUUsSUFBSTt5QkFDWDtxQkFDRDtpQkFDRDs7OztnQkFoQ3lELE1BQU07Z0RBK0U3RCxNQUFNLFNBQUMsZ0JBQWdCOzs7a0NBN0N4QixLQUFLLFNBQUMsU0FBUzt3QkFFZixNQUFNOzJCQUNOLE1BQU07NEJBQ04sTUFBTTswQkFDTixNQUFNOzRCQUNOLE1BQU07NEJBQ04sTUFBTTsyQkFDTixNQUFNOzZCQUNOLE1BQU07NkJBQ04sTUFBTTswQkFDTixNQUFNOzJCQUNOLE1BQU07d0JBQ04sTUFBTTs4QkFDTixNQUFNO3dCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNO3VCQUNOLE1BQU07bUNBQ04sTUFBTTs2QkFDTixNQUFNOzZCQUNOLE1BQU07NkJBQ04sTUFBTTs4QkFDTixNQUFNOzZCQUNOLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNO3lCQUNOLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNOzhCQUNOLE1BQU07a0NBQ04sTUFBTTttQ0FDTixNQUFNOzsyQkFsRVI7O1NBaUNhLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBmb3J3YXJkUmVmLCBOZ1pvbmUsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRpbnltY2VEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhcjItdGlueW1jZS1saWIuZGVmYXVsdCc7XG5pbXBvcnQgeyBUaW55bWNlT3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhcjItdGlueW1jZS1saWIuY29uZmlnLmludGVyZmFjZSc7XG5cbmltcG9ydCAndGlueW1jZS90aW55bWNlLm1pbic7XG5cbmRlY2xhcmUgdmFyIHRpbnltY2U6IGFueTtcblxuaW1wb3J0ICd0aW55bWNlL3RoZW1lcy9tb2Rlcm4vdGhlbWUnO1xuaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvbGluay9wbHVnaW4uanMnO1xuaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvcGFzdGUvcGx1Z2luLmpzJztcbmltcG9ydCAndGlueW1jZS9wbHVnaW5zL3RhYmxlL3BsdWdpbi5qcyc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9hZHZsaXN0L3BsdWdpbi5qcyc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9hdXRvcmVzaXplL3BsdWdpbi5qcyc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9saXN0cy9wbHVnaW4uanMnO1xuaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvY29kZS9wbHVnaW4uanMnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLXRpbnltY2UnLFxuXHR0ZW1wbGF0ZTogJzxkaXYgaWQ9XCJ7e2VsZW1lbnRJZH19XCI+PC9kaXY+Jyxcblx0ZXhwb3J0QXM6ICd0aW55bWNlJyxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW55bWNlQ29tcG9uZW50KSxcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFRpbnltY2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoJ29wdGlvbnMnKSBvcHRpb25zT3ZlcnJpZGU6IFRpbnltY2VPcHRpb25zO1xuXG5cdEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGRibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2V1cCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIG1vdXNlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIG1vdXNlb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIG1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2VlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIG1vdXNlbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBrZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkga2V5cHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBrZXl1cCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGNvbnRleHRtZW51ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgcGFzdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgYmVmb3JlU2V0Q29udGVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHNldENvbnRlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBnZXRDb250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgcHJlUHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHBvc3RQcm9jZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbm9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHVuZG8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSByZWRvID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZGlydHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBleGVjQ29tbWFuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHBhc3RlUHJlUHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHBhc3RlUG9zdFByb2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0cHVibGljIGVsZW1lbnRJZDogc3RyaW5nID0gJ3RpbnktJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcblx0cHVibGljIGVkaXRvcjogYW55O1xuXG5cdHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXHRwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuXHRwcml2YXRlIGlubmVyVmFsdWU6IHN0cmluZztcblxuXHRwcml2YXRlIG9wdGlvbnM6IFRpbnltY2VPcHRpb25zO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgem9uZTogTmdab25lLFxuXHRcdEBJbmplY3QoJ1RJTllNQ0VfQ09ORklHJykgcHJpdmF0ZSBnbG9iYWxPcHRpb25zOiBUaW55bWNlT3B0aW9uc1xuXHQpIHtcblxuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihuZXcgVGlueW1jZURlZmF1bHRPcHRpb25zKCksIHRoaXMuZ2xvYmFsT3B0aW9ucywgdGhpcy5vcHRpb25zT3ZlcnJpZGUpO1xuXHRcdHRoaXMub3B0aW9ucy5zZWxlY3RvciA9ICcjJyArIHRoaXMuZWxlbWVudElkO1xuXHRcdHRoaXMub3B0aW9ucy5zZXR1cCA9IGVkaXRvciA9PiB7XG5cdFx0XHR0aGlzLnNldHVwRXZlbnRzKGVkaXRvcik7XG5cdFx0fTtcblx0XHR0aGlzLm9wdGlvbnMuaW5pdF9pbnN0YW5jZV9jYWxsYmFjayA9IGVkaXRvciA9PiB7XG5cdFx0XHRpZiAoZWRpdG9yICYmIHRoaXMudmFsdWUpIHtcblx0XHRcdFx0ZWRpdG9yLnNldENvbnRlbnQodGhpcy52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmVkaXRvciA9IGVkaXRvcjtcblx0XHR9O1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuYmFzZVVSTCkge1xuXHRcdFx0dGlueW1jZS5iYXNlVVJMID0gdGhpcy5vcHRpb25zLmJhc2VVUkw7XG5cdFx0fVxuXHRcdHRpbnltY2UuaW5pdCh0aGlzLm9wdGlvbnMpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGlueW1jZS5yZW1vdmUodGhpcy5lZGl0b3IpO1xuXHR9XG5cblx0Ly8gZ2V0IGFjY2Vzc29yXG5cdGdldCB2YWx1ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG5cdH1cblxuXHQvLyBzZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG5cdHNldCB2YWx1ZSh2OiBhbnkpIHtcblx0XHRpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG5cdFx0XHR0aGlzLmlubmVyVmFsdWUgPSB2O1xuXHRcdFx0dGhpcy56b25lLnJ1bigoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25DaGFuZ2VDYWxsYmFjayh2KTtcblx0XHRcdH0pO1xuXG5cdFx0fVxuXHR9XG5cblx0Ly8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2Vcblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0aWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcblx0XHRcdHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLmluaXRpYWxpemVkKSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdHNldHVwRXZlbnRzKGVkaXRvcikge1xuXHRcdGVkaXRvci5vbignY2hhbmdlIGtleXVwJywgKCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IGVkaXRvci5nZXRDb250ZW50KCk7XG5cdFx0XHR0aGlzLnZhbHVlID0gY29udGVudDtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2NsaWNrJywgZSA9PiB7XG5cdFx0XHR0aGlzLmNsaWNrLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdkYmxjbGljaycsIGUgPT4ge1xuXHRcdFx0dGhpcy5kYmxjbGljay5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignbW91c2Vkb3duJywgZSA9PiB7XG5cdFx0XHR0aGlzLm1vdXNlZG93bi5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignbW91c2V1cCcsIGUgPT4ge1xuXHRcdFx0dGhpcy5tb3VzZXVwLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZW1vdmUnLCBlID0+IHtcblx0XHRcdHRoaXMubW91c2Vtb3ZlLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZW92ZXInLCBlID0+IHtcblx0XHRcdHRoaXMubW91c2VvdmVyLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZW91dCcsIGUgPT4ge1xuXHRcdFx0dGhpcy5tb3VzZW91dC5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignbW91c2VlbnRlcicsIGUgPT4ge1xuXHRcdFx0dGhpcy5tb3VzZWVudGVyLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZWxlYXZlJywgZSA9PiB7XG5cdFx0XHR0aGlzLm1vdXNlbGVhdmUuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2tleWRvd24nLCBlID0+IHtcblx0XHRcdHRoaXMua2V5ZG93bi5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbigna2V5cHJlc3MnLCBlID0+IHtcblx0XHRcdHRoaXMua2V5cHJlc3MuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2tleXVwJywgZSA9PiB7XG5cdFx0XHR0aGlzLmtleXVwLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdjb250ZXh0bWVudScsIGUgPT4ge1xuXHRcdFx0dGhpcy5jb250ZXh0bWVudS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbigncGFzdGUnLCBlID0+IHtcblx0XHRcdHRoaXMucGFzdGUuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2luaXQnLCBlID0+IHtcblx0XHRcdHRoaXMuaW5pdC5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignZm9jdXMnLCBlID0+IHtcblx0XHRcdHRoaXMuZm9jdXMuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2JsdXInLCBlID0+IHtcblx0XHRcdHRoaXMuYmx1ci5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignQmVmb3JlU2V0Q29udGVudCcsIGUgPT4ge1xuXHRcdFx0dGhpcy5iZWZvcmVTZXRDb250ZW50LmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdTZXRDb250ZW50JywgZSA9PiB7XG5cdFx0XHR0aGlzLnNldENvbnRlbnQuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ0dldENvbnRlbnQnLCBlID0+IHtcblx0XHRcdHRoaXMuZ2V0Q29udGVudC5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignUHJlUHJvY2VzcycsIGUgPT4ge1xuXHRcdFx0dGhpcy5wcmVQcm9jZXNzLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdQb3N0UHJvY2VzcycsIGUgPT4ge1xuXHRcdFx0dGhpcy5wb3N0UHJvY2Vzcy5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignTm9kZUNoYW5nZScsIGUgPT4ge1xuXHRcdFx0dGhpcy5ub2RlQ2hhbmdlLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdVbmRvJywgZSA9PiB7XG5cdFx0XHR0aGlzLnVuZG8uZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1JlZG8nLCBlID0+IHtcblx0XHRcdHRoaXMucmVkby5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignQ2hhbmdlJywgZSA9PiB7XG5cdFx0XHR0aGlzLmNoYW5nZS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignRGlydHknLCBlID0+IHtcblx0XHRcdHRoaXMuZGlydHkuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1JlbW92ZScsIGUgPT4ge1xuXHRcdFx0dGhpcy5yZW1vdmUuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ0V4ZWNDb21tYW5kJywgZSA9PiB7XG5cdFx0XHR0aGlzLmV4ZWNDb21tYW5kLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdQYXN0ZVByZVByb2Nlc3MnLCBlID0+IHtcblx0XHRcdHRoaXMucGFzdGVQcmVQcm9jZXNzLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdQYXN0ZVBvc3RQcm9jZXNzJywgZSA9PiB7XG5cdFx0XHR0aGlzLnBhc3RlUG9zdFByb2Nlc3MuZW1pdChlKTtcblx0XHR9KTtcblx0fVxufVxuIl19