@effect-app/vue 4.0.0-beta.28 → 4.0.0-beta.281

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +2073 -0
  2. package/dist/atomQuery.d.ts +105 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +283 -0
  5. package/dist/commander.d.ts +634 -0
  6. package/dist/commander.d.ts.map +1 -0
  7. package/dist/commander.js +1070 -0
  8. package/dist/{experimental/confirm.d.ts → confirm.d.ts} +6 -4
  9. package/dist/confirm.d.ts.map +1 -0
  10. package/dist/confirm.js +26 -0
  11. package/dist/errorReporter.d.ts +6 -4
  12. package/dist/errorReporter.d.ts.map +1 -1
  13. package/dist/errorReporter.js +14 -19
  14. package/dist/form.d.ts +14 -5
  15. package/dist/form.d.ts.map +1 -1
  16. package/dist/form.js +46 -13
  17. package/dist/internal/tanstackQuery.d.ts +9 -0
  18. package/dist/internal/tanstackQuery.d.ts.map +1 -0
  19. package/dist/internal/tanstackQuery.js +163 -0
  20. package/dist/intl.d.ts +15 -0
  21. package/dist/intl.d.ts.map +1 -0
  22. package/dist/intl.js +9 -0
  23. package/dist/lib.d.ts +7 -9
  24. package/dist/lib.d.ts.map +1 -1
  25. package/dist/lib.js +35 -10
  26. package/dist/makeClient.d.ts +212 -336
  27. package/dist/makeClient.d.ts.map +1 -1
  28. package/dist/makeClient.js +399 -411
  29. package/dist/makeContext.d.ts.map +1 -1
  30. package/dist/makeIntl.d.ts.map +1 -1
  31. package/dist/{experimental/makeUseCommand.d.ts → makeUseCommand.d.ts} +4 -3
  32. package/dist/makeUseCommand.d.ts.map +1 -0
  33. package/dist/makeUseCommand.js +13 -0
  34. package/dist/mutate.d.ts +106 -40
  35. package/dist/mutate.d.ts.map +1 -1
  36. package/dist/mutate.js +187 -58
  37. package/dist/query.d.ts +139 -45
  38. package/dist/query.d.ts.map +1 -1
  39. package/dist/query.js +330 -122
  40. package/dist/routeParams.d.ts +4 -4
  41. package/dist/routeParams.d.ts.map +1 -1
  42. package/dist/routeParams.js +4 -3
  43. package/dist/runtime.d.ts +1 -14
  44. package/dist/runtime.d.ts.map +1 -1
  45. package/dist/runtime.js +2 -26
  46. package/dist/suspense.d.ts +5 -0
  47. package/dist/suspense.d.ts.map +1 -0
  48. package/dist/suspense.js +12 -0
  49. package/dist/toast.d.ts +2 -0
  50. package/dist/toast.d.ts.map +1 -0
  51. package/dist/toast.js +2 -0
  52. package/dist/withToast.d.ts +2 -0
  53. package/dist/withToast.d.ts.map +1 -0
  54. package/dist/withToast.js +2 -0
  55. package/docs/atom-query-api-redesign.md +207 -0
  56. package/examples/streamMutation.ts +72 -0
  57. package/package.json +30 -94
  58. package/src/atomQuery.ts +381 -0
  59. package/src/commander.ts +3413 -0
  60. package/src/{experimental/confirm.ts → confirm.ts} +13 -15
  61. package/src/errorReporter.ts +65 -75
  62. package/src/form.ts +61 -18
  63. package/src/index.ts +7 -7
  64. package/src/internal/tanstackQuery.ts +250 -0
  65. package/src/intl.ts +12 -0
  66. package/src/lib.ts +49 -21
  67. package/src/makeClient.ts +941 -1159
  68. package/src/makeIntl.ts +2 -2
  69. package/src/{experimental/makeUseCommand.ts → makeUseCommand.ts} +9 -6
  70. package/src/mutate.ts +343 -151
  71. package/src/query.ts +688 -260
  72. package/src/routeParams.ts +7 -7
  73. package/src/runtime.ts +1 -31
  74. package/src/suspense.ts +17 -0
  75. package/src/toast.ts +1 -0
  76. package/src/withToast.ts +1 -0
  77. package/test/Mutation.test.ts +181 -24
  78. package/test/dist/form.test.d.ts.map +1 -1
  79. package/test/dist/lib.test.d.ts.map +1 -0
  80. package/test/dist/patchableQueryAtom.test.d.ts.map +1 -0
  81. package/test/dist/queryOptions.test.d.ts.map +1 -0
  82. package/test/dist/retrySchedule.test.d.ts.map +1 -0
  83. package/test/dist/streamFinal.test.d.ts.map +1 -0
  84. package/test/dist/streamFn.test.d.ts.map +1 -0
  85. package/test/dist/stubs.d.ts +3697 -122
  86. package/test/dist/stubs.d.ts.map +1 -1
  87. package/test/dist/stubs.js +192 -32
  88. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  89. package/test/dist/suspense.test.d.ts.map +1 -0
  90. package/test/form-validation-errors.test.ts +25 -20
  91. package/test/form.test.ts +22 -3
  92. package/test/lib.test.ts +240 -0
  93. package/test/makeClient.test.ts +437 -38
  94. package/test/streamFinal.test.ts +64 -0
  95. package/test/streamFn.test.ts +457 -0
  96. package/test/stubs.ts +228 -43
  97. package/test/suspense-regression.test.ts +115 -0
  98. package/test/suspense.test.ts +160 -0
  99. package/tsconfig.examples.json +20 -0
  100. package/tsconfig.json +3 -1
  101. package/tsconfig.src.json +34 -34
  102. package/tsconfig.test.json +2 -2
  103. package/vitest.config.ts +5 -5
  104. package/dist/experimental/commander.d.ts +0 -359
  105. package/dist/experimental/commander.d.ts.map +0 -1
  106. package/dist/experimental/commander.js +0 -557
  107. package/dist/experimental/confirm.d.ts.map +0 -1
  108. package/dist/experimental/confirm.js +0 -28
  109. package/dist/experimental/intl.d.ts +0 -16
  110. package/dist/experimental/intl.d.ts.map +0 -1
  111. package/dist/experimental/intl.js +0 -5
  112. package/dist/experimental/makeUseCommand.d.ts.map +0 -1
  113. package/dist/experimental/makeUseCommand.js +0 -13
  114. package/dist/experimental/toast.d.ts +0 -47
  115. package/dist/experimental/toast.d.ts.map +0 -1
  116. package/dist/experimental/toast.js +0 -41
  117. package/dist/experimental/withToast.d.ts +0 -25
  118. package/dist/experimental/withToast.d.ts.map +0 -1
  119. package/dist/experimental/withToast.js +0 -45
  120. package/eslint.config.mjs +0 -24
  121. package/src/experimental/commander.ts +0 -1835
  122. package/src/experimental/intl.ts +0 -9
  123. package/src/experimental/toast.ts +0 -66
  124. package/src/experimental/withToast.ts +0 -99
  125. package/tsconfig.json.bak +0 -12
@@ -1,336 +1,98 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { isCancelledError } from "@tanstack/vue-query";
3
2
  import { camelCase } from "change-case";
4
- import { Cause, Data, Effect, Exit, Layer, Match, Option, S, ServiceMap, Struct } from "effect-app";
5
- import { ErrorSilenced } from "effect-app/client/errors";
6
- import { constant, identity, pipe, tuple } from "effect-app/Function";
7
- import { OperationSuccess } from "effect-app/Operations";
8
- import { dropUndefinedT, extendM } from "effect-app/utils";
9
- import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
10
- import { computed, onBeforeUnmount, ref, watch } from "vue";
11
- import { reportMessage } from "./errorReporter.js";
12
- import { CommanderStatic } from "./experimental/commander.js";
13
- import { I18n } from "./experimental/intl.js";
14
- import { makeUseCommand } from "./experimental/makeUseCommand.js";
15
- import { Toast } from "./experimental/toast.js";
16
- import { buildFieldInfoFromFieldsRoot } from "./form.js";
17
- import { reportRuntimeError } from "./lib.js";
18
- import { asResult, makeMutation, mutationResultToVue, useMakeMutation } from "./mutate.js";
19
- import { makeQuery } from "./query.js";
20
- const mapHandler = (handler, map) => Effect.isEffect(handler) ? map(handler, undefined) : (i) => map(handler(i), i);
21
- /**
22
- * Use this after handling an error yourself, still continueing on the Error track, but the error will not be reported.
23
- */
24
- export class SuppressErrors extends Data.TaggedError("SuppressErrors") {
25
- [ErrorSilenced] = true;
26
- }
27
- export const suppressToast = constant(Effect.succeed(undefined));
28
- /** handles errors as specified and reports defects */
29
- function handleRequest(f, id, action, options) {
30
- const handleEffect = (i) => (self) => self.pipe(Effect.tap(Effect.matchCauseEffect({
31
- onSuccess: (r) => options.onSuccess(r, i),
32
- onFailure: (cause) => Effect.gen(function* () {
33
- if (Cause.hasInterruptsOnly(cause)) {
34
- console.info(`Interrupted while trying to ${action}`);
35
- return;
36
- }
37
- const fail = Cause.findErrorOption(cause);
38
- if (Option.isSome(fail)) {
39
- if (fail.value._tag === "SuppressErrors") {
40
- console.info(`Suppressed error trying to ${action}`, fail.value);
41
- return;
42
- }
43
- const message = `Failure trying to ${action}`;
44
- yield* reportMessage(message, { action, error: fail.value });
45
- yield* options.onFail(fail.value, i);
46
- return;
47
- }
48
- const extra = {
49
- action,
50
- message: `Unexpected Error trying to ${action}`
51
- };
52
- yield* reportRuntimeError(cause, extra);
53
- yield* options.onDefect(cause, i);
54
- })
55
- })), Effect.withSpan(`mutation ${id}`, {}, { captureStackTrace: false }));
56
- return Object.assign(Effect.isEffect(f)
57
- ? pipe(f, handleEffect(void 0))
58
- : (i) => pipe(f(i), handleEffect(i)), { action });
59
- }
60
- const _useMutation = makeMutation();
3
+ import * as Context from "effect-app/Context";
4
+ import * as Effect from "effect-app/Effect";
5
+ import * as Layer from "effect-app/Layer";
6
+ import * as S from "effect-app/Schema";
7
+ import * as Exit from "effect/Exit";
8
+ import * as Hash from "effect/Hash";
9
+ import * as Struct from "effect/Struct";
10
+ import * as Reactivity from "effect/unstable/reactivity/Reactivity";
11
+ import { computed, effectScope, onBeforeUnmount, onScopeDispose, ref } from "vue";
12
+ import { invalidateAndAwait, makeAtomClientRuntime } from "./atomQuery.js";
13
+ import { CommanderStatic } from "./commander.js";
14
+ import { makeTanstackQuery, makeTanstackQueryCacheUpdater, makeTanstackQueryClient, makeTanstackQueryInvalidator } from "./internal/tanstackQuery.js";
15
+ import { makeUseCommand } from "./makeUseCommand.js";
16
+ import { atomQueryInvalidator, combineQueryInvalidators, makeMutation, makeStreamMutation2, useMakeMutation } from "./mutate.js";
17
+ import { atomQueryCacheUpdater, combineQueryCacheUpdaters, makeQuery, makeQueryAtom, makeQueryFamily, makeQueryNew, makeStreamQuery, makeStreamQueryAtom, makeStreamQueryFamily, makeStreamQueryNew, optionalAtomQueryCacheUpdater, setQueryCacheUpdater } from "./query.js";
18
+ import { makeRunPromise } from "./runtime.js";
19
+ const useScopedSuspenseSetup = (setup) => {
20
+ const scope = effectScope();
21
+ const controller = new AbortController();
22
+ const value = scope.run(setup);
23
+ if (value === undefined) {
24
+ throw new Error("Internal Error: suspense setup scope did not initialize");
25
+ }
26
+ const isMounted = ref(true);
27
+ let stopped = false;
28
+ const stop = () => {
29
+ if (stopped)
30
+ return;
31
+ stopped = true;
32
+ isMounted.value = false;
33
+ controller.abort();
34
+ scope.stop();
35
+ };
36
+ onBeforeUnmount(stop);
37
+ onScopeDispose(stop);
38
+ return [value, isMounted, controller.signal];
39
+ };
40
+ // TODO: optimize - work from encoded shape directly
41
+ const projectHandler = (handler, successSchema, projectionSchema) => {
42
+ const encode = S.encodeUnknownEffect(successSchema);
43
+ const decode = S.decodeUnknownEffect(projectionSchema);
44
+ return (i) => handler(i).pipe(Effect.flatMap(encode), Effect.flatMap(decode));
45
+ };
46
+ const projectionSchemaHash = (schema) => String(Hash.hash(schema.ast));
47
+ const _useMutation = makeMutation(atomQueryInvalidator);
48
+ const wrapWithSpan = (self, mut) => {
49
+ const span = (eff) => Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })(eff);
50
+ return (input, options) => span(mut(input, options));
51
+ };
61
52
  /**
62
53
  * Pass an Effect or a function that returns an Effect, e.g from a client action
63
54
  * Executes query cache invalidation based on default rules or provided option.
64
55
  * adds a span with the mutation id
65
56
  */
66
- export const useMutation = (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
57
+ export const useMutation = ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
67
58
  /**
68
59
  * Pass an Effect or a function that returns an Effect, e.g from a client action
69
60
  * Executes query cache invalidation based on default rules or provided option.
70
61
  * adds a span with the mutation id
71
62
  */
72
- export const useMutationInt = () => {
73
- const _useMutation = useMakeMutation();
74
- return (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
63
+ export const useMutationInt = (queryInvalidator) => {
64
+ const _useMutation = useMakeMutation(queryInvalidator);
65
+ return ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
75
66
  };
76
- export class LegacyMutationImpl {
77
- getRuntime;
78
- toast;
79
- intl;
80
- constructor(getRuntime, toast, intl) {
81
- this.getRuntime = getRuntime;
82
- this.toast = toast;
83
- this.intl = intl;
84
- }
85
- /**
86
- * Effect results are converted to Exit, so errors are ignored by default.
87
- * you should use the result ref to render errors!
88
- * @deprecated use `Command.fn` and friends instead
89
- */
90
- useSafeMutation = (self, options) => {
91
- const unsafe = _useMutation(self, options);
92
- const mh = options?.mapHandler ?? identity;
93
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
94
- return [
95
- a,
96
- mapHandler(b, Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false }))
97
- ];
98
- };
99
- /** handles errors as toasts and reports defects
100
- * @deprecated use `Command.fn` and friends instead
101
- */
102
- useHandleRequestWithToast = () => {
103
- // eslint-disable-next-line @typescript-eslint/no-this-alias
104
- const self = this;
105
- return handleRequestWithToast;
106
- /**
107
- * Pass a function that returns a Promise.
108
- * Returns an execution function which reports errors as Toast.
109
- */
110
- function handleRequestWithToast(f, id, action, options = {}) {
111
- const actionMessage = self.intl.formatMessage({ id: `action.${action}`, defaultMessage: action });
112
- const defaultWarnMessage = self.intl.formatMessage({ id: "handle.with_warnings" }, { action: actionMessage });
113
- const defaultSuccessMessage = self.intl.formatMessage({ id: "handle.success" }, { action: actionMessage });
114
- const defaultErrorMessage = self.intl.formatMessage({ id: "handle.with_errors" }, { action: actionMessage });
115
- return handleRequest(f, id, action, {
116
- onSuccess: Effect.fnUntraced(function* (a, i) {
117
- const message = options.successMessage ? yield* options.successMessage(a, i) : defaultSuccessMessage
118
- + (S.is(OperationSuccess)(a) && a.message
119
- ? "\n" + a.message
120
- : "");
121
- if (message) {
122
- yield* self.toast.success(message);
123
- }
124
- }),
125
- onFail: Effect.fnUntraced(function* (e, i) {
126
- if (!options.failMessage && e._tag === "OperationFailure") {
127
- yield* self.toast.warning(defaultWarnMessage + e.message
128
- ? "\n" + e.message
129
- : "");
130
- return;
131
- }
132
- const message = options.failMessage
133
- ? yield* options.failMessage(e, i)
134
- : `${defaultErrorMessage}:\n` + renderError(e);
135
- if (message) {
136
- yield* self.toast.error(message);
137
- }
138
- }),
139
- onDefect: Effect.fnUntraced(function* (cause, i) {
140
- const message = options.defectMessage
141
- ? yield* options.defectMessage(cause, i)
142
- : self.intl.formatMessage({ id: "handle.unexpected_error" }, {
143
- action: actionMessage,
144
- error: Cause.pretty(cause)
145
- });
146
- if (message) {
147
- yield* self.toast.error(message);
148
- }
149
- })
150
- });
151
- }
152
- function renderError(e) {
153
- return Match.value(e).pipe(Match.tags({
154
- // HttpErrorRequest: e =>
155
- // this.intl.value.formatMessage(
156
- // { id: "handle.request_error" },
157
- // { error: `${e.error}` },
158
- // ),
159
- // HttpErrorResponse: e =>
160
- // e.response.status >= 500 ||
161
- // e.response.body._tag !== "Some" ||
162
- // !e.response.body.value
163
- // ? this.intl.value.formatMessage(
164
- // { id: "handle.error_response" },
165
- // {
166
- // error: `${
167
- // e.response.body._tag === "Some" && e.response.body.value
168
- // ? parseError(e.response.body.value)
169
- // : "Unknown"
170
- // } (${e.response.status})`,
171
- // },
172
- // )
173
- // : this.intl.value.formatMessage(
174
- // { id: "handle.unexpected_error" },
175
- // {
176
- // error:
177
- // JSON.stringify(e.response.body, undefined, 2) +
178
- // "( " +
179
- // e.response.status +
180
- // ")",
181
- // },
182
- // ),
183
- // ResponseError: e =>
184
- // this.intl.value.formatMessage(
185
- // { id: "handle.response_error" },
186
- // { error: `${e.error}` },
187
- // ),
188
- SchemaError: (e) => {
189
- console.warn(e.toString());
190
- return self.intl.formatMessage({ id: "validation.failed" });
191
- }
192
- }), Match.orElse((e) => `${e.message ?? e._tag ?? e}`));
193
- }
194
- };
195
- /**
196
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
197
- * Returns a tuple with raw Result and execution function which reports success and errors as Toast.
198
- * @deprecated use `Command.fn` and friends instead
199
- */
200
- useAndHandleMutationResult = (self, action, options) => {
201
- const handleRequestWithToast = this.useHandleRequestWithToast();
202
- const handler = self.handler;
203
- const unsafe = _useMutation({
204
- ...self,
205
- handler: Effect.isEffect(handler)
206
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler))
207
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler(...args)))
208
- }, options ? dropUndefinedT(options) : undefined);
209
- const mh = options?.mapHandler ?? identity;
210
- // Effect.tapDefect(reportRuntimeError) handled in toast handler,
211
- const [a, b] = asResult(mapHandler(unsafe, mh));
212
- return tuple(a, handleRequestWithToast(b, self.id, action, options));
213
- };
214
- //
215
- /**
216
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
217
- * Returns a tuple with state ref and execution function which reports success and errors as Toast.
218
- *
219
- * @deprecated use `Command.fn` and friends instead
220
- */
221
- useAndHandleMutation = (self, action, options) => {
222
- const [a, b] = this.useAndHandleMutationResult(self, action, options);
223
- return tuple(computed(() => mutationResultToVue(a.value)), b);
224
- };
225
- /** @deprecated use `Command.fn` and friends instead */
226
- makeUseAndHandleMutation = (defaultOptions) => ((self, action, options) => {
227
- return this.useAndHandleMutation(self, action, { ...defaultOptions, ...options });
228
- });
229
- /**
230
- * The same as @see useAndHandleMutation, but does not display any toasts by default.
231
- * Messages for success, error and defect toasts can be provided in the Options.
232
- * @deprecated use `Command.fn` and friends instead
233
- */
234
- useAndHandleMutationSilently = this.makeUseAndHandleMutation({
235
- successMessage: suppressToast,
236
- failMessage: suppressToast,
237
- defectMessage: suppressToast
238
- });
239
- /**
240
- * The same as @see useAndHandleMutation, but does not act on success, error or defect by default.
241
- * Actions for success, error and defect can be provided in the Options.
242
- * @deprecated use `Command.fn` and friends instead
243
- */
244
- useAndHandleMutationCustom = (self, action, options) => {
245
- const unsafe = _useMutation({
246
- ...self,
247
- handler: Effect.isEffect(self.handler)
248
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler))
249
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler(...args)))
250
- }, options ? dropUndefinedT(options) : undefined);
251
- const mh = options?.mapHandler ?? identity;
252
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
253
- return tuple(computed(() => mutationResultToVue(a.value)), handleRequest(b, self.id, action, {
254
- onSuccess: suppressToast,
255
- onDefect: suppressToast,
256
- onFail: suppressToast,
257
- ...options
258
- }));
259
- };
260
- /**
261
- * Effect results are converted to Exit, so errors are ignored by default.
262
- * you should use the result ref to render errors!
263
- * @deprecated use `Command.fn` and friends instead
264
- */
265
- useSafeMutationWithState = (self, options) => {
266
- const [a, b] = this.useSafeMutation(self, options);
267
- return tuple(computed(() => mutationResultToVue(a.value)), b);
268
- };
269
- /** @deprecated use OmegaForm */
270
- buildFormFromSchema = (s, state, onSubmit) => {
271
- const fields = buildFieldInfoFromFieldsRoot(s).fields;
272
- const schema = S.Struct(Struct.omit(s.fields, ["_tag"]));
273
- const parse = S.decodeUnknownSync(schema);
274
- const isDirty = ref(false);
275
- const isValid = ref(true);
276
- const isLoading = ref(false);
277
- const runPromise = Effect.runPromiseWith(this.getRuntime());
278
- const submit1 = (onSubmit) => async (e) => {
279
- isLoading.value = true;
280
- try {
281
- const r = await e;
282
- if (!r.valid)
283
- return;
284
- return await runPromise(onSubmit(new s(await runPromise(parse(state.value)))));
285
- }
286
- finally {
287
- isLoading.value = false;
288
- }
289
- };
290
- const submit = submit1(onSubmit);
291
- watch(state, (v) => {
292
- // TODO: do better
293
- isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
294
- }, { deep: true });
295
- const submitFromState = Effect.gen(function* () {
296
- return yield* onSubmit(yield* parse(state.value));
297
- });
298
- const submitFromStatePromise = () => runPromise(submitFromState);
299
- return {
300
- fields,
301
- /** optimized for Vuetify v-form submit callback */
302
- submit,
303
- /** optimized for Native form submit callback or general use */
304
- submitFromState,
305
- submitFromStatePromise,
306
- isDirty,
307
- isValid,
308
- isLoading
309
- };
310
- };
311
- }
312
- // @effect-diagnostics-next-line missingEffectServiceDependency:off
313
- export class LegacyMutation extends ServiceMap.Service()("LegacyMutation", {
314
- make: Effect.gen(function* () {
315
- const intl = yield* I18n;
316
- const toast = yield* Toast;
317
- return (getRuntime) => new LegacyMutationImpl(getRuntime, toast, intl);
318
- })
319
- }) {
320
- static DefaultWithoutDependencies = Layer.effect(this, this.make);
321
- static Default = this.DefaultWithoutDependencies;
322
- }
323
67
  export class QueryImpl {
324
68
  getRuntime;
325
- constructor(getRuntime) {
69
+ constructor(getRuntime, getAtomRt, legacyUseQuery) {
326
70
  this.getRuntime = getRuntime;
327
- this.useQuery = makeQuery(this.getRuntime);
71
+ this.useQuery = legacyUseQuery ?? makeQuery(this.getRuntime, getAtomRt);
72
+ this.useQueryNew = makeQueryNew(this.getRuntime, getAtomRt);
73
+ this.useQueryAtom = makeQueryAtom(this.getRuntime, getAtomRt);
74
+ this.useQueryFamily = makeQueryFamily(this.getRuntime, getAtomRt);
75
+ this.useStreamQuery = makeStreamQuery(this.getRuntime, getAtomRt);
76
+ this.useStreamQueryFamily = makeStreamQueryFamily(this.getRuntime, getAtomRt);
77
+ this.useStreamQueryAtom = makeStreamQueryAtom(this.getRuntime, getAtomRt);
78
+ this.useStreamQueryNew = makeStreamQueryNew(this.getRuntime, getAtomRt);
328
79
  }
329
80
  /**
330
81
  * Effect results are passed to the caller, including errors.
331
82
  * @deprecated use client helpers instead (.query())
332
83
  */
333
84
  useQuery;
85
+ useQueryNew;
86
+ useQueryAtom;
87
+ useQueryFamily;
88
+ /**
89
+ * Stream results are accumulated as an array of chunks and returned as reactive state.
90
+ * @deprecated use client helpers instead (.query())
91
+ */
92
+ useStreamQuery;
93
+ useStreamQueryFamily;
94
+ useStreamQueryAtom;
95
+ useStreamQueryNew;
334
96
  /**
335
97
  * The difference with useQuery is that this function will return a Promise you can await in the Setup,
336
98
  * which ensures that either there always is a latest value, or an error occurs on load.
@@ -338,94 +100,235 @@ export class QueryImpl {
338
100
  * @deprecated use client helpers instead (.suspense())
339
101
  */
340
102
  useSuspenseQuery = (self) => {
341
- const runPromise = Effect.runPromiseWith(this.getRuntime());
103
+ const runPromise = makeRunPromise(this.getRuntime());
342
104
  const q = this.useQuery(self);
343
105
  return (argOrOptions, options) => {
344
- const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, { ...options, suspense: true } // experimental_prefetchInRender: true }
345
- );
346
- const isMounted = ref(true);
347
- onBeforeUnmount(() => {
348
- isMounted.value = false;
106
+ const [[resultRef, latestDefinedRef, fetch, uqrt], isMounted, signal] = useScopedSuspenseSetup(() => {
107
+ const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, options);
108
+ const latestDefinedRef = computed(() => {
109
+ const latest = latestRef.value;
110
+ if (latest === undefined) {
111
+ throw new Error("Internal Error: suspense resolved without a latest value");
112
+ }
113
+ return latest;
114
+ });
115
+ return [resultRef, latestDefinedRef, fetch, uqrt];
349
116
  });
350
117
  // @effect-diagnostics effect/missingEffectError:off
351
118
  const eff = Effect.gen(function* () {
352
- // we want to throw on error so that we can catch cancelled error and skip handling it
353
- // what's the difference with just calling `fetch` ?
354
- // we will receive a CancelledError which we will have to ignore in our ErrorBoundary, otherwise the user ends up on an error page even if the user e.g cancelled a navigation
355
- const r = yield* Effect.tryPromise(() => uqrt.suspense()).pipe(Effect.catchTag("UnknownError", (err) => isCancelledError(err.cause)
356
- ? Effect.interrupt
357
- : Effect.die(err.cause)));
119
+ const exit = yield* uqrt.awaitResult().pipe(Effect.exit);
358
120
  if (!isMounted.value) {
359
121
  return yield* Effect.interrupt;
360
122
  }
361
- const result = resultRef.value;
362
- if (AsyncResult.isInitial(result)) {
363
- console.error("Internal Error: Promise should be resolved already", {
364
- self,
365
- argOrOptions,
366
- options,
367
- r,
368
- resultRef
369
- });
370
- return yield* Effect.die("Internal Error: Promise should be resolved already");
123
+ if (Exit.isFailure(exit)) {
124
+ return yield* Exit.failCause(exit.cause);
125
+ }
126
+ return [resultRef, latestDefinedRef, fetch, uqrt];
127
+ });
128
+ return runPromise(eff, { signal });
129
+ };
130
+ };
131
+ useSuspenseQueryNew = (self) => {
132
+ const runPromise = makeRunPromise(this.getRuntime());
133
+ const q = this.useQueryNew(self);
134
+ return (argOrOptions, options) => {
135
+ const [{ view, data }, isMounted, signal] = useScopedSuspenseSetup(() => {
136
+ const view = q(argOrOptions, options);
137
+ const data = computed(() => {
138
+ const latest = view.data.value;
139
+ if (latest === undefined) {
140
+ throw new Error("Internal Error: suspenseNew resolved without a latest value");
141
+ }
142
+ return latest;
143
+ });
144
+ return { view, data };
145
+ });
146
+ // @effect-diagnostics effect/missingEffectError:off
147
+ const eff = Effect.gen(function* () {
148
+ const exit = yield* view.awaitResult().pipe(Effect.exit);
149
+ if (!isMounted.value) {
150
+ return yield* Effect.interrupt;
371
151
  }
372
- if (AsyncResult.isFailure(result)) {
373
- return yield* Exit.failCause(result.cause);
152
+ if (Exit.isFailure(exit)) {
153
+ return yield* Exit.failCause(exit.cause);
374
154
  }
375
- return [resultRef, latestRef, fetch, uqrt];
155
+ const fetch = (_options) => view.refetch();
156
+ const handle = {
157
+ awaitResult: view.awaitResult,
158
+ refetch: view.refetch,
159
+ refresh: view.refresh,
160
+ registry: view.registry,
161
+ atom: view.atom
162
+ };
163
+ return Object.assign([
164
+ view.result,
165
+ data,
166
+ fetch,
167
+ handle
168
+ ], {
169
+ ...view,
170
+ data
171
+ });
376
172
  });
377
- return runPromise(eff);
173
+ return runPromise(eff, { signal });
378
174
  };
379
175
  };
380
176
  }
381
177
  // somehow mrt.runtimeEffect doesnt work sync, but this workaround works fine? not sure why though as the layers are generally only sync
382
- const managedRuntimeRt = (mrt) => mrt.runSync(Effect.services());
178
+ const managedRuntimeRt = (mrt) => mrt.runSync(Effect.context());
179
+ const makeResolvedAtomQueryInvalidator = (getContext) => {
180
+ let reactivity;
181
+ const getReactivity = () => {
182
+ if (reactivity !== undefined)
183
+ return reactivity;
184
+ const service = Context.getOrUndefined(getContext(), Reactivity.Reactivity);
185
+ if (service === undefined) {
186
+ throw new Error("Reactivity service is missing from the client runtime");
187
+ }
188
+ return reactivity = service;
189
+ };
190
+ return {
191
+ invalidateAndAwait: (keys) => invalidateAndAwait(keys).pipe(Effect.provideService(Reactivity.Reactivity, getReactivity()))
192
+ };
193
+ };
383
194
  export const makeClient = (
384
195
  // global, but only accessible after startup has completed
385
- getBaseMrt, clientFor_, rtHooks) => {
386
- const getRt = Effect.services();
196
+ getBaseMrt, clientFor_, rtHooks, options) => {
387
197
  const getBaseRt = () => managedRuntimeRt(getBaseMrt());
388
198
  const makeCommand = makeUseCommand(rtHooks);
389
- const makeMutation = Effect.gen(function* () {
390
- const mut = yield* LegacyMutation;
391
- return mut(() => getBaseMrt().runSync(getRt));
392
- });
393
199
  let cmd;
394
200
  const useCommand = () => cmd ??= getBaseMrt().runSync(makeCommand);
395
- let mut;
396
- const getMutation = () => mut ??= getBaseMrt().runSync(makeMutation);
201
+ // one AtomRuntime for the query engine, built lazily from the live app context;
202
+ // shares the ManagedRuntime memoMap so layers + Reactivity are the same instances.
203
+ let atomRt;
204
+ const getAtomRt = () => (atomRt ??= makeAtomClientRuntime(() => Layer.succeedContext(getBaseRt()), getBaseMrt().memoMap));
205
+ const legacyQueryEngine = options?.legacyQueryEngine ?? "tanstack";
206
+ let tanstackQueryClient;
207
+ const getTanstackQueryClient = () => tanstackQueryClient ??= makeTanstackQueryClient();
208
+ const atomInvalidator = makeResolvedAtomQueryInvalidator(getBaseRt);
209
+ const queryInvalidator = legacyQueryEngine === "tanstack"
210
+ ? combineQueryInvalidators(atomInvalidator, makeTanstackQueryInvalidator(getTanstackQueryClient()))
211
+ : atomInvalidator;
212
+ setQueryCacheUpdater(legacyQueryEngine === "tanstack"
213
+ ? combineQueryCacheUpdaters(makeTanstackQueryCacheUpdater(getTanstackQueryClient()), optionalAtomQueryCacheUpdater)
214
+ : atomQueryCacheUpdater);
397
215
  let m;
398
- const useMutation = () => m ??= useMutationInt();
399
- const keys = [
400
- "useSafeMutationWithState",
401
- "useAndHandleMutation",
402
- "useAndHandleMutationResult",
403
- "useAndHandleMutationSilently",
404
- "useAndHandleMutationCustom",
405
- "makeUseAndHandleMutation",
406
- "useHandleRequestWithToast",
407
- "buildFormFromSchema",
408
- "useSafeMutation"
409
- ];
410
- const mutations = keys.reduce((prev, cur) => {
411
- ;
412
- prev[cur] = ((...args) => {
413
- return getMutation()[cur](...args);
414
- });
415
- return prev;
416
- }, {});
417
- const query = new QueryImpl(getBaseRt);
216
+ const useMutation = () => m ??= useMutationInt(queryInvalidator);
217
+ let sm2;
218
+ const useStreamMutation2 = () => sm2 ??= makeStreamMutation2(queryInvalidator);
219
+ const legacyUseQuery = legacyQueryEngine === "tanstack"
220
+ ? makeTanstackQuery(getBaseRt, getTanstackQueryClient())
221
+ : undefined;
222
+ const query = new QueryImpl(getBaseRt, getAtomRt, legacyUseQuery);
418
223
  const useQuery = query.useQuery;
224
+ const useQueryNew = query.useQueryNew;
225
+ const useQueryAtom = query.useQueryAtom;
226
+ const useQueryFamily = query.useQueryFamily;
419
227
  const useSuspenseQuery = query.useSuspenseQuery;
228
+ const useSuspenseQueryNew = query.useSuspenseQueryNew;
229
+ const useStreamQuery = query.useStreamQuery;
230
+ const useStreamQueryFamily = query.useStreamQueryFamily;
231
+ const useStreamQueryAtom = query.useStreamQueryAtom;
232
+ const useStreamQueryNew = query.useStreamQueryNew;
233
+ const isQueryHandler = (handler) => handler.Request.type === "query" && !handler.Request.stream;
234
+ const isStreamQueryHandler = (handler) => handler.Request.type === "query" && handler.Request.stream;
235
+ const queryHelpersFor = (handler) => ({
236
+ family: useQueryFamily(handler),
237
+ atom: useQueryAtom(handler),
238
+ query: useQuery(handler),
239
+ queryNew: useQueryNew(handler),
240
+ suspense: useSuspenseQuery(handler),
241
+ suspenseNew: useSuspenseQueryNew(handler)
242
+ });
243
+ const streamQueryHelpersFor = (handler) => ({
244
+ family: useStreamQueryFamily(handler),
245
+ atom: useStreamQueryAtom(handler),
246
+ query: useStreamQuery(handler),
247
+ queryNew: useStreamQueryNew(handler)
248
+ });
249
+ const projectQueryFor = (handler) => (projectionSchema) => {
250
+ const successSchema = handler.Request.success;
251
+ const projectionHash = projectionSchemaHash(projectionSchema);
252
+ const projected = projectHandler(handler.handler, successSchema, projectionSchema);
253
+ const projectedHandler = {
254
+ handler: projected,
255
+ id: handler.id,
256
+ Request: handler.Request,
257
+ queryKeyProjectionHash: projectionHash
258
+ };
259
+ if (handler.options) {
260
+ return {
261
+ request: projected,
262
+ ...queryHelpersFor({ ...projectedHandler, options: handler.options })
263
+ };
264
+ }
265
+ return {
266
+ request: projected,
267
+ ...queryHelpersFor(projectedHandler)
268
+ };
269
+ };
270
+ const mergeInvalidation = (a, b) => {
271
+ if (!a && !b) {
272
+ return undefined;
273
+ }
274
+ return (defaultKey, name, input, output) => [
275
+ ...(a?.(defaultKey, name, input, output) ?? []),
276
+ ...(b?.(defaultKey, name, input, output) ?? [])
277
+ ];
278
+ };
279
+ const withDefaultInvalidation = (mut, defaultInvalidation) => {
280
+ if (!defaultInvalidation)
281
+ return mut;
282
+ const apply = (callerOpts) => ({
283
+ ...callerOpts,
284
+ queryInvalidation: callerOpts?.queryInvalidation
285
+ ? mergeInvalidation(defaultInvalidation, callerOpts.queryInvalidation)
286
+ : defaultInvalidation
287
+ });
288
+ return (input, callerOpts) => mut(input, apply(callerOpts));
289
+ };
290
+ const makeQueryResources = (resources) => {
291
+ if (!resources) {
292
+ return {};
293
+ }
294
+ return resources;
295
+ };
420
296
  const mapQuery = (client) => {
421
297
  const queries = Struct.keys(client).reduce((acc, key) => {
422
- ;
423
- acc[camelCase(key) + "Query"] = Object.assign(useQuery(client[key]), {
424
- id: client[key].id
425
- });
426
- acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(client[key]), {
427
- id: client[key].id
428
- });
298
+ const handler = client[key];
299
+ if (isQueryHandler(handler)) {
300
+ Object.assign(acc, {
301
+ [camelCase(key) + "QueryFamily"]: Object.assign(useQueryFamily(handler), {
302
+ id: client[key].id
303
+ })
304
+ });
305
+ acc[camelCase(key) + "Query"] = Object.assign(useQuery(handler), {
306
+ id: client[key].id
307
+ });
308
+ acc[camelCase(key) + "QueryNew"] = Object.assign(useQueryNew(handler), {
309
+ id: client[key].id
310
+ });
311
+ acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(handler), {
312
+ id: client[key].id
313
+ });
314
+ acc[camelCase(key) + "SuspenseQueryNew"] = Object.assign(useSuspenseQueryNew(handler), {
315
+ id: client[key].id
316
+ });
317
+ }
318
+ else if (isStreamQueryHandler(handler)) {
319
+ const streamHelpers = streamQueryHelpersFor(handler);
320
+ Object.assign(acc, {
321
+ [camelCase(key) + "QueryFamily"]: Object.assign(streamHelpers.family, {
322
+ id: client[key].id
323
+ }),
324
+ [camelCase(key) + "Query"]: Object.assign(streamHelpers.query, {
325
+ id: client[key].id
326
+ }),
327
+ [camelCase(key) + "QueryNew"]: Object.assign(streamHelpers.queryNew, {
328
+ id: client[key].id
329
+ })
330
+ });
331
+ }
429
332
  return acc;
430
333
  }, {});
431
334
  return queries;
@@ -433,66 +336,154 @@ getBaseMrt, clientFor_, rtHooks) => {
433
336
  const mapRequest = (client) => {
434
337
  const Command = useCommand();
435
338
  const mutations = Struct.keys(client).reduce((acc, key) => {
339
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
340
+ return acc;
341
+ }
436
342
  const mut = client[key].handler;
437
- const fn = Command.fn(client[key].id);
438
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
439
- acc[camelCase(key) + "Request"] = Object.assign(mut, fn, // to get the i18n key etc.
440
- { wrap, fn });
343
+ const request = mut;
344
+ const fn = (options) => Command.fn(client[key].id, options);
345
+ const wrap = (options) => Command.wrap({ mutate: request, id: client[key].id }, options);
346
+ acc[camelCase(key) + "Request"] = Object.assign(mut, Command.fn(client[key].id), // to get the i18n key etc.
347
+ { wrap, fn, request });
441
348
  return acc;
442
349
  }, {});
443
350
  return mutations;
444
351
  };
445
- const mapMutation = (client) => {
352
+ const mapMutation = (client, queryInvalidation, invalidationResources) => {
446
353
  const Command = useCommand();
447
354
  const mutation = useMutation();
355
+ const invalidation = queryInvalidation?.(client);
356
+ const queryResources = makeQueryResources(invalidationResources);
448
357
  const mutations = Struct.keys(client).reduce((acc, key) => {
449
- const mut = mutation(client[key]);
450
- const fn = Command.fn(client[key].id);
451
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
452
- acc[camelCase(key) + "Mutation"] = Object.assign(mut, fn, // to get the i18n key etc.
453
- { wrap, fn });
358
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
359
+ return acc;
360
+ }
361
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
362
+ const fromRequest = fromRequestConfig
363
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
364
+ : undefined;
365
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
366
+ const makeProjectedMutation = (handler) => {
367
+ const mut = withDefaultInvalidation(mutation(handler), mergedInvalidation);
368
+ return Object.assign(mut, {
369
+ wrap: (options) => Command.wrap({ mutate: mut, id: client[key].id }, options),
370
+ fn: (options) => Command.fn(client[key].id, options),
371
+ project: (projectionSchema) => {
372
+ const projected = {
373
+ ...handler,
374
+ handler: projectHandler(handler.handler, client[key].Request.success, projectionSchema)
375
+ };
376
+ return makeProjectedMutation(projected);
377
+ }
378
+ });
379
+ };
380
+ acc[camelCase(key) + "Mutation"] = makeProjectedMutation(client[key]);
454
381
  return acc;
455
382
  }, {});
456
383
  return mutations;
457
384
  };
458
385
  // make available .query, .suspense and .mutate for each operation
459
386
  // and a .helpers with all mutations and queries
460
- const mapClient = (queryInvalidation) => (client) => {
387
+ const mapClient = (queryInvalidation, invalidationResources) => (client) => {
461
388
  const Command = useCommand();
462
389
  const mutation = useMutation();
463
390
  const invalidation = queryInvalidation?.(client);
391
+ const queryResources = makeQueryResources(invalidationResources);
464
392
  const extended = Struct.keys(client).reduce((acc, key) => {
393
+ const handler = client[key];
394
+ const requestType = handler.Request.type;
395
+ const isStream = handler.Request.stream;
465
396
  const fn = Command.fn(client[key].id);
466
- const mutate = extendM(mutation(client[key], invalidation?.[key] ? { queryInvalidation: invalidation[key] } : undefined), (mutate) => Object.assign(mutate, fn, // to get the i18n key etc.
467
- {
468
- wrap: Command.wrap({ mutate: Effect.isEffect(mutate) ? () => mutate : mutate, id: client[key].id }),
469
- fn
470
- }));
471
- const h_ = client[key].handler;
472
- const h = Effect.isEffect(h_)
473
- ? () => h_
474
- : (...args) => h_(...args);
475
- acc[key] = Object.assign(h, client[key], fn, // to get the i18n key etc.
476
- {
477
- mutate,
478
- query: useQuery(client[key]),
479
- suspense: useSuspenseQuery(client[key]),
480
- wrap: Command.wrap({ mutate: h, id: client[key].id }),
481
- fn
482
- });
397
+ const h_ = handler.handler;
398
+ const request = h_;
399
+ acc[key] = Object.assign(isQueryHandler(handler)
400
+ ? {
401
+ ...handler,
402
+ request,
403
+ ...queryHelpersFor(handler),
404
+ project: projectQueryFor(handler)
405
+ }
406
+ : isStreamQueryHandler(handler)
407
+ ? {
408
+ ...client[key],
409
+ request,
410
+ ...streamQueryHelpersFor(handler)
411
+ }
412
+ : requestType === "command" && isStream
413
+ ? (() => {
414
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
415
+ const fromRequest = fromRequestConfig
416
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
417
+ : undefined;
418
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
419
+ const streamCmd = useCommand();
420
+ return {
421
+ ...client[key],
422
+ request,
423
+ query: useStreamQuery(client[key]),
424
+ fn: (options) => streamCmd.streamFn(client[key].id, options),
425
+ mutate: (() => {
426
+ const sm2Act = useStreamMutation2()(client[key], mergedInvalidation);
427
+ const sm2Handler = (input, _ctx) => sm2Act(input);
428
+ return Object.assign(sm2Act, {
429
+ id: client[key].id,
430
+ wrap: (options) => streamCmd.streamWrap(sm2Handler, client[key].id, options)
431
+ });
432
+ })()
433
+ };
434
+ })()
435
+ : {
436
+ mutate: ((handler) => {
437
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
438
+ const fromRequest = fromRequestConfig
439
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
440
+ : undefined;
441
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
442
+ const makeProjectedMutation = (h) => {
443
+ const mutate = withDefaultInvalidation(mutation(h), mergedInvalidation);
444
+ return Object.assign(mutate, {
445
+ wrap: (options) => Command.wrap({
446
+ mutate,
447
+ id: client[key].id
448
+ }, options),
449
+ fn: (options) => Command.fn(client[key].id, options),
450
+ project: (projectionSchema) => {
451
+ const projected = {
452
+ ...h,
453
+ handler: projectHandler(h.handler, client[key].Request.success, projectionSchema)
454
+ };
455
+ return makeProjectedMutation(projected);
456
+ }
457
+ });
458
+ };
459
+ return makeProjectedMutation(handler);
460
+ })(client[key]),
461
+ ...client[key],
462
+ ...fn, // to get the i18n key etc.
463
+ request,
464
+ fn: (options) => Command.fn(client[key].id, options),
465
+ wrap: (options) => Command.wrap({ mutate: h_, id: client[key].id }, options)
466
+ });
483
467
  return acc;
484
468
  }, {});
485
- return Object.assign(extended, { helpers: { ...mapRequest(client), ...mapMutation(client), ...mapQuery(client) } });
469
+ return Object.assign(extended, {
470
+ helpers: {
471
+ ...mapRequest(client),
472
+ ...mapMutation(client, queryInvalidation, invalidationResources),
473
+ ...mapQuery(client)
474
+ }
475
+ });
486
476
  };
487
477
  // TODO: Clean up this delay initialisation messs
488
478
  // TODO; invalidateQueries should perhaps be configured in the Request impl themselves?
489
- const clientFor__ = (m, queryInvalidation) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation))));
479
+ const clientFor__ = (m, queryInvalidation, invalidationResources) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation, invalidationResources))));
490
480
  // delay client creation until first access
491
481
  // the idea is that we don't need the useNuxtApp().$runtime (only available at later initialisation stage)
492
482
  // until we are at a place where it is available..
493
- const clientFor = (m, queryInvalidation) => {
483
+ const clientFor = (m, ...args) => {
484
+ const [queryInvalidation, invalidationResources] = args;
494
485
  let client = undefined;
495
- const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation));
486
+ const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation, invalidationResources));
496
487
  // initialize on first use..
497
488
  const proxy = Struct.keys(m).concat(["helpers"]).reduce((acc, key) => {
498
489
  Object.defineProperty(acc, key, {
@@ -508,15 +499,12 @@ getBaseMrt, clientFor_, rtHooks) => {
508
499
  }, {});
509
500
  return proxy;
510
501
  };
511
- const legacy = {
512
- ...mutations,
513
- ...query
514
- };
515
502
  const Command = {
516
503
  ...{
517
504
  // delay initialisation until first use...
518
505
  fn: (...args) => useCommand().fn(...args),
519
506
  wrap: (...args) => useCommand().wrap(...args),
507
+ streamFn: (...args) => useCommand().streamFn(...args),
520
508
  alt: (...args) => useCommand().alt(...args),
521
509
  alt2: (...args) => useCommand().alt2(...args)
522
510
  },
@@ -526,7 +514,7 @@ getBaseMrt, clientFor_, rtHooks) => {
526
514
  Command,
527
515
  useCommand,
528
516
  clientFor,
529
- legacy
517
+ tanstackQueryClient: getTanstackQueryClient()
530
518
  };
531
519
  };
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQXVELGdCQUFnQixFQUEwRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQXVCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHeEgsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckUsT0FBTyxFQUF5QixnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFMUQsT0FBTyxLQUFLLFdBQVcsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixlQUFlLEVBQVksR0FBRyxFQUFFLEtBQUssRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDekcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzdDLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDekYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQy9DLE9BQU8sRUFB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
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBS3ZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFFbkMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFHbkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFFdkMsT0FBTyxLQUFLLFVBQVUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixXQUFXLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQW9CLE1BQU0sS0FBSyxDQUFBO0FBQ3JILE9BQU8sRUFBMEIsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNsRyxPQUFPLEVBQWtCLGVBQWUsRUFBaUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVySixPQUFPLEVBQTBCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBMEIsWUFBWSxFQUFFLG1CQUFtQixFQUFtRCxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDek0sT0FBTyxFQUFFLHFCQUFxQixFQUE0Qix5QkFBeUIsRUFBMkMsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSw2QkFBNkIsRUFBaUQsb0JBQW9CLEVBQStFLE1BQU0sWUFBWSxDQUFBO0FBQzNjLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFLN0MsTUFBTSxzQkFBc0IsR0FBRyxDQUFJLEtBQWMsRUFBRSxFQUFFO0lBQ25ELE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFBO0lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDbkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLElBQUksT0FBTztZQUFFLE9BQU07UUFDbkIsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNkLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDZCxDQUFDLENBQUE7SUFDRCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXBCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQVUsQ0FBQTtBQUN2RCxDQUFDLENBQUE7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxjQUFjLEdBQUcsQ0FRckIsT0FBeUMsRUFDekMsYUFBNEIsRUFDNUIsZ0JBQTRCLEVBQzVCLEVBQUU7SUFDRixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDdEQsT0FBTyxDQUFDLENBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNsRixDQUFDLENBQUE7QUFFRCxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQXdTN0UsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUE7QUFFdkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFvQixFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQ3RELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBaUMsRUFBRSxFQUFFLENBQ2pELE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvRSxPQUFPLENBQUMsS0FBVSxFQUFFLE9BQTZCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFDakYsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBd0IsQ0FBQyxDQVEvQyxJQUF3RCxFQUN4RCxFQUFFLENBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FDWCxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFXLENBQUMsQ0FBQyxFQUM3QyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ2hCLENBQVEsQ0FBQTtBQUVYOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxnQkFBa0MsRUFBdUIsRUFBRTtJQUN4RixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN0RCxPQUFPLENBQUMsQ0FRTixJQUF3RCxFQUN4RCxFQUFFLENBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FDWCxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFXLENBQUMsQ0FBQyxFQUM3QyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ2hCLENBQVEsQ0FBQTtBQUNiLENBQUMsQ0FBQTtBQVlELE1BQU0sT0FBTyxTQUFTO0lBQ1gsVUFBVSxDQUEwQjtJQUU3QyxZQUNFLFVBQW9DLEVBQ3BDLFNBQWtDLEVBQ2xDLGNBQWdEO1FBRWhELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ2pFLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDakUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDN0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUNEOzs7T0FHRztJQUNNLFFBQVEsQ0FBaUM7SUFFekMsV0FBVyxDQUFvQztJQUUvQyxZQUFZLENBQXFDO0lBRWpELGNBQWMsQ0FBdUM7SUFFOUQ7OztPQUdHO0lBQ00sY0FBYyxDQUF1QztJQUVyRCxvQkFBb0IsQ0FBNkM7SUFFakUsa0JBQWtCLENBQTJDO0lBRTdELGlCQUFpQixDQUEwQztJQUVwRTs7Ozs7T0FLRztJQUNNLGdCQUFnQixHQThCckIsQ0FDRixJQUF3RCxFQUN4RCxFQUFFO1FBQ0YsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDN0IsT0FBTyxDQUNMLFlBQWdDLEVBQ2hDLE9BQXlFLEVBQ3pFLEVBQUU7WUFDRixNQUFNLENBQ0osQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUMxQyxTQUFTLEVBQ1QsTUFBTSxDQUNQLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxFQUFFO2dCQUM5QixNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFRLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDM0UsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQVEsR0FBRyxFQUFFO29CQUM1QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO29CQUM5QixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFBO29CQUM3RSxDQUFDO29CQUNELE9BQU8sTUFBTSxDQUFBO2dCQUNmLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBVSxDQUFBO1lBQzVELENBQUMsQ0FBQyxDQUFBO1lBRUYsb0RBQW9EO1lBQ3BELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO2dCQUNoQyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN6QixPQUFPLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUMxQyxDQUFDO2dCQUVELE9BQU8sQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBVSxDQUFBO1lBQzVELENBQUMsQ0FBQyxDQUFBO1lBRUYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQyxDQUFDLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFUSxtQkFBbUIsR0FleEIsQ0FDRixJQUF3RCxFQUN4RCxFQUFFO1FBQ0YsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEMsT0FBTyxDQUNMLFlBQWdDLEVBQ2hDLE9BQXVDLEVBQ3ZDLEVBQUU7WUFDRixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLHNCQUFzQixDQUFDLEdBQUcsRUFBRTtnQkFDdEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFRLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFRLEdBQUcsRUFBRTtvQkFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUE7b0JBQzlCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7b0JBQ2hGLENBQUM7b0JBQ0QsT0FBTyxNQUFNLENBQUE7Z0JBQ2YsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtZQUN2QixDQUFDLENBQUMsQ0FBQTtZQUVGLG9EQUFvRDtZQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQTtnQkFDaEMsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDMUMsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLFFBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFDM0QsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUE7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQjtvQkFDRSxJQUFJLENBQUMsTUFBTTtvQkFDWCxJQUFJO29CQUNKLEtBQUs7b0JBQ0wsTUFBTTtpQkFDRSxFQUNWO29CQUNFLEdBQUcsSUFBSTtvQkFDUCxJQUFJO2lCQUNMLENBQ0YsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUFBO1lBRUYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQyxDQUFDLENBQUE7SUFDSCxDQUFDLENBQUE7Q0FDRjtBQUVELHdJQUF3STtBQUN4SSxNQUFNLGdCQUFnQixHQUFHLENBQU8sR0FBd0MsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFLLENBQUMsQ0FBQTtBQTBEN0csTUFBTSxnQ0FBZ0MsR0FBRyxDQUFJLFVBQW9DLEVBQW9CLEVBQUU7SUFDckcsSUFBSSxVQUEyRSxDQUFBO0lBQy9FLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUN6QixJQUFJLFVBQVUsS0FBSyxTQUFTO1lBQUUsT0FBTyxVQUFVLENBQUE7UUFDL0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0UsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFBO1FBQzFFLENBQUM7UUFDRCxPQUFPLFVBQVUsR0FBRyxPQUFPLENBQUE7SUFDN0IsQ0FBQyxDQUFBO0lBRUQsT0FBTztRQUNMLGtCQUFrQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDM0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FDOUQ7S0FDSixDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0FBQ3hCLDBEQUEwRDtBQUMxRCxVQUFpRSxFQUNqRSxVQUEwRCxFQUMxRCxPQUF5QyxFQUN6QyxPQUEyQixFQUMzQixFQUFFO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQWMsT0FBTyxDQUFDLENBQUE7SUFDeEQsSUFBSSxHQUF1QyxDQUFBO0lBQzNDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFbEUsZ0ZBQWdGO0lBQ2hGLG1GQUFtRjtJQUNuRixJQUFJLE1BQXFDLENBQUE7SUFDekMsTUFBTSxTQUFTLEdBQ2IsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFekcsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksVUFBVSxDQUFBO0lBQ2xFLElBQUksbUJBQTJFLENBQUE7SUFDL0UsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsS0FBSyx1QkFBdUIsRUFBRSxDQUFBO0lBQ3RGLE1BQU0sZUFBZSxHQUFHLGdDQUFnQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLEtBQUssVUFBVTtRQUN2RCxDQUFDLENBQUMsd0JBQXdCLENBQUMsZUFBZSxFQUFFLDRCQUE0QixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUNuRyxDQUFDLENBQUMsZUFBZSxDQUFBO0lBQ25CLG9CQUFvQixDQUNsQixpQkFBaUIsS0FBSyxVQUFVO1FBQzlCLENBQUMsQ0FBQyx5QkFBeUIsQ0FDekIsNkJBQTZCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUN2RCw2QkFBNkIsQ0FDOUI7UUFDRCxDQUFDLENBQUMscUJBQXFCLENBQzFCLENBQUE7SUFFRCxJQUFJLENBQW9DLENBQUE7SUFDeEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRWhFLElBQUksR0FBMkMsQ0FBQTtJQUMvQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTlFLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixLQUFLLFVBQVU7UUFDckQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7SUFDL0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQTtJQUNyQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBQ3ZDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUE7SUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUE7SUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUE7SUFDckQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQTtJQUMzQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQTtJQUN2RCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQTtJQUNuRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQTtJQUVqRCxNQUFNLGNBQWMsR0FBRyxDQUFzQyxPQUFVLEVBQThCLEVBQUUsQ0FDckcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFFN0QsTUFBTSxvQkFBb0IsR0FBRyxDQUFzQyxPQUFVLEVBQW9DLEVBQUUsQ0FDakgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFBO0lBRTVELE1BQU0sZUFBZSxHQUFHLENBQ3RCLE9BQTRELEVBQzVELEVBQUUsQ0FBQyxDQUFDO1FBQ0osTUFBTSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDM0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDeEIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDOUIsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUNuQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDO0tBQzFDLENBQUMsQ0FBQTtJQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsT0FBa0UsRUFDbEUsRUFBRSxDQUFDLENBQUM7UUFDSixNQUFNLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxDQUFDO1FBQ3JDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDakMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDOUIsUUFBUSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztLQUNyQyxDQUFDLENBQUE7SUFFRixNQUFNLGVBQWUsR0FBRyxDQU90QixPQUE0RCxFQUM1RCxFQUFFLENBQ0osQ0FBaUUsZ0JBQTRCLEVBQUUsRUFBRTtRQUMvRixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QyxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzdELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLHNCQUFzQixFQUFFLGNBQWM7U0FDdkMsQ0FBQTtRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLEdBQUcsZUFBZSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3RFLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTztZQUNMLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1NBQ3JDLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLENBQTRDLEVBQzVDLENBQTRDLEVBQ1UsRUFBRTtRQUN4RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDYixPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2hELENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLEdBQVEsRUFDUixtQkFBOEQsRUFDOUQsRUFBRTtRQUNGLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPLEdBQUcsQ0FBQTtRQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLFVBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsR0FBRyxVQUFVO1lBQ2IsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGlCQUFpQjtnQkFDOUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLG1CQUFtQjtTQUN4QixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDeEYsQ0FBQyxDQUFBO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxDQUEwQyxTQUFnQyxFQUFFLEVBQUU7UUFDdkcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUE2QyxDQUFBO1FBQ3RELENBQUM7UUFDRCxPQUFPLFNBQW9ELENBQUE7SUFDN0QsQ0FBQyxDQUFBO0lBRUQsTUFBTSxRQUFRLEdBQUcsQ0FDZixNQUFxQixFQUNyQixFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ3hDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1gsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzNCLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNqQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDdkUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3FCQUNuQixDQUFDO2lCQUNILENBQUMsQ0FDRDtnQkFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN6RSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7aUJBQ25CLENBQUMsQ0FDRDtnQkFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMvRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7aUJBQ25CLENBQUMsQ0FDRDtnQkFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3pGLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtpQkFDbkIsQ0FBQyxDQUNEO2dCQUFDLEdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFDNUI7b0JBQ0UsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2lCQUNuQixDQUNGLENBQUE7WUFDSCxDQUFDO2lCQUFNLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNqQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7d0JBQ3BFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtxQkFDbkIsQ0FBQztvQkFDRixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7d0JBQzdELEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtxQkFDbkIsQ0FBQztvQkFDRixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7d0JBQ25FLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtxQkFDbkIsQ0FBQztpQkFDSCxDQUFDLENBQUE7WUFDSixDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUF5REcsQ0FDSixDQUFBO1FBQ0QsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQyxDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBcUIsRUFDckIsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFBO1FBQzVCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUMxQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDN0UsT0FBTyxHQUFHLENBQUE7WUFDWixDQUFDO1lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtZQUMvQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUE7WUFDbkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNqRSxNQUFNLElBQUksR0FBRyxDQUFDLE9BQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FDN0Y7WUFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3ZELEdBQUcsRUFDSCxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSwyQkFBMkI7WUFDdkQsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUN0QixDQUFBO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUFRQyxDQUNGLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixNQUFxQixFQUNyQixpQkFBbUUsRUFDbkUscUJBQW1ELEVBQ25ELEVBQUU7UUFDRixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQTtRQUM1QixNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQTtRQUM5QixNQUFNLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2hELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDaEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQzFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxPQUFPLEdBQUcsQ0FBQTtZQUNaLENBQUM7WUFDRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsb0JBQW9CLENBRTlELENBQUE7WUFDYixNQUFNLFdBQVcsR0FBRyxpQkFBaUI7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBb0IsRUFBRSxLQUFhLEVBQUUsS0FBZSxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUM1RSxpQkFBaUIsQ0FDZixVQUFVLEVBQ1YsY0FBdUIsRUFDdkIsS0FBYyxFQUNkLE1BQWUsQ0FDTyxDQUFDO2dCQUMzQixDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ2IsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUM5RSxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBWSxFQUFPLEVBQUU7Z0JBQ2xELE1BQU0sR0FBRyxHQUFRLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO2dCQUMvRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDO29CQUNuRixFQUFFLEVBQUUsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7b0JBQzFELE9BQU8sRUFBRSxDQUFDLGdCQUFxQixFQUFFLEVBQUU7d0JBQ2pDLE1BQU0sU0FBUyxHQUFHOzRCQUNoQixHQUFHLE9BQU87NEJBQ1YsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDO3lCQUN4RixDQUFBO3dCQUNELE9BQU8scUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQ3pDLENBQUM7aUJBQ0YsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUNBO1lBQUMsR0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFRLENBQUMsQ0FBQTtZQUN0RixPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsRUFDRCxFQVFDLENBQ0YsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtJQUVELGtFQUFrRTtJQUNsRSxnREFBZ0Q7SUFDaEQsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsaUJBQW1FLEVBQ25FLHFCQUFtRCxFQUNuRCxFQUFFLENBQ0osQ0FDRSxNQUFxQixFQUNyQixFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUE7UUFDNUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUE7UUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUN6QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMzQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtZQUN4QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtZQUN2QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1lBQzFCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FDakI7WUFBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsQ0FBQyxDQUFDO29CQUNBLEdBQUcsT0FBTztvQkFDVixPQUFPO29CQUNQLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztvQkFDM0IsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xDO2dCQUNELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7b0JBQy9CLENBQUMsQ0FBQzt3QkFDQSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBQ2QsT0FBTzt3QkFDUCxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztxQkFDbEM7b0JBQ0QsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksUUFBUTt3QkFDdkMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFOzRCQUNOLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsQ0FFOUQsQ0FBQTs0QkFDYixNQUFNLFdBQVcsR0FBRyxpQkFBaUI7Z0NBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBb0IsRUFBRSxLQUFhLEVBQUUsS0FBZSxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUM1RSxpQkFBaUIsQ0FDZixVQUFVLEVBQ1YsY0FBdUIsRUFDdkIsS0FBYyxFQUNkLE1BQWUsQ0FDTyxDQUFDO2dDQUMzQixDQUFDLENBQUMsU0FBUyxDQUFBOzRCQUNiLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7NEJBQzlFLE1BQU0sU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFBOzRCQUM5QixPQUFPO2dDQUNMLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQ0FDZCxPQUFPO2dDQUNQLEtBQUssRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBUSxDQUFDO2dDQUN6QyxFQUFFLEVBQUUsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQVMsRUFBRSxPQUFPLENBQUM7Z0NBQ3pFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtvQ0FDWixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO29DQUMzRSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQVUsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFFLE1BQTBCLENBQUMsS0FBSyxDQUFDLENBQUE7b0NBQ2hGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0NBQzNCLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3Q0FDbEIsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBUyxFQUFFLE9BQU8sQ0FBQztxQ0FDMUYsQ0FBQyxDQUFBO2dDQUNKLENBQUMsQ0FBQyxFQUFFOzZCQUNMLENBQUE7d0JBQ0gsQ0FBQyxDQUFDLEVBQUU7d0JBQ0osQ0FBQyxDQUFDOzRCQUNBLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0NBQ3hCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsQ0FFOUQsQ0FBQTtnQ0FDYixNQUFNLFdBQVcsR0FBRyxpQkFBaUI7b0NBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBb0IsRUFBRSxLQUFhLEVBQUUsS0FBZSxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUM1RSxpQkFBaUIsQ0FDZixVQUFVLEVBQ1YsY0FBdUIsRUFDdkIsS0FBYyxFQUNkLE1BQWUsQ0FDTyxDQUFDO29DQUMzQixDQUFDLENBQUMsU0FBUyxDQUFBO2dDQUNiLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0NBQzlFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFNLEVBQU8sRUFBRTtvQ0FDNUMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUE7b0NBQ3ZFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsTUFBTSxFQUNOO3dDQUNFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxFQUFFLENBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUM7NENBQ1gsTUFBTTs0Q0FDTixFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7eUNBQ25CLEVBQUUsT0FBTyxDQUFDO3dDQUNiLEVBQUUsRUFBRSxDQUFDLE9BQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQzt3Q0FDMUQsT0FBTyxFQUFFLENBQUMsZ0JBQXFCLEVBQUUsRUFBRTs0Q0FDakMsTUFBTSxTQUFTLEdBQUc7Z0RBQ2hCLEdBQUcsQ0FBQztnREFDSixPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7NkNBQ2xGLENBQUE7NENBQ0QsT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3Q0FDekMsQ0FBQztxQ0FDRixDQUNGLENBQUE7Z0NBQ0gsQ0FBQyxDQUFBO2dDQUNELE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7NEJBQ3ZDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQzs0QkFDdEIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDOzRCQUNkLEdBQUcsRUFBRSxFQUFFLDJCQUEyQjs0QkFDbEMsT0FBTzs0QkFDUCxFQUFFLEVBQUUsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7NEJBQzFELElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7eUJBQ25GLENBQ0osQ0FBQTtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxFQUNELEVBd0JDLENBQ0YsQ0FBQTtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDckIsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDO2dCQUNoRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDcEI7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRCxpREFBaUQ7SUFDakQsdUZBQXVGO0lBQ3ZGLE1BQU0sV0FBVyxHQUFHLENBQ2xCLENBQUksRUFDSixpQkFBK0MsRUFDL0MscUJBQW1ELEVBQ25ELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTlHLDJDQUEyQztJQUMzQywwR0FBMEc7SUFDMUcsa0RBQWtEO0lBQ2xELE1BQU0sU0FBUyxHQUFHLENBSWhCLENBQUksRUFDSixHQUFHLElBQWlDLEVBQ3BDLEVBQUU7UUFDRixNQUFNLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxJQUdsRCxDQUFBO1FBRUQsSUFBSSxNQUFNLEdBQXVCLFNBQVMsQ0FBQTtRQUMxQyxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtRQUVuRyw0QkFBNEI7UUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNuRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzlCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixHQUFHO29CQUNELE1BQU0sQ0FBQyxHQUFJLGVBQWUsRUFBVSxDQUFDLEdBQVUsQ0FBQyxDQUFBO29CQUNoRCxzQkFBc0I7b0JBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO29CQUM3QyxPQUFPLENBQUMsQ0FBQTtnQkFDVixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQUUsRUFBWSxDQUFDLENBQUE7UUFDaEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBbUM7UUFDOUMsR0FBRztZQUNELDBDQUEwQztZQUMxQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2hELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1RCxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2xELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFDbEMsR0FBRyxlQUFlO0tBQ25CLENBQUE7SUFFRCxPQUFPO1FBQ0wsT0FBTztRQUNQLFVBQVU7UUFDVixTQUFTO1FBQ1QsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUU7S0FDOUMsQ0FBQTtBQUNILENBQUMsQ0FBQSJ9