Subversion Repositories HelenOS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 4376 → Rev 4377

/branches/tracing/boot/boot.config
File deleted
/branches/tracing/boot/tools/ppc32/debug.c
File deleted
/branches/tracing/boot/tools/ppc32/font-8x16.c
File deleted
/branches/tracing/boot/tools/ppc32/Makefile
File deleted
/branches/tracing/boot/tools/ppc32/font-8x16.h
File deleted
/branches/tracing/boot/tools/ia32/gen_vga323.c
1,8 → 1,36
/*
* Copyright (c) 2008 Martin Decky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <stdio.h>
 
#define RED(i) ((i >> 5) & ((1 << 3) - 1))
#define GREEN(i) ((i >> 3) & ((1 << 2) - 1))
#define BLUE(i) (i & ((1 << 3) - 1))
#define RED(i) (((i) >> 5) & ((1 << 3) - 1))
#define GREEN(i) (((i) >> 3) & ((1 << 2) - 1))
#define BLUE(i) ((i) & ((1 << 3) - 1))
 
int main(int argc, char *argv[]) {
unsigned int i;
/branches/tracing/boot/genarch/ofw.h
74,7 → 74,7
typedef struct {
void *addr;
uint32_t size;
} keyboard_t;
} macio_t;
 
typedef struct {
uint32_t info;
122,8 → 122,8
extern int ofw_map(const void *phys, const void *virt, const int size, const int mode);
extern int ofw_memmap(memmap_t *map);
extern int ofw_screen(screen_t *screen);
extern int ofw_keyboard(keyboard_t *keyboard);
extern int setup_palette(void);
extern int ofw_macio(macio_t *macio);
extern int ofw_setup_palette(void);
extern void ofw_quiesce(void);
 
#endif
/branches/tracing/boot/genarch/ofw_tree.c
42,10 → 42,11
 
static ofw_tree_property_t *ofw_tree_properties_alloc(unsigned count)
{
return balloc(count * sizeof(ofw_tree_property_t), sizeof(ofw_tree_property_t));
return balloc(count * sizeof(ofw_tree_property_t),
sizeof(ofw_tree_property_t));
}
 
static void * ofw_tree_space_alloc(size_t size)
static void *ofw_tree_space_alloc(size_t size)
{
char *addr;
 
65,23 → 66,26
return addr;
}
 
/** Transfer information from one OpenFirmware node into its memory representation.
/** Transfer information from one OpenFirmware node into its memory
* representation.
*
* Transfer entire information from the OpenFirmware device tree 'current' node to
* its memory representation in 'current_node'. This function recursively processes
* all node's children. Node's peers are processed iteratively in order to prevent
* stack from overflowing.
* Transfer entire information from the OpenFirmware device tree 'current' node
* to its memory representation in 'current_node'. This function recursively
* processes all node's children. Node's peers are processed iteratively in
* order to prevent stack from overflowing.
*
* @param current_node Pointer to uninitialized ofw_tree_node structure that will
* become the memory represenation of 'current'.
* @param parent_node Parent ofw_tree_node structure or NULL in case of root node.
* @param current_node Pointer to uninitialized ofw_tree_node structure that
* will become the memory represenation of 'current'.
* @param parent_node Parent ofw_tree_node structure or NULL in case of root
* node.
* @param current OpenFirmware phandle to the current device tree node.
*/
static void ofw_tree_node_process(ofw_tree_node_t *current_node,
ofw_tree_node_t *parent_node, phandle current)
ofw_tree_node_t *parent_node, phandle current)
{
static char path[MAX_PATH_LEN+1];
static char path[MAX_PATH_LEN + 1];
static char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
static char name2[OFW_TREE_PROPERTY_MAX_NAMELEN];
phandle peer;
phandle child;
size_t len;
130,7 → 134,8
child_node = ofw_tree_node_alloc();
if (child_node) {
ofw_tree_node_process(child_node, current_node, child);
ofw_tree_node_process(child_node, current_node,
child);
current_node->child = child_node;
}
}
139,9 → 144,11
* Count properties.
*/
name[0] = '\0';
while (ofw_next_property(current, name, name) == 1)
while (ofw_next_property(current, name, name2) == 1) {
current_node->properties++;
memcpy(name, name2, OFW_TREE_PROPERTY_MAX_NAMELEN);
}
 
if (!current_node->properties)
return;
148,20 → 155,23
/*
* Copy properties.
*/
current_node->property = ofw_tree_properties_alloc(current_node->properties);
current_node->property =
ofw_tree_properties_alloc(current_node->properties);
if (!current_node->property)
return;
name[0] = '\0';
for (i = 0; ofw_next_property(current, name, name) == 1; i++) {
for (i = 0; ofw_next_property(current, name, name2) == 1; i++) {
size_t size;
if (i == current_node->properties)
break;
memcpy(name, name2, OFW_TREE_PROPERTY_MAX_NAMELEN);
memcpy(current_node->property[i].name, name,
OFW_TREE_PROPERTY_MAX_NAMELEN);
current_node->property[i].name[OFW_TREE_PROPERTY_MAX_NAMELEN] = '\0';
OFW_TREE_PROPERTY_MAX_NAMELEN);
current_node->property[i].name[
OFW_TREE_PROPERTY_MAX_NAMELEN] = '\0';
 
size = ofw_get_proplen(current, name);
current_node->property[i].size = size;
173,7 → 183,8
/*
* Copy property value to memory node.
*/
(void) ofw_get_property(current, name, buf, size);
(void) ofw_get_property(current, name,
buf, size);
}
} else {
current_node->property[i].value = NULL;
180,7 → 191,8
}
}
 
current_node->properties = i; /* Just in case we ran out of memory. */
/* Just in case we ran out of memory. */
current_node->properties = i;
 
/*
* Iteratively process the next peer node.
213,7 → 225,7
 
/** Construct memory representation of OpenFirmware device tree.
*
* @return NULL on failure or pointer to the root node.
* @return NULL on failure or pointer to the root node.
*/
ofw_tree_node_t *ofw_tree_build(void)
{
234,8 → 246,8
if (ssm_node != -1) {
ssm = ofw_tree_node_alloc();
if (ssm) {
ofw_tree_node_process(
ssm, root, ofw_find_device("/ssm@0,0"));
ofw_tree_node_process(ssm, root,
ofw_find_device("/ssm@0,0"));
ssm->peer = root->child;
root->child = ssm;
}
/branches/tracing/boot/genarch/ofw.c
25,7 → 25,7
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <ofw.h>
#include <ofwarch.h>
#include <printf.h>
203,8 → 203,8
ofw_arg_t result[4];
int shift;
 
if (ofw_call("call-method", 3, 5, result, "translate", ofw_mmu,
virt) != 0) {
if (ofw_call("call-method", 4, 5, result, "translate", ofw_mmu,
virt, 0) != 0) {
puts("Error: MMU method translate() failed, halting.\n");
halt();
}
298,7 → 298,6
(sizeof(uintptr_t) / sizeof(uint32_t));
unsigned int sc = ofw_get_size_cells(ofw_memory) /
(sizeof(uintptr_t) / sizeof(uint32_t));
printf("address cells: %d, size cells: %d. ", ac, sc);
 
uintptr_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)];
int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf));
373,23 → 372,30
return true;
}
 
#define RED(i) (((i) >> 5) & ((1 << 3) - 1))
#define GREEN(i) (((i) >> 3) & ((1 << 2) - 1))
#define BLUE(i) ((i) & ((1 << 3) - 1))
#define CLIP(i) ((i) <= 255 ? (i) : 255)
 
 
/**
* Sets up the palette for the 8-bit color depth configuration so that the
* 3:2:3 color scheme can be used. Checks that setting the palette makes sense
* (appropriate nodes exist in the OBP tree and the color depth is not greater
* than 8).
* than 8).
*
* @return true if the palette has been set, false otherwise
* @return true if the palette has been set, false otherwise
*
*/
int setup_palette(void)
int ofw_setup_palette(void)
{
char device_name[BUF_SIZE];
/* resolve alias */
if (ofw_get_property(ofw_aliases, "screen", device_name,
sizeof(device_name)) <= 0)
sizeof(device_name)) <= 0)
return false;
 
/* for depth greater than 8 it makes no sense to set up the palette */
uint32_t depth;
phandle device = ofw_find_device(device_name);
404,15 → 410,12
ihandle screen = ofw_open(device_name);
if (screen == -1)
return false;
 
/* setup the palette so that the 3:2:3 scheme is usable */
/* setup the palette so that the (inverted) 3:2:3 scheme is usable */
unsigned int i;
for (i = 0; i < 256; i++)
if (ofw_call("call-method", 6, 1, NULL, "color!", screen,
i,
i << 5,
(i >> 3) << 6,
(i >> 5) << 5) != 0);
ofw_call("call-method", 6, 1, NULL, "color!", screen,
255 - i, CLIP(BLUE(i) * 37), GREEN(i) * 85, CLIP(RED(i) * 37));
return true;
}
 
/branches/tracing/boot/generic/align.h
26,7 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup generic
/** @addtogroup generic
* @{
*/
/** @file
/branches/tracing/boot/generic/printf.c
83,14 → 83,16
*/
static void print_number(const unative_t num, const unsigned int base)
{
int val = num;
char d[sizeof(unative_t) * 8 + 1]; /* this is good enough even for base == 2 */
int val = num;
 
/* This is enough even for base 2. */
char d[sizeof(unative_t) * 8 + 1];
int i = sizeof(unative_t) * 8 - 1;
 
do {
d[i--] = digits[val % base];
} while (val /= base);
 
d[sizeof(unative_t) * 8] = 0;
puts(&d[i + 1]);
}
156,89 → 158,89
int i = 0;
va_list ap;
char c;
 
va_start(ap, fmt);
 
while ((c = fmt[i++])) {
switch (c) {
/* control character */
 
/* control character */
case '%':
 
switch (c = fmt[i++]) {
 
/* percentile itself */
case '%':
break;
 
/*
* String and character conversions.
*/
case 's':
puts(va_arg(ap, char_ptr));
goto loop;
 
case 'c':
c = (char) va_arg(ap, int);
break;
 
/*
* Hexadecimal conversions with fixed width.
*/
case 'P':
puts("0x");
case 'p':
print_fixed_hex(va_arg(ap, unative_t),
sizeof(unative_t));
goto loop;
 
case 'Q':
puts("0x");
case 'q':
print_fixed_hex(va_arg(ap, uint64_t), INT64);
goto loop;
 
case 'L':
puts("0x");
case 'l':
print_fixed_hex(va_arg(ap, unative_t), INT32);
goto loop;
 
case 'W':
puts("0x");
case 'w':
print_fixed_hex(va_arg(ap, unative_t), INT16);
goto loop;
 
case 'B':
puts("0x");
case 'b':
print_fixed_hex(va_arg(ap, unative_t), INT8);
goto loop;
 
/*
* Decimal and hexadecimal conversions.
*/
case 'd':
print_number(va_arg(ap, unative_t), 10);
goto loop;
switch (c = fmt[i++]) {
/* percentile itself */
case '%':
break;
/*
* String and character conversions.
*/
case 's':
puts(va_arg(ap, char_ptr));
goto loop;
case 'c':
c = (char) va_arg(ap, int);
break;
/*
* Hexadecimal conversions with fixed width.
*/
case 'P':
puts("0x");
case 'p':
print_fixed_hex(va_arg(ap, unative_t), sizeof(unative_t));
goto loop;
case 'Q':
puts("0x");
case 'q':
print_fixed_hex(va_arg(ap, uint64_t), INT64);
goto loop;
case 'L':
puts("0x");
case 'l':
print_fixed_hex(va_arg(ap, unative_t), INT32);
goto loop;
case 'W':
puts("0x");
case 'w':
print_fixed_hex(va_arg(ap, unative_t), INT16);
goto loop;
case 'B':
puts("0x");
case 'b':
print_fixed_hex(va_arg(ap, unative_t), INT8);
goto loop;
/*
* Decimal and hexadecimal conversions.
*/
case 'd':
print_number(va_arg(ap, unative_t), 10);
goto loop;
case 'X':
puts("0x");
case 'x':
print_number(va_arg(ap, unative_t), 16);
goto loop;
/*
* Bad formatting.
*/
default:
goto out;
case 'X':
puts("0x");
case 'x':
print_number(va_arg(ap, unative_t), 16);
goto loop;
/*
* Bad formatting.
*/
default:
goto out;
}
default:
write(&c, 1);
 
default:
write(&c, 1);
}
loop:
;
}
/branches/tracing/boot/generic/macros.h
0,0 → 1,53
/*
* Copyright (c) 2009 Martin Decky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup libc
* @{
*/
/** @file
*/
 
#ifndef BOOT_MACROS_H_
#define BOOT_MACROS_H_
 
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
 
#define SIZE2KB(size) ((size) >> 10)
#define SIZE2MB(size) ((size) >> 20)
 
#define KB2SIZE(kb) ((kb) << 10)
#define MB2SIZE(mb) ((mb) << 20)
 
#define STRING(arg) STRING_ARG(arg)
#define STRING_ARG(arg) #arg
 
#endif
 
/** @}
*/
/branches/tracing/boot/Makefile
29,7 → 29,8
## Include configuration
#
 
-include Makefile.config
-include ../Makefile.config
-include ../config.defs
 
## Paths
#
38,31 → 39,11
KERNELDIR = $(BASE)/kernel
USPACEDIR = $(BASE)/uspace
 
ifeq ($(CONFIG_DEBUG),y)
DEFS += -DCONFIG_DEBUG
endif
.PHONY: all build clean generic_clean
 
ifeq ($(CONFIG_BAT),y)
DEFS += -DCONFIG_BAT
endif
all: ../Makefile.config ../config.h ../config.defs build
 
ifeq ($(CONFIG_SMP),y)
DEFS += -DCONFIG_SMP
endif
-include arch/$(BARCH)/Makefile.inc
 
.PHONY: all build config distclean clean generic_clean
 
all:
../tools/config.py boot.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) $(IMAGE)
$(MAKE) -C . build
 
-include arch/$(ARCH)/Makefile.inc
 
config:
../tools/config.py boot.config
 
distclean: clean
-rm Makefile.config
 
generic_clean:
-rm generic/*.o genarch/*.o
/branches/tracing/boot/arch/ppc64/Makefile.inc
File deleted
/branches/tracing/boot/arch/ppc64/loader/ofwarch.c
File deleted
/branches/tracing/boot/arch/ppc64/loader/types.h
File deleted
/branches/tracing/boot/arch/ppc64/loader/main.h
File deleted
/branches/tracing/boot/arch/ppc64/loader/Makefile
File deleted
/branches/tracing/boot/arch/ppc64/loader/debug.inc
File deleted
/branches/tracing/boot/arch/ppc64/loader/ofwarch.h
File deleted
/branches/tracing/boot/arch/ppc64/loader/_link.ld.in
File deleted
/branches/tracing/boot/arch/ppc64/loader/asm.S
File deleted
/branches/tracing/boot/arch/ppc64/loader/regname.h
File deleted
/branches/tracing/boot/arch/ppc64/loader/boot.S
File deleted
/branches/tracing/boot/arch/ppc64/loader/main.c
File deleted
/branches/tracing/boot/arch/ppc64/loader/asm.h
File deleted
/branches/tracing/boot/arch/ia32xen/grub/menu.lst
File deleted
/branches/tracing/boot/arch/ia32xen/grub/stage2_eltorito
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/tracing/boot/arch/ia32xen/grub/COPYING
File deleted
/branches/tracing/boot/arch/ia32xen/grub/xen.gz
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/tracing/boot/arch/ia32xen/grub/menu.debug.lst
File deleted
/branches/tracing/boot/arch/ia32xen/grub/README
File deleted
/branches/tracing/boot/arch/ia32xen/grub/xen.debug.gz
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/tracing/boot/arch/ia32xen/Makefile.inc
File deleted
/branches/tracing/boot/arch/sparc64/Makefile.inc
28,42 → 28,38
 
TMP = distroot
 
ifeq ($(CONFIG_AOUT_ISOFS_B),n)
SILO_PACKAGE=silo.patched.tar.gz
endif
 
ifeq ($(CONFIG_AOUT_ISOFS_B),y)
SILO_PACKAGE=silo.tar.gz
SILO_PACKAGE = silo.tar.gz
else
SILO_PACKAGE = silo.patched.tar.gz
endif
 
build: $(BASE)/image.iso
 
$(BASE)/image.iso: depend arch/$(BARCH)/loader/image.boot
mkdir -p $(TMP)/boot
mkdir -p $(TMP)/HelenOS
cat arch/$(BARCH)/silo/$(SILO_PACKAGE) | (cd $(TMP)/boot; tar xvfz -)
cp arch/$(BARCH)/silo/README arch/$(BARCH)/silo/COPYING $(TMP)/boot
ifeq ($(CONFIG_RD_EXTERNAL),y)
SILO_CONF_FILTER = cat
cp arch/$(BARCH)/silo/silo.conf $(TMP)/boot/silo.conf
else
SILO_CONF_FILTER = grep -v initrd
cat arch/$(BARCH)/silo/silo.conf | grep -v initrd > $(TMP)/boot/silo.conf
endif
 
$(BASE)/image.iso: depend arch/$(ARCH)/loader/image.boot
mkdir -p $(TMP)/boot
mkdir -p $(TMP)/HelenOS
cat arch/$(ARCH)/silo/$(SILO_PACKAGE) | (cd $(TMP)/boot; tar xvfz -)
cp arch/$(ARCH)/silo/README arch/$(ARCH)/silo/COPYING $(TMP)/boot
cat arch/$(ARCH)/silo/silo.conf | $(SILO_CONF_FILTER) >$(TMP)/boot/silo.conf
cp arch/$(ARCH)/loader/image.boot $(TMP)/HelenOS/image.boot
cp arch/$(BARCH)/loader/image.boot $(TMP)/HelenOS/image.boot
gzip -f $(TMP)/HelenOS/image.boot
ifeq ($(CONFIG_RD_EXTERNAL),y)
cp arch/$(ARCH)/loader/initrd.img $(TMP)/HelenOS/initrd.img
cp arch/$(BARCH)/loader/initrd.img $(TMP)/HelenOS/initrd.img
endif
mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o $(BASE)/image.iso $(TMP)/
mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o $@ $(TMP)/
 
depend:
-rm arch/$(ARCH)/loader/image.boot
-rm arch/$(BARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
$(MAKE) -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
arch/$(BARCH)/loader/image.boot:
$(MAKE) -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
 
clean: generic_clean
$(MAKE) -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
$(MAKE) -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
-rm -fr $(TMP)
-rm -f $(BASE)/image.iso
/branches/tracing/boot/arch/sparc64/loader/asm.S
40,7 → 40,7
.global jump_to_kernel
 
halt:
b halt
ba %xcc, halt
nop
memcpy:
116,7 → 116,7
set subarchitecture, %g2
ldub [%g2], %g2
cmp %g2, 3
be 1f
be %xcc, 1f
nop
0:
call icache_flush
/branches/tracing/boot/arch/sparc64/loader/boot.S
43,7 → 43,7
 
.global start
start:
b 1f
ba %xcc, 1f
nop
 
/*
83,7 → 83,7
call ofw_init ! initialize OpenFirmware
stx %o4, [%l0]
b bootstrap
ba %xcc, bootstrap
nop
 
.align STACK_ALIGNMENT
/branches/tracing/boot/arch/sparc64/loader/main.c
36,6 → 36,7
#include <ofw_tree.h>
#include "ofwarch.h"
#include <align.h>
#include <macros.h>
#include <string.h>
 
bootinfo_t bootinfo;
42,16 → 43,16
 
component_t components[COMPONENTS];
 
char *release = RELEASE;
char *release = STRING(RELEASE);
 
#ifdef REVISION
char *revision = ", revision " REVISION;
char *revision = ", revision " STRING(REVISION);
#else
char *revision = "";
#endif
 
#ifdef TIMESTAMP
char *timestamp = "\nBuilt on " TIMESTAMP;
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
#else
char *timestamp = "";
#endif
142,8 → 143,8
silo_ramdisk_image += bootinfo.physmem_start;
silo_ramdisk_image -= 0x400000;
/* Install 1:1 mapping for the ramdisk. */
if (ofw_map((void *)((uintptr_t)silo_ramdisk_image),
(void *)((uintptr_t)silo_ramdisk_image),
if (ofw_map((void *)((uintptr_t) silo_ramdisk_image),
(void *)((uintptr_t) silo_ramdisk_image),
silo_ramdisk_size, -1) != 0) {
printf("Failed to map ramdisk.\n");
halt();
178,6 → 179,9
base + top;
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size =
components[i].size;
strncpy(bootinfo.taskmap.tasks[
bootinfo.taskmap.count].name, components[i].name,
BOOTINFO_TASK_NAME_BUFLEN);
bootinfo.taskmap.count++;
}
top += components[i].size;
203,7 → 207,8
* given to us by SILO.
*/
(void) ofw_claim_phys(base + top, silo_ramdisk_size);
(void) ofw_map(base + top, base + top, silo_ramdisk_size, -1);
(void) ofw_map(bootinfo.physmem_start + base + top, base + top,
silo_ramdisk_size, -1);
memmove(base + top, (void *)((uintptr_t)silo_ramdisk_image),
silo_ramdisk_size);
printf("done.\n");
253,7 → 258,8
balloc_base = base + ALIGN_UP(top, PAGE_SIZE);
(void) ofw_claim_phys(bootinfo.physmem_start + balloc_base,
BALLOC_MAX_SIZE);
(void) ofw_map(balloc_base, balloc_base, BALLOC_MAX_SIZE, -1);
(void) ofw_map(bootinfo.physmem_start + balloc_base, balloc_base,
BALLOC_MAX_SIZE, -1);
balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base);
 
printf("\nCanonizing OpenFirmware device tree...");
260,7 → 266,7
bootinfo.ofw_root = ofw_tree_build();
printf("done.\n");
 
#ifdef CONFIG_SMP
#ifdef CONFIG_AP
printf("\nChecking for secondary processors...");
if (!ofw_cpu())
printf("Error: unable to get CPU properties\n");
267,7 → 273,7
printf("done.\n");
#endif
 
setup_palette();
ofw_setup_palette();
 
printf("\nBooting the kernel...\n");
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS,
274,4 → 280,3
bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo,
sizeof(bootinfo));
}
 
/branches/tracing/boot/arch/sparc64/loader/main.h
38,6 → 38,9
 
#define TASKMAP_MAX_RECORDS 32
 
/** Size of buffer for storing task name in task_t. */
#define BOOTINFO_TASK_NAME_BUFLEN 32
 
#define BSP_PROCESSOR 1
#define AP_PROCESSOR 0
 
47,6 → 50,7
typedef struct {
void *addr;
uint32_t size;
char name[BOOTINFO_TASK_NAME_BUFLEN];
} task_t;
 
typedef struct {
/branches/tracing/boot/arch/sparc64/loader/ofwarch.c
32,7 → 32,7
* @brief Architecture dependent parts of OpenFirmware interface.
*/
 
#include <ofwarch.h>
#include <ofwarch.h>
#include <ofw.h>
#include <printf.h>
#include <string.h>
/branches/tracing/boot/arch/sparc64/loader/Makefile
27,7 → 27,7
#
 
include ../../../../version
include ../../../Makefile.config
-include ../../../../Makefile.config
 
## Toolchain configuration
#
57,16 → 57,8
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
endif
 
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=ultrasparc -m64 -mno-fpu -pipe
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=ultrasparc -m64 -mno-fpu -pipe
 
ifdef REVISION
CFLAGS += "-DREVISION=\"$(REVISION)\""
endif
 
ifdef TIMESTAMP
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif
 
SOURCES = \
main.c \
_components.c \
109,17 → 101,27
$(USPACEDIR)/srv/fb/fb \
$(USPACEDIR)/srv/kbd/kbd \
$(USPACEDIR)/srv/console/console \
$(USPACEDIR)/srv/fs/tmpfs/tmpfs \
$(USPACEDIR)/srv/fs/fat/fat
$(USPACEDIR)/srv/fs/tmpfs/tmpfs
 
ifeq ($(MACHINE),generic)
RD_SRVS += \
$(USPACEDIR)/srv/fs/fat/fat \
$(USPACEDIR)/srv/fhc/fhc \
$(USPACEDIR)/srv/obio/obio
endif
 
RD_APPS = \
$(USPACEDIR)/app/trace/trace \
$(USPACEDIR)/app/tetris/tetris \
$(USPACEDIR)/app/tester/tester \
$(USPACEDIR)/app/trace/trace \
$(USPACEDIR)/app/bdsh/bdsh \
$(USPACEDIR)/app/klog/klog
 
ifeq ($(MACHINE),generic)
RD_APPS += \
$(USPACEDIR)/app/tester/tester
endif
 
OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
ALL_COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(ALL_COMPONENTS))))
 
/branches/tracing/boot/arch/ia64/Makefile.inc
26,22 → 26,17
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
#ifeq ($(MACHINE),ski)
 
build: $(BASE)/image.boot
 
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot
$(BASE)/image.boot: depend arch/$(BARCH)/loader/image.boot
cp arch/$(BARCH)/loader/image.boot $(BASE)/image.boot
 
depend:
-rm arch/$(ARCH)/loader/image.boot
-rm arch/$(BARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
arch/$(BARCH)/loader/image.boot:
make -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
 
clean: generic_clean
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
make -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
-rm -f $(BASE)/image.boot
 
#endif
 
/branches/tracing/boot/arch/ia64/loader/_link.ld.in
12,11 → 12,14
*(.data); /* initialized data */
_got = . ;
*(.got .got.*);
*(.bss); /* uninitialized static variables */
*(COMMON);
}
 
.sboot : {
*(.sdata);
*(.sdata2);
*(.sbss);
*(.bss); /* uninitialized static variables */
*(COMMON);
}
/DISCARD/ : {
/branches/tracing/boot/arch/ia64/loader/main.c
1,6 → 1,6
/*
* Copyright (c) 2005 Martin Decky
* Copyright (c) 2006 Jakub Jermar
* Copyright (c) 2006 Jakub Jermar
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
33,11 → 33,13
#include "_components.h"
#include <align.h>
#include <balloc.h>
#include <macros.h>
#include <string.h>
 
extern bootinfo_t binfo;
component_t components[COMPONENTS];
 
char *release = RELEASE;
char *release = STRING(RELEASE);
 
void write(const char *str, const int len)
{
44,23 → 46,22
return;
}
 
#define DEFAULT_MEMORY_BASE 0x4000000
#define DEFAULT_MEMORY_SIZE 0x4000000
#define DEFAULT_LEGACY_IO_BASE 0x00000FFFFC000000
#define DEFAULT_LEGACY_IO_SIZE 0x4000000
#define DEFAULT_MEMORY_BASE 0x4000000
#define DEFAULT_MEMORY_SIZE 0x4000000
#define DEFAULT_LEGACY_IO_BASE 0x00000FFFFC000000
#define DEFAULT_LEGACY_IO_SIZE 0x4000000
 
#define DEFAULT_FREQ_SCALE 0x0000000100000001 // 1/1
#define DEFAULT_SYS_FREQ 100000000 //100MHz
#define DEFAULT_FREQ_SCALE 0x0000000100000001 /* 1/1 */
#define DEFAULT_SYS_FREQ 100000000 /* 100MHz */
 
 
#ifdef REVISION
char *revision = ", revision " REVISION;
char *revision = ", revision " STRING(REVISION);
#else
char *revision = "";
#endif
 
#ifdef TIMESTAMP
char *timestamp = "\nBuilt on " TIMESTAMP;
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
#else
char *timestamp = "";
#endif
68,27 → 69,18
/** Print version information. */
static void version_print(void)
{
printf("HelenOS IA64 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp);
printf("HelenOS IA64 Bootloader\nRelease %s%s%s\n"
"Copyright (c) 2006 HelenOS project\n", release, revision,
timestamp);
}
 
void bootstrap(void)
{
 
int ii;
bootinfo_t *bootinfo=&binfo;
//for(ii=0;ii<KERNEL_SIZE;ii++) ((char *)(0x100000))[ii] = ((char *)KERNEL_START)[ii+1];
//((int *)(0x100000))[0]++;
bootinfo_t *bootinfo = &binfo;
 
 
version_print();
 
init_components(components);
 
printf("\nSystem info\n");
100,42 → 92,46
printf(" %P: %s image (size %d bytes)\n", components[i].start,
components[i].name, components[i].size);
 
if(!bootinfo->hello_configured)
{
if (!bootinfo->hello_configured) {
/*
* Load configuration defaults for simulators
* Load configuration defaults for simulators.
*/
bootinfo->memmap_items=0;
bootinfo->memmap_items = 0;
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_MEMORY_BASE;
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_MEMORY_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM;
bootinfo->memmap[bootinfo->memmap_items].base =
DEFAULT_MEMORY_BASE;
bootinfo->memmap[bootinfo->memmap_items].size =
DEFAULT_MEMORY_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type =
EFI_MEMMAP_FREE_MEM;
bootinfo->memmap_items++;
 
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_LEGACY_IO_BASE;
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_LEGACY_IO_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS;
bootinfo->memmap[bootinfo->memmap_items].base =
DEFAULT_LEGACY_IO_BASE;
bootinfo->memmap[bootinfo->memmap_items].size =
DEFAULT_LEGACY_IO_SIZE;
bootinfo->memmap[bootinfo->memmap_items].type =
EFI_MEMMAP_IO_PORTS;
bootinfo->memmap_items++;
bootinfo->freq_scale = DEFAULT_FREQ_SCALE;
bootinfo->sys_freq = DEFAULT_SYS_FREQ;
}
 
 
 
bootinfo->taskmap.count = 0;
for (i = 0; i < COMPONENTS; i++) {
 
if (i > 0) {
bootinfo->taskmap.tasks[bootinfo->taskmap.count].addr = components[i].start;
bootinfo->taskmap.tasks[bootinfo->taskmap.count].size = components[i].size;
bootinfo->taskmap.tasks[bootinfo->taskmap.count].addr =
components[i].start;
bootinfo->taskmap.tasks[bootinfo->taskmap.count].size =
components[i].size;
strncpy(bootinfo->taskmap.tasks[
bootinfo->taskmap.count].name,
components[i].name, BOOTINFO_TASK_NAME_BUFLEN);
bootinfo->taskmap.count++;
}
}
 
jump_to_kernel(bootinfo);
 
 
}
 
/branches/tracing/boot/arch/ia64/loader/gefi/Make.defaults
27,30 → 27,19
#
INSTALLROOT=/usr/local
 
TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
TOPDIR := $(shell pwd)
 
ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
INCDIR = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol
ARCH = ia64
INCDIR = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol
CPPFLAGS = -DCONFIG_$(ARCH)
CFLAGS = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants
LDFLAGS = -nostdlib
INSTALL = install
CFLAGS = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -frename-registers -mfixed-range=f32-f127
LDFLAGS = -nostdlib
INSTALL = install
 
GCC_VERSION=$(shell $(CROSS_COMPILE)$(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.')
 
# prefix =
CC = $(prefix)gcc
AS = $(prefix)as
LD = $(prefix)ld
AR = $(prefix)ar
RANLIB = $(prefix)ranlib
OBJCOPY = $(prefix)objcopy
OBJDUMP = $(prefix)objdump
 
 
ifneq ($(GCC_VERSION),2)
CFLAGS += -frename-registers
endif
 
CFLAGS += -mfixed-range=f32-f127
 
CC = $(prefix)gcc
AS = $(prefix)as
LD = $(prefix)ld
AR = $(prefix)ar
RANLIB = $(prefix)ranlib
OBJCOPY = $(prefix)objcopy
OBJDUMP = $(prefix)objdump
/branches/tracing/boot/arch/ia64/loader/gefi/HelenOS/hello.c
12,7 → 12,7
 
 
//Link image as a data array into hello - usefull with network boot
#define IMAGE_LINKED
//#define IMAGE_LINKED
 
bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS;
 
86,6 → 86,7
StrCpy(FileName,DevicePathToStr(LoadedImage->FilePath));
for(i=StrLen(FileName);i>=0 && FileName[i]!='\\';i--);
FileName[i] = 0;
FileName[0] = 0;
Print(L"%s\n",LoadedImage->LoadOptions);
105,9 → 106,9
StrCat(FileName,L"\\image.bin");
defaultLoad=1;
}
else{
/* else{
CHAR16 buf[1024];
buf[0]='\\';
//buf[0]='\\';
i--;
int j;
for(j=0;LoadOptions[i+j]!=L' '&&LoadOptions[i+j]!=0;j++)
115,6 → 116,17
buf[j+1]=0;
StrCat(FileName,buf);
defaultLoad=0;
}*/
else{
CHAR16 buf[1024];
//buf[0]='\\';
i--;
int j;
for(j=0;LoadOptions[i+j]!=L' '&&LoadOptions[i+j]!=0;j++)
buf[j]=LoadOptions[i+j];
buf[j+1]=0;
StrCat(FileName,buf);
defaultLoad=0;
}
 
imageLoad=1;
/branches/tracing/boot/arch/ia64/loader/gefi/HelenOS/Makefile
20,6 → 20,7
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
 
prefix=$(PREFIX)
include ../Make.defaults
CDIR=$(TOPDIR)/..
28,14 → 29,11
CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o
LDSCRIPT = ../gnuefi/elf_$(ARCH)_efi.lds
LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS)
#LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)
LOADLIBES = -lefi -lgnuefi
FORMAT = efi-app-$(ARCH)
 
 
all: gefi hello.efi
 
 
clean:
rm -f *.efi *~ *.o *.so *.map *.disass *.bin
 
44,11 → 42,10
hello.efi: hello.so
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
-j .rela -j .reloc --target=$(FORMAT) hello.so hello.efi
$(OBJDUMP) -d hello.efi > hello.disass
 
#When selected first lines or second lines, select if image is linked into hello or not - usefull for network boot
#hello.so: hello.o image.o division.o
hello.so: hello.o image.bin
hello.so: hello.o image.bin division.o
# $(LD) $(LDFLAGS) -Map hello.map hello.o division.o image.o -o hello.so $(LOADLIBES) #link image inside hello
$(LD) $(LDFLAGS) -Map hello.map hello.o division.o -o hello.so $(LOADLIBES) #dont link image inside hello
 
58,11 → 55,9
division.o: division.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c division.c -o division.o
 
 
image.bin: ../../image.boot
$(OBJCOPY) -O binary ../../image.boot image.bin
 
 
image.o: ../../image.boot mkimage
$(OBJCOPY) -O binary ../../image.boot image.bin
./mkimage
72,6 → 67,5
mkimage: mkimage.c
gcc -o mkimage mkimage.c
 
 
gefi:
make -C .. prefix=$(PREFIX)
/branches/tracing/boot/arch/ia64/loader/gefi/Makefile
23,9 → 23,9
 
include Make.defaults
 
SUBDIRS = lib gnuefi inc apps
SUBDIRS = lib gnuefi inc
 
all: check_gcc $(SUBDIRS)
all: $(SUBDIRS)
 
$(SUBDIRS):
$(MAKE) -C $@
39,13 → 39,4
 
.PHONY: $(SUBDIRS) clean depend
 
#
# on both platforms you must use gcc 3.0 or higher
#
check_gcc:
ifeq ($(GCC_VERSION),2)
@echo "you need to use a version of gcc >= 3.0, you are using `$(CC) --version`"
@exit 1
endif
 
include Make.rules
/branches/tracing/boot/arch/ia64/loader/Makefile
27,7 → 27,7
#
 
include ../../../../version
include ../../../Makefile.config
-include ../../../../Makefile.config
 
## Toolchain configuration
#
47,7 → 47,7
LD = ld
OBJCOPY = objcopy
OBJDUMP = objdump
GEFI_PREXIX =
GEFI_PREFIX =
endif
 
ifeq ($(COMPILER),icc_native)
68,16 → 68,8
endif
 
#-mno-pic means do not use gp + imm22 to address data
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -I../../../../kernel/generic/include -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -pipe
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -I../../../../kernel/generic/include -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -pipe
 
ifdef REVISION
CFLAGS += "-DREVISION=\"$(REVISION)\""
endif
 
ifdef TIMESTAMP
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif
 
SOURCES = \
main.c \
../../../generic/printf.c \
87,24 → 79,36
asm.S \
boot.S
 
NOCOMPONENTS = \
$(KERNELDIR)/kernel.bin
COMPONENTS = \
$(KERNELDIR)/kernel.bin
NOCOMPONENTS = \
$(KERNELDIR)/kernel.bin \
$(USPACEDIR)/srv/ns/ns \
$(USPACEDIR)/srv/loader/loader \
$(USPACEDIR)/app/init/init \
$(USPACEDIR)/srv/devmap/devmap \
$(USPACEDIR)/srv/rd/rd \
$(USPACEDIR)/srv/vfs/vfs
ifeq ($(RDFMT),tmpfs)
COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
endif
ifeq ($(RDFMT),fat)
COMPONENTS += $(USPACEDIR)/srv/fs/fat/fat
endif
 
RD_SRVS = \
$(USPACEDIR)/srv/fb/fb \
$(USPACEDIR)/srv/kbd/kbd \
$(USPACEDIR)/srv/console/console \
$(USPACEDIR)/srv/vfs/vfs \
$(USPACEDIR)/srv/fs/tmpfs/tmpfs \
$(USPACEDIR)/srv/fs/fat/fat \
$(USPACEDIR)/srv/devmap/devmap \
$(USPACEDIR)/app/init/init \
$(USPACEDIR)/srv/fs/fat/fat
 
RD_APPS = \
$(USPACEDIR)/app/trace/trace \
$(USPACEDIR)/app/tetris/tetris \
$(USPACEDIR)/app/tester/tester \
$(USPACEDIR)/app/klog/klog
$(USPACEDIR)/app/klog/klog \
$(USPACEDIR)/app/bdsh/bdsh
 
OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS))))
118,22 → 122,41
hello.efi: image.boot
make -C gefi/HelenOS PREFIX=$(GEFI_PREFIX)
cp gefi/HelenOS/hello.efi ../../../../
# cp gefi/HelenOS/hello.efi /boot/efi/
cp gefi/HelenOS/image.bin ../../../../
 
image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS)
$(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS)
$(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) -o $@
 
depend:
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null
 
clean:
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot image.map image.disasm Makefile.depend ../../../../image.bin ../../../../hello.efi
-for file in $(RD_SRVS) ; do \
rm -f $(USPACEDIR)/dist/srv/`basename $$file` ; \
done
-for file in $(RD_APPS) ; do \
rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \
done
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) image.boot image.map image.disasm initrd.img image.boot Makefile.depend ../../../../image.bin ../../../../hello.efi
make -C gefi clean
make -C gefi/HelenOS clean
 
_components.h _components.c _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS) _link.ld.in
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned long" $(COMPONENTS)
_components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_SRVS) $(RD_APPS) _link.ld.in
for file in $(RD_SRVS) ; do \
cp $$file $(USPACEDIR)/dist/srv/ ; \
done
for file in $(RD_APPS) ; do \
cp $$file $(USPACEDIR)/dist/app/ ; \
done
ifeq ($(RDFMT),tmpfs)
../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs
endif
ifeq ($(RDFMT),fat)
../../../../tools/mkfat.py $(USPACEDIR)/dist/ initrd.fs
endif
../../../../tools/mkhord.py 16384 initrd.fs initrd.img
rm initrd.fs
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned long" $(COMPONENTS) ./initrd.img
 
%.o: %.S
$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
/branches/tracing/boot/arch/arm32/Makefile.inc
28,15 → 28,15
 
build: $(BASE)/image.boot
 
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot
$(BASE)/image.boot: depend arch/$(BARCH)/loader/image.boot
cp arch/$(BARCH)/loader/image.boot $(BASE)/image.boot
 
depend:
-rm arch/$(ARCH)/loader/image.boot
-rm arch/$(BARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE)
arch/$(BARCH)/loader/image.boot:
make -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
 
clean:
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE)
make -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
-rm -f $(BASE)/image.boot
/branches/tracing/boot/arch/arm32/loader/boot.S
53,5 → 53,3
# make place for PTL0 page table
page_table:
.skip PTL0_ENTRIES * PTL0_ENTRY_SIZE
 
 
/branches/tracing/boot/arch/arm32/loader/main.c
32,13 → 32,16
*/
/** @file
* @brief Bootstrap.
*/
*/
 
 
#include "main.h"
#include "main.h"
#include "asm.h"
#include "_components.h"
#include <printf.h>
#include <align.h>
#include <macros.h>
#include <string.h>
 
#include "mm.h"
 
46,16 → 49,16
#define KERNEL_VIRTUAL_ADDRESS 0x80200000
 
 
char *release = RELEASE;
char *release = STRING(RELEASE);
 
#ifdef REVISION
char *revision = ", revision " REVISION;
char *revision = ", revision " STRING(REVISION);
#else
char *revision = "";
#endif
 
#ifdef TIMESTAMP
char *timestamp = "\nBuilt on " TIMESTAMP;
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
#else
char *timestamp = "";
#endif
101,6 → 104,8
if (i > 0) {
bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
bootinfo.tasks[bootinfo.cnt].size = components[i].size;
strncpy(bootinfo.tasks[bootinfo.cnt].name,
components[i].name, BOOTINFO_TASK_NAME_BUFLEN);
bootinfo.cnt++;
}
top += components[i].size;
108,7 → 113,7
}
printf("\nBooting the kernel...\n");
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo));
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo);
}
 
/** @}
/branches/tracing/boot/arch/arm32/loader/asm.h
32,7 → 32,7
*/
/** @file
* @brief Functions implemented in assembly.
*/
*/
 
 
#ifndef BOOT_arm32_ASM_H
40,10 → 40,10
 
 
/** Copies cnt bytes from dst to src.
*
*
* @param dst Destination address.
* @param src Source address.
* @param cnt Count of bytes to be copied.
* @param cnt Count of bytes to be copied.
*/
#define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt))
 
58,12 → 58,11
 
/** Jumps to the kernel entry point.
*
* @param entry Kernel entry point address.
* @param bootinfo Structure holding information about loaded tasks.
* @param bootinfo_size Size of the bootinfo structure.
* @param entry Kernel entry point address.
* @param bootinfo Structure holding information about loaded tasks.
*
*/
extern void jump_to_kernel(void *entry, void *bootinfo,
unsigned int bootinfo_size) __attribute__((noreturn));
extern void jump_to_kernel(void *entry, void *bootinfo) __attribute__((noreturn));
 
 
#endif
/branches/tracing/boot/arch/arm32/loader/main.h
32,7 → 32,7
*/
/** @file
* @brief Boot related declarations.
*/
*/
 
 
#ifndef BOOT_arm32_MAIN_H
39,17 → 39,13
#define BOOT_arm32_MAIN_H
 
 
/** Aligns to the nearest higher address.
*
* @param addr Address or number to be aligned.
* @param align Size of alignment, must be power of 2.
*/
#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
 
/** Maximum number of tasks in the #bootinfo_t struct. */
#define TASKMAP_MAX_RECORDS 32
 
/** Size of buffer for storing task name in task_t. */
#define BOOTINFO_TASK_NAME_BUFLEN 32
 
 
/** Struct holding information about single loaded task. */
typedef struct {
/** Address where the task was placed. */
56,6 → 52,8
void *addr;
/** Size of the task's binary. */
unsigned int size;
/** Task name. */
char name[BOOTINFO_TASK_NAME_BUFLEN];
} task_t;
 
 
74,4 → 72,3
 
/** @}
*/
 
/branches/tracing/boot/arch/arm32/loader/Makefile
27,7 → 27,7
#
 
include ../../../../version
include ../../../Makefile.config
-include ../../../../Makefile.config
 
## Toolchain configuration
#
57,20 → 57,8
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
endif
 
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../.. -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -pipe
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../.. -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -pipe
 
ifdef REVISION
CFLAGS += "-DREVISION=\"$(REVISION)\""
endif
 
ifdef TIMESTAMP
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif
 
ifdef MACHINE
CFLAGS += "-DMACHINE=$(MACHINE)"
endif
 
SOURCES = \
main.c \
boot.S \
79,6 → 67,7
print/gxemul.c \
_components.c \
../../../generic/printf.c \
../../../generic/string.c \
../../../genarch/division.c
 
COMPONENTS = \
/branches/tracing/boot/arch/ppc32/Makefile.inc
26,17 → 26,27
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
build: $(BASE)/image.boot
TMP = distroot
 
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot
build: $(BASE)/image.iso
 
$(BASE)/image.iso: depend arch/$(BARCH)/loader/image.boot
mkdir -p $(TMP)/boot
mkdir -p $(TMP)/ppc
cp arch/$(BARCH)/loader/image.boot $(TMP)/boot/image.boot
cp arch/$(BARCH)/yaboot/ofboot.b $(TMP)/boot/ofboot.b
cp arch/$(BARCH)/yaboot/bootinfo.txt $(TMP)/ppc/bootinfo.txt
cp arch/$(BARCH)/yaboot/yaboot $(TMP)/boot/yaboot
cp arch/$(BARCH)/yaboot/yaboot.conf $(TMP)/boot/yaboot.conf
mkisofs -hfs -part -map arch/$(BARCH)/yaboot/maps -no-desktop -hfs-volid "HelenOS" -hfs-bless $(TMP)/boot -r -o $@ $(TMP)/
 
depend:
-rm arch/$(ARCH)/loader/image.boot
-rm arch/$(BARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
arch/$(BARCH)/loader/image.boot:
$(MAKE) -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
 
clean: generic_clean
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
-rm -f $(BASE)/image.boot
$(MAKE) -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
-rm -fr $(TMP)
-rm -f $(BASE)/image.iso
/branches/tracing/boot/arch/ppc32/loader/debug.inc
File deleted
/branches/tracing/boot/arch/ppc32/loader/_link.ld.in
1,9 → 1,9
OUTPUT_FORMAT("elf32-powerpc")
OUTPUT_ARCH(powerpc:common)
ENTRY(start)
OUTPUT_FORMAT("elf32-powerpc")
OUTPUT_ARCH(powerpc:common)
ENTRY(start)
 
SECTIONS {
.boot 0x10000000: AT (0) {
.boot 0x01000000: AT (0) {
*(BOOTSTRAP);
*(REALMODE);
*(.text);
10,12 → 10,12
*(.rodata);
*(.rodata.*);
*(.data); /* initialized data */
*(.data); /* initialized data */
*(.sdata);
*(.sdata2);
*(.sbss);
*(.bss); /* uninitialized static variables */
*(COMMON); /* global variables */
*(.bss); /* uninitialized static variables */
*(COMMON); /* global variables */
[[COMPONENTS]]
}
}
/branches/tracing/boot/arch/ppc32/loader/asm.S
28,8 → 28,26
 
#include "asm.h"
#include "regname.h"
#include "debug.inc"
 
.macro SMC_COHERENCY addr
dcbst 0, \addr
sync
icbi 0, \addr
sync
isync
.endm
 
.macro FLUSH_DCACHE addr
dcbst 0, \addr
sync
isync
.endm
 
.macro TLB_FLUSH reg
tlbie \reg
addi \reg, \reg, 0x1000
.endm
 
.text
 
.global halt
140,9 → 158,6
 
real_mode:
DEBUG_INIT
DEBUG_real_mode
# copy kernel to proper location
#
# r5 = trans (pa)
163,14 → 178,13
mtctr r31
lwz r29, 0(r5)
DEBUG_INIT
DEBUG_copy_loop
copy_loop:
lwz r28, 0(r29)
stw r28, 0(r30)
SMC_COHERENCY r30
addi r29, r29, 4
addi r30, r30, 4
subi r6, r6, 4
180,15 → 194,11
bdnz copy_loop
DEBUG_end_copy_loop
addi r5, r5, 4
b page_copy
copy_end:
DEBUG_segments
# initially fill segment registers
li r31, 0
196,7 → 206,7
li r29, 8
mtctr r29
li r30, 0 # ASID 0 (VSIDs 0 .. 7)
 
seg_fill_uspace:
mtsrin r30, r31
220,8 → 230,6
# invalidate block address translation registers
DEBUG_bat
li r30, 0
mtspr ibat0u, r30
251,8 → 259,6
# create empty Page Hash Table
# on top of memory, size 64 KB
DEBUG_pht
lwz r31, 0(r3) # r31 = memory size
lis r30, 65536@h
274,6 → 280,7
# write zeroes
stw r29, 0(r31)
FLUSH_DCACHE r31
addi r31, r31, 4
subi r30, r30, 4
282,8 → 289,6
beq clear_end
bdnz pht_clear
 
DEBUG_end_pht_clear
clear_end:
291,8 → 296,6
# create BAT identity mapping
DEBUG_mapping
lwz r31, 0(r3) # r31 = memory size
lis r29, 0x0002
315,8 → 318,6
bdnz bat_mask
DEBUG_bat_mask
andi. r31, r31, 0x07ff # mask = mask & 0x07ff (BAT can map up to 256 MB)
li r29, 2
336,16 → 337,90
mtspr dbat0l, r30
no_bat:
 
#endif
DEBUG_tlb
# flush TLB
tlbia
li r31, 0
sync
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
TLB_FLUSH r31
eieio
tlbsync
sync
DEBUG_prepare
# start the kernel
#
# pc = KERNEL_START_ADDR
373,8 → 448,6
sync
isync
DEBUG_rfi
rfi
 
.align PAGE_WIDTH
/branches/tracing/boot/arch/ppc32/loader/regname.h
208,11 → 208,13
#define hid0 1008
 
/* MSR bits */
#define msr_ir (1 << 4)
#define msr_dr (1 << 5)
#define msr_dr (1 << 4)
#define msr_ir (1 << 5)
#define msr_pr (1 << 14)
#define msr_ee (1 << 15)
 
/* HID0 bits */
#define hid0_sten (1 << 24)
#define hid0_ice (1 << 15)
#define hid0_dce (1 << 14)
#define hid0_icfi (1 << 11)
/branches/tracing/boot/arch/ppc32/loader/main.c
32,6 → 32,8
#include "_components.h"
#include <ofw.h>
#include <align.h>
#include <macros.h>
#include <string.h>
 
#define HEAP_GAP 1024000
 
72,16 → 74,16
}
}
 
char *release = RELEASE;
char *release = STRING(RELEASE);
 
#ifdef REVISION
char *revision = ", revision " REVISION;
char *revision = ", revision " STRING(REVISION);
#else
char *revision = "";
#endif
 
#ifdef TIMESTAMP
char *timestamp = "\nBuilt on " TIMESTAMP;
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
#else
char *timestamp = "";
#endif
89,7 → 91,7
/** Print version information. */
static void version_print(void)
{
printf("HelenOS PPC32 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp);
printf("HelenOS PPC32 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n\n", release, revision, timestamp);
}
 
void bootstrap(void)
107,25 → 109,29
check_align(&trans, "translation table");
if (!ofw_memmap(&bootinfo.memmap)) {
printf("Error: unable to get memory map, halting.\n");
printf("Error: Unable to get memory map, halting.\n");
halt();
}
if (bootinfo.memmap.total == 0) {
printf("Error: no memory detected, halting.\n");
printf("Error: No memory detected, halting.\n");
halt();
}
if (!ofw_screen(&bootinfo.screen))
printf("Warning: unable to get screen properties.\n");
printf("Warning: Unable to get screen properties.\n");
if (!ofw_keyboard(&bootinfo.keyboard))
printf("Warning: unable to get keyboard properties.\n");
if (!ofw_macio(&bootinfo.macio))
printf("Warning: Unable to get macio properties.\n");
printf("\nDevice statistics\n");
printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
printf(" keyboard at %L (size %d bytes)\n", bootinfo.keyboard.addr, bootinfo.keyboard.size);
printf("Device statistics\n");
if (bootinfo.screen.addr)
printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
if (bootinfo.macio.addr)
printf(" macio at %L (size %d bytes)\n", bootinfo.macio.addr, bootinfo.macio.size);
void *real_mode_pa = ofw_translate(&real_mode);
void *trans_pa = ofw_translate(&trans);
void *bootinfo_pa = ofw_translate(&bootinfo);
161,6 → 167,9
if (j == 0) {
bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = (void *) (pages << PAGE_WIDTH);
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size;
strncpy(bootinfo.taskmap.tasks[bootinfo.taskmap.count].name,
components[i].name, BOOTINFO_TASK_NAME_BUFLEN);
 
bootinfo.taskmap.count++;
}
}
172,6 → 181,8
fix_overlap(&trans, &trans_pa, "translation table", &top);
fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top);
ofw_setup_palette();
printf("\nBooting the kernel...\n");
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa, (void *) bootinfo.screen.addr, bootinfo.screen.scanline);
}
/branches/tracing/boot/arch/ppc32/loader/main.h
33,9 → 33,17
 
#define TASKMAP_MAX_RECORDS 32
 
/** Size of buffer for storing task name in task_t. */
#define BOOTINFO_TASK_NAME_BUFLEN 32
 
/** Struct holding information about single loaded task. */
typedef struct {
/** Address where the task was placed. */
void *addr;
/** Size of the task's binary. */
unsigned int size;
/** Task name. */
char name[BOOTINFO_TASK_NAME_BUFLEN];
} task_t;
 
typedef struct {
47,7 → 55,7
memmap_t memmap;
taskmap_t taskmap;
screen_t screen;
keyboard_t keyboard;
macio_t macio;
} bootinfo_t;
 
extern void start(void);
/branches/tracing/boot/arch/ppc32/loader/ofwarch.c
48,22 → 48,24
}
}
 
int ofw_keyboard(keyboard_t *keyboard)
int ofw_macio(macio_t *macio)
{
char device_name[BUF_SIZE];
if (ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0)
if ((ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0)
&& (ofw_get_property(ofw_aliases, "mac-io", device_name, sizeof(device_name)) <= 0))
return false;
phandle device = ofw_find_device(device_name);
if (device == -1)
return false;
pci_reg_t macio;
if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0)
pci_reg_t pci_reg;
if (ofw_get_property(device, "assigned-addresses", &pci_reg, sizeof(pci_reg)) <= 0)
return false;
keyboard->addr = (void *) macio.addr.addr_lo;
keyboard->size = macio.size_lo;
macio->addr = (void *) pci_reg.addr.addr_lo;
macio->size = pci_reg.size_lo;
 
return true;
}
/branches/tracing/boot/arch/ppc32/loader/Makefile
27,7 → 27,7
#
 
include ../../../../version
include ../../../Makefile.config
-include ../../../../Makefile.config
 
## Toolchain configuration
#
57,16 → 57,8
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
endif
 
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc -msoft-float -m32 -pipe
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc -msoft-float -m32 -pipe
 
ifdef REVISION
CFLAGS += "-DREVISION=\"$(REVISION)\""
endif
 
ifdef TIMESTAMP
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif
 
SOURCES = \
main.c \
ofwarch.c \
73,6 → 65,7
_components.c \
../../../genarch/ofw.c \
../../../generic/printf.c \
../../../generic/string.c \
asm.S \
boot.S
 
83,7 → 76,7
$(USPACEDIR)/app/init/init \
$(USPACEDIR)/srv/devmap/devmap \
$(USPACEDIR)/srv/rd/rd \
$(USPACEDIR)/srv/vfs/vfs
$(USPACEDIR)/srv/vfs/vfs
ifeq ($(RDFMT),tmpfs)
COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
endif
/branches/tracing/boot/arch/ppc32/yaboot/maps
0,0 → 1,6
# EXTN XLate CREATOR TYPE Comment
.b Raw 'UNIX' 'tbxi' "bootstrap"
yaboot Raw 'UNIX' 'boot' "bootstrap"
image.boot Raw 'UNIX' 'boot' "kernel"
.conf Raw 'UNIX' 'conf' "bootstrap"
* Raw 'UNIX 'UNIX' "unix"
/branches/tracing/boot/arch/ppc32/yaboot/yaboot.conf
0,0 → 1,5
device=cd:
timeout=0
 
image=/boot/image.boot
label=HelenOS
/branches/tracing/boot/arch/ppc32/yaboot/COPYING
0,0 → 1,340
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
 
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
 
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
 
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
 
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
 
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
 
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
 
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
 
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
 
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
 
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
 
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
 
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
 
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
 
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
 
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
 
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
 
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
 
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
 
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
 
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
 
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
 
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
 
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
 
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
 
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
 
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
 
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
 
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
 
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
 
NO WARRANTY
 
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
 
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
 
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
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
 
 
Also add information on how to contact you by electronic and paper mail.
 
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
 
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
 
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
 
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
 
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
 
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
/branches/tracing/boot/arch/ppc32/yaboot/ofboot.b
0,0 → 1,13
<CHRP-BOOT>
<COMPATIBLE>
MacRISC
</COMPATIBLE>
<DESCRIPTION>
HelenOS
</DESCRIPTION>
<BOOT-SCRIPT>
" screen" output
load-base release-load-area
boot cd:,\boot\yaboot
</BOOT-SCRIPT>
</CHRP-BOOT>
/branches/tracing/boot/arch/ppc32/yaboot/README
0,0 → 1,5
For licensing terms of Yaboot boot loader see the file COPYING contained
in this directory. Full version of Yaboot, including its source code,
can be downloaded from Yaboot's project page:
 
http://yaboot.ozlabs.org/
/branches/tracing/boot/arch/ppc32/yaboot/bootinfo.txt
0,0 → 1,5
<chrp-boot>
<description>HelenOS</description>
<os-name>HelenOS</os-name>
<boot-script>boot cd:,\boot\yaboot</boot-script>
</chrp-boot>
/branches/tracing/boot/arch/ppc32/yaboot/yaboot
0,0 → 1,394
ELF 4 4 (
 ÆÆ""@Z¬dtåQ=@"aJ@=`#akZ¬9Jÿü9kÿü8”
|
+|}y@‚ƒ¿F <€"8`8„—DHNñ|yA‚,88 
+<`"<€#8c™ì8„V¬LÆ1‚H/9€8!|¦N€ ”!÷ = "|¦9)x8€d88 (  ¾!$|~xHj‰= "8ÿÿ9)®l‘>$= #ƒ)F¤HVÑ= "9i€ /€AžÀ= "€ H/€@ž°|# x= # 9)R¬8ž$•# KÿõÅ€ /„Až@<`"8c™øLÆ1‚H.q€ž$/„Až<`"8c—€LÆ1‚H.U<`"8c¤tLÆ1‚H.E= "€ @/€Až<<€"8`8„š$HGÉ|iyA‚$ˆ /€Až8€8 Hnq|}xH; ÿÿ= "€ H/€Až; <`"8cš,LÆ1‚H-Õ/ÿÿAžäH$­/@0d£H'-/ƒÿÿ|jx@žH$‰ƒè@ÿèH8ÿ÷+€@
+Až$/ƒAž= #89iV¬˜iV¬˜ H
+<`"8c¤tLÆ1‚H+ý€~$<€"8 8„š@Hfñ,@‚ = "iƒá <€"8 8„š@ãûxHfÉ/ƒAž= "€ /€@ž´= "9)€ /€@ž 8 €ž$/„@ž äûxH= "8 €8$ˆ/€AžX= "8„;éx;¿ £ëxHeµ= "89)<`"¤ëx8cšH LÆ1‚H+= #€iF H3)HDa H<`"8cšhHH= "€ @/€Až$! /‰Ažˆ /€@ž HCÁa ƒ¡ £ëxHeõ¤ëx|ex<`"8cšˆH'ñ= #8aƒiF dÛxHe = "€ @/€Až¬<€"8`8„©ÐHD<€"8„—D|{x8`HD|}yA‚,88 
+Hj¹!‰èAžˆ /€@ž|yx<€"8`8„—4HCÅ,A‚ = "i<€"8`8„š˜HDÍ<€"8„š¤||x€a HC‘|iyA‚ ˆ /€Ažƒá <€"‘! 8„©ÐãûxHCe|{y@‚ = #ƒiF <€"ãûx8„—DHCE|}yA‚,88 
+cÛx~$‹x8 Hbu/ƒ@ž€zÃxH$cÛx~D“x8 HbQ/ƒ@ž€z~ä»xHa©H8cÛx~d›x8 
+Hb)/ƒAž ;€H~óx8€8 
+HgmzƒãxHb-+ƒ@4;¼8€ £ëx;ÿÿÿHb)||y@‚£ëxHb/Ÿ@žÿ ?à#<`"8c¡(;¿F LÆ1‚H&¥£ëxKÿò­= "/ƒi@@8<€"8`8„š$H@!|iyA‚èˆ /€AžÜ8€8 HfÉHÌ<`"8c¡@LÆ1‚H&I€}<€"8„®lH`­€F 8H`¡“=H˜<`"8c¡\LÆ1‚H&= #<`";©F 8c­˜€‰F LÆ1‚H%ù€/„@œ<`"8c¡tLÆ1‚H%ÝH<`"8c¡ˆLÆ1‚H%É= #€‰F¨ˆ/€Až<`"8c¡˜H<`"<€"8c¡¤8„¡´LÆ1‚H%‘= "9)•9)Ì‘>$H(ˆ/€$@ž0= "€ L/€Až<`"8c¡ÀKÿôÁ€a 8cH…Hð<`"¤ëx8cx8 8c H_½/Ÿ@ž = "€ L/€Až<`"8c¡èKÿôu= "<À";©x8Æ¢; dÛxƒãx%ËxÇóxH/õ/ƒ@ž<`"„ãx8c—`Hl= "€ @/€Ažd<€"ãûx8„¢(H>M|dyA‚Ôˆ/€AžÈ= "€ /€@žh;] „ÐAž\ˆ = ";‰¦t|t€àAž48aH,q/ƒAž$;½ „ãx£ëxH^µ£ëxDÓxH^íH(<`"8cx8ƒ H <`"8cx8c 8 H^= "<À";©x8Æ¢08} dÛx%Ëx8þ H.ý/ƒ@ž<`"8 8c—`Ht<€"ãûx8„¢<H=e,A‚dˆ/€AžX= "|dx;éx8 ;¿ £ëxH^!<À"£ëxdÛx%Ëx8Æ¢D8þH.‰/ƒ@ž<`"8Ÿ 8c—`LÆ1‚H#Y8`€dº!$8!`|¦N€ /Š
+@žõØKÿö¤”!ÿ0= "|¦Ô8€½Áˆ;)x= #:‰F = ": £X= "9飄= ":Iª = ":©T= "9É£4= ":i£ ;:9 ~#‹xKÿó©/ƒ@ž ”€ /€Ažÿè= "€i–LÆ1‚H"©8a8€8 (H^-€tˆ/€Ažh<€"8„¢xH]a/ƒ@žT€y ˆ|t/€/Až@/€\Až8H]8cHp)|xyA‚䀔H\±€™ ÃxH\é€y Ho©“ ;Á~#‹xÄóxH+É|yA‚,€™ €¹ <`"8c—xLÆ1‚H!õ€™ ãûxH&ÍKÿÿ!Ãóx8€8¡0)})¦N€!+ƒA0<`"8c¢ŒLÆ1‚H!±!Ãóx)})¦N€!ÃóxH T€0l E/‰LF@ž
+ø€4= T€H@ž
+ä€@l /‰@ž
+ԁ!Ãóx8€ 8¡D)})¦N€!/ƒA<`"8c¢¼Hœ a\€H„+ƒ A€Tc(4Hnñ|}yA‚”!€LÃóx) })¦N€!/ƒAž<`"8c£Hì! \Ãóx¥ëxT„(4)})¦N€! \T(4ƒAž<`"8c£(H°8«ëxtx8À|Hl€ /€@žX+/‰AžL€t K/€|éB@ž€ ‘!|‘Ax‘t€H€|}*J} HP|8Pt‘!x8Æ9k  \†Aœÿ!t/‰Až”=)aH<À9)ÿÿU)‹=)‘!t@ž8<`ÀH8€a€€t8 H$-/ƒÿÿapAž¸¿ëx;À;Ht€/€@žd€Ÿ/„AžX!ƒãx) })¦N€!/ƒƒãx@ž¼!€€€¿€Ÿ| (P€p)| *})¦N€!€ƒ@žÔ;ÿ  \ž;ÞAœÿ„£ëxHl™<`"8c£”Hì€4= T€H@ž|€@l /‰@žl!;Á8€,Ãóx8¡D)})¦N€!/ƒ+A<`"8c£°H ¨ah€L„/ƒ @<`"8c¢ÜLÆ1‚H‘H0c8Hla|}y@‚ ~c›xKÿÿà!€TÃóx) })¦N€!|yA‚ ~C“xHX!¨hÃóx¥ëx)„8})¦N€!¨h8ƒAž=@"€j–”H“át“áx«ëx9“á|Hl€ /€@žX+ € |
+HÕH ;`;@€/€AžTƒù /ŸAžH€tˆ/€AžŒ<€"8„¢xHT­/ƒ@žxˆ/€/Ažl9 ˆ /€\Až\/˜Až ÃxHg€y HTÅ8cHga|xy@‚~c›xLÆ1‚HqKÿöœ€”HSÙ€™ ÃxHT€y HfÑ“ <`";¡8c¤xLÆ1‚H98y ¤ëxH"á|yA‚0€™ €¹ <`";€8c—xLÆ1‚H €™ ãûxHáH@€t€ap<€8 |cHY/ƒÿÿ|~x@ž <`";À8c¤Œ;€LÆ1‚H½H´!|ex<€£ëx¶ëx>à)})¦N€!|iþp} x||x|HP|þpÞ8|`xßóxHTHå<€|x~óxŸèåûxAž <`"¤ëx8c¤¬LÆ1‚HAH H4!)})¦N€!|`xœ?¿€¸<€8 £ëxAžÿœ|= x…=£ëx)})¦N€!£ëx8€8 (HSu/žAž <`"Äóx8c¤ØW…²¾LÆ1‚HÁH(<`";À8c¥LÆ1‚H©HqH ;À;€€y 0H€ap€t|ƒ"H ñ€/€Až°!x< =) 9)ÿþU?ãûxäûxHÉ8;¿8<€"88„¥8}HQ9= "8/›8 )0 8‘+9?#Až 8“i“I #8 9?38 8 €a€€„„ãx8À!p8à|P|~})})¦= "€©dN€!KÿóÀ€0l E/‰LFAž÷x=@"€™ €j–œLÆ1‚HmH £ëxHcá|= x…=£ëx)})¦N€!£ëx8€8 (HQÍKÿód€Ô¹Áˆ8!Ð|¦N€ ”!û = "|¦d¿P€ 0/€@žD|' x8ÿÿ<`"<À"8c¥<8Æ¥H” 8€8 LÆ1‚H с! 8ÿý9)ÿÿ‰@@”?À"<`"8€8 8c¥x;á€Þ\LÆ1‚H 9<€"åûx8„¥Œ8À a H)/ƒ@,<€"ãûx8„¥˜8 HPq/ƒ@ž€\ H(<`"<À"8c¥ 8Æ¥¨8€8 LÆ1‚H
+ѐa € /€ÿÿ@ž<`"8c¥°HT= ";€9)•;©Ðˆ½ˆÝ„ãxˆý€a ;½H Ý/œ;œ@žÿÜ<`"8c¥ÌLÆ1‚HÑ<`"8c˜¼LÆ1‚HÁ<€#<`"8„R¬8 8c¥ÜHµ<€#<`"8„J¬8 8c¥èH= "<`";éD8c¥ôäûx8 HE/ƒÿÿ@ž<`"äûx8c¦8 H)<`"88cD8 
+;àÿÿKÿÿÌ|¿B¦T¥„>,M‚ 8 |c(x|ƒ P|„*T„ÙM‚ |‰¦|fx|l8c Bÿø|¬|‰¦|7¬8Æ Bÿø|¬L,N€ < `,|¦|¦<@ÿÿ`BÿÏ|8|¦LdN€ ”!ÿð|¦¿Á|~y;àA‚(8` HZÉ|yA‚<€"€¾8„©LÆ1‚HXÑ€ãûx»Á8!|¦N€ ”!ÿÐ|¦4¿A|}y;€A‚€ˆ}c8cHZi/ƒ|~x||xAž`ˆ½<€";à8„©;aLÆ1‚HXa= ";I©$Hˆ©LÆ1‚HXIÃóxdÛxHFõˆ}=úcÛxDÓxŸ;ÿAœÿЀ4ƒãx»A8!0|¦N€ ”!ÿ/„|¦t‘T8˜‘A\9@ÁLáP‘!Xa8x9¿¡d |¾+x88¡@|Ÿ#x“Á¡| ¦@¼P9`}i¦HD‰!+‰9iU :@œ™a}eHa 8  UI:}(J€ 9J BÿÀWà:}!9~/ž9) 8}i¦@¼9`}i¦H  9)Bÿø= ";¡£ëx)d})¦N€!9`ÿÿ/ƒ@žx/ž9`@lWà:}a9?U):}=Jk 8i ɦHD‰!+‰8 U):@œ˜€} JH! 8  )€8c BÿÀ€t»¡d}c[x8!p|¦N€ ”!ÿ/„|¦t‘T8˜‘A\9@ÁLáP‘!Xa8x9¿Áh |¾+x88¡@|Ÿ#x“Á¡| ¦@¼P9`}i¦HD‰!+‰9iU :@œ™a}eHa 8  UI:}(J€ 9J BÿÀWà:}!9~/ž9) 8}i¦@¼9`}i¦H  9)Bÿø= "8a)d})¦N€!/ž8`@Wà:}!€i €t»Áh8!p|¦N€ <`"8€8c©,8 LÆ1‚Kÿþ¼<`"8€8c©48 LÆ1‚Kÿþ¤”!ÿà|¦$¿¡|}xKÿÿÕ½è½KÿÿɃè@ÿø€$»¡8! |¦N€ |fx<`"8c¥<8€8 LÆ1‚KÿþH|fx<`"|‡#x8c©D8€8 LÆ1‚Kÿþ(”!ÿà|‡#x|¦|¨+x8€8 $¿¡|}x<`"8c©L¦ëxLÆ1‚Kÿýñ/Až/ƒ@ž8`ÿÿ€$»¡8! |¦N€ <`"8€8c©T8 LÆ1‚Kÿý°”!ÿð|Ê3x|¦<À"|ˆ#x¡|`x<`"|é;x8c©\|x8Æ©h8€8 LÆ1‚Kÿým€8!|¦N€ ”!ÿà= "|¦$¿a ;‰©p= "|}x|Ÿ#x;i©xHx;Þˆ|u/€
+A‚@žÿìžø@@$çûxƒãx8€8 ¦ëx}ðPLÆ1‚Kÿüñˆßóx/€Až(ƒãx8€8 ¦ëxgÛx9LÆ1‚KÿüÁ;þˆ/€Až þûxKÿÿ€€$»a 8! |¦N€ ”!ÿð/ƒ
+|¦= "=`"˜a8i©p@ž <à"€Ë\8€8ç©x8 9H€Ë\8€8 8á9LÆ1‚Kÿü9€8!|¦N€ ”!ÿà= "|¦<`"8€$8c©|8 98á€É`LÆ1‚Kÿûõ8ÿÿ/ƒ@ ˆ|t|x€$8! |¦N€ ”!ÿÐ= "|¦4¿¡$;©©|= ";É`;á€Þ£ëx8€8 çûx9LÆ1‚Kÿû‰,@ÿÜ/ƒ@ž,ˆ/€@ž ˆ /€[@žˆ
+/ÿ@žÿ”8`
+KÿýÙ8|ù®€4»!8!0|¦N€ ”!ÿð|§+x|¦|È3x8€|`x<`"|x8c©ˆ8 LÆ1‚Kÿú€8!|¦ c8`|cN€ ”!ÿð|fx|¦<`"|ˆ#x8c©ˆ8€8 8àLÆ1‚KÿùÍ€8!|¦ c8`|cN€ |fx<`"|‡#x|¨+x8c©p8€8 LÆ1‚KÿùŒ”!ÿÐ|¦4¿!|¼+y|}x|ž#xA‚l= ";à
+;)©|= ";I¥<= ";i©H,LÆ1‚KÿùE8€8 fÛx|`yCÓx@‚0LÆ1‚Kÿù%7ÿÿÿ8€8 ¦ëxÇóxˆãx#Ëx@‚ÿ¼8|x€4»!8!0|¦N€ |fx<`"8c©˜8€8 LÆ1‚KÿøÌ”!ÿà|¦$¿¡|}xH>Q€$¦ëx8€»¡8 |¦|gx<`"8c¥ 8! LÆ1‚Kÿø„|`x<`"|‡#x|¨+x|É3x8c© |x8€8 LÆ1‚KÿøX= "|gx€É%°/†ÿÿ@ž 8`ÿÿN€ <`"|ˆ#x|©+x8c© 8€8 LÆ1‚Kÿø|fx<`"|‡#x8c©¨8€8 LÆ1‚Kÿ÷ü|`x<`"|‡#x|¨+x|É3x8c©´|x8€8 LÆ1‚Kÿ÷Ð= "|gx€É%°/†ÿÿ@ž 8`ÿÿN€ <`"|ˆ#x|©+x8c©´8€8 LÆ1‚Kÿ÷”=`"|gx<`"|ˆ#x|©+x8c©´€Ë%´8€8 LÆ1‚Kÿ÷h”!ÿà<`"|¦<à"8c©´$8ç¥Ü8€8 9 ÿ¿? ";½%°;ˆãx€ÝLÆ1‚Kÿ÷!8½ƒãx˜€$»8! |¦N€ |fx<`"8c©¼8€8 LÆ1‚Kÿöà|fx<`"8c©Ì8€8 LÆ1‚KÿöÄ”!ÿà|…#x|¦|dx$¿¡? ";½%°;½£ëxHEé€$= "¤ëx»¡8! |¦€i\Kÿù ”!ÿà|¦$¿? "||x;½%°;½ £ëxHE¡€$ƒãx¤ëx»8! |¦KÿøÜ”!ÿ€|¦¡ „Á$á(‘,‘!0‘A4@†$Ø!8ØA@ØaH؁PØ¡XØÁ`ØáhÙp= "8|dx8¡€i\˜8˜ 8ˆ 8KÿÿAKÿ÷퀄8!€|¦N€ ”!ÿ€|¦¡ „Á$á(‘,‘!0‘A4@†$Ø!8ØA@ØaH؁PØ¡XØÁ`ØáhÙp= "8|dx8¡€i\˜8˜ 8ˆ 8Kÿþ­€„8!€|¦N€ ”!ÿà<`"|¦8c©Ø$¿AKÿþ= ";à|{x;I¨üWý8cÛxÚè.ÄóxKÿü¹/Ÿ;ÿ||y@}:ꃩ|àP+€ëA(H @žÿÄH\<`"Äóx8c©àLÆ1‚KÿþñHDHLÅ|yA‚8<`"èûx8c©´fÛxÇóx‰ãx8€8 LÆ1‚KÿôU}ê/ƒ@œ9€$»A}Cx8! |¦N€ ”!ÿà|¦$¿||xH9±= "<à"8ç¥Üˆãx;£<`"€É%´8c© 8€8 ©ëxLÆ1‚KÿóáƒèAž$€$»<`"8c©ø8! |¦LÆ1‚Kÿþ€$»8! |¦N€ ”!ÿ/…|¦t‘!X8= "‘A\89)©\˜ÁLáP‘T‘!$8x9A(¿¡d |~x;á@8e8“Á “áa| ¦@¼H8| ¦H<‰!+‰9iU :@œ™a}?H! 8  € 
+9JBÿÈ8Ti:T:;¡8aý½J= "8)d})¦N€!€½/…Až <`"Äóx8cªLÆ1‚Kÿüñ8`H€€t»¡d8!p|¦N€ |kx|ˆ#x|¦T¶/€0Lž = "<`"|§+x8cª 8 8Àÿÿ€‰6¸}i[xLÆ1‚KÿþŒ|kx|ˆ#x|¦T¶/€0Lž = "<`"|§+x8cª 8 8Àÿÿ€‰6¸}i[xLÆ1‚KÿþL|dx<`"8cª$8 LÆ1‚Kÿþ4”!ÿà|¦$¿a |ž#x|¼+x|Û3x|xKÿÿÉ+ƒ|}xA; |ñÖãûxKÿ÷8€/ƒ@ž$½áÖdÛxãûx¥ëxKÿ÷í|dêx|„4T„Ù~€$»a |ƒ#x8! |¦N€ |`x<`"|†#x8cª0|x8 LÆ1‚Kÿý”!ÿà|¦$¿|}x|ž#x|x?€HKÿòå/ƒÿÿ@ž4Ÿà@ãûxÄóx8 ?ÿ@ÿà<`"¥ëx8cª8LÆ1‚Kÿû98`ÿÿ€$»8! |¦N€ /ƒÿÿ|€#x@ž<`"8cª`Hì/ƒÿþ@ž<`"8cª|HØ/ƒÿý@ž<`"8cªœHÄ/ƒÿü@ž<`"8cª¬H°/ƒÿû@ž<`"8cªÄHœ/ƒÿú@ž<`"8cªØHˆ/ƒÿù@ž<`"8cªðHt/ƒÿø@ž<`"8c«H`/ƒÿ÷@ž<`"8c«,HL/ƒÿö@ž<`"8c«TH4/ƒÿõ@ž<`"8c«hH /ƒÿô@ž<`"8c«€H <`"8c«¬|xLÆ1‚Kÿú”!ÿð= "|¦id<`"8c©ØKÿø¹= "/ƒÿÿi%´@žKÿñ½<`"8c«ÀKÿø™=`"<à"9+%°="8ç«Ì9\k%°<`"8€€É8c©´8 9 LÆ1‚Kÿï9/ƒAKÿñi= "<`"<à"="8c©´8ç«à€É%´9`8€8 9 LÆ1‚Kÿîù/ƒA<`"8c«ÔLÆ1‚Kÿø±="<`"9%°<à"8c©´8ç«è8€8 €È9 9 LÆ1‚Kÿî­/ƒA<`"8c«ðLÆ1‚Kÿøe="<`"9%°<à"8c©´8ç¬8€8 €È9 9LÆ1‚Kÿîa/ƒA<`"8c¬ LÆ1‚Kÿø<`"8c¤tLÆ1‚Kÿø<`"8c¬$KÿïÍ<`"8c¬œKÿïÁ€<`"8!8c­8|¦Kÿ﨔!ÿ|¦¡Átá ‘$‘!(‘A,@†$Ø!0ØA8Øa@؁HØ¡PØÁXØá`Ùh88¡˜8˜ 8x 8Kÿ÷%€t8!p|¦N€ ”!ÿ°<€"|¦8„­`T¿ÁH|xHG/ƒAž<€"8a8„­hH2)|xãûxKÿöi8ÿô/ƒÿÿ|fxAž¤;Á<`"<à"8c©´8祌8€8 Èóx9 ?LÆ1‚Kÿí /ƒÿÿ@ž<`"äûx8c­|HT}!8<€"Ãóx8„­¤˜ H28/ƒAž8<€"Ãóx8„­¬H28/ƒAž<`"Äóx8c­´LÆ1‚Kÿöý8ÿô|x€T»ÁH8!P|¦N€ ”!ÿð<`"|¦8c®LÆ1‚KÿöÅ€8`8!|¦N€ ”!ÿð<`"|¦8c®(LÆ1‚Kÿö•€8`ÿÿ8!|¦N€ ”!ÿð<`"|¦8c®LLÆ1‚Kÿöe€8`ÿÿ8!|¦N€ ”!ÿÐ= "|¦9) 4‘$}€&‘ ¿|x|ž#x€cKÿþ5,@ /ƒ~Až/ƒAžÐ8`HðƒƒŸ; ƒ?cÛx-œÿÿHQ= ".; X|zx|xHP@Ž4åûxÃóxdÛx&ËxH Å/ƒ~Až(€/€@žHDA€œ@žýûxƒÿ/Ÿ/AžAšÿ¨dÛx¥ëx&ËxÃóxH m~/šAž CÓxHå= "€iXH,= "€ß€ŸÃóx8 )<‘>)})¦N€!€4 »8!0|¦} N€ ”!ÿÐ9 ÿÿ|¦4‘'8¿|y|û;x|#x|¹+x|Ø3xA‚(<€"8„­`HCù/ƒAž@= #<`";éJ¬8c®päûx8 Kÿò‘/ƒAžðãûxHBÑ||yA‚à;ÀHãûxHB¹||yA‚È;Àÿÿ/Až£ëxHB|zxH/žÿÿ;@@žƒãx;@Kÿü9|~x8ÿþ+€@|CÓx8€:H/U/ƒAžˆCÓx8€:H/a,A‚t8˜Hhƒãx8€,H/A|yA‚4ƒãx8€:H/-,A‚ ƒø@@œ8HB8{˜/ž@žƒãx8€:H.Õ/ƒAžx/œAždƒãx8€:H.Ù|yA‚P<€"8„®€HB¥,A‚ƒø@@;ã <€"ãûx8„®ŒHB,A‚ƒø@@;ã<€"ãûx8„®”HB],A‚ƒø@@;ã<€"ãûx8„®œHB9,A‚ƒø@@;ã<€"ãûx8„®¤HB,A‚ƒø@@;ããûx8€,H-õ,A‚Œˆÿÿ;ã/€:Ažãûx8€,H-Ñ,A‚h;ãˆ/€,AžXãûx8€,H-­/ƒ8cßP@žãûxH-};ÃÃóxH@|}yA‚$äûxÅóxH,µ}=ò8˜ ÿÿH; “»HƒãxH@]{/š@žü/œ;ÀAžTƒãx8€:H--,@‚ƒãxH@)|~xH08üPãûxH?‘|~yA‚„ãxåûxH,1}>ú›Iÿÿ“ÛH˜/žAžPƒãx8€:H,í|yA‚<8ƒãx˜H?Á{ˆ/€Až\88€8 
+|yy@‚<`"äûx8c®¼HÌKÿòÑ+ƒ|~x@+ƒ@<`"Äóx8c®ÔH¤;À? "#Ëx;ý6À8€8 æûxKÿò¥/ƒAž<`"8c®ôHP 6À/€ER@ž¨üûx:ÿ0£ß;; ;àšãx;a¤ëx8 FÓx#ËxKÿòQ¤ëx~å»xÃxÉóx/ƒ9@cÛx/Až<`"8c¯ LÆ1‚KÿîQH° ;½/€PM@ž @šƒü€P€üT|à:KÿþŸè@œÿ„Hxˆþ/€U@ž¨ˆÿ/€ª@žœ= ";ÿ¾;I¯(;À;aˆÄóxcÛxEÓx8À/€ƒ|
+x/ý9 Až@šH€ÿ€ TüÀTÀTëF>TF>}kãx}ëxTBTýB}këx}ãxTçÄ.TÄ.}g;x}xKÿý]/ž;ÿ;Þ@žÿ„HÈ/ž@ž¨= "=`"9)6À;‹¯T};Kx;é; ¤ëx8 fÛx#ËxKÿðù„ãx8 /ƒãûxAž<`"¤ëx8c¯0LÆ1‚KÿíHLH(/c/ƒ@ž48a§ëx8€8 8À99 9@Kÿü±<`"8c¯\HL;½@šÿ|>@"<RD;’6À`SK;à;@›ãxãxH8#Ëxäûx8 ¦ëxKÿðM/ƒAž<`"äûx8c¯lLÆ1‚KÿìeH|€€À@žd<Àóx‰ð@A} Kx| xš<RD9``
+SKA<€‰@¾9 H |.}J5)ÿÿU`:9k@‚ÿì/ŠAž@/Ÿ;ÿ@žÿX<À"#Ëx8Æ6À8€8 Kÿï/ƒAž<`"8c®ôLÆ1‚Kÿ빁<„|H€DU)Ù~;©W£: ÖH9u|zyA‚©¦9 9`H<`"8c¯ˆLÆ1‚KÿëqHÐ}z.U :9)Bÿô= "<PAƒ¼:É6À= "`RT:‰¯(;`W×>:¡H„#Ëx¤ëx8 ~ƳxKÿîé/ƒAž<`"8c¯ HL<|Àóx‰ð@A} Kx/€}[x| ¦9 A½})¦H |.ÿU :9)Bÿð‹˜@ž|/Ÿ@žt©.p})”U (4|èPU+:9 })0|X.|
+/ŸAž<`"äûx8c°LÆ1‚Kÿéñ«.p}k”8Ui(4})èPUk:|H0}:X.| H9A‚$<`"8c°4¤ëxLÆ1‚KÿéµH /ÿÿ@žþ|CÓxH7!#ËxKÿæQ€T€aºA8!P|¦N€ ”!ÿà|¦$¿¡|#x|xKÿñ}/ƒ@¾XãûxKÿùÉ|~yA‚HÃóx/A˜ €@ž8cH7‰|xH€c/ƒ@žÿØ;àÃóxKÿø±H;à€$ãûx»¡8! |¦N€ ”!ÿà= "|¦$¿A;é = "|{x|œ#x|½+x|Þ3x;IXH )})¦N€!/ƒÿøz@ž$;ÿ?cÛx„ãx¥ëxÆóx/‰@žÿÌ€$€»A8! |¦N€ =@"8`ÿÿ9*>Àj>À€ ‹Mž ‰+8 
+>À}#tN€ ”!ÿð|¦¿Á|ž#x|xH,€/€|xAžH4‰/ƒ@ž €H;ÿ €Äóx/€@žÿÌ8`€»Á8!|¦N€ ”!ÿà= "|¦$¿|}x;Àƒé>È= ";‰°pH Kÿÿi¤ëxH"y/ƒ@ž;Àƒÿ/Ÿãûx„ãx@žÿØ/žAžH= ";é4= ";É°xH$€H3Ñ/ƒ@ž“¿8`H;ÿ €Äóx/€@žÿÔ8`€$»8! |¦N€ ”!ÿð<`"|¦<€"8c48„°x¿ÁKÿþ¹|~y@¢T= "ƒé>ÈHƒÿ/ŸAž<€ü/€@žÿìHD<€"ãûx8„š¤Kÿþy8€/|~xH",A‚;ÀÃóx»Á8!|¦N€ <€"ãûx8„°pKÿþ9|~y@‚ÿÔKÿÿ¨”!ÿÐ|¦4¿||y|›#x@‚<`"8c4HÌ= "ƒé>È= "; °p= ";)°€= ";Iš¤HÀ€ü/€@ž°ÃxãûxKÿýÉ|~y@‚(DÓxãûxKÿýµ8€/|~xH!M,A‚;Ã$ËxãûxKÿý‘„ãx|}xÃóxH ™„ãx//ƒ£ëxAžAšDH }/ƒ@ž8ãûxdÛxKÿýQ,@‚4<`"dÛx8c4€4»8!0|¦Kÿý(ƒÿ/Ÿ@žÿ@8`€4»8!0|¦N€ ”!ÿð|¦KÿþÍ1#ÿÿ| |x€8!|¦N€ ”!ÿà|¦$¿¡|ž#x|}xH )= "|x€ >Ì/€@ž<`"8c¤tLÆ1‚KÿäÍ/ž8€*AžkÀ0ÿÿ|T|8„ <`"¥ëx8c°ˆLÆ1‚Kÿä™HKÿݝ/Ÿ8` ;ÿ@ÿð= "9i>À+ 9)/‰‘+ @ž 8 €$»¡8! |¦N€ ”!ÿÐ<`"|¦<€"8c48„°x4¾á Kÿûñ= "89)>À|{x ƒÉ= ":é°p= #; F¬= ";)°€= ";Iš¤H¨€ü/€@ž˜~ä»xÃóxKÿû;€|y@‚(DÓxÃóxKÿû…8€/|xH,A‚;ãäûxÃxHy/ƒAžäûxcÛxHe||4WœÙ~$ËxÃóxKÿû9„ãx|}xãûxKÿþU/£ëx8€AžKÿþAƒÞ/ž@žÿX<`"8c¤tLÆ1‚Kÿã-€4ºá 8!0|¦N€ ”!ÿp|¦¡ ”Á$á(‘,‘!0‘A4¿¡„@†$Ø!8ØA@ØaH؁PØ¡XØÁ`ØáhÙp8|}x˜8<`"˜ 8˜8c° 8LÆ1‚Kÿâ•£ëx8Kÿáe= "<`"9)>À8c°¨€©€‰LÆ1‚Kÿâi€”»¡„8!|¦N€ ”!ÿp|¦¡ ”Á$á(‘,‘!0‘A4¿¡„@†$Ø!8ØA@ØaH؁PØ¡XØÁ`ØáhÙp8|}x˜8<`"˜ 8˜8c°Ä 8LÆ1‚KÿáÑ£ëx? ";½>À8Kÿà™<`"8c°¨€€½LÆ1‚Kÿá¥8}8€H 1”!ýÐ=`"|¦9+>À4¾á ƒ‰/œ@¾ ƒé K>À i/Ÿ@ž0H8 Hœ9ŠX;àÿÿAž¤ˆ
+9J|t/Ÿ Ažÿä/Ÿ AžÿÜ/Ÿ
+@žxKÿÿÄ/Ÿ#@ž<}*XP9)})¦B@hˆ
+9J|t/€
+AžÿAšÿŒ@†ÿÜH@= "89i>À/Ÿ=‘I>À‘   @ž<`"8c¡Hx/Ÿ"8Až$= "|x}}[x;)±X9@|x;`H¨= "|x:é°Ø= "; ±= "}~[x;)°ð|x;`H`ƒþ /Ÿ@ž,~€;àÿÿ‹Až$‰+8 }?tH“~ /Ÿÿÿ@ž~ã»xLÆ1‚Kÿý­/Ÿ"@ž88a˜H¼/Ÿ\@žÐƒþ /Ÿ@ž(~€‹Až¨‰+8 }?tH“~ /Ÿ"Až°A/Ÿ
+@žxH/Ÿ\Až/Ÿn@žd;à
+H€€ >~/€@ž‰XAžäˆ 9)|t/€ Ažÿè/€ Ažÿà/€‘>“~ Až@ ;à H,;àÿÿ#ËxH/Ÿ
+@žÃxLÆ1‚Kÿü¥›ý;½|èP/€þ@þœ<`"8c±<H/ŠAžX/Ÿÿÿ@ž#ËxLÆ1‚KÿüiH,/Ÿ
+@ž=9@9)‘=H”/Ÿ 8 Ažàt˜9@;ÞHt/Ÿ Až4/Ÿ Až,/Ÿ
+/ƒyAžlˆ/€@ž €y~ƒx~e›x8ÀKÿØÅ/ƒAžD’™H$H'/ƒãûxAž@H58c|yƒù¤ëxãûxˆ/€@žÿÌÝóx/ž@žÿT; H; >Ëx‡þH/Ÿ@ž`Kÿÿè;߃ÿ/Ÿ@žÿô8`H(m/ƒ~@¾<`"8c±ÈLÆ1‚KÿÚuH„“ã~$‹x8 ü>‘8}#Kx“©üHeƒ˜ãxHHƒÝ/žÃóxAž4H&±/ƒ@ž(/šAž/ŸAž0<`"8c±äH/Ÿ@ž<`"8c²ÄóxLÆ1‚KÿöÝHcÛx~¤«xH&a/ƒ@žƒùéûxH@š€ü/€@žt)/‰H@žÿäHL€€øAž8Kÿñe,@‚~ijxãûxKÿñQ,A¢DÓxH%õ/ƒ@ž“ßüƒÿH;À/Ÿ~¤«xãûx@žÿ¨€/€Až<`"€8c²LÆ1‚Kÿö€/€@ž8H(/€@ž “]H;½ ƒýdÛx/Ÿ@žþ°cÛxH&iKÿü\|x€T¹Á8!P|¦N€ |¦#C‘à ‘ã’’#’C’c ’ƒ$’£(’Ã,’ã0“4“#8“C<“c@“ƒD“£H“ÃL“ãP8`N€ ,@‚8€€#€C€Ã ã‚‚#‚C‚c ‚ƒ$‚£(‚Ã,‚ã0ƒ4ƒ#8ƒC<ƒc@ƒƒDƒ£HƒÃLƒãP|¦|ƒ#xN€ = #8˜ V¬= #˜ X¬N€ ”!ÿÀ}€&|¦D‘¾Á|Ÿ#y|{x@‚= #;©V¬H = #;©X¬= ";À;‰²@.|ð®/€Až A’ƒãxLÆ1‚Kÿ×…/žþ;Þ@žÿÜ/Ÿ@ž£ëxÄóxLÆ1‚Kÿ×a= ".:É@= #:éV¬= "; š4= ";)²@= ";I©„;€-›KÿÐý/ƒÿÿ|xAžÀ/ƒ
+£ëxHÑ<`"8c@à8cKÿÏ8ÿý9@‘[9#ÿÿ{8`‰@89 ‘;@8`ÿø€4»a8!0|¦N€ = "|kx8`ÿý€ Hà/€Mž 8‹8` N€ 8`N€ 8`N€ ”!ÿð|¦H-€8`8!|¦N€ ”!ÿà= "|¦9iHà$¿|}x8`ÿü€ Hà/€AžT€k/ƒAžHÝ= "89)Hà€i /ƒAžHu9?€"€}; 9<Hà“©KÿÍÝ“¼Hà8`€$»8! |¦N€ ”!ÿð|£+x|¦LÆ1‚KÿÐñ€8!|¦N€ ”!ÿà= "|¦$¿;‰Hàƒü ƒÜ<|ùÖ|H||ÐàøQA‚¨<€œåûx€Ü)}#Kx))})¦N€!/ƒ| @ž4}ñÖ€|(\<|€ü$€Ü €,€ƒ€£}HPP}?J‘<‘\} þp}
+Cx|}J(})!}kB,|è:‘|‘#|ß0Pü$‘CÜ = ";éHà€/€AžŒ€ /€Až€?€Ÿ8 €ß)}#Kx))})¦N€!/ƒ||x @žl€€Ÿ€¿H ­(€$“Ÿ}}[x|Z(H$}Jè})á‘(‘H= "9`9)Hà8`€ ‘i ‘i/€@ž8`€$»8! |¦N€ ”!ÿà= "|¦$¿a |~x|›#x|¼+x;éHà€ Hà8`ÿü/€Až°; “ß(€ß8 “¿“¿ €~€žH"=““Ÿ<à 8 “¿ “¿$8çjä8ÀŸ,€9€ž HiY/ƒ|dx@ž€Ÿ /„@ž(= ";éHà€/€Až$Kÿý‘€Ÿ /„A¾<`"8c²œLÆ1‚KÿÎQ= "€iI€$»a 8! |¦N€ ”!ÿÐ|¦4¿|º+y|xx|™#xA€$= "8 9)Hài(ƒéæûx€k€‹H!]@þpƒ@Aôƒ@ž „Ð@Aä= "9IHà*/‰AžTj +‹ÿA<€}+J€H@ž,€
+,| š@ž8 *}`ù֐
+ ‹H@HˆKÿü/ƒ@žˆ/šAžd= ";iHà€,šAžP;(ƒÛ8 Æóx€i€‰H%5|€yA‚Œƒû|„ðP„ø@A|Ÿ#x? "8€;½Hàåûxüûxûþp€}H‘€Ý(€]=,}$|P}Jú9)€æ}Z/€‘=,‘]}Hà}'Ù‘}$‘&‘FAžÀ= "9iHà€ ,+|ÐP| I×A‚€+|¿+x…H@@}?Kx?`"8€;{Hàåûxýûx;€€{Hí€Û({;€$}XP})ú|‘{€æ/‹‘;$}Hè}'á‘&‘FAž(= "“II = "8 ;iHà;(ƒ»¦ëx€i€‰H#á|~x|Ÿ#x|€óy€™A‚À8€Û8 }#Kx))})¦N€!/ƒ{ @ž¼àûxƒû|ÀèP†ø@A|ß3x? "åûx;½Hàüûxûþp€€}|„H}€Ý(]8,=$}}_PP}?J/Š‘]€æ}kú‘=$‘}}Hà}'Ù‘&‘F@ž(H,/„Až€›@8 @œ 8`H8`€4»8!0|¦N€ ”!ÿð= "|¦“á ;éHàŸƒ €/€Až|xH!€Tc<Hq€ƒá 8`8!|¦N€ ”!ÿà= "|¦9 Hà$¿A||x|Ú3x;àÿõiHà/‹@ž€;àÿô/€@ž9 9@‘h8/…‘(8‘H<‘(0‘H4AžH P%LeH|éÖ|É|ê;x|É3x|àY֐è<|ÀXÈ8|ì;x|Ë3x}J`})Y‘(0‘H4= "8 ü9)Hà;éDãûx“‰@H== "€ 0/€ Až<€"ãûx8„®¸HE?`";àÿü;»Hà;ÝDÃóxKÿÆI/ƒÿÿ|Až0<à"Ãóx8çp8€8 8À9;àÿøH»á/ƒ@žœ=€iTc<H /ƒ}Až|€}8FÓx8€8 HD8ü HP9,A‚0<+;àÿ÷`·@ƒAž@<+;àÿþ`·Lƒ@ž(H(89 9@Hà‘<;àÿþ‘\H;àÿü= "8iHà€ Hà/€Až ;àHP€c/ƒAžHlu? "€|8;½HàKÿÅ€}/ƒAžHÑ= "89)Hà @ €$ãûx»A8! |¦N€ ”!ÿà|ª+y|¦$¿¡|Þ3xA‚¤= "9)Hà€i€ 0€é8 <}d}„Ö€‰4| #y|Ì@|«9A‚(…@A…@ž† @@<+`·EHP/ŠêÖ@œêÐ? ";½Hà=@€iKÿÂá=@Äóxåûx€iKÿÍ<+ƒø`·$@ž8`€$»¡8! |¦N€ ”!ÿà|¦$¿¡|~y|½+xA‚x8``H |yA‚h8€8 `H­<+= "`·9)p‘?ÃóxH18cHÍÄóxHY= "9`“ý‘‘8`€ Hð H <+`·:€$»¡8! |¦N€ 8`ÿøN€ 8`ÿøN€ 8`ÿøN€ 8`N€ ˆcN€ ˆ|tp`€M‚ 8ÿ|cxN€ ˆˆcTD.|xN€ ˆˆcTD.|cxN€ ˆˆcTD.|xN€ |ixˆcTcÀ‰iˆ ‰)|c[xTD.|cxU)€|cKxN€ ˆ‰c‰#ˆcTÀ}kxU)€}kKxTcD.}cxN€ |ixˆcTcÀ‰iˆ ‰)|c[xTD.|cxU)€|cKxN€ 8`N€ 8£ÿÿ8„ÿÿŒ,œ@‚ÿôN€ ,M‚ |©¦8Ãÿÿ8„ÿÿŒ,œ@ÿôN€ 8£ÿÿ8„ÿÿŒ,@‚ÿø8¥ÿÿŒ,œ@‚ÿôN€ 8£ÿÿ8„ÿÿŒe,ƒŒ|`QM† A‚ÿìN€ ,8Ãÿÿ8„ÿÿM‚ |©¦Œf,ƒŒ|`QM† AÿìN€ 8ƒÿÿŒ,@‚ÿø|c PN€ 8cÿÿŒ| ,€M‚ @†ÿð8`N€ 8£ÿÿ8`Œ,|€ M‚ @†ÿð|£+xKÿÿèP„D.P„€8Ãÿü(A€0”†M‚ pÀ| *|À0PT ð¾| ¦B@ ”†Bÿüp¥,M‚ |©¦8Æœ†BÿüN€ |fx|ƒ#x|Ä3xH|…#x8€KÿÿŒ| @A T§èÿ8Ãÿü8„ÿüA‚(pÀ|é¦@‚T€ä…æ•Bÿðp¥(A€„8¥ÿü”,M‚ |©¦8„8ÆŒœBÿøN€ | ¦ˆä8„˜æ8ÆBÿð| (PT§èÿA‚ÿ¤|é¦Kÿÿ„T§èÿ|Ã*|„*A‚(pÀ|é¦@‚L€äÿü…ÿøæÿü•ÿøBÿðp¥(A€„ÿü8¥ÿü”ÿü,M‚ |©¦ŒÿÿœÿÿBÿøN€ | ¦ŒäÿÿœæÿÿBÿø| (PT§èÿA‚ÿ¸|é¦Kÿÿ˜,L |©¦8Ãÿÿ8„ÿÿŒfŒ|`QAÿôN€ ”!ÿð,¿Á|xA€/…Až /…$@8 
+êûxH9Jˆ
+| t8 ÿÿT>+€@ÿè/‰èûxAž„/‰-@ž9J9€H/‰+9€@ž 9J9€/…@žˆ
+/€0@žˆ
+/€XAžˆ
+/€x@ž9J/…@ž8ˆ
+8 
+/€0@ž(ˆ
+|t/€XAž/€x8 @ž 9J8 <ÿ‰j}GSx`ÿÿ8À}+–}()Ö8`ÉPHx8 ÿÐT >+‰ @48 ÿ¿T>+€8 ÿÉT >@8 ÿŸT>+€AH8 ÿ©T >‰(@œ8ƒ@@Aƒ@@ž‰ð@@ 8ÀH |)Ö|ig/‹@žÿˆ‡P|è;xAž@/„Ažä/†/ Až@š<ÿ`ÿÿHx<`€HpAšl|cÐHd/„8`AžX|@P/€@D‰hÿÿ= "9)ø| X®p A‚ 8 T >/‹x@žˆÿþ/€0@ž8ÿÿH“ä8`»Á8!N€ ,@‚Lˆ8 
+/€0@ž<ˆ9c/€x@ž$ˆ = "8k9)ø8 | ®pD@‚ }c[x8 = "9@9 øH|
+)Ö8c}I‰#})tU+>9)ÿÐ|X®Tÿþ/T÷þ/‡pDA‚ @ž8 ÿàAšT >9+ÿɉ(@Aœÿ°/„Ažd}CSxN€ ”!ÿð|¦ˆ/€-@ž 8cKÿÿ€8!|¦|cÐN€ €8!|¦Kÿþø”!ÿà,¿¡@‚Lˆ8 
+/€0@ž<ˆ9c/€x@ž$ˆ = "8k9)ø8 | ®p D@‚ }c[x8 = "8à;Éø9;àH }((|9Ö}H)Ö} J8c} P|ëIˆ|
+tUF>9*ÿÐ|0®Tÿþ/T÷þ/pDA‚4@ž8ÿà9*ÿÉT>Aš9&ÿÉ}+þpŸX},Kx@ž …H@AÿŒ/„Ažd}Cx|ã;x»¡8! N€ ”!ÿð|¦ˆ/€-@ž,8cKÿþÝ€8!|¦!D}#}DSx}#KxN€ €8!|¦Kÿþ¬”!ÿp|¦”q@@¾AX}XSx|{x|ß3x|¾+x|ö;x}Cx}3Kx@‚= ":©²àH = ":©³s A‚W<8ÿþ+€"@ ;`HhWþs |ÐTö:” A‚L/žAœsA‚(H#ÿސ;Zÿÿ:à-H(;Zÿÿ:à+Hs A‚;Zÿÿ:à H:às A‚$/–@ž ;ZÿþHjÀ|4TÙ~@ÐPËûy; @‚80; ˜HP; Ãóxäûx¥ëx~ƳxH A}!ÊÃóx¥ëx~Ƴx| ®äûx;9˜ Hm|~x|Ÿ#xÀ#y@‚ÿ¸™˜)Ëx@œ~i›xs } ÐPA‚H4˜;{H 9h/ˆ8 }i¦@¼ 9`}i¦9ÿÿBÿÔ/—Až šû;{/’Až8/–@ž80˜;{H /–@ž80˜ˆ!˜;{sA‚H0š›;{H9h/ˆ}i¦@¼ 8| ¦9ÿÿBÿØ™H}9HP9)})¦9 0Ao €/€ÿÿ@ž9`}i¦H ™;;{Bÿø8ÿÿ9!/€}))¦@¼ 8| ¦ˆ 9)ÿÿ˜;{Bÿð/ˆ98 } ¦@¼9 })¦H ˜;{Bÿø€”cÛxºAX8!|¦N€ ”!ÿÀ= "|¦D¾a :Éø= "|xx|š#x|¿+x:i³0|~x: :€%:à H°/€%; @žôŒ| t/‰+Až8A/‰ Až4/‰#@žDH0/‰-Až/‰0@ž0H$c½KÿÿÀc½Kÿÿ¸c½Kÿÿ°c½ Kÿÿ¨c½Kÿÿ U >;€|®p @‚H0
+;Z‰‰:})tU >9)ÿÐ|®p @‚ÿÜHX/‰*;€ÿÿ@žL‰?;Z+‰@œ€9iU):™}JH8ƒˆ/œ@œ œÐc½ˆ; ÿÿ/€.@žœŒ; | tU >|®p @‚H0
+;Z)‰:})tU >9)ÿÐ|®p @‚ÿÜHD/‰*@žD‰?+‰@œ€9iU):™} JH?8 ƒ);Z/™@¼; ˆ|t/€hAž /€lAž/€LAž/€Z9 ÿÿ@ž | x;Zˆ|t/€nAžˆA8/€cAžhA/€%Ažô/€X@žØHÀ/€dAžÄ/€i@žÄH¸/€sAžÌA/€oAž/€p@ž¤HÐ/€uAžÀ/€x8à@žŒH´s A‚H,šþ;ÞH5<ÿÿ‰¦@  9`}i¦;œÿÿBÿ܉?+‰@œ€9iU):™} JH?8 € 5<ÿÿˆãx˜;Þ@ 9H šþ;Þ5ÿÿ@‚ÿôH°‰?+‰@œ€9iU):™|`JH€8ƒc/›@ž~{›xcÛxKÿòÍ+Ëx™@@|kxs A‚H@šþ;ÞH,}+àP‹à9)})¦Am`€/€ÿÿ@ž 9 })¦;œÿÿBÿÈ8 •X9 | ¦A<€‹@¾ 8| ¦H|H®9)˜;ÞBÿð}+àP‹à9)})¦Am`€/€ÿÿ@ž9 })¦H šþ;ÞBÿøH”/œÿÿ@ž c½;€‰?+‰@œ€9iU):™|ÀJH€ß8€ÆÃóxˆãx)Ëxªëx8 8àH,/‰l@ž ‰?H ‰?U)>+‰@œ€9iU):™} JH?8 )|ðP Hà8àHDc½@8àH8c½H,šž;Þˆ|uA‚˜;ÞH¤;ZÿÿHœ8à
+/‰L@žXˆT þ+€} JU)>™?A€9iU):™| JH?9)U%88€€¥H /‰l@ž<‰?+‰@œ€9iU):™|ÀJH€ß8s«HÐ/‰Z@ž@‰?+‰@œ€9iU):™|ÀJH€ß8€8 Hœ/‰h‰?@žLU)>+‰@œ€9iU):™|ÀJH€ß8s 8  A‚P|4HDU)>+‰@œ€9iU):™|ÀJH€ß8s©€8 A‚|þpÃóx|xˆãx)ËxªëxKÿö=|~x;Zˆ|u@‚ùL˜|xðP€Dºa 8!@|¦N€ ”!ÿ|¦¡Átá ‘$‘!(‘A,@†$Ø!0ØA8Øa@؁HØ¡PØÁXØá`Ùh88¡˜8˜ 8x 8Kÿø€t8!p|¦N€ |jx9`|
+X®|t8ÿ¿+€A8c |X®/9k| t8 ÿ¿+€A9) ƒH@ž @šÿÀ|ix|iPN€ = "8¥|fx9)ø|©¦9HT|@®|tT
+>/€9j | P®pA‚Uj>}d@®98ë | X®pA‚Të>| PP|uL‚ Mž Bÿ°8`N€ =`"|ƒ"9+M,kM,‰N€ = "89iM, M, N€ = "9iM,€ M,/€Mž € ƒLž 8ÿü M,N€ = "€ M,/€Mž N€ = "€ M,/€Mž iM,N€ ”!ÿð="|¦|gx8ÈM,8`HM,/ŠAžL8&}j‹H@@<`"8c³8LÆ1‚Kÿ±Ý8`H 8 9*êT:‘&}#KxM,€8!|¦N€ ”!ÿð|¦¿Á|~xKÿìÉ8cKÿÿe|yA‚ ÄóxKÿëí€ãûx»Á8!|¦N€ ”!ÿð=`"|¦9+M,€ M,/€¿Á|x8`Ažp€ Ÿ@ž<€ }?"‰@@<`"8c³HLÆ1‚Kÿ± 8`H<‘+M,ŸÿüãûxH,|ƒ#xKÿþÅ|~yA‚/ŸAž€¿ÿüäûxKÿìáÃóx€»Á8!|¦N€ ˆä/‡Mž 8cÿÿŒ/€8AžÀ@šÿðˆÄ9$8‰/†Mž H,Œ/€Až˜€8AžŒ/€Až„€8@žÿ܈9C/€Ažl€0Až }CSxKÿÿ܈
+‰d9
+€X@ž<|Š#x/‹Mž ‰jˆ€X/ @žMš Œ
+h‹AžÿÔ| x/‹@žÿhN€ 8`N€ TiÀT`F>|KxTiB|KxTcÄ.|xN€ ”!ÿÐ= "9iM88| ¦8€8 ¾á ƒ M8‚ë ƒ+= "|{xƒK;é³XÃx'Ëx~æ»xLÓx}{(.}(.TŠ¾8¥}_R8„UiÀU`F>|KxUiB|KxUkÄ.|[x|É8x‰j|B}Š88|ò})Sx|J}kt\X>|é;x}‹cx|Þ3x|:B@|x},Kx}f[xKÿÿˆ|x8| ¦}…cxüûx;ß@|Ý3x|ã;x;à9€U€ºW澁~|Ü2|h(x}}Z;ÿ}[.9Œ;Þ|½+xU@ÀUIF>})xUGB|  8});x}xUJÄ.ˆ})Sx}kB}kJ|t]k>|ix|€#x}k"B@}d[x|x}%KxKÿÿ€8|¾+x| ¦|Œ#x}e[x|dxãx;ü€8`8ÀTÀºTg¾|ý:}Š*x}~Z}J"x}.}kR8c8Æ;ÿU ÀUF>|KxU B|KxUÄ.‰'|Cx|ž#x}k})t]kH>|©+x| *}‹cxB@|x},Kx}d[xKÿÿ„|Ÿ#x|x8|£+x| ¦}…cx¾ëx9À8ÀlTºTǾ|þ:|ˆ+8}Z}x}[.}kB8Æ9Œ|¿+xUIÀU@F>|KxUIB|KxUJÄ.‰' |Sx}k})t]kH>|€#x|ix|ë"B@|ä;x|x}%KxKÿÿ„=`"}EÂ9+M8|çÊ}Ò|º‘KM8ºá 8!0 ‘ éN€ ”!ÿà= "|¦9)M8$¿a |ž#x||x;i€ T¾|}dú /‹?A|{ú„ãxÅóxH\#¿@|dx¥ëx|{úKÿèmcÛx¼êKÿü¡8ÿÀàòHKÿü‘;½@;ÿÿÀ/Ÿ?£ëxAÿì<`"¤ëx8cM8åûx8cKÿè%€$»a 8! |¦N€ ”!ÿà= "|¦9)M88€$8ÿ€¿¡;郩W½¾})ê;½|ê ½@˜ KÿçM/8@ãûxKÿûýãûx8€8 @Kÿç-? ";½M89]}CSx=U+8U`F>U)Ø|KxUiB|KxUkÄ.|[x
+88
+<Kÿû©8£ëx| ¦=U+ÀU F>|[xU+B|[xU)Ä.|Kx;½BÿØ€$»¡8! |¦N€ ”!ÿ°|¦T¾A|¶+x|—#x|xx;7Kÿæ/–|xAž#Ëx8€$KÿæÙPH0#Ëx8€$Kÿæ ,A‚ÙP/ž@;À8$|ñ®? "?€";½M8;œø;@Ãx|¼„ª|½…ª“]äûx;aKÿý±#ËxÄóxKÿý¥äûxÃxKÿý™KÿþUäûx|£„ª|»…ª“]|¼„ª|½…ªÃxýûxKÿýq~ã»x8žKÿýeH Kÿý];½ÿð/cÛx8€Aÿì¤ëxýûxKÿý=Hàûx@‚8|xKÿý%/s 8€½pAÿÜKÿýÍ= "; ;IM8= "|dx:Iø:a:€: :às¼|¤„ª|³…ª’š|²„ª|º…ªA‚ÃxäûxH cÛx8€Kÿü±|«ÖAž#ËxÄóxKÿü•|»ÖAžÃxäûxKÿüy/œcÛx8€@ž ÃxäûxKÿü]Kÿý/ç;½|dx@žÿh= "8|y9/€é´h/ˆ8 @ž8|‰#x}D®8| ¦8c}i@îˆ Uk€T@.}kx}kSxH8U`¾UkѾAš |®‰#ÿÿ|t})t‰AžH|®˜ÿÿ8c8ÿÿBÿÈ/ˆ9Až |xKÿÿt‰d 9C/H8U`¾UkѾAš |®‰#ÿÿ|t})t‰AžH0|®˜ÿÿ8cƒP9#ÿÿ@žÿÄ@ššÉˆ |tH8`€TºA8!P|¦N€ |ix88` ‰N€ ”!ÿð|¦“á |x€c/ƒAžKÿ¤Y8€ƒá 8`8!|¦N€ ”!ÿà=`"|¦9khTÌH,$TÀMþ|äþp¿a }?Kx|{x}Cxƒ‹ƒ«T«H,| [x|å;x€c}Lè}+á}Š(}i!}e[x}†cxKÿ¢q8/ƒAž€{äûxÅóxKÿ£|`x|x€$»a 8! |¦N€ ”!ÿ°= "|¦9iMT9K ¿0ˆ
+|t/€Až/€@ž@H=+€
+8€l{€0›€4H€¼€8€Ü€<€}€ü€XKÿýýKÿÿ€T»08!P|¦N€ ”!ÿÀ= "|¦9)MD¿0ˆ |t/€Až/€@žˆH=)€ €(/€@žìHp?退(/€@ž˜€€0€4| [yA‚P€8‘€<= "}f[x|x8à9;€€ip9!KÿýQ¡a€¿€9 ‘€(€})(0€a|x9)ÿÿ}=8Hí­€€ €¿€} }@!Ö|P||IHíñ8€l€0Ÿ€4? "= ";½M9?;½€ip©ëx€¼€8€Ü€<€ü€lKÿüɁ<€l“¼€H9)‘<€l= "9)M=);é€xi€H€i€(;«8cÿÿ“©€HK€ €Ë kUJ~T[(i€(UG¸UeX(Tº~TÈ]~Uk]~|çx}+x}k#xTÆþé€|‘ €„UJº~8‘I€x‘i€€ €ˆÉ€ŒH;à€Dãûx»08!@|¦N€ ”!ÿÐ|¦4¿Kÿü= "9)M?‰Hô€£€Ã#C+…€€D/}Š0}i)( AÈ,‹@š †@A¸A@†°Œ@@¨?@"€ã |
+x;ZM9 ?z}†P}eI= "¬@‹9ƒ;€ƒãx¤ëxƒ p;€%ËxHëက €»€9 })È0}` }€!Ö9)ÿÿ}=è8|Œè|káHì€4IÓx8à9d|¦|ex|†#xÃx»8!0KÿûKÿý,@‚ÿ€4»8!0|¦N€ ”!ÿ = "|¦8 8Àä“áÜ8à9È€ip9!Kÿú±/ƒÈ@ž€l XF/‰SB@ž lT>/€@žø€a ˆÁÈ=`"9kM‰€!`=k|e008‰ÿÿˆ„‰!ƒ9Hÿ÷ áptŸÿÿ‘K€‘ €AD €‘+€ë€€\!@«€k€ € ‘+€p‘K€tË€$A‚ T€| þp} x|HPT '89kH T€>9@ÿÿ/€Až,T€.|ÐT '8|€\0= "9)´°T>| ®|t}@Z= "9cÿè9)MUkøx=)8
+a‹@|ˆ#xA‹@ž  @A [ÓxHy@P=€#9@€ €}9ŒM:À|xuÛxtþp€¬€[ÐP}I(09)ÿÿ}78HèE=`#9kM€ € €«€} }@!Ö|—P|vIHè~%‹x|#x||xäûxÃóxHèi}é{x}Ãsx…ãx¦ëx|äÈPhÛxKÿ÷e=€"}ïÚ9Œpl+K}J¨})¡‘+‘KHŒÃóxäûx~%‹xH耀@A€@ž  @A DÓxH|œø|{ñ~%‹xHçÝ|“#x|’þp}SÈ}2Á‘N‘.9D}é{x}I¦H9`™i9)BÿôDÐP}ï"H!A Šøiñ/š@Kÿøµ|}y@‚ýÔ= "A)p€ JP€dCÓx¹Á8!`|¦N€ žØ@Aÿ$žØ@žÿ¤Ÿà@AÿKÿÿ˜|£+xKÿüÄ”!ÿÐ= "|¦4¾á ?€"|zx;¼M;É¡ä?ý€`€€d‹Aœ@€€@/€@ž ;ÀH\€DKÿùÙ ¡= |M} HP8‘€@€`‘?€d= ";iMˆ |t/€AžAœ /€@è;àHè=;€ €`/€ÿþAž/€ÿÿ@žlH9 9@;à‘:‘ZH´€ €\/€@ž j[ fH  f9@= " n‘‘Z9)M;Þ=i});à‘+€Hh€i€i€\/‹‹ã8}#@ž}C.€ H |.9@= "}køP‘Z9)M9k =)}cZ;Ñi€H = "8}Ûx;)p`ÿÿ?›;€€<€h£ëx8€}@Љ}HþpAœ(9“€h€ i|P8}k@8`‘i Kÿúå<€h 9I€¸‘\€h@žD¡=9)U)89)ÿühˆ}?Kx}>þp})R‘<€h}Lø}+ñ‘(‘HKÿÿd8€8}Kÿú;[£ëx¾ëx‘:‘Z‹û;¿W½8;½ÿ÷¤ëxKÿúQ<€h9)})ê‘<€h= "89)M=)i€`9k‘i€`|ù®€4Ãóxºá 8!0|¦N€ ”!ÿ= "|¦9)Mt=i½Á(€}2Kx|? x|wx}~[x+€‚k€p9à:2 ’9)U)6})Ð|In‚‹€t8T6~Ž£xƒ^€ƒ¾€8`8€: ºê¥ëxHãå¥ëx~c›x8ÿÿ~„£x~€8|Ô0|xHãe€€ €¾€=`"9kpƒ€} ƒ+}@!Ö|–P|uIHã™EÓx|#x||x8€8`Hã~)‹x#Ëx…ãx¦ëx8„ÿÿÃx~› 8|ûÁÖKÿòuˆR/€T 8@ž>€9)ÿ˜ €ñ89€U)øxaŒ <}2JT &‹`I l) h‘>€P‘^€T@ž9ï/@8`8ÿ÷Hx>€9)ÿÿ} þp€8A@žX‰@@@P=@"9`9Jp9€}Cx~ƒx*‘i‘‰é ‘ $KÿøEˆ/€/Až(€}Ôsx|xH 8`8ÿö= " tH‚~€p‚ž€t>€}p8 ÿÿ}ƒHPƒ}‰¦Am €/€@ž 8| ¦B@$ˆ8c:÷|t/€˜ 9k@žÿà9 ~ƒx}0®Kÿþˆ|uA‚=@"T>9Jø|
+®p A‚Dm`ÿÿ/€€Až8`8ÿúKÿÿP= "9@8`ip9 ‘+‘K‘ $ë HL/‹@Až8`8ÿùKÿÿ:÷ˆ/€/Ažÿô~ý»xH;½ˆ|uW€>/œ/A‚= "9)ø| ®p
+ @‚@žÿÔ9`9€™}‘ž€@ˆ|t/€AžAœL/€ADH,ˆe‰1d‘>€d|4TÙ~T:€\8ÿþ€`H= "9@9)p~C“x8€i9 ‘+‘KQ<18‘+ ‘K$KÿöY€l
+XD/Š2B@žD=€">€89Œp~C“x9)ÿø8€l‘+ Kÿö€2| P€dHd€¾€8`8€Hßùž€DKÿóY 9 a)Òñl
+ÿÿH/ŠÒÿAž@š   ¡2r| P‘~€@€dH€€DKÿÿ¸=€"9`9Œp8‘~€`9@9`€h,‘I‘i8Kÿøµˆ/€AžL|dx~ã»xKÿÑ5/ƒ@ž8€? | Ky@‚ ~`›x~‰£x›’~Ž£x·ëx|x}4KxKÿû€8KÿøY,@‚ÿ = "8ÿþ8` t›a¹Ëÿ¸€ }a[x|¦N€ ”!ÿà= "|¦,9ih$¿¡|~x|Ý3xA‚ %H P}IÖ|àH}
+Cx|é;xH 9 9@‘+‘K= "8 ü9)M=);途ãûxKÿÏù= "€ 0/€ Až<€"ãûx8„®¸KÿÐ= "9)M=);途ãûxKÿ’8ÿý9#ÿÿ~‰@8ÿôAX= "“ÉpKÿòµ/ƒAž€~Kÿ‘µ8ÿøH4¤ëxãûxKÿÏ]ãûxKÿùé8/ƒ@ž€~Kÿ‘…= "€ t|x€$»¡8! |¦N€ |ix88` ‰N€ €cTcç>N€ |ix€cTkÀ T`TiB}kKxTÂ>U
+ÀU F>}kx})SxUBTcF>|c[x|„KxUÄ.Tc>|„CxN€ /ƒô|`x8`Mž +€ôA/€8`Mž H/€ÿþ8`Mž /€ÿÿ8`Mž 8`N€ ”!ÿð|¦“á |x€c/ƒAžKÿ…8€ƒá 8`8!|¦N€ ”!ÿà= #|¦$¿¡|x|Ý3x|þ;x  Òb/€@ž8|à €}!Ö= #|ª+x9)Ò(i ‰$9 }J`})Y|Ê@|©9KÿŽ™8/ƒAž€Äóx¥ëxKÿ=|`x|x€$»¡8! |¦N€ ”!ß°= #|¦9)Ò( T¾! |zx|“#x|µ+x|Ô3xi,£ >}7Kx;©pxƒi0|vx:!;+ÿÿ:AH؁}/‹ÿÿAžŒUiÀU`F>|KxUiB|KxUiÄ.|Kx;½8/œ;à| ¦@¼L8| ¦H@};½UiÀU`F>|KxUiB|KxUkÄ.|[x€Ð@ž|àPT:½H0;ÿBÿÀH4€—(€w8 8À~'‹x|›"Kÿþe/ƒAžHa ;àUiÀU`F>|KxUiB|KxUkÄ.|[x8Üóx| ¦H0i ;ÿUiÀU`F>|KxUiB|KxUkÄ.|[x€ÐAž Wà:Ÿð}1@œBÿÄ/žù@”8ž€(€w8 |„Ú8À|„È8~G“x|„Kÿý¹/ƒAžœ9?üU):}2J9IH0j9JUiÀU`F>|KxUiB|KxUkÄ.|[x€ÐAžŸð;ÿAœÿÌH|ځ7(|È8~ÀJ8;ÿÿ|â|È8/˜@žþ(= #~ijx~e›x~¦«x~‡£x€iÒ8KÿýH8`€ Tº! 8! P|¦N€ ”!ÿà= #|¦9IÒ(= "$8 t¿¡|}x|ž#x8jx¡j< ª:„X@œ$}$)Ö8ãJT:|
+.@žHl| )Öã£ëx8€æûxKÿý)/ƒ@ž ;àHD T D.TÂ>})x‰ðAž= "8ÿø;à tH8= #T:9)Ò(©.€$ãûx»¡8! |¦N€ ”!ÿÐ<à#|¦8çÒ(TiÀ4ThF>T€ÀTŠF>}Kx}JxT‰BT`B}JKx= "}xTfÄ.T…Ä.8 t¾á |~x|Ÿ#x}3x}Y+x£G68gx; :à9z;šÿÿUk:}gZ;k H, 9C9T D.TÂ>}&x8—0| ¦A<€†@¾ˆ9`}i¦H|jUiÀU`F>|KxUiB|KxUiÄ.|Kx ð€À@Ad@šDjUiÀU`F>|KxUiB|KxUiÄ.|Kx ø€È@A4@š€
+ *| Ky@‚ 9J9ˆ0Bÿ„@ž 8H8TÉ<})BW„>9);½U)8;œÿÿ;{ÿü|cH.TiÀT`F>|KxTiB|KxTcÄ.|xKÿý,@‚ 8`HÈ|ÐP/€AþÐ= #9)Ò(8 x¡):}`J9)|àJ  T D.TÂ>})x9)})¦Hp€€ð@ž`€€ø@žT€/€@žH€ /€@ž<=`#¡'8`9kÒ(U D.U)Â>|Kx9Kx¡ :ë|B}J‘KH8çBÿ”= "8ÿø8` t€4ºá 8!0|¦N€ ”!ÿà= #|¦9 Ò($9Hx¿¡ È:(|ª28é9f T D.TÂ>})x)}kJ}JZ‡P@ž<¡h6;À}Cx8žXT>8T:}#@ž 8åH € /€@ž þûxKÿÿÌŸX@ž}[x8cxH@ <€ø@Aœ}?1Ö8x|`JH$8ÄóxT:|h.Kÿû½,A‚äßóx= #;À;©Ò(8T:}8ÿÿT> äûxT D.TÂ>H }kxUi<})R8
+9)ŠX U)8@ž“È |cH.TiÀT`F>|KxTiB|KxTcÄ.|xKÿû1+Ÿ,A‚TAÿ€= #9)Ò(  :})8é=`#¡'8`9kÒ(U D.U)Â>|Kx9Kx¡ :ë|B}J‘KH8`€$»¡8! |¦N€ ”!ÿÐ= #|¦9IÒ(= "48 t¾á |wx|š#xjƒê€ €ø@ž” 
+4+€@  T D.TÂ>}*y@‚,k9UiÀU`F>|KxUiB|KxUkÄ.|[xH8kKÿöM|hx|€#x= #)Ò8I)0Š|i”ˆ@Aˆ@ž € @A ~ø»xHP= #äûx~ø»x€iÒ(Kÿú¹H4= #9iÒ(ƒë+€€H@ž,+£k4+›ƒÉ@ T D.TÂ>}+y@‚(€T ÀT F>})[xT B})[xTÄ.}$xH 8Kÿõ… 9>+›ÄHPT D.TÂ>}yx@ T D.TÂ>}*y@‚0? U+ÀU F>|[xU+B|[xU)Ä.|Kx/€ÿÿ@žLH8Kÿõ/ƒ@ž@žÈ@@œ0þÈPŸÐ@@_Óx= #Ãxåûx€‰Ò@|„òKÿÅ}Hà+›@ T D.TÂ>}+y@‚,€ T ÀT F>})[xT B})[xTÄ.})x8iH8Kÿô‰hc|c4TcÙ~/ƒAžÀ= #W ð¾‰)Ò`|H0H¤= #9)Ò(‰i8¡I:)Ë\08
+ˆÄˆ ‰d‰D
+T¥ÀTÆÀTç€T€|3x|ç+x‰ ‰$Uk@.UJ@.}k;x}Jx})[x}SxUÀU'ÀU&BU+U
+ˆÉˆ ‰i‰I
+T¥ÀTÆÀTç€T€|3x‰ ‰)|ç+xUk@.UJ@.}k;x}Jx})[x}SxUÀU'ÀU&BU+U
+/ƒAž= "äûx;ɵÌÃóxKÿºñ/ƒAžt€}gÛx8€8 8ÀÌKÿìE/ƒÌ@ž<ƒãxäûxKÿº½/ƒAžHäûxÃóxKÿº©/ƒAž4Ãóx8Kÿº•,@‚8°aPa°4H ;àH;à 4¡!P=`#8 9kÒ(T
+D.TÂ>}JxU Â>U)@.})x/Š±K:±+4Až9 8¥} (0| P9A‚ÿô= #€áT >8iÒ(8Àp|Æ0U ÀTéÀU
+F>TàF>}J[x|Kx££4˜£8U BTëB}JKx|[xUÄ.TçÄ.}JCx|;x8Æÿÿ+‘C(ƒ,°Ã<@<`"¤ëx8cµØH$¡#:8 þT>+€#U@<`"}$Kx8c¶LÆ1‚Kÿ~Hà/ŠAž8|Ð| 8€ Až<`"8c¶,KÿÿÔKÿöeãûx8€8 Ì8ÁKÿëEa= #8€;éÒ(U`ÀUcF>|cxU`B ¿:|cxUkÄ.;ßx|c[xÆóxKÿë /ƒ@ž<`"8c¶hLÆ1‚Kÿ}ùHL xT D.TÂ>}$x+„°Ÿ6@<`"8c¶Kÿÿ</„@žT :Äóx|ex|~Kÿ¹ÅH<€zKÿz]8ÿøH€zKÿzM= "€ t|x€»!ä8!|¦N€ ? #$Ëx;½Ò(;½px£ëxKÿ·Ñ£ëxKÿ÷ 8/ƒ@žÿÀKÿÿ¬”!ÿP|¦“!”“A˜|¹+x|š#x|Ä3x““aœ}Cx“ “¡¤|ü;x};Kx“Á¨“á¬|Þ3x|}x´8¡H\|y@‚ T&l ÿÿ/‰ AžD“Û€´ƒãûxƒ!”ƒA˜|¦ƒaœƒ ƒ¡¤ƒÁ¨ƒá¬8!°N€ ``<+/œ`·@Aÿ¸€x!,/€8Až €Tº~‰Až€€}KÿÊ)<+`·F|~yA‚ÿ|}€88 Æóx}c[x+)})¦N€!|y@‚0€á£ëxDÓx“a%Ëx9<
+ÃxÆóx9HE|xÃóxKÿÉ]Kÿÿ€á£ëxDÓx“a%Ëx9<
+<+`·F|yyA‚ÿ¼£ëxKÿ²Q„ãxeÛx“A¦ëx*Ëx|gx9Ãóx9 KÿûM|x#ËxKÿÄe€4ƒ!ãûxƒAƒa|¦ƒ ƒ¡$ƒÁ(ƒá,8!0N€ ”!ÿð|Å3x|¦€É)})¦N€!€8!|¦N€ ”!ÿÀ|¦D’Á|–#x’á“ |·+x“A(“!$|zx“¡4“Á8;À“á<“a,|ß3x“0€fƒ£€p A‚˜€p A‚ sË@‚4€šW¼ð¾/„Až„sÀ@‚|€#€ „@@œ€ „@@œ|<+cÞ‚Á‚á`·5Ãóxƒ ƒ!$€DƒA(ƒa,|¦ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ```?_ Œãx9`}
+`|éYÿ‘ €D‚ÁÃóx‚რ|¦ƒ!$ƒA(ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ `€W þp A‚/‰@žp€T|/€Až(€p A‚ÿsÀA‚ÿˆ`<+cÞ‚Á‚á`·kÃóxƒ ƒ!$€DƒA(ƒa,|¦ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ `f&(DÓx8 ÿÿ8Àÿÿ~dzx}i¦~è»xN€!|~xKÿþD`€¿HB-/ƒ@ž°€ƒ?p @‚°/œ@°€¿€ß ;; ;`H,```0Æ|¥”œè;9¿ß @þØ€;½/€Ažÿ؁?€hÛx$Ëx€ú;{})¦?(N€!pkx@‚œ€¿€ß Kÿÿœ``cÞKÿþ<``/œ@€¿€ß ;;`; H €¿€ß 0Æ|¥”¿ß @þ8€|™ê¨ëx€ú?(;{;½}i¦N€!œØp`xA‚ÿ°cÞ€W þKÿýø```/‰Ažýô€€š€¿H@/ƒAžýØcÞKÿýÐsÀ@‚ý؁?€DÓx~dzx~è»x8 ÿÿ})¦8Àÿÿ?(N€!ÞxKÿý¨<+c`·kKÿý,;9 Kÿýh```”!ÿ°|¦T“!4|yx’ ’¡$|”#x|µ+x“@“a<;€“ÁH“áL|ß3x’a’Á(’á,“0“A8“¡D€f€p ƒÃA‚<p A‚ s‹@‚ €™WÛð¾/„AžLs€@‚D€#€ „@@œ€ „@@œ$<+cœ`·6H4```|ÙÖ€ÿ |
+x| þp}ˆP}gI‘‘Ÿ €T‚aƒãx‚ ‚¡$|¦‚Á(‚á,ƒ0ƒ!4ƒA8ƒa<ƒ@ƒ¡DƒÁHƒáL8!PN€ `€Véþp A‚¤/‰@ž€T|/€Až¸€p A‚ÿ„s€A‚ÿ|`<+cœ`·kKÿÿd```f&($Ëx8 ÿÿ8Àÿþ~‡£x}i¦~¨«xN€!€||xKÿþœ€¿ H>m/ƒ@ž €ƒ p @‚ /›@p:à;@:ÀsþpH4Ÿ ~Ûx~}›x}Lð}+é‘?‘_ ;Z;›Ð@ÿ€/€AžÿÈ€™~ųxÃxæûxKÿù•p`~÷x@‚x:ÖKÿÿÀ```cœKÿþp``/›@Ô:à; ;ÀH``@þ€™|xòÅóxæûx;½Kÿù);Þ›èp`~÷xA‚ÿÔœxVéþ€Kÿþ\/‰Ažþd€€™€¿ H</ƒAžþHcœKÿþ@s€@‚þH?€$Ëx~‡£x~¨«x8 ÿÿ})¦8Àÿþ?(N€!œxKÿþ<+bü`·kKÿý:à9 KÿýØ```”!þÐ= +|¦}€&4’á a)·|—#x““!}Cx|yx“A“a|º+x“Á(“á,|Þ3x|ÿ;x’Aø’aü’’¡’Á“ “¡$‘ô€€HAž\€4ô}#Kx‚Aø‚aü|¦‚‚¡} ‚Á‚á }€ ƒƒ!ƒAƒaƒ ƒ¡$ƒÁ(ƒá,8!0N€ :~…£xHM©|uy@‚ps@A‚( T&/€@Až€„= +a)·R/€@žÿly89 “A¬9@-ž°“ᜑ! ‘A¤}v[x“!˜“ÀAŽ¬“Á´Y€´|Z}`Z¸*H‘a¼/‰Ažô;`€8t @‚dWIþƒÁ ƒá¤;@. ; ``€„ãxÅóxæûx¨ëx/€#Ëx8à Ãx;œ@žA’$aœ}i¦N€!{xs`@‚LƒÁ ƒá¤3ÿÞ”/ “Á “á¤;½@žÿ˜€¬p A‚ÌskA‚Ä<+c{`·k°si@‚ŒAŽäskA‚!°Kÿþ0`~©«xKÿþ$``sI@‚ÿ €</€Ažÿaœ#Ëx8<8 ÿÿ8Àÿü}i¦8à9 ÃxN€!p`|{x@‚ÿŒ€¬p A‚þÄpkA‚þ¼Kÿÿd#Ëx~ä»x~…£xHGµ|iyA‚ÿdKÿý `€pVÝð¾/€@ž¤s@@‚œªëx9 }ŸP}~I‘a ‘¤€t/€@ž¨sK@‚ |éցa ¤|
+8Á˜Kÿõ±{xs`@‚ûTKÿüh```<UU`UU‹@@\<+` ·FKÿùpp A‚þ;  Kÿý€a´KÿµEKÿû|áցa ¤|áÖ|
+x| þp} P|ëI{ûxá ‘¤KÿúÜUc<|cZKÿµa,A‚ÿ˜a´yKÿùØ€œ!À8x8 ÿÿ8Àÿý8à| ¦9N€!€¬|xKÿûÐ;@8q+@‚$/€Až$€a˜€x€¡¼H4U/ƒa°Ažcÿ€¬T|/€Ažp€¬p A‚ûÔsàA‚ûÌ<+cÿ`·k{ûx°Kÿú€¡¼H4¡/ƒa°@ž !¬‚a¼q+@‚Ä/œ@ÿd|áÖ:À|x|þp;@;:A˜H4``! A¤}Šð}ié‘a ‘¤;:sœÀ@¼€/€AžÿЀx~ųx~c›x~F“xKÿóÍp`Zx@‚Œ:ÖKÿÿÀcÿ{ûxKÿù\/€Ažÿ<+c_`·k{ûx°Kÿù<``/œ@þ¤;À;@; ;˜H@4€x|sòÅóxÃx;½KÿóM;Þœèp`ZxA‚ÿÔÿx!¬W@þKÿþXsà@‚þ!œ€a˜8x8 ÿÿ8Àÿý8à})¦9!ÀN€!ÿxKÿþ````”!ÿà`¥|¦$‘9! ”éÿø<à!8çÂp}(KxKÿö9€$8! |¦N€ ,”!ÿðA‚T/ƒAžL}##Ö| !ÖƒAž0```8`8!N€ `})#Ö| !Öƒ@žÿä/‰}#Kx@žÿè8`8!N€ ``”!ÿà|¦$“á|Ÿ#x#€ dp @‚ 8|x€$ƒá8! |¦N€ |ƒ#x8€KÿÿI/ƒ@žÿÔãûx8€Kÿÿ5/ƒ@žÿÀãûx8€Kÿÿ!1#ÿÿ| Kÿÿ¬”!ÿÀ|¦D“ }Cx“!$“A(|ù;x|Ú3x“a,“0|»+x“¡4“Á8|}x|ž#x’á“á<cK € ` }$QÖp‰BA‚ =‚ë9)ÿÿ‰ðAž}_Sx£ëxÄóxKÿþù/@šÐ8À}8à K` qI€A‚ ëþ8qI|@0}@;Ö}S–A‚€ ˆ@@œì@šØ9 8`/›€(AžÛ/šAž‘:/™Ažy/˜Až‘ `ÿþ€D‚á|cúƒ ƒ!$|¦ƒA(ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ```;ÿÿÿ†ãxKÿÿ0`¡+΀ ~é=9)ÿÿ‰ð@žþô€ |P} S–})QÖéQ@‚þàKÿþØ``÷øP9<8`Kÿÿ(|QÖ|€ðP+„@8
+ÿÿ„@žÿ0ÿÿ||”;ÿÿÿ9 Kÿþø”!ÿðc€ L/€@ž8€9 ° X‘+T8 L8!N€ ```”!ÿ = +|¦}€&d“ÁXa>·“¡T“P|}x’0’¡4’Á8’á<“@“!D“AH“aL“á\‘,€€ðAžX€d,Ãóx‚0‚¡4|¦‚Á8‚á<}€ ƒ@ƒ!DƒAHƒaLƒPƒ¡TƒÁXƒá\8!`N€ ``€ƒ€`/€|Ÿ#x¢Ä:‚„`Ažؐ088`°ZKÿ®å.|{xA’؁= €}/‰AžH8ÿÿ|K–ƒ@@8<+;à`·F=²É:A’ cÛxKÿ®=/ŸAžÿ,ãûxKÿ®-Kÿÿ |cIÖKÿ®}|wyA‚ÿÀ€ €½8€~ÿ»x;€| )ÖKÿœ€ƒÝ$/€Ažh`^~ãûx;œ>€ ‘‘? ‘_€^~>;Þ ‘?‘‘_;ÿ H]1€€à@Aÿ¤}8 cÛx}d[x  :+`T<U)¸° :‘+`Kÿ›ñcÛxHTQ€€`p @‚äp A‚<‚¤€/€Až¨;à;;!;A;H ```€;ÿ€ø@@t£ëxäûxÃx&ËxGÓxˆãxKÿûI€p @‚l/ŸAžd€/„AžX+Ÿÿÿàûx@ 8`ÿÿ€}T>8 üT Â>T@.|KxfÛxc°Zk}i¦N€!|~y@‚œ€`p @‚ÿ\€/„Až<p A‚ /Ÿ@ž,}~¥«x~æ»x}c[x+)})¦N€!|~y@‚H€/„Ažÿ €€Á8 €}|Æց#)|×2})¦N€!|~yA‚þÜ``~ÿ»xKÿý„``8`Kÿ˜­€|`xKÿý```=<+`·F²É:KÿüŒ```€</€Až£ëx| ¦N€!|~y@‚ÿ”€8’„`²Ä:8 °ZcÛxKÿ™ÝcÛxHR=}}c[x+)})¦N€!€}#€ /€AžƒT8€/œAž ```Tˆ<|B.};B.€HAž˜;ä/ŸÿAdWé<}{J.|J.€XAžP8/€T<}[}| | ¦@½(H ``  ¡*9k9J€HAž ;ÿBÿä|¤øP€}8„T„<T¥<|ÛBHA©|~y@‚þ€äûx8„/„ÿ@ÿP€}TdÛx8 Kÿ˜É=€~ÿ»xT¸}#Kxik}i¦N€!|~xKÿû¸‚½ Kÿüȁ)8€})¦N€!}8€8 üfÛx}c[x+)})¦N€!}€|~x}c[x+)})¦N€!/žA¾ÿp~ÿ»xKÿûL9 })¦Kÿÿ`”!ÿà= +|¦a)·$“á|x€€HAž€$ƒá}#Kx8! |¦N€ €p @‚H€</€Ažãûx| ¦N€!|iy@‚ÿÀãûxH&¡€$ƒá9 8! }#Kx|¦N€ Kÿù‘|iyA‚ÿ´KÿÿŒ”!ÿð|ˆ#x T Â>T@.|Kx|4/€ó
+Až <+8!`·wN€ ``` ¡#T
+D.U+D.TÂ>U)Â>}Dx}kKx‹ @AÿÀ= ªª8ÿôa)ª«|HT èþ‰ Aœÿ¤8 ÿþ8`„Aœÿ”8!N€ `”!ÿà= +|¦$“Á|~x“á|Ÿ#x€a#·€Až$€$ƒÁƒá8! |¦N€ ``|ƒ#x8 08€Kÿ•ý~U8U (4|J}KA‚P* /‰Až¬| .|HP= ªªa)ª«|HTèþ€
+*‘? } HPU+ 6U):}iXP‘‘89@ÿÿ`€‘_9 9`‘?9€ÿÿakÿÿ9 ÿ‘Ÿ$8`‘ ^ƒÁ(‘?,€$‘_ƒá8! |¦N€ ``‘?Kÿÿp``”!ÿð|¦€/€@žLc€ƒ8À€€£ +€ L/€Až ÉX}c[xH/€8!|¦N€ ```T (4T8C|Zc8 }*€ë|Ê. ÿø|ã;xg(U F>U$À|„xkU Ä.|„xU)B|„Kx}i¦N€!€8!|¦N€ `”!ÿð= +|¦|dx€a#·€Až €8!|¦N€ ```d<+`·+q A‚ÿЁD/ŠAžPdUi8U`(4})}*J€i /ƒAž0€‹Až”€Å €å%TèF>TÀF>TêÀTËÀ}JCx}kxU)>TàÄ.TÈÄ.}Jx}kCxU Â>TçBTÆBU)@.})x}J;x}k3x8±#‘C°
+‘c|ƒ#xKÿþ5€8`8!|¦N€ ```e EUgF>UHF>U`ÀUIÀ|;x})CxUgÄ.UHÄ.|;x})CxUkBUJB|[x})Sx‘#€T>T Â>T@.|Kx°%q A‚8€¥+…ÿ8€@4<+`·†Kÿþ€``<+`·€Kÿþl`€+€€AÿÔT>T Â>T@.|Kx°Kÿÿ```”!ÿ= +|¦}€&t“Áh|~x“¡d“`|½+x‘Á(‘á,’0’!4’A8’a<’@’¡D’ÁH’áL“P“!T“AX“a\“ál‘$€a#·€Ažl€t$Á(á,|¦‚0‚!4}‚ ‚A8‚a<} ‚@‚¡D}€ ‚ÁH‚áLƒPƒ!TƒAXƒa\ƒ`ƒ¡dƒÁhƒál8!pN€ ~/‹AžèTš>= "€ž/š9ɶÐ~&Và/š- ~ &V1à9à-š
+/€Aÿ ?€ 9)ÿÿ€HAœ¤/„@X;@ @’ÿ€€€ A;@?’Ÿ ’Ÿ¡i9kUj 6Uk:}KPP9Jÿô})R‘? }#KxH```€ ;@/€Aÿ/„@Ü;@ KÿþøW@:}..})r})¦N€ ```’ž}[x€’Ÿ   /‹@”? /‰8i Až48 ÿÿ’Ÿ  /ƒAž ’€ž€Ašèc9€;`‘¡CUiF>U`À|KxUiÄ.€ß |KxUkB|[xU À|xUF>UGD.})xUJÂ>UÄ.|ëSx})xUB}(Cx/†}Là}+Ù‘ ‘=‘]@€ T ÀT F>T
+Ä.})[x})SxTB} x|P€/€Až€`+’@ @’8Aš(~Kÿý€```Ašÿä~Kÿýh`€ /€@žÿÔ8`Kÿü˜```€ KÿþÌ``€ /€@žýô;@ ‚¿ /•AžT€€ @H€ß(;?(/†Až>U€ p A‚H€iˆ€ €Až<€©|Ã3x8€Kÿñ>~ƒ:i’~Ãx€‹KÿöÙ,@‚ûè¡¡xU>T D.TÂ>})xU`D.‘9 ‘9UkÂ>|[x? /‰@DU yU@ÀUIF>UKÄ.|Kx|[xUJB|Sx/š Ažô’™ U >?Ëx9)U+ 6U):}iXP9kÿô|xZy €“@œý‘ù?ËxKÿý„/„@4;ÿÿØ8ÿÿ€ AŽV1 >~  V1à>@žýX’ŸKÿýP```€ß /†Až´? €9)‰@œ ‘? 8fÿô €€ @ý ‘ÿKÿýc€Ã9€:À¡C ãUiF>U`À|KxUiÄ.‘ý‘|KxUkB|[xTÈÀ|xTÀF>TéD.UED.}xUJÂ>TÀÄ.TçÂ>}#;x|«Sx}xTÆB}}L¸}+±}3x+ƒ€‘=‘]‘ @ý48€8Kÿý ``€Kÿý``;@Kÿúä``€icU@F>UDÀ|„xUIÄ.|„KxU@Bk|„x8 }i¦N€!,A‚ý¤Kÿù¬<+`·€Kÿù `?8i KÿûÈ`98x ’™?Ëxy 9)ÿÿ‘9 Kÿû´?_‘Y‘9KÿýØ```<+`·|Kÿù@<+`·}Kÿù4>€iKÿQ,A‚,ay|fxKÿüÐ<+`·Kÿù<+`·~Kÿøø<+`·FKÿøì”!ÿ°= +|¦T“áLa?·“a<“@|›#x“ÁH“¡D|~x€€øAž8€Tƒa<ãûxƒ@ƒ¡D|¦ƒÁHƒáL8!PN€ ```c<+`·+q A‚ÿ¸ƒ£/Až`€T (4T8€Jý†/ƒAž@€¿ /…@ž´8ÿô ?8 ÿÿ/€@žÈ~ /‹Ažs`;à@‚ÿHÃóx8€ 8¡Kÿ÷m|y@‚ÿ0dÛxÃóxKÿþé€~€¾ 8À€€%Tº~} HP‘%#€ L€ž/€Až ÉXH$€8 ÿÿ|x€~H`KÿþÐT  6T¥:|¥P8ƒ Kÿ‰Á? 9)ÿÿ‘? Kÿÿ8```}=à.T>T Â>T@.|[x° ÃóxKÿóõ€Tƒa<ƒ@ƒ¡D|¦|xƒÁHãûxƒáL8!PN€ `<+`·€KÿþD`}=à.‘~±i±iKÿÿ¨```”!ÿ |¦“aL“AH|š#x8€“P“¡T|¼+x’á<“@“!D“á\|Ù3x|xd“ÁX;aeÛxKÿö|wy@‚|<+`·‹ÐAœX<+`·|```€|XP€Ð@žt! A$‰à@@äãûxeÛx8€Kÿõ¥<+`·„``€d‚á<ƒ@ƒ!D|¦ƒAHƒaLƒPƒ¡TƒÁXƒá\8!`N€ ```ãûx8€eÛxKÿõEƒÀAžD/ƒ@žÿ¤€ !$€àAžœ@A<œAžãûx8€eÛxKÿõ,@‚ÿlãûx8€ eÛxKÿôí,@‚ÿTKÿÿ ``‰àAž¼ƒÁ(; }žP}}I‹à@AT‹àAž¼ãûx8€eÛxKÿôƒÀAž´/ƒ@žþüKÿþ´<+= +`·|a#·„—AžþÜ``~ã»x€d‚á<ƒ@ƒ!D|¦ƒAHƒaLƒPƒ¡TƒÁXƒá\8!`N€ ``‰È@žþüKÿÿ `ŠÈ@Aþ\Kÿÿ@`™H@@þìKÿþ$ŒÈ@@ÿD~ã»xKÿÿˆ<+`·„KÿþH`”!ÿð8€8!Kÿýt”!ÿ°= +|¦a*·T“áL|x“A8“a<“@“¡D“ÁH€€PAž8€TƒA8}CSxƒa<ƒ@|¦ƒ¡DƒÁHƒáL8!PN€ ``c<+`
+·+q A‚ÿ¸c/‹Až0€T (4T8|Jˁ> /‰Až;A8€EÓxKÿó|jy@‚ÿt€ƒa ƒ$/€@Ä>€ 9)ÿÿ€HAžtH¬``€(ƒß“$“a |Jƒ¿|P(Kÿð±|jyãûx@‚ÿKÿïÑWÉ(4WÀ8|J?}}/‰@T+€ 9)ÿÿ€H@ž@8€ EÓxãûxKÿòQ8€EÓx|jyãûx@‚þ¸€ !$€Ø@žÿl‰à@žÿdãûxeÛx†ãxKÿþE|jxKÿþˆ``<+`
+·€Kÿþt`”!ÿ`= +|¦¤“áœa?·“Á˜“¡”|~x’!d’Ah’al’p’¡t’Áx’á|“€“!„“Aˆ“aŒ“€€øAžT€¤‚!dãûx‚Ah‚al|¦‚p‚¡t‚Áx‚á|ƒ€ƒ!„ƒAˆƒaŒƒƒ¡”ƒÁ˜ƒáœ8! N€ c<+`·+q A‚ÿœ€/€AžÐ;A@8€EÓxKÿñ|y@‚ÿxÃóx8Kÿìý|y@‚ÿd^!€ ‚AH/Š‚aL~)P@ž”;€; 8€~è"€ /€Ažd/Š~È .Až¡6:€; U D.U)Â>|KxTü><+/˜`·ƒ;`@ž8/™Až #ËxKÿ”­/›AžþÐcÛxKÿ”KÿþÄ<+`·€Kÿþ¸`UI8U@(4|‰;€9$ÿØ; }(Ji€ €XAœÿTÃóx8€ EÓxKÿð|y@‚þlÃóxƒ@ƒ¡DKÿýý|y@‚þTÃóx~$‹x~E“x~f›xKÿù|y@‚þ8^UI8U@(4|‰Kÿþð```€~ 8cT D.Ti(4Tc8TÂ>|cJ}xxKÿ”<+`·F|iyA‚ýÜ€¾8€}9Kx:€8¥T (4T¥8|¥Kÿ¡Kÿþ¼>;à €iKÿ“Õ/ƒ|{x|uxAžþ°€ëyA‚ €~¤ëx~¥«x8Á\HV9|y@‚þŒv6W 6€‘58u ‘uW>T Â>T@.|KxW :|©(P°<ªª`ª«>i¡V9kÿôUID.}kUkì>UJÂ>U`Â>Uk@.}kx})Sx±u}8HP9)U$ 6U):|‰ P|–"KÿE>€\~¦«x8 ƒ• i}c[x+)})¦N€!|y@‚ýÄ€/€AždW€ }XPP|P ‘WU@>ÃóxT Â>T@.|Kx°Kÿë9|y@‚ý|W€F>W‹À}kxW‰Ä.}kKxW€B/”}}xAžlÃóx8€EÓxKÿí½|y@‚ý@€\>EÓxÃóx“á@D8€“áH“¡L€ |PPKÿë‘|y@‚ý~$‹x~E“x~f›xÃóxKÿ÷|y@‚üè€~€¾ 8À€€%Tº~})‘%#€ L€ž/€Až ÉXH!|xKÿü¤`€~>9)ÿÿc‰ t€ (/ˆ}I–Až8ÿÿ|@0}J8€ +|
+Ö|J|xKÿý¸€¾#Ëx~ä»x=Ëx8¥T (4T¥8|¥Kÿ98“>9)ÿÿ‘9 ~ù»x>9)‘>U)>U Â>U)@.})x±6]KÿþT8€ EÓxÃóxKÿìU€L!PÃóx8€EÓx€èP}<HP‘!PKÿêA|y@‚û´€\EÓxÃóx“¡L8€“PD’@’HH|y@‚û„Kÿþ€”!ÿà= +|¦$“áa?·““¡|¼+x|#x“Á|~x€€øAž(€$ƒãûxƒ¡ƒÁ|¦ƒá8! N€ c<+`·+q A‚ÿȁc<+`·€/‹Ažÿ´€T (4T8|Jë?€‰Aœ8p€<+`·‚@‚ÿ€KÿùA|y@‚°€~T (4T8|J뀟 /„Ažs |ƒ#x@‚´? /‰}%Kx Aœ(8©|dxT  6T¥:|¥P8c Kÿ}•€¿ ?9EÃóx‘_ …ãx8€9)U >‘?T Â>T@.|[x°Kÿè•|yA‚\Ãóx8€Kÿò€$ƒãûxƒ¡ƒÁ|¦ƒá8! N€ ``? 8d 9)ÿÿ‘? KÿÿD```ÃóxKÿç]|y@‚ÿœKÿþ\```? 8h Kÿÿ `”!ÿÀ|¦“0“a,||yD“A(“¡4“Á8“á<A‚¼€ /€Až |xKÿõ89 ‘< ƒ¼/Až€<;a/‰@P;À;à(;@Hƒ¼|ø.;Þ/€Až €aKÿ™“A€|ù.<‰ð;ÿ(AÿÈ€€aKÿm8;‘<ƒãxKÿU€DƒA(ƒa,ƒ0|¦ƒ¡4ƒÁ8ƒá<8!@N€ `”!ÿÀ|¦D“ |¸+x“A(“!$;@€“0“a,|œ#x“Á8“¡4|~x“á<c€ L/€Až£KX€= +a?·€øAž@€Dƒ ãûxƒ!$ƒA(|¦ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ``/œAž€ œ@@@<+ƒ ƒ!$`·)€DƒA(ãûxƒa,ƒ0|¦ƒ¡4ƒÁ8ƒá<8!@N€ 8` KÿŒ<+`·F|yyA‚ÿ`8CÓx KÿŒQ/ƒaAžԐy “™|ex„ãx“ÙFÓxÃóxHõ|y@‚´ƒ™ 8| ¦;\(‰ãx`i(9)/‹@ž,Bÿð€ 9
+ó±z±<(±z9 d±: € t = +a?·{A‚PCÓx8€<Kÿâm|y@‚<¡<( U+D.TD.U)Â>TÂ>|cx}kKxy‘y8cT`(4Tc8|cKÿ‹i/ƒaAžy€¹€y8€;€8¥T (4T¥8|¥Kÿx큙¡z8À €þ;@UjD.UkÂ>T D.TÂ>})x}J[x‘, ‘L‘,Y 9 ‘, 8
+( ~€ªlƒj9kÿÿ4ÿê}}[x9
+||y@‚ÿTxah9 ~ųxl€áp#Ëx8€8}@ø}ê|
+x‘xt¬P‹I“h“¡l}ˆP}gI‘ap‘tKÿõ©||xKÿþð```Ÿ0@žÿ$ƒ¡x/@žÿ/Až #Ëx8€8¡PKÿßi||xKÿþ°```Œø@žÿ8ÿÿ~ųx#Ëx8€xKÿß5||y@‚þ|/Ažþt#Ëx8€8¡PKÿõ||xKÿþ\``Ÿ0@žþ¼!hAl8ÿÿ#Ëx8€~ųx’ap’t1Š}i”x‘ah‘lKÿÞÅ,@‚¼@’ý\#ËxKÿìá||xKÿýø`|xKÿþŠø@žý´!hAl} P|ëI‡À@žýœˆ¸@žý”•@žýŒ8ÿÿ„@œý€8~ųx#Ëx8€xKÿÞI||xKÿý„```!hAl€¡p€Át}†P}eI}Lø}+ñ‰À@žýœŠ¸@žý”||xKÿýL†ø@@ý$#Ëx8€8¡PKÿóå||xKÿý #Ëx8€KÿçQ||y@‚ý#ËxKÿëñl`€Ô/€·€Ažý||xKÿüü”!ÿÐ|¦“á,4|yA‚€l €Ô/‰· Až€4ƒá,8!0|¦N€ `€/€Až |xKÿƒ89 ‘??9`‘/‰Až€ L€øAž,8ãûxKÿƒA€4ƒá,8!0|¦N€ `‘iLKÿÿÔ``”!ÿÐ|¦4“á,|x€l €Ô/‰·Až €4ƒá,8!0|¦N€ ``€ /€Až |xKÿ‚Á89 ‘? 8ãûx Kÿ‚¡€4ƒá,8!0|¦N€ `”!ÿð8!Kÿÿh`”!ÿÐ|¦“á,“Á(|y4“¡$A‚€l €Ô/‰·Až$€4ƒ¡$ƒÁ(ƒá,8!0|¦N€ `€ˆƒXAž /ƒAž#) })¦N€!/‹Až+}c[x) })¦N€!€ /€Až |xKÿÉ89 ‘? €/€Až |xKÿ¡89 ‘?€T/€Až |xKÿy89 ‘?T€$/€Až |xKÿQ89 ‘?$€0/ƒAžHU]€,/ƒAžHUm€H/ƒAžKÿýý€L8H/ƒAžKÿý%ƒß„/žAžp>;©ÿÿ/“¾@ž\€/€Až|xKÿ€Á“¡“¾€/€Až |xKÿ€¡89 ‘>8ÃóxKÿ€8ãûxKÿ€q€4ƒ¡$ƒÁ(ƒá,8!0|¦N€ ”!ÿð|gx|¦€#8`p @‚lU ð¿| ¦@@|¨+x```(U ÀU+F>U*Ä.|[x|SxU)B|Kx9Bÿ؁g|¦+x8 }c[x+)})¦N€!€8!|¦N€ `”!ÿà|¦$“Á|¾+x“ဃãp A‚Œ€€cˆ€Až€|£+x8€åûxKÿmuWàð¿| ¦@<Ãóx``#U ÀU+F>U*Ä.|[x|SxU)B|Kx8cBÿØ€$ƒÁ8`ƒá8! |¦N€ ``€c#8 Æóx)})¦N€!,A‚ÿx€$ƒÁƒá8! |¦N€ ”!ÿð„/ˆAžH€ /€@49@9`8à``(9J|éY.9k„€ €PAÿè88`8!N€ ,”!ÿðA‚€l €Ô/‰·@ž £<ƒ88!N€ `|ky”!ÿðA‚€ l €Ô/‰·Až8`8!N€ ``€kD8!|`(x|#x DN€ ``”!ÿðc#€ã9k9)ÿÿ‘#‘cUj(4'$}IR€
+ 8((0})YÖ‘#h(‘c€((dq A‚0¡*C(})XP‘#g| S–})9)ÿÿ})QÖ})[–‘#8`8!N€ ”!ÿð8ÿÿ#8!€ |PKÿÿ@```”!ÿÐ= +|¦4“á,|x“ “¡$|œ#x|Ý3x“Á(“A|¾+x“a€a#·€Až,€4ƒAƒaƒ |¦ƒ¡$ƒÁ(ƒá,8!0N€ €/€@žX€8/€Až$€€¿äûx€ß<| ¦N€!,@‚ÿ¤€/€@ž8`KÿÿŒãûxKÿþm,@‚ÿ|_Dq@A‚$€T(4+$})¡iqi@‚ÿ„€/€Ažÿx€ /€@ž qK<+`·;@‚ÿ\Kÿÿ$``€¿0€(…AœŒ8€¥ëxÃóxKÿiÍ€€¿,Äóx§ëx8ÀH.ý(?,€0})Z‘?,?D| P0<€ÔU)ÿþ`H¾1)ÿÿ})I}#8=c,8k·B?9)ÿÿ9k‘?‘‘|Kÿþ„€4€Ÿ,KÿiÉ€ ƒƒ_0›@@|x€Dp A‚/šAž `DTúDp @‚,?p @‚€Ÿ /„Ažüi€ß$eÛx}c[x+)})¦N€!<+/ƒ`·!@žýì_?€¿ $};HP‘,/…€
+‘?|֐0Až |* /šA¾þ¤€4€¿(€Ÿ,|º(P|cÒKÿhå_(?08€¥ëx,Ãóx|PP}:J}k}*HP‘,‘?0Kÿh1€€¿4Äóx§ëx8ÀH-aD<+`·BUiè})þpUk¸}#8‘DKÿþ„€©€$8€|»)ÖKÿgáKÿÿ$€ß /ˆ|É3x€æHAžþÈ€§ `?@U :9I}e.ˆX@@(‘_@€ŠAœÿÜ€D|É3xT<DKÿþ„ˆXAž,|B€X@A|É3x€DKÿþd€DhXP|É3xKÿþT€D‘_@` ‘D€Š@œ}`[x|É3x;`Kÿþ(U`<|É3xD;`Kÿþ`”!ÿð8À€8!Kÿûä”!ÿÀ|¦D“¡4“á<“Á8|x“a,“0ƒ£„/Až48`€Dƒa,ƒ0ƒ¡4|¦ƒÁ8ƒá<8!@N€ ``8`KÿxÝ<+|iy`·FA‚ÿÀ;a ‘?„•;ÿü“©“©“© “©“©“©€ƒŸ„Kÿx/ƒ|~xaAžœ|8ÿÿ9 8`ƒß„“¾8‘> Kÿxa/ƒ||xaAž|€€„/ƒAžÿ,€ 9@9`/€@$9#9J} Y.9k„€ ŠAœÿè88`Kÿþì`€„aKÿw<+“ß„`·FKÿþ̃¿„€}{Kÿwm“€„{Kÿw]<+“Ÿ„`·FKÿþœ`”!ÿ = +|¦ä“áÜa?·“AÈ“!Ä|º+x“Ð“¡Ô|Ü3x|#x“ÁØ’á¼|~x“À“aÌ€€øAž@€ä‚á¼ãûxƒÀƒ!Ä|¦ƒAȃãÐƒ¡ÔƒÁ؃áÜ8!àN€ `€D;à/€Až| ¦N€!l`€Ô|x/€·A@žÿ €~„/ƒAžЀ /€@<€c| ¦9#„€€è@žH`€ 9)„€èAžô}#KxBÿì€p A‚/AžÈ>€ @A¸€ L/@š8€€àƒãx@Ü@šÔ:á;`€~ø»xeÛx8€ÃxKÿcõ8À‡ãxÃóxÃxEÓxH)%^8Ýÿÿ€
+L€ê(/@šì8 €};–>$jU(4})€‰/„@ž¨<+`·;˜¸AžþŒÃxKÿuuKÿþ€``<+`·)Kÿþl`DÓx8 €8cKÿcÝKÿÿ```<+`·Kÿþ< iX/ƒœ@€|{xKÿuu:á|xy@‚ÿ ;à Kÿþ```  XKÿþè``@š(9 €‰à};Kx@›ãx/›Ažð|9Ö|0P9 |Ö})X09k
+Ãx| \09)ÿÿ|H8‹"`€};Ò„ãx8 ‰@ºPA}Ûx€~„€€àAž4~€Ã}c[x+)})¦N€!|y@‚þā>„}#Kx“‰€c$Ëx¥ëx}ØP9ê|cÒ;@Kÿb­>~„„ãx8 ;œ}#KxI€ËJ}I¦N€!/›|y@‚þ`@žÿH€`KÿþL` ªXKÿþ¡*XKÿþÜÃóxKÿúÍ|yA‚ýlKÿü´:á|{x~ø»xKÿý¨```”!ÿÐ|¦4“!|™#x“A“a|zx;`€“á,“Á(|¿+x“ “¡$#€ L/€Až£iX€`/€|xAžè€ /€@ž“Ÿ €/€@ž“Ÿ€/€@ž“Ÿ/›€AžÐcÛx;  KÿsE|~yA‚TeÛx8€Kÿ`éÃóxäûx8 €KÿaY€9 ±>€/€Až\CÓx$ËxfÛxÅóxKÿûY|}xÃóxKÿr‘€4ƒ!£ëxƒAƒa|¦ƒ ƒ¡$ƒÁ(ƒá,8!0N€ ``“žKÿÿ¤``8`LÆ1‚Kÿ_)||xKÿÿ ```€4ƒaCÓx$Ëxåûxƒ!ƒA8À€|¦ƒ ƒ¡$ƒÁ(ƒá,8!0Kÿú¨`”!ÿð8À€8!Kÿú””!ÿÀ= +|¦a)·D’Á|¶+x’á“ |×3x|˜#x“a,“A(|{x“!$“0“¡4“Á8“á<€€HAžL€D‚Á}#Kx‚რ|¦ƒ!$ƒA(ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ```€@/€Až| ¦N€!l`€Ô|ix/€·A@žÿ˜/˜Ažȁ;€ ˜@A¸€„/€Ažø/—€AžD€p @‚è€û;øÿÿ€L€g(/@š9€|ß–{$€§TÀ(4}k= +a)·;€‹/„Ažÿ}&Öƒ;})øP8
+}IÖ}0€"@š49 €‰¸}>Kx@~þ»x/žAžœ9 ~Ú³x})(09)ÿÿ}=@8€}>ê„ãx#Ëx8 ‰@ýPAßóx€Û„€€àAž,9€Æ)})¦N€!|iy@‚þ|;„}&Kx“‰€†CÓxåûx;œZú|„ê; Kÿ^aßðQ@‚ÿ€~ç»xcÛx~ijx~ųx8ÀH# „~ijx8 €(h €h9)| [Ö|YÖ} HPU*80U+:}kR‘(Y.€T 80T:|J|c8cKÿ]é9 KÿýÐ`<+‚Á‚á` ·)€Dƒ }#Kxƒ!$ƒA(|¦ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ```€û€»€L/AšÀ ÇX;X9ÿÿ|3–i }H–}k+–|
+ÖŠZ} @P} 1Öƒ;ˆ€§Kÿþ4`€›„€ /€@ý´€„| ¦9$„€€ÀAž$``}$KxB@ýŒ€ 9)„€À@žÿì~óx8„8 €Kÿ\å9 KÿüÌ¡'XKÿýÐ``¡XKÿýt``T«Éþ9Xÿÿ;X8À€}
+[–€  |+–}hYÖˆ}+PPKÿÿDcÛxKÿõ|iyA‚ýKÿül”!ÿð8À€8!Kÿü”!ÿ`= +|¦a*·¤“Á˜|ž#x“áœ|x€€PAž$€¤ƒÁ˜}CSxƒáœ8! |¦N€ `c<+`
+·)+‰ @AœÿÌ€8/€Až| ¦N€!l`€Ô|jx/€·A@žÿ¨ãûxÄóx8¡KÿÿY|jy@‚ÿ T&/€@Ažÿ€<+`
+·JKÿÿt”!ÿ`= +|¦a*·¤“¡”|½+x“Á˜“áœ|ž#x|x“€€PAž(€¤ƒ}CSxƒ¡”ƒÁ˜|¦ƒáœ8! N€ c<+`
+~ÛxH``AžpˆÃóx8€&/€AžŒKÿS½8€=|yÃóxA‚ ›Ÿ;ÿKÿS¡Äóx|ey£ëxA‚ ›…8¥=þûx)$})¦N€!/Ÿ|yA‚ÿ”cÛxKÿe‘€4ƒaãûxƒ ƒ¡$|¦ƒÁ(ƒá,8!0N€ ;àKÿÿÌ”!ÿà= +|¦a)·|Ê3x$|«+x|æ;x€€H}CxAž$€$}#Kx8! |¦N€ ```<à!‘A88ç!à8 ‘a9HB|iy@‚ÿ´€/€@žÿ¨<+` ·LKÿÿœ``”!ÿà|¦$“Á|þ;x“á|xˆ€§…Až(€$ƒÁ8`ƒá8! |¦N€ ``€g8ŸKÿQå/ƒ@žÿ́~€8`ƒá €$|¦> 9)‘> ƒÁ8! N€ ”!ÿð= +|kx€a#·\p A‚8/„8`Až,€ ˆk8`|Zx|
+þp}Ix})PP})þp}kH8‘d8!N€ ``”!ÿð= +|kx€a#·\p A‚/„Až ‹8`8!N€ ```€‹ˆKÿÿà``”!ÿð<+`·\#q+ A‚ƒƒˆa 5Tâ8|x8!N€ `”!ÿà|¦$“Á|ž#x“á“¡|x#i`q`A‚”€ €(@Aˆqj€8 i@‚¨; ãûx½X0½Ö½)Ö¤ëxKÿ°­?i € ½YÖ1Cÿÿ|`”ž|cêAž@€ }#Z‰@@œ0€$ƒ¡}#KxƒÁƒá8! |¦N€ `8|`*€$ƒ¡ƒÁƒá8! |¦N€ ```  þKÿÿX``”!ÿ =`+|¦}€&d“á\a·’á<“@}7Kx|Ø3x“!D“AH|ù;x|º+x“P“¡T}Cx|}x“ÁX’0|ž#x’¡4’Á8“aL‘,€€øAžP€d,ãûx‚0‚¡4|¦‚Á8‚á<}€ ƒ@ƒ!DƒAHƒaLƒPƒ¡TƒÁXƒá\8!`N€ 8`”Kÿa½<+`·F|{yA‚ÿ 8€8 ”KÿOY<+cI`·‘;£ëx8\KÿNÙ8cKÿau/ƒaAžø{ ¤ëx:¡KÿMñƒû 8€?ãûxKÿN½/žAž´s@@WVþ~ijxA‚băœãûx8»‰¦N€!|}y@‚p/žAž€{ÄóxKÿùÍ|}y@‚T;8`‘;ˆ“i\Kÿ`á/ƒaAždsG €@‚t/˜AžØ<+/™`·G@ž<``w@A‚<“w¿ëxKÿþ„/ƒAžÿL›Ã;Ãû Kÿÿ<`<+`·FKÿÿÈ`cÛx¿ëxKÿ݉KÿþH8`LKÿ`M/ƒaAžÿЀ{8€8 þ´X}c[x|x+)})¦N€!|}y@‚ÿl€›X<+`·$‰ø@žýèƒ$Ì;Kÿÿ0{8€}c[x+)})¦N€!8`Kÿ_Å/ƒaAžÿH€;:€T8€{€Û8 ü}c[x+)})¦N€!|yA‚<ýûxKÿþԁ{$ËxÃx}c[x+)})¦N€!8ÃxTKÿÿ¤€{T/ƒAž€›8 KÿMe€€{`@H¹[= +a=·¡j8m`ÿÿ/€ïS@žþ\€
+L= +a=·+€AþHsH@‚\WIþj`/‰@žx}i[x8ý¡}'9@‚p*dAžU)þ/–Až8ÿ„}(9= +a=·D@‚ýøsI@‚ q`@‚8*8
++€A8|H0*L/‰Až 
+X/€@ð*89`€|H0*L€
+(/‰Až¡jX| ցj9 /™})X09k
+9)ÿÿ})})\0‘;(Až”€›<+`·"„È@žýL{}c[x+)})¦N€![€
+`p@‚H
+ /ˆAžT8`ÿøˆAD€
+L€û(9 €j/€Až¡*X8|X0|KÖ= } HP‡HA *€
+9`} HQA‚9)ÿÿ})C–9i‘{9 €
+`*p€A‚¡
+þ/‹Až 8|H09+ÿÿ{|CÖ})–8i/ƒ{ Až8ÿÿ|–‹@Aü„|cYÖKÿ\í/ƒaAžüp€/”$AžÄ[€
+`€Û$9` *p€A‚¡jþ8|H0; /‰~À[ÖAžœ|Ù3x;€.~„£x…ãxcÛxKÿøý{8 &Ëx|dx}c[x+)})¦N€!|}y@‚û°@‘$=Ëx;À£ëx;ÞH y–ð;½ Aÿì€ ;œ€à@€@9Kÿÿˆ[‚ŠKÿÿ<[ 
+d/˜P@\€
+dp A‚P€;$/€Až$| ¦9`  ±iT:° 9) Bÿì€`T“wKÿùŒ€Kÿÿì‘{ 8`{Kÿþ8“wKÿùd€›Kÿý€<+`·<Kÿú¼UiþKÿüŒ<+`·CKÿú¨`”!ÿð| +x|Ë3x|ê;x} Cx|…#x|x}g[x}HSx8€8!Kÿø””!ÿP= +|¦a)·´“Á¨|ž#x“á¬|x€€HAž$€´ƒÁ¨}#Kxƒá¬8!°|¦N€ `€/€AžX<à!˜ãûx88ç-8€8 œ8À9˜KÿÍ|iy@‚ÿ¤€´!œƒÁ¨ƒá¬8!°|¦}#KxN€ 8€8¡Kÿì|iy@‚ÿp?a4€ dp A‚€8t @‚€Tº~}k–8 +€1A(82|xÃóxH)Y|iy@‚ÿ €KÿÿD`+€ÃP8€ôAÿÜKÿÿÔ”!ÿà/…|¦“á$}?KxAœ$€c€„€„@Aœ€„@Aœ(8`€$ƒá8! |¦N€ ```€iH&ý/ƒ8`AžÿÈKÿÿÈ”!ÿ@¡ƒ6|¦#¡c4Ä’€€‚})¦’!„’AˆU&À|¦‚#‚C ’aŒ’‚c‚ƒVDÀ’¡”’Á˜‚£‚à V…À’ᜓ ‚ã$ƒ(V§À“!¤“A¨VÀƒ#,‘@V F>‘Áx‘á|ZcxVPF>¡Ã8¡ã:}ˆ¦“a¬“°V’F>“¡´“Á¸U4F>ƒÃ0‘a<TÀ‘ÁD‘áHTF>V/F>V<ÀV}ÀVqF>VÈÀV³F>VëÀVÕF>W
+ÀVöF>W)ÀWF>W8F>{sx})ÃxÃ“á¼U˜Ä.ƒWÙF>WÀÀ|Ëxœ{xãalUÙÄ.|„ƒx‚ }ɦ|¥“x|ç›x‚CU“Ä.ƒ$½‹x‚#|Æ£x}k³xVTÄ.VÄ.UÒÄ.UÄ.Ã(ƒ,}J»xU÷Ä.ã }«xV5Ä.UñÄ.UÏÄ.UŽÄ.WÌÄ.| cxZËx‘ ƒ#,{Ãxœ»x|„³x‚ã$‚à WÞB“Á(ƒ(W9B})sx“!,VÖBV÷B€@WB’Á8’á4½«x“0}Ȧ~©¦UÎB}J{xãƒÁ<}ȦÁDVµBTÂ>~©¦U×Â>T@.€DUìB|¥£x‚ƒ|ç›x|Æ“x‚c‚C}‹x}kƒx‚# ‚T@.ZcxVB|¦}‰¦V0BVQB“CVrBV“B‚H{xœ{xá8|„ƒx½‹x‚4‚!0|¥“x|ç›x‚A,‚a “c“ƒ|ÆcxWÙÂ>(WÞ@.ÙËxƒ “£})“x£ãV–Â>Ã‘#,V”@.ƒÃÈ£CZ~–³x~`cx‚ƒd‚c`}J‹x}ØÃxWÉÀ‘! 0~‰¦‚C@£cÎ~h¦| ¦‘C(“A`ˆ¦‚#DÃTTF>³#4³6T
+À~·»x£#X¢£<}{x“ad²ã8WÛF>ãL¢ãP}kƒxVSF>²Ã:‘ V]À¢Ã>£RV4F>‘c$’¡LV%À‚Hƒ\W†À’ÁP’áT½›xUöF>€ ~h¦“X“!\W™F>ƒƒà|ÛxUëÀ“a €à|¥£xVF>~‰¦VÀ}k³xVvÄ.TÄ.€XU×F>U˜F>UÇÀU„ÀW‰À}«xWœF>V•Ä.|ÆËx}JÓxUùÄ.|ç»x|„Ãx})ãxUØÄ.}kËx|Ƴx‚ÁL}J«xTÂ>‚¡ €àV<Ä.WÔÄ.|çÃx})›xƒT‚a\VÄ.~´£x|¥ãxWÞB’ ‚`VÜÂ>~¨¦~ɦTB“Á}ÓxƒÁdWÂ>€TVxÂ>‚aLU—Ä.VµBVÖB|„»x‚áP~¨¦’Á Vu@.WÖÂ>T@.ƒÁP€XV[Ä.V1B½ÛxVûÂ>V—Â>WÔ@.T@.€\VRBVB~¼ãx~›Ûx‚¡T@.| ¦€`½“x|¥‹x‚A }ƒxUïB³ƒ<³c>T@.$“£@UŒB}k{x€d‚! ~zÓx|„cx£D‚aUÎBÙËxT@.~@›x|çsx}ɦ}J‹x})«x}ØÃx|x~¦|ƃxá$}÷»x‚‘HƒX‚#²ãZ³X~–³xUœÀ“ ÈUœF>¢ãþãP’áh²ÃΣ^‚Ã`³CP³#RUúF>~Ȧ ¦ãT‘CdV8F>‚ƒä‚V'ÀUêÀ|çÃx}JÓxƒ\Ã`V:Ä.‚cè‚CV•F>|çÓxÃT£Ã\VF>H¦€ ¨¦‘cL‘#àV„À|ãxVÀ“ WZBVœÄ.UøÄ.|„«x|¦}ËxVÄ.H¦VvF>VWF>UÛF>VfÀVEÀUÉÀW«À|„ãxW½F>}Ëx}JÃxƒh)¦WÜÂ>WÞ@.|Ƴx|¥»x})ÛxU×Ä.V[Ä.}këxTÄ.V}Ä.Üãx|ÆëxȦ|¥Ûx})»x‚á W;Â>}k«xV”BVsBWÂ>VRBV1BVBUïBUÎBW@.W9@.|„£x|Æ›x]ëx|¥“xƒäÃè|ç‹x}ƒx³£þ£}J{x})sxã‘;Ûx}kóx‘CP‘#T³ƒ\³c^U–Ä.UŒB‘c`~à³x|cxX8| ¦all+ìU ÀU+F>U*Ä.|[x|SxU)B|Kx ì9Œ‘lBÿÌ9À}ɦ`? U ÀU+F>U*Ä.|[x|SxU)B|Kx ;ÿBÿØ€āÁxá|‚€|¦‚!„‚Aˆ‚aŒ‚‚¡”‚Á˜‚ᜃ ƒ!¤ƒA¨ƒa¬ƒ°ƒ¡´ƒÁ¸ƒá¼8!ÀN€ ```”!ÿÀ€Ã€£€ƒTËF>’¡’ÁT©F>’á“ T€F>“!$“A(TÇÀ“a,“0T¨À“¡4£TŠÀ£c £C|ç[x}Kx£#£ƒTÉÄ.T‹Ä.££}JxT Ä.WÂ>W–Â>WµÂ>|çKx}x}J[xW`Â>WIÂ>W+Â>TÆBT¥BT„BW{@.WZ@.W9@.W@.Wœ@.W½@.»xœ³x‚á‚Á½«x{x³ƒ³ZKx9[x‚¡ƒ |ç3x}+x³£³c }J#xƒ0ƒa,³C³#ƒA(ƒ!$ã‘ƒ¡4‘C8!@N€ ``”!ÿà9€““¡“Á“á|ž#x|x€ä€Ä€¤ UF>TýF>TÃF>T¤F>U ÀTêÀTÀÀT©À}kãx}Jëx|x})#xUÄ.TäÄ.T¼Ä.}kx}J#x})ãxUBTçBT¥B}kCx}J;x})+x‘‘_‘? TÝÄ.TÆB|ëx|3x8| ¦}~b}b9Œ+U ÀU+F>U*Ä.|[x|SxU)B|KxBÿЃƒ¡ƒÁƒá8! N€ ```”!ÿà€Ä€¤TÇF>““¡T¨F>ƒ¤ £„TËÀT©ÀWªF>W À}k;x})Cx|SxTÈÄ.TªÄ.W§Ä.})SxW½BWŠÂ>}kCx|;xTÆBT¥BWœ@.œSx|ëx}k3x})+x³ƒ ƒƒ¡8! ‘#‘cN€ `”!ÿàƒ |¦““¡||x¤*“Á“á|Þ3x|Ÿ#x$AžKÿ;Õ/žžãx@žpø@A<HDÃóxäûxKÿÿ ‰?‰~9)9kU):Uk:ÿJÞZø@@€/€@žÿÄ€$ƒƒ¡ƒÁ|¦ƒá8! N€ äûxƒãxKÿý™;ÿ ;Ü Kÿÿ€``”!ÿ°/|¬+x’!’A|ñ;x|rx“áL“ÁH|Ÿ#x’a’ ’¡$’Á(’á,“0“!4“A8“a<“@“¡DAšÌ T &i> T Â>T@.|KxÞ4°WÞÙ~ƒlƒLƒ, ƒ ‚ì‚ÌhW}F>¢¬¢ŒWCF>¢lW$F>WF>VæF>VÇF>WhÀWJÀW+ÀW ÀVàÀVÜÀ}ëx}Jx}k#x})+x|3xW%Ä.WfÄ.œ;xWÄ.WGÄ.VãÄ.VÝÄ.}3x}J;x}k+xV§Â>V†Â>VeÂ>})#x|xœëxW{BWZBW9BWBV÷BVÖBVµ@.V”@.Vs@.~µ;x}Ûx}JÓx}kËx²¿‘})Ãx|»x‘_‘ ~”3x~s+x‘?œ³x²Ÿ²“ŸhAšÀ€ h€Ì/€@ž°TÉF>TÀÀ|KxTËÄ.|[xTÉB|Kx, €ìlU(F>TêF>U+ÀTàÀ}kCx|SxU(Ä.TêÄ.|Sx}kCxTçBu*U)B|;x}kKxl‘ @‚À/ž@ž(9@8à}I¦``}l:}:8ç+(U ÀU+F>U*Ä.|[x|SxU)B|Kx(BÿЁldLpUgF>UHF>UiÀU@À});x|CxUgÄ.UHÄ.});x|CxUkBUJB})[x|Sx‘?dp2€ H/€@ž $€ì| Ìt ¬v Œx lzU F>TàF>U ÀTêÀ}kKx}JxU Ä.TàÄ.}kKx}JxT©Â>TÀÂ>TÂ>T|Â>UBTçBTÆ@.T¥@.T„@.Tc@.}kCx|Æx|¥Kx|„ëx‘$°ßt|cãx}J;x°¿v°Ÿx°z‘_|/‘@xAš¡L€U@@.UIÂ>|Kx°€€r9 €L/€Až ¡#X9)ÿ€ŠH@A<8
+$WÀ(4Äóxãûx}k¡+   }=HPTú° ±+ H}_/Š€ |P ?a)&‘?Ažãûx†ãx§ëx8 }I¦N€!€$ƒƒ¡ƒÁ|¦ƒá8! N€ ``€c0HýKÿÿ``”!ÿÐ9dÿÿ|¦4“a|»+y“ “¡$|œ#x|Ý3x“Á(“á,|x#€ (Ë–@ð€c,H$WÊ(4Wk>/}(R  | P° Až  | ° }HR¡*€ dU)<p±*A‚4 (¡*}~AÖ8| P|Zœ@@œXÄóxãûxH=€ ƒ ƒ¡$ƒÁ(|Pƒa €4|¦?a)‘?ƒá,8!0N€ ``8|AÖ|P°
+Kÿÿœ```€c,H½Kÿÿ`”!ÿð8À8!Kÿþ´”!ÿð€l €Ô/‰·Až8`ÿÿ8!N€ #/‰Ažÿì 8`€€ AžÿÜ9Iÿÿ9`U@:}CSx}(.‰ AžÿÀ‹P@œÿ´|
+Z|p|c”ƒXAžÿ ƒPAžÿ˜T`:|.€ AžÿŒ„@@œH|Z|ix‹|p|c”T`:X|ƒH@œÿ\AšÿXA†ÿT|.€ @AžÿHA˜ÿÄ}*Kx|kxKÿÿ|```”!ÿð|¦Kÿÿ€8!|¦|cøTcþN€ ``”!ÿð8!KÿÿÈ`”!ÿà|¦$“á|x€/€@ž$8`ÿÿ€$ƒá8! |¦N€ ``Kÿþ‘,A€ÿ؁?9)ÿÿƒH@œ<8 |kxT
+:Tc:|P.9k9J|.8c?9)ÿÿ‰XAÿà‘?8`Kÿÿˆ”!ÿð8!KÿÿX`”!ÿð|hx€l €Ô/‰·Až8`8!N€ ```c€ l €Ô/‰·@žÿ؁C€ ŠAœ 88`Kÿÿ¼```k UI:9J8`| H.‘HKÿÿ”!ÿð|hx€l €Ô/‰·Až8`8!N€ ```c€ l €Ô/‰·@žÿ؁C€ ŠAœ 88`Kÿÿ¼```k UI:9J8`| H.‘HKÿÿ”!ÿð€c8!N€ ”!ÿð|kx|¦#m €Ô/€·Až$<+`·€8!|¦N€ ``€€H@žÿØ€£€8`…@žÿÌ€k €„ T¥:Kÿ%1|c4TcÙ~Kÿÿ°`”!ÿð8!Kÿÿx`”!ÿà= +|¦$“á|x“Á|ž#x€a#·€Až$€$ƒÁƒá8! |¦N€ ``8` Kÿ5]<+|iy`·FA‚ÿÌ<+‘>“é8``·ƒÁƒá 8 €$8! |¦N€ ”!ÿð8!KÿÿX`”!ÿð|ky|¦A‚€ l €Ô/‰·Až €8!|¦N€ ```8 Kÿ4]€8!|¦N€ `”!ÿð8!Kÿÿ˜`”!ÿÐ= +|¦4“Á(|~x“á,|Ÿ#x€a#·€Až$€4ƒÁ(ƒá,8!0|¦N€ ``€þ€ž‡ @œä/Aš¬ 9gÿÿU`:}
+Cx|.€øAž€ø@AœŒ@™T€€øAžèŸ@9 8ÀAœ |é¦H$```|.€ø@Až´A˜à9)U :Bÿä|æ;x```TÀ:8`è.>9)‘>Kÿÿ(`^ Tà:9'8`ê.‘>€4ƒÁ(ƒá,8!0|¦N€ 8„d€ žT„:|xKÿ4,A‚0~ a€þKÿþð```8`Kÿþ¬``><+`·F9)ÿœ‘>KÿþŒ``}&Kx†X}fXPTé:9k9Iÿü}i¦A,lÀ€/€ÿÿAž `|P.9Jÿü|I.9)ÿüBÿðKÿþü8| ¦Kÿÿà```”!ÿð8!Kÿýè`”!ÿÀ|¦“Á8“¡4|~x8`D“a,|#x|Û3x“0“á<|¼+xKÿ2=<+|y`·FA‚`<+9 `·/ž‘?‘? ‘?‘?@ž ;À
+%€8!|¦N€ ”!ÿð|¦HÅ€8!|¦N€ ”!ÿð|¦Hu€8!|¦N€ ”!ÿð|¦HU€8!|¦N€ ”!ÿÀ|‹#x|¦D “á<“0|x“¡4#€ƒ$8`€ dp @‚(€Dƒ0ƒ¡4ƒá<8!@|¦N€ ``U`(4}$;ƒãx;¡0}.Ii€ ‘a‘A‘ Ii€ ‘,(‘a$‘A KÿÚ}8 8`ÿÿA €ŸUIF>U@À|KxUKÄ.|[xUJB|Sx8„h”ÿÜH"¥8 ¤ëxTc>H"•8 „ãxTc>H"…?Tc> ©þ/… @ÿ808¥ÿàH"e€Dƒ0ƒ¡4ƒá<8!@|¦Tc>N€ ”!ÿà|¦$“¡#€ dp A‚ƒ£$T€(4½Kÿþ…°}€$ƒ¡8! |¦N€ ``”!ÿÀ|¦D“!$|yx<+’’¡`·'“0“a,’Á’á“ “A(“¡4“Á8“á<9,‚™ƒ™$/‰Až,€dp A‚€/€Až¡<t(:à;@¢¼¢Ü‰X£|AžÜ``}:YÖƒ¹,ëJ;ÉW`<žø@°Ux>@H ``;ÿÿÿžø@Aøäûx£ëxH /ƒAžÿä |ú|ÀPT>°#ËxDÓxKÿþ¥ €ØAž:à €°Až:à €¨Až:à€;Z€Ð@@”;œ t(¡<¢¼¢Ü£|‰X@žÿ4c`±<°Kÿÿˆ8`€D‚‚¡‚Á|¦‚რƒ!$ƒA(ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ```8Kÿÿ,``/—Ažÿœ€‚8`‚¡‚Á`‚რ€Dƒ!$ƒA(|¦ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ``”!ÿà9`|¦$“¡#€ dp @‚ €$ƒ¡}c[x8! |¦N€ `#$T€(4})£©KÿûÑ€$Tc>|kêxƒ¡8! |¦}k4UkÙ~}c[xN€ ”!ÿð|£+x|¦|å;x|Ä3x}Cx€é)})¦N€!€8!|¦N€ `”!ÿÀ,|¦’á“ |—#x“!$“A(|yx“0“a,}<KxD“¡4“Á8“á<A€¼|©3x€„€¼}&þp|ÀJx|0PT¼H 1;{/ƒ|@žÌ€ù;à;@;```Ÿ8@@œ”¨ú /€@ž+‡ÿÿ?À=`A |x| x}Kú‡P@Aœì/ž@äqi@‚܉=9)žH@Ì€/€@ž€pA‚|< €|ŸÐ@dÛx})¦@œ8€æûx¥ëx<N€!k`0Àÿÿ{”pkA‚$ /€@ž0€ù?À+‡ÿÿ@ ;pi@‚È€€ùËóx}^úšøAž,p A‚‰=9) U :žAžÿŸP@@œþäH``A…Ð;ÿŸP@@œþÄŸPëûx
+ø@œD}(Z(‡ÿÿ  /€p/AžÿÈ@™ÿÈ@‚ÿĉ)}k9)€H@ÿ°
+‘8`Kÿÿˆ```”!ÿà|¦$“á“¡“Á|}x# €€c;éŸ@AL‰ø@@œDÃøPH```€ €ø@@œ$€Ãóx;ÿ;ÞHu€€ø@@œÿØ€$ƒ¡ƒÁƒá8! |¦N€ ``”!ÿð,|¦A‚#=)€Ô9)Hø+‰@€8!|¦N€ ``€€£8€€c| (PT¥èþ8¥Kÿ ý€8!|¦N€ ”!ÿð|¦+x|¦|€#x€ã/‡Až4€ƒ< "8`8¥·|€"LÆ1‚Kþÿ€8!|¦N€ `€ƒ< "8`8¥·|€"LÆ1‚Kþþé€8!|¦N€ `”!ÿð|…#x|¦#‰ @A€ „@@,8€KÿÿU€8`8!|¦N€ ```€ƒ|i(PH)€8!|¦N€ `”!ÿð|…#x|¦#‰ @A€ „@@,8€Kÿþå€8`8!|¦N€ ```€ƒ|i(PH‰€8!|¦N€ `”!ÿð|…#x|¦#‰ @A€ „@@,8€Kÿþu€8`8!|¦N€ ```€ƒ|i(PHy€8!|¦N€ `”!ÿà|¦$“|œ#x“¡“Á|½+x|~x“က @A€8ÿÿ#|*€H@Al/…;àAHœ``@™|ŸâÃóxKÿÿ%;ÿø/ƒAžÿä€$ƒ8`ƒ¡ƒÁ|¦ƒá8! N€ ```€¾<`+„ãx`c·/HÑ€$ƒ8`ƒ¡ƒÁ|¦ƒá8! N€ ``€$ƒ8`ƒ¡ƒÁ|¦ƒá8! N€ ```”!ÿÐ|¦“á,“Á(|¿+y|Þ3x4“ |`x|œ#x“a“¡$A‚€ƒAž4|x€4ƒaƒ ƒ¡$|¦ƒÁ(ƒá,8!0N€ ``/†AžÿЀƒ@žÿÄ€¿€…AžƒãxKÿÿ¬`ƒ¿ € @žÿèeèP€€†WeèþKÿ Ý/ƒ@žÿÌW`~`èPØ@@œH@€ €Ø@Aœ4dÛxãûxKÿý}dÛx;{|}xÃóxKÿýiAžÿЃãxKÿÿ,8`Kÿÿ$```”!ÿÀ|¦“Á8“¡4|Þ3y|#x“a,“0|»+xD“á<A‚€€Až(€Dƒa,ƒ0ƒ¡4|¦ƒÁ8ƒá<8!@N€ € € @@œH~|Ÿ#x„X@@}[x€ø@@œ0``€~€ž|cøP;ÿÿÿHA€ €ø@Aœÿä~›XAžp>}iXP})ØPUkèþU)èþ;‹;éœøAžH€äûx|xKÿé<+|iy`·FA‚ÿ<œø@‘!‘>@œ|¼øP|iâ8€Kÿ©“~€Dƒa,8`“¾ ƒ0|¦ƒ¡4ƒÁ8ƒá<8!@N€ ```”!ÿÐ|¦“á,“Á(|y4A‚l?=)€Ô9)Hø+‰AX€;À“ß/€Až€aKÿ “ß“Á€/€Až|xKÿé8ãûxKÿÕ€4ƒÁ(ƒá,8!0|¦N€ `”!ÿ°|¦“ÁH“¡D|~x8`<T’á,|#x}WSx“0“!4}8Kx}Cx“A8“a<|ú;x|Û3x“@“áL|¼+xKÿ½<+|y`·FA‚È<+“¿“Ÿ`·“ “_ž“ßAžˆoÀ€Ô/€· AžÌ<+`·=/™AžÌ#ËxKÿ½8cKÿY/ƒaAž\$Ëx;KÿՁ?€} HPU)èþ;©£ëxKÿ!/ƒ|~xaAž¨€/˜Až`€Ãx¥ëxKÿ)“÷8`€T‚á,ƒ0ƒ!4|¦ƒA8ƒa<ƒ@ƒ¡DƒÁHƒáL8!PN€ <+/™`·0@žÿ<“??;€} HPU)èþ;©£ëxKÿ}/ƒ|~xa@žÿ`€€aKÿ“Áãûx€Kÿí<+‚á,ƒ0`·F€Tƒ!4ƒA8ƒa<|¦ƒ@ƒ¡DƒÁHƒáL8!PN€ ``<+`·-KÿþˆãûxKÿ‘<+‚á,ƒ0`·F€Tƒ!4ƒA8ƒa<|¦ƒ@ƒ¡DƒÁHƒáL8!PN€ ```€¥ëx8€KÿMKÿþ¤```”!ÿð|kx|Š#x#€‹8!€c€«€Ë €ë KÿýD”!ÿð|©+x|`x<`+|È3x|ê;x|†#x}'Kx`c·
+ü}(.}#ZxBÿä8!N€ ”!ÿà|¦$“á|¿+x8 “¡“Á|Ý3x|~xæûxc}c[x+)})¦N€!,@‚è>åûx}?J8ÉÿøŸ0@@œÐW þ/H,€=`+€ÿÿA<+9``·#|¥Z…0@@œœ¡E åUF>U ÀU Ä.}kx}kKxUBU@Â>TéD.UJ@.TçÂ>}kCx}Jx}(;x‘e±E±AšU@.U Â>|Kx°q@ÿÿA‚ÿt+€| x@ÿxq`@‚ÿpU >9)‹H@@¼ÿl<+`·#Kÿÿ`€$ƒ¡ƒÁƒá8! |¦N€ `”!ÿð8À8!Kÿþ¤”!ÿÐ|¦4“ ||x“A“a|š#x“¡$“Á(|Ý3x|¾+x“á,€cKÿy<+`·F|{yA‚l€¼ÄóxKþô•ƒüÛúžØ@@ôs cÛx &``` (Ÿÿÿ|dx/€| xp /@žDA… cÛxKÿ­<+`·#€4ƒAãûxƒaƒ |¦ƒ¡$ƒÁ(ƒá,8!0N€ @¹ÿÄ@‚ÿÀ¨ D¡|cb äž@U@F>UKÀUIÄ.}kxUD.UÂ>|Cx}kKxTåÂ>UJBTç@.TÂ>T @.}kSx|ç+x°})3x‘d°äA‚±$Aÿ,|DÓxfÛx8 }c[x+)})¦N€!|xcÛxKÿÑ€4ƒAãûxƒaƒ |¦ƒ¡$ƒÁ(ƒá,8!0N€ ```=€Kÿÿ$``”!ÿð8À8!Kÿþ$,”!ÿð|`xA‚ !E /Š@(|kP0|‰,0|`,0}dKx|x8!N€ ``|
+Ð8!|d08|xN€ ,”!ÿðA‚  /€@|‰0|`(0|„(0}#x8!N€ |Ð8!|ƒ08€N€ ”!ÿà/ƒ|Ì3x|«+x“¡“; “Á“áAœl/…AœT/‹}`[x|ix}‡cx|Ÿ#x|hx}†cx@žäŒH@@,}‹4/‹Až })X0|€0|ŸX0}‡X0|KxTë„>|[–} YÖTå>})@P}@)Ö|xU)€Wà„>} xŠ@@(|:8Æÿÿ‡@AŠ@@8Æÿÿ|:`}*P| [–}`YÖ})Ö}+HP|
+xU)€Wà>} xˆ@@$|:9Jÿÿ‡@A|||Ð}@PPTÀ€}Gx9H` H@@™98à/} Cx|ê;xAž !J})}DSx}#Kxƒƒ¡ƒÁƒá8! N€ ``/Œ@ž 8|àc–|ä4/„@ž}@PTæ„>Tã>8€}(3–| 1Ö}iÖ|@P}%KxT€Wé„>|Kx‹@@ |:8¥ÿÿ‡@A‹@A¸`}+P| 3–}`1Ö}Ö}+HP|
+xU)€Wà>} xˆ@@$|:9Jÿÿ‡@A|||Ð}@PPT €}Gx|ˆ#xKÿþø`}d4/„@ž(A˜ Œø@AþÔ98àKÿþÐ```½èø!†}eKÿý¤ „|c; ÿÿKÿýŒ|ç 0!d } \0} 0Tæ„>Tã>ë\0| 3–}@1Ö| Ö}*HP}hCx| xU)€U„>|Kx…@@,|:9Œÿÿ‡@A…@@9Œÿÿ|:``}%P| 3–}`1Ö| Ö}+HP|
+xU)€U>}(x…@@@(}:9Jÿÿ‡@@A…@@@9Jÿÿ}:`U€€ÿ 0}@P}DxKÿþ<```!d |
+ 0}€\0})\0} 0ë\0|Sx|Æ 0T§„>| ;–}@9ÖT¼>}hCx}€áÖ}*HP|xU)€U„>})xŒH@@0})*8cÿÿ…H@A ŒH@@8cÿÿ})*```},HP| ;–}`9Ö}@áÖ}+HP|xU)€U>} xŠ@@(|*8çÿÿ…@AŠ@@|*8çÿÿ`}
+PT`€|êx|
+0ˆ@|j1ÖAœ(ˆ}GSx9@žüÈà 0}GSx9€@@œü´8êÿÿ9Kÿü¨`8¥ÿÿ|:KÿýH”!ÿÀ/ƒ|Ê3x|©+x“A(“a,;@“0“¡4“Á8“á<AœT/…Aœ</‰}FSx}LSx} Kx|Ÿ#x;¡|…#x|jx@žÈ†@@P|À4/€9€@žÐTË„>}*[–| YÖTÇ>|PP} 9ÖT€T©„>|Kxˆ@@$|2†@Aˆ@@|2``|P} [–}iYÖ}I9Ö| PT©>T€|KxŠ@@|2†@AŠ@AØ`|
+P| d08‘=H`` @@™\}/šAž!A!Š}i‘a‘€a€ƒA(ƒa,ƒ0ƒ¡4ƒÁ8ƒá<8!@N€ ``}$4/„@žA˜ †ø@A}&(}@Q}%Kx½‘]Kÿÿ„/†@ž 8|À3–|Ä4/„@žÈ}PPTÇ„>Tß>9€}(;–| 9Ö}iùÖ|@PT©„>T€|Kx‹@@$|2†@A‹@AÐ```| P} ;–}i9Ö} ùÖ| PT©>T€|Kxˆ@@|2†@Aˆ@@|2|PKÿþ ``!F}%KÿýÀ` „|c;@ÿÿKÿý¤|Æ 0!d }H 0}I\0|«\0TÇ„>Tß>|Œ#x| ;–}@9Ö|`ùÖ}*HP}jCxU)€U@„>|Kxƒ@@|2†@Aƒ@@|2|P} ;–}i9Ö} ùÖ| PUI>T€|Kxˆ@@|2†@Aˆ@@|2|¥ 0}PKÿþ¤`| x |€0|i`0|Æ`0|…`0|
+KxTË„>}*[–| YÖTÇ>|PP} 9ÖT€T©„>|Kxˆ@@ý<Kÿý`#„ }+ 0|Àä0|iä0|h 0êä0|[x}Œ 0T§„>| ;–}`9ÖT»>}HCx|ÀÙÖ}+HP|xU)€U„>})xê 0†H@@,})*8cÿÿ…H@A†H@@8cÿÿ})*``}&HP| ;–}`9Ö|àÙÖ}+HP|xU)€U>} x‡@@|*8Æÿÿ…@@h}PT`€|Àx}``ˆX@|àaÖAœ<ˆXAž„|P}+A}+à0|$0})$0|[x‘=Kÿü ```| 8}eY|xKÿÿć@@ÿ˜8Æÿÿ|*KÿÿŒ```|2Kÿü,``|2Kÿý<``Š8@Aœÿ¬} CxKÿÿt”!ÿà/…|Ç3x|Œ#x“á“Á|Ÿ#x““¡@ž †@@4|Ë4/‹Až |iX0|€0|ŒX0|ÇX0|KxTë„>|[–} YÖTæ>})P}@1Ö|xU)€U€„>} xŠ@@0|:9ÿÿ‡@A Š@@9ÿÿ|:```}*P| [–}`YÖ}@1Ö}+HP|xU)€U€>} xŠ@@$|:8cÿÿ‡@A|
+||Ð|`PU€|ix9@}CSx}$Kxƒƒ¡ƒÁƒá8! N€ ``@A™|¤4/„@ž@A˜ †ø@A9@9 H`/†@ž 8|à3–|ä4/„@ž(|gPTæ„>Tý>8 }#3–| 1Ö}iéÖ|P}*KxT€U‰„>|Kx‹@@ |:9Jÿÿ‡@A‹@A¸`}+P| 3–}`1Ö}éÖ}+HP|xU)€U€>} xˆ@@$|:8cÿÿ‡@A|||Ð|`PU@€|ix|ª+x}CSx}$Kxƒƒ¡ƒÁƒá8! N€ ``9@9 }CSx}$Kxƒƒ¡ƒÁƒá8! N€ ``!d |ª 0|À\0|i\0|h 0ë\0|Sx|Æ 0T§„>| ;–}@9ÖT¼>}cCx}€áÖ}*HP|xU)€T`„>})xŒH@@0})*;½ÿÿ…H@A ŒH@@;½ÿÿ})*```},HP| ;–}`9Ö}@áÖ}+HP|xU)€T`>} xŠ@@(|*8çÿÿ…@AŠ@@|*8çÿÿ`|jPW €|çx|0ƒ@|Ç1ÖAœ(ƒ|é;x9@@žþàà 0|é;x9@€0@@œþÌ9'ÿÿ9@KÿþÀ`|ç 0!d |h 0|i\0ë\0Tæ„>Tý>| 3–}@1Ö| éÖ}*HP}cCx|xU)€T`„>|Kx…@@,|:;œÿÿ‡@A…@@;œÿÿ|:``}%P| 3–}`1Ö}éÖ}+HP|
+xU)€T`>}#xˆ@@(|c:9Jÿÿ‡@Aˆ@@9Jÿÿ|c:`W€€ì 0|hP}ExKÿý```9Jÿÿ|:KÿýH”!ÿà/…|Œ#x|Ç3x|hx|jx“á“Á|Ÿ#x““¡@žÔ†@@|À4/€8€@žÜTë„>}*[–| YÖTæ>|PP} 1ÖT€Wé„>|Kxˆ@@ |:‡@Aˆ@@ |:`|P} [–}iYÖ}I1Ö| PWé>T€|KxŠ@@|:‡@AŠ@A˜`|
+P|$08`ƒƒ¡ƒÁƒá8! N€ ```@A™ÿØ|£4/ƒ@žA˜ †`@A æ`}EQ}CSxäûxƒƒ¡ƒÁƒá8! N€ ``/†@ž 8|à3–|å4/…@ž}PPTæ„>Tý>8€}(3–| 1Ö}iéÖ|@PWé„>T€|Kx‹@@$|:‡@A‹@A ```| P} 3–}i1Ö} éÖ| PWé>T€|Kxˆ@@|:‡@Aˆ@@|:|PKÿþÐ`` ƒ |«0|À$0} $0}Š$0}0|[x|Æ0T§„>| ;–}`9ÖT¼>}HCxàáÖ}+HP|xU)€U„>})x}Š0ŸH@@,})*;½ÿÿ…H@AŸH@@;½ÿÿ})*``}?HP| ;–}`9Ö|àáÖ}+HP|xU)€U>} x‡@@|*;ÿÿÿ…@@h}PW €àx}`0ˆX@|à1ÖAœ<ˆXAž„|P}+A|0}+ 0}#0|[xƒƒ¡ƒÁƒá8! N€ |x }€0|i 0|Ç 0}Ÿ 0|
+KxTë„>}*[–| YÖTæ>|PP} 1ÖT€Wé„>|Kxˆ@@ý,Kÿý `|ç(0!e }H(0}I\0}‹\0Tæ„>Tý>|¤+x| 3–}@1Ö|`éÖ}*HP}jCxU)€U@„>|Kxƒ@@|:‡@Aƒ@@|:|P} 3–}i1Ö} éÖ| PUI>T€|Kxˆ@@|:‡@Aˆ@@|:}Ÿ(0}PKÿýd`|8}eY|xKÿþć@@þ˜;ÿÿÿ|*KÿþŒ```|:Kÿýl``|:Kÿül``Š8@Aœÿ¬} CxKÿþt!¨`!¨h!¨p !¨x!!¨€"!¨„#!¨Œ$!¨”%!¨ !¨¬!¨¸ !¨Ä!!¨Ð"!¨Ü#!¨ì$!¨ô%ªªªªªªªªUªªªUUUUUÿUÿUUÿÿÿUUÿUÿÿÿUÿÿÿ!¢X!£Ð!£Ü!¥ literalrootroot=read-onlyro read-writerw ramdiskramdisk=initrd-sizeramdisk_size=novideovideo=ofonlyappendpause-afterpause-messagepartition/etc/yaboot.msg%s: Unable to parse
+%s:%d,%sCan't alloc config file buffer
+Can't open config file
+Error, can't read config file
+Config file read, %d bytes
+Syntax error or read error config
+Default label was changed to macaddr label.
+init-codepasswordfgcolorInvalid fgcolor: "%s".
+bgcolorInvalid bgcolor: "%s".
+%x to background-color %x to foreground-colorinit-messagemessage
+%s
+Password: $1$Incorrect password. Try again. ___________________
+< Permission denied >
+ -------------------
+ \ ^__^
+ \ (oo)\_______
+ (__)\ )\/\
+ ||----w |
+ || ||
+reset-allboot: %sDefault supplied on the command line: %s timeoutboot: single-keyinitrd=New initrd file specified: %s
+ERROR: no initrd specified!
+boot-last-labelrestrictedimageTo specify arguments for this image you must enter the password.This image is restricted.help
+Press the tab key for a list of defined images.
+The label marked with a "*" is is the default image, press <return> to boot it.
+
+To boot any other label simply type its name and press <return>.
+
+To boot a kernel image which is not defined in the yaboot configuration
+file, enter the kernel image name as [[device:][partno],]/path, where
+"device:" is the OpenFirmware device path to the disk the image
+resides on, and "partno" is the partition number the image resides on.
+Note that the comma (,) is only required if you specify an OpenFirmware
+device, if you only specify a filename you should not start it with a ","
+
+To boot a alternative initrd file rather than specified in the yaboot
+configuration file, use the "initrd" command on Yaboot's prompt:
+"initrd=[name.img]". This will load the "name.img" file after the default
+kernel image. You can, also, specify a different initrd file to any other
+label of the yaboot configuration file. Just type "label initrd=[name.img]"
+and the specified initrd file will be loaded.
+
+To load an alternative config file rather than /etc/yaboot.conf, enter
+its device, partno and path, on Open Firmware Prompt:
+boot conf=device:partno,/path/to/configfile
+.To reload the config file or load a new one, use the "conf" command
+on Yaboot's prompt:
+conf [device=device] [partition=partno] [file=/path/to/configfile]
+
+If you omit "device" and "partno", Yaboot will use their current
+values. You can check them by entering "conf" on Yaboot's prompt.
+haltRestricted command.byeconffile=device=partition=Loading config file...
+Restoring default values.
+Current configuration:
+partition: auto
+partition: %d
+file: %s
+file: /etc/%s
+yaboot.confOpenFirmware commands are restricted.To boot a custom image you must enter the password./vmlinuxinitrd/root.binsysmap/boot/System.mapPlease wait, loading kernel...
+\\malloc error
+
+Can't read Elf e_ident/e_type/e_machine info
+
+Can't read Elf32 image header
+Can only load kernels with one program header
+Malloc error
+seek error
+read error
+Can't find a loadable segment !
+Claim error, can't allocate kernel memory
+Read failed
+ Elf32 kernel loaded...
+
+Can't read Elf64 image header
+Read error
+ Elf64 kernel loaded...
+Loading System.map ...
+Claim failed for sysmap memory
+System.map loaded at %p, size: %lu Kbytes
+System.map load failed !
+Loading ramdisk...
+Claim failed for initrd memory
+Claim failed for initrd memory at %p rc=%p
+ramdisk loaded at %p, size: %lu Kbytes
+ramdisk load failed !
+yaboot%s: Not a valid ELF image
+interpret" _screen-ihandle" $find if execute else 0 theninstance-to-packagedevice_typedisplayopenscreenNo screen device found !
+bootargsbootpathibm,client-architecture-support-rebootibm,fw-nbr-rebootsconf=boot-deviceCouldn't determine boot device
+boot-once/etc/\Try to netboot
+%s%02x-%s%sWelcome to yaboot version 1.3.14 (Red Hat 1.3.14-8.fc10)
+Enter "help" to get some basic usage information
+ptypewarningI_know_the_partition_type_is_wrong_and_will_NOT_send_mail_when_booting_breaksApple_Bootstrap
+WARNING: Bootstrap partition type is wrong: "%s"
+ type should be: "Apple_Bootstrap"
+
+Bye.
+CODEGEN,vendorbplanchrpmodelIBMCan't claim malloc buffer (%d bytes at 0x%08x)
+Type go<return> to continue.
+blackbluegreencyanredpurplebrownlight-graydark-graylight-bluelight-greenlight-cyanlight-redlight-purpleyellowwhite!­Ð!­à!­ð*%08x%02x-%02xentermillisecondsreleaseclaimexitcall-methodcolor!write
+read seek 10 msclosesetpropgetproplengetpropfind-packagefinddevice/chosenMalformed %s property?
+can't set args
+method '%s' failed %p
+mapblock-sizeloadClaim error, can't allocate %x at 0x%x
+%s: Unexpected End Of File
+%s: No such file or directory
+%s: Seek error
+%s: Input/output error
+%s: Path too long
+%s: Not a regular file
+%s: Not a directory
+%s: Unknown or corrupt filesystem
+%s: Too many levels of symbolic links
+%s: File too large
+%s: Filesystem busy
+%s: Unable to open file, Invalid device
+%s: Unknown error
+/optionsstdout
+Can't open stdinmemory
+Can't get mem handlemmu
+value mmu# value mem# : ^mem mem# $CM ; : ^mmu mmu# $CM ; iscsi/vdevice/gscsi/diskcan't get <device_type> for device: %s
+blocknetworkUnkown device type <%s>
+bootp-responsedhcp-responsebootpreply-packetWARNING ! default_close called !
+WARNING ! default_seek called !
+WARNING ! default_read called !
+nas-bootdevicepromiscuousspeed=duplex=bootprarpdefaults:0Can't open device <%s>
+block_size %d not supported !
+Can't read boot blocks
+Can't read partition %d
+LinuxCan't read volume desc block %d
+CD001ISO9660 disk
+Can't read boot block %d
+Can't allocate memory
+Can't read partition block %d
+Amiga partition table corrupted at block %d
+block type is not partition but %08x
+block checsum is bad : %d
+partition table is looping, block %d already traveled
+!±Œlabeldefaultalias%c %sConfig file warning: near line %d in file %s
+Config file error: EOF in quoted stringBad use of \ in quoted stringnewline is not allowed in quoted stringsQuoted string is too long\ precedes EOFToken is too longSyntax errorValue expected at EOFSyntax error after %scompatiblemalloc error in cfg_set
+'%s' doesn't have a valueValue expected for '%s'Duplicate entry '%s'initrd-prompt*,Can't claim memory for TFTP download
+:%02dbuilt-inbuilt-in networkext2: i/o error %ld in read
+ext2linux I/O Manageriso96600123456789abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ<NULL>malloc failed
+realloc failed
+‡EZí©ãéüï£øgoٍ*LŠÿú9B‡qöma"ýå8 ¤¾êDKÞÏ©ö»K`¾¿¼p(›~Æê¡'úÔï0…ˆÙÔÐ9æÛ™å¢|øĬVeô)"DC*ÿ—«”#§ü“ 9e[YÏ Ì’ÿïô}…„]Ño¨~Oþ,æà£CN¡÷S~‚½:ò5*×Ò»ë†Ó‘   
+!´l./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÿxfsReIsErLBReIsEr2FsReIsErFsReiserFS: Unsupported version field: %u
+ReiserFS: Unsupported block size: %u
+ReiserFS: Unsupported journal size, not a power of 2: %u
+ReiserFS: Failed to read in root block
+ReiserFS: Unsupported tree depth (too deep): %u
+€ÍAÏÁ΁@
+ÊÁˁ @É À€ÈAØÀ€ÙAÛÁځ@ÞÁ߁@ÝÀ€ÜAÔÁՁ@×À€ÖAÒÀ€ÓAÑÁЁ@ð0À1€ñA3óÁò2@6öÁ÷7@õ5À4€ôA<üÁý=@ÿ?À>€þAú:À;€ûA9ùÁø8@(èÁé)@ë+À*€êAî.À/€ïA-íÁì,@ä$À%€åA'çÁæ&@"âÁã#@á!À €àA `Àa€¡Ac£Á¢b@f¦Á§g@¥eÀd€¤Al¬Á­m@¯oÀn€®AªjÀk€«Ai©Á¨h@x¸Á¹y@»{Àz€ºA¾~À€¿A}½Á¼|@´tÀu€µAw·Á¶v@r²Á³s@±qÀp€°APÁ‘Q@“SÀR€’A–VÀW€—AU•Á”T@œ\À]€A_ŸÁž^@ZšÁ›[@™YÀX€˜AˆHÀI€‰AK‹ÁŠJ@NŽÁO@MÀL€ŒAD„Á…E@‡GÀF€†A‚BÀC€ƒAAÁ€@@ |A , »àD°Lš™ AT›˜LœPŸžLA,D ½pØDPL˜— AL›šPœPŸžT™A$t ¿PôD0PŸAL›šPœP™ž$œ ÀPD0PŸAL›šPœP™ž$Ä Á`D0PŸAL›šPœP™žì Âp0DLA,  D@L–
+AL˜— L™šLžL›ŸHœ44 Æ°tDPL™AL• ” P›œLŸž\š˜— –
+<l Ê0 ”D°T— F AP™˜P›šLŸžhFœ–
+Ÿ›š™˜— –
+• ” ü Ý D TŸA ߐÌDHA0 à`äDPA@H âPDpTž F ALœDFŸ›š™˜— –
+’‘Ž Œ éàDPPŸALœ›Lž,° ì|D`Lš› APœTŸ™˜— PžA à îÌDPTŸAXžœ›š4 ð`D PŸALžtœ›š™˜— –
+’‘ < ö`üD PŸALœLž(` ùpHD@L˜AL™šL›œLžHŸDŒ üÀøDÐTœ F AP˜— Pš™LŸžxF›–
+’‘Ž Ô! $D0LžŸ ALAø!PœDLA!ðìD LžAHŸ$,!  D0PŸALœPšžH›,T!P´DàPŸAL™šLœP— žL›˜$„!œD0L™AL›šPžŸLœ,¬!ÀðD@T–
+›–
+• ,!+à0D°TžAHŸL!-|D PŸA$h!Ap˜D0P›ALš™LœPŸž,!C0D@Pš F ALœ›LžPFŸ™ À!E@¸D0PžALœ›PŸ(ä!GxD@P›AL˜— L™šTŸžœ(!I€„D@Lœ AL›šPžŸHA <!K`ìD LALžœHŸ `!LP<D0P›ALœPŸž„!V€<DTAœ!VÀ<DTA´!W<DTAÌ!W@<DTAä!W€8D\Aü!WÀ8D\A!X<DTA,!X@<DTAD!X€ DHA\!X  DHAt!XÀ8D\AŒ!Y8D\A¤!Y@¬D XŸAÀ!YðŒDTAØ!Z€ DHAð!Z  DHA !ZÀ DHA !Zà DHA 8![PD@XœŸAH X!\PHD LA, t!\ 8D@L™AxŸžš˜— –
+›œ• ”  ¤!^à|D PA À!_`<DTA, Ø!_ \D@P˜— ALš™L›œTŸžA$
+!cLDPPŸALš™Pœ›Pž
+0!dP8D HA
+H!e°DHA
+`!e°°DHA
+x!g°˜D TžŸA
+˜!hÀ|DLA
+°!i@lDLA
+È!i°lDLA
+à!j lDLA
+ø!jD LœALžLŸ$ !k°$D0LžŸ APœAP›$ D!làTD@Lž APœ›LŸA0 l!qàdD@Tž F AT–
+Ÿ™š\F œ›˜— @  !uðDpTŸ F ATš™— –
+’‘ ä!~ hDPA ü!~àLD LŸAPž$ !€@ÈD0LœAL›šLžLŸzR|A ÿÿ½0¬D TœLŸž 8ÿÿÁÀD@T›šTŸžœ\ÿÿÆœŒD TžŸLœ|ÿÿË €D \žŸLœ!¨@!®¬ B˜ Bh B8"Ð"""H!©Ð!—D!°x!š$!˜X!š˜!˜è!–¨!–Ø!–¸!–È!— !¢(!²0!–ì!—(!—4!˜L!˜Ø!˜d!˜„!§ "4!š¤!°p!°€!š4!š˜!©Ð!—D!–¨!–Ø!–¸!–È!— !– !¢(!²0!–ì!—(!—4!—!¢<!²| eÄ eh e dÐ!²ˆ cˆ c bÜ dÐ+·!²Ä qÈ g\ nD pô gL gT!²¼ n  ið g g€!²Ø rt r| r„ rŒ((((( AAAAAABBBBBB gE#ïÍ«‰˜ºÜþ2Tv!µ° £@ ›X ‘< ‘T!¶Ä ·ä ± ¤l ¥("H"\Agnu .shstrtab.text.rodata.eh_frame.data.sdata.sbss.bss.gnu.attributes  •!••#´!¹D¹D Ø#"0)"000"@@86"x@V4;oÿÿõ@RK
\ No newline at end of file
/branches/tracing/boot/arch/amd64/Makefile.inc
26,6 → 26,8
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
TMP = distroot
 
INIT_TASKS = \
$(USPACEDIR)/srv/ns/ns \
$(USPACEDIR)/srv/loader/loader \
57,18 → 59,18
 
build: $(BASE)/image.iso
 
$(BASE)/image.iso: arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/grub/menu.lst $(KERNELDIR)/kernel.bin $(INIT_TASKS) $(RD_SRVS) $(RD_APPS)
mkdir -p arch/$(ARCH)/iso/boot/grub
cp arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/iso/boot/grub/
$(BASE)/image.iso: arch/$(BARCH)/grub/stage2_eltorito arch/$(BARCH)/grub/menu.lst $(KERNELDIR)/kernel.bin $(INIT_TASKS) $(RD_SRVS) $(RD_APPS)
mkdir -p $(TMP)/boot/grub
cp arch/$(BARCH)/grub/stage2_eltorito $(TMP)/boot/grub/
ifneq ($(RDFMT),tmpfs)
cat arch/$(ARCH)/grub/menu.lst | grep -v "tmpfs" >arch/$(ARCH)/iso/boot/grub/menu.lst
cat arch/$(BARCH)/grub/menu.lst | grep -v "tmpfs" > $(TMP)/boot/grub/menu.lst
endif
ifneq ($(RDFMT),fat)
cat arch/$(ARCH)/grub/menu.lst | grep -v "fat" >arch/$(ARCH)/iso/boot/grub/menu.lst
cat arch/$(BARCH)/grub/menu.lst | grep -v "fat" > $(TMP)/boot/grub/menu.lst
endif
cp $(KERNELDIR)/kernel.bin arch/$(ARCH)/iso/boot/
cp $(KERNELDIR)/kernel.bin $(TMP)/boot/
for task in $(INIT_TASKS) ; do \
cp $$task arch/$(ARCH)/iso/boot/ ; \
cp $$task $(TMP)/boot/ ; \
done
for file in $(RD_SRVS) ; do \
cp $$file $(USPACEDIR)/dist/srv/ ; \
77,14 → 79,14
cp $$file $(USPACEDIR)/dist/app/ ; \
done
ifeq ($(RDFMT),tmpfs)
$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs
$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ $(TMP)/boot/initrd.fs
endif
ifeq ($(RDFMT),fat)
$(BASE)/tools/mkfat.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs
$(BASE)/tools/mkfat.py $(USPACEDIR)/dist/ $(TMP)/boot/initrd.fs
endif
$(BASE)/tools/mkhord.py 4096 arch/$(ARCH)/iso/boot/initrd.fs arch/$(ARCH)/iso/boot/initrd.img
rm arch/$(ARCH)/iso/boot/initrd.fs
mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $(BASE)/image.iso arch/$(ARCH)/iso/
$(BASE)/tools/mkhord.py 4096 $(TMP)/boot/initrd.fs $(TMP)/boot/initrd.img
rm $(TMP)/boot/initrd.fs
mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $@ $(TMP)/
 
clean:
-for file in $(RD_SRVS) ; do \
93,5 → 95,5
-for file in $(RD_APPS) ; do \
rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \
done
-rm -fr arch/$(ARCH)/iso
-rm -fr $(TMP)
-rm -f $(BASE)/image.iso
/branches/tracing/boot/arch/mips32/Makefile.inc
28,15 → 28,15
 
build: $(BASE)/image.boot
 
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot
$(BASE)/image.boot: depend arch/$(BARCH)/loader/image.boot
cp arch/$(BARCH)/loader/image.boot $(BASE)/image.boot
 
depend:
-rm arch/$(ARCH)/loader/image.boot
-rm arch/$(BARCH)/loader/image.boot
 
arch/$(ARCH)/loader/image.boot:
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE)
arch/$(BARCH)/loader/image.boot:
make -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
 
clean:
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE)
make -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
-rm -f $(BASE)/image.boot
/branches/tracing/boot/arch/mips32/loader/_link.ld.in.ecoff
File deleted
/branches/tracing/boot/arch/mips32/loader/_link.ld.in.binary
File deleted
/branches/tracing/boot/arch/mips32/loader/_link.ld.in
0,0 → 1,20
ENTRY(start)
 
SECTIONS {
.boot 0xbfc00000: AT (0) {
*(BOOTSTRAP);
*(.text);
*(.rodata);
*(.rodata.*);
*(.data); /* initialized data */
*(.sdata);
*(.sdata2);
*(.sbss);
*(.scommon);
*(.bss); /* uninitialized static variables */
*(COMMON); /* global variables */
*(.reginfo);
[[COMPONENTS]]
}
}
/branches/tracing/boot/arch/mips32/loader/boot.S
27,9 → 27,8
#
 
#include "regname.h"
#include "main.h"
 
#define INITIAL_STACK 0x80040000
 
.set noat
.set noreorder
.set nomacro
38,8 → 37,82
 
.global start
start:
lui $sp, INITIAL_STACK >> 16
ori $sp, $sp, INITIAL_STACK & 0xffff
j bootstrap
/* Setup CPU map (on msim this code
is executed in parallel on all CPUs,
but it not an issue) */
la $a0, CPUMAP
sw $zero, 0($a0)
sw $zero, 4($a0)
sw $zero, 8($a0)
sw $zero, 12($a0)
sw $zero, 16($a0)
sw $zero, 20($a0)
sw $zero, 24($a0)
sw $zero, 28($a0)
sw $zero, 32($a0)
sw $zero, 36($a0)
sw $zero, 40($a0)
sw $zero, 44($a0)
sw $zero, 48($a0)
sw $zero, 52($a0)
sw $zero, 56($a0)
sw $zero, 60($a0)
sw $zero, 64($a0)
sw $zero, 68($a0)
sw $zero, 72($a0)
sw $zero, 76($a0)
sw $zero, 80($a0)
sw $zero, 84($a0)
sw $zero, 88($a0)
sw $zero, 92($a0)
sw $zero, 96($a0)
sw $zero, 100($a0)
sw $zero, 104($a0)
sw $zero, 108($a0)
sw $zero, 112($a0)
sw $zero, 116($a0)
sw $zero, 120($a0)
sw $zero, 124($a0)
lui $a1, 1
#ifdef MACHINE_msim
/* Read dorder value */
la $k0, MSIM_DORDER_ADDRESS
lw $k1, ($k0)
/* If we are not running on BSP
then end in an infinite loop */
beq $k1, $zero, bsp
nop
/* Record CPU presence */
sll $a2, $k1, 2
addu $a2, $a2, $a0
sw $a1, ($a2)
loop:
j loop
nop
#endif
bsp:
/* Record CPU presence */
sw $a1, ($a0)
/* Setup initial stack */
la $sp, INITIAL_STACK
j bootstrap
nop
/branches/tracing/boot/arch/mips32/loader/main.c
28,6 → 28,9
 
#include "main.h"
#include <printf.h>
#include <align.h>
#include <macros.h>
#include <string.h>
#include "msim.h"
#include "asm.h"
#include "_components.h"
34,16 → 37,16
 
#define KERNEL_VIRTUAL_ADDRESS 0x80100000
 
char *release = RELEASE;
char *release = STRING(RELEASE);
 
#ifdef REVISION
char *revision = ", revision " REVISION;
char *revision = ", revision " STRING(REVISION);
#else
char *revision = "";
#endif
 
#ifdef TIMESTAMP
char *timestamp = "\nBuilt on " TIMESTAMP;
char *timestamp = "\nBuilt on " STRING(TIMESTAMP);
#else
char *timestamp = "";
#endif
72,9 → 75,10
printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
printf("\nCopying components\n");
unsigned int top = 0;
bootinfo.cnt = 0;
for (i = 0; i < COMPONENTS; i++) {
for (i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) {
printf(" %s...", components[i].name);
top = ALIGN_UP(top, PAGE_SIZE);
memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size);
81,6 → 85,8
if (i > 0) {
bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
bootinfo.tasks[bootinfo.cnt].size = components[i].size;
strncpy(bootinfo.tasks[bootinfo.cnt].name,
components[i].name, BOOTINFO_TASK_NAME_BUFLEN);
bootinfo.cnt++;
}
top += components[i].size;
87,6 → 93,13
printf("done.\n");
}
unsigned int *cpumap = (unsigned int *) CPUMAP;
bootinfo.cpumap = 0;
for (i = 0; i < CPUMAP_MAX_RECORDS; i++) {
if (cpumap[i] != 0)
bootinfo.cpumap |= (1 << i);
}
printf("\nBooting the kernel...\n");
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo));
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo);
}
/branches/tracing/boot/arch/mips32/loader/asm.h
29,11 → 29,11
#ifndef BOOT_mips32_ASM_H_
#define BOOT_mips32_ASM_H_
 
#define PAGE_SIZE 16384
#define PAGE_WIDTH 14
#define PAGE_SIZE 16384
#define PAGE_WIDTH 14
 
#define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt))
#define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt))
 
void jump_to_kernel(void *entry, void *bootinfo, unsigned int bootinfo_size) __attribute__((noreturn));
void jump_to_kernel(void *entry, void *bootinfo) __attribute__((noreturn));
 
#endif
/branches/tracing/boot/arch/mips32/loader/main.h
29,21 → 29,30
#ifndef BOOT_mips32_MAIN_H_
#define BOOT_mips32_MAIN_H_
 
/** Align to the nearest higher address.
*
* @param addr Address or size to be aligned.
* @param align Size of alignment, must be power of 2.
*/
#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
#define CPUMAP 0x80001000
#define INITIAL_STACK 0x80002000
#define MSIM_DORDER_ADDRESS 0xb0000004
 
#define TASKMAP_MAX_RECORDS 32
#define TASKMAP_MAX_RECORDS 32
#define CPUMAP_MAX_RECORDS 32
 
#ifndef __ASM__
 
/** Size of buffer for storing task name in task_t. */
#define BOOTINFO_TASK_NAME_BUFLEN 32
 
/** Struct holding information about single loaded task. */
typedef struct {
/** Address where the task was placed. */
void *addr;
/** Size of the task's binary. */
unsigned int size;
/** Task name. */
char name[BOOTINFO_TASK_NAME_BUFLEN];
} task_t;
 
typedef struct {
unsigned int cpumap;
unsigned int cnt;
task_t tasks[TASKMAP_MAX_RECORDS];
} bootinfo_t;
52,3 → 61,5
extern void bootstrap(void);
 
#endif
 
#endif
/branches/tracing/boot/arch/mips32/loader/Makefile
27,7 → 27,7
#
 
include ../../../../version
include ../../../Makefile.config
-include ../../../../Makefile.config
 
## Toolchain configuration
#
36,17 → 36,25
CROSS_PREFIX = /usr/local
endif
 
ifeq ($(IMAGE),binary)
LD_IN = binary
endif
ifeq ($(IMAGE),ecoff)
LD_IN = ecoff
endif
BFD_NAME = elf32-tradlittlemips
BFD_ARCH = mips
TARGET = mipsel-linux-gnu
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel/bin
 
ifeq ($(MACHINE),lgxemul)
BFD_NAME = elf32-tradlittlemips
BFD = ecoff-littlemips
endif
ifeq ($(MACHINE),bgxemul)
BFD_NAME = elf32-tradbigmips
BFD = ecoff-bigmips
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips/bin
TARGET = mips-linux-gnu
endif
ifeq ($(MACHINE),msim)
BFD_NAME = elf32-tradlittlemips
BFD = binary
endif
 
ifeq ($(COMPILER),gcc_native)
CC = gcc
AS = as
63,21 → 71,14
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
endif
 
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mhard-float -mips3 -pipe
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mhard-float -mips3 -pipe
 
ifdef REVISION
CFLAGS += "-DREVISION=\"$(REVISION)\""
endif
 
ifdef TIMESTAMP
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
endif
 
SOURCES = \
main.c \
msim.c \
_components.c \
../../../generic/printf.c \
../../../generic/string.c \
asm.S \
boot.S
 
88,7 → 89,7
$(USPACEDIR)/app/init/init \
$(USPACEDIR)/srv/devmap/devmap \
$(USPACEDIR)/srv/rd/rd \
$(USPACEDIR)/srv/vfs/vfs
$(USPACEDIR)/srv/vfs/vfs
ifeq ($(RDFMT),tmpfs)
COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
endif
120,9 → 121,12
 
-include Makefile.depend
 
image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS)
$(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) -o $@
image.boot: image.raw
$(OBJCOPY) -O $(BFD) $< $@
 
image.raw: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS)
$(LD) -no-check-sections -N -T _link.ld -o $@ $(COMPONENT_OBJECTS) initrd.o $(OBJECTS)
 
depend:
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null
 
133,7 → 137,7
-for file in $(RD_APPS) ; do \
rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \
done
-rm -f _components.h _components.c _link.ld _link.ld.in $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) initrd.img image.boot Makefile.depend
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) initrd.img image.raw image.boot Makefile.depend
 
_components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_SRVS) $(RD_APPS) _link.ld.in
for file in $(RD_SRVS) ; do \
152,9 → 156,6
rm initrd.fs
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned int" $(COMPONENTS) ./initrd.img
 
_link.ld.in: _link.ld.in.$(LD_IN)
cp $< $@
 
%.o: %.S
$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
 
/branches/tracing/boot/arch/ia32/grub/README
File deleted
/branches/tracing/boot/arch/ia32/grub/stage2_eltorito
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/tracing/boot/arch/ia32/grub/COPYING
File deleted
/branches/tracing/boot/arch/ia32/grub/menu.lst
File deleted
/branches/tracing/boot/arch/ia32/Makefile.inc
26,6 → 26,8
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
TMP = distroot
 
INIT_TASKS = \
$(USPACEDIR)/srv/ns/ns \
$(USPACEDIR)/srv/loader/loader \
32,7 → 34,7
$(USPACEDIR)/app/init/init \
$(USPACEDIR)/srv/devmap/devmap \
$(USPACEDIR)/srv/rd/rd \
$(USPACEDIR)/srv/vfs/vfs
$(USPACEDIR)/srv/vfs/vfs
ifeq ($(RDFMT),tmpfs)
INIT_TASKS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs
endif
45,6 → 47,7
$(USPACEDIR)/srv/fb/fb \
$(USPACEDIR)/srv/kbd/kbd \
$(USPACEDIR)/srv/console/console \
$(USPACEDIR)/srv/fs/tmpfs/tmpfs \
$(USPACEDIR)/srv/fs/fat/fat
 
RD_APPS = \
57,18 → 60,18
 
build: $(BASE)/image.iso
 
$(BASE)/image.iso: arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/grub/menu.lst $(KERNELDIR)/kernel.bin $(INIT_TASKS) $(RD_SRVS) $(RD_APPS)
mkdir -p arch/$(ARCH)/iso/boot/grub
cp arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/iso/boot/grub/
$(BASE)/image.iso: arch/$(BARCH)/grub/stage2_eltorito arch/$(BARCH)/grub/menu.lst $(KERNELDIR)/kernel.bin $(INIT_TASKS) $(RD_SRVS) $(RD_APPS)
mkdir -p $(TMP)/boot/grub
cp arch/$(BARCH)/grub/stage2_eltorito $(TMP)/boot/grub/
ifneq ($(RDFMT),tmpfs)
cat arch/$(ARCH)/grub/menu.lst | grep -v "tmpfs" >arch/$(ARCH)/iso/boot/grub/menu.lst
cat arch/$(BARCH)/grub/menu.lst | grep -v "tmpfs" > $(TMP)/boot/grub/menu.lst
endif
ifneq ($(RDFMT),fat)
cat arch/$(ARCH)/grub/menu.lst | grep -v "fat" >arch/$(ARCH)/iso/boot/grub/menu.lst
cat arch/$(BARCH)/grub/menu.lst | grep -v "fat" > $(TMP)/boot/grub/menu.lst
endif
cp $(KERNELDIR)/kernel.bin arch/$(ARCH)/iso/boot/
cp $(KERNELDIR)/kernel.bin $(TMP)/boot/
for task in $(INIT_TASKS) ; do \
cp $$task arch/$(ARCH)/iso/boot/ ; \
cp $$task $(TMP)/boot/ ; \
done
for file in $(RD_SRVS) ; do \
cp $$file $(USPACEDIR)/dist/srv/ ; \
77,14 → 80,14
cp $$file $(USPACEDIR)/dist/app/ ; \
done
ifeq ($(RDFMT),tmpfs)
$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs
$(BASE)/tools/mktmpfs.py $(USPACEDIR)/dist/ $(TMP)/boot/initrd.fs
endif
ifeq ($(RDFMT),fat)
$(BASE)/tools/mkfat.py $(USPACEDIR)/dist/ arch/$(ARCH)/iso/boot/initrd.fs
$(BASE)/tools/mkfat.py $(USPACEDIR)/dist/ $(TMP)/boot/initrd.fs
endif
$(BASE)/tools/mkhord.py 4096 arch/$(ARCH)/iso/boot/initrd.fs arch/$(ARCH)/iso/boot/initrd.img
rm arch/$(ARCH)/iso/boot/initrd.fs
mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $(BASE)/image.iso arch/$(ARCH)/iso/
$(BASE)/tools/mkhord.py 4096 $(TMP)/boot/initrd.fs $(TMP)/boot/initrd.img
rm $(TMP)/boot/initrd.fs
mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $@ $(TMP)/
 
clean:
-for file in $(RD_SRVS) ; do \
93,5 → 96,5
-for file in $(RD_APPS) ; do \
rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \
done
-rm -fr arch/$(ARCH)/iso
-rm -fr $(TMP)
-rm -f $(BASE)/image.iso