@2702rebels/wpidata 1.0.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/LICENSE +28 -0
- package/README.md +5 -0
- package/dist/abstractions.cjs +0 -0
- package/dist/abstractions.d.cts +246 -0
- package/dist/abstractions.d.cts.map +1 -0
- package/dist/abstractions.d.mts +246 -0
- package/dist/abstractions.d.mts.map +1 -0
- package/dist/abstractions.mjs +1 -0
- package/dist/formats/json.cjs +32 -0
- package/dist/formats/json.d.cts +14 -0
- package/dist/formats/json.d.cts.map +1 -0
- package/dist/formats/json.d.mts +14 -0
- package/dist/formats/json.d.mts.map +1 -0
- package/dist/formats/json.mjs +33 -0
- package/dist/formats/json.mjs.map +1 -0
- package/dist/formats/msgpack.cjs +30 -0
- package/dist/formats/msgpack.d.cts +14 -0
- package/dist/formats/msgpack.d.cts.map +1 -0
- package/dist/formats/msgpack.d.mts +14 -0
- package/dist/formats/msgpack.d.mts.map +1 -0
- package/dist/formats/msgpack.mjs +31 -0
- package/dist/formats/msgpack.mjs.map +1 -0
- package/dist/formats/protobuf.cjs +130 -0
- package/dist/formats/protobuf.d.cts +68 -0
- package/dist/formats/protobuf.d.cts.map +1 -0
- package/dist/formats/protobuf.d.mts +68 -0
- package/dist/formats/protobuf.d.mts.map +1 -0
- package/dist/formats/protobuf.mjs +128 -0
- package/dist/formats/protobuf.mjs.map +1 -0
- package/dist/formats/struct.cjs +593 -0
- package/dist/formats/struct.d.cts +134 -0
- package/dist/formats/struct.d.cts.map +1 -0
- package/dist/formats/struct.d.mts +134 -0
- package/dist/formats/struct.d.mts.map +1 -0
- package/dist/formats/struct.mjs +591 -0
- package/dist/formats/struct.mjs.map +1 -0
- package/dist/sink.cjs +360 -0
- package/dist/sink.d.cts +93 -0
- package/dist/sink.d.cts.map +1 -0
- package/dist/sink.d.mts +93 -0
- package/dist/sink.d.mts.map +1 -0
- package/dist/sink.mjs +361 -0
- package/dist/sink.mjs.map +1 -0
- package/dist/types/protobuf.cjs +0 -0
- package/dist/types/protobuf.d.cts +302 -0
- package/dist/types/protobuf.d.cts.map +1 -0
- package/dist/types/protobuf.d.mts +302 -0
- package/dist/types/protobuf.d.mts.map +1 -0
- package/dist/types/protobuf.mjs +1 -0
- package/dist/types/sendable.cjs +0 -0
- package/dist/types/sendable.d.cts +225 -0
- package/dist/types/sendable.d.cts.map +1 -0
- package/dist/types/sendable.d.mts +225 -0
- package/dist/types/sendable.d.mts.map +1 -0
- package/dist/types/sendable.mjs +1 -0
- package/dist/types/struct.cjs +0 -0
- package/dist/types/struct.d.cts +304 -0
- package/dist/types/struct.d.cts.map +1 -0
- package/dist/types/struct.d.mts +304 -0
- package/dist/types/struct.d.mts.map +1 -0
- package/dist/types/struct.mjs +1 -0
- package/dist/utils.cjs +140 -0
- package/dist/utils.d.cts +40 -0
- package/dist/utils.d.cts.map +1 -0
- package/dist/utils.d.mts +40 -0
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +135 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +51 -0
- package/src/abstractions.ts +308 -0
- package/src/formats/json.ts +53 -0
- package/src/formats/msgpack.ts +42 -0
- package/src/formats/protobuf.ts +213 -0
- package/src/formats/struct.test.ts +814 -0
- package/src/formats/struct.ts +992 -0
- package/src/sink.ts +611 -0
- package/src/types/protobuf.ts +334 -0
- package/src/types/sendable.ts +244 -0
- package/src/types/struct.ts +333 -0
- package/src/utils.ts +241 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { DataChannel, DataTransformer, DataTypeImpl, StructuredTypeDescriptor } from "../abstractions.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/formats/struct.d.ts
|
|
4
|
+
type StructFieldType = "ref" | "bool" | "char" | "int8" | "int16" | "int32" | "int64" | "uint8" | "uint16" | "uint32" | "uint64" | "float" | "double";
|
|
5
|
+
/** Describes individual field in {@link StructDescriptor}. */
|
|
6
|
+
type StructFieldDescriptor = {
|
|
7
|
+
/** Field identifier */
|
|
8
|
+
identifier: string;
|
|
9
|
+
/** Field value type */
|
|
10
|
+
type: StructFieldType;
|
|
11
|
+
/** Reference for complex (nested) type */
|
|
12
|
+
typeRef?: StructDescriptor | string;
|
|
13
|
+
/** Offset to the packed field data in bytes */
|
|
14
|
+
offset: number;
|
|
15
|
+
/** Size of the packed field data in bytes */
|
|
16
|
+
size: number;
|
|
17
|
+
/** Fixed array size */
|
|
18
|
+
arraySize?: number;
|
|
19
|
+
/** Bit width of the field data (bit-field only) */
|
|
20
|
+
bitWidth?: number;
|
|
21
|
+
/** Bit shift for the field data (bit-field only) */
|
|
22
|
+
bitShift?: number;
|
|
23
|
+
/** Enum specification */
|
|
24
|
+
enum?: Map<number, string>;
|
|
25
|
+
};
|
|
26
|
+
/** Describes named struct type. */
|
|
27
|
+
type StructDescriptor = {
|
|
28
|
+
/** Struct type name */
|
|
29
|
+
name: string;
|
|
30
|
+
/** Struct fields in packed order */
|
|
31
|
+
fields: ReadonlyArray<StructFieldDescriptor>;
|
|
32
|
+
/** Total packed size in bytes */
|
|
33
|
+
size: number;
|
|
34
|
+
/** Missing dependencies */
|
|
35
|
+
unresolved?: Set<string>;
|
|
36
|
+
};
|
|
37
|
+
type UnpackStructOptions = {
|
|
38
|
+
/**
|
|
39
|
+
* Indicates that integer numeric values with enum specification should be converted
|
|
40
|
+
* to the corresponding enum string value if possible.
|
|
41
|
+
*/
|
|
42
|
+
useEnum?: boolean;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Unpacks serialized struct data into JSON object.
|
|
46
|
+
*
|
|
47
|
+
* Implementation of WPILiB packed struct serialization protocol
|
|
48
|
+
* https://github.com/wpilibsuite/allwpilib/blob/main/wpiutil/doc/struct.adoc
|
|
49
|
+
*
|
|
50
|
+
* @param name struct type name
|
|
51
|
+
* @param data serialized binary data
|
|
52
|
+
* @param repository repository of available descriptors
|
|
53
|
+
* @param options additional options
|
|
54
|
+
*/
|
|
55
|
+
declare function unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, repository: StructRepository, options?: UnpackStructOptions): Record<string, unknown>;
|
|
56
|
+
/**
|
|
57
|
+
* Packs JSON object into serialized struct data.
|
|
58
|
+
*
|
|
59
|
+
* @param name struct type name
|
|
60
|
+
* @param value JSON object to pack
|
|
61
|
+
* @param repository repository of available descriptors
|
|
62
|
+
* @returns ArrayBuffer containing serialized data
|
|
63
|
+
*/
|
|
64
|
+
declare function pack(name: string, value: Record<string, unknown>, repository: StructRepository): Uint8Array<ArrayBuffer>;
|
|
65
|
+
/** Repository of struct descriptors. */
|
|
66
|
+
declare class StructRepository {
|
|
67
|
+
private readonly unresolved;
|
|
68
|
+
/** Descriptors in the repository. */
|
|
69
|
+
readonly descriptors: Map<string, StructDescriptor>;
|
|
70
|
+
/**
|
|
71
|
+
* Computes field bte offsets and returns total packed size in bytes.
|
|
72
|
+
*
|
|
73
|
+
* This method assumes that all fields have resolved external dependencies
|
|
74
|
+
* and will compute byte offsets and bit shifts for bit-field packed fields.
|
|
75
|
+
*/
|
|
76
|
+
private static computeFieldOffsets;
|
|
77
|
+
/**
|
|
78
|
+
* Attempts to finalize any unresolved descriptors with the recently resolved one.
|
|
79
|
+
*/
|
|
80
|
+
private resolve;
|
|
81
|
+
/**
|
|
82
|
+
* Determines whether type can be transformed, indicating that
|
|
83
|
+
* the parsed type descriptor is present.
|
|
84
|
+
*
|
|
85
|
+
* @param name struct type name
|
|
86
|
+
*/
|
|
87
|
+
canTransform(name: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Gets the struct type serialized size in bytes.
|
|
90
|
+
*
|
|
91
|
+
* @param name struct type name
|
|
92
|
+
*/
|
|
93
|
+
getSize(name: string): number;
|
|
94
|
+
/**
|
|
95
|
+
* Unpacks serialized struct data into JSON object.
|
|
96
|
+
*
|
|
97
|
+
* @param name struct type name
|
|
98
|
+
* @param data serialized binary data
|
|
99
|
+
* @param options additional options
|
|
100
|
+
*/
|
|
101
|
+
unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, options?: UnpackStructOptions): Record<string, unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Packs JSON object into serialized struct data.
|
|
104
|
+
*
|
|
105
|
+
* @param name struct type name
|
|
106
|
+
* @param value JSON object to pack
|
|
107
|
+
*/
|
|
108
|
+
pack(name: string, value: Record<string, unknown>): Uint8Array<ArrayBuffer>;
|
|
109
|
+
/**
|
|
110
|
+
* Parses struct schema and adds the resulting descriptor to the repository.
|
|
111
|
+
*
|
|
112
|
+
* The descriptor may not be fully processed if it references other structs that
|
|
113
|
+
* we have not seen yet. Such pending descriptors will be processed automatically,
|
|
114
|
+
* once corresponding structs have been added. This code checks for circular
|
|
115
|
+
* dependencies and will fail when one is detected.
|
|
116
|
+
*
|
|
117
|
+
* @param name struct type name
|
|
118
|
+
* @param data struct schema in UTF-8 encoded binary representation
|
|
119
|
+
* @returns parsed descriptor or `null` if the operation failed
|
|
120
|
+
*/
|
|
121
|
+
add(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>): StructDescriptor | null;
|
|
122
|
+
}
|
|
123
|
+
/** Implements {@link DataTransformer} interface for the `struct` serialization protocol. */
|
|
124
|
+
declare class StructDataTransformer implements DataTransformer {
|
|
125
|
+
private readonly repo;
|
|
126
|
+
inspect(source: string, name: string, type: string, metadata?: string | Record<string, unknown>): DataChannel | string | undefined;
|
|
127
|
+
schema(typeName: string, value: unknown): void;
|
|
128
|
+
deserialize(value: unknown, type?: StructuredTypeDescriptor): DataTypeImpl | undefined;
|
|
129
|
+
serialize(value: unknown, type?: StructuredTypeDescriptor): Uint8Array;
|
|
130
|
+
canTransform(type: string): boolean;
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
export { StructDataTransformer, StructDescriptor, StructFieldDescriptor, StructFieldType, StructRepository, UnpackStructOptions, pack, unpack };
|
|
134
|
+
//# sourceMappingURL=struct.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.cts","names":[],"sources":["../../src/formats/struct.ts"],"sourcesContent":[],"mappings":";;;KAQY,eAAA;;AAAA,KAgBA,qBAAA,GAhBe;EAgBf;EAIJ,UAAA,EAAA,MAAA;EAEI;EAYH,IAAA,EAdD,eAcC;EAAG;EAIA,OAAA,CAAA,EAhBA,gBAgBgB,GAAA,MAAA;EAIJ;EAAd,MAAA,EAAA,MAAA;EAIK;EAAG,IAAA,EAAA,MAAA;EAUN;EAmBI,SAAM,CAAA,EAAA,MAAA;EAEL;EAAT,QAAA,CAAA,EAAA,MAAA;EAAuC;EAAX,QAAA,CAAA,EAAA,MAAA;EACtB;EACF,IAAA,CAAA,EA7CH,GA6CG,CAAA,MAAA,EAAA,MAAA,CAAA;CAAmB;;AAyBf,KAlEJ,gBAAA,GAkEQ;EAAsB;EAAqC,IAAA,EAAA,MAAA;EAAgB;EAAA,MAAA,EA9DrF,aA8DqF,CA9DvE,qBA8DuE,CAAA;EAAA;EAkclF,IAAA,EAAA,MAAA;EAIgB;EAAA,UAAA,CAAA,EAhgBd,GAggBc,CAAA,MAAA,CAAA;CAyHV;AAAT,KA/mBE,mBAAA,GA+mBF;EAAuC;;;;EAYd,OAAA,CAAA,EAAA,OAAA;CAAuB;;;;;;;;AAsL1D;;;;AA0CuE,iBAx0BvD,MAAA,CAw0BuD,IAAA,EAAA,MAAA,EAAA,IAAA,EAt0B/D,QAs0B+D,CAt0BtD,eAs0BsD,CAAA,GAt0BnC,UAs0BmC,CAt0BxB,eAs0BwB,CAAA,EAAA,UAAA,EAr0BzD,gBAq0ByD,EAAA,OAAA,CAAA,EAp0B3D,mBAo0B2D,CAAA,EAp0BxC,MAo0BwC,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;;;iBA3yBvD,IAAA,sBAA0B,qCAAqC,mBAAgB,WAAA;;cAkclF,gBAAA;;;wBAIgB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAyHnB,SAAS,mBAAmB,WAAW,4BACnC,sBAAmB;;;;;;;4BAWE,0BAAuB,WAAA;;;;;;;;;;;;;0BAgBzB,SAAS,mBAAmB,WAAW,mBAAmB;;;cAsK9E,qBAAA,YAAiC;;0EAOtB,0BACnB;;qCAkCuC,2BAA2B;mCAkC7B,2BAA2B"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { DataChannel, DataTransformer, DataTypeImpl, StructuredTypeDescriptor } from "../abstractions.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/formats/struct.d.ts
|
|
4
|
+
type StructFieldType = "ref" | "bool" | "char" | "int8" | "int16" | "int32" | "int64" | "uint8" | "uint16" | "uint32" | "uint64" | "float" | "double";
|
|
5
|
+
/** Describes individual field in {@link StructDescriptor}. */
|
|
6
|
+
type StructFieldDescriptor = {
|
|
7
|
+
/** Field identifier */
|
|
8
|
+
identifier: string;
|
|
9
|
+
/** Field value type */
|
|
10
|
+
type: StructFieldType;
|
|
11
|
+
/** Reference for complex (nested) type */
|
|
12
|
+
typeRef?: StructDescriptor | string;
|
|
13
|
+
/** Offset to the packed field data in bytes */
|
|
14
|
+
offset: number;
|
|
15
|
+
/** Size of the packed field data in bytes */
|
|
16
|
+
size: number;
|
|
17
|
+
/** Fixed array size */
|
|
18
|
+
arraySize?: number;
|
|
19
|
+
/** Bit width of the field data (bit-field only) */
|
|
20
|
+
bitWidth?: number;
|
|
21
|
+
/** Bit shift for the field data (bit-field only) */
|
|
22
|
+
bitShift?: number;
|
|
23
|
+
/** Enum specification */
|
|
24
|
+
enum?: Map<number, string>;
|
|
25
|
+
};
|
|
26
|
+
/** Describes named struct type. */
|
|
27
|
+
type StructDescriptor = {
|
|
28
|
+
/** Struct type name */
|
|
29
|
+
name: string;
|
|
30
|
+
/** Struct fields in packed order */
|
|
31
|
+
fields: ReadonlyArray<StructFieldDescriptor>;
|
|
32
|
+
/** Total packed size in bytes */
|
|
33
|
+
size: number;
|
|
34
|
+
/** Missing dependencies */
|
|
35
|
+
unresolved?: Set<string>;
|
|
36
|
+
};
|
|
37
|
+
type UnpackStructOptions = {
|
|
38
|
+
/**
|
|
39
|
+
* Indicates that integer numeric values with enum specification should be converted
|
|
40
|
+
* to the corresponding enum string value if possible.
|
|
41
|
+
*/
|
|
42
|
+
useEnum?: boolean;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Unpacks serialized struct data into JSON object.
|
|
46
|
+
*
|
|
47
|
+
* Implementation of WPILiB packed struct serialization protocol
|
|
48
|
+
* https://github.com/wpilibsuite/allwpilib/blob/main/wpiutil/doc/struct.adoc
|
|
49
|
+
*
|
|
50
|
+
* @param name struct type name
|
|
51
|
+
* @param data serialized binary data
|
|
52
|
+
* @param repository repository of available descriptors
|
|
53
|
+
* @param options additional options
|
|
54
|
+
*/
|
|
55
|
+
declare function unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, repository: StructRepository, options?: UnpackStructOptions): Record<string, unknown>;
|
|
56
|
+
/**
|
|
57
|
+
* Packs JSON object into serialized struct data.
|
|
58
|
+
*
|
|
59
|
+
* @param name struct type name
|
|
60
|
+
* @param value JSON object to pack
|
|
61
|
+
* @param repository repository of available descriptors
|
|
62
|
+
* @returns ArrayBuffer containing serialized data
|
|
63
|
+
*/
|
|
64
|
+
declare function pack(name: string, value: Record<string, unknown>, repository: StructRepository): Uint8Array<ArrayBuffer>;
|
|
65
|
+
/** Repository of struct descriptors. */
|
|
66
|
+
declare class StructRepository {
|
|
67
|
+
private readonly unresolved;
|
|
68
|
+
/** Descriptors in the repository. */
|
|
69
|
+
readonly descriptors: Map<string, StructDescriptor>;
|
|
70
|
+
/**
|
|
71
|
+
* Computes field bte offsets and returns total packed size in bytes.
|
|
72
|
+
*
|
|
73
|
+
* This method assumes that all fields have resolved external dependencies
|
|
74
|
+
* and will compute byte offsets and bit shifts for bit-field packed fields.
|
|
75
|
+
*/
|
|
76
|
+
private static computeFieldOffsets;
|
|
77
|
+
/**
|
|
78
|
+
* Attempts to finalize any unresolved descriptors with the recently resolved one.
|
|
79
|
+
*/
|
|
80
|
+
private resolve;
|
|
81
|
+
/**
|
|
82
|
+
* Determines whether type can be transformed, indicating that
|
|
83
|
+
* the parsed type descriptor is present.
|
|
84
|
+
*
|
|
85
|
+
* @param name struct type name
|
|
86
|
+
*/
|
|
87
|
+
canTransform(name: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Gets the struct type serialized size in bytes.
|
|
90
|
+
*
|
|
91
|
+
* @param name struct type name
|
|
92
|
+
*/
|
|
93
|
+
getSize(name: string): number;
|
|
94
|
+
/**
|
|
95
|
+
* Unpacks serialized struct data into JSON object.
|
|
96
|
+
*
|
|
97
|
+
* @param name struct type name
|
|
98
|
+
* @param data serialized binary data
|
|
99
|
+
* @param options additional options
|
|
100
|
+
*/
|
|
101
|
+
unpack(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>, options?: UnpackStructOptions): Record<string, unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Packs JSON object into serialized struct data.
|
|
104
|
+
*
|
|
105
|
+
* @param name struct type name
|
|
106
|
+
* @param value JSON object to pack
|
|
107
|
+
*/
|
|
108
|
+
pack(name: string, value: Record<string, unknown>): Uint8Array<ArrayBuffer>;
|
|
109
|
+
/**
|
|
110
|
+
* Parses struct schema and adds the resulting descriptor to the repository.
|
|
111
|
+
*
|
|
112
|
+
* The descriptor may not be fully processed if it references other structs that
|
|
113
|
+
* we have not seen yet. Such pending descriptors will be processed automatically,
|
|
114
|
+
* once corresponding structs have been added. This code checks for circular
|
|
115
|
+
* dependencies and will fail when one is detected.
|
|
116
|
+
*
|
|
117
|
+
* @param name struct type name
|
|
118
|
+
* @param data struct schema in UTF-8 encoded binary representation
|
|
119
|
+
* @returns parsed descriptor or `null` if the operation failed
|
|
120
|
+
*/
|
|
121
|
+
add(name: string, data: DataView<ArrayBufferLike> | Uint8Array<ArrayBufferLike>): StructDescriptor | null;
|
|
122
|
+
}
|
|
123
|
+
/** Implements {@link DataTransformer} interface for the `struct` serialization protocol. */
|
|
124
|
+
declare class StructDataTransformer implements DataTransformer {
|
|
125
|
+
private readonly repo;
|
|
126
|
+
inspect(source: string, name: string, type: string, metadata?: string | Record<string, unknown>): DataChannel | string | undefined;
|
|
127
|
+
schema(typeName: string, value: unknown): void;
|
|
128
|
+
deserialize(value: unknown, type?: StructuredTypeDescriptor): DataTypeImpl | undefined;
|
|
129
|
+
serialize(value: unknown, type?: StructuredTypeDescriptor): Uint8Array;
|
|
130
|
+
canTransform(type: string): boolean;
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
export { StructDataTransformer, StructDescriptor, StructFieldDescriptor, StructFieldType, StructRepository, UnpackStructOptions, pack, unpack };
|
|
134
|
+
//# sourceMappingURL=struct.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.mts","names":[],"sources":["../../src/formats/struct.ts"],"sourcesContent":[],"mappings":";;;KAQY,eAAA;;AAAA,KAgBA,qBAAA,GAhBe;EAgBf;EAIJ,UAAA,EAAA,MAAA;EAEI;EAYH,IAAA,EAdD,eAcC;EAAG;EAIA,OAAA,CAAA,EAhBA,gBAgBgB,GAAA,MAAA;EAIJ;EAAd,MAAA,EAAA,MAAA;EAIK;EAAG,IAAA,EAAA,MAAA;EAUN;EAmBI,SAAM,CAAA,EAAA,MAAA;EAEL;EAAT,QAAA,CAAA,EAAA,MAAA;EAAuC;EAAX,QAAA,CAAA,EAAA,MAAA;EACtB;EACF,IAAA,CAAA,EA7CH,GA6CG,CAAA,MAAA,EAAA,MAAA,CAAA;CAAmB;;AAyBf,KAlEJ,gBAAA,GAkEQ;EAAsB;EAAqC,IAAA,EAAA,MAAA;EAAgB;EAAA,MAAA,EA9DrF,aA8DqF,CA9DvE,qBA8DuE,CAAA;EAAA;EAkclF,IAAA,EAAA,MAAA;EAIgB;EAAA,UAAA,CAAA,EAhgBd,GAggBc,CAAA,MAAA,CAAA;CAyHV;AAAT,KA/mBE,mBAAA,GA+mBF;EAAuC;;;;EAYd,OAAA,CAAA,EAAA,OAAA;CAAuB;;;;;;;;AAsL1D;;;;AA0CuE,iBAx0BvD,MAAA,CAw0BuD,IAAA,EAAA,MAAA,EAAA,IAAA,EAt0B/D,QAs0B+D,CAt0BtD,eAs0BsD,CAAA,GAt0BnC,UAs0BmC,CAt0BxB,eAs0BwB,CAAA,EAAA,UAAA,EAr0BzD,gBAq0ByD,EAAA,OAAA,CAAA,EAp0B3D,mBAo0B2D,CAAA,EAp0BxC,MAo0BwC,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;;;iBA3yBvD,IAAA,sBAA0B,qCAAqC,mBAAgB,WAAA;;cAkclF,gBAAA;;;wBAIgB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAyHnB,SAAS,mBAAmB,WAAW,4BACnC,sBAAmB;;;;;;;4BAWE,0BAAuB,WAAA;;;;;;;;;;;;;0BAgBzB,SAAS,mBAAmB,WAAW,mBAAmB;;;cAsK9E,qBAAA,YAAiC;;0EAOtB,0BACnB;;qCAkCuC,2BAA2B;mCAkC7B,2BAA2B"}
|