]>
Commit | Line | Data |
---|---|---|
fa3c4d47 TK |
1 | 2018-01-07 Thomas Koenig <tkoenig@gcc.gnu.org> |
2 | ||
3 | * libgfortran.h (GFC_DTYPE_COPY): New macro. | |
4 | (GFC_DTYPE_COPY_SETRANK): New macro. | |
5 | (GFC_DTYPE_IS_UNSET): New macro. | |
6 | * intrinsics/cshift0.c (cshift0): Use new macros. | |
7 | * intrinsics/eoshift0.c (eoshift0): Likewise. | |
8 | * intrinsics/eoshift2.c (eoshift2): Likewise. | |
9 | * intrinsics/move_alloc.c (move_alloc): Likewise. | |
10 | * intrinsics/reshape_generic.c (reshape_internal): Likewise. | |
11 | * intrinsics/spread_generic.c (spread_internal): Likewise. | |
12 | * intrinsics/spread_generic.c (spread_scalar): Likewise. | |
13 | * intrinsics/spread_generic.c (spread_char_scalar): Likewise. | |
14 | * intrinsics/spread_generic.c (spread_char4_scalar): Likewise. | |
15 | * intrinsics/unpack_generic.c (unpack0): Likewise. | |
16 | * intrinsics/unpack_generic.c (unpack0_char): Likewise. | |
17 | * intrinsics/unpack_generic.c (unpack0_char4): Likewise. | |
18 | * m4/cshift1.m4 (cshift1): Likewise. | |
19 | * m4/eoshift1.m4 (eoshift1): Likewise. | |
20 | * m4/eoshift3.m4 (eoshift3): Likewise. | |
21 | * m4/iforeach-s.m4: Likewise. | |
22 | * m4/iforeach.m4: Likewise. | |
23 | * m4/ifunction-s.m4: Likewise. | |
24 | * m4/ifunction-s2.m4: Likewise. | |
25 | * m4/ifunction.m4: Likewise. | |
26 | * m4/ifunction_logical.m4: Likewise. | |
27 | * m4/reshape.m4: Likewise. | |
28 | * m4/spread.m4: Likewise. | |
29 | * generated/all_l1.c : Regenerated. | |
30 | * generated/all_l16.c : Regenerated. | |
31 | * generated/all_l2.c : Regenerated. | |
32 | * generated/all_l4.c : Regenerated. | |
33 | * generated/all_l8.c : Regenerated. | |
34 | * generated/any_l1.c : Regenerated. | |
35 | * generated/any_l16.c : Regenerated. | |
36 | * generated/any_l2.c : Regenerated. | |
37 | * generated/any_l4.c : Regenerated. | |
38 | * generated/any_l8.c : Regenerated. | |
39 | * generated/count_16_l.c : Regenerated. | |
40 | * generated/count_1_l.c : Regenerated. | |
41 | * generated/count_2_l.c : Regenerated. | |
42 | * generated/count_4_l.c : Regenerated. | |
43 | * generated/count_8_l.c : Regenerated. | |
44 | * generated/cshift1_16.c : Regenerated. | |
45 | * generated/cshift1_4.c : Regenerated. | |
46 | * generated/cshift1_8.c : Regenerated. | |
47 | * generated/eoshift1_16.c : Regenerated. | |
48 | * generated/eoshift1_4.c : Regenerated. | |
49 | * generated/eoshift1_8.c : Regenerated. | |
50 | * generated/eoshift3_16.c : Regenerated. | |
51 | * generated/eoshift3_4.c : Regenerated. | |
52 | * generated/eoshift3_8.c : Regenerated. | |
53 | * generated/iall_i1.c : Regenerated. | |
54 | * generated/iall_i16.c : Regenerated. | |
55 | * generated/iall_i2.c : Regenerated. | |
56 | * generated/iall_i4.c : Regenerated. | |
57 | * generated/iall_i8.c : Regenerated. | |
58 | * generated/iany_i1.c : Regenerated. | |
59 | * generated/iany_i16.c : Regenerated. | |
60 | * generated/iany_i2.c : Regenerated. | |
61 | * generated/iany_i4.c : Regenerated. | |
62 | * generated/iany_i8.c : Regenerated. | |
63 | * generated/iparity_i1.c : Regenerated. | |
64 | * generated/iparity_i16.c : Regenerated. | |
65 | * generated/iparity_i2.c : Regenerated. | |
66 | * generated/iparity_i4.c : Regenerated. | |
67 | * generated/iparity_i8.c : Regenerated. | |
68 | * generated/maxloc0_16_i1.c : Regenerated. | |
69 | * generated/maxloc0_16_i16.c : Regenerated. | |
70 | * generated/maxloc0_16_i2.c : Regenerated. | |
71 | * generated/maxloc0_16_i4.c : Regenerated. | |
72 | * generated/maxloc0_16_i8.c : Regenerated. | |
73 | * generated/maxloc0_16_r10.c : Regenerated. | |
74 | * generated/maxloc0_16_r16.c : Regenerated. | |
75 | * generated/maxloc0_16_r4.c : Regenerated. | |
76 | * generated/maxloc0_16_r8.c : Regenerated. | |
77 | * generated/maxloc0_16_s1.c : Regenerated. | |
78 | * generated/maxloc0_16_s4.c : Regenerated. | |
79 | * generated/maxloc0_4_i1.c : Regenerated. | |
80 | * generated/maxloc0_4_i16.c : Regenerated. | |
81 | * generated/maxloc0_4_i2.c : Regenerated. | |
82 | * generated/maxloc0_4_i4.c : Regenerated. | |
83 | * generated/maxloc0_4_i8.c : Regenerated. | |
84 | * generated/maxloc0_4_r10.c : Regenerated. | |
85 | * generated/maxloc0_4_r16.c : Regenerated. | |
86 | * generated/maxloc0_4_r4.c : Regenerated. | |
87 | * generated/maxloc0_4_r8.c : Regenerated. | |
88 | * generated/maxloc0_4_s1.c : Regenerated. | |
89 | * generated/maxloc0_4_s4.c : Regenerated. | |
90 | * generated/maxloc0_8_i1.c : Regenerated. | |
91 | * generated/maxloc0_8_i16.c : Regenerated. | |
92 | * generated/maxloc0_8_i2.c : Regenerated. | |
93 | * generated/maxloc0_8_i4.c : Regenerated. | |
94 | * generated/maxloc0_8_i8.c : Regenerated. | |
95 | * generated/maxloc0_8_r10.c : Regenerated. | |
96 | * generated/maxloc0_8_r16.c : Regenerated. | |
97 | * generated/maxloc0_8_r4.c : Regenerated. | |
98 | * generated/maxloc0_8_r8.c : Regenerated. | |
99 | * generated/maxloc0_8_s1.c : Regenerated. | |
100 | * generated/maxloc0_8_s4.c : Regenerated. | |
101 | * generated/maxloc1_16_i1.c : Regenerated. | |
102 | * generated/maxloc1_16_i16.c : Regenerated. | |
103 | * generated/maxloc1_16_i2.c : Regenerated. | |
104 | * generated/maxloc1_16_i4.c : Regenerated. | |
105 | * generated/maxloc1_16_i8.c : Regenerated. | |
106 | * generated/maxloc1_16_r10.c : Regenerated. | |
107 | * generated/maxloc1_16_r16.c : Regenerated. | |
108 | * generated/maxloc1_16_r4.c : Regenerated. | |
109 | * generated/maxloc1_16_r8.c : Regenerated. | |
110 | * generated/maxloc1_16_s1.c : Regenerated. | |
111 | * generated/maxloc1_16_s4.c : Regenerated. | |
112 | * generated/maxloc1_4_i1.c : Regenerated. | |
113 | * generated/maxloc1_4_i16.c : Regenerated. | |
114 | * generated/maxloc1_4_i2.c : Regenerated. | |
115 | * generated/maxloc1_4_i4.c : Regenerated. | |
116 | * generated/maxloc1_4_i8.c : Regenerated. | |
117 | * generated/maxloc1_4_r10.c : Regenerated. | |
118 | * generated/maxloc1_4_r16.c : Regenerated. | |
119 | * generated/maxloc1_4_r4.c : Regenerated. | |
120 | * generated/maxloc1_4_r8.c : Regenerated. | |
121 | * generated/maxloc1_4_s1.c : Regenerated. | |
122 | * generated/maxloc1_4_s4.c : Regenerated. | |
123 | * generated/maxloc1_8_i1.c : Regenerated. | |
124 | * generated/maxloc1_8_i16.c : Regenerated. | |
125 | * generated/maxloc1_8_i2.c : Regenerated. | |
126 | * generated/maxloc1_8_i4.c : Regenerated. | |
127 | * generated/maxloc1_8_i8.c : Regenerated. | |
128 | * generated/maxloc1_8_r10.c : Regenerated. | |
129 | * generated/maxloc1_8_r16.c : Regenerated. | |
130 | * generated/maxloc1_8_r4.c : Regenerated. | |
131 | * generated/maxloc1_8_r8.c : Regenerated. | |
132 | * generated/maxloc1_8_s1.c : Regenerated. | |
133 | * generated/maxloc1_8_s4.c : Regenerated. | |
134 | * generated/maxval1_s1.c : Regenerated. | |
135 | * generated/maxval1_s4.c : Regenerated. | |
136 | * generated/maxval_i1.c : Regenerated. | |
137 | * generated/maxval_i16.c : Regenerated. | |
138 | * generated/maxval_i2.c : Regenerated. | |
139 | * generated/maxval_i4.c : Regenerated. | |
140 | * generated/maxval_i8.c : Regenerated. | |
141 | * generated/maxval_r10.c : Regenerated. | |
142 | * generated/maxval_r16.c : Regenerated. | |
143 | * generated/maxval_r4.c : Regenerated. | |
144 | * generated/maxval_r8.c : Regenerated. | |
145 | * generated/minloc0_16_i1.c : Regenerated. | |
146 | * generated/minloc0_16_i16.c : Regenerated. | |
147 | * generated/minloc0_16_i2.c : Regenerated. | |
148 | * generated/minloc0_16_i4.c : Regenerated. | |
149 | * generated/minloc0_16_i8.c : Regenerated. | |
150 | * generated/minloc0_16_r10.c : Regenerated. | |
151 | * generated/minloc0_16_r16.c : Regenerated. | |
152 | * generated/minloc0_16_r4.c : Regenerated. | |
153 | * generated/minloc0_16_r8.c : Regenerated. | |
154 | * generated/minloc0_16_s1.c : Regenerated. | |
155 | * generated/minloc0_16_s4.c : Regenerated. | |
156 | * generated/minloc0_4_i1.c : Regenerated. | |
157 | * generated/minloc0_4_i16.c : Regenerated. | |
158 | * generated/minloc0_4_i2.c : Regenerated. | |
159 | * generated/minloc0_4_i4.c : Regenerated. | |
160 | * generated/minloc0_4_i8.c : Regenerated. | |
161 | * generated/minloc0_4_r10.c : Regenerated. | |
162 | * generated/minloc0_4_r16.c : Regenerated. | |
163 | * generated/minloc0_4_r4.c : Regenerated. | |
164 | * generated/minloc0_4_r8.c : Regenerated. | |
165 | * generated/minloc0_4_s1.c : Regenerated. | |
166 | * generated/minloc0_4_s4.c : Regenerated. | |
167 | * generated/minloc0_8_i1.c : Regenerated. | |
168 | * generated/minloc0_8_i16.c : Regenerated. | |
169 | * generated/minloc0_8_i2.c : Regenerated. | |
170 | * generated/minloc0_8_i4.c : Regenerated. | |
171 | * generated/minloc0_8_i8.c : Regenerated. | |
172 | * generated/minloc0_8_r10.c : Regenerated. | |
173 | * generated/minloc0_8_r16.c : Regenerated. | |
174 | * generated/minloc0_8_r4.c : Regenerated. | |
175 | * generated/minloc0_8_r8.c : Regenerated. | |
176 | * generated/minloc0_8_s1.c : Regenerated. | |
177 | * generated/minloc0_8_s4.c : Regenerated. | |
178 | * generated/minloc1_16_i1.c : Regenerated. | |
179 | * generated/minloc1_16_i16.c : Regenerated. | |
180 | * generated/minloc1_16_i2.c : Regenerated. | |
181 | * generated/minloc1_16_i4.c : Regenerated. | |
182 | * generated/minloc1_16_i8.c : Regenerated. | |
183 | * generated/minloc1_16_r10.c : Regenerated. | |
184 | * generated/minloc1_16_r16.c : Regenerated. | |
185 | * generated/minloc1_16_r4.c : Regenerated. | |
186 | * generated/minloc1_16_r8.c : Regenerated. | |
187 | * generated/minloc1_16_s1.c : Regenerated. | |
188 | * generated/minloc1_16_s4.c : Regenerated. | |
189 | * generated/minloc1_4_i1.c : Regenerated. | |
190 | * generated/minloc1_4_i16.c : Regenerated. | |
191 | * generated/minloc1_4_i2.c : Regenerated. | |
192 | * generated/minloc1_4_i4.c : Regenerated. | |
193 | * generated/minloc1_4_i8.c : Regenerated. | |
194 | * generated/minloc1_4_r10.c : Regenerated. | |
195 | * generated/minloc1_4_r16.c : Regenerated. | |
196 | * generated/minloc1_4_r4.c : Regenerated. | |
197 | * generated/minloc1_4_r8.c : Regenerated. | |
198 | * generated/minloc1_4_s1.c : Regenerated. | |
199 | * generated/minloc1_4_s4.c : Regenerated. | |
200 | * generated/minloc1_8_i1.c : Regenerated. | |
201 | * generated/minloc1_8_i16.c : Regenerated. | |
202 | * generated/minloc1_8_i2.c : Regenerated. | |
203 | * generated/minloc1_8_i4.c : Regenerated. | |
204 | * generated/minloc1_8_i8.c : Regenerated. | |
205 | * generated/minloc1_8_r10.c : Regenerated. | |
206 | * generated/minloc1_8_r16.c : Regenerated. | |
207 | * generated/minloc1_8_r4.c : Regenerated. | |
208 | * generated/minloc1_8_r8.c : Regenerated. | |
209 | * generated/minloc1_8_s1.c : Regenerated. | |
210 | * generated/minloc1_8_s4.c : Regenerated. | |
211 | * generated/minval1_s1.c : Regenerated. | |
212 | * generated/minval1_s4.c : Regenerated. | |
213 | * generated/minval_i1.c : Regenerated. | |
214 | * generated/minval_i16.c : Regenerated. | |
215 | * generated/minval_i2.c : Regenerated. | |
216 | * generated/minval_i4.c : Regenerated. | |
217 | * generated/minval_i8.c : Regenerated. | |
218 | * generated/minval_r10.c : Regenerated. | |
219 | * generated/minval_r16.c : Regenerated. | |
220 | * generated/minval_r4.c : Regenerated. | |
221 | * generated/minval_r8.c : Regenerated. | |
222 | * generated/norm2_r10.c : Regenerated. | |
223 | * generated/norm2_r16.c : Regenerated. | |
224 | * generated/norm2_r4.c : Regenerated. | |
225 | * generated/norm2_r8.c : Regenerated. | |
226 | * generated/parity_l1.c : Regenerated. | |
227 | * generated/parity_l16.c : Regenerated. | |
228 | * generated/parity_l2.c : Regenerated. | |
229 | * generated/parity_l4.c : Regenerated. | |
230 | * generated/parity_l8.c : Regenerated. | |
231 | * generated/product_c10.c : Regenerated. | |
232 | * generated/product_c16.c : Regenerated. | |
233 | * generated/product_c4.c : Regenerated. | |
234 | * generated/product_c8.c : Regenerated. | |
235 | * generated/product_i1.c : Regenerated. | |
236 | * generated/product_i16.c : Regenerated. | |
237 | * generated/product_i2.c : Regenerated. | |
238 | * generated/product_i4.c : Regenerated. | |
239 | * generated/product_i8.c : Regenerated. | |
240 | * generated/product_r10.c : Regenerated. | |
241 | * generated/product_r16.c : Regenerated. | |
242 | * generated/product_r4.c : Regenerated. | |
243 | * generated/product_r8.c : Regenerated. | |
244 | * generated/reshape_c10.c : Regenerated. | |
245 | * generated/reshape_c16.c : Regenerated. | |
246 | * generated/reshape_c4.c : Regenerated. | |
247 | * generated/reshape_c8.c : Regenerated. | |
248 | * generated/reshape_i16.c : Regenerated. | |
249 | * generated/reshape_i4.c : Regenerated. | |
250 | * generated/reshape_i8.c : Regenerated. | |
251 | * generated/reshape_r10.c : Regenerated. | |
252 | * generated/reshape_r16.c : Regenerated. | |
253 | * generated/reshape_r4.c : Regenerated. | |
254 | * generated/reshape_r8.c : Regenerated. | |
255 | * generated/spread_c10.c : Regenerated. | |
256 | * generated/spread_c16.c : Regenerated. | |
257 | * generated/spread_c4.c : Regenerated. | |
258 | * generated/spread_c8.c : Regenerated. | |
259 | * generated/spread_i1.c : Regenerated. | |
260 | * generated/spread_i16.c : Regenerated. | |
261 | * generated/spread_i2.c : Regenerated. | |
262 | * generated/spread_i4.c : Regenerated. | |
263 | * generated/spread_i8.c : Regenerated. | |
264 | * generated/spread_r10.c : Regenerated. | |
265 | * generated/spread_r16.c : Regenerated. | |
266 | * generated/spread_r4.c : Regenerated. | |
267 | * generated/spread_r8.c : Regenerated. | |
268 | * generated/sum_c10.c : Regenerated. | |
269 | * generated/sum_c16.c : Regenerated. | |
270 | * generated/sum_c4.c : Regenerated. | |
271 | * generated/sum_c8.c : Regenerated. | |
272 | * generated/sum_i1.c : Regenerated. | |
273 | * generated/sum_i16.c : Regenerated. | |
274 | * generated/sum_i2.c : Regenerated. | |
275 | * generated/sum_i4.c : Regenerated. | |
276 | * generated/sum_i8.c : Regenerated. | |
277 | * generated/sum_r10.c : Regenerated. | |
278 | * generated/sum_r16.c : Regenerated. | |
279 | * generated/sum_r4.c : Regenerated. | |
280 | * generated/sum_r8.c : Regenerated. | |
281 | ||
ea99ec5b JB |
282 | 2018-01-07 Janne Blomqvist <jb@gcc.gnu.org> |
283 | ||
284 | PR fortran/78534 | |
285 | PR fortran/83704 | |
286 | * io/fbuf.c (fbuf_init): Use size_t instead of int for length. | |
287 | (fbuf_debug): Convert debug output to unsigned long. | |
288 | (fbuf_reset): Use ptrdiff_t for return value. | |
289 | (fbuf_alloc): Use size_t for length argument. | |
290 | (fbuf_flush): Handle large buffers. | |
291 | (fbuf_flush_list): Likewise. | |
292 | (fbuf_seek): Use ptrdiff_t for offset and return value. | |
293 | (fbuf_read): Use size_t for length argument. | |
294 | (fbuf_getc_refill): Use size_t to match fbuf_read. | |
295 | * io/fbuf.h (struct fbuf): Use size_t for lengths. | |
296 | (fbuf_init): Use size_t instead of int for length. | |
297 | (fbuf_reset): Use ptrdiff_t for return value. | |
298 | (fbuf_alloc): Use size_t for length argument. | |
299 | (fbuf_seek): Use ptrdiff_t for offset and return value. | |
300 | (fbuf_read): Use size_t for length argument. | |
301 | * io/io.h (read_block_form): Likewise. | |
302 | (read_block_form4): Likewise. | |
303 | (write_block): Likewise. | |
304 | (read_a): Likewise. | |
305 | (read_a_char4): Likewise. | |
306 | (read_x): Likewise. | |
307 | (write_a): Likewise. | |
308 | (write_a_char4): Likewise. | |
309 | * io/list_read.c (list_formatted_read_scalar): Use size_t to | |
310 | handle large buffers. | |
311 | * io/read.c (read_l): Likewise. | |
312 | (read_utf8): Likewise. | |
313 | (read_utf8_char1): Likewise. | |
314 | (read_default_char1): Likewise. | |
315 | (read_utf8_char4): Likewise. | |
316 | (read_default_char4): Likewise. | |
317 | (read_a): Likewise. | |
318 | (read_a_char4): Likewise. | |
319 | (eat_leading_spaces): Likewise. | |
320 | (next_char): Likewise. | |
321 | (read_decimal): Likewise. | |
322 | (read_radix): Likewise. | |
323 | (read_f): Likewise. | |
324 | (read_x): Likewise. | |
325 | * io/transfer.c (read_sf_internal): Likewise. | |
326 | (read_sf): Likewise. | |
327 | (read_block_form): Likewise. | |
328 | (read_block_form4): Likewise. | |
329 | (write_block): Likewise. | |
330 | (formatted_transfer_scalar_write): Likewise. | |
331 | (next_record_w): Likewise. | |
332 | * io/unix.c (mem_alloc_r): Likewise. | |
333 | (mem_alloc_r4): Likewise. | |
334 | (mem_alloc_w): Likewise. | |
335 | (mem_alloc_w4): Likewise. | |
336 | (mem_read): Likewise. | |
337 | (mem_read4): Likewise. | |
338 | (mem_write): Likewise. | |
339 | (mem_write4): Likewise. | |
340 | (open_internal): Likewise. | |
341 | (open_internal4): Likewise. | |
342 | * io/unix.h (open_internal): Likewise. | |
343 | (open_internal4): Likewise. | |
344 | (mem_alloc_w): Likewise. | |
345 | (mem_alloc_r): Likewise. | |
346 | (mem_alloc_w4): Likewise. | |
347 | (mem_alloc_r4): Likewise. | |
348 | * io/write.c (write_check_cc): Likewise. | |
349 | (write_cc): Likewise. | |
350 | (write_a): Likewise. | |
351 | (write_a_char4): Likewise. | |
352 | ||
dd8b1ebf JB |
353 | 2018-01-06 Janne Blomqvist <jb@gcc.gnu.org> |
354 | ||
355 | * io/write.c (namelist_write): Remove unused variable "i". | |
356 | ||
d9bb51cd DH |
357 | 2018-01-06 Dominique d'Humieres <dominiq@lps.ens.fr> |
358 | Janne Blomqvist <jb@gcc.gnu.org> | |
359 | ||
360 | PR fortran/83704 | |
361 | * io/write.c (write_character): Use size_t instead of int for | |
362 | length. | |
363 | ||
dd8b1ebf | 364 | 2018-01-05 Janne Blomqvist <jb@gcc.gnu.org> |
b081a376 JB |
365 | |
366 | PR fortran/78534 | |
367 | * intrinsics/args.c (getarg_i4): Use gfc_charlen_type. | |
368 | (get_command_argument_i4): Likewise. | |
369 | (get_command_i4): Likewise. | |
370 | * intrinsics/chmod.c (chmod_internal): Likewise. | |
371 | * intrinsics/env.c (get_environment_variable_i4): Likewise. | |
372 | * intrinsics/extends_type_of.c (struct vtype): Use size_t for size | |
373 | member. | |
374 | * intrinsics/gerror.c (gerror): Use gfc_charlen_type. | |
375 | * intrinsics/getlog.c (getlog): Likewise. | |
376 | * intrinsics/hostnm.c (hostnm_0): Likewise. | |
377 | * intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to | |
378 | work if gfc_charlen_type is unsigned. | |
379 | (string_scan): Likewise. | |
380 | * io/transfer.c (transfer_character): Modify prototype. | |
381 | (transfer_character_write): Likewise. | |
382 | (transfer_character_wide): Likewise. | |
383 | (transfer_character_wide_write): Likewise. | |
384 | (transfer_array): Typecast to avoid signed-unsigned comparison. | |
385 | * io/unit.c (is_trim_ok): Use gfc_charlen_type. | |
386 | * io/write.c (namelist_write): Likewise. | |
387 | * libgfortran.h (gfc_charlen_type): Change typedef to size_t. | |
388 | ||
85ec4feb JJ |
389 | 2018-01-03 Jakub Jelinek <jakub@redhat.com> |
390 | ||
391 | Update copyright years. | |
392 | ||
2412750e JB |
393 | 2018-01-02 Janne Blomqvist <jb@gcc.gnu.org> |
394 | ||
395 | PR libgfortran/83649 | |
396 | * io/unix.c (MAX_CHUNK): New define. | |
397 | (raw_read): For reads larger than MAX_CHUNK, loop. | |
398 | (raw_write): Write no more than MAX_CHUNK bytes per iteration. | |
818ab71a | 399 | \f |
85ec4feb | 400 | Copyright (C) 2018 Free Software Foundation, Inc. |
982198d5 JB |
401 | |
402 | Copying and distribution of this file, with or without modification, | |
403 | are permitted in any medium without royalty provided the copyright | |
404 | notice and this notice are preserved. |