UNPKG

angular2-tinymce

Version:

Angular component for TinyMCE MCE WYSIWYG editor

424 lines (414 loc) 38 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('tinymce/tinymce.min'), require('tinymce/themes/modern/theme'), require('tinymce/plugins/link/plugin.js'), require('tinymce/plugins/paste/plugin.js'), require('tinymce/plugins/table/plugin.js'), require('tinymce/plugins/advlist/plugin.js'), require('tinymce/plugins/autoresize/plugin.js'), require('tinymce/plugins/lists/plugin.js'), require('tinymce/plugins/code/plugin.js')) : typeof define === 'function' && define.amd ? define('angular2-tinymce', ['exports', '@angular/core', '@angular/forms', 'tinymce/tinymce.min', 'tinymce/themes/modern/theme', 'tinymce/plugins/link/plugin.js', 'tinymce/plugins/paste/plugin.js', 'tinymce/plugins/table/plugin.js', 'tinymce/plugins/advlist/plugin.js', 'tinymce/plugins/autoresize/plugin.js', 'tinymce/plugins/lists/plugin.js', 'tinymce/plugins/code/plugin.js'], factory) : (factory((global['angular2-tinymce'] = {}),global.ng.core,global.ng.forms)); }(this, (function (exports,i0,forms) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var Angular2TinymceLibService = /** @class */ (function () { function Angular2TinymceLibService() { } Angular2TinymceLibService.decorators = [ { type: i0.Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ Angular2TinymceLibService.ctorParameters = function () { return []; }; /** @nocollapse */ Angular2TinymceLibService.ngInjectableDef = i0.defineInjectable({ factory: function Angular2TinymceLibService_Factory() { return new Angular2TinymceLibService(); }, token: Angular2TinymceLibService, providedIn: "root" }); return Angular2TinymceLibService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TinymceDefaultOptions = /** @class */ (function () { function TinymceDefaultOptions() { this.plugins = [ 'link', 'paste', 'table', 'advlist', 'autoresize', 'lists', 'code' ]; this.skin_url = '/assets/tinymce/skins/lightgray'; this.baseURL = '/assets/tinymce'; this.auto_focus = true; } return TinymceDefaultOptions; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** @type {?} */ var noop = function () { }; var TinymceComponent = /** @class */ (function () { function TinymceComponent(zone, globalOptions) { this.zone = zone; this.globalOptions = globalOptions; this.click = new i0.EventEmitter(); this.dblclick = new i0.EventEmitter(); this.mousedown = new i0.EventEmitter(); this.mouseup = new i0.EventEmitter(); this.mousemove = new i0.EventEmitter(); this.mouseover = new i0.EventEmitter(); this.mouseout = new i0.EventEmitter(); this.mouseenter = new i0.EventEmitter(); this.mouseleave = new i0.EventEmitter(); this.keydown = new i0.EventEmitter(); this.keypress = new i0.EventEmitter(); this.keyup = new i0.EventEmitter(); this.contextmenu = new i0.EventEmitter(); this.paste = new i0.EventEmitter(); this.init = new i0.EventEmitter(); this.focus = new i0.EventEmitter(); this.blur = new i0.EventEmitter(); this.beforeSetContent = new i0.EventEmitter(); this.setContent = new i0.EventEmitter(); this.getContent = new i0.EventEmitter(); this.preProcess = new i0.EventEmitter(); this.postProcess = new i0.EventEmitter(); this.nodeChange = new i0.EventEmitter(); this.undo = new i0.EventEmitter(); this.redo = new i0.EventEmitter(); this.change = new i0.EventEmitter(); this.dirty = new i0.EventEmitter(); this.remove = new i0.EventEmitter(); this.execCommand = new i0.EventEmitter(); this.pastePreProcess = new i0.EventEmitter(); this.pastePostProcess = new i0.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: i0.Component, args: [{ selector: 'app-tinymce', template: '<div id="{{elementId}}"></div>', exportAs: 'tinymce', providers: [ { provide: forms.NG_VALUE_ACCESSOR, useExisting: i0.forwardRef(function () { return TinymceComponent; }), multi: true } ] }] } ]; /** @nocollapse */ TinymceComponent.ctorParameters = function () { return [ { type: i0.NgZone }, { type: undefined, decorators: [{ type: i0.Inject, args: ['TINYMCE_CONFIG',] }] } ]; }; TinymceComponent.propDecorators = { optionsOverride: [{ type: i0.Input, args: ['options',] }], click: [{ type: i0.Output }], dblclick: [{ type: i0.Output }], mousedown: [{ type: i0.Output }], mouseup: [{ type: i0.Output }], mousemove: [{ type: i0.Output }], mouseover: [{ type: i0.Output }], mouseout: [{ type: i0.Output }], mouseenter: [{ type: i0.Output }], mouseleave: [{ type: i0.Output }], keydown: [{ type: i0.Output }], keypress: [{ type: i0.Output }], keyup: [{ type: i0.Output }], contextmenu: [{ type: i0.Output }], paste: [{ type: i0.Output }], init: [{ type: i0.Output }], focus: [{ type: i0.Output }], blur: [{ type: i0.Output }], beforeSetContent: [{ type: i0.Output }], setContent: [{ type: i0.Output }], getContent: [{ type: i0.Output }], preProcess: [{ type: i0.Output }], postProcess: [{ type: i0.Output }], nodeChange: [{ type: i0.Output }], undo: [{ type: i0.Output }], redo: [{ type: i0.Output }], change: [{ type: i0.Output }], dirty: [{ type: i0.Output }], remove: [{ type: i0.Output }], execCommand: [{ type: i0.Output }], pastePreProcess: [{ type: i0.Output }], pastePostProcess: [{ type: i0.Output }] }; return TinymceComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TinymceModule = /** @class */ (function () { function TinymceModule() { } /** * @param {?=} userConfig * @return {?} */ TinymceModule.withConfig = /** * @param {?=} userConfig * @return {?} */ function (userConfig) { if (userConfig === void 0) { userConfig = {}; } return { ngModule: TinymceModule, providers: [ { provide: 'TINYMCE_CONFIG', useValue: userConfig } ] }; }; TinymceModule.decorators = [ { type: i0.NgModule, args: [{ imports: [], declarations: [TinymceComponent], exports: [TinymceComponent], providers: [ { provide: 'TINYMCE_CONFIG', useClass: TinymceDefaultOptions } ] },] } ]; return TinymceModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ exports.Angular2TinymceLibService = Angular2TinymceLibService; exports.TinymceComponent = TinymceComponent; exports.TinymceModule = TinymceModule; exports.ɵb = TinymceDefaultOptions; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhcjItdGlueW1jZS51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL2FuZ3VsYXIyLXRpbnltY2UvbGliL2FuZ3VsYXIyLXRpbnltY2UtbGliLnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXIyLXRpbnltY2UvbGliL2FuZ3VsYXIyLXRpbnltY2UtbGliLmRlZmF1bHQudHMiLCJuZzovL2FuZ3VsYXIyLXRpbnltY2UvbGliL2FuZ3VsYXIyLXRpbnltY2UtbGliLmNvbXBvbmVudC50cyIsIm5nOi8vYW5ndWxhcjItdGlueW1jZS9saWIvYW5ndWxhcjItdGlueW1jZS1saWIubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhcjJUaW55bWNlTGliU2VydmljZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHR9XG59XG4iLCJpbXBvcnQgeyBUaW55bWNlT3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhcjItdGlueW1jZS1saWIuY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBUaW55bWNlRGVmYXVsdE9wdGlvbnMgaW1wbGVtZW50cyBUaW55bWNlT3B0aW9ucyB7XG5cdHBsdWdpbnMgPSBbXG5cdFx0J2xpbmsnLFxuXHRcdCdwYXN0ZScsXG5cdFx0J3RhYmxlJyxcblx0XHQnYWR2bGlzdCcsXG5cdFx0J2F1dG9yZXNpemUnLFxuXHRcdCdsaXN0cycsXG5cdFx0J2NvZGUnXG5cdF07XG5cdHNraW5fdXJsID0gJy9hc3NldHMvdGlueW1jZS9za2lucy9saWdodGdyYXknO1xuXHRiYXNlVVJMID0gJy9hc3NldHMvdGlueW1jZSc7XG5cdGF1dG9fZm9jdXMgPSB0cnVlO1xufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIGZvcndhcmRSZWYsIE5nWm9uZSwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGlueW1jZURlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi9hbmd1bGFyMi10aW55bWNlLWxpYi5kZWZhdWx0JztcbmltcG9ydCB7IFRpbnltY2VPcHRpb25zIH0gZnJvbSAnLi9hbmd1bGFyMi10aW55bWNlLWxpYi5jb25maWcuaW50ZXJmYWNlJztcblxuaW1wb3J0ICd0aW55bWNlL3RpbnltY2UubWluJztcblxuZGVjbGFyZSB2YXIgdGlueW1jZTogYW55O1xuXG5pbXBvcnQgJ3RpbnltY2UvdGhlbWVzL21vZGVybi90aGVtZSc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9saW5rL3BsdWdpbi5qcyc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9wYXN0ZS9wbHVnaW4uanMnO1xuaW1wb3J0ICd0aW55bWNlL3BsdWdpbnMvdGFibGUvcGx1Z2luLmpzJztcbmltcG9ydCAndGlueW1jZS9wbHVnaW5zL2Fkdmxpc3QvcGx1Z2luLmpzJztcbmltcG9ydCAndGlueW1jZS9wbHVnaW5zL2F1dG9yZXNpemUvcGx1Z2luLmpzJztcbmltcG9ydCAndGlueW1jZS9wbHVnaW5zL2xpc3RzL3BsdWdpbi5qcyc7XG5pbXBvcnQgJ3RpbnltY2UvcGx1Z2lucy9jb2RlL3BsdWdpbi5qcyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtdGlueW1jZScsXG5cdHRlbXBsYXRlOiAnPGRpdiBpZD1cInt7ZWxlbWVudElkfX1cIj48L2Rpdj4nLFxuXHRleHBvcnRBczogJ3RpbnltY2UnLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbnltY2VDb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgVGlueW1jZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cdEBJbnB1dCgnb3B0aW9ucycpIG9wdGlvbnNPdmVycmlkZTogVGlueW1jZU9wdGlvbnM7XG5cblx0QE91dHB1dCgpIGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBtb3VzZWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBtb3VzZXVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2Vtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2VvdmVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2VvdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBtb3VzZWVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgbW91c2VsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGtleWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBrZXlwcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGtleXVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgY29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBwYXN0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBiZWZvcmVTZXRDb250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgc2V0Q29udGVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGdldENvbnRlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBwcmVQcm9jZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgcG9zdFByb2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBub2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgdW5kbyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHJlZG8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBkaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGV4ZWNDb21tYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgcGFzdGVQcmVQcm9jZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgcGFzdGVQb3N0UHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRwdWJsaWMgZWxlbWVudElkOiBzdHJpbmcgPSAndGlueS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuXHRwdWJsaWMgZWRpdG9yOiBhbnk7XG5cblx0cHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cdHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG5cdHByaXZhdGUgaW5uZXJWYWx1ZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgb3B0aW9uczogVGlueW1jZU9wdGlvbnM7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG5cdFx0QEluamVjdCgnVElOWU1DRV9DT05GSUcnKSBwcml2YXRlIGdsb2JhbE9wdGlvbnM6IFRpbnltY2VPcHRpb25zXG5cdCkge1xuXG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG5ldyBUaW55bWNlRGVmYXVsdE9wdGlvbnMoKSwgdGhpcy5nbG9iYWxPcHRpb25zLCB0aGlzLm9wdGlvbnNPdmVycmlkZSk7XG5cdFx0dGhpcy5vcHRpb25zLnNlbGVjdG9yID0gJyMnICsgdGhpcy5lbGVtZW50SWQ7XG5cdFx0dGhpcy5vcHRpb25zLnNldHVwID0gZWRpdG9yID0+IHtcblx0XHRcdHRoaXMuc2V0dXBFdmVudHMoZWRpdG9yKTtcblx0XHR9O1xuXHRcdHRoaXMub3B0aW9ucy5pbml0X2luc3RhbmNlX2NhbGxiYWNrID0gZWRpdG9yID0+IHtcblx0XHRcdGlmIChlZGl0b3IgJiYgdGhpcy52YWx1ZSkge1xuXHRcdFx0XHRlZGl0b3Iuc2V0Q29udGVudCh0aGlzLnZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuXHRcdH07XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5iYXNlVVJMKSB7XG5cdFx0XHR0aW55bWNlLmJhc2VVUkwgPSB0aGlzLm9wdGlvbnMuYmFzZVVSTDtcblx0XHR9XG5cdFx0dGlueW1jZS5pbml0KHRoaXMub3B0aW9ucyk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aW55bWNlLnJlbW92ZSh0aGlzLmVkaXRvcik7XG5cdH1cblxuXHQvLyBnZXQgYWNjZXNzb3Jcblx0Z2V0IHZhbHVlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcblx0fVxuXG5cdC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcblx0c2V0IHZhbHVlKHY6IGFueSkge1xuXHRcdGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcblx0XHRcdHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG5cdFx0XHR0aGlzLnpvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuXHRcdFx0fSk7XG5cblx0XHR9XG5cdH1cblxuXHQvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuXHRcdFx0dGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IuaW5pdGlhbGl6ZWQpIHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0c2V0dXBFdmVudHMoZWRpdG9yKSB7XG5cdFx0ZWRpdG9yLm9uKCdjaGFuZ2Uga2V5dXAnLCAoKSA9PiB7XG5cdFx0XHRjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldENvbnRlbnQoKTtcblx0XHRcdHRoaXMudmFsdWUgPSBjb250ZW50O1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignY2xpY2snLCBlID0+IHtcblx0XHRcdHRoaXMuY2xpY2suZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2RibGNsaWNrJywgZSA9PiB7XG5cdFx0XHR0aGlzLmRibGNsaWNrLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBlID0+IHtcblx0XHRcdHRoaXMubW91c2Vkb3duLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZXVwJywgZSA9PiB7XG5cdFx0XHR0aGlzLm1vdXNldXAuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ21vdXNlbW92ZScsIGUgPT4ge1xuXHRcdFx0dGhpcy5tb3VzZW1vdmUuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ21vdXNlb3ZlcicsIGUgPT4ge1xuXHRcdFx0dGhpcy5tb3VzZW92ZXIuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ21vdXNlb3V0JywgZSA9PiB7XG5cdFx0XHR0aGlzLm1vdXNlb3V0LmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZWVudGVyJywgZSA9PiB7XG5cdFx0XHR0aGlzLm1vdXNlZW50ZXIuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ21vdXNlbGVhdmUnLCBlID0+IHtcblx0XHRcdHRoaXMubW91c2VsZWF2ZS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbigna2V5ZG93bicsIGUgPT4ge1xuXHRcdFx0dGhpcy5rZXlkb3duLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdrZXlwcmVzcycsIGUgPT4ge1xuXHRcdFx0dGhpcy5rZXlwcmVzcy5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbigna2V5dXAnLCBlID0+IHtcblx0XHRcdHRoaXMua2V5dXAuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ2NvbnRleHRtZW51JywgZSA9PiB7XG5cdFx0XHR0aGlzLmNvbnRleHRtZW51LmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdwYXN0ZScsIGUgPT4ge1xuXHRcdFx0dGhpcy5wYXN0ZS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignaW5pdCcsIGUgPT4ge1xuXHRcdFx0dGhpcy5pbml0LmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdmb2N1cycsIGUgPT4ge1xuXHRcdFx0dGhpcy5mb2N1cy5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignYmx1cicsIGUgPT4ge1xuXHRcdFx0dGhpcy5ibHVyLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdCZWZvcmVTZXRDb250ZW50JywgZSA9PiB7XG5cdFx0XHR0aGlzLmJlZm9yZVNldENvbnRlbnQuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1NldENvbnRlbnQnLCBlID0+IHtcblx0XHRcdHRoaXMuc2V0Q29udGVudC5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignR2V0Q29udGVudCcsIGUgPT4ge1xuXHRcdFx0dGhpcy5nZXRDb250ZW50LmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdQcmVQcm9jZXNzJywgZSA9PiB7XG5cdFx0XHR0aGlzLnByZVByb2Nlc3MuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1Bvc3RQcm9jZXNzJywgZSA9PiB7XG5cdFx0XHR0aGlzLnBvc3RQcm9jZXNzLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdOb2RlQ2hhbmdlJywgZSA9PiB7XG5cdFx0XHR0aGlzLm5vZGVDaGFuZ2UuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1VuZG8nLCBlID0+IHtcblx0XHRcdHRoaXMudW5kby5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignUmVkbycsIGUgPT4ge1xuXHRcdFx0dGhpcy5yZWRvLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdDaGFuZ2UnLCBlID0+IHtcblx0XHRcdHRoaXMuY2hhbmdlLmVtaXQoZSk7XG5cdFx0fSk7XG5cdFx0ZWRpdG9yLm9uKCdEaXJ0eScsIGUgPT4ge1xuXHRcdFx0dGhpcy5kaXJ0eS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignUmVtb3ZlJywgZSA9PiB7XG5cdFx0XHR0aGlzLnJlbW92ZS5lbWl0KGUpO1xuXHRcdH0pO1xuXHRcdGVkaXRvci5vbignRXhlY0NvbW1hbmQnLCBlID0+IHtcblx0XHRcdHRoaXMuZXhlY0NvbW1hbmQuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1Bhc3RlUHJlUHJvY2VzcycsIGUgPT4ge1xuXHRcdFx0dGhpcy5wYXN0ZVByZVByb2Nlc3MuZW1pdChlKTtcblx0XHR9KTtcblx0XHRlZGl0b3Iub24oJ1Bhc3RlUG9zdFByb2Nlc3MnLCBlID0+IHtcblx0XHRcdHRoaXMucGFzdGVQb3N0UHJvY2Vzcy5lbWl0KGUpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGlueW1jZUNvbXBvbmVudCB9IGZyb20gJy4vYW5ndWxhcjItdGlueW1jZS1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IFRpbnltY2VPcHRpb25zIH0gZnJvbSAnLi9hbmd1bGFyMi10aW55bWNlLWxpYi5jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRpbnltY2VEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhcjItdGlueW1jZS1saWIuZGVmYXVsdCc7XG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6IFtdLFxuXHRkZWNsYXJhdGlvbnM6IFtUaW55bWNlQ29tcG9uZW50XSxcblx0ZXhwb3J0czogW1RpbnltY2VDb21wb25lbnRdLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7IHByb3ZpZGU6ICdUSU5ZTUNFX0NPTkZJRycsIHVzZUNsYXNzOiBUaW55bWNlRGVmYXVsdE9wdGlvbnMgfVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFRpbnltY2VNb2R1bGUge1xuXHRzdGF0aWMgd2l0aENvbmZpZyh1c2VyQ29uZmlnOiBUaW55bWNlT3B0aW9ucyA9IHt9KTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5nTW9kdWxlOiBUaW55bWNlTW9kdWxlLFxuXHRcdFx0cHJvdmlkZXJzOiBbXG5cdFx0XHRcdHsgcHJvdmlkZTogJ1RJTllNQ0VfQ09ORklHJywgdXNlVmFsdWU6IHVzZXJDb25maWcgfVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJJbmplY3RhYmxlIiwiRXZlbnRFbWl0dGVyIiwiQ29tcG9uZW50IiwiTkdfVkFMVUVfQUNDRVNTT1IiLCJmb3J3YXJkUmVmIiwiTmdab25lIiwiSW5qZWN0IiwiSW5wdXQiLCJPdXRwdXQiLCJOZ01vZHVsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO1FBTUM7U0FDQzs7b0JBTERBLGFBQVUsU0FBQzt3QkFDWCxVQUFVLEVBQUUsTUFBTTtxQkFDbEI7Ozs7O3dDQUpEOzs7Ozs7O0FDRUEsUUFBQTs7MkJBQ1c7Z0JBQ1QsTUFBTTtnQkFDTixPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxZQUFZO2dCQUNaLE9BQU87Z0JBQ1AsTUFBTTthQUNOOzRCQUNVLGlDQUFpQzsyQkFDbEMsaUJBQWlCOzhCQUNkLElBQUk7O29DQWRsQjtRQWVDOzs7Ozs7QUNmRDtJQWtCQSxJQUFNLElBQUksR0FBRztLQUNaLENBQUM7O1FBMERELDBCQUNTLE1BQzBCLGFBQTZCO1lBRHZELFNBQUksR0FBSixJQUFJO1lBQ3NCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjt5QkEzQzlDLElBQUlDLGVBQVksRUFBRTs0QkFDZixJQUFJQSxlQUFZLEVBQUU7NkJBQ2pCLElBQUlBLGVBQVksRUFBRTsyQkFDcEIsSUFBSUEsZUFBWSxFQUFFOzZCQUNoQixJQUFJQSxlQUFZLEVBQUU7NkJBQ2xCLElBQUlBLGVBQVksRUFBRTs0QkFDbkIsSUFBSUEsZUFBWSxFQUFFOzhCQUNoQixJQUFJQSxlQUFZLEVBQUU7OEJBQ2xCLElBQUlBLGVBQVksRUFBRTsyQkFDckIsSUFBSUEsZUFBWSxFQUFFOzRCQUNqQixJQUFJQSxlQUFZLEVBQUU7eUJBQ3JCLElBQUlBLGVBQVksRUFBRTsrQkFDWixJQUFJQSxlQUFZLEVBQUU7eUJBQ3hCLElBQUlBLGVBQVksRUFBRTt3QkFDbkIsSUFBSUEsZUFBWSxFQUFFO3lCQUNqQixJQUFJQSxlQUFZLEVBQUU7d0JBQ25CLElBQUlBLGVBQVksRUFBRTtvQ0FDTixJQUFJQSxlQUFZLEVBQUU7OEJBQ3hCLElBQUlBLGVBQVksRUFBRTs4QkFDbEIsSUFBSUEsZUFBWSxFQUFFOzhCQUNsQixJQUFJQSxlQUFZLEVBQUU7K0JBQ2pCLElBQUlBLGVBQVksRUFBRTs4QkFDbkIsSUFBSUEsZUFBWSxFQUFFO3dCQUN4QixJQUFJQSxlQUFZLEVBQUU7d0JBQ2xCLElBQUlBLGVBQVksRUFBRTswQkFDaEIsSUFBSUEsZUFBWSxFQUFFO3lCQUNuQixJQUFJQSxlQUFZLEVBQUU7MEJBQ2pCLElBQUlBLGVBQVksRUFBRTsrQkFDYixJQUFJQSxlQUFZLEVBQUU7bUNBQ2QsSUFBSUEsZUFBWSxFQUFFO29DQUNqQixJQUFJQSxlQUFZLEVBQUU7NkJBRXBCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7cUNBR3BDLElBQUk7b0NBQ0MsSUFBSTtTQVVoRDs7OztRQUVELG1DQUFROzs7WUFBUjtnQkFBQSxpQkFZQztnQkFYQSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNwRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsVUFBQSxNQUFNO29CQUMxQixLQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN6QixDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsVUFBQSxNQUFNO29CQUMzQyxJQUFJLE1BQU0sSUFBSSxLQUFJLENBQUMsS0FBSyxFQUFFO3dCQUN6QixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QsS0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7aUJBQ3JCLENBQUM7YUFDRjs7OztRQUVELDBDQUFlOzs7WUFBZjtnQkFDQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO29CQUN6QixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2lCQUN2QztnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMzQjs7OztRQUVELHNDQUFXOzs7WUFBWDtnQkFDQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1QjtRQUdELHNCQUFJLG1DQUFLOzs7O2dCQUFUO2dCQUNDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN2Qjs7Ozs7Z0JBR0QsVUFBVSxDQUFNO2dCQUFoQixpQkFRQztnQkFQQSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7d0JBQ2IsS0FBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6QixDQUFDLENBQUM7aUJBRUg7YUFDRDs7O1dBWEE7Ozs7OztRQWNELHFDQUFVOzs7O1lBQVYsVUFBVyxLQUFVO2dCQUNwQixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDWCxLQUFLLEdBQUcsRUFBRSxDQUFDO3FCQUNYO29CQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzlCO2lCQUNEO2FBQ0Q7Ozs7O1FBRUQsMkNBQWdCOzs7O1lBQWhCLFVBQWlCLEVBQU87Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7YUFDM0I7Ozs7O1FBRUQsNENBQWlCOzs7O1lBQWpCLFVBQWtCLEVBQU87Z0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7YUFDNUI7Ozs7O1FBRUQsc0NBQVc7Ozs7WUFBWCxVQUFZLE1BQU07Z0JBQWxCLGlCQWtHQztnQkFqR0EsTUFBTSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUU7O29CQUN6QixJQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3BDLEtBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO2lCQUNyQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO29CQUNuQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQUEsQ0FBQztvQkFDdEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxVQUFBLENBQUM7b0JBQ3ZCLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN2QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBQSxDQUFDO29CQUNyQixLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQUEsQ0FBQztvQkFDdkIsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxVQUFBLENBQUM7b0JBQ3ZCLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN2QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBQSxDQUFDO29CQUN0QixLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQUEsQ0FBQztvQkFDeEIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFBLENBQUM7b0JBQ3hCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBQSxDQUFDO29CQUNyQixLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQUEsQ0FBQztvQkFDdEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFBLENBQUM7b0JBQ25CLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBQSxDQUFDO29CQUN6QixLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUEsQ0FBQztvQkFDbkIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ25CLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFBLENBQUM7b0JBQ2xCLEtBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO29CQUNuQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQUEsQ0FBQztvQkFDbEIsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFVBQUEsQ0FBQztvQkFDOUIsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQUEsQ0FBQztvQkFDeEIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFBLENBQUM7b0JBQ3hCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBQSxDQUFDO29CQUN4QixLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQUEsQ0FBQztvQkFDekIsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFBLENBQUM7b0JBQ3hCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBQSxDQUFDO29CQUNsQixLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQUEsQ0FBQztvQkFDbEIsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFBLENBQUM7b0JBQ3BCLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO29CQUNuQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQUEsQ0FBQztvQkFDcEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFBLENBQUM7b0JBQ3pCLEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFBLENBQUM7b0JBQzdCLEtBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM3QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFBLENBQUM7b0JBQzlCLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCLENBQUMsQ0FBQzthQUNIOztvQkEvTkRDLFlBQVMsU0FBQzt3QkFDVixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsUUFBUSxFQUFFLGdDQUFnQzt3QkFDMUMsUUFBUSxFQUFFLFNBQVM7d0JBQ25CLFNBQVMsRUFBRTs0QkFDVjtnQ0FDQyxPQUFPLEVBQUVDLHVCQUFpQjtnQ0FDMUIsV0FBVyxFQUFFQyxhQUFVLENBQUMsY0FBTSxPQUFBLGdCQUFnQixHQUFBLENBQUM7Z0NBQy9DLEtBQUssRUFBRSxJQUFJOzZCQUNYO3lCQUNEO3FCQUNEOzs7Ozt3QkFoQ3lEQyxTQUFNO3dEQStFN0RDLFNBQU0sU0FBQyxnQkFBZ0I7Ozs7c0NBN0N4QkMsUUFBSyxTQUFDLFNBQVM7NEJBRWZDLFNBQU07K0JBQ05BLFNBQU07Z0NBQ05BLFNBQU07OEJBQ05BLFNBQU07Z0NBQ05BLFNBQU07Z0NBQ05BLFNBQU07K0JBQ05BLFNBQU07aUNBQ05BLFNBQU07aUNBQ05BLFNBQU07OEJBQ05BLFNBQU07K0JBQ05BLFNBQU07NEJBQ05BLFNBQU07a0NBQ05BLFNBQU07NEJBQ05BLFNBQU07MkJBQ05BLFNBQU07NEJBQ05BLFNBQU07MkJBQ05BLFNBQU07dUNBQ05BLFNBQU07aUNBQ05BLFNBQU07aUNBQ05BLFNBQU07aUNBQ05BLFNBQU07a0NBQ05BLFNBQU07aUNBQ05BLFNBQU07MkJBQ05BLFNBQU07MkJBQ05BLFNBQU07NkJBQ05BLFNBQU07NEJBQ05BLFNBQU07NkJBQ05BLFNBQU07a0NBQ05BLFNBQU07c0NBQ05BLFNBQU07dUNBQ05BLFNBQU07OytCQWxFUjs7Ozs7OztBQ0FBOzs7Ozs7O1FBY1Esd0JBQVU7Ozs7WUFBakIsVUFBa0IsVUFBK0I7Z0JBQS9CLDJCQUFBO29CQUFBLGVBQStCOztnQkFDaEQsT0FBTztvQkFDTixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsU0FBUyxFQUFFO3dCQUNWLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7cUJBQ25EO2lCQUNELENBQUM7YUFDRjs7b0JBaEJEQyxXQUFRLFNBQUM7d0JBQ1QsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO3dCQUMzQixTQUFTLEVBQUU7NEJBQ1YsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFO3lCQUM5RDtxQkFDRDs7NEJBWkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9