openpond-sdk 0.12.20 → 0.12.21

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 (48) hide show
  1. package/OPENTELEMETRY.md +85 -0
  2. package/README.md +4 -0
  3. package/TASK_INGESTION.md +135 -0
  4. package/dist/advanced-refiner-evaluations.js +2 -2
  5. package/dist/{chunk-RN5MK7NH.js → chunk-6EZAGTZG.js} +4 -4
  6. package/dist/{chunk-3MDNVNBM.js → chunk-BNBPKCIR.js} +6 -6
  7. package/dist/chunk-NZRGRUYG.js +140 -0
  8. package/dist/chunk-NZRGRUYG.js.map +1 -0
  9. package/dist/{chunk-RT7SQHO4.js → chunk-SP7DQEQM.js} +2 -2
  10. package/dist/connected-evidence.js +3 -3
  11. package/dist/dataset-workspaces.js +125 -36
  12. package/dist/dataset-workspaces.js.map +1 -1
  13. package/dist/experiment-evaluation-schedules.js +5 -5
  14. package/dist/experiments.js +5 -5
  15. package/dist/index.js +51 -36
  16. package/dist/index.js.map +1 -1
  17. package/dist/opentelemetry.js +92 -0
  18. package/dist/opentelemetry.js.map +1 -0
  19. package/dist/taskset-drafts.js +1 -1
  20. package/dist/taskset-packages.js +13 -13
  21. package/dist/training-bundle.js +10 -10
  22. package/dist/training.js +8 -8
  23. package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts +86 -0
  24. package/dist/types/packages/sdk/src/dataset-task-ingestion.d.ts.map +1 -0
  25. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +152 -140
  26. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  27. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
  28. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  29. package/dist/types/packages/sdk/src/experiment-client.d.ts +77 -77
  30. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +216 -216
  31. package/dist/types/packages/sdk/src/index.d.ts +4 -0
  32. package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
  33. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +339 -339
  34. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +216 -216
  35. package/dist/types/packages/sdk/src/opentelemetry.d.ts +39 -0
  36. package/dist/types/packages/sdk/src/opentelemetry.d.ts.map +1 -0
  37. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +120 -120
  38. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +20 -20
  39. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +25 -25
  40. package/dist/types/packages/sdk/src/training.d.ts +4465 -4465
  41. package/dist/types/packages/sdk/src/types.d.ts +2 -0
  42. package/dist/types/packages/sdk/src/types.d.ts.map +1 -1
  43. package/fixtures/python-foundation/operation-matrix.json +17 -0
  44. package/fixtures/python-foundation/schemas.json +5941 -5001
  45. package/package.json +18 -3
  46. /package/dist/{chunk-RN5MK7NH.js.map → chunk-6EZAGTZG.js.map} +0 -0
  47. /package/dist/{chunk-3MDNVNBM.js.map → chunk-BNBPKCIR.js.map} +0 -0
  48. /package/dist/{chunk-RT7SQHO4.js.map → chunk-SP7DQEQM.js.map} +0 -0
@@ -77,6 +77,60 @@ export declare class OpenPondModelTasksetRunsClient {
77
77
  revision: number;
78
78
  };
79
79
  policy: {
80
+ kind: "hosted_chat";
81
+ modelId: string;
82
+ localRuntime?: {
83
+ providerId: "codex";
84
+ configurationHash: string;
85
+ accountHash: string;
86
+ reasoningEffort: "high" | "low" | "medium" | "xhigh";
87
+ maximumRequestCostUsd: number;
88
+ requestTimeoutMs: number;
89
+ } | {
90
+ providerId: "custom-openai-compatible";
91
+ configurationHash: string;
92
+ maximumRequestCostUsd: number;
93
+ requestTimeoutMs: number;
94
+ } | {
95
+ providerId: "claude-code";
96
+ configurationHash: string;
97
+ executableHash: string;
98
+ version: string;
99
+ capabilityHash: string;
100
+ maximumRequestCostUsd: number;
101
+ requestTimeoutMs: number;
102
+ maximumTurns: number;
103
+ holdOpen: boolean;
104
+ } | undefined;
105
+ candidate?: {
106
+ artifactId: string;
107
+ contentHash: string;
108
+ preparationId: string;
109
+ dispatchId: string;
110
+ baseProfileId: string;
111
+ workerImageDigest: string;
112
+ } | undefined;
113
+ harness?: {
114
+ harnessRelease: {
115
+ id: string;
116
+ contentHash: string;
117
+ };
118
+ agentSnapshot: {
119
+ id: string;
120
+ contentHash: string;
121
+ };
122
+ sourcePackageHash: string;
123
+ } | undefined;
124
+ messages?: {
125
+ role: "assistant" | "system" | "user";
126
+ content: string;
127
+ }[] | undefined;
128
+ maxOutputTokens: number;
129
+ temperature: number;
130
+ topP: number;
131
+ } | {
132
+ kind: "fixture";
133
+ } | {
80
134
  kind: "hosted_harness";
81
135
  modelId: string;
82
136
  maxOutputTokens?: number | undefined;
@@ -318,60 +372,6 @@ export declare class OpenPondModelTasksetRunsClient {
318
372
  };
319
373
  contentHash: string;
320
374
  } | undefined;
321
- } | {
322
- kind: "hosted_chat";
323
- modelId: string;
324
- localRuntime?: {
325
- providerId: "claude-code";
326
- configurationHash: string;
327
- executableHash: string;
328
- version: string;
329
- capabilityHash: string;
330
- maximumRequestCostUsd: number;
331
- requestTimeoutMs: number;
332
- maximumTurns: number;
333
- holdOpen: boolean;
334
- } | {
335
- providerId: "codex";
336
- configurationHash: string;
337
- accountHash: string;
338
- reasoningEffort: "high" | "low" | "medium" | "xhigh";
339
- maximumRequestCostUsd: number;
340
- requestTimeoutMs: number;
341
- } | {
342
- providerId: "custom-openai-compatible";
343
- configurationHash: string;
344
- maximumRequestCostUsd: number;
345
- requestTimeoutMs: number;
346
- } | undefined;
347
- candidate?: {
348
- artifactId: string;
349
- contentHash: string;
350
- preparationId: string;
351
- dispatchId: string;
352
- baseProfileId: string;
353
- workerImageDigest: string;
354
- } | undefined;
355
- harness?: {
356
- harnessRelease: {
357
- id: string;
358
- contentHash: string;
359
- };
360
- agentSnapshot: {
361
- id: string;
362
- contentHash: string;
363
- };
364
- sourcePackageHash: string;
365
- } | undefined;
366
- messages?: {
367
- role: "assistant" | "system" | "user";
368
- content: string;
369
- }[] | undefined;
370
- maxOutputTokens: number;
371
- temperature: number;
372
- topP: number;
373
- } | {
374
- kind: "fixture";
375
375
  };
376
376
  population: {
377
377
  receiptId: string;
@@ -647,6 +647,60 @@ export declare class OpenPondModelTasksetRunsClient {
647
647
  revision: number;
648
648
  };
649
649
  policy: {
650
+ kind: "hosted_chat";
651
+ modelId: string;
652
+ localRuntime?: {
653
+ providerId: "codex";
654
+ configurationHash: string;
655
+ accountHash: string;
656
+ reasoningEffort: "high" | "low" | "medium" | "xhigh";
657
+ maximumRequestCostUsd: number;
658
+ requestTimeoutMs: number;
659
+ } | {
660
+ providerId: "custom-openai-compatible";
661
+ configurationHash: string;
662
+ maximumRequestCostUsd: number;
663
+ requestTimeoutMs: number;
664
+ } | {
665
+ providerId: "claude-code";
666
+ configurationHash: string;
667
+ executableHash: string;
668
+ version: string;
669
+ capabilityHash: string;
670
+ maximumRequestCostUsd: number;
671
+ requestTimeoutMs: number;
672
+ maximumTurns: number;
673
+ holdOpen: boolean;
674
+ } | undefined;
675
+ candidate?: {
676
+ artifactId: string;
677
+ contentHash: string;
678
+ preparationId: string;
679
+ dispatchId: string;
680
+ baseProfileId: string;
681
+ workerImageDigest: string;
682
+ } | undefined;
683
+ harness?: {
684
+ harnessRelease: {
685
+ id: string;
686
+ contentHash: string;
687
+ };
688
+ agentSnapshot: {
689
+ id: string;
690
+ contentHash: string;
691
+ };
692
+ sourcePackageHash: string;
693
+ } | undefined;
694
+ messages?: {
695
+ role: "assistant" | "system" | "user";
696
+ content: string;
697
+ }[] | undefined;
698
+ maxOutputTokens: number;
699
+ temperature: number;
700
+ topP: number;
701
+ } | {
702
+ kind: "fixture";
703
+ } | {
650
704
  kind: "hosted_harness";
651
705
  modelId: string;
652
706
  maxOutputTokens?: number | undefined;
@@ -888,60 +942,6 @@ export declare class OpenPondModelTasksetRunsClient {
888
942
  };
889
943
  contentHash: string;
890
944
  } | undefined;
891
- } | {
892
- kind: "hosted_chat";
893
- modelId: string;
894
- localRuntime?: {
895
- providerId: "claude-code";
896
- configurationHash: string;
897
- executableHash: string;
898
- version: string;
899
- capabilityHash: string;
900
- maximumRequestCostUsd: number;
901
- requestTimeoutMs: number;
902
- maximumTurns: number;
903
- holdOpen: boolean;
904
- } | {
905
- providerId: "codex";
906
- configurationHash: string;
907
- accountHash: string;
908
- reasoningEffort: "high" | "low" | "medium" | "xhigh";
909
- maximumRequestCostUsd: number;
910
- requestTimeoutMs: number;
911
- } | {
912
- providerId: "custom-openai-compatible";
913
- configurationHash: string;
914
- maximumRequestCostUsd: number;
915
- requestTimeoutMs: number;
916
- } | undefined;
917
- candidate?: {
918
- artifactId: string;
919
- contentHash: string;
920
- preparationId: string;
921
- dispatchId: string;
922
- baseProfileId: string;
923
- workerImageDigest: string;
924
- } | undefined;
925
- harness?: {
926
- harnessRelease: {
927
- id: string;
928
- contentHash: string;
929
- };
930
- agentSnapshot: {
931
- id: string;
932
- contentHash: string;
933
- };
934
- sourcePackageHash: string;
935
- } | undefined;
936
- messages?: {
937
- role: "assistant" | "system" | "user";
938
- content: string;
939
- }[] | undefined;
940
- maxOutputTokens: number;
941
- temperature: number;
942
- topP: number;
943
- } | {
944
- kind: "fixture";
945
945
  };
946
946
  population: {
947
947
  receiptId: string;
@@ -1217,6 +1217,60 @@ export declare class OpenPondModelTasksetRunsClient {
1217
1217
  revision: number;
1218
1218
  };
1219
1219
  policy: {
1220
+ kind: "hosted_chat";
1221
+ modelId: string;
1222
+ localRuntime?: {
1223
+ providerId: "codex";
1224
+ configurationHash: string;
1225
+ accountHash: string;
1226
+ reasoningEffort: "high" | "low" | "medium" | "xhigh";
1227
+ maximumRequestCostUsd: number;
1228
+ requestTimeoutMs: number;
1229
+ } | {
1230
+ providerId: "custom-openai-compatible";
1231
+ configurationHash: string;
1232
+ maximumRequestCostUsd: number;
1233
+ requestTimeoutMs: number;
1234
+ } | {
1235
+ providerId: "claude-code";
1236
+ configurationHash: string;
1237
+ executableHash: string;
1238
+ version: string;
1239
+ capabilityHash: string;
1240
+ maximumRequestCostUsd: number;
1241
+ requestTimeoutMs: number;
1242
+ maximumTurns: number;
1243
+ holdOpen: boolean;
1244
+ } | undefined;
1245
+ candidate?: {
1246
+ artifactId: string;
1247
+ contentHash: string;
1248
+ preparationId: string;
1249
+ dispatchId: string;
1250
+ baseProfileId: string;
1251
+ workerImageDigest: string;
1252
+ } | undefined;
1253
+ harness?: {
1254
+ harnessRelease: {
1255
+ id: string;
1256
+ contentHash: string;
1257
+ };
1258
+ agentSnapshot: {
1259
+ id: string;
1260
+ contentHash: string;
1261
+ };
1262
+ sourcePackageHash: string;
1263
+ } | undefined;
1264
+ messages?: {
1265
+ role: "assistant" | "system" | "user";
1266
+ content: string;
1267
+ }[] | undefined;
1268
+ maxOutputTokens: number;
1269
+ temperature: number;
1270
+ topP: number;
1271
+ } | {
1272
+ kind: "fixture";
1273
+ } | {
1220
1274
  kind: "hosted_harness";
1221
1275
  modelId: string;
1222
1276
  maxOutputTokens?: number | undefined;
@@ -1458,60 +1512,6 @@ export declare class OpenPondModelTasksetRunsClient {
1458
1512
  };
1459
1513
  contentHash: string;
1460
1514
  } | undefined;
1461
- } | {
1462
- kind: "hosted_chat";
1463
- modelId: string;
1464
- localRuntime?: {
1465
- providerId: "claude-code";
1466
- configurationHash: string;
1467
- executableHash: string;
1468
- version: string;
1469
- capabilityHash: string;
1470
- maximumRequestCostUsd: number;
1471
- requestTimeoutMs: number;
1472
- maximumTurns: number;
1473
- holdOpen: boolean;
1474
- } | {
1475
- providerId: "codex";
1476
- configurationHash: string;
1477
- accountHash: string;
1478
- reasoningEffort: "high" | "low" | "medium" | "xhigh";
1479
- maximumRequestCostUsd: number;
1480
- requestTimeoutMs: number;
1481
- } | {
1482
- providerId: "custom-openai-compatible";
1483
- configurationHash: string;
1484
- maximumRequestCostUsd: number;
1485
- requestTimeoutMs: number;
1486
- } | undefined;
1487
- candidate?: {
1488
- artifactId: string;
1489
- contentHash: string;
1490
- preparationId: string;
1491
- dispatchId: string;
1492
- baseProfileId: string;
1493
- workerImageDigest: string;
1494
- } | undefined;
1495
- harness?: {
1496
- harnessRelease: {
1497
- id: string;
1498
- contentHash: string;
1499
- };
1500
- agentSnapshot: {
1501
- id: string;
1502
- contentHash: string;
1503
- };
1504
- sourcePackageHash: string;
1505
- } | undefined;
1506
- messages?: {
1507
- role: "assistant" | "system" | "user";
1508
- content: string;
1509
- }[] | undefined;
1510
- maxOutputTokens: number;
1511
- temperature: number;
1512
- topP: number;
1513
- } | {
1514
- kind: "fixture";
1515
1515
  };
1516
1516
  population: {
1517
1517
  receiptId: string;
@@ -1789,6 +1789,60 @@ export declare class OpenPondModelTasksetRunsClient {
1789
1789
  revision: number;
1790
1790
  };
1791
1791
  policy: {
1792
+ kind: "hosted_chat";
1793
+ modelId: string;
1794
+ localRuntime?: {
1795
+ providerId: "codex";
1796
+ configurationHash: string;
1797
+ accountHash: string;
1798
+ reasoningEffort: "high" | "low" | "medium" | "xhigh";
1799
+ maximumRequestCostUsd: number;
1800
+ requestTimeoutMs: number;
1801
+ } | {
1802
+ providerId: "custom-openai-compatible";
1803
+ configurationHash: string;
1804
+ maximumRequestCostUsd: number;
1805
+ requestTimeoutMs: number;
1806
+ } | {
1807
+ providerId: "claude-code";
1808
+ configurationHash: string;
1809
+ executableHash: string;
1810
+ version: string;
1811
+ capabilityHash: string;
1812
+ maximumRequestCostUsd: number;
1813
+ requestTimeoutMs: number;
1814
+ maximumTurns: number;
1815
+ holdOpen: boolean;
1816
+ } | undefined;
1817
+ candidate?: {
1818
+ artifactId: string;
1819
+ contentHash: string;
1820
+ preparationId: string;
1821
+ dispatchId: string;
1822
+ baseProfileId: string;
1823
+ workerImageDigest: string;
1824
+ } | undefined;
1825
+ harness?: {
1826
+ harnessRelease: {
1827
+ id: string;
1828
+ contentHash: string;
1829
+ };
1830
+ agentSnapshot: {
1831
+ id: string;
1832
+ contentHash: string;
1833
+ };
1834
+ sourcePackageHash: string;
1835
+ } | undefined;
1836
+ messages?: {
1837
+ role: "assistant" | "system" | "user";
1838
+ content: string;
1839
+ }[] | undefined;
1840
+ maxOutputTokens: number;
1841
+ temperature: number;
1842
+ topP: number;
1843
+ } | {
1844
+ kind: "fixture";
1845
+ } | {
1792
1846
  kind: "hosted_harness";
1793
1847
  modelId: string;
1794
1848
  maxOutputTokens?: number | undefined;
@@ -2030,60 +2084,6 @@ export declare class OpenPondModelTasksetRunsClient {
2030
2084
  };
2031
2085
  contentHash: string;
2032
2086
  } | undefined;
2033
- } | {
2034
- kind: "hosted_chat";
2035
- modelId: string;
2036
- localRuntime?: {
2037
- providerId: "claude-code";
2038
- configurationHash: string;
2039
- executableHash: string;
2040
- version: string;
2041
- capabilityHash: string;
2042
- maximumRequestCostUsd: number;
2043
- requestTimeoutMs: number;
2044
- maximumTurns: number;
2045
- holdOpen: boolean;
2046
- } | {
2047
- providerId: "codex";
2048
- configurationHash: string;
2049
- accountHash: string;
2050
- reasoningEffort: "high" | "low" | "medium" | "xhigh";
2051
- maximumRequestCostUsd: number;
2052
- requestTimeoutMs: number;
2053
- } | {
2054
- providerId: "custom-openai-compatible";
2055
- configurationHash: string;
2056
- maximumRequestCostUsd: number;
2057
- requestTimeoutMs: number;
2058
- } | undefined;
2059
- candidate?: {
2060
- artifactId: string;
2061
- contentHash: string;
2062
- preparationId: string;
2063
- dispatchId: string;
2064
- baseProfileId: string;
2065
- workerImageDigest: string;
2066
- } | undefined;
2067
- harness?: {
2068
- harnessRelease: {
2069
- id: string;
2070
- contentHash: string;
2071
- };
2072
- agentSnapshot: {
2073
- id: string;
2074
- contentHash: string;
2075
- };
2076
- sourcePackageHash: string;
2077
- } | undefined;
2078
- messages?: {
2079
- role: "assistant" | "system" | "user";
2080
- content: string;
2081
- }[] | undefined;
2082
- maxOutputTokens: number;
2083
- temperature: number;
2084
- topP: number;
2085
- } | {
2086
- kind: "fixture";
2087
2087
  };
2088
2088
  population: {
2089
2089
  receiptId: string;
@@ -0,0 +1,39 @@
1
+ import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace";
2
+ import type { AddTaskOptions, DatasetTaskAppendReceipt, DatasetTaskInput } from "./dataset-task-ingestion.js";
3
+ export type OpenPondSpanExporterOptions = {
4
+ client: {
5
+ addTask(datasetId: string, task: DatasetTaskInput, options?: AddTaskOptions): Promise<DatasetTaskAppendReceipt>;
6
+ };
7
+ datasetId: string;
8
+ /** Select useful completed runs and redact content. Return null to skip. */
9
+ projectSpan(span: ReadableSpan): DatasetTaskInput | null | undefined;
10
+ /** Match the BatchSpanProcessor limit. Larger batches fail without uploading. */
11
+ maxExportBatchSize?: number;
12
+ /** Per-task request deadline. Projection must be synchronous and bounded. */
13
+ requestTimeoutMillis?: number;
14
+ /** Overall batch deadline, including all task submissions. */
15
+ exportTimeoutMillis?: number;
16
+ };
17
+ export type OpenPondSpanFailure = {
18
+ traceId: string;
19
+ spanId: string;
20
+ error: unknown;
21
+ };
22
+ export declare class OpenPondSpanExportError extends Error {
23
+ readonly failures: readonly OpenPondSpanFailure[];
24
+ constructor(failures: readonly OpenPondSpanFailure[]);
25
+ }
26
+ /**
27
+ * Optional OTel exporter, not an OTLP receiver or automatic instrumentation.
28
+ * Register with BatchSpanProcessor for its bounded background queue. Only the
29
+ * explicit projection is uploaded; no attributes, events, or secrets are copied.
30
+ */
31
+ export declare class OpenPondSpanExporter implements SpanExporter {
32
+ #private;
33
+ lastExportError: Error | undefined;
34
+ constructor(options: OpenPondSpanExporterOptions);
35
+ export(spans: ReadableSpan[], resultCallback: Parameters<SpanExporter["export"]>[1]): void;
36
+ forceFlush(): Promise<void>;
37
+ shutdown(): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=opentelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.d.ts","sourceRoot":"","sources":["../../../../../src/opentelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE9G,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE;QACN,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;KACjH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IACrE,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE;IAA7D,YAAqB,QAAQ,EAAE,SAAS,mBAAmB,EAAE,EAG5D;CACF;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,YAAY;;IAOvD,eAAe,EAAE,KAAK,GAAG,SAAS,CAAC;IAEnC,YAAY,OAAO,EAAE,2BAA2B,EAS/C;IAED,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAkBzF;IA4BK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAwB;IAEnD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9B;CACF"}