UNPKG

tibas-form-json-generator

Version:

Fully configured form generator via JSON data with a custom template for each attribute + onChange events.

416 lines 48.6 kB
/** * @fileoverview added by tsickle * Generated from: lib/dynamic-template/dynamic-template.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Compiler, Component, EventEmitter, Injector, Input, NgModule, NgModuleRef, Output, ViewChild, ViewContainerRef } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { AttributeModel } from '../models/attribute.model'; import { ItemModel } from '../models/item.model'; import { ParentFunctionEnum } from '../models/parent.function.enum'; import { FormModel } from '../models/form.model'; import { ReferencesService } from '../services/references.service'; import { AttributeSourceTypeEnum } from '../models/attribute-sourceType.enum'; /** * Created by TIBAS-Mohammed on 2020-07-6. */ var DynamicTemplateComponent = /** @class */ (function () { function DynamicTemplateComponent(compiler, injector, moduleRef, referencesService) { this.compiler = compiler; this.injector = injector; this.moduleRef = moduleRef; this.referencesService = referencesService; this.changedtrigger = new EventEmitter(); this.script = ''; } /** * @return {?} */ DynamicTemplateComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.createComponentFromRaw(this.template, this.attribute, this.item, this.headerOrFooter, this.position); }; /** * @private * @param {?} template * @param {?} attribute * @param {?} item * @param {?} headerOrFooter * @param {?} position * @return {?} */ DynamicTemplateComponent.prototype.createComponentFromRaw = /** * @private * @param {?} template * @param {?} attribute * @param {?} item * @param {?} headerOrFooter * @param {?} position * @return {?} */ function (template, attribute, item, headerOrFooter, position) { var _this = this; if (!template) { return; } /** @type {?} */ var styles = []; if (attribute.onChange) { template = template.split('onChange-Function').join(attribute.onChange); } else { template = template.split('(change)="onChange-Function"').join(''); } if (attribute.hiddenlevels) { if (this.level && attribute.hiddenlevels.length > 0) { attribute.hidden = attribute.hiddenlevels.indexOf(this.level) > -1; if (attribute.hidden) { attribute.required = false; } } } if (attribute && this.mode === 'EDIT') { attribute.required = false; } if ((attribute.typeSource === AttributeSourceTypeEnum.CALCULATED_ENTRY && item) || this.mode === 'READ' || this.mode === 'READWITHTAB') { attribute.disable = true; attribute.required = false; } /** * @return {?} */ function TmpCmpConstructor() { this.attribute = attribute; this.item = item; this.reloadData = (/** * @param {?} refTable * @param {?} apiUrl * @return {?} */ function (refTable, apiUrl) { if (position !== 'BODY' && headerOrFooter !== null && headerOrFooter !== undefined && (headerOrFooter.header.length > 0 || headerOrFooter.footer.length > 0) && attribute.value && refTable && apiUrl) { /** @type {?} */ var id_1; attribute.refValues.forEach((/** * @param {?} value * @return {?} */ function (value) { if (value.label === attribute.value) { id_1 = value.id; } })); if (id_1) { ReferencesService.getData(apiUrl + '/' + id_1).subscribe((/** * @param {?} response * @return {?} */ function (response) { /** @type {?} */ var atts = []; headerOrFooter.header.forEach((/** * @param {?} attr * @return {?} */ function (attr) { if (attr.refTable === refTable) { atts.push(attr); } })); headerOrFooter.footer.forEach((/** * @param {?} attr * @return {?} */ function (attr) { if (attr.refTable === refTable) { atts.push(attr); } })); if (atts.length > 0) { atts.forEach((/** * @param {?} att * @return {?} */ function (att) { att.refValues = []; att.value = ''; if (response['data'] && response['data'].length > 0) { att.refValues = response['data']; } })); } })); } } }); } /** @type {?} */ var tmpCmp = Component({ template: template, styles: styles })(new TmpCmpConstructor().constructor); /** @type {?} */ var tmpModule = NgModule({ imports: [CommonModule, FormsModule, ReactiveFormsModule], declarations: [tmpCmp], providers: [ReferencesService] })(/** @class */ (function () { function class_1() { } return class_1; }())); this.compiler.compileModuleAndAllComponentsAsync(tmpModule) .then((/** * @param {?} factories * @return {?} */ function (factories) { /** @type {?} */ var f = factories.componentFactories[0]; _this.cmpRef = f.create(_this.injector, [], null, _this.moduleRef); _this.cmpRef.instance.name = 'tibas-dynamic-component'; _this.valueITtempl.insert(_this.cmpRef.hostView); _this.changedtrigger.emit(true); if (attribute.typeSource === AttributeSourceTypeEnum.CALCULATED_ENTRY && item) { _this.script = ' $(document).ready(function(){ \n'; if (attribute.forumlaItems && attribute.forumlaItems.function && item.children && item.children.length > 0) { /** @type {?} */ var func_1 = ' \n'; item.children.forEach((/** * @param {?} child * @return {?} */ function (child) { _this.script += '$("#' + child.code + '_' + attribute.code + '").change(' + item.code + '_' + attribute.code + '); \n'; if (attribute.forumlaItems.function === ParentFunctionEnum.SUM) { func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' + 'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' + 'finalValue += (!isNaN(val) ? val : 0);\n' + '}\n'; } if (attribute.forumlaItems.function === ParentFunctionEnum.AVG) { func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' + 'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' + 'finalValue += (!isNaN(val) ? val : 0);\n' + '}\n'; } if (attribute.forumlaItems.function === ParentFunctionEnum.MULTIP) { func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' + 'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' + 'finalValue = finalValue * (!isNaN(val) ? val : 0);\n' + '}\n'; } })); /** @type {?} */ var finalValueVar = ''; /** @type {?} */ var avgFinalValue = ''; if (attribute.forumlaItems.function === ParentFunctionEnum.SUM) { finalValueVar = 'var finalValue = 0;'; } if (attribute.forumlaItems.function === ParentFunctionEnum.AVG) { finalValueVar = 'var finalValue = 0;'; avgFinalValue = ' finalValue = finalValue/' + item.children.length + '\n'; } if (attribute.forumlaItems.function === ParentFunctionEnum.MULTIP) { finalValueVar = 'var finalValue = 1;'; } /** @type {?} */ var calledFunct = ' function ' + item.code + '_' + attribute.code + '(){ \n' + ' ' + finalValueVar + ' \n' + ' ' + func_1 + ' \n' + ' ' + avgFinalValue + ' \n' + ' $("#' + item.code + '_' + attribute.code + '").val(finalValue);\n' + ' $("#' + item.code + '_' + attribute.code + '").trigger("change");\n' + ' }'; _this.script += ' \n ' + calledFunct + ' \n '; } else if (attribute.forumlaAttribute && attribute.forumlaAttribute.depends.length > 0 && attribute.forumlaAttribute.function) { /** @type {?} */ var functionReplaced_1 = attribute.forumlaAttribute.function; attribute.forumlaAttribute.depends.forEach((/** * @param {?} depend * @return {?} */ function (depend) { _this.script += '$("#' + item.code + '_' + depend + '").change(function(){ \n'; functionReplaced_1 = functionReplaced_1.split(depend).join(item.code + '_' + depend); })); functionReplaced_1 = functionReplaced_1.split(attribute.code).join(item.code + '_' + attribute.code); _this.script += functionReplaced_1 + '\n '; _this.script += '$("#' + item.code + '_' + attribute.code + '").trigger("change");\n }); \n'; } _this.script += ' }); '; /** @type {?} */ var tjs = document.createElement('script'); tjs.innerHTML = _this.script; _this.valueITtempl.element.nativeElement.appendChild(tjs); } // Required if (attribute.mandatory && _this.mode === 'VIEW') { if (attribute.mandatory.depends.length > 0 && attribute.mandatory.function) { _this.script = ' $(document).ready(function(){ \n'; /** @type {?} */ var functionReplaced_2 = attribute.mandatory.function; /** @type {?} */ var idElement_1 = ''; if (_this.position === 'BODY') { idElement_1 = item.code + '_' + attribute.code; attribute.mandatory.depends.forEach((/** * @param {?} depend * @return {?} */ function (depend) { _this.script += '$("#' + item.code + '_' + depend + '").change(RequiredFunc_' + idElement_1 + '); \n'; functionReplaced_2 = functionReplaced_2.split(depend).join(item.code + '_' + depend); })); functionReplaced_2 = functionReplaced_2.split(attribute.code).join(item.code + '_' + attribute.code); } if (_this.position === 'HEADER' || _this.position === 'FOOTER') { idElement_1 = attribute.code; attribute.mandatory.depends.forEach((/** * @param {?} depend * @return {?} */ function (depend) { _this.script += '$("#' + depend + '").change(RequiredFunc_' + idElement_1 + '); \n'; })); } _this.script += ' function RequiredFunc_' + idElement_1 + '(){ \n'; _this.script += 'if(' + functionReplaced_2 + '){ \n'; _this.script += '$("#' + idElement_1 + '").prop("required",true); \n'; _this.script += ' } else {\n'; _this.script += '$("#' + idElement_1 + '").prop("required",false); \n'; _this.script += ' } \n' + ' $("#' + idElement_1 + '").trigger("change");\n}\n' + '$("#' + idElement_1 + '").change(function(){ \n' + 'if($(this).prop(\'required\')){\n' + ' if ($(this).val()==\'\'){\n' + ' if ($(this).hasClass("ng-valid")){\n' + ' $(this).removeClass("ng-valid");\n' + ' }\n' + ' if (!$(this).hasClass("ng-invalid")){\n' + ' $(this).addClass("ng-invalid");\n' + ' }\n' + '\n' + ' } else {\n' + ' if ($(this).hasClass("ng-invalid")){\n' + ' $(this).removeClass("ng-invalid");\n' + ' }\n' + ' if (!$(this).hasClass("ng-valid")){\n' + ' $(this).addClass("ng-valid");\n' + ' }\n' + '}\n' + ' } else {\n' + ' if ($(this).hasClass("ng-invalid")){\n' + ' $(this).removeClass("ng-invalid");\n' + ' }\n' + ' if (!$(this).hasClass("ng-valid")){\n' + ' $(this).addClass("ng-valid");\n' + ' }\n' + ' }\n' + '});\n'; _this.script += ' }); \n'; /** @type {?} */ var tjss = document.createElement('script'); tjss.innerHTML = _this.script; _this.valueITtempl.element.nativeElement.appendChild(tjss); } } })); }; /** * @return {?} */ DynamicTemplateComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.changedtrigger.emit(true); if (this.cmpRef) { this.cmpRef.destroy(); } }; DynamicTemplateComponent.decorators = [ { type: Component, args: [{ selector: '[dynamic-template]', template: "\n <div #valueITtempl></div>\n " }] } ]; /** @nocollapse */ DynamicTemplateComponent.ctorParameters = function () { return [ { type: Compiler }, { type: Injector }, { type: NgModuleRef }, { type: ReferencesService } ]; }; DynamicTemplateComponent.propDecorators = { valueITtempl: [{ type: ViewChild, args: ['valueITtempl', { static: false, read: ViewContainerRef },] }], template: [{ type: Input }], attribute: [{ type: Input }], item: [{ type: Input }], headerOrFooter: [{ type: Input }], position: [{ type: Input }], level: [{ type: Input }], mode: [{ type: Input }], changedtrigger: [{ type: Output }] }; return DynamicTemplateComponent; }()); export { DynamicTemplateComponent }; if (false) { /** @type {?} */ DynamicTemplateComponent.prototype.valueITtempl; /** @type {?} */ DynamicTemplateComponent.prototype.template; /** @type {?} */ DynamicTemplateComponent.prototype.attribute; /** @type {?} */ DynamicTemplateComponent.prototype.item; /** @type {?} */ DynamicTemplateComponent.prototype.headerOrFooter; /** @type {?} */ DynamicTemplateComponent.prototype.position; /** @type {?} */ DynamicTemplateComponent.prototype.level; /** @type {?} */ DynamicTemplateComponent.prototype.mode; /** @type {?} */ DynamicTemplateComponent.prototype.changedtrigger; /** @type {?} */ DynamicTemplateComponent.prototype.script; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.cmpRef; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.reloadData; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.compiler; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.injector; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.moduleRef; /** * @type {?} * @private */ DynamicTemplateComponent.prototype.referencesService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aWJhcy1mb3JtLWpzb24tZ2VuZXJhdG9yLyIsInNvdXJjZXMiOlsibGliL2R5bmFtaWMtdGVtcGxhdGUvZHluYW1pYy10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBRUwsUUFBUSxFQUNSLFNBQVMsRUFFVCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUVYLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFLNUU7SUF5Q0Usa0NBQW9CLFFBQWtCLEVBQ2xCLFFBQWtCLEVBQ2xCLFNBQTJCLEVBQzNCLGlCQUFvQztRQUhwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVp4RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFD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QTBCOzs7OztJQUMxQiw2Q0FBbUM7Ozs7O0lBQ25DLHFEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBpbGVyLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nTW9kdWxlLFxuICBOZ01vZHVsZVJlZixcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBdHRyaWJ1dGVNb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2F0dHJpYnV0ZS5tb2RlbCc7XG5pbXBvcnQge0l0ZW1Nb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW0ubW9kZWwnO1xuaW1wb3J0IHtQYXJlbnRGdW5jdGlvbkVudW19IGZyb20gJy4uL21vZGVscy9wYXJlbnQuZnVuY3Rpb24uZW51bSc7XG5pbXBvcnQge0Zvcm1Nb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHtSZWZlcmVuY2VzU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7QXR0cmlidXRlU291cmNlVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9hdHRyaWJ1dGUtc291cmNlVHlwZS5lbnVtJztcblxuLyoqXG4gKiBDcmVhdGVkIGJ5IFRJQkFTLU1vaGFtbWVkIG9uIDIwMjAtMDctNi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW2R5bmFtaWMtdGVtcGxhdGVdJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICN2YWx1ZUlUdGVtcGw+PC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1RlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndmFsdWVJVHRlbXBsJywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICB2YWx1ZUlUdGVtcGw6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KClcbiAgdGVtcGxhdGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIGl0ZW06IEl0ZW1Nb2RlbDtcblxuICBASW5wdXQoKVxuICBoZWFkZXJPckZvb3RlcjogRm9ybU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHBvc2l0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbGV2ZWw6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBtb2RlOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIGNoYW5nZWR0cmlnZ2VyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHNjcmlwdCA9ICcnO1xuXG4gIHByaXZhdGUgY21wUmVmOiBDb21wb25lbnRSZWY8YW55PjtcblxuICBwcml2YXRlIHJlbG9hZERhdGE6ICgpID0+IHZvaWQ7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBpbGVyOiBDb21waWxlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZXNTZXJ2aWNlOiBSZWZlcmVuY2VzU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50RnJvbVJhdyh0aGlzLnRlbXBsYXRlLCB0aGlzLmF0dHJpYnV0ZSwgdGhpcy5pdGVtLCB0aGlzLmhlYWRlck9yRm9vdGVyLCB0aGlzLnBvc2l0aW9uKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBjcmVhdGVDb21wb25lbnRGcm9tUmF3KHRlbXBsYXRlOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlTW9kZWwsIGl0ZW06IEl0ZW1Nb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck9yRm9vdGVyOiBGb3JtTW9kZWwsIHBvc2l0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlcyA9IFtdO1xuICAgIGlmIChhdHRyaWJ1dGUub25DaGFuZ2UpIHtcbiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoJ29uQ2hhbmdlLUZ1bmN0aW9uJykuam9pbihhdHRyaWJ1dGUub25DaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnNwbGl0KCcoY2hhbmdlKT1cIm9uQ2hhbmdlLUZ1bmN0aW9uXCInKS5qb2luKCcnKTtcbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZS5oaWRkZW5sZXZlbHMpIHtcbiAgICAgIGlmICh0aGlzLmxldmVsICYmIGF0dHJpYnV0ZS5oaWRkZW5sZXZlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhdHRyaWJ1dGUuaGlkZGVuID0gYXR0cmlidXRlLmhpZGRlbmxldmVscy5pbmRleE9mKHRoaXMubGV2ZWwpID4gLTE7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUuaGlkZGVuKSB7XG4gICAgICAgICAgYXR0cmlidXRlLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZSAmJiB0aGlzLm1vZGUgPT09ICdFRElUJykge1xuICAgICAgYXR0cmlidXRlLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChhdHRyaWJ1dGUudHlwZVNvdXJjZSA9PT0gQXR0cmlidXRlU291cmNlVHlwZUVudW0uQ0FMQ1VMQVRFRF9FTlRSWSAmJiBpdGVtKVxuICAgICAgfHwgdGhpcy5tb2RlID09PSAnUkVBRCcgfHwgdGhpcy5tb2RlID09PSAnUkVBRFdJVEhUQUInKSB7XG4gICAgICBhdHRyaWJ1dGUuZGlzYWJsZSA9IHRydWU7XG4gICAgICBhdHRyaWJ1dGUucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBUbXBDbXBDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgICAgdGhpcy5pdGVtID0gaXRlbTtcblxuICAgICAgdGhpcy5yZWxvYWREYXRhID0gKHJlZlRhYmxlOiBzdHJpbmcsIGFwaVVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ0JPRFknICYmIGhlYWRlck9yRm9vdGVyICE9PSBudWxsICYmIGhlYWRlck9yRm9vdGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAmJiAoaGVhZGVyT3JGb290ZXIuaGVhZGVyLmxlbmd0aCA+IDAgfHwgaGVhZGVyT3JGb290ZXIuZm9vdGVyLmxlbmd0aCA+IDApXG4gICAgICAgICAgJiYgYXR0cmlidXRlLnZhbHVlICYmIHJlZlRhYmxlICYmIGFwaVVybCkge1xuICAgICAgICAgIGxldCBpZDogbnVtYmVyO1xuICAgICAgICAgIGF0dHJpYnV0ZS5yZWZWYWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGFiZWwgPT09IGF0dHJpYnV0ZS52YWx1ZSkge1xuICAgICAgICAgICAgICBpZCA9IHZhbHVlLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgUmVmZXJlbmNlc1NlcnZpY2UuZ2V0RGF0YShhcGlVcmwgKyAnLycgKyBpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXR0czogQXR0cmlidXRlTW9kZWxbXSA9IFtdO1xuICAgICAgICAgICAgICBoZWFkZXJPckZvb3Rlci5oZWFkZXIuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5yZWZUYWJsZSA9PT0gcmVmVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHMucHVzaChhdHRyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBoZWFkZXJPckZvb3Rlci5mb290ZXIuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5yZWZUYWJsZSA9PT0gcmVmVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHMucHVzaChhdHRyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoYXR0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXR0cy5mb3JFYWNoKGF0dCA9PiB7XG4gICAgICAgICAgICAgICAgICBhdHQucmVmVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICBhdHQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZGF0YSddICYmIHJlc3BvbnNlWydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhdHQucmVmVmFsdWVzID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRtcENtcCA9IENvbXBvbmVudCh7dGVtcGxhdGUsIHN0eWxlc30pKG5ldyBUbXBDbXBDb25zdHJ1Y3RvcigpLmNvbnN0cnVjdG9yKTtcblxuICAgIGNvbnN0IHRtcE1vZHVsZSA9IE5nTW9kdWxlKHtcbiAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgICAgIGRlY2xhcmF0aW9uczogW3RtcENtcF0sXG4gICAgICBwcm92aWRlcnM6IFtSZWZlcmVuY2VzU2VydmljZV1cbiAgICB9KShjbGFzcyB7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmModG1wTW9kdWxlKVxuICAgICAgLnRoZW4oKGZhY3RvcmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGYgPSBmYWN0b3JpZXMuY29tcG9uZW50RmFjdG9yaWVzWzBdO1xuICAgICAgICAgIHRoaXMuY21wUmVmID0gZi5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIG51bGwsIHRoaXMubW9kdWxlUmVmKTtcbiAgICAgICAgICB0aGlzLmNtcFJlZi5pbnN0YW5jZS5uYW1lID0gJ3RpYmFzLWR5bmFtaWMtY29tcG9uZW50JztcbiAgICAgICAgICB0aGlzLnZhbHVlSVR0ZW1wbC5pbnNlcnQodGhpcy5jbXBSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlZHRyaWdnZXIuZW1pdCh0cnVlKTtcblxuICAgICAgICAgIGlmIChhdHRyaWJ1dGUudHlwZVNvdXJjZSA9PT0gQXR0cmlidXRlU291cmNlVHlwZUVudW0uQ0FMQ1VMQVRFRF9FTlRSWSAmJiBpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdCA9ICcgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsgIFxcbic7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcyAmJiBhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBmdW5jID0gJyBcXG4nO1xuICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICckKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLmNoYW5nZSgnICsgaXRlbS5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnKTsgXFxuJztcblxuICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uID09PSBQYXJlbnRGdW5jdGlvbkVudW0uU1VNKSB7XG4gICAgICAgICAgICAgICAgICBmdW5jICs9ICdpZiAoJChcIiMnICsgY2hpbGQuY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS52YWwoKSkge1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAndmFyIHZhbCA9IHBhcnNlSW50KCQoXCIjJyArIGNoaWxkLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKCksMTApO1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnZmluYWxWYWx1ZSArPSAoIWlzTmFOKHZhbCkgPyB2YWwgOiAwKTtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ31cXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcy5mdW5jdGlvbiA9PT0gUGFyZW50RnVuY3Rpb25FbnVtLkFWRykge1xuICAgICAgICAgICAgICAgICAgZnVuYyArPSAnaWYgKCQoXCIjJyArIGNoaWxkLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKCkpIHtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ3ZhciB2YWwgPSBwYXJzZUludCgkKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLnZhbCgpLDEwKTtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsVmFsdWUgKz0gKCFpc05hTih2YWwpID8gdmFsIDogMCk7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICd9XFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5mb3J1bWxhSXRlbXMuZnVuY3Rpb24gPT09IFBhcmVudEZ1bmN0aW9uRW51bS5NVUxUSVApIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmMgKz0gJ2lmICgkKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLnZhbCgpKSB7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICd2YXIgdmFsID0gcGFyc2VJbnQoJChcIiMnICsgY2hpbGQuY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS52YWwoKSwxMCk7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdmaW5hbFZhbHVlID0gZmluYWxWYWx1ZSAqICghaXNOYU4odmFsKSA/IHZhbCA6IDApO1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnfVxcbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsZXQgZmluYWxWYWx1ZVZhciA9ICcnO1xuICAgICAgICAgICAgICBsZXQgYXZnRmluYWxWYWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uID09PSBQYXJlbnRGdW5jdGlvbkVudW0uU1VNKSB7XG4gICAgICAgICAgICAgICAgZmluYWxWYWx1ZVZhciA9ICd2YXIgZmluYWxWYWx1ZSA9IDA7JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcy5mdW5jdGlvbiA9PT0gUGFyZW50RnVuY3Rpb25FbnVtLkFWRykge1xuICAgICAgICAgICAgICAgIGZpbmFsVmFsdWVWYXIgPSAndmFyIGZpbmFsVmFsdWUgPSAwOyc7XG4gICAgICAgICAgICAgICAgYXZnRmluYWxWYWx1ZSA9ICcgZmluYWxWYWx1ZSA9IGZpbmFsVmFsdWUvJyArIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoICsgJ1xcbic7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5mb3J1bWxhSXRlbXMuZnVuY3Rpb24gPT09IFBhcmVudEZ1bmN0aW9uRW51bS5NVUxUSVApIHtcbiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlVmFyID0gJ3ZhciBmaW5hbFZhbHVlID0gMTsnO1xuICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICBjb25zdCBjYWxsZWRGdW5jdCA9ICcgZnVuY3Rpb24gJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJygpeyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBmaW5hbFZhbHVlVmFyICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBmdW5jICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBhdmdGaW5hbFZhbHVlICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICAkKFwiIycgKyBpdGVtLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKGZpbmFsVmFsdWUpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgfSc7XG5cbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyBcXG4gJyArIGNhbGxlZEZ1bmN0ICsgJyBcXG4gJztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5kZXBlbmRzLmxlbmd0aCA+IDAgJiYgYXR0cmlidXRlLmZvcnVtbGFBdHRyaWJ1dGUuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uUmVwbGFjZWQgPSBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5mdW5jdGlvbjtcblxuICAgICAgICAgICAgICBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5kZXBlbmRzLmZvckVhY2goZGVwZW5kID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnJChcIiMnICsgaXRlbS5jb2RlICsgJ18nICsgZGVwZW5kICsgJ1wiKS5jaGFuZ2UoZnVuY3Rpb24oKXsgXFxuJztcbiAgICAgICAgICAgICAgICBmdW5jdGlvblJlcGxhY2VkID0gZnVuY3Rpb25SZXBsYWNlZC5zcGxpdChkZXBlbmQpLmpvaW4oaXRlbS5jb2RlICsgJ18nICsgZGVwZW5kKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGF0dHJpYnV0ZS5jb2RlKS5qb2luKGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlKTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gZnVuY3Rpb25SZXBsYWNlZCArICdcXG4gJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbiB9KTsgXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICcgfSk7ICc7XG4gICAgICAgICAgICBjb25zdCB0anMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHRqcy5pbm5lckhUTUwgPSB0aGlzLnNjcmlwdDtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJVHRlbXBsLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0anMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlcXVpcmVkXG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZS5tYW5kYXRvcnkgJiYgdGhpcy5tb2RlID09PSAnVklFVycpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMubGVuZ3RoID4gMCAmJiBhdHRyaWJ1dGUubWFuZGF0b3J5LmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2NyaXB0ID0gJyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeyAgXFxuJztcbiAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uUmVwbGFjZWQgPSBhdHRyaWJ1dGUubWFuZGF0b3J5LmZ1bmN0aW9uO1xuICAgICAgICAgICAgICBsZXQgaWRFbGVtZW50ID0gJyc7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgICAgICBpZEVsZW1lbnQgPSBpdGVtLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMuZm9yRWFjaChkZXBlbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGRlcGVuZCArICdcIikuY2hhbmdlKFJlcXVpcmVkRnVuY18nICsgaWRFbGVtZW50ICsgJyk7IFxcbic7XG5cbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGRlcGVuZCkuam9pbihpdGVtLmNvZGUgKyAnXycgKyBkZXBlbmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGF0dHJpYnV0ZS5jb2RlKS5qb2luKGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ0hFQURFUicgfHwgdGhpcy5wb3NpdGlvbiA9PT0gJ0ZPT1RFUicpIHtcbiAgICAgICAgICAgICAgICBpZEVsZW1lbnQgPSBhdHRyaWJ1dGUuY29kZTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMuZm9yRWFjaChkZXBlbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGRlcGVuZCArICdcIikuY2hhbmdlKFJlcXVpcmVkRnVuY18nICsgaWRFbGVtZW50ICsgJyk7IFxcbic7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyBmdW5jdGlvbiBSZXF1aXJlZEZ1bmNfJyArIGlkRWxlbWVudCArICcoKXsgXFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJ2lmKCcgKyBmdW5jdGlvblJlcGxhY2VkICsgJyl7IFxcbic7XG4gICAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICckKFwiIycgKyBpZEVsZW1lbnQgKyAnXCIpLnByb3AoXCJyZXF1aXJlZFwiLHRydWUpOyBcXG4nO1xuICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnIH0gZWxzZSB7XFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGlkRWxlbWVudCArICdcIikucHJvcChcInJlcXVpcmVkXCIsZmFsc2UpOyBcXG4nO1xuICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnIH0gXFxuJyArXG4gICAgICAgICAgICAgICAgJyAgJChcIiMnICsgaWRFbGVtZW50ICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbn1cXG4nICtcbiAgICAgICAgICAgICAgICAnJChcIiMnICsgaWRFbGVtZW50ICsgJ1wiKS5jaGFuZ2UoZnVuY3Rpb24oKXsgXFxuJyArXG4gICAgICAgICAgICAgICAgJ2lmKCQodGhpcykucHJvcChcXCdyZXF1aXJlZFxcJykpe1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKT09XFwnXFwnKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoXCJuZy12YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLWludmFsaWRcIik7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgfVxcbicgK1xuICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAnICB9IGVsc2Uge1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJuZy1pbnZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcyhcIm5nLXZhbGlkXCIpKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnfVxcbicgK1xuICAgICAgICAgICAgICAgICcgICAgfSBlbHNlIHtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJuZy1pbnZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcyhcIm5nLXZhbGlkXCIpKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnfSk7XFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyB9KTsgXFxuJztcbiAgICAgICAgICAgICAgY29uc3QgdGpzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICB0anNzLmlubmVySFRNTCA9IHRoaXMuc2NyaXB0O1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlSVR0ZW1wbC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGpzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlZHRyaWdnZXIuZW1pdCh0cnVlKTtcbiAgICBpZiAodGhpcy5jbXBSZWYpIHtcbiAgICAgIHRoaXMuY21wUmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==