angular-three-cannon 2.0.0-beta.40 → 2.0.0-beta.41

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.
@@ -20,7 +20,7 @@ const quaternionToRotation = (callback) => {
20
20
  return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());
21
21
  };
22
22
  let incrementingId = 0;
23
- export function subscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
23
+ export function createSubscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
24
24
  return (callback) => {
25
25
  const id = incrementingId++;
26
26
  subscriptions[id] = { [type]: callback };
@@ -89,12 +89,12 @@ export function injectCompoundBody(fn, opts) {
89
89
  function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({}) } = {}) {
90
90
  injector = assertInjector(injectBody, injector);
91
91
  return runInInjectionContext(injector, () => {
92
- const bodyRef = ref || injectNgtRef();
93
- const physicsApi = injectNgtcPhysicsApi();
94
- const debugApi = injectNgtcDebugApi({ optional: true });
95
- const { add: debugAdd, remove: debugRemove } = debugApi || {};
96
- const { refs, subscriptions, scaleOverrides, events, bodies } = physicsApi.get();
97
- const worker = physicsApi.select('worker');
92
+ const [bodyRef, physicsApi, debugApi] = [
93
+ ref || injectNgtRef(),
94
+ injectNgtcPhysicsApi(),
95
+ injectNgtcDebugApi({ optional: true }),
96
+ ];
97
+ const [{ add: addToDebug, remove: removeFromDebug }, { refs, subscriptions, scaleOverrides, events, bodies }, worker,] = [debugApi || {}, physicsApi.get(), physicsApi.select('worker')];
98
98
  effect((onCleanup) => {
99
99
  // register deps
100
100
  deps();
@@ -119,7 +119,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
119
119
  object.setMatrixAt(i, temp.matrix);
120
120
  object.instanceMatrix.needsUpdate = true;
121
121
  refs[id] = object;
122
- debugAdd?.(id, props, type);
122
+ addToDebug?.(id, props, type);
123
123
  setupCollision(events, props, id);
124
124
  return { ...props, args: argsFn(props.args) };
125
125
  })
@@ -127,7 +127,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
127
127
  const props = getPropsFn(i);
128
128
  prepare(object, props);
129
129
  refs[id] = object;
130
- debugAdd?.(id, props, type);
130
+ addToDebug?.(id, props, type);
131
131
  setupCollision(events, props, id);
132
132
  return { ...props, args: argsFn(props.args) };
133
133
  });
@@ -142,7 +142,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
142
142
  onCleanup(() => {
143
143
  uuid.forEach((id) => {
144
144
  delete refs[id];
145
- debugRemove?.(id);
145
+ removeFromDebug?.(id);
146
146
  delete events[id];
147
147
  });
148
148
  currentWorker.removeBodies({ uuid });
@@ -160,7 +160,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
160
160
  uuid,
161
161
  });
162
162
  },
163
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
163
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
164
164
  };
165
165
  };
166
166
  const makeQuaternion = (index) => {
@@ -174,7 +174,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
174
174
  const uuid = getUUID(bodyRef, index);
175
175
  uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
176
176
  },
177
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
177
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
178
178
  };
179
179
  };
180
180
  const makeRotation = (index) => {
@@ -212,7 +212,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
212
212
  const uuid = getUUID(bodyRef, index);
213
213
  uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
214
214
  },
215
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
215
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
216
216
  };
217
217
  };
218
218
  const makeRemove = (index) => {
@@ -291,4 +291,4 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
291
291
  return { ref: bodyRef, api };
292
292
  });
293
293
  }
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NlcnZpY2VzL3NyYy9saWIvYm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQTJCOUYsT0FBTyxFQUFFLFlBQVksRUFBMEMsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlEL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFbEMsU0FBUyxVQUFVLENBQW1CLEdBQU07SUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBa0IsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUErQixFQUFFLEtBQWM7SUFDdEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFD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QUFFLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEUsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlZmZlY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBFbGVtZW50UmVmLCB0eXBlIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG5cdEF0b21pY05hbWUsXG5cdEF0b21pY1Byb3BzLFxuXHRCb2R5UHJvcHMsXG5cdEJvZHlTaGFwZVR5cGUsXG5cdEJveFByb3BzLFxuXHRDYW5ub25Xb3JrZXJBUEksXG5cdENvbXBvdW5kQm9keVByb3BzLFxuXHRDb252ZXhQb2x5aGVkcm9uQXJncyxcblx0Q29udmV4UG9seWhlZHJvblByb3BzLFxuXHRDeWxpbmRlclByb3BzLFxuXHRIZWlnaHRmaWVsZFByb3BzLFxuXHRQYXJ0aWNsZVByb3BzLFxuXHRQbGFuZVByb3BzLFxuXHRQcm9wVmFsdWUsXG5cdFF1YWQsXG5cdFNldE9wTmFtZSxcblx0U3BoZXJlQXJncyxcblx0U3BoZXJlUHJvcHMsXG5cdFN1YnNjcmlwdGlvbk5hbWUsXG5cdFN1YnNjcmlwdGlvblRhcmdldCxcblx0U3Vic2NyaXB0aW9ucyxcblx0VHJpbWVzaFByb3BzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgdHlwZSBOZ3RBbnlSZWNvcmQsIHR5cGUgTmd0SW5qZWN0ZWRSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdE5ndGNQaHlzaWNzQXBpLCB0eXBlIE5ndGNDYW5ub25FdmVudHMgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBpbmplY3ROZ3RjRGVidWdBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbi9kZWJ1Zyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0Y0F0b21pY0FwaTxLIGV4dGVuZHMgQXRvbWljTmFtZT4gPSB7XG5cdHNldDogKHZhbHVlOiBBdG9taWNQcm9wc1tLXSkgPT4gdm9pZDtcblx0c3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUXVhdGVybmlvbkFwaSA9IHtcblx0Y29weTogKHsgdywgeCwgeSwgeiB9OiBUSFJFRS5RdWF0ZXJuaW9uKSA9PiB2b2lkO1xuXHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpID0+IHZvaWQ7XG5cdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFF1YWQpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjVmVjdG9yQXBpID0ge1xuXHRjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4gdm9pZDtcblx0c3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogVHJpcGxldCkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNXb3JrZXJBcGkgPSB7XG5cdFtLIGluIEF0b21pY05hbWVdOiBOZ3RjQXRvbWljQXBpPEs+O1xufSAmIHtcblx0W0sgaW4gVmVjdG9yTmFtZV06IE5ndGNWZWN0b3JBcGk7XG59ICYge1xuXHRhcHBseUZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5SW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5TG9jYWxGb3JjZTogKGZvcmNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUxvY2FsSW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5VG9ycXVlOiAodG9ycXVlOiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRxdWF0ZXJuaW9uOiBOZ3RjUXVhdGVybmlvbkFwaTtcblx0cm90YXRpb246IE5ndGNWZWN0b3JBcGk7XG5cdHNjYWxlT3ZlcnJpZGU6IChzY2FsZTogVHJpcGxldCkgPT4gdm9pZDtcblx0c2xlZXA6ICgpID0+IHZvaWQ7XG5cdHdha2VVcDogKCkgPT4gdm9pZDtcblx0cmVtb3ZlOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVB1YmxpY0FwaSBleHRlbmRzIE5ndGNXb3JrZXJBcGkge1xuXHRhdDogKGluZGV4OiBudW1iZXIpID0+IE5ndGNXb3JrZXJBcGk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlSZXR1cm48VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPiB7XG5cdHJlZjogTmd0SW5qZWN0ZWRSZWY8VE9iamVjdD47XG5cdGFwaTogTmd0Y0JvZHlQdWJsaWNBcGk7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNHZXRCeUluZGV4PFQgZXh0ZW5kcyBCb2R5UHJvcHM+ID0gKGluZGV4OiBudW1iZXIpID0+IFQ7XG5leHBvcnQgdHlwZSBOZ3RjQXJnRm48VD4gPSAoYXJnczogVCkgPT4gdW5rbm93bltdO1xuXG5jb25zdCB0ZW1wID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemU8VCBleHRlbmRzIHN0cmluZz4oc3RyOiBUKTogQ2FwaXRhbGl6ZTxUPiB7XG5cdHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKSBhcyBDYXBpdGFsaXplPFQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VVVJRChyZWY6IEVsZW1lbnRSZWY8VEhSRUUuT2JqZWN0M0Q+LCBpbmRleD86IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBzdWZmaXggPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJycgOiBgLyR7aW5kZXh9YDtcblx0aWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gcmVmICYmIHJlZi5uYXRpdmVFbGVtZW50ICYmIGAke3JlZi5uYXRpdmVFbGVtZW50LnV1aWR9JHtzdWZmaXh9YDtcbn1cblxuY29uc3QgZSA9IG5ldyBUSFJFRS5FdWxlcigpO1xuY29uc3QgcSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XG5cbmNvbnN0IHF1YXRlcm5pb25Ub1JvdGF0aW9uID0gKGNhbGxiYWNrOiAodjogVHJpcGxldCkgPT4gdm9pZCkgPT4ge1xuXHRyZXR1cm4gKHY6IFF1YWQpID0+IGNhbGxiYWNrKGUuc2V0RnJvbVF1YXRlcm5pb24ocS5mcm9tQXJyYXkodikpLnRvQXJyYXkoKSBhcyBUcmlwbGV0KTtcbn07XG5cbmxldCBpbmNyZW1lbnRpbmdJZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmU8VCBleHRlbmRzIFN1YnNjcmlwdGlvbk5hbWU+KFxuXHRyZWY6IEVsZW1lbnRSZWY8VEhSRUUuT2JqZWN0M0Q+LFxuXHR3b3JrZXI6IENhbm5vbldvcmtlckFQSSxcblx0c3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucyxcblx0dHlwZTogVCxcblx0aW5kZXg/OiBudW1iZXIsXG5cdHRhcmdldDogU3Vic2NyaXB0aW9uVGFyZ2V0ID0gJ2JvZGllcycsXG4pIHtcblx0cmV0dXJuIChjYWxsYmFjazogKHZhbHVlOiBQcm9wVmFsdWU8VD4pID0+IHZvaWQpID0+IHtcblx0XHRjb25zdCBpZCA9IGluY3JlbWVudGluZ0lkKys7XG5cdFx0c3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogY2FsbGJhY2sgfTtcblx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChyZWYsIGluZGV4KTtcblx0XHR1dWlkICYmIHdvcmtlci5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcblx0XHRcdHdvcmtlci51bnN1YnNjcmliZSh7IHByb3BzOiBpZCB9KTtcblx0XHR9O1xuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlKG9iamVjdDogVEhSRUUuT2JqZWN0M0QsIHsgcG9zaXRpb24gPSBbMCwgMCwgMF0sIHJvdGF0aW9uID0gWzAsIDAsIDBdLCB1c2VyRGF0YSA9IHt9IH06IEJvZHlQcm9wcykge1xuXHRvYmplY3QudXNlckRhdGEgPSB1c2VyRGF0YTtcblx0b2JqZWN0LnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG5cdG9iamVjdC5yb3RhdGlvbi5zZXQoLi4ucm90YXRpb24pO1xuXHRvYmplY3QudXBkYXRlTWF0cml4KCk7XG59XG5cbmZ1bmN0aW9uIHNldHVwQ29sbGlzaW9uKFxuXHRldmVudHM6IE5ndGNDYW5ub25FdmVudHMsXG5cdHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kIH06IFBhcnRpYWw8Qm9keVByb3BzPixcblx0dXVpZDogc3RyaW5nLFxuKSB7XG5cdGV2ZW50c1t1dWlkXSA9IHtcblx0XHRjb2xsaWRlOiBvbkNvbGxpZGUsXG5cdFx0Y29sbGlkZUJlZ2luOiBvbkNvbGxpZGVCZWdpbixcblx0XHRjb2xsaWRlRW5kOiBvbkNvbGxpZGVFbmQsXG5cdH07XG59XG5cbmZ1bmN0aW9uIG1ha2VUcmlwbGV0KHY6IFRIUkVFLlZlY3RvcjMgfCBUcmlwbGV0KTogVHJpcGxldCB7XG5cdHJldHVybiB2IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMyA/IFt2LngsIHYueSwgdi56XSA6IHY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlPcHRpb25zPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4ge1xuXHRyZWY/OiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0Pjtcblx0ZGVwcz86ICgpID0+IE5ndEFueVJlY29yZDtcblx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFBsYW5lPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxQbGFuZVByb3BzPixcblx0b3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0Pixcbikge1xuXHRyZXR1cm4gaW5qZWN0Qm9keSgnUGxhbmUnLCBmbiwgKCkgPT4gW10sIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Qm94PFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxCb3hQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0Y29uc3QgZGVmYXVsdEJveEFyZ3M6IFRyaXBsZXQgPSBbMSwgMSwgMV07XG5cdHJldHVybiBpbmplY3RCb2R5KCdCb3gnLCBmbiwgKGFyZ3MgPSBkZWZhdWx0Qm94QXJncyk6IFRyaXBsZXQgPT4gYXJncywgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDeWxpbmRlcjxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHRmbjogTmd0Y0dldEJ5SW5kZXg8Q3lsaW5kZXJQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoJ0N5bGluZGVyJywgZm4sIChhcmdzID0gW10gYXMgW10pID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SGVpZ2h0ZmllbGQ8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PEhlaWdodGZpZWxkUHJvcHM+LFxuXHRvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+LFxuKSB7XG5cdHJldHVybiBpbmplY3RCb2R5KCdIZWlnaHRmaWVsZCcsIGZuLCAoYXJncykgPT4gYXJncywgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RQYXJ0aWNsZTxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHRmbjogTmd0Y0dldEJ5SW5kZXg8UGFydGljbGVQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoJ1BhcnRpY2xlJywgZm4sICgpID0+IFtdLCBvcHRzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RTcGhlcmU8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PFNwaGVyZVByb3BzPixcblx0b3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0Pixcbikge1xuXHRyZXR1cm4gaW5qZWN0Qm9keShcblx0XHQnU3BoZXJlJyxcblx0XHRmbixcblx0XHQoYXJnczogU3BoZXJlQXJncyA9IFsxXSk6IFNwaGVyZUFyZ3MgPT4ge1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNwaGVyZSBhcmdzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0XHRcdHJldHVybiBbYXJnc1swXV07XG5cdFx0fSxcblx0XHRvcHRzLFxuXHQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRyaW1lc2g8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PFRyaW1lc2hQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoJ1RyaW1lc2gnLCBmbiwgKGFyZ3MpID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29udmV4UG9seWhlZHJvbjxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHRmbjogTmd0Y0dldEJ5SW5kZXg8Q29udmV4UG9seWhlZHJvblByb3BzPixcblx0b3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0Pixcbikge1xuXHRyZXR1cm4gaW5qZWN0Qm9keShcblx0XHQnQ29udmV4UG9seWhlZHJvbicsXG5cdFx0Zm4sXG5cdFx0KFt2ZXJ0aWNlcywgZmFjZXMsIG5vcm1hbHMsIGF4ZXMsIGJvdW5kaW5nU3BoZXJlUmFkaXVzXSA9IFtdKTogQ29udmV4UG9seWhlZHJvbkFyZ3M8VHJpcGxldD4gPT4gW1xuXHRcdFx0dmVydGljZXMgJiYgdmVydGljZXMubWFwKG1ha2VUcmlwbGV0KSxcblx0XHRcdGZhY2VzLFxuXHRcdFx0bm9ybWFscyAmJiBub3JtYWxzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0XHRheGVzICYmIGF4ZXMubWFwKG1ha2VUcmlwbGV0KSxcblx0XHRcdGJvdW5kaW5nU3BoZXJlUmFkaXVzLFxuXHRcdF0sXG5cdFx0b3B0cyxcblx0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDb21wb3VuZEJvZHk8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PENvbXBvdW5kQm9keVByb3BzPixcblx0b3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0Pixcbikge1xuXHRyZXR1cm4gaW5qZWN0Qm9keSgnQ29tcG91bmQnLCBmbiwgKGFyZ3MpID0+IGFyZ3MgYXMgdW5rbm93bltdLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0Qm9keTxUQm9keVByb3BzIGV4dGVuZHMgQm9keVByb3BzLCBUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHR0eXBlOiBCb2R5U2hhcGVUeXBlLFxuXHRnZXRQcm9wc0ZuOiBOZ3RjR2V0QnlJbmRleDxUQm9keVByb3BzPixcblx0YXJnc0ZuOiBOZ3RjQXJnRm48VEJvZHlQcm9wc1snYXJncyddPixcblx0eyByZWYsIGluamVjdG9yLCBkZXBzID0gKCkgPT4gKHt9KSB9OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4gPSB7fSxcbik6IE5ndGNCb2R5UmV0dXJuPFRPYmplY3Q+IHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3RvcihpbmplY3RCb2R5LCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBib2R5UmVmID0gcmVmIHx8IGluamVjdE5ndFJlZjxUT2JqZWN0PigpO1xuXG5cdFx0Y29uc3QgcGh5c2ljc0FwaSA9IGluamVjdE5ndGNQaHlzaWNzQXBpKCk7XG5cdFx0Y29uc3QgZGVidWdBcGkgPSBpbmplY3ROZ3RjRGVidWdBcGkoeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRcdGNvbnN0IHsgYWRkOiBkZWJ1Z0FkZCwgcmVtb3ZlOiBkZWJ1Z1JlbW92ZSB9ID0gZGVidWdBcGkgfHwge307XG5cdFx0Y29uc3QgeyByZWZzLCBzdWJzY3JpcHRpb25zLCBzY2FsZU92ZXJyaWRlcywgZXZlbnRzLCBib2RpZXMgfSA9IHBoeXNpY3NBcGkuZ2V0KCk7XG5cdFx0Y29uc3Qgd29ya2VyID0gcGh5c2ljc0FwaS5zZWxlY3QoJ3dvcmtlcicpO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdC8vIHJlZ2lzdGVyIGRlcHNcblx0XHRcdGRlcHMoKTtcblxuXHRcdFx0Y29uc3QgY3VycmVudFdvcmtlciA9IHdvcmtlcigpO1xuXHRcdFx0aWYgKCFjdXJyZW50V29ya2VyKSByZXR1cm47XG5cblx0XHRcdGlmICghYm9keVJlZi5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGJvZHlSZWYubmF0aXZlRWxlbWVudCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpIGFzIFRPYmplY3Q7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keVJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHRjb25zdCBvYmplY3RDb3VudCA9XG5cdFx0XHRcdG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcblx0XHRcdFx0XHQ/IChvYmplY3QuaW5zdGFuY2VNYXRyaXguc2V0VXNhZ2UoVEhSRUUuRHluYW1pY0RyYXdVc2FnZSksIG9iamVjdC5jb3VudClcblx0XHRcdFx0XHQ6IDE7XG5cblx0XHRcdGNvbnN0IHV1aWQgPVxuXHRcdFx0XHRvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5JbnN0YW5jZWRNZXNoXG5cdFx0XHRcdFx0PyBuZXcgQXJyYXkob2JqZWN0Q291bnQpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBgJHtvYmplY3QudXVpZH0vJHtpfWApXG5cdFx0XHRcdFx0OiBbb2JqZWN0LnV1aWRdO1xuXG5cdFx0XHRjb25zdCBwcm9wczogKFRCb2R5UHJvcHMgJiB7IGFyZ3M6IHVua25vd24gfSlbXSA9XG5cdFx0XHRcdG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcblx0XHRcdFx0XHQ/IHV1aWQubWFwKChpZCwgaSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wcyA9IGdldFByb3BzRm4oaSk7XG5cdFx0XHRcdFx0XHRcdHByZXBhcmUodGVtcCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRvYmplY3Quc2V0TWF0cml4QXQoaSwgdGVtcC5tYXRyaXgpO1xuXHRcdFx0XHRcdFx0XHRvYmplY3QuaW5zdGFuY2VNYXRyaXgubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZWZzW2lkXSA9IG9iamVjdDtcblx0XHRcdFx0XHRcdFx0ZGVidWdBZGQ/LihpZCwgcHJvcHMsIHR5cGUpO1xuXHRcdFx0XHRcdFx0XHRzZXR1cENvbGxpc2lvbihldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiBhcmdzRm4ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0OiB1dWlkLm1hcCgoaWQsIGkpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wc0ZuKGkpO1xuXHRcdFx0XHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRyZWZzW2lkXSA9IG9iamVjdDtcblx0XHRcdFx0XHRcdFx0ZGVidWdBZGQ/LihpZCwgcHJvcHMsIHR5cGUpO1xuXHRcdFx0XHRcdFx0XHRzZXR1cENvbGxpc2lvbihldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiBhcmdzRm4ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHQgIH0pO1xuXG5cdFx0XHQvLyBSZWdpc3RlciBvbiBtb3VudCwgdW5yZWdpc3RlciBvbiB1bm1vdW50XG5cdFx0XHRjdXJyZW50V29ya2VyLmFkZEJvZGllcyh7XG5cdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgb25Db2xsaWRlOiBCb29sZWFuKG9uQ29sbGlkZSksIC4uLnNlcmlhbGl6YWJsZVByb3BzIH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHR1dWlkLFxuXHRcdFx0fSk7XG5cblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdHV1aWQuZm9yRWFjaCgoaWQpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgcmVmc1tpZF07XG5cdFx0XHRcdFx0ZGVidWdSZW1vdmU/LihpZCk7XG5cdFx0XHRcdFx0ZGVsZXRlIGV2ZW50c1tpZF07XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjdXJyZW50V29ya2VyLnJlbW92ZUJvZGllcyh7IHV1aWQgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGFwaSA9ICgoKSA9PiB7XG5cdFx0XHRjb25zdCBtYWtlQXRvbWljID0gPFQgZXh0ZW5kcyBBdG9taWNOYW1lPih0eXBlOiBULCBpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcDogU2V0T3BOYW1lPFQ+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0c2V0OiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJlxuXHRcdFx0XHRcdFx0XHR3b3JrZXIoKVtvcF0oe1xuXHRcdFx0XHRcdFx0XHRcdHByb3BzOiB2YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHR1dWlkLFxuXHRcdFx0XHRcdFx0XHR9IGFzIG5ldmVyKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1YnNjcmliZTogc3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBtYWtlUXVhdGVybmlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gJ3F1YXRlcm5pb24nO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNvcHk6ICh7IHcsIHgsIHksIHogfTogVEhSRUUuUXVhdGVybmlvbikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1YnNjcmliZTogc3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBtYWtlUm90YXRpb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNldFJvdGF0aW9uKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9ICdib2RpZXMnO1xuXHRcdFx0XHRcdFx0Y29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblxuXHRcdFx0XHRcdFx0c3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogcXVhdGVybmlvblRvUm90YXRpb24oY2FsbGJhY2spIH07XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnN1YnNjcmliZSh7IHByb3BzOiB7IGlkLCB0YXJnZXQsIHR5cGUgfSwgdXVpZCB9KTtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcblx0XHRcdFx0XHRcdFx0d29ya2VyKCkudW5zdWJzY3JpYmUoeyBwcm9wczogaWQgfSk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBtYWtlVmVjID0gKHR5cGU6IFZlY3Rvck5hbWUsIGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9wOiBTZXRPcE5hbWU8VmVjdG9yTmFtZT4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y29weTogKHsgeCwgeSwgeiB9OiBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuRXVsZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHN1YnNjcmliZTogc3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBtYWtlUmVtb3ZlID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRpZiAodXVpZCkgd29ya2VyKCkucmVtb3ZlQm9kaWVzKHsgdXVpZDogW3V1aWRdIH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0ZnVuY3Rpb24gbWFrZUFwaShpbmRleD86IG51bWJlcik6IE5ndGNXb3JrZXJBcGkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGFsbG93U2xlZXA6IG1ha2VBdG9taWMoJ2FsbG93U2xlZXAnLCBpbmRleCksXG5cdFx0XHRcdFx0YW5ndWxhckRhbXBpbmc6IG1ha2VBdG9taWMoJ2FuZ3VsYXJEYW1waW5nJywgaW5kZXgpLFxuXHRcdFx0XHRcdGFuZ3VsYXJGYWN0b3I6IG1ha2VWZWMoJ2FuZ3VsYXJGYWN0b3InLCBpbmRleCksXG5cdFx0XHRcdFx0YW5ndWxhclZlbG9jaXR5OiBtYWtlVmVjKCdhbmd1bGFyVmVsb2NpdHknLCBpbmRleCksXG5cdFx0XHRcdFx0YXBwbHlGb3JjZShmb3JjZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5hcHBseUZvcmNlKHsgcHJvcHM6IFtmb3JjZSwgd29ybGRQb2ludF0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhcHBseUltcHVsc2UoaW1wdWxzZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5hcHBseUltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YXBwbHlMb2NhbEZvcmNlKGZvcmNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLmFwcGx5TG9jYWxGb3JjZSh7IHByb3BzOiBbZm9yY2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YXBwbHlMb2NhbEltcHVsc2UoaW1wdWxzZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJlxuXHRcdFx0XHRcdFx0XHRib2RpZXNbdXVpZF0gIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0XHR3b3JrZXIoKS5hcHBseUxvY2FsSW1wdWxzZSh7IHByb3BzOiBbaW1wdWxzZSwgbG9jYWxQb2ludF0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhcHBseVRvcnF1ZSh0b3JxdWU6IFRyaXBsZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlUb3JxdWUoeyBwcm9wczogW3RvcnF1ZV0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjb2xsaXNpb25GaWx0ZXJHcm91cDogbWFrZUF0b21pYygnY29sbGlzaW9uRmlsdGVyR3JvdXAnLCBpbmRleCksXG5cdFx0XHRcdFx0Y29sbGlzaW9uRmlsdGVyTWFzazogbWFrZUF0b21pYygnY29sbGlzaW9uRmlsdGVyTWFzaycsIGluZGV4KSxcblx0XHRcdFx0XHRjb2xsaXNpb25SZXNwb25zZTogbWFrZUF0b21pYygnY29sbGlzaW9uUmVzcG9uc2UnLCBpbmRleCksXG5cdFx0XHRcdFx0Zml4ZWRSb3RhdGlvbjogbWFrZUF0b21pYygnZml4ZWRSb3RhdGlvbicsIGluZGV4KSxcblx0XHRcdFx0XHRpc1RyaWdnZXI6IG1ha2VBdG9taWMoJ2lzVHJpZ2dlcicsIGluZGV4KSxcblx0XHRcdFx0XHRsaW5lYXJEYW1waW5nOiBtYWtlQXRvbWljKCdsaW5lYXJEYW1waW5nJywgaW5kZXgpLFxuXHRcdFx0XHRcdGxpbmVhckZhY3RvcjogbWFrZVZlYygnbGluZWFyRmFjdG9yJywgaW5kZXgpLFxuXHRcdFx0XHRcdG1hc3M6IG1ha2VBdG9taWMoJ21hc3MnLCBpbmRleCksXG5cdFx0XHRcdFx0bWF0ZXJpYWw6IG1ha2VBdG9taWMoJ21hdGVyaWFsJywgaW5kZXgpLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiBtYWtlVmVjKCdwb3NpdGlvbicsIGluZGV4KSxcblx0XHRcdFx0XHRxdWF0ZXJuaW9uOiBtYWtlUXVhdGVybmlvbihpbmRleCksXG5cdFx0XHRcdFx0cm90YXRpb246IG1ha2VSb3RhdGlvbihpbmRleCksXG5cdFx0XHRcdFx0c2NhbGVPdmVycmlkZShzY2FsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0aWYgKHV1aWQpIHNjYWxlT3ZlcnJpZGVzW3V1aWRdID0gbmV3IFRIUkVFLlZlY3RvcjMoLi4uc2NhbGUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2xlZXAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNsZWVwKHsgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNsZWVwU3BlZWRMaW1pdDogbWFrZUF0b21pYygnc2xlZXBTcGVlZExpbWl0JywgaW5kZXgpLFxuXHRcdFx0XHRcdHNsZWVwVGltZUxpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFRpbWVMaW1pdCcsIGluZGV4KSxcblx0XHRcdFx0XHR1c2VyRGF0YTogbWFrZUF0b21pYygndXNlckRhdGEnLCBpbmRleCksXG5cdFx0XHRcdFx0dmVsb2NpdHk6IG1ha2VWZWMoJ3ZlbG9jaXR5JywgaW5kZXgpLFxuXHRcdFx0XHRcdHJlbW92ZTogbWFrZVJlbW92ZShpbmRleCksXG5cdFx0XHRcdFx0d2FrZVVwKCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS53YWtlVXAoeyB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNhY2hlOiB7IFtpbmRleDogbnVtYmVyXTogTmd0Y1dvcmtlckFwaSB9ID0ge307XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHQuLi5tYWtlQXBpKHVuZGVmaW5lZCksXG5cdFx0XHRcdGF0OiAoaW5kZXg6IG51bWJlcikgPT4gY2FjaGVbaW5kZXhdIHx8IChjYWNoZVtpbmRleF0gPSBtYWtlQXBpKGluZGV4KSksXG5cdFx0XHR9O1xuXHRcdH0pKCk7XG5cblx0XHRyZXR1cm4geyByZWY6IGJvZHlSZWYsIGFwaSB9O1xuXHR9KTtcbn1cbiJdfQ==
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NlcnZpY2VzL3NyYy9saWIvYm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQTJCOUYsT0FBTyxFQUFFLFlBQVksRUFBMEMsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlEL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFbEMsU0FBUyxVQUFVLENBQW1CLEdBQU07SUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBa0IsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUErQixFQUFFLEtBQWM7SUFDdEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFFakMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFFBQThCLEVBQUUsRUFBRTtJQUMvRCxPQUFPLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQWEsQ0FBQyxDQUFDO0FBQ3hGLENBQUMsQ0FBQztBQUVGLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixNQUFNLFVBQVUsZUFBZSxDQUM5QixHQUErQixFQUMvQixNQUF1QixFQUN2QixhQUE0QixFQUM1QixJQUFPLEVBQ1AsS0FBYyxFQUNkLFNBQTZCLFFBQVE7SUFFckMsT0FBTyxDQUFDLFFBQXVDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUM1QixhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsT0FBTyxHQUFHLEVBQUU7WUFDWCxPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLE1BQXNCLEVBQUUsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBYTtJQUNoSCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDdEIsTUFBd0IsRUFDeEIsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBc0IsRUFDL0QsSUFBWTtJQUVaLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRztRQUNkLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFVBQVUsRUFBRSxZQUFZO0tBQ3hCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsQ0FBMEI7SUFDOUMsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQVFELE1BQU0sVUFBVSxXQUFXLENBQzFCLEVBQThCLEVBQzlCLElBQStCO0lBRS9CLE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN4QixFQUE0QixFQUM1QixJQUErQjtJQUUvQixNQUFNLGNBQWMsR0FBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxjQUFjLEVBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDN0IsRUFBaUMsRUFDakMsSUFBK0I7SUFFL0IsT0FBTyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDaEMsRUFBb0MsRUFDcEMsSUFBK0I7SUFFL0IsT0FBTyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM3QixFQUFpQyxFQUNqQyxJQUErQjtJQUUvQixPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBQ0QsTUFBTSxVQUFVLFlBQVksQ0FDM0IsRUFBK0IsRUFDL0IsSUFBK0I7SUFFL0IsT0FBTyxVQUFVLENBQ2hCLFFBQVEsRUFDUixFQUFFLEVBQ0YsQ0FBQyxPQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFjLEVBQUU7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLEVBQ0QsSUFBSSxDQUNKLENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FDNUIsRUFBZ0MsRUFDaEMsSUFBK0I7SUFFL0IsT0FBTyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3JDLEVBQXlDLEVBQ3pDLElBQStCO0lBRS9CLE9BQU8sVUFBVSxDQUNoQixrQkFBa0IsRUFDbEIsRUFBRSxFQUNGLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxFQUFFLEVBQWlDLEVBQUUsQ0FBQztRQUMvRixRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDckMsS0FBSztRQUNMLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDN0Isb0JBQW9CO0tBQ3BCLEVBQ0QsSUFBSSxDQUNKLENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUNqQyxFQUFxQyxFQUNyQyxJQUErQjtJQUUvQixPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDbEIsSUFBbUIsRUFDbkIsVUFBc0MsRUFDdEMsTUFBcUMsRUFDckMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUErQixFQUFFO0lBRW5FLFFBQVEsR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsR0FBRztZQUN2QyxHQUFHLElBQUksWUFBWSxFQUFXO1lBQzlCLG9CQUFvQixFQUFFO1lBQ3RCLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3RDLENBQUM7UUFFRixNQUFNLENBQ0wsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFDNUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQ3ZELE1BQU0sRUFDTixHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLGdCQUFnQjtZQUNoQixJQUFJLEVBQUUsQ0FBQztZQUVQLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhO2dCQUFFLE9BQU87WUFFM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFhLENBQUM7Z0JBQ3hELE9BQU87YUFDUDtZQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFFckMsTUFBTSxXQUFXLEdBQ2hCLE1BQU0sWUFBWSxLQUFLLENBQUMsYUFBYTtnQkFDcEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVOLE1BQU0sSUFBSSxHQUNULE1BQU0sWUFBWSxLQUFLLENBQUMsYUFBYTtnQkFDcEMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVsQixNQUFNLEtBQUssR0FDVixNQUFNLFlBQVksS0FBSyxDQUFDLGFBQWE7Z0JBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3JCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN6QyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNsQixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM5QixjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbkIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1QixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNsQixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM5QixjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO1lBRVAsMkNBQTJDO1lBQzNDLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxHQUFHLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtvQkFDdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNoRSxDQUFDLENBQUM7Z0JBQ0YsSUFBSTtnQkFDSixJQUFJO2FBQ0osQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDO2dCQUNILGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixNQUFNLFVBQVUsR0FBRyxDQUF1QixJQUFPLEVBQUUsS0FBYyxFQUFFLEVBQUU7Z0JBQ3BFLE1BQU0sRUFBRSxHQUFpQixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUVsRCxPQUFPO29CQUNOLEdBQUcsRUFBRSxDQUFDLEtBQW1CLEVBQUUsRUFBRTt3QkFDNUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDckMsSUFBSTs0QkFDSCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDWixLQUFLLEVBQUUsS0FBSztnQ0FDWixJQUFJOzZCQUNLLENBQUMsQ0FBQztvQkFDZCxDQUFDO29CQUNELFNBQVMsRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUN6RSxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDO2dCQUMxQixPQUFPO29CQUNOLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFvQixFQUFFLEVBQUU7d0JBQzFDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3ZGLENBQUM7b0JBQ0QsR0FBRyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUU7d0JBQ25ELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3ZGLENBQUM7b0JBQ0QsU0FBUyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7aUJBQ3pFLENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO2dCQUN2QyxPQUFPO29CQUNOLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQStCLEVBQUUsRUFBRTt3QkFDbEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNsRixDQUFDO29CQUNELEdBQUcsRUFBRSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUU7d0JBQ3hDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDbEYsQ0FBQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxRQUFrQyxFQUFFLEVBQUU7d0JBQ2pELE1BQU0sRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO3dCQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7d0JBQ3hCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQzt3QkFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFFckMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO3dCQUMvRCxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQzFGLE9BQU8sR0FBRyxFQUFFOzRCQUNYLE9BQU8sYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QixNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckMsQ0FBQyxDQUFDO29CQUNILENBQUM7aUJBQ0QsQ0FBQztZQUNILENBQUMsQ0FBQztZQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBZ0IsRUFBRSxLQUFjLEVBQUUsRUFBRTtnQkFDcEQsTUFBTSxFQUFFLEdBQTBCLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNELE9BQU87b0JBQ04sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBK0IsRUFBRSxFQUFFO3dCQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDMUUsQ0FBQztvQkFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFO3dCQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDMUUsQ0FBQztvQkFDRCxTQUFTLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztpQkFDekUsQ0FBQztZQUNILENBQUMsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxFQUFFO29CQUNYLElBQUksSUFBSTt3QkFBRSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQztZQUVGLFNBQVMsT0FBTyxDQUFDLEtBQWM7Z0JBQzlCLE9BQU87b0JBQ04sVUFBVSxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO29CQUMzQyxjQUFjLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztvQkFDbkQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO29CQUM5QyxlQUFlLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQztvQkFDbEQsVUFBVSxDQUFDLEtBQWMsRUFBRSxVQUFtQjt3QkFDN0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzNGLENBQUM7b0JBQ0QsWUFBWSxDQUFDLE9BQWdCLEVBQUUsVUFBbUI7d0JBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMvRixDQUFDO29CQUNELGVBQWUsQ0FBQyxLQUFjLEVBQUUsVUFBbUI7d0JBQ2xELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNoRyxDQUFDO29CQUNELGlCQUFpQixDQUFDLE9BQWdCLEVBQUUsVUFBbUI7d0JBQ3RELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUk7NEJBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUk7NEJBQ3BCLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3JFLENBQUM7b0JBQ0QsV0FBVyxDQUFDLE1BQWU7d0JBQzFCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2pGLENBQUM7b0JBQ0Qsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQztvQkFDL0QsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQztvQkFDN0QsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQztvQkFDekQsYUFBYSxFQUFFLFVBQVUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO29CQUNqRCxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7b0JBQ3pDLGFBQWEsRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztvQkFDakQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO29CQUM1QyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7b0JBQy9CLFFBQVEsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztvQkFDdkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO29CQUNwQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQztvQkFDakMsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQzdCLGFBQWEsQ0FBQyxLQUFLO3dCQUNsQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLElBQUk7NEJBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO29CQUM5RCxDQUFDO29CQUNELEtBQUs7d0JBQ0osTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDMUQsQ0FBQztvQkFDRCxlQUFlLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQztvQkFDckQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7b0JBQ25ELFFBQVEsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztvQkFDdkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO29CQUNwQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztvQkFDekIsTUFBTTt3QkFDTCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxDQUFDO2lCQUNELENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQXVDLEVBQUUsQ0FBQztZQUNyRCxPQUFPO2dCQUNOLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDckIsRUFBRSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RFLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIHR5cGUgRWxlbWVudFJlZiwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuXHRBdG9taWNOYW1lLFxuXHRBdG9taWNQcm9wcyxcblx0Qm9keVByb3BzLFxuXHRCb2R5U2hhcGVUeXBlLFxuXHRCb3hQcm9wcyxcblx0Q2Fubm9uV29ya2VyQVBJLFxuXHRDb21wb3VuZEJvZHlQcm9wcyxcblx0Q29udmV4UG9seWhlZHJvbkFyZ3MsXG5cdENvbnZleFBvbHloZWRyb25Qcm9wcyxcblx0Q3lsaW5kZXJQcm9wcyxcblx0SGVpZ2h0ZmllbGRQcm9wcyxcblx0UGFydGljbGVQcm9wcyxcblx0UGxhbmVQcm9wcyxcblx0UHJvcFZhbHVlLFxuXHRRdWFkLFxuXHRTZXRPcE5hbWUsXG5cdFNwaGVyZUFyZ3MsXG5cdFNwaGVyZVByb3BzLFxuXHRTdWJzY3JpcHRpb25OYW1lLFxuXHRTdWJzY3JpcHRpb25UYXJnZXQsXG5cdFN1YnNjcmlwdGlvbnMsXG5cdFRyaW1lc2hQcm9wcyxcblx0VHJpcGxldCxcblx0VmVjdG9yTmFtZSxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RSZWYsIHR5cGUgTmd0QW55UmVjb3JkLCB0eXBlIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RjUGh5c2ljc0FwaSwgdHlwZSBOZ3RjQ2Fubm9uRXZlbnRzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgaW5qZWN0Tmd0Y0RlYnVnQXBpIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndGNBdG9taWNBcGk8SyBleHRlbmRzIEF0b21pY05hbWU+ID0ge1xuXHRzZXQ6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQ7XG5cdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y1F1YXRlcm5pb25BcGkgPSB7XG5cdGNvcHk6ICh7IHcsIHgsIHksIHogfTogVEhSRUUuUXVhdGVybmlvbikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBRdWFkKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y1ZlY3RvckFwaSA9IHtcblx0Y29weTogKHsgeCwgeSwgeiB9OiBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuRXVsZXIpID0+IHZvaWQ7XG5cdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHZvaWQ7XG5cdHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjV29ya2VyQXBpID0ge1xuXHRbSyBpbiBBdG9taWNOYW1lXTogTmd0Y0F0b21pY0FwaTxLPjtcbn0gJiB7XG5cdFtLIGluIFZlY3Rvck5hbWVdOiBOZ3RjVmVjdG9yQXBpO1xufSAmIHtcblx0YXBwbHlGb3JjZTogKGZvcmNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUltcHVsc2U6IChpbXB1bHNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUxvY2FsRm9yY2U6IChmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlMb2NhbEltcHVsc2U6IChpbXB1bHNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseVRvcnF1ZTogKHRvcnF1ZTogVHJpcGxldCkgPT4gdm9pZDtcblx0cXVhdGVybmlvbjogTmd0Y1F1YXRlcm5pb25BcGk7XG5cdHJvdGF0aW9uOiBOZ3RjVmVjdG9yQXBpO1xuXHRzY2FsZU92ZXJyaWRlOiAoc2NhbGU6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdHNsZWVwOiAoKSA9PiB2b2lkO1xuXHR3YWtlVXA6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZTogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlQdWJsaWNBcGkgZXh0ZW5kcyBOZ3RjV29ya2VyQXBpIHtcblx0YXQ6IChpbmRleDogbnVtYmVyKSA9PiBOZ3RjV29ya2VyQXBpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UmV0dXJuPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4ge1xuXHRyZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuXHRhcGk6IE5ndGNCb2R5UHVibGljQXBpO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjR2V0QnlJbmRleDxUIGV4dGVuZHMgQm9keVByb3BzPiA9IChpbmRleDogbnVtYmVyKSA9PiBUO1xuZXhwb3J0IHR5cGUgTmd0Y0FyZ0ZuPFQ+ID0gKGFyZ3M6IFQpID0+IHVua25vd25bXTtcblxuY29uc3QgdGVtcCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuXHRyZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVVSUQocmVmOiBFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPiwgaW5kZXg/OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3Qgc3VmZml4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/ICcnIDogYC8ke2luZGV4fWA7XG5cdGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHJlZiAmJiByZWYubmF0aXZlRWxlbWVudCAmJiBgJHtyZWYubmF0aXZlRWxlbWVudC51dWlkfSR7c3VmZml4fWA7XG59XG5cbmNvbnN0IGUgPSBuZXcgVEhSRUUuRXVsZXIoKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuXG5jb25zdCBxdWF0ZXJuaW9uVG9Sb3RhdGlvbiA9IChjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcblx0cmV0dXJuICh2OiBRdWFkKSA9PiBjYWxsYmFjayhlLnNldEZyb21RdWF0ZXJuaW9uKHEuZnJvbUFycmF5KHYpKS50b0FycmF5KCkgYXMgVHJpcGxldCk7XG59O1xuXG5sZXQgaW5jcmVtZW50aW5nSWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlPFQgZXh0ZW5kcyBTdWJzY3JpcHRpb25OYW1lPihcblx0cmVmOiBFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPixcblx0d29ya2VyOiBDYW5ub25Xb3JrZXJBUEksXG5cdHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnMsXG5cdHR5cGU6IFQsXG5cdGluZGV4PzogbnVtYmVyLFxuXHR0YXJnZXQ6IFN1YnNjcmlwdGlvblRhcmdldCA9ICdib2RpZXMnLFxuKSB7XG5cdHJldHVybiAoY2FsbGJhY2s6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB2b2lkKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBpbmNyZW1lbnRpbmdJZCsrO1xuXHRcdHN1YnNjcmlwdGlvbnNbaWRdID0geyBbdHlwZV06IGNhbGxiYWNrIH07XG5cdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQocmVmLCBpbmRleCk7XG5cdFx0dXVpZCAmJiB3b3JrZXIuc3Vic2NyaWJlKHsgcHJvcHM6IHsgaWQsIHRhcmdldCwgdHlwZSB9LCB1dWlkIH0pO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRkZWxldGUgc3Vic2NyaXB0aW9uc1tpZF07XG5cdFx0XHR3b3JrZXIudW5zdWJzY3JpYmUoeyBwcm9wczogaWQgfSk7XG5cdFx0fTtcblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZShvYmplY3Q6IFRIUkVFLk9iamVjdDNELCB7IHBvc2l0aW9uID0gWzAsIDAsIDBdLCByb3RhdGlvbiA9IFswLCAwLCAwXSwgdXNlckRhdGEgPSB7fSB9OiBCb2R5UHJvcHMpIHtcblx0b2JqZWN0LnVzZXJEYXRhID0gdXNlckRhdGE7XG5cdG9iamVjdC5wb3NpdGlvbi5zZXQoLi4ucG9zaXRpb24pO1xuXHRvYmplY3Qucm90YXRpb24uc2V0KC4uLnJvdGF0aW9uKTtcblx0b2JqZWN0LnVwZGF0ZU1hdHJpeCgpO1xufVxuXG5mdW5jdGlvbiBzZXR1cENvbGxpc2lvbihcblx0ZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzLFxuXHR7IG9uQ29sbGlkZSwgb25Db2xsaWRlQmVnaW4sIG9uQ29sbGlkZUVuZCB9OiBQYXJ0aWFsPEJvZHlQcm9wcz4sXG5cdHV1aWQ6IHN0cmluZyxcbikge1xuXHRldmVudHNbdXVpZF0gPSB7XG5cdFx0Y29sbGlkZTogb25Db2xsaWRlLFxuXHRcdGNvbGxpZGVCZWdpbjogb25Db2xsaWRlQmVnaW4sXG5cdFx0Y29sbGlkZUVuZDogb25Db2xsaWRlRW5kLFxuXHR9O1xufVxuXG5mdW5jdGlvbiBtYWtlVHJpcGxldCh2OiBUSFJFRS5WZWN0b3IzIHwgVHJpcGxldCk6IFRyaXBsZXQge1xuXHRyZXR1cm4gdiBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBbdi54LCB2LnksIHYuel0gOiB2O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+IHtcblx0cmVmPzogTmd0SW5qZWN0ZWRSZWY8VE9iamVjdD47XG5cdGRlcHM/OiAoKSA9PiBOZ3RBbnlSZWNvcmQ7XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RQbGFuZTxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHRmbjogTmd0Y0dldEJ5SW5kZXg8UGxhbmVQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoJ1BsYW5lJywgZm4sICgpID0+IFtdLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJveDxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuXHRmbjogTmd0Y0dldEJ5SW5kZXg8Qm94UHJvcHM+LFxuXHRvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+LFxuKSB7XG5cdGNvbnN0IGRlZmF1bHRCb3hBcmdzOiBUcmlwbGV0ID0gWzEsIDEsIDFdO1xuXHRyZXR1cm4gaW5qZWN0Qm9keSgnQm94JywgZm4sIChhcmdzID0gZGVmYXVsdEJveEFyZ3MpOiBUcmlwbGV0ID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q3lsaW5kZXI8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PEN5bGluZGVyUHJvcHM+LFxuXHRvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+LFxuKSB7XG5cdHJldHVybiBpbmplY3RCb2R5KCdDeWxpbmRlcicsIGZuLCAoYXJncyA9IFtdIGFzIFtdKSA9PiBhcmdzLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEhlaWdodGZpZWxkPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxIZWlnaHRmaWVsZFByb3BzPixcblx0b3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0Pixcbikge1xuXHRyZXR1cm4gaW5qZWN0Qm9keSgnSGVpZ2h0ZmllbGQnLCBmbiwgKGFyZ3MpID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0UGFydGljbGU8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PFBhcnRpY2xlUHJvcHM+LFxuXHRvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+LFxuKSB7XG5cdHJldHVybiBpbmplY3RCb2R5KCdQYXJ0aWNsZScsIGZuLCAoKSA9PiBbXSwgb3B0cyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U3BoZXJlPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxTcGhlcmVQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoXG5cdFx0J1NwaGVyZScsXG5cdFx0Zm4sXG5cdFx0KGFyZ3M6IFNwaGVyZUFyZ3MgPSBbMV0pOiBTcGhlcmVBcmdzID0+IHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCd1c2VTcGhlcmUgYXJncyBtdXN0IGJlIGFuIGFycmF5Jyk7XG5cdFx0XHRyZXR1cm4gW2FyZ3NbMF1dO1xuXHRcdH0sXG5cdFx0b3B0cyxcblx0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RUcmltZXNoPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxUcmltZXNoUHJvcHM+LFxuXHRvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+LFxuKSB7XG5cdHJldHVybiBpbmplY3RCb2R5KCdUcmltZXNoJywgZm4sIChhcmdzKSA9PiBhcmdzLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENvbnZleFBvbHloZWRyb248VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0Zm46IE5ndGNHZXRCeUluZGV4PENvbnZleFBvbHloZWRyb25Qcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoXG5cdFx0J0NvbnZleFBvbHloZWRyb24nLFxuXHRcdGZuLFxuXHRcdChbdmVydGljZXMsIGZhY2VzLCBub3JtYWxzLCBheGVzLCBib3VuZGluZ1NwaGVyZVJhZGl1c10gPSBbXSk6IENvbnZleFBvbHloZWRyb25BcmdzPFRyaXBsZXQ+ID0+IFtcblx0XHRcdHZlcnRpY2VzICYmIHZlcnRpY2VzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0XHRmYWNlcyxcblx0XHRcdG5vcm1hbHMgJiYgbm9ybWFscy5tYXAobWFrZVRyaXBsZXQpLFxuXHRcdFx0YXhlcyAmJiBheGVzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0XHRib3VuZGluZ1NwaGVyZVJhZGl1cyxcblx0XHRdLFxuXHRcdG9wdHMsXG5cdCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29tcG91bmRCb2R5PFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiBOZ3RjR2V0QnlJbmRleDxDb21wb3VuZEJvZHlQcm9wcz4sXG5cdG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD4sXG4pIHtcblx0cmV0dXJuIGluamVjdEJvZHkoJ0NvbXBvdW5kJywgZm4sIChhcmdzKSA9PiBhcmdzIGFzIHVua25vd25bXSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEJvZHk8VEJvZHlQcm9wcyBleHRlbmRzIEJvZHlQcm9wcywgVE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcblx0dHlwZTogQm9keVNoYXBlVHlwZSxcblx0Z2V0UHJvcHNGbjogTmd0Y0dldEJ5SW5kZXg8VEJvZHlQcm9wcz4sXG5cdGFyZ3NGbjogTmd0Y0FyZ0ZuPFRCb2R5UHJvcHNbJ2FyZ3MnXT4sXG5cdHsgcmVmLCBpbmplY3RvciwgZGVwcyA9ICgpID0+ICh7fSkgfTogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+ID0ge30sXG4pOiBOZ3RjQm9keVJldHVybjxUT2JqZWN0PiB7XG5cdGluamVjdG9yID0gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Qm9keSwgaW5qZWN0b3IpO1xuXHRyZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgW2JvZHlSZWYsIHBoeXNpY3NBcGksIGRlYnVnQXBpXSA9IFtcblx0XHRcdHJlZiB8fCBpbmplY3ROZ3RSZWY8VE9iamVjdD4oKSxcblx0XHRcdGluamVjdE5ndGNQaHlzaWNzQXBpKCksXG5cdFx0XHRpbmplY3ROZ3RjRGVidWdBcGkoeyBvcHRpb25hbDogdHJ1ZSB9KSxcblx0XHRdO1xuXG5cdFx0Y29uc3QgW1xuXHRcdFx0eyBhZGQ6IGFkZFRvRGVidWcsIHJlbW92ZTogcmVtb3ZlRnJvbURlYnVnIH0sXG5cdFx0XHR7IHJlZnMsIHN1YnNjcmlwdGlvbnMsIHNjYWxlT3ZlcnJpZGVzLCBldmVudHMsIGJvZGllcyB9LFxuXHRcdFx0d29ya2VyLFxuXHRcdF0gPSBbZGVidWdBcGkgfHwge30sIHBoeXNpY3NBcGkuZ2V0KCksIHBoeXNpY3NBcGkuc2VsZWN0KCd3b3JrZXInKV07XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Ly8gcmVnaXN0ZXIgZGVwc1xuXHRcdFx0ZGVwcygpO1xuXG5cdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gd29ya2VyKCk7XG5cdFx0XHRpZiAoIWN1cnJlbnRXb3JrZXIpIHJldHVybjtcblxuXHRcdFx0aWYgKCFib2R5UmVmLm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0Ym9keVJlZi5uYXRpdmVFbGVtZW50ID0gbmV3IFRIUkVFLk9iamVjdDNEKCkgYXMgVE9iamVjdDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvYmplY3QgPSBib2R5UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGNvbnN0IG9iamVjdENvdW50ID1cblx0XHRcdFx0b2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaFxuXHRcdFx0XHRcdD8gKG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShUSFJFRS5EeW5hbWljRHJhd1VzYWdlKSwgb2JqZWN0LmNvdW50KVxuXHRcdFx0XHRcdDogMTtcblxuXHRcdFx0Y29uc3QgdXVpZCA9XG5cdFx0XHRcdG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcblx0XHRcdFx0XHQ/IG5ldyBBcnJheShvYmplY3RDb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YClcblx0XHRcdFx0XHQ6IFtvYmplY3QudXVpZF07XG5cblx0XHRcdGNvbnN0IHByb3BzOiAoVEJvZHlQcm9wcyAmIHsgYXJnczogdW5rbm93biB9KVtdID1cblx0XHRcdFx0b2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaFxuXHRcdFx0XHRcdD8gdXVpZC5tYXAoKGlkLCBpKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BzID0gZ2V0UHJvcHNGbihpKTtcblx0XHRcdFx0XHRcdFx0cHJlcGFyZSh0ZW1wLCBwcm9wcyk7XG5cdFx0XHRcdFx0XHRcdG9iamVjdC5zZXRNYXRyaXhBdChpLCB0ZW1wLm1hdHJpeCk7XG5cdFx0XHRcdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRhZGRUb0RlYnVnPy4oaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdFx0c2V0dXBDb2xsaXNpb24oZXZlbnRzLCBwcm9wcywgaWQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wcywgYXJnczogYXJnc0ZuKHByb3BzLmFyZ3MpIH07XG5cdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdDogdXVpZC5tYXAoKGlkLCBpKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BzID0gZ2V0UHJvcHNGbihpKTtcblx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0cmVmc1tpZF0gPSBvYmplY3Q7XG5cdFx0XHRcdFx0XHRcdGFkZFRvRGVidWc/LihpZCwgcHJvcHMsIHR5cGUpO1xuXHRcdFx0XHRcdFx0XHRzZXR1cENvbGxpc2lvbihldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiBhcmdzRm4ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHQgIH0pO1xuXG5cdFx0XHQvLyBSZWdpc3RlciBvbiBtb3VudCwgdW5yZWdpc3RlciBvbiB1bm1vdW50XG5cdFx0XHRjdXJyZW50V29ya2VyLmFkZEJvZGllcyh7XG5cdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgb25Db2xsaWRlOiBCb29sZWFuKG9uQ29sbGlkZSksIC4uLnNlcmlhbGl6YWJsZVByb3BzIH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHR1dWlkLFxuXHRcdFx0fSk7XG5cblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdHV1aWQuZm9yRWFjaCgoaWQpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgcmVmc1tpZF07XG5cdFx0XHRcdFx0cmVtb3ZlRnJvbURlYnVnPy4oaWQpO1xuXHRcdFx0XHRcdGRlbGV0ZSBldmVudHNbaWRdO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y3VycmVudFdvcmtlci5yZW1vdmVCb2RpZXMoeyB1dWlkIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBhcGkgPSAoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbWFrZUF0b21pYyA9IDxUIGV4dGVuZHMgQXRvbWljTmFtZT4odHlwZTogVCwgaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3A6IFNldE9wTmFtZTxUPiA9IGBzZXQke2NhcGl0YWxpemUodHlwZSl9YDtcblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHNldDogKHZhbHVlOiBQcm9wVmFsdWU8VD4pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiZcblx0XHRcdFx0XHRcdFx0d29ya2VyKClbb3BdKHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wczogdmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0dXVpZCxcblx0XHRcdFx0XHRcdFx0fSBhcyBuZXZlcik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgbWFrZVF1YXRlcm5pb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjb3B5OiAoeyB3LCB4LCB5LCB6IH06IFRIUkVFLlF1YXRlcm5pb24pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgbWFrZVJvdGF0aW9uID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y29weTogKHsgeCwgeSwgeiB9OiBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuRXVsZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0Um90YXRpb24oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpZCA9IGluY3JlbWVudGluZ0lkKys7XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXQgPSAnYm9kaWVzJztcblx0XHRcdFx0XHRcdGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cblx0XHRcdFx0XHRcdHN1YnNjcmlwdGlvbnNbaWRdID0geyBbdHlwZV06IHF1YXRlcm5pb25Ub1JvdGF0aW9uKGNhbGxiYWNrKSB9O1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgc3Vic2NyaXB0aW9uc1tpZF07XG5cdFx0XHRcdFx0XHRcdHdvcmtlcigpLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgbWFrZVZlYyA9ICh0eXBlOiBWZWN0b3JOYW1lLCBpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcDogU2V0T3BOYW1lPFZlY3Rvck5hbWU+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNvcHk6ICh7IHgsIHksIHogfTogVEhSRUUuVmVjdG9yMyB8IFRIUkVFLkV1bGVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgbWFrZVJlbW92ZSA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHV1aWQpIHdvcmtlcigpLnJlbW92ZUJvZGllcyh7IHV1aWQ6IFt1dWlkXSB9KTtcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHRcdGZ1bmN0aW9uIG1ha2VBcGkoaW5kZXg/OiBudW1iZXIpOiBOZ3RjV29ya2VyQXBpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRhbGxvd1NsZWVwOiBtYWtlQXRvbWljKCdhbGxvd1NsZWVwJywgaW5kZXgpLFxuXHRcdFx0XHRcdGFuZ3VsYXJEYW1waW5nOiBtYWtlQXRvbWljKCdhbmd1bGFyRGFtcGluZycsIGluZGV4KSxcblx0XHRcdFx0XHRhbmd1bGFyRmFjdG9yOiBtYWtlVmVjKCdhbmd1bGFyRmFjdG9yJywgaW5kZXgpLFxuXHRcdFx0XHRcdGFuZ3VsYXJWZWxvY2l0eTogbWFrZVZlYygnYW5ndWxhclZlbG9jaXR5JywgaW5kZXgpLFxuXHRcdFx0XHRcdGFwcGx5Rm9yY2UoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlGb3JjZSh7IHByb3BzOiBbZm9yY2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YXBwbHlJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlJbXB1bHNlKHsgcHJvcHM6IFtpbXB1bHNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFwcGx5TG9jYWxGb3JjZShmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5hcHBseUxvY2FsRm9yY2UoeyBwcm9wczogW2ZvcmNlLCBsb2NhbFBvaW50XSwgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFwcGx5TG9jYWxJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiZcblx0XHRcdFx0XHRcdFx0Ym9kaWVzW3V1aWRdICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdFx0d29ya2VyKCkuYXBwbHlMb2NhbEltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YXBwbHlUb3JxdWUodG9ycXVlOiBUcmlwbGV0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLmFwcGx5VG9ycXVlKHsgcHJvcHM6IFt0b3JxdWVdLCB1dWlkIH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Y29sbGlzaW9uRmlsdGVyR3JvdXA6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlckdyb3VwJywgaW5kZXgpLFxuXHRcdFx0XHRcdGNvbGxpc2lvbkZpbHRlck1hc2s6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlck1hc2snLCBpbmRleCksXG5cdFx0XHRcdFx0Y29sbGlzaW9uUmVzcG9uc2U6IG1ha2VBdG9taWMoJ2NvbGxpc2lvblJlc3BvbnNlJywgaW5kZXgpLFxuXHRcdFx0XHRcdGZpeGVkUm90YXRpb246IG1ha2VBdG9taWMoJ2ZpeGVkUm90YXRpb24nLCBpbmRleCksXG5cdFx0XHRcdFx0aXNUcmlnZ2VyOiBtYWtlQXRvbWljKCdpc1RyaWdnZXInLCBpbmRleCksXG5cdFx0XHRcdFx0bGluZWFyRGFtcGluZzogbWFrZUF0b21pYygnbGluZWFyRGFtcGluZycsIGluZGV4KSxcblx0XHRcdFx0XHRsaW5lYXJGYWN0b3I6IG1ha2VWZWMoJ2xpbmVhckZhY3RvcicsIGluZGV4KSxcblx0XHRcdFx0XHRtYXNzOiBtYWtlQXRvbWljKCdtYXNzJywgaW5kZXgpLFxuXHRcdFx0XHRcdG1hdGVyaWFsOiBtYWtlQXRvbWljKCdtYXRlcmlhbCcsIGluZGV4KSxcblx0XHRcdFx0XHRwb3NpdGlvbjogbWFrZVZlYygncG9zaXRpb24nLCBpbmRleCksXG5cdFx0XHRcdFx0cXVhdGVybmlvbjogbWFrZVF1YXRlcm5pb24oaW5kZXgpLFxuXHRcdFx0XHRcdHJvdGF0aW9uOiBtYWtlUm90YXRpb24oaW5kZXgpLFxuXHRcdFx0XHRcdHNjYWxlT3ZlcnJpZGUoc2NhbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdGlmICh1dWlkKSBzY2FsZU92ZXJyaWRlc1t1dWlkXSA9IG5ldyBUSFJFRS5WZWN0b3IzKC4uLnNjYWxlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNsZWVwKCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zbGVlcCh7IHV1aWQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzbGVlcFNwZWVkTGltaXQ6IG1ha2VBdG9taWMoJ3NsZWVwU3BlZWRMaW1pdCcsIGluZGV4KSxcblx0XHRcdFx0XHRzbGVlcFRpbWVMaW1pdDogbWFrZUF0b21pYygnc2xlZXBUaW1lTGltaXQnLCBpbmRleCksXG5cdFx0XHRcdFx0dXNlckRhdGE6IG1ha2VBdG9taWMoJ3VzZXJEYXRhJywgaW5kZXgpLFxuXHRcdFx0XHRcdHZlbG9jaXR5OiBtYWtlVmVjKCd2ZWxvY2l0eScsIGluZGV4KSxcblx0XHRcdFx0XHRyZW1vdmU6IG1ha2VSZW1vdmUoaW5kZXgpLFxuXHRcdFx0XHRcdHdha2VVcCgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkud2FrZVVwKHsgdXVpZCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjYWNoZTogeyBbaW5kZXg6IG51bWJlcl06IE5ndGNXb3JrZXJBcGkgfSA9IHt9O1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Li4ubWFrZUFwaSh1bmRlZmluZWQpLFxuXHRcdFx0XHRhdDogKGluZGV4OiBudW1iZXIpID0+IGNhY2hlW2luZGV4XSB8fCAoY2FjaGVbaW5kZXhdID0gbWFrZUFwaShpbmRleCkpLFxuXHRcdFx0fTtcblx0XHR9KSgpO1xuXG5cdFx0cmV0dXJuIHsgcmVmOiBib2R5UmVmLCBhcGkgfTtcblx0fSk7XG59XG4iXX0=
@@ -3,7 +3,7 @@ import { injectNgtRef } from 'angular-three';
3
3
  import { injectNgtcPhysicsApi } from 'angular-three-cannon';
4
4
  import { assertInjector } from 'ngxtension/assert-injector';
5
5
  import * as THREE from 'three';
6
- import { getUUID, subscribe } from './body';
6
+ import { createSubscribe, getUUID } from './body';
7
7
  function isString(v) {
8
8
  return typeof v === 'string';
9
9
  }
@@ -56,7 +56,7 @@ export function injectRaycastVehicle(fn, { ref, injector, deps = () => ({}), } =
56
56
  });
57
57
  },
58
58
  sliding: {
59
- subscribe: subscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),
59
+ subscribe: createSubscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),
60
60
  },
61
61
  remove: () => {
62
62
  const uuid = getUUID(instanceRef);
@@ -66,4 +66,4 @@ export function injectRaycastVehicle(fn, { ref, injector, deps = () => ({}), } =
66
66
  return { ref: instanceRef, api };
67
67
  });
68
68
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF5Y2FzdC12ZWhpY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jYW5ub24vc2VydmljZXMvc3JjL2xpYi9yYXljYXN0LXZlaGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU1QyxTQUFTLFFBQVEsQ0FBQyxDQUFVO0lBQzNCLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQzlCLENBQUM7QUF3QkQsTUFBTSxVQUFVLG9CQUFvQixDQUNuQyxFQUFpQyxFQUNqQyxFQUNDLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQ3FFLEVBQUU7SUFFekYsUUFBUSxHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFL0YsTUFBTSxXQUFX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O1lBQ2pELENBQUM7U0FDRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRU4sT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIHVudHJhY2tlZCwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBXaGVlbEluZm9PcHRpb25zIH0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RSZWYsIHR5cGUgTmd0QW55UmVjb3JkLCB0eXBlIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RjUGh5c2ljc0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgZ2V0VVVJRCwgc3Vic2NyaWJlIH0gZnJvbSAnLi9ib2R5JztcblxuZnVuY3Rpb24gaXNTdHJpbmcodjogdW5rbm93bik6IHYgaXMgc3RyaW5nIHtcblx0cmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y1JheWNhc3RWZWhpY2xlU3RhdGUgPSB7XG5cdGNoYXNzaXNCb2R5OiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD47XG5cdHdoZWVsSW5mb3M6IFdoZWVsSW5mb09wdGlvbnNbXTtcblx0d2hlZWxzOiBBcnJheTxOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD4+O1xuXHRpbmRleEZvcndhcmRBeGlzPzogbnVtYmVyO1xuXHRpbmRleFJpZ2h0QXhpcz86IG51bWJlcjtcblx0aW5kZXhVcEF4aXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUmF5Y2FzdFZlaGljbGVQdWJsaWNBcGkgPSB7XG5cdGFwcGx5RW5naW5lRm9yY2U6ICh2YWx1ZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG5cdHNldEJyYWtlOiAoYnJha2U6IG51bWJlciwgd2hlZWxJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuXHRzZXRTdGVlcmluZ1ZhbHVlOiAodmFsdWU6IG51bWJlciwgd2hlZWxJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuXHRzbGlkaW5nOiB7IHN1YnNjcmliZTogKGNhbGxiYWNrOiAoc2xpZGluZzogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZCB9O1xuXHRyZW1vdmU6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUmF5Y2FzdFZlaGljbGVSZXR1cm48VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEID0gVEhSRUUuT2JqZWN0M0Q+ID0ge1xuXHRyZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuXHRhcGk6IE5ndGNSYXljYXN0VmVoaWNsZVB1YmxpY0FwaTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSYXljYXN0VmVoaWNsZTxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0QgPSBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiAoKSA9PiBOZ3RjUmF5Y2FzdFZlaGljbGVTdGF0ZSxcblx0e1xuXHRcdHJlZixcblx0XHRpbmplY3Rvcixcblx0XHRkZXBzID0gKCkgPT4gKHt9KSxcblx0fTogeyByZWY/OiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0PjsgaW5qZWN0b3I/OiBJbmplY3RvcjsgZGVwcz86ICgpID0+IE5ndEFueVJlY29yZCB9ID0ge30sXG4pOiBOZ3RjUmF5Y2FzdFZlaGljbGVSZXR1cm48VE9iamVjdD4ge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdG9yKGluamVjdFJheWNhc3RWZWhpY2xlLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwaHlzaWNzQXBpID0gaW5qZWN0Tmd0Y1BoeXNpY3NBcGkoKTtcblx0XHRjb25zdCBbd29ya2VyLCBzdWJzY3JpcHRpb25zXSA9IFtwaHlzaWNzQXBpLnNlbGVjdCgnd29ya2VyJyksIHBoeXNpY3NBcGkuZ2V0KCdzdWJzY3JpcHRpb25zJyldO1xuXG5cdFx0Y29uc3QgaW5zdGFuY2VSZWYgPSByZWYgfHwgaW5qZWN0Tmd0UmVmPFRPYmplY3Q+KCk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0ZGVwcygpO1xuXHRcdFx0aWYgKCFpbnN0YW5jZVJlZi5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGluc3RhbmNlUmVmLm5hdGl2ZUVsZW1lbnQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKSBhcyBUT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnRXb3JrZXIgPSB3b3JrZXIoKTtcblx0XHRcdGNvbnN0IHV1aWQ6IHN0cmluZyA9IGluc3RhbmNlUmVmLm5hdGl2ZUVsZW1lbnQudXVpZDtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2hhc3Npc0JvZHksXG5cdFx0XHRcdGluZGV4Rm9yd2FyZEF4aXMgPSAyLFxuXHRcdFx0XHRpbmRleFJpZ2h0QXhpcyA9IDAsXG5cdFx0XHRcdGluZGV4VXBBeGlzID0gMSxcblx0XHRcdFx0d2hlZWxJbmZvcyxcblx0XHRcdFx0d2hlZWxzLFxuXHRcdFx0fSA9IHVudHJhY2tlZChmbik7XG5cblx0XHRcdGNvbnN0IGNoYXNzaXNCb2R5VVVJRCA9IGdldFVVSUQoY2hhc3Npc0JvZHkpO1xuXHRcdFx0Y29uc3Qgd2hlZWxVVUlEcyA9IHdoZWVscy5tYXAoKHJlZikgPT4gZ2V0VVVJRChyZWYpKTtcblxuXHRcdFx0aWYgKCFjaGFzc2lzQm9keVVVSUQgfHwgIXdoZWVsVVVJRHMuZXZlcnkoaXNTdHJpbmcpKSByZXR1cm47XG5cblx0XHRcdGN1cnJlbnRXb3JrZXIuYWRkUmF5Y2FzdFZlaGljbGUoe1xuXHRcdFx0XHRwcm9wczogW2NoYXNzaXNCb2R5VVVJRCwgd2hlZWxVVUlEcywgd2hlZWxJbmZvcywgaW5kZXhGb3J3YXJkQXhpcywgaW5kZXhSaWdodEF4aXMsIGluZGV4VXBBeGlzXSxcblx0XHRcdFx0dXVpZCxcblx0XHRcdH0pO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y3VycmVudFdvcmtlci5yZW1vdmVSYXljYXN0VmVoaWNsZSh7IHV1aWQgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGFwaSA9ICgoKSA9PiAoe1xuXHRcdFx0YXBwbHlFbmdpbmVGb3JjZSh2YWx1ZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmXG5cdFx0XHRcdFx0d29ya2VyKCkuYXBwbHlSYXljYXN0VmVoaWNsZUVuZ2luZUZvcmNlKHtcblx0XHRcdFx0XHRcdHByb3BzOiBbdmFsdWUsIHdoZWVsSW5kZXhdLFxuXHRcdFx0XHRcdFx0dXVpZCxcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXRCcmFrZShicmFrZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLnNldFJheWNhc3RWZWhpY2xlQnJha2UoeyBwcm9wczogW2JyYWtlLCB3aGVlbEluZGV4XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXRTdGVlcmluZ1ZhbHVlKHZhbHVlOiBudW1iZXIsIHdoZWVsSW5kZXg6IG51bWJlcikge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChpbnN0YW5jZVJlZik7XG5cdFx0XHRcdHV1aWQgJiZcblx0XHRcdFx0XHR3b3JrZXIoKS5zZXRSYXljYXN0VmVoaWNsZVN0ZWVyaW5nVmFsdWUoe1xuXHRcdFx0XHRcdFx0cHJvcHM6IFt2YWx1ZSwgd2hlZWxJbmRleF0sXG5cdFx0XHRcdFx0XHR1dWlkLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHNsaWRpbmc6IHtcblx0XHRcdFx0c3Vic2NyaWJlOiBzdWJzY3JpYmUoaW5zdGFuY2VSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCAnc2xpZGluZycsIHVuZGVmaW5lZCwgJ3ZlaGljbGVzJyksXG5cdFx0XHR9LFxuXG5cdFx0XHRyZW1vdmU6ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLnJlbW92ZVJheWNhc3RWZWhpY2xlKHsgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0fSkpKCk7XG5cblx0XHRyZXR1cm4geyByZWY6IGluc3RhbmNlUmVmLCBhcGkgfTtcblx0fSk7XG59XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF5Y2FzdC12ZWhpY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jYW5ub24vc2VydmljZXMvc3JjL2xpYi9yYXljYXN0LXZlaGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsRCxTQUFTLFFBQVEsQ0FBQyxDQUFVO0lBQzNCLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQzlCLENBQUM7QUF3QkQsTUFBTSxVQUFVLG9CQUFvQixDQUNuQyxFQUFpQyxFQUNqQyxFQUNDLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQ3FFLEVBQUU7SUFFekYsUUFBUSxHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFL0YsTUFBTSxXQUFXLEdBQUcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRW5ELE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7Z0JBQy9CLFdBQVcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFhLENBQUM7Z0JBQzVELE9BQU87YUFDUDtZQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxHQUFXLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3BELE1BQU0sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEdBQUcsQ0FBQyxFQUNwQixjQUFjLEdBQUcsQ0FBQyxFQUNsQixXQUFXLEdBQUcsQ0FBQyxFQUNmLFVBQVUsRUFDVixNQUFNLEdBQ04sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFbEIsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPO1lBRTVELGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQztnQkFDL0YsSUFBSTthQUNKLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLGdCQUFnQixDQUFDLEtBQWEsRUFBRSxVQUFrQjtnQkFDakQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJO29CQUNILE1BQU0sRUFBRSxDQUFDLDhCQUE4QixDQUFDO3dCQUN2QyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO3dCQUMxQixJQUFJO3FCQUNKLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxRQUFRLENBQUMsS0FBYSxFQUFFLFVBQWtCO2dCQUN6QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEMsSUFBSTtvQkFDSCxNQUFNLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQzt3QkFDdkMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQzt3QkFDMUIsSUFBSTtxQkFDSixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxFQUFFO2dCQUNSLFNBQVMsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQzthQUNsRztZQUVELE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELENBQUM7U0FDRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRU4sT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIHVudHJhY2tlZCwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBXaGVlbEluZm9PcHRpb25zIH0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RSZWYsIHR5cGUgTmd0QW55UmVjb3JkLCB0eXBlIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RjUGh5c2ljc0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY3JlYXRlU3Vic2NyaWJlLCBnZXRVVUlEIH0gZnJvbSAnLi9ib2R5JztcblxuZnVuY3Rpb24gaXNTdHJpbmcodjogdW5rbm93bik6IHYgaXMgc3RyaW5nIHtcblx0cmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y1JheWNhc3RWZWhpY2xlU3RhdGUgPSB7XG5cdGNoYXNzaXNCb2R5OiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD47XG5cdHdoZWVsSW5mb3M6IFdoZWVsSW5mb09wdGlvbnNbXTtcblx0d2hlZWxzOiBBcnJheTxOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD4+O1xuXHRpbmRleEZvcndhcmRBeGlzPzogbnVtYmVyO1xuXHRpbmRleFJpZ2h0QXhpcz86IG51bWJlcjtcblx0aW5kZXhVcEF4aXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUmF5Y2FzdFZlaGljbGVQdWJsaWNBcGkgPSB7XG5cdGFwcGx5RW5naW5lRm9yY2U6ICh2YWx1ZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG5cdHNldEJyYWtlOiAoYnJha2U6IG51bWJlciwgd2hlZWxJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuXHRzZXRTdGVlcmluZ1ZhbHVlOiAodmFsdWU6IG51bWJlciwgd2hlZWxJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuXHRzbGlkaW5nOiB7IHN1YnNjcmliZTogKGNhbGxiYWNrOiAoc2xpZGluZzogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZCB9O1xuXHRyZW1vdmU6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUmF5Y2FzdFZlaGljbGVSZXR1cm48VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEID0gVEhSRUUuT2JqZWN0M0Q+ID0ge1xuXHRyZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuXHRhcGk6IE5ndGNSYXljYXN0VmVoaWNsZVB1YmxpY0FwaTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSYXljYXN0VmVoaWNsZTxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0QgPSBUSFJFRS5PYmplY3QzRD4oXG5cdGZuOiAoKSA9PiBOZ3RjUmF5Y2FzdFZlaGljbGVTdGF0ZSxcblx0e1xuXHRcdHJlZixcblx0XHRpbmplY3Rvcixcblx0XHRkZXBzID0gKCkgPT4gKHt9KSxcblx0fTogeyByZWY/OiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0PjsgaW5qZWN0b3I/OiBJbmplY3RvcjsgZGVwcz86ICgpID0+IE5ndEFueVJlY29yZCB9ID0ge30sXG4pOiBOZ3RjUmF5Y2FzdFZlaGljbGVSZXR1cm48VE9iamVjdD4ge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdG9yKGluamVjdFJheWNhc3RWZWhpY2xlLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwaHlzaWNzQXBpID0gaW5qZWN0Tmd0Y1BoeXNpY3NBcGkoKTtcblx0XHRjb25zdCBbd29ya2VyLCBzdWJzY3JpcHRpb25zXSA9IFtwaHlzaWNzQXBpLnNlbGVjdCgnd29ya2VyJyksIHBoeXNpY3NBcGkuZ2V0KCdzdWJzY3JpcHRpb25zJyldO1xuXG5cdFx0Y29uc3QgaW5zdGFuY2VSZWYgPSByZWYgfHwgaW5qZWN0Tmd0UmVmPFRPYmplY3Q+KCk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0ZGVwcygpO1xuXHRcdFx0aWYgKCFpbnN0YW5jZVJlZi5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGluc3RhbmNlUmVmLm5hdGl2ZUVsZW1lbnQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKSBhcyBUT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnRXb3JrZXIgPSB3b3JrZXIoKTtcblx0XHRcdGNvbnN0IHV1aWQ6IHN0cmluZyA9IGluc3RhbmNlUmVmLm5hdGl2ZUVsZW1lbnQudXVpZDtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2hhc3Npc0JvZHksXG5cdFx0XHRcdGluZGV4Rm9yd2FyZEF4aXMgPSAyLFxuXHRcdFx0XHRpbmRleFJpZ2h0QXhpcyA9IDAsXG5cdFx0XHRcdGluZGV4VXBBeGlzID0gMSxcblx0XHRcdFx0d2hlZWxJbmZvcyxcblx0XHRcdFx0d2hlZWxzLFxuXHRcdFx0fSA9IHVudHJhY2tlZChmbik7XG5cblx0XHRcdGNvbnN0IGNoYXNzaXNCb2R5VVVJRCA9IGdldFVVSUQoY2hhc3Npc0JvZHkpO1xuXHRcdFx0Y29uc3Qgd2hlZWxVVUlEcyA9IHdoZWVscy5tYXAoKHJlZikgPT4gZ2V0VVVJRChyZWYpKTtcblxuXHRcdFx0aWYgKCFjaGFzc2lzQm9keVVVSUQgfHwgIXdoZWVsVVVJRHMuZXZlcnkoaXNTdHJpbmcpKSByZXR1cm47XG5cblx0XHRcdGN1cnJlbnRXb3JrZXIuYWRkUmF5Y2FzdFZlaGljbGUoe1xuXHRcdFx0XHRwcm9wczogW2NoYXNzaXNCb2R5VVVJRCwgd2hlZWxVVUlEcywgd2hlZWxJbmZvcywgaW5kZXhGb3J3YXJkQXhpcywgaW5kZXhSaWdodEF4aXMsIGluZGV4VXBBeGlzXSxcblx0XHRcdFx0dXVpZCxcblx0XHRcdH0pO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y3VycmVudFdvcmtlci5yZW1vdmVSYXljYXN0VmVoaWNsZSh7IHV1aWQgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGFwaSA9ICgoKSA9PiAoe1xuXHRcdFx0YXBwbHlFbmdpbmVGb3JjZSh2YWx1ZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmXG5cdFx0XHRcdFx0d29ya2VyKCkuYXBwbHlSYXljYXN0VmVoaWNsZUVuZ2luZUZvcmNlKHtcblx0XHRcdFx0XHRcdHByb3BzOiBbdmFsdWUsIHdoZWVsSW5kZXhdLFxuXHRcdFx0XHRcdFx0dXVpZCxcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXRCcmFrZShicmFrZTogbnVtYmVyLCB3aGVlbEluZGV4OiBudW1iZXIpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLnNldFJheWNhc3RWZWhpY2xlQnJha2UoeyBwcm9wczogW2JyYWtlLCB3aGVlbEluZGV4XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXRTdGVlcmluZ1ZhbHVlKHZhbHVlOiBudW1iZXIsIHdoZWVsSW5kZXg6IG51bWJlcikge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChpbnN0YW5jZVJlZik7XG5cdFx0XHRcdHV1aWQgJiZcblx0XHRcdFx0XHR3b3JrZXIoKS5zZXRSYXljYXN0VmVoaWNsZVN0ZWVyaW5nVmFsdWUoe1xuXHRcdFx0XHRcdFx0cHJvcHM6IFt2YWx1ZSwgd2hlZWxJbmRleF0sXG5cdFx0XHRcdFx0XHR1dWlkLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHNsaWRpbmc6IHtcblx0XHRcdFx0c3Vic2NyaWJlOiBjcmVhdGVTdWJzY3JpYmUoaW5zdGFuY2VSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCAnc2xpZGluZycsIHVuZGVmaW5lZCwgJ3ZlaGljbGVzJyksXG5cdFx0XHR9LFxuXG5cdFx0XHRyZW1vdmU6ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoaW5zdGFuY2VSZWYpO1xuXHRcdFx0XHR1dWlkICYmIHdvcmtlcigpLnJlbW92ZVJheWNhc3RWZWhpY2xlKHsgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0fSkpKCk7XG5cblx0XHRyZXR1cm4geyByZWY6IGluc3RhbmNlUmVmLCBhcGkgfTtcblx0fSk7XG59XG4iXX0=
@@ -21,7 +21,7 @@ const quaternionToRotation = (callback) => {
21
21
  return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());
22
22
  };
23
23
  let incrementingId = 0;
24
- function subscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
24
+ function createSubscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
25
25
  return (callback) => {
26
26
  const id = incrementingId++;
27
27
  subscriptions[id] = { [type]: callback };
@@ -90,12 +90,12 @@ function injectCompoundBody(fn, opts) {
90
90
  function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({}) } = {}) {
91
91
  injector = assertInjector(injectBody, injector);
92
92
  return runInInjectionContext(injector, () => {
93
- const bodyRef = ref || injectNgtRef();
94
- const physicsApi = injectNgtcPhysicsApi();
95
- const debugApi = injectNgtcDebugApi({ optional: true });
96
- const { add: debugAdd, remove: debugRemove } = debugApi || {};
97
- const { refs, subscriptions, scaleOverrides, events, bodies } = physicsApi.get();
98
- const worker = physicsApi.select('worker');
93
+ const [bodyRef, physicsApi, debugApi] = [
94
+ ref || injectNgtRef(),
95
+ injectNgtcPhysicsApi(),
96
+ injectNgtcDebugApi({ optional: true }),
97
+ ];
98
+ const [{ add: addToDebug, remove: removeFromDebug }, { refs, subscriptions, scaleOverrides, events, bodies }, worker,] = [debugApi || {}, physicsApi.get(), physicsApi.select('worker')];
99
99
  effect((onCleanup) => {
100
100
  // register deps
101
101
  deps();
@@ -120,7 +120,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
120
120
  object.setMatrixAt(i, temp.matrix);
121
121
  object.instanceMatrix.needsUpdate = true;
122
122
  refs[id] = object;
123
- debugAdd?.(id, props, type);
123
+ addToDebug?.(id, props, type);
124
124
  setupCollision(events, props, id);
125
125
  return { ...props, args: argsFn(props.args) };
126
126
  })
@@ -128,7 +128,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
128
128
  const props = getPropsFn(i);
129
129
  prepare(object, props);
130
130
  refs[id] = object;
131
- debugAdd?.(id, props, type);
131
+ addToDebug?.(id, props, type);
132
132
  setupCollision(events, props, id);
133
133
  return { ...props, args: argsFn(props.args) };
134
134
  });
@@ -143,7 +143,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
143
143
  onCleanup(() => {
144
144
  uuid.forEach((id) => {
145
145
  delete refs[id];
146
- debugRemove?.(id);
146
+ removeFromDebug?.(id);
147
147
  delete events[id];
148
148
  });
149
149
  currentWorker.removeBodies({ uuid });
@@ -161,7 +161,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
161
161
  uuid,
162
162
  });
163
163
  },
164
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
164
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
165
165
  };
166
166
  };
167
167
  const makeQuaternion = (index) => {
@@ -175,7 +175,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
175
175
  const uuid = getUUID(bodyRef, index);
176
176
  uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
177
177
  },
178
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
178
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
179
179
  };
180
180
  };
181
181
  const makeRotation = (index) => {
@@ -213,7 +213,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
213
213
  const uuid = getUUID(bodyRef, index);
214
214
  uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
215
215
  },
216
- subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
216
+ subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
217
217
  };
218
218
  };
219
219
  const makeRemove = (index) => {
@@ -444,7 +444,7 @@ function injectRaycastVehicle(fn, { ref, injector, deps = () => ({}), } = {}) {
444
444
  });
445
445
  },
446
446
  sliding: {
447
- subscribe: subscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),
447
+ subscribe: createSubscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),
448
448
  },
449
449
  remove: () => {
450
450
  const uuid = getUUID(instanceRef);
@@ -487,5 +487,5 @@ function injectSpring(bodyA, bodyB, { injector, opts = () => ({}), deps = () =>
487
487
  * Generated bundle index. Do not edit.
488
488
  */
489
489
 
490
- export { getUUID, injectBox, injectCompoundBody, injectContactMaterial, injectConvexPolyhedron, injectCylinder, injectHeightfield, injectParticle, injectPlane, injectRaycastAny, injectRaycastClosest, injectRaycastVehicle, injectSphere, injectSpring, injectTrimesh, subscribe, useConeTwistConstraint, useDistanceConstraint, useHingeConstraint, useLockConstraint, usePointToPointConstraint, useRaycastAll };
490
+ export { createSubscribe, getUUID, injectBox, injectCompoundBody, injectContactMaterial, injectConvexPolyhedron, injectCylinder, injectHeightfield, injectParticle, injectPlane, injectRaycastAny, injectRaycastClosest, injectRaycastVehicle, injectSphere, injectSpring, injectTrimesh, useConeTwistConstraint, useDistanceConstraint, useHingeConstraint, useLockConstraint, usePointToPointConstraint, useRaycastAll };
491
491
  //# sourceMappingURL=angular-three-cannon-services.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/cannon/services/src/lib/body.ts","../../../../libs/cannon/services/src/lib/constraints.ts","../../../../libs/cannon/services/src/lib/contact-material.ts","../../../../libs/cannon/services/src/lib/ray.ts","../../../../libs/cannon/services/src/lib/raycast-vehicle.ts","../../../../libs/cannon/services/src/lib/spring.ts","../../../../libs/cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { effect, runInInjectionContext, type ElementRef, type Injector } from '@angular/core';\nimport type {\n\tAtomicName,\n\tAtomicProps,\n\tBodyProps,\n\tBodyShapeType,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tConvexPolyhedronProps,\n\tCylinderProps,\n\tHeightfieldProps,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSphereProps,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshProps,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi, type NgtcCannonEvents } from 'angular-three-cannon';\nimport { injectNgtcDebugApi } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n\tset: (value: AtomicProps[K]) => void;\n\tsubscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n\tcopy: ({ w, x, y, z }: THREE.Quaternion) => void;\n\tset: (x: number, y: number, z: number, w: number) => void;\n\tsubscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n\tset: (x: number, y: number, z: number) => void;\n\tsubscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n\t[K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n\t[K in VectorName]: NgtcVectorApi;\n} & {\n\tapplyForce: (force: Triplet, worldPoint: Triplet) => void;\n\tapplyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n\tapplyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n\tapplyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n\tapplyTorque: (torque: Triplet) => void;\n\tquaternion: NgtcQuaternionApi;\n\trotation: NgtcVectorApi;\n\tscaleOverride: (scale: Triplet) => void;\n\tsleep: () => void;\n\twakeUp: () => void;\n\tremove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n\tat: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n\tref: NgtInjectedRef<TObject>;\n\tapi: NgtcBodyPublicApi;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nconst temp = new THREE.Object3D();\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nexport function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): string | null {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof ref === 'function') return null;\n\treturn ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nconst quaternionToRotation = (callback: (v: Triplet) => void) => {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n};\n\nlet incrementingId = 0;\n\nexport function subscribe<T extends SubscriptionName>(\n\tref: ElementRef<THREE.Object3D>,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(ref, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nfunction setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = {\n\t\tcollide: onCollide,\n\t\tcollideBegin: onCollideBegin,\n\t\tcollideEnd: onCollideEnd,\n\t};\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n\treturn v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport interface NgtcBodyOptions<TObject extends THREE.Object3D> {\n\tref?: NgtInjectedRef<TObject>;\n\tdeps?: () => NgtAnyRecord;\n\tinjector?: Injector;\n}\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<PlaneProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<BoxProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\tconst defaultBoxArgs: Triplet = [1, 1, 1];\n\treturn injectBody('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<CylinderProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<HeightfieldProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<ParticleProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Particle', fn, () => [], opts);\n}\nexport function injectSphere<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<SphereProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody(\n\t\t'Sphere',\n\t\tfn,\n\t\t(args: SphereArgs = [1]): SphereArgs => {\n\t\t\tif (!Array.isArray(args)) throw new Error('useSphere args must be an array');\n\t\t\treturn [args[0]];\n\t\t},\n\t\topts,\n\t);\n}\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<TrimeshProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<ConvexPolyhedronProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody(\n\t\t'ConvexPolyhedron',\n\t\tfn,\n\t\t([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n\t\t\tvertices && vertices.map(makeTriplet),\n\t\t\tfaces,\n\t\t\tnormals && normals.map(makeTriplet),\n\t\t\taxes && axes.map(makeTriplet),\n\t\t\tboundingSphereRadius,\n\t\t],\n\t\topts,\n\t);\n}\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<CompoundBodyProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Compound', fn, (args) => args as unknown[], opts);\n}\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n\ttype: BodyShapeType,\n\tgetPropsFn: NgtcGetByIndex<TBodyProps>,\n\targsFn: NgtcArgFn<TBodyProps['args']>,\n\t{ ref, injector, deps = () => ({}) }: NgtcBodyOptions<TObject> = {},\n): NgtcBodyReturn<TObject> {\n\tinjector = assertInjector(injectBody, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst bodyRef = ref || injectNgtRef<TObject>();\n\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst debugApi = injectNgtcDebugApi({ optional: true });\n\n\t\tconst { add: debugAdd, remove: debugRemove } = debugApi || {};\n\t\tconst { refs, subscriptions, scaleOverrides, events, bodies } = physicsApi.get();\n\t\tconst worker = physicsApi.select('worker');\n\n\t\teffect((onCleanup) => {\n\t\t\t// register deps\n\t\t\tdeps();\n\n\t\t\tconst currentWorker = worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tif (!bodyRef.nativeElement) {\n\t\t\t\tbodyRef.nativeElement = new THREE.Object3D() as TObject;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst object = bodyRef.nativeElement;\n\n\t\t\tconst objectCount =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? (object.instanceMatrix.setUsage(THREE.DynamicDrawUsage), object.count)\n\t\t\t\t\t: 1;\n\n\t\t\tconst uuid =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n\t\t\t\t\t: [object.uuid];\n\n\t\t\tconst props: (TBodyProps & { args: unknown })[] =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? uuid.map((id, i) => {\n\t\t\t\t\t\t\tconst props = getPropsFn(i);\n\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\tobject.setMatrixAt(i, temp.matrix);\n\t\t\t\t\t\t\tobject.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\trefs[id] = object;\n\t\t\t\t\t\t\tdebugAdd?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(events, props, id);\n\t\t\t\t\t\t\treturn { ...props, args: argsFn(props.args) };\n\t\t\t\t\t })\n\t\t\t\t\t: uuid.map((id, i) => {\n\t\t\t\t\t\t\tconst props = getPropsFn(i);\n\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t\trefs[id] = object;\n\t\t\t\t\t\t\tdebugAdd?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(events, props, id);\n\t\t\t\t\t\t\treturn { ...props, args: argsFn(props.args) };\n\t\t\t\t\t });\n\n\t\t\t// Register on mount, unregister on unmount\n\t\t\tcurrentWorker.addBodies({\n\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\treturn { onCollide: Boolean(onCollide), ...serializableProps };\n\t\t\t\t}),\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\tdelete refs[id];\n\t\t\t\t\tdebugRemove?.(id);\n\t\t\t\t\tdelete events[id];\n\t\t\t\t});\n\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t});\n\t\t});\n\n\t\tconst api = (() => {\n\t\t\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\t\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\t\t\treturn {\n\t\t\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid &&\n\t\t\t\t\t\t\tworker()[op]({\n\t\t\t\t\t\t\t\tprops: value,\n\t\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\t} as never);\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeQuaternion = (index?: number) => {\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ w, x, y, z }: THREE.Quaternion) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeRotation = (index?: number) => {\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\t\t\tconst id = incrementingId++;\n\t\t\t\t\t\tconst target = 'bodies';\n\t\t\t\t\t\tconst type = 'quaternion';\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\n\t\t\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\t\t\tworker().unsubscribe({ props: id });\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeVec = (type: VectorName, index?: number) => {\n\t\t\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeRemove = (index?: number) => {\n\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\treturn () => {\n\t\t\t\t\tif (uuid) worker().removeBodies({ uuid: [uuid] });\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\t\t\treturn {\n\t\t\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid &&\n\t\t\t\t\t\t\tbodies[uuid] != null &&\n\t\t\t\t\t\t\tworker().applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\t\t\tmass: makeAtomic('mass', index),\n\t\t\t\t\tmaterial: makeAtomic('material', index),\n\t\t\t\t\tposition: makeVec('position', index),\n\t\t\t\t\tquaternion: makeQuaternion(index),\n\t\t\t\t\trotation: makeRotation(index),\n\t\t\t\t\tscaleOverride(scale) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tif (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n\t\t\t\t\t},\n\t\t\t\t\tsleep() {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().sleep({ uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\t\t\tuserData: makeAtomic('userData', index),\n\t\t\t\t\tvelocity: makeVec('velocity', index),\n\t\t\t\t\tremove: makeRemove(index),\n\t\t\t\t\twakeUp() {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().wakeUp({ uuid });\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst cache: { [index: number]: NgtcWorkerApi } = {};\n\t\t\treturn {\n\t\t\t\t...makeApi(undefined),\n\t\t\t\tat: (index: number) => cache[index] || (cache[index] = makeApi(index)),\n\t\t\t};\n\t\t})();\n\n\t\treturn { ref: bodyRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type {\n\tConstraintOptns,\n\tConstraintTypes,\n\tHingeConstraintOpts,\n\tPointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, is, makeId, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport type NgtcConstraintApi = {\n\tdisable: () => void;\n\tenable: () => void;\n\tremove: () => void;\n};\n\nexport type NgtcHingeConstraintApi = NgtcConstraintApi & {\n\tdisableMotor: () => void;\n\tenableMotor: () => void;\n\tsetMotorMaxForce: (value: number) => void;\n\tsetMotorSpeed: (value: number) => void;\n};\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n\t? NgtcConstraintApi\n\t: NgtcHingeConstraintApi;\n\nexport type NgtcConstraintReturn<\n\tT extends 'Hinge' | ConstraintTypes,\n\tTObjectA extends THREE.Object3D = THREE.Object3D,\n\tTObjectB extends THREE.Object3D = THREE.Object3D,\n> = {\n\tbodyA: NgtInjectedRef<TObjectA>;\n\tbodyB: NgtInjectedRef<TObjectB>;\n\tapi: NgtcConstraintORHingeApi<T>;\n};\n\nexport type NgtcConstraintOptions<\n\tTConstraintType extends 'Hinge' | ConstraintTypes,\n\tTOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n\t\t? HingeConstraintOpts\n\t\t: ConstraintOptns,\n> = { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => TOptions };\n\nexport function usePointToPointConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'PointToPoint', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('PointToPoint', bodyA, bodyB, opts);\n}\nexport function useConeTwistConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'ConeTwist', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('ConeTwist', bodyA, bodyB, opts);\n}\nexport function useDistanceConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Distance', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Distance', bodyA, bodyB, opts);\n}\nexport function useHingeConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Hinge', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Hinge', bodyA, bodyB, opts);\n}\nexport function useLockConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Lock', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Lock', bodyA, bodyB, opts);\n}\n\nfunction injectConstraint<\n\tTConstraintType extends 'Hinge' | ConstraintTypes,\n\tA extends THREE.Object3D,\n\tB extends THREE.Object3D,\n\tTOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n\t\t? HingeConstraintOpts\n\t\t: ConstraintOptns,\n>(\n\ttype: TConstraintType,\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\t{\n\t\tinjector,\n\t\tdeps = () => ({}),\n\t\topts = () => ({}) as TOptions,\n\t}: NgtcConstraintOptions<TConstraintType, TOptions> = {},\n): NgtcConstraintReturn<TConstraintType, A, B> {\n\tinjector = assertInjector(injectConstraint, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\n\t\tconst uuid = makeId();\n\n\t\tconst bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n\t\tconst bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (bodyARef.nativeElement && bodyBRef.nativeElement) {\n\t\t\t\tworker().addConstraint({\n\t\t\t\t\tprops: [bodyARef.untracked.uuid, bodyBRef.untracked.uuid, untracked(opts)],\n\t\t\t\t\ttype,\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\t\t\t\tonCleanup(() => worker().removeConstraint({ uuid }));\n\t\t\t}\n\t\t});\n\n\t\tconst api = (() => {\n\t\t\tconst enableDisable = {\n\t\t\t\tdisable: () => worker().disableConstraint({ uuid }),\n\t\t\t\tenable: () => worker().enableConstraint({ uuid }),\n\t\t\t\tremove: () => worker().removeConstraint({ uuid }),\n\t\t\t};\n\n\t\t\tif (type === 'Hinge') {\n\t\t\t\treturn {\n\t\t\t\t\t...enableDisable,\n\t\t\t\t\tdisableMotor: () => worker().disableConstraintMotor({ uuid }),\n\t\t\t\t\tenableMotor: () => worker().enableConstraintMotor({ uuid }),\n\t\t\t\t\tsetMotorMaxForce: (value: number) => worker().setConstraintMotorMaxForce({ props: value, uuid }),\n\t\t\t\t\tsetMotorSpeed: (value: number) => worker().setConstraintMotorSpeed({ props: value, uuid }),\n\t\t\t\t} as NgtcConstraintORHingeApi<TConstraintType>;\n\t\t\t}\n\n\t\t\treturn enableDisable as NgtcConstraintORHingeApi<TConstraintType>;\n\t\t})();\n\n\t\treturn { bodyA: bodyARef, bodyB: bodyBRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { makeId, type NgtAnyRecord } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport function injectContactMaterial(\n\tmaterialB: MaterialOptions,\n\tmaterialA: MaterialOptions,\n\t{\n\t\topts,\n\t\tdeps = () => ({}),\n\t\tinjector,\n\t}: { opts: () => ContactMaterialOptions; deps?: () => NgtAnyRecord; injector?: Injector },\n): void {\n\tinjector = assertInjector(injectContactMaterial, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\t\tconst uuid = makeId();\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tworker().addContactMaterial({\n\t\t\t\tprops: [materialA, materialB, untracked(opts)],\n\t\t\t\tuuid,\n\t\t\t});\n\t\t\tonCleanup(() => worker().removeContactMaterial({ uuid }));\n\t\t});\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { RayMode, RayOptions, RayhitEvent } from '@pmndrs/cannon-worker-api';\nimport { makeId, type NgtAnyRecord } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport type NgtcRayOptions = {\n\toptions: () => RayOptions;\n\tcallback: (e: RayhitEvent) => void;\n\tinjector?: Injector;\n\tdeps?: () => NgtAnyRecord;\n};\n\nexport function injectRaycastClosest(opts: NgtcRayOptions) {\n\treturn injectRay('Closest', opts);\n}\n\nexport function injectRaycastAny(opts: NgtcRayOptions) {\n\treturn injectRay('Any', opts);\n}\n\nexport function useRaycastAll(opts: NgtcRayOptions) {\n\treturn injectRay('All', opts);\n}\n\nfunction injectRay(mode: RayMode, { options, callback, deps = () => ({}), injector }: NgtcRayOptions) {\n\tinjector = assertInjector(injectRay, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst [worker, events] = [physicsApi.select('worker'), physicsApi.get('events')];\n\t\tconst uuid = makeId();\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tevents[uuid] = { rayhit: callback };\n\t\t\tworker().addRay({ props: { ...untracked(options), mode }, uuid });\n\t\t\tonCleanup(() => {\n\t\t\t\tworker().removeRay({ uuid });\n\t\t\t\tdelete events[uuid];\n\t\t\t});\n\t\t});\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { getUUID, subscribe } from './body';\n\nfunction isString(v: unknown): v is string {\n\treturn typeof v === 'string';\n}\n\nexport type NgtcRaycastVehicleState = {\n\tchassisBody: NgtInjectedRef<THREE.Object3D>;\n\twheelInfos: WheelInfoOptions[];\n\twheels: Array<NgtInjectedRef<THREE.Object3D>>;\n\tindexForwardAxis?: number;\n\tindexRightAxis?: number;\n\tindexUpAxis?: number;\n};\n\nexport type NgtcRaycastVehiclePublicApi = {\n\tapplyEngineForce: (value: number, wheelIndex: number) => void;\n\tsetBrake: (brake: number, wheelIndex: number) => void;\n\tsetSteeringValue: (value: number, wheelIndex: number) => void;\n\tsliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n\tremove: () => void;\n};\n\nexport type NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> = {\n\tref: NgtInjectedRef<TObject>;\n\tapi: NgtcRaycastVehiclePublicApi;\n};\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n\tfn: () => NgtcRaycastVehicleState,\n\t{\n\t\tref,\n\t\tinjector,\n\t\tdeps = () => ({}),\n\t}: { ref?: NgtInjectedRef<TObject>; injector?: Injector; deps?: () => NgtAnyRecord } = {},\n): NgtcRaycastVehicleReturn<TObject> {\n\tinjector = assertInjector(injectRaycastVehicle, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst [worker, subscriptions] = [physicsApi.select('worker'), physicsApi.get('subscriptions')];\n\n\t\tconst instanceRef = ref || injectNgtRef<TObject>();\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (!instanceRef.nativeElement) {\n\t\t\t\tinstanceRef.nativeElement = new THREE.Object3D() as TObject;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentWorker = worker();\n\t\t\tconst uuid: string = instanceRef.nativeElement.uuid;\n\t\t\tconst {\n\t\t\t\tchassisBody,\n\t\t\t\tindexForwardAxis = 2,\n\t\t\t\tindexRightAxis = 0,\n\t\t\t\tindexUpAxis = 1,\n\t\t\t\twheelInfos,\n\t\t\t\twheels,\n\t\t\t} = untracked(fn);\n\n\t\t\tconst chassisBodyUUID = getUUID(chassisBody);\n\t\t\tconst wheelUUIDs = wheels.map((ref) => getUUID(ref));\n\n\t\t\tif (!chassisBodyUUID || !wheelUUIDs.every(isString)) return;\n\n\t\t\tcurrentWorker.addRaycastVehicle({\n\t\t\t\tprops: [chassisBodyUUID, wheelUUIDs, wheelInfos, indexForwardAxis, indexRightAxis, indexUpAxis],\n\t\t\t\tuuid,\n\t\t\t});\n\t\t\tonCleanup(() => {\n\t\t\t\tcurrentWorker.removeRaycastVehicle({ uuid });\n\t\t\t});\n\t\t});\n\n\t\tconst api = (() => ({\n\t\t\tapplyEngineForce(value: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid &&\n\t\t\t\t\tworker().applyRaycastVehicleEngineForce({\n\t\t\t\t\t\tprops: [value, wheelIndex],\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tsetBrake(brake: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid && worker().setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n\t\t\t},\n\t\t\tsetSteeringValue(value: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid &&\n\t\t\t\t\tworker().setRaycastVehicleSteeringValue({\n\t\t\t\t\t\tprops: [value, wheelIndex],\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tsliding: {\n\t\t\t\tsubscribe: subscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),\n\t\t\t},\n\n\t\t\tremove: () => {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid && worker().removeRaycastVehicle({ uuid });\n\t\t\t},\n\t\t}))();\n\n\t\treturn { ref: instanceRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, is, makeId, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport type NgtcSpringApi = {\n\tsetDamping: (value: number) => void;\n\tsetRestLength: (value: number) => void;\n\tsetStiffness: (value: number) => void;\n\tremove: () => void;\n};\n\nexport type NgtcSpringReturn<\n\tTObjectA extends THREE.Object3D = THREE.Object3D,\n\tTObjectB extends THREE.Object3D = THREE.Object3D,\n> = {\n\tbodyA: NgtInjectedRef<TObjectA>;\n\tbodyB: NgtInjectedRef<TObjectB>;\n\tapi: NgtcSpringApi;\n};\n\nexport function injectSpring<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\t{\n\t\tinjector,\n\t\topts = () => ({}),\n\t\tdeps = () => ({}),\n\t}: { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => SpringOptns } = {},\n): NgtcSpringReturn<A, B> {\n\tinjector = assertInjector(injectSpring, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\n\t\tconst uuid = makeId();\n\n\t\tconst bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n\t\tconst bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (bodyARef.nativeElement && bodyBRef.nativeElement) {\n\t\t\t\tworker().addSpring({\n\t\t\t\t\tprops: [bodyARef.nativeElement.uuid, bodyBRef.nativeElement.uuid, untracked(opts)],\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\t\t\t\tonCleanup(() => worker().removeSpring({ uuid }));\n\t\t\t}\n\t\t});\n\n\t\tconst api = (() => ({\n\t\t\tsetDamping: (value: number) => worker().setSpringDamping({ props: value, uuid }),\n\t\t\tsetRestLength: (value: number) => worker().setSpringRestLength({ props: value, uuid }),\n\t\t\tsetStiffness: (value: number) => worker().setSpringStiffness({ props: value, uuid }),\n\t\t\tremove: () => worker().removeSpring({ uuid }),\n\t\t}))();\n\n\t\treturn { bodyA: bodyARef, bodyB: bodyBRef, api };\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/cannon/services/src/lib/body.ts","../../../../libs/cannon/services/src/lib/constraints.ts","../../../../libs/cannon/services/src/lib/contact-material.ts","../../../../libs/cannon/services/src/lib/ray.ts","../../../../libs/cannon/services/src/lib/raycast-vehicle.ts","../../../../libs/cannon/services/src/lib/spring.ts","../../../../libs/cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { effect, runInInjectionContext, type ElementRef, type Injector } from '@angular/core';\nimport type {\n\tAtomicName,\n\tAtomicProps,\n\tBodyProps,\n\tBodyShapeType,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tConvexPolyhedronProps,\n\tCylinderProps,\n\tHeightfieldProps,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSphereProps,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshProps,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi, type NgtcCannonEvents } from 'angular-three-cannon';\nimport { injectNgtcDebugApi } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n\tset: (value: AtomicProps[K]) => void;\n\tsubscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n\tcopy: ({ w, x, y, z }: THREE.Quaternion) => void;\n\tset: (x: number, y: number, z: number, w: number) => void;\n\tsubscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n\tset: (x: number, y: number, z: number) => void;\n\tsubscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n\t[K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n\t[K in VectorName]: NgtcVectorApi;\n} & {\n\tapplyForce: (force: Triplet, worldPoint: Triplet) => void;\n\tapplyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n\tapplyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n\tapplyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n\tapplyTorque: (torque: Triplet) => void;\n\tquaternion: NgtcQuaternionApi;\n\trotation: NgtcVectorApi;\n\tscaleOverride: (scale: Triplet) => void;\n\tsleep: () => void;\n\twakeUp: () => void;\n\tremove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n\tat: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n\tref: NgtInjectedRef<TObject>;\n\tapi: NgtcBodyPublicApi;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nconst temp = new THREE.Object3D();\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nexport function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): string | null {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof ref === 'function') return null;\n\treturn ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nconst quaternionToRotation = (callback: (v: Triplet) => void) => {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n};\n\nlet incrementingId = 0;\n\nexport function createSubscribe<T extends SubscriptionName>(\n\tref: ElementRef<THREE.Object3D>,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(ref, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nfunction setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = {\n\t\tcollide: onCollide,\n\t\tcollideBegin: onCollideBegin,\n\t\tcollideEnd: onCollideEnd,\n\t};\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n\treturn v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport interface NgtcBodyOptions<TObject extends THREE.Object3D> {\n\tref?: NgtInjectedRef<TObject>;\n\tdeps?: () => NgtAnyRecord;\n\tinjector?: Injector;\n}\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<PlaneProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<BoxProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\tconst defaultBoxArgs: Triplet = [1, 1, 1];\n\treturn injectBody('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<CylinderProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<HeightfieldProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<ParticleProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Particle', fn, () => [], opts);\n}\nexport function injectSphere<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<SphereProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody(\n\t\t'Sphere',\n\t\tfn,\n\t\t(args: SphereArgs = [1]): SphereArgs => {\n\t\t\tif (!Array.isArray(args)) throw new Error('useSphere args must be an array');\n\t\t\treturn [args[0]];\n\t\t},\n\t\topts,\n\t);\n}\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<TrimeshProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<ConvexPolyhedronProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody(\n\t\t'ConvexPolyhedron',\n\t\tfn,\n\t\t([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n\t\t\tvertices && vertices.map(makeTriplet),\n\t\t\tfaces,\n\t\t\tnormals && normals.map(makeTriplet),\n\t\t\taxes && axes.map(makeTriplet),\n\t\t\tboundingSphereRadius,\n\t\t],\n\t\topts,\n\t);\n}\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n\tfn: NgtcGetByIndex<CompoundBodyProps>,\n\topts?: NgtcBodyOptions<TObject>,\n) {\n\treturn injectBody('Compound', fn, (args) => args as unknown[], opts);\n}\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n\ttype: BodyShapeType,\n\tgetPropsFn: NgtcGetByIndex<TBodyProps>,\n\targsFn: NgtcArgFn<TBodyProps['args']>,\n\t{ ref, injector, deps = () => ({}) }: NgtcBodyOptions<TObject> = {},\n): NgtcBodyReturn<TObject> {\n\tinjector = assertInjector(injectBody, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst [bodyRef, physicsApi, debugApi] = [\n\t\t\tref || injectNgtRef<TObject>(),\n\t\t\tinjectNgtcPhysicsApi(),\n\t\t\tinjectNgtcDebugApi({ optional: true }),\n\t\t];\n\n\t\tconst [\n\t\t\t{ add: addToDebug, remove: removeFromDebug },\n\t\t\t{ refs, subscriptions, scaleOverrides, events, bodies },\n\t\t\tworker,\n\t\t] = [debugApi || {}, physicsApi.get(), physicsApi.select('worker')];\n\n\t\teffect((onCleanup) => {\n\t\t\t// register deps\n\t\t\tdeps();\n\n\t\t\tconst currentWorker = worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tif (!bodyRef.nativeElement) {\n\t\t\t\tbodyRef.nativeElement = new THREE.Object3D() as TObject;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst object = bodyRef.nativeElement;\n\n\t\t\tconst objectCount =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? (object.instanceMatrix.setUsage(THREE.DynamicDrawUsage), object.count)\n\t\t\t\t\t: 1;\n\n\t\t\tconst uuid =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n\t\t\t\t\t: [object.uuid];\n\n\t\t\tconst props: (TBodyProps & { args: unknown })[] =\n\t\t\t\tobject instanceof THREE.InstancedMesh\n\t\t\t\t\t? uuid.map((id, i) => {\n\t\t\t\t\t\t\tconst props = getPropsFn(i);\n\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\tobject.setMatrixAt(i, temp.matrix);\n\t\t\t\t\t\t\tobject.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\trefs[id] = object;\n\t\t\t\t\t\t\taddToDebug?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(events, props, id);\n\t\t\t\t\t\t\treturn { ...props, args: argsFn(props.args) };\n\t\t\t\t\t })\n\t\t\t\t\t: uuid.map((id, i) => {\n\t\t\t\t\t\t\tconst props = getPropsFn(i);\n\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t\trefs[id] = object;\n\t\t\t\t\t\t\taddToDebug?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(events, props, id);\n\t\t\t\t\t\t\treturn { ...props, args: argsFn(props.args) };\n\t\t\t\t\t });\n\n\t\t\t// Register on mount, unregister on unmount\n\t\t\tcurrentWorker.addBodies({\n\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\treturn { onCollide: Boolean(onCollide), ...serializableProps };\n\t\t\t\t}),\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\tdelete refs[id];\n\t\t\t\t\tremoveFromDebug?.(id);\n\t\t\t\t\tdelete events[id];\n\t\t\t\t});\n\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t});\n\t\t});\n\n\t\tconst api = (() => {\n\t\t\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\t\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\t\t\treturn {\n\t\t\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid &&\n\t\t\t\t\t\t\tworker()[op]({\n\t\t\t\t\t\t\t\tprops: value,\n\t\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\t} as never);\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeQuaternion = (index?: number) => {\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ w, x, y, z }: THREE.Quaternion) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeRotation = (index?: number) => {\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\t\t\tconst id = incrementingId++;\n\t\t\t\t\t\tconst target = 'bodies';\n\t\t\t\t\t\tconst type = 'quaternion';\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\n\t\t\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\t\t\tworker().unsubscribe({ props: id });\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeVec = (type: VectorName, index?: number) => {\n\t\t\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\t\t\treturn {\n\t\t\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst makeRemove = (index?: number) => {\n\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\treturn () => {\n\t\t\t\t\tif (uuid) worker().removeBodies({ uuid: [uuid] });\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\t\t\treturn {\n\t\t\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid &&\n\t\t\t\t\t\t\tbodies[uuid] != null &&\n\t\t\t\t\t\t\tworker().applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });\n\t\t\t\t\t},\n\t\t\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\t\t\tmass: makeAtomic('mass', index),\n\t\t\t\t\tmaterial: makeAtomic('material', index),\n\t\t\t\t\tposition: makeVec('position', index),\n\t\t\t\t\tquaternion: makeQuaternion(index),\n\t\t\t\t\trotation: makeRotation(index),\n\t\t\t\t\tscaleOverride(scale) {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tif (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n\t\t\t\t\t},\n\t\t\t\t\tsleep() {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().sleep({ uuid });\n\t\t\t\t\t},\n\t\t\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\t\t\tuserData: makeAtomic('userData', index),\n\t\t\t\t\tvelocity: makeVec('velocity', index),\n\t\t\t\t\tremove: makeRemove(index),\n\t\t\t\t\twakeUp() {\n\t\t\t\t\t\tconst uuid = getUUID(bodyRef, index);\n\t\t\t\t\t\tuuid && bodies[uuid] != null && worker().wakeUp({ uuid });\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst cache: { [index: number]: NgtcWorkerApi } = {};\n\t\t\treturn {\n\t\t\t\t...makeApi(undefined),\n\t\t\t\tat: (index: number) => cache[index] || (cache[index] = makeApi(index)),\n\t\t\t};\n\t\t})();\n\n\t\treturn { ref: bodyRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type {\n\tConstraintOptns,\n\tConstraintTypes,\n\tHingeConstraintOpts,\n\tPointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, is, makeId, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport type NgtcConstraintApi = {\n\tdisable: () => void;\n\tenable: () => void;\n\tremove: () => void;\n};\n\nexport type NgtcHingeConstraintApi = NgtcConstraintApi & {\n\tdisableMotor: () => void;\n\tenableMotor: () => void;\n\tsetMotorMaxForce: (value: number) => void;\n\tsetMotorSpeed: (value: number) => void;\n};\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n\t? NgtcConstraintApi\n\t: NgtcHingeConstraintApi;\n\nexport type NgtcConstraintReturn<\n\tT extends 'Hinge' | ConstraintTypes,\n\tTObjectA extends THREE.Object3D = THREE.Object3D,\n\tTObjectB extends THREE.Object3D = THREE.Object3D,\n> = {\n\tbodyA: NgtInjectedRef<TObjectA>;\n\tbodyB: NgtInjectedRef<TObjectB>;\n\tapi: NgtcConstraintORHingeApi<T>;\n};\n\nexport type NgtcConstraintOptions<\n\tTConstraintType extends 'Hinge' | ConstraintTypes,\n\tTOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n\t\t? HingeConstraintOpts\n\t\t: ConstraintOptns,\n> = { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => TOptions };\n\nexport function usePointToPointConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'PointToPoint', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('PointToPoint', bodyA, bodyB, opts);\n}\nexport function useConeTwistConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'ConeTwist', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('ConeTwist', bodyA, bodyB, opts);\n}\nexport function useDistanceConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Distance', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Distance', bodyA, bodyB, opts);\n}\nexport function useHingeConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Hinge', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Hinge', bodyA, bodyB, opts);\n}\nexport function useLockConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\topts?: NgtcConstraintOptions<'Lock', PointToPointConstraintOpts>,\n) {\n\treturn injectConstraint('Lock', bodyA, bodyB, opts);\n}\n\nfunction injectConstraint<\n\tTConstraintType extends 'Hinge' | ConstraintTypes,\n\tA extends THREE.Object3D,\n\tB extends THREE.Object3D,\n\tTOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n\t\t? HingeConstraintOpts\n\t\t: ConstraintOptns,\n>(\n\ttype: TConstraintType,\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\t{\n\t\tinjector,\n\t\tdeps = () => ({}),\n\t\topts = () => ({}) as TOptions,\n\t}: NgtcConstraintOptions<TConstraintType, TOptions> = {},\n): NgtcConstraintReturn<TConstraintType, A, B> {\n\tinjector = assertInjector(injectConstraint, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\n\t\tconst uuid = makeId();\n\n\t\tconst bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n\t\tconst bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (bodyARef.nativeElement && bodyBRef.nativeElement) {\n\t\t\t\tworker().addConstraint({\n\t\t\t\t\tprops: [bodyARef.untracked.uuid, bodyBRef.untracked.uuid, untracked(opts)],\n\t\t\t\t\ttype,\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\t\t\t\tonCleanup(() => worker().removeConstraint({ uuid }));\n\t\t\t}\n\t\t});\n\n\t\tconst api = (() => {\n\t\t\tconst enableDisable = {\n\t\t\t\tdisable: () => worker().disableConstraint({ uuid }),\n\t\t\t\tenable: () => worker().enableConstraint({ uuid }),\n\t\t\t\tremove: () => worker().removeConstraint({ uuid }),\n\t\t\t};\n\n\t\t\tif (type === 'Hinge') {\n\t\t\t\treturn {\n\t\t\t\t\t...enableDisable,\n\t\t\t\t\tdisableMotor: () => worker().disableConstraintMotor({ uuid }),\n\t\t\t\t\tenableMotor: () => worker().enableConstraintMotor({ uuid }),\n\t\t\t\t\tsetMotorMaxForce: (value: number) => worker().setConstraintMotorMaxForce({ props: value, uuid }),\n\t\t\t\t\tsetMotorSpeed: (value: number) => worker().setConstraintMotorSpeed({ props: value, uuid }),\n\t\t\t\t} as NgtcConstraintORHingeApi<TConstraintType>;\n\t\t\t}\n\n\t\t\treturn enableDisable as NgtcConstraintORHingeApi<TConstraintType>;\n\t\t})();\n\n\t\treturn { bodyA: bodyARef, bodyB: bodyBRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { makeId, type NgtAnyRecord } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport function injectContactMaterial(\n\tmaterialB: MaterialOptions,\n\tmaterialA: MaterialOptions,\n\t{\n\t\topts,\n\t\tdeps = () => ({}),\n\t\tinjector,\n\t}: { opts: () => ContactMaterialOptions; deps?: () => NgtAnyRecord; injector?: Injector },\n): void {\n\tinjector = assertInjector(injectContactMaterial, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\t\tconst uuid = makeId();\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tworker().addContactMaterial({\n\t\t\t\tprops: [materialA, materialB, untracked(opts)],\n\t\t\t\tuuid,\n\t\t\t});\n\t\t\tonCleanup(() => worker().removeContactMaterial({ uuid }));\n\t\t});\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { RayMode, RayOptions, RayhitEvent } from '@pmndrs/cannon-worker-api';\nimport { makeId, type NgtAnyRecord } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport type NgtcRayOptions = {\n\toptions: () => RayOptions;\n\tcallback: (e: RayhitEvent) => void;\n\tinjector?: Injector;\n\tdeps?: () => NgtAnyRecord;\n};\n\nexport function injectRaycastClosest(opts: NgtcRayOptions) {\n\treturn injectRay('Closest', opts);\n}\n\nexport function injectRaycastAny(opts: NgtcRayOptions) {\n\treturn injectRay('Any', opts);\n}\n\nexport function useRaycastAll(opts: NgtcRayOptions) {\n\treturn injectRay('All', opts);\n}\n\nfunction injectRay(mode: RayMode, { options, callback, deps = () => ({}), injector }: NgtcRayOptions) {\n\tinjector = assertInjector(injectRay, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst [worker, events] = [physicsApi.select('worker'), physicsApi.get('events')];\n\t\tconst uuid = makeId();\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tevents[uuid] = { rayhit: callback };\n\t\t\tworker().addRay({ props: { ...untracked(options), mode }, uuid });\n\t\t\tonCleanup(() => {\n\t\t\t\tworker().removeRay({ uuid });\n\t\t\t\tdelete events[uuid];\n\t\t\t});\n\t\t});\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { createSubscribe, getUUID } from './body';\n\nfunction isString(v: unknown): v is string {\n\treturn typeof v === 'string';\n}\n\nexport type NgtcRaycastVehicleState = {\n\tchassisBody: NgtInjectedRef<THREE.Object3D>;\n\twheelInfos: WheelInfoOptions[];\n\twheels: Array<NgtInjectedRef<THREE.Object3D>>;\n\tindexForwardAxis?: number;\n\tindexRightAxis?: number;\n\tindexUpAxis?: number;\n};\n\nexport type NgtcRaycastVehiclePublicApi = {\n\tapplyEngineForce: (value: number, wheelIndex: number) => void;\n\tsetBrake: (brake: number, wheelIndex: number) => void;\n\tsetSteeringValue: (value: number, wheelIndex: number) => void;\n\tsliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n\tremove: () => void;\n};\n\nexport type NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> = {\n\tref: NgtInjectedRef<TObject>;\n\tapi: NgtcRaycastVehiclePublicApi;\n};\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n\tfn: () => NgtcRaycastVehicleState,\n\t{\n\t\tref,\n\t\tinjector,\n\t\tdeps = () => ({}),\n\t}: { ref?: NgtInjectedRef<TObject>; injector?: Injector; deps?: () => NgtAnyRecord } = {},\n): NgtcRaycastVehicleReturn<TObject> {\n\tinjector = assertInjector(injectRaycastVehicle, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst [worker, subscriptions] = [physicsApi.select('worker'), physicsApi.get('subscriptions')];\n\n\t\tconst instanceRef = ref || injectNgtRef<TObject>();\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (!instanceRef.nativeElement) {\n\t\t\t\tinstanceRef.nativeElement = new THREE.Object3D() as TObject;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentWorker = worker();\n\t\t\tconst uuid: string = instanceRef.nativeElement.uuid;\n\t\t\tconst {\n\t\t\t\tchassisBody,\n\t\t\t\tindexForwardAxis = 2,\n\t\t\t\tindexRightAxis = 0,\n\t\t\t\tindexUpAxis = 1,\n\t\t\t\twheelInfos,\n\t\t\t\twheels,\n\t\t\t} = untracked(fn);\n\n\t\t\tconst chassisBodyUUID = getUUID(chassisBody);\n\t\t\tconst wheelUUIDs = wheels.map((ref) => getUUID(ref));\n\n\t\t\tif (!chassisBodyUUID || !wheelUUIDs.every(isString)) return;\n\n\t\t\tcurrentWorker.addRaycastVehicle({\n\t\t\t\tprops: [chassisBodyUUID, wheelUUIDs, wheelInfos, indexForwardAxis, indexRightAxis, indexUpAxis],\n\t\t\t\tuuid,\n\t\t\t});\n\t\t\tonCleanup(() => {\n\t\t\t\tcurrentWorker.removeRaycastVehicle({ uuid });\n\t\t\t});\n\t\t});\n\n\t\tconst api = (() => ({\n\t\t\tapplyEngineForce(value: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid &&\n\t\t\t\t\tworker().applyRaycastVehicleEngineForce({\n\t\t\t\t\t\tprops: [value, wheelIndex],\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tsetBrake(brake: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid && worker().setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n\t\t\t},\n\t\t\tsetSteeringValue(value: number, wheelIndex: number) {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid &&\n\t\t\t\t\tworker().setRaycastVehicleSteeringValue({\n\t\t\t\t\t\tprops: [value, wheelIndex],\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tsliding: {\n\t\t\t\tsubscribe: createSubscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),\n\t\t\t},\n\n\t\t\tremove: () => {\n\t\t\t\tconst uuid = getUUID(instanceRef);\n\t\t\t\tuuid && worker().removeRaycastVehicle({ uuid });\n\t\t\t},\n\t\t}))();\n\n\t\treturn { ref: instanceRef, api };\n\t});\n}\n","import { effect, runInInjectionContext, untracked, type Injector } from '@angular/core';\nimport type { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { injectNgtRef, is, makeId, type NgtAnyRecord, type NgtInjectedRef } from 'angular-three';\nimport { injectNgtcPhysicsApi } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\n\nexport type NgtcSpringApi = {\n\tsetDamping: (value: number) => void;\n\tsetRestLength: (value: number) => void;\n\tsetStiffness: (value: number) => void;\n\tremove: () => void;\n};\n\nexport type NgtcSpringReturn<\n\tTObjectA extends THREE.Object3D = THREE.Object3D,\n\tTObjectB extends THREE.Object3D = THREE.Object3D,\n> = {\n\tbodyA: NgtInjectedRef<TObjectA>;\n\tbodyB: NgtInjectedRef<TObjectB>;\n\tapi: NgtcSpringApi;\n};\n\nexport function injectSpring<A extends THREE.Object3D, B extends THREE.Object3D>(\n\tbodyA: NgtInjectedRef<A> | A,\n\tbodyB: NgtInjectedRef<B> | B,\n\t{\n\t\tinjector,\n\t\topts = () => ({}),\n\t\tdeps = () => ({}),\n\t}: { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => SpringOptns } = {},\n): NgtcSpringReturn<A, B> {\n\tinjector = assertInjector(injectSpring, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst physicsApi = injectNgtcPhysicsApi();\n\t\tconst worker = physicsApi.select('worker');\n\n\t\tconst uuid = makeId();\n\n\t\tconst bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n\t\tconst bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n\t\teffect((onCleanup) => {\n\t\t\tdeps();\n\t\t\tif (bodyARef.nativeElement && bodyBRef.nativeElement) {\n\t\t\t\tworker().addSpring({\n\t\t\t\t\tprops: [bodyARef.nativeElement.uuid, bodyBRef.nativeElement.uuid, untracked(opts)],\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\t\t\t\tonCleanup(() => worker().removeSpring({ uuid }));\n\t\t\t}\n\t\t});\n\n\t\tconst api = (() => ({\n\t\t\tsetDamping: (value: number) => worker().setSpringDamping({ props: value, uuid }),\n\t\t\tsetRestLength: (value: number) => worker().setSpringRestLength({ props: value, uuid }),\n\t\t\tsetStiffness: (value: number) => worker().setSpringStiffness({ props: value, uuid }),\n\t\t\tremove: () => worker().removeSpring({ uuid }),\n\t\t}))();\n\n\t\treturn { bodyA: bodyARef, bodyB: bodyBRef, api };\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three-cannon",
3
- "version": "2.0.0-beta.40",
3
+ "version": "2.0.0-beta.41",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -43,7 +43,7 @@ export interface NgtcBodyReturn<TObject extends THREE.Object3D> {
43
43
  export type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
44
44
  export type NgtcArgFn<T> = (args: T) => unknown[];
45
45
  export declare function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): string | null;
46
- export declare function subscribe<T extends SubscriptionName>(ref: ElementRef<THREE.Object3D>, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
46
+ export declare function createSubscribe<T extends SubscriptionName>(ref: ElementRef<THREE.Object3D>, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
47
47
  export interface NgtcBodyOptions<TObject extends THREE.Object3D> {
48
48
  ref?: NgtInjectedRef<TObject>;
49
49
  deps?: () => NgtAnyRecord;