added XML-RPC method removeFromSchedule to SchedulerDaemon

This commit is contained in:
maroy 2004-08-01 06:22:37 +00:00
parent 0b445bac8a
commit eebd0acc87
22 changed files with 1823 additions and 696 deletions

View file

@ -14,8 +14,9 @@ Development Loan Fund</a>, under the GNU <a
href="http://www.gnu.org/licenses/gpl.html">GPL</a>.<br>
<ul>
<li>Author: $Author: maroy $</li>
<li>Version: $Revision: 1.1 $</li>
<li>Location: $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/doc/model/Scheduler/index.html,v $</li>
<li>Version: $Revision: 1.2 $</li>
<li>Location: $Source:
/home/cvs/livesupport/doc/model/Scheduler/index.html,v $</li>
</ul>
<h1>Scope</h1>
This document contains the specification of the LiveSupport Scheduler
@ -42,7 +43,7 @@ playlists on a local audio interface. Specific goals include:<br>
<h2>System functions</h2>
The main system functions are described below. There are three
categories for these functions:<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">function category<br>
@ -73,7 +74,7 @@ that it is performed<br>
</table>
<br>
<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">ref#<br>
@ -218,7 +219,7 @@ reasons<br>
<h2>System attributes</h2>
Generic attributes<br>
<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">ref#<br>
@ -286,7 +287,7 @@ which focuses only on audio aspects of SMIL.<br>
<br>
Attributes related to system functions<br>
<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">ref#<br>
@ -385,9 +386,9 @@ This section lists generic (essential) uses cases, that do not contain
architecture-specific considerations.<br>
<br>
<object type="image/svg+xml" name="essential use cases"
data="EssentialUseCases.svg" width="700" height="800"></object>
data="EssentialUseCases.svg" height="800" width="700"></object>
<h3>UC-1 Upload playlist</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -420,7 +421,7 @@ architecture-specific considerations.<br>
</tbody>
</table>
<h4>Typical course of events</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -499,7 +500,7 @@ notified and the use case ends.<br>
</ul>
<h3>UC-2 Manage schedule<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b><br>
@ -544,7 +545,7 @@ decides to, he might remove or re-schedule some of these playlists. </td>
<br>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -655,7 +656,7 @@ again<br>
</ul>
<h3>UC-3 Manage playlists<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b><br>
@ -698,7 +699,7 @@ playlists. If he decides so, he might delete some of these playlists. </td>
<br>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -781,7 +782,7 @@ user is notified, and the list of playlists is displayed to the user.<br>
</ul>
<h3>UC-4 Retrieve remote files<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -830,7 +831,7 @@ Note that this use case is somewhat reversed, as it is initiated by the
system (not an actor), and the main tasks are done by an external actor
(the Media archive).<br>
<h4>Typical course of events</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -958,7 +959,7 @@ audio clip. the system is notified and the use case ends.<br>
</ul>
<h3>UC-5 Review play log<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -995,7 +996,7 @@ reasons. </td>
</table>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -1074,7 +1075,7 @@ authenticated. the user is notified and the use case ends.</li>
<br>
<h3>UC-6 Create playlist<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -1116,7 +1117,7 @@ on the system.<br>
</table>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -1196,7 +1197,7 @@ authenticated. the user is notified and the use case ends.</li>
<br>
<h3>UC-7 Edit playlist<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -1237,7 +1238,7 @@ professionals to edit the playlsits on the system.<br>
</table>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -1391,7 +1392,7 @@ shown.</li>
<br>
<h3>UC-8 Start/stop scheduler<br>
</h3>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>ref#</b> </td>
@ -1432,7 +1433,7 @@ deamon with the same script.<br>
</table>
<h4>Typical course of events<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th colspan="2" valign="top">actor action <br>
@ -1500,11 +1501,11 @@ The following figure displays the semantic concepts identified for the
Scheduler daemon, and the main associations between the concepts.<br>
<br>
<object type="image/svg+xml" name="essential use cases"
data="Concepts.svg" width="950" height="1000"></object>
data="Concepts.svg" height="1000" width="950"></object>
<br>
<h3>Concepts</h3>
<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">concept<br>
@ -1643,7 +1644,7 @@ stopping the scheduler daemon.<br>
<br>
<h3>Associations</h3>
<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<th valign="top">source<br>
@ -1898,43 +1899,43 @@ is discussed in this section.<br>
System diagrams are presented for each use case below.<br>
<h4>UC-1 Upload playlists</h4>
<object type="image/svg+xml" name="upload playlists sequence diagram"
data="Uploadplaylists_SequenceDiagram.svg" width="550" height="200"></object>
data="Uploadplaylists_SequenceDiagram.svg" height="200" width="550"></object>
<br>
<h4>UC-2 Manage schedule</h4>
<object type="image/svg+xml" name="manage playlists sequence diagram"
data="Manageschedule_SequenceDiagram.svg" width="650" height="350"></object>
data="Manageschedule_SequenceDiagram.svg" height="350" width="650"></object>
<br>
<h4>UC-3 Manage playlists</h4>
<object type="image/svg+xml" name="manage playlists sequence diagram"
data="Manageplaylists_SequenceDiagram.svg" width="650" height="300"></object>
data="Manageplaylists_SequenceDiagram.svg" height="300" width="650"></object>
<br>
<h4>UC-4 Retrieve remote files<br>
</h4>
<object type="image/svg+xml"
name="retrieve remote files sequence diagram"
data="Retrieveremotefiles_SequenceDiagram.svg" width="750" height="300"></object>
data="Retrieveremotefiles_SequenceDiagram.svg" height="300" width="750"></object>
<br>
<h4>UC-5 Review play log</h4>
<object type="image/svg+xml" name="review play log sequence diagram"
data="Reviewplaylog_SequenceDiagram.svg" width="650" height="250"></object>
data="Reviewplaylog_SequenceDiagram.svg" height="250" width="650"></object>
<h4>UC-6 Create playlist</h4>
<object type="image/svg+xml" name="create playlist sequence diagram"
data="Createplaylist_SequenceDiagram.svg" width="650" height="250"></object>
data="Createplaylist_SequenceDiagram.svg" height="250" width="650"></object>
<h4>UC-7 Edit playlist<br>
<object type="image/svg+xml" name="edit playlist sequence diagram"
data="Editplaylist_SequenceDiagram.svg" width="800" height="500"></object>
data="Editplaylist_SequenceDiagram.svg" height="500" width="800"></object>
</h4>
<h4>UC-8 Start/stop scheduler</h4>
<object type="image/svg+xml"
name="start/stop scheduler sequence diagram"
data="Startstopscheduler_SequenceDiagram.svg" width="600" height="200"></object>
data="Startstopscheduler_SequenceDiagram.svg" height="200" width="600"></object>
<br>
<br>
<h3>System objects</h3>
The following figures shows the system objects and their functions, as
derived from the system sequence diagrams.<br>
<object type="image/svg+xml" name="system behaviour"
data="Systembehaviour.svg" width="550" height="450"></object>
data="Systembehaviour.svg" height="450" width="550"></object>
<h3>Contracts</h3>
For all operations exposed in the system sequence diagrams, the
following contracts are defined.<br>
@ -1942,7 +1943,7 @@ following contracts are defined.<br>
See Authentication : authenticate<br>
<br>
<h4>Contract for Scheduler : uploadPlaylist</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -1950,7 +1951,7 @@ See Authentication : authenticate<br>
<td colspan="2" rowspan="1" valign="top">uploadPlaylist<br>
(playlist : Playlist,<br>
playtime: Schedule)<br>
: void<br>
: UniqueId<br>
</td>
</tr>
<tr>
@ -1990,7 +1991,8 @@ an error<br>
<tr>
<td valign="top"><b>Output</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">none<br>
<td colspan="2" rowspan="1" valign="top">the unique id of the
ScheduleEntry created with this upload<br>
</td>
</tr>
<tr>
@ -2051,7 +2053,7 @@ supplied schedule<br>
</table>
<br>
<h4>Contract for Scheduler : displaySchedule</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2125,7 +2127,7 @@ the specified time period.<br>
</table>
<br>
<h4>Contract for Scheduler : displayPlaylist</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2198,7 +2200,7 @@ for the specified playlistId, indicate as an error.<br>
</table>
<br>
<h4>Contract for Scheduler : deletePlaylist</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2298,15 +2300,14 @@ error.<br>
<br>
<h4>Contract for Scheduler : removeFromSchedule<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">removeFromSchedule<br>
(scheduleEntry : Schedule entry,<br>
playlist : Playlist)<br>
: void<br>
(scheduleEntryId : UniqueId)<br>
: bool<br>
</td>
</tr>
<tr>
@ -2337,15 +2338,16 @@ playlist from a schedule entry<br>
<tr>
<td valign="top"><b>Exceptions</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">If the specified
scheduleEntry does not exist, indicate as an error.<br>
If the specified playlist does not exist, indicate as an error.<br>
<td colspan="2" rowspan="1" valign="top">If no ScheduleEntry by
the specified
scheduleEntryId exist, indicate as an error.<br>
</td>
</tr>
<tr>
<td valign="top"><b>Output</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">none<br>
<td colspan="2" rowspan="1" valign="top">true if the specified
entry was removed, false if it did not exist.<br>
</td>
</tr>
<tr>
@ -2370,6 +2372,15 @@ is removed.<br>
<td valign="top">association broken<br>
</td>
</tr>
<tr>
<td valign="top"><br>
</td>
<td valign="top">The ScheduleEntry specified by the
scheduleEntryId is deleted<br>
</td>
<td valign="top">instance deletion<br>
</td>
</tr>
<tr>
<td valign="top"><br>
</td>
@ -2383,16 +2394,15 @@ is removed.<br>
<br>
<h4>Contract for Scheduler : reschedule<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">reschedule<br>
(scheduleEntry : Schedule entry,<br>
playlist : Playlist,<br>
(scheduleEntryId : UniqueId,<br>
playtime : TimeStamp)<br>
: void<br>
: bool<br>
</td>
</tr>
<tr>
@ -2423,9 +2433,9 @@ playlist is scheduled to play.<br>
<tr>
<td valign="top"><b>Exceptions</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">If the specified
scheduleEntry does not exist, indicate as an error.<br>
If the specified playlist does not exist, indicate as an error.<br>
<td colspan="2" rowspan="1" valign="top">If no ScheduleEntry by
the specified
scheduleEntryId exist, indicate as an error.<br>
If the new playtime conflicts with other schedule entries, indicate as
an error.<br>
</td>
@ -2433,7 +2443,7 @@ an error.<br>
<tr>
<td valign="top"><b>Output</b><br>
</td>
<td colspan="2" rowspan="1" valign="top">none<br>
<td colspan="2" rowspan="1" valign="top">false on errors<br>
</td>
</tr>
<tr>
@ -2470,7 +2480,7 @@ to the supplied playtime.<br>
</table>
<br>
<h4>Contract for Scheduler : displayPlaylists</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2543,7 +2553,7 @@ in the Playlist store.<br>
</table>
<br>
<h4>Contract for Scheduler : displayPlayLog</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2617,7 +2627,7 @@ contained in the Play log.<br>
<br>
<h4>Contract for Scheduler : generatePlayReport<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2692,7 +2702,7 @@ Audio clips played in the specified time period.<br>
<br>
<h4>Contract for Scheduler : createPlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2790,7 +2800,7 @@ for the playlist<br>
<br>
<h4>Contract for Scheduler : openPlaylistForEditing<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2886,7 +2896,7 @@ for the playlist<br>
<br>
<h4>Contract for Scheduler : addAudioClipToPlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -2974,7 +2984,7 @@ the playlist with the audio clip, with the specified relativeOffset<br>
<br>
<h4>Contract for Scheduler : displayAudioClips<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3049,7 +3059,7 @@ the Scheduler<br>
<br>
<h4>Contract for Scheduler : displayAudioClip<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3125,7 +3135,7 @@ by the audioClipId<br>
<br>
<h4>Contract for Scheduler : removeAudioClipFromPlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3212,7 +3222,7 @@ with the Playlist is removed, with the related FadeInfo instances<br>
<br>
<h4>Contract for Scheduler : updateFadeInFadeOut<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3298,7 +3308,7 @@ audio clip in the playlist are updated<br>
<br>
<h4>Contract for Scheduler : validatePlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3373,7 +3383,7 @@ for being complete (not containing silence) and other sanity criteria.<br>
<br>
<h4>Contract for Scheduler : savePlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3466,7 +3476,7 @@ been used for reverting is deleted (see revertEditedPlaylist)<br>
<br>
<h4>Contract for Scheduler : revertEditedPlaylist<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3561,7 +3571,7 @@ for the playlist<br>
<br>
<h4>Contract for Scheduler : start<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3654,7 +3664,7 @@ deamon to run<br>
<br>
<h4>Contract for Scheduler : isRunning<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3730,7 +3740,7 @@ running, false otherwise<br>
<br>
<h4>Contract for Scheduler : stop<br>
</h4>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3814,7 +3824,7 @@ currently running<br>
<br>
<h4>Contract for Media archive : authenticate</h4>
TODO: move to Media archive spec<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3887,7 +3897,7 @@ authentication is recognized, false otherwise<br>
<br>
<h4>Contract for Media archive : retrieveAudioClip</h4>
TODO: move to Media archive spec<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -3977,7 +3987,7 @@ contents of the retrieved audio clip<br>
<br>
<h4>Contract for Local storage : authenticate</h4>
TODO: move to Local storage spec<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -4050,7 +4060,7 @@ authentication is recognized, false otherwise<br>
<br>
<h4>Contract for Local storage : existsAudioClip</h4>
TODO: move to Local storage spec<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>
@ -4123,7 +4133,7 @@ with the provided id exists, false otherwise<br>
<br>
<h4>Contract for Local storage : storeAudioClip</h4>
TODO: move to Local storage spec<br>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td valign="top"><b>Name</b><br>