From 7a5342e7ccf2deb5553951024d57ec1327c926dd Mon Sep 17 00:00:00 2001 From: Halil Pasic Date: Wed, 16 May 2018 15:27:57 +0200 Subject: [PATCH 01/12] virtio-ccw: clean up notify Coverity recently started complaining about virtio_ccw_notify(). Turns out, there is a couple of things that can be cleaned up. Let's clean! Reported-by: Peter Maydell Fixes: CID 1390619 Signed-off-by: Halil Pasic Message-Id: <20180516132757.68558-1-pasic@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/virtio-ccw.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 0a9bec484b..b92a85d0b0 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -1001,10 +1001,15 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector) SubchDev *sch = ccw_dev->sch; uint64_t indicators; - /* queue indicators + secondary indicators */ - if (vector >= VIRTIO_QUEUE_MAX + 64) { + if (vector == VIRTIO_NO_VECTOR) { return; } + /* + * vector < VIRTIO_QUEUE_MAX: notification for a virtqueue + * vector == VIRTIO_QUEUE_MAX: configuration change notification + * bits beyond that are unused and should never be notified for + */ + assert(vector <= VIRTIO_QUEUE_MAX); if (vector < VIRTIO_QUEUE_MAX) { if (!dev->indicators) { @@ -1027,6 +1032,7 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector) css_adapter_interrupt(CSS_IO_ADAPTER_VIRTIO, dev->thinint_isc); } } else { + assert(vector < NR_CLASSIC_INDICATOR_BITS); indicators = address_space_ldq(&address_space_memory, dev->indicators->addr, MEMTXATTRS_UNSPECIFIED, @@ -1040,12 +1046,11 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector) if (!dev->indicators2) { return; } - vector = 0; indicators = address_space_ldq(&address_space_memory, dev->indicators2->addr, MEMTXATTRS_UNSPECIFIED, NULL); - indicators |= 1ULL << vector; + indicators |= 1ULL; address_space_stq(&address_space_memory, dev->indicators2->addr, indicators, MEMTXATTRS_UNSPECIFIED, NULL); css_conditional_io_interrupt(sch); From 9a51c9ee6ca6610e4ab89945e6c75eda3a265ceb Mon Sep 17 00:00:00 2001 From: Halil Pasic Date: Thu, 24 May 2018 19:58:27 +0200 Subject: [PATCH 02/12] vfio-ccw: add force unlimited prefetch property There is at least one guest (OS) such that although it does not rely on the guarantees provided by ORB 1 word 9 bit (aka unlimited prefetch, aka P bit) not being set, it fails to tell this to the machine. Usually this ain't a big deal, as the original purpose of the P bit is to allow for performance optimizations. vfio-ccw however can not provide the guarantees required if the bit is not set. It is not possible to implement support for the P bit not set without transitioning to lower level protocols for vfio-ccw. So let's give the user the opportunity to force setting the P bit, if the user knows this is safe. For self modifying channel programs forcing the P bit is not safe. If the P bit is forced for a self modifying channel program things are expected to break in strange ways. Let's also avoid warning multiple about P bit not set in the ORB in case P bit is not told to be forced, and designate the affected vfio-ccw device. Signed-off-by: Halil Pasic Suggested-by: Dong Jia Shi Acked-by: Jason J. Herne Tested-by: Jason J. Herne Message-Id: <20180524175828.3143-2-pasic@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/css.c | 3 +-- hw/vfio/ccw.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 56c3fa8c89..39ae5bbf7e 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1204,8 +1204,7 @@ static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch) * Only support prefetch enable mode. * Only support 64bit addressing idal. */ - if (!(orb->ctrl0 & ORB_CTRL0_MASK_PFCH) || - !(orb->ctrl0 & ORB_CTRL0_MASK_C64)) { + if (!(orb->ctrl0 & ORB_CTRL0_MASK_C64)) { warn_report("vfio-ccw requires PFCH and C64 flags set"); sch_gen_unit_exception(sch); css_inject_io_interrupt(sch); diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 76e4e8c652..351b305e1a 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -33,8 +33,30 @@ typedef struct VFIOCCWDevice { uint64_t io_region_offset; struct ccw_io_region *io_region; EventNotifier io_notifier; + bool force_orb_pfch; + bool warned_orb_pfch; } VFIOCCWDevice; +static inline void warn_once(bool *warned, const char *fmt, ...) +{ + va_list ap; + + if (!warned || *warned) { + return; + } + *warned = true; + va_start(ap, fmt); + warn_vreport(fmt, ap); + va_end(ap); +} + +static inline void warn_once_pfch(VFIOCCWDevice *vcdev, SubchDev *sch, + const char *msg) +{ + warn_once(&vcdev->warned_orb_pfch, "vfio-ccw (devno %x.%x.%04x): %s", + sch->cssid, sch->ssid, sch->devno, msg); +} + static void vfio_ccw_compute_needs_reset(VFIODevice *vdev) { vdev->needs_reset = false; @@ -55,6 +77,18 @@ static IOInstEnding vfio_ccw_handle_request(SubchDev *sch) struct ccw_io_region *region = vcdev->io_region; int ret; + if (!(sch->orb.ctrl0 & ORB_CTRL0_MASK_PFCH)) { + if (!(vcdev->force_orb_pfch)) { + warn_once_pfch(vcdev, sch, "requires PFCH flag set"); + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return IOINST_CC_EXPECTED; + } else { + sch->orb.ctrl0 |= ORB_CTRL0_MASK_PFCH; + warn_once_pfch(vcdev, sch, "PFCH flag forced"); + } + } + QEMU_BUILD_BUG_ON(sizeof(region->orb_area) != sizeof(ORB)); QEMU_BUILD_BUG_ON(sizeof(region->scsw_area) != sizeof(SCSW)); QEMU_BUILD_BUG_ON(sizeof(region->irb_area) != sizeof(IRB)); @@ -430,6 +464,7 @@ static void vfio_ccw_unrealize(DeviceState *dev, Error **errp) static Property vfio_ccw_properties[] = { DEFINE_PROP_STRING("sysfsdev", VFIOCCWDevice, vdev.sysfsdev), + DEFINE_PROP_BOOL("force-orb-pfch", VFIOCCWDevice, force_orb_pfch, false), DEFINE_PROP_END_OF_LIST(), }; From ea2dd691e21f2ca4896d3a88835b52f78012801d Mon Sep 17 00:00:00 2001 From: Halil Pasic Date: Thu, 24 May 2018 19:58:28 +0200 Subject: [PATCH 03/12] vfio-ccw: remove orb.c64 (64 bit data addresses) check The vfio-ccw module does the check too, and there is actually no technical obstacle for supporting fmt 1 idaws. Let us be ready for the beautiful day when fmt 1 idaws become supported by the vfio-ccw kernel module. QEMU does not have to do a thing for that, except not insisting on this check. Signed-off-by: Halil Pasic Acked-by: Jason J. Herne Tested-by: Jason J. Herne Message-Id: <20180524175828.3143-3-pasic@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/css.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 39ae5bbf7e..5424ea4562 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1199,17 +1199,6 @@ static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch) assert(orb != NULL); p->intparm = orb->intparm; } - - /* - * Only support prefetch enable mode. - * Only support 64bit addressing idal. - */ - if (!(orb->ctrl0 & ORB_CTRL0_MASK_C64)) { - warn_report("vfio-ccw requires PFCH and C64 flags set"); - sch_gen_unit_exception(sch); - css_inject_io_interrupt(sch); - return IOINST_CC_EXPECTED; - } return s390_ccw_cmd_request(sch); } From acd7ef837d8987ad4ef2ab8f8e8c0f13ab413dd5 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Tue, 12 Jun 2018 14:59:33 +0200 Subject: [PATCH 04/12] s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW Right now the IPL device always starts from address 0x10000 (the usual Linux entry point). To run other guests (e.g. test programs) it is useful to use the IPL PSW from address 0. We can use the Linux magic at 0x10008 to decide. Signed-off-by: Christian Borntraeger Message-Id: <20180612125933.262679-1-borntraeger@de.ibm.com> Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Signed-off-by: Cornelia Huck --- hw/s390x/ipl.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 04245b5258..0d67349004 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -29,6 +29,7 @@ #include "exec/exec-all.h" #define KERN_IMAGE_START 0x010000UL +#define LINUX_MAGIC_ADDR 0x010008UL #define KERN_PARM_AREA 0x010480UL #define INITRD_START 0x800000UL #define INITRD_PARM_START 0x010408UL @@ -105,7 +106,9 @@ static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr) static void s390_ipl_realize(DeviceState *dev, Error **errp) { S390IPLState *ipl = S390_IPL(dev); - uint64_t pentry = KERN_IMAGE_START; + uint32_t *ipl_psw; + uint64_t pentry; + char *magic; int kernel_size; Error *err = NULL; @@ -157,10 +160,24 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp) NULL, 1, EM_S390, 0, 0); if (kernel_size < 0) { kernel_size = load_image_targphys(ipl->kernel, 0, ram_size); - } - if (kernel_size < 0) { - error_setg(&err, "could not load kernel '%s'", ipl->kernel); - goto error; + if (kernel_size < 0) { + error_setg(&err, "could not load kernel '%s'", ipl->kernel); + goto error; + } + /* if this is Linux use KERN_IMAGE_START */ + magic = rom_ptr(LINUX_MAGIC_ADDR); + if (magic && !memcmp(magic, "S390EP", 6)) { + pentry = KERN_IMAGE_START; + } else { + /* if not Linux load the address of the (short) IPL PSW */ + ipl_psw = rom_ptr(4); + if (ipl_psw) { + pentry = be32_to_cpu(*ipl_psw) & 0x7fffffffUL; + } else { + error_setg(&err, "Could not get IPL PSW"); + goto error; + } + } } /* * Is it a Linux kernel (starting at 0x10000)? If yes, we fill in the From 23ad956bff98d949057156ea3f68a9763c2dda0e Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Wed, 13 Jun 2018 10:18:19 +0200 Subject: [PATCH 05/12] s390x/cpumodels: add z14 Model ZR1 Introduce the new z14 Model ZR1 cpu model. Mostly identical to z14, only the cpu type differs (3906 vs. 3907) Signed-off-by: Christian Borntraeger Message-Id: <20180613081819.147178-1-borntraeger@de.ibm.com> Reviewed-by: David Hildenbrand Signed-off-by: Cornelia Huck --- target/s390x/cpu_models.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index e10035aaa8..cfdbccf46d 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -79,6 +79,7 @@ static S390CPUDef s390_cpu_defs[] = { CPUDEF_INIT(0x2964, 13, 2, 47, 0x08000000U, "z13.2", "IBM z13 GA2"), CPUDEF_INIT(0x2965, 13, 2, 47, 0x08000000U, "z13s", "IBM z13s GA1"), CPUDEF_INIT(0x3906, 14, 1, 47, 0x08000000U, "z14", "IBM z14 GA1"), + CPUDEF_INIT(0x3907, 14, 1, 47, 0x08000000U, "z14ZR1", "IBM z14 Model ZR1 GA1"), }; #define QEMU_MAX_CPU_TYPE 0x2827 From a0e11b617b9ef41cefe8739dff4d6a7b01ca967f Mon Sep 17 00:00:00 2001 From: Collin Walling Date: Tue, 29 May 2018 00:40:09 -0400 Subject: [PATCH 06/12] pc-bios/s390-ccw: define loadparm length Loadparm is defined by the s390 architecture to be 8 bytes in length. Let's define this size in the s390-ccw bios. Suggested-by: Laszlo Ersek Signed-off-by: Collin Walling Reviewed-by: Laszlo Ersek Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/iplb.h | 4 +++- pc-bios/s390-ccw/main.c | 8 ++++---- pc-bios/s390-ccw/sclp.c | 2 +- pc-bios/s390-ccw/sclp.h | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index ded20c834e..772d5c57c9 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -12,6 +12,8 @@ #ifndef IPLB_H #define IPLB_H +#define LOADPARM_LEN 8 + struct IplBlockCcw { uint8_t reserved0[85]; uint8_t ssid; @@ -61,7 +63,7 @@ struct IplParameterBlock { uint8_t pbt; uint8_t flags; uint16_t reserved01; - uint8_t loadparm[8]; + uint8_t loadparm[LOADPARM_LEN]; union { IplBlockCcw ccw; IplBlockFcp fcp; diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 26f9adf84a..544851d672 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -15,7 +15,7 @@ char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); static SubChannelId blk_schid = { .one = 1 }; IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); -static char loadparm_str[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static char loadparm_str[LOADPARM_LEN + 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; QemuIplParameters qipl; #define LOADPARM_PROMPT "PROMPT " @@ -80,13 +80,13 @@ static bool find_dev(Schib *schib, int dev_no) static void menu_setup(void) { - if (memcmp(loadparm_str, LOADPARM_PROMPT, 8) == 0) { + if (memcmp(loadparm_str, LOADPARM_PROMPT, LOADPARM_LEN) == 0) { menu_set_parms(QIPL_FLAG_BM_OPTS_CMD, 0); return; } /* If loadparm was set to any other value, then do not enable menu */ - if (memcmp(loadparm_str, LOADPARM_EMPTY, 8) != 0) { + if (memcmp(loadparm_str, LOADPARM_EMPTY, LOADPARM_LEN) != 0) { return; } @@ -117,7 +117,7 @@ static void virtio_setup(void) enable_mss_facility(); sclp_get_loadparm_ascii(loadparm_str); - memcpy(ldp + 10, loadparm_str, 8); + memcpy(ldp + 10, loadparm_str, LOADPARM_LEN); sclp_print(ldp); memcpy(&qipl, early_qipl, sizeof(QemuIplParameters)); diff --git a/pc-bios/s390-ccw/sclp.c b/pc-bios/s390-ccw/sclp.c index 3836cb4716..c0223fab0b 100644 --- a/pc-bios/s390-ccw/sclp.c +++ b/pc-bios/s390-ccw/sclp.c @@ -114,7 +114,7 @@ void sclp_get_loadparm_ascii(char *loadparm) memset((char *)_sccb, 0, sizeof(ReadInfo)); sccb->h.length = sizeof(ReadInfo); if (!sclp_service_call(SCLP_CMDW_READ_SCP_INFO, sccb)) { - ebcdic_to_ascii((char *) sccb->loadparm, loadparm, 8); + ebcdic_to_ascii((char *) sccb->loadparm, loadparm, LOADPARM_LEN); } } diff --git a/pc-bios/s390-ccw/sclp.h b/pc-bios/s390-ccw/sclp.h index 0dd987ff5d..8450161ba7 100644 --- a/pc-bios/s390-ccw/sclp.h +++ b/pc-bios/s390-ccw/sclp.h @@ -56,7 +56,7 @@ typedef struct ReadInfo { uint16_t rnmax; uint8_t rnsize; uint8_t reserved[13]; - uint8_t loadparm[8]; + uint8_t loadparm[LOADPARM_LEN]; } __attribute__((packed)) ReadInfo; typedef struct SCCB { From 4248981d5190eaf2b0ab74d8c287b6070ffc300a Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 5 Jun 2018 12:41:49 +0200 Subject: [PATCH 07/12] roms: Update SLOF submodule to current status We need the latest version of SLOF's libnet for adding pxelinux.cfg support in the s390-ccw bios, too. Signed-off-by: Thomas Huth --- roms/SLOF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roms/SLOF b/roms/SLOF index fa981320a1..2317427ce7 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit fa981320a1e0968d6fc1b8de319723ff8212b337 +Subproject commit 2317427ce76006723f7ae103a6998ab41dd79c68 From 134f0b3d7ca5fbbd17f21fea87066967ce1d6de5 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Fri, 18 May 2018 11:31:27 +0200 Subject: [PATCH 08/12] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF The ip_version information now has to be stored in the filename_ip_t structure, and there is now a common function called tftp_get_error_info() which can be used to get the error string for a TFTP error code. We can also get rid of some superfluous "(char *)" casts now. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 2 +- pc-bios/s390-ccw/netmain.c | 86 +++++++----------------------------- 2 files changed, 18 insertions(+), 70 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 4f64128c6c..a73be367e6 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -34,7 +34,7 @@ STDLIB_OBJS = atoi.o atol.o strtoul.o strtol.o rand.o malloc.o free.o %.o : $(SLOF_DIR)/lib/libc/stdlib/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") -STDIO_OBJS = sprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ +STDIO_OBJS = sprintf.o snprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ printf.o putc.o puts.o putchar.o stdchnls.o fileno.o %.o : $(SLOF_DIR)/lib/libc/stdio/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 600024155b..d007fb7a86 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -47,7 +47,6 @@ IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; static SubChannelId net_schid = { .one = 1 }; -static int ip_version = 4; static uint64_t dest_timer; static uint64_t get_timer_ms(void) @@ -100,10 +99,10 @@ static int dhcp(struct filename_ip *fn_ip, int retries) printf("\nGiving up after %d DHCP requests\n", retries); return -1; } - ip_version = 4; + fn_ip->ip_version = 4; rc = dhcpv4(NULL, fn_ip); if (rc == -1) { - ip_version = 6; + fn_ip->ip_version = 6; set_ipv6_address(fn_ip->fd, 0); rc = dhcpv6(NULL, fn_ip); if (rc == 0) { @@ -137,8 +136,7 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) tftp_err_t tftp_err; int rc; - rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err, 1, 1428, - ip_version); + rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err); if (rc < 0) { /* Make sure that error messages are put into a new line */ @@ -149,61 +147,11 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) printf(" TFTP: Received %s (%d KBytes)\n", fnip->filename, rc / 1024); } else if (rc > 0) { printf(" TFTP: Received %s (%d Bytes)\n", fnip->filename, rc); - } else if (rc == -1) { - puts("unknown TFTP error"); - } else if (rc == -2) { - printf("TFTP buffer of %d bytes is too small for %s\n", - len, fnip->filename); - } else if (rc == -3) { - printf("file not found: %s\n", fnip->filename); - } else if (rc == -4) { - puts("TFTP access violation"); - } else if (rc == -5) { - puts("illegal TFTP operation"); - } else if (rc == -6) { - puts("unknown TFTP transfer ID"); - } else if (rc == -7) { - puts("no such TFTP user"); - } else if (rc == -8) { - puts("TFTP blocksize negotiation failed"); - } else if (rc == -9) { - puts("file exceeds maximum TFTP transfer size"); - } else if (rc <= -10 && rc >= -15) { - const char *icmp_err_str; - switch (rc) { - case -ICMP_NET_UNREACHABLE - 10: - icmp_err_str = "net unreachable"; - break; - case -ICMP_HOST_UNREACHABLE - 10: - icmp_err_str = "host unreachable"; - break; - case -ICMP_PROTOCOL_UNREACHABLE - 10: - icmp_err_str = "protocol unreachable"; - break; - case -ICMP_PORT_UNREACHABLE - 10: - icmp_err_str = "port unreachable"; - break; - case -ICMP_FRAGMENTATION_NEEDED - 10: - icmp_err_str = "fragmentation needed and DF set"; - break; - case -ICMP_SOURCE_ROUTE_FAILED - 10: - icmp_err_str = "source route failed"; - break; - default: - icmp_err_str = " UNKNOWN"; - break; - } - printf("ICMP ERROR \"%s\"\n", icmp_err_str); - } else if (rc == -40) { - printf("TFTP error occurred after %d bad packets received", - tftp_err.bad_tftp_packets); - } else if (rc == -41) { - printf("TFTP error occurred after missing %d responses", - tftp_err.no_packets); - } else if (rc == -42) { - printf("TFTP error missing block %d, expected block was %d", - tftp_err.blocks_missed, - tftp_err.blocks_received); + } else { + const char *errstr = NULL; + int ecode; + tftp_get_error_info(fnip, &tftp_err, rc, &errstr, &ecode); + printf("TFTP error: %s\n", errstr ? errstr : "unknown error"); } return rc; @@ -231,7 +179,7 @@ static int net_init(filename_ip_t *fn_ip) rc = dhcp(fn_ip, DEFAULT_BOOT_RETRIES); if (rc >= 0) { - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { set_ipv4_address(fn_ip->own_ip); } } else { @@ -239,11 +187,11 @@ static int net_init(filename_ip_t *fn_ip) return -101; } - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { printf(" Using IPv4 address: %d.%d.%d.%d\n", (fn_ip->own_ip >> 24) & 0xFF, (fn_ip->own_ip >> 16) & 0xFF, (fn_ip->own_ip >> 8) & 0xFF, fn_ip->own_ip & 0xFF); - } else if (ip_version == 6) { + } else if (fn_ip->ip_version == 6) { char ip6_str[40]; ipv6_to_str(fn_ip->own_ip6.addr, ip6_str); printf(" Using IPv6 address: %s\n", ip6_str); @@ -261,17 +209,17 @@ static int net_init(filename_ip_t *fn_ip) } printf(" Using TFTP server: "); - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { printf("%d.%d.%d.%d\n", (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) & 0xFF, (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); - } else if (ip_version == 6) { + } else if (fn_ip->ip_version == 6) { char ip6_str[40]; ipv6_to_str(fn_ip->server_ip6.addr, ip6_str); printf("%s\n", ip6_str); } - if (strlen((char *)fn_ip->filename) > 0) { + if (strlen(fn_ip->filename) > 0) { printf(" Bootfile name: '%s'\n", fn_ip->filename); } @@ -280,7 +228,7 @@ static int net_init(filename_ip_t *fn_ip) static void net_release(filename_ip_t *fn_ip) { - if (ip_version == 4) { + if (fn_ip->ip_version == 4) { dhcp_send_release(fn_ip->fd); } } @@ -322,7 +270,7 @@ static int handle_ins_cfg(filename_ip_t *fn_ip, char *cfg, int cfgsize) return -1; } *ptr = 0; - strncpy((char *)fn_ip->filename, insbuf, sizeof(fn_ip->filename)); + strncpy(fn_ip->filename, insbuf, sizeof(fn_ip->filename)); destaddr = (char *)atol(ptr + 1); rc = tftp_load(fn_ip, destaddr, (long)_start - (long)destaddr); if (rc <= 0) { @@ -455,7 +403,7 @@ void main(void) panic("Network initialization failed. Halting.\n"); } - fnlen = strlen((char *)fn_ip.filename); + fnlen = strlen(fn_ip.filename); if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') { rc = net_try_direct_tftp_load(&fn_ip); } From ec623990b34ab0e271141356af96d67a0c4e980d Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 22 May 2018 11:37:29 +0200 Subject: [PATCH 09/12] pc-bios/s390-ccw/net: Add support for pxelinux-style config files Since it is quite cumbersome to manually create a combined kernel with initrd image for network booting, we now support loading via pxelinux configuration files, too. In these files, the kernel, initrd and command line parameters can be specified seperately, and the firmware then takes care of glueing everything together in memory after the files have been downloaded. See this URL for details about the config file layout: https://www.syslinux.org/wiki/index.php?title=PXELINUX The user can either specify a config file directly as bootfile via DHCP (but in this case, the file has to start either with "default" or a "#" comment so we can distinguish it from binary kernels), or a folder (i.e. the bootfile name must end with "/") where the firmware should look for the typical pxelinux.cfg file names, e.g. based on MAC or IP address. We also support the pxelinux.cfg DHCP options 209 and 210 from RFC 5071. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 7 +-- pc-bios/s390-ccw/netmain.c | 86 +++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index a73be367e6..8af0cfd2da 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -25,8 +25,9 @@ CTYPE_OBJS = isdigit.o isxdigit.o toupper.o %.o : $(SLOF_DIR)/lib/libc/ctype/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") -STRING_OBJS = strcat.o strchr.o strcmp.o strcpy.o strlen.o strncmp.o strncpy.o \ - strstr.o memset.o memcpy.o memmove.o memcmp.o +STRING_OBJS = strcat.o strchr.o strrchr.o strcpy.o strlen.o strncpy.o \ + strcmp.o strncmp.o strcasecmp.o strncasecmp.o strstr.o \ + memset.o memcpy.o memmove.o memcmp.o %.o : $(SLOF_DIR)/lib/libc/string/%.c $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") @@ -50,7 +51,7 @@ libc.a: $(LIBCOBJS) # libnet files: LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ - dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o + dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) %.o : $(SLOF_DIR)/lib/libnet/%.c diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index d007fb7a86..c059546480 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "s390-ccw.h" #include "virtio.h" @@ -41,12 +42,14 @@ extern char _start[]; #define KERNEL_ADDR ((void *)0L) #define KERNEL_MAX_SIZE ((long)_start) +#define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */ char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE))); IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; static SubChannelId net_schid = { .one = 1 }; +static uint8_t mac[6]; static uint64_t dest_timer; static uint64_t get_timer_ms(void) @@ -159,7 +162,6 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len) static int net_init(filename_ip_t *fn_ip) { - uint8_t mac[6]; int rc; memset(fn_ip, 0, sizeof(filename_ip_t)); @@ -233,6 +235,66 @@ static void net_release(filename_ip_t *fn_ip) } } +/** + * Load a kernel with initrd (i.e. with the information that we've got from + * a pxelinux.cfg config file) + */ +static int load_kernel_with_initrd(filename_ip_t *fn_ip, + struct pl_cfg_entry *entry) +{ + int rc; + + printf("Loading pxelinux.cfg entry '%s'\n", entry->label); + + if (!entry->kernel) { + printf("Kernel entry is missing!\n"); + return -1; + } + + strncpy(fn_ip->filename, entry->kernel, sizeof(fn_ip->filename)); + rc = tftp_load(fn_ip, KERNEL_ADDR, KERNEL_MAX_SIZE); + if (rc < 0) { + return rc; + } + + if (entry->initrd) { + uint64_t iaddr = (rc + 0xfff) & ~0xfffUL; + + strncpy(fn_ip->filename, entry->initrd, sizeof(fn_ip->filename)); + rc = tftp_load(fn_ip, (void *)iaddr, KERNEL_MAX_SIZE - iaddr); + if (rc < 0) { + return rc; + } + /* Patch location and size: */ + *(uint64_t *)0x10408 = iaddr; + *(uint64_t *)0x10410 = rc; + rc += iaddr; + } + + if (entry->append) { + strncpy((char *)0x10480, entry->append, ARCH_COMMAND_LINE_SIZE); + } + + return rc; +} + +#define MAX_PXELINUX_ENTRIES 16 + +static int net_try_pxelinux_cfg(filename_ip_t *fn_ip) +{ + struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; + int num_ent, def_ent = 0; + + num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES, + cfgbuf, sizeof(cfgbuf), + entries, MAX_PXELINUX_ENTRIES, &def_ent); + if (num_ent > 0) { + return load_kernel_with_initrd(fn_ip, &entries[def_ent]); + } + + return -1; +} + /** * Load via information from a .INS file (which can be found on CD-ROMs * for example) @@ -302,6 +364,25 @@ static int net_try_direct_tftp_load(filename_ip_t *fn_ip) if (!strncmp("* ", cfgbuf, 2)) { return handle_ins_cfg(fn_ip, cfgbuf, rc); } + /* + * pxelinux.cfg support via bootfile name is just here for developers' + * convenience (it eases testing with the built-in DHCP server of QEMU + * that does not support RFC 5071). The official way to configure a + * pxelinux.cfg file name is to use DHCP options 209 and 210 instead. + * So only use the pxelinux.cfg parser here for files that start with + * a magic comment string. + */ + if (!strncasecmp("# pxelinux", cfgbuf, 10)) { + struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; + int num_ent, def_ent = 0; + + num_ent = pxelinux_parse_cfg(cfgbuf, sizeof(cfgbuf), entries, + MAX_PXELINUX_ENTRIES, &def_ent); + if (num_ent <= 0) { + return -1; + } + return load_kernel_with_initrd(fn_ip, &entries[def_ent]); + } } /* Move kernel to right location */ @@ -407,6 +488,9 @@ void main(void) if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') { rc = net_try_direct_tftp_load(&fn_ip); } + if (rc <= 0) { + rc = net_try_pxelinux_cfg(&fn_ip); + } net_release(&fn_ip); From 0d8261b506933c245b79ca6a57422dc81d8989c1 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 22 May 2018 11:53:51 +0200 Subject: [PATCH 10/12] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID With the STSI instruction, we can get the UUID of the current VM instance, so we can support loading pxelinux config files via UUID in the file name, too. Acked-by: Christian Borntraeger Tested-by: Viktor Mihajlovski Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netmain.c | 56 +++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index c059546480..0392131c27 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -44,6 +44,9 @@ extern char _start[]; #define KERNEL_MAX_SIZE ((long)_start) #define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */ +/* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */ +#define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4) + char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE))); IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; @@ -235,6 +238,56 @@ static void net_release(filename_ip_t *fn_ip) } } +/** + * Retrieve the Universally Unique Identifier of the VM. + * @return UUID string, or NULL in case of errors + */ +static const char *get_uuid(void) +{ + register int r0 asm("0"); + register int r1 asm("1"); + uint8_t *mem, *buf, uuid[16]; + int i, cc, chk = 0; + static char uuid_str[37]; + + mem = malloc(2 * PAGE_SIZE); + if (!mem) { + puts("Out of memory ... can not get UUID."); + return NULL; + } + buf = (uint8_t *)(((uint64_t)mem + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)); + memset(buf, 0, PAGE_SIZE); + + /* Get SYSIB 3.2.2 */ + r0 = (3 << 28) | 2; + r1 = 2; + asm volatile(" stsi 0(%[addr])\n" + " ipm %[cc]\n" + " srl %[cc],28\n" + : [cc] "=d" (cc) + : "d" (r0), "d" (r1), [addr] "a" (buf) + : "cc", "memory"); + if (cc) { + return NULL; + } + + for (i = 0; i < 16; i++) { + uuid[i] = buf[STSI322_VMDB_UUID_OFFSET + i]; + chk |= uuid[i]; + } + free(mem); + if (!chk) { + return NULL; + } + + sprintf(uuid_str, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" + "%02x%02x%02x%02x%02x%02x", uuid[0], uuid[1], uuid[2], uuid[3], + uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], + uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); + + return uuid_str; +} + /** * Load a kernel with initrd (i.e. with the information that we've got from * a pxelinux.cfg config file) @@ -285,7 +338,8 @@ static int net_try_pxelinux_cfg(filename_ip_t *fn_ip) struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES]; int num_ent, def_ent = 0; - num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES, + num_ent = pxelinux_load_parse_cfg(fn_ip, mac, get_uuid(), + DEFAULT_TFTP_RETRIES, cfgbuf, sizeof(cfgbuf), entries, MAX_PXELINUX_ENTRIES, &def_ent); if (num_ent > 0) { From 63c93fac18546ef9468c7b522bad0ae43f9f58ba Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Thu, 14 Jun 2018 10:38:22 +0200 Subject: [PATCH 11/12] pc-bios/s390-ccw: Optimize the s390-netboot.img for size The -O2 optimization flag is passed via CFLAGS to the firmware Makefile, but in netbook.mak, we've got some rules that only use QEMU_CFLAGS for compiling the libc and libnet from SLOF, so these files get compiled without optimization so far. Use CFLAGS here, too, to create faster and smaller code. We can additionally save some more bytes in the firmware images by compi- ling the code with -fno-asynchronous-unwind-tables. This will omit some ELF sections (used for stack unwinding for example) from the image that we do not need in the firmware. Acked-by: Christian Borntraeger Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/Makefile | 1 + pc-bios/s390-ccw/netboot.mak | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 439e3cc9c9..1eb316b02f 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -15,6 +15,7 @@ OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \ QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS)) QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -msoft-float QEMU_CFLAGS += -march=z900 -fPIE -fno-strict-aliasing +QEMU_CFLAGS += -fno-asynchronous-unwind-tables QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector) LDFLAGS += -Wl,-pie -nostdlib diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 8af0cfd2da..14e96b2aa6 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -19,7 +19,7 @@ s390-netboot.img: s390-netboot.elf # libc files: -LIBC_CFLAGS := $(QEMU_CFLAGS) $(LIBC_INC) $(LIBNET_INC) +LIBC_CFLAGS := $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) CTYPE_OBJS = isdigit.o isxdigit.o toupper.o %.o : $(SLOF_DIR)/lib/libc/ctype/%.c @@ -52,7 +52,7 @@ libc.a: $(LIBCOBJS) LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o -LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) +LIBNETCFLAGS := $(QEMU_CFLAGS) $(CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) %.o : $(SLOF_DIR)/lib/libnet/%.c $(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") From 4046826d46618ef7eb11df41fe8878669ce6991c Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 18 Jun 2018 15:24:44 +0200 Subject: [PATCH 12/12] pc-bios/s390-ccw: Update the s390-netboot.img binary This binary now contains the support for pxelinux.cfg-style network booting. Signed-off-by: Thomas Huth --- pc-bios/s390-netboot.img | Bin 87872 -> 54944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img index ef561efd2e222e03138705e9cf30d9e125a7970e..2c6886efb8320ff711589119ffbf077e68ec8784 100644 GIT binary patch literal 54944 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 MRZtp6f%Jgc0EmTxF8}}l literal 87872 zcmb<-^>JfjVq|~=W(F|^1_rPIdjs1FsJH`|W()>X3=Rwy3|tHj41x>-3=9lx3=9mc z5D5l|ItFx_$p9h`qZv3D7#Nrt7#LWf;sw}g27ZV*oCdiIgrWMNvKSQW1c(rf200V# zC#XBYdFCcLQ z%>dFD$iTqB4iP7s6i6v~8icS9H9TP9!@$4@jaL}Wz^I>-nWUeSVrHUOoUdmHwh!c2 z5m0(?_X}m%5jRihy_CUgy_7%hXI`=?PRUS{0IPze7f_gj;-76Is{xaXj9?2WkU)AF z7#KKRcsI;`dppUf`@nm)H(Zx>?mp3fV6oHWO3jQu-t9ZCPZCf#4Y3hwAUeeiPxmM? zyaI4>c2K&7Ny;I_;rRq4r!C09zz1TmFBQ4~q8S*#@oJ1D-T@T{|i z0Yoz}Fo0+uB=skt;vm0=A;h7{hk*$c4vYwM0v|xtgUnGCg1cV^l1>>Iq!@}zQc{bG z;!_e!5*d>7^NLGzQ{#)1a|+@!^GX=vi%SxVN*D?f^D>heic|Aa;xh{v5_59m^YT+t zi{o>0K-%+5OCZ`a3(PUjz3v!a6HiHsXqyG*lj|W7vH$vRS-spb-#Aje&fQUCh z!j-+zALdV}I3!%z8~tJ72o;C;gT2xJ28ub*@MdrHhxs3(eyI>RyxAN5U!bUmhBteo z{|6NDr9xnLus8buKoy6CH+y3MEFD11Z-%I1Zw!E?Rfu>aB>S>A20=8!{M*t1E)Uro zgTORA99kM68X(4vlA|Fo8UmvsFd71*Aut*OqaiRF0;3^7^$>WS|G|Jk<-i37hC18j zzyF>%@RWgp`OX0a28Q|q5Syh7L~=17FkoO<{$jZ#1H*Dn2DZlx1`G@=%}mT3%jFpu zm$xw3ItqOFvwQ~w!+`}13@g?>7WlA%K_x<90mE_)2Ii$=|9^^TcPcOliU|dP#4P{+ zf2{Cf0|N`lY#vD=rR60IUdwkeFotZnz_ENI1M~7H{~v?gQ1cn2g2e;Gu6F>loj~l` zEg&}UpT`0qcT8mx;8|Y6bn&r*KrX`s4+DX`<&q4490flxK->|caDn510|Uc~q@`vI z3=skj3?R3FTm^EE1H(=c24jSKxGxGREpPdMXt^Z=!*WkX8;H#EoeZZOcYk02*_(P~ zCkul%h{d^CNNKqXQ*MC5CzHnlAI>pMcr5T?0fWk8fe+`w>=g_uj}1PYVwmvQ;lpW$ z36BFloMD*oIN`%th6x~l)O`b)Qg{Mpp85SvtRF5sRshL&DliB z&|?LVEn>o*3Je@#LOVqm6dx;mxWLc^CRKKdF(@6_z`(Hl_3{n|uAM9l)yr2faDnW| z;R4%t1H>+z03vxSL8NgNSp30qONhF{rsWb0EXy?+7y<+~Fg!MZ#S(9u#H8hV|Nk#< zVXy=1xC_!i*IWHfPH^?_k03xgI&RdU)+CI(P?*e5h|c?*LBSpR#F3@__)2?n+RfdYod3ZG0E zL_qNa5?5IWaxKE8CUb?9Bql9yVdMq7x8(n-U_TJFMNx?GQeefbf_ z$WVm~EX!3G6hJz5vM_+sJ7b&UfdU4`Han26l=I6a7#N%+3K+m{?Ayu0V7}awfe9p+ z%nC}c3~NC8K>9(U0TNGTUH*lEW%&#ShO5jM7&b60Z(*nrnz{T412@==g&;Ldvq2=6 z3|M3>h|LqUlZC+w%+~<%3#yiX`47qie;C9-d`l&8t_H<&$$$RG1|R-_)AnC*+WrSl z+y5bHyY?PPeL>XnFaQ2OHuxw2Quk31r0$~-NZm(asJg3Qb#BYQ{QK>w@R4EpN`?#2 z6k!FD(JzF#sP;IBUtqZW%fD-m3Lix||juTCT~+;HU)2*D2s|s0EjM`Tv%G`8RDR3xhf=eI%-aQ)Uap`sEV;|4(92 zU|2qrfzh#|fWdL50>k5i4?7rCK;c$<<$wVLV{3ANz=tCsyYg>NWtad8{iMeeKI~vn zT)u=Mb|(viCd}M~pF5ctnwGaPuuNiT0ObQskgmi>;B->7yo7-RY|qRFhUH)W-+}5> z0I5m11J&sT)oHohlM!SBIMpWAF4tsWbX019lv&GmvM{)Te7uvB!5NZDcZx88(E$yZ z`Ks0gtR{8&mw#s@CN2N+?<8C%8Z0ws`ImqDL8eu4gZPXIAa;!}m>mUTSDgW|xkcdm z;DB91Q;9z1R0jQ|Njlr%fRkppun*F%b&LE3?MmBo@LP7v`K*B zHNyu62GwayAK1VweXxw+V*y4`tb#^w)Go0zZV+Gqi%TGMO!*7b!Tt~APzELjM&v;p zW;8x%Y#k*3_`-(_NWELJcXgRI~f>vaxiRM&d#8^T!Mj5N_zP&1~vx)1%^os3QP_g6gVbHDR50%&xm=P#VJ8d2B2ajOO$DV?qe%<~49l$<7?+Fx|Fc|zK>-vV5ds%jp#I;` zv4KHm`L6%}4m|z;|KIx14Hp=eA7Ky&hjah~L-`J{N!rUT88{w0DljliaCQk`aB^J0 zuw0sfak=^b?@(W@|L_46Vu*Mxp9*rvP8NnuJ6RYOKQ;h|;1LFvFBoWSp-xB+JOug3}#I2a~E zT(Dg0|4&G~?G#~9V*dgOACT)89bo?lO8<-YJXR1eW|#oVNsm8#s9;b5rRwsN%YXl8 zxE}vu!G{Ho1|Jqk2yHSoVA!O@AkZPeAR{EWyygFosSF=hE-zsaek|}|1*qK>z`)S7 zlbJ#AwIYK(0~g4?#~(gcFtD)yTdwi{|MD;Ye?Z~|6pG7#|CfNY+Lo{Q|35-Nf#Ev$ zhZP@IEZ@nnMS=^|=G$bl0c0OT2Lpr5w1y8mHyMHX;FxhT_^=?r;lmO~gAXqzHGEjN z-0J@hhky@@0t`NEnAY%Nt%TKbPlgqaE*}^+89RVX0p~a&V^Fysp`gG3iq-!;5=J{k z7?dA7e2idVdAJZ0s})6SQpD{B?fy29#Ckqv%g*qN{7n>85x$BFi1S!pdi7(@_2y) z1B2LOfelOy6PI%`Fzjq+;Myt1!0=jtfsujNgF%7KfpG)NV*v#L2A0Pg6j&HUUhigL zVc>miEx-V3*MdYKvagLn;sMSA91^aN4G`i>-T(cE$T>I*@I(kGusk*ZnYL4e!SS^V zNRNYv0pDW*kdD`aAU@bU4i5tXzU5X7j1C3@d>~!Rr5G3k1Qb}72Qn}&FJa(*tN?Pq zhkybTNX9`xfeGwC7WRLTbhG^T|A-pjNX2G{lx`Fn~&6h5!Wtj^!E*jE@BZ1Q=LAY0<$zfQS7bC^qrMWHSSU z3&;$R4)%YDep;C?lDjz=SROlo{P@}h>TVNI`+uSM@(c!soox(?%PSZ_ErQiMSr{gQ z>h0GpAb&h=*r33`5m~T-VYv%~I>;uWwB;oXMpxM{Ff345-ohXb4m~uJceXKTg3WLN znXyxmp=J3I24#>9V3U^ozq?a}L4A1@1LJEY1~vxX#|jHL7&yQwJY6bj`IrAELH>E{ z@KFL14zKe++yJF?aOhx&f?^9+e!gA|GA}~Ff#b1(0|Ns~M1TX&@|)lm+!n{X4h+kG z|4(?lK!JmSW4Q+d!}2c-{5x3~_JYea7Es9*5paQLxd$V|^4kmoVj-Zu#!eB2P*5ra zx$a-dM8*yL%S--02l4*T|NjS6&Mingyubn0Yq`9Iffp1~AiE&;zuy1h2PmW<`pxy-I zZBTzBKwzUwfWQWg<(&*V%Pkp<9XmEKfa<@UEDRc;dLN|zZ`@;n4aN);mdi0PEpK7G zzg&)iV|feX`Q>t;aREkYkiSbsK&?48)#VWkpngy&SidEMlB2^$1F#u3pfF&R-O0kR z8kCwGCw$lpibtn{58DGAK5T}n7uw0f;JG}KffcMr39KjnvA~DT400g?3+Ds~ES$4b zo-?n0|5yJl?aCq2Rsx$91{+CtpqA%A1hqoU}$hu zGGN&$#Q^HRyDr!M|9@u#s3aFqU{C>tgM)(s!(#;j2?iDi2L-0b3IYlYEXyrGrK18! zTmd2uQW@YNz!Bge0Pep(RuC`%*|$Ll;?4js0S#zK3h!iLa9VG0AC6sW3Z2S#w|Ce}x*->C|aQmNC zWcio>zRNWjm_RMo0EG<<0R|fcmPatKfy@Qv*yTv6=8q!C+<(tO`it*_%`ySAUxV3t zAa=zn@h66YZT>dwJT(R7e!O+p+ z!@A{>42)pC_du>-5CNG`JO?E5>m!)`6U=@MVwc2%U9t4B1E^+yoe#;&AerK3u&Nti z_7X7r5{O*_?w7IjEdTOvB8Xp{50*OuX3qn&_kq|Y24IsbKz&sZzc?B!w*kx!2eVg! z*dTv0FtDU7|ME{1G$Oa$f`JJsd{vfz`DeP^gMks8>m4?L#(qHIuDJZmKTS}n0qI{9 zYk)=p*S=gXDFCWdl)-&qZCJ~dg~36>|%Wp7%#|>ljmTR(t$DxuI?qp)vw7i7@RNh#F>VoB- ztUs1Vf<{yR|Nou0{M!FFAW@K+znwv&DbO+)T>i6v0r{+GIY{;=xKuAT0<*t?#EUaP z@xi=d`IrCT^j0((EcXH|2QKe_J_55t!0P5K|MGt|$d~Nwkaqd<-~R)4vM@~E$-=N@ z`AUXmpm7k83BU3|qg{_LC~z>aEcXPD>}fe(xB&K9bnQ+S23>GV+>?O|o-RS7e;`rI zoh%IAu-fL=f6$l^sJ;j30h#=J7AXDx{}G{Z0bJ+(as!tJ+&e`Wv>!Ww+D)(LBhqWp zrR6*R{|C7}ebe$U|KGE-zpnpa!Jq=F`*yN0G=toIU;+bU&2^C3zeFG|er#|-fq~_* zzyt<{iB}mXFc>f`Z((TJDaPOkZmo*#WML42wm+G6iZKYh7Gz*%;EfP8;8-s8|JzOx zhC)f{fCbcgy#Q)eu`syrY-d;m%Aq?&7_1&c3)6rJ z>?3Orfe8!}>Yx%5R6B!uN6^$!4{6JQVz5fTM^&n;E|2dBpKx@drZ55WC4d785 z_MPGkN+4JK?**xY*az-Ww}Qe2(S9jB2%2wzhD6d%7KUO_?LDVpdB^|%OV=?lN=Ppi z1C4u3V36=ws?NY5rWl|wfk8rOlSu-oALh{Ez#y~SkAZo43j^PBKk&#l*F?qy*5xG( zLZG>b<;(s*0LKp~y)-~#>2>~x3!ruw$bG*V!8zv*i2Y;nay?Mb`OEcK7?!IrgbFDwS7ESUJ`e1h^~>k||F^t_ zVe|5N|Nky;Vc5NV-v2+#TNn;5pZEXw@)m}p%jf<7wY-Jl1%^1gIt`1lQ?B93a=ErY--%z~gAJ z!2+CGKx4L^VDTvEsEq{!3#{e?sgeNC;}rUIIe`1;;QB5VG#;XfSxXk0gH1AB{^kFa z<@5gESl+_WvwYtF>&sghCNH1&|Jw4B|K}eYd^o@$_SoUW5pb?yDEtoABfb2~|ARZl z7z9DCDp&(4Ssn{2Ffg#Ve^daErWZ~DtMpp_<^LLxuL@2s|MGt-n00pfm;V#Mtjo*4 z{O<;{t}p-czYSzsAwO839!L$S^mTNA`kfafo^o&bm;WswpMup&fyJ&Y|MDL^-%=<8 z;-?BM|MI^GEDs*YwnZyD5QK=dd1 z!TsPZJKGo*f=Z6cuRB>7yuiJ7o}C=v_9h*x^97btB(~x zWfQnhiPH{*>C!5X!KQ-CM5xKjHJM+4MlxQ%|4;y_Z$SC(n>C31D!=^8|G$v@149y?hW_CHqG0G{F7uz*1Y+;$S!u;H=5h6M~P z5ekA90SX(ofJ*R&C{P>~fzw6kCa}mwun2hmGjt``J}0>;1tKigP_`po|1&!|tfqiNCSOMgJ zxHEDVm2J_Q2l5OI+2!Es=~z*t`a@^Q#zP%Q5hVF2|k6(2in)L>wFy&sfD zVB?vP^Z`o$g_6+L+3qmGYm7$kW68m zgxyTgNF)Q;bu7!Z8Q8!qaH-`Wuwe_RrQ@KmVcYUA4ALF~8@7SkPLMDJr37a|MTX@X z4F5$GJp?vvkrD#w0I34CgB=7mYy+`DIzk05a4bLa{~<^fhz|}|AF%6LCYd9<(L-Uw z7I3)1VulHZO27<6zJnlMu*UCxHcs@ML;y09I+u1R7D_!N3Aa zlc3xQ9+l$-lRTg@3|x*phuDQp4K(%cU|`wF0b1RGoJRzlFr@7#OC3)(t>vZP1t$s2pv9l^INnBNR65S+2#v5&)vVFm*l_*surG zL*1}}fdiBhLIf_bK+FfZ6*Pk9WT*fti7-?xmt!yi&76X16$V*o>3#!Dt1xhb@)eUM zWQ>)ea`_h~d&qhkhPlh-7>t&;FnBHh!eqK!j=^bp3u8E#R$<^-F2`WHyoCWYMr*db zg;8z!7bfN9atyJ{TNs}&mt*+9yoE`8xg3M@@)pLvXQpT76AJK zQkE`YU~y6qg2^+2%4w)Pq&8xS0_oIXV3JaVh6SkH-NPUTPTOFUkZWHd7N||QOtN5L zk}?c1*sy2$7sh*#oI8n80F=vdn<+rROeEJaZh@N#Drs?>$w9zOWOsJK&BX6_9s*_} zyE6f*7CA?VT78S^GDgu=!CMG07?S$oD7}X)^97o(T5HJzRe+(ZW zxnsFDxD18Gg8?Y_fyNQAn*=Ud(aP5#bL?s{av+0~p^_MGwdm=XVLr@-;Bu1!7Y07V zZ7akMXc@uaWT;Gv3;m$xVo4*N0t_4yicooG%v>ubBmt^T7cj6mD2RwffbyFaXblP| z-!Ujb^)Uv3^7a=7DQN2wmZET_7}%AsbYiqqtKN>Q1<6JH;5BAi5rdLIyNf4fZ3W>GCh26%q*dqp5NP zhs3!EfelAM?FDH1K=Nl4NCp<4M?mUA1vV^M?()AJ#Et~9(c%-yN1*X&P>%^T4zwTC zr-1aB5cPA`R*d>t88kBdH~?HnD{NTfB(PyMG-mfeN>@;85!6y%{)Hh5QVM}X7+l*z z+N;h28&-q*N0N%mOF*-tpf(z)o(AiJ^p9N8b%NA`>qCfdKyh!3O%1rO$^}Zxpzwm` z3*32?0kt#%>4W5l|4Tr=!V*@Xb__HRAcd1E(&)nm&^ioI%7?UMAiXbWdKZMWTfnVI za32fS+64O#RIiIL2trz|u=M3W8)^b1g)Ts}VnKSOgg|q1QlK(o1teEs_J9%Y%)Gk% z_is?I9W+V;&!F4qL(bb1P`Q40wgsYxw?vjE~EI{|3#gfy+urDa+^)Ah6}kV}UJa zz$1)|#VYKpiE-oVNsJp`O=8^mdJ^L%*2fB9v$YxCESF?}={E$8kbDQtxH1;^F1KVf zS?Hr!K-^u{5-w@&KNJKcBfP4xIXWtr-%Ze?)p{W8U@rSbz zzHpX5i!Gde`;fv(5o9|&oNXsDZ`uQsT`tW8s&N!SJ}$ih8};$cpTxM~7Lpp!{4qq$ z3AmcrNsJrr;fk+Gj2rR9*|+VW*eKeJ9%oXg!Qyjau>@MRf`}z$6UvGfPF2Ya__OlozDi4yGjL7%;bT^2FOH^`(W|u6FP}~(;kqHl3$>-9w4x31t?~4=a{cQ zK%rdt1tau%z@}UU*$ZY}0-3i{j3EeAhJp25fW^#C7KTKSkCd`76DZ^5`&ofX=fqQM05Oom>0s>ro<~6@gGc3C805evN`Tx3Zmozx%v~%1XJc&WT z0j>^`;+`@vc+NyJ7hz5g$eiMrP;b{14)fkW*fsLkXcumjYOTCrT} zzd(S%mMxDBz-C*6%-*tPxfBBnD5WjeWY~gS_j_x=Oj-_JwZ@o zJ^VnfMNaKS3vs3PVo(dwaJeUBMUcl^P}(f!!JgVZK)bYrpyr~b_M#%>)b4Q-WKK~A zD78Np*nyNoi=seo2Fd0}gLA+aMs+YR#2GSb1DdsAT;9R}>N|qU7QN+P7=>UV15TSI z3<_vrqX#lGLSfqukV!?FAl_qv4QpWYO8@`=z6+AcR|1W$g7V1nFN`@zX0n1-K0!wd zK`G+~NOci2tS1HH75+o!<^2WCCoKQMa2VAkg)c#N!(3AM1jK`@0LNM39gvu_z?NUo zm~LSZf|bOe5p__>Q3Rj=b5~vdg~1#w<^-zYl1o9QnY$EPUR6WlgVt_ z1{zo363+cI$bUsbpg4CH*zy~jyO_bNZVExG{lGJxZa0^IVXz0etFR30F7VvD+c_k6 zfZ|XOi4Ss@8YC>1OEbVrP`4jQX%#I^6@uoIL1`0Qg1XNKxwFs?l%_zeJZn(;kpT5X zp*fGC2`r8}|5w6L3KA`p0fh#rM2!U-! zP~5aNLSWko6p=g50$cXMb?`?BY&!sxhqO=_z+>+WBA|4Q)JuYnE$jsCp4h+B0o0~O zv_W);6hE;))nfcykfUy=jLIZ5Im zlU)r#CPPO{R)A%}>tkIrL4Jj%O>xKy0Fd2C@yrAEp&P6<$OIZ|6UD8vcq2?D<9AS9 z`|bhQ2I%ZPSfn0xrG?~lurH>7%4eidhqUQHxi1+kUj+@Z76wU>3!$OIvb=-=H0H7Z zJm<|=oDOU2xqX0+|G9v5$AU};=>fN6kWFAiGXd1I1c$I2X#X#0E?*h!YS0={P<^WM ze-UUb3p54*nr8uxC@q&`kX?S{e;9bY3cM;g5wzPBT#^M%0fjtLctZ0Hc)ko{oGCF9 zX`FQhWWEg4>xYaGfk!!1AZu2ZYcudXR@eaUSksw=C{-1}WZ17n4R&*PS|A1|@0GkS$r^K{z#bW`G`#`fKi0}ce8D!`H<$>bc zptM~S0W!xKG-?Kl-xdY|u-sX&+$pe}7AOsab89HXL?qKdb-VO(IR=^KEeyucwyYCG z)pBVDE>Nn4tZpijgq32;zc552R6zU%sxd*~STqr2BO_!y0J6#lw1x(>hS+iW7Y0#; zK9DO5KZ5ju_Em#)xt2jW%G*18?uL704(D7vWI7$L&Z6$cT3S6F}l>3kw7LYrg^+4gdT#A7;Kw!fer1}7q zn?Wg81his$xdekofWU?m5egelL=`*K2YAziw3bkwjkv~9}s6+rsH>YYLAK{hUzVh}+NJ5X3J z^>1KY9?1Ys?LuK7Q$eK)cm+@igL;I(h7%H?*&dK3#dk#^|5n}+Y)o08D z?T-buKLkNzBs*Cc5l#Rl0zyU@Y&h~*0obe{M-Y)4<9>h z1do_)gpQaY>eqNdq;d*A9u693b`sdI9Fmv8DHT*&ZD0W9c~EHu8j*(NNDUzq2grCg zD4l9BGB_v*fJS7&JO)Mw&`2bB%=R&;{sy-|9M3~aK2R7r@q$y3Gy`NU0xT`>U{G-u z*svTaM!3PN7+65-fkF0x>P)zZ3`hjZ1Fc>Ht%?DaBcOF88elgtJa*WKl-3dcj|1)F zg`{)PIt3N5D?#&N;B!boW5M8b2=YB>Wfr)c2Cdiz+Xk}Z0A!2hh=2bPyG zC_{4Ra&7Q>DtL&Y=VS2t?S{u7+hM*xz@P$Zt^U6R4tW+(jR!LyTy{x<-NXWFA3#)q z#@oRx$l5H>>K90fQ?~pILmoIsfZC-C7+7|4f_k%{vJ_-0Qa<9^$-y85GH1Cw!~f++ z82F*N+<<{0_7*6n9KL}3z5ELUXr&LDufZehp!pC`-eZB(C9s_AEC6;H*cZt5f$V~~ z43ta3ETr(nq7qaqK-TmeU;v#(;S4bs9upv6gId*)w7ws-x)4&TA@4VgU5hmT17CfL znw7XexxYXBlF_r#(1=_MyUh)iPjPK&@SdSnw$)j-VYqpk02T z8Hp9(UAFL96VNI%&AaSS|$fwd^msB9R6WJCXuq>pV2?}TMT1C*V zeb}s#1861O7jSE41*EUxAO|uFBo10lCZV`gje!BSx=mDZ`4I*-5D(-EkUXfK0;g|K z%>imJ8o)%s>o1PL)(SCz*QOzt!;ts`hZ?*laF_$qjiL%PkH-PZHJ}zHatZ^L&6u-s z$mu2qR8D|KVnFk8h;#!o5tOq)xf>i?;Cu{4vt^)M4zU|t@7h1bFZ43eo5}=jmptd@w2MwxktQi==@d_#%KzxYnHh@cj z3@mYI0A6nkUHJel=K~lRqW6MU(u2phL2Fw{$G{-CT>Ah2 z*Mgwk{~-ba0!XbT39#AFIux<40#>4c;}tx54qg+d2^lGK=KzNc$i@xumNY01r-8*; zK&>9wsG5TrxZUy}A_E>z0OcFWB}8$i4%)8KVBNf`A2hRWqm+0!||k`~RQC%$bij zfcB4rViRm)I>JAXH*AQ2omK$Lzwi+ZaLj{hF>snj4Ov*3V-7aa4DQ<%pp?d-4AucE zTc9Bd@-y>ike`uiW=LNQl6t|VBiv7*5(6v(_0ug-p2L!QQC5q?+z(o}6O{=|W#INM zygd$?pJ4#4gM@?|I8|?eup#*cG^?Ws>iPb!MsqK?N5=r_k@$i}v!HvGKp_DV1J$n^ zz~u)Uv>hf09c{H*-ohXUYTJU{!m`|&K?4$puwEau1u6!f*#(ym+~D*9T1O8_Tg#>(}t~l0fl-3X#ERl zZMKuZhOOYX0;tr4^tKN$uq@R}fUN8Ww`M&QHf#g8Si!tY3<7LmJ)oKQ{{rlg_QrB) z1`bfF2bW6laW1>La9MD8Lqo4q|Ax(z{%zQ@ToXJauZ`620QDNc`^@aTkkT>E{TE321r&nd z5)I;lr8@r_z&Qg{!-4Dg|NsAkYA#T!QxE{{YeL!a0FNKgmOw*WWCv)U+;UIQnIH@dwyB_$!4IDQ0?C2$_dn3N zQ9@uhLE~q+HUr0UNrnZ`bOlcbwr&Vhp?g%;LtGB3)sV}b2t%aQ0Phn)N-=nQY%SPM zaOntg$6t3)9>ypaLGd>OStSDlV-rXvxYh_+4hf!>ZKs<=Q7fSxp(;&20c(Jdb|SU6IkmDEaHy3i;FKFWReN!{7+E(qJ;s}s^S8x zj05Qv5?rqG{{?970XoJDSs@47>!kwO)o!v1s;=e#31~im&OjjN16as{(;jGq0F)0P zt$lF1f|kSJv1S|aJimb8a;g9SI|LZy@y8*gd<31-71jzXjlgLGl=?v_Q9ytpTp)l2 z$rK)x)+y*j7}#z)q}D0KT&(T}yLgf@xOV_ruOZFA2+eV3}a?5IMtC>;uF)70+sj-uz4=@IE1?k zRAYncA5gmpG!6x6KY`ZVLUyiz#x~$~l2O@MF34{{xQ=HauWZ0hQv91vb0@mjIv^5hxr{#so0NehfCe0Pj=+_4r?a$I-ul z#!>aC(97gACn5nw>m*9k3gcJ^kP4&~mJr(}LSo5TKmgQ=2CY>9?f12Yh{D>-9RduDpwSOdY4=zG zWa?vs4L87JIN|K@?r2KVi6fc6&%fOgv40M7=2NB6-ssLf*mkRA^K0k-8D|No1F zN?54sgQ_DL`ZQ;Lu+#$*>950s*Vp{8#}Lr^~-EDq`rr3-T%0KcGGra$G!RV36s9 zj}xAN_N7}GK<)Aq;If|;lw#6zASq_~7lu!$rZX_eg8JO>)Cz9Jv@pnk(>kQ}V!*(d z?gLvLYY93#3sSTALe#)bb_LsH4&`gIflrjR7k;b&%KZ?vVAH`pEKtf~cng+;wp<|U zE$pFUkX9NftU%!iPpKBg5R)dc3V=p@Ux3&DNP?!1f2=AUmw&f1&ug^O(_AH0xks~gW3wqzkp8S1-natfibNR(Nh42H+Wu$3%t(| zG{2UXg2gZ85Fdc$qfz}~z7=e@6ayc$FAH6VoCX>Lg!E`Z=YfIF5Qo*jpfYa#Mh{RK z2d{TPszLP*s6K?$G+Ur0_y%x24@wW7aCJQ3*{Q;2a0qh0bsj++Kr+u<;Y{d<>}e0L>(T{MrIKLkTn&0!{}g zAqZOo2wG_YS{VQy8$pafuLiFW5L>Rvuz4p3gEnL=0G0<#LH$C|?luhu1}DW0pcN{h zJ*uE~2WW-|RM$g#y{gM4!TLeD9yG25YA--{`kUHLV%V@9Ssvs|6YzRPh`*pCsvwh) zOo8?t!F7*SG$>301UBr55ZJII5^^p8JBTeLxO@q`_vQ);VbFeB@Gj9aptcmam&UPF z|35>B!iF7P3Je^eo&i{$1_L8_<`zj^gu;d$AbChALPxM+H4GOdY(Qu9f?1&OM~XvG z8u|~~ZF&Y4o6xyR9P>AUobdJns0EH_jf2{<;5!E(BQB;BA)y2+IsSpxoPx@6MB2Ck zl{H{s2)F|d*}vd&4dgmdy9SavwjrrH4N_$c8ij(G1nNnG?38BUhpwy;SpJ1!4cHXW z2otF9inMRVL14o(4}lHOK(##DY{n#zIC7h5xhBIQ%v5D!0#XOk4+<$zE7VDG!=cBZ zmKkUS4zz;S2bd08q^h3O{g}XQ~Br8+x7oPZDawg9w2Q58yUDfVWdcmRo{b0oG7EpgVI+ zL2Z0!9~)8vgWUV~6Vx=YdqFM(m3~;-k?{2j0ibzoP>BpGZQ5bW$&9 z1{!SgbWr*;1np0~vRsaVZ+Q!fY$sUOKEhzbmE~3pOaTTPu0#lI0IB3(e&j!BFFmC7 zd;+{q{{(oA6@!01NSAQ~v@QY7`9N0sv@n3qkb%@Jpmr8gIt~y3*Bo2GF%0T&gIZ}@ zKw$^&Gn`-m?;Zq&&T=^hPzw{J2DJYjQj39lmmoJF>?--c6EZ3bZZEYkG=g0N%0ZCc zCcI7q*$i24298zmJRYc?0f#CtQXGKCLk)JKhM(U{kY5efLF`&C4X$5Lfa_b(*bOv9 z{9eNDg)ju2*#pVxpcN*d_N6rgD33w(fP4j-wK@T>jX-OyO8(!0xZ|#|u8poduADaiS99u5Oq_n(+As$StfLBkufMyz(e_^OuF2{ax zc?&}-xUOhn&|3b50n~@nTBu`#KjP|F)+x2+O;56pq1%(|Fpj9i_=Q|)N z0bB!u&esO5hjlR6u*^YW!x9I94U3Rn0kst*16ij7icN(Li=gXtAiQPJSr5>Rkp=^3 z4G$aUtQ)M|hI|f~1$e&$WL;eHYEUZxah%^Ii zC0r0FWWV!0cGwOYm(1S=KC2wwFM`dB2!Tebkw zGG5HM{K)?!pcVwoR_x=9pz^`{CTjTrE_Fa-?Tkq(D5K?!NixVY6rk~hBv3mDR8ND> z`-A9VgN&WS&clP$f8bOFy3+&Pz6aMNu$85t(hPY_7^U=pmVaR^S}w;R zvAl(0+j2Pu>*XyB50-yn%z%|c8^NP=8zCcBOvt$lToZ%JF;LG4G?oZzy9vNlf?B(v zaZvdF^*`Xg$CBk=7}LPL36{qO8^I%f8!v!Iv4}AnsuGXc7I3q{ZIz8Dh&CIl5|`Pa zSWc9I#3^Xj5nOr*fXoMl12iXt`)>NBkKy8=xfiG$8z=`nH(vgQ;ThbG;JNIL2Z(kf zR3$DqF8{)?18z2Wz0OAP+3flFE3%>1eKiy1)%;VsPu)T1aORj&V&HV=MbK*T3MMwyLgXGdKxlmr?@QAA!T1h*etFG1{IE@5o! zAh2QGa!H1DpwQ+5*;&0+qua7h&}U$ShC^ z4DwIB9>hP8c8;z#QVnUqz!)#T+>`YkXr(zQTrYz6<$yvR+8aWQa-4*UfX8~kqoM~u zBH)#P;Qj$vY#S(t#C-*)Bv7bBMlL|nY-0<0!K2A0P3 zK;u{tHK0?i5auu@?uDDf3Gyd69fEd1z|??hGtgM65a^64ScrmMmkzPbLqLEBl!KPb zaj-3KVQ_}_P}G*oae!`zV+XAp1grOlr&vCaUzbb${{(5HfX208?spAiIFg$v2e;FV0ElmMzJASiZ+d!pzfC1zj z-h_?IJs21Q93Z>jL3v~O7lu?&{zzB`$q}yw88{huUmG$oF@W|FIPc^H-!~)zHU)Az z;1cl850ENFuqsXl@Cn5UtaybUh@ZS$rFKYQ0{}a?QhUNz>HVZ47pCAaZ`}rb8ROv2rz1i7(8fI(on21C6FD9#viHJua$n8EhVg35A$`wB_-MFap8o&;ZyKsCXyNTjhWWZE=BME`UmU;rp!FrL zpnbGRwHsv2=n}(*_26;N^&tWQ9Nq6KISRY$90v2#Pw;N&BD{2*^Z8Zw1jJz+G;E>IP8D2XgW#=pHwd zoh%HhJ6RaS92hpNb28YlHb7y+3Q%rXU;`w3;LUKKByTN>$jf z4mtt?8kvNQd4R^y5IoQvJ4p9`P){7B`x1iy=LXPPw;iB!L^iAd-7^WchXoo}pq(xV z{aom?Ua;ve2wK+xs*3~!z^fggZG;x^Iqnc~ zl)ee5{I2VVv=w1BzQ$Ql|9$xvM(`;ybq(ND0`fbkbq?C22J-<6XpaiWcJP^Zpj8u~ zwLc01oDd&53kYz6R?2}|%wQFu)dP^z!Ju_ygn$4KSO&C)5F!Ig7oZRn5D7m}xh8`MsCNj8i#kmZ3*w*U*5KAR7GE!y2H(5`o~O|O?O=weK@Blb zjDc+Kh1v`ngM;}TygmhFzZ7JJ#|Fp>50DFLUx3RCP z0Id=Soe2XPApp0_Kq;6Z1Tw#|+#A{bpm1I;_5Tf|eFO40eD4@|7KGy+D5Wg_!eENc z_h`By1)T*2PPw2H&O!V4K`k#(8WRuz?HB^x?kEO|uNV$gm0&Rj6fsbm z1daC2U|?{V0M4Nx9`qh_X7IT%;Ppn3RKNwX6&l+j;8-qUfb47muMcFhg{T0XLIc`O z59J|B6+Ms}q7Q+}j^(h`Nf4I{fNOWg=q(_*aDfY;JW|2{T3Z8>hn70g^FgxWpmqQw zge?NP#lBixj>^BpfUlJ+d-{*P!GI>5wvo14LBF=0iP8KUOB`JItLOoLkLm> zF311>TmFSn6Xez?*m-4w*upIebj}uRZ6PGw7^8NALIUFf;JH76jci^%@e(91Ngck5hJXg74^*1h@Sdqb7sf!U7D8Q9Yn^4|Y)} z$b4|j>Vo<8AU>7siv-yR4QUO~*|nm7AUx1Xz@Q!tga?ZSxqLNf z_4NP$-@`#FKywf<_dX5)t)>Cl^W!8qC4yEIOQ82#K`C366*5N(x?c?DdPFS%@!9|X zKR_cjaQ8!3hV(j2Hdhz0rz(eh_FWiY7c0n9b^wk4`jW-od|&qcOZSb z{|_DufYhO^2EM?6yc!r3t`IeXpcTW9(aeSDhnMpwz%2<-dm7>saGM02+CXh2s2GN7 zhmD}o(EXr&`>6Z4VIyYX)j6P+voNUL53O|}yAwg{T0wIdgjQdJc4R_AeFHeumw?vo zgG>YUcEM@?E~I2e35yLVVF4Zw2A$mU8Wt81Q$b-2m&3U-8fAtC+P(;2V6giOTfGm; zV;~oSN~{PqP+10AAHDnwLjb6(hyaxfYZ%0!Wh}-xMTDRN1N3ZZP(J~o5>j?TM?=E@ zfk#8WFc^VvvVoi->=Oq)`46bei2l@g67jeW$yn~pcn$>Gw66|KWObH zBxWJ!P=h*W>t8YOe0S^aoe-{)EkdxU# zcVU65W5LUtkh`UI>iG0b1Jt zT7?AK)5#_P>hXhEECQ^~0vonN)^|bFLgwQ^^%=&FPjEU=1l>pl>eVT1*bo5OMFtrm z1+_*%Bc!0!fu4{tMMY2>6RdV)P5@}O-2qgpy@sFU4$b!$7#M6>;l9P_S3v3+updEd zOF-*l)XMWW|bG|L823kpS0+JJ;LxE}~M7vyr#d03#HImmng0X}d| z0ul$g7u-V#odhi>k1YSf-~uWqLqR>>BY4V5MetoRP!mDr6?n~#0qAUgN?VAayA;5o z;|U5K(Cr2w^Z$eAT|(`V#9F}n%n`0cDd$3Uz-6>FxJ?Xh#ar)&wc-_F``y58a8P_O zfc7KfGKn2*k|ucP5vcxvgg9u&3p~UXOhKU*@(FTd1GJ>UQoE@B0mlmX?As#HyAm97Vc38FO!nu#e|3rjJd!Dr@%fZDML|G`|= zypt2$SCCjfgMlGnqAKW)VaAYt6t}?CB4!IZ7#IQ?Reyj|B90M&e&~8U@OsnbzyE>e z+(7G-ghA`R0t7ZJ0J%FPG(us+0&v?~fPpc@59AAQ=;VQA-9UWU?rczPw%n4TV7Vs) z=oBhYYd;Z`1HN{`PL_s^06kXNC;=+RLHmm*aeziL!7K*QNG6B{YGXo1G9kPxWstR8 z5FYsSBeur^U>vB!;9HdC{({X1jm?2~UH%523j^x;gLHt+g{|;`pYy)l zlc50Q*6-Di9X3t?%~*q4YM}ZHb=*7nEXckR-pAV0-%!|K)a;D z_YQzgUxJMDss=3Ba3lb9lL+J_63Ffv5Xk~Moj*k30#CHU1&&Y!&>gFcVLQbblwK== zZZ`(4sItPH-X^fNeTzW}d~0Pk{w&K<%^4A49{L>9S(gUQ0m83h6GxzWMNAU}cf zF9R1SR)eEKe3TLhe0poJKPX;6X<_*nM$p*d3-F#w4)DG&P|x}Sc;zT3=nNF_*^rQP zY(ZmZO3S~1@A3idebQzSi4fRuV7bNr2~viT-8{|$0*pJw7>topDrl!Bc-&7Kq*orY zgA6q0MZDhs|6fl4ojJt-+Vi9jjtkIPS0W%&K<%sL*8l&5_oRX9-$~0m85mw$GT1Wk zyp{lkH@Id3`3f{M*$5snUcjL8S`s7&YE^*lZhmbDR-XVCYh*}%T?k?=mt+8!Mz2A) zR)hNW%nZCcIT=1ecdg4Wmj>@51@$+;eGIUVq`>E^g34+G1CSp0nRq+J7(jCapz;Kk zs}evd_47SQ4+Z2KaK9Af)&mTX9wF!?8&HcKx*}b62c$;~IwuIi0>vaWCxFIBEFt@o ze}enRpqv8gPlDyay*RiF6*e4U5P^;{f=4C4K9&IG^Itg1nFMf70^c10>DR*Moxo$5 zAQyu|7c|lWnc)Y`v;=_C;5TW=+#z_prvyB{#rO?+mL_B-5v&S&J}sEdh9u4a(G6N< z^jJYa1H2|0e9Pz8&kz}~{h+<=8W6L;K8K4y_lJMI2T_S+h6Dq){p+B$fY37%5dC*p zyC2;4hVJNCuE}5kYO^b6g4>lK--F@^=6lGQ44{?3pw=~H-v?N|%v4B!4P4@Ycih10 zNEuLH8Khbpbi*`gq!l#w3p)QO=x}|G@=08?F-%C{529BqM%VS(2krh z44{#*6_7j+bqnZ3sHgw`KLFoHi!{Rq*}(`>`vp9{207nC1AG<^Xm%cangJwk|6fPz zLqT_|!_y1W3?E1(c;p2P+8dHLCNYBdlj2P6uz5<@2n0BE(9-+oo8SNYT_fZE%i?I1mLMg~yXC#4Ve!3j_c19~ngxSjnOv>xmLs7(m%oq|So zZa~uV=bg}$E6o5}EeO7IRRX+DSYjb;l{P4kg3Ooj2gQukLeQEMGg+_*cpWrYgz<9~ zSOmQ8NlI$D6oV4T&k+I}o`7B2`d9(fx{6RxKs{Mi41C%pXx@N@0hICtLF?2YCzk&I z|3M10{|fA@Sg5Z+r#9z+L_UG;ivx{VfO`3$abu0g3L9X)^279%_y>^dF?}We1SAgj z1B2-%kRQZv!$lZBgYTUezXTQm`HC+<0J>L73VcfK6VSdX$XWNX1?l_r391h%HpIc_|6y@=2gFSh;P@~F-!?B^ha|@M zX(QM-;C;~G7~un@IuC&jmylOfgF_88YG=6Ill|iINCt4v`q@*+=>VXy3~(s`Dt|#` z4P+kz16T}nh5~481Uet{X)@IHE5R#i!S~pI>V%3R`v`Qt0{HAuaN7!Gw-uzf#=sy6 zzQ_I(tUN{51#0yp>w=u^37R#9?%sf__ljLSidX z)qwh}A8*1<>jRYyk=G$%2PMJ%s>co+o-l}jRXgxL1n>9(ox`6G>V2_)fsY4*XEs2o zaVHA{sK+c45U^nlXvK?zz=mbZAv??OK+B^uAijgZhEve81yu4t${SG011Wsn+IJ2b>jKTHgIeXF(~1;8a}}UD1W@Vl zv5cJ3;T`w#FAU(j7CwUe&ftDg34Xg8CazLE~5;F==pH6JFmh*8tCifNphN0q!|KX4gUYw=qPVfVdD!g3oY%?6Bbu zBz1f+gr*MAoJc-w28@2`|U2L1IY}IemOc!<#;K zfXBEnYL7R+Vd>+89n@w}?Ey|7?-!z_Oi=9sv6&Zik^uJfaSe2CFF1XCkcEUhj`V?4 zpTX*~>qnMrFz}L>KAwPP1F@$MR?u12pczr*^noayK_}pYdZwWABz!%@%}^38#k`lm zOfist0%+XD$aMMdf1sVHpjHjaDAxOVps)pvWI=Y_bO|tsfM&uNKqWatL?K8Pz5)w$ zngHlzq85fcP>Oh82a*MkhB$-y6(D|>00Y-@O$N|Bt2U@V3@T|2LAQE=$1D_O90fK? zESLU2<*~p<0dQ-bAIxF_k9H}5()x03(D~pXS%?g5UlPcs|F4%zg3Xo&mDq-$bp_zH z35t6n1U4)H*$uW+fq}tr6R4I3mFSA=K;aj`4LbDzG&c`+s{*9_gseS&FCAg9VF6T* zA^aQ2AE2|xr9k7$4B_uUBRh{BHgeuYua11fRNQ_BmJ- z!3Wj8kp3fR6*7Zi5XiN{;Bz}c^&hy03_9$cnB?Gw4Dg@d&j@E01>lMe)E3jb+cusr+xSU+UptxM+e=Df|0>v4q{)f(x z?FXd-_AiL^Yw#86UYG^oQ$OMN)q&zRToRHimdpSD4?0N(WajcO%%GB%@tq(jHbFLk zYDh?$`2YW339Rq50l5SN%~^oz$fy7R?}-Q1@gRL5mx0Rp-T&aTBMgwW7jHj<@-H}+ zL31VyuyaJ9bs6Xm@)e*FQE;CM)KUW9n)wfWpB>bMy&w}nDe~UF)fUPzf0^N3NNcTY}Fj1&==cc>`8Cf4Rp0AE4B`{0mb)SY#H+M67y2qg7zN zzxOTw!W4qlSD>~5#0`ndHJCuNYoPs`jBoRaFm>|sFHD*UQ=wy_tjkLn5Oy(vM56^R zaDdmIt1#GrLJvGz$O}sC`d1$dfkrLdKSA>CTm9u4|Nlb##{lj>y;WPT@&6B0L=Eg? z+2tDle?vuN!6G8dHU9sCih##&-*PY4`2Q0s0=_}zEfZ*k0z`!I((*5i7Z5H-ie={I zC5-DqX1=)r3IR~;LCOudYVbT9cmx?#qB6cY0#XN>V}iv0n?0cTU;c&RG}x4_AX$(p z;8E)m25qn?c&!{bRe;W40IgvafZPiM76Z-sA&G(K>`E9wr(1$V6(B3@-*iCjnGSUs zOuPncqZ$Kvmpa&;pb>JAP5}WX3B#pk4B!}kQwLH9NjE!1z~j+~aaeH6{Qv)7i@>f0 zkC{V40nCpEg(8?02g#+N**eG>jgY+_%fB#!#@#`7!dzttvJJL2S5$HN63Bg8Z)|az z03NS@18w(#TBUFJJrooeKxRPg;sCn=x*roVhT@^1zywkOTH6hlWnZrG{~E}>%fB#O z2aAA4R~Q&TGt01(gCX;)ERgfZP0DZ zP;*yy;O;L6xd`f)LXf-RB_FcC<3V;n+{6G{1-%4v=J)Fa zQ0#+rLCRrBoBp*sOf@uZgV$TW2G5g$>of35^w)07HU57G>;1w2UfufI8CRS$2tmyU zua|wT3bPd)CrTh6fWs6r#*1`PJhWa3U|`U_3LA9?mGz)IP$2h^1TZYu`2S5BRQof& z0+%l!Ghcmy+3*-;$05|b3k(dpp!qHEY7X!?0cdm^GPebqM-hdrUI;*1>+g&F$K=s9HFqW1kPK9+@5*0@-b-C8rh@;kWfTX zH4Q}!oEBe|fK-6W3b2jEARgQfupFG1k0O@`Dlg&s3PC)$${ZAxF0h&-LSSRgaybU} z<)Cv(Bp5gXK>RNZJP>i#DWDr8mTRz12~gOW^H^YG4rD##D^*a7Qs);e{Y!ra)eJgc zKy4YBoy#@<|A(|}{{R04y7!ME7Hq&bKzCBY*BOFp_8s7|`IQhP zJR$@HEnq1JB>VN-@-Ga}L988`pmYLmAI}4Y&r9h2eh~r!EZ}{XM;O5OxxRc3O6!Pv z0=%!-7_0+a{)6%ixQ08zpaB-W3bk25&;rcg2-1%zeP8Ye@pplp}+AJWz0@~#OzTLHiK^z>W;5lO%ez3Y0m^!qu z$pFh1LS+>MSfHgX3n;v{gYP*(4$JK^VD+(3^=KjeC>Jd21(k*7i^E&l>p5&qH;t^=HkUxL?4Bk7P{uJQjmR0nt__a*$ii2tBHZ47}wKq&`Y zCWA+hUowI01lO;iJ<^OXzXdypp`Iy?@QDM z-*F=?vRneRPl53wL?2i+Xzmo!TL<^$cppJTLHSX;a=9l1JIG|-U}zp`VGsrTvf!}+ z$PSR4)Jv$2rwj~|uc0<9fQT)(WQYc-;bDKQu<-$CynEvV_^F>O9}9qZu%6&@Ifm%v zB@FYxDnY9mVnI5&Up-bpoIL^U$w1s-iR6am5c@znBv(S+5C_)D0JRS^$-05V7Up zxorjpZa-W;(mIA@FE>ONC=4Wdq4pj^*bDLj+(cDyn1R9w7KbH})S$HnVWK1~{XAu0 zkaz+$aVFR;pg4tuHUpRsGU*01HNZ@YL^5eF!fg`!p(cT1;09>66O{UvOEZA(`9wNj z43r~aGT?Xs*#VxDg~iTtNro%1)#8s0Kr?j z|9=#GUJueN7&LEbf$t)fOoO^m8A&f_4dDjRJxc%o-{?bxDr#(UYa;p68x)(MvIG?J zj~zCFP9)tAI#U9)HU}{e3))qn1v+;b^%N<{Dr(4B@|NXa7;Kk+VF2w30rl=7x9-6E z^^jZ_06G^&XL$<)Xy+UJOveDoNob(?1~f7FJSXThTNG0vyYCsm=ahojp`eqwUH%`0 zj2A$Bvk_^fG^BlnHa{r=*1u-?7x4b%HJ~09XeIJvaJvVzju(`V{)5h!1D)RvJ_j9= zSO0^~7+nMES3+&Vu@4m#ZknYSwlaWhS^k9qw4(~N<`WWD3&88i5v~B+hb7#gr@V&< zK*Q}mXazPdx4``kn%e`F^pLhBXgw@s3`7*xmIUwe0G+G`ndJqKGW=(T>=pozltO3k z;c=o5mIK$(|GPouHFTfD3fTE<@SSP7sNV@X=@jHwXlVvrXQ7Dg z8~{+gr2#ts0<^OS>KpK>3ZQxmw1)$d7D40i3;_xoE-e4TI2$xO2X0qEPJ;#Q&4kkc1indBV8e;!at!~Mt1y5@piiKj zXFDH!z9(q?@d^fx2!#zNK&R3{PsU^fos0?T9YgZs1(xM<40_8;z$G1MJ`|FBA-h2? zfZJ(_5cfgGph0^xk$nM)Ik+#A(0z&G{>h+t0=XaA1W-6|bb(|bW+74m=nm55at!iF zzJ%-u2aUsmZia=epJ`#>UoOF*5Df|yjsO2UA?N%p0G+@MS}zLP^8oWLC{O$Y?H2=` z4a$OaW-|+@27=`w=qZ%@L3bO2>JE6h16yANstLgB(;>AHWIx(+PtX|f|NsAlLB2sU z3r~5f2I?PUtO|m(-6^=24ZOZ|`S1U*c~i)`4NX??xq$+pbJxKql7Y_42j{60@Msc) z*EfjGpn3pQQm9P<#g1t3@-GZ!@cDDdI2vel{04XoA9N1-4hEH_GXFuN_mKH(5DTKIAz>k~ToZgB z0BA)3$PM6iN1XgfC(eUU?E4Se83Jm}LhfuyhJP2&<;AtiZPHb&?!YA5f%opji_QZfj z^gumD*a}4s(0Xc=yaF)?R8Oj=BF!p6YJJe@Jqs9Apsf$+*{aZd4r-Z!_TPg}K4e}F zDjz`YSjZ}BP`(Ab`u}?HExKS)P&oYOmq4ro0iXQ`*$)G1RZ4?SF=7UdJ%LZ)TLURW zLA?u@ji8eQKzSaVI$)>yLCVoJpz)Fa8zpd@XA1J4%1_uTD{zSd8Yf%8pmLpc!?q3E z!2M0o3OG=n1)s0BTpKicvjLRD!1rVApndJo69XaRyWkbvp#Artb&(gqduKpydjKwN zL8n1L#2_oZLFzy&EiZsqdozMgwCE6EU)j1G|mX#C(qz<0HP~I;Q~Xa0s|XJ=Th_k`{6nvEo)F~6tYGPa_S=J-WK@y zJh)vA4k2h;5cPy-&?yCbz^kL7^WKjgKw$?8p?^C;;}Q@0K<)vJo;-Hg2wJbQA9TMo z`xn%8c@Mzr13+m4RGuQQtb?pu0LQx|EZ#w-7q}jQq-bba%?n!piynJIpfb%v0TK=% zvq5FG@;y*lEmXVw3&Uz~EP{HB44{+JK;mqmGq4|k`hK7q91@3+8(_e*eXtv3KxO#> zcv%igU*KKn;PMHSwjix_UMGPKpnahb9-ouI2GF_(2#?=MV8eaLZaGkR9RuxK0i8#C z0h-!CWxfJ(nSXo%Bn~FEgUfu-ZZt@l4_aXZ-LU}<7tpC%;PR9WbS4@|9V6)6R?r$i z=!#B|j+G2jJ2@D@HNuT{P?&;tCL)(IY#yM{bDszaJtzsfzX)`iGxWBL<(>>4;9B7U zq*f4=gT^z;x+GBiDTl&p1(01}ccR1}PbYXi8Yt`#y>)Q>xjR7YhR2@-D4qo8F8{(P z3l4A495bk{1&wBbY8en88b6Ow>eZv5^aQzfCXL(V5(&WsRQ9o1qN1U0|AiQ z`^e@_V#1P^ps5eqh6SfRmZu5!865MKG`36d(ZuXEA0wrN3J$f32wp{qnKkq%sQw16bP+;Ip^!Ck zpb<~-2m!eN3reSuK0GMpK~4*R@IfgLTpoaSdw^0I{Nzx`I#;j{S!OMl1mDjIZ=bx3 z1>eK~G8Zwbs=r*4;Q**SfQ(Im(h#Vuc<~sET4?{3Ar&kKu9IGX*Yl#ZWkQxqfbTpB zf~bO|74&uDETHw@pj(8P!0W$XfZAE$n}J#wOdxxUmP78;0+qLrTc|*{nSuJrpd12; z8BO?&6QEO>pk{#1o`BCRg4V!-R}EYT%`AiVJ!vp71Sp6}EXTfv9<=XeKj_qZahUm{Ap;cf$muXo$?K; z|3Ll%#~d?g{|BVzWJ7Dig8j|B_OZY=$eu0G-7}!}RXb?pYq=al$MO~ivE_0MZOdC2 z6qkQt(0Z(}0dyk*;$|%H=*!=Xr`n zAkp7N%fEof6+nA^K&Pc)*;BI}T>ox&0IflSr+1`&8f46R!;<9^4A{=O$I{+J8sUP> z9za%{Dr{H+KH(l?cL!`90;z?H);|Q5?2Mq;1ogwVKu)nnYJ)&qqznuUhrpts6bBkH zLK^V{^+I6wfX3kzR8eh%`4V()gA-^cH{`?(=m;dF9Shpw4H{|L= zA$AMF+yD*}=&d=B@k*#)K>EPtE@;#h(&hl01?t)VKMl1_K!5?_XCylX0vI4G`rs`x zjF^O^A5i$p*P@0m#6J+z!EJv~i3S=k(PUsmjNCxVGtk~lXe$TJ!H`FNU+I>aZ^Z%8v~7F&`2a?+yxd-=y42MIR^?c_y`lYR0FlTP;R(K z3ZWM8i3u?CAfeX60J=>D6t2?X8&@D{12z&=@*mW82e}0~1t6J#kpfWi7$W}VI^pZ< zK>b5de+-nT9YB3>aQuVX7@+m!U%+<=g8YSuXHd97`e~Nn)L{hnsR~-UKz2Wp3&Cj{ zG%kto)5YaqpsNH~KzGX`(i>Dnr3i2Z;=Yi4> zC}o1i0$LbQTmv654+ZyB!8P)~RiIW3sAhuX08rWe4|FaGsJz<%y(>)xd{ZH)j`;#U z-3+w*4s;I==nOK@c{LlrJuc9#J0KT;%0O@}`fm%!Y*6k7>j#bcd|?2!xj-yPT7tBY zw?KCff_k1iz$+<{cMGEU9TLw-{>B(lK#OBgZxUo5B93=3sDMTTkn{Qf|InBL%|(Dh zuH^qSh&cqqA89@Vl2*W{1wvy19EYGjIcU5Iv@01DVxXHkL2XG$3Im<&2I}oX_6|YB zK&fsA1A3~{#NtZO8B35cdQh!n0bbLKx(^q2Lmen(qm~GeSlqw>T9FnCFCQ0x*Rz5| zT^K-juEX*xC@;arMvz*U;JwwL^ahy$0PWa-%zf;Ewi!U4NUmbMz3sf3_dh(#Qk>YZf|DcnoK(~xTLK0*S$Ty%_d>nRy^DpQmBam9ConSE% z>_kZe4&cz$0JT<-%Uu~zKN5E;0J#@(CLOq30k4Vzr2^0?fuJ+&Atmn)@F)vI2y)2_ zs@*{D4o*+32k(R(K&!J-kpjd>2I4Hd#Qu%&R>l>+7MM^=)kW{;&s|K|=#DpO238?x6B=u?N z>c!wIsZdwN!Qva{VsKdr%GcmbgngzGzprd}Aj-XjY?f);pB{!^e0j-o_d29e$3kLEX_{?Jt5No*{g9>=X8F+S+ zamDg43_`FR4q9^zuZzHTKvoJN%R_5&iRE$(3d>vmKfxi#xxD57H5_tW%Rx7jL(CTd z*@9e|*;gQ5;r)L77E55?6AE!`^2@(4>|Xwb z0eY(qWGn&Z|4@Mdk>y9gy)w8PkmLlGtDwd>Ob(P^9RxNUTmFS10y#`z@}U9&pi`GY zy*+H^f=+EhNl7q$%ccIWgqjPQ-@~StW%&^X(5a%>R%#Nhb}5{fuN8#J#1I@b@w6`*wb z-wtx71~hl0)CREf0aUI@W)hdbL37g%3LB0=Vga7d4K`d@ZvFoSv@HQm!Jv6iNG=7X zO`Q4s)?m!%5dT5K9iCd`7<57R=Ye)HIT*mg0HOw4+(3O@0&bCD#LjX#hS9Quc4YgcD6<1jTnTG1 z7pxrvYOR24PtcBT&<+I#>qih1vA2If^Cse;`)Xmm3V5#-bUHAkw*#7GyL2Do7HFyF z4whkAE-k>YRQv;ErWRB?f_g3@44_e0@M#aM7r=UtLREi0)JborBHITs(p)!{81c zfqf53so;FX18#dm#x8b%M3;YIyaGvIu=Ebn!LkYzPZt+MOx&r!pt!t*0lZ`G;!KDb zYK&g&1IHe;O%EOg>4ciT6f}am{0k#!pEf8o6$BWNV}@4o3HB3c*A-~~k52Z2R%Ad* zCQ#Z4QMe$oRGUEnF;W6rN5KCdqC&!`!+=2obe`K|15k<%F}NV&>>$9f)cyYlF%u^P z0S2%N(5djoj}0y`Ff=$j2rz~?To3@uGJ<6}p!y-QOmJBy(2029TP7Qv4Fs4&3@!+O z=lqxxr4CN4?UbkH0* zXuK992M18SM3w;UbOgB&yIoFrOMfSvr9WsE0;BYo5?(HaloD1juz>RxG;f0Z7Ge;9 zCvOHoavx)eLjab%36*7n%R=)eSR9-;1E6_x661#D%fB$NgZ8Gw$0=}!0c~nP(3lFi zo(8uI!26%h&48y)P>TapXS@7+2;Chi0jo7|&Ep8|M4iV0*JhwO1ki{(xPP`>`akH# z1UMg(rvn&3We>)DjsFMGxo*Gz!&Z)ibb&_ALFE=`92GSBj5%%(-oM14yIhh1v_2D* z2O#4_I~Y_P1vXZIXU#z@kLA+;CxFWf(5Yt|pfmNL9uvq8P#y%YwME;3K&M#jmgJKS(gBAobiqGj@^;&^b+LiL?P6+6Cac1Qgm1(9i~r zKzlNPPMP%vwZu(5An6S}QUDHjP>X~CypA(KU<3HXA0&66l!&j_e+U4(12zx70Nf5` zFqMOt8L>bBbT1F|M8=P&LGid#gh2~3mju~I`v3n#@I6(a+8pd2=sB6lJMuv5&ICi2 zdonPA+By?KYth#rxd}A4zJ4PEdOCpR1dy$ue!~F)2Entg5SKyQ`k-Bnf@iHkyVlQI zfJ<#q9uz!l1ZIQs4d}jW4)9%uf@jsi?Y|?SnJLf?JqCHOi84^Npb>M3Zegeh=+q6^ z?NWkgA?Jd^at>%00gid$<-h-dPK3a=Q$vzr4=9&_;%d1iqXT;CWdohVBorX95tPFr zxB4(V7TEX)d_Jnua!asoYgo8XNRANL_y-Y=n+ibrX%ndT^#zohVBAsO|%;;sNJ0=(;Az>GxNmv2g}m=7L+sAHXYyKHv>MW3bbZF z5_G4>5eCqDQjj{ZUQkFvR)He#<^bmz&^*pj(D*$fgh1ynzlN?o289s3e~N!b1>_=7 zh=AsCEg2ZVJA6R1Dq4^k8%T618o2idT9*aiuLkNlf@2Kr8 zSI2_l1!iJChKV2-gK9t%q)-!bR@`vFNnykD2!Ra?!2L@>XMqjRL8}B|X%tj;vw_di za}wA9ot1~CFX*~H@Ej;)?bZzj4sdRIj$u2F_yWfow7vR&1vr;LPw9ZH(Fcw6Kt;jn z6D=iyS5QG#FoSXrDdh_&g@IEuf%4_kQc&1~>MaaEfy!r4h=Swj-&~M7(7fEn9w|_L zdxF@qXJb3m9pJo#lq*4H3fR|FEPEJW@d{mY2`zgN>$>?i!cNHtk5GWp8fZ?{0X&l$ z04k$FbEW|T8)ZOe;sq#dlmL~+j}1U)d`(i=$PSeS)zY995egeQK>NQpfNoX-&D4Qr ztbc$+K#F*+Aga%2Xl* zHcEhYM}Y1Y0>#T~(1}H$y^GBo^tH%PMJ5a#78^A4s76t=wdlZ_gC+UJ$ z4}(GjJ+?t&;MfN1X4%OMZX+=8vOYH0D8V51+8A`|`eR{G*|M_%G`j@~@y7}qet>g7 zNH^F-lv>9Cw8k7X9=6<*0kn?Y+gV^EJM!q+V}TElmL9`nfe)azIA{!k<#7P$)UM^3 zpxt}_|No01)|STt8yUd6PC>450GkmBzRd@`N9u3H@-Iwvpd1_^uo2XX0EIeaHzjD~ zlYwUf_(lUU$V~u`l|Vj))Ms?_uK=hu`1b)t{spaA2K)EVgXLeCKsPv``%`AX{mB9L zXAVXF1g*k__%mnu7sg4@Tm+3z;!Ot4?ZHy#a!m#W$PG@*H9@BlBT^*je9q;W43PK{ zAYeLZyajan8)&`(RD(J&FmO)+`S^D*0iE#t@)*<_1)U)QPtVIE8Q?Md`}6WIjFRN} zc)27vCrYFEmEo}hieEve4=}>=-=7)CB?!1*&jRjSgU8n)bup-Pg4UIwyaz5vmVaS5 z4t1ji0|U5hBet}Fx)EFhfND6$$Dop*WqBrp0w^4Rfo`h6SMH$203j)QtBKNvva zkKCp{z@WI?BrUO+7+MEjQOC~TJnX8RUAiUDe2f@*TmP9D(w0BAG? zbdw8I99qkPR$78amq6n;CE%6spuPK(AUjqe@dj=?d|?F5rM`g24`@BU>hcmsV@SJU z18A)cNEWg#> zGncn8q(b&eK;sjn7F1_PVTe{NZ(;Dq5RF*g!r+1-TClu@0kmTk)wbm2EexQOgi%F{ zmqYG}LKRhA-U9AHqKf)22e*GVpo-=%FZo{xI>{Zhiw~62HavlZ4XA$yif?de34l(f zhPG!wBf_X=s4g!7pLl_>Ds+;n0H`mL0^aup8mU0<&w&Pr6lgaqXiX!i)hz%{+d|7d89@7woS^+x(7|J% zbOtg3d{RB=rlp-63wHS^`|k%!b4hq=eb<0(>?tXon{# z9fQ&?_!c5)843yqY4AuFXf-Za7Ln2*=D<=6IG2h-`Xk_8BPdUx=TGq3(SM+ut023; zLG!(kkObvt&|W&EJ)5971DoWq5otFKQa=WB#i1MnXbm49Xidm+Ifg3GiECiC)c*&| zzkqfIZCHY2D#|K6c6Npe237_TfYBf}1OIo1GO#!!0|Nsi0}}&?W?*38|G`ksz^X?f zP(adeqoG}+2IniPXlYvO>FUD;bX4Q*?BTowD`f|DTP3~3q~w&;wDgQjs7zLNPHtX) zL17V;uUA}BT2@|BSq0;x(T+~eF0O9w9-dHfFK-`TKmUNhAShoiI3zSIJR&j*!Z$E9 zGBzEqz<=V3HNoE?-Nm_cTOf~YjFC^a!TBQYr_l>rof3djNs1x5KK`N{b? zXrlQ=C8#24MTzOTsd**fq@j?PnwpZDqL7%EqTu4DP@G!AP@G>{l$@$ilwVqs3JWJL z1qB8Lg%G!p0C+g1D5w@IXsD(rcso^=q!w#(G2m1IQ&5_hotIyp2R26`wWuh+h=BoQ zCN!E9^3xPlQxuXw#wlciQVBE$z)`AN%*DWvmYI_Zj`XzrQc#S71i>aGCMSauM_Fcm z4%lA|nK?PB>4`ZIyYdTCVL1WC4JAd1dBtg|MGBrS3=Dbs3dN<#84w+%#i>P5w}G-% zab{JjLSAZmen}?Scv!fA-IH38oSK?atdN^nk(pbX3o!t0G)OChr?YQ>f@@Hae~^Nb zYOxX*)ZgGRP{>bCE-fkoMM7FhY7saH5>pfk5|gu2ONwDhIR)YxtU7Wti;FY!(m^_l zQi}`n^NLf8QEY%IfD{p`DLM+N6$PoupfUv_RGwI@pqj$K;Fnrbo?n!$kd&Wa0?MpK zC7F5YdU|?X44wf#@gb1`uJO*!;c(pye)+IM36wrlzy*^6IBt;her8@~NoHaWBn%-I zK$J2lD1?Gtj+DWz6jTk2Dy(o3Tnq{dL8*nMsl_0tfs2`yLr{t582~GHK&czz zR?mPk6PT!#f@+E$41se1T#Xr$nqrWvAu{09TAW%`mRe*5%2Q7H`6b{~l$V&BYNepA zTCC26hzEGcL3{`)we%D`5_3Sl*W+Sf0BJzYEE=kr&^(l%ms6>!$Hkzfz`)=FFIQ7j zb3p}gQmR6tLRn%?W{QHIr(duF$Po-&0f|N62!RV(aVdZ@8G|o0jTILpCZ{SCrxqj@ zC6?qDDP-m$X@{quoczQTP?&?lR0p1r6tYu`@=|la>B$XT0D~L?Qmfz}tdLfepR14u zNq}6SA`gcDgBZ~AQVmKsKxr5sM#IEmG)!ELfq?;3;ey&NVDlIl7(it;hz-JED?kJT z0|Ppr0c00Q4obu2xxhKvij$MmDKSMMG{{Ghivd*(TuOst7DdK6F;Bfjp(wRDKc_5J zAtgT-R4sv2DQLL(1uH;O2PjfO^=Uy-YH?~_NotCwA}Ca_re?ojFhmB_QiaPy+y{09$R>uiyHGdqLKK5YgzWqO z|Nr0r4|dyq1_p-xP_JZ0i~htUeE>Q&wy-}K&1~_>rqFc09pb<%33Z4hLW_B0#MH2QUI|O zV0CF`9=KrSf(yig%0h5ii4X%7s^E+bS6yC|pO+45(BvkTD0l{h!K(=@y7fTiEU4uI zDQD5lhL#&}lR-rX#L*z*!Dd4|4o>ZmFb0S4e?2h8zzG!tg$o0={0wR}$AjB}Me)V? zIho0skVd1Gf`4fVsI>-ZaYJkYrw6dXpfCpI`Tt=3d8wJ{8A_Y`2$2pF@TCh28JpI28IL%1_nz8 z1_pg-*byVo;Cak1mw}-kWRvM;r7vv; z1_pm<_=92=9EXh3%+?GHtX~)y820}E_ceoofxF@VzdsKc7}x~<|NCpez`&;Q|KHyR z1_m~V|Ns8YU|?YD`2X+U2?hqX1^@s3k6>V6yYTe zz@hN}KMMx~14qIC|11j_7&sRE|IZr1z`$|g|9{R23=EtC|NnDwFfedx{QuAOfq{WD z;{Si{6$}iV6aN1PRlS@y{{QEdU|`_<@c%#W0tN;yiU0rkBp4XD9RC03yTQP~)$sqn zU;+aJ*M51MA>Hu(QvNP>ZZ+vER#Aqxfu?u`Hcg#s8DxHtU&FEoRJ zf&0P#{~|j;r(*yAFFJ#Pfyd$he<=?J2A+!l|3T9qJS+bHSA4<1z;omOe`Ns%240T; z|CM(zFz{OZ|F7D?z`&dF|G(M?1_s_0|Nm>uU|`^V@&CV;1_J}1#{d6D4h#%@5&!=i z9bjPK>-hiQw1R|N1_nWm|Nq@O7#IX2{{MGZU||My$K zz##1K|9@};1A}nI|NkK%{)+$q!!9r|2;cbsKjH-gg9yj}|IsHH7(_h&|Bnq|U=XSJ z|3CHy1B1wl|NrA67#Kuu{Qn=fgMmSmL*7BDb~R{Z~;B*DNSy5j%; z)DsL0qA&jcPusx2ASUtuf4TqzgP6zv|LFz{3}PAo|EDitU=W+}|9>V({>1I1_p@}|NrODU|^8=@&A8u z1OtPl#{d5nFBljk6aN3Ny1~F8IpP2R>KzOWk_Z0(ui3!BAo=6}|Jof43{n>V|JR*h zV34Z#|G$0%1B29x|NomK7#O4;{Quul!N4G`@c)0y0tN(C;b1vY5@a-{DlAi*MY?*o`2T;u0Rw|_!T)U`2YXZ z4h9C*hX4Q1GcYiyZutNId;$Z5>V^OR&(C0BP-FQ2|LO+@1~r5K|8I0KFsLQ`|9|5F z1B2Rx|Nn1JU|>)?@&Er#ko=GT|8G?=FsK{+{|_4ORnPeU|Mm<92K5F1|KABg#Z8VcQ7z$O!)u*p#uYh#)1F;A5}0gXngqp z|5XM9gQmg%|L-^$7&Jj`4p8|o0wNfzf*2Sp_!y;m_!mGMC?Ii}|Np+7U|?YIV{q$b zXL0~{LqOst|NnglY4ZXRQ0&6Mz~J-$-**cJ21XGEw@&UZu5QjAj$ZaYwtiMGz5`55 zQ@GBbJA3BzsgryQ7@fG8qPR|;I(_Esx$|Hy)D#8=koi;o|N8;zM{B`F85ndJ7#P<4 z|MvsbNt(dmhHQEe$n-LZ;e0UngVf*o|L+H=N7;qdJtYtwAm=cE?PcWo|L?~GXdfPC zwFmvh2|ZQyBSmd|N9Bj zx`@FG+1)OD9n4IVAg+MB8)V;<|NnkgFfcHAf`NhI1;qbM z4^E!~84JcB`7{6j{VHH!V31*O1G(n}Qvk>{U}**w1_s7APZe zz%d(g?Dz>pOv8)=g$q;7|9`(HFfcGogZKxQT2esqnT8fFIt&aIKzR#h zz6t{a^B<^q2P{2+%w(!TNf0Uw3@j@D|1*Q~Q3*_)AIPUsDC%q&7+8G%|7Ql}lU>-u z8?37U;b2JmfI7&Bfq|vx|9_SM1_q`MT>4)yF}*|ApT&iez+fS$!@$6D=l_2;P&y7n zjVCX@6HH7lnCXj^=l_4U4Gatn5vb||KfH-`X~SYi*hh9FlwNx zhnUYOgsz@l{Qoaj!N9O5KZbQ*v!@$5^ z^8det1Oo$O3a)tm0MY3O)(I||VBTi{>EH7IzoY{L10&9K0@dGxL;sim|D{$iFfjIE zx8H>is=p44ejNq|4wL`?rGGFma7du~w?i1@Uk)a)E|`Ns>QnyzR|eIq4XElN=_m_D zIVe0iru_e}V!*(_v;$Q=B)*syp=bb^f8_svwH*u$OnXq(L(&7&G8FYT3=AA!{{PqX zU|?W;hTZ>Od>k|MYWV9gFmRgu|F87{G%<_CKBiY-O)&3+{KJ{@|G)MD1_s7g zsOq7%TtU$QGJned|GEtf3`|C->cQ!cnMnpi{gMCw^*b0C826#7hlCg73JmpM{{J@w zl|4}mK8SkMh3^E&*U*9y+5KE9|Nk3;!m9+?d|0``n1W)y3 zJM1(se0WKRfq|>!|9>M;xrGv6pt{h7mz!w~igBRu<683nzp(}b1EUZQp#}%Yd~TNi|4l&U+$3c4q5flPLNOk!-sJy(Q&9Uf z098FCJwqxAfpwr3yI_C(`TySx6t8II9M~VsjHm^j4g&*^&j0`BpmZFC>@H}1z|07# zQDGhjsgL>p-{J#!d=sg?26GjfKS1hx{{OcGwNoOnrAsHUFJQ)l+|RS;|9?vl1_p*4 zWcR?#kHJ*`=Kp_7PUm}U|F;C?bF_Gy!3-+r7*Qk6gn@zA=l_4}2nGh0 z2dMGj#Rt*Batdq(YDDNTFz~kg{|_E+MoHf;&{~s`53CF3agh2g|NlFDU|?XK{n`Tsv`1_J{#TKfsyUSMWM zZ7`THFbJFc{~x8nz`)wW;D$K{0%_H;LdT;{o`B{g9R>#Bod5sh8!+2}4UqZ-qa7$b z=l}miP`sh^zhLFuIaGgu+;!&v|3pwZ@`b?%-CeNMe-Etd6x>;${)7n2|NluF7#JAY zu$Lz=8zC7DwKxImclrN68C2f$;L;Cni8B3x*?s&NG*B48{a%rl|Nm1!>F*hGdWPk{ zYhYb)4JHf>B3u6dPX$fAufP`m&{%_xtHC{L!@wZ&=KueU0!TX&+xV3W-vLNWKx$l6 zkIFDGi0b_RpNT8o+b}SQ`uzW&8NtB7tbjcny!a-7&1Z)6v{B91VPFvLfy_NHJV6Zy zNWMl*9-wkdbkG0)IiUDPsW)J;H3c=?K<2;s|34R$j~1Ys56MRpFw~35{QsW|swd`P zQxEA}!sA7UfkDjY|NlHtJQC@Cv6}z?^FjUWL#XCM>b*^v?pXtwTVWu^{W1&;Vt4-k zF95aElR)N!`W8qX5gP^uu|NO+7l6hq8nDL~XnYn_kFr3TAgJ+W!@wYJ^Z$Rz1O^5s zIb8Z7IhzSvdIIUM`TxJHfPsO@fPj7la8RJyufxC~zUTk{3eY%649I_odSC}Ql`*=3 zb-^MCr2ftS|CJLM7#Pv|72xn@W<+g}>o71#$o&6bb%23^EdteiaBgO1Lv4_Q)cgGZ z-vAmP4nQrZ!RfaO#Wmo3FH!UVec4%7hBVPKG)^Z$Q02Ll81I%M@;e2~^R^9&RX zAoXYd|L+5}3%rokL*0)h{3ZYV|KA6iPatL-z=nZAO6ULoz8ee-j9&QDE29)J6_(JMem}+o(k~;JM|3pxE zf>K{X#|hBKD?#S}`Tu_+sNTDPY`zy?2PFUO0{a4HgA47M`pr-1rhOK|CjgcP((fDyjZXa4`64jLESfb1U^XsyGz z0L4E#3=GnL{{No=>d!kMtM}sT;0Kj@j9TdGWpw`kp9$)x*&(Zkrms8{)!_J$iTVG3 zCa4{bGL8jRpM*ty&;S23LGcYPuVLjGtUe1u)u6+`AhYNH|5>2%f(fYk50byp5%KZO78)SY5s(Og|MHudp_4)sQHmIGShpHZ8egvla zn*aZ2?*O;EP{!dP=6}Fczvln{IiP;nD^&Br2|NnDA>Gd0Gd_mMd!!Tct z=l}nCpz^E~NJxvB5u?19oAdww z0#Lu~5vqS7=A-p;h6R zuk-)^LXdya(m&XIEa_i9=KueN4Gav-cTmlT_?H=VAV7zKLB8kz|D^^D3@jel)Uz0& zM3@W%gZ!TV|5t+ATQMN@p!SUyqN4~h@6P}KD?#;v8ESlj-3ystg_UmL{Hnn7|NqJf z3=C``$m(I^N^Ev0_UkY(DA@e}zaBL1J_BSwT7G3l8#o22&-wp<6DU80p{j@E543Sp z69xu_IsgA}0{L$h_VUmLQWG*krj?*x0oilq|Nl*(@duQ22CD}=P`m+}w^C&J|9=yx z9o>fC9+WD_gn>cP=KufAp!Nk$ec+g8!q8Xp|NmxCKAwa+P6#a-p#g_FObAMUifjJ= z-wbjm%KSG>7iK?L@eX7S4MP`le7f*00JWExFv~|Jp8x;1fa-VfxD6scA+-)84@$u4 zFfb_D{Qtidl;1v}nh(jJ4^WhY+^>}L|Nk~ndPEz4g_L)gqm1I0ca1_tGv|NoDG<{41(7mj%sP&;N6kA}c#2#kinXb6mkz-S1J zhQMeDjD`T!Lm>bEzpoHOnLuNKASQH`Av0(W4aA48Z)5`XJwSZe?yzVOhXJ&C2EqW1 z9e`M(AOZ4(uEF^2sA|9^uRpapy&I{*KF z@M3BP1_sbZACM4LF?*vQsBea0CVOKbXe^6?y@4I^L470!_NAbq4A>br3=Hhes8+Byf`+ERVsc;-x)2}C9wkT!0nm0g zL^zY65m_k<$b{sk;AGHVI!1;#=$1x^5|9`OgAy@B1WbZr3~V`=hnoPYgUhnFG=R38 zgU0DVVjwvX2C>1Iy`=$^Fu?Ne&dyc}8t#6fnhGX*7J8-%Mh1qa24+Ua3K~JFDGDBm zB@l64BMVIi2EF2p;*z40#3Tm2lGKV42EEL@lGLIC2EDxel2pC)yi&cS(#)I`-OLmQ zFfSvqID3E^5*hSTGvd>V5_41IGg68WJg|<$ z+{|PKz4ZJN20e({q~c-*z2y8{&`w*hcPJ%53*=$p11^`?L7@XS6`a2q7#M!Q$}O-c z+I|i}q&S1d6%%Mo5464nN;AM0D?$x`*$3iELeG2vv0?h5E?|PvpuH9#X*dR*LjdFG z0V#LkP@=nhz`2VKgJCT*u~qko}-^ z3=2=Ne)a}vd@*uB<4q7WMgq0~N+A0mREMDIZ{z~4C1qe>l!DNZeXLNeU)6nCe zy-@&C-ZLsdXa;4dIbgjY0@;308UckZNF2P!9bR8B!s-o1P(p;M0jY!O2Z>iA*$>t4 z5AiP}l!ojF2kC=hn0^plhp8VFq##i!&A@ii20kZ+oRK3~&