tnx-shared 5.3.211 → 5.3.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/bundles/tnx-shared.umd.js +228 -41
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/form-schema.d.ts +9 -0
  6. package/classes/form-schema.d.ts.map +1 -1
  7. package/components/crud/crud-form/crud-form.component.d.ts +3 -2
  8. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  9. package/components/html-preview/html-preview.component.d.ts +18 -0
  10. package/components/html-preview/html-preview.component.d.ts.map +1 -0
  11. package/components/html-preview/html-preview.component.ngfactory.d.ts.map +1 -0
  12. package/components/html-preview/html-preview.component.scss.shim.ngstyle.d.ts.map +1 -0
  13. package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -0
  14. package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
  15. package/esm2015/classes/form-schema.js +13 -1
  16. package/esm2015/components/crud/crud-form/crud-form.component.js +43 -5
  17. package/esm2015/components/html-preview/html-preview.component.js +122 -0
  18. package/esm2015/components/tn-tinymce/tn-tinymce.component.js +23 -31
  19. package/esm2015/services/common.service.js +5 -1
  20. package/esm2015/services/global.service.js +2 -1
  21. package/esm2015/tnx-shared.js +2 -1
  22. package/esm2015/tnx-shared.module.js +4 -2
  23. package/fesm2015/tnx-shared.js +200 -35
  24. package/fesm2015/tnx-shared.js.map +1 -1
  25. package/package.json +2 -2
  26. package/services/common.service.d.ts +1 -0
  27. package/services/common.service.d.ts.map +1 -1
  28. package/services/global.service.d.ts +1 -0
  29. package/services/global.service.d.ts.map +1 -1
  30. package/tnx-shared.d.ts +1 -0
  31. package/tnx-shared.d.ts.map +1 -1
  32. package/tnx-shared.metadata.json +1 -1
  33. package/tnx-shared.module.d.ts +2 -1
  34. package/tnx-shared.module.d.ts.map +1 -1
  35. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -0,0 +1,122 @@
1
+ /* eslint-disable prefer-const */
2
+ import { Component, EventEmitter, Injector, Input, Output, ViewChild } from '@angular/core';
3
+ import { ComponentContextService } from '../../app-context/component-context.service';
4
+ import { ComponentBase } from '../../classes/base/component-base';
5
+ import { HtmlPreviewControlSchema } from '../../classes/form-schema';
6
+ import { GlobalService } from '../../services/global.service';
7
+ export class HtmlPreviewComponent extends ComponentBase {
8
+ constructor(_injector, gs) {
9
+ super(_injector);
10
+ this.gs = gs;
11
+ this.content = '';
12
+ this.control = new HtmlPreviewControlSchema();
13
+ this.contentChange = new EventEmitter();
14
+ }
15
+ ngOnChanges(changes) {
16
+ if (changes['content']) {
17
+ this.renderMath();
18
+ }
19
+ }
20
+ renderMath() {
21
+ this.mathJaxObject = this.gs.nativeGlobal()['MathJax'];
22
+ if (!this.mathJaxObject && !this.mathContent) {
23
+ return;
24
+ }
25
+ setTimeout(() => {
26
+ var _a, _b;
27
+ const autoScrollBottom = !!((_a = this.control) === null || _a === void 0 ? void 0 : _a.autoScrollBottom);
28
+ const output = this.mathContent.nativeElement;
29
+ output.innerHTML = ((_b = this.content) === null || _b === void 0 ? void 0 : _b.trim()) || '';
30
+ this.mathJaxObject.texReset();
31
+ this.mathJaxObject.typesetClear();
32
+ this.mathJaxObject.typesetPromise([output]).catch(function (err) {
33
+ output.innerHTML = '';
34
+ output.appendChild(document.createTextNode(err.message));
35
+ console.error(err);
36
+ }).then(function () {
37
+ // Do something after typeset
38
+ if (autoScrollBottom) {
39
+ const box = document.querySelector('#math-preview-box');
40
+ const elem = box.getElementsByClassName('ps--active-y')[0];
41
+ if (elem) {
42
+ elem.scrollTop = elem.scrollHeight;
43
+ }
44
+ }
45
+ });
46
+ return this.mathJaxObject.startup.defaultPageReady();
47
+ });
48
+ }
49
+ loadMathConfig() {
50
+ var _a, _b, _c;
51
+ const wd = this.gs.nativeGlobal();
52
+ wd.MathJax = {
53
+ 'loader': { load: ['input/asciimath', 'output/chtml', 'ui/menu', 'output/svg', '[mml]/mml3'] },
54
+ 'tex': {
55
+ inlineMath: [['$', '$'], ['\\(', '\\)']],
56
+ processEscapes: true
57
+ },
58
+ 'startup': {
59
+ pageReady: () => this.renderMath()
60
+ },
61
+ 'svg': {
62
+ scale: 1,
63
+ minScale: .5
64
+ },
65
+ 'options': {
66
+ enableMenu: !!((_a = this.control) === null || _a === void 0 ? void 0 : _a.useMathJaxMenu),
67
+ menuOptions: {
68
+ settings: {
69
+ texHints: true,
70
+ semantics: false,
71
+ zoom: 'Double-Click',
72
+ zscale: '200%',
73
+ renderer: ((_b = this.control) === null || _b === void 0 ? void 0 : _b.mathJaxType) ? this.control.mathJaxType : 'CHTML',
74
+ scale: 1,
75
+ inTabOrder: true,
76
+ assistiveMml: true,
77
+ collapsible: false,
78
+ explorer: false, // true if the expression explorer should be active
79
+ },
80
+ annotationTypes: {
81
+ TeX: ['TeX', 'LaTeX', 'application/x-tex'],
82
+ StarMath: ['StarMath 5.0'],
83
+ Maple: ['Maple'],
84
+ ContentMathML: ['MathML-Content', 'application/mathml-content+xml'],
85
+ OpenMath: ['OpenMath']
86
+ }
87
+ }
88
+ }
89
+ };
90
+ const script = document.createElement('script');
91
+ if (((_c = this.control) === null || _c === void 0 ? void 0 : _c.mathJaxType) == 'SVG') {
92
+ script.src = 'assets/vendor/mathjax/tex-mml-svg.js';
93
+ }
94
+ else {
95
+ script.src = 'assets/vendor/mathjax/tex-mml-chtml.js';
96
+ }
97
+ script.setAttribute('id', 'MathJax-script');
98
+ document.head.appendChild(script);
99
+ }
100
+ ngOnInit() {
101
+ this.loadMathConfig();
102
+ }
103
+ }
104
+ HtmlPreviewComponent.decorators = [
105
+ { type: Component, args: [{
106
+ selector: 'html-preview',
107
+ template: "<div class=\"preview-box\" id=\"math-preview-box\" [ngStyle]=\"{'height': control.height + 'px'}\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\">\n <!-- <span #mathContent id=\"mathPreview\" [innerHTML]=\"content | safeHtml\"></span> -->\n <div #mathContent id=\"mathPreview\"></div>\n </tn-custom-scrollbar>\n</div>",
108
+ providers: [ComponentContextService],
109
+ styles: ["::ng-deep html-preview .preview-box{border:1px solid #ced4da;padding:10px}"]
110
+ },] }
111
+ ];
112
+ HtmlPreviewComponent.ctorParameters = () => [
113
+ { type: Injector },
114
+ { type: GlobalService }
115
+ ];
116
+ HtmlPreviewComponent.propDecorators = {
117
+ mathContent: [{ type: ViewChild, args: ['mathContent',] }],
118
+ content: [{ type: Input }],
119
+ control: [{ type: Input }],
120
+ contentChange: [{ type: Output }]
121
+ };
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2h0bWwtcHJldmlldy9odG1sLXByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFROUQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUFTbkQsWUFDSSxTQUFtQixFQUNaLEVBQWlCO1FBRXhCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUZWLE9BQUUsR0FBRixFQUFFLENBQWU7UUFSbkIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQTZCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUVsRSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFRbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxJ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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItY29uc3QgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEh0bWxQcmV2aWV3Q29udHJvbFNjaGVtYSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdodG1sLXByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9odG1sLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2h0bWwtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBIdG1sUHJldmlld0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ21hdGhDb250ZW50JykgbWF0aENvbnRlbnQ7XG5cbiAgICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBjb250cm9sOiBIdG1sUHJldmlld0NvbnRyb2xTY2hlbWEgPSBuZXcgSHRtbFByZXZpZXdDb250cm9sU2NoZW1hKCk7XG5cbiAgICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIG1hdGhKYXhPYmplY3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIGdzOiBHbG9iYWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snY29udGVudCddKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlck1hdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlck1hdGgoKSB7XG4gICAgICAgIHRoaXMubWF0aEpheE9iamVjdCA9IHRoaXMuZ3MubmF0aXZlR2xvYmFsKClbJ01hdGhKYXgnXTtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGhKYXhPYmplY3QgJiYgIXRoaXMubWF0aENvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dG9TY3JvbGxCb3R0b20gPSAhIXRoaXMuY29udHJvbD8uYXV0b1Njcm9sbEJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMubWF0aENvbnRlbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSB0aGlzLmNvbnRlbnQ/LnRyaW0oKSB8fCAnJztcbiAgICAgICAgICAgIHRoaXMubWF0aEpheE9iamVjdC50ZXhSZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5tYXRoSmF4T2JqZWN0LnR5cGVzZXRDbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5tYXRoSmF4T2JqZWN0LnR5cGVzZXRQcm9taXNlKFtvdXRwdXRdKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlcnIubWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIERvIHNvbWV0aGluZyBhZnRlciB0eXBlc2V0XG4gICAgICAgICAgICAgICAgaWYgKGF1dG9TY3JvbGxCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21hdGgtcHJldmlldy1ib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcy0tYWN0aXZlLXknKVswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGhKYXhPYmplY3Quc3RhcnR1cC5kZWZhdWx0UGFnZVJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRNYXRoQ29uZmlnKCkge1xuICAgICAgICBjb25zdCB3ZDogYW55ID0gdGhpcy5ncy5uYXRpdmVHbG9iYWwoKTtcbiAgICAgICAgd2QuTWF0aEpheCA9IHtcbiAgICAgICAgICAgICdsb2FkZXInOiB7IGxvYWQ6IFsnaW5wdXQvYXNjaWltYXRoJywgJ291dHB1dC9jaHRtbCcsICd1aS9tZW51JywgJ291dHB1dC9zdmcnLCAnW21tbF0vbW1sMyddIH0sXG4gICAgICAgICAgICAndGV4Jzoge1xuICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcXFwoJywgJ1xcXFwpJ11dLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3N0YXJ0dXAnOiB7XG4gICAgICAgICAgICAgICAgcGFnZVJlYWR5OiAoKSA9PiB0aGlzLnJlbmRlck1hdGgoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzdmcnOiB7XG4gICAgICAgICAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgbWluU2NhbGU6IC41XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ29wdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlTWVudTogISF0aGlzLmNvbnRyb2w/LnVzZU1hdGhKYXhNZW51LCAvLyBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgbWVudVxuICAgICAgICAgICAgICAgIG1lbnVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhIaW50czogdHJ1ZSwgLy8gcHV0IFRlWC1yZWxhdGVkIGF0dHJpYnV0ZXMgb24gTWF0aE1MXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY3M6IGZhbHNlLCAvLyBwdXQgb3JpZ2luYWwgZm9ybWF0IGluIDxzZW1hbnRpYz4gdGFnIGluIE1hdGhNTFxuICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogJ0RvdWJsZS1DbGljaycsIC8vIG9yICdDbGljaycgb3IgJ0RvdWJsZUNsaWNrJyBhcyB6b29tIHRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpzY2FsZTogJzIwMCUnLCAvLyB6b29tIHNjYWxpbmcgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcjogdGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA/IHRoaXMuY29udHJvbC5tYXRoSmF4VHlwZSA6ICdDSFRNTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMSwgLy8gc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBtYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBpblRhYk9yZGVyOiB0cnVlLCAvLyB0cnVlIGlmIHRhYmJpbmcgaW5jbHVkZXMgbWF0aFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3Npc3RpdmVNbWw6IHRydWUsIC8vIHRydWUgaWYgaGlkZGVuIGFzc2lzdGl2ZSBNYXRoTUwgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiBmYWxzZSwgLy8gdHJ1ZSBpZiBjb21wbGV4IG1hdGggc2hvdWxkIGJlIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JlcjogZmFsc2UsIC8vIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gZXhwbG9yZXIgc2hvdWxkIGJlIGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlWDogWydUZVgnLCAnTGFUZVgnLCAnYXBwbGljYXRpb24veC10ZXgnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJNYXRoOiBbJ1N0YXJNYXRoIDUuMCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWFwbGU6IFsnTWFwbGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRNYXRoTUw6IFsnTWF0aE1MLUNvbnRlbnQnLCAnYXBwbGljYXRpb24vbWF0aG1sLWNvbnRlbnQreG1sJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuTWF0aDogWydPcGVuTWF0aCddXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA9PSAnU1ZHJykge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1zdmcuanMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1jaHRtbC5qcyc7XG4gICAgICAgIH1cbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnaWQnLCAnTWF0aEpheC1zY3JpcHQnKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRNYXRoQ29uZmlnKCk7XG4gICAgfVxufVxuIl19
@@ -28,6 +28,7 @@ export class TnTinymceComponent extends ComponentBase {
28
28
  this.keydown = new EventEmitter();
29
29
  this.onBlur = new EventEmitter();
30
30
  this.onChanged = new EventEmitter();
31
+ this.onKeyUp = new EventEmitter();
31
32
  this.model = '';
32
33
  this.id = nanoid(8);
33
34
  this.dataEquation = {};
@@ -88,21 +89,6 @@ export class TnTinymceComponent extends ComponentBase {
88
89
  }
89
90
  getTinyMceConfigByMode(mode) {
90
91
  const $this = this;
91
- tinymce.PluginManager.add('equation', function (editor) {
92
- const openDialog = function () {
93
- $this.header = 'Công thức toán học (dùng laTex)';
94
- $this.equationFormModel.show = true;
95
- $this.popupSize = { width: 1200, height: 700 };
96
- };
97
- editor.ui.registry.addButton('equation', {
98
- tooltip: 'Công thức toán học vào nội dung',
99
- // icon: 'insert-character',
100
- icon: 'ltr',
101
- onAction: function () {
102
- openDialog();
103
- }
104
- });
105
- });
106
92
  tinymce.PluginManager.add('addNews', function (editor) {
107
93
  const openDialog = function () {
108
94
  $this.header = 'Thêm/Chọn tin bài';
@@ -209,6 +195,10 @@ export class TnTinymceComponent extends ComponentBase {
209
195
  if (e.target.nodeName.toLowerCase() == 'img' && e.target.classList.contains('latex')) {
210
196
  this.openDialog({ content: e.target.getAttribute('alt'), style: e.target.getAttribute('style'), height: e.target.getAttribute('height') });
211
197
  }
198
+ }).on('keyup', (e) => {
199
+ const content = editor.getContent();
200
+ this.onChange(content);
201
+ this.onKeyUp.emit(content);
212
202
  });
213
203
  editor.on('blur', (e) => {
214
204
  this.handleBlur();
@@ -225,6 +215,7 @@ export class TnTinymceComponent extends ComponentBase {
225
215
  content_css: [
226
216
  '/assets/vendor/tinymce/custom.css'
227
217
  ],
218
+ custom_elements: "style,link,~link",
228
219
  imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
229
220
  language: 'vi_VN',
230
221
  statusbar: false,
@@ -254,33 +245,33 @@ export class TnTinymceComponent extends ComponentBase {
254
245
  },
255
246
  mobile: {
256
247
  theme: 'silver',
257
- plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor equation'],
248
+ plugins: ['fullpage advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
258
249
  }
259
250
  };
260
251
  if (mode == 'full') {
261
252
  config.plugins = [
262
- 'advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus editFileNew addNews equation'
253
+ 'fullpage advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus editFileNew addNews'
263
254
  ];
264
- config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link editFileNew addNews | print removeformat undo redo | equation | fullscreen ';
265
- config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | equation | fullscreen';
255
+ config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link editFileNew addNews | print removeformat undo redo | fullscreen ';
256
+ config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
266
257
  return config;
267
258
  }
268
259
  else if (mode == 'medium') {
269
- config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor equation'];
270
- config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link | print removeformat undo redo | equation | fullscreen';
271
- config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | equation | fullscreen';
260
+ config.plugins = ['fullpage advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
261
+ config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link | print removeformat undo redo | fullscreen';
262
+ config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
272
263
  return config;
273
264
  }
274
265
  else if (mode == 'simple') {
275
- config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor equation'];
276
- config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | equation | fullscreen';
277
- config.mobile.toolbar = 'fullscreen | bold italic Strikethrough forecolor backcolor | bullist numlist | equation';
266
+ config.plugins = ['fullpage advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
267
+ config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
268
+ config.mobile.toolbar = 'fullscreen | bold italic Strikethrough forecolor backcolor | bullist numlist';
278
269
  return config;
279
270
  }
280
271
  else {
281
- config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor equation'];
282
- config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor| alignleft aligncenter alignright alignjustify | bullist numlist | equation';
283
- config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | equation | fullscreen';
272
+ config.plugins = ['fullpage advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
273
+ config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor| alignleft aligncenter alignright alignjustify | bullist numlist';
274
+ config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
284
275
  }
285
276
  config.paste_data_images = true;
286
277
  return config;
@@ -438,7 +429,7 @@ export class TnTinymceComponent extends ComponentBase {
438
429
  TnTinymceComponent.decorators = [
439
430
  { type: Component, args: [{
440
431
  selector: 'tn-tinymce',
441
- template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\"></textarea>\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"equationFormModel.show = false\">\n <tn-custom-scrollbar #scrollbar>\n <equation-editor [data]=\"dataEquation\">\n </equation-editor>\n </tn-custom-scrollbar>\n <ng-template #footer>\n <button icon=\"fas fa-check\" class=\"p-button-text\" [disabled]=\"model.submitting\" pButton type=\"button\"\n (click)=\"handleOk($event)\" [label]=\"'X\u00E1c nh\u1EADn' | translate\"></button>\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"p-button-text p-button-secondary\"\n type=\"button\" (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\n </ng-template>\n</tn-dialog>\n\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"isAddNews = false\">\n <add-news #listBase [languageCode]=\"languageCode\" (showChange)=\"showChanged($event)\"></add-news>\n</tn-dialog>\n\n<tn-dialog *ngIf=\"showTemplate\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\"\n [popupSize]=\"popupSize\" (onHide)=\"showTemplate = false\">\n <tn-template (onChanged)=\"addTemplate($event)\"></tn-template>\n</tn-dialog>\n\n<tn-dialog *ngIf=\"isAddFile\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"isAddFile = false\">\n <file-picker-dialog #formBase [parentModel]=\" model\" [parentContext]=\"context\" (closeForm)=\"isAddFile = false\"\n (onCancel)=\"handleRFCancel($event)\" (onChanged)=\"showChanged($event)\">\n </file-picker-dialog>\n</tn-dialog>",
432
+ template: "<input *ngIf=\"!_deviceDetectorService.isDesktop()\" class=\"input-tab-trap\" (focus)=\"focusTrap($event)\" />\n<textarea class=\"tinymce-control\" id={{id}} [ngStyle]=\"{height: height+'px'}\"></textarea>\n\n<tn-dialog #dialog *ngIf=\"equationFormModel.show\" [closeOnEscape]=\"false\"\n [header]=\"'C\u00F4ng th\u1EE9c to\u00E1n h\u1ECDc (d\u00F9ng laTex)' | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"equationFormModel.show = false\">\n <tn-custom-scrollbar #scrollbar>\n <equation-editor [data]=\"dataEquation\">\n </equation-editor>\n </tn-custom-scrollbar>\n <ng-template #footer>\n <button icon=\"fas fa-check\" class=\"p-button-text\" [disabled]=\"model.submitting\" pButton type=\"button\"\n (click)=\"handleOk($event)\" [label]=\"'X\u00E1c nh\u1EADn' | translate\"></button>\n <button icon=\"fas fa-undo\" [disabled]=\"model.submitting\" pButton class=\"p-button-text p-button-secondary\"\n type=\"button\" (click)=\"equationFormModel.show = false\" [label]=\"'FORM.CANCEL' | translate\"></button>\n </ng-template>\n</tn-dialog>\n<tn-dialog *ngIf=\"isAddNews\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"isAddNews = false\">\n <add-news #listBase [languageCode]=\"languageCode\" (showChange)=\"showChanged($event)\"></add-news>\n</tn-dialog>\n\n<tn-dialog *ngIf=\"showTemplate\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\"\n [popupSize]=\"popupSize\" (onHide)=\"showTemplate = false\">\n <tn-template (onChanged)=\"addTemplate($event)\"></tn-template>\n</tn-dialog>\n\n<tn-dialog *ngIf=\"isAddFile\" #dialog [styleClass]=\"'address-form'\" [header]=\"header | translate\" [popupSize]=\"popupSize\"\n (onHide)=\"isAddFile = false\">\n <file-picker-dialog #formBase [parentModel]=\" model\" [parentContext]=\"context\" (closeForm)=\"isAddFile = false\"\n (onCancel)=\"handleRFCancel($event)\" (onChanged)=\"showChanged($event)\">\n </file-picker-dialog>\n</tn-dialog>",
442
433
  providers: [
443
434
  {
444
435
  provide: NG_VALUE_ACCESSOR,
@@ -469,6 +460,7 @@ TnTinymceComponent.propDecorators = {
469
460
  onInit: [{ type: Output }],
470
461
  keydown: [{ type: Output }],
471
462
  onBlur: [{ type: Output }],
472
- onChanged: [{ type: Output }]
463
+ onChanged: [{ type: Output }],
464
+ onKeyUp: [{ type: Output }]
473
465
  };
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy90bi10aW55bWNlL3RuLXRpbnltY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBYTtJQXFDakQsWUFDSSxRQUFrQixFQUNYLHNCQUE2QyxFQUMxQyxnQkFBaUMsRUFDakMsWUFBaUMsRUFDakMsa0JBQXFDO1FBRS9DLEtBQUssQ0FBQyxRQUFRLENB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QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7WUFsZUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0Qix1aUVBQTBDO2dCQUUxQyxTQUFTLEVBQUU7b0JBQ1A7d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDakQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsdUJBQXVCO2lCQUMxQjs7YUFDSjs7O1lBMUI0RCxRQUFRO1lBRzVELHFCQUFxQjtZQU1yQixlQUFlO1lBRWYsbUJBQW1CO1lBSG5CLGlCQUFpQjs7OzJCQXFCckIsU0FBUyxTQUFDLHVCQUF1QjttQkFFakMsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxLQUFLOzBCQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtb2JqZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFcXVhdGlvbkVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2VxdWF0aW9uLWVkaXRvci9lcXVhdGlvbi1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XG5kZWNsYXJlIGxldCB0aW55bWNlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG4tdGlueW1jZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RuLXRpbnltY2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RuLXRpbnltY2UuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUblRpbnltY2VDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRuVGlueW1jZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChFcXVhdGlvbkVkaXRvckNvbXBvbmVudCkgZXF1YXRpb25Gb3JtOiBFcXVhdGlvbkVkaXRvckNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpIG1vZGU/OiAnYmFzaWMnIHwgJ21lZGl1bScgfCAnZnVsbCcgfCAnc2ltcGxlJyA9ICdiYXNpYyc7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhlaWdodCA9IDIwMDtcbiAgICBASW5wdXQoKSBmaWVsZCA9ICcnO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBsYW5ndWFnZUNvZGU7XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGtleWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgbW9kZWw6IGFueSA9ICcnO1xuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uO1xuICAgIGlkID0gbmFub2lkKDgpO1xuICAgIGVkaXRvcjogYW55O1xuICAgIGRhdGFFcXVhdGlvbjogYW55ID0ge307XG5cbiAgICBpc1Nob3cgPSBmYWxzZTtcbiAgICBpc0FkZE5ld3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIG1vZGVzID0ge307XG4gICAgaXNBZGRGaWxlID0gZmFsc2U7XG4gICAgaXMgPSBmYWxzZTtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICBlcXVhdGlvbkZvcm1Nb2RlbDogYW55ID0geyBzaG93OiBmYWxzZSB9O1xuICAgIHBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICB3aWR0aDogMTEwMCxcbiAgICAgICAgaGVpZ2h0OiA2NTBcbiAgICB9KTtcbiAgICBzaG93VGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZVNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgY29uc3QgbSA9IFsnYmFzaWMnLCAnbWVkaXVtJywgJ2Z1bGwnLCAnc2ltcGxlJ107XG4gICAgICAgIG0uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZUNvbnRlbnRJbnNlcnQoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgbW9kZSA9ICdzaW1wbGUnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubW9kZXNbbW9kZV07XG4gICAgICAgIGNvbmZpZy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW55bWNlLmluaXQoY29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAob2JqID09IG51bGwpIG9iaiA9ICcnO1xuICAgICAgICB0aGlzLm1vZGVsID0gb2JqO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodGhpcy5tb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgb3BlbkRpYWxvZyhkYXRhID0ge30pIHtcbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXRUaW55TWNlQ29uZmlnQnlNb2RlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSB0aGlzO1xuXG4gICAgICAgIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ2VxdWF0aW9uJywgZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnQ8O0bmcgdGjhu6ljIHRvw6FuIGjhu41jIChkw7luZyBsYVRleCknO1xuICAgICAgICAgICAgICAgICR0aGlzLmVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdlcXVhdGlvbicsIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnQ8O0bmcgdGjhu6ljIHRvw6FuIGjhu41jIHbDoG8gbuG7mWkgZHVuZycsXG4gICAgICAgICAgICAgICAgLy8gaWNvbjogJ2luc2VydC1jaGFyYWN0ZXInLFxuICAgICAgICAgICAgICAgIGljb246ICdsdHInLFxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdhZGROZXdzJywgZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu41uIHRpbiBiw6BpJztcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdhZGROZXdzJywge1xuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiB0aW4gYsOgaSB2w6BvIG7hu5lpIGR1bmcnLFxuICAgICAgICAgICAgICAgIGljb246ICdub24tYnJlYWtpbmcnLFxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCd0ZW1wbGF0ZScsIGZ1bmN0aW9uIChlZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buNbiB0ZW1wbGF0ZSc7XG4gICAgICAgICAgICAgICAgJHRoaXMuc2hvd1RlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAkdGhpcy5wb3B1cFNpemUgPSB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbigndGVtcGxhdGUnLCB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcDogJ1RlbXBsYXRlJyxcbiAgICAgICAgICAgICAgICBpY29uOiAndGVtcGxhdGUnLFxuICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5EaWFsb2coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGlueW1jZS5QbHVnaW5NYW5hZ2VyLmFkZCgnZWRpdEZpbGVOZXcnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7iW5oIHPhu61hIGZpbGUgY8OhIG5ow6JuJztcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZE5ld3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAkdGhpcy5pc0FkZEZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCdlZGl0RmlsZU5ldycsIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnVGjDqm0vQ2jDqG4g4bqjbmgsIHZpZGVvLCBmaWxlIHbDoG8gbuG7mWkgZHVuZycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2R1cGxpY2F0ZScsXG4gICAgICAgICAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjYWxsYmFja0Z1bmMgPSBlZGl0b3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRNb2RlKCdyZWFkb25seScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWRCb2R5ID0galF1ZXJ5KGVkaXRvci5pZnJhbWVFbGVtZW50KS5jb250ZW50cygpLmZpbmQoJ2JvZHknKTtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckhvbGRlciA9IGVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIGVkQm9keS5hZGRDbGFzcygnbW9iaWxlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVkQm9keS5vbignYmx1cicsIGUgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QucmVtb3ZlKCd0aW55bWNlLWZvY3VzJyk7XG4gICAgICAgICAgICB9KS5vbignZm9jdXMnLCBlID0+IHtcbiAgICAgICAgICAgICAgICBlZGl0b3JIb2xkZXIuY2xhc3NMaXN0LmFkZCgndGlueW1jZS1mb2N1cycpO1xuICAgICAgICAgICAgfSkub24oJ3Bhc3RlJywgKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzO1xuICAgICAgICAgICAgICAgIGlmICgoKHR5cGVzIGluc3RhbmNlb2YgRE9NU3RyaW5nTGlzdCkgJiYgdHlwZXMuY29udGFpbnMoJ3RleHQvaHRtbCcpKSB8fCAodHlwZXMuaW5kZXhPZiAmJiAodHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSB8fCB0eXBlcy5pbmRleE9mKCdGaWxlcycpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkGFuZyB0aeG6v24gaMOgbmggeOG7rSBsw70gbuG7mWkgZHVuZywgdnVpIGzDsm5nIGNo4budIHRyb25nIGdpw6J5IGzDoXQhJyk7XG4gICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZmlsZXM7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXN0ZWREYXRhID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXN0ZWRSdGZEYXRhID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkgfHwgKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkRGF0YSA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0KSAmJiBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5jb250YWlucygndGV4dC9ydGYnKSkgfHwgKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZigndGV4dC9ydGYnKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkUnRmRGF0YSA9IGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcnRmJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhc3RlKHR5cGVzLCBwYXN0ZWREYXRhLCBwYXN0ZWRSdGZEYXRhLCBmaWxlcykudGhlbigoY29udGVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGltZSB0byBydW4gaGFuZGxlUGFzdGUgaXMgJyArIChlbmQuZ2V0VGltZSgpIC0gYmVnaW4uZ2V0VGltZSgpKSArICdtcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLzwhXFxbaWZbXFxzXFxTXSo/Pi9nbSwgJycpLnJlcGxhY2UoLzwhXFxbZW5kaWZbXFxzXFxTXSo/Pi9nbSwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5ub3JtYWxpemVIVE1MKGNvbnRlbnQsICc8IVtpZiAhc3VwcG9ydExpc3RzXT4nLCAnPCFbZW5kaWZdPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5ub3JtYWxpemVIVE1MKGNvbnRlbnQsICc8IVtpZiAhbXNFcXVhdGlvbl0+JywgJzwhW2VuZGlmXT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgZmFsc2UsIGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLm9uKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleURvd24oZSwgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQ1RSTF9TKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS53aGljaCA9PSAyNykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RG93bihlLCBDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9FU0MpO1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkub24oJ2RibGNsaWNrJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW1nJyAmJiBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2xhdGV4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHsgY29udGVudDogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdhbHQnKSwgc3R5bGU6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSwgaGVpZ2h0OiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2JsdXInLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgfSkub24oJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KGNvbnRlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVkaXRvci5zZXRDb250ZW50KHRoaXMubW9kZWwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZzogYW55ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3I6ICcjJyArIHRoaXMuaWQsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudF9jc3M6IFtcbiAgICAgICAgICAgICAgICAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZS9jdXN0b20uY3NzJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGltYWdldG9vbHNfdG9vbGJhcjogJ3JvdGF0ZWxlZnQgcm90YXRlcmlnaHQgfCBmbGlwdiBmbGlwaCB8IGVkaXRpbWFnZSBpbWFnZW9wdGlvbnMnLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICd2aV9WTicsXG4gICAgICAgICAgICBzdGF0dXNiYXI6IGZhbHNlLFxuICAgICAgICAgICAgcmVsYXRpdmVfdXJsczogZmFsc2UsXG4gICAgICAgICAgICBjb252ZXJ0X3VybHM6IGZhbHNlLFxuICAgICAgICAgICAgdGFiZm9jdXNfZWxlbWVudHM6ICc6cHJldiw6bmV4dCcsXG4gICAgICAgICAgICBpbml0X2luc3RhbmNlX2NhbGxiYWNrOiBjYWxsYmFja0Z1bmMsXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnY3RybCtFJywgJ0NhbkdpdWEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUNlbnRlcicsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ2N0cmwrTCcsICdDYW5UcmFpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlMZWZ0JywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnY3RybCtSJywgJ0NhblBoYWknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeVJpZ2h0JywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnY3RybCtKJywgJ0NhbkRldScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5RnVsbCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ0FsdCtNJywgJ0x1aVZhbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdpbmRlbnQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdBbHQrTicsICdMdWlSYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdvdXRkZW50JywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vYmlsZToge1xuICAgICAgICAgICAgICAgIHRoZW1lOiAnc2lsdmVyJyxcbiAgICAgICAgICAgICAgICBwbHVnaW5zOiBbJ2Fkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciBlcXVhdGlvbiddLFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAobW9kZSA9PSAnZnVsbCcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gW1xuICAgICAgICAgICAgICAgICdhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyBlZGl0RmlsZU5ldyBhZGROZXdzIGVxdWF0aW9uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2Zvcm1hdHNlbGVjdCB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCBvdXRkZW50IGluZGVudCB8IHRhYmxlIGxpbmsgZWRpdEZpbGVOZXcgYWRkTmV3cyB8IHByaW50IHJlbW92ZWZvcm1hdCB1bmRvIHJlZG8gfCBlcXVhdGlvbiB8IGZ1bGxzY3JlZW4gJztcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBlcXVhdGlvbiB8IGZ1bGxzY3JlZW4nO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RlID09ICdtZWRpdW0nKSB7XG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yIGVxdWF0aW9uJ107XG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCBhbGlnbmp1c3RpZnkgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCB0YWJsZSBsaW5rICB8IHByaW50IHJlbW92ZWZvcm1hdCB1bmRvIHJlZG8gfCBlcXVhdGlvbiB8IGZ1bGxzY3JlZW4nO1xuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGVxdWF0aW9uIHwgZnVsbHNjcmVlbic7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3NpbXBsZScpIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3IgZXF1YXRpb24nXTtcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGVxdWF0aW9uIHwgZnVsbHNjcmVlbic7XG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnZnVsbHNjcmVlbiB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGVxdWF0aW9uJztcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25maWcucGx1Z2lucyA9IFsnYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yIGVxdWF0aW9uJ107XG4gICAgICAgICAgICBjb25maWcudG9vbGJhciA9ICdmb3JtYXRzZWxlY3QgfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3J8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IGJ1bGxpc3QgbnVtbGlzdCB8IGVxdWF0aW9uJztcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGVxdWF0aW9uIHwgZnVsbHNjcmVlbic7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUhUTUwoY29udGVudDogc3RyaW5nLCBiZWdpbjogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihiZWdpbik7XG4gICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleDIgPSBjb250ZW50LmluZGV4T2YoZW5kLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgyKSArIGNvbnRlbnQuc3Vic3RyaW5nKGluZGV4MiArIGVuZC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgaW5kZXgpICsgY29udGVudC5zdWJzdHJpbmcoaW5kZXggKyBiZWdpbi5sZW5ndGgpO1xuICAgICAgICAgICAgaW5kZXggPSBjb250ZW50LmluZGV4T2YoYmVnaW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIHRoaXMub25CbHVyLm5leHQoKTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZTogYW55LCB0b3BpYzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMua2V5ZG93bi5uZXh0KHsgZXZlbnQ6IGUsIHRvcGljIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZU9rKGV2dCkge1xuICAgICAgICBjb25zdCBodG1sID0gdGhpcy5lcXVhdGlvbkZvcm0ucHJldmlldy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBodG1sLmhlaWdodCA9IDQxO1xuICAgICAgICBsZXQgZGF0YSA9IGh0bWwub3V0ZXJIVE1MO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvd2lkdGhcXHMqPVxccypcIiguKz8pXCIvZywgJycpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVxdWF0aW9uRm9ybU1vZGVsLnNob3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb2N1c1RyYXAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pZnJhbWVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndGlueW1jZS1mb2N1cycpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGhhbmRsZVBhc3RlKHR5cGVzLCBwYXN0ZWREYXRhLCBwYXN0ZWRSdGZEYXRhLCBmaWxlcykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhc3RlZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ3RleHQvcnRmJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXBsb2FkZWQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvY20gPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHBhc3RlZERhdGEsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBkb2NtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMSA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleDIgPSBwYXN0ZWREYXRhLmluZGV4T2YoJy8+JywgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcGFzdGVkRGF0YS5zdWJzdHJpbmcoaW5kZXgyICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJbWcgPSBpbWFnZXNbaV0uaW5kZXhPZignPGltZyBzcmM9Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhJbWcgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW2ldID0gaW1hZ2VzW2ldLnN1YnN0cmluZyhpbmRleEltZyArIDEwLCBpbWFnZXNbaV0ubGVuZ3RoIC0gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVR5cGUgPSBpbWFnZXNbaV0uc3Vic3RyaW5nKDUsIGltYWdlc1tpXS5pbmRleE9mKCc7JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gaW1hZ2VzW2ldLnN1YnN0cmluZyhpbWFnZXNbaV0uaW5kZXhPZignYmFzZTY0LCcpICsgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZUJsb2IgPSB0aGlzLmRhdGFVUkl0b0Jsb2IoYmFzZTY0LCBpbWFnZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjQXJyID0gaW1nW2ldLnNyYy5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBzcmNBcnJbc3JjQXJyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtpbWFnZUJsb2JdLCBmaWxlTmFtZSwgeyB0eXBlOiBpbWFnZVR5cGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGxvYWRJbWFnZSA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLnVwbG9hZFdpdGhCeXRlQXJyYXkoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZEltYWdlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcGxvYWRlZC5wdXNoKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEltYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgdGjhuqV0IGLhuqFpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gcDEgKyAnPGltZyBzcmM9JyArIGltYWdlVXBsb2FkZWRbaV0gKyAnLz4nICsgcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY20gPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHBhc3RlZERhdGEsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyA9IGRvY20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVVwbG9hZGVkW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1tpXS5zcmMgPSBpbWFnZVVwbG9hZGVkW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdbaV0uYWx0ID0gaW1hZ2VVcGxvYWRlZFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlcy5pbmRleE9mKCdGaWxlcycpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZEltYWdlID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UudXBsb2FkV2l0aEJ5dGVBcnJheShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkSW1hZ2UgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzxpbWcgc3JjPScgKyB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRJbWFnZSkgKyAnLz4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1VwbG9hZCBmaWxlIHRo4bqldCBi4bqhaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlbkZpbGVNYW5hZ2VyKCkge1xuICAgICAgICB0aGlzLmlzU2hvdyA9IHRydWU7XG4gICAgfVxuICAgIHN1YnNjcmliZUNvbnRlbnRJbnNlcnQoKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKCdJTlNFUlRfQ09OVEVOVF9CT0RZJywgeCA9PiB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KHguY29udGVudCk7XG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRpbnltY2UuRWRpdG9yTWFuYWdlci5yZW1vdmUoJyMnICsgdGhpcy5pZCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUkZDYW5jZWwoZXZ0KSB7XG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hvd0NoYW5nZWQoZXZ0KSB7XG4gICAgICAgIHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGROZXdzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoZXZ0KTtcbiAgICB9XG5cbiAgICBhZGRUZW1wbGF0ZShldnQpIHtcbiAgICAgICAgdGhpcy5zaG93VGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudChldnQpO1xuICAgIH1cblxuICAgIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSwgZmlsZVR5cGUpIHtcbiAgICAgICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGRhdGFVUkkpO1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpbnQ4QXJyYXlbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtpbnQ4QXJyYXldLCB7IHR5cGU6IGZpbGVUeXBlIH0pO1xuICAgICAgICByZXR1cm4gYmxvYjtcbiAgICB9XG59XG4iXX0=
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tdGlueW1jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy90bi10aW55bWNlL3RuLXRpbnltY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBYTtJQXFDakQsWUFDSSxRQUFrQixFQUNYLHNCQUE2QyxFQUMxQyxnQkFBaUMsRUFDakMsWUFBaUMsRUFDakMsa0JBQXFDO1FBRS9DLEtBQUssQ0FBQyxRQUFRLENB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Q0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7O1lBeGRKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsdWlFQUEwQztnQkFFMUMsU0FBUyxFQUFFO29CQUNQO3dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNkO29CQUNELHVCQUF1QjtpQkFDMUI7O2FBQ0o7OztZQTFCNEQsUUFBUTtZQUc1RCxxQkFBcUI7WUFNckIsZUFBZTtZQUVmLG1CQUFtQjtZQUhuQixpQkFBaUI7OzsyQkFvQnJCLFNBQVMsU0FBQyx1QkFBdUI7bUJBRWpDLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7b0JBQ0wsS0FBSzswQkFDTCxLQUFLOzJCQUNMLEtBQUs7cUJBRUwsTUFBTTtzQkFDTixNQUFNO3FCQUNOLE1BQU07d0JBQ04sTUFBTTtzQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtb2JqZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFcXVhdGlvbkVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2VxdWF0aW9uLWVkaXRvci9lcXVhdGlvbi1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XG5kZWNsYXJlIGxldCB0aW55bWNlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG4tdGlueW1jZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RuLXRpbnltY2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RuLXRpbnltY2UuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUblRpbnltY2VDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRuVGlueW1jZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoRXF1YXRpb25FZGl0b3JDb21wb25lbnQpIGVxdWF0aW9uRm9ybTogRXF1YXRpb25FZGl0b3JDb21wb25lbnQ7XG5cbiAgICBASW5wdXQoKSBtb2RlPzogJ2Jhc2ljJyB8ICdtZWRpdW0nIHwgJ2Z1bGwnIHwgJ3NpbXBsZScgPSAnYmFzaWMnO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoZWlnaHQgPSAyMDA7XG4gICAgQElucHV0KCkgZmllbGQgPSAnJztcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgbGFuZ3VhZ2VDb2RlO1xuXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBrZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25LZXlVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgbW9kZWw6IGFueSA9ICcnO1xuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uO1xuICAgIGlkID0gbmFub2lkKDgpO1xuICAgIGVkaXRvcjogYW55O1xuICAgIGRhdGFFcXVhdGlvbjogYW55ID0ge307XG5cbiAgICBpc1Nob3cgPSBmYWxzZTtcbiAgICBpc0FkZE5ld3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIG1vZGVzID0ge307XG4gICAgaXNBZGRGaWxlID0gZmFsc2U7XG4gICAgaXMgPSBmYWxzZTtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICBlcXVhdGlvbkZvcm1Nb2RlbDogYW55ID0geyBzaG93OiBmYWxzZSB9O1xuICAgIHBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICB3aWR0aDogMTEwMCxcbiAgICAgICAgaGVpZ2h0OiA2NTBcbiAgICB9KTtcbiAgICBzaG93VGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZVNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgY29uc3QgbSA9IFsnYmFzaWMnLCAnbWVkaXVtJywgJ2Z1bGwnLCAnc2ltcGxlJ107XG4gICAgICAgIG0uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9kZXNbeF0gPSB0aGlzLmdldFRpbnlNY2VDb25maWdCeU1vZGUoeCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZUNvbnRlbnRJbnNlcnQoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgbW9kZSA9ICdzaW1wbGUnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubW9kZXNbbW9kZV07XG4gICAgICAgIGNvbmZpZy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW55bWNlLmluaXQoY29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAob2JqID09IG51bGwpIG9iaiA9ICcnO1xuICAgICAgICB0aGlzLm1vZGVsID0gb2JqO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodGhpcy5tb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgb3BlbkRpYWxvZyhkYXRhID0ge30pIHtcbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXRUaW55TWNlQ29uZmlnQnlNb2RlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSB0aGlzO1xuXG4gICAgICAgIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ2FkZE5ld3MnLCBmdW5jdGlvbiAoZWRpdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICR0aGlzLmhlYWRlciA9ICdUaMOqbS9DaOG7jW4gdGluIGLDoGknO1xuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkTmV3cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgJHRoaXMuaXNBZGRGaWxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgJHRoaXMucG9wdXBTaXplID0geyB3aWR0aDogMTIwMCwgaGVpZ2h0OiA3MDAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ2FkZE5ld3MnLCB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcDogJ1Row6ptL0Now6huIHRpbiBiw6BpIHbDoG8gbuG7mWkgZHVuZycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ25vbi1icmVha2luZycsXG4gICAgICAgICAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ3RlbXBsYXRlJywgZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkRpYWxvZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkdGhpcy5oZWFkZXIgPSAnVGjDqm0vQ2jhu41uIHRlbXBsYXRlJztcbiAgICAgICAgICAgICAgICAkdGhpcy5zaG93VGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICR0aGlzLnBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlZGl0b3IudWkucmVnaXN0cnkuYWRkQnV0dG9uKCd0ZW1wbGF0ZScsIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnVGVtcGxhdGUnLFxuICAgICAgICAgICAgICAgIGljb246ICd0ZW1wbGF0ZScsXG4gICAgICAgICAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdlZGl0RmlsZU5ldycsIGZ1bmN0aW9uIChlZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMuaGVhZGVyID0gJ1Row6ptL0No4buJbmggc+G7rWEgZmlsZSBjw6EgbmjDom4nO1xuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkTmV3cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICR0aGlzLmlzQWRkRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgJHRoaXMucG9wdXBTaXplID0geyB3aWR0aDogMTIwMCwgaGVpZ2h0OiA3MDAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ2VkaXRGaWxlTmV3Jywge1xuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdUaMOqbS9DaMOobiDhuqNuaCwgdmlkZW8sIGZpbGUgdsOgbyBu4buZaSBkdW5nJyxcbiAgICAgICAgICAgICAgICBpY29uOiAnZHVwbGljYXRlJyxcbiAgICAgICAgICAgICAgICBvbkFjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBvcGVuRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrRnVuYyA9IGVkaXRvciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLnNldE1vZGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlZEJvZHkgPSBqUXVlcnkoZWRpdG9yLmlmcmFtZUVsZW1lbnQpLmNvbnRlbnRzKCkuZmluZCgnYm9keScpO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9ySG9sZGVyID0gZWRpdG9yLmlmcmFtZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgZWRCb2R5LmFkZENsYXNzKCdtb2JpbGUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWRCb2R5Lm9uKCdibHVyJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgZWRpdG9ySG9sZGVyLmNsYXNzTGlzdC5yZW1vdmUoJ3RpbnltY2UtZm9jdXMnKTtcbiAgICAgICAgICAgIH0pLm9uKCdmb2N1cycsIGUgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvckhvbGRlci5jbGFzc0xpc3QuYWRkKCd0aW55bWNlLWZvY3VzJyk7XG4gICAgICAgICAgICB9KS5vbigncGFzdGUnLCAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVnaW4gPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXM7XG4gICAgICAgICAgICAgICAgaWYgKCgodHlwZXMgaW5zdGFuY2VvZiBET01TdHJpbmdMaXN0KSAmJiB0eXBlcy5jb250YWlucygndGV4dC9odG1sJykpIHx8ICh0eXBlcy5pbmRleE9mICYmICh0eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSAhPT0gLTEpIHx8IHR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQYW5nIHRp4bq/biBow6BuaCB44butIGzDvSBu4buZaSBkdW5nLCB2dWkgbMOybmcgY2jhu50gdHJvbmcgZ2nDonkgbMOhdCEnKTtcbiAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhc3RlZERhdGEgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhc3RlZFJ0ZkRhdGEgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuY29udGFpbnMoJ3RleHQvaHRtbCcpKSB8fCAoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZiAmJiBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcyBpbnN0YW5jZW9mIERPTVN0cmluZ0xpc3QpICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L3J0ZicpKSB8fCAoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZiAmJiBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mKCd0ZXh0L3J0ZicpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZWRSdGZEYXRhID0gZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9ydGYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFzdGUodHlwZXMsIHBhc3RlZERhdGEsIHBhc3RlZFJ0ZkRhdGEsIGZpbGVzKS50aGVuKChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaW1lIHRvIHJ1biBoYW5kbGVQYXN0ZSBpcyAnICsgKGVuZC5nZXRUaW1lKCkgLSBiZWdpbi5nZXRUaW1lKCkpICsgJ21zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvPCFcXFtpZltcXHNcXFNdKj8+L2dtLCAnJykucmVwbGFjZSgvPCFcXFtlbmRpZltcXHNcXFNdKj8+L2dtLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFzdXBwb3J0TGlzdHNdPicsICc8IVtlbmRpZl0+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZUhUTUwoY29udGVudCwgJzwhW2lmICFtc0VxdWF0aW9uXT4nLCAnPCFbZW5kaWZdPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkub24oJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RG93bihlLCBDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9DVFJMX1MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLndoaWNoID09IDI3KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlEb3duKGUsIENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQyk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5vbignZGJsY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbWcnICYmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbGF0ZXgnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5EaWFsb2coeyBjb250ZW50OiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpLCBzdHlsZTogZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdzdHlsZScpLCBoZWlnaHQ6IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnaGVpZ2h0JykgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkub24oJ2tleXVwJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25LZXlVcC5lbWl0KGNvbnRlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVkaXRvci5vbignYmx1cicsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICB9KS5vbignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoY29udGVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWRpdG9yLnNldENvbnRlbnQodGhpcy5tb2RlbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjogJyMnICsgdGhpcy5pZCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBjb250ZW50X2NzczogW1xuICAgICAgICAgICAgICAgICcvYXNzZXRzL3ZlbmRvci90aW55bWNlL2N1c3RvbS5jc3MnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY3VzdG9tX2VsZW1lbnRzOlwic3R5bGUsbGluayx+bGlua1wiLFxuICAgICAgICAgICAgaW1hZ2V0b29sc190b29sYmFyOiAncm90YXRlbGVmdCByb3RhdGVyaWdodCB8IGZsaXB2IGZsaXBoIHwgZWRpdGltYWdlIGltYWdlb3B0aW9ucycsXG4gICAgICAgICAgICBsYW5ndWFnZTogJ3ZpX1ZOJyxcbiAgICAgICAgICAgIHN0YXR1c2JhcjogZmFsc2UsXG4gICAgICAgICAgICByZWxhdGl2ZV91cmxzOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnZlcnRfdXJsczogZmFsc2UsXG4gICAgICAgICAgICB0YWJmb2N1c19lbGVtZW50czogJzpwcmV2LDpuZXh0JyxcbiAgICAgICAgICAgIGluaXRfaW5zdGFuY2VfY2FsbGJhY2s6IGNhbGxiYWNrRnVuYyxcbiAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiAoZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK0UnLCAnQ2FuR2l1YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5Q2VudGVyJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnY3RybCtMJywgJ0NhblRyYWknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgnSnVzdGlmeUxlZnQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK1InLCAnQ2FuUGhhaScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdKdXN0aWZ5UmlnaHQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZFNob3J0Y3V0KCdjdHJsK0onLCAnQ2FuRGV1JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ0p1c3RpZnlGdWxsJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5hZGRTaG9ydGN1dCgnQWx0K00nLCAnTHVpVmFvJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZGl0b3IuYWRkU2hvcnRjdXQoJ0FsdCtOJywgJ0x1aVJhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoJ291dGRlbnQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW9iaWxlOiB7XG4gICAgICAgICAgICAgICAgdGhlbWU6ICdzaWx2ZXInLFxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFsnZnVsbHBhZ2UgYWR2bGlzdCBhdXRvbGluayBsaXN0cyBsaW5rIGltYWdlIGNoYXJtYXAgcHJpbnQgcHJldmlldyBhbmNob3IgdGV4dGNvbG9yIHNlYXJjaHJlcGxhY2UgdmlzdWFsYmxvY2tzIGNvZGUgZnVsbHNjcmVlbiBpbnNlcnRkYXRldGltZSBtZWRpYSB0YWJsZSBtZWRpYSBjb2RlIGxpc3RzIGNvbG9ycGlja2VyIGltYWdldG9vbHMgdGFiZm9jdXMgdGV4dGNvbG9yJ10sXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChtb2RlID09ICdmdWxsJykge1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbXG4gICAgICAgICAgICAgICAgJ2Z1bGxwYWdlIGFkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIGVkaXRGaWxlTmV3IGFkZE5ld3MnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnZm9ybWF0c2VsZWN0IHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgdGFibGUgbGluayBlZGl0RmlsZU5ldyBhZGROZXdzIHwgcHJpbnQgcmVtb3ZlZm9ybWF0IHVuZG8gcmVkbyB8IGZ1bGxzY3JlZW4gJztcbiAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUudG9vbGJhciA9ICdib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QgfCBmdWxsc2NyZWVuJztcbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kZSA9PSAnbWVkaXVtJykge1xuICAgICAgICAgICAgY29uZmlnLnBsdWdpbnMgPSBbJ2Z1bGxwYWdlIGFkdmxpc3QgYXV0b2xpbmsgbGlzdHMgbGluayBpbWFnZSBjaGFybWFwIHByaW50IHByZXZpZXcgYW5jaG9yIHRleHRjb2xvciBzZWFyY2hyZXBsYWNlIHZpc3VhbGJsb2NrcyBjb2RlIGZ1bGxzY3JlZW4gaW5zZXJ0ZGF0ZXRpbWUgbWVkaWEgdGFibGUgbWVkaWEgY29kZSBsaXN0cyBjb2xvcnBpY2tlciBpbWFnZXRvb2xzIHRhYmZvY3VzIHRleHRjb2xvciddO1xuICAgICAgICAgICAgY29uZmlnLnRvb2xiYXIgPSAnZm9ybWF0c2VsZWN0IHwgYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgdGFibGUgbGluayAgfCBwcmludCByZW1vdmVmb3JtYXQgdW5kbyByZWRvIHwgZnVsbHNjcmVlbic7XG4gICAgICAgICAgICBjb25maWcubW9iaWxlLnRvb2xiYXIgPSAnYm9sZCBpdGFsaWMgU3RyaWtldGhyb3VnaCBmb3JlY29sb3IgYmFja2NvbG9yIHwgYnVsbGlzdCBudW1saXN0IHwgZnVsbHNjcmVlbic7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3NpbXBsZScpIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydmdWxscGFnZSBhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xuICAgICAgICAgICAgY29uZmlnLm1vYmlsZS50b29sYmFyID0gJ2Z1bGxzY3JlZW4gfCBib2xkIGl0YWxpYyBTdHJpa2V0aHJvdWdoIGZvcmVjb2xvciBiYWNrY29sb3IgfCBidWxsaXN0IG51bWxpc3QnO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5zID0gWydmdWxscGFnZSBhZHZsaXN0IGF1dG9saW5rIGxpc3RzIGxpbmsgaW1hZ2UgY2hhcm1hcCBwcmludCBwcmV2aWV3IGFuY2hvciB0ZXh0Y29sb3Igc2VhcmNocmVwbGFjZSB2aXN1YWxibG9ja3MgY29kZSBmdWxsc2NyZWVuIGluc2VydGRhdGV0aW1lIG1lZGlhIHRhYmxlIG1lZGlhIGNvZGUgbGlzdHMgY29sb3JwaWNrZXIgaW1hZ2V0b29scyB0YWJmb2N1cyB0ZXh0Y29sb3InXTtcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2Zvcm1hdHNlbGVjdCB8IGJvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvcnwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IHwgYnVsbGlzdCBudW1saXN0JztcbiAgICAgICAgICAgIGNvbmZpZy50b29sYmFyID0gJ2JvbGQgaXRhbGljIFN0cmlrZXRocm91Z2ggZm9yZWNvbG9yIGJhY2tjb2xvciB8IGJ1bGxpc3QgbnVtbGlzdCB8IGZ1bGxzY3JlZW4nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLnBhc3RlX2RhdGFfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBub3JtYWxpemVIVE1MKGNvbnRlbnQ6IHN0cmluZywgYmVnaW46IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaW5kZXggPSBjb250ZW50LmluZGV4T2YoYmVnaW4pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gY29udGVudC5pbmRleE9mKGVuZCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGluZGV4MiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4MikgKyBjb250ZW50LnN1YnN0cmluZyhpbmRleDIgKyBlbmQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4KSArIGNvbnRlbnQuc3Vic3RyaW5nKGluZGV4ICsgYmVnaW4ubGVuZ3RoKTtcbiAgICAgICAgICAgIGluZGV4ID0gY29udGVudC5pbmRleE9mKGJlZ2luKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLm9uQmx1ci5uZXh0KCk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGU6IGFueSwgdG9waWM6IHN0cmluZykge1xuICAgICAgICB0aGlzLmtleWRvd24ubmV4dCh7IGV2ZW50OiBlLCB0b3BpYyB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVPayhldnQpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuZXF1YXRpb25Gb3JtLnByZXZpZXcubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaHRtbC5oZWlnaHQgPSA0MTtcbiAgICAgICAgbGV0IGRhdGEgPSBodG1sLm91dGVySFRNTDtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL3dpZHRoXFxzKj1cXHMqXCIoLis/KVwiL2csICcnKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcXVhdGlvbkZvcm1Nb2RlbC5zaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9jdXNUcmFwKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaWZyYW1lRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RpbnltY2UtZm9jdXMnKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBoYW5kbGVQYXN0ZSh0eXBlcywgcGFzdGVkRGF0YSwgcGFzdGVkUnRmRGF0YSwgZmlsZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwYXN0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCd0ZXh0L3J0ZicpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFzdGVkRGF0YS5pbmRleE9mKCc8djppbWFnZWRhdGEgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVVwbG9hZGVkID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb2NtID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXN0ZWREYXRhLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gZG9jbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSBwYXN0ZWREYXRhLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gcGFzdGVkRGF0YS5pbmRleE9mKCcvPicsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKGluZGV4MiArIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4SW1nID0gaW1hZ2VzW2ldLmluZGV4T2YoJzxpbWcgc3JjPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4SW1nICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1tpXSA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW5kZXhJbWcgKyAxMCwgaW1hZ2VzW2ldLmxlbmd0aCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VUeXBlID0gaW1hZ2VzW2ldLnN1YnN0cmluZyg1LCBpbWFnZXNbaV0uaW5kZXhPZignOycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGltYWdlc1tpXS5zdWJzdHJpbmcoaW1hZ2VzW2ldLmluZGV4T2YoJ2Jhc2U2NCwnKSArIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VCbG9iID0gdGhpcy5kYXRhVVJJdG9CbG9iKGJhc2U2NCwgaW1hZ2VUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY0FyciA9IGltZ1tpXS5zcmMuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gc3JjQXJyW3NyY0Fyci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbaW1hZ2VCbG9iXSwgZmlsZU5hbWUsIHsgdHlwZTogaW1hZ2VUeXBlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkSW1hZ2UgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS51cGxvYWRXaXRoQnl0ZUFycmF5KGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXBsb2FkZWQucHVzaCh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRJbWFnZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdVcGxvYWQgZmlsZSB0aOG6pXQgYuG6oWknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZERhdGEgPSBwMSArICc8aW1nIHNyYz0nICsgaW1hZ2VVcGxvYWRlZFtpXSArICcvPicgKyBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXN0ZWREYXRhLmluZGV4T2YoJzx2OmltYWdlZGF0YSAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocGFzdGVkRGF0YSwgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nID0gZG9jbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlVXBsb2FkZWRbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nW2ldLnNyYyA9IGltYWdlVXBsb2FkZWRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1tpXS5hbHQgPSBpbWFnZVVwbG9hZGVkW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2NtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkSW1hZ2UgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS51cGxvYWRXaXRoQnl0ZUFycmF5KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRJbWFnZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPGltZyBzcmM9JyArIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEltYWdlKSArICcvPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1VwbG9hZCBmaWxlIHRo4bqldCBi4bqhaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5GaWxlTWFuYWdlcigpIHtcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xuICAgIH1cbiAgICBzdWJzY3JpYmVDb250ZW50SW5zZXJ0KCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZSgnSU5TRVJUX0NPTlRFTlRfQk9EWScsIHggPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0Q29udGVudCh4LmNvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aW55bWNlLkVkaXRvck1hbmFnZXIucmVtb3ZlKCcjJyArIHRoaXMuaWQpO1xuICAgIH1cblxuICAgIGhhbmRsZVJGQ2FuY2VsKGV2dCkge1xuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNob3dDaGFuZ2VkKGV2dCkge1xuICAgICAgICB0aGlzLmlzQWRkRmlsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQWRkTmV3cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRDb250ZW50KGV2dCk7XG4gICAgfVxuXG4gICAgYWRkVGVtcGxhdGUoZXZ0KSB7XG4gICAgICAgIHRoaXMuc2hvd1RlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRpdG9yLmluc2VydENvbnRlbnQoZXZ0KTtcbiAgICB9XG5cbiAgICBkYXRhVVJJdG9CbG9iKGRhdGFVUkksIGZpbGVUeXBlKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihkYXRhVVJJKTtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaW50OEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW50OEFycmF5XSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGJsb2I7XG4gICAgfVxufVxuIl19