angular-three 2.5.0 → 2.5.2
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.
- package/esm2022/lib/canvas.mjs +3 -3
- package/esm2022/lib/directives/args.mjs +3 -3
- package/esm2022/lib/directives/selection.mjs +6 -6
- package/esm2022/lib/html.mjs +9 -8
- package/esm2022/lib/instance.mjs +2 -2
- package/esm2022/lib/pipes/hexify.mjs +3 -3
- package/esm2022/lib/portal.mjs +9 -9
- package/esm2022/lib/renderer/constants.mjs +2 -1
- package/esm2022/lib/renderer/index.mjs +17 -28
- package/esm2022/lib/routed-scene.mjs +3 -3
- package/esm2022/lib/utils/object-events.mjs +3 -3
- package/esm2022/nativescript/lib/canvas.mjs +3 -3
- package/esm2022/testing/lib/test-canvas.mjs +3 -3
- package/fesm2022/angular-three-nativescript.mjs +3 -3
- package/fesm2022/angular-three-testing.mjs +3 -3
- package/fesm2022/angular-three.mjs +54 -63
- package/fesm2022/angular-three.mjs.map +1 -1
- package/lib/canvas.d.ts +97 -97
- package/lib/html.d.ts +1 -1
- package/lib/portal.d.ts +1 -1
- package/lib/renderer/constants.d.ts +1 -0
- package/lib/utils/make.d.ts +1 -1
- package/nativescript/lib/canvas.d.ts +3 -3
- package/package.json +1 -1
- package/plugin/src/generators/version.d.ts +4 -4
- package/plugin/src/generators/version.js +4 -4
- package/testing/lib/utils/web-gl-rendering-context.d.ts +1 -1
|
@@ -5,9 +5,8 @@ import { getLocalState, prepare } from '../instance';
|
|
|
5
5
|
import { NGT_STORE, injectStore, provideStore } from '../store';
|
|
6
6
|
import { applyProps } from '../utils/apply-props';
|
|
7
7
|
import { is } from '../utils/is';
|
|
8
|
-
import { signalStore } from '../utils/signal-store';
|
|
9
8
|
import { injectCatalogue } from './catalogue';
|
|
10
|
-
import { HTML, NON_ROOT, ROUTED_SCENE, SPECIAL_DOM_TAG, SPECIAL_INTERNAL_ADD_COMMENT, SPECIAL_PROPERTIES, } from './constants';
|
|
9
|
+
import { DOM_PARENT, HTML, NON_ROOT, ROUTED_SCENE, SPECIAL_DOM_TAG, SPECIAL_INTERNAL_ADD_COMMENT, SPECIAL_PROPERTIES, } from './constants';
|
|
11
10
|
import { addChild, createNode, getClosestParentWithInstance, isDOM, removeChild, setParent, } from './state';
|
|
12
11
|
import { attachThreeChild, kebabToPascal, processThreeEvent, removeThreeChild } from './utils';
|
|
13
12
|
import * as i0 from "@angular/core";
|
|
@@ -42,10 +41,10 @@ export class NgtRendererFactory {
|
|
|
42
41
|
}
|
|
43
42
|
return renderer;
|
|
44
43
|
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
46
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
44
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtRendererFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
45
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtRendererFactory }); }
|
|
47
46
|
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtRendererFactory, decorators: [{
|
|
49
48
|
type: Injectable
|
|
50
49
|
}] });
|
|
51
50
|
export class NgtRenderer {
|
|
@@ -90,19 +89,7 @@ export class NgtRenderer {
|
|
|
90
89
|
return createNode('portal', element, this.document);
|
|
91
90
|
}
|
|
92
91
|
if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
|
|
93
|
-
|
|
94
|
-
return createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } },
|
|
95
|
-
// NOTE: we assign this manually to a raw value node
|
|
96
|
-
// because we say it is a 'three' node but we're not using prepare()
|
|
97
|
-
{
|
|
98
|
-
__ngt__: {
|
|
99
|
-
isRaw: true,
|
|
100
|
-
instanceStore,
|
|
101
|
-
setParent(parent) {
|
|
102
|
-
instanceStore.update({ parent });
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
}), this.document);
|
|
92
|
+
return createNode('three', prepare({ __ngt_renderer__: { rawValue: undefined } }, { store: this.rootStore, isRaw: true }), this.document);
|
|
106
93
|
}
|
|
107
94
|
const [injectedArgs] = [this.getNgtArgs()?.value || []];
|
|
108
95
|
if (name === SPECIAL_DOM_TAG.NGT_PRIMITIVE) {
|
|
@@ -137,8 +124,8 @@ export class NgtRenderer {
|
|
|
137
124
|
createComment(value) {
|
|
138
125
|
const comment = this.delegate.createComment(value);
|
|
139
126
|
// NOTE: we attach an arrow function to the Comment node
|
|
140
|
-
//
|
|
141
|
-
//
|
|
127
|
+
// In our directives, we can call this function to then start tracking the RendererNode
|
|
128
|
+
// this is done to limit the amount of Nodes we need to process for getCreationState
|
|
142
129
|
comment[SPECIAL_INTERNAL_ADD_COMMENT] = (node) => {
|
|
143
130
|
if (node === 'args') {
|
|
144
131
|
this.argsCommentNodes.push(comment);
|
|
@@ -155,8 +142,8 @@ export class NgtRenderer {
|
|
|
155
142
|
if (pRS[0 /* NgtRendererClassId.type */] === 'dom' &&
|
|
156
143
|
(newChild instanceof Text || cRS[0 /* NgtRendererClassId.type */] === 'dom')) {
|
|
157
144
|
addChild(parent, newChild);
|
|
158
|
-
if (newChild[
|
|
159
|
-
this.delegate.appendChild(newChild[
|
|
145
|
+
if (newChild[DOM_PARENT] && newChild[DOM_PARENT] instanceof HTMLElement) {
|
|
146
|
+
this.delegate.appendChild(newChild[DOM_PARENT], newChild);
|
|
160
147
|
return;
|
|
161
148
|
}
|
|
162
149
|
this.delegate.appendChild(parent, newChild);
|
|
@@ -311,7 +298,7 @@ export class NgtRenderer {
|
|
|
311
298
|
localState.attach = paths;
|
|
312
299
|
}
|
|
313
300
|
}
|
|
314
|
-
else
|
|
301
|
+
else {
|
|
315
302
|
// NOTE: coercion
|
|
316
303
|
let maybeCoerced = value;
|
|
317
304
|
if (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {
|
|
@@ -320,10 +307,12 @@ export class NgtRenderer {
|
|
|
320
307
|
else if (!isNaN(Number(maybeCoerced))) {
|
|
321
308
|
maybeCoerced = Number(maybeCoerced);
|
|
322
309
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
310
|
+
if (name === SPECIAL_PROPERTIES.RAW_VALUE) {
|
|
311
|
+
rS[4 /* NgtRendererClassId.rawValue */] = maybeCoerced;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
applyProps(el, { [name]: maybeCoerced });
|
|
315
|
+
}
|
|
327
316
|
}
|
|
328
317
|
return false;
|
|
329
318
|
}
|
|
@@ -552,4 +541,4 @@ export function provideNgtRenderer(store) {
|
|
|
552
541
|
}
|
|
553
542
|
export { extend } from './catalogue';
|
|
554
543
|
export { HTML, NON_ROOT, ROUTED_SCENE } from './constants';
|
|
555
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBRVYsZ0JBQWdCLEVBRWhCLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBQ04sSUFBSSxFQUNKLFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxFQUNmLDRCQUE0QixFQUM1QixrQkFBa0IsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUdOLFFBQVEsRUFDUixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxHQUNULE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUduSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9C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R0FBRztRQUNqQixrQkFBa0I7UUFDbEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO1FBQzlELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDekIsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0RGVidWdOb2RlLFxuXHRJbmplY3RhYmxlLFxuXHRSZW5kZXJlcjIsXG5cdFJlbmRlcmVyRmFjdG9yeTIsXG5cdFJlbmRlcmVyVHlwZTIsXG5cdGluamVjdCxcblx0bWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYXJncyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTkdUX1NUT1JFLCBpbmplY3RTdG9yZSwgcHJvdmlkZVN0b3JlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkLCBOZ3RJbnN0YW5jZU5vZGUsIE5ndExvY2FsU3RhdGUsIE5ndFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUsIHNpZ25hbFN0b3JlIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IE5ndEFueUNvbnN0cnVjdG9yLCBpbmplY3RDYXRhbG9ndWUgfSBmcm9tICcuL2NhdGFsb2d1ZSc7XG5pbXBvcnQge1xuXHRIVE1MLFxuXHROT05fUk9PVCxcblx0Uk9VVEVEX1NDRU5FLFxuXHRTUEVDSUFMX0RPTV9UQUcsXG5cdFNQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlQsXG5cdFNQRUNJQUxfUFJPUEVSVElFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0Tmd0UmVuZGVyZXJOb2RlLFxuXHROZ3RSZW5kZXJlclN0YXRlLFxuXHRhZGRDaGlsZCxcblx0Y3JlYXRlTm9kZSxcblx0Z2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZSxcblx0aXNET00sXG5cdHJlbW92ZUNoaWxkLFxuXHRzZXRQYXJlbnQsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkLCBhdHRhY2hUaHJlZUNoaWxkLCBrZWJhYlRvUGFzY2FsLCBwcm9jZXNzVGhyZWVFdmVudCwgcmVtb3ZlVGhyZWVDaGlsZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJGYWN0b3J5IGltcGxlbWVudHMgUmVuZGVyZXJGYWN0b3J5MiB7XG5cdHByaXZhdGUgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcblx0cHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cdHByaXZhdGUgY2F0YWxvZ3VlID0gaW5qZWN0Q2F0YWxvZ3VlKCk7XG5cdHByaXZhdGUgcm9vdFN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblxuXHRwcml2YXRlIHBvcnRhbENvbW1lbnRzTm9kZXM6IEFycmF5PE5ndFJlbmRlcmVyTm9kZT4gPSBbXTtcblx0cHJpdmF0ZSByZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG5cdHByaXZhdGUgcm91dGVkU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0Y3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuXHRcdGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcblxuXHRcdGlmICghdHlwZSkgcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cblx0XHQvLyBOT1RFOiBtaWdodCBuZWVkIHRvIHJldmlzaXQgdGhpc1xuXHRcdGlmICgodHlwZSBhcyBOZ3RBbnlSZWNvcmQpWyd0eXBlJ11bSFRNTF0pIHtcblx0XHRcdHRoaXMucmVuZGVyZXJNYXAuc2V0KHR5cGUuaWQsIGRlbGVnYXRlUmVuZGVyZXIpO1xuXHRcdFx0cmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtST1VURURfU0NFTkVdKSB7XG5cdFx0XHR0aGlzLnJvdXRlZFNldC5hZGQodHlwZS5pZCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNOb25Sb290ID0gKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW05PTl9ST09UXTtcblxuXHRcdGxldCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXJNYXAuZ2V0KHR5cGUuaWQpO1xuXHRcdGlmICghcmVuZGVyZXIpIHtcblx0XHRcdHRoaXMucmVuZGVyZXJNYXAuc2V0KFxuXHRcdFx0XHR0eXBlLmlkLFxuXHRcdFx0XHQocmVuZGVyZXIgPSBuZXcgTmd0UmVuZGVyZXIoXG5cdFx0XHRcdFx0ZGVsZWdhdGVSZW5kZXJlcixcblx0XHRcdFx0XHR0aGlzLnJvb3RTdG9yZSxcblx0XHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcyxcblx0XHRcdFx0XHR0aGlzLmNhdGFsb2d1ZSxcblx0XHRcdFx0XHQvLyBzZXR0aW5nIHJvb3Qgc2NlbmUgaWYgdGhlcmUncyBubyByb3V0ZWQgc2NlbmUgT1IgdGhpcyBjb21wb25lbnQgaXMgdGhlIHJvdXRlZCBTY2VuZVxuXHRcdFx0XHRcdCFob3N0RWxlbWVudCAmJiAhaXNOb25Sb290ICYmICh0aGlzLnJvdXRlZFNldC5zaXplID09PSAwIHx8IHRoaXMucm91dGVkU2V0Lmhhcyh0eXBlLmlkKSksXG5cdFx0XHRcdCkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbmRlcmVyO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlciBpbXBsZW1lbnRzIFJlbmRlcmVyMiB7XG5cdHByaXZhdGUgYXJnc0NvbW1lbnROb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgZGVsZWdhdGU6IFJlbmRlcmVyMixcblx0XHRwcml2YXRlIHJvb3RTdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuXHRcdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPixcblx0XHRwcml2YXRlIGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgTmd0QW55Q29uc3RydWN0b3I+LFxuXHRcdHByaXZhdGUgaXNSb290ID0gdHJ1ZSxcblx0KSB7fVxuXG5cdGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuXG5cdFx0Ly8gaWYgdGhlcmUncyBuYW1lc3BhY2UsIHdlIGRvbid0IGRvIGFueXRoaW5nXG5cdFx0aWYgKG5hbWVzcGFjZSkge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdH1cblxuXHRcdC8vIG9uIGZpcnN0IHBhc3MsIHdlIHJldHVybiB0aGUgUm9vdCBTY2VuZSBhcyB0aGUgcm9vdCBub2RlXG5cdFx0aWYgKHRoaXMuaXNSb290KSB7XG5cdFx0XHR0aGlzLmlzUm9vdCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5yb290U3RvcmUuc25hcHNob3Quc2NlbmUsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0pIHtcblx0XHRcdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0gPSBuZXcgRGVidWdOb2RlKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV07XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlU3RvcmUgPSBzaWduYWxTdG9yZSh7IHBhcmVudDogbnVsbCwgb2JqZWN0czogW10sIG5vbk9iamVjdHM6IFtdIH0pO1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoXG5cdFx0XHRcdCd0aHJlZScsXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0eyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuXHRcdFx0XHRcdC8vIE5PVEU6IHdlIGFzc2lnbiB0aGlzIG1hbnVhbGx5IHRvIGEgcmF3IHZhbHVlIG5vZGVcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHdlIHNheSBpdCBpcyBhICd0aHJlZScgbm9kZSBidXQgd2UncmUgbm90IHVzaW5nIHByZXBhcmUoKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdF9fbmd0X186IHtcblx0XHRcdFx0XHRcdFx0aXNSYXc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUsXG5cdFx0XHRcdFx0XHRcdHNldFBhcmVudChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUudXBkYXRlKHsgcGFyZW50IH0pO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBbaW5qZWN0ZWRBcmdzXSA9IFt0aGlzLmdldE5ndEFyZ3MoKT8udmFsdWUgfHwgW11dO1xuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG5cdFx0XHRpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGlmIGFuIG9iamVjdCBpc24ndCBhbHJlYWR5IFwicHJlcGFyZWRcIiwgd2UgcHJlcGFyZSBpdFxuXHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbChuYW1lLnN0YXJ0c1dpdGgoJ25ndC0nKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lKTtcblx0XHRjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG5cblx0XHQvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcblx0XHRpZiAodGhyZWVUYXJnZXQpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUgfSk7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkgYXMgTmd0TG9jYWxTdGF0ZTtcblxuXHRcdFx0Ly8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuXHRcdFx0aWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcblx0XHRcdH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKTtcblxuXHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0Ly8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG5cdFx0Ly8gdGhpcyBpcyBkb25lIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgTm9kZXMgd2UgbmVlZCB0byBwcm9jZXNzIGZvciBnZXRDcmVhdGlvblN0YXRlXG5cdFx0Y29tbWVudFtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlOiBOZ3RSZW5kZXJlck5vZGUgfCAnYXJncycpID0+IHtcblx0XHRcdGlmIChub2RlID09PSAnYXJncycpIHtcblx0XHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnB1c2goY29tbWVudCk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2NvbW1lbnQnLCBjb21tZW50LCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdGFwcGVuZENoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlKTogdm9pZCB7XG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cdFx0Y29uc3QgY1JTID0gbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG5cdFx0XHQobmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0IHx8IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKVxuXHRcdCkge1xuXHRcdFx0YWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cblx0XHRcdGlmIChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10gJiYgbmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10sIG5ld0NoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0aWYgKGNSUykge1xuXHRcdFx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0XHRcdGlmICh0aGlzLnNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUywgY1JTLCBuZXdDaGlsZCkpIHtcblx0XHRcdFx0XHQvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG5cdFx0XHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRhZGRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblxuXHRcdC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcblx0XHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIGEgcG9ydGFsXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBhcmVudCk7XG5cblx0XHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG5ld0NoaWxkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKTtcblxuXHRcdFx0Ly8gaWYgY2hpbGQgYWxyZWFkeSBhdHRhY2hlZCB0byBhIHBhcmVudCwgc2tpcFxuXHRcdFx0aWYgKGNMUz8uaW5zdGFuY2VTdG9yZT8uZ2V0KCdwYXJlbnQnKSkgcmV0dXJuO1xuXHRcdFx0aWYgKHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblxuXHRcdFx0Ly8gYXR0YWNoIFRIUkVFIGNoaWxkXG5cdFx0XHRhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2Vcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTLCBjUlMsIG5ld0NoaWxkKSkge1xuXHRcdFx0Ly8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuXHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRCZWZvcmUoXG5cdFx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHQvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuXHRcdC8vIF9yZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdC8vIF9pc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHQpOiB2b2lkIHtcblx0XHQvLyBOT1RFOiBub3Qgc3VyZSB3aHkgdGhpcyBpcyBoZXJlLiBpbnZlc3RpZ2F0ZSB3aGVuIHdlIGhhdmUgdGltZVxuXHRcdC8vIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQpKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHQvLyB9XG5cblx0XHRpZiAocGFyZW50ID09IG51bGwgfHwgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHR9XG5cblx0cmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsLCBvbGRDaGlsZDogTmd0UmVuZGVyZXJOb2RlLCBpc0hvc3RFbGVtZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCkge1xuXHRcdFx0cGFyZW50ID0gKHVudHJhY2tlZCgoKSA9PiBnZXRMb2NhbFN0YXRlKG9sZENoaWxkKT8ucGFyZW50Py4oKSkgfHxcblx0XHRcdFx0b2xkQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSBhcyBOZ3RSZW5kZXJlck5vZGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY1JTID0gb2xkQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdC8vIGlmIHBhcmVudCBpcyBzdGlsbCBmYWxzeSwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlIHBhcmVudC5cblx0XHQvLyB3ZSdsbCBqdXN0IHJlbW92ZSB0aGUgY2hpbGQgYW5kIGRlc3Ryb3kgaXRcblx0XHRpZiAocGFyZW50ID09IG51bGwpIHtcblx0XHRcdGlmIChjUlMpIHtcblx0XHRcdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKG9sZENoaWxkLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cblx0XHRpZiAoXG5cdFx0XHQoIWNSUyB8fCAhcFJTKSAmJlxuXHRcdFx0cGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdFx0KG9sZENoaWxkIGluc3RhbmNlb2YgRWxlbWVudCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIFRleHQgfHwgb2xkQ2hpbGQgaW5zdGFuY2VvZiBDb21tZW50KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyAmJiAoIXBSUyB8fCBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJykpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRyZW1vdmVUaHJlZUNoaWxkKG9sZENoaWxkLCBwYXJlbnQsIHRydWUpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcgJiZcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXT8uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcblx0XHQpIHtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuXHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuXHR9XG5cblx0cGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclM/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG5cdH1cblxuXHRwcml2YXRlIHNldEF0dHJpYnV0ZUludGVybmFsKFxuXHRcdGVsOiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlOiBzdHJpbmcsXG5cdFx0X25hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkVOREVSX1BSSU9SSVRZKSB7XG5cdFx0XHRcdC8vIE5PVEU6IHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cdFx0XHRcdC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgZGVmYXVsdCAwXG5cdFx0XHRcdGxldCBwcmlvcml0eSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTihwcmlvcml0eSkpIHtcblx0XHRcdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGBbTkdUXSBcInByaW9yaXR5XCIgaXMgYW4gaW52YWxpZCBudW1iZXIsIGRlZmF1bHQgdG8gMGApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHQvLyBOT1RFOiBoYW5kbGUgYXR0YWNoIGFzIHN0cmluZ1xuXHRcdFx0XHRjb25zdCBwYXRocyA9IHZhbHVlLnNwbGl0KCcuJyk7XG5cdFx0XHRcdGlmIChwYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShlbCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUuYXR0YWNoID0gcGF0aHM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJBV19WQUxVRSkge1xuXHRcdFx0XHQvLyBOT1RFOiBjb2VyY2lvblxuXHRcdFx0XHRsZXQgbWF5YmVDb2VyY2VkOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdmFsdWU7XG5cdFx0XHRcdGlmIChtYXliZUNvZXJjZWQgPT09ICcnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IE51bWJlcihtYXliZUNvZXJjZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXG5cdFx0aWYgKHVzZURlbGVnYXRlKSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHVuZGVmaW5lZCEsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGVsLCBuYW1lLCBuYW1lc3BhY2UpO1xuXHRcdH1cblx0fVxuXG5cdHNldFByb3BlcnR5KGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShlbCk7XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlBBUkFNRVRFUlMpIHtcblx0XHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdFx0aWYgKCdyYXljYXN0JyBpbiB2YWx1ZSAmJiB2YWx1ZVsncmF5Y2FzdCddID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFsdWVbJ3JheWNhc3QnXSA9ICgpID0+IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbHlQcm9wcyhlbCwgdmFsdWUpO1xuXG5cdFx0XHRcdGlmICgnZ2VvbWV0cnknIGluIHZhbHVlICYmIHZhbHVlWydnZW9tZXRyeSddLmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdFx0XHRsb2NhbFN0YXRlPy51cGRhdGVHZW9tZXRyeVN0YW1wKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmVudCA9IGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuXHRcdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/LmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgZWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFthdHRhY2hdXG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSlcblx0XHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlLm1hcCgodikgPT4gdi50b1N0cmluZygpKVxuXHRcdFx0XHRcdFx0OiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcblx0XHRcdFx0XHRcdFx0XHQ/IHZhbHVlLnNwbGl0KCcuJylcblx0XHRcdFx0XHRcdFx0XHQ6IFt2YWx1ZV07XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdGlmIChuYW1lID09PSAncmF5Y2FzdCcgJiYgdmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0dmFsdWUgPSAoKSA9PiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cblx0XHRcdGlmIChuYW1lID09PSAnZ2VvbWV0cnknICYmIHZhbHVlLmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZT8udXBkYXRlR2VvbWV0cnlTdGFtcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdGxpc3Rlbih0YXJnZXQ6IE5ndFJlbmRlcmVyTm9kZSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkIHtcblx0XHRjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcblx0XHQvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHdlIGRlbGVnYXRlXG5cdFx0aWYgKCFyUyB8fCBpc0RPTSh0YXJnZXQpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IHRhcmdldDtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdGNvbnN0IHByaW9yaXR5ID0gbG9jYWxTdGF0ZT8ucHJpb3JpdHkgPz8gMDtcblx0XHRcdHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHksIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoYXQgdGFyZ2V0IGlzIG5vdCBET00gbm9kZVxuXHRcdGlmICh0YXJnZXQgPT09IHRoaXMucm9vdFN0b3JlLnNuYXBzaG90LnNjZW5lKSB7XG5cdFx0XHRsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG5cdFx0XHRpZiAoZXZlbnQgPT0gbnVsbCkge1xuXHRcdFx0XHRldmVudCA9IGRvbVRhcmdldDtcblx0XHRcdFx0ZG9tVGFyZ2V0ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBldmVudFRhcmdldCA9XG5cdFx0XHRcdGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcblx0XHRcdFx0XHQ/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG5cdFx0XHRcdFx0OiAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXTtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihldmVudFRhcmdldCwgZXZlbnQsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lJbnRlcm5hbChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudD86IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5pbnN0YW5jZVN0b3JlKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ29iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ25vbk9iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vblVwZGF0ZSkgZGVsZXRlIGxvY2FsU3RhdGUub25VcGRhdGU7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8ub25BdHRhY2gpIGRlbGV0ZSBsb2NhbFN0YXRlLm9uQXR0YWNoO1xuXG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydwYXJlbnQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZGQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydyZW1vdmUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cblx0XHRcdGlmICghbG9jYWxTdGF0ZT8ucHJpbWl0aXZlKSB7XG5cdFx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVidWdOb2RlXSA9IG51bGwhO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZUZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5hcmdzQ29tbWVudE5vZGVzKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0gPSBudWxsITtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0dGhpcy5yZW1vdmVDb21tZW50Tm9kZShub2RlLCB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMpO1xuXHRcdH1cblxuXHRcdC8vIG51bGxpZnkgcGFyZW50XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBudWxsO1xuXHRcdGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSB8fCBbXSkge1xuXHRcdFx0aWYgKHJlbmRlckNoaWxkLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgcGFyZW50KSB7XG5cdFx0XHRcdGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQocmVuZGVyQ2hpbGQsIHBhcmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjbG9zZXN0SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdGlmIChjbG9zZXN0SW5zdGFuY2UpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKHJlbmRlckNoaWxkLCBjbG9zZXN0SW5zdGFuY2UsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChyZW5kZXJDaGlsZCwgcGFyZW50KTtcblx0XHR9XG5cblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dID0gW107XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0gPSB0cnVlO1xuXHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdHJlbW92ZUNoaWxkKHBhcmVudCwgbm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVDb21tZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5vZGVzOiBOZ3RSZW5kZXJlck5vZGVbXSkge1xuXHRcdGNvbnN0IGluZGV4ID0gbm9kZXMuZmluZEluZGV4KChjb21tZW50KSA9PiBjb21tZW50ID09PSBub2RlKTtcblx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0bm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NQb3J0YWxDb250YWluZXIocG9ydGFsOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbmplY3RvciA9IHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XT8uKCk/LmluamVjdG9yO1xuXHRcdGlmICghaW5qZWN0b3IpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0aWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuXHRcdGlmICghcG9ydGFsQ29udGFpbmVyKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShwb3J0YWxDb250YWluZXIpO1xuXHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gcG9ydGFsU3RvcmU7XG5cdFx0fVxuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSBjcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lciwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRwcml2YXRlIHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUzogTmd0UmVuZGVyZXJTdGF0ZSwgY1JTOiBOZ3RSZW5kZXJlclN0YXRlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgcFR5cGUgPSBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXHRcdGNvbnN0IGNUeXBlID0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXTtcblxuXHRcdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXHRcdC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG5cdFx0Y29uc3QgaXNEYW5nbGluZ1RocmVlQ2hpbGQgPSBjVHlwZSA9PT0gJ3RocmVlJyAmJiAhY0xTPy5pbnN0YW5jZVN0b3JlPy5nZXQoJ3BhcmVudCcpO1xuXHRcdC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG5cdFx0Ly8gb3IgdGhleSBhcmUgY29tcG91bmQgQU5EIGhhdmVuJ3QgaGFkIGEgVEhSRUUgaW5zdGFuY2UgeWV0XG5cdFx0Y29uc3QgaXNQYXJlbnRTdGlsbERPTSA9IHBUeXBlID09PSAnZG9tJztcblx0XHRjb25zdCBpc0NoaWxkU3RpbGxET00gPSBjVHlwZSA9PT0gJ2RvbSc7XG5cblx0XHRyZXR1cm4gaXNEYW5nbGluZ1RocmVlQ2hpbGQgfHwgKGlzUGFyZW50U3RpbGxET00gJiYgaXNDaGlsZFN0aWxsRE9NKSB8fCBpc1BhcmVudFN0aWxsRE9NO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXROZ3RBcmdzKCkge1xuXHRcdGxldCBkaXJlY3RpdmU6IE5ndEFyZ3MgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblxuXHRcdGxldCBpID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Y29uc3QgY29tbWVudCA9IHRoaXMuYXJnc0NvbW1lbnROb2Rlc1tpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVidWdOb2RlRmFjdG9yeV0/LigpPy5pbmplY3Rvcjtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5ndEFyZ3MsIG51bGwpO1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0ZGlyZWN0aXZlID0gaW5zdGFuY2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLmFyZ3NDb21tZW50Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBkaXJlY3RpdmU7XG5cdH1cblxuXHRjcmVhdGVUZXh0ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGRlc3Ryb3kgPSB0aGlzLmRlbGVnYXRlLmRlc3Ryb3kuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0ZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXHRzZWxlY3RSb290RWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0bmV4dFNpYmxpbmcgPSB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGFkZENsYXNzID0gdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRyZW1vdmVDbGFzcyA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0c2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHJlbW92ZVN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRzZXRWYWx1ZSA9IHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0Z2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5ndFJlbmRlcmVyKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pIHtcblx0Y29uc3QgcHJvdmlkZXJzID0gW1xuXHRcdE5ndFJlbmRlcmVyRmFjdG9yeSxcblx0XHR7IHByb3ZpZGU6IFJlbmRlcmVyRmFjdG9yeTIsIHVzZUV4aXN0aW5nOiBOZ3RSZW5kZXJlckZhY3RvcnkgfSxcblx0XHRwcm92aWRlU3RvcmUoKCkgPT4gc3RvcmUpLFxuXHRdO1xuXG5cdHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuZXhwb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9jYXRhbG9ndWUnO1xuZXhwb3J0IHsgSFRNTCwgTk9OX1JPT1QsIFJPVVRFRF9TQ0VORSB9IGZyb20gJy4vY29uc3RhbnRzJztcbiJdfQ==
|
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBRVYsZ0JBQWdCLEVBRWhCLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFxQixlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUNOLFVBQVUsRUFDVixJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsNEJBQTRCLEVBQzVCLGtCQUFrQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBR04sUUFBUSxFQUNSLFVBQVUsRUFDViw0QkFBNEIsRUFDNUIsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR25ILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFUyw0QkFBdUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdC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WUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0RGVidWdOb2RlLFxuXHRJbmplY3RhYmxlLFxuXHRSZW5kZXJlcjIsXG5cdFJlbmRlcmVyRmFjdG9yeTIsXG5cdFJlbmRlcmVyVHlwZTIsXG5cdGluamVjdCxcblx0bWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYXJncyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTkdUX1NUT1JFLCBpbmplY3RTdG9yZSwgcHJvdmlkZVN0b3JlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkLCBOZ3RMb2NhbFN0YXRlLCBOZ3RTdGF0ZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IE5ndEFueUNvbnN0cnVjdG9yLCBpbmplY3RDYXRhbG9ndWUgfSBmcm9tICcuL2NhdGFsb2d1ZSc7XG5pbXBvcnQge1xuXHRET01fUEFSRU5ULFxuXHRIVE1MLFxuXHROT05fUk9PVCxcblx0Uk9VVEVEX1NDRU5FLFxuXHRTUEVDSUFMX0RPTV9UQUcsXG5cdFNQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlQsXG5cdFNQRUNJQUxfUFJPUEVSVElFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0Tmd0UmVuZGVyZXJOb2RlLFxuXHROZ3RSZW5kZXJlclN0YXRlLFxuXHRhZGRDaGlsZCxcblx0Y3JlYXRlTm9kZSxcblx0Z2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZSxcblx0aXNET00sXG5cdHJlbW92ZUNoaWxkLFxuXHRzZXRQYXJlbnQsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkLCBhdHRhY2hUaHJlZUNoaWxkLCBrZWJhYlRvUGFzY2FsLCBwcm9jZXNzVGhyZWVFdmVudCwgcmVtb3ZlVGhyZWVDaGlsZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJGYWN0b3J5IGltcGxlbWVudHMgUmVuZGVyZXJGYWN0b3J5MiB7XG5cdHByaXZhdGUgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcblx0cHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cdHByaXZhdGUgY2F0YWxvZ3VlID0gaW5qZWN0Q2F0YWxvZ3VlKCk7XG5cdHByaXZhdGUgcm9vdFN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblxuXHRwcml2YXRlIHBvcnRhbENvbW1lbnRzTm9kZXM6IEFycmF5PE5ndFJlbmRlcmVyTm9kZT4gPSBbXTtcblx0cHJpdmF0ZSByZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG5cdHByaXZhdGUgcm91dGVkU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0Y3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuXHRcdGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcblxuXHRcdGlmICghdHlwZSkgcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cblx0XHQvLyBOT1RFOiBtaWdodCBuZWVkIHRvIHJldmlzaXQgdGhpc1xuXHRcdGlmICgodHlwZSBhcyBOZ3RBbnlSZWNvcmQpWyd0eXBlJ11bSFRNTF0pIHtcblx0XHRcdHRoaXMucmVuZGVyZXJNYXAuc2V0KHR5cGUuaWQsIGRlbGVnYXRlUmVuZGVyZXIpO1xuXHRcdFx0cmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtST1VURURfU0NFTkVdKSB7XG5cdFx0XHR0aGlzLnJvdXRlZFNldC5hZGQodHlwZS5pZCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNOb25Sb290ID0gKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW05PTl9ST09UXTtcblxuXHRcdGxldCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXJNYXAuZ2V0KHR5cGUuaWQpO1xuXHRcdGlmICghcmVuZGVyZXIpIHtcblx0XHRcdHRoaXMucmVuZGVyZXJNYXAuc2V0KFxuXHRcdFx0XHR0eXBlLmlkLFxuXHRcdFx0XHQocmVuZGVyZXIgPSBuZXcgTmd0UmVuZGVyZXIoXG5cdFx0XHRcdFx0ZGVsZWdhdGVSZW5kZXJlcixcblx0XHRcdFx0XHR0aGlzLnJvb3RTdG9yZSxcblx0XHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcyxcblx0XHRcdFx0XHR0aGlzLmNhdGFsb2d1ZSxcblx0XHRcdFx0XHQvLyBzZXR0aW5nIHJvb3Qgc2NlbmUgaWYgdGhlcmUncyBubyByb3V0ZWQgc2NlbmUgT1IgdGhpcyBjb21wb25lbnQgaXMgdGhlIHJvdXRlZCBTY2VuZVxuXHRcdFx0XHRcdCFob3N0RWxlbWVudCAmJiAhaXNOb25Sb290ICYmICh0aGlzLnJvdXRlZFNldC5zaXplID09PSAwIHx8IHRoaXMucm91dGVkU2V0Lmhhcyh0eXBlLmlkKSksXG5cdFx0XHRcdCkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbmRlcmVyO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlciBpbXBsZW1lbnRzIFJlbmRlcmVyMiB7XG5cdHByaXZhdGUgYXJnc0NvbW1lbnROb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgZGVsZWdhdGU6IFJlbmRlcmVyMixcblx0XHRwcml2YXRlIHJvb3RTdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuXHRcdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPixcblx0XHRwcml2YXRlIGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgTmd0QW55Q29uc3RydWN0b3I+LFxuXHRcdHByaXZhdGUgaXNSb290ID0gdHJ1ZSxcblx0KSB7fVxuXG5cdGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuXG5cdFx0Ly8gaWYgdGhlcmUncyBuYW1lc3BhY2UsIHdlIGRvbid0IGRvIGFueXRoaW5nXG5cdFx0aWYgKG5hbWVzcGFjZSkge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdH1cblxuXHRcdC8vIG9uIGZpcnN0IHBhc3MsIHdlIHJldHVybiB0aGUgUm9vdCBTY2VuZSBhcyB0aGUgcm9vdCBub2RlXG5cdFx0aWYgKHRoaXMuaXNSb290KSB7XG5cdFx0XHR0aGlzLmlzUm9vdCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5yb290U3RvcmUuc25hcHNob3Quc2NlbmUsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0pIHtcblx0XHRcdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0gPSBuZXcgRGVidWdOb2RlKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV07XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKFxuXHRcdFx0XHQndGhyZWUnLFxuXHRcdFx0XHRwcmVwYXJlKHsgX19uZ3RfcmVuZGVyZXJfXzogeyByYXdWYWx1ZTogdW5kZWZpbmVkIH0gfSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIGlzUmF3OiB0cnVlIH0pLFxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBbaW5qZWN0ZWRBcmdzXSA9IFt0aGlzLmdldE5ndEFyZ3MoKT8udmFsdWUgfHwgW11dO1xuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG5cdFx0XHRpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGlmIGFuIG9iamVjdCBpc24ndCBhbHJlYWR5IFwicHJlcGFyZWRcIiwgd2UgcHJlcGFyZSBpdFxuXHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbChuYW1lLnN0YXJ0c1dpdGgoJ25ndC0nKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lKTtcblx0XHRjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG5cblx0XHQvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcblx0XHRpZiAodGhyZWVUYXJnZXQpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUgfSk7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkgYXMgTmd0TG9jYWxTdGF0ZTtcblxuXHRcdFx0Ly8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuXHRcdFx0aWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcblx0XHRcdH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKTtcblxuXHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0Ly8gIEluIG91ciBkaXJlY3RpdmVzLCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRoZW4gc3RhcnQgdHJhY2tpbmcgdGhlIFJlbmRlcmVyTm9kZVxuXHRcdC8vICB0aGlzIGlzIGRvbmUgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBOb2RlcyB3ZSBuZWVkIHRvIHByb2Nlc3MgZm9yIGdldENyZWF0aW9uU3RhdGVcblx0XHRjb21tZW50W1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdID0gKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSB8ICdhcmdzJykgPT4ge1xuXHRcdFx0aWYgKG5vZGUgPT09ICdhcmdzJykge1xuXHRcdFx0XHR0aGlzLmFyZ3NDb21tZW50Tm9kZXMucHVzaChjb21tZW50KTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnY29tbWVudCcsIGNvbW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHR9XG5cblx0YXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcblx0XHRjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRjb25zdCBjUlMgPSBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0aWYgKFxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgJiZcblx0XHRcdChuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQgfHwgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScpXG5cdFx0KSB7XG5cdFx0XHRhZGRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblxuXHRcdFx0aWYgKG5ld0NoaWxkW0RPTV9QQVJFTlRdICYmIG5ld0NoaWxkW0RPTV9QQVJFTlRdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChuZXdDaGlsZFtET01fUEFSRU5UXSwgbmV3Q2hpbGQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cdFx0XHRpZiAoY1JTKSB7XG5cdFx0XHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRcdFx0aWYgKHRoaXMuc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTLCBjUlMsIG5ld0NoaWxkKSkge1xuXHRcdFx0XHRcdC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcblx0XHRcdFx0XHRjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcblx0XHRcdFx0XHRpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNSUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdGFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG5cdFx0Ly8gaWYgbmV3IGNoaWxkIGlzIGEgcG9ydGFsXG5cdFx0aWYgKGNSUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcblx0XHRcdGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB0aGlzLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuXHRcdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkge1xuXHRcdFx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcblx0XHRcdGlmICghcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB0aGlzLnByb2Nlc3NQb3J0YWxDb250YWluZXIocGFyZW50KTtcblxuXHRcdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkge1xuXHRcdFx0XHR0aGlzLmFwcGVuZENoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIGJvdGggYXJlIHRocmVlIGluc3RhbmNlcywgc3RyYWlnaHRmb3J3YXJkIGNhc2Vcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUobmV3Q2hpbGQpO1xuXG5cdFx0XHQvLyBpZiBjaGlsZCBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgcGFyZW50LCBza2lwXG5cdFx0XHRpZiAoY0xTPy5pbnN0YW5jZVN0b3JlPy5nZXQoJ3BhcmVudCcpKSByZXR1cm47XG5cdFx0XHRpZiAocGFyZW50ID09PSBuZXdDaGlsZCkgcmV0dXJuO1xuXG5cdFx0XHQvLyBhdHRhY2ggVEhSRUUgY2hpbGRcblx0XHRcdGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgb25seSB0aGUgcGFyZW50IGlzIHRoZSBUSFJFRSBpbnN0YW5jZVxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIGNSUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gfHwgW10pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZShwUlMsIGNSUywgbmV3Q2hpbGQpKSB7XG5cdFx0XHQvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG5cdFx0XHRjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcblx0XHRcdGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxuXG5cdGluc2VydEJlZm9yZShcblx0XHRwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHRuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdC8vIFRPRE86IHdlIG1pZ2h0IG5lZWQgdGhlc2U/XG5cdFx0Ly8gX3JlZkNoaWxkOiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0Ly8gX2lzTW92ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdCk6IHZvaWQge1xuXHRcdC8vIE5PVEU6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIGhlcmUuIGludmVzdGlnYXRlIHdoZW4gd2UgaGF2ZSB0aW1lXG5cdFx0Ly8gaWYgKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIChuZXdDaGlsZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkpIHtcblx0XHQvLyBcdHJldHVybiB0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdC8vIH1cblxuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCB8fCAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX18gfHwgcGFyZW50ID09PSBuZXdDaGlsZCkgcmV0dXJuO1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cdH1cblxuXHRyZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHBhcmVudCA9PSBudWxsKSB7XG5cdFx0XHRwYXJlbnQgPSAodW50cmFja2VkKCgpID0+IGdldExvY2FsU3RhdGUob2xkQ2hpbGQpPy5wYXJlbnQ/LigpKSB8fFxuXHRcdFx0XHRvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIGFzIE5ndFJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIHN0aWxsIGZhbHN5LCB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50LlxuXHRcdC8vIHdlJ2xsIGp1c3QgcmVtb3ZlIHRoZSBjaGlsZCBhbmQgZGVzdHJveSBpdFxuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCkge1xuXHRcdFx0aWYgKGNSUykge1xuXHRcdFx0XHRpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdCghY1JTIHx8ICFwUlMpICYmXG5cdFx0XHRwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0XHQob2xkQ2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG9sZENoaWxkIGluc3RhbmNlb2YgVGV4dCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIENvbW1lbnQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmICghcFJTIHx8IHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKSkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHBhcmVudCwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJyAmJlxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdPy5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuXHRcdCkge1xuXHRcdFx0dGhpcy5yZW1vdmVDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG5cdH1cblxuXHRwYXJlbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QXR0cmlidXRlSW50ZXJuYWwoXG5cdFx0ZWw6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHN0cmluZyxcblx0XHRfbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcblx0XHRcdFx0Ly8gTk9URTogcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcblx0XHRcdFx0Ly8gd2UgY29udmVydCB0aGF0IHN0cmluZyB0byBhIG51bWJlci4gaWYgaXQncyBpbnZhbGlkLCBkZWZhdWx0IDBcblx0XHRcdFx0bGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHByaW9yaXR5KSkge1xuXHRcdFx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIFwicHJpb3JpdHlcIiBpcyBhbiBpbnZhbGlkIG51bWJlciwgZGVmYXVsdCB0byAwYCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWwpO1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuXHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGhhbmRsZSBhdHRhY2ggYXMgc3RyaW5nXG5cdFx0XHRcdGNvbnN0IHBhdGhzID0gdmFsdWUuc3BsaXQoJy4nKTtcblx0XHRcdFx0aWYgKHBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5hdHRhY2ggPSBwYXRocztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTk9URTogY29lcmNpb25cblx0XHRcdFx0bGV0IG1heWJlQ29lcmNlZDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IHZhbHVlO1xuXHRcdFx0XHRpZiAobWF5YmVDb2VyY2VkID09PSAnJyB8fCBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICdmYWxzZScpIHtcblx0XHRcdFx0XHRtYXliZUNvZXJjZWQgPSBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICcnO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIobWF5YmVDb2VyY2VkKSkpIHtcblx0XHRcdFx0XHRtYXliZUNvZXJjZWQgPSBOdW1iZXIobWF5YmVDb2VyY2VkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkFXX1ZBTFVFKSB7XG5cdFx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IG1heWJlQ29lcmNlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogbWF5YmVDb2VyY2VkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXG5cdFx0aWYgKHVzZURlbGVnYXRlKSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHVuZGVmaW5lZCEsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGVsLCBuYW1lLCBuYW1lc3BhY2UpO1xuXHRcdH1cblx0fVxuXG5cdHNldFByb3BlcnR5KGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShlbCk7XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlBBUkFNRVRFUlMpIHtcblx0XHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdFx0aWYgKCdyYXljYXN0JyBpbiB2YWx1ZSAmJiB2YWx1ZVsncmF5Y2FzdCddID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFsdWVbJ3JheWNhc3QnXSA9ICgpID0+IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbHlQcm9wcyhlbCwgdmFsdWUpO1xuXG5cdFx0XHRcdGlmICgnZ2VvbWV0cnknIGluIHZhbHVlICYmIHZhbHVlWydnZW9tZXRyeSddLmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdFx0XHRsb2NhbFN0YXRlPy51cGRhdGVHZW9tZXRyeVN0YW1wKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmVudCA9IGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuXHRcdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/LmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgZWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFthdHRhY2hdXG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSlcblx0XHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlLm1hcCgodikgPT4gdi50b1N0cmluZygpKVxuXHRcdFx0XHRcdFx0OiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcblx0XHRcdFx0XHRcdFx0XHQ/IHZhbHVlLnNwbGl0KCcuJylcblx0XHRcdFx0XHRcdFx0XHQ6IFt2YWx1ZV07XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdGlmIChuYW1lID09PSAncmF5Y2FzdCcgJiYgdmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0dmFsdWUgPSAoKSA9PiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cblx0XHRcdGlmIChuYW1lID09PSAnZ2VvbWV0cnknICYmIHZhbHVlLmlzQnVmZmVyR2VvbWV0cnkpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZT8udXBkYXRlR2VvbWV0cnlTdGFtcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdGxpc3Rlbih0YXJnZXQ6IE5ndFJlbmRlcmVyTm9kZSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkIHtcblx0XHRjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcblx0XHQvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHdlIGRlbGVnYXRlXG5cdFx0aWYgKCFyUyB8fCBpc0RPTSh0YXJnZXQpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IHRhcmdldDtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdGNvbnN0IHByaW9yaXR5ID0gbG9jYWxTdGF0ZT8ucHJpb3JpdHkgPz8gMDtcblx0XHRcdHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHksIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoYXQgdGFyZ2V0IGlzIG5vdCBET00gbm9kZVxuXHRcdGlmICh0YXJnZXQgPT09IHRoaXMucm9vdFN0b3JlLnNuYXBzaG90LnNjZW5lKSB7XG5cdFx0XHRsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG5cdFx0XHRpZiAoZXZlbnQgPT0gbnVsbCkge1xuXHRcdFx0XHRldmVudCA9IGRvbVRhcmdldDtcblx0XHRcdFx0ZG9tVGFyZ2V0ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBldmVudFRhcmdldCA9XG5cdFx0XHRcdGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcblx0XHRcdFx0XHQ/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG5cdFx0XHRcdFx0OiAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXTtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihldmVudFRhcmdldCwgZXZlbnQsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lJbnRlcm5hbChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudD86IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5pbnN0YW5jZVN0b3JlKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ29iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ25vbk9iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vblVwZGF0ZSkgZGVsZXRlIGxvY2FsU3RhdGUub25VcGRhdGU7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8ub25BdHRhY2gpIGRlbGV0ZSBsb2NhbFN0YXRlLm9uQXR0YWNoO1xuXG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydwYXJlbnQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZGQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydyZW1vdmUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cblx0XHRcdGlmICghbG9jYWxTdGF0ZT8ucHJpbWl0aXZlKSB7XG5cdFx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVidWdOb2RlXSA9IG51bGwhO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZUZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5hcmdzQ29tbWVudE5vZGVzKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlYnVnTm9kZV0gPSBudWxsITtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0dGhpcy5yZW1vdmVDb21tZW50Tm9kZShub2RlLCB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMpO1xuXHRcdH1cblxuXHRcdC8vIG51bGxpZnkgcGFyZW50XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBudWxsO1xuXHRcdGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSB8fCBbXSkge1xuXHRcdFx0aWYgKHJlbmRlckNoaWxkLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgcGFyZW50KSB7XG5cdFx0XHRcdGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQocmVuZGVyQ2hpbGQsIHBhcmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjbG9zZXN0SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdGlmIChjbG9zZXN0SW5zdGFuY2UpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKHJlbmRlckNoaWxkLCBjbG9zZXN0SW5zdGFuY2UsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChyZW5kZXJDaGlsZCwgcGFyZW50KTtcblx0XHR9XG5cblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dID0gW107XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0gPSB0cnVlO1xuXHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdHJlbW92ZUNoaWxkKHBhcmVudCwgbm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVDb21tZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5vZGVzOiBOZ3RSZW5kZXJlck5vZGVbXSkge1xuXHRcdGNvbnN0IGluZGV4ID0gbm9kZXMuZmluZEluZGV4KChjb21tZW50KSA9PiBjb21tZW50ID09PSBub2RlKTtcblx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0bm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NQb3J0YWxDb250YWluZXIocG9ydGFsOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbmplY3RvciA9IHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZWJ1Z05vZGVGYWN0b3J5XT8uKCk/LmluamVjdG9yO1xuXHRcdGlmICghaW5qZWN0b3IpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0aWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuXHRcdGlmICghcG9ydGFsQ29udGFpbmVyKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShwb3J0YWxDb250YWluZXIpO1xuXHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gcG9ydGFsU3RvcmU7XG5cdFx0fVxuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSBjcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lciwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRwcml2YXRlIHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUzogTmd0UmVuZGVyZXJTdGF0ZSwgY1JTOiBOZ3RSZW5kZXJlclN0YXRlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgcFR5cGUgPSBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXHRcdGNvbnN0IGNUeXBlID0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXTtcblxuXHRcdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXHRcdC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG5cdFx0Y29uc3QgaXNEYW5nbGluZ1RocmVlQ2hpbGQgPSBjVHlwZSA9PT0gJ3RocmVlJyAmJiAhY0xTPy5pbnN0YW5jZVN0b3JlPy5nZXQoJ3BhcmVudCcpO1xuXHRcdC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG5cdFx0Ly8gb3IgdGhleSBhcmUgY29tcG91bmQgQU5EIGhhdmVuJ3QgaGFkIGEgVEhSRUUgaW5zdGFuY2UgeWV0XG5cdFx0Y29uc3QgaXNQYXJlbnRTdGlsbERPTSA9IHBUeXBlID09PSAnZG9tJztcblx0XHRjb25zdCBpc0NoaWxkU3RpbGxET00gPSBjVHlwZSA9PT0gJ2RvbSc7XG5cblx0XHRyZXR1cm4gaXNEYW5nbGluZ1RocmVlQ2hpbGQgfHwgKGlzUGFyZW50U3RpbGxET00gJiYgaXNDaGlsZFN0aWxsRE9NKSB8fCBpc1BhcmVudFN0aWxsRE9NO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXROZ3RBcmdzKCkge1xuXHRcdGxldCBkaXJlY3RpdmU6IE5ndEFyZ3MgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblxuXHRcdGxldCBpID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Y29uc3QgY29tbWVudCA9IHRoaXMuYXJnc0NvbW1lbnROb2Rlc1tpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVidWdOb2RlRmFjdG9yeV0/LigpPy5pbmplY3Rvcjtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5ndEFyZ3MsIG51bGwpO1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0ZGlyZWN0aXZlID0gaW5zdGFuY2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLmFyZ3NDb21tZW50Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBkaXJlY3RpdmU7XG5cdH1cblxuXHRjcmVhdGVUZXh0ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGRlc3Ryb3kgPSB0aGlzLmRlbGVnYXRlLmRlc3Ryb3kuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0ZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXHRzZWxlY3RSb290RWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0bmV4dFNpYmxpbmcgPSB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGFkZENsYXNzID0gdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRyZW1vdmVDbGFzcyA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0c2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHJlbW92ZVN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRzZXRWYWx1ZSA9IHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0Z2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5ndFJlbmRlcmVyKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pIHtcblx0Y29uc3QgcHJvdmlkZXJzID0gW1xuXHRcdE5ndFJlbmRlcmVyRmFjdG9yeSxcblx0XHR7IHByb3ZpZGU6IFJlbmRlcmVyRmFjdG9yeTIsIHVzZUV4aXN0aW5nOiBOZ3RSZW5kZXJlckZhY3RvcnkgfSxcblx0XHRwcm92aWRlU3RvcmUoKCkgPT4gc3RvcmUpLFxuXHRdO1xuXG5cdHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuZXhwb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9jYXRhbG9ndWUnO1xuZXhwb3J0IHsgSFRNTCwgTk9OX1JPT1QsIFJPVVRFRF9TQ0VORSB9IGZyb20gJy4vY29uc3RhbnRzJztcbiJdfQ==
|
|
@@ -14,12 +14,12 @@ export class NgtRoutedScene {
|
|
|
14
14
|
.pipe(filter((event) => event instanceof ActivationEnd), takeUntilDestroyed())
|
|
15
15
|
.subscribe(cdr.detectChanges.bind(cdr));
|
|
16
16
|
}
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtRoutedScene, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `
|
|
19
19
|
<router-outlet />
|
|
20
20
|
`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
21
21
|
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
23
23
|
type: Component,
|
|
24
24
|
args: [{
|
|
25
25
|
standalone: true,
|
|
@@ -38,10 +38,10 @@ export class NgtObjectEvents {
|
|
|
38
38
|
emitEvent(eventName) {
|
|
39
39
|
return this[eventName].emit.bind(this[eventName]);
|
|
40
40
|
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
42
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtObjectEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.9", type: NgtObjectEvents, isStandalone: true, selector: "[ngtObjectEvents]", inputs: { ngtObjectEvents: { classPropertyName: "ngtObjectEvents", publicName: "ngtObjectEvents", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click", dblclick: "dblclick", contextmenu: "contextmenu", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel", ngtObjectEvents: "ngtObjectEventsChange" }, ngImport: i0 }); }
|
|
43
43
|
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtObjectEvents, decorators: [{
|
|
45
45
|
type: Directive,
|
|
46
46
|
args: [{ standalone: true, selector: '[ngtObjectEvents]' }]
|
|
47
47
|
}], ctorParameters: () => [] });
|
|
@@ -102,14 +102,14 @@ export class NgtCanvasNative {
|
|
|
102
102
|
});
|
|
103
103
|
this.glRef.changeDetectorRef.detectChanges();
|
|
104
104
|
}
|
|
105
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
106
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtCanvasNative, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.9", type: NgtCanvasNative, isStandalone: true, selector: "NgtCanvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, gl: { classPropertyName: "gl", publicName: "gl", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shadows: { classPropertyName: "shadows", publicName: "shadows", isSignal: true, isRequired: false, transformFunction: null }, legacy: { classPropertyName: "legacy", publicName: "legacy", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, orthographic: { classPropertyName: "orthographic", publicName: "orthographic", isSignal: true, isRequired: false, transformFunction: null }, frameloop: { classPropertyName: "frameloop", publicName: "frameloop", isSignal: true, isRequired: false, transformFunction: null }, performance: { classPropertyName: "performance", publicName: "performance", isSignal: true, isRequired: false, transformFunction: null }, dpr: { classPropertyName: "dpr", publicName: "dpr", isSignal: true, isRequired: false, transformFunction: null }, raycaster: { classPropertyName: "raycaster", publicName: "raycaster", isSignal: true, isRequired: false, transformFunction: null }, scene: { classPropertyName: "scene", publicName: "scene", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created" }, providers: [{ provide: DOCUMENT, useValue: document }, provideStore()], viewQueries: [{ propertyName: "canvasViewContainerRef", first: true, predicate: ["canvas"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
107
107
|
<GridLayout>
|
|
108
108
|
<Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
|
|
109
109
|
</GridLayout>
|
|
110
110
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
111
111
|
}
|
|
112
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtCanvasNative, decorators: [{
|
|
113
113
|
type: Component,
|
|
114
114
|
args: [{
|
|
115
115
|
selector: 'NgtCanvas',
|
|
@@ -30,10 +30,10 @@ export class NgtTestCanvas {
|
|
|
30
30
|
this.environmentInjector?.destroy();
|
|
31
31
|
this.ref?.destroy();
|
|
32
32
|
}
|
|
33
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
34
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtTestCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.9", type: NgtTestCanvas, isStandalone: true, selector: "ngt-test-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
35
35
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtTestCanvas, decorators: [{
|
|
37
37
|
type: Component,
|
|
38
38
|
args: [{
|
|
39
39
|
selector: 'ngt-test-canvas',
|
|
@@ -103,14 +103,14 @@ class NgtCanvasNative {
|
|
|
103
103
|
});
|
|
104
104
|
this.glRef.changeDetectorRef.detectChanges();
|
|
105
105
|
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
107
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtCanvasNative, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
107
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.9", type: NgtCanvasNative, isStandalone: true, selector: "NgtCanvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, gl: { classPropertyName: "gl", publicName: "gl", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shadows: { classPropertyName: "shadows", publicName: "shadows", isSignal: true, isRequired: false, transformFunction: null }, legacy: { classPropertyName: "legacy", publicName: "legacy", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, orthographic: { classPropertyName: "orthographic", publicName: "orthographic", isSignal: true, isRequired: false, transformFunction: null }, frameloop: { classPropertyName: "frameloop", publicName: "frameloop", isSignal: true, isRequired: false, transformFunction: null }, performance: { classPropertyName: "performance", publicName: "performance", isSignal: true, isRequired: false, transformFunction: null }, dpr: { classPropertyName: "dpr", publicName: "dpr", isSignal: true, isRequired: false, transformFunction: null }, raycaster: { classPropertyName: "raycaster", publicName: "raycaster", isSignal: true, isRequired: false, transformFunction: null }, scene: { classPropertyName: "scene", publicName: "scene", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created" }, providers: [{ provide: DOCUMENT, useValue: document }, provideStore()], viewQueries: [{ propertyName: "canvasViewContainerRef", first: true, predicate: ["canvas"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
108
108
|
<GridLayout>
|
|
109
109
|
<Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
|
|
110
110
|
</GridLayout>
|
|
111
111
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
112
112
|
}
|
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtCanvasNative, decorators: [{
|
|
114
114
|
type: Component,
|
|
115
115
|
args: [{
|
|
116
116
|
selector: 'NgtCanvas',
|
|
@@ -32,10 +32,10 @@ class NgtTestCanvas {
|
|
|
32
32
|
this.environmentInjector?.destroy();
|
|
33
33
|
this.ref?.destroy();
|
|
34
34
|
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
36
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtTestCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
36
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.9", type: NgtTestCanvas, isStandalone: true, selector: "ngt-test-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
37
37
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: NgtTestCanvas, decorators: [{
|
|
39
39
|
type: Component,
|
|
40
40
|
args: [{
|
|
41
41
|
selector: 'ngt-test-canvas',
|