angular-three 0.0.0-replace
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/README.md +7 -0
- package/esm2022/angular-three.mjs +5 -0
- package/esm2022/index.mjs +20 -0
- package/esm2022/lib/canvas.mjs +187 -0
- package/esm2022/lib/directives/args.mjs +35 -0
- package/esm2022/lib/directives/common.mjs +42 -0
- package/esm2022/lib/directives/parent.mjs +35 -0
- package/esm2022/lib/dom/events.mjs +73 -0
- package/esm2022/lib/events.mjs +362 -0
- package/esm2022/lib/instance.mjs +70 -0
- package/esm2022/lib/loader.mjs +64 -0
- package/esm2022/lib/loop.mjs +153 -0
- package/esm2022/lib/portal.mjs +208 -0
- package/esm2022/lib/ref.mjs +46 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +432 -0
- package/esm2022/lib/renderer/store.mjs +423 -0
- package/esm2022/lib/renderer/utils.mjs +201 -0
- package/esm2022/lib/roots.mjs +261 -0
- package/esm2022/lib/routed-scene.mjs +33 -0
- package/esm2022/lib/store.mjs +181 -0
- package/esm2022/lib/three-types.mjs +2 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils/apply-props.mjs +123 -0
- package/esm2022/lib/utils/attach.mjs +32 -0
- package/esm2022/lib/utils/before-render.mjs +12 -0
- package/esm2022/lib/utils/create-api-token.mjs +13 -0
- package/esm2022/lib/utils/inputs.mjs +18 -0
- package/esm2022/lib/utils/is.mjs +52 -0
- package/esm2022/lib/utils/make.mjs +53 -0
- package/esm2022/lib/utils/signal-store.mjs +101 -0
- package/esm2022/lib/utils/update.mjs +34 -0
- package/fesm2022/angular-three.mjs +3167 -0
- package/fesm2022/angular-three.mjs.map +1 -0
- package/index.d.ts +22 -0
- package/lib/canvas.d.ts +1170 -0
- package/lib/directives/args.d.ts +11 -0
- package/lib/directives/common.d.ts +26 -0
- package/lib/directives/parent.d.ts +13 -0
- package/lib/dom/events.d.ts +5 -0
- package/lib/events.d.ts +83 -0
- package/lib/instance.d.ts +46 -0
- package/lib/loader.d.ts +32 -0
- package/lib/loop.d.ts +68 -0
- package/lib/portal.d.ts +58 -0
- package/lib/ref.d.ts +7 -0
- package/lib/renderer/catalogue.d.ts +13 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +56 -0
- package/lib/renderer/store.d.ts +64 -0
- package/lib/renderer/utils.d.ts +31 -0
- package/lib/roots.d.ts +12 -0
- package/lib/routed-scene.d.ts +10 -0
- package/lib/store.d.ts +141 -0
- package/lib/three-types.d.ts +302 -0
- package/lib/types.d.ts +12 -0
- package/lib/utils/apply-props.d.ts +3 -0
- package/lib/utils/attach.d.ts +11 -0
- package/lib/utils/before-render.d.ts +6 -0
- package/lib/utils/create-api-token.d.ts +23 -0
- package/lib/utils/inputs.d.ts +5 -0
- package/lib/utils/is.d.ts +23 -0
- package/lib/utils/make.d.ts +19 -0
- package/lib/utils/signal-store.d.ts +30 -0
- package/lib/utils/update.d.ts +4 -0
- package/metadata.json +1 -0
- package/package.json +73 -0
- package/plugin/README.md +11 -0
- package/plugin/generators.json +17 -0
- package/plugin/src/generators/init/compat.d.ts +2 -0
- package/plugin/src/generators/init/compat.js +6 -0
- package/plugin/src/generators/init/compat.js.map +1 -0
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +4 -0
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -0
- package/plugin/src/generators/init/generator.d.ts +3 -0
- package/plugin/src/generators/init/generator.js +143 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +6 -0
- package/plugin/src/generators/utils.d.ts +2 -0
- package/plugin/src/generators/utils.js +34 -0
- package/plugin/src/generators/utils.js.map +1 -0
- package/plugin/src/generators/version.d.ts +14 -0
- package/plugin/src/generators/version.js +18 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -0
- package/plugin/src/index.js +1 -0
- package/plugin/src/index.js.map +1 -0
- package/web-types.json +1 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ElementRef, InjectionToken, Optional, SkipSelf, effect, inject } from '@angular/core';
|
|
3
|
+
import { createInjectionToken } from 'ngxtension/create-injection-token';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import * as THREE from 'three';
|
|
6
|
+
import { injectNgtLoop } from './loop';
|
|
7
|
+
import { is } from './utils/is';
|
|
8
|
+
import { makeDpr } from './utils/make';
|
|
9
|
+
import { signalStore } from './utils/signal-store';
|
|
10
|
+
import { updateCamera } from './utils/update';
|
|
11
|
+
function storeFactory(previousStore) {
|
|
12
|
+
const document = inject(DOCUMENT);
|
|
13
|
+
const window = document.defaultView;
|
|
14
|
+
if (!window) {
|
|
15
|
+
// TODO: revisit this when we need to support multiple platforms
|
|
16
|
+
throw new Error(`[NGT] Window is not available.`);
|
|
17
|
+
}
|
|
18
|
+
const loop = injectNgtLoop();
|
|
19
|
+
// NOTE: using Subject because we do not care about late-subscribers
|
|
20
|
+
const pointerMissed$ = new Subject();
|
|
21
|
+
const store = signalStore(({ get, update }) => {
|
|
22
|
+
const { invalidate, advance } = loop;
|
|
23
|
+
const position = new THREE.Vector3();
|
|
24
|
+
const defaultTarget = new THREE.Vector3();
|
|
25
|
+
const tempTarget = new THREE.Vector3();
|
|
26
|
+
function getCurrentViewport(camera = get('camera'), target = defaultTarget, size = get('size')) {
|
|
27
|
+
const { width, height, top, left } = size;
|
|
28
|
+
const aspect = width / height;
|
|
29
|
+
if (target instanceof THREE.Vector3)
|
|
30
|
+
tempTarget.copy(target);
|
|
31
|
+
else
|
|
32
|
+
tempTarget.set(...target);
|
|
33
|
+
const distance = camera.getWorldPosition(position).distanceTo(tempTarget);
|
|
34
|
+
if (is.orthographicCamera(camera)) {
|
|
35
|
+
return { width: width / camera.zoom, height: height / camera.zoom, top, left, factor: 1, distance, aspect };
|
|
36
|
+
}
|
|
37
|
+
const fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians
|
|
38
|
+
const h = 2 * Math.tan(fov / 2) * distance; // visible height
|
|
39
|
+
const w = h * (width / height);
|
|
40
|
+
return { width: w, height: h, top, left, factor: width / w, distance, aspect };
|
|
41
|
+
}
|
|
42
|
+
let performanceTimeout = undefined;
|
|
43
|
+
const setPerformanceCurrent = (current) => update((state) => ({ performance: { ...state.performance, current } }));
|
|
44
|
+
const pointer = new THREE.Vector2();
|
|
45
|
+
return {
|
|
46
|
+
pointerMissed$: pointerMissed$.asObservable(),
|
|
47
|
+
events: { priority: 1, enabled: true, connected: false },
|
|
48
|
+
invalidate: (frames = 1) => invalidate(store, frames),
|
|
49
|
+
advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, store),
|
|
50
|
+
legacy: false,
|
|
51
|
+
linear: false,
|
|
52
|
+
flat: false,
|
|
53
|
+
controls: null,
|
|
54
|
+
clock: new THREE.Clock(),
|
|
55
|
+
pointer,
|
|
56
|
+
frameloop: 'always',
|
|
57
|
+
performance: {
|
|
58
|
+
current: 1,
|
|
59
|
+
min: 0.5,
|
|
60
|
+
max: 1,
|
|
61
|
+
debounce: 200,
|
|
62
|
+
regress: () => {
|
|
63
|
+
const state = get();
|
|
64
|
+
// Clear timeout
|
|
65
|
+
if (performanceTimeout)
|
|
66
|
+
clearTimeout(performanceTimeout);
|
|
67
|
+
// Set lower bound performance
|
|
68
|
+
if (state.performance.current !== state.performance.min)
|
|
69
|
+
setPerformanceCurrent(state.performance.min);
|
|
70
|
+
// Go back to upper bound performance after a while unless something regresses meanwhile
|
|
71
|
+
performanceTimeout = setTimeout(() => {
|
|
72
|
+
setPerformanceCurrent(get('performance', 'max'));
|
|
73
|
+
// safeDetectChanges(cdr);
|
|
74
|
+
}, state.performance.debounce);
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
size: { width: 0, height: 0, top: 0, left: 0, updateStyle: false },
|
|
78
|
+
viewport: {
|
|
79
|
+
initialDpr: 0,
|
|
80
|
+
dpr: 0,
|
|
81
|
+
width: 0,
|
|
82
|
+
height: 0,
|
|
83
|
+
top: 0,
|
|
84
|
+
left: 0,
|
|
85
|
+
aspect: 0,
|
|
86
|
+
distance: 0,
|
|
87
|
+
factor: 0,
|
|
88
|
+
getCurrentViewport,
|
|
89
|
+
},
|
|
90
|
+
setEvents: (events) => update((state) => ({ ...state, events: { ...state.events, ...events } })),
|
|
91
|
+
setSize: (width, height, top, left) => {
|
|
92
|
+
const camera = get('camera');
|
|
93
|
+
const size = { width, height, top: top || 0, left: left || 0 };
|
|
94
|
+
update((state) => ({
|
|
95
|
+
size,
|
|
96
|
+
viewport: { ...state.viewport, ...getCurrentViewport(camera, defaultTarget, size) },
|
|
97
|
+
}));
|
|
98
|
+
},
|
|
99
|
+
setDpr: (dpr) => update((state) => {
|
|
100
|
+
const resolved = makeDpr(dpr, window);
|
|
101
|
+
return { viewport: { ...state.viewport, dpr: resolved, initialDpr: state.viewport.initialDpr || resolved } };
|
|
102
|
+
}),
|
|
103
|
+
setFrameloop: (frameloop = 'always') => {
|
|
104
|
+
const clock = get('clock');
|
|
105
|
+
// if frameloop === "never" clock.elapsedTime is updated using advance(timestamp)
|
|
106
|
+
clock.stop();
|
|
107
|
+
clock.elapsedTime = 0;
|
|
108
|
+
if (frameloop !== 'never') {
|
|
109
|
+
clock.start();
|
|
110
|
+
clock.elapsedTime = 0;
|
|
111
|
+
}
|
|
112
|
+
update(() => ({ frameloop }));
|
|
113
|
+
},
|
|
114
|
+
previousRoot: previousStore,
|
|
115
|
+
internal: {
|
|
116
|
+
active: false,
|
|
117
|
+
priority: 0,
|
|
118
|
+
frames: 0,
|
|
119
|
+
lastEvent: new ElementRef(null),
|
|
120
|
+
interaction: [],
|
|
121
|
+
hovered: new Map(),
|
|
122
|
+
subscribers: [],
|
|
123
|
+
initialClick: [0, 0],
|
|
124
|
+
initialHits: [],
|
|
125
|
+
capturedMap: new Map(),
|
|
126
|
+
subscribe: (callback, priority = 0, _store = store) => {
|
|
127
|
+
const internal = get('internal');
|
|
128
|
+
// If this subscription was given a priority, it takes rendering into its own hands
|
|
129
|
+
// For that reason we switch off automatic rendering and increase the manual flag
|
|
130
|
+
// As long as this flag is positive there can be no internal rendering at all
|
|
131
|
+
// because there could be multiple render subscriptions
|
|
132
|
+
internal.priority = internal.priority + (priority > 0 ? 1 : 0);
|
|
133
|
+
internal.subscribers.push({ callback, priority, store: _store });
|
|
134
|
+
// Register subscriber and sort layers from lowest to highest, meaning,
|
|
135
|
+
// highest priority renders last (on top of the other frames)
|
|
136
|
+
internal.subscribers = internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));
|
|
137
|
+
return () => {
|
|
138
|
+
const internal = get('internal');
|
|
139
|
+
if (internal?.subscribers) {
|
|
140
|
+
// Decrease manual flag if this subscription had a priority
|
|
141
|
+
internal.priority = internal.priority - (priority > 0 ? 1 : 0);
|
|
142
|
+
// Remove subscriber from list
|
|
143
|
+
internal.subscribers = internal.subscribers.filter((s) => s.callback !== callback);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
Object.defineProperty(store, 'pointerMissed$', { get: () => pointerMissed$ });
|
|
151
|
+
let { size: oldSize, viewport: { dpr: oldDpr }, camera: oldCamera, } = store.snapshot;
|
|
152
|
+
const [camera, size, viewportDpr] = [store.select('camera'), store.select('size'), store.select('viewport', 'dpr')];
|
|
153
|
+
effect(() => {
|
|
154
|
+
const [newCamera, newSize, newDpr, gl] = [camera(), size(), viewportDpr(), store.snapshot.gl];
|
|
155
|
+
// Resize camera and renderer on changes to size and pixel-ratio
|
|
156
|
+
if (newSize !== oldSize || newDpr !== oldDpr) {
|
|
157
|
+
oldSize = newSize;
|
|
158
|
+
oldDpr = newDpr;
|
|
159
|
+
// Update camera & renderer
|
|
160
|
+
updateCamera(newCamera, newSize);
|
|
161
|
+
gl.setPixelRatio(newDpr);
|
|
162
|
+
const updateStyle = typeof HTMLCanvasElement !== 'undefined' && gl.domElement instanceof HTMLCanvasElement;
|
|
163
|
+
gl.setSize(newSize.width, newSize.height, updateStyle);
|
|
164
|
+
}
|
|
165
|
+
// Update viewport once the camera changes
|
|
166
|
+
if (newCamera !== oldCamera) {
|
|
167
|
+
oldCamera = newCamera;
|
|
168
|
+
updateCamera(newCamera, newSize);
|
|
169
|
+
// Update viewport
|
|
170
|
+
store.update((state) => ({ viewport: { ...state.viewport, ...state.viewport.getCurrentViewport(newCamera) } }));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return store;
|
|
174
|
+
}
|
|
175
|
+
export const NGT_STORE = new InjectionToken('NgtStore Token');
|
|
176
|
+
export const [injectNgtStore, provideNgtStore] = createInjectionToken(storeFactory, {
|
|
177
|
+
isRoot: false,
|
|
178
|
+
deps: [[new Optional(), new SkipSelf(), NGT_STORE]],
|
|
179
|
+
token: NGT_STORE,
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBOEg5QyxTQUFTLFlBQVksQ0FBQyxhQUE4QztJQUNuRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUVwQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixnRUFBZ0U7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUU3QixvRUFBb0U7SUFDcEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztJQUVqRCxN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LEtBQUssV0FBVyxJQUFJLEVBQUUsQ0FBQyxVQUFVLFlBQVksaUJBQWlCLENBQUM7WUFDM0csRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakMsa0JBQWtCO1lBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakgsQ0FBQztJQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUEyQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLFlBQVksRUFBRTtJQUNuRixNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELEtBQUssRUFBRSxTQUFTO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCwgU2tpcFNlbGYsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0eXBlIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FtZXJhLCBOZ3REb21FdmVudCwgTmd0RXZlbnRNYW5hZ2VyLCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCwgTmd0VGhyZWVFdmVudCB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RMb29wIH0gZnJvbSAnLi9sb29wJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBtYWtlRHByIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB7IHNpZ25hbFN0b3JlLCB0eXBlIE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgdXBkYXRlQ2FtZXJhIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlckxpa2UgPSB7IHJlbmRlcjogKHNjZW5lOiBUSFJFRS5TY2VuZSwgY2FtZXJhOiBUSFJFRS5DYW1lcmEpID0+IGFueSB9O1xuZXhwb3J0IHR5cGUgTmd0Q2FtZXJhTWFudWFsID0gTmd0Q2FtZXJhICYgeyBtYW51YWw/OiBib29sZWFuIH07XG5leHBvcnQgdHlwZSBOZ3REcHIgPSBudW1iZXIgfCBbbWluOiBudW1iZXIsIG1heDogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndFNpemUgPSB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIE5ndFZpZXdwb3J0ID0gTmd0U2l6ZSAmIHtcblx0LyoqIFRoZSBpbml0aWFsIHBpeGVsIHJhdGlvICovXG5cdGluaXRpYWxEcHI6IG51bWJlcjtcblx0LyoqIEN1cnJlbnQgcGl4ZWwgcmF0aW8gKi9cblx0ZHByOiBudW1iZXI7XG5cdC8qKiBzaXplLndpZHRoIC8gdmlld3BvcnQud2lkdGggKi9cblx0ZmFjdG9yOiBudW1iZXI7XG5cdC8qKiBDYW1lcmEgZGlzdGFuY2UgKi9cblx0ZGlzdGFuY2U6IG51bWJlcjtcblx0LyoqIENhbWVyYSBhc3BlY3QgcmF0aW86IHdpZHRoIC8gaGVpZ2h0ICovXG5cdGFzcGVjdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0UGVyZm9ybWFuY2UgPSB7XG5cdC8qKiBDdXJyZW50IHBlcmZvcm1hbmNlIG5vcm1hbCwgYmV0d2VlbiBtaW4gYW5kIG1heCAqL1xuXHRjdXJyZW50OiBudW1iZXI7XG5cdC8qKiBIb3cgbG93IHRoZSBwZXJmb3JtYW5jZSBjYW4gZ28sIGJldHdlZW4gMCBhbmQgbWF4ICovXG5cdG1pbjogbnVtYmVyO1xuXHQvKiogSG93IGhpZ2ggdGhlIHBlcmZvcm1hbmNlIGNhbiBnbywgYmV0d2VlbiBtaW4gYW5kIG1heCAqL1xuXHRtYXg6IG51bWJlcjtcblx0LyoqIFRpbWUgdW50aWwgY3VycmVudCByZXR1cm5zIHRvIG1heCBpbiBtcyAqL1xuXHRkZWJvdW5jZTogbnVtYmVyO1xuXHQvKiogU2V0cyBjdXJyZW50IHRvIG1pbiwgcHV0cyB0aGUgc3lzdGVtIGluIHJlZ3Jlc3Npb24gKi9cblx0cmVncmVzczogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlclN0YXRlID0gTmd0U3RhdGUgJiB7IGRlbHRhOiBudW1iZXI7IGZyYW1lPzogWFJGcmFtZSB9O1xuXG5leHBvcnQgdHlwZSBOZ3RCZWZvcmVSZW5kZXJFdmVudDxUT2JqZWN0IGV4dGVuZHMgTmd0SW5zdGFuY2VOb2RlID0gTmd0SW5zdGFuY2VOb2RlPiA9IHtcblx0c3RhdGU6IE5ndFJlbmRlclN0YXRlO1xuXHRvYmplY3Q6IFRPYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RCZWZvcmVSZW5kZXJSZWNvcmQgPSB7XG5cdGNhbGxiYWNrOiAoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSA9PiB2b2lkO1xuXHRzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXHRwcmlvcml0eT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndEludGVybmFsU3RhdGUgPSB7XG5cdGFjdGl2ZTogYm9vbGVhbjtcblx0cHJpb3JpdHk6IG51bWJlcjtcblx0ZnJhbWVzOiBudW1iZXI7XG5cdGxhc3RFdmVudDogRWxlbWVudFJlZjxOZ3REb21FdmVudCB8IG51bGw+O1xuXHRpbnRlcmFjdGlvbjogVEhSRUUuT2JqZWN0M0RbXTtcblx0aG92ZXJlZDogTWFwPHN0cmluZywgTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4+O1xuXHRjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+O1xuXHRpbml0aWFsQ2xpY2s6IFt4OiBudW1iZXIsIHk6IG51bWJlcl07XG5cdGluaXRpYWxIaXRzOiBUSFJFRS5PYmplY3QzRFtdO1xuXHRzdWJzY3JpYmVyczogTmd0QmVmb3JlUmVuZGVyUmVjb3JkW107XG5cdHN1YnNjcmliZTogKFxuXHRcdGNhbGxiYWNrOiBOZ3RCZWZvcmVSZW5kZXJSZWNvcmRbJ2NhbGxiYWNrJ10sXG5cdFx0cHJpb3JpdHk/OiBudW1iZXIsXG5cdFx0c3RvcmU/OiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sXG5cdCkgPT4gKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndFN0YXRlID0ge1xuXHQvKiogVGhlIGluc3RhbmNlIG9mIHRoZSByZW5kZXJlciAqL1xuXHRnbDogVEhSRUUuV2ViR0xSZW5kZXJlcjtcblx0LyoqIERlZmF1bHQgY2FtZXJhICovXG5cdGNhbWVyYTogTmd0Q2FtZXJhTWFudWFsO1xuXHQvKiogRGVmYXVsdCBzY2VuZSAqL1xuXHRzY2VuZTogVEhSRUUuU2NlbmU7XG5cdC8qKiBEZWZhdWx0IHJheWNhc3RlciAqL1xuXHRyYXljYXN0ZXI6IFRIUkVFLlJheWNhc3Rlcjtcblx0LyoqIERlZmF1bHQgY2xvY2sgKi9cblx0Y2xvY2s6IFRIUkVFLkNsb2NrO1xuXHQvKiogRXZlbnQgbGF5ZXIgaW50ZXJmYWNlLCBjb250YWlucyB0aGUgZXZlbnQgaGFuZGxlciBhbmQgdGhlIG5vZGUgdGhleSdyZSBjb25uZWN0ZWQgdG8gKi9cblx0ZXZlbnRzOiBOZ3RFdmVudE1hbmFnZXI8YW55Pjtcblx0LyoqIFhSIGludGVyZmFjZSAqL1xuXHR4cjogeyBjb25uZWN0OiAoKSA9PiB2b2lkOyBkaXNjb25uZWN0OiAoKSA9PiB2b2lkIH07XG5cdC8qKiBDdXJyZW50bHkgdXNlZCBjb250cm9scyAqL1xuXHRjb250cm9sczogVEhSRUUuRXZlbnREaXNwYXRjaGVyIHwgbnVsbDtcblx0LyoqIE5vcm1hbGl6ZWQgZXZlbnQgY29vcmRpbmF0ZXMgKi9cblx0cG9pbnRlcjogVEhSRUUuVmVjdG9yMjtcblx0LyogV2hldGhlciB0byBlbmFibGUgcjEzOSdzIFRIUkVFLkNvbG9yTWFuYWdlbWVudCAqL1xuXHRsZWdhY3k6IGJvb2xlYW47XG5cdC8qKiBTaG9ydGN1dCB0byBnbC5vdXRwdXRDb2xvclNwYWNlID0gVEhSRUUuTGluZWFyU1JHQkNvbG9yU3BhY2UgKi9cblx0bGluZWFyOiBib29sZWFuO1xuXHQvKiogU2hvcnRjdXQgdG8gZ2wudG9uZU1hcHBpbmcgPSBOb1RvbmVtYXBwaW5nICovXG5cdGZsYXQ6IGJvb2xlYW47XG5cdC8qKiBSZW5kZXIgbG9vcCBmbGFncyAqL1xuXHRmcmFtZWxvb3A6ICdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInO1xuXHQvKiogQWRhcHRpdmUgcGVyZm9ybWFuY2UgaW50ZXJmYWNlICovXG5cdHBlcmZvcm1hbmNlOiBOZ3RQZXJmb3JtYW5jZTtcblx0LyoqIFJlYWN0aXZlIHBpeGVsLXNpemUgb2YgdGhlIGNhbnZhcyAqL1xuXHRzaXplOiBOZ3RTaXplO1xuXHQvKiogUmVhY3RpdmUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgaW4gdGhyZWVqcyB1bml0cyAqL1xuXHR2aWV3cG9ydDogTmd0Vmlld3BvcnQgJiB7XG5cdFx0Z2V0Q3VycmVudFZpZXdwb3J0OiAoXG5cdFx0XHRjYW1lcmE/OiBOZ3RDYW1lcmEsXG5cdFx0XHR0YXJnZXQ/OiBUSFJFRS5WZWN0b3IzIHwgUGFyYW1ldGVyczxUSFJFRS5WZWN0b3IzWydzZXQnXT4sXG5cdFx0XHRzaXplPzogTmd0U2l6ZSxcblx0XHQpID0+IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPjtcblx0fTtcblx0LyoqIEZsYWdzIHRoZSBjYW52YXMgZm9yIHJlbmRlciwgYnV0IGRvZXNuJ3QgcmVuZGVyIGluIGl0c2VsZiAqL1xuXHRpbnZhbGlkYXRlOiAoZnJhbWVzPzogbnVtYmVyKSA9PiB2b2lkO1xuXHQvKiogQWR2YW5jZSAocmVuZGVyKSBvbmUgc3RlcCAqL1xuXHRhZHZhbmNlOiAodGltZXN0YW1wOiBudW1iZXIsIHJ1bkdsb2JhbEVmZmVjdHM/OiBib29sZWFuKSA9PiB2b2lkO1xuXHQvKiogU2hvcnRjdXQgdG8gc2V0dGluZyB0aGUgZXZlbnQgbGF5ZXIgKi9cblx0c2V0RXZlbnRzOiAoZXZlbnRzOiBQYXJ0aWFsPE5ndEV2ZW50TWFuYWdlcjxhbnk+PikgPT4gdm9pZDtcblx0LyoqXG5cdCAqIFNob3J0Y3V0IHRvIG1hbnVhbCBzaXppbmdcblx0ICovXG5cdHNldFNpemU6ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgdG9wPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyKSA9PiB2b2lkO1xuXHQvKiogU2hvcnRjdXQgdG8gbWFudWFsIHNldHRpbmcgdGhlIHBpeGVsIHJhdGlvICovXG5cdHNldERwcjogKGRwcjogTmd0RHByKSA9PiB2b2lkO1xuXHQvKiogU2hvcnRjdXQgdG8gZnJhbWVsb29wIGZsYWdzICovXG5cdHNldEZyYW1lbG9vcDogKGZyYW1lbG9vcD86ICdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInKSA9PiB2b2lkO1xuXHQvKiogV2hlbiB0aGUgY2FudmFzIHdhcyBjbGlja2VkIGJ1dCBub3RoaW5nIHdhcyBoaXQgKi9cblx0LyoqIFBvaW50ZXJNaXNzZWQgT2JzZXJ2YWJsZSAqL1xuXHRwb2ludGVyTWlzc2VkJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50Pjtcblx0LyoqIElmIHRoaXMgc3RhdGUgbW9kZWwgaXMgbGF5ZXJlZCAodmlhIGNyZWF0ZVBvcnRhbCkgdGhlbiB0aGlzIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBsYXllciAqL1xuXHRwcmV2aW91c1Jvb3Q6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IG51bGw7XG5cdC8qKiBJbnRlcm5hbHMgKi9cblx0aW50ZXJuYWw6IE5ndEludGVybmFsU3RhdGU7XG59O1xuXG5mdW5jdGlvbiBzdG9yZUZhY3RvcnkocHJldmlvdXNTdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+IHwgbnVsbCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cdGNvbnN0IHdpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdGlmICghd2luZG93KSB7XG5cdFx0Ly8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIHBsYXRmb3Jtc1xuXHRcdHRocm93IG5ldyBFcnJvcihgW05HVF0gV2luZG93IGlzIG5vdCBhdmFpbGFibGUuYCk7XG5cdH1cblxuXHRjb25zdCBsb29wID0gaW5qZWN0Tmd0TG9vcCgpO1xuXG5cdC8vIE5PVEU6IHVzaW5nIFN1YmplY3QgYmVjYXVzZSB3ZSBkbyBub3QgY2FyZSBhYm91dCBsYXRlLXN1YnNjcmliZXJzXG5cdGNvbnN0IHBvaW50ZXJNaXNzZWQkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuXHRjb25zdCBzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+ID0gc2lnbmFsU3RvcmU8Tmd0U3RhdGU+KCh7IGdldCwgdXBkYXRlIH0pID0+IHtcblx0XHRjb25zdCB7IGludmFsaWRhdGUsIGFkdmFuY2UgfSA9IGxvb3A7XG5cblx0XHRjb25zdCBwb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0Y29uc3QgZGVmYXVsdFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0Y29uc3QgdGVtcFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cblx0XHRmdW5jdGlvbiBnZXRDdXJyZW50Vmlld3BvcnQoXG5cdFx0XHRjYW1lcmE6IE5ndENhbWVyYSA9IGdldCgnY2FtZXJhJyksXG5cdFx0XHR0YXJnZXQ6IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPiA9IGRlZmF1bHRUYXJnZXQsXG5cdFx0XHRzaXplOiBOZ3RTaXplID0gZ2V0KCdzaXplJyksXG5cdFx0KTogT21pdDxOZ3RWaWV3cG9ydCwgJ2RwcicgfCAnaW5pdGlhbERwcic+IHtcblx0XHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSBzaXplO1xuXHRcdFx0Y29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG5cblx0XHRcdGlmICh0YXJnZXQgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzKSB0ZW1wVGFyZ2V0LmNvcHkodGFyZ2V0KTtcblx0XHRcdGVsc2UgdGVtcFRhcmdldC5zZXQoLi4udGFyZ2V0KTtcblxuXHRcdFx0Y29uc3QgZGlzdGFuY2UgPSBjYW1lcmEuZ2V0V29ybGRQb3NpdGlvbihwb3NpdGlvbikuZGlzdGFuY2VUbyh0ZW1wVGFyZ2V0KTtcblxuXHRcdFx0aWYgKGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpKSB7XG5cdFx0XHRcdHJldHVybiB7IHdpZHRoOiB3aWR0aCAvIGNhbWVyYS56b29tLCBoZWlnaHQ6IGhlaWdodCAvIGNhbWVyYS56b29tLCB0b3AsIGxlZnQsIGZhY3RvcjogMSwgZGlzdGFuY2UsIGFzcGVjdCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmb3YgPSAoY2FtZXJhLmZvdiAqIE1hdGguUEkpIC8gMTgwOyAvLyBjb252ZXJ0IHZlcnRpY2FsIGZvdiB0byByYWRpYW5zXG5cdFx0XHRjb25zdCBoID0gMiAqIE1hdGgudGFuKGZvdiAvIDIpICogZGlzdGFuY2U7IC8vIHZpc2libGUgaGVpZ2h0XG5cdFx0XHRjb25zdCB3ID0gaCAqICh3aWR0aCAvIGhlaWdodCk7XG5cdFx0XHRyZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoLCB0b3AsIGxlZnQsIGZhY3Rvcjogd2lkdGggLyB3LCBkaXN0YW5jZSwgYXNwZWN0IH07XG5cdFx0fVxuXG5cdFx0bGV0IHBlcmZvcm1hbmNlVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc2V0UGVyZm9ybWFuY2VDdXJyZW50ID0gKGN1cnJlbnQ6IG51bWJlcikgPT5cblx0XHRcdHVwZGF0ZSgoc3RhdGUpID0+ICh7IHBlcmZvcm1hbmNlOiB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCBjdXJyZW50IH0gfSkpO1xuXG5cdFx0Y29uc3QgcG9pbnRlciA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cG9pbnRlck1pc3NlZCQ6IHBvaW50ZXJNaXNzZWQkLmFzT2JzZXJ2YWJsZSgpLFxuXHRcdFx0ZXZlbnRzOiB7IHByaW9yaXR5OiAxLCBlbmFibGVkOiB0cnVlLCBjb25uZWN0ZWQ6IGZhbHNlIH0sXG5cblx0XHRcdGludmFsaWRhdGU6IChmcmFtZXMgPSAxKSA9PiBpbnZhbGlkYXRlKHN0b3JlLCBmcmFtZXMpLFxuXHRcdFx0YWR2YW5jZTogKHRpbWVzdGFtcDogbnVtYmVyLCBydW5HbG9iYWxFZmZlY3RzPzogYm9vbGVhbikgPT4gYWR2YW5jZSh0aW1lc3RhbXAsIHJ1bkdsb2JhbEVmZmVjdHMsIHN0b3JlKSxcblxuXHRcdFx0bGVnYWN5OiBmYWxzZSxcblx0XHRcdGxpbmVhcjogZmFsc2UsXG5cdFx0XHRmbGF0OiBmYWxzZSxcblxuXHRcdFx0Y29udHJvbHM6IG51bGwsXG5cdFx0XHRjbG9jazogbmV3IFRIUkVFLkNsb2NrKCksXG5cdFx0XHRwb2ludGVyLFxuXG5cdFx0XHRmcmFtZWxvb3A6ICdhbHdheXMnLFxuXG5cdFx0XHRwZXJmb3JtYW5jZToge1xuXHRcdFx0XHRjdXJyZW50OiAxLFxuXHRcdFx0XHRtaW46IDAuNSxcblx0XHRcdFx0bWF4OiAxLFxuXHRcdFx0XHRkZWJvdW5jZTogMjAwLFxuXHRcdFx0XHRyZWdyZXNzOiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXQoKTtcblx0XHRcdFx0XHQvLyBDbGVhciB0aW1lb3V0XG5cdFx0XHRcdFx0aWYgKHBlcmZvcm1hbmNlVGltZW91dCkgY2xlYXJUaW1lb3V0KHBlcmZvcm1hbmNlVGltZW91dCk7XG5cdFx0XHRcdFx0Ly8gU2V0IGxvd2VyIGJvdW5kIHBlcmZvcm1hbmNlXG5cdFx0XHRcdFx0aWYgKHN0YXRlLnBlcmZvcm1hbmNlLmN1cnJlbnQgIT09IHN0YXRlLnBlcmZvcm1hbmNlLm1pbikgc2V0UGVyZm9ybWFuY2VDdXJyZW50KHN0YXRlLnBlcmZvcm1hbmNlLm1pbik7XG5cdFx0XHRcdFx0Ly8gR28gYmFjayB0byB1cHBlciBib3VuZCBwZXJmb3JtYW5jZSBhZnRlciBhIHdoaWxlIHVubGVzcyBzb21ldGhpbmcgcmVncmVzc2VzIG1lYW53aGlsZVxuXHRcdFx0XHRcdHBlcmZvcm1hbmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0UGVyZm9ybWFuY2VDdXJyZW50KGdldCgncGVyZm9ybWFuY2UnLCAnbWF4JykpO1xuXHRcdFx0XHRcdFx0Ly8gc2FmZURldGVjdENoYW5nZXMoY2RyKTtcblx0XHRcdFx0XHR9LCBzdGF0ZS5wZXJmb3JtYW5jZS5kZWJvdW5jZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXG5cdFx0XHRzaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCwgdXBkYXRlU3R5bGU6IGZhbHNlIH0sXG5cdFx0XHR2aWV3cG9ydDoge1xuXHRcdFx0XHRpbml0aWFsRHByOiAwLFxuXHRcdFx0XHRkcHI6IDAsXG5cdFx0XHRcdHdpZHRoOiAwLFxuXHRcdFx0XHRoZWlnaHQ6IDAsXG5cdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0YXNwZWN0OiAwLFxuXHRcdFx0XHRkaXN0YW5jZTogMCxcblx0XHRcdFx0ZmFjdG9yOiAwLFxuXHRcdFx0XHRnZXRDdXJyZW50Vmlld3BvcnQsXG5cdFx0XHR9LFxuXG5cdFx0XHRzZXRFdmVudHM6IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PlxuXHRcdFx0XHR1cGRhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgZXZlbnRzOiB7IC4uLnN0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpLFxuXHRcdFx0c2V0U2l6ZTogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB0b3A/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgY2FtZXJhID0gZ2V0KCdjYW1lcmEnKTtcblx0XHRcdFx0Y29uc3Qgc2l6ZSA9IHsgd2lkdGgsIGhlaWdodCwgdG9wOiB0b3AgfHwgMCwgbGVmdDogbGVmdCB8fCAwIH07XG5cdFx0XHRcdHVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdFx0c2l6ZSxcblx0XHRcdFx0XHR2aWV3cG9ydDogeyAuLi5zdGF0ZS52aWV3cG9ydCwgLi4uZ2V0Q3VycmVudFZpZXdwb3J0KGNhbWVyYSwgZGVmYXVsdFRhcmdldCwgc2l6ZSkgfSxcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSxcblx0XHRcdHNldERwcjogKGRwcjogTmd0RHByKSA9PlxuXHRcdFx0XHR1cGRhdGUoKHN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWQgPSBtYWtlRHByKGRwciwgd2luZG93KTtcblx0XHRcdFx0XHRyZXR1cm4geyB2aWV3cG9ydDogeyAuLi5zdGF0ZS52aWV3cG9ydCwgZHByOiByZXNvbHZlZCwgaW5pdGlhbERwcjogc3RhdGUudmlld3BvcnQuaW5pdGlhbERwciB8fCByZXNvbHZlZCB9IH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0c2V0RnJhbWVsb29wOiAoZnJhbWVsb29wOiAnYWx3YXlzJyB8ICdkZW1hbmQnIHwgJ25ldmVyJyA9ICdhbHdheXMnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNsb2NrID0gZ2V0KCdjbG9jaycpO1xuXG5cdFx0XHRcdC8vIGlmIGZyYW1lbG9vcCA9PT0gXCJuZXZlclwiIGNsb2NrLmVsYXBzZWRUaW1lIGlzIHVwZGF0ZWQgdXNpbmcgYWR2YW5jZSh0aW1lc3RhbXApXG5cdFx0XHRcdGNsb2NrLnN0b3AoKTtcblx0XHRcdFx0Y2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuXG5cdFx0XHRcdGlmIChmcmFtZWxvb3AgIT09ICduZXZlcicpIHtcblx0XHRcdFx0XHRjbG9jay5zdGFydCgpO1xuXHRcdFx0XHRcdGNsb2NrLmVsYXBzZWRUaW1lID0gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHVwZGF0ZSgoKSA9PiAoeyBmcmFtZWxvb3AgfSkpO1xuXHRcdFx0fSxcblxuXHRcdFx0cHJldmlvdXNSb290OiBwcmV2aW91c1N0b3JlLFxuXHRcdFx0aW50ZXJuYWw6IHtcblx0XHRcdFx0YWN0aXZlOiBmYWxzZSxcblx0XHRcdFx0cHJpb3JpdHk6IDAsXG5cdFx0XHRcdGZyYW1lczogMCxcblx0XHRcdFx0bGFzdEV2ZW50OiBuZXcgRWxlbWVudFJlZihudWxsKSxcblx0XHRcdFx0aW50ZXJhY3Rpb246IFtdLFxuXHRcdFx0XHRob3ZlcmVkOiBuZXcgTWFwKCksXG5cdFx0XHRcdHN1YnNjcmliZXJzOiBbXSxcblx0XHRcdFx0aW5pdGlhbENsaWNrOiBbMCwgMF0sXG5cdFx0XHRcdGluaXRpYWxIaXRzOiBbXSxcblx0XHRcdFx0Y2FwdHVyZWRNYXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2s6IE5ndEJlZm9yZVJlbmRlclJlY29yZFsnY2FsbGJhY2snXSxcblx0XHRcdFx0XHRwcmlvcml0eSA9IDAsXG5cdFx0XHRcdFx0X3N0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gPSBzdG9yZSxcblx0XHRcdFx0KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWwgPSBnZXQoJ2ludGVybmFsJyk7XG5cdFx0XHRcdFx0Ly8gSWYgdGhpcyBzdWJzY3JpcHRpb24gd2FzIGdpdmVuIGEgcHJpb3JpdHksIGl0IHRha2VzIHJlbmRlcmluZyBpbnRvIGl0cyBvd24gaGFuZHNcblx0XHRcdFx0XHQvLyBGb3IgdGhhdCByZWFzb24gd2Ugc3dpdGNoIG9mZiBhdXRvbWF0aWMgcmVuZGVyaW5nIGFuZCBpbmNyZWFzZSB0aGUgbWFudWFsIGZsYWdcblx0XHRcdFx0XHQvLyBBcyBsb25nIGFzIHRoaXMgZmxhZyBpcyBwb3NpdGl2ZSB0aGVyZSBjYW4gYmUgbm8gaW50ZXJuYWwgcmVuZGVyaW5nIGF0IGFsbFxuXHRcdFx0XHRcdC8vIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgcmVuZGVyIHN1YnNjcmlwdGlvbnNcblx0XHRcdFx0XHRpbnRlcm5hbC5wcmlvcml0eSA9IGludGVybmFsLnByaW9yaXR5ICsgKHByaW9yaXR5ID4gMCA/IDEgOiAwKTtcblx0XHRcdFx0XHRpbnRlcm5hbC5zdWJzY3JpYmVycy5wdXNoKHsgY2FsbGJhY2ssIHByaW9yaXR5LCBzdG9yZTogX3N0b3JlIH0pO1xuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIHN1YnNjcmliZXIgYW5kIHNvcnQgbGF5ZXJzIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIG1lYW5pbmcsXG5cdFx0XHRcdFx0Ly8gaGlnaGVzdCBwcmlvcml0eSByZW5kZXJzIGxhc3QgKG9uIHRvcCBvZiB0aGUgb3RoZXIgZnJhbWVzKVxuXHRcdFx0XHRcdGludGVybmFsLnN1YnNjcmliZXJzID0gaW50ZXJuYWwuc3Vic2NyaWJlcnMuc29ydCgoYSwgYikgPT4gKGEucHJpb3JpdHkgfHwgMCkgLSAoYi5wcmlvcml0eSB8fCAwKSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWwgPSBnZXQoJ2ludGVybmFsJyk7XG5cdFx0XHRcdFx0XHRpZiAoaW50ZXJuYWw/LnN1YnNjcmliZXJzKSB7XG5cdFx0XHRcdFx0XHRcdC8vIERlY3JlYXNlIG1hbnVhbCBmbGFnIGlmIHRoaXMgc3Vic2NyaXB0aW9uIGhhZCBhIHByaW9yaXR5XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnByaW9yaXR5ID0gaW50ZXJuYWwucHJpb3JpdHkgLSAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgc3Vic2NyaWJlciBmcm9tIGxpc3Rcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwuc3Vic2NyaWJlcnMgPSBpbnRlcm5hbC5zdWJzY3JpYmVycy5maWx0ZXIoKHMpID0+IHMuY2FsbGJhY2sgIT09IGNhbGxiYWNrKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXHR9KTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RvcmUsICdwb2ludGVyTWlzc2VkJCcsIHsgZ2V0OiAoKSA9PiBwb2ludGVyTWlzc2VkJCB9KTtcblxuXHRsZXQge1xuXHRcdHNpemU6IG9sZFNpemUsXG5cdFx0dmlld3BvcnQ6IHsgZHByOiBvbGREcHIgfSxcblx0XHRjYW1lcmE6IG9sZENhbWVyYSxcblx0fSA9IHN0b3JlLnNuYXBzaG90O1xuXG5cdGNvbnN0IFtjYW1lcmEsIHNpemUsIHZpZXdwb3J0RHByXSA9IFtzdG9yZS5zZWxlY3QoJ2NhbWVyYScpLCBzdG9yZS5zZWxlY3QoJ3NpemUnKSwgc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcsICdkcHInKV07XG5cblx0ZWZmZWN0KCgpID0+IHtcblx0XHRjb25zdCBbbmV3Q2FtZXJhLCBuZXdTaXplLCBuZXdEcHIsIGdsXSA9IFtjYW1lcmEoKSwgc2l6ZSgpLCB2aWV3cG9ydERwcigpLCBzdG9yZS5zbmFwc2hvdC5nbF07XG5cblx0XHQvLyBSZXNpemUgY2FtZXJhIGFuZCByZW5kZXJlciBvbiBjaGFuZ2VzIHRvIHNpemUgYW5kIHBpeGVsLXJhdGlvXG5cdFx0aWYgKG5ld1NpemUgIT09IG9sZFNpemUgfHwgbmV3RHByICE9PSBvbGREcHIpIHtcblx0XHRcdG9sZFNpemUgPSBuZXdTaXplO1xuXHRcdFx0b2xkRHByID0gbmV3RHByO1xuXHRcdFx0Ly8gVXBkYXRlIGNhbWVyYSAmIHJlbmRlcmVyXG5cdFx0XHR1cGRhdGVDYW1lcmEobmV3Q2FtZXJhLCBuZXdTaXplKTtcblx0XHRcdGdsLnNldFBpeGVsUmF0aW8obmV3RHByKTtcblxuXHRcdFx0Y29uc3QgdXBkYXRlU3R5bGUgPSB0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGdsLmRvbUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudDtcblx0XHRcdGdsLnNldFNpemUobmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQsIHVwZGF0ZVN0eWxlKTtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgdmlld3BvcnQgb25jZSB0aGUgY2FtZXJhIGNoYW5nZXNcblx0XHRpZiAobmV3Q2FtZXJhICE9PSBvbGRDYW1lcmEpIHtcblx0XHRcdG9sZENhbWVyYSA9IG5ld0NhbWVyYTtcblx0XHRcdHVwZGF0ZUNhbWVyYShuZXdDYW1lcmEsIG5ld1NpemUpO1xuXHRcdFx0Ly8gVXBkYXRlIHZpZXdwb3J0XG5cdFx0XHRzdG9yZS51cGRhdGUoKHN0YXRlKSA9PiAoeyB2aWV3cG9ydDogeyAuLi5zdGF0ZS52aWV3cG9ydCwgLi4uc3RhdGUudmlld3BvcnQuZ2V0Q3VycmVudFZpZXdwb3J0KG5ld0NhbWVyYSkgfSB9KSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gc3RvcmU7XG59XG5cbmV4cG9ydCBjb25zdCBOR1RfU1RPUkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+PignTmd0U3RvcmUgVG9rZW4nKTtcbmV4cG9ydCBjb25zdCBbaW5qZWN0Tmd0U3RvcmUsIHByb3ZpZGVOZ3RTdG9yZV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbihzdG9yZUZhY3RvcnksIHtcblx0aXNSb290OiBmYWxzZSxcblx0ZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIE5HVF9TVE9SRV1dLFxuXHR0b2tlbjogTkdUX1NUT1JFLFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aHJlZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEV2ZW50SGFuZGxlcnMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ndEFmdGVyQXR0YWNoLCBOZ3RBdHRhY2hGdW5jdGlvbiwgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi9pbnN0YW5jZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEJlZm9yZVJlbmRlckV2ZW50IH0gZnJvbSAnLi9zdG9yZSc7XG5cbnR5cGUgTm9FdmVudDxUPiA9IE9taXQ8VCwgJ2FkZEV2ZW50TGlzdGVuZXInIHwgJ3JlbW92ZUV2ZW50TGlzdGVuZXInPjtcblxuZXhwb3J0IHR5cGUgTmd0Tm9uRnVuY3Rpb25LZXlzPFQ+ID0geyBbSyBpbiBrZXlvZiBUXS0/OiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEsgfVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIE5ndE92ZXJ3cml0ZTxULCBPPiA9IE9taXQ8VCwgTmd0Tm9uRnVuY3Rpb25LZXlzPE8+PiAmIE87XG5cbmV4cG9ydCB0eXBlIE5ndEV4dGVuZGVkQ29sb3JzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFRIUkVFLkNvbG9yIHwgdW5kZWZpbmVkID8gVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbiA6IFRbS107XG59O1xuXG4vKipcbiAqIElmICoqVCoqIGNvbnRhaW5zIGEgY29uc3RydWN0b3IsIEBzZWUgQ29uc3RydWN0b3JQYXJhbWV0ZXJzIG11c3QgYmUgdXNlZCwgb3RoZXJ3aXNlICoqVCoqLlxuICovXG50eXBlIE5ndEFyZ3VtZW50czxUPiA9IFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueSkgPT4gYW55ID8gQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IDogVDtcblxuZXhwb3J0IHR5cGUgTmd0RXVsZXIgPSBUSFJFRS5FdWxlciB8IFBhcmFtZXRlcnM8VEhSRUUuRXVsZXJbJ3NldCddPjtcbmV4cG9ydCB0eXBlIE5ndE1hdHJpeDQgPSBUSFJFRS5NYXRyaXg0IHwgUGFyYW1ldGVyczxUSFJFRS5NYXRyaXg0WydzZXQnXT4gfCBSZWFkb25seTxUSFJFRS5NYXRyaXg0WydzZXQnXT47XG5cbi8qKlxuICogVHVybiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUSFJFRS5WZWN0b3IgaW4gdG8gdGhlIHR5cGUgdGhhdCBhbiByM2YgY29tcG9uZW50IHdvdWxkIGFjY2VwdCBhcyBhIHByb3AuXG4gKi9cbnR5cGUgTmd0VmVjdG9yTGlrZTxWZWN0b3JDbGFzcyBleHRlbmRzIFRIUkVFLlZlY3RvcjIgfCBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuVmVjdG9yND4gPVxuXHR8IFZlY3RvckNsYXNzXG5cdHwgUGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0J10+XG5cdHwgUmVhZG9ubHk8UGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0J10+PlxuXHR8IFBhcmFtZXRlcnM8VmVjdG9yQ2xhc3NbJ3NldFNjYWxhciddPlswXTtcblxuZXhwb3J0IHR5cGUgTmd0VmVjdG9yMiA9IE5ndFZlY3Rvckxpa2U8VEhSRUUuVmVjdG9yMj47XG5leHBvcnQgdHlwZSBOZ3RWZWN0b3IzID0gTmd0VmVjdG9yTGlrZTxUSFJFRS5WZWN0b3IzPjtcbmV4cG9ydCB0eXBlIE5ndFZlY3RvcjQgPSBOZ3RWZWN0b3JMaWtlPFRIUkVFLlZlY3RvcjQ+O1xuZXhwb3J0IHR5cGUgTmd0TGF5ZXJzID0gVEhSRUUuTGF5ZXJzIHwgUGFyYW1ldGVyczxUSFJFRS5MYXllcnNbJ3NldCddPlswXTtcbmV4cG9ydCB0eXBlIE5ndFF1YXRlcm5pb24gPSBUSFJFRS5RdWF0ZXJuaW9uIHwgUGFyYW1ldGVyczxUSFJFRS5RdWF0ZXJuaW9uWydzZXQnXT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Tm9kZUV2ZW50TWFwPFRPcmlnaW5hbD4ge1xuXHRhZnRlckF0dGFjaDogTmd0QWZ0ZXJBdHRhY2g8Tmd0SW5zdGFuY2VOb2RlLCBUT3JpZ2luYWw+O1xuXHRhZnRlclVwZGF0ZTogVE9yaWdpbmFsO1xuXHRiZWZvcmVSZW5kZXI6IE5ndEJlZm9yZVJlbmRlckV2ZW50PFRPcmlnaW5hbD47XG59XG5cbmV4cG9ydCB0eXBlIE5ndE5vZGVFbGVtZW50PFRPcmlnaW5hbCwgVENvbnN0cnVjdG9yPiA9IHtcblx0YXR0YWNoOiBzdHJpbmcgfCBzdHJpbmdbXSB8IE5ndEF0dGFjaEZ1bmN0aW9uO1xuXHQvLyByZWY6IE5ndEluamVjdGVkUmVmPFRPcmlnaW5hbD47XG5cdGFkZEV2ZW50TGlzdGVuZXI8VEV2ZW50S2V5IGV4dGVuZHMga2V5b2YgTmd0Tm9kZUV2ZW50TWFwPFRPcmlnaW5hbD4+KFxuXHRcdHR5cGU6IFRFdmVudEtleSxcblx0XHRsaXN0ZW5lcjogKHRoaXM6IE5ndE5vZGVFbGVtZW50PFRPcmlnaW5hbCwgVENvbnN0cnVjdG9yPiwgZXY6IE5ndE5vZGVFdmVudE1hcDxUT3JpZ2luYWw+W1RFdmVudEtleV0pID0+IGFueSxcblx0KTogdm9pZDtcblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcjxURXZlbnRLZXkgZXh0ZW5kcyBrZXlvZiBOZ3ROb2RlRXZlbnRNYXA8VE9yaWdpbmFsPj4oXG5cdFx0dHlwZTogVEV2ZW50S2V5LFxuXHRcdGxpc3RlbmVyOiAodGhpczogTmd0Tm9kZUVsZW1lbnQ8VE9yaWdpbmFsLCBUQ29uc3RydWN0b3I+LCBldjogTmd0Tm9kZUV2ZW50TWFwPFRPcmlnaW5hbD5bVEV2ZW50S2V5XSkgPT4gYW55LFxuXHQpOiB2b2lkO1xuXHRfX25ndF9hcmdzX186IE5ndEFyZ3VtZW50czxUQ29uc3RydWN0b3I+O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Tm9kZTxUT3JpZ2luYWwsIFRDb25zdHJ1Y3RvciwgVE5vRXZlbnQgPSBOb0V2ZW50PFRPcmlnaW5hbD4+ID0gTmd0RXh0ZW5kZWRDb2xvcnM8XG5cdE5ndE92ZXJ3cml0ZTxQYXJ0aWFsPFROb0V2ZW50PiwgTmd0Tm9kZUVsZW1lbnQ8VE9yaWdpbmFsLCBUQ29uc3RydWN0b3I+PlxuPjtcblxuZXhwb3J0IHR5cGUgTmd0T2JqZWN0M0RFdmVudHNNYXAgPSB7XG5cdFtURXZlbnQgaW4ga2V5b2YgTmd0RXZlbnRIYW5kbGVyc10tPzogUGFyYW1ldGVyczxOb25OdWxsYWJsZTxOZ3RFdmVudEhhbmRsZXJzW1RFdmVudF0+PlswXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndE9iamVjdDNETm9kZTxUT3JpZ2luYWwsIFRDb25zdHJ1Y3RvciwgVE5vRXZlbnQgPSBOb0V2ZW50PFRPcmlnaW5hbD4+ID0gTmd0T3ZlcndyaXRlPFxuXHROZ3ROb2RlPFRPcmlnaW5hbCwgVENvbnN0cnVjdG9yLCBUTm9FdmVudD4sXG5cdHtcblx0XHRwb3NpdGlvbjogTmd0VmVjdG9yMztcblx0XHR1cDogTmd0VmVjdG9yMztcblx0XHRzY2FsZTogTmd0VmVjdG9yMztcblx0XHRyb3RhdGlvbjogTmd0RXVsZXI7XG5cdFx0bWF0cml4OiBOZ3RNYXRyaXg0O1xuXHRcdHF1YXRlcm5pb246IE5ndFF1YXRlcm5pb247XG5cdFx0bGF5ZXJzOiBOZ3RMYXllcnM7XG5cdFx0ZGlzcG9zZTogKCgpID0+IHZvaWQpIHwgbnVsbDtcblx0XHRhZGRFdmVudExpc3RlbmVyPFRFdmVudEtleSBleHRlbmRzIGtleW9mIE5ndE9iamVjdDNERXZlbnRzTWFwPihcblx0XHRcdHR5cGU6IFRFdmVudEtleSxcblx0XHRcdGxpc3RlbmVyOiAodGhpczogTmd0T2JqZWN0M0ROb2RlPFRPcmlnaW5hbCwgVENvbnN0cnVjdG9yPiwgZXY6IE5ndE9iamVjdDNERXZlbnRzTWFwW1RFdmVudEtleV0pID0+IGFueSxcblx0XHQpOiB2b2lkO1xuXHRcdHJlbW92ZUV2ZW50TGlzdGVuZXI8VEV2ZW50S2V5IGV4dGVuZHMga2V5b2YgTmd0T2JqZWN0M0RFdmVudHNNYXA+KFxuXHRcdFx0dHlwZTogVEV2ZW50S2V5LFxuXHRcdFx0bGlzdGVuZXI6ICh0aGlzOiBOZ3RPYmplY3QzRE5vZGU8VE9yaWdpbmFsLCBUQ29uc3RydWN0b3I+LCBldjogTmd0T2JqZWN0M0RFdmVudHNNYXBbVEV2ZW50S2V5XSkgPT4gYW55LFxuXHRcdCk6IHZvaWQ7XG5cdH1cbj47XG5cbmV4cG9ydCB0eXBlIE5ndEdlb21ldHJ5PFRHZW9tZXRyeSBleHRlbmRzIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LCBUQ29uc3RydWN0b3I+ID0gTmd0Tm9kZTxUR2VvbWV0cnksIFRDb25zdHJ1Y3Rvcj47XG5leHBvcnQgdHlwZSBOZ3RNYXRlcmlhbDxUTWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5NYXRlcmlhbCwgVENvbnN0cnVjdG9yPiA9IE5ndE5vZGU8VE1hdGVyaWFsLCBUQ29uc3RydWN0b3I+O1xuZXhwb3J0IHR5cGUgTmd0TGlnaHQ8VCBleHRlbmRzIFRIUkVFLkxpZ2h0LCBQPiA9IE5ndE9iamVjdDNETm9kZTxULCBQPjtcblxuZXhwb3J0IHR5cGUgTmd0T2JqZWN0M0QgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuT2JqZWN0M0QsIHR5cGVvZiBUSFJFRS5PYmplY3QzRD47XG5leHBvcnQgdHlwZSBOZ3RBdWRpbyA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5BdWRpbywgdHlwZW9mIFRIUkVFLkF1ZGlvPjtcbmV4cG9ydCB0eXBlIE5ndEF1ZGlvTGlzdGVuZXIgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuQXVkaW9MaXN0ZW5lciwgdHlwZW9mIFRIUkVFLkF1ZGlvTGlzdGVuZXI+O1xuZXhwb3J0IHR5cGUgTmd0UG9zaXRpb25hbEF1ZGlvID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLlBvc2l0aW9uYWxBdWRpbywgdHlwZW9mIFRIUkVFLlBvc2l0aW9uYWxBdWRpbz47XG5cbmV4cG9ydCB0eXBlIE5ndE1lc2ggPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuTWVzaCwgdHlwZW9mIFRIUkVFLk1lc2g+O1xuZXhwb3J0IHR5cGUgTmd0SW5zdGFuY2VkTWVzaCA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5JbnN0YW5jZWRNZXNoLCB0eXBlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaD47XG5leHBvcnQgdHlwZSBOZ3RTY2VuZSA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5TY2VuZSwgdHlwZW9mIFRIUkVFLlNjZW5lPjtcbmV4cG9ydCB0eXBlIE5ndFNwcml0ZSA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5TcHJpdGUsIHR5cGVvZiBUSFJFRS5TcHJpdGU+O1xuZXhwb3J0IHR5cGUgTmd0TE9EID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkxPRCwgdHlwZW9mIFRIUkVFLkxPRD47XG5leHBvcnQgdHlwZSBOZ3RTa2lubmVkTWVzaCA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5Ta2lubmVkTWVzaCwgdHlwZW9mIFRIUkVFLlNraW5uZWRNZXNoPjtcblxuZXhwb3J0IHR5cGUgTmd0U2tlbGV0b24gPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuU2tlbGV0b24sIHR5cGVvZiBUSFJFRS5Ta2VsZXRvbj47XG5leHBvcnQgdHlwZSBOZ3RCb25lID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkJvbmUsIHR5cGVvZiBUSFJFRS5Cb25lPjtcbmV4cG9ydCB0eXBlIE5ndExpbmUgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuTGluZSwgdHlwZW9mIFRIUkVFLkxpbmU+O1xuZXhwb3J0IHR5cGUgTmd0TGluZVNlZ21lbnRzID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkxpbmVTZWdtZW50cywgdHlwZW9mIFRIUkVFLkxpbmVTZWdtZW50cz47XG5leHBvcnQgdHlwZSBOZ3RMaW5lTG9vcCA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5MaW5lTG9vcCwgdHlwZW9mIFRIUkVFLkxpbmVMb29wPjtcbmV4cG9ydCB0eXBlIE5ndFBvaW50cyA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5Qb2ludHMsIHR5cGVvZiBUSFJFRS5Qb2ludHM+O1xuZXhwb3J0IHR5cGUgTmd0R3JvdXAgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuR3JvdXAsIHR5cGVvZiBUSFJFRS5Hcm91cD47XG5cbmV4cG9ydCB0eXBlIE5ndENhbWVyYU5vZGUgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuQ2FtZXJhLCB0eXBlb2YgVEhSRUUuQ2FtZXJhPjtcbmV4cG9ydCB0eXBlIE5ndFBlcnNwZWN0aXZlQ2FtZXJhID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLCB0eXBlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmE+O1xuZXhwb3J0IHR5cGUgTmd0T3J0aG9ncmFwaGljQ2FtZXJhID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSwgdHlwZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYT47XG5leHBvcnQgdHlwZSBOZ3RDdWJlQ2FtZXJhID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkN1YmVDYW1lcmEsIHR5cGVvZiBUSFJFRS5DdWJlQ2FtZXJhPjtcbmV4cG9ydCB0eXBlIE5ndEFycmF5Q2FtZXJhID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkFycmF5Q2FtZXJhLCB0eXBlb2YgVEhSRUUuQXJyYXlDYW1lcmE+O1xuXG5leHBvcnQgdHlwZSBOZ3RJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFxuXHRUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSxcblx0dHlwZW9mIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5XG4+O1xuZXhwb3J0IHR5cGUgTmd0QnVmZmVyR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5CdWZmZXJHZW9tZXRyeSwgdHlwZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndFdpcmVmcmFtZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuV2lyZWZyYW1lR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RUZXRyYWhlZHJvbkdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuVGV0cmFoZWRyb25HZW9tZXRyeSwgdHlwZW9mIFRIUkVFLlRldHJhaGVkcm9uR2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0T2N0YWhlZHJvbkdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuT2N0YWhlZHJvbkdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuT2N0YWhlZHJvbkdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndEljb3NhaGVkcm9uR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5JY29zYWhlZHJvbkdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuSWNvc2FoZWRyb25HZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3REb2RlY2FoZWRyb25HZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLkRvZGVjYWhlZHJvbkdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuRG9kZWNhaGVkcm9uR2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0UG9seWhlZHJvbkdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuUG9seWhlZHJvbkdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuUG9seWhlZHJvbkdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndFR1YmVHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLlR1YmVHZW9tZXRyeSwgdHlwZW9mIFRIUkVFLlR1YmVHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RUb3J1c0tub3RHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLlRvcnVzS25vdEdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0VG9ydXNHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLlRvcnVzR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5Ub3J1c0dlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndFNwaGVyZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuU3BoZXJlR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5TcGhlcmVHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RSaW5nR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5SaW5nR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5SaW5nR2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0UGxhbmVHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLlBsYW5lR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5QbGFuZUdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndExhdGhlR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5MYXRoZUdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuTGF0aGVHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RTaGFwZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuU2hhcGVHZW9tZXRyeSwgdHlwZW9mIFRIUkVFLlNoYXBlR2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0RXh0cnVkZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuRXh0cnVkZUdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuRXh0cnVkZUdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndEVkZ2VzR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5FZGdlc0dlb21ldHJ5LCB0eXBlb2YgVEhSRUUuRWRnZXNHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RDb25lR2VvbWV0cnkgPSBOZ3RHZW9tZXRyeTxUSFJFRS5Db25lR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5Db25lR2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0Q3lsaW5kZXJHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLkN5bGluZGVyR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5DeWxpbmRlckdlb21ldHJ5PjtcbmV4cG9ydCB0eXBlIE5ndENpcmNsZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuQ2lyY2xlR2VvbWV0cnksIHR5cGVvZiBUSFJFRS5DaXJjbGVHZW9tZXRyeT47XG5leHBvcnQgdHlwZSBOZ3RCb3hHZW9tZXRyeSA9IE5ndEdlb21ldHJ5PFRIUkVFLkJveEdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuQm94R2VvbWV0cnk+O1xuZXhwb3J0IHR5cGUgTmd0Q2Fwc3VsZUdlb21ldHJ5ID0gTmd0R2VvbWV0cnk8VEhSRUUuQ2Fwc3VsZUdlb21ldHJ5LCB0eXBlb2YgVEhSRUUuQ2Fwc3VsZUdlb21ldHJ5PjtcblxuZXhwb3J0IHR5cGUgTmd0U2hhZG93TWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5TaGFkb3dNYXRlcmlhbCwgW1RIUkVFLlNoYWRlck1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0U3ByaXRlTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5TcHJpdGVNYXRlcmlhbCwgW1RIUkVFLlNwcml0ZU1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0UmF3U2hhZGVyTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5SYXdTaGFkZXJNYXRlcmlhbCwgW1RIUkVFLlNoYWRlck1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0U2hhZGVyTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5TaGFkZXJNYXRlcmlhbCwgW1RIUkVFLlNoYWRlck1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0UG9pbnRzTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5Qb2ludHNNYXRlcmlhbCwgW1RIUkVFLlBvaW50c01hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCwgW1RIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCwgW1RIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaFBob25nTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCwgW1RIUkVFLk1lc2hQaG9uZ01hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaFRvb25NYXRlcmlhbCA9IE5ndE1hdGVyaWFsPFRIUkVFLk1lc2hUb29uTWF0ZXJpYWwsIFtUSFJFRS5NZXNoVG9vbk1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaE5vcm1hbE1hdGVyaWFsID0gTmd0TWF0ZXJpYWw8VEhSRUUuTWVzaE5vcm1hbE1hdGVyaWFsLCBbVEhSRUUuTWVzaE5vcm1hbE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaExhbWJlcnRNYXRlcmlhbCA9IE5ndE1hdGVyaWFsPFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwsIFtUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaERlcHRoTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoRGVwdGhNYXRlcmlhbCwgW1RIUkVFLk1lc2hEZXB0aE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaERpc3RhbmNlTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoRGlzdGFuY2VNYXRlcmlhbCwgW1RIUkVFLk1lc2hEaXN0YW5jZU1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaEJhc2ljTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCwgW1RIUkVFLk1lc2hCYXNpY01hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TWVzaE1hdGNhcE1hdGVyaWFsID0gTmd0TWF0ZXJpYWw8VEhSRUUuTWVzaE1hdGNhcE1hdGVyaWFsLCBbVEhSRUUuTWVzaE1hdGNhcE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TGluZURhc2hlZE1hdGVyaWFsID0gTmd0TWF0ZXJpYWw8VEhSRUUuTGluZURhc2hlZE1hdGVyaWFsLCBbVEhSRUUuTGluZURhc2hlZE1hdGVyaWFsUGFyYW1ldGVyc10+O1xuZXhwb3J0IHR5cGUgTmd0TGluZUJhc2ljTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCwgW1RIUkVFLkxpbmVCYXNpY01hdGVyaWFsUGFyYW1ldGVyc10+O1xuXG5leHBvcnQgdHlwZSBOZ3RQcmltaXRpdmUgPSBOZ3ROb2RlRWxlbWVudDxhbnksIGFueT47XG5leHBvcnQgdHlwZSBOZ3RWYWx1ZSA9IE5ndE5vZGU8eyByYXdWYWx1ZTogYW55IH0sIHt9PjtcblxuZXhwb3J0IHR5cGUgTmd0TGlnaHRTaGFkb3cgPSBOZ3ROb2RlPFRIUkVFLkxpZ2h0U2hhZG93LCB0eXBlb2YgVEhSRUUuTGlnaHRTaGFkb3c+O1xuZXhwb3J0IHR5cGUgTmd0U3BvdExpZ2h0U2hhZG93ID0gTmd0Tm9kZTxUSFJFRS5TcG90TGlnaHRTaGFkb3csIHR5cGVvZiBUSFJFRS5TcG90TGlnaHRTaGFkb3c+O1xuZXhwb3J0IHR5cGUgTmd0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IE5ndE5vZGU8VEhSRUUuRGlyZWN0aW9uYWxMaWdodFNoYWRvdywgdHlwZW9mIFRIUkVFLkRpcmVjdGlvbmFsTGlnaHRTaGFkb3c+O1xuXG5leHBvcnQgdHlwZSBOZ3RTcG90TGlnaHQgPSBOZ3RMaWdodDxUSFJFRS5TcG90TGlnaHQsIHR5cGVvZiBUSFJFRS5TcG90TGlnaHQ+O1xuZXhwb3J0IHR5cGUgTmd0UG9pbnRMaWdodCA9IE5ndExpZ2h0PFRIUkVFLlBvaW50TGlnaHQsIHR5cGVvZiBUSFJFRS5Qb2ludExpZ2h0PjtcbmV4cG9ydCB0eXBlIE5ndFJlY3RBcmVhTGlnaHQgPSBOZ3RMaWdodDxUSFJFRS5SZWN0QXJlYUxpZ2h0LCB0eXBlb2YgVEhSRUUuUmVjdEFyZWFMaWdodD47XG5leHBvcnQgdHlwZSBOZ3RIZW1pc3BoZXJlTGlnaHQgPSBOZ3RMaWdodDxUSFJFRS5IZW1pc3BoZXJlTGlnaHQsIHR5cGVvZiBUSFJFRS5IZW1pc3BoZXJlTGlnaHQ+O1xuZXhwb3J0IHR5cGUgTmd0RGlyZWN0aW9uYWxMaWdodCA9IE5ndExpZ2h0PFRIUkVFLkRpcmVjdGlvbmFsTGlnaHQsIHR5cGVvZiBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0PjtcbmV4cG9ydCB0eXBlIE5ndEFtYmllbnRMaWdodCA9IE5ndExpZ2h0PFRIUkVFLkFtYmllbnRMaWdodCwgdHlwZW9mIFRIUkVFLkFtYmllbnRMaWdodD47XG5leHBvcnQgdHlwZSBOZ3RMaWdodFByb2JlID0gTmd0TGlnaHQ8VEhSRUUuTGlnaHRQcm9iZSwgdHlwZW9mIFRIUkVFLkxpZ2h0UHJvYmU+O1xuXG5leHBvcnQgdHlwZSBOZ3RTcG90TGlnaHRIZWxwZXIgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuU3BvdExpZ2h0SGVscGVyLCB0eXBlb2YgVEhSRUUuU3BvdExpZ2h0SGVscGVyPjtcbmV4cG9ydCB0eXBlIE5ndFNrZWxldG9uSGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLlNrZWxldG9uSGVscGVyLCB0eXBlb2YgVEhSRUUuU2tlbGV0b25IZWxwZXI+O1xuZXhwb3J0IHR5cGUgTmd0UG9pbnRMaWdodEhlbHBlciA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5Qb2ludExpZ2h0SGVscGVyLCB0eXBlb2YgVEhSRUUuUG9pbnRMaWdodEhlbHBlcj47XG5leHBvcnQgdHlwZSBOZ3RIZW1pc3BoZXJlTGlnaHRIZWxwZXIgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuSGVtaXNwaGVyZUxpZ2h0SGVscGVyLCB0eXBlb2YgVEhSRUUuSGVtaXNwaGVyZUxpZ2h0SGVscGVyPjtcbmV4cG9ydCB0eXBlIE5ndEdyaWRIZWxwZXIgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuR3JpZEhlbHBlciwgdHlwZW9mIFRIUkVFLkdyaWRIZWxwZXI+O1xuZXhwb3J0IHR5cGUgTmd0UG9sYXJHcmlkSGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLlBvbGFyR3JpZEhlbHBlciwgdHlwZW9mIFRIUkVFLlBvbGFyR3JpZEhlbHBlcj47XG5leHBvcnQgdHlwZSBOZ3REaXJlY3Rpb25hbExpZ2h0SGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFxuXHRUSFJFRS5EaXJlY3Rpb25hbExpZ2h0SGVscGVyLFxuXHR0eXBlb2YgVEhSRUUuRGlyZWN0aW9uYWxMaWdodEhlbHBlclxuPjtcbmV4cG9ydCB0eXBlIE5ndENhbWVyYUhlbHBlciA9IE5ndE9iamVjdDNETm9kZTxUSFJFRS5DYW1lcmFIZWxwZXIsIHR5cGVvZiBUSFJFRS5DYW1lcmFIZWxwZXI+O1xuZXhwb3J0IHR5cGUgTmd0Qm94SGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkJveEhlbHBlciwgdHlwZW9mIFRIUkVFLkJveEhlbHBlcj47XG5leHBvcnQgdHlwZSBOZ3RCb3gzSGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkJveDNIZWxwZXIsIHR5cGVvZiBUSFJFRS5Cb3gzSGVscGVyPjtcbmV4cG9ydCB0eXBlIE5ndFBsYW5lSGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLlBsYW5lSGVscGVyLCB0eXBlb2YgVEhSRUUuUGxhbmVIZWxwZXI+O1xuZXhwb3J0IHR5cGUgTmd0QXJyb3dIZWxwZXIgPSBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuQXJyb3dIZWxwZXIsIHR5cGVvZiBUSFJFRS5BcnJvd0hlbHBlcj47XG5leHBvcnQgdHlwZSBOZ3RBeGVzSGVscGVyID0gTmd0T2JqZWN0M0ROb2RlPFRIUkVFLkF4ZXNIZWxwZXIsIHR5cGVvZiBUSFJFRS5BeGVzSGVscGVyPjtcblxuZXhwb3J0IHR5cGUgTmd0VGV4dHVyZSA9IE5ndE5vZGU8VEhSRUUuVGV4dHVyZSwgdHlwZW9mIFRIUkVFLlRleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0VmlkZW9UZXh0dXJlID0gTmd0Tm9kZTxUSFJFRS5WaWRlb1RleHR1cmUsIHR5cGVvZiBUSFJFRS5WaWRlb1RleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0RGF0YVRleHR1cmUgPSBOZ3ROb2RlPFRIUkVFLkRhdGFUZXh0dXJlLCB0eXBlb2YgVEhSRUUuRGF0YVRleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0RGF0YTNEVGV4dHVyZSA9IE5ndE5vZGU8VEhSRUUuRGF0YTNEVGV4dHVyZSwgdHlwZW9mIFRIUkVFLkRhdGEzRFRleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0Q29tcHJlc3NlZFRleHR1cmUgPSBOZ3ROb2RlPFRIUkVFLkNvbXByZXNzZWRUZXh0dXJlLCB0eXBlb2YgVEhSRUUuQ29tcHJlc3NlZFRleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0Q3ViZVRleHR1cmUgPSBOZ3ROb2RlPFRIUkVFLkN1YmVUZXh0dXJlLCB0eXBlb2YgVEhSRUUuQ3ViZVRleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0Q2FudmFzVGV4dHVyZSA9IE5ndE5vZGU8VEhSRUUuQ2FudmFzVGV4dHVyZSwgdHlwZW9mIFRIUkVFLkNhbnZhc1RleHR1cmU+O1xuZXhwb3J0IHR5cGUgTmd0RGVwdGhUZXh0dXJlID0gTmd0Tm9kZTxUSFJFRS5EZXB0aFRleHR1cmUsIHR5cGVvZiBUSFJFRS5EZXB0aFRleHR1cmU+O1xuXG5leHBvcnQgdHlwZSBOZ3RSYXljYXN0ZXIgPSBOZ3ROb2RlPFRIUkVFLlJheWNhc3RlciwgdHlwZW9mIFRIUkVFLlJheWNhc3Rlcj47XG5leHBvcnQgdHlwZSBOZ3RWZWN0b3IyTm9kZSA9IE5ndE5vZGU8VEhSRUUuVmVjdG9yMiwgdHlwZW9mIFRIUkVFLlZlY3RvcjI+O1xuZXhwb3J0IHR5cGUgTmd0VmVjdG9yM05vZGUgPSBOZ3ROb2RlPFRIUkVFLlZlY3RvcjMsIHR5cGVvZiBUSFJFRS5WZWN0b3IzPjtcbmV4cG9ydCB0eXBlIE5ndFZlY3RvcjROb2RlID0gTmd0Tm9kZTxUSFJFRS5WZWN0b3I0LCB0eXBlb2YgVEhSRUUuVmVjdG9yND47XG5leHBvcnQgdHlwZSBOZ3RFdWxlck5vZGUgPSBOZ3ROb2RlPFRIUkVFLkV1bGVyLCB0eXBlb2YgVEhSRUUuRXVsZXI+O1xuZXhwb3J0IHR5cGUgTmd0TWF0cml4M05vZGUgPSBOZ3ROb2RlPFRIUkVFLk1hdHJpeDMsIHR5cGVvZiBUSFJFRS5NYXRyaXgzPjtcbmV4cG9ydCB0eXBlIE5ndE1hdHJpeDROb2RlID0gTmd0Tm9kZTxUSFJFRS5NYXRyaXg0LCB0eXBlb2YgVEhSRUUuTWF0cml4ND47XG5leHBvcnQgdHlwZSBOZ3RRdWF0ZXJuaW9uTm9kZSA9IE5ndE5vZGU8VEhSRUUuUXVhdGVybmlvbiwgdHlwZW9mIFRIUkVFLlF1YXRlcm5pb24+O1xuZXhwb3J0IHR5cGUgTmd0QnVmZmVyQXR0cmlidXRlID0gTmd0Tm9kZTxUSFJFRS5CdWZmZXJBdHRyaWJ1dGUsIHR5cGVvZiBUSFJFRS5CdWZmZXJBdHRyaWJ1dGU+O1xuZXhwb3J0IHR5cGUgTmd0RmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSA9IE5ndE5vZGU8VEhSRUUuRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSwgdHlwZW9mIFRIUkVFLkZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU+O1xuZXhwb3J0IHR5cGUgTmd0RmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSA9IE5ndE5vZGU8VEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSwgdHlwZW9mIFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGU+O1xuLy8gQHRzLWV4cGVjdC1lcnJvciAtIG9sZCB2ZXJzaW9ucyBzdGlsbCBoYXZlIHRoaXNcbmV4cG9ydCB0eXBlIE5ndEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUgPSBOZ3ROb2RlPFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUsIHR5cGVvZiBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndEludDhCdWZmZXJBdHRyaWJ1dGUgPSBOZ3ROb2RlPFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUsIHR5cGVvZiBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndEludDE2QnVmZmVyQXR0cmlidXRlID0gTmd0Tm9kZTxUSFJFRS5JbnQxNkJ1ZmZlckF0dHJpYnV0ZSwgdHlwZW9mIFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndEludDMyQnVmZmVyQXR0cmlidXRlID0gTmd0Tm9kZTxUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSwgdHlwZW9mIFRIUkVFLkludDMyQnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndFVpbnQ4QnVmZmVyQXR0cmlidXRlID0gTmd0Tm9kZTxUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSwgdHlwZW9mIFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSA9IE5ndE5vZGU8VEhSRUUuVWludDE2QnVmZmVyQXR0cmlidXRlLCB0eXBlb2YgVEhSRUUuVWludDE2QnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA9IE5ndE5vZGU8VEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlLCB0eXBlb2YgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlPjtcbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSA9IE5ndE5vZGU8XG5cdFRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSxcblx0dHlwZW9mIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZVxuPjtcbmV4cG9ydCB0eXBlIE5ndENvbG9yID0gTmd0Tm9kZTxUSFJFRS5Db2xvciwgVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbj47XG5leHBvcnQgdHlwZSBOZ3RGb2cgPSBOZ3ROb2RlPFRIUkVFLkZvZywgdHlwZW9mIFRIUkVFLkZvZz47XG5leHBvcnQgdHlwZSBOZ3RGb2dFeHAyID0gTmd0Tm9kZTxUSFJFRS5Gb2dFeHAyLCB0eXBlb2YgVEhSRUUuRm9nRXhwMj47XG5leHBvcnQgdHlwZSBOZ3RTaGFwZSA9IE5ndE5vZGU8VEhSRUUuU2hhcGUsIHR5cGVvZiBUSFJFRS5TaGFwZT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWVFbGVtZW50cyB7XG5cdCduZ3Qtb2JqZWN0M0QnOiBOZ3RPYmplY3QzRDtcblxuXHQvLyBgYXVkaW9gIHdvcmtzIGJ1dCBjb25mbGljdHMgd2l0aCBAdHlwZXMvcmVhY3QuIFRyeSB1c2luZyBQb3NpdGlvbmFsQXVkaW8gZnJvbSBAcmVhY3QtdGhyZWUvZHJlaSBpbnN0ZWFkXG5cdCduZ3QtYXVkaW8nOiBOZ3RBdWRpbztcblx0J25ndC1hdWRpby1saXN0ZW5lcic6IE5ndEF1ZGlvTGlzdGVuZXI7XG5cdCduZ3QtcG9zaXRpb25hbC1hdWRpbyc6IE5ndFBvc2l0aW9uYWxBdWRpbztcblxuXHQnbmd0LW1lc2gnOiBOZ3RNZXNoO1xuXHQnbmd0LWluc3RhbmNlZC1tZXNoJzogTmd0SW5zdGFuY2VkTWVzaDtcblx0J25ndC1zY2VuZSc6IE5ndFNjZW5lO1xuXHQnbmd0LXNwcml0ZSc6IE5ndFNwcml0ZTtcblx0J25ndC1sT0QnOiBOZ3RMT0Q7XG5cdCduZ3Qtc2tpbm5lZC1tZXNoJzogTmd0U2tpbm5lZE1lc2g7XG5cdCduZ3Qtc2tlbGV0b24nOiBOZ3RTa2VsZXRvbjtcblx0J25ndC1ib25lJzogTmd0Qm9uZTtcblxuXHQnbmd0LWxpbmUnOiBOZ3RMaW5lO1xuXHQnbmd0LWxpbmUtc2VnbWVudHMnOiBOZ3RMaW5lU2VnbWVudHM7XG5cdCduZ3QtbGluZS1sb29wJzogTmd0TGluZUxvb3A7XG5cdCduZ3QtcG9pbnRzJzogTmd0UG9pbnRzO1xuXHQnbmd0LWdyb3VwJzogTmd0R3JvdXA7XG5cblx0Ly8gY2FtZXJhc1xuXHQnbmd0LWNhbWVyYSc6IE5ndENhbWVyYU5vZGU7XG5cdCduZ3QtcGVyc3BlY3RpdmUtY2FtZXJhJzogTmd0UGVyc3BlY3RpdmVDYW1lcmE7XG5cdCduZ3Qtb3J0aG9ncmFwaGljLWNhbWVyYSc6IE5ndE9ydGhvZ3JhcGhpY0NhbWVyYTtcblx0J25ndC1jdWJlLWNhbWVyYSc6IE5ndEN1YmVDYW1lcmE7XG5cdCduZ3QtYXJyYXktY2FtZXJhJzogTmd0QXJyYXlDYW1lcmE7XG5cblx0Ly8gZ2VvbWV0cnlcblx0J25ndC1pbnN0YW5jZWQtYnVmZmVyLWdlb21ldHJ5JzogTmd0SW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk7XG5cdCduZ3QtYnVmZmVyLWdlb21ldHJ5JzogTmd0QnVmZmVyR2VvbWV0cnk7XG5cdCduZ3Qtd2lyZWZyYW1lLWdlb21ldHJ5JzogTmd0V2lyZWZyYW1lR2VvbWV0cnk7XG5cdCduZ3QtdGV0cmFoZWRyb24tZ2VvbWV0cnknOiBOZ3RUZXRyYWhlZHJvbkdlb21ldHJ5O1xuXHQnbmd0LW9jdGFoZWRyb24tZ2VvbWV0cnknOiBOZ3RPY3RhaGVkcm9uR2VvbWV0cnk7XG5cdCduZ3QtaWNvc2FoZWRyb24tZ2VvbWV0cnknOiBOZ3RJY29zYWhlZHJvbkdlb21ldHJ5O1xuXHQnbmd0LXBvbHloZWRyb24tZ2VvbWV0cnknOiBOZ3RQb2x5aGVkcm9uR2VvbWV0cnk7XG5cdCduZ3QtZG9kZWNhaGVkcm9uLWdlb21ldHJ5JzogTmd0RG9kZWNhaGVkcm9uR2VvbWV0cnk7XG5cdCduZ3QtdHViZS1nZW9tZXRyeSc6IE5ndFR1YmVHZW9tZXRyeTtcblx0J25ndC10b3J1cy1rbm90LWdlb21ldHJ5JzogTmd0VG9ydXNLbm90R2VvbWV0cnk7XG5cdCduZ3QtdG9ydXMtZ2VvbWV0cnknOiBOZ3RUb3J1c0dlb21ldHJ5O1xuXHQnbmd0LXNwaGVyZS1nZW9tZXRyeSc6IE5ndFNwaGVyZUdlb21ldHJ5O1xuXHQnbmd0LXJpbmctZ2VvbWV0cnknOiBOZ3RSaW5nR2VvbWV0cnk7XG5cdCduZ3QtcGxhbmUtZ2VvbWV0cnknOiBOZ3RQbGFuZUdlb21ldHJ5O1xuXHQnbmd0LWxhdGhlLWdlb21ldHJ5JzogTmd0TGF0aGVHZW9tZXRyeTtcblx0J25ndC1zaGFwZS1nZW9tZXRyeSc6IE5ndFNoYXBlR2VvbWV0cnk7XG5cdCduZ3QtZXh0cnVkZS1nZW9tZXRyeSc6IE5ndEV4dHJ1ZGVHZW9tZXRyeTtcblx0J25ndC1lZGdlcy1nZW9tZXRyeSc6IE5ndEVkZ2VzR2VvbWV0cnk7XG5cdCduZ3QtY29uZS1nZW9tZXRyeSc6IE5ndENvbmVHZW9tZXRyeTtcblx0J25ndC1jeWxpbmRlci1nZW9tZXRyeSc6IE5ndEN5bGluZGVyR2VvbWV0cnk7XG5cdCduZ3QtY2lyY2xlLWdlb21ldHJ5JzogTmd0Q2lyY2xlR2VvbWV0cnk7XG5cdCduZ3QtYm94LWdlb21ldHJ5JzogTmd0Qm94R2VvbWV0cnk7XG5cdCduZ3QtY2Fwc3VsZS1nZW9tZXRyeSc6IE5ndENhcHN1bGVHZW9tZXRyeTtcblxuXHQvLyBtYXRlcmlhbHNcblx0J25ndC1zaGFkb3ctbWF0ZXJpYWwnOiBOZ3RTaGFkb3dNYXRlcmlhbDtcblx0J25ndC1zcHJpdGUtbWF0ZXJpYWwnOiBOZ3RTcHJpdGVNYXRlcmlhbDtcblx0J25ndC1yYXctc2hhZGVyLW1hdGVyaWFsJzogTmd0UmF3U2hhZGVyTWF0ZXJpYWw7XG5cdCduZ3Qtc2hhZGVyLW1hdGVyaWFsJzogTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdCduZ3QtcG9pbnRzLW1hdGVyaWFsJzogTmd0UG9pbnRzTWF0ZXJpYWw7XG5cdCduZ3QtbWVzaC1waHlzaWNhbC1tYXRlcmlhbCc6IE5ndE1lc2hQaHlzaWNhbE1hdGVyaWFsO1xuXHQnbmd0LW1lc2gtc3RhbmRhcmQtbWF0ZXJpYWwnOiBOZ3RNZXNoU3RhbmRhcmRNYXRlcmlhbDtcblx0J25ndC1tZXNoLXBob25nLW1hdGVyaWFsJzogTmd0TWVzaFBob25nTWF0ZXJpYWw7XG5cdCduZ3QtbWVzaC10b29uLW1hdGVyaWFsJzogTmd0TWVzaFRvb25NYXRlcmlhbDtcblx0J25ndC1tZXNoLW5vcm1hbC1tYXRlcmlhbCc6IE5ndE1lc2hOb3JtYWxNYXRlcmlhbDtcblx0J25ndC1tZXNoLWxhbWJlcnQtbWF0ZXJpYWwnOiBOZ3RNZXNoTGFtYmVydE1hdGVyaWFsO1xuXHQnbmd0LW1lc2gtZGVwdGgtbWF0ZXJpYWwnOiBOZ3RNZXNoRGVwdGhNYXRlcmlhbDtcblx0J25ndC1tZXNoLWRpc3RhbmNlLW1hdGVyaWFsJzogTmd0TWVzaERpc3RhbmNlTWF0ZXJpYWw7XG5cdCduZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbCc6IE5ndE1lc2hCYXNpY01hdGVyaWFsO1xuXHQnbmd0LW1lc2gtbWF0Y2FwLW1hdGVyaWFsJzogTmd0TWVzaE1hdGNhcE1hdGVyaWFsO1xuXHQnbmd0LWxpbmUtZGFzaGVkLW1hdGVyaWFsJzogTmd0TGluZURhc2hlZE1hdGVyaWFsO1xuXHQnbmd0LWxpbmUtYmFzaWMtbWF0ZXJpYWwnOiBOZ3RMaW5lQmFzaWNNYXRlcmlhbDtcblxuXHQvLyBwcmltaXRpdmVcblx0J25ndC1wcmltaXRpdmUnOiBOZ3RQcmltaXRpdmU7XG5cblx0Ly8gcmF3VmFsdWVcblx0J25ndC12YWx1ZSc6IE5ndFZhbHVlO1xuXG5cdC8vIGxpZ2h0cyBhbmQgb3RoZXJcblx0J25ndC1zcG90LWxpZ2h0LXNoYWRvdyc6IE5ndFNwb3RMaWdodFNoYWRvdztcblx0J25ndC1zcG90LWxpZ2h0JzogTmd0U3BvdExpZ2h0O1xuXHQnbmd0LXBvaW50LWxpZ2h0JzogTmd0UG9pbnRMaWdodDtcblx0J25ndC1yZWN0LWFyZWEtbGlnaHQnOiBOZ3RSZWN0QXJlYUxpZ2h0O1xuXHQnbmd0LWhlbWlzcGhlcmUtbGlnaHQnOiBOZ3RIZW1pc3BoZXJlTGlnaHQ7XG5cdCduZ3QtZGlyZWN0aW9uYWwtbGlnaHQtc2hhZG93JzogTmd0RGlyZWN0aW9uYWxMaWdodFNoYWRvdztcblx0J25ndC1kaXJlY3Rpb25hbC1saWdodCc6IE5ndERpcmVjdGlvbmFsTGlnaHQ7XG5cdCduZ3QtYW1iaWVudC1saWdodCc6IE5ndEFtYmllbnRMaWdodDtcblx0J25ndC1saWdodC1zaGFkb3cnOiBOZ3RMaWdodFNoYWRvdztcblx0J25ndC1saWdodC1wcm9iZSc6IE5ndExpZ2h0UHJvYmU7XG5cblx0Ly8gaGVscGVyc1xuXHQnbmd0LXNwb3QtbGlnaHQtaGVscGVyJzogTmd0U3BvdExpZ2h0SGVscGVyO1xuXHQnbmd0LXNrZWxldG9uLWhlbHBlcic6IE5ndFNrZWxldG9uSGVscGVyO1xuXHQnbmd0LXBvaW50LWxpZ2h0LWhlbHBlcic6IE5ndFBvaW50TGlnaHRIZWxwZXI7XG5cdCduZ3QtaGVtaXNwaGVyZS1saWdodC1oZWxwZXInOiBOZ3RIZW1pc3BoZXJlTGlnaHRIZWxwZXI7XG5cdCduZ3QtZ3JpZC1oZWxwZXInOiBOZ3RHcmlkSGVscGVyO1xuXHQnbmd0LXBvbGFyLWdyaWQtaGVscGVyJzogTmd0UG9sYXJHcmlkSGVscGVyO1xuXHQnbmd0LWRpcmVjdGlvbmFsLWxpZ2h0LWhlbHBlcic6IE5ndERpcmVjdGlvbmFsTGlnaHRIZWxwZXI7XG5cdCduZ3QtY2FtZXJhLWhlbHBlcic6IE5ndENhbWVyYUhlbHBlcjtcblx0J25ndC1ib3gtaGVscGVyJzogTmd0Qm94SGVscGVyO1xuXHQnbmd0LWJveDMtaGVscGVyJzogTmd0Qm94M0hlbHBlcjtcblx0J25ndC1wbGFuZS1oZWxwZXInOiBOZ3RQbGFuZUhlbHBlcjtcblx0J25ndC1hcnJvdy1oZWxwZXInOiBOZ3RBcnJvd0hlbHBlcjtcblx0J25ndC1heGVzLWhlbHBlcic6IE5ndEF4ZXNIZWxwZXI7XG5cblx0Ly8gdGV4dHVyZXNcblx0J25ndC10ZXh0dXJlJzogTmd0VGV4dHVyZTtcblx0J25ndC12aWRlby10ZXh0dXJlJzogTmd0VmlkZW9UZXh0dXJlO1xuXHQnbmd0LWRhdGEtdGV4dHVyZSc6IE5ndERhdGFUZXh0dXJlO1xuXHQnbmd0LWRhdGEzRC10ZXh0dXJlJzogTmd0RGF0YTNEVGV4dHVyZTtcblx0J25ndC1jb21wcmVzc2VkLXRleHR1cmUnOiBOZ3RDb21wcmVzc2VkVGV4dHVyZTtcblx0J25ndC1jdWJlLXRleHR1cmUnOiBOZ3RDdWJlVGV4dHVyZTtcblx0J25ndC1jYW52YXMtdGV4dHVyZSc6IE5ndENhbnZhc1RleHR1cmU7XG5cdCduZ3QtZGVwdGgtdGV4dHVyZSc6IE5ndERlcHRoVGV4dHVyZTtcblxuXHQvLyBtaXNjXG5cdCduZ3QtcmF5Y2FzdGVyJzogTmd0UmF5Y2FzdGVyO1xuXHQnbmd0LXZlY3RvcjInOiBOZ3RWZWN0b3IyTm9kZTtcblx0J25ndC12ZWN0b3IzJzogTmd0VmVjdG9yM05vZGU7XG5cdCduZ3QtdmVjdG9yNCc6IE5ndFZlY3RvcjROb2RlO1xuXHQnbmd0LWV1bGVyJzogTmd0RXVsZXJOb2RlO1xuXHQnbmd0LW1hdHJpeDMnOiBOZ3RNYXRyaXgzTm9kZTtcblx0J25ndC1tYXRyaXg0JzogTmd0TWF0cml4NE5vZGU7XG5cdCduZ3QtcXVhdGVybmlvbic6IE5ndFF1YXRlcm5pb25Ob2RlO1xuXHQnbmd0LWJ1ZmZlci1hdHRyaWJ1dGUnOiBOZ3RCdWZmZXJBdHRyaWJ1dGU7XG5cdCduZ3QtZmxvYXQxNi1idWZmZXItYXR0cmlidXRlJzogTmd0RmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC1mbG9hdDMyLWJ1ZmZlci1hdHRyaWJ1dGUnOiBOZ3RGbG9hdDMyQnVmZmVyQXR0cmlidXRlO1xuXHQnbmd0LWZsb2F0NjQtYnVmZmVyLWF0dHJpYnV0ZSc6IE5ndEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU7XG5cdCduZ3QtaW50OC1idWZmZXItYXR0cmlidXRlJzogTmd0SW50OEJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC1pbnQxNi1idWZmZXItYXR0cmlidXRlJzogTmd0SW50MTZCdWZmZXJBdHRyaWJ1dGU7XG5cdCduZ3QtaW50MzItYnVmZmVyLWF0dHJpYnV0ZSc6IE5ndEludDMyQnVmZmVyQXR0cmlidXRlO1xuXHQnbmd0LXVuaXQ4LWJ1ZmZlci1hdHRyaWJ1dGUnOiBOZ3RVaW50OEJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC11bml0MTYtYnVmZmVyLWF0dHJpYnV0ZSc6IE5ndFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC11bml0MzItYnVmZmVyLWF0dHJpYnV0ZSc6IE5ndFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC1pbnN0YW5jZWQtYnVmZmVyLWF0dHJpYnV0ZSc6IE5ndEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTtcblx0J25ndC1jb2xvcic6IE5ndENvbG9yO1xuXHQnbmd0LWZvZyc6IE5ndEZvZztcblx0J25ndC1mb2ctZXhwMic6IE5ndEZvZ0V4cDI7XG5cdCduZ3Qtc2hhcGUnOiBOZ3RTaGFwZTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIGV4dGVuZHMgVGhyZWVFbGVtZW50cyB7fVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTmd0UHJvcGVydGllczxUPiA9IFBpY2s8VCwgeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIChfOiBhbnkpID0+IGFueSA/IG5ldmVyIDogSyB9W2tleW9mIFRdPjtcbmV4cG9ydCB0eXBlIE5ndEFueVJlY29yZCA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbmV4cG9ydCB0eXBlIE5ndEVxdUNvbmZpZyA9IHtcblx0LyoqIENvbXBhcmUgYXJyYXlzIGJ5IHJlZmVyZW5jZSBlcXVhbGl0eSBhID09PSBiIChkZWZhdWx0KSwgb3IgYnkgc2hhbGxvdyBlcXVhbGl0eSAqL1xuXHRhcnJheXM/OiAncmVmZXJlbmNlJyB8ICdzaGFsbG93Jztcblx0LyoqIENvbXBhcmUgb2JqZWN0cyBieSByZWZlcmVuY2UgZXF1YWxpdHkgYSA9PT0gYiAoZGVmYXVsdCksIG9yIGJ5IHNoYWxsb3cgZXF1YWxpdHkgKi9cblx0b2JqZWN0cz86ICdyZWZlcmVuY2UnIHwgJ3NoYWxsb3cnO1xuXHQvKiogSWYgdHJ1ZSB0aGUga2V5cyBpbiBib3RoIGEgYW5kIGIgbXVzdCBtYXRjaCAxOjEgKGRlZmF1bHQpLCBpZiBmYWxzZSBhJ3Mga2V5cyBtdXN0IGludGVyc2VjdCBiJ3MgKi9cblx0c3RyaWN0PzogYm9vbGVhbjtcbn07XG4iXX0=
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { getLocalState, invalidateInstance } from '../instance';
|
|
3
|
+
import { is } from './is';
|
|
4
|
+
import { checkUpdate } from './update';
|
|
5
|
+
// This function prepares a set of changes to be applied to the instance
|
|
6
|
+
function diffProps(instance, props) {
|
|
7
|
+
const propsEntries = Object.entries(props);
|
|
8
|
+
const changes = [];
|
|
9
|
+
for (const [propKey, propValue] of propsEntries) {
|
|
10
|
+
let key = propKey;
|
|
11
|
+
if (is.colorSpaceExist(instance)) {
|
|
12
|
+
if (propKey === 'encoding') {
|
|
13
|
+
key = 'colorSpace';
|
|
14
|
+
}
|
|
15
|
+
else if (propKey === 'outputEncoding') {
|
|
16
|
+
key = 'outputColorSpace';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (is.equ(propValue, instance[key]))
|
|
20
|
+
continue;
|
|
21
|
+
changes.push([propKey, propValue]);
|
|
22
|
+
}
|
|
23
|
+
return changes;
|
|
24
|
+
}
|
|
25
|
+
// This function applies a set of changes to the instance
|
|
26
|
+
export function applyProps(instance, props) {
|
|
27
|
+
// if props is empty
|
|
28
|
+
if (!Object.keys(props).length)
|
|
29
|
+
return instance;
|
|
30
|
+
// filter equals, and reserved props
|
|
31
|
+
const localState = getLocalState(instance);
|
|
32
|
+
const rootState = localState?.store?.snapshot ?? {};
|
|
33
|
+
const changes = diffProps(instance, props);
|
|
34
|
+
for (let i = 0; i < changes.length; i++) {
|
|
35
|
+
let [key, value] = changes[i];
|
|
36
|
+
// Alias (output)encoding => (output)colorSpace (since r152)
|
|
37
|
+
// https://github.com/pmndrs/react-three-fiber/pull/2829
|
|
38
|
+
if (is.colorSpaceExist(instance)) {
|
|
39
|
+
const sRGBEncoding = 3001;
|
|
40
|
+
const SRGBColorSpace = 'srgb';
|
|
41
|
+
const LinearSRGBColorSpace = 'srgb-linear';
|
|
42
|
+
if (key === 'encoding') {
|
|
43
|
+
key = 'colorSpace';
|
|
44
|
+
value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
|
|
45
|
+
}
|
|
46
|
+
else if (key === 'outputEncoding') {
|
|
47
|
+
key = 'outputColorSpace';
|
|
48
|
+
value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const currentInstance = instance;
|
|
52
|
+
const targetProp = currentInstance[key];
|
|
53
|
+
// special treatmen for objects with support for set/copy, and layers
|
|
54
|
+
if (targetProp && targetProp['set'] && (targetProp['copy'] || targetProp instanceof THREE.Layers)) {
|
|
55
|
+
const isColor = targetProp instanceof THREE.Color;
|
|
56
|
+
// if value is an array
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
if (targetProp['fromArray'])
|
|
59
|
+
targetProp['fromArray'](value);
|
|
60
|
+
else
|
|
61
|
+
targetProp['set'](...value);
|
|
62
|
+
} // test again target.copy
|
|
63
|
+
else if (targetProp['copy'] &&
|
|
64
|
+
value &&
|
|
65
|
+
value.constructor &&
|
|
66
|
+
targetProp.constructor.name === value.constructor.name) {
|
|
67
|
+
targetProp['copy'](value);
|
|
68
|
+
if (!THREE.ColorManagement && !rootState.linear && isColor)
|
|
69
|
+
targetProp['convertSRGBToLinear']();
|
|
70
|
+
} // if nothing else fits, just set the single value, ignore undefined
|
|
71
|
+
else if (value !== undefined) {
|
|
72
|
+
const isColor = targetProp instanceof THREE.Color;
|
|
73
|
+
// allow setting array scalars
|
|
74
|
+
if (!isColor && targetProp['setScalar'])
|
|
75
|
+
targetProp['setScalar'](value);
|
|
76
|
+
// layers have no copy function, copy the mask
|
|
77
|
+
else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers)
|
|
78
|
+
targetProp.mask = value.mask;
|
|
79
|
+
// otherwise just set ...
|
|
80
|
+
else
|
|
81
|
+
targetProp['set'](value);
|
|
82
|
+
// auto-convert srgb
|
|
83
|
+
if (!THREE.ColorManagement && !rootState?.linear && isColor)
|
|
84
|
+
targetProp.convertSRGBToLinear();
|
|
85
|
+
}
|
|
86
|
+
} // else just overwrite the value
|
|
87
|
+
else {
|
|
88
|
+
currentInstance[key] = value;
|
|
89
|
+
// auto-convert srgb textures
|
|
90
|
+
if (currentInstance[key] instanceof THREE.Texture &&
|
|
91
|
+
currentInstance[key].format === THREE.RGBAFormat &&
|
|
92
|
+
currentInstance[key].type === THREE.UnsignedByteType) {
|
|
93
|
+
const texture = currentInstance[key];
|
|
94
|
+
if (rootState?.gl) {
|
|
95
|
+
if (is.colorSpaceExist(texture) && is.colorSpaceExist(rootState.gl))
|
|
96
|
+
texture.colorSpace = rootState.gl.outputColorSpace;
|
|
97
|
+
// @ts-expect-error - these are removed in new version of three but still available in older versions
|
|
98
|
+
else
|
|
99
|
+
texture['encoding'] = rootState.gl['outputEncoding'];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
checkUpdate(currentInstance[key]);
|
|
104
|
+
checkUpdate(targetProp);
|
|
105
|
+
invalidateInstance(instance);
|
|
106
|
+
}
|
|
107
|
+
const instanceHandlersCount = localState?.eventCount;
|
|
108
|
+
const parent = localState?.instanceStore?.get('parent');
|
|
109
|
+
if (parent && rootState.internal && instance['raycast'] && instanceHandlersCount !== localState?.eventCount) {
|
|
110
|
+
// Pre-emptively remove the instance from the interaction manager
|
|
111
|
+
const index = rootState.internal.interaction.indexOf(instance);
|
|
112
|
+
if (index > -1)
|
|
113
|
+
rootState.internal.interaction.splice(index, 1);
|
|
114
|
+
// Add the instance to the interaction manager only when it has handlers
|
|
115
|
+
if (localState?.eventCount)
|
|
116
|
+
rootState.internal.interaction.push(instance);
|
|
117
|
+
}
|
|
118
|
+
if (parent && localState?.afterUpdate && localState.afterUpdate.observed && changes.length) {
|
|
119
|
+
localState.afterUpdate.next(instance);
|
|
120
|
+
}
|
|
121
|
+
return instance;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktcHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9hcHBseS1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUF3QixNQUFNLGFBQWEsQ0FBQztBQUd0RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsd0VBQXdFO0FBQ3hFLFNBQVMsU0FBUyxDQUFDLFFBQXNCLEVBQUUsS0FBbUI7SUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLE9BQU8sR0FBb0MsRUFBRSxDQUFDO0lBRXBELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDbEIsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzVCLEdBQUcsR0FBRyxZQUFZLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN6QyxHQUFHLEdBQUcsa0JBQWtCLENBQUM7WUFDMUIsQ0FBQztRQUNGLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNoQixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBeUIsRUFBRSxLQUFtQjtJQUN4RSxvQkFBb0I7SUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRWhELG9DQUFvQztJQUNwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUssRUFBZSxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5Qiw0REFBNEQ7UUFDNUQsd0RBQXdEO1FBQ3hELElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7WUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUM7WUFFM0MsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3hCLEdBQUcsR0FBRyxZQUFZLENBQUM7Z0JBQ25CLEtBQUssR0FBRyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQ3hFLENBQUM7aUJBQU0sSUFBSSxHQUFHLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxHQUFHLGtCQUFrQixDQUFDO2dCQUN6QixLQUFLLEdBQUcsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4RSxDQUFDO1FBQ0YsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEMscUVBQXFFO1FBQ3JFLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLFlBQVksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbkcsTUFBTSxPQUFPLEdBQUcsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDbEQsdUJBQXVCO1lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUM7b0JBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDOztvQkFDdkQsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLHlCQUF5QjtpQkFDdEIsSUFDSixVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUNsQixLQUFLO2dCQUNMLEtBQUssQ0FBQyxXQUFXO2dCQUNqQixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFDckQsQ0FBQztnQkFDRixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxPQUFPO29CQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDakcsQ0FBQyxDQUFDLG9FQUFvRTtpQkFDakUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sT0FBTyxHQUFHLFVBQVUsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNsRCw4QkFBOEI7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQztvQkFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hFLDhDQUE4QztxQkFDekMsSUFBSSxVQUFVLFlBQVksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLFlBQVksS0FBSyxDQUFDLE1BQU07b0JBQUUsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUMzRyx5QkFBeUI7O29CQUNwQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTlCLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLE9BQU87b0JBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0YsQ0FBQztRQUNGLENBQUMsQ0FBQyxnQ0FBZ0M7YUFDN0IsQ0FBQztZQUNMLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDN0IsNkJBQTZCO1lBQzdCLElBQ0MsZUFBZSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssQ0FBQyxPQUFPO2dCQUM3QyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxVQUFVO2dCQUNoRCxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbkQsQ0FBQztnQkFDRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFrQixDQUFDO2dCQUN0RCxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNwRCxxR0FBcUc7O3dCQUNoRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFFRCxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLHFCQUFxQixHQUFHLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEQsSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUkscUJBQXFCLEtBQUssVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQzdHLGlFQUFpRTtRQUNqRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSx3RUFBd0U7UUFDeEUsSUFBSSxVQUFVLEVBQUUsVUFBVTtZQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLFdBQVcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUYsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBpbnZhbGlkYXRlSW5zdGFuY2UsIHR5cGUgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTdGF0ZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IGNoZWNrVXBkYXRlIH0gZnJvbSAnLi91cGRhdGUnO1xuXG4vLyBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgc2V0IG9mIGNoYW5nZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgaW5zdGFuY2VcbmZ1bmN0aW9uIGRpZmZQcm9wcyhpbnN0YW5jZTogTmd0QW55UmVjb3JkLCBwcm9wczogTmd0QW55UmVjb3JkKSB7XG5cdGNvbnN0IHByb3BzRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKTtcblx0Y29uc3QgY2hhbmdlczogW2tleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bl1bXSA9IFtdO1xuXG5cdGZvciAoY29uc3QgW3Byb3BLZXksIHByb3BWYWx1ZV0gb2YgcHJvcHNFbnRyaWVzKSB7XG5cdFx0bGV0IGtleSA9IHByb3BLZXk7XG5cdFx0aWYgKGlzLmNvbG9yU3BhY2VFeGlzdChpbnN0YW5jZSkpIHtcblx0XHRcdGlmIChwcm9wS2V5ID09PSAnZW5jb2RpbmcnKSB7XG5cdFx0XHRcdGtleSA9ICdjb2xvclNwYWNlJztcblx0XHRcdH0gZWxzZSBpZiAocHJvcEtleSA9PT0gJ291dHB1dEVuY29kaW5nJykge1xuXHRcdFx0XHRrZXkgPSAnb3V0cHV0Q29sb3JTcGFjZSc7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpcy5lcXUocHJvcFZhbHVlLCBpbnN0YW5jZVtrZXldKSkgY29udGludWU7XG5cdFx0Y2hhbmdlcy5wdXNoKFtwcm9wS2V5LCBwcm9wVmFsdWVdKTtcblx0fVxuXG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgYSBzZXQgb2YgY2hhbmdlcyB0byB0aGUgaW5zdGFuY2VcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVByb3BzKGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsIHByb3BzOiBOZ3RBbnlSZWNvcmQpIHtcblx0Ly8gaWYgcHJvcHMgaXMgZW1wdHlcblx0aWYgKCFPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoKSByZXR1cm4gaW5zdGFuY2U7XG5cblx0Ly8gZmlsdGVyIGVxdWFscywgYW5kIHJlc2VydmVkIHByb3BzXG5cdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0Y29uc3Qgcm9vdFN0YXRlID0gbG9jYWxTdGF0ZT8uc3RvcmU/LnNuYXBzaG90ID8/ICh7fSBhcyBOZ3RTdGF0ZSk7XG5cdGNvbnN0IGNoYW5nZXMgPSBkaWZmUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0XHRsZXQgW2tleSwgdmFsdWVdID0gY2hhbmdlc1tpXTtcblxuXHRcdC8vIEFsaWFzIChvdXRwdXQpZW5jb2RpbmcgPT4gKG91dHB1dCljb2xvclNwYWNlIChzaW5jZSByMTUyKVxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvcHVsbC8yODI5XG5cdFx0aWYgKGlzLmNvbG9yU3BhY2VFeGlzdChpbnN0YW5jZSkpIHtcblx0XHRcdGNvbnN0IHNSR0JFbmNvZGluZyA9IDMwMDE7XG5cdFx0XHRjb25zdCBTUkdCQ29sb3JTcGFjZSA9ICdzcmdiJztcblx0XHRcdGNvbnN0IExpbmVhclNSR0JDb2xvclNwYWNlID0gJ3NyZ2ItbGluZWFyJztcblxuXHRcdFx0aWYgKGtleSA9PT0gJ2VuY29kaW5nJykge1xuXHRcdFx0XHRrZXkgPSAnY29sb3JTcGFjZSc7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IHNSR0JFbmNvZGluZyA/IFNSR0JDb2xvclNwYWNlIDogTGluZWFyU1JHQkNvbG9yU3BhY2U7XG5cdFx0XHR9IGVsc2UgaWYgKGtleSA9PT0gJ291dHB1dEVuY29kaW5nJykge1xuXHRcdFx0XHRrZXkgPSAnb3V0cHV0Q29sb3JTcGFjZSc7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IHNSR0JFbmNvZGluZyA/IFNSR0JDb2xvclNwYWNlIDogTGluZWFyU1JHQkNvbG9yU3BhY2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VycmVudEluc3RhbmNlID0gaW5zdGFuY2U7XG5cdFx0Y29uc3QgdGFyZ2V0UHJvcCA9IGN1cnJlbnRJbnN0YW5jZVtrZXldO1xuXG5cdFx0Ly8gc3BlY2lhbCB0cmVhdG1lbiBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yIHNldC9jb3B5LCBhbmQgbGF5ZXJzXG5cdFx0aWYgKHRhcmdldFByb3AgJiYgdGFyZ2V0UHJvcFsnc2V0J10gJiYgKHRhcmdldFByb3BbJ2NvcHknXSB8fCB0YXJnZXRQcm9wIGluc3RhbmNlb2YgVEhSRUUuTGF5ZXJzKSkge1xuXHRcdFx0Y29uc3QgaXNDb2xvciA9IHRhcmdldFByb3AgaW5zdGFuY2VvZiBUSFJFRS5Db2xvcjtcblx0XHRcdC8vIGlmIHZhbHVlIGlzIGFuIGFycmF5XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHRhcmdldFByb3BbJ2Zyb21BcnJheSddKSB0YXJnZXRQcm9wWydmcm9tQXJyYXknXSh2YWx1ZSk7XG5cdFx0XHRcdGVsc2UgdGFyZ2V0UHJvcFsnc2V0J10oLi4udmFsdWUpO1xuXHRcdFx0fSAvLyB0ZXN0IGFnYWluIHRhcmdldC5jb3B5XG5cdFx0XHRlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0UHJvcFsnY29weSddICYmXG5cdFx0XHRcdHZhbHVlICYmXG5cdFx0XHRcdHZhbHVlLmNvbnN0cnVjdG9yICYmXG5cdFx0XHRcdHRhcmdldFByb3AuY29uc3RydWN0b3IubmFtZSA9PT0gdmFsdWUuY29uc3RydWN0b3IubmFtZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRhcmdldFByb3BbJ2NvcHknXSh2YWx1ZSk7XG5cdFx0XHRcdGlmICghVEhSRUUuQ29sb3JNYW5hZ2VtZW50ICYmICFyb290U3RhdGUubGluZWFyICYmIGlzQ29sb3IpIHRhcmdldFByb3BbJ2NvbnZlcnRTUkdCVG9MaW5lYXInXSgpO1xuXHRcdFx0fSAvLyBpZiBub3RoaW5nIGVsc2UgZml0cywganVzdCBzZXQgdGhlIHNpbmdsZSB2YWx1ZSwgaWdub3JlIHVuZGVmaW5lZFxuXHRcdFx0ZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBpc0NvbG9yID0gdGFyZ2V0UHJvcCBpbnN0YW5jZW9mIFRIUkVFLkNvbG9yO1xuXHRcdFx0XHQvLyBhbGxvdyBzZXR0aW5nIGFycmF5IHNjYWxhcnNcblx0XHRcdFx0aWYgKCFpc0NvbG9yICYmIHRhcmdldFByb3BbJ3NldFNjYWxhciddKSB0YXJnZXRQcm9wWydzZXRTY2FsYXInXSh2YWx1ZSk7XG5cdFx0XHRcdC8vIGxheWVycyBoYXZlIG5vIGNvcHkgZnVuY3Rpb24sIGNvcHkgdGhlIG1hc2tcblx0XHRcdFx0ZWxzZSBpZiAodGFyZ2V0UHJvcCBpbnN0YW5jZW9mIFRIUkVFLkxheWVycyAmJiB2YWx1ZSBpbnN0YW5jZW9mIFRIUkVFLkxheWVycykgdGFyZ2V0UHJvcC5tYXNrID0gdmFsdWUubWFzaztcblx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3Qgc2V0IC4uLlxuXHRcdFx0XHRlbHNlIHRhcmdldFByb3BbJ3NldCddKHZhbHVlKTtcblxuXHRcdFx0XHQvLyBhdXRvLWNvbnZlcnQgc3JnYlxuXHRcdFx0XHRpZiAoIVRIUkVFLkNvbG9yTWFuYWdlbWVudCAmJiAhcm9vdFN0YXRlPy5saW5lYXIgJiYgaXNDb2xvcikgdGFyZ2V0UHJvcC5jb252ZXJ0U1JHQlRvTGluZWFyKCk7XG5cdFx0XHR9XG5cdFx0fSAvLyBlbHNlIGp1c3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZVxuXHRcdGVsc2Uge1xuXHRcdFx0Y3VycmVudEluc3RhbmNlW2tleV0gPSB2YWx1ZTtcblx0XHRcdC8vIGF1dG8tY29udmVydCBzcmdiIHRleHR1cmVzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRJbnN0YW5jZVtrZXldIGluc3RhbmNlb2YgVEhSRUUuVGV4dHVyZSAmJlxuXHRcdFx0XHRjdXJyZW50SW5zdGFuY2Vba2V5XS5mb3JtYXQgPT09IFRIUkVFLlJHQkFGb3JtYXQgJiZcblx0XHRcdFx0Y3VycmVudEluc3RhbmNlW2tleV0udHlwZSA9PT0gVEhSRUUuVW5zaWduZWRCeXRlVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHRleHR1cmUgPSBjdXJyZW50SW5zdGFuY2Vba2V5XSBhcyBUSFJFRS5UZXh0dXJlO1xuXHRcdFx0XHRpZiAocm9vdFN0YXRlPy5nbCkge1xuXHRcdFx0XHRcdGlmIChpcy5jb2xvclNwYWNlRXhpc3QodGV4dHVyZSkgJiYgaXMuY29sb3JTcGFjZUV4aXN0KHJvb3RTdGF0ZS5nbCkpXG5cdFx0XHRcdFx0XHR0ZXh0dXJlLmNvbG9yU3BhY2UgPSByb290U3RhdGUuZ2wub3V0cHV0Q29sb3JTcGFjZTtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gdGhlc2UgYXJlIHJlbW92ZWQgaW4gbmV3IHZlcnNpb24gb2YgdGhyZWUgYnV0IHN0aWxsIGF2YWlsYWJsZSBpbiBvbGRlciB2ZXJzaW9uc1xuXHRcdFx0XHRcdGVsc2UgdGV4dHVyZVsnZW5jb2RpbmcnXSA9IHJvb3RTdGF0ZS5nbFsnb3V0cHV0RW5jb2RpbmcnXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNoZWNrVXBkYXRlKGN1cnJlbnRJbnN0YW5jZVtrZXldKTtcblx0XHRjaGVja1VwZGF0ZSh0YXJnZXRQcm9wKTtcblx0XHRpbnZhbGlkYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuXHR9XG5cblx0Y29uc3QgaW5zdGFuY2VIYW5kbGVyc0NvdW50ID0gbG9jYWxTdGF0ZT8uZXZlbnRDb3VudDtcblx0Y29uc3QgcGFyZW50ID0gbG9jYWxTdGF0ZT8uaW5zdGFuY2VTdG9yZT8uZ2V0KCdwYXJlbnQnKTtcblxuXHRpZiAocGFyZW50ICYmIHJvb3RTdGF0ZS5pbnRlcm5hbCAmJiBpbnN0YW5jZVsncmF5Y2FzdCddICYmIGluc3RhbmNlSGFuZGxlcnNDb3VudCAhPT0gbG9jYWxTdGF0ZT8uZXZlbnRDb3VudCkge1xuXHRcdC8vIFByZS1lbXB0aXZlbHkgcmVtb3ZlIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG5cdFx0Y29uc3QgaW5kZXggPSByb290U3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24uaW5kZXhPZihpbnN0YW5jZSk7XG5cdFx0aWYgKGluZGV4ID4gLTEpIHJvb3RTdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdC8vIEFkZCB0aGUgaW5zdGFuY2UgdG8gdGhlIGludGVyYWN0aW9uIG1hbmFnZXIgb25seSB3aGVuIGl0IGhhcyBoYW5kbGVyc1xuXHRcdGlmIChsb2NhbFN0YXRlPy5ldmVudENvdW50KSByb290U3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24ucHVzaChpbnN0YW5jZSk7XG5cdH1cblxuXHRpZiAocGFyZW50ICYmIGxvY2FsU3RhdGU/LmFmdGVyVXBkYXRlICYmIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUub2JzZXJ2ZWQgJiYgY2hhbmdlcy5sZW5ndGgpIHtcblx0XHRsb2NhbFN0YXRlLmFmdGVyVXBkYXRlLm5leHQoaW5zdGFuY2UpO1xuXHR9XG5cblx0cmV0dXJuIGluc3RhbmNlO1xufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { getLocalState } from '../instance';
|
|
2
|
+
import { applyProps } from './apply-props';
|
|
3
|
+
export function attach(object, value, paths = []) {
|
|
4
|
+
const [base, ...remaining] = paths;
|
|
5
|
+
if (!base)
|
|
6
|
+
return;
|
|
7
|
+
if (remaining.length === 0) {
|
|
8
|
+
applyProps(object, { [base]: value });
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
assignEmpty(object, base);
|
|
12
|
+
attach(object[base], value, remaining);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function detach(parent, child, attachProp) {
|
|
16
|
+
const childLocalState = getLocalState(child);
|
|
17
|
+
if (childLocalState) {
|
|
18
|
+
if (Array.isArray(attachProp))
|
|
19
|
+
attach(parent, childLocalState.previousAttach, attachProp);
|
|
20
|
+
else
|
|
21
|
+
childLocalState.previousAttach();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function assignEmpty(obj, base) {
|
|
25
|
+
if ((!Object.hasOwn(obj, base) && Reflect && !!Reflect.has && !Reflect.has(obj, base)) || obj[base] === undefined) {
|
|
26
|
+
obj[base] = {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function createAttachFunction(cb) {
|
|
30
|
+
return (parent, child, store) => cb({ parent, child, store });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvYXR0YWNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFvQixFQUFFLEtBQWMsRUFBRSxRQUFrQixFQUFFO0lBQ2hGLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBRWxCLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxDQUFDO1FBQ1AsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBb0IsRUFBRSxLQUFtQixFQUFFLFVBQXdDO0lBQ3pHLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7O1lBQ3BGLGVBQWUsQ0FBQyxjQUE2QixFQUFFLENBQUM7SUFDdkQsQ0FBQztBQUNGLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFpQixFQUFFLElBQVk7SUFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkgsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNoQixDQUFDO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbkMsRUFBd0c7SUFFeEcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvY2FsU3RhdGUsIHR5cGUgTmd0QXR0YWNoRnVuY3Rpb24gfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi9hcHBseS1wcm9wcyc7XG5pbXBvcnQgdHlwZSB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi9zaWduYWwtc3RvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoKG9iamVjdDogTmd0QW55UmVjb3JkLCB2YWx1ZTogdW5rbm93biwgcGF0aHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0Y29uc3QgW2Jhc2UsIC4uLnJlbWFpbmluZ10gPSBwYXRocztcblx0aWYgKCFiYXNlKSByZXR1cm47XG5cblx0aWYgKHJlbWFpbmluZy5sZW5ndGggPT09IDApIHtcblx0XHRhcHBseVByb3BzKG9iamVjdCwgeyBbYmFzZV06IHZhbHVlIH0pO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnbkVtcHR5KG9iamVjdCwgYmFzZSk7XG5cdFx0YXR0YWNoKG9iamVjdFtiYXNlXSwgdmFsdWUsIHJlbWFpbmluZyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGFjaChwYXJlbnQ6IE5ndEFueVJlY29yZCwgY2hpbGQ6IE5ndEFueVJlY29yZCwgYXR0YWNoUHJvcDogc3RyaW5nW10gfCBOZ3RBdHRhY2hGdW5jdGlvbikge1xuXHRjb25zdCBjaGlsZExvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGNoaWxkKTtcblx0aWYgKGNoaWxkTG9jYWxTdGF0ZSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGF0dGFjaFByb3ApKSBhdHRhY2gocGFyZW50LCBjaGlsZExvY2FsU3RhdGUucHJldmlvdXNBdHRhY2gsIGF0dGFjaFByb3ApO1xuXHRcdGVsc2UgKGNoaWxkTG9jYWxTdGF0ZS5wcmV2aW91c0F0dGFjaCBhcyAoKSA9PiB2b2lkKSgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkVtcHR5KG9iajogTmd0QW55UmVjb3JkLCBiYXNlOiBzdHJpbmcpIHtcblx0aWYgKCghT2JqZWN0Lmhhc093bihvYmosIGJhc2UpICYmIFJlZmxlY3QgJiYgISFSZWZsZWN0LmhhcyAmJiAhUmVmbGVjdC5oYXMob2JqLCBiYXNlKSkgfHwgb2JqW2Jhc2VdID09PSB1bmRlZmluZWQpIHtcblx0XHRvYmpbYmFzZV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXR0YWNoRnVuY3Rpb248VENoaWxkID0gYW55LCBUUGFyZW50ID0gYW55Pihcblx0Y2I6IChwYXJhbXM6IHsgcGFyZW50OiBUUGFyZW50OyBjaGlsZDogVENoaWxkOyBzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+IH0pID0+ICgoKSA9PiB2b2lkKSB8IHZvaWQsXG4pOiBOZ3RBdHRhY2hGdW5jdGlvbjxUQ2hpbGQsIFRQYXJlbnQ+IHtcblx0cmV0dXJuIChwYXJlbnQsIGNoaWxkLCBzdG9yZSkgPT4gY2IoeyBwYXJlbnQsIGNoaWxkLCBzdG9yZSB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DestroyRef, Injector, inject } from '@angular/core';
|
|
2
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
3
|
+
import { injectNgtStore } from '../store';
|
|
4
|
+
export function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
5
|
+
return assertInjector(injectBeforeRender, injector, () => {
|
|
6
|
+
const store = injectNgtStore();
|
|
7
|
+
const sub = store.get('internal').subscribe(cb, priority, store);
|
|
8
|
+
inject(DestroyRef).onDestroy(() => void sub());
|
|
9
|
+
return sub;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVmb3JlLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2JlZm9yZS1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUE4QixNQUFNLFVBQVUsQ0FBQztBQUV0RSxNQUFNLFVBQVUsa0JBQWtCLENBQ2pDLEVBQXFDLEVBQ3JDLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEtBQWlELEVBQUU7SUFFM0UsT0FBTyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN4RCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0b3IsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3ROZ3RTdG9yZSwgdHlwZSBOZ3RCZWZvcmVSZW5kZXJSZWNvcmQgfSBmcm9tICcuLi9zdG9yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCZWZvcmVSZW5kZXIoXG5cdGNiOiBOZ3RCZWZvcmVSZW5kZXJSZWNvcmRbJ2NhbGxiYWNrJ10sXG5cdHsgcHJpb3JpdHkgPSAwLCBpbmplY3RvciB9OiB7IHByaW9yaXR5PzogbnVtYmVyOyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0XHRjb25zdCBzdWIgPSBzdG9yZS5nZXQoJ2ludGVybmFsJykuc3Vic2NyaWJlKGNiLCBwcmlvcml0eSwgc3RvcmUpO1xuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gdm9pZCBzdWIoKSk7XG5cdFx0cmV0dXJuIHN1Yjtcblx0fSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { forwardRef } from '@angular/core';
|
|
2
|
+
import { createInjectionToken } from 'ngxtension/create-injection-token';
|
|
3
|
+
function apiFactory(obj) {
|
|
4
|
+
return obj.api;
|
|
5
|
+
}
|
|
6
|
+
export function createApiToken(forwardedObject) {
|
|
7
|
+
const [injectFn, provideFn] = createInjectionToken((apiFactory), {
|
|
8
|
+
isRoot: false,
|
|
9
|
+
deps: [forwardRef(forwardedObject)],
|
|
10
|
+
});
|
|
11
|
+
return [injectFn, () => provideFn()];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFwaS10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2NyZWF0ZS1hcGktdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQW9DLE1BQU0sbUNBQW1DLENBQUM7QUFFM0csU0FBUyxVQUFVLENBQ2xCLEdBQVk7SUFFWixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQzdCLGVBQW9DO0lBRXBDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQSxVQUF5QixDQUFBLEVBQUU7UUFDN0UsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDcUMsQ0FBQyxDQUFDO0lBRTNFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQVUsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgdHlwZSBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiwgdHlwZSBDcmVhdGVJbmplY3Rpb25Ub2tlbk9wdGlvbnMgfSBmcm9tICduZ3h0ZW5zaW9uL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4nO1xuXG5mdW5jdGlvbiBhcGlGYWN0b3J5PFRPYmplY3QgZXh0ZW5kcyB7IGFwaTogYW55IH0sIFRBcGkgPSBUT2JqZWN0IGV4dGVuZHMgeyBhcGk6IGluZmVyIEFwaSB9ID8gQXBpIDogbmV2ZXI+KFxuXHRvYmo6IFRPYmplY3QsXG4pOiBUQXBpIHtcblx0cmV0dXJuIG9iai5hcGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcGlUb2tlbjxUT2JqZWN0IGV4dGVuZHMgeyBhcGk6IGFueSB9LCBUQXBpID0gVE9iamVjdCBleHRlbmRzIHsgYXBpOiBpbmZlciBBcGkgfSA/IEFwaSA6IG5ldmVyPihcblx0Zm9yd2FyZGVkT2JqZWN0OiAoKSA9PiBUeXBlPFRPYmplY3Q+LFxuKSB7XG5cdGNvbnN0IFtpbmplY3RGbiwgcHJvdmlkZUZuXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKGFwaUZhY3Rvcnk8VE9iamVjdCwgVEFwaT4sIHtcblx0XHRpc1Jvb3Q6IGZhbHNlLFxuXHRcdGRlcHM6IFtmb3J3YXJkUmVmKGZvcndhcmRlZE9iamVjdCldLFxuXHR9IGFzIHVua25vd24gYXMgQ3JlYXRlSW5qZWN0aW9uVG9rZW5PcHRpb25zPHR5cGVvZiBhcGlGYWN0b3J5LCBbVE9iamVjdF0+KTtcblxuXHRyZXR1cm4gW2luamVjdEZuLCAoKSA9PiBwcm92aWRlRm4oKV0gYXMgY29uc3Q7XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { computed, isSignal, reflectComponentType } from '@angular/core';
|
|
2
|
+
export function injectInputs(dir, dirType) {
|
|
3
|
+
const mirror = reflectComponentType(dirType);
|
|
4
|
+
if (!mirror) {
|
|
5
|
+
throw new Error(`[NGT] The provided symbol is not a component nor a directive`);
|
|
6
|
+
}
|
|
7
|
+
const inputs = mirror.inputs.reduce((inputs, cur) => {
|
|
8
|
+
if (dir[cur.propName] && isSignal(dir[cur.propName])) {
|
|
9
|
+
inputs[cur.propName] = dir[cur.propName];
|
|
10
|
+
}
|
|
11
|
+
return inputs;
|
|
12
|
+
}, {});
|
|
13
|
+
return computed(() => Object.keys(inputs).reduce((acc, key) => {
|
|
14
|
+
acc[key] = inputs[key]();
|
|
15
|
+
return acc;
|
|
16
|
+
}, {}));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQU1uSCxNQUFNLFVBQVUsWUFBWSxDQUMzQixHQUE2QixFQUM3QixPQUFtQjtJQUVuQixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU3QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNsQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNmLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUMsRUFDRCxFQUFzQyxDQUN0QyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUN6QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNaLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNaLENBQUMsRUFDRCxFQUF5QixDQUN6QixDQUMyQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaXNTaWduYWwsIHJlZmxlY3RDb21wb25lbnRUeXBlLCB0eXBlIElucHV0U2lnbmFsLCB0eXBlIFNpZ25hbCwgdHlwZSBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIElucHV0czxUPiA9IHtcblx0W1AgaW4ga2V5b2YgVF06IFRbUF0gZXh0ZW5kcyBJbnB1dFNpZ25hbDxpbmZlciBVPiA/IFUgOiBuZXZlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnB1dHM8VERpcmVjdGl2ZSBleHRlbmRzIFR5cGU8YW55Pj4oXG5cdGRpcjogSW5zdGFuY2VUeXBlPFREaXJlY3RpdmU+LFxuXHRkaXJUeXBlOiBURGlyZWN0aXZlLFxuKTogU2lnbmFsPElucHV0czxJbnN0YW5jZVR5cGU8VERpcmVjdGl2ZT4+PiB7XG5cdGNvbnN0IG1pcnJvciA9IHJlZmxlY3RDb21wb25lbnRUeXBlKGRpclR5cGUpO1xuXG5cdGlmICghbWlycm9yKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbTkdUXSBUaGUgcHJvdmlkZWQgc3ltYm9sIGlzIG5vdCBhIGNvbXBvbmVudCBub3IgYSBkaXJlY3RpdmVgKTtcblx0fVxuXG5cdGNvbnN0IGlucHV0cyA9IG1pcnJvci5pbnB1dHMucmVkdWNlKFxuXHRcdChpbnB1dHMsIGN1cikgPT4ge1xuXHRcdFx0aWYgKGRpcltjdXIucHJvcE5hbWVdICYmIGlzU2lnbmFsKGRpcltjdXIucHJvcE5hbWVdKSkge1xuXHRcdFx0XHRpbnB1dHNbY3VyLnByb3BOYW1lXSA9IGRpcltjdXIucHJvcE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGlucHV0cztcblx0XHR9LFxuXHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIElucHV0U2lnbmFsPGFueT4+LFxuXHQpO1xuXG5cdHJldHVybiBjb21wdXRlZCgoKSA9PlxuXHRcdE9iamVjdC5rZXlzKGlucHV0cykucmVkdWNlKFxuXHRcdFx0KGFjYywga2V5KSA9PiB7XG5cdFx0XHRcdGFjY1trZXldID0gaW5wdXRzW2tleV0oKTtcblx0XHRcdFx0cmV0dXJuIGFjYztcblx0XHRcdH0sXG5cdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuXHRcdCksXG5cdCkgYXMgU2lnbmFsPElucHV0czxJbnN0YW5jZVR5cGU8VERpcmVjdGl2ZT4+Pjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
export const is = {
|
|
3
|
+
obj: (a) => a === Object(a) && !Array.isArray(a) && typeof a !== 'function',
|
|
4
|
+
material: (a) => !!a && a.isMaterial,
|
|
5
|
+
geometry: (a) => !!a && a.isBufferGeometry,
|
|
6
|
+
orthographicCamera: (a) => !!a && a.isOrthographicCamera,
|
|
7
|
+
perspectiveCamera: (a) => !!a && a.isPerspectiveCamera,
|
|
8
|
+
camera: (a) => !!a && a.isCamera,
|
|
9
|
+
renderer: (a) => !!a && typeof a === 'object' && 'render' in a && typeof a['render'] === 'function',
|
|
10
|
+
scene: (a) => !!a && a.isScene,
|
|
11
|
+
ref: (a) => a instanceof ElementRef,
|
|
12
|
+
instance: (a) => !!a && !!a['__ngt__'],
|
|
13
|
+
object3D: (a) => !!a && a.isObject3D,
|
|
14
|
+
// instance: (a: unknown): a is NgtInstanceNode => !!a && !!(a as NgtAnyRecord)['__ngt__'],
|
|
15
|
+
// ref: (a: unknown): a is ElementRef => a instanceof ElementRef,
|
|
16
|
+
colorSpaceExist: (object) => 'colorSpace' in object || 'outputColorSpace' in object,
|
|
17
|
+
equ(a, b, { arrays = 'shallow', objects = 'reference', strict = true } = {}) {
|
|
18
|
+
// Wrong type or one of the two undefined, doesn't match
|
|
19
|
+
if (typeof a !== typeof b || !!a !== !!b)
|
|
20
|
+
return false;
|
|
21
|
+
// Atomic, just compare a against b
|
|
22
|
+
if (typeof a === 'string' || typeof a === 'number')
|
|
23
|
+
return a === b;
|
|
24
|
+
const isObj = is.obj(a);
|
|
25
|
+
if (isObj && objects === 'reference')
|
|
26
|
+
return a === b;
|
|
27
|
+
const isArr = Array.isArray(a);
|
|
28
|
+
if (isArr && arrays === 'reference')
|
|
29
|
+
return a === b;
|
|
30
|
+
// Array or Object, shallow compare first to see if it's a match
|
|
31
|
+
if ((isArr || isObj) && a === b)
|
|
32
|
+
return true;
|
|
33
|
+
// Last resort, go through keys
|
|
34
|
+
let i;
|
|
35
|
+
for (i in a)
|
|
36
|
+
if (!(i in b))
|
|
37
|
+
return false;
|
|
38
|
+
for (i in strict ? b : a)
|
|
39
|
+
if (a[i] !== b[i])
|
|
40
|
+
return false;
|
|
41
|
+
if (i === void 0) {
|
|
42
|
+
if (isArr && a.length === 0 && b.length === 0)
|
|
43
|
+
return true;
|
|
44
|
+
if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0)
|
|
45
|
+
return true;
|
|
46
|
+
if (a !== b)
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9pcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTNDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRztJQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFVLEVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVU7SUFDakcsUUFBUSxFQUFFLENBQUMsQ0FBVSxFQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUFvQixDQUFDLFVBQVU7SUFDdEYsUUFBUSxFQUFFLENBQUMsQ0FBVSxFQUE2QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUEwQixDQUFDLGdCQUFnQjtJQUN4RyxrQkFBa0IsRUFBRSxDQUFDLENBQVUsRUFBaUMsRUFBRSxDQUNqRSxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQThCLENBQUMsb0JBQW9CO0lBQzVELGlCQUFpQixFQUFFLENBQUMsQ0FBVSxFQUFnQyxFQUFFLENBQy9ELENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBNkIsQ0FBQyxtQkFBbUI7SUFDMUQsTUFBTSxFQUFFLENBQUMsQ0FBVSxFQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUFrQixDQUFDLFFBQVE7SUFDOUUsUUFBUSxFQUFFLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVU7SUFDNUcsS0FBSyxFQUFFLENBQUMsQ0FBVSxFQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUFpQixDQUFDLE9BQU87SUFDMUUsR0FBRyxFQUFFLENBQUMsQ0FBVSxFQUFtQixFQUFFLENBQUMsQ0FBQyxZQUFZLFVBQVU7SUFDN0QsUUFBUSxFQUFFLENBQUMsQ0FBVSxFQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBa0IsQ0FBQyxTQUFTLENBQUM7SUFDdkYsUUFBUSxFQUFFLENBQUMsQ0FBVSxFQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUFvQixDQUFDLFVBQVU7SUFDdEYsMkZBQTJGO0lBQzNGLGlFQUFpRTtJQUNqRSxlQUFlLEVBQUUsQ0FJaEIsTUFBUyxFQUNTLEVBQUUsQ0FBQyxZQUFZLElBQUksTUFBTSxJQUFJLGtCQUFrQixJQUFJLE1BQU07SUFDNUUsR0FBRyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLE9BQU8sR0FBRyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksS0FBbUIsRUFBRTtRQUNsRyx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkQsbUNBQW1DO1FBQ25DLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssV0FBVztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksS0FBSyxJQUFJLE1BQU0sS0FBSyxXQUFXO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0MsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxDQUFDO1FBQ04sS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDekMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzNELElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHR5cGUgeyBOZ3RSZW5kZXJlckxpa2UgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0RXF1Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXMgPSB7XG5cdG9iajogKGE6IHVua25vd24pOiBhIGlzIG9iamVjdCA9PiBhID09PSBPYmplY3QoYSkgJiYgIUFycmF5LmlzQXJyYXkoYSkgJiYgdHlwZW9mIGEgIT09ICdmdW5jdGlvbicsXG5cdG1hdGVyaWFsOiAoYTogdW5rbm93bik6IGEgaXMgVEhSRUUuTWF0ZXJpYWwgPT4gISFhICYmIChhIGFzIFRIUkVFLk1hdGVyaWFsKS5pc01hdGVyaWFsLFxuXHRnZW9tZXRyeTogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5CdWZmZXJHZW9tZXRyeSkuaXNCdWZmZXJHZW9tZXRyeSxcblx0b3J0aG9ncmFwaGljQ2FtZXJhOiAoYTogdW5rbm93bik6IGEgaXMgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhID0+XG5cdFx0ISFhICYmIChhIGFzIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkuaXNPcnRob2dyYXBoaWNDYW1lcmEsXG5cdHBlcnNwZWN0aXZlQ2FtZXJhOiAoYTogdW5rbm93bik6IGEgaXMgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEgPT5cblx0XHQhIWEgJiYgKGEgYXMgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpLmlzUGVyc3BlY3RpdmVDYW1lcmEsXG5cdGNhbWVyYTogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLkNhbWVyYSA9PiAhIWEgJiYgKGEgYXMgVEhSRUUuQ2FtZXJhKS5pc0NhbWVyYSxcblx0cmVuZGVyZXI6IChhOiB1bmtub3duKSA9PiAhIWEgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmICdyZW5kZXInIGluIGEgJiYgdHlwZW9mIGFbJ3JlbmRlciddID09PSAnZnVuY3Rpb24nLFxuXHRzY2VuZTogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLlNjZW5lID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5TY2VuZSkuaXNTY2VuZSxcblx0cmVmOiAoYTogdW5rbm93bik6IGEgaXMgRWxlbWVudFJlZiA9PiBhIGluc3RhbmNlb2YgRWxlbWVudFJlZixcblx0aW5zdGFuY2U6IChhOiB1bmtub3duKTogYSBpcyBOZ3RJbnN0YW5jZU5vZGUgPT4gISFhICYmICEhKGEgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddLFxuXHRvYmplY3QzRDogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLk9iamVjdDNEID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5PYmplY3QzRCkuaXNPYmplY3QzRCxcblx0Ly8gaW5zdGFuY2U6IChhOiB1bmtub3duKTogYSBpcyBOZ3RJbnN0YW5jZU5vZGUgPT4gISFhICYmICEhKGEgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddLFxuXHQvLyByZWY6IChhOiB1bmtub3duKTogYSBpcyBFbGVtZW50UmVmID0+IGEgaW5zdGFuY2VvZiBFbGVtZW50UmVmLFxuXHRjb2xvclNwYWNlRXhpc3Q6IDxcblx0XHRUIGV4dGVuZHMgTmd0UmVuZGVyZXJMaWtlIHwgVEhSRUUuVGV4dHVyZSB8IG9iamVjdCxcblx0XHRQID0gVCBleHRlbmRzIE5ndFJlbmRlcmVyTGlrZSA/IHsgb3V0cHV0Q29sb3JTcGFjZTogc3RyaW5nIH0gOiB7IGNvbG9yU3BhY2U6IHN0cmluZyB9LFxuXHQ+KFxuXHRcdG9iamVjdDogVCxcblx0KTogb2JqZWN0IGlzIFQgJiBQID0+ICdjb2xvclNwYWNlJyBpbiBvYmplY3QgfHwgJ291dHB1dENvbG9yU3BhY2UnIGluIG9iamVjdCxcblx0ZXF1KGE6IGFueSwgYjogYW55LCB7IGFycmF5cyA9ICdzaGFsbG93Jywgb2JqZWN0cyA9ICdyZWZlcmVuY2UnLCBzdHJpY3QgPSB0cnVlIH06IE5ndEVxdUNvbmZpZyA9IHt9KSB7XG5cdFx0Ly8gV3JvbmcgdHlwZSBvciBvbmUgb2YgdGhlIHR3byB1bmRlZmluZWQsIGRvZXNuJ3QgbWF0Y2hcblx0XHRpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiIHx8ICEhYSAhPT0gISFiKSByZXR1cm4gZmFsc2U7XG5cdFx0Ly8gQXRvbWljLCBqdXN0IGNvbXBhcmUgYSBhZ2FpbnN0IGJcblx0XHRpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhID09PSAnbnVtYmVyJykgcmV0dXJuIGEgPT09IGI7XG5cdFx0Y29uc3QgaXNPYmogPSBpcy5vYmooYSk7XG5cdFx0aWYgKGlzT2JqICYmIG9iamVjdHMgPT09ICdyZWZlcmVuY2UnKSByZXR1cm4gYSA9PT0gYjtcblx0XHRjb25zdCBpc0FyciA9IEFycmF5LmlzQXJyYXkoYSk7XG5cdFx0aWYgKGlzQXJyICYmIGFycmF5cyA9PT0gJ3JlZmVyZW5jZScpIHJldHVybiBhID09PSBiO1xuXHRcdC8vIEFycmF5IG9yIE9iamVjdCwgc2hhbGxvdyBjb21wYXJlIGZpcnN0IHRvIHNlZSBpZiBpdCdzIGEgbWF0Y2hcblx0XHRpZiAoKGlzQXJyIHx8IGlzT2JqKSAmJiBhID09PSBiKSByZXR1cm4gdHJ1ZTtcblx0XHQvLyBMYXN0IHJlc29ydCwgZ28gdGhyb3VnaCBrZXlzXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpIGluIGEpIGlmICghKGkgaW4gYikpIHJldHVybiBmYWxzZTtcblx0XHRmb3IgKGkgaW4gc3RyaWN0ID8gYiA6IGEpIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGkgPT09IHZvaWQgMCkge1xuXHRcdFx0aWYgKGlzQXJyICYmIGEubGVuZ3RoID09PSAwICYmIGIubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmIChpc09iaiAmJiBPYmplY3Qua2V5cyhhKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmtleXMoYikubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmIChhICE9PSBiKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxufTtcbiJdfQ==
|