1 | <?php
|
---|
2 |
|
---|
3 | $sMainDir = "../";
|
---|
4 |
|
---|
5 | require $sMainDir."stilovi.php3";
|
---|
6 | require "Odin32DBHelpers.php3";
|
---|
7 |
|
---|
8 | /* Profiling */
|
---|
9 | $sPageTimer = Odin32DBTimerStart("page timer");
|
---|
10 | /* Profiling */
|
---|
11 |
|
---|
12 | $Title ="The Odin32 API Database";
|
---|
13 |
|
---|
14 |
|
---|
15 | /*
|
---|
16 | * Connect to database
|
---|
17 | */
|
---|
18 | require "Odin32DBConnect.php3";
|
---|
19 |
|
---|
20 |
|
---|
21 | /*
|
---|
22 | * Global Variables
|
---|
23 | */
|
---|
24 | $iRefcode = -1; /* Reference number. (< 0 is all members in the category) */
|
---|
25 | $sCategory = "root"; /* Category name for internal use (equal to table name). */
|
---|
26 | $sCategoryName = "Root Menu"; /* Category name for presentation. */
|
---|
27 | $fNoData = 0; /* Flag which is set if refcode don't give matches in the DB. */
|
---|
28 |
|
---|
29 |
|
---|
30 | /*
|
---|
31 | * What are we up to? We'll parse the input parameter (if any) to find out.
|
---|
32 | */
|
---|
33 | if (isset($dllrefcode))
|
---|
34 | { /* DLLs by refcode */
|
---|
35 | $sCategory = "dll";
|
---|
36 | $sCategoryName = "Dll";
|
---|
37 | if ($dllrefcode != "")
|
---|
38 | $iRefcode = (int)$dllrefcode;
|
---|
39 | $fFunctions = (isset($fFunctions) && $fFunctions != '0');
|
---|
40 | $fFiles = (isset($fFiles) && $fFiles != '0');
|
---|
41 | $fAPIGroups = (isset($fAPIGroups) && $fAPIGroups != '0');
|
---|
42 | $fAuthors = (isset($fAuthors) && $fAuthors != '0');
|
---|
43 | $fSortByState=(isset($fSortByState) && $fSortByState!= '0');
|
---|
44 | }
|
---|
45 | else if (isset($filerefcode))
|
---|
46 | { /* Files by refcode */
|
---|
47 | $sCategory = "file";
|
---|
48 | $sCategoryName = "File";
|
---|
49 | if ($filerefcode != "")
|
---|
50 | $iRefcode = (int)$filerefcode;
|
---|
51 | $fFunctions = (isset($fFunctions) && $fFunctions != '0');
|
---|
52 | $fAPIGroups = (isset($fAPIGroups) && $fAPIGroups != '0');
|
---|
53 | $fAuthors = (isset($fAuthors) && $fAuthors != '0');
|
---|
54 | $fSortByState=(isset($fSortByState) && $fSortByState!= '0');
|
---|
55 | }
|
---|
56 | else if (isset($functionrefcode))
|
---|
57 | { /* Functions by refcode */
|
---|
58 | $sCategory = "function";
|
---|
59 | $sCategoryName = "Function";
|
---|
60 | if ($functionrefcode != "")
|
---|
61 | $iRefcode = (int)$functionrefcode;
|
---|
62 | }
|
---|
63 | else if (isset($apigrouprefcode))
|
---|
64 | { /* Api Group by refcode */
|
---|
65 | $sCategory = "apigroup";
|
---|
66 | $sCategoryName = "API Group";
|
---|
67 | if ($apigrouprefcode != "")
|
---|
68 | $iRefcode = (int)$apigrouprefcode;
|
---|
69 | $fFunctions = (isset($fFunctions) && $fFunctions != '0');
|
---|
70 | $fFiles = (isset($fFiles) && $fFiles != '0');
|
---|
71 | $fAuthors = (isset($fAuthors) && $fAuthors != '0');
|
---|
72 | $fSortByState=(isset($fSortByState) && $fSortByState!= '0');
|
---|
73 | }
|
---|
74 | else if (isset($authorrefcode))
|
---|
75 | { /* Author by refcode */
|
---|
76 | $sCategory = "author";
|
---|
77 | $sCategoryName = "Author";
|
---|
78 | if ($authorrefcode != "")
|
---|
79 | $iRefcode = (int)$authorrefcode;
|
---|
80 | $fDlls = (isset($fDlls) && $fDlls != '0');
|
---|
81 | $fFunctions = (isset($fFunctions) && $fFunctions != '0');
|
---|
82 | $fFiles = (isset($fFiles) && $fFiles != '0');
|
---|
83 | $fAPIGroups = (isset($fAPIGroups) && $fAPIGroups != '0');
|
---|
84 | $fSortByState=(isset($fSortByState) && $fSortByState!= '0');
|
---|
85 | if (!(isset($authordll) && $authordll != "" && @(int)$authordll >= 0))
|
---|
86 | $authordll = -1;
|
---|
87 | }
|
---|
88 | else if (isset($designnoterefcode))
|
---|
89 | { /* Author by refcode */
|
---|
90 | $sCategory = "designnote";
|
---|
91 | $sCategoryName = "Design Note";
|
---|
92 | if ($designnoterefcode != "")
|
---|
93 | $iRefcode = (int)$designnoterefcode;
|
---|
94 | }
|
---|
95 | else if (isset($dlls))
|
---|
96 | { /* All dlls */
|
---|
97 | $sCategory = "dlls";
|
---|
98 | $sCategoryName = "All Dlls";
|
---|
99 | $sDllType = 'A';
|
---|
100 | }
|
---|
101 | else if (isset($internal))
|
---|
102 | { /* All Internal Dlls */
|
---|
103 | $sCategory = "dlls";
|
---|
104 | $sCategoryName = "Internal Dlls";
|
---|
105 | $sDllType = 'I';
|
---|
106 | }
|
---|
107 | else if (isset($support))
|
---|
108 | { /* All dlls */
|
---|
109 | $sCategory = "dlls";
|
---|
110 | $sCategoryName = "Support Stuff";
|
---|
111 | $sDllType = 'S';
|
---|
112 | }
|
---|
113 | else if (isset($tools))
|
---|
114 | { /* Tools */
|
---|
115 | $sCategory = "dlls";
|
---|
116 | $sCategoryName = "Tools";
|
---|
117 | $sDllType = 'T';
|
---|
118 | }
|
---|
119 | else if (isset($apigroups))
|
---|
120 | { /* All API Groups */
|
---|
121 | $sCategory = "apigroups";
|
---|
122 | $sCategoryName = "API Groups";
|
---|
123 | }
|
---|
124 | else if (isset($authors))
|
---|
125 | { /* All authors */
|
---|
126 | $sCategory = "authors";
|
---|
127 | $sCategoryName = "Authors";
|
---|
128 | }
|
---|
129 | else if (isset($design))
|
---|
130 | { /* All authors */
|
---|
131 | $sCategory = "designnotes";
|
---|
132 | $sCategoryName = "Design Notes";
|
---|
133 | } /* else: root page */
|
---|
134 |
|
---|
135 |
|
---|
136 | /*
|
---|
137 | * Get name of the item we're to display data on.
|
---|
138 | */
|
---|
139 | if ($iRefcode < 0)
|
---|
140 | $sName = ""; //FIXME
|
---|
141 | else
|
---|
142 | {
|
---|
143 | $sql = sprintf("SELECT name FROM %s WHERE refcode = %d",
|
---|
144 | $sCategory, $iRefcode);
|
---|
145 | $result = mysql_query($sql, $db);
|
---|
146 | if (@mysql_num_rows($result) > 0 &&
|
---|
147 | ($aName = @mysql_fetch_row($result))
|
---|
148 | )
|
---|
149 | {
|
---|
150 | $sName = $aName[0];
|
---|
151 | }
|
---|
152 | else
|
---|
153 | {
|
---|
154 | $fNoData = 1;
|
---|
155 | $sName = "!Invalid Refcode!";
|
---|
156 | Odin32DBSqlError($sql);
|
---|
157 | }
|
---|
158 | @mysql_free_result($result);
|
---|
159 | }
|
---|
160 |
|
---|
161 | require $sMainDir."01-PreTitle.php3";
|
---|
162 | if ($sName == "") echo $Title." - ".$sCategoryName;
|
---|
163 | else echo $Title." - ".$sCategoryName.": ".$sName;
|
---|
164 | require $sMainDir."02-PostTitle.php3";
|
---|
165 |
|
---|
166 | require $sMainDir."03-MainTableBeg.php3";
|
---|
167 | require $sMainDir."04-ColumnOne.php3";
|
---|
168 |
|
---|
169 | require $sMainDir."05-ColumnTwoHeader.php3";
|
---|
170 | if ($sName == "") echo $Title."<br>".$sCategoryName;
|
---|
171 | else echo $Title."<br>".$sCategoryName.": ".$sName;
|
---|
172 | require $sMainDir."06-ColumnTwoHeader2.php3";
|
---|
173 |
|
---|
174 |
|
---|
175 | TekstBeg();
|
---|
176 |
|
---|
177 | if (!$fNoData)
|
---|
178 | {
|
---|
179 | switch ($sCategory)
|
---|
180 | {
|
---|
181 | case "dll":
|
---|
182 | {
|
---|
183 | Odin32DBDllInfo($db, $iRefcode, $fFunctions, $fFiles, $fAPIGroups, $fAuthors, $fSortByState);
|
---|
184 | break;
|
---|
185 | }
|
---|
186 |
|
---|
187 | case "file":
|
---|
188 | {
|
---|
189 | Odin32DBFileInfo($db, $iRefcode, $fFunctions, $fAPIGroups, $fAuthors, $fSortByState);
|
---|
190 | break;
|
---|
191 | }
|
---|
192 |
|
---|
193 | case "function":
|
---|
194 | {
|
---|
195 | Odin32DBFunctionInfo($db, $iRefcode);
|
---|
196 | break;
|
---|
197 | }
|
---|
198 |
|
---|
199 | case "apigroup":
|
---|
200 | {
|
---|
201 | Odin32DBAPIGroupInfo($db, $iRefcode, $fFunctions, $fFiles, $fAuthors, $fSortByState);
|
---|
202 | break;
|
---|
203 | }
|
---|
204 |
|
---|
205 | case "author":
|
---|
206 | {
|
---|
207 | Odin32DBAuthorInfo($db, $iRefcode, $fDlls, $fFunctions, $fFiles, $fAPIGroups, $fSortByState, $authordll);
|
---|
208 | break;
|
---|
209 | }
|
---|
210 |
|
---|
211 | case "designnote":
|
---|
212 | {
|
---|
213 | Odin32DBDesignNote($db, $iRefcode);
|
---|
214 | break;
|
---|
215 | }
|
---|
216 |
|
---|
217 | case "root":
|
---|
218 | {
|
---|
219 | /*
|
---|
220 | * The root page.
|
---|
221 | */
|
---|
222 | Odin32DBNavigationTop("","");
|
---|
223 | Odin32DBNaslov("Welcome to the Odin32 API Database", "welcome", "");
|
---|
224 | echo "This is the first Beta edition of the Odin32 API Database.<br>\n".
|
---|
225 | "There might be dead or non-functioning links. Currently feedback is <i>NOT</i> needed.\n".
|
---|
226 | "<p>\n".
|
---|
227 | "Please note that the quality of the data avilable is quite poor\n".
|
---|
228 | "for the time being. This will improve within some months.<br>\n".
|
---|
229 | "-Enjoy!<br>\n";
|
---|
230 |
|
---|
231 | Odin32DBNaslov("Root Menu", "menu", "");
|
---|
232 | echo "<font size=3>".
|
---|
233 | "<ul>\n".
|
---|
234 | " <li><b>Modules\n".
|
---|
235 | " <ul>\n".
|
---|
236 | " <li><b><a href=\"Odin32DB.phtml?dlls=1\">Odin32 API DLLs</a></b>\n".
|
---|
237 | " <li><b><a href=\"Odin32DB.phtml?internal=1\">Internal Odin32 DLLs</a></b>\n".
|
---|
238 | " <li><b><a href=\"Odin32DB.phtml?support=1\">Support Stuff(like win32k)</a></b>\n".
|
---|
239 | " <li><b><a href=\"Odin32DB.phtml?tools=1\">Tools</a></b>\n".
|
---|
240 | " </ul>\n".
|
---|
241 | " <li><b><a href=\"Odin32DB.phtml?apigroups=1\">API Groups</a></b>\n".
|
---|
242 | " <li><b><a href=\"Odin32DB.phtml?authors=1\">Authors</a></b>\n".
|
---|
243 | " <li><b><a href=\"Odin32DB.phtml?design=1\">Design Notes</a></b>\n".
|
---|
244 | " <!-- <li><i><a href=\"Odin32DB.phtml?searchapi=1\">Search API (not implemeted)</a></i> -->\n".
|
---|
245 | "</ul>\n";
|
---|
246 | "</font>\n";
|
---|
247 | Odin32DBNavigationBottom("","");
|
---|
248 | break;
|
---|
249 | }
|
---|
250 |
|
---|
251 | case "dlls":
|
---|
252 | {
|
---|
253 | /*
|
---|
254 | * List all dlls.
|
---|
255 | */
|
---|
256 | Odin32DBNavigationTop("","");
|
---|
257 | Odin32DBNaslov("Welcome to the Odin32 API Database", "welcome", "");
|
---|
258 | echo "This is the first Beta edition of the Odin32 API Database.<br>\n".
|
---|
259 | "There might be dead or non-functioning links. Currently feedback is <i>NOT</i> needed.\n".
|
---|
260 | "<p>\n".
|
---|
261 | "Please note that the quality of the data avilable is quite poor\n".
|
---|
262 | "for the time being. This will improve within some months.<br>\n".
|
---|
263 | "-Enjoy!<br>\n";
|
---|
264 |
|
---|
265 | Odin32DBNaslov($sCategoryName, $sCategory, "");
|
---|
266 | $sql = "SELECT\n".
|
---|
267 | " d.name AS name,\n".
|
---|
268 | " d.refcode AS refcode,\n".
|
---|
269 | " COUNT(f.refcode) AS functions\n".
|
---|
270 | "FROM\n".
|
---|
271 | " dll d\n".
|
---|
272 | " LEFT OUTER JOIN function f\n".
|
---|
273 | " ON f.dll = d.refcode\n".
|
---|
274 | "WHERE\n".
|
---|
275 | " d.type = '".$sDllType."'\n".
|
---|
276 | "GROUP BY d.refcode\n".
|
---|
277 | "ORDER BY d.name\n";
|
---|
278 | if ($result = mysql_query($sql, $db))
|
---|
279 | {
|
---|
280 | if (mysql_num_rows($result) <= 0)
|
---|
281 | echo "<i>No data in this module category!<br>$sql</i>\n";
|
---|
282 | else
|
---|
283 | {
|
---|
284 | echo "\n<font size=-1><ul><b>";
|
---|
285 | while ($aDll = mysql_fetch_array($result))
|
---|
286 | {
|
---|
287 | echo "<li><a href=\"Odin32DB.phtml?dllrefcode=".$aDll["refcode"].
|
---|
288 | "\">".$aDll["name"]."</a> (".$aDll["functions"].")\n";
|
---|
289 | }
|
---|
290 | echo "</b></ul></font>\n";
|
---|
291 | }
|
---|
292 | }
|
---|
293 | else
|
---|
294 | Odin32DBSqlError($sql);
|
---|
295 | Odin32DBNavigationBottom("","");
|
---|
296 | break;
|
---|
297 | }
|
---|
298 |
|
---|
299 | case "authors":
|
---|
300 | {
|
---|
301 | /*
|
---|
302 | * List all authors.
|
---|
303 | */
|
---|
304 | Odin32DBNavigationTop("","");
|
---|
305 | Odin32DBNaslov("Welcome to the Odin32 API Database", "welcome", "");
|
---|
306 | echo "This is the first Beta edition of the Odin32 API Database.<br>\n".
|
---|
307 | "There might be dead or non-functioning links. Currently feedback is <i>NOT</i> needed.\n".
|
---|
308 | "<p>\n".
|
---|
309 | "Please note that the quality of the data avilable is quite poor\n".
|
---|
310 | "for the time being. This will improve within some months.<br>\n".
|
---|
311 | "-Enjoy!<br>\n";
|
---|
312 |
|
---|
313 | Odin32DBNaslov("All Authors", "authors", "");
|
---|
314 | $sql = "SELECT\n".
|
---|
315 | " name,\n".
|
---|
316 | " refcode, \n".
|
---|
317 | " COUNT(fa.function) AS functions\n".
|
---|
318 | "FROM\n".
|
---|
319 | " author a\n".
|
---|
320 | " LEFT OUTER JOIN fnauthor fa ON a.refcode = fa.author\n".
|
---|
321 | "GROUP BY name\n".
|
---|
322 | "ORDER BY name\n";
|
---|
323 | if ($result = mysql_query($sql, $db))
|
---|
324 | {
|
---|
325 | if (mysql_num_rows($result) <= 0)
|
---|
326 | echo "<i>No dlls!</i>\n";
|
---|
327 | else
|
---|
328 | {
|
---|
329 | echo "\n<font size=-1><ul><b>";
|
---|
330 | while ($aAuthor = mysql_fetch_array($result))
|
---|
331 | {
|
---|
332 | echo "<li><a href=\"Odin32DB.phtml?authorrefcode=".$aAuthor["refcode"].
|
---|
333 | "\">".$aAuthor["name"]."</a> (".$aAuthor["functions"].")\n";
|
---|
334 | }
|
---|
335 | echo "</ul></b></font>\n";
|
---|
336 | }
|
---|
337 | }
|
---|
338 | else
|
---|
339 | Odin32DBSqlError($sql);
|
---|
340 | Odin32DBNavigationBottom("","");
|
---|
341 | break;
|
---|
342 | }
|
---|
343 |
|
---|
344 | case "apigroups":
|
---|
345 | {
|
---|
346 | /*
|
---|
347 | * List all API Groups.
|
---|
348 | */
|
---|
349 | Odin32DBNavigationTop("","");
|
---|
350 | Odin32DBNaslov("Welcome to the Odin32 API Database", "welcome", "");
|
---|
351 | echo "This is the first Beta edition of the Odin32 API Database.<br>\n".
|
---|
352 | "There might be dead or non-functioning links. Currently feedback is <i>NOT</i> needed.\n".
|
---|
353 | "<p>\n".
|
---|
354 | "Please note that the quality of the data avilable is quite poor\n".
|
---|
355 | "for the time being. This will improve within some months.<br>\n".
|
---|
356 | "-Enjoy!<br>\n";
|
---|
357 |
|
---|
358 | Odin32DBNaslov("All API Groups", "apigroups", "");
|
---|
359 | $sql = "SELECT\n".
|
---|
360 | " a.name AS name,\n".
|
---|
361 | " a.refcode AS refcode,\n".
|
---|
362 | " COUNT(f.refcode) AS functions\n".
|
---|
363 | "FROM\n".
|
---|
364 | " apigroup a\n".
|
---|
365 | " JOIN function f\n".
|
---|
366 | "WHERE\n".
|
---|
367 | " f.apigroup = a.refcode\n".
|
---|
368 | "GROUP BY a.name\n".
|
---|
369 | "ORDER BY a.name\n";
|
---|
370 | if ($result = mysql_query($sql, $db))
|
---|
371 | {
|
---|
372 | if (mysql_num_rows($result) <= 0)
|
---|
373 | echo "<i>No dlls!</i>\n";
|
---|
374 | else
|
---|
375 | {
|
---|
376 | echo "\n<font size=-1><ul><b>";
|
---|
377 | while ($aAPIGroup = mysql_fetch_array($result))
|
---|
378 | {
|
---|
379 | echo "<li><a href=\"Odin32DB.phtml?apigrouprefcode=".$aAPIGroup["refcode"].
|
---|
380 | "\">".$aAPIGroup["name"]."</a> (".$aAPIGroup["functions"].")\n";
|
---|
381 | }
|
---|
382 | echo "</ul></b></font>\n";
|
---|
383 | }
|
---|
384 | }
|
---|
385 | else
|
---|
386 | Odin32DBSqlError($sql);
|
---|
387 | Odin32DBNavigationBottom("","");
|
---|
388 | break;
|
---|
389 | }
|
---|
390 |
|
---|
391 | case "designnotes":
|
---|
392 | {
|
---|
393 | /*
|
---|
394 | * List all design notes.
|
---|
395 | */
|
---|
396 | Odin32DBNavigationTop("","");
|
---|
397 | Odin32DBNaslov("Welcome to the Odin32 API Database", "welcome", "");
|
---|
398 | echo "This is the first Beta edition of the Odin32 API Database.<br>\n".
|
---|
399 | "There might be dead or non-functioning links. Currently feedback is <i>NOT</i> needed.\n".
|
---|
400 | "<p>\n".
|
---|
401 | "Please note that the quality of the data avilable is quite poor\n".
|
---|
402 | "for the time being. This will improve within some months.<br>\n".
|
---|
403 | "-Enjoy!<br>\n";
|
---|
404 |
|
---|
405 | Odin32DBNaslov($sCategoryName, $sCategory, "");
|
---|
406 | $sql = "SELECT\n".
|
---|
407 | " dn.refcode AS refcode,\n".
|
---|
408 | " dn.name AS name,\n".
|
---|
409 | " dn.seqnbr AS seqnbr,\n".
|
---|
410 | " dn.level AS level,\n".
|
---|
411 | " d.name AS dllname,\n".
|
---|
412 | " f.name AS filename\n".
|
---|
413 | "FROM\n".
|
---|
414 | " designnote dn,\n".
|
---|
415 | " dll d,\n".
|
---|
416 | " file f\n".
|
---|
417 | "WHERE dn.dll = d.refcode\n".
|
---|
418 | " AND dn.file = f.refcode\n".
|
---|
419 | " AND dn.level <= 1\n".
|
---|
420 | "ORDER BY d.name, dn.seqnbr, dn.seqnbrnote\n";
|
---|
421 | if ($result = mysql_query($sql, $db))
|
---|
422 | {
|
---|
423 | if (mysql_num_rows($result) <= 0)
|
---|
424 | echo "<i>No Design Notes!</i>\n";
|
---|
425 | else
|
---|
426 | {
|
---|
427 | echo "\n<font size=-1><ul><b>";
|
---|
428 | $iLevel = 0;
|
---|
429 | while ($aDesignNote = mysql_fetch_array($result))
|
---|
430 | {
|
---|
431 | if ($aDesignNote["level"] > $iLevel)
|
---|
432 | print " <ul>\n";
|
---|
433 | else if ($aDesignNote["level"] < $iLevel)
|
---|
434 | print " </ul>\n";
|
---|
435 | $iLevel = $aDesignNote["level"];
|
---|
436 |
|
---|
437 | if ($iLevel > 0)
|
---|
438 | print " <li><a href=\"Odin32DB.phtml?designnoterefcode=".$aDesignNote["refcode"].
|
---|
439 | "\">".$aDesignNote["name"]."</a>\n";
|
---|
440 | else
|
---|
441 | print " <li><a href=\"Odin32DB.phtml?designnoterefcode=".$aDesignNote["refcode"].
|
---|
442 | "\">".$aDesignNote["seqnbr"].".0 ".$aDesignNote["name"]."</a> (".$aDesignNote["filename"].")\n";
|
---|
443 |
|
---|
444 | }
|
---|
445 | echo "</ul></b></font>\n";
|
---|
446 | }
|
---|
447 | }
|
---|
448 | else
|
---|
449 | Odin32DBSqlError($sql);
|
---|
450 | Odin32DBNavigationBottom("","");
|
---|
451 | break;
|
---|
452 | }
|
---|
453 |
|
---|
454 | default:
|
---|
455 | echo "!IPE!"; //FIXME
|
---|
456 | }
|
---|
457 | }
|
---|
458 | else
|
---|
459 | {
|
---|
460 | }
|
---|
461 |
|
---|
462 |
|
---|
463 | TekstEnd();
|
---|
464 |
|
---|
465 | require $sMainDir."07-ColumnTwoFooter.php3";
|
---|
466 | require $sMainDir."08-News.php3";
|
---|
467 | require $sMainDir."09-ContentsTitle.php3";
|
---|
468 |
|
---|
469 | Odin32DBWriteContents();
|
---|
470 |
|
---|
471 | require $sMainDir."10-EndOfContent.php3";
|
---|
472 | require $sMainDir."11-NetlabsContact.php3";
|
---|
473 |
|
---|
474 | $Kada=date ("j M Y", filemtime(__file__));
|
---|
475 | require $sMainDir."12-OdinBanner.php3";
|
---|
476 |
|
---|
477 | require $sMainDir."13-Closing.php3";
|
---|
478 |
|
---|
479 |
|
---|
480 | /* Profiling */
|
---|
481 | Odin32DBTimerStop($sPageTimer);
|
---|
482 | /* Profiling */
|
---|
483 | ?>
|
---|
484 |
|
---|