@rodrigocoliveira/agno-react 2.1.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context/AgnoContext.d.ts +1 -1
- package/dist/context/AgnoContext.d.ts.map +1 -1
- package/dist/context/ToolHandlerContext.d.ts +1 -1
- package/dist/context/ToolHandlerContext.d.ts.map +1 -1
- package/dist/hooks/useAgnoChat.d.ts +1 -0
- package/dist/hooks/useAgnoChat.d.ts.map +1 -1
- package/dist/hooks/useAgnoSessionState.d.ts +11 -0
- package/dist/hooks/useAgnoSessionState.d.ts.map +1 -1
- package/dist/index.js +20 -19
- package/dist/index.js.map +7 -7
- package/dist/index.mjs +20 -19
- package/dist/index.mjs.map +7 -7
- package/dist/ui/components/artifact.d.ts +8 -8
- package/dist/ui/components/artifact.d.ts.map +1 -1
- package/dist/ui/components/audio-recorder.d.ts +1 -1
- package/dist/ui/components/audio-recorder.d.ts.map +1 -1
- package/dist/ui/components/chart.d.ts +1 -1
- package/dist/ui/components/chart.d.ts.map +1 -1
- package/dist/ui/components/code-block.d.ts +2 -2
- package/dist/ui/components/code-block.d.ts.map +1 -1
- package/dist/ui/components/conversation.d.ts +4 -4
- package/dist/ui/components/conversation.d.ts.map +1 -1
- package/dist/ui/components/file-preview-card.d.ts +1 -1
- package/dist/ui/components/file-preview-card.d.ts.map +1 -1
- package/dist/ui/components/file-preview-modal.d.ts +1 -1
- package/dist/ui/components/file-preview-modal.d.ts.map +1 -1
- package/dist/ui/components/image-lightbox.d.ts +1 -1
- package/dist/ui/components/image-lightbox.d.ts.map +1 -1
- package/dist/ui/components/message.d.ts +3 -3
- package/dist/ui/components/message.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/attachments.d.ts +3 -3
- package/dist/ui/components/prompt-input/attachments.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/buttons.d.ts +6 -6
- package/dist/ui/components/prompt-input/buttons.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/command.d.ts +7 -7
- package/dist/ui/components/prompt-input/command.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/drop-zone.d.ts +1 -1
- package/dist/ui/components/prompt-input/drop-zone.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/footer.d.ts +4 -4
- package/dist/ui/components/prompt-input/footer.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/model-select.d.ts +5 -5
- package/dist/ui/components/prompt-input/model-select.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/prompt-input.d.ts +1 -1
- package/dist/ui/components/prompt-input/prompt-input.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/provider.d.ts +1 -1
- package/dist/ui/components/prompt-input/provider.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/speech.d.ts +1 -1
- package/dist/ui/components/prompt-input/speech.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/tabs.d.ts +5 -5
- package/dist/ui/components/prompt-input/tabs.d.ts.map +1 -1
- package/dist/ui/components/prompt-input/textarea.d.ts +1 -1
- package/dist/ui/components/prompt-input/textarea.d.ts.map +1 -1
- package/dist/ui/components/response.d.ts +1 -1
- package/dist/ui/components/response.d.ts.map +1 -1
- package/dist/ui/components/smart-timestamp.d.ts +1 -1
- package/dist/ui/components/smart-timestamp.d.ts.map +1 -1
- package/dist/ui/components/streaming-indicator.d.ts +1 -1
- package/dist/ui/components/streaming-indicator.d.ts.map +1 -1
- package/dist/ui/components/tool.d.ts +5 -5
- package/dist/ui/components/tool.d.ts.map +1 -1
- package/dist/ui/composed/AgnoChatInput.d.ts +1 -1
- package/dist/ui/composed/AgnoChatInput.d.ts.map +1 -1
- package/dist/ui/composed/AgnoMessageItem.d.ts +3 -1
- package/dist/ui/composed/AgnoMessageItem.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/agno-chat.d.ts +18 -1
- package/dist/ui/composed/agno-chat/agno-chat.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/empty-state.d.ts +1 -1
- package/dist/ui/composed/agno-chat/empty-state.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/error-bar.d.ts +1 -1
- package/dist/ui/composed/agno-chat/error-bar.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/input.d.ts +1 -1
- package/dist/ui/composed/agno-chat/input.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/messages.d.ts +1 -1
- package/dist/ui/composed/agno-chat/messages.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/suggested-prompts.d.ts +1 -1
- package/dist/ui/composed/agno-chat/suggested-prompts.d.ts.map +1 -1
- package/dist/ui/composed/agno-chat/tool-building-blocks.d.ts +1 -1
- package/dist/ui/composed/agno-chat/tool-building-blocks.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/content.d.ts +1 -1
- package/dist/ui/composed/agno-message/content.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/context.d.ts +7 -0
- package/dist/ui/composed/agno-message/context.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/footer.d.ts +1 -1
- package/dist/ui/composed/agno-message/footer.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/media.d.ts +1 -1
- package/dist/ui/composed/agno-message/media.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/message.d.ts +8 -1
- package/dist/ui/composed/agno-message/message.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/reasoning.d.ts +1 -1
- package/dist/ui/composed/agno-message/reasoning.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/references.d.ts +1 -1
- package/dist/ui/composed/agno-message/references.d.ts.map +1 -1
- package/dist/ui/composed/agno-message/tools.d.ts +1 -1
- package/dist/ui/composed/agno-message/tools.d.ts.map +1 -1
- package/dist/ui/composed/generative-components/card-grid.d.ts +1 -1
- package/dist/ui/composed/generative-components/card-grid.d.ts.map +1 -1
- package/dist/ui/composed/generative-components/charts.d.ts +4 -4
- package/dist/ui/composed/generative-components/charts.d.ts.map +1 -1
- package/dist/ui/primitives/badge.d.ts +1 -1
- package/dist/ui/primitives/badge.d.ts.map +1 -1
- package/dist/ui/primitives/command.d.ts +1 -1
- package/dist/ui/primitives/dialog.d.ts +2 -2
- package/dist/ui/primitives/dropdown-menu.d.ts +1 -1
- package/dist/ui/primitives/input-group.d.ts +6 -6
- package/dist/ui/primitives/input-group.d.ts.map +1 -1
- package/dist/ui.js +27 -15
- package/dist/ui.js.map +8 -8
- package/dist/ui.mjs +27 -15
- package/dist/ui.mjs.map +8 -8
- package/package.json +3 -3
|
@@ -8,7 +8,7 @@ export interface AgnoProviderProps {
|
|
|
8
8
|
/**
|
|
9
9
|
* Provider component that creates and manages an AgnoClient instance
|
|
10
10
|
*/
|
|
11
|
-
export declare function AgnoProvider({ config, children }: AgnoProviderProps):
|
|
11
|
+
export declare function AgnoProvider({ config, children }: AgnoProviderProps): React.JSX.Element;
|
|
12
12
|
/**
|
|
13
13
|
* Hook to access the AgnoClient instance
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgnoContext.d.ts","sourceRoot":"","sources":["../../src/context/AgnoContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"AgnoContext.d.ts","sourceRoot":"","sources":["../../src/context/AgnoContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,iBAAiB,qBAuBnE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAQ1C"}
|
|
@@ -29,7 +29,7 @@ export interface ToolHandlerProviderProps {
|
|
|
29
29
|
* </ToolHandlerProvider>
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
export declare function ToolHandlerProvider({ handlers: initialHandlers, children }: ToolHandlerProviderProps):
|
|
32
|
+
export declare function ToolHandlerProvider({ handlers: initialHandlers, children }: ToolHandlerProviderProps): React.JSX.Element;
|
|
33
33
|
/**
|
|
34
34
|
* Hook to access global tool handlers
|
|
35
35
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolHandlerContext.d.ts","sourceRoot":"","sources":["../../src/context/ToolHandlerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAOD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,eAAoB,EAAE,QAAQ,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"ToolHandlerContext.d.ts","sourceRoot":"","sources":["../../src/context/ToolHandlerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAOD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,eAAoB,EAAE,QAAQ,EAAE,EAAE,wBAAwB,qBA+BzG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,uBAAuB,GAAG,IAAI,CAEhE"}
|
|
@@ -8,6 +8,7 @@ export declare function useAgnoChat(): {
|
|
|
8
8
|
sendMessage: (message: string | FormData, options?: {
|
|
9
9
|
headers?: Record<string, string>;
|
|
10
10
|
params?: Record<string, string>;
|
|
11
|
+
background?: boolean;
|
|
11
12
|
}) => Promise<void>;
|
|
12
13
|
clearMessages: () => void;
|
|
13
14
|
cancelRun: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgnoChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgnoChat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG7E;;;GAGG;AACH,wBAAgB,WAAW;;2BAkEP,MAAM,GAAG,QAAQ,YAAY;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useAgnoChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgnoChat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG7E;;;GAGG;AACH,wBAAgB,WAAW;;2BAkEP,MAAM,GAAG,QAAQ,YAAY;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;EAsC3I"}
|
|
@@ -7,6 +7,17 @@
|
|
|
7
7
|
* - On any CustomEvent with a `session_state` field (opt-out via config)
|
|
8
8
|
* - On team runs, via a post-stream REST refresh (workaround through Agno 2.6.0)
|
|
9
9
|
*
|
|
10
|
+
* `mergeSessionState` deep-merges its partial into the current state (plain
|
|
11
|
+
* objects merge recursively at any depth; arrays and primitives replace). Use
|
|
12
|
+
* `setSessionState` to replace a whole branch or drop keys. Rule of thumb:
|
|
13
|
+
* **merge patches, set replaces.**
|
|
14
|
+
*
|
|
15
|
+
* `mergeSessionState` is a read-modify-write (read cache → deepMerge → PATCH),
|
|
16
|
+
* so always `await` calls sequentially — firing several un-awaited merges makes
|
|
17
|
+
* them read the same stale base and the later one clobbers the earlier (lost
|
|
18
|
+
* update). Each call is one PATCH; batch fields into a single object when you
|
|
19
|
+
* can, and avoid writing while a run is streaming.
|
|
20
|
+
*
|
|
10
21
|
* @example
|
|
11
22
|
* ```tsx
|
|
12
23
|
* type MyState = { counter: number; lastAction?: string };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgnoSessionState.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgnoSessionState.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"useAgnoSessionState.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgnoSessionState.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACxD;IACH,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,mBAAmB,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9C,CA4DA"}
|
package/dist/index.js
CHANGED
|
@@ -2213,25 +2213,27 @@ function AgnoMessageReferences() {
|
|
|
2213
2213
|
var import_lucide_react11 = require("lucide-react");
|
|
2214
2214
|
var jsx_runtime21 = require("react/jsx-runtime");
|
|
2215
2215
|
function AgnoMessageFooter({ showTimestamp = true } = {}) {
|
|
2216
|
-
const { message, classNames, actions, isLastAssistantMessage, formatTimestamp } = useAgnoMessageContext();
|
|
2216
|
+
const { message, classNames, actions, isLastAssistantMessage, isStreamingThisMessage, formatTimestamp } = useAgnoMessageContext();
|
|
2217
2217
|
const hasError = message.streamingError;
|
|
2218
2218
|
const isCustomTimestamp = !!formatTimestamp;
|
|
2219
2219
|
const resolvedFormatTimestamp = formatTimestamp ?? formatSmartTimestamp;
|
|
2220
|
-
if (
|
|
2220
|
+
if (isStreamingThisMessage)
|
|
2221
2221
|
return null;
|
|
2222
|
+
const hasActions = !!actions?.assistant;
|
|
2223
|
+
const visibility = actions?.visibility ?? "visible";
|
|
2224
|
+
if (hasActions && visibility === "last-assistant" && !isLastAssistantMessage) {
|
|
2225
|
+
return null;
|
|
2226
|
+
}
|
|
2227
|
+
if (!hasActions && !showTimestamp && !hasError)
|
|
2228
|
+
return null;
|
|
2229
|
+
const useHover = hasActions && (visibility === "hover" || visibility === "hover-last-visible" && !isLastAssistantMessage);
|
|
2222
2230
|
return /* @__PURE__ */ jsx_runtime21.jsxs("div", {
|
|
2223
|
-
className: "flex items-center gap-2 pt-1",
|
|
2231
|
+
className: cn("flex items-center gap-2 pt-1 transition-opacity", useHover && "opacity-0 group-hover/message:opacity-100"),
|
|
2224
2232
|
children: [
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
const useHover = visibility === "hover" || visibility === "hover-last-visible" && !isLastAssistantMessage;
|
|
2230
|
-
return /* @__PURE__ */ jsx_runtime21.jsx("div", {
|
|
2231
|
-
className: cn("flex items-center gap-1 transition-opacity", useHover && "opacity-0 group-hover/message:opacity-100", classNames?.assistant?.actions),
|
|
2232
|
-
children: actions.assistant(message)
|
|
2233
|
-
});
|
|
2234
|
-
})(),
|
|
2233
|
+
hasActions && /* @__PURE__ */ jsx_runtime21.jsx("div", {
|
|
2234
|
+
className: cn("flex items-center gap-1", classNames?.assistant?.actions),
|
|
2235
|
+
children: actions.assistant(message)
|
|
2236
|
+
}),
|
|
2235
2237
|
hasError && /* @__PURE__ */ jsx_runtime21.jsxs("span", {
|
|
2236
2238
|
className: "flex items-center gap-1 text-[11px] text-destructive",
|
|
2237
2239
|
children: [
|
|
@@ -2273,6 +2275,7 @@ function AgnoMessage({
|
|
|
2273
2275
|
avatars,
|
|
2274
2276
|
actions,
|
|
2275
2277
|
isLastAssistantMessage = false,
|
|
2278
|
+
isStreamingThisMessage = false,
|
|
2276
2279
|
showFilePreview = true,
|
|
2277
2280
|
showImageLightbox = true,
|
|
2278
2281
|
showTimestamp = true,
|
|
@@ -2288,6 +2291,7 @@ function AgnoMessage({
|
|
|
2288
2291
|
const ctx = import_react13.useMemo(() => ({
|
|
2289
2292
|
message,
|
|
2290
2293
|
isLastAssistantMessage,
|
|
2294
|
+
isStreamingThisMessage,
|
|
2291
2295
|
classNames,
|
|
2292
2296
|
actions,
|
|
2293
2297
|
avatars,
|
|
@@ -2308,6 +2312,7 @@ function AgnoMessage({
|
|
|
2308
2312
|
}), [
|
|
2309
2313
|
message,
|
|
2310
2314
|
isLastAssistantMessage,
|
|
2315
|
+
isStreamingThisMessage,
|
|
2311
2316
|
classNames,
|
|
2312
2317
|
actions,
|
|
2313
2318
|
avatars,
|
|
@@ -2675,11 +2680,7 @@ function useAgnoSessionState() {
|
|
|
2675
2680
|
const resolved = typeof next === "function" ? next(client.getSessionState()) : next;
|
|
2676
2681
|
await client.setSessionState(resolved);
|
|
2677
2682
|
}, [client]);
|
|
2678
|
-
const mergeSessionState = import_react16.useCallback(
|
|
2679
|
-
const current = client.getSessionState() ?? {};
|
|
2680
|
-
const merged = { ...current, ...partial };
|
|
2681
|
-
await client.setSessionState(merged);
|
|
2682
|
-
}, [client]);
|
|
2683
|
+
const mergeSessionState = import_react16.useCallback((partial) => client.mergeSessionState(partial), [client]);
|
|
2683
2684
|
const refreshSessionState = import_react16.useCallback(async () => {
|
|
2684
2685
|
const result = await client.refreshSessionState();
|
|
2685
2686
|
return result ?? null;
|
|
@@ -3277,4 +3278,4 @@ function useAgnoComponents() {
|
|
|
3277
3278
|
};
|
|
3278
3279
|
}
|
|
3279
3280
|
|
|
3280
|
-
//# debugId=
|
|
3281
|
+
//# debugId=0883CF733FD9E42964756E2164756E21
|