/unsupported/trunk/arezzo/2004/lupo/lupo.c |
---|
0,0 → 1,553 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@gandalf.sssup.it> |
* (see the web pages for full authors list) |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/** |
------------ |
CVS : $Id: lupo.c,v 1.1 2004-08-05 11:34:36 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-08-05 11:34:36 $ |
------------ |
**/ |
/* |
* Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
/*--------------------------------------------------------------*/ |
/* SIMULATION OF RANDOM FLIES */ |
/*--------------------------------------------------------------*/ |
#include <kernel/kern.h> |
#include <drivers/glib.h> |
#include <drivers/keyb.h> |
#include <drivers/mouse.h> |
#include <semaphore.h> |
#include <stdlib.h> |
#include <math.h> |
#define YMENU 10 /* menu level */ |
#define XMIN 50 |
#define XMAX 600 |
#define YMIN 100 |
#define YMAX 450 |
#define VEL 5 /* Velocità della pecora (def. = 5)*/ |
#define VELWOLF 4 /* Velocità del lupo(def. = 4) */ |
#define ANG 30 /* angolo massimo sterzata (30) */ |
#define D 3 /* raggio pecore e lupi */ |
#define ESC 27 /* ASCII code of ESCAPE key */ |
#define MAXPECORE 4 /* Massimo numero di pecore */ |
#define MAXLUPI 3 /* Massimo numero di lupi */ |
#define WOLFGROUP 1 |
#define SHEEPGROUP 1 |
#define HUNTGROUP 1 |
/* Variabili globali utilizzate nel programma*/ |
double tick = 1.0; /* system tick = 1 ms */ |
int hunt_period = 40000; /* Periodo del task cacciatore */ |
int sheep_period = 40000; /* Periodo del task lupo */ |
int wolf_period = 40000; /* Periodo del task pecora */ |
int hunt_wcet = 100; /* wcet del task cacciatore */ |
int sheep_wcet = 100; /* wcet del task pecora */ |
int wolf_wcet = 100; /* wcet del task lupo */ |
int num_p = 0; /* numero iniziale di pecore */ |
int num_l = 0; /* numero iniziale di lupi */ |
int num_c = 0; /* numero iniziale di cacciatori */ |
PID pidp,pidl,pidc; /* etichetta creata dal S.O. attribuita ad ogni task*/ |
sem_t mutex; /* semaforo di mutua */ |
/*--------------------------------------------------------------*/ |
/*Definizione della struttura posizione*/ |
struct pos { |
int x , y; /*Posizione nel piano di ogni singolo task*/ |
sem_t priv; /*Semaforo relativo alla posizione di ogni singolo task*/ |
int death; /*Flag di vita o di morte di ogni singolo task*/ |
}; |
/*--------------------------------------------------------------*/ |
/*Generazione di vettori di struttura posizione per ogni task*/ |
struct pos pecora[MAXPECORE]; |
struct pos lupo[MAXLUPI]; |
struct pos caccia[1]; |
/*--------------------------------------------------------------*/ |
/*Funzione per disegnare a video lupi e pecore*/ |
void draw_obj(int x, int y, int c) |
{ |
sem_wait(&mutex); /*Semaforo di mutua per proteggere la scrittura a video*/ |
grx_disc(x, y, D, c); |
sem_post(&mutex); |
} |
/*--------------------------------------------------------------*/ |
/*Funzione di inizializzazione per tutti le variabili di ogni task*/ |
void init_sem() |
{ |
int i; |
sem_init(&mutex,0,1); |
/*Inizializzazione del vettore di struttura posizione pecora*/ |
for (i=0;i<MAXPECORE;i++){ |
sem_init(&pecora[i].priv,0,1); |
pecora[i].x = 0; |
pecora[i].y = 0; |
pecora[i].death = 0; |
} |
/*Inizializzazione del vettore di struttura posizione lupi*/ |
for (i=0;i<MAXLUPI;i++){ |
sem_init(&lupo[i].priv,0,1); |
lupo[i].x = 0; |
lupo[i].y = 0; |
lupo[i].death = 0; |
} |
/*Inizializzazione del vettore di struttura posizione cacciatore*/ |
sem_init(&caccia[0].priv,0,1); |
caccia[0].x = 0; |
caccia[0].y = 0; |
caccia[0].death = 0; |
} |
/******************************************************************/ |
/*Task pecora*/ |
TASK sheep(void *arg) |
{ |
int x, y; /*Posizione futura*/ |
int ox, oy; /*Posizione attuale*/ |
int dx, dy, da; /*Spostamento lungo x e y e angolare*/ |
int teta, col; /*Angolo di direzione dello spostamento e colore pecora*/ |
int outx, outy,i_libera,i; /*Limiti perimetrali*/ |
double r; /*Angolo di direzione dello spostamento in radianti*/ |
i_libera = 0; /*Inizializzazione della prima posizione libera nel vettore di struttura pecora*/ |
for(i=0;i<MAXPECORE;i++){ /*Ciclo per cercare la prima posizione libera*/ |
sem_wait(&pecora[i].priv); /*Proteggiamo la lettura di ogni singola posizione del vettore */ |
if (!pecora[i].x) i_libera = i; /*Le posizioni libere si contraddistinguono per x=0 e y=0*/ |
sem_post(&pecora[i].priv); |
} |
num_p++; /*Incremento del numero di pecore*/ |
i = i_libera; /*La posizione nel vettore attribuita al task è la prima libera trovata*/ |
sem_wait(&pecora[i].priv); /*Proteggiamo l'attribuzione della posizione di origine della pecora*/ |
pecora[i].x = ox = x = XMAX - 20; |
pecora[i].y = oy = y = YMAX - 20; |
//pecora[i].pid = pidp; |
sem_post(&pecora[i].priv); |
teta = 0; /*Inizializzazione dell' angolo di direzione dello spostamento*/ |
col = 29; /* colore della pecora*/ |
while (1) { /*Ciclo infinito del task*/ |
/*Calcolo casuale della posizione della pecora*/ |
da = rand()%(2*ANG) - ANG; /* da = [-ANG,ANG] */ |
teta += da; |
if (teta > 360) teta -= 360; |
if (teta < 0) teta += 360; |
r = (double)teta * PI / 180.; |
dx = (float)(VEL * cos(r)); |
dy = (float)(VEL * sin(r)); |
x += dx; |
y += dy; |
outx = (x >= XMAX) || (x <= XMIN); /*Controllo posizione all'interno del perimetro*/ |
outy = (y >= YMAX) || (y <= YMIN); |
if (outx || outy) { /*In caso di uscita dal perimetro voluto ricalcolo dx e dy |
in modo che la pecora non esca da esso*/ |
x = x - dx; |
y = y - dy; |
if (outx) teta = 180 - teta; |
if (outy) teta = -teta; |
if (teta > 360) teta -= 360; |
if (teta < 0) teta += 360; |
r = (double)teta * PI / 180.; |
dx = (float)(VEL * cos(r)); |
dy = (float)(VEL * sin(r)); |
x += dx; |
y += dy; |
} |
sem_wait(&pecora[i].priv); |
if (pecora[i].death == 1) { /*Controllo sul flag di vita o di morte del task pecora.*/ |
pecora[i].x = 0; /* Se il flag è uguale a 1 la pecora "deve morire". */ |
pecora[i].y = 0; /*Questo lo indichiamo mettendo le sue posizioni in 0*/ |
pecora[i].death = 0; /*Rimettiamo il flag di vita o morte a 0*/ |
num_p--; /*Decremento del numero di pecore*/ |
draw_obj(ox, oy, 0); /*Chiamata della funzione per disegnare a video una pecora nera=morta*/ |
sem_post(&pecora[i].priv); |
return 0; |
} |
pecora[i].x = x; /*Attribuzione delle nuove posizioni*/ |
pecora[i].y = y; |
sem_post(&pecora[i].priv); |
draw_obj(ox, oy, 0); /*Disegno della nuova posizione cancellando precedentemante quella vecchia*/ |
draw_obj(x, y, col); |
ox = x; oy = y; /*Nuove posizioni attuali*/ |
task_endcycle(); |
} |
} |
/****************************************************************/ |
/*Task lupo*/ |
TASK wolf(void *arg) |
{ |
int x, y; /*Posizione futura*/ |
int ox, oy; /*Posizione attuale*/ |
int dx, dy; /*Spostamento lungo x e y*/ |
int deltax,deltay; /*Distanza lupo pecora lungo l'asse x e lungo l'asse y*/ |
int ipo,ipo_min; /*Ipotenusa e ipotenusa minima di distanza tra lupo e pecora*/ |
int i_min,i,j_libera,j; /*indici della pecora più vicina, della prima posizione libera sul vettore*/ |
int teta, col; /*Angolo di direzione dello spostamento e colore lupo*/ |
int outx, outy; /*Limiti perimetrali*/ |
double r=0; /*Angolo di direzione dello spostamento in radianti*/ |
j_libera = 0; /*Inizializzazione della prima posizione libera nel vettore di struttura lupo*/ |
for(j=0;j<MAXLUPI;j++){ /*Ciclo per cercare la prima posizione libera*/ |
sem_wait(&lupo[j].priv); /*Proteggiamo la lettura di ogni singola posizione del vettore */ |
if (!lupo[j].x) j_libera = j; /*Le posizioni libere si contraddistinguono per x=0 e y=0*/ |
sem_post(&lupo[j].priv); |
} |
num_l++; /*Incremento del numero di lupi*/ |
j = j_libera; /*La posizione nel vettore attribuita al task è la prima libera trovata*/ |
sem_wait(&lupo[j].priv); /*Proteggiamo l'attribuzione della posizione di origine del lupo */ |
lupo[j].x = ox = x = XMIN + 20; |
lupo[j].y = oy = y = YMIN + 20; |
sem_post(&lupo[j].priv); |
teta = 0; /*Inizializzazione dell' angolo di direzione dello spostamento*/ |
col = 4; /* colore lupo*/ |
while (1) { /*Ciclo infinito del task*/ |
/*controllo posizione cacciatore*/ |
sem_wait(&caccia[0].priv); |
deltax = caccia[0].x-ox; /*Calcolo della distanza tra lupo e cacciatore*/ |
deltay = caccia[0].y-oy; |
sem_post(&caccia[0].priv); |
if (abs(deltax)<30 && abs(deltay)<30){ /*Se la distanza è minore di 30 pixel il lupo deve scappare dal cacciatore*/ |
if (deltax==0){ /*calcolo degli angoli di spostamento per fuggire dal cacciatore*/ |
if (deltay>0) teta=-45; |
if (deltay<0) teta=45; |
} |
else{ |
teta=(180/PI)*atan(deltay/deltax); |
if (deltax<0) teta=45+teta; |
if (deltax>0) teta=-(teta+90); |
} |
}else |
{ |
/*controllo pecora piu vicina*/ |
ipo_min=6000; /*ipotenusa in modo da averne sempre una minore*/ |
i_min=0; /*Inizializzazione dell' indice della pecora più vicina*/ |
for(i=0;i<MAXPECORE;i++){ /*Per ogni pecora controllo la distanza lupo-pecora*/ |
sem_wait(&pecora[i].priv); |
if (pecora[i].x){ /*la posizione della pecora è 0 quando è morta*/ |
deltax=pecora[i].x-ox; /*calcolo distanza lupo-pecora lungo x*/ |
deltay=pecora[i].y-oy; /*calcolo distanza lupo-pecora lungo y*/ |
sem_post(&pecora[i].priv); |
ipo=sqrt(deltax*deltax+deltay*deltay); /*Calcolo dell'ipotenusa=distanza tra lupo e pecora*/ |
if (ipo<ipo_min) {ipo_min=ipo;i_min=i;} /*Calcolo l'ipotenusa più piccola*/ |
}else |
sem_post(&pecora[i].priv); |
} |
/*calcolo la distanza della pecora piu vicina*/ |
sem_wait(&pecora[i_min].priv); |
deltax=pecora[i_min].x-ox; |
deltay=pecora[i_min].y-oy; |
if (deltax==0){ /*Calcolo angoli per far inseguire al lupo la pecora più vicina*/ |
if (deltay>0) teta=90; |
if (deltay<0) teta=-90; |
} |
else{ |
teta=(180/PI)*atan(deltay/deltax); |
if (deltax<0) teta=180+teta; |
} |
//controllo se posso uccidere la pecora |
if ((abs(deltax)<2)&&(abs(deltay)<2)) pecora[i_min].death = 1; /*Se il lupo è sopra la pecora,questa deve morire*/ |
sem_post(&pecora[i_min].priv); |
} |
r = (double)teta * PI / 180.; /*Calcolo l'angolo in radianti*/ |
dx = (float)((VELWOLF+j) * cos(r)); /*Una volta calcolato l'angolo di spostamento,*/ |
dy = (float)((VELWOLF+j) * sin(r)); /*calcolo i relativi spostamenti lungo x e y*/ |
x += dx; /*calcolo le nuove posizioni*/ |
y += dy; |
outx = (x >= XMAX) || (x <= XMIN); /*Controllo posizione all'interno del perimetro*/ |
outy = (y >= YMAX) || (y <= YMIN); |
if (outx || outy) { /*In caso di uscita dal perimetro voluto ricalcolo dx e dy |
in modo che il lupo non esca da esso*/ |
x = x - dx; |
y = y - dy; |
if (outx) teta = 180 - teta; |
if (outy) teta = -teta; |
if (teta > 360) teta -= 360; |
if (teta < 0) teta += 360; |
r = (double)teta * PI / 180.; |
dx = (float)(VEL * cos(r)); |
dy = (float)(VEL * sin(r)); |
x += dx; |
y += dy; |
} |
sem_wait(&lupo[j].priv); |
if (lupo[j].death == 1) { /*Controllo sul flag di vita o di morte del task lupo*/ |
lupo[j].x = 0; /* Se il flag è uguale a 1 il lupo "deve morire". */ |
lupo[j].y = 0; /*Questo lo indichiamo mettendo le sue posizioni in 0*/ |
lupo[j].death = 0; /*Rimettiamo il flag di vita o morte a 0*/ |
num_l--; /*Decremento del numero di lupi*/ |
draw_obj(ox, oy, 0); /*Chiamata della funzione per disegnare a video un lupo nero=morto*/ |
sem_post(&lupo[j].priv); |
return 0; |
} |
lupo[j].x = x ; /*Attribuzione delle nuove posizioni*/ |
lupo[j].y = y ; |
sem_post(&lupo[j].priv); |
draw_obj(ox, oy, 0); /*Disegno della nuova posizione cancellando precedentemante quella vecchia*/ |
draw_obj(x, y, col); |
ox = x; oy = y; /*Nuove posizioni attuali*/ |
task_endcycle(); |
} |
} |
/****************************************************************/ |
void my_mouse_handler(MOUSE_EVT *m) |
{ |
grx_box(caccia[0].x-3,caccia[0].y-3,caccia[0].x+3,caccia[0].y+3,0); /*Cancella la posizione precedente del cacciatore disegnando un rettangolo nero*/ |
grx_box(m->x-3,m->y-3,m->x+3,m->y+3,2); /*disegno del cursore a forma di rettangolino attorno alla posizione attuale*/ |
sem_wait(&caccia[0].priv); |
caccia[0].x = m->x; /*Attribuisco al cacciatore le nuove coordinate del mouse*/ |
caccia[0].y = m->y; |
sem_post(&caccia[0].priv); |
} |
/****************************************************************/ |
TASK cacciatore(void *arg) |
{ |
int i = 0; |
int deltax,deltay; /*Distanza cacciatore-lupo lungo l'asse x e lungo l'asse y*/ |
num_c++; /*incremento del numero di cacciatori*/ |
mouse_on(); /*attivazione e visualizzazione del mouse*/ |
mouse_hook(my_mouse_handler); /*chiamata all'hook*/ |
while(1){ /*controllo infinito per vedere se il lupo è da ammazzare*/ |
if (i == MAXLUPI) i = 0; /*Se ha controllato tutti i lupi ricomincia dal primo nel vettore*/ |
sem_wait(&lupo[i].priv); |
if (lupo[i].x){ /*la posizione del lupo è 0 solo quando è morto*/ |
deltax=lupo[i].x-caccia[0].x; /*calcolo la distanza tra lupo e cacciatore*/ |
deltay=lupo[i].y-caccia[0].y; |
if (abs(deltax)<4 && abs(deltay)<4) lupo[i].death=1; /*Se il cacciatore è vicino al lupo questo deve morire*/ |
} |
sem_post(&lupo[i].priv); |
i++; /*Incrementa i per controllare il lupo successivo*/ |
task_endcycle(); |
} |
return 0; |
} |
/****************************************************************/ |
/* This function is called when the system exits */ |
void byebye(void *arg) |
{ |
mouse_end(); |
grx_close(); |
cprintf("Bye Bye!\n"); |
} |
/****************************** MAIN ******************************/ |
int main(int argc, char **argv) |
{ |
HARD_TASK_MODEL m; |
char c; /* caratere dalla tastiera */ |
int i = 0; /* numero di tasks creati */ |
TIME seme; /* used to init the random seed */ |
// Inizializzazione del mouse |
MOUSE_PARMS mouse = BASE_MOUSE; |
mouse_def_ps2(mouse); |
mouse_init(&mouse); |
mouse_limit(XMIN,YMIN,XMAX,YMAX); /* limiti del mouse all'interno del rettangolo di gioco*/ |
mouse_position(XMIN+20,YMAX-20); /* posizione di partenza cacciatore*/ |
mouse_threshold(10); /* sensibilità del mouse */ |
// Inizializzazione dei vettori di strutture |
init_sem(); |
/* Set the closing function */ |
sys_atrunlevel(byebye, NULL, RUNLEVEL_BEFORE_EXIT); |
/* graphic card Initialization */ |
if (grx_init() < 1) { |
sys_abort(1); |
} |
if (grx_open(640, 480, 8) < 0) { |
cprintf("GRX Err\n"); |
sys_abort(1); |
} |
/* The scenario */ |
grx_rect(XMIN-D-1, YMIN-D-1, XMAX+D+1, YMAX+D+1, 14); |
grx_text("Simulazione di caccia al Lupo", XMIN, YMENU+10, 13, 0); |
grx_text("p crea una pecora" , XMIN, YMENU+20, 12, 0); |
grx_text("l crea un lupo" , XMIN, YMENU+30, 12, 0); |
grx_text("c crea un cacciatore " , XMIN, YMENU+40, 12, 0); |
grx_text("ESC exit to DOS" , XMIN, YMENU+50, 12, 0); |
/* The program waits a space to create a fly */ |
c = keyb_getch(BLOCK); |
/* randomize!!!! */ |
seme = sys_gettime(NULL); |
srand(seme); |
do { |
if ((c == 'p')&&(num_p<MAXPECORE)) { /*se il numero di pecore max è raggiunto non crearne altre*/ |
hard_task_default_model(m); |
hard_task_def_ctrl_jet (m); |
hard_task_def_arg (m, (void *)i); |
hard_task_def_wcet (m, sheep_wcet); |
hard_task_def_mit (m, sheep_period); |
hard_task_def_group (m, SHEEPGROUP); |
hard_task_def_usemath (m); |
pidp = task_create("sheep", sheep, &m, NULL); |
if (pidp == NIL) { |
grx_close(); |
perror("Could not create task <sheep>"); |
sys_abort(1); |
} |
task_activate(pidp); |
} |
if ((c == 'l')&&(num_l<MAXLUPI)) { /*se il numero di lupi max è raggiunto non crearne altri*/ |
hard_task_default_model(m); |
hard_task_def_ctrl_jet (m); |
hard_task_def_arg (m, (void *)i); |
hard_task_def_wcet (m, wolf_wcet); |
hard_task_def_mit (m, wolf_period); |
hard_task_def_group (m, WOLFGROUP); |
hard_task_def_usemath (m); |
pidl = task_create("wolf", wolf, &m, NULL); |
if (pidl == NIL) { |
grx_close(); |
perror("Could not create task <wolf>"); |
sys_abort(1); |
} |
task_activate(pidl); |
} |
if ((c == 'c') && (num_c == 0)) { /*se il caccaiatore è già stato creato non crearne altri*/ |
hard_task_default_model(m); |
hard_task_def_ctrl_jet (m); |
hard_task_def_arg (m, (void *)i); |
hard_task_def_wcet (m, hunt_wcet); |
hard_task_def_mit (m, hunt_period); |
hard_task_def_group (m, HUNTGROUP); |
hard_task_def_usemath (m); |
pidc = task_create("cacciatore", cacciatore, &m, NULL); |
if (pidc == NIL) { |
grx_close(); |
perror("Could not create task <cacciatore>"); |
sys_abort(1); |
} |
task_activate(pidc); |
} |
c = keyb_getch(BLOCK); |
} while (c != ESC); |
sys_end(); |
return 0; |
} |
/*--------------------------------------------------------------*/ |
/unsupported/trunk/arezzo/2004/lupo/initfile.c |
---|
0,0 → 1,120 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@gandalf.sssup.it> |
* (see the web pages for full authors list) |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/* |
------------ |
CVS : $Id: initfile.c,v 1.1 2004-08-05 11:34:36 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-08-05 11:34:36 $ |
------------ |
System initialization file |
This file contains the 2 functions needed to initialize the system. |
These functions register the following levels: |
an EDF (Earliest Deadline First) level |
a RR (Round Robin) level |
a CBS (Costant Bandwidth Server) level |
a Dummy level |
It can accept these task models: |
HARD_TASK_MODEL (wcet+mit) at level 0 |
SOFT_TASK_MODEL (met, period) at level 1 |
NRT_TASK_MODEL at level 2 |
This file is similar to the configuration of kernel/init/hartik3.c |
TICK is set to 0 (one-shot timer is used) |
*/ |
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
#include "kernel/kern.h" |
#include "modules/edf.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 "drivers/keyb.h" |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
EDF_register_level(EDF_ENABLE_ALL); |
CBS_register_level(CBS_ENABLE_ALL, 0); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
CABS_register_module(); |
return TICK; |
} |
TASK __init__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
keyb_def_ctrlC(kparms, NULL); |
keyb_def_map(kparms,itaMap); |
KEYB_init(&kparms); |
__call_main__(mb); |
return (void *)0; |
} |
/unsupported/trunk/arezzo/2004/lupo/Relazione_RTOS.pdf |
---|
0,0 → 1,3447 |
%PDF-1.3 |
%Çì¢ |
6 0 obj |
<</Length 7 0 R/Filter /FlateDecode>> |
stream |
+| 'éÄL8Ì]yßÖ,ájS×Àî |
+`eMáY |
+ÎÝdIÓKÏ*æ à`µæߦbÿEògggRlÚ }x¢H¶ð¼Ù |
+ßA3pS ¶OÀç·õ¿û¢9BÌEäpw»T Ú¬Ìã6Fý´¯» ¬f©ØIp~Qd¨NÍ>Å Ú#ﺰõH$Ü**·V)P#å KÃwN¬({°ÑF4+¨îÚr0:Äè¹fØ!ι*útT:´"Åmä° ÞÊLGJb÷YlÌô±õâì']ÑÇ&pÍô:³uä^Ñy3ÆòDL¥ªKq%úbcXóo5Ü.ÿe $&:fÙ:«8òr5âz¹Ý)ãðQÑdçÏw@fÏ<KºØzOݧQ%ò½[w㥰Êdbµ`8¤³äFk^Õ¶ïÇ5l§ðh*ìû8_{¼v¿¾ª¤weR®8³¤åÐ Ëäé`Õ |
+0ÑëiFÐÎ |
+ (;á0Á¶ûÂHÀ¢@õ':*°,Ú bGÛÇ¢»ö |
+Û0#FHü÷@ïq¸ê1 ;u5mpUËØ@}ibùÊ0 |
+bÉæÊm ª/¡ëû°Å'Ex¨tÀ²0ûЦ5xÐOeÕ+ÓõíÊP¯ |
+Ø1¶Y)Á |
+à¶æ.k8²dÉ9dü\eÚ[>ÍgDLíoê'$vîÊÔ?ÌIº;am9J}\¡® |
+L˱«¸Â~ø¸Z:cÜ ôæ±ß]Í°2¹34óî'µýkJC~QÔîáÞ |
+ª3ù»òhI]¤wÜU qvÏ©Øä]3¦ã ¢´ÊM¸wÎÒº2ð&³Åü yZn6iêò/>'ie¤¬ôÐëÿËendstream |
+endobj |
+7 0 obj |
+2665 |
+endobj |
+202 0 obj |
+<</Length 203 0 R/Filter /FlateDecode>> |
+stream |
+x}XßOÙúÈCûbiÄ<Xëñ=Ø^ÇÂÅL£+mÙmÇ?Û´²ZgËnemUì¦ÊµbM·mÚ4ýý7õ;çÞV<ïÜ{î9ßù¾ïÞÖDbzf"AêóýÆHk¤51ÃÏ÷ïGâùòõ`èý3£g&CÇåÆÈäa¦ÛIo'¢înÖõ¢å7<a7K®ÍYvßôüRÁõgç?î$bb4½mÙÉ9wcòê¢^u®¹ölaÖݹQ>2®`@ÂKôârþ³üYG/¤¢nÞLu¹|sdj& ðEb¢üÁÈ$~¯ÇWm±½ä,9tD/×3³óKN²PÉÓÓ |
+&GkE¬û¯ÄÜaI×OGÒQÏæñE7{Ë]z¿wÅè¬ÅJlv^7-+õÒ|îµlÃÔ3¡Hkè·Ô)66æÀc¢ýûÉ[ÆîL7Ä}LñD»zL½3ÌY±õg_Ö>ZÄñYI0ïxz®¤#4[ÂFjáÌØz¢5<«ªÌ}â½ TDæ |
+È|A¨Â\!û6¨MYÎ%<|î>¿ÄGÿ¸ÏyÒËIÇjó2fôåöúÉ·5dò×s[·å5Q漬ñ{ó̹m®6¶jkn OµæÙtÓãÚ-`t0¼fEpaÙ -\C³HBG¤½åcO÷fÎÜ»Xº´d»`ië×7?¢e Ò'u©¢àíUÞ5Êj£Ûò8^H¢ ~%¬÷1¦·gï¨.sKØÓ£ë.²É«:Þ&óP×ÚEðxóåÇj/£qÀ¨°ÿævCßõ+Ô<È6¼÷E¼ü5´¬gÉXñ;1«ýæ¶Ñ#%ÆÖð±ý.!~ ZS£ÄaójÔm#®U«-ÊçFz@½±lÞjd3FJ¥q`¦J£&dêhPºåNEc Ùëô#õ¯HÉþ¼ùÞÂO67.Óód*÷¿4RjWO÷±Ç¿¨?e ï@Vz[ì@É(6eç1 µÆz{ß0oÜ{¸õÜàU{ûØAWs¤©D*Ì&E¡ª^ÑjcZ3, VZ3OÌaü31È$Ï |
+£³è$b'³ÐiËU´$cå0@ÑÚ Tà mzX%âZ"¨s5K|5È-SXN9Åpæ.ÝDc9ݶu04¦W¿â©à±©Ò÷8lê9÷5ÿ¯ÞóÐ)¿³(ö¨è_Ï:TLë\§9»NÞW{ ÍÙ6¾ öU-Ü໹H} Ne¼*ÊÇ~oómº¹YXïJÔ¹(XJéÐÖ:tÛµ³mhËGjµ6 |
+SÆÔ£ |
+jCóój»uùrØ[ãÜë0úObH>l ¢XPQÜuÌ®hC.]JÿpQeÛ¹W2¦¹Úzêo+`PkÓÆ´«hî¢áÐGØ×òaúIrTÑkRëÌ+S£~D&ëgÏl« |
+»d·Îv'Cà)wñëÛ¡§ó×Ç-L2FÐ$¦×®°Cöjþ@4P CS)ÐqîµØ@8=â-^àÖ5j1¬Ø³ÊXѧ¡âÑ¡¦/¸È1²_bèSjrÊƤÀÏj£g5ÏäÜ7pSf":¸?t_yßØßøo^¼ÊOn\Ö~¢A0únnáì_ÂsótûîÒÞÙí®(5½ õo@Ôá¢d·Ñ1'z¼ÃNzîá @FföÂ碢#t-T2à!çvwÆH¤b,ÒB<É/±DQlR·ùàÔSËDË&¯HG +ÖôYx+nlÈj 3,!Ó³1©G(NLvI |
+yA¨äPNGne¿¾jõ(}8=Ñ|¬wIÊ%³èìW]Bg¯¡å"J!§(ðèv¬pUf?¬ ©ºXé nÃ#}N |
+K^LahzK%ѬïRCòóäIÐ@)Ü |
+«H7Éy^J¬Ñöõ¨*øFÇ0øgmÀ(õWÐ5rr^Xv2 ²Ôûoü/idOó=¢ßõŽäÚäTøl |
+ÙÀJì Øm åItu!ä×Ù«ÈñvJ[ßRSn úzføAis[t/ÐHÎÛm±«²O¿WõÌÕÛäòõUýõÍ_S÷õ@ýqx0°I¨ý«§ãPE6&̹I*ð°`«xÜá±¼jùòFÈÒ.2¤ïýýýð#Øà~0>úç¿Þ[x;þoûͥ˱·ãohLüG93Dêtí*/]éÆ5=màýdfZð¥ëxø ³©ô4N7ÔõìïV ØÛÿéý7eÙwòÿÛþiörú÷ba"jiìûv¦§¨È{eÖkϹtSeçdBÁ®R{@ãÛ`íÔ¾XUp«ÜöøN´ÝØOºÕ¨$§Îýº94åì?¦'WÊ¥úû?Ï7Ðendstream |
+endobj |
+203 0 obj |
+2941 |
+endobj |
+227 0 obj |
+<</Length 228 0 R/Filter /FlateDecode>> |
+stream |
+L»¤ Û®;ÜkØÜÇx-®kr)Pªô X»Ê×iÚhKî¦s(C¬Xu0¥Î¹Ówg ç¸T¬õM±u¶`®òÔBëçÏëÔÌ.Én j×=5iQÈ$6j£ªgìÁP~}'9¿ßÁp÷Eõ¡ÎÊvϧÚTôR+ââûþÛ_<8þõâ»ûV®ÄøoÿÊ_ß-T³Ý+!øX[±ÄP¾ <¡yßØíÕ°oI[±{Ìâ #°v]Y%NB¨Üã |
+ äÅs÷]kÐJó@Ü^½{n(ÁP¦UVZͤºJ¦ô¹÷Ìdú¥dO=Z3ö>äãÊ$à`3¬Î_;\ÿþ½÷#¼¼©bHwZ¤MÛ0 |
+/LÊÈÉ}á%z»'éÉ"Ä`Àìs_»/ºKõÝê<*æ)¡Ä¦k"ÃVle ¯Y½nàx's&Á8QÝéÔ|¾Ê³åq ¹~Ä ^!0P'/ï©Ùs·ÆcåѬI¯#'B,egzNMãÚ.,¼±é´ÛáN @éW×/¾ù*ñN*Qgìlì£uSõºX |
+X£¾\4cWy§ìê|GFTtÖÄ«ÎsÞÐ53%×îÊÝÊ]ëtá`êcúr#ø ÿSÀùêòoÄn&ÑPÞãËîÖƤÁºbµ)¬#R;S"jç°Ú!úÌÛÍ7[cNÈ+b>2¤Âýváµp#DßpcÏwxd®_¶A|j. æªÁ>^#gÞ§¬oÀù4%ÆMd³GKÅKúÞ¦ã5®uÖÁ Û³AÖ×yh»9<"ýP)!2'¥¬õçÍ&Ó¼-T* lÆb&òó69YènDö¡¬ø´NëÞo"±¼C"tÿ°yD[býÙ® -"'qÊbÝ)üéùyûjQøÔí,é5ק¸"d-{?üþ'²¥·üäæwp8ðÃ'gþå øij4[Oé¤áÆ8ÎOON>9:ts Bá°Fê´þZlÏ%XÞ±Ü!âÇÇè°O6dr@¿¬-¾³l»$ eÄ+|õÑCB ·I |
+7;AåÍW +(àdæ>ýê bÄù ïÎìDTrDY'G©PÈ´6ÑL? ,=ëRΫe® èÒR+ßÌÑçoh[¶¶endstream |
+endobj |
+228 0 obj |
+1471 |
+endobj |
+5 0 obj |
+<</Type/Page/MediaBox [0 0 612 792] |
+/Rotate 0/Parent 3 0 R |
+/Resources<</ProcSet[/PDF /ImageB /Text] |
+/ExtGState 199 0 R |
+/Font 200 0 R |
+>> |
+/Contents 6 0 R |
+>> |
+endobj |
+201 0 obj |
+<</Type/Page/MediaBox [0 0 612 792] |
+/Rotate 0/Parent 3 0 R |
+/Resources<</ProcSet[/PDF /ImageB /Text] |
+/Font 225 0 R |
+>> |
+/Contents 202 0 R |
+>> |
+endobj |
+226 0 obj |
+<</Type/Page/MediaBox [0 0 612 792] |
+/Rotate 0/Parent 3 0 R |
+/Resources<</ProcSet[/PDF /ImageB /Text] |
+/Font 234 0 R |
+>> |
+/Contents 227 0 R |
+>> |
+endobj |
+3 0 obj |
+<< /Type /Pages /Kids [ |
+5 0 R |
+201 0 R |
+226 0 R |
+] /Count 3 |
+>> |
+endobj |
+1 0 obj |
+<</Type /Catalog /Pages 3 0 R |
+>> |
+endobj |
+4 0 obj |
+<</Type/ExtGState/Name/R4/TR/Identity/OPM 1/SM 0.02>> |
+endobj |
+10 0 obj |
+<</Length 261 >>stream |
+0 0 0 0 112 121 d1 |
+112 0 0 121 0 0 cm |
+BI |
+/IM true |
+/W 112 |
+/H 121 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 112>> |
+ì/ÿÚÿÚÿÚÿ |
+EI |
+endstream |
+endobj |
+11 0 obj |
+<</Length 225 >>stream |
+0 0 0 3 105 121 d1 |
+105 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 105 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 105>> |
+ID &¡U/ÿþChê |
+¹ÿÿÿÿÿÿÞ¿ïÂÿÿÿÿÿÿï_ÿÿþ¿ÿÿýëÞ½öô¸zðyÍy |
+/ÿÿü @ |
+EI |
+endstream |
+endobj |
+12 0 obj |
+<</Length 17>> |
+stream |
+109 0 0 0 0 0 d1 |
+endstream |
+endobj |
+13 0 obj |
+<</Length 17>> |
+stream |
+116 0 0 0 0 0 d1 |
+endstream |
+endobj |
+14 0 obj |
+<</Length 248 >>stream |
+0 0 0 3 96 121 d1 |
+96 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 96 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 96>> |
+n ª#A¯ü?¿ûûÿïáÿ÷ÿÿ¿ÿÿÿÿøûÿÿÿù»ÿ¿ÿÿÿÿk5ÿþ¿ÿÿ¯þ¾×Áxÿÿÿ ¿Áýü?þþÿÿÿþÿÿÿä_ÿÿÿÿéÿÿÿÿ¯ÿÿÿ ÿë×ÿý}}|/þ¾ |
+ATf!®¢"¿ø |
+EI |
+endstream |
+endobj |
+15 0 obj |
+<</Length 17>> |
+stream |
+120 0 0 0 0 0 d1 |
+endstream |
+endobj |
+16 0 obj |
+<</Length 282 >>stream |
+0 0 0 3 102 121 d1 |
+102 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 102 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 102>> |
+ID #@np¿¯É©±Á¸`ÿ´¿á¯×ÿ__ÿð¿úúÿÿ£¢úÿþ_×ÿé~¿ÿ¥ýþü/ÿé_¯õúÿ_¯ð¿ý~¿×ëý~¿×ëøAÿ_¥ÿúþÿõúÿð¿¥ÿý~ÿëú_Âÿü%úÿþõÿú_¯ÿáýþéþ¿¥ÿü/Â_ÿ¯éÿ_¥ÿú§Ä/¯ÓëðÂA´i|/ð |
+EI |
+endstream |
+endobj |
+17 0 obj |
+<</Length 17>> |
+stream |
+111 0 0 0 0 0 d1 |
+endstream |
+endobj |
+18 0 obj |
+<</Length 17>> |
+stream |
+117 0 0 0 0 0 d1 |
+endstream |
+endobj |
+19 0 obj |
+<</Length 185 >>stream |
+0 0 0 3 42 121 d1 |
+42 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 42 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 42>> |
+ID ù5 |
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá< q#A¿À @ |
+EI |
+endstream |
+endobj |
+20 0 obj |
+<</Length 17>> |
+stream |
+119 0 0 0 0 0 d1 |
+endstream |
+endobj |
+21 0 obj |
+<</Length 210 >>stream |
+0 0 0 3 84 121 d1 |
+84 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 84 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 84>> |
+ID ;©ÿP°Íá¢B0àßþÁýýýÿ÷ðÿûÿÿ°ÿÿßÿÿÿßÿÿÿÿþøÿÿÿÿÈ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþð¸D¸ßü @ |
+EI |
+endstream |
+endobj |
+22 0 obj |
+<</Length 17>> |
+stream |
+126 0 0 0 0 0 d1 |
+endstream |
+endobj |
+23 0 obj |
+<</Length 258 >>stream |
+0 0 0 3 102 124 d1 |
+102 0 0 121 0 3 cm |
+BI |
+/IM true |
+/W 102 |
+/H 121 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 102>> |
+©Ð<#PPðððô[ÂMé7Ð}ý7¬=_«÷ÂAþõúo_þýëûÿÿ^°ÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý?ÿôÿÂa8 j#A¿ÿð |
+EI |
+endstream |
+endobj |
+24 0 obj |
+<</Length 17>> |
+stream |
+101 0 0 0 0 0 d1 |
+endstream |
+endobj |
+25 0 obj |
+<</Length 235 >>stream |
+0 0 0 3 92 121 d1 |
+92 0 0 118 0 3 cm |
+BI |
+/IM true |
+/W 92 |
+/H 118 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 92>> |
+ûÃû~ûû÷÷ø~ßÿýÿïÿßÿÿÿÿÿÿëÿ_þ¿ÿ×ë×á}z^×Òúðx% È4 |
+w c&@Ò |
+EI |
+endstream |
+endobj |
+26 0 obj |
+<</Length 17>> |
+stream |
+121 0 0 0 0 0 d1 |
+endstream |
+endobj |
+27 0 obj |
+<</Length 302 >>stream |
+0 0 0 1 109 124 d1 |
+109 0 0 123 0 1 cm |
+BI |
+/IM true |
+/W 109 |
+/H 123 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 109>> |
+ ·´¶ÒàÁpa`Á,<,aÃ:,jL¾° |
+EI |
+endstream |
+endobj |
+28 0 obj |
+<</Length 17>> |
+stream |
+110 0 0 0 0 0 d1 |
+endstream |
+endobj |
+29 0 obj |
+<</Length 188 >>stream |
+0 0 0 -2 15 121 d1 |
+15 0 0 123 0 -2 cm |
+BI |
+/IM true |
+/W 15 |
+/H 123 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 15>> |
+aø |
+EI |
+endstream |
+endobj |
+30 0 obj |
+<</Length 16>> |
+stream |
+44 0 0 0 0 0 d1 |
+endstream |
+endobj |
+31 0 obj |
+<</Length 218 >>stream |
+0 0 0 0 47 82 d1 |
+47 0 0 82 0 0 cm |
+BI |
+/IM true |
+/W 47 |
+/H 82 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 47>> |
+ID & ¹@hð0H#1°ôx0o§ÂMôÞ¿ |
+ôôýSïï÷ûÿÿû]®?ÿý~¿×þG{ Ú_ýv½¥ÌFcÞ!yüÿÿÿÿÿÿÿͯ|ûá÷ß(|ð(ð@ð |
+EI |
+endstream |
+endobj |
+32 0 obj |
+<</Length 178 >>stream |
+0 0 0 6 37 81 d1 |
+37 0 0 75 0 6 cm |
+BI |
+/IM true |
+/W 37 |
+/H 75 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 37>> |
+ID &¡°Ð¼øO¤ÃëÔ?ÿt¾ÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿÿÿ¢òjød0"¾ÿûïÿøÿßÿÿà |
+EI |
+endstream |
+endobj |
+33 0 obj |
+<</Length 16>> |
+stream |
+56 0 0 0 0 0 d1 |
+endstream |
+endobj |
+34 0 obj |
+<</Length 194 >>stream |
+0 0 0 -4 57 79 d1 |
+57 0 0 83 0 -4 cm |
+BI |
+/IM true |
+/W 57 |
+/H 83 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 57>> |
+ID $Ëÿ&¢Úkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿ¿ÿûý.ßÍ6¿íÂöøü^8gãÿÿÿÿÿÿÿÿÿÿúá~?äÔL @ |
+EI |
+endstream |
+endobj |
+35 0 obj |
+<</Length 16>> |
+stream |
+46 0 0 0 0 0 d1 |
+endstream |
+endobj |
+36 0 obj |
+<</Length 190 >>stream |
+0 0 0 -3 48 82 d1 |
+48 0 0 85 0 -3 cm |
+BI |
+/IM true |
+/W 48 |
+/H 85 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 48>> |
+ID & äà^B'ü#ä=`ðzMð½'訽pû~ÿü7ÿÿÿµíxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Óü¿à |
+EI |
+endstream |
+endobj |
+37 0 obj |
+<</Length 17>> |
+stream |
+106 0 0 0 0 0 d1 |
+endstream |
+endobj |
+38 0 obj |
+<</Length 187 >>stream |
+0 0 0 26 57 81 d1 |
+57 0 0 55 0 26 cm |
+BI |
+/IM true |
+/W 57 |
+/H 55 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 57>> |
+ID &¡°CAa<ÖÂ3à·Ð oíÊOZ±]×ÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýW |
+¿ÆAëÿù5A½ |
+EI |
+endstream |
+endobj |
+39 0 obj |
+<</Length 16>> |
+stream |
+58 0 0 0 0 0 d1 |
+endstream |
+endobj |
+40 0 obj |
+<</Length 163 >>stream |
+0 0 0 -4 26 79 d1 |
+26 0 0 83 0 -4 cm |
+BI |
+/IM true |
+/W 26 |
+/H 83 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 26>> |
+ID òj)@íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¸_ù5 |
+EI |
+endstream |
+endobj |
+41 0 obj |
+<</Length 16>> |
+stream |
+64 0 0 0 0 0 d1 |
+endstream |
+endobj |
+42 0 obj |
+<</Length 209 >>stream |
+0 0 0 27 56 103 d1 |
+56 0 0 76 0 27 cm |
+BI |
+/IM true |
+/W 56 |
+/H 76 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 56>> |
+ÿà |
+EI |
+endstream |
+endobj |
+43 0 obj |
+<</Length 16>> |
+stream |
+33 0 0 0 0 0 d1 |
+endstream |
+endobj |
+44 0 obj |
+<</Length 210 >>stream |
+0 0 0 0 47 79 d1 |
+47 0 0 79 0 0 cm |
+BI |
+/IM true |
+/W 47 |
+/H 79 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 47>> |
+ID &¨¿ü=÷ßÿàföÃ{ûo°þü7íß{}ï¶ßoÞÃÛÃì=¾ûÛß>ÿo½öÿûþæOý7ÿÿ×úõþÌ «°¿ï]¯ÝÚXzØim¹ ½X0°ÂÈ |
+EI |
+endstream |
+endobj |
+45 0 obj |
+<</Length 17>> |
+stream |
+104 0 0 0 0 0 d1 |
+endstream |
+endobj |
+46 0 obj |
+<</Length 210 >>stream |
+0 0 0 0 49 82 d1 |
+49 0 0 82 0 0 cm |
+BI |
+/IM true |
+/W 49 |
+/H 82 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 49>> |
+ID &¡ 3È.ðÈ=ðX=&ôéøOáo ÿÿ¤Ãÿ[ÿÿõ¾ÿÿÿýoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿ¶ÿÿþõþð»\=Ø]õÚí¥ÚàÁ±Xad4 |
+EI |
+endstream |
+endobj |
+47 0 obj |
+<</Length 197 >>stream |
+0 0 0 -2 51 79 d1 |
+51 0 0 81 0 -2 cm |
+BI |
+/IM true |
+/W 51 |
+/H 81 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 51>> |
+ID &¡³ÿÍÓÿÿÿÿÿÿüHÀß³@×ýûûûûÃûýýûûûøaýÿíûýûýûÿíýÿíûûøaýÿíÿì{ÿïýÿßø |
+EI |
+endstream |
+endobj |
+48 0 obj |
+<</Length 180 >>stream |
+0 0 0 0 68 69 d1 |
+68 0 0 69 0 0 cm |
+BI |
+/IM true |
+/W 68 |
+/H 69 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 68>> |
+ûÃ~ÿûýÿÿÿÿÿÿ×þ¿^¿^^ÄUAAJgÀ @ |
+EI |
+endstream |
+endobj |
+49 0 obj |
+<</Length 161 >>stream |
+0 0 0 24 42 69 d1 |
+42 0 0 45 0 24 cm |
+BI |
+/IM true |
+/W 42 |
+/H 45 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 42>> |
+ID &ÿɨÈ`ßÿÿÿÿÿÿÿÿÿÿÿä<~h?ÿ§ÞFbÖPgÅü @ |
+EI |
+endstream |
+endobj |
+50 0 obj |
+<</Length 16>> |
+stream |
+77 0 0 0 0 0 d1 |
+endstream |
+endobj |
+51 0 obj |
+<</Length 180 >>stream |
+0 0 0 24 50 69 d1 |
+50 0 0 45 0 24 cm |
+BI |
+/IM true |
+/W 50 |
+/H 45 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 50>> |
+ID & AÐp ðè+áá&ôÖ õ¿ú}oÿã¿ÿÿÿù5õÿû×kþõþÃAm¥Úá a[!ø3 à |
+EI |
+endstream |
+endobj |
+52 0 obj |
+<</Length 16>> |
+stream |
+48 0 0 0 0 0 d1 |
+endstream |
+endobj |
+53 0 obj |
+<</Length 227 >>stream |
+0 0 0 23 53 90 d1 |
+53 0 0 67 0 23 cm |
+BI |
+/IM true |
+/W 53 |
+/H 67 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 53>> |
+ID & ¹HSC¢@hzéúxïá?þ°ýd×ʶ+|5Âéh.°cè5×ò0øÃEø=Æ· A7ÿOþ·ÿÿÿÿÿïFïþÕzðÔ-±:Áød!düA |
+EI |
+endstream |
+endobj |
+54 0 obj |
+<</Length 16>> |
+stream |
+57 0 0 0 0 0 d1 |
+endstream |
+endobj |
+55 0 obj |
+<</Length 183 >>stream |
+0 0 0 24 45 69 d1 |
+45 0 0 45 0 24 cm |
+BI |
+/IM true |
+/W 45 |
+/H 45 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 45>> |
+`ÂÁü @ |
+EI |
+endstream |
+endobj |
+56 0 obj |
+<</Length 171 >>stream |
+0 0 0 5 36 69 d1 |
+36 0 0 64 0 5 cm |
+BI |
+/IM true |
+/W 36 |
+/H 64 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 36>> |
+ID & Á@²O èo§÷ÂPÿßÿÿÿÿÿ\×ÿÿÿÿÿÿÿÿÿüI;òjÿtàûþÿ¿ïÿÿÿÿø |
+EI |
+endstream |
+endobj |
+57 0 obj |
+<</Length 16>> |
+stream |
+52 0 0 0 0 0 d1 |
+endstream |
+endobj |
+58 0 obj |
+<</Length 196 >>stream |
+0 0 0 24 49 89 d1 |
+49 0 0 65 0 24 cm |
+BI |
+/IM true |
+/W 49 |
+/H 65 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 49>> |
+ID Ã/ü85Úÿÿÿÿÿÿ"Óÿ.¿G?Áñÿ¦øO÷÷Óÿáÿÿ}ÿÿÿÿÿÿþ¾¿ÿáx_ûKþvÄÑ4¶[ÂÁRj8`¿ |
+EI |
+endstream |
+endobj |
+59 0 obj |
+<</Length 17>> |
+stream |
+105 0 0 0 0 0 d1 |
+endstream |
+endobj |
+60 0 obj |
+<</Length 182 >>stream |
+0 0 0 23 39 71 d1 |
+39 0 0 48 0 23 cm |
+BI |
+/IM true |
+/W 39 |
+/H 48 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 39>> |
+ÿòj¾ÿ_á×ï_í¥Úíûh,=a a_' |
+EI |
+endstream |
+endobj |
+61 0 obj |
+<</Length 162 >>stream |
+0 0 0 24 34 69 d1 |
+34 0 0 45 0 24 cm |
+BI |
+/IM true |
+/W 34 |
+/H 45 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 34>> |
+ID *Äü8kÿÿÿÿÿÿÿÿÿÿÿ¿ÿþ |
+`ÅI©Cø |
+EI |
+endstream |
+endobj |
+62 0 obj |
+<</Length 155 >>stream |
+0 0 0 2 22 69 d1 |
+22 0 0 67 0 2 cm |
+BI |
+/IM true |
+/W 22 |
+/H 67 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 22>> |
+ID òjDåkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÿQÿÿÿÈó=?ÿÿý¬0 |
+EI |
+endstream |
+endobj |
+63 0 obj |
+<</Length 16>> |
+stream |
+72 0 0 0 0 0 d1 |
+endstream |
+endobj |
+64 0 obj |
+<</Length 156 >>stream |
+0 0 0 -1 22 69 d1 |
+22 0 0 70 0 -1 cm |
+BI |
+/IM true |
+/W 22 |
+/H 70 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 22>> |
+ID òjDåkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð±ÿɨð |
+EI |
+endstream |
+endobj |
+65 0 obj |
+<</Length 16>> |
+stream |
+28 0 0 0 0 0 d1 |
+endstream |
+endobj |
+66 0 obj |
+<</Length 179 >>stream |
+0 0 0 23 38 71 d1 |
+38 0 0 48 0 23 cm |
+BI |
+/IM true |
+/W 38 |
+/H 48 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 38>> |
+ID & ¹8jø¡áoHxA7Ð}&õº_}uþ!ÿÿÉ®ÿ#½=´ÿßÛÿïÛ|0Úݬ0Á¿N @ |
+EI |
+endstream |
+endobj |
+67 0 obj |
+<</Length 16>> |
+stream |
+62 0 0 0 0 0 d1 |
+endstream |
+endobj |
+68 0 obj |
+<</Length 184 >>stream |
+0 0 0 23 45 71 d1 |
+45 0 0 48 0 23 cm |
+BI |
+/IM true |
+/W 45 |
+/H 48 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 45>> |
+ID & Á@1ò3ÌPõzMôúA¾Xzß ÿÂßOüwÿÿÿÿ&«_ÿþKÿö_ïm.Âí¥ÒÞ°Á!~( |
+EI |
+endstream |
+endobj |
+69 0 obj |
+<</Length 16>> |
+stream |
+50 0 0 0 0 0 d1 |
+endstream |
+endobj |
+70 0 obj |
+<</Length 186 >>stream |
+0 0 0 23 32 71 d1 |
+32 0 0 48 0 23 cm |
+BI |
+/IM true |
+/W 32 |
+/H 48 |
+/BPC 1 |
+/D[1 |
+0] |
+/F/CCF |
+/DP<</K -1 |
+/Columns 32>> |
+Á7®¾¿Â_PU È/®BÂX%ÂÒÐZò8 PD3Åô¿òkþÂö»k¿°apboÿN< |