@garrix82/reactgenie-lib 1.3.0
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/.env.example +22 -0
- package/.github/workflows/publish.yml +20 -0
- package/LICENSE.txt +201 -0
- package/README.md +621 -0
- package/babel.config.js +29 -0
- package/dist/adapters/__tests__/expo-router-adapter.test.d.ts +1 -0
- package/dist/adapters/expo-router-adapter.d.ts +16 -0
- package/dist/adapters/expo-router-adapter.js +521 -0
- package/dist/adapters/navigation-adapter.d.ts +20 -0
- package/dist/adapters/navigation-adapter.js +137 -0
- package/dist/audio-visualizer.d.ts +14 -0
- package/dist/audio-visualizer.js +123 -0
- package/dist/current-selection.d.ts +27 -0
- package/dist/current-selection.js +94 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.js +37 -0
- package/dist/genie/DateTime.d.ts +66 -0
- package/dist/genie/DateTime.js +399 -0
- package/dist/genie/TimeDelta.d.ts +35 -0
- package/dist/genie/TimeDelta.js +169 -0
- package/dist/genie-view-wrapper.d.ts +1 -0
- package/dist/genie-view-wrapper.js +377 -0
- package/dist/hooks/__tests__/useSpeechRecognition.test.d.ts +1 -0
- package/dist/hooks/useSpeechRecognition.d.ts +28 -0
- package/dist/hooks/useSpeechRecognition.js +118 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +469 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.js +597 -0
- package/dist/logger.remote.test.d.ts +0 -0
- package/dist/modality-provider-v2.d.ts +28 -0
- package/dist/modality-provider-v2.js +1321 -0
- package/dist/modality-provider.d.ts +22 -0
- package/dist/modality-provider.js +373 -0
- package/dist/native-visibility.d.ts +28 -0
- package/dist/native-visibility.js +50 -0
- package/dist/platform/VoiceRecognitionBar.d.ts +17 -0
- package/dist/platform/VoiceRecognitionBar.js +332 -0
- package/dist/platform/components.d.ts +32 -0
- package/dist/platform/components.js +351 -0
- package/dist/platform/events.d.ts +31 -0
- package/dist/platform/events.js +274 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.js +39 -0
- package/dist/platform/types.d.ts +79 -0
- package/dist/platform/types.js +97 -0
- package/dist/react-decorators.d.ts +87 -0
- package/dist/react-decorators.js +368 -0
- package/dist/shared-store.d.ts +74 -0
- package/dist/shared-store.js +589 -0
- package/dist/speech-recognition/__tests__/speech-recognition-groq-transport.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-native.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-openai-native.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-openai.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-unified-import.test.d.ts +0 -0
- package/dist/speech-recognition/__tests__/speech-recognition-unified.test.d.ts +1 -0
- package/dist/speech-recognition/speech-recognition-groq.d.ts +21 -0
- package/dist/speech-recognition/speech-recognition-groq.js +409 -0
- package/dist/speech-recognition/speech-recognition-mlx.d.ts +15 -0
- package/dist/speech-recognition/speech-recognition-mlx.js +393 -0
- package/dist/speech-recognition/speech-recognition-native.d.ts +24 -0
- package/dist/speech-recognition/speech-recognition-native.js +632 -0
- package/dist/speech-recognition/speech-recognition-openai-native.d.ts +40 -0
- package/dist/speech-recognition/speech-recognition-openai-native.js +653 -0
- package/dist/speech-recognition/speech-recognition-openai.d.ts +39 -0
- package/dist/speech-recognition/speech-recognition-openai.js +718 -0
- package/dist/speech-recognition/speech-recognition-unified.d.ts +93 -0
- package/dist/speech-recognition/speech-recognition-unified.js +589 -0
- package/dist/speech-recognition/utils/groq-transcription.d.ts +41 -0
- package/dist/speech-recognition/utils/groq-transcription.js +382 -0
- package/dist/speech-recognition.d.ts +7 -0
- package/dist/speech-recognition.js +61 -0
- package/dist/voice-pipeline-telemetry.d.ts +26 -0
- package/dist/voice-pipeline-telemetry.js +15 -0
- package/garrix82-reactgenie-lib-1.3.0.tgz +0 -0
- package/metro/index.js +3 -0
- package/metro/with-genie-registry.js +47 -0
- package/package.json +111 -0
- package/scripts/dry-run.js +23 -0
- package/scripts/generate-genie-registry.js +278 -0
- package/scripts/log-file-test.js +51 -0
- package/scripts/parse.js +26 -0
- package/scripts/prompt.js +19 -0
- package/scripts/set-script.js +200 -0
- package/tsconfig.json +36 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AllGenieObjectInterfaces = exports.AllGenieDisplayedInstances = exports.AllGenieDisplayedInstanceRefreshers = void 0;
|
|
7
|
+
Object.defineProperty(exports, "AllGenieObjects", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _reactgenieDsl.AllGenieObjects;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "ClassDescriptor", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _reactgenieDsl.ClassDescriptor;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
exports.CurrentSelectionBlockedRects = exports.ClickPoints = void 0;
|
|
20
|
+
Object.defineProperty(exports, "DataClass", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () {
|
|
23
|
+
return _reactgenieDsl.DataClass;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(exports, "FieldDescriptor", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function () {
|
|
29
|
+
return _reactgenieDsl.FieldDescriptor;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(exports, "FuncDescriptor", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _reactgenieDsl.FuncDescriptor;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
Object.defineProperty(exports, "GenieClass", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
get: function () {
|
|
41
|
+
return _reactgenieDsl.GenieClass;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
exports.GenieClassInterface = GenieClassInterface;
|
|
45
|
+
Object.defineProperty(exports, "GenieFunction", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
get: function () {
|
|
48
|
+
return _reactgenieDsl.GenieFunction;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(exports, "GenieKey", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
get: function () {
|
|
54
|
+
return _reactgenieDsl.GenieKey;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
Object.defineProperty(exports, "GenieProperty", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
get: function () {
|
|
60
|
+
return _reactgenieDsl.GenieProperty;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports, "HelperClass", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
get: function () {
|
|
66
|
+
return _reactgenieDsl.HelperClass;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
exports.InstantiateGenieObject = InstantiateGenieObject;
|
|
70
|
+
Object.defineProperty(exports, "ParamDescriptor", {
|
|
71
|
+
enumerable: true,
|
|
72
|
+
get: function () {
|
|
73
|
+
return _reactgenieDsl.ParamDescriptor;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
exports.RefreshDisplayedInstanceRects = RefreshDisplayedInstanceRects;
|
|
77
|
+
exports.RetrieveInterfaces = RetrieveInterfaces;
|
|
78
|
+
exports.RetrieveInterfacesSnapshot = RetrieveInterfacesSnapshot;
|
|
79
|
+
Object.defineProperty(exports, "float", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () {
|
|
82
|
+
return _reactgenieDsl.float;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
exports.hasSameFunctionSignature = hasSameFunctionSignature;
|
|
86
|
+
exports.initReactGenie = initReactGenie;
|
|
87
|
+
Object.defineProperty(exports, "int", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () {
|
|
90
|
+
return _reactgenieDsl.int;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
exports.mergeUniqueExamples = mergeUniqueExamples;
|
|
94
|
+
exports.upsertFunctionDescriptor = upsertFunctionDescriptor;
|
|
95
|
+
var _genieViewWrapper = require("./genie-view-wrapper");
|
|
96
|
+
var _reactNative = require("react-native");
|
|
97
|
+
var _reactgenieDsl = require("@garrix82/reactgenie-dsl");
|
|
98
|
+
var _react = _interopRequireDefault(require("react"));
|
|
99
|
+
var _currentSelection = require("./current-selection");
|
|
100
|
+
var _nativeVisibility = require("./native-visibility");
|
|
101
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
102
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
103
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
104
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
105
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
106
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // dictionary of genie object names to genie objects
|
|
107
|
+
class GenieInterfacesStore {
|
|
108
|
+
constructor() {
|
|
109
|
+
this.supportedTypes = new Set();
|
|
110
|
+
this.interfaces = {};
|
|
111
|
+
}
|
|
112
|
+
addInterface(element) {
|
|
113
|
+
if (!this.interfaces[element.objectClassName]) {
|
|
114
|
+
this.interfaces[element.objectClassName] = [];
|
|
115
|
+
}
|
|
116
|
+
this.interfaces[element.objectClassName].push(element);
|
|
117
|
+
this.supportedTypes.add(element.objectClassName);
|
|
118
|
+
}
|
|
119
|
+
getObjectClassName(object) {
|
|
120
|
+
if (object.constructor.name === "Array") {
|
|
121
|
+
return this.getObjectClassName(object[0]) + "[]";
|
|
122
|
+
}
|
|
123
|
+
return object.constructor.name;
|
|
124
|
+
}
|
|
125
|
+
getInterfaces(object) {
|
|
126
|
+
const className = this.getObjectClassName(object);
|
|
127
|
+
if (this.interfaces[className]) {
|
|
128
|
+
const sortedInterfaces = this.interfaces[className].sort((a, b) => {
|
|
129
|
+
return b.displayPriority(object) - a.displayPriority(object);
|
|
130
|
+
});
|
|
131
|
+
return sortedInterfaces[0];
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// key is the class name of the GenieInterfaceStoreElement, not the GenieObject
|
|
137
|
+
allInterfaces() {
|
|
138
|
+
const allInterfaces = {};
|
|
139
|
+
for (const key in this.interfaces) {
|
|
140
|
+
for (const element of this.interfaces[key]) {
|
|
141
|
+
allInterfaces[element.viewClassName] = element;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return allInterfaces;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const AllGenieObjectInterfaces = exports.AllGenieObjectInterfaces = new GenieInterfacesStore();
|
|
148
|
+
const AllGenieDisplayedInstances = exports.AllGenieDisplayedInstances = {};
|
|
149
|
+
const AllGenieDisplayedInstanceRefreshers = exports.AllGenieDisplayedInstanceRefreshers = {};
|
|
150
|
+
const ClickPoints = exports.ClickPoints = [];
|
|
151
|
+
const CurrentSelectionBlockedRects = exports.CurrentSelectionBlockedRects = [];
|
|
152
|
+
function toStringOrEmpty(value) {
|
|
153
|
+
return typeof value === "string" ? value : "";
|
|
154
|
+
}
|
|
155
|
+
function exampleKey(example) {
|
|
156
|
+
return `${toStringOrEmpty(example?.user_utterance)}\n${toStringOrEmpty(example?.example_parsed)}`;
|
|
157
|
+
}
|
|
158
|
+
function normalizeParams(params) {
|
|
159
|
+
return Array.isArray(params) ? params : [];
|
|
160
|
+
}
|
|
161
|
+
function hasSameFunctionSignature(left, right) {
|
|
162
|
+
if (left?.func_name !== right?.func_name) return false;
|
|
163
|
+
if (left?.isStatic !== right?.isStatic) return false;
|
|
164
|
+
if (left?.returnType !== right?.returnType) return false;
|
|
165
|
+
const leftParams = normalizeParams(left?.parameters);
|
|
166
|
+
const rightParams = normalizeParams(right?.parameters);
|
|
167
|
+
if (leftParams.length !== rightParams.length) return false;
|
|
168
|
+
for (let i = 0; i < leftParams.length; i += 1) {
|
|
169
|
+
const a = leftParams[i];
|
|
170
|
+
const b = rightParams[i];
|
|
171
|
+
if (a?.name !== b?.name) return false;
|
|
172
|
+
if (a?.type !== b?.type) return false;
|
|
173
|
+
if (a?.required !== b?.required) return false;
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
function upsertFunctionDescriptor(functions, candidate) {
|
|
178
|
+
for (const existing of functions) {
|
|
179
|
+
if (hasSameFunctionSignature(existing, candidate)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
functions.add(candidate);
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
function mergeUniqueExamples(existing, incoming) {
|
|
187
|
+
const merged = [...(existing || [])];
|
|
188
|
+
const seen = new Set(merged.map(example => exampleKey(example)));
|
|
189
|
+
for (const candidate of incoming || []) {
|
|
190
|
+
const key = exampleKey(candidate);
|
|
191
|
+
if (seen.has(key)) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
seen.add(key);
|
|
195
|
+
merged.push(candidate);
|
|
196
|
+
}
|
|
197
|
+
return merged;
|
|
198
|
+
}
|
|
199
|
+
function InstantiateGenieObject(objectSpec) {
|
|
200
|
+
const objectKey = objectSpec && objectSpec.key;
|
|
201
|
+
if (objectKey && Object.hasOwn(objectKey, "localStore")) {
|
|
202
|
+
if (objectKey["localStore"]["__genieObjectType"] == "HelperClass") {
|
|
203
|
+
return objectKey;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const objectClass = _reactgenieDsl.AllGenieObjects[objectSpec.className];
|
|
207
|
+
return objectClass.GetObject(objectSpec.key);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Get all genie class interfaces within modality provider and their rects
|
|
212
|
+
* @returns {GenieInterfaceSpec[]} Retrieve all the Genie object components on the interface and their rects
|
|
213
|
+
*/
|
|
214
|
+
function RetrieveInterfaces() {
|
|
215
|
+
return RetrieveInterfacesSnapshot().interfaces;
|
|
216
|
+
}
|
|
217
|
+
function RetrieveInterfacesSnapshot() {
|
|
218
|
+
// scan through values of AllGenieObject and get the displayedInstances
|
|
219
|
+
console.log(`AllGenieObjectInterfaces ${JSON.stringify(AllGenieDisplayedInstances)}`);
|
|
220
|
+
const displayedInstances = [];
|
|
221
|
+
for (const key in AllGenieDisplayedInstances) {
|
|
222
|
+
displayedInstances.push(AllGenieDisplayedInstances[key]());
|
|
223
|
+
}
|
|
224
|
+
const resolution = (0, _nativeVisibility.resolveVisibleInterfacesForPlatform)(_reactNative.Platform.OS, displayedInstances);
|
|
225
|
+
return {
|
|
226
|
+
interfaces: resolution.interfaces,
|
|
227
|
+
visibilityState: resolution.state
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function RefreshDisplayedInstanceRects() {
|
|
231
|
+
// Re-measure every visible interface just before geometric resolution so
|
|
232
|
+
// Current() uses the latest on-screen bounds after scrolling.
|
|
233
|
+
for (const key in AllGenieDisplayedInstanceRefreshers) {
|
|
234
|
+
AllGenieDisplayedInstanceRefreshers[key]?.();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const reactGenieClassModifier = target => {
|
|
238
|
+
// append method `current()` to the class
|
|
239
|
+
/**
|
|
240
|
+
* Retrieves the most relevant instance of GenieObject in this context
|
|
241
|
+
* @returns {any} the GenieObject
|
|
242
|
+
*/
|
|
243
|
+
function Current() {
|
|
244
|
+
const currentClassName = target.ClassDescriptor.className;
|
|
245
|
+
const interfaceSnapshot = RetrieveInterfacesSnapshot();
|
|
246
|
+
const genieInterfaces = interfaceSnapshot.interfaces;
|
|
247
|
+
console.log(`[Current] start ${currentClassName}; visibleInterfaces=${genieInterfaces.length}; taps=${ClickPoints.length}`);
|
|
248
|
+
if (interfaceSnapshot.visibilityState === "transition_unstable") {
|
|
249
|
+
throw new _currentSelection.CurrentContextError(`Visible ${currentClassName} context is temporarily unavailable while navigation is transitioning.`);
|
|
250
|
+
}
|
|
251
|
+
const currentInterface = (0, _currentSelection.pickCurrentInterface)(currentClassName, genieInterfaces, ClickPoints, {
|
|
252
|
+
blockedRects: CurrentSelectionBlockedRects
|
|
253
|
+
});
|
|
254
|
+
console.log(`[Current] resolved ${currentClassName} -> ${currentInterface.className} ${JSON.stringify(currentInterface.key)}`);
|
|
255
|
+
return InstantiateGenieObject(currentInterface);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// @ts-ignore
|
|
259
|
+
target.Current = Current;
|
|
260
|
+
|
|
261
|
+
// append additional function descriptor to class descriptor
|
|
262
|
+
upsertFunctionDescriptor(target.ClassDescriptor.functions, new _reactgenieDsl.FuncDescriptor("Current", [], target.ClassDescriptor.className, true, "The single object that the user is referring to. Usually either the object that is closest to the mouse click, or the object that is the largest on screen."));
|
|
263
|
+
function AllCurrent() {
|
|
264
|
+
const currentClassName = target.ClassDescriptor.className;
|
|
265
|
+
const interfaceSnapshot = RetrieveInterfacesSnapshot();
|
|
266
|
+
const genieInterfaces = interfaceSnapshot.interfaces;
|
|
267
|
+
const candidates = genieInterfaces.filter(genieInterface => genieInterface.className === currentClassName);
|
|
268
|
+
console.log(`[AllCurrent] start ${currentClassName}; visibleInterfaces=${genieInterfaces.length}; candidates=${candidates.length}; taps=${ClickPoints.length}`);
|
|
269
|
+
const objects = [];
|
|
270
|
+
if (candidates.length === 0) {
|
|
271
|
+
return objects;
|
|
272
|
+
}
|
|
273
|
+
if (ClickPoints.length > 1) {
|
|
274
|
+
for (const clickPoint of ClickPoints) {
|
|
275
|
+
const closest = (0, _currentSelection.pickNearestInterface)(candidates, clickPoint);
|
|
276
|
+
objects.push(InstantiateGenieObject(closest));
|
|
277
|
+
}
|
|
278
|
+
return objects;
|
|
279
|
+
} else {
|
|
280
|
+
for (const genieInterface of candidates) {
|
|
281
|
+
objects.push(InstantiateGenieObject(genieInterface));
|
|
282
|
+
}
|
|
283
|
+
return objects;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// @ts-ignore
|
|
288
|
+
target.AllCurrent = AllCurrent;
|
|
289
|
+
|
|
290
|
+
// append additional function descriptor to class descriptor
|
|
291
|
+
upsertFunctionDescriptor(target.ClassDescriptor.functions, new _reactgenieDsl.FuncDescriptor("AllCurrent", [], target.ClassDescriptor.className + "[]", true, "All objects that the user is referring to. Usually either the objects that are closest to the mouse clicks (if multiple), or all objects of that type on screeen."));
|
|
292
|
+
(0, _reactgenieDsl.genieDispatch)(() => {
|
|
293
|
+
const newExamples = mergeUniqueExamples(_reactgenieDsl.sharedState["__EXAMPLES__"] || [], target.Examples || []);
|
|
294
|
+
(0, _reactgenieDsl.setSharedState)(_objectSpread(_objectSpread({}, _reactgenieDsl.sharedState), {}, {
|
|
295
|
+
["__EXAMPLES__"]: newExamples
|
|
296
|
+
}));
|
|
297
|
+
});
|
|
298
|
+
};
|
|
299
|
+
function initReactGenie() {
|
|
300
|
+
const reactGenieStore = (0, _reactgenieDsl.initGenie)({
|
|
301
|
+
initGenieClassModifier: reactGenieClassModifier
|
|
302
|
+
});
|
|
303
|
+
(0, _reactgenieDsl.genieDispatch)(() => {
|
|
304
|
+
const reactGenieState = _reactgenieDsl.sharedState;
|
|
305
|
+
reactGenieState.navState = {
|
|
306
|
+
objectViewClassName: null,
|
|
307
|
+
objectConstructorParams: null,
|
|
308
|
+
queryIntent: null,
|
|
309
|
+
resultRef: null,
|
|
310
|
+
resultObjectType: null
|
|
311
|
+
};
|
|
312
|
+
reactGenieState.navStack = 0;
|
|
313
|
+
reactGenieState.message = {
|
|
314
|
+
minimalText: "",
|
|
315
|
+
fullText: "",
|
|
316
|
+
type: "info",
|
|
317
|
+
shouldSpeak: false,
|
|
318
|
+
origin: "system",
|
|
319
|
+
message: ""
|
|
320
|
+
};
|
|
321
|
+
reactGenieState.resultWindowByRef = {};
|
|
322
|
+
reactGenieState.resultWindowOrder = [];
|
|
323
|
+
reactGenieState.resultWindowMax = 40;
|
|
324
|
+
reactGenieState.resultWindowTtlMs = 5 * 60 * 1000;
|
|
325
|
+
reactGenieState.resultWindowSequence = 0;
|
|
326
|
+
});
|
|
327
|
+
return reactGenieStore;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
*
|
|
332
|
+
* @param type the type of the object being rendered by the interface
|
|
333
|
+
* @param displayTitle the title of the interface, can be a function that takes in the object and returns a string
|
|
334
|
+
* @param displayPriority the priority of the interface, can be a function that takes in the object and returns a number
|
|
335
|
+
* @constructor
|
|
336
|
+
*/
|
|
337
|
+
function GenieClassInterface(type, displayTitle = undefined, displayPriority = 0) {
|
|
338
|
+
return function (target) {
|
|
339
|
+
// create a function with a list of parameters
|
|
340
|
+
const newTarget = (...args) => {
|
|
341
|
+
return (0, _genieViewWrapper.GenieViewWrapper)(type, target, args)();
|
|
342
|
+
};
|
|
343
|
+
if (displayTitle === undefined) {
|
|
344
|
+
displayTitle = type;
|
|
345
|
+
}
|
|
346
|
+
const titleFunction = typeof displayTitle === "string" ? () => displayTitle : displayTitle;
|
|
347
|
+
const displayPriorityFunction = typeof displayPriority === "number" ? () => displayPriority : displayPriority;
|
|
348
|
+
const newGenieInterfaceSpec = {
|
|
349
|
+
objectClassName: type,
|
|
350
|
+
viewClassName: target.name,
|
|
351
|
+
title: titleFunction,
|
|
352
|
+
function: newTarget,
|
|
353
|
+
displayPriority: displayPriorityFunction
|
|
354
|
+
};
|
|
355
|
+
AllGenieObjectInterfaces.addInterface(newGenieInterfaceSpec);
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Note: Automatic route registration based on convention (optional, can be overridden by explicit registration in components)
|
|
359
|
+
* - for example, we can automatically register an interface for a GenieObject class named "Email" with a component named "EmailInterface". This allows for more seamless integration of new components and interfaces without needing to worry about registration order.
|
|
360
|
+
* However, explicit registration is still supported and can be used instead if desired.
|
|
361
|
+
* We can have multiple interfaces for the same object type without worrying about registration order.
|
|
362
|
+
*/
|
|
363
|
+
|
|
364
|
+
// add callback function with shared data structure which contains whether the element is on/off screen
|
|
365
|
+
return /*#__PURE__*/_react.default.memo(newTarget);
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VuaWVWaWV3V3JhcHBlciIsInJlcXVpcmUiLCJfcmVhY3ROYXRpdmUiLCJfcmVhY3RnZW5pZURzbCIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3VycmVudFNlbGVjdGlvbiIsIl9uYXRpdmVWaXNpYmlsaXR5IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkdlbmllSW50ZXJmYWNlc1N0b3JlIiwiY29uc3RydWN0b3IiLCJzdXBwb3J0ZWRUeXBlcyIsIlNldCIsImludGVyZmFjZXMiLCJhZGRJbnRlcmZhY2UiLCJlbGVtZW50Iiwib2JqZWN0Q2xhc3NOYW1lIiwiYWRkIiwiZ2V0T2JqZWN0Q2xhc3NOYW1lIiwib2JqZWN0IiwibmFtZSIsImdldEludGVyZmFjZXMiLCJjbGFzc05hbWUiLCJzb3J0ZWRJbnRlcmZhY2VzIiwic29ydCIsImEiLCJiIiwiZGlzcGxheVByaW9yaXR5IiwiYWxsSW50ZXJmYWNlcyIsImtleSIsInZpZXdDbGFzc05hbWUiLCJBbGxHZW5pZU9iamVjdEludGVyZmFjZXMiLCJleHBvcnRzIiwiQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXMiLCJBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVycyIsIkNsaWNrUG9pbnRzIiwiQ3VycmVudFNlbGVjdGlvbkJsb2NrZWRSZWN0cyIsInRvU3RyaW5nT3JFbXB0eSIsImV4YW1wbGVLZXkiLCJleGFtcGxlIiwidXNlcl91dHRlcmFuY2UiLCJleGFtcGxlX3BhcnNlZCIsIm5vcm1hbGl6ZVBhcmFtcyIsInBhcmFtcyIsIkFycmF5IiwiaXNBcnJheSIsImhhc1NhbWVGdW5jdGlvblNpZ25hdHVyZSIsImxlZnQiLCJyaWdodCIsImZ1bmNfbmFtZSIsImlzU3RhdGljIiwicmV0dXJuVHlwZSIsImxlZnRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwicmlnaHRQYXJhbXMiLCJ0eXBlIiwicmVxdWlyZWQiLCJ1cHNlcnRGdW5jdGlvbkRlc2NyaXB0b3IiLCJmdW5jdGlvbnMiLCJjYW5kaWRhdGUiLCJleGlzdGluZyIsIm1lcmdlVW5pcXVlRXhhbXBsZXMiLCJpbmNvbWluZyIsIm1lcmdlZCIsInNlZW4iLCJtYXAiLCJoYXMiLCJJbnN0YW50aWF0ZUdlbmllT2JqZWN0Iiwib2JqZWN0U3BlYyIsIm9iamVjdEtleSIsImhhc093biIsIm9iamVjdENsYXNzIiwiQWxsR2VuaWVPYmplY3RzIiwiR2V0T2JqZWN0IiwiUmV0cmlldmVJbnRlcmZhY2VzIiwiUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImRpc3BsYXllZEluc3RhbmNlcyIsInJlc29sdXRpb24iLCJyZXNvbHZlVmlzaWJsZUludGVyZmFjZXNGb3JQbGF0Zm9ybSIsIlBsYXRmb3JtIiwiT1MiLCJ2aXNpYmlsaXR5U3RhdGUiLCJzdGF0ZSIsIlJlZnJlc2hEaXNwbGF5ZWRJbnN0YW5jZVJlY3RzIiwicmVhY3RHZW5pZUNsYXNzTW9kaWZpZXIiLCJ0YXJnZXQiLCJDdXJyZW50IiwiY3VycmVudENsYXNzTmFtZSIsIkNsYXNzRGVzY3JpcHRvciIsImludGVyZmFjZVNuYXBzaG90IiwiZ2VuaWVJbnRlcmZhY2VzIiwiQ3VycmVudENvbnRleHRFcnJvciIsImN1cnJlbnRJbnRlcmZhY2UiLCJwaWNrQ3VycmVudEludGVyZmFjZSIsImJsb2NrZWRSZWN0cyIsIkZ1bmNEZXNjcmlwdG9yIiwiQWxsQ3VycmVudCIsImNhbmRpZGF0ZXMiLCJnZW5pZUludGVyZmFjZSIsIm9iamVjdHMiLCJjbGlja1BvaW50IiwiY2xvc2VzdCIsInBpY2tOZWFyZXN0SW50ZXJmYWNlIiwiZ2VuaWVEaXNwYXRjaCIsIm5ld0V4YW1wbGVzIiwic2hhcmVkU3RhdGUiLCJFeGFtcGxlcyIsInNldFNoYXJlZFN0YXRlIiwiaW5pdFJlYWN0R2VuaWUiLCJyZWFjdEdlbmllU3RvcmUiLCJpbml0R2VuaWUiLCJpbml0R2VuaWVDbGFzc01vZGlmaWVyIiwicmVhY3RHZW5pZVN0YXRlIiwibmF2U3RhdGUiLCJvYmplY3RWaWV3Q2xhc3NOYW1lIiwib2JqZWN0Q29uc3RydWN0b3JQYXJhbXMiLCJxdWVyeUludGVudCIsInJlc3VsdFJlZiIsInJlc3VsdE9iamVjdFR5cGUiLCJuYXZTdGFjayIsIm1lc3NhZ2UiLCJtaW5pbWFsVGV4dCIsImZ1bGxUZXh0Iiwic2hvdWxkU3BlYWsiLCJvcmlnaW4iLCJyZXN1bHRXaW5kb3dCeVJlZiIsInJlc3VsdFdpbmRvd09yZGVyIiwicmVzdWx0V2luZG93TWF4IiwicmVzdWx0V2luZG93VHRsTXMiLCJyZXN1bHRXaW5kb3dTZXF1ZW5jZSIsIkdlbmllQ2xhc3NJbnRlcmZhY2UiLCJkaXNwbGF5VGl0bGUiLCJ1bmRlZmluZWQiLCJuZXdUYXJnZXQiLCJhcmdzIiwiR2VuaWVWaWV3V3JhcHBlciIsInRpdGxlRnVuY3Rpb24iLCJkaXNwbGF5UHJpb3JpdHlGdW5jdGlvbiIsIm5ld0dlbmllSW50ZXJmYWNlU3BlYyIsInRpdGxlIiwiZnVuY3Rpb24iLCJSZWFjdCIsIm1lbW8iXSwic291cmNlcyI6WyIuLi9zcmMvcmVhY3QtZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkaWN0aW9uYXJ5IG9mIGdlbmllIG9iamVjdCBuYW1lcyB0byBnZW5pZSBvYmplY3RzXG5pbXBvcnQgeyBHZW5pZVZpZXdXcmFwcGVyIH0gZnJvbSBcIi4vZ2VuaWUtdmlldy13cmFwcGVyXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJyZWFjdC1uYXRpdmVcIjtcbmltcG9ydCB7XG4gIEZ1bmNEZXNjcmlwdG9yLFxuICBHZW5pZUNsYXNzTW9kaWZpZXIsXG4gIEdlbmllT2JqZWN0LFxuICBpbml0R2VuaWUsXG4gIGdlbmllRGlzcGF0Y2gsXG4gIEFsbEdlbmllT2JqZWN0cyxcbiAgc2hhcmVkU3RhdGUsXG4gIHNoYXJlZFN0b3JlLFxuICBzZXRTaGFyZWRTdGF0ZSxcbn0gZnJvbSBcIkBnYXJyaXg4Mi9yZWFjdGdlbmllLWRzbFwiO1xuaW1wb3J0IHtcbiAgR2VuaWVDbGFzcyxcbiAgR2VuaWVGdW5jdGlvbixcbiAgR2VuaWVLZXksXG4gIEdlbmllUHJvcGVydHksXG4gIERhdGFDbGFzcyxcbiAgSGVscGVyQ2xhc3MsXG4gIGludCxcbiAgZmxvYXQsXG4gIENsYXNzRGVzY3JpcHRvcixcbiAgRmllbGREZXNjcmlwdG9yLFxuICBQYXJhbURlc2NyaXB0b3IsXG59IGZyb20gXCJAZ2Fycml4ODIvcmVhY3RnZW5pZS1kc2xcIjtcblxuZXhwb3J0IHtcbiAgR2VuaWVDbGFzcyxcbiAgR2VuaWVGdW5jdGlvbixcbiAgR2VuaWVLZXksXG4gIEdlbmllUHJvcGVydHksXG4gIERhdGFDbGFzcyxcbiAgSGVscGVyQ2xhc3MsXG4gIGludCxcbiAgZmxvYXQsXG4gIENsYXNzRGVzY3JpcHRvcixcbiAgRmllbGREZXNjcmlwdG9yLFxuICBGdW5jRGVzY3JpcHRvcixcbiAgUGFyYW1EZXNjcmlwdG9yLFxufSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEdlbmllU3RhdGUgfSBmcm9tIFwiLi9zaGFyZWQtc3RvcmVcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHtcbiAgQ3VycmVudENvbnRleHRFcnJvcixcbiAgcGlja0N1cnJlbnRJbnRlcmZhY2UsXG4gIHBpY2tOZWFyZXN0SW50ZXJmYWNlLFxufSBmcm9tIFwiLi9jdXJyZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBOYXRpdmVWaXNpYmlsaXR5U3RhdGUsXG4gIHJlc29sdmVWaXNpYmxlSW50ZXJmYWNlc0ZvclBsYXRmb3JtLFxufSBmcm9tIFwiLi9uYXRpdmUtdmlzaWJpbGl0eVwiO1xuXG5leHBvcnQgeyBBbGxHZW5pZU9iamVjdHMgfSBmcm9tIFwiQGdhcnJpeDgyL3JlYWN0Z2VuaWUtZHNsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQge1xuICBvYmplY3RDbGFzc05hbWU6IHN0cmluZztcbiAgdmlld0NsYXNzTmFtZTogc3RyaW5nO1xuICB0aXRsZTogKGFueSkgPT4gc3RyaW5nO1xuICBmdW5jdGlvbjogYW55O1xuICBkaXNwbGF5UHJpb3JpdHk6ICh0YXJnZXQ6IGFueSkgPT4gbnVtYmVyO1xufVxuXG5jbGFzcyBHZW5pZUludGVyZmFjZXNTdG9yZSB7XG4gIHN1cHBvcnRlZFR5cGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpbnRlcmZhY2VzOiB7IFtrZXk6IHN0cmluZ106IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50W10gfSA9IHt9O1xuXG4gIGFkZEludGVyZmFjZShlbGVtZW50OiBHZW5pZUludGVyZmFjZVN0b3JlRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5pbnRlcmZhY2VzW2VsZW1lbnQub2JqZWN0Q2xhc3NOYW1lXSkge1xuICAgICAgdGhpcy5pbnRlcmZhY2VzW2VsZW1lbnQub2JqZWN0Q2xhc3NOYW1lXSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmludGVyZmFjZXNbZWxlbWVudC5vYmplY3RDbGFzc05hbWVdLnB1c2goZWxlbWVudCk7XG4gICAgdGhpcy5zdXBwb3J0ZWRUeXBlcy5hZGQoZWxlbWVudC5vYmplY3RDbGFzc05hbWUpO1xuICB9XG5cbiAgZ2V0T2JqZWN0Q2xhc3NOYW1lKG9iamVjdDogR2VuaWVPYmplY3QpOiBzdHJpbmcge1xuICAgIGlmIChvYmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gXCJBcnJheVwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RDbGFzc05hbWUob2JqZWN0WzBdKSArIFwiW11cIjtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0SW50ZXJmYWNlcyhvYmplY3Q6IEdlbmllT2JqZWN0KTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZ2V0T2JqZWN0Q2xhc3NOYW1lKG9iamVjdCk7XG4gICAgaWYgKHRoaXMuaW50ZXJmYWNlc1tjbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBzb3J0ZWRJbnRlcmZhY2VzID0gdGhpcy5pbnRlcmZhY2VzW2NsYXNzTmFtZV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gYi5kaXNwbGF5UHJpb3JpdHkob2JqZWN0KSAtIGEuZGlzcGxheVByaW9yaXR5KG9iamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzb3J0ZWRJbnRlcmZhY2VzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGtleSBpcyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQsIG5vdCB0aGUgR2VuaWVPYmplY3RcbiAgYWxsSW50ZXJmYWNlcygpOiB7IFtrZXk6IHN0cmluZ106IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50IH0ge1xuICAgIGNvbnN0IGFsbEludGVyZmFjZXM6IHsgW2tleTogc3RyaW5nXTogR2VuaWVJbnRlcmZhY2VTdG9yZUVsZW1lbnQgfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW50ZXJmYWNlcykge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuaW50ZXJmYWNlc1trZXldKSB7XG4gICAgICAgIGFsbEludGVyZmFjZXNbZWxlbWVudC52aWV3Q2xhc3NOYW1lXSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxJbnRlcmZhY2VzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZU9iamVjdEludGVyZmFjZXM6IEdlbmllSW50ZXJmYWNlc1N0b3JlID1cbiAgbmV3IEdlbmllSW50ZXJmYWNlc1N0b3JlKCk7XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlczoge1xuICBba2V5OiBzdHJpbmddOiAoKSA9PiBHZW5pZUludGVyZmFjZVNwZWM7XG59ID0ge307XG5cbmV4cG9ydCBjb25zdCBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVyczoge1xuICBba2V5OiBzdHJpbmddOiAoKSA9PiB2b2lkO1xufSA9IHt9O1xuXG5leHBvcnQgY29uc3QgQ2xpY2tQb2ludHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdID0gW107XG5leHBvcnQgY29uc3QgQ3VycmVudFNlbGVjdGlvbkJsb2NrZWRSZWN0czogQXJyYXk8e1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59PiA9IFtdO1xuXG5leHBvcnQgdHlwZSBFeGFtcGxlTGlrZSA9IHtcbiAgdXNlcl91dHRlcmFuY2U/OiB1bmtub3duO1xuICBleGFtcGxlX3BhcnNlZD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jUGFyYW1MaWtlID0ge1xuICBuYW1lPzogdW5rbm93bjtcbiAgdHlwZT86IHVua25vd247XG4gIHJlcXVpcmVkPzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmNEZXNjcmlwdG9yTGlrZSA9IHtcbiAgZnVuY19uYW1lPzogdW5rbm93bjtcbiAgaXNTdGF0aWM/OiB1bmtub3duO1xuICByZXR1cm5UeXBlPzogdW5rbm93bjtcbiAgcGFyYW1ldGVycz86IHVua25vd247XG59O1xuXG5mdW5jdGlvbiB0b1N0cmluZ09yRW1wdHkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBcIlwiO1xufVxuXG5mdW5jdGlvbiBleGFtcGxlS2V5KGV4YW1wbGU6IEV4YW1wbGVMaWtlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3RvU3RyaW5nT3JFbXB0eShleGFtcGxlPy51c2VyX3V0dGVyYW5jZSl9XFxuJHt0b1N0cmluZ09yRW1wdHkoXG4gICAgZXhhbXBsZT8uZXhhbXBsZV9wYXJzZWQsXG4gICl9YDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKHBhcmFtczogdW5rbm93bik6IEZ1bmNQYXJhbUxpa2VbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcykgPyAocGFyYW1zIGFzIEZ1bmNQYXJhbUxpa2VbXSkgOiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1NhbWVGdW5jdGlvblNpZ25hdHVyZShcbiAgbGVmdDogRnVuY0Rlc2NyaXB0b3JMaWtlLFxuICByaWdodDogRnVuY0Rlc2NyaXB0b3JMaWtlLFxuKTogYm9vbGVhbiB7XG4gIGlmIChsZWZ0Py5mdW5jX25hbWUgIT09IHJpZ2h0Py5mdW5jX25hbWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKGxlZnQ/LmlzU3RhdGljICE9PSByaWdodD8uaXNTdGF0aWMpIHJldHVybiBmYWxzZTtcbiAgaWYgKGxlZnQ/LnJldHVyblR5cGUgIT09IHJpZ2h0Py5yZXR1cm5UeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgbGVmdFBhcmFtcyA9IG5vcm1hbGl6ZVBhcmFtcyhsZWZ0Py5wYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmlnaHRQYXJhbXMgPSBub3JtYWxpemVQYXJhbXMocmlnaHQ/LnBhcmFtZXRlcnMpO1xuXG4gIGlmIChsZWZ0UGFyYW1zLmxlbmd0aCAhPT0gcmlnaHRQYXJhbXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWZ0UGFyYW1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgYSA9IGxlZnRQYXJhbXNbaV07XG4gICAgY29uc3QgYiA9IHJpZ2h0UGFyYW1zW2ldO1xuICAgIGlmIChhPy5uYW1lICE9PSBiPy5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGE/LnR5cGUgIT09IGI/LnR5cGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYT8ucmVxdWlyZWQgIT09IGI/LnJlcXVpcmVkKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvcihcbiAgZnVuY3Rpb25zOiBTZXQ8RnVuY0Rlc2NyaXB0b3JMaWtlPixcbiAgY2FuZGlkYXRlOiBGdW5jRGVzY3JpcHRvckxpa2UsXG4pOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBleGlzdGluZyBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoaGFzU2FtZUZ1bmN0aW9uU2lnbmF0dXJlKGV4aXN0aW5nLCBjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9ucy5hZGQoY2FuZGlkYXRlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVVuaXF1ZUV4YW1wbGVzPFQgZXh0ZW5kcyBFeGFtcGxlTGlrZT4oXG4gIGV4aXN0aW5nOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBpbmNvbWluZzogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFRbXSB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi4oZXhpc3RpbmcgfHwgW10pXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQobWVyZ2VkLm1hcCgoZXhhbXBsZSkgPT4gZXhhbXBsZUtleShleGFtcGxlKSkpO1xuXG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGluY29taW5nIHx8IFtdKSB7XG4gICAgY29uc3Qga2V5ID0gZXhhbXBsZUtleShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICBtZXJnZWQucHVzaChjYW5kaWRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuaW50ZXJmYWNlIEdlbmllT2JqZWN0U3BlYyB7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBrZXk6IGFueTtcbn1cblxuaW50ZXJmYWNlIEdlbmllUmVjdCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVJbnRlcmZhY2VTcGVjIGV4dGVuZHMgR2VuaWVPYmplY3RTcGVjIHtcbiAgcmVjdDogR2VuaWVSZWN0O1xuICBpc0ZvY3VzZWRTY3JlZW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJpZXZlSW50ZXJmYWNlc1Jlc3VsdCB7XG4gIGludGVyZmFjZXM6IEdlbmllSW50ZXJmYWNlU3BlY1tdO1xuICB2aXNpYmlsaXR5U3RhdGU6IE5hdGl2ZVZpc2liaWxpdHlTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEluc3RhbnRpYXRlR2VuaWVPYmplY3Qob2JqZWN0U3BlYzogR2VuaWVPYmplY3RTcGVjKTogYW55IHtcbiAgY29uc3Qgb2JqZWN0S2V5ID0gb2JqZWN0U3BlYyAmJiBvYmplY3RTcGVjLmtleTtcbiAgaWYgKG9iamVjdEtleSAmJiBPYmplY3QuaGFzT3duKG9iamVjdEtleSwgXCJsb2NhbFN0b3JlXCIpKSB7XG4gICAgaWYgKG9iamVjdEtleVtcImxvY2FsU3RvcmVcIl1bXCJfX2dlbmllT2JqZWN0VHlwZVwiXSA9PSBcIkhlbHBlckNsYXNzXCIpIHtcbiAgICAgIHJldHVybiBvYmplY3RLZXk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG9iamVjdENsYXNzID0gQWxsR2VuaWVPYmplY3RzW29iamVjdFNwZWMuY2xhc3NOYW1lXSBhcyB0eXBlb2YgRGF0YUNsYXNzO1xuICByZXR1cm4gb2JqZWN0Q2xhc3MuR2V0T2JqZWN0KG9iamVjdFNwZWMua2V5KTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGdlbmllIGNsYXNzIGludGVyZmFjZXMgd2l0aGluIG1vZGFsaXR5IHByb3ZpZGVyIGFuZCB0aGVpciByZWN0c1xuICogQHJldHVybnMge0dlbmllSW50ZXJmYWNlU3BlY1tdfSBSZXRyaWV2ZSBhbGwgdGhlIEdlbmllIG9iamVjdCBjb21wb25lbnRzIG9uIHRoZSBpbnRlcmZhY2UgYW5kIHRoZWlyIHJlY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZXRyaWV2ZUludGVyZmFjZXMoKTogR2VuaWVJbnRlcmZhY2VTcGVjW10ge1xuICByZXR1cm4gUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QoKS5pbnRlcmZhY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmV0cmlldmVJbnRlcmZhY2VzU25hcHNob3QoKTogUmV0cmlldmVJbnRlcmZhY2VzUmVzdWx0IHtcbiAgLy8gc2NhbiB0aHJvdWdoIHZhbHVlcyBvZiBBbGxHZW5pZU9iamVjdCBhbmQgZ2V0IHRoZSBkaXNwbGF5ZWRJbnN0YW5jZXNcbiAgY29uc29sZS5sb2coXG4gICAgYEFsbEdlbmllT2JqZWN0SW50ZXJmYWNlcyAke0pTT04uc3RyaW5naWZ5KEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VzKX1gLFxuICApO1xuICBjb25zdCBkaXNwbGF5ZWRJbnN0YW5jZXM6IEdlbmllSW50ZXJmYWNlU3BlY1tdID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VzKSB7XG4gICAgZGlzcGxheWVkSW5zdGFuY2VzLnB1c2goQWxsR2VuaWVEaXNwbGF5ZWRJbnN0YW5jZXNba2V5XSgpKTtcbiAgfVxuICBjb25zdCByZXNvbHV0aW9uID0gcmVzb2x2ZVZpc2libGVJbnRlcmZhY2VzRm9yUGxhdGZvcm0oXG4gICAgUGxhdGZvcm0uT1MsXG4gICAgZGlzcGxheWVkSW5zdGFuY2VzLFxuICApO1xuICByZXR1cm4ge1xuICAgIGludGVyZmFjZXM6IHJlc29sdXRpb24uaW50ZXJmYWNlcyBhcyBHZW5pZUludGVyZmFjZVNwZWNbXSxcbiAgICB2aXNpYmlsaXR5U3RhdGU6IHJlc29sdXRpb24uc3RhdGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWZyZXNoRGlzcGxheWVkSW5zdGFuY2VSZWN0cygpOiB2b2lkIHtcbiAgLy8gUmUtbWVhc3VyZSBldmVyeSB2aXNpYmxlIGludGVyZmFjZSBqdXN0IGJlZm9yZSBnZW9tZXRyaWMgcmVzb2x1dGlvbiBzb1xuICAvLyBDdXJyZW50KCkgdXNlcyB0aGUgbGF0ZXN0IG9uLXNjcmVlbiBib3VuZHMgYWZ0ZXIgc2Nyb2xsaW5nLlxuICBmb3IgKGNvbnN0IGtleSBpbiBBbGxHZW5pZURpc3BsYXllZEluc3RhbmNlUmVmcmVzaGVycykge1xuICAgIEFsbEdlbmllRGlzcGxheWVkSW5zdGFuY2VSZWZyZXNoZXJzW2tleV0/LigpO1xuICB9XG59XG5cbmNvbnN0IHJlYWN0R2VuaWVDbGFzc01vZGlmaWVyOiBHZW5pZUNsYXNzTW9kaWZpZXIgPSAoXG4gIHRhcmdldDogdHlwZW9mIEdlbmllT2JqZWN0LFxuKSA9PiB7XG4gIC8vIGFwcGVuZCBtZXRob2QgYGN1cnJlbnQoKWAgdG8gdGhlIGNsYXNzXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1vc3QgcmVsZXZhbnQgaW5zdGFuY2Ugb2YgR2VuaWVPYmplY3QgaW4gdGhpcyBjb250ZXh0XG4gICAqIEByZXR1cm5zIHthbnl9IHRoZSBHZW5pZU9iamVjdFxuICAgKi9cbiAgZnVuY3Rpb24gQ3VycmVudCgpIHtcbiAgICBjb25zdCBjdXJyZW50Q2xhc3NOYW1lID0gdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5jbGFzc05hbWU7XG4gICAgY29uc3QgaW50ZXJmYWNlU25hcHNob3QgPSBSZXRyaWV2ZUludGVyZmFjZXNTbmFwc2hvdCgpO1xuICAgIGNvbnN0IGdlbmllSW50ZXJmYWNlcyA9IGludGVyZmFjZVNuYXBzaG90LmludGVyZmFjZXM7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0N1cnJlbnRdIHN0YXJ0ICR7Y3VycmVudENsYXNzTmFtZX07IHZpc2libGVJbnRlcmZhY2VzPSR7Z2VuaWVJbnRlcmZhY2VzLmxlbmd0aH07IHRhcHM9JHtDbGlja1BvaW50cy5sZW5ndGh9YCxcbiAgICApO1xuICAgIGlmIChpbnRlcmZhY2VTbmFwc2hvdC52aXNpYmlsaXR5U3RhdGUgPT09IFwidHJhbnNpdGlvbl91bnN0YWJsZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgQ3VycmVudENvbnRleHRFcnJvcihcbiAgICAgICAgYFZpc2libGUgJHtjdXJyZW50Q2xhc3NOYW1lfSBjb250ZXh0IGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIHdoaWxlIG5hdmlnYXRpb24gaXMgdHJhbnNpdGlvbmluZy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEludGVyZmFjZSA9IHBpY2tDdXJyZW50SW50ZXJmYWNlKFxuICAgICAgY3VycmVudENsYXNzTmFtZSxcbiAgICAgIGdlbmllSW50ZXJmYWNlcyxcbiAgICAgIENsaWNrUG9pbnRzLFxuICAgICAge1xuICAgICAgICBibG9ja2VkUmVjdHM6IEN1cnJlbnRTZWxlY3Rpb25CbG9ja2VkUmVjdHMsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0N1cnJlbnRdIHJlc29sdmVkICR7Y3VycmVudENsYXNzTmFtZX0gLT4gJHtjdXJyZW50SW50ZXJmYWNlLmNsYXNzTmFtZX0gJHtKU09OLnN0cmluZ2lmeShjdXJyZW50SW50ZXJmYWNlLmtleSl9YCxcbiAgICApO1xuICAgIHJldHVybiBJbnN0YW50aWF0ZUdlbmllT2JqZWN0KGN1cnJlbnRJbnRlcmZhY2UpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICB0YXJnZXQuQ3VycmVudCA9IEN1cnJlbnQ7XG5cbiAgLy8gYXBwZW5kIGFkZGl0aW9uYWwgZnVuY3Rpb24gZGVzY3JpcHRvciB0byBjbGFzcyBkZXNjcmlwdG9yXG4gIHVwc2VydEZ1bmN0aW9uRGVzY3JpcHRvcihcbiAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIFNldDxhbnk+LFxuICAgIG5ldyBGdW5jRGVzY3JpcHRvcihcbiAgICAgICAgXCJDdXJyZW50XCIsXG4gICAgICAgIFtdLFxuICAgICAgICB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgXCJUaGUgc2luZ2xlIG9iamVjdCB0aGF0IHRoZSB1c2VyIGlzIHJlZmVycmluZyB0by4gVXN1YWxseSBlaXRoZXIgdGhlIG9iamVjdCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIGNsaWNrLCBvciB0aGUgb2JqZWN0IHRoYXQgaXMgdGhlIGxhcmdlc3Qgb24gc2NyZWVuLlwiLFxuICAgICAgKSxcbiAgKTtcblxuICBmdW5jdGlvbiBBbGxDdXJyZW50KCkge1xuICAgIGNvbnN0IGN1cnJlbnRDbGFzc05hbWUgPSB0YXJnZXQuQ2xhc3NEZXNjcmlwdG9yLmNsYXNzTmFtZTtcbiAgICBjb25zdCBpbnRlcmZhY2VTbmFwc2hvdCA9IFJldHJpZXZlSW50ZXJmYWNlc1NuYXBzaG90KCk7XG4gICAgY29uc3QgZ2VuaWVJbnRlcmZhY2VzID0gaW50ZXJmYWNlU25hcHNob3QuaW50ZXJmYWNlcztcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gZ2VuaWVJbnRlcmZhY2VzLmZpbHRlcihcbiAgICAgIChnZW5pZUludGVyZmFjZSkgPT4gZ2VuaWVJbnRlcmZhY2UuY2xhc3NOYW1lID09PSBjdXJyZW50Q2xhc3NOYW1lLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0FsbEN1cnJlbnRdIHN0YXJ0ICR7Y3VycmVudENsYXNzTmFtZX07IHZpc2libGVJbnRlcmZhY2VzPSR7Z2VuaWVJbnRlcmZhY2VzLmxlbmd0aH07IGNhbmRpZGF0ZXM9JHtjYW5kaWRhdGVzLmxlbmd0aH07IHRhcHM9JHtDbGlja1BvaW50cy5sZW5ndGh9YCxcbiAgICApO1xuXG4gICAgY29uc3Qgb2JqZWN0czogYW55W10gPSBbXTtcblxuICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuXG4gICAgaWYgKENsaWNrUG9pbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpY2tQb2ludCBvZiBDbGlja1BvaW50cykge1xuICAgICAgICBjb25zdCBjbG9zZXN0ID0gcGlja05lYXJlc3RJbnRlcmZhY2UoY2FuZGlkYXRlcywgY2xpY2tQb2ludCk7XG4gICAgICAgIG9iamVjdHMucHVzaChJbnN0YW50aWF0ZUdlbmllT2JqZWN0KGNsb3Nlc3QpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGdlbmllSW50ZXJmYWNlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgb2JqZWN0cy5wdXNoKEluc3RhbnRpYXRlR2VuaWVPYmplY3QoZ2VuaWVJbnRlcmZhY2UpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3RzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgdGFyZ2V0LkFsbEN1cnJlbnQgPSBBbGxDdXJyZW50O1xuXG4gIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGZ1bmN0aW9uIGRlc2NyaXB0b3IgdG8gY2xhc3MgZGVzY3JpcHRvclxuICB1cHNlcnRGdW5jdGlvbkRlc2NyaXB0b3IoXG4gICAgdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5mdW5jdGlvbnMgYXMgdW5rbm93biBhcyBTZXQ8YW55PixcbiAgICBuZXcgRnVuY0Rlc2NyaXB0b3IoXG4gICAgICAgIFwiQWxsQ3VycmVudFwiLFxuICAgICAgICBbXSxcbiAgICAgICAgdGFyZ2V0LkNsYXNzRGVzY3JpcHRvci5jbGFzc05hbWUgKyBcIltdXCIsXG4gICAgICAgIHRydWUsXG4gICAgICAgIFwiQWxsIG9iamVjdHMgdGhhdCB0aGUgdXNlciBpcyByZWZlcnJpbmcgdG8uIFVzdWFsbHkgZWl0aGVyIHRoZSBvYmplY3RzIHRoYXQgYXJlIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIGNsaWNrcyAoaWYgbXVsdGlwbGUpLCBvciBhbGwgb2JqZWN0cyBvZiB0aGF0IHR5cGUgb24gc2NyZWVlbi5cIixcbiAgICAgICksXG4gICk7XG5cbiAgZ2VuaWVEaXNwYXRjaCgoKSA9PiB7XG4gICAgY29uc3QgbmV3RXhhbXBsZXMgPSBtZXJnZVVuaXF1ZUV4YW1wbGVzKFxuICAgICAgc2hhcmVkU3RhdGVbXCJfX0VYQU1QTEVTX19cIl0gfHwgW10sXG4gICAgICB0YXJnZXQuRXhhbXBsZXMgfHwgW10sXG4gICAgKTtcbiAgICBzZXRTaGFyZWRTdGF0ZSh7XG4gICAgICAuLi5zaGFyZWRTdGF0ZSxcbiAgICAgIFtcIl9fRVhBTVBMRVNfX1wiXTogbmV3RXhhbXBsZXMsXG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRSZWFjdEdlbmllKCk6IFN0b3JlPGFueSwgYW55PiB7XG4gIGNvbnN0IHJlYWN0R2VuaWVTdG9yZSA9IGluaXRHZW5pZSh7XG4gICAgaW5pdEdlbmllQ2xhc3NNb2RpZmllcjogcmVhY3RHZW5pZUNsYXNzTW9kaWZpZXIsXG4gIH0pO1xuICBnZW5pZURpc3BhdGNoKCgpID0+IHtcbiAgICBjb25zdCByZWFjdEdlbmllU3RhdGUgPSBzaGFyZWRTdGF0ZSBhcyBSZWFjdEdlbmllU3RhdGU7XG4gICAgcmVhY3RHZW5pZVN0YXRlLm5hdlN0YXRlID0ge1xuICAgICAgb2JqZWN0Vmlld0NsYXNzTmFtZTogbnVsbCxcbiAgICAgIG9iamVjdENvbnN0cnVjdG9yUGFyYW1zOiBudWxsLFxuICAgICAgcXVlcnlJbnRlbnQ6IG51bGwsXG4gICAgICByZXN1bHRSZWY6IG51bGwsXG4gICAgICByZXN1bHRPYmplY3RUeXBlOiBudWxsLFxuICAgIH07XG4gICAgcmVhY3RHZW5pZVN0YXRlLm5hdlN0YWNrID0gMDtcbiAgICByZWFjdEdlbmllU3RhdGUubWVzc2FnZSA9IHtcbiAgICAgIG1pbmltYWxUZXh0OiBcIlwiLFxuICAgICAgZnVsbFRleHQ6IFwiXCIsXG4gICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgIHNob3VsZFNwZWFrOiBmYWxzZSxcbiAgICAgIG9yaWdpbjogXCJzeXN0ZW1cIixcbiAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgfTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93QnlSZWYgPSB7fTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93T3JkZXIgPSBbXTtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93TWF4ID0gNDA7XG4gICAgcmVhY3RHZW5pZVN0YXRlLnJlc3VsdFdpbmRvd1R0bE1zID0gNSAqIDYwICogMTAwMDtcbiAgICByZWFjdEdlbmllU3RhdGUucmVzdWx0V2luZG93U2VxdWVuY2UgPSAwO1xuICB9KTtcbiAgcmV0dXJuIHJlYWN0R2VuaWVTdG9yZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyByZW5kZXJlZCBieSB0aGUgaW50ZXJmYWNlXG4gKiBAcGFyYW0gZGlzcGxheVRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgaW50ZXJmYWNlLCBjYW4gYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGluIHRoZSBvYmplY3QgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkaXNwbGF5UHJpb3JpdHkgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcmZhY2UsIGNhbiBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW4gdGhlIG9iamVjdCBhbmQgcmV0dXJucyBhIG51bWJlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZW5pZUNsYXNzSW50ZXJmYWNlKFxuICB0eXBlOiBzdHJpbmcsXG4gIGRpc3BsYXlUaXRsZTogc3RyaW5nIHwgKChhbnkpID0+IHN0cmluZykgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGRpc3BsYXlQcmlvcml0eTogbnVtYmVyIHwgKCh0YXJnZXQ6IGFueSkgPT4gbnVtYmVyKSA9IDAsXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgIC8vIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBsaXN0IG9mIHBhcmFtZXRlcnNcbiAgICBjb25zdCBuZXdUYXJnZXQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuIEdlbmllVmlld1dyYXBwZXIodHlwZSwgdGFyZ2V0LCBhcmdzKSgpO1xuICAgIH07XG4gICAgaWYgKGRpc3BsYXlUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXNwbGF5VGl0bGUgPSB0eXBlO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZUZ1bmN0aW9uID1cbiAgICAgIHR5cGVvZiBkaXNwbGF5VGl0bGUgPT09IFwic3RyaW5nXCIgPyAoKSA9PiBkaXNwbGF5VGl0bGUgOiBkaXNwbGF5VGl0bGU7XG4gICAgY29uc3QgZGlzcGxheVByaW9yaXR5RnVuY3Rpb24gPVxuICAgICAgdHlwZW9mIGRpc3BsYXlQcmlvcml0eSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/ICgpID0+IGRpc3BsYXlQcmlvcml0eVxuICAgICAgICA6IGRpc3BsYXlQcmlvcml0eTtcbiAgICBjb25zdCBuZXdHZW5pZUludGVyZmFjZVNwZWM6IEdlbmllSW50ZXJmYWNlU3RvcmVFbGVtZW50ID0ge1xuICAgICAgb2JqZWN0Q2xhc3NOYW1lOiB0eXBlLFxuICAgICAgdmlld0NsYXNzTmFtZTogdGFyZ2V0Lm5hbWUsXG4gICAgICB0aXRsZTogdGl0bGVGdW5jdGlvbiBhcyAoYW55OiBhbnkpID0+IHN0cmluZyxcbiAgICAgIGZ1bmN0aW9uOiBuZXdUYXJnZXQsXG4gICAgICBkaXNwbGF5UHJpb3JpdHk6IGRpc3BsYXlQcmlvcml0eUZ1bmN0aW9uLFxuICAgIH07XG4gICAgQWxsR2VuaWVPYmplY3RJbnRlcmZhY2VzLmFkZEludGVyZmFjZShuZXdHZW5pZUludGVyZmFjZVNwZWMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIE5vdGU6IEF1dG9tYXRpYyByb3V0ZSByZWdpc3RyYXRpb24gYmFzZWQgb24gY29udmVudGlvbiAob3B0aW9uYWwsIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBpbiBjb21wb25lbnRzKSBcbiAgICAgKiAtIGZvciBleGFtcGxlLCB3ZSBjYW4gYXV0b21hdGljYWxseSByZWdpc3RlciBhbiBpbnRlcmZhY2UgZm9yIGEgR2VuaWVPYmplY3QgY2xhc3MgbmFtZWQgXCJFbWFpbFwiIHdpdGggYSBjb21wb25lbnQgbmFtZWQgXCJFbWFpbEludGVyZmFjZVwiLiBUaGlzIGFsbG93cyBmb3IgbW9yZSBzZWFtbGVzcyBpbnRlZ3JhdGlvbiBvZiBuZXcgY29tcG9uZW50cyBhbmQgaW50ZXJmYWNlcyB3aXRob3V0IG5lZWRpbmcgdG8gd29ycnkgYWJvdXQgcmVnaXN0cmF0aW9uIG9yZGVyLiBcbiAgICAgKiBIb3dldmVyLCBleHBsaWNpdCByZWdpc3RyYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkIGFuZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIGlmIGRlc2lyZWQuXG4gICAgICogV2UgY2FuIGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBmb3IgdGhlIHNhbWUgb2JqZWN0IHR5cGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCByZWdpc3RyYXRpb24gb3JkZXIuXG4gICAgICovIFxuXG4gICAgLy8gYWRkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggc2hhcmVkIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgb24vb2ZmIHNjcmVlblxuICAgIHJldHVybiBSZWFjdC5tZW1vKG5ld1RhcmdldCk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxpQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBdUNBLElBQUFHLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUdBLElBQUFLLGlCQUFBLEdBQUFMLE9BQUE7QUFLQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBRzZCLFNBQUFJLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBWCxDQUFBLEVBQUFJLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFmLENBQUEsYUFBQUksQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFELE9BQUEsQ0FBQUcsTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBZSxlQUFBLENBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBckIsQ0FBQSxFQUFBTSxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUYsT0FBQSxDQUFBRyxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQXRCLENBQUEsRUFBQUksQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUosQ0FBQTtBQUFBLFNBQUFtQixnQkFBQW5CLENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLFlBQUFELENBQUEsR0FBQW1CLGNBQUEsQ0FBQW5CLENBQUEsTUFBQUosQ0FBQSxHQUFBTSxNQUFBLENBQUFnQixjQUFBLENBQUF0QixDQUFBLEVBQUFJLENBQUEsSUFBQW9CLEtBQUEsRUFBQW5CLENBQUEsRUFBQU8sVUFBQSxNQUFBYSxZQUFBLE1BQUFDLFFBQUEsVUFBQTFCLENBQUEsQ0FBQUksQ0FBQSxJQUFBQyxDQUFBLEVBQUFMLENBQUE7QUFBQSxTQUFBdUIsZUFBQWxCLENBQUEsUUFBQXNCLENBQUEsR0FBQUMsWUFBQSxDQUFBdkIsQ0FBQSx1Q0FBQXNCLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQXZCLENBQUEsRUFBQUQsQ0FBQSwyQkFBQUMsQ0FBQSxLQUFBQSxDQUFBLFNBQUFBLENBQUEsTUFBQUwsQ0FBQSxHQUFBSyxDQUFBLENBQUF3QixNQUFBLENBQUFDLFdBQUEsa0JBQUE5QixDQUFBLFFBQUEyQixDQUFBLEdBQUEzQixDQUFBLENBQUErQixJQUFBLENBQUExQixDQUFBLEVBQUFELENBQUEsdUNBQUF1QixDQUFBLFNBQUFBLENBQUEsWUFBQUssU0FBQSx5RUFBQTVCLENBQUEsR0FBQTZCLE1BQUEsR0FBQUMsTUFBQSxFQUFBN0IsQ0FBQSxLQXJEN0I7QUFpRUEsTUFBTThCLG9CQUFvQixDQUFDO0VBQUFDLFlBQUE7SUFBQSxLQUN6QkMsY0FBYyxHQUFnQixJQUFJQyxHQUFHLENBQVMsQ0FBQztJQUFBLEtBQy9DQyxVQUFVLEdBQW9ELENBQUMsQ0FBQztFQUFBO0VBRWhFQyxZQUFZQSxDQUFDQyxPQUFtQyxFQUFFO0lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUNGLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDQyxlQUFlLENBQUMsRUFBRTtNQUM3QyxJQUFJLENBQUNILFVBQVUsQ0FBQ0UsT0FBTyxDQUFDQyxlQUFlLENBQUMsR0FBRyxFQUFFO0lBQy9DO0lBQ0EsSUFBSSxDQUFDSCxVQUFVLENBQUNFLE9BQU8sQ0FBQ0MsZUFBZSxDQUFDLENBQUM3QixJQUFJLENBQUM0QixPQUFPLENBQUM7SUFDdEQsSUFBSSxDQUFDSixjQUFjLENBQUNNLEdBQUcsQ0FBQ0YsT0FBTyxDQUFDQyxlQUFlLENBQUM7RUFDbEQ7RUFFQUUsa0JBQWtCQSxDQUFDQyxNQUFtQixFQUFVO0lBQzlDLElBQUlBLE1BQU0sQ0FBQ1QsV0FBVyxDQUFDVSxJQUFJLEtBQUssT0FBTyxFQUFFO01BQ3ZDLE9BQU8sSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUNsRDtJQUNBLE9BQU9BLE1BQU0sQ0FBQ1QsV0FBVyxDQUFDVSxJQUFJO0VBQ2hDO0VBRUFDLGFBQWFBLENBQUNGLE1BQW1CLEVBQThCO0lBQzdELE1BQU1HLFNBQVMsR0FBRyxJQUFJLENBQUNKLGtCQUFrQixDQUFDQyxNQUFNLENBQUM7SUFDakQsSUFBSSxJQUFJLENBQUNOLFVBQVUsQ0FBQ1MsU0FBUyxDQUFDLEVBQUU7TUFDOUIsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDVixVQUFVLENBQUNTLFNBQVMsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7UUFDakUsT0FBT0EsQ0FBQyxDQUFDQyxlQUFlLENBQUNSLE1BQU0sQ0FBQyxHQUFHTSxDQUFDLENBQUNFLGVBQWUsQ0FBQ1IsTUFBTSxDQUFDO01BQzlELENBQUMsQ0FBQztNQUNGLE9BQU9JLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QjtJQUNBLE9BQU8sSUFBSTtFQUNiOztFQUVBO0VBQ0FLLGFBQWFBLENBQUEsRUFBa0Q7SUFDN0QsTUFBTUEsYUFBNEQsR0FBRyxDQUFDLENBQUM7SUFDdkUsS0FBSyxNQUFNQyxHQUFHLElBQUksSUFBSSxDQUFDaEIsVUFBVSxFQUFFO01BQ2pDLEtBQUssTUFBTUUsT0FBTyxJQUFJLElBQUksQ0FBQ0YsVUFBVSxDQUFDZ0IsR0FBRyxDQUFDLEVBQUU7UUFDMUNELGFBQWEsQ0FBQ2IsT0FBTyxDQUFDZSxhQUFhLENBQUMsR0FBR2YsT0FBTztNQUNoRDtJQUNGO0lBQ0EsT0FBT2EsYUFBYTtFQUN0QjtBQUNGO0FBRU8sTUFBTUcsd0JBQThDLEdBQUFDLE9BQUEsQ0FBQUQsd0JBQUEsR0FDekQsSUFBSXRCLG9CQUFvQixDQUFDLENBQUM7QUFFckIsTUFBTXdCLDBCQUVaLEdBQUFELE9BQUEsQ0FBQUMsMEJBQUEsR0FBRyxDQUFDLENBQUM7QUFFQyxNQUFNQyxtQ0FFWixHQUFBRixPQUFBLENBQUFFLG1DQUFBLEdBQUcsQ0FBQyxDQUFDO0FBRUMsTUFBTUMsV0FBdUMsR0FBQUgsT0FBQSxDQUFBRyxXQUFBLEdBQUcsRUFBRTtBQUNsRCxNQUFNQyw0QkFLWCxHQUFBSixPQUFBLENBQUFJLDRCQUFBLEdBQUcsRUFBRTtBQW9CUCxTQUFTQyxlQUFlQSxDQUFDdkMsS0FBYyxFQUFVO0VBQy9DLE9BQU8sT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxHQUFHLEVBQUU7QUFDL0M7QUFFQSxTQUFTd0MsVUFBVUEsQ0FBQ0MsT0FBb0IsRUFBVTtFQUNoRCxPQUFPLEdBQUdGLGVBQWUsQ0FBQ0UsT0FBTyxFQUFFQyxjQUFjLENBQUMsS0FBS0gsZUFBZSxDQUNwRUUsT0FBTyxFQUFFRSxjQUNYLENBQUMsRUFBRTtBQUNMO0FBRUEsU0FBU0MsZUFBZUEsQ0FBQ0MsTUFBZSxFQUFtQjtFQUN6RCxPQUFPQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxDQUFDLEdBQUlBLE1BQU0sR0FBdUIsRUFBRTtBQUNqRTtBQUVPLFNBQVNHLHdCQUF3QkEsQ0FDdENDLElBQXdCLEVBQ3hCQyxLQUF5QixFQUNoQjtFQUNULElBQUlELElBQUksRUFBRUUsU0FBUyxLQUFLRCxLQUFLLEVBQUVDLFNBQVMsRUFBRSxPQUFPLEtBQUs7RUFDdEQsSUFBSUYsSUFBSSxFQUFFRyxRQUFRLEtBQUtGLEtBQUssRUFBRUUsUUFBUSxFQUFFLE9BQU8sS0FBSztFQUNwRCxJQUFJSCxJQUFJLEVBQUVJLFVBQVUsS0FBS0gsS0FBSyxFQUFFRyxVQUFVLEVBQUUsT0FBTyxLQUFLO0VBRXhELE1BQU1DLFVBQVUsR0FBR1YsZUFBZSxDQUFDSyxJQUFJLEVBQUVNLFVBQVUsQ0FBQztFQUNwRCxNQUFNQyxXQUFXLEdBQUdaLGVBQWUsQ0FBQ00sS0FBSyxFQUFFSyxVQUFVLENBQUM7RUFFdEQsSUFBSUQsVUFBVSxDQUFDN0QsTUFBTSxLQUFLK0QsV0FBVyxDQUFDL0QsTUFBTSxFQUFFLE9BQU8sS0FBSztFQUUxRCxLQUFLLElBQUlVLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR21ELFVBQVUsQ0FBQzdELE1BQU0sRUFBRVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUM3QyxNQUFNd0IsQ0FBQyxHQUFHMkIsVUFBVSxDQUFDbkQsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU15QixDQUFDLEdBQUc0QixXQUFXLENBQUNyRCxDQUFDLENBQUM7SUFDeEIsSUFBSXdCLENBQUMsRUFBRUwsSUFBSSxLQUFLTSxDQUFDLEVBQUVOLElBQUksRUFBRSxPQUFPLEtBQUs7SUFDckMsSUFBSUssQ0FBQyxFQUFFOEIsSUFBSSxLQUFLN0IsQ0FBQyxFQUFFNkIsSUFBSSxFQUFFLE9BQU8sS0FBSztJQUNyQyxJQUFJOUIsQ0FBQyxFQUFFK0IsUUFBUSxLQUFLOUIsQ0FBQyxFQUFFOEIsUUFBUSxFQUFFLE9BQU8sS0FBSztFQUMvQztFQUVBLE9BQU8sSUFBSTtBQUNiO0FBRU8sU0FBU0Msd0JBQXdCQSxDQUN0Q0MsU0FBa0MsRUFDbENDLFNBQTZCLEVBQ3BCO0VBQ1QsS0FBSyxNQUFNQyxRQUFRLElBQUlGLFNBQVMsRUFBRTtJQUNoQyxJQUFJWix3QkFBd0IsQ0FBQ2MsUUFBUSxFQUFFRCxTQUFTLENBQUMsRUFBRTtNQUNqRCxPQUFPLEtBQUs7SUFDZDtFQUNGO0VBQ0FELFNBQVMsQ0FBQ3pDLEdBQUcsQ0FBQzBDLFNBQVMsQ0FBQztFQUN4QixPQUFPLElBQUk7QUFDYjtBQUVPLFNBQVNFLG1CQUFtQkEsQ0FDakNELFFBQWdDLEVBQ2hDRSxRQUFnQyxFQUMzQjtFQUNMLE1BQU1DLE1BQU0sR0FBRyxDQUFDLElBQUlILFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUNwQyxNQUFNSSxJQUFJLEdBQUcsSUFBSXBELEdBQUcsQ0FBQ21ELE1BQU0sQ0FBQ0UsR0FBRyxDQUFFMUIsT0FBTyxJQUFLRCxVQUFVLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFFbEUsS0FBSyxNQUFNb0IsU0FBUyxJQUFJRyxRQUFRLElBQUksRUFBRSxFQUFFO0lBQ3RDLE1BQU1qQyxHQUFHLEdBQUdTLFVBQVUsQ0FBQ3FCLFNBQVMsQ0FBQztJQUNqQyxJQUFJSyxJQUFJLENBQUNFLEdBQUcsQ0FBQ3JDLEdBQUcsQ0FBQyxFQUFFO01BQ2pCO0lBQ0Y7SUFDQW1DLElBQUksQ0FBQy9DLEdBQUcsQ0FBQ1ksR0FBRyxDQUFDO0lBQ2JrQyxNQUFNLENBQUM1RSxJQUFJLENBQUN3RSxTQUFTLENBQUM7RUFDeEI7RUFFQSxPQUFPSSxNQUFNO0FBQ2Y7QUE0Qk8sU0FBU0ksc0JBQXNCQSxDQUFDQyxVQUEyQixFQUFPO0VBQ3ZFLE1BQU1DLFNBQVMsR0FBR0QsVUFBVSxJQUFJQSxVQUFVLENBQUN2QyxHQUFHO0VBQzlDLElBQUl3QyxTQUFTLElBQUl6RixNQUFNLENBQUMwRixNQUFNLENBQUNELFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRTtJQUN2RCxJQUFJQSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxhQUFhLEVBQUU7TUFDakUsT0FBT0EsU0FBUztJQUNsQjtFQUNGO0VBQ0EsTUFBTUUsV0FBVyxHQUFHQyw4QkFBZSxDQUFDSixVQUFVLENBQUM5QyxTQUFTLENBQXFCO0VBQzdFLE9BQU9pRCxXQUFXLENBQUNFLFNBQVMsQ0FBQ0wsVUFBVSxDQUFDdkMsR0FBRyxDQUFDO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZDLGtCQUFrQkEsQ0FBQSxFQUF5QjtFQUN6RCxPQUFPQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM5RCxVQUFVO0FBQ2hEO0FBRU8sU0FBUzhELDBCQUEwQkEsQ0FBQSxFQUE2QjtFQUNyRTtFQUNBQyxPQUFPLENBQUNDLEdBQUcsQ0FDVCw0QkFBNEJDLElBQUksQ0FBQ0MsU0FBUyxDQUFDOUMsMEJBQTBCLENBQUMsRUFDeEUsQ0FBQztFQUNELE1BQU0rQyxrQkFBd0MsR0FBRyxFQUFFO0VBQ25ELEtBQUssTUFBTW5ELEdBQUcsSUFBSUksMEJBQTBCLEVBQUU7SUFDNUMrQyxrQkFBa0IsQ0FBQzdGLElBQUksQ0FBQzhDLDBCQUEwQixDQUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQ7RUFDQSxNQUFNb0QsVUFBVSxHQUFHLElBQUFDLHFEQUFtQyxFQUNwREMscUJBQVEsQ0FBQ0MsRUFBRSxFQUNYSixrQkFDRixDQUFDO0VBQ0QsT0FBTztJQUNMbkUsVUFBVSxFQUFFb0UsVUFBVSxDQUFDcEUsVUFBa0M7SUFDekR3RSxlQUFlLEVBQUVKLFVBQVUsQ0FBQ0s7RUFDOUIsQ0FBQztBQUNIO0FBRU8sU0FBU0MsNkJBQTZCQSxDQUFBLEVBQVM7RUFDcEQ7RUFDQTtFQUNBLEtBQUssTUFBTTFELEdBQUcsSUFBSUssbUNBQW1DLEVBQUU7SUFDckRBLG1DQUFtQyxDQUFDTCxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQzlDO0FBQ0Y7QUFFQSxNQUFNMkQsdUJBQTJDLEdBQy9DQyxNQUEwQixJQUN2QjtFQUNIO0VBQ0E7QUFDRjtBQUNBO0FBQ0E7RUFDRSxTQUFTQyxPQUFPQSxDQUFBLEVBQUc7SUFDakIsTUFBTUMsZ0JBQWdCLEdBQUdGLE1BQU0sQ0FBQ0csZUFBZSxDQUFDdEUsU0FBUztJQUN6RCxNQUFNdUUsaUJBQWlCLEdBQUdsQiwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3RELE1BQU1tQixlQUFlLEdBQUdELGlCQUFpQixDQUFDaEYsVUFBVTtJQUNwRCtELE9BQU8sQ0FBQ0MsR0FBRyxDQUNULG1CQUFtQmMsZ0JBQWdCLHVCQUF1QkcsZUFBZSxDQUFDdkcsTUFBTSxVQUFVNEMsV0FBVyxDQUFDNUMsTUFBTSxFQUM5RyxDQUFDO0lBQ0QsSUFBSXNHLGlCQUFpQixDQUFDUixlQUFlLEtBQUsscUJBQXFCLEVBQUU7TUFDL0QsTUFBTSxJQUFJVSxxQ0FBbUIsQ0FDM0IsV0FBV0osZ0JBQWdCLHdFQUM3QixDQUFDO0lBQ0g7SUFDQSxNQUFNSyxnQkFBZ0IsR0FBRyxJQUFBQyxzQ0FBb0IsRUFDM0NOLGdCQUFnQixFQUNoQkcsZUFBZSxFQUNmM0QsV0FBVyxFQUNYO01BQ0UrRCxZQUFZLEVBQUU5RDtJQUNoQixDQUNGLENBQUM7SUFDRHdDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNULHNCQUFzQmMsZ0JBQWdCLE9BQU9LLGdCQUFnQixDQUFDMUUsU0FBUyxJQUFJd0QsSUFBSSxDQUFDQyxTQUFTLENBQUNpQixnQkFBZ0IsQ0FBQ25FLEdBQUcsQ0FBQyxFQUNqSCxDQUFDO0lBQ0QsT0FBT3NDLHNCQUFzQixDQUFDNkIsZ0JBQWdCLENBQUM7RUFDakQ7O0VBRUE7RUFDQVAsTUFBTSxDQUFDQyxPQUFPLEdBQUdBLE9BQU87O0VBRXhCO0VBQ0FqQyx3QkFBd0IsQ0FDdEJnQyxNQUFNLENBQUNHLGVBQWUsQ0FBQ2xDLFNBQVMsRUFDaEMsSUFBSXlDLDZCQUFjLENBQ2QsU0FBUyxFQUNULEVBQUUsRUFDRlYsTUFBTSxDQUFDRyxlQUFlLENBQUN0RSxTQUFTLEVBQ2hDLElBQUksRUFDSiw2SkFDRixDQUNKLENBQUM7RUFFRCxTQUFTOEUsVUFBVUEsQ0FBQSxFQUFHO0lBQ3BCLE1BQU1ULGdCQUFnQixHQUFHRixNQUFNLENBQUNHLGVBQWUsQ0FBQ3RFLFNBQVM7SUFDekQsTUFBTXVFLGlCQUFpQixHQUFHbEIsMEJBQTBCLENBQUMsQ0FBQztJQUN0RCxNQUFNbUIsZUFBZSxHQUFHRCxpQkFBaUIsQ0FBQ2hGLFVBQVU7SUFDcEQsTUFBTXdGLFVBQVUsR0FBR1AsZUFBZSxDQUFDOUcsTUFBTSxDQUN0Q3NILGNBQWMsSUFBS0EsY0FBYyxDQUFDaEYsU0FBUyxLQUFLcUUsZ0JBQ25ELENBQUM7SUFDRGYsT0FBTyxDQUFDQyxHQUFHLENBQ1Qsc0JBQXNCYyxnQkFBZ0IsdUJBQXVCRyxlQUFlLENBQUN2RyxNQUFNLGdCQUFnQjhHLFVBQVUsQ0FBQzlHLE1BQU0sVUFBVTRDLFdBQVcsQ0FBQzVDLE1BQU0sRUFDbEosQ0FBQztJQUVELE1BQU1nSCxPQUFjLEdBQUcsRUFBRTtJQUV6QixJQUFJRixVQUFVLENBQUM5RyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzNCLE9BQU9nSCxPQUFPO0lBQ2hCO0lBRUEsSUFBSXBFLFdBQVcsQ0FBQzVDLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDMUIsS0FBSyxNQUFNaUgsVUFBVSxJQUFJckUsV0FBVyxFQUFFO1FBQ3BDLE1BQU1zRSxPQUFPLEdBQUcsSUFBQUMsc0NBQW9CLEVBQUNMLFVBQVUsRUFBRUcsVUFBVSxDQUFDO1FBQzVERCxPQUFPLENBQUNwSCxJQUFJLENBQUNnRixzQkFBc0IsQ0FBQ3NDLE9BQU8sQ0FBQyxDQUFDO01BQy9DO01BQ0EsT0FBT0YsT0FBTztJQUNoQixDQUFDLE1BQU07TUFDTCxLQUFLLE1BQU1ELGNBQWMsSUFBSUQsVUFBVSxFQUFFO1FBQ3ZDRSxPQUFPLENBQUNwSCxJQUFJLENBQUNnRixzQkFBc0IsQ0FBQ21DLGNBQWMsQ0FBQyxDQUFDO01BQ3REO01BQ0EsT0FBT0MsT0FBTztJQUNoQjtFQUNGOztFQUVBO0VBQ0FkLE1BQU0sQ0FBQ1csVUFBVSxHQUFHQSxVQUFVOztFQUU5QjtFQUNBM0Msd0JBQXdCLENBQ3RCZ0MsTUFBTSxDQUFDRyxlQUFlLENBQUNsQyxTQUFTLEVBQ2hDLElBQUl5Qyw2QkFBYyxDQUNkLFlBQVksRUFDWixFQUFFLEVBQ0ZWLE1BQU0sQ0FBQ0csZUFBZSxDQUFDdEUsU0FBUyxHQUFHLElBQUksRUFDdkMsSUFBSSxFQUNKLG1LQUNGLENBQ0osQ0FBQztFQUVELElBQUFxRiw0QkFBYSxFQUFDLE1BQU07SUFDbEIsTUFBTUMsV0FBVyxHQUFHL0MsbUJBQW1CLENBQ3JDZ0QsMEJBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQ2pDcEIsTUFBTSxDQUFDcUIsUUFBUSxJQUFJLEVBQ3JCLENBQUM7SUFDRCxJQUFBQyw2QkFBYyxFQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBQ1R3SCwwQkFBVztNQUNkLENBQUMsY0FBYyxHQUFHRDtJQUFXLEVBQzlCLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRU0sU0FBU0ksY0FBY0EsQ0FBQSxFQUFvQjtFQUNoRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMsd0JBQVMsRUFBQztJQUNoQ0Msc0JBQXNCLEVBQUUzQjtFQUMxQixDQUFDLENBQUM7RUFDRixJQUFBbUIsNEJBQWEsRUFBQyxNQUFNO0lBQ2xCLE1BQU1TLGVBQWUsR0FBR1AsMEJBQThCO0lBQ3RETyxlQUFlLENBQUNDLFFBQVEsR0FBRztNQUN6QkMsbUJBQW1CLEVBQUUsSUFBSTtNQUN6QkMsdUJBQXVCLEVBQUUsSUFBSTtNQUM3QkMsV0FBVyxFQUFFLElBQUk7TUFDakJDLFNBQVMsRUFBRSxJQUFJO01BQ2ZDLGdCQUFnQixFQUFFO0lBQ3BCLENBQUM7SUFDRE4sZUFBZSxDQUFDTyxRQUFRLEdBQUcsQ0FBQztJQUM1QlAsZUFBZSxDQUFDUSxPQUFPLEdBQUc7TUFDeEJDLFdBQVcsRUFBRSxFQUFFO01BQ2ZDLFFBQVEsRUFBRSxFQUFFO01BQ1p2RSxJQUFJLEVBQUUsTUFBTTtNQUNad0UsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLE1BQU0sRUFBRSxRQUFRO01BQ2hCSixPQUFPLEVBQUU7SUFDWCxDQUFDO0lBQ0RSLGVBQWUsQ0FBQ2EsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDYixlQUFlLENBQUNjLGlCQUFpQixHQUFHLEVBQUU7SUFDdENkLGVBQWUsQ0FBQ2UsZUFBZSxHQUFHLEVBQUU7SUFDcENmLGVBQWUsQ0FBQ2dCLGlCQUFpQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUNqRGhCLGVBQWUsQ0FBQ2lCLG9CQUFvQixHQUFHLENBQUM7RUFDMUMsQ0FBQyxDQUFDO0VBQ0YsT0FBT3BCLGVBQWU7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTcUIsbUJBQW1CQSxDQUNqQy9FLElBQVksRUFDWmdGLFlBQW9ELEdBQUdDLFNBQVMsRUFDaEU3RyxlQUFtRCxHQUFHLENBQUMsRUFDdkQ7RUFDQSxPQUFPLFVBQVU4RCxNQUFXLEVBQUU7SUFDNUI7SUFDQSxNQUFNZ0QsU0FBUyxHQUFHQSxDQUFDLEdBQUdDLElBQUksS0FBSztNQUM3QixPQUFPLElBQUFDLGtDQUFnQixFQUFDcEYsSUFBSSxFQUFFa0MsTUFBTSxFQUFFaUQsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsSUFBSUgsWUFBWSxLQUFLQyxTQUFTLEVBQUU7TUFDOUJELFlBQVksR0FBR2hGLElBQUk7SUFDckI7SUFDQSxNQUFNcUYsYUFBYSxHQUNqQixPQUFPTCxZQUFZLEtBQUssUUFBUSxHQUFHLE1BQU1BLFlBQVksR0FBR0EsWUFBWTtJQUN0RSxNQUFNTSx1QkFBdUIsR0FDM0IsT0FBT2xILGVBQWUsS0FBSyxRQUFRLEdBQy9CLE1BQU1BLGVBQWUsR0FDckJBLGVBQWU7SUFDckIsTUFBTW1ILHFCQUFpRCxHQUFHO01BQ3hEOUgsZUFBZSxFQUFFdUMsSUFBSTtNQUNyQnpCLGFBQWEsRUFBRTJELE1BQU0sQ0FBQ3JFLElBQUk7TUFDMUIySCxLQUFLLEVBQUVILGFBQXFDO01BQzVDSSxRQUFRLEVBQUVQLFNBQVM7TUFDbkI5RyxlQUFlLEVBQUVrSDtJQUNuQixDQUFDO0lBQ0Q5Ryx3QkFBd0IsQ0FBQ2pCLFlBQVksQ0FBQ2dJLHFCQUFxQixDQUFDOztJQUU1RDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRUk7SUFDQSxvQkFBT0csY0FBSyxDQUFDQyxJQUFJLENBQUNULFNBQVMsQ0FBQztFQUM5QixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { GenieInterfaceSpec } from "./react-decorators";
|
|
2
|
+
export type ReactGenieState = {
|
|
3
|
+
message: ReactGenieMessage;
|
|
4
|
+
navState: NavigatorState;
|
|
5
|
+
navStack: number;
|
|
6
|
+
resultWindowByRef: Record<string, ResultWindowEntry>;
|
|
7
|
+
resultWindowOrder: string[];
|
|
8
|
+
resultWindowMax: number;
|
|
9
|
+
resultWindowTtlMs: number;
|
|
10
|
+
resultWindowSequence: number;
|
|
11
|
+
};
|
|
12
|
+
export type ReactGenieMessage = AgentResponsePayload & {
|
|
13
|
+
origin: "voice" | "system";
|
|
14
|
+
message?: string;
|
|
15
|
+
};
|
|
16
|
+
export type QueryIntentOperation = {
|
|
17
|
+
kind: "matching" | "contains" | "equals";
|
|
18
|
+
field: string;
|
|
19
|
+
value: string | number | boolean;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "between";
|
|
22
|
+
field: string;
|
|
23
|
+
from?: string | number | boolean;
|
|
24
|
+
to?: string | number | boolean;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "sort";
|
|
27
|
+
field: string;
|
|
28
|
+
ascending: boolean;
|
|
29
|
+
} | {
|
|
30
|
+
kind: "index";
|
|
31
|
+
value: number;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "length";
|
|
34
|
+
};
|
|
35
|
+
export type QueryIntent = {
|
|
36
|
+
ops: QueryIntentOperation[];
|
|
37
|
+
hash: string;
|
|
38
|
+
};
|
|
39
|
+
export type ResultWindowEntry = {
|
|
40
|
+
resultRef: string;
|
|
41
|
+
eventId: number;
|
|
42
|
+
resultObjectType: string;
|
|
43
|
+
orderedConstructorParams: Record<string, any>[];
|
|
44
|
+
createdAt: number;
|
|
45
|
+
};
|
|
46
|
+
type AgentResponsePayload = {
|
|
47
|
+
minimalText: string;
|
|
48
|
+
fullText: string;
|
|
49
|
+
type: "info" | "error" | "success" | "warning";
|
|
50
|
+
shouldSpeak: boolean;
|
|
51
|
+
};
|
|
52
|
+
export declare let uiActive: boolean;
|
|
53
|
+
export interface NavigatorState {
|
|
54
|
+
objectViewClassName: string | null;
|
|
55
|
+
objectConstructorParams: any;
|
|
56
|
+
queryIntent?: QueryIntent | null;
|
|
57
|
+
resultRef?: string | null;
|
|
58
|
+
resultObjectType?: string | null;
|
|
59
|
+
}
|
|
60
|
+
export declare function createImmutableConstructorParamsSnapshot(value: any): Record<string, any> | null;
|
|
61
|
+
export declare function extractQueryIntentFromAst(ast: any): QueryIntent | null;
|
|
62
|
+
export declare const useGenieCodeSelector: (command: string) => (state: any) => Promise<any>;
|
|
63
|
+
export declare const useGenieSelector: (selector: any) => any;
|
|
64
|
+
type GenieCodeResult = {
|
|
65
|
+
success: boolean;
|
|
66
|
+
results: any[];
|
|
67
|
+
};
|
|
68
|
+
export declare function executeGenieCode(command: unknown, options?: {
|
|
69
|
+
origin?: ReactGenieMessage["origin"];
|
|
70
|
+
shouldSpeakErrors?: boolean;
|
|
71
|
+
}): Promise<GenieCodeResult>;
|
|
72
|
+
export declare function displayResult(executionResult: GenieCodeResult, transcript: string, parsed: string, genieInterfaces: GenieInterfaceSpec[]): void;
|
|
73
|
+
export declare function resetGenieNavigation(): void;
|
|
74
|
+
export {};
|