Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1669 → Rev 1670

/unsupported/trunk/hlp/hlpparse.c
0,0 → 1,460
#include <ctype.h>
#include "hlpdemo.h"
 
extern taskconf_list_t *taskconf;
extern mutex_list_t *mutexes;
 
typedef enum { TT_TASK = 0,
TT_EVERY = 1,
TT_RUNS = 2,
TT_LOCKS = 3,
TT_UNLOCKS = 4,
TT_ID,
TT_INT,
TT_INVALID = -1 } keyword_t;
 
/* multitype value management */
typedef struct value_struct {
int type; /* -1 invalid, 0 int, 1 string, 2 token, 3 eof */
int intval;
char *strval;
keyword_t keyword;
} value_t;
 
value_t *invalid_value (int type)
{
value_t *new;
new = (value_t *) kern_alloc(sizeof(value_t));
new->type = type;
new->intval = -1;
new->strval = NULL;
new->keyword = TT_INVALID;
return new;
}
 
char *strdup(char *str)
{
char *ret;
ret = (char *)kern_alloc((strlen(str) + 1) * sizeof(char));
strncpy(ret, str, strlen(str));
ret[strlen(str)] = '\0';
return ret;
}
 
value_t *keyword_value (char *token)
{
int i;
value_t *new = NULL;
char *type_assoc[] = { "task",
"every",
"runs",
"locks",
"unlocks",
NULL};
for (i=0; type_assoc[i] != NULL ; i++)
{
if (strcmp(token, type_assoc[i]) == 0)
{
new = (value_t *)kern_alloc(sizeof(value_t));
new->type = 2;
new->intval = -1;
new->strval = strdup(token);
new->keyword = (keyword_t)i;
}
}
return new;
}
 
value_t *int_value (int n)
{
value_t *new;
new = (value_t *) kern_alloc(sizeof(value_t));
new->type = 0;
new->intval = n;
new->strval = NULL;
new->keyword = TT_INT;
return new;
}
 
value_t *str_value (char *str)
{
value_t *new;
new = (value_t *) kern_alloc(sizeof(value_t));
new->type = 1;
new->intval = -1;
new->strval = strdup(str);
new->keyword = TT_ID;
return new;
}
 
void dprint(char *str)
{
#ifdef DEBUG
if (str)
cprintf("%s\n", str);
#endif
}
 
void dprint_value(value_t *val)
{
#ifdef DEBUG
switch (val->type) {
case 0:
cprintf("Value is an integer: %d\n", val->intval);
break;
case 1:
cprintf("Value is a string: '%s'\n", val->strval);
break;
case 2:
cprintf("Value is a keyword: %d\n", (int)val->keyword);
break;
case 3:
cprintf("Value is an eof terminator\n");
break;
}
#endif
}
 
int intlen(int val)
{
int ret = 1;
while ( (val = val / 10) >= 1) ret++;
return ret;
}
 
/*
@desc Tokenizza uno stream, riconoscendo interi, identificatori e
token del linguaggio. Ad ogni chiamata restituisce il prossimo
token.
@return il prossimo token come multitype value (esistono i value di errore)
*/
value_t *get_token_from_str (char *stream, unsigned int size)
{
int c, intval;
static int pos = 0;
 
/* Ignore white space, get first nonwhite character. */
while ((c = stream[pos++]) == ' ' || c == '\t' || c == '\n');
if (c == EOF || c == '\0' || pos == size - 1)
return invalid_value(3);
/* Char starts a number => parse the number. */
if (c == '.' || isdigit (c))
{
pos--;
sscanf (&stream[pos], "%d", &intval);
pos += intlen(intval);
return int_value(intval);
}
/* Char starts an identifier => read the name. */
if (isalpha (c))
{
value_t *keyword_val;
static char *symbuf = 0;
static int length = 0;
int i;
/* Initially make the buffer long enough
for a 40-character symbol name. */
if (length == 0)
length = 40, symbuf = (char *)kern_alloc (length + 1);
i = 0;
do
{
/* If buffer is full, make it bigger. */
if (i == length)
{
length *= 2;
symbuf = (char *) realloc (symbuf, length + 1);
}
/* Add this character to the buffer. */
symbuf[i++] = c;
/* Get another character. */
c = stream[pos++];
}
while (isalnum (c));
pos--;
symbuf[i] = '\0';
keyword_val = keyword_value(symbuf);
 
if (keyword_val->type == 2)
{
dprint("found a keyword");
return keyword_val;
}
else
{
dprint("found an identifier");
return str_value(symbuf);
}
}
/* Any other character is a token by itself. */
#ifdef DEBUG
cprintf("Invalid Token: '%c'\n", c);
#endif
return invalid_value(-1);
}
 
 
/*
@desc Ricerca un mutex di un dato nome in una mutex_list_t
@return il mutex trovato o NULL in caso di mutex non trovato
*/
mutex_list_t *in_mutex_list(char *needle, mutex_list_t *list)
{
while (list)
{
if (!strcmp(needle, list->name))
break;
list = list->next;
}
 
return list;
}
 
/* @return Calcola il wcet sommando tutte le azioni di load */
DWORD calc_wcet(taskconf_list_t *task)
{
action_list_t *scan = task->actionlist;
DWORD wcet = 0;
 
while(scan)
{
wcet += (scan->type == LOAD ? scan->time : 0);
scan = scan->next;
}
 
return wcet;
}
 
/*
@desc Legge la configurazione dal buffer esterno myfilebuf
Riempie la struttura dati esterna taskconf
@return 0 ok
-1 errore nel parsing
*/
int read_conf(char *stream, unsigned int size)
{
value_t *tmpval, *curval = get_token_from_str(stream, size);
taskconf_list_t *tcnew, *tccur = taskconf;
action_list_t *acnew, *accur = NULL;
mutex_list_t *mutnew, *mutcur = NULL;
TIME seme;
 
dprint(stream);
 
while (curval->type != 3) /* until eof */
{
switch (curval->keyword)
{
case TT_TASK: /* create new task */
tmpval = get_token_from_str(stream, size); /* get the name */
 
if (tmpval->type != 1) {
dprint("No name after task");
return -1;
}
 
/* alloc mem and set default data */
tcnew = (taskconf_list_t *)kern_alloc((sizeof(taskconf_list_t)));
tcnew->name = strdup(tmpval->strval);
tcnew->period = -1;
tcnew->wcet = 0;
tcnew->next = NULL;
tcnew->mutexlist = NULL;
tcnew->actionlist = NULL;
/* reset current mutex and current action */
mutcur = NULL;
accur = NULL;
/* fill the first taskconf */
if (taskconf == NULL)
taskconf = tcnew;
 
if (tccur != NULL)
tccur->next = tcnew;
 
tccur = tcnew;
 
break;
 
case TT_EVERY:
tmpval = get_token_from_str(stream, size);
if (tmpval->type != 0) {
dprint("No period after every");
return -1;
}
tccur->period = tmpval->intval;
break;
 
case TT_RUNS:
/* making new action */
tmpval = get_token_from_str(stream, size);
if (tmpval->type != 0) {
dprint("No period after runs");
return -1;
}
acnew = (action_list_t *)kern_alloc((sizeof(action_list_t)));
acnew->type = LOAD;
acnew->time = tmpval->intval;
acnew->next = NULL;
acnew->mutex = NULL;
 
if (tccur->actionlist == NULL)
tccur->actionlist = acnew;
else
accur->next = acnew;
 
accur = acnew;
 
/* calculate wcet for the former task */
if (tccur != NULL)
{
/* calc the wcet */
tccur->wcet = calc_wcet(tccur);
}
 
break;
 
case TT_LOCKS:
 
tmpval = get_token_from_str(stream, size);
 
if (tmpval->type != 1)
return -1;
 
acnew = (action_list_t *)kern_alloc(sizeof(action_list_t));
acnew->type = LOCK;
acnew->time = -1;
acnew->next = NULL;
 
/* create new mutex if does not exist*/
if ( !(mutnew = in_mutex_list(tmpval->strval, mutexes)))
{
mutnew = (mutex_list_t *)kern_alloc(sizeof(mutex_list_t));
mutnew->name = strdup(tmpval->strval);
seme = sys_gettime(NULL);
srand(seme);
mutnew->color = rgb16(rand() % 255,
rand() % 255,
rand() % 255);
mutnew->next = NULL;
/* adding to mutexes */
if (mutexes == NULL)
mutexes = mutnew;
else
mutexes->next = mutnew;
}
acnew->mutex = mutnew;
/* add mutex to the list of tasks using it */
if (tccur->mutexlist == NULL)
{
tccur->mutexlist = mutnew;
}
else
{
if (in_mutex_list(tmpval->strval, tccur->mutexlist))
mutcur->next = mutnew;
}
 
mutcur = mutnew;
 
/* updating action list */
if (tccur->actionlist == NULL)
tccur->actionlist = acnew;
else
accur->next = acnew;
 
accur = acnew;
break;
 
case TT_UNLOCKS:
 
tmpval = get_token_from_str(stream, size);
if (tmpval->type != 1)
return -1;
 
acnew = (action_list_t *)kern_alloc((sizeof(action_list_t)));
acnew->type = UNLOCK;
acnew->time = -1;
acnew->next = NULL;
 
if ( (mutnew = in_mutex_list(tmpval->strval, tccur->mutexlist)) == NULL)
{
#ifdef DEBUG
cprintf("Mutex %s unlocked but never locked\n", tmpval->strval);
#endif
return -1;
}
 
acnew->mutex = mutnew;
 
if (tccur->actionlist == NULL)
tccur->actionlist = acnew;
else
accur->next = acnew;
 
accur = acnew;
break;
 
case TT_ID:
dprint_value(curval);
break;
case TT_INT:
dprint_value(curval);
break;
 
case TT_INVALID:
break;
}
curval = get_token_from_str(stream, size);
}
return 0;
}
 
void print_taskconf(taskconf_list_t *tc)
{
action_list_t *action;
mutex_list_t *mutex;
 
if (tc == NULL)
return;
 
cprintf("Task: %s, period %ld, wcet %ld\n", tc->name, tc->period, tc->wcet);
cprintf("Actions:\n");
 
action = tc->actionlist;
 
while (action)
{
cprintf("---Type %d, time %d, mutex %s\n", action->type, action->time, (action->mutex == NULL ? "" : action->mutex->name));
action = action->next;
}
cprintf("Mutex used:\n");
mutex = tc->mutexlist;
 
while (mutex)
{
cprintf("---Name %s, Color %d\n", mutex->name, mutex->color);
mutex = mutex->next;
}
 
print_taskconf(tc->next);
}
/unsupported/trunk/hlp/hlp.cfg
0,0 → 1,13
task T1 every 73 runs 15
 
task T2 every 122 runs 5
locks s1
runs 10
unlocks s1
runs 5
 
task T3 every 210 runs 5
locks s1
runs 20
unlocks s1
runs 10
/unsupported/trunk/hlp/hlp.c
0,0 → 1,377
#include "hlp.h"
 
#include <ll/ll.h>
#include <ll/string.h>
#include <ll/stdio.h>
#include <kernel/const.h>
#include <sys/types.h>
#include <kernel/descr.h>
#include <kernel/var.h>
#include <kernel/func.h>
 
#include <tracer.h>
 
/* Just for debugging */
static void print_shadow(char *label, HLP_mutex_resource_des *l)
{
HLP_tasklist_t *x = NULL;
 
kern_printf("HLP module: %s:( ", label);
for (x = l->tasklist; x != NULL; x = x->next)
{
kern_printf("(%d, %d) ", x->pid, proc_table[x->pid].shadow);
}
kern_printf(" )\n");
}
 
/* -----------------------------------------------------------------------
LISTS HANDLING
----------------------------------------------------------------------- */
 
/* insert the task in the list ordered by preemption level */
static void HLP_insert_tasklist(HLP_tasklist_t **list, PID pid, DWORD preempt)
{
HLP_tasklist_t *tmp = NULL, *scan = NULL, *prev = NULL;
 
tmp = (HLP_tasklist_t *)kern_alloc(sizeof(HLP_tasklist_t));
tmp->pid = pid;
tmp->preempt = preempt;
tmp->prev = NULL;
tmp->next = NULL;
 
scan = *list;
 
while (scan && scan->preempt > preempt)
{
prev = scan;
scan = scan->next;
}
 
if (prev == NULL) /* empty lista */
{
*list = tmp;
tmp->next = NULL;
tmp->prev = prev;
}
else
if (scan == NULL) /* last position */
{
tmp->next = NULL;
tmp->prev = prev;
prev->next = tmp;
}
else
{
tmp->next = scan->next;
scan->next->prev = tmp;
scan->next = tmp;
}
}
 
static void HLP_extract_tasklist(HLP_tasklist_t **list, PID pid)
{
HLP_tasklist_t *scan = *list;
 
while (scan && scan->pid != pid)
scan = scan->next;
 
if (scan != NULL)
{
scan->prev->next = scan->next;
scan->next->prev = scan->prev;
kern_free(scan, (sizeof(HLP_tasklist_t)));
}
}
 
HLP_tasklist_t *HLP_tasklist_with_pid(HLP_tasklist_t *list, PID p)
{
HLP_tasklist_t *ret = list;
while (ret && ret->pid !=p)
ret = ret->next;
 
return ret;
}
 
/* -----------------------------------------------------------------------
End of LISTS HANDLING
----------------------------------------------------------------------- */
 
/**
* HLP_res_register
*
* Called when a task_create is made and when HLP_usemutex is used
*/
 
static int HLP_res_register(RLEVEL l, PID p, RES_MODEL *r)
{
HLP_mutex_resource_des *m = (HLP_mutex_resource_des *)(resource_table[l]);
HLP_tasklist_t *tasklist = NULL;
 
if (r->level && r->level !=l)
return -1;
 
if (r->rclass == HLP_RCLASS) /* register task */
{
HLP_RES_MODEL *hlp = (HLP_RES_MODEL *)r;
 
HLP_insert_tasklist(&(m->tasklist), p, hlp->preempt); /* insert into HLP system task */
return 0;
}
else if (r->rclass == HLP2_RCLASS) /* a mutex passed via HLP_useres() */
{
HLP_mutex_t *mut = (HLP_mutex_t *)r;
 
/* register mutex for task p */
tasklist = HLP_tasklist_with_pid(m->tasklist, p);
if (tasklist == NULL)
return -1;
mut->next = tasklist->mutexlist;
tasklist->mutexlist = mut;
 
/* register task for mutex */
HLP_insert_tasklist(&(mut->tasklist), tasklist->pid, tasklist->preempt);
 
kern_printf("HLP module: process %d uses mutex %p\n", tasklist->pid, mut);
return 0;
}
else
return -1;
}
 
 
/* called when task_kill is made */
static void HLP_res_detach(RLEVEL l, PID p)
{
HLP_mutex_resource_des *m = (HLP_mutex_resource_des *)(resource_table[l]);
HLP_mutex_t *mut;
HLP_tasklist_t *cur;
 
cur = HLP_tasklist_with_pid(m->tasklist, p);
 
for (mut = cur->mutexlist; mut; mut = mut->next)
if (mut->owner == p)
kern_raise(XMUTEX_OWNER_KILLED, p);
 
for (mut = m->mutexlist; mut; mut = mut->next)
HLP_extract_tasklist(&(mut->tasklist), p);
 
/* remove the task from the tasklist */
HLP_extract_tasklist(&(m->tasklist), p);
}
 
/* called when a mutex_init on a HLP is made */
static int HLP_init(RLEVEL l, mutex_t *m, const mutexattr_t *a)
{
HLP_mutex_resource_des *lev = (HLP_mutex_resource_des *)(resource_table[l]);
HLP_mutex_t *mut;
 
 
if (a->mclass != HLP_MCLASS)
return -1;
 
mut = (HLP_mutex_t *) kern_alloc(sizeof(HLP_mutex_t));
 
/* control if there is enough memory; no control on init on a
non- destroyed mutex */
 
if (!mut)
return (ENOMEM);
 
res_default_model(mut->r, HLP2_RCLASS);
 
mut->owner = NIL;
mut->tasklist = NULL;
mut->next = lev->mutexlist;
lev->mutexlist = mut;
 
m->mutexlevel = l;
m->opt = (void *)mut;
 
return 0;
}
 
static int HLP_destroy(RLEVEL l, mutex_t *m)
{
HLP_mutex_resource_des *lev = (HLP_mutex_resource_des *)(resource_table[l]);
HLP_mutex_t *mut;
SYS_FLAGS f;
 
f = kern_fsave();
 
mut = m->opt;
 
if (mut->owner != NIL)
return (EBUSY);
 
/* extracting from the list of system mutexes */
lev = lev;
// HLP_extract_hlplist(lev, mut);
 
if (m->opt) {
kern_free(m->opt,sizeof(HLP_mutex_t));
m->opt = NULL;
}
kern_frestore(f);
 
return 0;
}
 
/* mutex_lock */
static int HLP_lock(RLEVEL l, mutex_t *m)
{
HLP_mutex_resource_des *lev = (HLP_mutex_resource_des *)(resource_table[l]);
HLP_mutex_t *mut;
HLP_tasklist_t *current, *taskscan;
 
SYS_FLAGS f;
 
f = kern_fsave();
 
mut = (HLP_mutex_t *)m->opt;
 
if (!mut) {
/* if the mutex is not initialized */
kern_frestore(f);
return (EINVAL);
}
 
if (mut->owner == exec_shadow) {
/* the task already owns the mutex */
kern_frestore(f);
return (EDEADLK);
}
 
current = HLP_tasklist_with_pid(mut->tasklist, exec_shadow);
 
if (current == NULL || /* se il task non usa il mutex */
mut->owner != NIL) /* o il mutex e' gia' lockato */
{
kern_raise(XHLP_INVALID_LOCK, exec_shadow);
kern_frestore(f);
return (EINVAL);
}
 
/* we know that:
- the task and the mutex that it wants to lock
- the mutex is free
=> the task can lock now the mutex
*/
 
mut->owner = exec_shadow;
 
print_shadow("prelock", lev);
 
/* shadow of tasks using the same mutexes, have to point to exec_shadow */
 
for (taskscan = current->prev; taskscan != NULL; taskscan = taskscan->prev)
proc_table[taskscan->pid].shadow = exec_shadow;
 
print_shadow("postlock", lev);
 
kern_frestore(f);
 
return 0;
}
 
/* HLP_trylock is equal to HLP_lock because the HLP_lock don't block !!! */
 
static int HLP_unlock(RLEVEL l, mutex_t *m)
{
HLP_mutex_resource_des *lev;
HLP_mutex_t *mut, *mutscan;
HLP_tasklist_t *current, *taskscan, *taskowner;
 
lev = (HLP_mutex_resource_des *)(resource_table[l]);
mut = (HLP_mutex_t *)m->opt;
 
if (!mut)
{
kern_sti();
return (EINVAL);
}
 
if (mut->owner != exec_shadow) {
/* the mutex is owned by another task!!! */
kern_sti();
return (EPERM);
}
 
proc_table[exec_shadow].context = kern_context_save();
 
mut->owner = NIL;
 
/* recalculate shadow for tasks with preemption level upper
than tasks with shadow pointing to current task */
 
current = HLP_tasklist_with_pid(lev->tasklist, exec_shadow);
print_shadow("preunlock", lev);
 
/* for on tasks with upper preemption level */
for (taskscan = current->prev; taskscan; taskscan = taskscan->prev)
{
/* task affected by hlp. Need to recalc the shadow */
if (proc_table[taskscan->pid].shadow == exec_shadow &&
taskscan->pid != current->pid)
{
proc_table[taskscan->pid].shadow = taskscan->pid;
for (mutscan = taskscan->mutexlist; mutscan; mutscan = mutscan->next)
{
if (mutscan->owner != NIL)
{
taskowner = HLP_tasklist_with_pid(mutscan->tasklist, mutscan->owner);
if (taskowner->preempt <= taskscan->preempt)
proc_table[taskscan->pid].shadow = mutscan->owner;
}
}
}
}
print_shadow("postunlock", lev);
 
scheduler();
TRACER_LOGEVENT(FTrace_EVT_inheritance,(unsigned short int)proc_table[exec_shadow].context,(unsigned int)proc_table[exec].context);
kern_context_load(proc_table[exec_shadow].context);
 
return 0;
}
 
RLEVEL HLP_register_module(void)
{
RLEVEL l; /* the level that we register */
HLP_mutex_resource_des *m; /* for readableness only */
 
printk("HLP_register_module\n");
 
/* request an entry in the level_table */
l = resource_alloc_descriptor();
 
/* alloc the space needed for the EDF_level_des */
m = (HLP_mutex_resource_des *)kern_alloc(sizeof(HLP_mutex_resource_des));
 
/* update the level_table with the new entry */
resource_table[l] = (resource_des *)m;
 
/* fill the resource_des descriptor */
m->m.r.rtype = MUTEX_RTYPE;
m->m.r.res_register = HLP_res_register;
m->m.r.res_detach = HLP_res_detach;
 
/* fill the mutex_resource_des descriptor */
m->m.init = HLP_init;
m->m.destroy = HLP_destroy;
m->m.lock = HLP_lock;
m->m.trylock = HLP_lock; /* equal!!! */
m->m.unlock = HLP_unlock;
 
/* fill the HLP_mutex_resource_des descriptor */
m->tasklist = NULL;
m->mutexlist = NULL;
 
return l;
}
/unsupported/trunk/hlp/doc/hlp.tex
0,0 → 1,160
\documentclass[12pt]{article}
\usepackage[italian]{babel}
\usepackage[latin1]{inputenc}
\usepackage[dvips]{graphicx}
 
\author{Luigi Panzeri}
\title{Protocollo Highest Locker Priority per S.Ha.R.K.}
 
\begin{document}
\tableofcontents
 
\section{Introduzione}
L'implementazione per \emph{S.Ha.R.K.}, che realizza il protocollo di
accesso a risorse condivise \emph{Highest Locker Priority} \'e stata
realizzata come modulo di accesso alle risorse, partendo dal codice
del modulo del \emph{Stack Resource Policy}. Il lavoro prodotto ha
cercato, quindi, di non tradire la filosofia modulare con la quale \'e
stato scritto S.Ha.R.K, e le convenzioni usate nell'interfaccia verso
il codice utente e nello stile del codice stesso del modulo.
\newline
La seconda parte del lavoro ha prodotto una demo che disegna la
temporizzazione di $n$ task che condividono fino a 3 mutex utilizzando
HLP. Il task set e la sequenza di accesso \`e configurabile da
file. Con poche modifiche \'e possibile usare la demo anche per test o
simulazioni per altri protocolli.
 
\subsection{Logica di riferimento: HLP}
Il protocollo HLP stabilisce che la priorit\'a di esecuzione di un
processo $J_i$ che usa una risorsa $R$ viene innalzata ad un livello
$p_i$ tale che esso non possa subire preemption dai processi che
condividono quella stessa risorsa. Ovvero viene stabilito il Non
preemptive protocol solo tra i task che condividono una stessa
risorsa.
 
In S.Ha.R.K., per permettere indipendenza e separazione tra i vari
moduli, c\'e una netta separazione tra i moduli che gestiscono lo
scheduling (\emph{Scheduling Module}), e quelli che gestiscono
l'accesso alle risorse condivise (\emph{Resource Module}). Per questo
motivo, i moduli che gestiscono le risorse condivise (mutex, semafori,
etc.), non conoscono i dettagli algoritmici dei moduli di scheduling e
non possono quindi intervenire su parametri quali le priorit\'a dei
processi.
 
Per permettere ad un \emph{Resource Module} di modificare la
schedulazione dei task, si utilizza il meccanismo degli
\emph{shadows}. Ogni task ha associato un puntatore ad un altro task
(chiamato appunto shadow). Quando un task viene schedulato, viene
eseguito non il task stesso, ma il suo shadow. In una situazione
normale ogni task ha come shadow se stesso. Un Resource Module pu\'o
quindi intervenire sugli shadow per modificare,
\textbf{indipendentemente} dal modulo (o moduli) di scheduling
adottato, la schedulazione dei task.
 
\section{Interfaccia per l'utente}
L'interfaccia per l'utente segue la linea del SRP. Per creare un
mutex, in fase di inizializzazione esiste il tipo $HLP\_mutexattr\_t$ e
la macro $HLP\_mutexattr\_default$.
\newline
Per la creazione dei task e la registrazione dei mutex esistono le strutture $HLP\_RES\_MODEL$ e le macro $HLP\_res\_default\_model$ e $HLP\_usemutex$. La seconda accetta come secondo parametro il livello di preemption del task(nella demo impostato inversamente proporzionale al periodo). L'ultima si fa carico della registrazione del mutex nella $task\_createn$.
 
\section{Internals}
\subsection{La gestione degli shadow per l'HLP}
 
Le strutture dati usate per gestire gli shadow sono due liste,
rispettivamente, di task ($tasklist$) e di mutex($mutexlist$)
ortogonali. Ogni elemento della lista dei task(mutex) \`e una lista
dei mutex(task) che vengono utilizzati(utilizzano) dal task(mutex). Le
liste dei task sono ordinate per livelli di preemption (i quali
possono essere assegnati in maniera inversamente proporzionale al
periodo per avere un comportamento classico HLP+RM).
 
\subsubsection{Il lock}
Quando viene effettuato un lock (callback $HLP\_lock$), semplicemente
faccio puntare lo shadow dei processi che usano lo stesso lock e che
hanno preemption level maggiore al processo bloccante. In tal modo,
anche se scelti dallo scheduler, verr\'a eseguito il task che ha
bloccato la risorsa. L'effetto finale \`e che il task bloccante non
pu\'o subire preemption da task che usano la stessa risorsa. Nel
codice $current$ \`e il task che ha chiesto il lock. La lista su cui
si scorre \`e quella dei task che usano il mutex in questione.
 
\begin{verbatim}
for (taskscan = current->prev; taskscan != NULL; taskscan = taskscan->prev)
proc_table[taskscan->pid].shadow = exec_shadow;
\end{verbatim}
 
\subsubsection{L'unlock}
L'unlock \`e la fase meno semplice, in quanto in caso di accessi
annidati, perdiamo l'informazione dell'ultima shadow salvata. \`E
quindi indispensabile ricalcolare completamente lo shadow per i
tutti i processi che subiscono l'unshadowing.
 
\begin{verbatim}
/* ciclo sui processi a preemption level maggiore */
for (taskscan = current->prev; taskscan; taskscan = taskscan->prev) {
/* task influenzato, ha bisogno di un ricalcolo dello shadow */
if (proc_table[taskscan->pid].shadow == exec_shadow &&
taskscan->pid != current->pid) {
proc_table[taskscan->pid].shadow = taskscan->pid;
for (mutscan = taskscan->mutexlist; mutscan; mutscan = mutscan->next) {
if (mutscan->owner != NIL) {
taskowner = HLP_tasklist_with_pid(mutscan->tasklist, mutscan->owner);
if (taskowner->preempt <= taskscan->preempt)
proc_table[taskscan->pid].shadow = mutscan->owner;
}
}
}
}
\end{verbatim}
 
\subsection{Eccezioni}
Il modulo lavora sotto l'ipotesi che le risorse siano singole. \'E
possibile innestare i lock dei mutex (senza intersezioni), avere pi\'u
di una risorsa bloccata. In caso di comportamenti anomali (es. un task
termina prima di sbloccare tutti i suoi mutex, oppure un task cerca di
accedere ad una risorsa gi\'a occupata) viene sollevata un'eccezione.
 
\section{Demo}
La demo \`e fornita in versione testuale e versione grafica. La
configurazione del taskset viene specificata nel file hlp.cfg con la
sintassi:
\begin{verbatim}
task T1 every 10 runs 15
locks m1 runs 12 unlocks m1
runs 13
task T2 every 20 runs 20
 
etc...
\end{verbatim}
 
Dove T1, T2 e m2 sono nomi arbitrari da dare ai task ed alle risorse. Il numero di task
\`e limitato dall'altezza dello schermo. Il numero dei mutex utilizzati dai task \`e limitato a 3, a causa dei limiti della task\_createn.
Al termine della demo, viene salvato un file ppm rappresentante la temporizzazione. Es.:
 
\begin{figure}
\includegraphics[angle=90]{tutto}
\caption{Snapshot totale della temporizzazione}
\end{figure}
 
\begin{figure}
\includegraphics[scale=2]{hlp}
\caption{Zoom che evidenzia il funzionamento dell'Highest Locker Priority}
\end{figure}
 
\section{Files}
 
Per compilare il tutto bisogna tener presente che i file
 
\begin{enumerate}
\item hlpgraph.c
\item hlpparse.c
\item hlptext.c
\item hlpdemo.h
\item hlptxtin.c
\item hlpgrxin.c
\end{enumerate}
 
sono stati pensati per essere compilati nella directory demos/base, con i flag di compilazione per la gestione del Frame Buffer.
 
\end{document}
/unsupported/trunk/hlp/doc/tutto.eps
0,0 → 1,1892
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: GIMP PostScript file plugin V 1.12 by Peter Kirchgessner
%%Title: /home/rms/tutto.eps
%%CreationDate: Mon Oct 18 15:16:30 2004
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 14 14 655 495
%%EndComments
%%BeginProlog
% Use own dictionary to avoid conflicts
10 dict begin
%%EndProlog
%%Page: 1 1
% Translate for offset
14.173228 14.173228 translate
% Translate to begin of first scanline
0.000000 480.000000 translate
640.000000 -480.000000 scale
% Image geometry
640 480 8
% Transformation matrix
[ 640 0 0 480 0 0 ]
% Strings to hold RGB-samples per scanline
/rstr 640 string def
/gstr 640 string def
/bstr 640 string def
{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
true 3
%%BeginData: 74576 ASCII Bytes
colorimage
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
c2dh<quHclli@%[nc/[bqZ-ZkgAq6Jp&P-frrE)orrE#mr;c`ioDemdm/[.\JH16$JH4O,J,~>
c2dh@quHcpli@%_nc/[fqZ-ZogAq6Np&P-jrrE)srrE#qr;c`moDemhm/[.`JH16$JH4O,J,~>
c2dh<quHclli@%[nc/[bqZ-ZkgAq6Jp&P-frrE)orrE#mr;c`ioDemdm/[.\JH16$JH4O,J,~>
cN+"?rrE)ojT,>Uo)Sgce,]OD!W`#jpAk6grrE)orW)unqZ-ZkrrE)op&P-fli@(\JH16$JH4O,
J,~>
cN+"CrrE)sjT,>Yo)Sgge,]OH!W`/rpAk6krrE)srW)urqZ-ZorrE)sp&P-jli@(`JH16$JH4O,
J,~>
cN+"?rrE)ojT,>Uo)Sgce,]OD!W`#jpAk6grrE)orW)unqZ-ZkrrE)op&P-fli@(\JH16$JH4O,
J,~>
cN*t>qZ-Wjr;clmrrE)orrE)orrE)or;clmquH]jr;ccjrW)rmquH]jrW)lko`4scr;clmoDnpd
rrE)orW)unqZ-ZkrrE)opAk-drW)olr;ccjrW)unrrE)orrDulJH16$JH4p7J,~>
cN*tBqZ-Wnr;clqrrE)srrE)srrE)sr;clqquH]nr;ccnrW)rqquH]nrW)loo`4sgr;clqoDnph
rrE)srW)urqZ-ZorrE)spAk-hrW)opr;ccnrW)urrrE)srrDupJH16$JH4p7J,~>
cN*t>qZ-Wjr;clmrrE)orrE)orrE)or;clmquH]jr;ccjrW)rmquH]jrW)lko`4scr;clmoDnpd
rrE)orW)unqZ-ZkrrE)opAk-drW)olr;ccjrW)unrrE)orrDulJH16$JH4p7J,~>
c2dk=qZ-Zkr;c]h"p"Gn!!)fhr;clmq#LHir;clmqZ-Zkr;clmrrE)orrE)orrE)opAk6grrE)o
rrE#mo`4marW)unqZ-Qho`5$eq#LHirrE)oq>gQj"p"Gn!!)fhJH16$JH4d3J,~>
c2dkAqZ-Zor;c]l"p"T!!!)rpr;clqq#LHmr;clqqZ-Zor;clqrrE)srrE)srrE)spAk6krrE)s
rrE#qo`4merW)urqZ-Qlo`5$iq#LHmrrE)sq>gQn"p"T!!!)rpJH16$JH4d3J,~>
c2dk=qZ-Zkr;c]h"p"Gn!!)fhr;clmq#LHir;clmqZ-Zkr;clmrrE)orrE)orrE)opAk6grrE)o
rrE#mo`4marW)unqZ-Qho`5$eq#LHirrE)oq>gQj"p"Gn!!)fhJH16$JH4d3J,~>
bQ.Y;r;clmr;c]h"p"Gn!!)fhr;clmquHZir;clmqZ-Zkr;clmrrE)orrE)orrE)opAk6grrE)o
rW)unoDnpdrrE)orW)unrW!)r!!)fhnc8^bquHZirW)olr;cfkr;cfkJH16$JH4m6J,~>
bQ.Y?r;clqr;c]l"p"T!!!)rpr;clqquHZmr;clqqZ-Zor;clqrrE)srrE)srrE)spAk6krrE)s
rW)uroDnphrrE)srW)urrW!*!!!)rpnc8^fquHZmrW)opr;cfor;cfoJH16$JH4m6J,~>
bQ.Y;r;clmr;c]h"p"Gn!!)fhr;clmquHZir;clmqZ-Zkr;clmrrE)orrE)orrE)opAk6grrE)o
rW)unoDnpdrrE)orW)unrW!)r!!)fhnc8^bquHZirW)olr;cfkr;cfkJH16$JH4m6J,~>
cN+"?rrE)or;clmr;clm$NTr%q"Ojap](<hq#(3mq#(3mq#:?oq#(3mp]1Bir;clmr;clmrrE)o
rrE)orrE)opAk6grrE)orW)unoDnpdrrE)orW)unrrE)orrE)onc8^b#ls`#!;Q<h!;Q?d!<;in
!<;fq!;Q?d!<;hF!.b-$!9jK6~>
cN+"CrrE)sr;clqr;clq$NU))r;6Qmqu?`pr;?Wqr;?Wqr;Qcsr;?WqquHfqr;clqr;clqrrE)s
rrE)srrE)spAk6krrE)srW)uroDnphrrE)srW)urrrE)srrE)snc8^f#lsl'!;u`p!;ucl!<;ur
!<;ru!;ucl!<;tJ!.b-$!9jK6~>
cN+"?rrE)or;clmr;clm$NTr%q"Ojap](<hq#(3mq#(3mq#:?oq#(3mp]1Bir;clmr;clmrrE)o
rrE)orrE)opAk6grrE)orW)unoDnpdrrE)orW)unrrE)orrE)onc8^b#ls`#!;Q<h!;Q?d!<;in
!<;fq!;Q?d!<;hF!.b-$!9jK6~>
c2dh<r;cfkrW)unrW)unrrE&n"9A5l!!)umr;cil!W`#jr;clmr;cfkr;cfkrW)unrrE)op&P'd
rW)olo`5$errE)orrDoj!!)umnc8^br;cil!s&,k!;uWk!<2cn!<;fo!;uVC!.b-$!9aE5~>
c2dh@r;cforW)urrW)urrrE&r"9AAt!!)uqr;cip!W`/rr;clqr;cfor;cforW)urrrE)sp&P'h
rW)opo`5$irrE)srrDon!!)uqnc8^fr;cip!s&8s!;uco!<2or!<;rs!;ubG!.b-$!9aE5~>
c2dh<r;cfkrW)unrW)unrrE&n"9A5l!!)umr;cil!W`#jr;clmr;cfkr;cfkrW)unrrE)op&P'd
rW)olo`5$errE)orrDoj!!)umnc8^br;cil!s&,k!;uWk!<2cn!<;fo!;uVC!.b-$!9aE5~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
c2dh<rW)ijr;clmqZ-TirrDojpAk0eqZ$Wkl2UhZnc8[aJH16$JH2)<J,~>
c2dh@rW)inr;clqqZ-TmrrDonpAk0iqZ$Wol2Uh^nc8[eJH16$JH2)<J,~>
c2dh<rW)ijr;clmqZ-TirrDojpAk0eqZ$Wkl2UhZnc8[aJH16$JH2)<J,~>
cN+"?rrE)orW)unrrE)orrE#mr;clmrrE)orrE)orVurnp]1?hrrE)or;clmlN$t[nGrUaJH16$
JH2)<J,~>
cN+"CrrE)srW)urrrE)srrE#qr;clqrrE)srrE)srVurrp]1?lrrE)sr;clqlN$t_nGrUeJH16$
JH2)<J,~>
cN+"?rrE)orW)unrrE)orrE#mr;clmrrE)orrE)orVurnp]1?hrrE)or;clmlN$t[nGrUaJH16$
JH2)<J,~>
cN*t>qZ-ZkrrE)o$39kr!!)fh!!)fhq>gQj!<Dog!<2cj!;uWk!<)]l!<;fo!<2cm!;uW`!<;in
!<)]l!<;io!<;in!<)\D!.b-$!3cHR~>
cN*tBqZ-ZorrE)s$3:#%!!)rp!!)rpq>gQn!<E&k!<2on!;uco!<)ip!<;rs!<2oq!;ucd!<;ur
!<)ip!<;us!<;ur!<)hH!.b-$!3cHR~>
cN*t>qZ-ZkrrE)o$39kr!!)fh!!)fhq>gQj!<Dog!<2cj!;uWk!<)]l!<;fo!<2cm!;uW`!<;in
!<)]l!<;io!<;in!<)\D!.b-$!3cHR~>
c2dk=quHZirrE)orrE)orrE)oq>gKho`5!dqZ-Zkq#LHirW)rm!W`#jrW)unoDngarrE)orrE)o
rrDoj"p"Gn!!)fhJH16$JH2qTJ,~>
c2dkAquHZmrrE)srrE)srrE)sq>gKlo`5!hqZ-Zoq#LHmrW)rq!W`/rrW)uroDngerrE)srrE)s
rrDon"p"T!!!)rpJH16$JH2qTJ,~>
c2dk=quHZirrE)orrE)orrE)oq>gKho`5!dqZ-Zkq#LHirW)rm!W`#jrW)unoDngarrE)orrE)o
rrDoj"p"Gn!!)fhJH16$JH2qTJ,~>
bQ.Y;rW)unquHWhrrE)oq>gQj!<Dod!<2cl!<;il!;uWk!<;io!<;in!<;ie!<;io!<;io!;lQk
!;cHp!;Q<h!;Q>?!.b-$!3lNS~>
bQ.Y?rW)urquHWlrrE)sq>gQn!<E&h!<2op!<;up!;uco!<;us!<;ur!<;ui!<;us!<;us!;l]o
!;cTt!;u`p!;ubG!.b-$!3lNS~>
bQ.Y;rW)unquHWhrrE)oq>gQj!<Dod!<2cl!<;il!;uWk!<;io!<;in!<;ie!<;io!<;io!;lQk
!;cHp!;Q<h!;Q>?!.b-$!3lNS~>
cN+"?rrE)orW)unquHclrrE)orW)unrrE)orrE)orVurnp]1?hrrE)or;clm#ls`#!;Q<h!;Q?g
!<;ij!<;fp!;Q9gs7lTos7lTos7lHks7cs%p]1*a!;Q<h!;Q>?!.b-$!3lNS~>
cN+"CrrE)srW)urquHcprrE)srW)urrrE)srrE)srVurrp]1?lrrE)sr;clq#lsl'!;u`p!;uco
!<;un!<;rt!;uQks8;lss8;lss8;`os836)quHZm!;u`p!;ubG!.b-$!3lNS~>
cN+"?rrE)orW)unquHclrrE)orW)unrrE)orrE)orVurnp]1?hrrE)or;clm#ls`#!;Q<h!;Q?g
!<;ij!<;fp!;Q9gs7lTos7lTos7lHks7cs%p]1*a!;Q<h!;Q>?!.b-$!3lNS~>
c2dh<rW)olr;clmrrE)or;cfkrrDojpAk0eqZ-Zkr;cil!s&,k!<)]h!<;ie!<2`r!;Q<h!<)]l
!<;in!<;io!<)\D!.b-$!3cHR~>
c2dh@rW)opr;clqrrE)sr;cforrDonpAk0iqZ-Zor;cip!s&8s!<)il!<;ui!<2m!!;u`p!<)ip
!<;ur!<;us!<)hH!.b-$!3cHR~>
c2dh<rW)olr;clmrrE)or;cfkrrDojpAk0eqZ-Zkr;cil!s&,k!<)]h!<;ie!<2`r!;Q<h!<)]l
!<;in!<;io!<)\D!.b-$!3cHR~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
cN*h:rrE#mquH]jeH#XEq>^Njnc/[bm/[(ZquH`kr;cfkJH16$JH31[J,~>
cN*h>rrE#qquH]neH#XIq>^Nnnc/[fm/[(^quH`or;cfoJH16$JH31[J,~>
cN*h:rrE#mquH]jeH#XEq>^Njnc/[bm/[(ZquH`kr;cfkJH16$JH31[J,~>
c2dn>rW!2u!;Q<h!;Q?g!<;io!<;i>!<;ic!<;i\!<;fq!;Q?g!<;g$!;Q<h!;Q<h!;Q>?!.b-$
!4`)[~>
c2dnBrW!3$!;u`p!;uco!<;us!<;uB!<;ug!<;u`!<;ru!;uco!<;s(!;u`p!;u`p!;ubG!.b-$
!4`)[~>
c2dn>rW!2u!;Q<h!;Q?g!<;io!<;i>!<;ic!<;i\!<;fq!;Q?g!<;g$!;Q<h!;Q<h!;Q>?!.b-$
!4`)[~>
c2dn>!<Doo!<2ck!<;iR!<)]l!<;in!<;io!<2ck!;uWc!;uWk!<)]c!<;io!<;fq!;Q?g!<;fo
!<2bE!.b-$!4DlX~>
c2dnB!<E&s!<2oo!<;uV!<)ip!<;ur!<;us!<2oo!;ucg!;uco!<)ig!<;us!<;ru!;uco!<;rs
!<2nI!.b-$!4DlX~>
c2dn>!<Doo!<2ck!<;iR!<)]l!<;in!<;io!<2ck!;uWc!;uWk!<)]c!<;io!<;fq!;Q?g!<;fo
!<2bE!.b-$!4DlX~>
c2dh<r;cilr;clmirK,SrrE)orW)un!W`#jr;clmqZ-Zko)Sgcr;clmrrE)op&P-frrE)o!W`#j
rW)unrrE&nJH16$JH3.ZJ,~>
c2dh@r;cipr;clqirK,WrrE)srW)ur!W`/rr;clqqZ-Zoo)Sggr;clqrrE)sp&P-jrrE)s!W`/r
rW)urrrE&rJH16$JH3.ZJ,~>
c2dh<r;cilr;clmirK,SrrE)orW)un!W`#jr;clmqZ-Zko)Sgcr;clmrrE)op&P-frrE)o!W`#j
rW)unrrE&nJH16$JH3.ZJ,~>
c2dn>!<Dol!<2cn!<;iS!;lQi!<2ck!<;ik!<;ic!<;im!<;io!<;if!<;io!<;fq!;Q?g!<;im
!<2bE!.b-$!4`)[~>
c2dnB!<E&p!<2or!<;uW!;l]m!<2oo!<;uo!<;ug!<;uq!<;us!<;uj!<;us!<;ru!;uco!<;uq
!<2nI!.b-$!4`)[~>
c2dn>!<Dol!<2cn!<;iS!;lQi!<2ck!<;ik!<;ic!<;im!<;io!<;if!<;io!<;fq!;Q?g!<;im
!<2bE!.b-$!4`)[~>
c2dn>rW!2u!;Q<h!;Q?g!<;io!<;iX!<;ij!<;fq!;Q?f!<;ik!<;fp!;Q3es7cm#p](<hp](<h
q"=^fp]:Hjq#19np^.#rp](<hp](<hpjiEr!.b-\!.Y~>
c2dnBrW!3$!;u`p!;uco!<;us!<;u\!<;un!<;ru!;ucn!<;uo!<;rt!;uKis830'qu?`pqu?`p
r:U-jquQlrr;H]rr!EH%qu?`pqu?`pr.+j!!.b-\!.Y~>
c2dn>rW!2u!;Q<h!;Q?g!<;io!<;iX!<;ij!<;fq!;Q?f!<;ik!<;fp!;Q3es7cm#p](<hp](<h
q"=^fp]:Hjq#19np^.#rp](<hp](<hpjiEr!.b-\!.Y~>
cN*h:rrE#mquH]jjoGATrW)unrW)unrrE#mqZ-Zko)Sgcr;cfkp&P$cquH`kr;cfkJH16$JH31[
J,~>
cN*h>rrE#qquH]njoGAXrW)urrW)urrrE#qqZ-Zoo)Sggr;cfop&P$gquH`or;cfoJH16$JH31[
J,~>
cN*h:rrE#mquH]jjoGATrW)unrW)unrrE#mqZ-Zko)Sgcr;cfkp&P$cquH`kr;cfkJH16$JH31[
J,~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
ciAXlJbXfkJb[mmgAla~>
ciAXpJc()sJc+0ugAla~>
ciAXlJbXfkJb[mmgAla~>
ci=(@cN*k;r;clmh#R?IrW)olr;cfklMpq[m/[.\i;`lQqZ-Zkh#R?Ir;clmq>gQjrW)ijrW)ol
rW)lkp&P!bmK!4\rW)rmnGrR`k5bDSrW)unJH4R-!;P:KJ,~>
ci=(DcN*k?r;clqh#R?MrW)opr;cfolMpq_m/[.`i;`lUqZ-Zoh#R?Mr;clqq>gQnrW)inrW)op
rW)lop&P!fmK!4`rW)rqnGrRdk5bDWrW)urJH4R-!;tROJ,~>
ci=(@cN*k;r;clmh#R?IrW)olr;cfklMpq[m/[.\i;`lQqZ-Zkh#R?Ir;clmq>gQjrW)ijrW)ol
rW)lkp&P!bmK!4\rW)rmnGrR`k5bDSrW)unJH4R-!;P:KJ,~>
ci=(@cN".D!;Q<hpuMMUq"4Xeq"k'kq#:?oq#:?oq#:?oq!A(]q!8"\pu2;Rpu;ASq"4Ujp]1*a
!;QNnrqQ?js7lKls7lTos7lQns7lKls7cWqq"XR`s7km[s7lTos7lQns7l'`s7kaWs7lBis7h-F
huEcPgAla~>
ci=(DcN".H!;u`pr8dqYr:L'ir;-Kor;Qcsr;Qcsr;Qcsr9XLar9OF`r8I_Vr8ReWr:L$nquHZm
!;ufrrquWns8;cps8;lss8;irs8;cps82our;?9hs8;0_s8;lss8;irs8;?ds8;$[s8;Zms87EJ
huEcTgAla~>
ci=(@cN".D!;Q<hpuMMUq"4Xeq"k'kq#:?oq#:?oq#:?oq!A(]q!8"\pu2;Rpu;ASq"4Ujp]1*a
!;QNnrqQ?js7lKls7lTos7lQns7lKls7cWqq"XR`s7km[s7lTos7lQns7l'`s7kaWs7lBis7h-F
huEcPgAla~>
ci=(@blIe=quH`kr;clmrrE)orW)olquHclo`4pbrW)unrrE)orrE)orrE)omK!1[rW)olr;ccj
rW)unrrE)opAk0er;cfkr;ccjrW)rmr;clmrrE)orW)olquHclo)SgcqZ-ZkquHclqZ-ZkrrE)o
rW)unquHclrrE)o!!)okrrDulmK!7]qZ-Zk!W`#jrW)olq>gQjrW)olrW)unrW)un!!)okrrDul
qZ-ZkJH4X/!;P:KJ,~>
ci=(DblIeAquH`or;clqrrE)srW)opquHcpo`4pfrW)urrrE)srrE)srrE)smK!1_rW)opr;ccn
rW)urrrE)spAk0ir;cfor;ccnrW)rqr;clqrrE)srW)opquHcpo)SggqZ-ZoquHcpqZ-ZorrE)s
rW)urquHcprrE)s!!)oorrDupmK!7aqZ-Zo!W`/rrW)opq>gQnrW)oprW)urrW)ur!!)oorrDup
qZ-ZoJH4X/!;tROJ,~>
ci=(@blIe=quH`kr;clmrrE)orW)olquHclo`4pbrW)unrrE)orrE)orrE)omK!1[rW)olr;ccj
rW)unrrE)opAk0er;cfkr;ccjrW)rmr;clmrrE)orW)olquHclo)SgcqZ-ZkquHclqZ-ZkrrE)o
rW)unquHclrrE)o!!)okrrDulmK!7]qZ-Zk!W`#jrW)olq>gQjrW)olrW)unrW)un!!)okrrDul
qZ-ZkJH4X/!;P:KJ,~>
ci=(@blIe=qZ-Zkr;c]h"p"Gn!!)fhlN$t[rW)lkrW)lkm/[1]q#LHirrE)oq>gQj!W`#jo)Sgc
rrE)orrE)or;clmqZ-Zkr;clmrrE)orrE)orrE)om/[1]qZ-ZkquHclqZ-Qhr;clmquHclrrE)o
oDnpdmK!7]quH`k!W`#jquHclrW)lkrrE)orrE)orrE)o"9A2sq"XI]s7lKls7h-Fi;`lQgAla~>
ci=(DblIeAqZ-Zor;c]l"p"T!!!)rplN$t_rW)lorW)lom/[1aq#LHmrrE)sq>gQn!W`/ro)Sgg
rrE)srrE)sr;clqqZ-Zor;clqrrE)srrE)srrE)sm/[1aqZ-ZoquHcpqZ-Qlr;clqquHcprrE)s
oDnphmK!7aquH`o!W`/rquHcprW)lorrE)srrE)srrE)s"9A?"r;?0es8;cps87EJi;`lUgAla~>
ci=(@blIe=qZ-Zkr;c]h"p"Gn!!)fhlN$t[rW)lkrW)lkm/[1]q#LHirrE)oq>gQj!W`#jo)Sgc
rrE)orrE)or;clmqZ-Zkr;clmrrE)orrE)orrE)om/[1]qZ-ZkquHclqZ-Qhr;clmquHclrrE)o
oDnpdmK!7]quH`k!W`#jquHclrW)lkrrE)orrE)orrE)o"9A2sq"XI]s7lKls7h-Fi;`lQgAla~>
ci=(@blIe=qZ-Zkr;c]h!!)oklN$t[qZ-ZkqZ-Zkm/[1]quHZirW)olr;cfko`4pbrrE)oq#LHi
qZ-Zkr;clmrrE)orrDrkm/[1]qZ-ZkquHclqZ-Zkq>gQjquHclrrE)ooDnpdli@%[rW)unrrE)o
rrDulrrE)orrE)orrE)orrE)orrDojoDnpdquHclJH4X/!;P:KJ,~>
ci=(DblIeAqZ-Zor;c]l!!)oolN$t_qZ-ZoqZ-Zom/[1aquHZmrW)opr;cfoo`4pfrrE)sq#LHm
qZ-Zor;clqrrE)srrDrom/[1aqZ-ZoquHcpqZ-Zoq>gQnquHcprrE)soDnphli@%_rW)urrrE)s
rrDuprrE)srrE)srrE)srrE)srrDonoDnphquHcpJH4X/!;tROJ,~>
ci=(@blIe=qZ-Zkr;c]h!!)oklN$t[qZ-ZkqZ-Zkm/[1]quHZirW)olr;cfko`4pbrrE)oq#LHi
qZ-Zkr;clmrrE)orrDrkm/[1]qZ-ZkquHclqZ-Zkq>gQjquHclrrE)ooDnpdli@%[rW)unrrE)o
rrDulrrE)orrE)orrE)orrE)orrDojoDnpdquHclJH4X/!;P:KJ,~>
ci=(@blIe=qZ-Zkr;clm#6=N!q"Ojaq"Xpiq"4Xeq#:?oq"t-lq"k'kq"t-lq""Lcp^$rq!!)fh
!!)fhqZ-ZkrW)un!W`#jpAk6grrE)orrE)orrE)or;clm!<Don!<;il!<)]l!<;ii!<;ic!<;ik
!<;ik!<;il!<;ij!<;il!<;fs!;Q<h!;lQk!<;io!<;im!<;ie!<;io!<;in!<;io!<;g2!;Q<h
!;Q<h!;Q<h!;Q<h!;Q<h!;Q<h!;cHj!;lQk!<;io!<;im!<;hF!8mhWptGe!~>
ci=(DblIeAqZ-Zor;clq#6=Z%r;6Qmr:p?mr:L'ir;Qcsr;6Qpr;-Kor;6Qpr:9pgr!<B$!!)rp
!!)rpqZ-ZorW)ur!W`/rpAk6krrE)srrE)srrE)sr;clq!<E&r!<;up!<)ip!<;um!<;ug!<;uo
!<;uo!<;up!<;un!<;up!<;s"!;u`p!;l]o!<;us!<;uq!<;ui!<;us!<;ur!<;us!<;s6!;u`p
!;u`p!;u`p!;u`p!;u`p!;u`p!;cTn!;l]o!<;us!<;uq!<;tJ!8mhWr7_4%~>
ci=(@blIe=qZ-Zkr;clm#6=N!q"Ojaq"Xpiq"4Xeq#:?oq"t-lq"k'kq"t-lq""Lcp^$rq!!)fh
!!)fhqZ-ZkrW)un!W`#jpAk6grrE)orrE)orrE)or;clm!<Don!<;il!<)]l!<;ii!<;ic!<;ik
!<;ik!<;il!<;ij!<;il!<;fs!;Q<h!;lQk!<;io!<;im!<;ie!<;io!<;in!<;io!<;g2!;Q<h
!;Q<h!;Q<h!;Q<h!;Q<h!;Q<h!;cHj!;lQk!<;io!<;im!<;hF!8mhWptGe!~>
ci=(@c2dh<r;cfkrW)unrW)unrrE#mquHcloDnjbr;cilquH`kqZ-Zknc8^br;cil!s&,k!;uWk
!<2cn!<;ig!<2`r!;Q<h!<)]i!<;im!<)]j!<;il!<)]j!<;id!<)]l!;lQh!<;in!<)]j!<)]l
!;uWb!<)]j!<;id!<)]l!<2cn!<;io!<2`r!;Q<h!<2`r!;Q<h!<)]k!<;fq!;Q?_!<)]k!<;hF
!8dbVptGe!~>
ci=(Dc2dh@r;cforW)urrW)urrrE#qquHcpoDnjfr;cipquH`oqZ-Zonc8^fr;cip!s&8s!;uco
!<2or!<;uk!<2m!!;u`p!<)im!<;uq!<)in!<;up!<)in!<;uh!<)ip!;l]l!<;ur!<)in!<)ip
!;ucf!<)in!<;uh!<)ip!<2or!<;us!<2m!!;u`p!<2m!!;u`p!<)io!<;ru!;ucg!<)io!<;tJ
!8dbVr7_4%~>
ci=(@c2dh<r;cfkrW)unrW)unrrE#mquHcloDnjbr;cilquH`kqZ-Zknc8^br;cil!s&,k!;uWk
!<2cn!<;ig!<2`r!;Q<h!<)]i!<;im!<)]j!<;il!<)]j!<;id!<)]l!;lQh!<;in!<)]j!<)]l
!;uWb!<)]j!<;id!<)]l!<2cn!<;io!<2`r!;Q<h!<2`r!;Q<h!<)]k!<;fq!;Q?_!<)]k!<;hF
!8dbVptGe!~>
ci=(@L&h8KJH3jns7h-FNrT1TgAla~>
ci=(DL&h8OJH3jns87EJNrT1XgAla~>
ci=(@L&h8KJH3jns7h-FNrT1TgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(DpAb3k\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-j8]2XgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(@p]1<g])_j*])_j*])_j*])_j*])_j*])_j*])_j*jT#;UgAla~>
ci=(Dp]1<k])_j.])_j.])_j.])_j.])_j.])_j.])_j.jT#;YgAla~>
ci=(@p]1<g])_j*])_j*])_j*])_j*])_j*])_j*])_j*jT#;UgAla~>
ci=(@q#CQm!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh
]`831!;HQhjo>DVgAla~>
ci=(Dq#CQq!;lip]`835!;lip]`835!;lip]`835!;lip]`835!;lip]`835!;lip]`835!;lip
]`835!;lipjo>DZgAla~>
ci=(@q#CQm!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh]`831!;HQh
]`831!;HQhjo>DVgAla~>
ci=(@q>^`p!!)co!;O;/#5A/up](<h^AnK5!!)co!;O;/#5A/up](<h^AnK5!!)co!;O;/#5A/u
p](<h^AnK5!!)co!;O;/#5A/up](<hk5YMWgAla~>
ci=(Dq>^`t!!)os!;sS3#5eH$qu?`p^AnK9!!)os!;sS3#5eH$qu?`p^AnK9!!)os!;sS3#5eH$
qu?`p^AnK9!!)os!;sS3#5eH$qu?`pk5YM[gAla~>
ci=(@q>^`p!!)co!;O;/#5A/up](<h^AnK5!!)co!;O;/#5A/up](<h^AnK5!!)co!;O;/#5A/u
p](<h^AnK5!!)co!;O;/#5A/up](<hk5YMWgAla~>
ci=(@qZ$WkrVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurn
rVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurnkPtVXgAla~>
ci=(DqZ$WorVurrrVurr_#OK5rVurrrVurr_#OK5rVurrrVurr_#OK5rVurrrVurr_#OK5rVurr
rVurr_#OK5rVurrrVurr_#OK5rVurrrVurr_#OK5rVurrrVurrkPtV\gAla~>
ci=(@qZ$WkrVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurn
rVurn_#OK1rVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurnkPtVXgAla~>
ci=(@qu?`lr;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zim
r;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zimkl:_YgAla~>
ci=(Dqu?`pr;Ziqr;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziq
r;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziqr;Ziqkl:_]gAla~>
ci=(@qu?`lr;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zim
r;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;Zimkl:_YgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(DpAb3k\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-j8]2XgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(DpAb3k\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-j8]2XgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(DpAb3k\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-j8]2XgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
ci=(DpAb3k\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-\GuX-j8]2XgAla~>
ci=(@pAb3g\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)\GuX)j8]2TgAla~>
irJuOr;clmq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
irJuSr;clqq>^NnpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
irJuOr;clmq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
irB8X!;Q<hq#19mq"asjq"Fd[Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7YjqbpYkZrQJ,~>
irB8\!;u`pr;H]qr;$Bnr:^3_[)N+;[)N+;[)N+;[)N+;[)N+;[)N+;[)N+;[.41t[/AYYJ,~>
irB8X!;Q<hq#19mq"asjq"Fd[Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7Yf6\7YjqbpYkZrQJ,~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioUqZ-Zoq>^NnpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioUqZ-Zoq>^NnpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioUqZ-Zoq>^NnpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
i;ioUqZ-Zoq>^NnpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
i;ioQqZ-Zkq>^NjpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
iW/rPrW)ijqu?`lpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
iW/rTrW)inqu?`ppAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
iW/rPrW)ijqu?`lpAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(DpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(DpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(DpAjfl`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;`W5V;nc/]tr7_4%~>
ci=(@pAjfh`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7`W5V7nc/]pptGe!~>
ci=(@pAjfh`q]/0`q]/0`q]/0`q]/0`q]/0`q]/0`q]/0qtTpd!O2@R!.Y~>
ci=(DpAjfl`r,G8`r,G8`r,G8`r,G8`r,G8`r,G8`r,G8qu$3h!OVdZ!.Y~>
ci=(@pAjfh`q]/0`q]/0`q]/0`q]/0`q]/0`q]/0`q]/0qtTpd!O2@R!.Y~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(DpAb3kL]@GQL]@GQL]@GQL]@GQbl@bAgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(@p]1<gM?*YNM?*YNM?*YNM?*YNc2[k>gAla~>
ci=(Dp]1<kM?*YRM?*YRM?*YRM?*YRc2[kBgAla~>
ci=(@p]1<gM?*YNM?*YNM?*YNM?*YNc2[k>gAla~>
ci=(@q#CQm!;HQhMuX"U!;HQhMuX"U!;HQhMuX"U!;HQhMuX"U!;HQhcN!t?gAla~>
ci=(Dq#CQq!;lipMuX"Y!;lipMuX"Y!;lipMuX"Y!;lipMuX"Y!;lipcN!tCgAla~>
ci=(@q#CQm!;HQhMuX"U!;HQhMuX"U!;HQhMuX"U!;HQhMuX"U!;HQhcN!t?gAla~>
ci=(@q>^`p!!)co!;MQS#5A/up](<hNW9:Y!!)co!;MQS#5A/up](<hNW9:Y!!)co!;On@!;P:K
J,~>
ci=(Dq>^`t!!)os!;qiW#5eH$qu?`pNW9:]!!)os!;qiW#5eH$qu?`pNW9:]!!)os!;t1D!;tRO
J,~>
ci=(@q>^`p!!)co!;MQS#5A/up](<hNW9:Y!!)co!;MQS#5A/up](<hNW9:Y!!)co!;On@!;P:K
J,~>
ci=(@qZ$WkrVurnrVurnO8o:UrVurnrVurnO8o:UrVurnrVurnO8o:UrVurnrVurnO8o:UrVurn
rVurnd/X1AgAla~>
ci=(DqZ$WorVurrrVurrO8o:YrVurrrVurrO8o:YrVurrrVurrO8o:YrVurrrVurrO8o:YrVurr
rVurrd/X1EgAla~>
ci=(@qZ$WkrVurnrVurnO8o:UrVurnrVurnO8o:UrVurnrVurnO8o:UrVurnrVurnO8o:UrVurn
rVurnd/X1AgAla~>
ci=(@qu?`lr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zim
r;ZimdJs:BgAla~>
ci=(Dqu?`pr;Ziqr;ZiqOoPL[r;Ziqr;ZiqOoPL[r;Ziqr;ZiqOoPL[r;Ziqr;ZiqOoPL[r;Ziq
r;ZiqdJs:FgAla~>
ci=(@qu?`lr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zimr;ZimOoPLWr;Zim
r;ZimdJs:BgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(DpAb3kL]@GQL]@GQL]@GQL]@GQbl@bAgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(DpAb3kL]@GQL]@GQL]@GQL]@GQbl@bAgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(DpAb3kL]@GQL]@GQL]@GQL]@GQbl@bAgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
ci=(DpAb3kL]@GQL]@GQL]@GQL]@GQbl@bAgAla~>
ci=(@pAb3gL]@GML]@GML]@GML]@GMbl@b=gAla~>
irJuOrW)olqZ$WkpAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#
pON1GhZ*ZOgAla~>
irJuSrW)opqZ$WopAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'
pR(lchZ*ZSgAla~>
irJuOrW)olqZ$WkpAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#
pW39:hZ*ZOgAla~>
irBP`!;Q<hp](<hp](<hq"t*lq"Fagq"+RaYkN\GYc.X$YkN\GYaPOlq#19kYkN\GYb(mqq"4Xb
YkN\GYc%R#YkN\GYhoE\ptGe!~>
irBPd!;u`pqu?`pqu?`pr;6Npr:^0kr:C!e[.fsc[&F'([.fsc[$gspr;H]o[.fsc[%@<ur:L'f
[.fsc[&=!'[.fsc[,1i`r7_4%~>
irBP`!;Q<hp](<hp](<hq"t*lq"Fagq"+RaYkQ6:Yc.X$YkQ6:YaPOlq#19kYkQ6:Yb(mqq"4Xb
YkQ6:Yc%R#YkQ6:YhoE\ptGe!~>
i;ioQq#LHiqu?`lpAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#
pON1GhZ*ZOgAla~>
i;ioUq#LHmqu?`ppAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'
pR(lchZ*ZSgAla~>
i;ioQq#LHiqu?`lpAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#
pW39:hZ*ZOgAla~>
i;ioQqZ-WjqZ$WkpAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#
pON1GhZ*ZOgAla~>
i;ioUqZ-WnqZ$WopAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'
pR(lchZ*ZSgAla~>
i;ioQqZ-WjqZ$WkpAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#
pW39:hZ*ZOgAla~>
i;ioQquHclq#CEipAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#
pON1GhZ*ZOgAla~>
i;ioUquHcpq#CEmpAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'
pR(lchZ*ZSgAla~>
i;ioQquHclq#CEipAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#
pW39:hZ*ZOgAla~>
i;ioQr;clmrrE)oqu?`lpAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1G
VuZe#pON1GhZ*ZOgAla~>
i;ioUr;clqrrE)squ?`ppAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lc
VuZe'pR(lchZ*ZSgAla~>
i;ioQr;clmrrE)oqu?`lpAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:
VuZe#pW39:hZ*ZOgAla~>
iW/rPrW)ijqu?`lpAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#
pON1GhZ*ZOgAla~>
iW/rTrW)inqu?`ppAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'
pR(lchZ*ZSgAla~>
iW/rPrW)ijqu?`lpAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#
pW39:hZ*ZOgAla~>
ci=(@pAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#pON1GhZ*ZO
gAla~>
ci=(DpAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'pR(lchZ*ZS
gAla~>
ci=(@pAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#pW39:hZ*ZO
gAla~>
ci=(@pAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#pON1GhZ*ZO
gAla~>
ci=(DpAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'pR(lchZ*ZS
gAla~>
ci=(@pAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#pW39:hZ*ZO
gAla~>
ci=(@pAb3goDnfnpON1GW;un$pON1GRK*?_rW)l#pON1GT)\ldo`4oopON1GVuZe#pON1GhZ*ZO
gAla~>
ci=(DpAb3koDnfrpR(lcW;un(pR(lcRK*?crW)l'pR(lcT)\lho`4ospR(lcVuZe'pR(lchZ*ZS
gAla~>
ci=(@pAb3goDnfnpW39:W;un$pW39:RK*?_rW)l#pW39:T)\ldo`4oopW39:VuZe#pW39:hZ*ZO
gAla~>
ci=(@pAjg[r35pGr330qrNQ$Hr32L^r35pGr32@Zr35pGr33-prNQ$Hr35G\pAb3ggAla~>
ci=(DpAjg_r3Z3cr3WI$rNu<dr3Vdfr3Z3cr3VXbr3Z3cr3WF#rNu<dr3Y_dpAb3kgAla~>
ci=(@pAjg[r35q:r330qrNQ%;r32L^r35q:r32@Zr35q:r33-prNQ%;r35G\pAb3ggAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@g]7BLQiR0]KE2&IJH,`Oq"U0Us7k:J!;P:KJ,~>
ci=(Dg]7BPQiR0aKE2&MJH,`Or;;l]s8:RN!;tROJ,~>
ci=(@g]7BLQiR0]KE2&IJH,`Oq"U0Us7k:J!;P:KJ,~>
ci=(@h#RHLR/m6]K`M,IJH5]EQiR-\g&M-JgAla~>
ci=(Dh#RHPR/m6aK`M,MJH5]IQiR-`g&M-NgAla~>
ci=(@h#RHLR/m6]K`M,IJH5]EQiR-\g&M-JgAla~>
ci=(@jT,5Rr;clmT`G#cr;clmN<&nOr;clmM#dJKr;clmTE+obr;clmg&M-JgAla~>
ci=(DjT,5Vr;clqT`G#gr;clqN<&nSr;clqM#dJOr;clqTE+ofr;clqg&M-NgAla~>
ci=(@jT,5Rr;clmT`G#cr;clmN<&nOr;clmM#dJKr;clmTE+obr;clmg&M-JgAla~>
ci=(@joGGVq#LHiU&b5gq#LHiNWB+Sq#LHiM?*\Oq#LHiT`G,fq#LHig&M-JgAla~>
ci=(DjoGGZq#LHmU&b5kq#LHmNWB+Wq#LHmM?*\Sq#LHmT`G,jq#LHmg&M-NgAla~>
ci=(@joGGVq#LHiU&b5gq#LHiNWB+Sq#LHiM?*\Oq#LHiT`G,fq#LHig&M-JgAla~>
ci=(@jT,8SquHclT`G&dquHclN<&qPquHclM#dMLquHclTE+rcquHclg&M-JgAla~>
ci=(DjT,8WquHcpT`G&hquHcpN<&qTquHcpM#dMPquHcpTE+rgquHcpg&M-NgAla~>
ci=(@jT,8SquHclT`G&dquHclN<&qPquHclM#dMLquHclTE+rcquHclg&M-JgAla~>
ci=(@iW0#Rr;clmScJfcr;clmM?*\Or;clmL&h8Kr;clmSH/]br;clmg&M-JgAla~>
ci=(DiW0#Vr;clqScJfgr;clqM?*\Sr;clqL&h8Or;clqSH/]fr;clqg&M-NgAla~>
ci=(@iW0#Rr;clmScJfcr;clmM?*\Or;clmL&h8Kr;clmSH/]br;clmg&M-JgAla~>
ci=(@joG>SrW)ijU]C>frW)ijO9#4RrW)ijMu`eNrW)ijUB(5erW)ijg].?LgAla~>
ci=(DjoG>WrW)inU]C>jrW)inO9#4VrW)inMu`eRrW)inUB(5irW)ing].?PgAla~>
ci=(@joG>SrW)ijU]C>frW)ijO9#4RrW)ijMu`eNrW)ijUB(5erW)ijg].?LgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(DpAb3kJH2nS!;qBJYQ+\$M#[PRgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(@p]1<gJH2tUrqM$EZ2jn!M?!YOgAla~>
ci=(Dp]1<kJH2tUrqq<IZ2jn%M?!YSgAla~>
ci=(@p]1<gJH2tUrqM$EZ2jn!M?!YOgAla~>
ci=(@q#CQm!;HQhJH3%W"S_ul!;M*FZiC7(!;HQhMZ<bPgAla~>
ci=(Dq#CQq!;lipJH3%W"T/8t!;qBJZiC7,!;lipMZ<bTgAla~>
ci=(@q#CQm!;HQhJH3%W"S_ul!;M*FZiC7(!;HQhMZ<bPgAla~>
ci=(@q>^`p!!)co!;M*F[K$O,!!)co!;M*F[K$O,!!)co!;MKQ!;P:KJ,~>
ci=(Dq>^`t!!)os!;qBJ[K$O0!!)os!;qBJ[K$O0!!)os!;qcU!;tROJ,~>
ci=(@q>^`p!!)co!;M*F[K$O,!!)co!;M*F[K$O,!!)co!;MKQ!;P:KJ,~>
ci=(@qZ$WkrVurnrVurnJH31[!;QNn!;QNn!;M*F\,ZO(rVurnrVurnN;rtRgAla~>
ci=(DqZ$WorVurrrVurrJH31[!;ufr!;ufr!;qBJ\,ZO,rVurrrVurrN;rtVgAla~>
ci=(@qZ$WkrVurnrVurnJH31[!;QNn!;QNn!;M*F\,ZO(rVurnrVurnN;rtRgAla~>
ci=(@qu?`lr;Zimr;ZimJH37]!;QKm!;QKm!;M*F\c;a*r;Zimr;ZimNW9(SgAla~>
ci=(Dqu?`pr;Ziqr;ZiqJH37]!;ucq!;ucq!;qBJ\c;a.r;Ziqr;ZiqNW9(WgAla~>
ci=(@qu?`lr;Zimr;ZimJH37]!;QKm!;QKm!;M*F\c;a*r;Zimr;ZimNW9(SgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(DpAb3kJH2nS!;qBJYQ+\$M#[PRgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(DpAb3kJH2nS!;qBJYQ+\$M#[PRgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(DpAb3kJH2nS!;qBJYQ+\$M#[PRgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
ci=(DpAb3kJH2nS!;qBJYQ+\$M#[PRgAla~>
ci=(@pAb3gJH2nS!;M*FYQ+[uM#[PNgAla~>
irJuOrW)olqZ$WkpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:K
J,~>
irJuSrW)opqZ$WopAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tRO
J,~>
irJuOrW)olqZ$WkpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:K
J,~>
irBP`!;Q<hp](<hp](<hq"t*lq"Fagptu/MYjHu8Y^lfH!<'/"JF`d3JF*@2Y^lfG!<'.nJF`d<
JG6:X!!)fK!.Y~>
irBPd!;u`pqu?`pqu?`pr;6Npr:^0kr87SQ[-a7T["/5L!<';&R.C=KR-anJ["/5K!<':rR.C=T
R.mtt!!)rO!.Y~>
irBP`!;Q<hp](<hp](<hq"t*lq"Fagptu/MYjKO+Y^lfH!<'/"aR]E&aR'!%Y^lfG!<'.naR]E/
aS2pK!!)fK!.Y~>
i;ioQq#LHiqu?`lpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:K
J,~>
i;ioUq#LHmqu?`ppAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tRO
J,~>
i;ioQq#LHiqu?`lpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:K
J,~>
i;ioQqZ-WjqZ$WkpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:K
J,~>
i;ioUqZ-WnqZ$WopAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tRO
J,~>
i;ioQqZ-WjqZ$WkpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:K
J,~>
i;ioQq#LHiqu?`lpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:K
J,~>
i;ioUq#LHmqu?`ppAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tRO
J,~>
i;ioQq#LHiqu?`lpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:K
J,~>
i;ioQr;clmrrE)oqu?`lpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-
!;P:KJ,~>
i;ioUr;clqrrE)squ?`ppAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1
!;tROJ,~>
i;ioQr;clmrrE)oqu?`lpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-
!;P:KJ,~>
iW/rPr;cfkqZ$WkpAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:K
J,~>
iW/rTr;cfoqZ$WopAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tRO
J,~>
iW/rPr;cfkqZ$WkpAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:K
J,~>
ci=(@pAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:KJ,~>
ci=(DpAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tROJ,~>
ci=(@pAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:KJ,~>
ci=(@pAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:KJ,~>
ci=(DpAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tROJ,~>
ci=(@pAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:KJ,~>
ci=(@pAb3ghuN\Zm==r8JH5<BrNQ3Mo)S?3m/ZmbJH59ArNPmDo)SZ<pTV.-!;P:KJ,~>
ci=(DpAb3khuN\^m?mXTJH5<BrNuKio)S?Km/ZmfJH59ArNu0`o)SZTpU%F1!;tROJ,~>
ci=(@pAb3ghuN\ZmE#%+JH5<BrNQ4@o)S@&m/ZmbJH59ArNPn7o)S[/pTV.-!;P:KJ,~>
ci=(@pAj+Gr35R=pTT5Do_ABhr.+D6npp-&pTT5DoD&9go76H-qgeFF_YEj*!;P:KJ,~>
ci=(DpAj+Kr3YjYpU#MLo_eZpr0[*RnsJhBpU#MLoDJQoo9f.Iqj@,b_Yj-.!;tROJ,~>
ci=(@pAj+Gr35S0pTT5Do_ABhr5eL)o#U4npTT5DoD&9go>pOuqoJN9_YEj*!;P:KJ,~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@a8l88JH41"s7h-FYlOh!Q2gp[gAla~>
ci=(Da8l8<JH41"s87EJYlOh%Q2gp_gAla~>
ci=(@a8l88JH41"s7h-FYlOh!Q2gp[gAla~>
ci=(@aT2>8JH44#rqM$EZ2jn!Q2gp[gAla~>
ci=(DaT2><JH44#rqq<IZ2jn%Q2gp_gAla~>
ci=(@aT2>8JH44#rqM$EZ2jn!Q2gp[gAla~>
ci=(@d/a+>r;clmJH4L+r:p3js7h-F\cD['r;clmQ2gp[gAla~>
ci=(Dd/a+Br;clqJH4L+r;?Kns87EJ\cD[+r;clqQ2gp_gAla~>
ci=(@d/a+>r;clmJH4L+r:p3js7h-F\cD['r;clmQ2gp[gAla~>
ci=(@dK'=Bq#LHiJH4O,s7lBis7h-F])_m+q#LHiQ2gp[gAla~>
ci=(DdK'=Fq#LHmJH4O,s8;Zms87EJ])_m/q#LHmQ2gp_gAla~>
ci=(@dK'=Bq#LHiJH4O,s7lBis7h-F])_m+q#LHiQ2gp[gAla~>
ci=(@d/a.?quHclJH4L+rV69js7h-F\cD^(quHclQ2gp[gAla~>
ci=(Dd/a.CquHcpJH4L+rVZQns87EJ\cD^,quHcpQ2gp_gAla~>
ci=(@d/a.?quHclJH4L+rV69js7h-F\cD^(quHclQ2gp[gAla~>
ci=(@c2dn>r;clmJH4C(s7lNms7h-F[fHI'r;clmQ2gp[gAla~>
ci=(Dc2dnBr;clqJH4C(s8;fqs87EJ[fHI+r;clqQ2gp_gAla~>
ci=(@c2dn>r;clmJH4C(s7lNms7h-F[fHI'r;clmQ2gp[gAla~>
ci=(@dK'4?rW)ijJH4U.r:p6kqtP^B]`A!*rW)ijQiI-]gAla~>
ci=(DdK'4CrW)inJH4U.r;?Noqtu!F]`A!.rW)inQiI-agAla~>
ci=(@dK'4?rW)ijJH4U.r:p6kqtP^B]`A!*rW)ijQiI-]gAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@mJm7^gAq9KquHZir;clmq>gNirrDrkquH`krW)lk]`A*-dK':ApAk3fJH16$bl@b=gAla~>
ci=(DmJm7bgAq9OquHZmr;clqq>gNmrrDroquH`orW)lo]`A*1dK':EpAk3jJH16$bl@bAgAla~>
ci=(@mJm7^gAq9KquHZir;clmq>gNirrDrkquH`krW)lk]`A*-dK':ApAk3fJH16$bl@b=gAla~>
ci=(@mf<C_lN$t[oDnmcr;clmrW)unrrE&nqZ-TirW)unrrE)orW)olrrE)orW)un^B"9.d/a4A
p&P-fJH16$bl@b=gAla~>
ci=(Dmf<CclN$t_oDnmgr;clqrW)urrrE&rqZ-TmrW)urrrE)srW)oprrE)srW)ur^B"92d/a4E
p&P-jJH16$bl@bAgAla~>
ci=(@mf<C_lN$t[oDnmcr;clmrW)unrrE&nqZ-TirW)unrrE)orW)olrrE)orW)un^B"9.d/a4A
p&P-fJH16$bl@b=gAla~>
ciF(?rrE)orrE)orrE)orW)lkrW)olrW)unrW)unrW)uno)Sgcr;clmrrE&nrW)unquHcl!W`#j
rW)unrrE)orrE)o#QXYp!!)fh!!*#npAk0erW)unrW)un!!)rlr;cfkrW)un!!*#nrrDrko`5$e
m/[1]rrE)orW)lkrW)olq>gQjp&P-fquHclrrE)oJH16$fDkpHgAla~>
ciF(CrrE)srrE)srrE)srW)lorW)oprW)urrW)urrW)uro)Sggr;clqrrE&rrW)urquHcp!W`/r
rW)urrrE)srrE)s#QXf#!!)rp!!*#rpAk0irW)urrW)ur!!)rpr;cforW)ur!!*#rrrDroo`5$i
m/[1arrE)srW)lorW)opq>gQnp&P-jquHcprrE)sJH16$fDkpLgAla~>
ciF(?rrE)orrE)orrE)orW)lkrW)olrW)unrW)unrW)uno)Sgcr;clmrrE&nrW)unquHcl!W`#j
rW)unrrE)orrE)o#QXYp!!)fh!!*#npAk0erW)unrW)un!!)rlr;cfkrW)un!!*#nrrDrko`5$e
m/[1]rrE)orW)lkrW)olq>gQjp&P-fquHclrrE)oJH16$fDkpHgAla~>
ciEn:"p"Gn!!)fhr;clmr;clmrrE)orW)un!W`#jm/[1]r;clm!!)umrW)unr;clmrrE)orW)lk
rrE)orrE)orrE)o!!)ump]1?hrrE)orrE)o'*.e-q"Ojap](<hp](<hp](<hq#19mp]:Hjq"Ojd
q#(3mq!A(]q#:?oq#:?oq"k'kq#:?oq#19kq"=^cq#:?oq#:?opjiEr!8%8OptGe!~>
ciEn>"p"T!!!)rpr;clqr;clqrrE)srW)ur!W`/rm/[1ar;clq!!)uqrW)urr;clqrrE)srW)lo
rrE)srrE)srrE)s!!)uqp]1?lrrE)srrE)s'*.q1r;6Qmqu?`pqu?`pqu?`pr;H]qquQlrr:g9h
r;?Wqr9XLar;Qcsr;Qcsr;-Kor;Qcsr;H]or:U-gr;Qcsr;Qcsr.+j!!8%8Or7_4%~>
ciEn:"p"Gn!!)fhr;clmr;clmrrE)orW)un!W`#jm/[1]r;clm!!)umrW)unr;clmrrE)orW)lk
rrE)orrE)orrE)o!!)ump]1?hrrE)orrE)o'*.e-q"Ojap](<hp](<hp](<hq#19mp]:Hjq"Ojd
q#(3mq!A(]q#:?oq#:?oq"k'kq#:?oq#19kq"=^cq#:?oq#:?opjiEr!8%8OptGe!~>
ciEn:"p"Gn!!)fhr;clmr;c`ir;cilli@(\r;cfk!W`#jrW)unr;c]hrrE)orrE)o!!)lj!!)um
!W`#jp]1?hrrE)orrDoj#QXYp!!)fh!!)okrW)unrrE)omK!:^m/[1]rrE)orW)olrW)ijrrE)o
rrE)op&P-frrE)o"p"Gn!!)fhJH16$fDkpHgAla~>
ciEn>"p"T!!!)rpr;clqr;c`mr;cipli@(`r;cfo!W`/rrW)urr;c]lrrE)srrE)s!!)ln!!)uq
!W`/rp]1?lrrE)srrDon#QXf#!!)rp!!)oorW)urrrE)smK!:bm/[1arrE)srW)oprW)inrrE)s
rrE)sp&P-jrrE)s"p"T!!!)rpJH16$fDkpLgAla~>
ciEn:"p"Gn!!)fhr;clmr;c`ir;cilli@(\r;cfk!W`#jrW)unr;c]hrrE)orrE)o!!)lj!!)um
!W`#jp]1?hrrE)orrDoj#QXYp!!)fh!!)okrW)unrrE)omK!:^m/[1]rrE)orW)olrW)ijrrE)o
rrE)op&P-frrE)o"p"Gn!!)fhJH16$fDkpHgAla~>
ciF(?$NTr%q"Ojap](<hq#(3mp]UZm!!)fhq>gQj!W`#jr;clmo)Sgcr;cilrrE)orW)unq#LHi
rW)unrrE)oquHclrrE&nrrE)op]1?hrrE)orrDoj$39kr!!)fh!!)fhq>gQjquHWho`5$eqZ-Zk
o`5$errE)oqZ-ZkrrE)oqZ-ZkrrE)op&P-frrE)orrDulJH16$fDkpHgAla~>
ciF(C$NU))r;6Qmqu?`pr;?Wqqum)u!!)rpq>gQn!W`/rr;clqo)Sggr;ciprrE)srW)urq#LHm
rW)urrrE)squHcprrE&rrrE)sp]1?lrrE)srrDon$3:#%!!)rp!!)rpq>gQnquHWlo`5$iqZ-Zo
o`5$irrE)sqZ-ZorrE)sqZ-ZorrE)sp&P-jrrE)srrDupJH16$fDkpLgAla~>
ciF(?$NTr%q"Ojap](<hq#(3mp]UZm!!)fhq>gQj!W`#jr;clmo)Sgcr;cilrrE)orW)unq#LHi
rW)unrrE)oquHclrrE&nrrE)op]1?hrrE)orrDoj$39kr!!)fh!!)fhq>gQjquHWho`5$eqZ-Zk
o`5$errE)oqZ-ZkrrE)oqZ-ZkrrE)op&P-frrE)orrDulJH16$fDkpHgAla~>
ciF(?rW)unrrE&n!W`#jr;clmr;cfkrW)unrW)unrW)uno`4marW)lkrrDrkquH]j!!)okquH]j
rrDulp&P'dr;clm$39kr!!)fh!!)fhrW)olrW)olm/[%Yr;clmoDnmc!s&,k!;uWj!<)]k!<2`p
!;Q?a!<;fo!<2cj!<;hF!.b.&!!)fK!.Y~>
ciF(CrW)urrrE&r!W`/rr;clqr;cforW)urrW)urrW)uro`4merW)lorrDroquH]n!!)ooquH]n
rrDupp&P'hr;clq$3:#%!!)rp!!)rprW)oprW)opm/[%]r;clqoDnmg!s&8s!;ucn!<)io!<2lt
!;uci!<;rs!<2on!<;tJ!.b.&!!)rO!.Y~>
ciF(?rW)unrrE&n!W`#jr;clmr;cfkrW)unrW)unrW)uno`4marW)lkrrDrkquH]j!!)okquH]j
rrDulp&P'dr;clm$39kr!!)fh!!)fhrW)olrW)olm/[%Yr;clmoDnmc!s&,k!;uWj!<)]k!<2`p
!;Q?a!<;fo!<2cj!<;hF!.b.&!!)fK!.Y~>
ci=(@JH3aks7jM4r:kgCJH4:%!;P:KJ,~>
ci=(DJH3aks89e8r;;*GJH4:%!;tROJ,~>
ci=(@JH3aks7jM4r:kgCJH4:%!;P:KJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmr;c`irrDrkrW)olr;cfkj8f5Tq>gNio`5!d])Vj+oDnjb
rW)ijrW)olJH1f4!;P:KJ,~>
ci=(DbQ%Y@m/[.`l2^k^quHZmr;clqr;c`mrrDrorW)opr;cfoj8f5Xq>gNmo`5!h])Vj/oDnjf
rW)inrW)opJH1f4!;tROJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmr;c`irrDrkrW)olr;cfkj8f5Tq>gNio`5!d])Vj+oDnjb
rW)ijrW)olJH1f4!;P:KJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nr;clmq>gQjrrE)o%KQ;!!!)fh!!)fh!!)fh
gAq9Kp&P-f\cDd*o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(DblIeAli@(`q>gQnoDnmgr;clqrW)urrrE&rr;clqq>gQnrrE)s%KQG)!!)rp!!)rp!!)rp
gAq9Op&P-j\cDd.o`5$irrE)srrE)srrE)srrE)srrE)sJH1i5!;tROJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nr;clmq>gQjrrE)o%KQ;!!!)fh!!)fh!!)fh
gAq9Kp&P-f\cDd*o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;ccjr;clmrrE)o%KQ;!
!!)fh!!)fh!!)fhmf<C_!!*#nrW)rmq#LHirrDrkrrE)olN$t[!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkrrE)orrE)oJH1i5!;P:KJ,~>
ci=(Dc2de?rW)opr;ccnrW)urrrE)srW)uro)Sggr;clqrrE&rrW)urr;ccnr;clqrrE)s%KQG)
!!)rp!!)rp!!)rpmf<Cc!!*#rrW)rqq#LHmrrDrorrE)slN$t_!!*#rrrE)s!!*#rrW)opr;cfo
rW)urrrE)srrE)s!!*#rrW)lorrDrorrE)srrE)sqZ-ZorrE)srrE)sJH1i5!;tROJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;ccjr;clmrrE)o%KQ;!
!!)fh!!)fh!!)fhmf<C_!!*#nrW)rmq#LHirrDrkrrE)olN$t[!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkrrE)orrE)oJH1i5!;P:KJ,~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unq#LHirW)lkrW)olr;cfkm/[1]
rrE)orW)unquHZipAk-dm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io!<;in
!<;id!<)]i!<;im!<)\D!0I6]ptGe!~>
ci=(DblIeAq#LHmrrE)sq>gQn!W`/rm/[1ar;clq!!)uqrW)urq#LHmrW)lorW)opr;cfom/[1a
rrE)srW)urquHZmpAk-hm/[1arrE)srrE&r'*.t.!;u`p!;u`p!;u`p!;u`p!;cWn!<;us!<;ur
!<;uh!<)im!<;uq!<)hH!0I6]r7_4%~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unq#LHirW)lkrW)olr;cfkm/[1]
rrE)orW)unquHZipAk-dm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io!<;in
!<;id!<)]i!<;im!<)\D!0I6]ptGe!~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unq#LHirW)unrrE)o%KQ;!!!)fh!!)fh
!!)fhmK!:^rrE)orW)unr;clmrrE)opAk6grrE)omK!:^rrE)orrE)orrE)o!!)okrrDrkrrDoj
rrE)orrE)orW)uno`5$errE)or;clmr;clmrrE)oJH1i5!;P:KJ,~>
ci=(DblIeAquHZmrW)opr;cfoli@(`r;cfo!W`/rrW)urq#LHmrW)urrrE)s%KQG)!!)rp!!)rp
!!)rpmK!:brrE)srW)urr;clqrrE)spAk6krrE)smK!:brrE)srrE)srrE)s!!)oorrDrorrDon
rrE)srrE)srW)uro`5$irrE)sr;clqr;clqrrE)sJH1i5!;tROJ,~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unq#LHirW)unrrE)o%KQ;!!!)fh!!)fh
!!)fhmK!:^rrE)orW)unr;clmrrE)opAk6grrE)omK!:^rrE)orrE)orrE)o!!)okrrDrkrrDoj
rrE)orrE)orW)uno`5$errE)or;clmr;clmrrE)oJH1i5!;P:KJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;g(!;Q<h!;Q<h!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id
!;uWk!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okrrE)orrE)or;clmr;clmrrE)o
JH1i5!;P:KJ,~>
ci=(DblIeA#lsl'!;u`p!;ucl!<;ur!<;ru!;ucn!<;ug!<;uq!<2or!<;ur!<;uq!<;us!<;ur
!<;us!<;s,!;u`p!;u`p!;u`p!;ucn!<;uh!;ucn!<;uq!<;us!<;us!;l]o!<;us!<;uq!<;uh
!;uco!<;up!<;uo!<;uo!<;s$!;lipqu?`pr;?WqquZrs!!)oorrE)srrE)sr;clqr;clqrrE)s
JH1i5!;tROJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;g(!;Q<h!;Q<h!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id
!;uWk!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okrrE)orrE)or;clmr;clmrrE)o
JH1i5!;P:KJ,~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQj!<)]k!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<)]j!<;il!<)\D!0I6]ptGe!~>
ci=(DbQ.\@r;cip!s&8s!;uco!<2or!<;ur!<;ui!;l]n!;ucp!;l]n!<)ip!;l]n!<)io!<)in
!<;uh!<;uo!<)io!<2lt!;uch!<)in!<;uh!<;up!<)in!<)io!<)ip!<;ur!<;us!<;um!<;ui
!<)in!<;up!<)hH!0I6]r7_4%~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQj!<)]k!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<)]j!<;il!<)\D!0I6]ptGe!~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(DJH4g4s8;KhrVYFNs8;KhrVYIOrVV3HJH4m6!;tROJ,~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmqZ-WjrW)ijrrDrkrW)olj8f5Tq>gNipAk*c]Dqs,o`4ma
rW)olr;ccjJH1i5!;P:KJ,~>
ci=(DbQ%Y@m/[.`l2^k^quHZmr;clqqZ-WnrW)inrrDrorW)opj8f5Xq>gNmpAk*g]Dqs0o`4me
rW)opr;ccnJH1i5!;tROJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmqZ-WjrW)ijrrDrkrW)olj8f5Tq>gNipAk*c]Dqs,o`4ma
rW)olr;ccjJH1i5!;P:KJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nquHclqZ-ZkrrE)orrE)orrE)o"p"Gn!!)fh
gAq9KpAk6grrE)o]`A*-o`5$errE)orrE)orrE)orrE)orW)unJH1l6!;P:KJ,~>
ci=(DblIeAli@(`q>gQnoDnmgr;clqrW)urrrE&rquHcpqZ-ZorrE)srrE)srrE)s"p"T!!!)rp
gAq9OpAk6krrE)s]`A*1o`5$irrE)srrE)srrE)srrE)srW)urJH1l6!;tROJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nquHclqZ-ZkrrE)orrE)orrE)o"p"Gn!!)fh
gAq9KpAk6grrE)o]`A*-o`5$errE)orrE)orrE)orrE)orW)unJH1l6!;P:KJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;clmq>gQjrrE)orrE)o
rrE)o"p"Gn!!)fhmf<C_!!*#nrW)rmq#LHirrDrkqZ-Zkmf<C_!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkqZ-ZkrrE)orrE)orrE)orrE&nJH1l6!;P:KJ,~>
ci=(Dc2de?rW)opr;ccnrW)urrrE)srW)uro)Sggr;clqrrE&rrW)urr;clqq>gQnrrE)srrE)s
rrE)s"p"T!!!)rpmf<Cc!!*#rrW)rqq#LHmrrDroqZ-Zomf<Cc!!*#rrrE)s!!*#rrW)opr;cfo
rW)urrrE)srrE)s!!*#rrW)lorrDroqZ-ZorrE)srrE)srrE)srrE&rJH1l6!;tROJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;clmq>gQjrrE)orrE)o
rrE)o"p"Gn!!)fhmf<C_!!*#nrW)rmq#LHirrDrkqZ-Zkmf<C_!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkqZ-ZkrrE)orrE)orrE)orrE&nJH1l6!;P:KJ,~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;ccjr;ccjrW)lkrW)olm/[1]
rrE)orW)unquHZioDnpdm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io!<;in
!<;ib!<;im!;uWl!<;fo!<)\D!0[B_ptGe!~>
ci=(DblIeAq#LHmrrE)sq>gQn!W`/rm/[1ar;clq!!)uqrW)urr;ccnr;ccnrW)lorW)opm/[1a
rrE)srW)urquHZmoDnphm/[1arrE)srrE&r'*.t.!;u`p!;u`p!;u`p!;u`p!;cWn!<;us!<;ur
!<;uf!<;uq!;ucp!<;rs!<)hH!0[B_r7_4%~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;ccjr;ccjrW)lkrW)olm/[1]
rrE)orW)unquHZioDnpdm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io!<;in
!<;ib!<;im!;uWl!<;fo!<)\D!0[B_ptGe!~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;clmrrE)orW)unrrE)orrE)orrE)o
"p"Gn!!)fhmK!:^rrE)orW)unr;clmrrE)oo`5$eli@(\rrE)orrE)orrE)o!!)okrrDrkrrDoj
rrE)orrE)orW)uno)Sgcq#LHirrE#m!W`#jJH1l6!;P:KJ,~>
ci=(DblIeAquHZmrW)opr;cfoli@(`r;cfo!W`/rrW)urr;clqrrE)srW)urrrE)srrE)srrE)s
"p"T!!!)rpmK!:brrE)srW)urr;clqrrE)so`5$ili@(`rrE)srrE)srrE)s!!)oorrDrorrDon
rrE)srrE)srW)uro)Sggq#LHmrrE#q!W`/rJH1l6!;tROJ,~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;clmrrE)orW)unrrE)orrE)orrE)o
"p"Gn!!)fhmK!:^rrE)orW)unr;clmrrE)oo`5$eli@(\rrE)orrE)orrE)o!!)okrrDrkrrDoj
rrE)orrE)orW)uno)Sgcq#LHirrE#m!W`#jJH1l6!;P:KJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;io!<;io!<;fu!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQi!<;ik!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okr;clmq>gQjrW)rmrrE)oJH1l6!;P:K
J,~>
ci=(DblIeA#lsl'!;u`p!;ucl!<;ur!<;ru!;ucn!<;ug!<;uq!<2or!<;ur!<;uq!<;us!<;ur
!<;us!<;us!<;us!<;s$!;u`p!;ucn!<;uh!;ucn!<;uq!<;us!<;us!;l]m!<;uo!<;uh!;uco
!<;up!<;uo!<;uo!<;s$!;lipqu?`pr;?WqquZrs!!)oor;clqq>gQnrW)rqrrE)sJH1l6!;tRO
J,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;io!<;io!<;fu!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQi!<;ik!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okr;clmq>gQjrW)rmrrE)oJH1l6!;P:K
J,~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQk!;lQj!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?_!<;ik!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;id
!<;il!<2ck!;uVC!0R<^ptGe!~>
ci=(DbQ.\@r;cip!s&8s!;uco!<2or!<;ur!<;ui!;l]n!;ucp!;l]n!<)ip!;l]o!;l]n!<)in
!<;uh!<;uo!<)io!<2lt!;ucg!<;uo!<;uh!<;up!<)in!<)io!<)ip!<;ur!<;us!<;um!<;uh
!<;up!<2oo!;ubG!0R<^r7_4%~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQk!;lQj!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?_!<;ik!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;id
!<;il!<2ck!;uVC!0R<^ptGe!~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(DJH4g4s8;KhrVYFNs8;KhrVYIOrVV3HJH4m6!;tROJ,~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(@blIe=quH`kquH`knc/[bm/[.\JH16$JH3^j!;P:KJ,~>
ci=(DblIeAquH`oquH`onc/[fm/[.`JH16$JH3^j!;tROJ,~>
ci=(@blIe=quH`kquH`knc/[bm/[.\JH16$JH3^j!;P:KJ,~>
ci=(@c2dh<quHclqZ-Zko)Sgcli@(\nc8^bJH16$JH4=&!;P:KJ,~>
ci=(Dc2dh@quHcpqZ-Zoo)Sggli@(`nc8^fJH16$JH4=&!;tROJ,~>
ci=(@c2dh<quHclqZ-Zko)Sgcli@(\nc8^bJH16$JH4=&!;P:KJ,~>
ci=(@cN+"?rrE)or;clmqZ-ZkoDngarW)olr;ccjrW)unrrE)orrDulr;clmJH16$JH4=&!;P:K
J,~>
ci=(DcN+"CrrE)sr;clqqZ-ZooDngerW)opr;ccnrW)urrrE)srrDupr;clqJH16$JH4=&!;tRO
J,~>
ci=(@cN+"?rrE)or;clmqZ-ZkoDngarW)olr;ccjrW)unrrE)orrDulr;clmJH16$JH4=&!;P:K
J,~>
ci=(@cN+"?rrE)or;clmqZ-Zko)Sgcq#LHirrE)oq>gQj"p"Gn!!)fhJH16$JH3sq!;P:KJ,~>
ci=(DcN+"CrrE)sr;clqqZ-Zoo)Sggq#LHmrrE)sq>gQn"p"T!!!)rpJH16$JH3sq!;tROJ,~>
ci=(@cN+"?rrE)or;clmqZ-Zko)Sgcq#LHirrE)oq>gQj"p"Gn!!)fhJH16$JH3sq!;P:KJ,~>
ci=(@cN*k;r;clmqZ-Zko)SgcquHZirW)olr;cfkr;cfkJH16$JH4't!;P:KJ,~>
ci=(DcN*k?r;clqqZ-Zoo)SggquHZmrW)opr;cfor;cfoJH16$JH4't!;tROJ,~>
ci=(@cN*k;r;clmqZ-Zko)SgcquHZirW)olr;cfkr;cfkJH16$JH4't!;P:KJ,~>
ci=(@cN+"?rrE)or;clmqZ-Zko)Sgc#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?d!<;im!<;hF!.b-$
!8%8OptGe!~>
ci=(DcN+"CrrE)sr;clqqZ-Zoo)Sgg#lsl'!;u`p!;ucl!<;ur!<;ru!;ucl!<;uq!<;tJ!.b-$
!8%8Or7_4%~>
ci=(@cN+"?rrE)or;clmqZ-Zko)Sgc#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?d!<;im!<;hF!.b-$
!8%8OptGe!~>
ci=(@cN+"?rrE)orW)olr;cfko)Sgcr;cil!s&,k!;uWk!<2cn!<;fo!;uWi!<;hF!.b-$!8%8O
ptGe!~>
ci=(DcN+"CrrE)srW)opr;cfoo)Sggr;cip!s&8s!;uco!<2or!<;rs!;ucm!<;tJ!.b-$!8%8O
r7_4%~>
ci=(@cN+"?rrE)orW)olr;cfko)Sgcr;cil!s&,k!;uWk!<2cn!<;fo!;uWi!<;hF!.b-$!8%8O
ptGe!~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmq>gNirrDrkrrDrkrW)olj8f5Tq>gNipAk*c]Dqs,oDnjb
r;cfkrW)ijJH1i5!;P:KJ,~>
ci=(DbQ%Y@m/[.`l2^k^quHZmr;clqq>gNmrrDrorrDrorW)opj8f5Xq>gNmpAk*g]Dqs0oDnjf
r;cforW)inJH1i5!;tROJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmq>gNirrDrkrrDrkrW)olj8f5Tq>gNipAk*c]Dqs,oDnjb
r;cfkrW)ijJH1i5!;P:KJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nqZ-TirW)unrrE)o!W`#jqZ-ZkrrE)ogAq9K
pAk6g\H)[)o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(DblIeAli@(`q>gQnoDnmgr;clqrW)urrrE&rqZ-TmrW)urrrE)s!W`/rqZ-ZorrE)sgAq9O
pAk6k\H)[-o`5$irrE)srrE)srrE)srrE)srrE)sJH1i5!;tROJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nqZ-TirW)unrrE)o!W`#jqZ-ZkrrE)ogAq9K
pAk6g\H)[)o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unquHcl!W`#jrW)unrrE)o
!!)rlrW)unrrE)omf<C_!!*#nrW)rmq#LHirrDrkrrDulmK!:^!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkqZ-ZkJH1i5!;P:KJ,~>
ci=(Dc2de?rW)opr;ccnrW)urrrE)srW)uro)Sggr;clqrrE&rrW)urquHcp!W`/rrW)urrrE)s
!!)rprW)urrrE)smf<Cc!!*#rrW)rqq#LHmrrDrorrDupmK!:b!!*#rrrE)s!!*#rrW)opr;cfo
rW)urrrE)srrE)s!!*#rrW)lorrDrorrE)srrE)sqZ-ZoqZ-ZoJH1i5!;tROJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unquHcl!W`#jrW)unrrE)o
!!)rlrW)unrrE)omf<C_!!*#nrW)rmq#LHirrDrkrrDulmK!:^!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkqZ-ZkJH1i5!;P:KJ,~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;clmrrE)orW)lkqZ-ZkrW)ol
m/[1]rrE)orW)unquHZio)SgcmK!:^rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io
!<;in!<;id!;uWj!<2cj!<;hF!0I6]ptGe!~>
ci=(DblIeAq#LHmrrE)sq>gQn!W`/rm/[1ar;clq!!)uqrW)urr;clqrrE)srW)loqZ-ZorW)op
m/[1arrE)srW)urquHZmo)SggmK!:brrE)srrE&r'*.t.!;u`p!;u`p!;u`p!;u`p!;cWn!<;us
!<;ur!<;uh!;ucn!<2on!<;tJ!0I6]r7_4%~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;clmrrE)orW)lkqZ-ZkrW)ol
m/[1]rrE)orW)unquHZio)SgcmK!:^rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io
!<;in!<;id!;uWj!<2cj!<;hF!0I6]ptGe!~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;c]hrrE)orrE)oquHclrrE)orrE)o
mK!:^rrE)orW)unr;clmrrE)oo)SgcmK!:^rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)orrE)o
rW)unnGrUarW)unq>gQjJH1c3!;P:KJ,~>
ci=(DblIeAquHZmrW)opr;cfoli@(`r;cfo!W`/rrW)urr;c]lrrE)srrE)squHcprrE)srrE)s
mK!:brrE)srW)urr;clqrrE)so)SggmK!:brrE)srrE)srrE)s!!)oorrDrorrDonrrE)srrE)s
rW)urnGrUerW)urq>gQnJH1c3!;tROJ,~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;c]hrrE)orrE)oquHclrrE)orrE)o
mK!:^rrE)orW)unr;clmrrE)oo)SgcmK!:^rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)orrE)o
rW)unnGrUarW)unq>gQjJH1c3!;P:KJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;ii!<;in!<;io
!<;g(!;Q<h!;Q<h!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okquHclrW)unrrE)or;clmJH1c3!;P:K
J,~>
ci=(DblIeA#lsl'!;u`p!;ucl!<;ur!<;ru!;ucn!<;ug!<;uq!<2or!<;ur!<;um!<;ur!<;us
!<;s,!;u`p!;u`p!;u`p!;ucn!<;uh!;ucn!<;uq!<;us!<;us!;l]o!<;us!<;uq!<;uh!;uco
!<;up!<;uo!<;uo!<;s$!;lipqu?`pr;?WqquZrs!!)ooquHcprW)urrrE)sr;clqJH1c3!;tRO
J,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;ii!<;in!<;io
!<;g(!;Q<h!;Q<h!;Q<h!;Q?f!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okquHclrW)unrrE)or;clmJH1c3!;P:K
J,~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQh!<)Zm!;lQj!<)]k!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<2cl!;lQi!<;hF!0@0\ptGe!~>
ci=(DbQ.\@r;cip!s&8s!;uco!<2or!<;ur!<;ui!;l]n!;ucp!;l]l!<)fq!;l]n!<)io!<)in
!<;uh!<;uo!<)io!<2lt!;uch!<)in!<;uh!<;up!<)in!<)io!<)ip!<;ur!<;us!<;um!<;ui
!<2op!;l]m!<;tJ!0@0\r7_4%~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQh!<)Zm!;lQj!<)]k!<)]j
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<2cl!;lQi!<;hF!0@0\ptGe!~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(DJH4g4s8;KhrVYFNs8;KhrVYIOrVV3HJH4m6!;tROJ,~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmr;c`irrDrkrrDrkrW)lkjT,>Uq>gNio`5!d])Vj+oDnjb
rW)ijrW)olJH1f4!;P:KJ,~>
ci=(DbQ%Y@m/[.`l2^k^quHZmr;clqr;c`mrrDrorrDrorW)lojT,>Yq>gNmo`5!h])Vj/oDnjf
rW)inrW)opJH1f4!;tROJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmr;c`irrDrkrrDrkrW)lkjT,>Uq>gNio`5!d])Vj+oDnjb
rW)ijrW)olJH1f4!;P:KJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nr;clmq>gQjrrE)o$39kr!!)fh!!)fhrW)un
g]7BLp&P-f\cDd*o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(DblIeAli@(`q>gQnoDnmgr;clqrW)urrrE&rr;clqq>gQnrrE)s$3:#%!!)rp!!)rprW)ur
g]7BPp&P-j\cDd.o`5$irrE)srrE)srrE)srrE)srrE)sJH1i5!;tROJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nr;clmq>gQjrrE)o$39kr!!)fh!!)fhrW)un
g]7BLp&P-f\cDd*o`5$errE)orrE)orrE)orrE)orrE)oJH1i5!;P:KJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;ccjr;clmrrE)oquHcl
rrE)orrE&nn,WL`!!*#nrW)rmq#LHirrDrkrrE)olN$t[!!*#nrrE)o!!*#nrW)olr;cfkrW)un
rrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkrrE)orrE)oJH1i5!;P:KJ,~>
ci=(Dc2de?rW)opr;ccnrW)urrrE)srW)uro)Sggr;clqrrE&rrW)urr;ccnr;clqrrE)squHcp
rrE)srrE&rn,WLd!!*#rrW)rqq#LHmrrDrorrE)slN$t_!!*#rrrE)s!!*#rrW)opr;cforW)ur
rrE)srrE)s!!*#rrW)lorrDrorrE)srrE)sqZ-ZorrE)srrE)sJH1i5!;tROJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;ccjr;clmrrE)oquHcl
rrE)orrE&nn,WL`!!*#nrW)rmq#LHirrDrkrrE)olN$t[!!*#nrrE)o!!*#nrW)olr;cfkrW)un
rrE)orrE)o!!*#nrW)lkrrDrkrrE)orrE)oqZ-ZkrrE)orrE)oJH1i5!;P:KJ,~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unq#LHirW)lkquHclrW)un!!)um
mf<C_rrE)orW)unquHZipAk-dm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io
!<;in!<;id!<)]i!<;im!<)\D!0I6]ptGe!~>
ci=(DblIeAq#LHmrrE)sq>gQn!W`/rm/[1ar;clq!!)uqrW)urq#LHmrW)loquHcprW)ur!!)uq
mf<CcrrE)srW)urquHZmpAk-hm/[1arrE)srrE&r'*.t.!;u`p!;u`p!;u`p!;u`p!;cWn!<;us
!<;ur!<;uh!<)im!<;uq!<)hH!0I6]r7_4%~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unq#LHirW)lkquHclrW)un!!)um
mf<C_rrE)orW)unquHZipAk-dm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj!<;io
!<;in!<;id!<)]i!<;im!<)\D!0I6]ptGe!~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unq#LHirW)unrrE)orW)unr;cfk!W`#j
mf<C_rrE)orW)unr;clmrrE)opAk6grrE)omK!:^rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)o
rrE)orW)uno`5$errE)or;clmr;clmrrE)oJH1i5!;P:KJ,~>
ci=(DblIeAquHZmrW)opr;cfoli@(`r;cfo!W`/rrW)urq#LHmrW)urrrE)srW)urr;cfo!W`/r
mf<CcrrE)srW)urr;clqrrE)spAk6krrE)smK!:brrE)srrE)srrE)s!!)oorrDrorrDonrrE)s
rrE)srW)uro`5$irrE)sr;clqr;clqrrE)sJH1i5!;tROJ,~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unq#LHirW)unrrE)orW)unr;cfk!W`#j
mf<C_rrE)orW)unr;clmrrE)opAk6grrE)omK!:^rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)o
rrE)orW)uno`5$errE)or;clmr;clmrrE)oJH1i5!;P:KJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;in!<;im!<2cn!<;in!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okrrE)orrE)or;clmr;clmrrE)oJH1i5
!;P:KJ,~>
ci=(DblIeA#lsl'!;u`p!;ucl!<;ur!<;ru!;ucn!<;ug!<;uq!<2or!<;ur!<;uq!<;us!<;ur
!<;us!<;ur!<;uq!<2or!<;ur!<;uh!;ucn!<;uq!<;us!<;us!;l]o!<;us!<;uq!<;uh!;uco
!<;up!<;uo!<;uo!<;s$!;lipqu?`pr;?WqquZrs!!)oorrE)srrE)sr;clqr;clqrrE)sJH1i5
!;tROJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;in!<;im!<2cn!<;in!<;id!;uWj!<;im!<;io!<;io!;lQk!<;io!<;im!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okrrE)orrE)or;clmr;clmrrE)oJH1i5
!;P:KJ,~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQi!<;il!;uWj
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<)]j!<;il!<)\D!0I6]ptGe!~>
ci=(DbQ.\@r;cip!s&8s!;uco!<2or!<;ur!<;ui!;l]n!;ucp!;l]n!<)ip!;l]m!<;up!;ucn
!<;uh!<;uo!<)io!<2lt!;uch!<)in!<;uh!<;up!<)in!<)io!<)ip!<;ur!<;us!<;um!<;ui
!<)in!<;up!<)hH!0I6]r7_4%~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQi!<;il!;uWj
!<;id!<;ik!<)]k!<2`p!;Q?`!<)]j!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii!<;ie
!<)]j!<;il!<)\D!0I6]ptGe!~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(DJH4g4s8;KhrVYFNs8;KhrVYIOrVV3HJH4m6!;tROJ,~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmqZ-WjrW)ijr;clmquHZijT,>Uq>gNipAk*c]Dqs,o`4ma
rW)olr;ccjJH1i5!;P:KJ,~>
ci=(DbQ%Y@m/[.`l2^k^quHZmr;clqqZ-WnrW)inr;clqquHZmjT,>Yq>gNmpAk*g]Dqs0o`4me
rW)opr;ccnJH1i5!;tROJ,~>
ci=(@bQ%Y<m/[.\l2^kZquHZir;clmqZ-WjrW)ijr;clmquHZijT,>Uq>gNipAk*c]Dqs,o`4ma
rW)olr;ccjJH1i5!;P:KJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nquHclqZ-ZkrrE)orrE#mrW)unrW)ung]7BL
pAk6grrE)o]`A*-o`5$errE)orrE)orrE)orrE)orW)unJH1l6!;P:KJ,~>
ci=(DblIeAli@(`q>gQnoDnmgr;clqrW)urrrE&rquHcpqZ-ZorrE)srrE#qrW)urrW)urg]7BP
pAk6krrE)s]`A*1o`5$irrE)srrE)srrE)srrE)srW)urJH1l6!;tROJ,~>
ci=(@blIe=li@(\q>gQjoDnmcr;clmrW)unrrE&nquHclqZ-ZkrrE)orrE#mrW)unrW)ung]7BL
pAk6grrE)o]`A*-o`5$errE)orrE)orrE)orrE)orW)unJH1l6!;P:KJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;clmq>gQjrrE)o$ip(t
!!)fh!!)fh!!*#nn,WL`!!*#nrW)rmq#LHirrDrkqZ-Zkmf<C_!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkqZ-ZkrrE)orrE)orrE)orrE&nJH1l6!;P:KJ,~>
ci=(Dc2de?rW)opr;ccnrW)urrrE)srW)uro)Sggr;clqrrE&rrW)urr;clqq>gQnrrE)s$ip5'
!!)rp!!)rp!!*#rn,WLd!!*#rrW)rqq#LHmrrDroqZ-Zomf<Cc!!*#rrrE)s!!*#rrW)opr;cfo
rW)urrrE)srrE)s!!*#rrW)lorrDroqZ-ZorrE)srrE)srrE)srrE&rJH1l6!;tROJ,~>
ci=(@c2de;rW)olr;ccjrW)unrrE)orW)uno)Sgcr;clmrrE&nrW)unr;clmq>gQjrrE)o$ip(t
!!)fh!!)fh!!*#nn,WL`!!*#nrW)rmq#LHirrDrkqZ-Zkmf<C_!!*#nrrE)o!!*#nrW)olr;cfk
rW)unrrE)orrE)o!!*#nrW)lkrrDrkqZ-ZkrrE)orrE)orrE)orrE&nJH1l6!;P:KJ,~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;ccjr;ccjrrE)orrE)orrE)o
!!)ummf<C_rrE)orW)unquHZioDnpdm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj
!<;io!<;in!<;ib!<;im!;uWl!<;fo!<)\D!0[B_ptGe!~>
ci=(DblIeAq#LHmrrE)sq>gQn!W`/rm/[1ar;clq!!)uqrW)urr;ccnr;ccnrrE)srrE)srrE)s
!!)uqmf<CcrrE)srW)urquHZmoDnphm/[1arrE)srrE&r'*.t.!;u`p!;u`p!;u`p!;u`p!;cWn
!<;us!<;ur!<;uf!<;uq!;ucp!<;rs!<)hH!0[B_r7_4%~>
ci=(@blIe=q#LHirrE)oq>gQj!W`#jm/[1]r;clm!!)umrW)unr;ccjr;ccjrrE)orrE)orrE)o
!!)ummf<C_rrE)orW)unquHZioDnpdm/[1]rrE)orrE&n'*.h&!;Q<h!;Q<h!;Q<h!;Q<h!;cKj
!<;io!<;in!<;ib!<;im!;uWl!<;fo!<)\D!0[B_ptGe!~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;clmrrE)orW)unrrE)o!!)okrrE#m
!W`#jmf<C_rrE)orW)unr;clmrrE)oo`5$eli@(\rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)o
rrE)orW)uno)Sgcq#LHirrE#m!W`#jJH1l6!;P:KJ,~>
ci=(DblIeAquHZmrW)opr;cfoli@(`r;cfo!W`/rrW)urr;clqrrE)srW)urrrE)s!!)oorrE#q
!W`/rmf<CcrrE)srW)urr;clqrrE)so`5$ili@(`rrE)srrE)srrE)s!!)oorrDrorrDonrrE)s
rrE)srW)uro)Sggq#LHmrrE#q!W`/rJH1l6!;tROJ,~>
ci=(@blIe=quHZirW)olr;cfkli@(\r;cfk!W`#jrW)unr;clmrrE)orW)unrrE)o!!)okrrE#m
!W`#jmf<C_rrE)orW)unr;clmrrE)oo`5$eli@(\rrE)orrE)orrE)o!!)okrrDrkrrDojrrE)o
rrE)orW)uno)Sgcq#LHirrE#m!W`#jJH1l6!;P:KJ,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;g"!;Q<h!;Q<h!<2cn!<;in!<;id!;uWj!<;im!<;io!<;io!;lQi!<;ik!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okr;clmq>gQjrW)rmrrE)oJH1l6!;P:K
J,~>
ci=(DblIeA#lsl'!;u`p!;ucl!<;ur!<;ru!;ucn!<;ug!<;uq!<2or!<;ur!<;uq!<;us!<;ur
!<;us!<;s&!;u`p!;u`p!<2or!<;ur!<;uh!;ucn!<;uq!<;us!<;us!;l]m!<;uo!<;uh!;uco
!<;up!<;uo!<;uo!<;s$!;lipqu?`pr;?WqquZrs!!)oor;clqq>gQnrW)rqrrE)sJH1l6!;tRO
J,~>
ci=(@blIe=#ls`#!;Q<h!;Q?d!<;in!<;fq!;Q?f!<;ic!<;im!<2cn!<;in!<;im!<;io!<;in
!<;io!<;g"!;Q<h!;Q<h!<2cn!<;in!<;id!;uWj!<;im!<;io!<;io!;lQi!<;ik!<;id!;uWk
!<;il!<;ik!<;ik!<;fu!;HQhp](<lq#(3mp]CNk!!)okr;clmq>gQjrW)rmrrE)oJH1l6!;P:K
J,~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQk!<;io!<;in
!;uWj!<;id!<;ik!<)]k!<2`p!;Q?_!<;ik!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii
!<;id!<;il!<2ck!;uVC!0R<^ptGe!~>
ci=(DbQ.\@r;cip!s&8s!;uco!<2or!<;ur!<;ui!;l]n!;ucp!;l]n!<)ip!;l]o!<;us!<;ur
!;ucn!<;uh!<;uo!<)io!<2lt!;ucg!<;uo!<;uh!<;up!<)in!<)io!<)ip!<;ur!<;us!<;um
!<;uh!<;up!<2oo!;ubG!0R<^r7_4%~>
ci=(@bQ.\<r;cil!s&,k!;uWk!<2cn!<;in!<;ie!;lQj!;uWl!;lQj!<)]l!;lQk!<;io!<;in
!;uWj!<;id!<;ik!<)]k!<2`p!;Q?_!<;ik!<;id!<;il!<)]j!<)]k!<)]l!<;in!<;io!<;ii
!<;id!<;il!<2ck!;uVC!0R<^ptGe!~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(DJH4g4s8;KhrVYFNs8;KhrVYIOrVV3HJH4m6!;tROJ,~>
ci=(@JH4g4s7l3drV5.Js7l3drV51KrV1pDJH4m6!;P:KJ,~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ci=(DJH16$JH16$g&M-NgAla~>
ci=(@JH16$JH16$g&M-JgAla~>
ciAXlJbXfkJb[mmgAla~>
ciAXpJc()sJc+0ugAla~>
ciAXlJbXfkJb[mmgAla~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
JH16$JH16$JH13~>
%%EndData
showpage
%%Trailer
end
%%EOF
/unsupported/trunk/hlp/doc/hlp.eps
0,0 → 1,449
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: GIMP PostScript file plugin V 1.12 by Peter Kirchgessner
%%Title: /home/rms/hlp.eps
%%CreationDate: Mon Oct 18 15:17:16 2004
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 14 14 208 152
%%EndComments
%%BeginProlog
% Use own dictionary to avoid conflicts
10 dict begin
%%EndProlog
%%Page: 1 1
% Translate for offset
14.173228 14.173228 translate
% Translate to begin of first scanline
0.000000 137.000000 translate
193.000000 -137.000000 scale
% Image geometry
193 137 8
% Transformation matrix
[ 193 0 0 137 0 0 ]
% Strings to hold RGB-samples per scanline
/rstr 193 string def
/gstr 193 string def
/bstr 193 string def
{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
true 3
%%BeginData: 6899 ASCII Bytes
colorimage
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6O\GuX-\GuX-q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
g]7?K])_j*])_j*q>c$~>
g]7?O])_j.])_j.q>c$~>
g]7?K])_j*])_j*q>c$~>
h#ITQ!;HQh]`831!;HQh]`831!;HQhqZ)-~>
h#ITU!;lip]`835!;lip]`835!;lipqZ)-~>
h#ITQ!;HQh]`831!;HQh]`831!;HQhqZ)-~>
h>dcT!!)co!;O;/#5A/up](<h^AnK5!!)co!;QHlJ,~>
h>dcX!!)os!;sS3#5eH$qu?`p^AnK9!!)os!;u`pJ,~>
h>dcT!!)co!;O;/#5A/up](<h^AnK5!!)co!;QHlJ,~>
hZ*ZOrVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurnr;_?~>
hZ*ZSrVurrrVurr_#OK5rVurrrVurr_#OK5rVurrrVurrr;_?~>
hZ*ZOrVurnrVurn_#OK1rVurnrVurn_#OK1rVurnrVurnr;_?~>
huEcPr;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;ZimrW%H~>
huEcTr;Ziqr;Ziq_Z0]7r;Ziqr;Ziq_Z0]7r;Ziqr;ZiqrW%H~>
huEcPr;Zimr;Zim_Z0]3r;Zimr;Zim_Z0]3r;Zimr;ZimrW%H~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6O\GuX-\GuX-q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6O\GuX-\GuX-q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6O\GuX-\GuX-q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gAh6O\GuX-\GuX-q#Gp~>
gAh6K\GuX)\GuX)q#Gp~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
gApiL`W5V7`W5e<J,~>
gApiP`W5V;`W5e@J,~>
gApiL`W5V7`W5e<J,~>
g\CBE`q]/0`q]>5J,~>
g\gZM`r,G8`r,V=J,~>
g\CBE`q]/0`q]>5J,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
_>jT2L]@GMq>c$~>
_>jT6L]@GQq>c$~>
_>jT2L]@GMq>c$~>
_Z9]2M?*YNqZ)-~>
_Z9]6M?*YRqZ)-~>
_Z9]2M?*YNqZ)-~>
_uKr8!;HQhMuX"U!;HQhquD6~>
_uKr<!;lipMuX"Y!;lipquD6~>
_uKr8!;HQhMuX"U!;HQhquD6~>
`;g,;!!)co!;MQS#5A/up](<hr;_?~>
`;g,?!!)os!;qiW#5eH$qu?`pr;_?~>
`;g,;!!)co!;MQS#5A/up](<hr;_?~>
`W-#6rVurnrVurnO8o:UrVurnrVurnrW%H~>
`W-#:rVurrrVurrO8o:YrVurrrVurrrW%H~>
`W-#6rVurnrVurnO8o:UrVurnrVurnrW%H~>
`rH,7r;Zimr;ZimOoPLWr;Zimr;Zoo!!%N~>
`rH,;r;Ziqr;ZiqOoPL[r;Ziqr;Zos!!%N~>
`rH,7r;Zimr;ZimOoPLWr;Zimr;Zoo!!%N~>
_>jT2L]@GMq>c$~>
_>jT6L]@GQq>c$~>
_>jT2L]@GMq>c$~>
_>jT2L]@GMq>c$~>
_>jT6L]@GQq>c$~>
_>jT2L]@GMq>c$~>
_>jT2L]@GMq>c$~>
_>jT6L]@GQq>c$~>
_>jT2L]@GMq>c$~>
_>jT2L]@GMq>c$~>
_>jT6L]@GQq>c$~>
_>jT2L]@GMq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
_>jT2rW)l#pON1GT)\ldq>c$~>
_>jT6rW)l'pR(lcT)\lhq>c$~>
_>jT2rW)l#pW39:T)\ldq>c$~>
^A.W1pON1GQhZ(~>
^ARo9pR(lcQi)@~>
^A.W1pW39:QhZ(~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
YlOh!OoU"~>
YlOh%OoU"~>
YlOh!OoU"~>
Z2jn!OoU"~>
Z2jn%OoU"~>
Z2jn!OoU"~>
\cD['r;clmOoU"~>
\cD[+r;clqOoU"~>
\cD['r;clmOoU"~>
])_m+q#LHiOoU"~>
])_m/q#LHmOoU"~>
])_m+q#LHiOoU"~>
\cD^(quHclOoU"~>
\cD^,quHcpOoU"~>
\cD^(quHclOoU"~>
[fHI'r;clmOoU"~>
[fHI+r;clqOoU"~>
[fHI'r;clmOoU"~>
])_d(rW)ijPQ64~>
])_d,rW)inPQ64~>
])_d(rW)ijPQ64~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
j8]2TJH4O,J,~>
j8]2XJH4O,J,~>
j8]2TJH4O,J,~>
jT,;TJH4R-J,~>
jT,;XJH4R-J,~>
jT,;TJH4R-J,~>
jo>PZ!;HQhJH4U.J,~>
jo>P^!;lipJH4U.J,~>
jo>PZ!;HQhJH4U.J,~>
k5Y_]!!)co!;M*Fi;eB~>
k5Y_a!!)os!;qBJi;eB~>
k5Y_]!!)co!;M*Fi;eB~>
kPtVXrVurnrVurnJH4[0J,~>
kPtV\rVurrrVurrJH4[0J,~>
kPtVXrVurnrVurnJH4[0J,~>
kl:_Yr;Zimr;ZimJH4^1J,~>
kl:_]r;Ziqr;ZiqJH4^1J,~>
kl:_Yr;Zimr;ZimJH4^1J,~>
j8]2TJH4O,J,~>
j8]2XJH4O,J,~>
j8]2TJH4O,J,~>
j8]2TJH4O,J,~>
j8]2XJH4O,J,~>
j8]2TJH4O,J,~>
j8]2TJH4O,J,~>
j8]2XJH4O,J,~>
j8]2TJH4O,J,~>
j8]2TJH4O,J,~>
j8]2XJH4O,J,~>
j8]2TJH4O,J,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
j8f._r.+A=npp*-pTU=kJ,~>
j8f.cr0['UnsJeEpU$UoJ,~>
j8f._r5eI0o#U1upTU=kJ,~>
jS8\Xr.+D6npp-&pTU@dJ,~>
jS\t`r0[*RnsJhBpU$XlJ,~>
jS8\Xr5eL)o#U4npTU@dJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
JH3IcJ,~>
%%EndData
showpage
%%Trailer
end
%%EOF
/unsupported/trunk/hlp/hlpgraph.c
0,0 → 1,392
#include "hlpdemo.h"
#include <drivers/shark_keyb26.h>
#include "snapshot.h"
 
//#define ESC 27
 
/*
#define DEBUG
*/
 
/* tipologia di task e mutex */
HARD_TASK_MODEL m;
 
/* scala temporale del sistema in us */
#define TIMESCALE (100 * 1000)
 
/* buffer che contiene la configurazione letto in nrt mode */
extern char myfilebuf[1000];
 
extern int read_conf(char *, unsigned int);
extern void print_taskconf(taskconf_list_t *);
 
void trace_info_hlp(void);
 
/* tempo dell'avvio */
TIME start;
 
/* struttura dati contenente la configurazione */
taskconf_list_t *taskconf = NULL;
 
/* lista dei mutex del sistema */
mutex_list_t *mutexes = NULL;
 
#define YMENU 10 /* menu level */
#define XMIN 50
#define XMAX 600
#define YMIN 100
#define YMAX 450
#define YFLOOR(index) YMIN + (50 * (index + 1))
 
#define COLWHITE rgb16(255,255,255)
#define COLLOAD rgb16(180,180,180)
 
/*--------------------------------------------------------------*/
 
/* posizione lungo l'asse x dopo t sec. */
int xpost(unsigned int t)
{
int ret;
 
ret = XMIN + 10 + (((sys_gettime(NULL) - start) / TIMESCALE) + t);
if (ret > XMAX)
ret = XMAX;
if (ret < XMIN)
ret = XMIN;
 
return ret;
}
 
/* posizione lungo l'asse x al tempo t corrente */
int xpos(void)
{
return xpost(0);
}
 
typedef struct color_stack {
int color;
struct color_stack *next;
} color_stack_t;
 
void color_stack_push(int color, color_stack_t **head)
{
color_stack_t *new;
 
new = (color_stack_t *)kern_alloc(sizeof(color_stack_t));
new->color = color;
new->next = *head;
 
*head = new;
}
 
int color_stack_pop(color_stack_t **head)
{
int ret = COLLOAD;
color_stack_t *tmp = *head;
 
if (*head != NULL)
{
ret = (*head)->color;
*head = (*head)->next;
kern_free(tmp, (sizeof(color_stack_t)));
}
return ret;
}
 
 
void load(int time, int i, int color, char *name)
{
int j;
TIME last;
char buf[50];
 
for (j = 0; j < time; j++)
{
last = sys_gettime(NULL);
 
grx_line(xpos(), YFLOOR(i), xpos(), YFLOOR(i) - 10, color);
sprintf(buf,
"Time: %.4d, task active: %.5s(PID=%.2d, Shadow=%.2d)",
(int)((sys_gettime(NULL) - start) / TIMESCALE) + 2,
name,
exec,
exec_shadow);
grx_text(buf, 100,100,COLWHITE,0);
 
while (sys_gettime(NULL) - last + (TIMESCALE/100) < TIMESCALE);
}
}
 
TASK Ji(void *arg)
{
taskconf_list_t *cur = (taskconf_list_t *)arg;
action_list_t *act;
color_stack_t *colorstack;
 
color_stack_push(COLLOAD, &colorstack);
 
while (1)
{
act = cur->actionlist;
 
while (act)
{
switch (act->type)
{
case LOAD:
load(act->time, cur->i, colorstack->color, cur->name);
if (xpos() == XMAX)
{
task_kill(cur->pid);
return 0;
}
break;
case LOCK: /* task lock */
color_stack_push(act->mutex->color, &colorstack);
grx_text(act->mutex->name, xpos() - 2, YFLOOR(cur->i) + 10, COLWHITE, 0);
mutex_lock(&act->mutex->m);
trace_info_hlp();
break;
case UNLOCK: /* task unlock */
color_stack_pop(&colorstack);
mutex_unlock(&act->mutex->m);
trace_info_hlp();
break;
}
act = act->next;
}
task_endcycle();
}
 
return 0;
}
 
void draw_scenario(void)
{
/* The scenario */
grx_rect(XMIN-1, YMIN-1, XMAX+1, YMAX+1, COLWHITE);
grx_text("Simulation of HLP tasks", XMIN, YMENU+10, COLWHITE, 0);
grx_text("SPACE Start demo" , XMIN, YMENU+20, COLWHITE, 0);
grx_text("ESC exit to DOS" , XMIN, YMENU+30, COLWHITE, 0);
}
 
void trace_info_hlp()
{
HLP_mutex_resource_des *m;
RLEVEL l;
HLP_mutex_t *mutscan;
HLP_tasklist_t *taskscan;
int i = 0;
char buf[60];
 
if (mutexes)
{
l = mutexes->m.mutexlevel;
m = (HLP_mutex_resource_des *)(resource_table[l]);
for (mutscan = m->mutexlist; mutscan; mutscan = mutscan->next)
{
if (mutscan->owner != NIL)
sprintf(buf, "mutex: %p owner=%2d, used by", mutscan, mutscan->owner);
else
sprintf(buf, "mutex: %p no owner, used by", mutscan);
grx_text(buf, 50, 320, COLWHITE, 0);
for (i = 1, taskscan = mutscan->tasklist; taskscan; taskscan = taskscan->next, i++)
{
sprintf(buf, "task: %p, pid=%d, preempt=%ld",
taskscan,
taskscan->pid,
taskscan->preempt);
grx_text(buf, 100, 320+i*8, COLWHITE, 0);
}
}
 
grx_text("All tasks:", 100, 320 + i++ * 8, COLWHITE, 0);
 
if (taskconf)
for (taskscan = m->tasklist; taskscan; taskscan = taskscan->next, i++)
{
sprintf(buf,
"task: %p, pid=%d, preempt=%ld",
taskscan,
taskscan->pid,
taskscan->preempt);
 
grx_text(buf, 100, 320+i*8, COLWHITE, 0);
}
}
else
{
grx_text("No mutexes", 200, 200, COLWHITE, 0);
}
 
}
 
/* get preemption level inverse proportional to period and starting by 1 */
int get_preemption_level(taskconf_list_t *task)
{
taskconf_list_t *scan;
int ret = 1;
for (scan = taskconf; scan; scan = scan->next)
if (scan != task && scan->period < task->period)
ret++;
 
return ret;
}
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
{
char c; /* character from keyboard */
int i = 0, j = 0, started = 0, numtask = 0, nummutex = 0;
taskconf_list_t *curtask = NULL;
mutex_list_t *mutexlist = NULL, *curmut = NULL;
PID pid = NIL;
HLP_mutexattr_t a;
HLP_RES_MODEL r;
 
if (read_conf(myfilebuf, 1000) == -1)
{
sys_shutdown_message("Error reading configuration file");
sys_end();
}
 
for (curtask = taskconf; curtask != NULL; curtask = curtask->next)
numtask++;
 
draw_scenario();
curtask = taskconf;
 
for (curmut = mutexes; curmut; curmut = curmut->next)
{
HLP_mutexattr_default(a);
mutex_init(&(curmut->m), &a);
}
snapshot_freeslot(0);
 
c = keyb_getch(BLOCK);
i = started = 0;
do {
if ((c == ' ') && !started) {
started = 1;
start = sys_gettime(NULL);
 
while (curtask) {
 
/* traccio gli assi temporali per ogni task */
grx_line(XMIN + 10, YFLOOR(i), XMAX - 10, YFLOOR(i), COLWHITE);
grx_text(curtask->name, XMIN - 20, YFLOOR(i) - 10, COLWHITE, 0);
/* disegna frecce di attivazione */
for (j = 0; xpost(j) < XMAX; j += curtask->period)
{
grx_line(xpost(j), YFLOOR(i), xpost(j), YFLOOR(i) - 20, COLWHITE);
grx_line(xpost(j), YFLOOR(i) - 20, xpost(j) - 5, YFLOOR(i) - 15, COLWHITE);
grx_line(xpost(j), YFLOOR(i) - 20, xpost(j) + 5, YFLOOR(i) - 15, COLWHITE);
}
 
hard_task_default_model(m);
hard_task_def_level(m,0);
hard_task_def_ctrl_jet(m);
hard_task_def_periodic(m);
hard_task_def_wcet(m, (curtask->wcet + 2) * TIMESCALE);
hard_task_def_mit(m, curtask->period * TIMESCALE);
hard_task_def_arg(m,(void *)curtask);
hard_task_def_group(m, 1);
/* registro i mutex per il pid */
nummutex = 0;
mutexlist = curtask->mutexlist;
while(mutexlist) {
mutexlist = mutexlist->next;
nummutex++;
}
// HLP_res_default_model(r, get_preemption_level(curtask));
HLP_res_default_model(r, 1000 - curtask->period);
switch (nummutex) {
case 0:
pid = task_create(curtask->name, Ji, &m, &r);
break;
case 1:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)), NULL);
break;
case 2:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)),
HLP_usemutex(&(curtask->mutexlist->next->m)), NULL);
break;
case 3:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)),
HLP_usemutex(&(curtask->mutexlist->next->m)),
HLP_usemutex(&(curtask->mutexlist->next->next->m)), NULL);
break;
case 4:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)),
HLP_usemutex(&(curtask->mutexlist->next->m)),
HLP_usemutex(&(curtask->mutexlist->next->next->m)),
HLP_usemutex(&(curtask->mutexlist->next->next->next->m)), NULL);
break;
default:
sys_shutdown_message("Too many mutexes! I am stupid!");
sys_end();
}
if (pid == NIL)
{
sys_shutdown_message("Could not create task %s", curtask->name);
sys_end();
print_taskconf(curtask);
return 0;
}
curtask->pid = pid;
curtask->i = i++;
curtask = curtask->next;
}
trace_info_hlp();
start = sys_gettime(NULL);
group_activate(1);
}
 
 
c = keyb_getch(BLOCK);
 
if (xpos() > XMAX)
{
group_kill(1);
}
} while (c != ESC);
 
snapshot_getslot(0, 640, 480, 2);
snapshot_grab(0);
 
sys_end();
snapshot_save_ppm(0, "snapshot.ppm");
 
return 0;
}
 
/*--------------------------------------------------------------*/
/unsupported/trunk/hlp/hlptext.c
0,0 → 1,277
#include "hlpdemo.h"
#include <drivers/shark_keyb26.h>
 
/* #define DEBUG */
 
/* tipologia di task e mutex */
HARD_TASK_MODEL m;
 
/* scala temporale del sistema in us */
#define TIMESCALE (100 * 1000)
 
/* fine del mondo in TIMESCALE */
#define END_OF_WORLD 280
 
// utility
#define CURTIME ((sys_gettime(NULL) - start) / TIMESCALE)
 
void anykey(int sec)
{
/* char c;
cprintf("Premere il tasto 'c' per continuare\n");
do {
c = keyb_getch(BLOCK);
} while(c != 'c');*/
 
TIME last;
last = sys_gettime(NULL);
while (sys_gettime(NULL) - last < sec * 1000 * 1000);
}
 
/* buffer che contiene la configurazione letto in nrt mode */
extern char myfilebuf[1000];
 
extern int read_conf(char *, unsigned int);
extern void print_taskconf(taskconf_list_t *);
 
void trace_info_hlp(void);
 
/* tempo dell'avvio */
TIME start;
 
/* struttura dati contenente la configurazione */
taskconf_list_t *taskconf = NULL;
 
/* lista dei mutex del sistema */
mutex_list_t *mutexes = NULL;
 
/*--------------------------------------------------------------*/
 
void load(int time, char *name)
{
int i;
TIME last;
 
for (i = 0; i < time; i++)
{
last = sys_gettime(NULL);
cprintf(".");
while (sys_gettime(NULL) - last < TIMESCALE - TIMESCALE / 100);
}
}
 
TASK Ji(void *arg)
{
taskconf_list_t *cur = (taskconf_list_t *)arg;
action_list_t *act;
 
while (1)
{
if (CURTIME > END_OF_WORLD)
{
task_kill(cur->pid);
return 0;
}
 
act = cur->actionlist;
 
while (act)
{
switch (act->type)
{
case LOAD:
cprintf("%ld -- task: %s -- NonCritic section:(exec=%.2d,Shadow=%.2d),load %d",
CURTIME,
cur->name,
exec,
exec_shadow,
act->time);
 
load(act->time, cur->name);
cprintf("end %ld\n", CURTIME);
break;
case LOCK: /* task lock */
cprintf("%ld -- Task %s -- locks mutex %s\n", CURTIME, cur->name, act->mutex->name);
mutex_lock(&act->mutex->m);
break;
case UNLOCK: /* task unlock */
cprintf("%ld -- Task %s -- unlocks mutex %s\n", CURTIME, cur->name, act->mutex->name);
mutex_unlock(&act->mutex->m);
break;
}
act = act->next;
}
task_endcycle();
}
 
return 0;
}
 
void trace_info_hlp()
{
HLP_mutex_resource_des *m;
RLEVEL l;
HLP_mutex_t *mutscan;
HLP_tasklist_t *taskscan;
int i = 0;
 
if (mutexes)
{
l = mutexes->m.mutexlevel;
m = (HLP_mutex_resource_des *)(resource_table[l]);
for (mutscan = m->mutexlist; mutscan; mutscan = mutscan->next)
{
cprintf("mutex: %p owner=%d, used by\n", mutscan, mutscan->owner);
for (i = 1, taskscan = mutscan->tasklist; taskscan; taskscan = taskscan->next, i++)
{
cprintf("task: %p, pid=%d, preempt=%ld\n",
taskscan,
taskscan->pid,
taskscan->preempt);
}
}
 
cprintf("All tasks:\n");
 
if (taskconf)
for (taskscan = m->tasklist; taskscan; taskscan = taskscan->next, i++)
{
cprintf("task: %p, pid=%d, preempt=%ld\n",
taskscan,
taskscan->pid,
taskscan->preempt);
}
}
else
{
cprintf("No mutexes\n");
}
 
}
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
{
int i = 0, numtask = 0, nummutex = 0;
taskconf_list_t *curtask = NULL;
mutex_list_t *mutexlist = NULL, *curmut = NULL;
PID pid = NIL;
 
HLP_mutexattr_t a;
HLP_RES_MODEL r;
 
 
if (read_conf(myfilebuf, 1000) == -1)
{
sys_shutdown_message("Error reading configuration file");
sys_end();
}
 
clear();
print_taskconf(taskconf);
anykey(5);
 
for (curtask = taskconf; curtask != NULL; curtask = curtask->next)
numtask++;
curtask = taskconf;
for (curmut = mutexes; curmut; curmut = curmut->next)
{
HLP_mutexattr_default(a);
mutex_init(&(curmut->m), &a);
}
 
while (curtask) {
hard_task_default_model(m);
hard_task_def_level(m,0);
hard_task_def_ctrl_jet(m);
hard_task_def_periodic(m);
hard_task_def_wcet(m, (curtask->wcet + 2) * TIMESCALE);
hard_task_def_mit(m, curtask->period * TIMESCALE);
hard_task_def_arg(m,(void *)curtask);
hard_task_def_group(m, 1);
/* registro i mutex per il pid */
nummutex = 0;
mutexlist = curtask->mutexlist;
while(mutexlist) {
mutexlist = mutexlist->next;
nummutex++;
}
 
HLP_res_default_model(r, 1000 - curtask->period );
 
switch (nummutex) {
case 0:
pid = task_create(curtask->name, Ji, &m, &r);
break;
case 1:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)), NULL);
break;
case 2:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)),
HLP_usemutex(&(curtask->mutexlist->next->m)), NULL);
break;
case 3:
pid = task_createn(curtask->name, Ji, (TASK_MODEL *)&m, &r,
HLP_usemutex(&(curtask->mutexlist->m)),
HLP_usemutex(&(curtask->mutexlist->next->m)),
HLP_usemutex(&(curtask->mutexlist->next->next->m)), NULL);
break;
default:
sys_shutdown_message("Too many mutexes! I am stupid!");
sys_end();
}
if (pid == NIL)
{
sys_shutdown_message("Could not create task %s", curtask->name);
sys_end();
print_taskconf(curtask);
perror("errore nella creazione del task");
return 0;
}
else
{
cprintf("Task %s pid %d creato con successo!\n", curtask->name, pid);
}
curtask->pid = pid;
curtask->i = i++;
curtask = curtask->next;
}
 
#ifndef USESRP
clear();
cprintf("informazioni dal modulo HLP:\n");
trace_info_hlp();
anykey(5);
#endif
clear();
cprintf("Attivazione dei task\n");
anykey(2);
start = sys_gettime(NULL);
group_activate(1);
while(keyb_getch(BLOCK) != 27); // Ascii code of ESC == 27
anykey(20);
 
sys_end();
return 0;
}
 
/*--------------------------------------------------------------*/
/unsupported/trunk/hlp/hlp.h
0,0 → 1,100
#ifndef __HLP_H__
#define __HLP_H__
 
#include <kernel/model.h>
#include <kernel/descr.h>
#include "ll/sys/cdefs.h"
 
__BEGIN_DECLS
 
#define HLP_RCLASS 0x0600
#define HLP2_RCLASS 0x0700
 
/* -----------------------------------------------------------------------
HLP_RES_MODEL: Stack Resource Policy resource model
----------------------------------------------------------------------- */
 
typedef struct {
RES_MODEL r;
DWORD preempt; /* the preemption level of a task */
} HLP_RES_MODEL;
 
#define HLP_res_default_model(res, pre) \
res_default_model((res).r, HLP_RCLASS); \
(res).preempt = (pre)
#define HLP_res_def_level(res,l) res_def_level(res,l)
 
 
 
 
/* -----------------------------------------------------------------------
HLP_mutexattr_t: Higher Locker Priority Mutex Attribute
----------------------------------------------------------------------- */
#define HLP_MCLASS 0x0700
 
#define HLP_MUTEXATTR_INITIALIZER {HLP_MCLASS}
#define HLP_mutexattr_default(a) mutexattr_default(a, HLP_MCLASS)
 
 
RLEVEL HLP_register_module(void);
 
extern __inline__ RES_MODEL *HLP_usemutex(mutex_t *m) {
return (RES_MODEL *)m->opt;
};
 
 
#define XHLP_INVALID_LOCK 12
 
 
typedef mutexattr_t HLP_mutexattr_t;
 
#define HLP_MUTEXATTR_INITIALIZER {HLP_MCLASS}
#define HLP_mutexattr_default(a) mutexattr_default(a, HLP_MCLASS)
 
 
typedef struct HLP_mutexstruct_t HLP_mutex_t;
typedef struct HLP_taskliststruct_t HLP_tasklist_t;
 
/* this is the structure normally pointed by the opt field in the
mutex_t structure */
struct HLP_mutexstruct_t {
RES_MODEL r; /*+ This little trick make possible the use of
HLP_usemutex +*/
 
PID owner; /* process that owns the mutex, else nil */
HLP_tasklist_t *tasklist; /* process list that can use(locking or not)
the mutex, ordered by preemption
level */
 
struct HLP_mutexstruct_t *next; /* next mutex of the list */
 
};
 
struct HLP_taskliststruct_t {
 
PID pid;
 
DWORD preempt; /* preemption level */
 
HLP_mutex_t *mutexlist; /* list of mutexes */
 
HLP_tasklist_t *next; /* next task handled by HLP */
HLP_tasklist_t *prev; /* prev task handled by HLP */
 
};
 
/* The HLP resource level descriptor */
typedef struct {
mutex_resource_des m; /*+ the mutex interface +*/
 
HLP_mutex_t *mutexlist; /*+ an unordered list of all created HLP
mutexes +*/
 
HLP_tasklist_t *tasklist; /*+ An ordered list by preemption level
of all task handled by HLP +*/
 
} HLP_mutex_resource_des;
 
__END_DECLS
#endif
/unsupported/trunk/hlp/hlptxtin.c
0,0 → 1,204
#include "kernel/kern.h"
#include "modules/intdrive.h"
//#include "modules/edf.h"
#include "modules/rm.h"
//#include "modules/hardcbs.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
#include "hlp.h"
//#include "modules/srp.h"
//#include "modules/pi.h"
//#include "modules/npp.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
#include "ll/i386/x-dos.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 2000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
/* This is the buffer used by read_myfile */
char myfilebuf[1000];
 
/* This is the number of bytes read by read_myfile */
int myfilebuf_length;
 
void read_myfile()
{
/* DOS file descriptor */
DOS_FILE *f;
 
/* Error code */
int err;
 
/* open the DOS file for reading (you can specify only "r" or "w") */
f = DOS_fopen("hlp.cfg","r");
 
/* check for open errors */
if (!f) {
/* error!! */
err = DOS_error();
 
/* note that if you call DOS_error() here, it return 0!!! */
myfilebuf_length = 0;
return;
}
 
/* read up to 1000 chars */
myfilebuf_length = DOS_fread(&myfilebuf,1,1000,f);
 
/* check for errors */
err = DOS_error();
 
if (err) {
cprintf("Error %d reading myfile.txt...\n", err);
myfilebuf_length = 0;
/* there is not return because I want to close the file! */
}
 
/* Close the file */
DOS_fclose(f);
}
 
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
 
read_myfile();
// EDF_register_level(EDF_ENABLE_ALL);
RM_register_level(RM_ENABLE_ALL);
// HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
CBS_register_level(CBS_ENABLE_ALL, 1);
dummy_register_level();
 
// SEM_register_module();
//CABS_register_module();
 
HLP_register_module();
//SRP_register_module();
// PI_register_module();
// NPP_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
 
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/unsupported/trunk/hlp/hlpgrxin.c
0,0 → 1,223
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/rm.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "hlp.h"
//#include "modules/srp.h"
//#include "modules/pi.h"
//#include "modules/npp.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include "ll/i386/x-dos.h"
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ system tick in us +*/
#define TICK 1
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
/* This is the buffer used by read_myfile */
char myfilebuf[1000];
 
/* This is the number of bytes read by read_myfile */
int myfilebuf_length;
 
void read_myfile()
{
/* DOS file descriptor */
DOS_FILE *f;
 
/* Error code */
int err;
 
/* open the DOS file for reading (you can specify only "r" or "w") */
f = DOS_fopen("hlp.cfg","r");
 
/* check for open errors */
if (!f) {
/* error!! */
err = DOS_error();
 
/* note that if you call DOS_error() here, it return 0!!! */
myfilebuf_length = 0;
return;
}
 
// cprintf("pre fread\n");
/* read up to 1000 chars */
myfilebuf_length = DOS_fread(&myfilebuf,1,1000,f);
// cprintf("post fread\n");
 
/* check for errors */
err = DOS_error();
 
if (err) {
cprintf("Error %d reading myfile.txt...\n", err);
myfilebuf_length = 0;
/* there is not return because I want to close the file! */
}
 
/* Close the file */
DOS_fclose(f);
cprintf("Read hlp.cfg...\n");
}
 
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
 
read_myfile();
 
//EDF_register_level(EDF_ENABLE_ALL);
RM_register_level(RM_ENABLE_ALL);
// HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
CBS_register_level(CBS_ENABLE_ALL, 1);
dummy_register_level();
 
HLP_register_module();
// SRP_register_module();
// PI_register_module();
// NPP_register_module();
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
FB26_init();
 
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
 
return 0;
 
}
 
int device_drivers_close() {
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/unsupported/trunk/hlp/makefile
0,0 → 1,18
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS += hlpgraph hlptext
 
include $(BASE)/config/example.mk
 
hlptext:
make -f $(SUBMAKE) APP=hlptext INIT= OTHEROBJS="hlptxtin.o hlpparse.o hlp.o" OTHERINCL= SHARKOPT="__INPUT__ __LINUXC26__ __PCI__ __FB__"
 
hlpgraph:
make -f $(SUBMAKE) APP=hlpgraph INIT= OTHEROBJS="hlpgrxin.o hlpparse.o $(BASE)/ports/snapshot/snapshot.o hlp.o" OTHERINCL="-I $(BASE)/ports/snapshot/include" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__ __FB__"
/unsupported/trunk/hlp/readme
0,0 → 1,41
Hi all,
 
this is a scheduling module implementing HLP, The Highest Locker
Priority Protocol (similar somehow to the SRP protocol).
 
This demo has been done by Matley in the context of a student project
with the University of Pavia.
 
It works under Shark 1.4.
 
bye
 
PJ 16/12/2004
 
Here is the original readme file...
 
------------------------------------------------------------
 
File in the archive:
 
Makefile to build the demos
makefile
 
Module source:
hlp.c
hlp.h
 
Demo source:
hlp.cfg
hlpdemo.h
hlpgraph.c
hlpgrxin.c
hlpparse.c
hlptext.c
hlptxtin.c
 
The graphical demos read (at runtime) in the current directory the
file hlp.cfg where you gives the task set specs
 
Comments to:
<matley@muppetslab.org>
/unsupported/trunk/hlp/hlpdemo.h
0,0 → 1,50
#ifndef __HLPGRAPH_H_INCLUDED__
#define __HLPGRAPH_H_INCLUDED__
 
#include <kernel/kern.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <modules/sem.h>
#include <drivers/shark_fb26.h>
#include "hlp.h"
//#include <modules/srp.h>
//#include <modules/pi.h>
//#include <modules/npp.h>
 
/* shared resource list */
typedef struct mutex_struct_list {
mutex_t m;
int color; /* color associated to mutex (for graphics) */
char *name;
struct mutex_struct_list *next;
} mutex_list_t;
 
typedef enum { LOAD, LOCK, UNLOCK } action_type_t ;
 
/* task action's description list */
typedef struct action_struct {
action_type_t type;
 
int time; /* lunghezza dell'azione (ignorato per lock/unlock) */
 
mutex_list_t *mutex; /* null se type e' 0,
punta al mutex lockato/unlockato se type e' 1 */
struct action_struct *next;
} action_list_t;
 
/* elenco dei task del sistema */
typedef struct taskconf_list_struct {
PID pid;
char *name;
int i;
DWORD period; /* periodo */
DWORD wcet; /* richiesta di carico totale */
mutex_list_t *mutexlist; /* the mutexes used by task */
action_list_t *actionlist; /* l'elenco di azioni che compie il task */
struct taskconf_list_struct *next;
} taskconf_list_t;
 
#endif