@dilipod/ui 0.4.15 → 0.4.16

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.
@@ -156,6 +156,20 @@ export interface WorkflowViewerProps {
156
156
  exportedAt: string;
157
157
  }>;
158
158
  }>;
159
+ /** Get a specific backup's full state */
160
+ getBackupState?: (workflowDefId: string, backupId: string) => Promise<{
161
+ success: boolean;
162
+ error?: string;
163
+ backup?: {
164
+ id: string;
165
+ version: number;
166
+ versionLabel?: string;
167
+ workflowName: string;
168
+ isDeployed: boolean;
169
+ exportedAt: string;
170
+ state: SimWorkflow | null;
171
+ };
172
+ }>;
159
173
  /** Push workflow to Sim Studio */
160
174
  pushToSim?: (workflowDefId: string) => Promise<{
161
175
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-viewer.d.ts","sourceRoot":"","sources":["../../src/components/workflow-viewer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-viewer.d.ts","sourceRoot":"","sources":["../../src/components/workflow-viewer.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4885,6 +4885,55 @@ function defaultFormatDistance(date, options) {
4885
4885
  else result = `${diffDays} day${diffDays > 1 ? "s" : ""}`;
4886
4886
  return options?.addSuffix ? `${result} ago` : result;
4887
4887
  }
4888
+ function computeWorkflowDiff(stateA, stateB) {
4889
+ if (!stateA || !stateB) {
4890
+ return {
4891
+ blocksAdded: [],
4892
+ blocksRemoved: [],
4893
+ blocksModified: [],
4894
+ edgesAdded: 0,
4895
+ edgesRemoved: 0,
4896
+ summary: "Unable to compare - missing workflow data"
4897
+ };
4898
+ }
4899
+ const blocksA = stateA.blocks || {};
4900
+ const blocksB = stateB.blocks || {};
4901
+ const edgesA = stateA.edges || [];
4902
+ const edgesB = stateB.edges || [];
4903
+ const blockIdsA = new Set(Object.keys(blocksA));
4904
+ const blockIdsB = new Set(Object.keys(blocksB));
4905
+ const blocksAdded = [...blockIdsB].filter((id) => !blockIdsA.has(id));
4906
+ const blocksRemoved = [...blockIdsA].filter((id) => !blockIdsB.has(id));
4907
+ const blocksModified = [];
4908
+ for (const id of blockIdsA) {
4909
+ if (blockIdsB.has(id)) {
4910
+ const blockA = blocksA[id];
4911
+ const blockB = blocksB[id];
4912
+ if (JSON.stringify(blockA) !== JSON.stringify(blockB)) {
4913
+ blocksModified.push(id);
4914
+ }
4915
+ }
4916
+ }
4917
+ const edgeSignature = (e) => `${e.source || e.from}->${e.target || e.to}`;
4918
+ const edgeSigsA = new Set(edgesA.map(edgeSignature));
4919
+ const edgeSigsB = new Set(edgesB.map(edgeSignature));
4920
+ const edgesAdded = [...edgeSigsB].filter((sig) => !edgeSigsA.has(sig)).length;
4921
+ const edgesRemoved = [...edgeSigsA].filter((sig) => !edgeSigsB.has(sig)).length;
4922
+ const changes = [];
4923
+ if (blocksAdded.length > 0) changes.push(`+${blocksAdded.length} block${blocksAdded.length > 1 ? "s" : ""}`);
4924
+ if (blocksRemoved.length > 0) changes.push(`-${blocksRemoved.length} block${blocksRemoved.length > 1 ? "s" : ""}`);
4925
+ if (blocksModified.length > 0) changes.push(`~${blocksModified.length} modified`);
4926
+ if (edgesAdded > 0) changes.push(`+${edgesAdded} edge${edgesAdded > 1 ? "s" : ""}`);
4927
+ if (edgesRemoved > 0) changes.push(`-${edgesRemoved} edge${edgesRemoved > 1 ? "s" : ""}`);
4928
+ return {
4929
+ blocksAdded,
4930
+ blocksRemoved,
4931
+ blocksModified,
4932
+ edgesAdded,
4933
+ edgesRemoved,
4934
+ summary: changes.length > 0 ? changes.join(", ") : "No changes detected"
4935
+ };
4936
+ }
4888
4937
  function N8nWorkflowSummary({ workflow, showFlow = false }) {
4889
4938
  const nodes = workflow.nodes || [];
4890
4939
  const triggerNode = nodes.find(
@@ -5106,6 +5155,12 @@ function WorkflowViewer({
5106
5155
  const [pushingToSim, setPushingToSim] = React50.useState(false);
5107
5156
  const [pullingFromSim, setPullingFromSim] = React50.useState(false);
5108
5157
  const [switchingPlatform, setSwitchingPlatform] = React50.useState(false);
5158
+ const [diffMode, setDiffMode] = React50.useState(false);
5159
+ const [selectedBackupA, setSelectedBackupA] = React50.useState(null);
5160
+ const [selectedBackupB, setSelectedBackupB] = React50.useState(null);
5161
+ const [backupStateA, setBackupStateA] = React50.useState(null);
5162
+ const [backupStateB, setBackupStateB] = React50.useState(null);
5163
+ const [loadingDiff, setLoadingDiff] = React50.useState(false);
5109
5164
  const [localPlatform, setLocalPlatform] = React50.useState(platform);
5110
5165
  const [localIsActive, setLocalIsActive] = React50.useState(isActive ?? true);
5111
5166
  const hasUnsavedChanges = localPlatform !== platform || localIsActive !== (isActive ?? true);
@@ -5308,6 +5363,42 @@ function WorkflowViewer({
5308
5363
  setViewMode("backups");
5309
5364
  loadBackups();
5310
5365
  }
5366
+ async function loadBackupForDiff(backupId, slot) {
5367
+ if (!workflowDefinitionId || !apiHandlers?.getBackupState) {
5368
+ return;
5369
+ }
5370
+ setLoadingDiff(true);
5371
+ try {
5372
+ const result = await apiHandlers.getBackupState(workflowDefinitionId, backupId);
5373
+ if (result.success && result.backup) {
5374
+ if (slot === "A") {
5375
+ setBackupStateA(result.backup.state);
5376
+ setSelectedBackupA(backupId);
5377
+ } else {
5378
+ setBackupStateB(result.backup.state);
5379
+ setSelectedBackupB(backupId);
5380
+ }
5381
+ }
5382
+ } catch {
5383
+ console.error("Failed to load backup for diff");
5384
+ } finally {
5385
+ setLoadingDiff(false);
5386
+ }
5387
+ }
5388
+ function startDiffMode() {
5389
+ setDiffMode(true);
5390
+ setSelectedBackupA(null);
5391
+ setSelectedBackupB(null);
5392
+ setBackupStateA(null);
5393
+ setBackupStateB(null);
5394
+ }
5395
+ function exitDiffMode() {
5396
+ setDiffMode(false);
5397
+ setSelectedBackupA(null);
5398
+ setSelectedBackupB(null);
5399
+ setBackupStateA(null);
5400
+ setBackupStateB(null);
5401
+ }
5311
5402
  function openInSimStudio() {
5312
5403
  if (simStudioUrl && simWorkflowId) {
5313
5404
  window.open(`${simStudioUrl}/w/${simWorkflowId}`, "_blank");
@@ -5688,14 +5779,15 @@ function WorkflowViewer({
5688
5779
  children: pushingToSim ? "Pushing..." : "Push to Sim"
5689
5780
  }
5690
5781
  ),
5691
- simWorkflowId && apiHandlers?.pullFromSim && /* @__PURE__ */ jsxRuntime.jsx(
5782
+ apiHandlers?.pullFromSim && /* @__PURE__ */ jsxRuntime.jsx(
5692
5783
  Button,
5693
5784
  {
5694
5785
  onClick: pullFromSim,
5695
- disabled: pullingFromSim,
5786
+ disabled: pullingFromSim || !simWorkflowId,
5696
5787
  variant: "outline",
5697
5788
  size: "sm",
5698
5789
  icon: /* @__PURE__ */ jsxRuntime.jsx(react_star.CloudArrowDown, { size: 16 }),
5790
+ title: !simWorkflowId ? "No Sim workflow linked yet. Push to Sim first." : void 0,
5699
5791
  children: pullingFromSim ? "Pulling..." : "Pull from Sim"
5700
5792
  }
5701
5793
  ),
@@ -5763,41 +5855,194 @@ function WorkflowViewer({
5763
5855
  /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "p-4 bg-[var(--black)] text-gray-100 text-xs overflow-auto max-h-[500px] font-mono", children: JSON.stringify(workflow, null, 2) })
5764
5856
  ] }) : viewMode === "flow" ? /* @__PURE__ */ jsxRuntime.jsx(React50.Suspense, { fallback: loadingComponent || DefaultLoading, children: /* @__PURE__ */ jsxRuntime.jsx(WorkflowFlow2, { workflow, height: 380, platform }) }) : viewMode === "backups" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
5765
5857
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
5766
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: "Backup History" }),
5767
- /* @__PURE__ */ jsxRuntime.jsx(
5768
- Button,
5769
- {
5770
- onClick: () => setViewMode("summary"),
5771
- variant: "outline",
5772
- size: "sm",
5773
- children: "Back to Summary"
5774
- }
5775
- )
5858
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-medium", children: diffMode ? "Compare Versions" : "Backup History" }),
5859
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
5860
+ !diffMode && backups.length >= 2 && apiHandlers?.getBackupState && /* @__PURE__ */ jsxRuntime.jsx(
5861
+ Button,
5862
+ {
5863
+ onClick: startDiffMode,
5864
+ variant: "outline",
5865
+ size: "sm",
5866
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react_star.ArrowsLeftRight, { size: 14 }),
5867
+ children: "Compare"
5868
+ }
5869
+ ),
5870
+ diffMode && /* @__PURE__ */ jsxRuntime.jsx(
5871
+ Button,
5872
+ {
5873
+ onClick: exitDiffMode,
5874
+ variant: "outline",
5875
+ size: "sm",
5876
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react_star.X, { size: 14 }),
5877
+ children: "Cancel"
5878
+ }
5879
+ ),
5880
+ /* @__PURE__ */ jsxRuntime.jsx(
5881
+ Button,
5882
+ {
5883
+ onClick: () => {
5884
+ exitDiffMode();
5885
+ setViewMode("summary");
5886
+ },
5887
+ variant: "outline",
5888
+ size: "sm",
5889
+ children: "Back to Summary"
5890
+ }
5891
+ )
5892
+ ] })
5776
5893
  ] }),
5777
- loadingBackups ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-muted-foreground", children: "Loading backups..." }) : backups.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-8 text-center text-muted-foreground", children: [
5894
+ diffMode && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
5895
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
5896
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-muted/50 rounded border border-border", children: [
5897
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "From (older)" }),
5898
+ /* @__PURE__ */ jsxRuntime.jsxs(
5899
+ Select,
5900
+ {
5901
+ value: selectedBackupA || "",
5902
+ onChange: (e) => loadBackupForDiff(e.target.value, "A"),
5903
+ disabled: loadingDiff,
5904
+ className: "w-full",
5905
+ children: [
5906
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Select version..." }),
5907
+ backups.map((b) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: b.id, disabled: b.id === selectedBackupB, children: [
5908
+ "v",
5909
+ b.version,
5910
+ " - ",
5911
+ b.versionLabel || b.workflowName
5912
+ ] }, b.id))
5913
+ ]
5914
+ }
5915
+ )
5916
+ ] }),
5917
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-muted/50 rounded border border-border", children: [
5918
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "To (newer)" }),
5919
+ /* @__PURE__ */ jsxRuntime.jsxs(
5920
+ Select,
5921
+ {
5922
+ value: selectedBackupB || "",
5923
+ onChange: (e) => loadBackupForDiff(e.target.value, "B"),
5924
+ disabled: loadingDiff,
5925
+ className: "w-full",
5926
+ children: [
5927
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Select version..." }),
5928
+ backups.map((b) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: b.id, disabled: b.id === selectedBackupA, children: [
5929
+ "v",
5930
+ b.version,
5931
+ " - ",
5932
+ b.versionLabel || b.workflowName
5933
+ ] }, b.id))
5934
+ ]
5935
+ }
5936
+ )
5937
+ ] })
5938
+ ] }),
5939
+ loadingDiff ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4 text-center text-muted-foreground", children: "Loading versions..." }) : backupStateA && backupStateB ? (() => {
5940
+ const diff = computeWorkflowDiff(backupStateA, backupStateB);
5941
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
5942
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-muted/30 rounded border border-border", children: [
5943
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium mb-2", children: "Changes Summary" }),
5944
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: diff.summary })
5945
+ ] }),
5946
+ diff.blocksAdded.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-green-500/10 rounded border border-green-500/30", children: [
5947
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-green-600 dark:text-green-400 mb-2", children: [
5948
+ /* @__PURE__ */ jsxRuntime.jsx(react_star.Plus, { size: 14 }),
5949
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium", children: [
5950
+ "Blocks Added (",
5951
+ diff.blocksAdded.length,
5952
+ ")"
5953
+ ] })
5954
+ ] }),
5955
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: diff.blocksAdded.map((id) => {
5956
+ const block = backupStateB?.blocks?.[id];
5957
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "success", size: "sm", children: block?.name || id }, id);
5958
+ }) })
5959
+ ] }),
5960
+ diff.blocksRemoved.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-red-500/10 rounded border border-red-500/30", children: [
5961
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-red-600 dark:text-red-400 mb-2", children: [
5962
+ /* @__PURE__ */ jsxRuntime.jsx(react_star.Minus, { size: 14 }),
5963
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium", children: [
5964
+ "Blocks Removed (",
5965
+ diff.blocksRemoved.length,
5966
+ ")"
5967
+ ] })
5968
+ ] }),
5969
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: diff.blocksRemoved.map((id) => {
5970
+ const block = backupStateA?.blocks?.[id];
5971
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "error", size: "sm", children: block?.name || id }, id);
5972
+ }) })
5973
+ ] }),
5974
+ diff.blocksModified.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-amber-500/10 rounded border border-amber-500/30", children: [
5975
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-amber-600 dark:text-amber-400 mb-2", children: [
5976
+ /* @__PURE__ */ jsxRuntime.jsx(react_star.Pencil, { size: 14 }),
5977
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium", children: [
5978
+ "Blocks Modified (",
5979
+ diff.blocksModified.length,
5980
+ ")"
5981
+ ] })
5982
+ ] }),
5983
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: diff.blocksModified.map((id) => {
5984
+ const block = backupStateB?.blocks?.[id];
5985
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "warning", size: "sm", children: block?.name || id }, id);
5986
+ }) })
5987
+ ] }),
5988
+ (diff.edgesAdded > 0 || diff.edgesRemoved > 0) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 bg-muted/30 rounded border border-border", children: [
5989
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: "Connection Changes" }),
5990
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 text-sm", children: [
5991
+ diff.edgesAdded > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-green-600 dark:text-green-400", children: [
5992
+ "+",
5993
+ diff.edgesAdded,
5994
+ " added"
5995
+ ] }),
5996
+ diff.edgesRemoved > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-red-600 dark:text-red-400", children: [
5997
+ "-",
5998
+ diff.edgesRemoved,
5999
+ " removed"
6000
+ ] })
6001
+ ] })
6002
+ ] })
6003
+ ] });
6004
+ })() : selectedBackupA || selectedBackupB ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4 text-center text-muted-foreground text-sm", children: "Select both versions to compare" }) : null
6005
+ ] }),
6006
+ !diffMode && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: loadingBackups ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-muted-foreground", children: "Loading backups..." }) : backups.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-8 text-center text-muted-foreground", children: [
5778
6007
  /* @__PURE__ */ jsxRuntime.jsx(react_star.ClockCounterClockwise, { size: 32, className: "mx-auto mb-2 opacity-50" }),
5779
6008
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: "No backups yet" }),
5780
6009
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs mt-1", children: 'Click "Export from Sim" to create a backup' })
5781
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: backups.map((backup) => /* @__PURE__ */ jsxRuntime.jsx(
6010
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: backups.map((backup, index) => /* @__PURE__ */ jsxRuntime.jsxs(
5782
6011
  "div",
5783
6012
  {
5784
6013
  className: "flex items-center justify-between p-3 bg-muted/50 rounded border border-border",
5785
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5786
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center w-8 h-8 rounded bg-primary/10 text-primary text-sm font-semibold", children: [
5787
- "v",
5788
- backup.version
5789
- ] }),
5790
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
5791
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: backup.versionLabel || backup.workflowName }),
5792
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
5793
- formatDistance(new Date(backup.exportedAt), { addSuffix: true }),
5794
- backup.isDeployed && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "success", size: "sm", className: "ml-2", children: "Deployed" })
6014
+ children: [
6015
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
6016
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center w-8 h-8 rounded bg-primary/10 text-primary text-sm font-semibold", children: [
6017
+ "v",
6018
+ backup.version
6019
+ ] }),
6020
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
6021
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: backup.versionLabel || backup.workflowName }),
6022
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
6023
+ formatDistance(new Date(backup.exportedAt), { addSuffix: true }),
6024
+ backup.isDeployed && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "success", size: "sm", className: "ml-2", children: "Deployed" })
6025
+ ] })
5795
6026
  ] })
5796
- ] })
5797
- ] })
6027
+ ] }),
6028
+ index < backups.length - 1 && apiHandlers?.getBackupState && /* @__PURE__ */ jsxRuntime.jsx(
6029
+ Button,
6030
+ {
6031
+ variant: "ghost",
6032
+ size: "sm",
6033
+ onClick: () => {
6034
+ startDiffMode();
6035
+ loadBackupForDiff(backups[index + 1].id, "A");
6036
+ loadBackupForDiff(backup.id, "B");
6037
+ },
6038
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react_star.ArrowsLeftRight, { size: 14 }),
6039
+ children: "Diff"
6040
+ }
6041
+ )
6042
+ ]
5798
6043
  },
5799
6044
  backup.id
5800
- )) })
6045
+ )) }) })
5801
6046
  ] }) : platform === "n8n" ? /* @__PURE__ */ jsxRuntime.jsx(N8nWorkflowSummary, { workflow, showFlow: false }) : /* @__PURE__ */ jsxRuntime.jsx(SimWorkflowSummary, { workflow }) })
5802
6047
  ] })
5803
6048
  ] });