blob: 936fbe842bdceae7d11b20cd27e241b7ea814eed [file] [log] [blame]
Lev Walkin5bbff1e2004-06-28 21:13:22 +00001
Lev Walkinb47ddce2004-08-11 05:25:47 +00002/*** <<< INCLUDES [T] >>> ***/
Lev Walkin5bbff1e2004-06-28 21:13:22 +00003
Lev Walkin5bbff1e2004-06-28 21:13:22 +00004#include <NULL.h>
Lev Walkinb47ddce2004-08-11 05:25:47 +00005#include <constr_CHOICE.h>
Lev Walkin5bbff1e2004-06-28 21:13:22 +00006#include <constr_SEQUENCE.h>
7
Lev Walkinb47ddce2004-08-11 05:25:47 +00008/*** <<< DEPS [T] >>> ***/
9
Lev Walkin2e3055d2004-08-20 13:36:32 +000010typedef enum b_PR {
11 b_PR_NOTHING, /* No components present */
12 b_PR_c,
13 b_PR_d,
14 b_PR_e,
15 b_PR_h,
16} b_PR;
17typedef enum e_PR {
18 e_PR_NOTHING, /* No components present */
19 e_PR_f,
20 e_PR_g,
21} e_PR;
22typedef enum h_PR {
23 h_PR_NOTHING, /* No components present */
24 h_PR_i,
25 h_PR_j,
26} h_PR;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000027
28/*** <<< TYPE-DECLS [T] >>> ***/
29
Lev Walkin5bbff1e2004-06-28 21:13:22 +000030typedef struct T {
31 NULL_t a;
32 struct b {
Lev Walkin64399722004-08-11 07:17:22 +000033 b_PR present;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000034 union {
35 NULL_t c;
36 NULL_t d;
37 struct e {
Lev Walkin64399722004-08-11 07:17:22 +000038 e_PR present;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000039 union {
40 NULL_t f;
41 NULL_t g;
42 } choice;
43
44 /* Context for parsing across buffer boundaries */
Lev Walkindfae9752004-09-29 13:19:37 +000045 asn_struct_ctx_t _asn_ctx;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000046 } e;
47 struct h {
Lev Walkin64399722004-08-11 07:17:22 +000048 h_PR present;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000049 union {
50 NULL_t i;
51 NULL_t j;
52 } choice;
53
54 /* Context for parsing across buffer boundaries */
Lev Walkindfae9752004-09-29 13:19:37 +000055 asn_struct_ctx_t _asn_ctx;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000056 } h;
57 } choice;
58
59 /* Context for parsing across buffer boundaries */
Lev Walkindfae9752004-09-29 13:19:37 +000060 asn_struct_ctx_t _asn_ctx;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000061 } b;
62
63 /* Context for parsing across buffer boundaries */
Lev Walkindfae9752004-09-29 13:19:37 +000064 asn_struct_ctx_t _asn_ctx;
Lev Walkin5bbff1e2004-06-28 21:13:22 +000065} T_t;
66
Lev Walkinc8285712005-03-04 22:18:20 +000067/*** <<< FUNC-DECLS [T] >>> ***/
68
69extern asn_TYPE_descriptor_t asn_DEF_T;
70
Lev Walkin5bbff1e2004-06-28 21:13:22 +000071/*** <<< STAT-DEFS [T] >>> ***/
72
Lev Walkine8318b82005-03-06 09:29:03 +000073static asn_TYPE_member_t asn_MBR_e_6[] = {
Lev Walkincc93b0f2004-09-10 09:18:20 +000074 { ATF_NOFLAGS, 0, offsetof(struct e, choice.f),
Lev Walkin2e3055d2004-08-20 13:36:32 +000075 .tag = (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
76 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +000077 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +000078 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +000079 .name = "f"
Lev Walkin5bbff1e2004-06-28 21:13:22 +000080 },
Lev Walkincc93b0f2004-09-10 09:18:20 +000081 { ATF_NOFLAGS, 0, offsetof(struct e, choice.g),
Lev Walkin2e3055d2004-08-20 13:36:32 +000082 .tag = (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
83 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +000084 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +000085 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +000086 .name = "g"
87 },
88};
Lev Walkine8318b82005-03-06 09:29:03 +000089static asn_TYPE_tag2member_t asn_MAP_e_6_tag2el[] = {
Lev Walkin2e3055d2004-08-20 13:36:32 +000090 { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
Lev Walkin4756e5e2005-02-25 08:19:34 +000091 { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 } /* g at 21 */
Lev Walkin2e3055d2004-08-20 13:36:32 +000092};
Lev Walkine8318b82005-03-06 09:29:03 +000093static asn_CHOICE_specifics_t asn_SPC_e_6_specs = {
Lev Walkin2e3055d2004-08-20 13:36:32 +000094 sizeof(struct e),
Lev Walkindfae9752004-09-29 13:19:37 +000095 offsetof(struct e, _asn_ctx),
Lev Walkin2e3055d2004-08-20 13:36:32 +000096 offsetof(struct e, present),
97 sizeof(((struct e *)0)->present),
Lev Walkine8318b82005-03-06 09:29:03 +000098 asn_MAP_e_6_tag2el,
Lev Walkin2e3055d2004-08-20 13:36:32 +000099 2, /* Count of tags in the map */
100 0 /* Whether extensible */
101};
Lev Walkind04430c2004-09-07 06:44:29 +0000102static /* Use -fall-defs-global to expose */
Lev Walkine8318b82005-03-06 09:29:03 +0000103asn_TYPE_descriptor_t asn_DEF_e_6 = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000104 "e",
Lev Walkindc06f6b2004-10-20 15:50:55 +0000105 "e",
Lev Walkina9cc46e2004-09-22 16:06:28 +0000106 CHOICE_free,
107 CHOICE_print,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000108 CHOICE_constraint,
109 CHOICE_decode_ber,
110 CHOICE_encode_der,
Lev Walkin61b40d82004-10-23 15:07:45 +0000111 CHOICE_decode_xer,
Lev Walkina9cc46e2004-09-22 16:06:28 +0000112 CHOICE_encode_xer,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000113 CHOICE_outmost_tag,
Lev Walkin188ed2c2004-09-13 08:31:01 +0000114 0, /* No effective tags (pointer) */
115 0, /* No effective tags (count) */
116 0, /* No tags (pointer) */
117 0, /* No tags (count) */
Lev Walkine8318b82005-03-06 09:29:03 +0000118 asn_MBR_e_6,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000119 2, /* Elements count */
Lev Walkine8318b82005-03-06 09:29:03 +0000120 &asn_SPC_e_6_specs /* Additional specs */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000121};
122
Lev Walkine8318b82005-03-06 09:29:03 +0000123static asn_TYPE_member_t asn_MBR_h_9[] = {
Lev Walkincc93b0f2004-09-10 09:18:20 +0000124 { ATF_NOFLAGS, 0, offsetof(struct h, choice.i),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000125 .tag = (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
126 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +0000127 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000128 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000129 .name = "i"
130 },
Lev Walkincc93b0f2004-09-10 09:18:20 +0000131 { ATF_NOFLAGS, 0, offsetof(struct h, choice.j),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000132 .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
133 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +0000134 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000135 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000136 .name = "j"
137 },
138};
Lev Walkine8318b82005-03-06 09:29:03 +0000139static asn_TYPE_tag2member_t asn_MAP_h_9_tag2el[] = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000140 { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
Lev Walkin4756e5e2005-02-25 08:19:34 +0000141 { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 } /* j at 25 */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000142};
Lev Walkine8318b82005-03-06 09:29:03 +0000143static asn_CHOICE_specifics_t asn_SPC_h_9_specs = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000144 sizeof(struct h),
Lev Walkindfae9752004-09-29 13:19:37 +0000145 offsetof(struct h, _asn_ctx),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000146 offsetof(struct h, present),
147 sizeof(((struct h *)0)->present),
Lev Walkine8318b82005-03-06 09:29:03 +0000148 asn_MAP_h_9_tag2el,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000149 2, /* Count of tags in the map */
150 0 /* Whether extensible */
151};
Lev Walkind04430c2004-09-07 06:44:29 +0000152static /* Use -fall-defs-global to expose */
Lev Walkine8318b82005-03-06 09:29:03 +0000153asn_TYPE_descriptor_t asn_DEF_h_9 = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000154 "h",
Lev Walkindc06f6b2004-10-20 15:50:55 +0000155 "h",
Lev Walkina9cc46e2004-09-22 16:06:28 +0000156 CHOICE_free,
157 CHOICE_print,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000158 CHOICE_constraint,
159 CHOICE_decode_ber,
160 CHOICE_encode_der,
Lev Walkin61b40d82004-10-23 15:07:45 +0000161 CHOICE_decode_xer,
Lev Walkina9cc46e2004-09-22 16:06:28 +0000162 CHOICE_encode_xer,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000163 CHOICE_outmost_tag,
Lev Walkin188ed2c2004-09-13 08:31:01 +0000164 0, /* No effective tags (pointer) */
165 0, /* No effective tags (count) */
166 0, /* No tags (pointer) */
167 0, /* No tags (count) */
Lev Walkine8318b82005-03-06 09:29:03 +0000168 asn_MBR_h_9,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000169 2, /* Elements count */
Lev Walkine8318b82005-03-06 09:29:03 +0000170 &asn_SPC_h_9_specs /* Additional specs */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000171};
172
Lev Walkine8318b82005-03-06 09:29:03 +0000173static asn_TYPE_member_t asn_MBR_b_3[] = {
Lev Walkincc93b0f2004-09-10 09:18:20 +0000174 { ATF_NOFLAGS, 0, offsetof(struct b, choice.c),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000175 .tag = (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
176 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +0000177 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000178 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000179 .name = "c"
180 },
Lev Walkincc93b0f2004-09-10 09:18:20 +0000181 { ATF_NOFLAGS, 0, offsetof(struct b, choice.d),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000182 .tag = (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
183 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +0000184 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000185 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000186 .name = "d"
187 },
Lev Walkincc93b0f2004-09-10 09:18:20 +0000188 { ATF_NOFLAGS, 0, offsetof(struct b, choice.e),
Lev Walkinb9189732004-09-10 09:37:12 +0000189 .tag = -1 /* Ambiguous tag (CHOICE?) */,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000190 .tag_mode = 0,
Lev Walkine8318b82005-03-06 09:29:03 +0000191 .type = (void *)&asn_DEF_e_6,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000192 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000193 .name = "e"
194 },
Lev Walkincc93b0f2004-09-10 09:18:20 +0000195 { ATF_NOFLAGS, 0, offsetof(struct b, choice.h),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000196 .tag = (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
197 .tag_mode = +1, /* EXPLICIT tag at current level */
Lev Walkine8318b82005-03-06 09:29:03 +0000198 .type = (void *)&asn_DEF_h_9,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000199 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000200 .name = "h"
201 },
202};
Lev Walkine8318b82005-03-06 09:29:03 +0000203static asn_TYPE_tag2member_t asn_MAP_b_3_tag2el[] = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000204 { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
205 { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
206 { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
207 { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
Lev Walkin4756e5e2005-02-25 08:19:34 +0000208 { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 } /* h at 24 */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000209};
Lev Walkine8318b82005-03-06 09:29:03 +0000210static asn_CHOICE_specifics_t asn_SPC_b_3_specs = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000211 sizeof(struct b),
Lev Walkindfae9752004-09-29 13:19:37 +0000212 offsetof(struct b, _asn_ctx),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000213 offsetof(struct b, present),
214 sizeof(((struct b *)0)->present),
Lev Walkine8318b82005-03-06 09:29:03 +0000215 asn_MAP_b_3_tag2el,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000216 5, /* Count of tags in the map */
217 0 /* Whether extensible */
218};
Lev Walkind04430c2004-09-07 06:44:29 +0000219static /* Use -fall-defs-global to expose */
Lev Walkine8318b82005-03-06 09:29:03 +0000220asn_TYPE_descriptor_t asn_DEF_b_3 = {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000221 "b",
Lev Walkindc06f6b2004-10-20 15:50:55 +0000222 "b",
Lev Walkina9cc46e2004-09-22 16:06:28 +0000223 CHOICE_free,
224 CHOICE_print,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000225 CHOICE_constraint,
226 CHOICE_decode_ber,
227 CHOICE_encode_der,
Lev Walkin61b40d82004-10-23 15:07:45 +0000228 CHOICE_decode_xer,
Lev Walkina9cc46e2004-09-22 16:06:28 +0000229 CHOICE_encode_xer,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000230 CHOICE_outmost_tag,
Lev Walkin188ed2c2004-09-13 08:31:01 +0000231 0, /* No effective tags (pointer) */
232 0, /* No effective tags (count) */
233 0, /* No tags (pointer) */
234 0, /* No tags (count) */
Lev Walkine8318b82005-03-06 09:29:03 +0000235 asn_MBR_b_3,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000236 4, /* Elements count */
Lev Walkine8318b82005-03-06 09:29:03 +0000237 &asn_SPC_b_3_specs /* Additional specs */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000238};
239
Lev Walkine0272aa2005-03-04 11:26:08 +0000240static asn_TYPE_member_t asn_MBR_T_1[] = {
Lev Walkincc93b0f2004-09-10 09:18:20 +0000241 { ATF_NOFLAGS, 0, offsetof(struct T, a),
Lev Walkin2e3055d2004-08-20 13:36:32 +0000242 .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
243 .tag_mode = -1, /* IMPLICIT tag at current level */
Lev Walkindfae9752004-09-29 13:19:37 +0000244 .type = (void *)&asn_DEF_NULL,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000245 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000246 .name = "a"
247 },
Lev Walkincc93b0f2004-09-10 09:18:20 +0000248 { ATF_NOFLAGS, 0, offsetof(struct T, b),
Lev Walkinb9189732004-09-10 09:37:12 +0000249 .tag = -1 /* Ambiguous tag (CHOICE?) */,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000250 .tag_mode = 0,
Lev Walkine8318b82005-03-06 09:29:03 +0000251 .type = (void *)&asn_DEF_b_3,
Lev Walkinba58e1b2005-01-17 12:20:19 +0000252 .memb_constraints = 0, /* Defer constraints checking to the member type */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000253 .name = "b"
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000254 },
255};
Lev Walkine0272aa2005-03-04 11:26:08 +0000256static ber_tlv_tag_t asn_DEF_T_1_tags[] = {
Lev Walkin188ed2c2004-09-13 08:31:01 +0000257 (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
258 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000259};
Lev Walkine0272aa2005-03-04 11:26:08 +0000260static asn_TYPE_tag2member_t asn_MAP_T_1_tag2el[] = {
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000261 { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 0, 0, 0 }, /* a at 15 */
262 { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 1, 0, 0 }, /* c at 17 */
263 { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
264 { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 1, 0, 0 }, /* f at 20 */
265 { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
Lev Walkin4756e5e2005-02-25 08:19:34 +0000266 { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 1, 0, 0 } /* h at 24 */
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000267};
Lev Walkine0272aa2005-03-04 11:26:08 +0000268static asn_SEQUENCE_specifics_t asn_SPC_T_1_specs = {
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000269 sizeof(struct T),
Lev Walkindfae9752004-09-29 13:19:37 +0000270 offsetof(struct T, _asn_ctx),
Lev Walkine0272aa2005-03-04 11:26:08 +0000271 asn_MAP_T_1_tag2el,
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000272 6, /* Count of tags in the map */
273 -1, /* Start extensions */
274 -1 /* Stop extensions */
275};
Lev Walkindfae9752004-09-29 13:19:37 +0000276asn_TYPE_descriptor_t asn_DEF_T = {
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000277 "T",
Lev Walkindc06f6b2004-10-20 15:50:55 +0000278 "T",
Lev Walkina9cc46e2004-09-22 16:06:28 +0000279 SEQUENCE_free,
280 SEQUENCE_print,
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000281 SEQUENCE_constraint,
282 SEQUENCE_decode_ber,
283 SEQUENCE_encode_der,
Lev Walkin61b40d82004-10-23 15:07:45 +0000284 SEQUENCE_decode_xer,
Lev Walkina9cc46e2004-09-22 16:06:28 +0000285 SEQUENCE_encode_xer,
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000286 0, /* Use generic outmost tag fetcher */
Lev Walkine0272aa2005-03-04 11:26:08 +0000287 asn_DEF_T_1_tags,
288 sizeof(asn_DEF_T_1_tags)
289 /sizeof(asn_DEF_T_1_tags[0]) - 1, /* 1 */
290 asn_DEF_T_1_tags, /* Same as above */
291 sizeof(asn_DEF_T_1_tags)
292 /sizeof(asn_DEF_T_1_tags[0]), /* 2 */
293 asn_MBR_T_1,
Lev Walkin2e3055d2004-08-20 13:36:32 +0000294 2, /* Elements count */
Lev Walkine0272aa2005-03-04 11:26:08 +0000295 &asn_SPC_T_1_specs /* Additional specs */
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000296};
297