From f3337c2e2e0587262755684f17375ed7a0bd1613 Mon Sep 17 00:00:00 2001 From: Vijay Kumar Banerjee Date: Tue, 27 Aug 2019 00:16:32 +0530 Subject: Add conf headers --- .gitignore | 3 +- lv_conf.h | 495 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lv_drv_conf.h | 357 ++++++++++++++++++++++++++++++++++++++++++ waf | 173 ++++++++++++++++++++ wscript | 88 +++++++++++ 5 files changed, 1115 insertions(+), 1 deletion(-) create mode 100644 lv_conf.h create mode 100644 lv_drv_conf.h create mode 100755 waf create mode 100644 wscript diff --git a/.gitignore b/.gitignore index cb05bf5..5f0edfd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .waf* -waf +.lock-waf* +build diff --git a/lv_conf.h b/lv_conf.h new file mode 100644 index 0000000..0609a6e --- /dev/null +++ b/lv_conf.h @@ -0,0 +1,495 @@ +/** + * @file lv_conf.h + * + */ + +/* + * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER + */ + +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H +/* clang-format off */ + +#include + +/*==================== + Graphical settings + *====================*/ + +/* Maximal horizontal and vertical resolution to support by the library.*/ +#define LV_HOR_RES_MAX (2048) +#define LV_VER_RES_MAX (2048) + +/* Color depth: + * - 1: 1 byte per pixel + * - 8: RGB233 + * - 16: RGB565 + * - 32: ARGB8888 + */ +#define LV_COLOR_DEPTH 32 + +/* Swap the 2 bytes of RGB565 color. + * Useful if the display has a 8 bit interface (e.g. SPI)*/ +#define LV_COLOR_16_SWAP 0 + +/* 1: Enable screen transparency. + * Useful for OSD or other overlapping GUIs. + * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be modified: `style.body.opa = ...`*/ +#define LV_COLOR_SCREEN_TRANSP 0 + +/*Images pixels with this color will not be drawn (with chroma keying)*/ +#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/ + +/* Enable anti-aliasing (lines, and radiuses will be smoothed) */ +#define LV_ANTIALIAS 1 + +/* Default display refresh period. + * Can be changed in the display driver (`lv_disp_drv_t`).*/ +#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/ + +/* Dot Per Inch: used to initialize default sizes. + * E.g. a button with width = LV_DPI / 2 -> half inch wide + * (Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI 100 /*[px]*/ + +/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */ +typedef int16_t lv_coord_t; + +/*========================= + Memory manager settings + *=========================*/ + +/* LittelvGL's internal memory manager's settings. + * The graphical objects and other related data are stored here. */ + +/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and `lv_mem_free` */ +#define LV_MEM_CUSTOM 0 +#if LV_MEM_CUSTOM == 0 +/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/ +# define LV_MEM_SIZE (32U * 1024U) + +/* Complier prefix for a big array declaration */ +# define LV_MEM_ATTR + +/* Set an address for the memory pool instead of allocating it as an array. + * Can be in external SRAM too. */ +# define LV_MEM_ADR 0 + +/* Automatically defrag. on free. Defrag. means joining the adjacent free cells. */ +# define LV_MEM_AUTO_DEFRAG 1 +#else /*LV_MEM_CUSTOM*/ +# define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ +# define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/ +# define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/ +#endif /*LV_MEM_CUSTOM*/ + +/* Garbage Collector settings + * Used if lvgl is binded to higher level language and the memory is managed by that language */ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 +# define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +# define LV_MEM_CUSTOM_REALLOC your_realloc /*Wrapper to realloc*/ +# define LV_MEM_CUSTOM_GET_SIZE your_mem_get_size /*Wrapper to lv_mem_get_size*/ +#endif /* LV_ENABLE_GC */ + +/*======================= + Input device settings + *=======================*/ + +/* Input device default settings. + * Can be changed in the Input device driver (`lv_indev_drv_t`)*/ + +/* Input device read period in milliseconds */ +#define LV_INDEV_DEF_READ_PERIOD 30 + +/* Drag threshold in pixels */ +#define LV_INDEV_DEF_DRAG_LIMIT 10 + +/* Drag throw slow-down in [%]. Greater value -> faster slow-down */ +#define LV_INDEV_DEF_DRAG_THROW 20 + +/* Long press time in milliseconds. + * Time to send `LV_EVENT_LONG_PRESSSED`) */ +#define LV_INDEV_DEF_LONG_PRESS_TIME 400 + +/* Repeated trigger period in long press [ms] + * Time between `LV_EVENT_LONG_PRESSED_REPEAT */ +#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100 + +/*================== + * Feature usage + *==================*/ + +/*1: Enable the Animations */ +#define LV_USE_ANIMATION 1 +#if LV_USE_ANIMATION + +/*Declare the type of the user data of animations (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_anim_user_data_t; + +#endif + +/* 1: Enable shadow drawing*/ +#define LV_USE_SHADOW 1 + +/* 1: Enable object groups (for keyboard/encoder navigation) */ +#define LV_USE_GROUP 1 +#if LV_USE_GROUP +typedef void * lv_group_user_data_t; +#endif /*LV_USE_GROUP*/ + +/* 1: Enable GPU interface*/ +#define LV_USE_GPU 1 + +/* 1: Enable file system (might be required for images */ +#define LV_USE_FILESYSTEM 1 +#if LV_USE_FILESYSTEM +/*Declare the type of the user data of file system drivers (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_fs_drv_user_data_t; +#endif + +/*1: Add a `user_data` to drivers and objects*/ +#define LV_USE_USER_DATA 0 + +/*======================== + * Image decoder and cache + *========================*/ + +/* 1: Enable indexed (palette) images */ +#define LV_IMG_CF_INDEXED 1 + +/* 1: Enable alpha indexed images */ +#define LV_IMG_CF_ALPHA 1 + +/* Default image cache size. Image caching keeps the images opened. + * If only the built-in image formats are used there is no real advantage of caching. + * (I.e. no new image decoder is added) + * With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. + * However the opened images might consume additional RAM. + * LV_IMG_CACHE_DEF_SIZE must be >= 1 */ +#define LV_IMG_CACHE_DEF_SIZE 1 + +/*Declare the type of the user data of image decoder (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_img_decoder_user_data_t; + +/*===================== + * Compiler settings + *====================*/ +/* Define a custom attribute to `lv_tick_inc` function */ +#define LV_ATTRIBUTE_TICK_INC + +/* Define a custom attribute to `lv_task_handler` function */ +#define LV_ATTRIBUTE_TASK_HANDLER + +/* With size optimization (-Os) the compiler might not align data to + * 4 or 8 byte boundary. This alignment will be explicitly applied where needed. + * E.g. __attribute__((aligned(4))) */ +#define LV_ATTRIBUTE_MEM_ALIGN + +/* Attribute to mark large constant arrays for example + * font's bitmaps */ +#define LV_ATTRIBUTE_LARGE_CONST + +/*=================== + * HAL settings + *==================*/ + +/* 1: use a custom tick source. + * It removes the need to manually update the tick with `lv_tick_inc`) */ +#define LV_TICK_CUSTOM 0 +#if LV_TICK_CUSTOM == 1 +#define LV_TICK_CUSTOM_INCLUDE "something.h" /*Header for the sys time function*/ +#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current systime in ms*/ +#endif /*LV_TICK_CUSTOM*/ + +typedef void * lv_disp_drv_user_data_t; /*Type of user data in the display driver*/ +typedef void * lv_indev_drv_user_data_t; /*Type of user data in the input device driver*/ + +/*================ + * Log settings + *===============*/ + +/*1: Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG +/* How important log should be added: + * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + * LV_LOG_LEVEL_INFO Log important events + * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + * LV_LOG_LEVEL_NONE Do not log anything + */ +# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + +/* 1: Print the log with 'printf'; + * 0: user need to register a callback with `lv_log_register_print`*/ +# define LV_LOG_PRINTF 0 +#endif /*LV_USE_LOG*/ + +/*================ + * THEME USAGE + *================*/ +#define LV_THEME_LIVE_UPDATE 0 /*1: Allow theme switching at run time. Uses 8..10 kB of RAM*/ + +#define LV_USE_THEME_TEMPL 0 /*Just for test*/ +#define LV_USE_THEME_DEFAULT 0 /*Built mainly from the built-in styles. Consumes very few RAM*/ +#define LV_USE_THEME_ALIEN 0 /*Dark futuristic theme*/ +#define LV_USE_THEME_NIGHT 0 /*Dark elegant theme*/ +#define LV_USE_THEME_MONO 0 /*Mono color theme for monochrome displays*/ +#define LV_USE_THEME_MATERIAL 0 /*Flat theme with bold colors and light shadows*/ +#define LV_USE_THEME_ZEN 0 /*Peaceful, mainly light theme */ +#define LV_USE_THEME_NEMO 0 /*Water-like theme based on the movie "Finding Nemo"*/ + +/*================== + * FONT USAGE + *===================*/ + +/* The built-in fonts contains the ASCII range and some Symbols with 4 bit-per-pixel. + * The symbols are available via `LV_SYMBOL_...` defines + * More info about fonts: https://docs.littlevgl.com/#Fonts + * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array + */ + +/* Robot fonts with bpp = 4 + * https://fonts.google.com/specimen/Roboto */ +#define LV_FONT_ROBOTO_12 0 +#define LV_FONT_ROBOTO_16 1 +#define LV_FONT_ROBOTO_22 0 +#define LV_FONT_ROBOTO_28 0 + +/*Pixel perfect monospace font + * http://pelulamu.net/unscii/ */ +#define LV_FONT_UNSCII_8 0 + +/* Optionally declare your custom fonts here. + * You can use these fonts as default font too + * and they will be available globally. E.g. + * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \ + * LV_FONT_DECLARE(my_font_2) + */ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font from the built-in fonts*/ +#define LV_FONT_DEFAULT &lv_font_roboto_16 + +/* Enable it if you have fonts with a lot of characters. + * The limit depends on the font size, font face and bpp + * but with > 10,000 characters if you see issues probably you need to enable it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_font_user_data_t; + +/*================= + * Text settings + *=================*/ + +/* Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + * */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + + /*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/*=================== + * LV_OBJ SETTINGS + *==================*/ + +/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_obj_user_data_t; + +/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/ +#define LV_USE_OBJ_REALIGN 1 + +/* Enable to make the object clickable on a larger area. + * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature + * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and vertically (0..255 px) + * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions (-32k..+32k px) + */ +#define LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_OFF + +/*================== + * LV OBJ X USAGE + *================*/ +/* + * Documentation of the object types: https://docs.littlevgl.com/#Object-types + */ + +/*Arc (dependencies: -)*/ +#define LV_USE_ARC 1 + +/*Bar (dependencies: -)*/ +#define LV_USE_BAR 1 + +/*Button (dependencies: lv_cont*/ +#define LV_USE_BTN 1 +#if LV_USE_BTN != 0 +/*Enable button-state animations - draw a circle on click (dependencies: LV_USE_ANIMATION)*/ +# define LV_BTN_INK_EFFECT 0 +#endif + +/*Button matrix (dependencies: -)*/ +#define LV_USE_BTNM 1 + +/*Calendar (dependencies: -)*/ +#define LV_USE_CALENDAR 1 + +/*Canvas (dependencies: lv_img)*/ +#define LV_USE_CANVAS 1 + +/*Check box (dependencies: lv_btn, lv_label)*/ +#define LV_USE_CB 1 + +/*Chart (dependencies: -)*/ +#define LV_USE_CHART 1 +#if LV_USE_CHART +# define LV_CHART_AXIS_TICK_LABEL_MAX_LEN 20 +#endif + +/*Container (dependencies: -*/ +#define LV_USE_CONT 1 + +/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/ +#define LV_USE_DDLIST 1 +#if LV_USE_DDLIST != 0 +/*Open and close default animation time [ms] (0: no animation)*/ +# define LV_DDLIST_DEF_ANIM_TIME 200 +#endif + +/*Gauge (dependencies:lv_bar, lv_lmeter)*/ +#define LV_USE_GAUGE 1 + +/*Image (dependencies: lv_label*/ +#define LV_USE_IMG 1 + +/*Image Button (dependencies: lv_btn*/ +#define LV_USE_IMGBTN 1 +#if LV_USE_IMGBTN +/*1: The imgbtn requires left, mid and right parts and the width can be set freely*/ +# define LV_IMGBTN_TILED 0 +#endif + +/*Keyboard (dependencies: lv_btnm)*/ +#define LV_USE_KB 1 + +/*Label (dependencies: -*/ +#define LV_USE_LABEL 1 +#if LV_USE_LABEL != 0 +/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/ +# define LV_LABEL_DEF_SCROLL_SPEED 25 + +/* Waiting period at beginning/end of animation cycle */ +# define LV_LABEL_WAIT_CHAR_COUNT 3 + +/*Enable selecting text of the label */ +# define LV_LABEL_TEXT_SEL 0 + +/*Store extra some info in labels (12 bytes) to speed up drawing of very long texts*/ +# define LV_LABEL_LONG_TXT_HINT 0 +#endif + +/*LED (dependencies: -)*/ +#define LV_USE_LED 1 + +/*Line (dependencies: -*/ +#define LV_USE_LINE 1 + +/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons ))*/ +#define LV_USE_LIST 1 +#if LV_USE_LIST != 0 +/*Default animation time of focusing to a list element [ms] (0: no animation) */ +# define LV_LIST_DEF_ANIM_TIME 100 +#endif + +/*Line meter (dependencies: *;)*/ +#define LV_USE_LMETER 1 + +/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/ +#define LV_USE_MBOX 1 + +/*Page (dependencies: lv_cont)*/ +#define LV_USE_PAGE 1 +#if LV_USE_PAGE != 0 +/*Focus default animation time [ms] (0: no animation)*/ +# define LV_PAGE_DEF_ANIM_TIME 400 +#endif + +/*Preload (dependencies: lv_arc, lv_anim)*/ +#define LV_USE_PRELOAD 1 +#if LV_USE_PRELOAD != 0 +# define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/ +# define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/ +# define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC +#endif + +/*Roller (dependencies: lv_ddlist)*/ +#define LV_USE_ROLLER 1 +#if LV_USE_ROLLER != 0 +/*Focus animation time [ms] (0: no animation)*/ +# define LV_ROLLER_DEF_ANIM_TIME 200 + +/*Number of extra "pages" when the roller is infinite*/ +# define LV_ROLLER_INF_PAGES 7 +#endif + +/*Slider (dependencies: lv_bar)*/ +#define LV_USE_SLIDER 1 + +/*Spinbox (dependencies: lv_ta)*/ +#define LV_USE_SPINBOX 1 + +/*Switch (dependencies: lv_slider)*/ +#define LV_USE_SW 1 + +/*Text area (dependencies: lv_label, lv_page)*/ +#define LV_USE_TA 1 +#if LV_USE_TA != 0 +# define LV_TA_DEF_CURSOR_BLINK_TIME 400 /*ms*/ +# define LV_TA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +/*Table (dependencies: lv_label)*/ +#define LV_USE_TABLE 1 +#if LV_USE_TABLE +# define LV_TABLE_COL_MAX 12 +#endif + +/*Tab (dependencies: lv_page, lv_btnm)*/ +#define LV_USE_TABVIEW 1 +# if LV_USE_TABVIEW != 0 +/*Time of slide animation [ms] (0: no animation)*/ +# define LV_TABVIEW_DEF_ANIM_TIME 300 +#endif + +/*Tileview (dependencies: lv_page) */ +#define LV_USE_TILEVIEW 1 +#if LV_USE_TILEVIEW +/*Time of slide animation [ms] (0: no animation)*/ +# define LV_TILEVIEW_DEF_ANIM_TIME 300 +#endif + +/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/ +#define LV_USE_WIN 1 + +/*================== + * Non-user section + *==================*/ + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) /* Disable warnings for Visual Studio*/ +# define _CRT_SECURE_NO_WARNINGS +#endif + +/*--END OF LV_CONF_H--*/ + +/*Be sure every define has a default value*/ +#include "lvgl/src/lv_conf_checker.h" + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/lv_drv_conf.h b/lv_drv_conf.h new file mode 100644 index 0000000..697ceaf --- /dev/null +++ b/lv_drv_conf.h @@ -0,0 +1,357 @@ +/** + * @file lv_drv_conf.h + * + */ + +/* + * COPY THIS FILE AS lv_drv_conf.h + */ + +#if 1 /*Set it to "1" to enable the content*/ + +#ifndef LV_DRV_CONF_H +#define LV_DRV_CONF_H + +#include "lv_conf.h" + +/********************* + * DELAY INTERFACE + *********************/ +#define LV_DRV_DELAY_INCLUDE /*Dummy include by default*/ +#define LV_DRV_DELAY_US(us) /*delay_us(us)*/ /*Delay the given number of microseconds*/ +#define LV_DRV_DELAY_MS(ms) /*delay_ms(ms)*/ /*Delay the given number of milliseconds*/ + +/********************* + * DISPLAY INTERFACE + *********************/ + +/*------------ + * Common + *------------*/ +#define LV_DRV_DISP_INCLUDE /*Dummy include by default*/ +#define LV_DRV_DISP_CMD_DATA(val) /*pin_x_set(val)*/ /*Set the command/data pin to 'val'*/ +#define LV_DRV_DISP_RST(val) /*pin_x_set(val)*/ /*Set the reset pin to 'val'*/ + +/*--------- + * SPI + *---------*/ +#define LV_DRV_DISP_SPI_CS(val) /*spi_cs_set(val)*/ /*Set the SPI's Chip select to 'val'*/ +#define LV_DRV_DISP_SPI_WR_BYTE(data) /*spi_wr(data)*/ /*Write a byte the SPI bus*/ +#define LV_DRV_DISP_SPI_WR_ARRAY(adr, n) /*spi_wr_mem(adr, n)*/ /*Write 'n' bytes to SPI bus from 'adr'*/ + +/*------------------ + * Parallel port + *-----------------*/ +#define LV_DRV_DISP_PAR_CS(val) /*par_cs_set(val)*/ /*Set the Parallel port's Chip select to 'val'*/ +#define LV_DRV_DISP_PAR_SLOW /*par_slow()*/ /*Set low speed on the parallel port*/ +#define LV_DRV_DISP_PAR_FAST /*par_fast()*/ /*Set high speed on the parallel port*/ +#define LV_DRV_DISP_PAR_WR_WORD(data) /*par_wr(data)*/ /*Write a word to the parallel port*/ +#define LV_DRV_DISP_PAR_WR_ARRAY(adr, n) /*par_wr_mem(adr,n)*/ /*Write 'n' bytes to Parallel ports from 'adr'*/ + +/*************************** + * INPUT DEVICE INTERFACE + ***************************/ + +/*---------- + * Common + *----------*/ +#define LV_DRV_INDEV_INCLUDE /*Dummy include by default*/ +#define LV_DRV_INDEV_RST(val) /*pin_x_set(val)*/ /*Set the reset pin to 'val'*/ +#define LV_DRV_INDEV_IRQ_READ 0 /*pn_x_read()*/ /*Read the IRQ pin*/ + +/*--------- + * SPI + *---------*/ +#define LV_DRV_INDEV_SPI_CS(val) /*spi_cs_set(val)*/ /*Set the SPI's Chip select to 'val'*/ +#define LV_DRV_INDEV_SPI_XCHG_BYTE(data) 0 /*spi_xchg(val)*/ /*Write 'val' to SPI and give the read value*/ + +/*--------- + * I2C + *---------*/ +#define LV_DRV_INDEV_I2C_START /*i2c_start()*/ /*Make an I2C start*/ +#define LV_DRV_INDEV_I2C_STOP /*i2c_stop()*/ /*Make an I2C stop*/ +#define LV_DRV_INDEV_I2C_RESTART /*i2c_restart()*/ /*Make an I2C restart*/ +#define LV_DRV_INDEV_I2C_WR(data) /*i2c_wr(data)*/ /*Write a byte to the I1C bus*/ +#define LV_DRV_INDEV_I2C_READ(last_read) 0 /*i2c_rd()*/ /*Read a byte from the I2C bud*/ + + +/********************* + * DISPLAY DRIVERS + *********************/ + +/*------------------- + * Monitor of PC + *-------------------*/ +#ifndef USE_MONITOR +# define USE_MONITOR 0 +#endif + +#if USE_MONITOR +# define MONITOR_HOR_RES LV_HOR_RES +# define MONITOR_VER_RES LV_VER_RES + +/* Scale window by this factor (useful when simulating small screens) */ +# define MONITOR_ZOOM 1 + +/* Used to test true double buffering with only address changing. + * Set LV_VDB_SIZE = (LV_HOR_RES * LV_VER_RES) and LV_VDB_DOUBLE = 1 and LV_COLOR_DEPTH = 32" */ +# define MONITOR_DOUBLE_BUFFERED 0 + +/*Eclipse: Visual Studio: */ +# define MONITOR_SDL_INCLUDE_PATH + +/*Different rendering might be used if running in a Virtual machine*/ +# define MONITOR_VIRTUAL_MACHINE 0 + +/*Open two windows to test multi display support*/ +# define MONITOR_DUAL 0 +#endif + +/*----------------------------------- + * Native Windows (including mouse) + *----------------------------------*/ +#ifndef USE_WINDOWS +# define USE_WINDOWS 0 +#endif + +#define USE_WINDOWS 0 +#if USE_WINDOWS +# define WINDOW_HOR_RES 480 +# define WINDOW_VER_RES 320 +#endif + +/*---------------- + * SSD1963 + *--------------*/ +#ifndef USE_SSD1963 +# define USE_SSD1963 0 +#endif + +#if USE_SSD1963 +# define SSD1963_HOR_RES LV_HOR_RES +# define SSD1963_VER_RES LV_VER_RES +# define SSD1963_HT 531 +# define SSD1963_HPS 43 +# define SSD1963_LPS 8 +# define SSD1963_HPW 10 +# define SSD1963_VT 288 +# define SSD1963_VPS 12 +# define SSD1963_FPS 4 +# define SSD1963_VPW 10 +# define SSD1963_HS_NEG 0 /*Negative hsync*/ +# define SSD1963_VS_NEG 0 /*Negative vsync*/ +# define SSD1963_ORI 0 /*0, 90, 180, 270*/ +# define SSD1963_COLOR_DEPTH 16 +#endif + +/*---------------- + * R61581 + *--------------*/ +#ifndef USE_R61581 +# define USE_R61581 0 +#endif + +#if USE_R61581 +# define R61581_HOR_RES LV_HOR_RES +# define R61581_VER_RES LV_VER_RES +# define R61581_HSPL 0 /*HSYNC signal polarity*/ +# define R61581_HSL 10 /*HSYNC length (Not Implemented)*/ +# define R61581_HFP 10 /*Horitontal Front poarch (Not Implemented)*/ +# define R61581_HBP 10 /*Horitontal Back poarch (Not Implemented */ +# define R61581_VSPL 0 /*VSYNC signal polarity*/ +# define R61581_VSL 10 /*VSYNC length (Not Implemented)*/ +# define R61581_VFP 8 /*Vertical Front poarch*/ +# define R61581_VBP 8 /*Vertical Back poarch */ +# define R61581_DPL 0 /*DCLK signal polarity*/ +# define R61581_EPL 1 /*ENABLE signal polarity*/ +# define R61581_ORI 0 /*0, 180*/ +# define R61581_LV_COLOR_DEPTH 16 /*Fix 16 bit*/ +#endif + +/*------------------------------ + * ST7565 (Monochrome, low res.) + *-----------------------------*/ +#ifndef USE_ST7565 +# define USE_ST7565 0 +#endif + +#if USE_ST7565 +/*No settings*/ +#endif /*USE_ST7565*/ + +/*------------------------------------------ + * UC1610 (4 gray 160*[104|128]) + * (EA DOGXL160 160x104 tested) + *-----------------------------------------*/ +#ifndef USE_UC1610 +# define USE_UC1610 0 +#endif + +#if USE_UC1610 +# define UC1610_HOR_RES LV_HOR_RES +# define UC1610_VER_RES LV_VER_RES +# define UC1610_INIT_CONTRAST 33 /* init contrast, values in [%] */ +# define UC1610_INIT_HARD_RST 0 /* 1 : hardware reset at init, 0 : software reset */ +# define UC1610_TOP_VIEW 0 /* 0 : Bottom View, 1 : Top View */ +#endif /*USE_UC1610*/ + +/*------------------------------------------------- + * SHARP memory in pixel monochrome display series + * LS012B7DD01 (184x38 pixels.) + * LS013B7DH03 (128x128 pixels.) + * LS013B7DH05 (144x168 pixels.) + * LS027B7DH01 (400x240 pixels.) (tested) + * LS032B7DD02 (336x536 pixels.) + * LS044Q7DH01 (320x240 pixels.) + *------------------------------------------------*/ +#ifndef USE_SHARP_MIP +# define USE_SHARP_MIP 0 +#endif + +#if USE_SHARP_MIP +# define SHARP_MIP_HOR_RES LV_HOR_RES +# define SHARP_MIP_VER_RES LV_VER_RES +# define SHARP_MIP_SOFT_COM_INVERSION 0 +# define SHARP_MIP_REV_BYTE(b) /*((uint8_t) __REV(__RBIT(b)))*/ /*Architecture / compiler dependent byte bits order reverse*/ +#endif /*USE_SHARP_MIP*/ + +/*----------------------------------------- + * Linux frame buffer device (/dev/fbx) + *-----------------------------------------*/ +#ifndef USE_FBDEV +# define USE_FBDEV 0 +#endif + +#if USE_FBDEV +# define FBDEV_PATH "/dev/fb0" +#endif + +/*----------------------------------------- + * FreeBSD frame buffer device (/dev/fbx) + *.........................................*/ +#ifndef USE_BSD_FBDEV +# define USE_BSD_FBDEV 1 +#endif + +#if USE_BSD_FBDEV +# define FBDEV_PATH "/dev/fb0" +#endif + +/********************* + * INPUT DEVICES + *********************/ + +/*-------------- + * XPT2046 + *--------------*/ +#ifndef USE_XPT2046 +# define USE_XPT2046 0 +#endif + +#if USE_XPT2046 +# define XPT2046_HOR_RES 480 +# define XPT2046_VER_RES 320 +# define XPT2046_X_MIN 200 +# define XPT2046_Y_MIN 200 +# define XPT2046_X_MAX 3800 +# define XPT2046_Y_MAX 3800 +# define XPT2046_AVG 4 +# define XPT2046_INV 0 +#endif + +/*----------------- + * FT5406EE8 + *-----------------*/ +#ifndef USE_FT5406EE8 +# define USE_FT5406EE8 0 +#endif + +#if USE_FT5406EE8 +# define FT5406EE8_I2C_ADR 0x38 /*7 bit address*/ +#endif + +/*--------------- + * AD TOUCH + *--------------*/ +#ifndef USE_AD_TOUCH +# define USE_AD_TOUCH 0 +#endif + +#if USE_AD_TOUCH +/*No settings*/ +#endif + + +/*--------------------------------------- + * Mouse or touchpad on PC (using SDL) + *-------------------------------------*/ +#ifndef USE_MOUSE +# define USE_MOUSE 0 +#endif + +#if USE_MOUSE +/*No settings*/ +#endif + +/*------------------------------------------- + * Mousewheel as encoder on PC (using SDL) + *------------------------------------------*/ +#ifndef USE_MOUSEWHEEL +# define USE_MOUSEWHEEL 0 +#endif + +#if USE_MOUSEWHEEL +/*No settings*/ +#endif + +/*------------------------------------------------- + * Touchscreen as libinput interface (for Linux based systems) + *------------------------------------------------*/ +#ifndef USE_LIBINPUT +# define USE_LIBINPUT 0 +#endif + +#if USE_LIBINPUT +# define LIBINPUT_NAME "/dev/input/event0" /*You can use the "evtest" Linux tool to get the list of devices and test them*/ +#endif /*USE_LIBINPUT*/ + +/*------------------------------------------------- + * Mouse or touchpad as evdev interface (for Linux based systems) + *------------------------------------------------*/ +#ifndef USE_EVDEV +# define USE_EVDEV 0 +#endif + +#if USE_EVDEV +# define EVDEV_NAME "/dev/input/event0" /*You can use the "evtest" Linux tool to get the list of devices and test them*/ +# define EVDEV_SWAP_AXES 0 /*Swap the x and y axes of the touchscreen*/ + +# define EVDEV_SCALE 0 /* Scale input, e.g. if touchscreen resolution does not match display resolution */ +# if EVDEV_SCALE +# define EVDEV_SCALE_HOR_RES (4096) /* Horizontal resolution of touchscreen */ +# define EVDEV_SCALE_VER_RES (4096) /* Vertical resolution of touchscreen */ +# endif /*EVDEV_SCALE*/ + +# define EVDEV_CALIBRATE 0 /*Scale and offset the touchscreen coordinates by using maximum and minimum values for each axis*/ +# if EVDEV_CALIBRATE +# define EVDEV_HOR_MIN 3800 /*If EVDEV_XXX_MIN > EVDEV_XXX_MAX the XXX axis is automatically inverted*/ +# define EVDEV_HOR_MAX 200 +# define EVDEV_VER_MIN 200 +# define EVDEV_VER_MAX 3800 +# endif /*EVDEV_SCALE*/ +#endif /*USE_EVDEV*/ + +/*------------------------------- + * Keyboard of a PC (using SDL) + *------------------------------*/ +#ifndef USE_KEYBOARD +# define USE_KEYBOARD 0 +#endif + +#if USE_KEYBOARD +/*No settings*/ +#endif + +#endif /*LV_DRV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/waf b/waf new file mode 100755 index 0000000..4df5cdd --- /dev/null +++ b/waf @@ -0,0 +1,173 @@ +#!/usr/bin/env python +# encoding: latin-1 +# Thomas Nagy, 2005-2018 +# +""" +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. 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. + +3. 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. +""" + +import os, sys, inspect + +VERSION="2.0.18" +REVISION="96675f149f50dab16c9e2e6aaf5e787b" +GIT="ea17399be6950863390fb7bf25b747b67afe0ce3" +INSTALL='' +C1='#/' +C2='#-' +C3='#)' +cwd = os.getcwd() +join = os.path.join + + +WAF='waf' +def b(x): + return x +if sys.hexversion>0x300000f: + WAF='waf3' + def b(x): + return x.encode() + +def err(m): + print(('\033[91mError: %s\033[0m' % m)) + sys.exit(1) + +def unpack_wafdir(dir, src): + f = open(src,'rb') + c = 'corrupt archive (%d)' + while 1: + line = f.readline() + if not line: err('run waf-light from a folder containing waflib') + if line == b('#==>\n'): + txt = f.readline() + if not txt: err(c % 1) + if f.readline() != b('#<==\n'): err(c % 2) + break + if not txt: err(c % 3) + txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) + + import shutil, tarfile + try: shutil.rmtree(dir) + except OSError: pass + try: + for x in ('Tools', 'extras'): + os.makedirs(join(dir, 'waflib', x)) + except OSError: + err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) + + os.chdir(dir) + tmp = 't.bz2' + t = open(tmp,'wb') + try: t.write(txt) + finally: t.close() + + try: + t = tarfile.open(tmp) + except: + try: + os.system('bunzip2 t.bz2') + t = tarfile.open('t') + tmp = 't' + except: + os.chdir(cwd) + try: shutil.rmtree(dir) + except OSError: pass + err("Waf cannot be unpacked, check that bzip2 support is present") + + try: + for x in t: t.extract(x) + finally: + t.close() + + for x in ('Tools', 'extras'): + os.chmod(join('waflib',x), 493) + + if sys.hexversion<0x300000f: + sys.path = [join(dir, 'waflib')] + sys.path + import fixpy2 + fixpy2.fixdir(dir) + + os.remove(tmp) + os.chdir(cwd) + + try: dir = unicode(dir, 'mbcs') + except: pass + try: + from ctypes import windll + windll.kernel32.SetFileAttributesW(dir, 2) + except: + pass + +def test(dir): + try: + os.stat(join(dir, 'waflib')) + return os.path.abspath(dir) + except OSError: + pass + +def find_lib(): + src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) + base, name = os.path.split(src) + + #devs use $WAFDIR + w=test(os.environ.get('WAFDIR', '')) + if w: return w + + #waf-light + if name.endswith('waf-light'): + w = test(base) + if w: return w + for dir in sys.path: + if test(dir): + return dir + err('waf-light requires waflib -> export WAFDIR=/folder') + + dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) + for i in (INSTALL,'/usr','/usr/local','/opt'): + w = test(i + '/lib/' + dirname) + if w: return w + + #waf-local + dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) + w = test(dir) + if w: return w + + #unpack + unpack_wafdir(dir, src) + return dir + +wafdir = find_lib() +sys.path.insert(0, wafdir) + +if __name__ == '__main__': + + from waflib import Scripting + Scripting.waf_entry_point(cwd, VERSION, wafdir) + +#==> +#BZh91AY&SY[Pe(¬#)0Z0e#)bAGPvmͰteN`;6TiҊ#)i:G#/w`N#/E=FA JQJ IJ$@#)*#/Rgy>ǵU=Ww^n&gsTTv%%tsꏠnw ׺zt϶}|M}{;7P5{bOqֻK*oix]nwZl)ݶ}W51Nc/@^|w컛 w}!}2i}=k#iݛ^^[ɾd+x}}}#-_  #)#)&LF'bC@4d456I~%4A h<"53P@#)#)#)DAi6&SOxxAꞣC#)2#)#)#))" j`h?Pѵ#)C@dѠh#)#-#)#)#)#)I  #)&MmFbdɩ2#)#)$D#)44(&Tҟ=?J7mMDѠ#)#)>_GUV0Z檊].D3UREb,kmUɤ?Am?Nvqe31=LV 2z xUT1E?{#/G8#@{ho"4rAT ,y]eJyxS>"걉&țZeλ?rA 4RuvM"#)p'9YBDhb*PE #)#)=aimWt[jUV2J35#-3M4`ID"XԥQM#/&h A(jj5FmiFh5M4#)m404ŕ6IZ6(JYiM5!e6h& 31IFd#-)E %aK-#Jmlm6VѦbK3!4D2ɶm4ԔlZl͙i2LPTEE#/dQ$mEFIQ bTD)BDIb$mHA#-42H fAK+,Idb)dM4L*E,$h&Ĕehɡ&$%D4Y64I"KH"lk$3b$436 ڒ$X$%$(E"(0 2JaL2Rj,͍FRDKJl!E؀YR6dM؉")Fl2$YJ#-dM461Y,D M$R0٦@BMI,(1fPE4D֠X LIdd#JLe"Th&m(i1PlB@E&c$h"Y!L1FKbQ2LBB*HIM14Lbe$)30)def XDjd2#/CDR4bjT%4R#&2dSi#/,QE*I1$Shj441LL63Y 14" M(B2l`2Hi,j&IbAeHMRP(0Г2HedFSYJcj#- dDHhmMmh2LM(Z#-JmK4YM#(K,DZX[(Ć)4F#ka͢lVƶ*6L4R44F5Yc(S*HD[%QIKQ&D5cR#/e2eI*4TB+d"TT›63,YLS,JJSLl)%2RZ!գ%AEVMdjEHkD$mhŊl2ѵ0U@iR F2&ƍ&di ժ* KY4IR1!MlY"Y1Jm*RYaZDFK"e5MMk,Xlk+,l  Db4!-T%KQY&6LJ,&l#-"+,E1Jl4 AE$&Fm6F6ScE%bH#!4LQJdRP5BT4 JBj-#/36)F̤!Hbki4F5&a $YP-4) Ě4Yٔda, jE54ECF4#-1RfQj4  2A&ĕ%I1Rcda)ME`0٤lfECJ2ZfhT2Hlق!M#b5MJHH-a*51Xţ2i0IBɑQlQ%bfQFCd2"6cTj4PeQAb 5&0,#(jiM2QF"Z Qb,FRȩEQi0DY4E3(ZR*lJ"eZՃELJ#/b(LkIJm-chh$A (4Im$50A2`BJl͉*eddi#/i&(ԕe$b(Ѡ& "4ZYhj$Ze(Ml!TmIEE4&E23#1F#S6IIb5%K*ɭ6 [(QLiV6cm[Rf2BYKQŚTmDm*TRf#-,%FlkeI&IF#-1hƍ[V)*Q`!F4jamlZfZJke,jjmV&I(k5&eDP!Q&$)&Ddb2lf[F/||!)#/r gᬌSRo~+#/ {>#/hlz9zSw*7ˋ!#/#)D(0\:8pI m'cDH8g?֏J/e+)#|[s*l=_: eC#X;a8"8'%5'#/-]&dƈ6?Fd;&7]Wx,r]yfsW aBM^,2ٍ.e) ILM6 Ő1gQ] -#7D k{vXS#)_?m,:.kדGX_Kb1O.{>GNVQL0ФY;d4Dχ1195ï~z_;wktΡITm S!YS7L0=F&K>)ZM`RtiP;襈3,TYˈr$eq&2}4:țȱo"ETP1PX+W#cRQ4iїEU9h1Rm++_#/N2hW&xڹ?j@C(W V?w}ngunm(`>?kYĦݹ]t)9]e)2%9JUS梶/]W)VJܱhݖq3kh:UPSE#'cPi-#|ӓݾiDFqJ G~ekfL J$:дeuX4k\c8;j<(<J)")۾doSB#/rrӺ5_;W夔|/ d(FlZjڔ."T\x[EbuaX@ENHQT}~t(O9lXtA)\s,1P=D9z01v9Ňo)kGAkٯob)3#/3#H3T/dn bGӺ7w݆?Hjd$51SZj}y]\3~#/ᤎd"Xܑ4,X}Yn0ggk8.|bA#{S<#/t‰ɣJU;xS#-L3v+T,xmJ}7MbZ͆yai-j- 1I-7be RA8{ƔL|"=`k\K^t6TႰB;'xo^֫+#7&!{]\krCŶ{Cls>vs-u}:섒HTJSၶ,14KX2}Ȳ=9zC}Nez|+JE1ywX5 bw( Ð"IX@+[qf6q6>uXdE(i;w25^/Cd5DT'[7Љ*U!VTօJ+9]zѸu5&]_BR#/QR>WKi;RWWKb"QV#AET|ͿoGչVlϩ\(/rHcѺ#/ѨjvYBwd E^`^sLa>f~Uanq !_)Nj'6ʴOb\Ru616O0"Alg8@2Itӿ;EEB`fHXE':jҦ>;1.7D򳹢2I ڔ2Ҹv齇-'mv#/cϼN'\3 w]!PW|TW&1QOŔԛ$vB},_Uc*Ή֏MHe(+vteFW=u/~.e#gFY7'ǻcMd_?2em&yY򯥳LS~(v,vQh#yDs32LJ\95kvv=D/Nus-e1g&n.1 +Z+g1U 1!Q Y>P*#-ʢ2,S\&N믯M5^]1TLCׇT-V˂¤X#-4$~ac?-JIˎ4ތ;:bӠic8E7WO7•rJdSB^sƪqfa yZNG^b^:3yf)!ls5SX1ê޻}$(W7"IIDp]fm=`MF0T٧ܠ1ȥ>Ol5QתF_?F^Ah|Km5=-,p#-nuUk 2(5Bʪ8X#/UaˎCb ֔^=xP/o#)>>33c4DD;Lw=Pu7V^-EuW{QSG P$?pUREWɶ)օZvq[v>v=_#Go2~ˌeKK|q+wpΏT\zG<c/Y YMh=ɿR)9:sIǪ# U Kd{k#-;ݼno%x9d{MxbZ ziG3F,E6%UDl;)]q}(d7r:f2٨ Q#-rAfR#DT1hʱAi$hYz ˍ wD`!gxeK_<9aّȷ(Hjy%2,o!#)Gԏ-luX~u#-r>2vcHQp烄ݵҔmXt٬`Ҍ&eU WƂV"ԞfL+"?Smk@`O@c-TS1-9;DwVoƪ~G]dymqKzvud#//x@;+[7ڎuwm#)Ct8FP#+c*kman*QNL^ph&'ӦK:הyA6v`Ԥ?j:?O!Ĕh2{- |gDAA/h;&9(}t!bՕ0Yof<(D>#-)#KŽNvT뎉!#)% y ft9Ნ%^#Dlڃ:T`)63V:7LwA&訜`5HXʎZ_r D8tNehi%5@YGyw_A=;'^c.i`ey>˥;zxX%޽nt҈yo\1;P9ts.ĵ,1XqsNǤҜ4j~ou>4 #ʢ.(Ys1 Y[e h^$0vѾlvryE8J Ȭrsk6hP#)dƾ(6͂BP|-nwoB0+&7d?\NDg5 *G/?FimÖ%N)82CFX 8L;P07XǏV0#)&~H=νT@rܧ+bUT=$S\<(EPYy"2nקtz#- (J_)4wE##)PRDJ^mNk[PDR #) $e~%lQto]҄,:OB#),;ǗCHEXQ6בj>ER=S:s|4jGmfտ.4j]:;.>:v@0 )f۶_P(>qQ+~7o9$#-MkS#3^E푻Ƌ0YD;|Zsr3~m!&L!BI@4 -)R`aȥc.gՋT 8).:7Bzϻ;#l PCI%{ܥ*%8C`0u^J4ZMI:rlYTTho° )@Ž-20SBkM>K^[g2,̣K/rPi+$0pq {ؑ;(c$ה7#o.ۖ93O~[#8I8U3#)#-YzBK̳x=~rP=dAR5}j VI魳Lg1al!_aIHtii`ٞs3!}#v%6g#{`,d>o,ôbOr4>z崎P@۩9X aa(%zoݶt8Jݬ~i3[%t<}C|W a i鲇1@*RGW0^fzyl#-3iHs@E#)/ #){eTVՁSa@he5EY 2+c%2#/l/%WEϱ4FҖXީnθ~:sEp*(~sꆄ4uy!#-lBI:;˦849BÜuJ8bW8Rʁ 2z=:׭F7hR8cSPx#/hF/x! 0Y=31wL^܎FUMĽn$Ǵk@:M,}#-dJۂ/?C\>=N:}h復|k8ts58sɮW8P#/(";Rɷtb/]̻]֞;#1Jd[Gk:m WM1Åc9|y! aL"D)$CTV mDn `ҡq)ErY8HeޡbIM-D$l;^pjrpBi2Nԯk`ި КI(\Pb0`C[!'ߌ~ C[.8TT)h7xɐ#/x!1qߗ lUÃ9':w|-eMGWO_ƣʭ6NvϿ䥧`p+OBםmuq2y#/cVfDwT)Ȏiho9*ba1G}"hL͍RP\7t1zBmԱ0$cFv/-0d@#)奉c6PaF=z|4~ٿAp%0X#jūW"X2ѷJxѰh,J'.= 28.9RY-hRdn9.5L6W<<kS"dXK-]jTa>[;q|w+R~3}U{C|FlߒBB|l$#Qacg %(g=H-׫52NMu#M<42@ 6Aҷ}m?ه_Mv]4-t52ICq5. i*~a vz,6#-ؙ*q8G~Tvk=O'4J-hbX0FKg Y>: ; PI\)#35޶ܽ1640XPII&wVDVANL@2,* 6Jd ::a#- ul#-dQE$6Tu < #-V#Yk#-)$դo.؅)ڊ"0ѥbQѸ&b̴0V܌e2eCSJ" @y~ws4$_xwKw!(nrZ|~cH\4zdJXmu^k'T4AUL;ERi\Dyb9iȦa=4lצ!F7-+[#-#\!.}|C1ٸC&ǣ"(d#,\E&!>PrmC#/6^tmkT'g3ppkb8:B,\X(h|H%lŔc ,;[#-#1>N#5G+NɎ4$;>)͙n$"ص7Sըx:)x؋FgAg%9RqTF;D}wv}Xt`n#) lULzYfugXG#qKs8f:F!ksi3[#/z62mFnjK$!Qh PV#-RL`iadt#/#}E, 0PkIׁt2P޺: 5e= |ϙ۲#)(7yտe:=-o@}p!=^ Be.:T8iX14 7z3 bRQHWI۸%_mGPp=xG1lrVܮR냈q a|2>"j&TWdB(&esxc쇎n\gX,Pbv|?_]#-çHن1ۭլٹYoO5өWOKϫ706-#-c/^Őo7T0l=X zVAE$yɬnyKw[f"a*l gкH%Ts*`Af tqA,75`+#/W8Sn*AjJۖ~_ u=>6XRi>-#)':(@H#/wEBuyQܝĉ ypr##/gE3jK&1*X_bhb엣EU4TZ80+|sP8mȥ+(#/;%mW+j񠋛uRή^e`ѩ)".i>>鮾/bъݵͣ_#-4$(@̌xQ{(#-oRm$H"]TUS!<u}9cuib)f@hH6)7?y[ϼvC?H0`ʟxiuC,u/R4}J%]5 aIԽ~(_?v@E`pr\N$ 9B%8OFxN#-#-=$6p05aB(a~T5AҸ\/#)*0Q--lmg/V0,~29௮RbaQ!?Ki#-ݝ($*Rh!0V!H#)1I[d\T(#/N=>4o~Ž>|w[C#}H||*z<i#+`1yz_.EwC!~#)|Bfӗ0^fx~9w(5"#-@r 2F׷t\.g>6,dyD3D] l~ܗc]7)ߺA:߫; d:vP4sH]h13H(#/ xPԽ]#-[+F#--@=_ީ3'RA3Jh$Pᙿ )c墏f G=5.R!#/Bc!nblyC(YpO 6+У=#Gt=W鞫+lA.* ˨#뷗HnVFG#-6Ӱ9X\kf_xaج[x_9}6!d@߬}-;HO䲡P?B@p~ *̅yPIBvz>-[옶*ĄǸ$M\?$y1mHҡ[?ʶ_Cwu=0mSHV~%4 CcuKVW[@*9iečh`,ZZWRj_`Oz~=WԱ\jy˨*y^QLHNCCi=q؟،?,RsCK*QKb)#)WݟiiGH ("D27U?OwOW}&ݜ>e3|MW~)u}MWGcAKk\ڬwe#}?=;Ovg.[z!"Zj×[TxϗyIŽ::ݶ+VEV]y#-.nYh{pm\\,3_^V59{#-C} qH#-߽E{3t/>w~/㊛$%Cyz1K6̶St[F#/(H~J6+۴ӣ0δ?o3tF1wRf=#-~$^Jj ZGݔ(>wZ$Wq#/:|+0 5ss&K25;Msj_#-~Y 슜K.q6kV`,= pDZn"A/-#/~#-?~;x>;#/>`:O!{L!#/ DOBlF%AhoNegx stmKM؃䳻{2dI} YBA<}Tc☾ZI/Hlyߢuwu,)w7\8ClRDu0`4>#ԈpM-78]fp$: yG@%}iߣgz>oPM+Y4`[xh!^',R+1dώְV Nm\_66{浗"FVSaclb^bV?=7x񮯽E|WF9 6?iExS* A'!Gv[}γLÐIIE#/$um|@p),Ck6ZT"ȰH ,~Mu7sj~EDx dW`n)W/#/Ea'JNKc!cɚy[g$> o %{t)$,F:4͒NY$xz7_uD)揓a#)Q{Lk/1Vϔ<쿥ds#jX݄jAaOQj#-U##5(D #D49ńih,Bt!YՙfOn `a-AȱaILA"hhn)"4[VWc'φđu`\j5w\Qs4*"ОV6b/["?9gA((>?)YŚZ9+r c F6,# Doǹ~F##E4E#3YޠAaRD!#-ZmZI*UPPYOsqrӛޙAFi|-'lDjUuwu_fWV%u[?OctCV<"1Nre#<"!Vu4,eVMqeo9#-C ڇ #/0>GI ]uG<~ק٣OZxF#)8g#/5U6[>aL~Yw?VPwu~uw\3ܮk>&5)n|_{}^M\4}sYO1l@L/0A^u`QH:Z.8vzs14fׁ܅QmZ$V҆AX)%<#- xAVbƕiiɲ(vkжJR"Pmb" \YJg0Uj4cj2#/Zj[*c86FH2#-Ӥfk!(AS(2-LõsjS@:F1,ȘaaYҨqԲ3HZ7KkA#)ekݧ`2zXUֻ]b0Q",&T8T${1TGHM&Db%Ů!h"9*L:%# W:? |AI$9%!Ņy- Edc= ý=1&h2_eqxܾRv?2/Vꇻo1*c#>'=z9#-%a٭)ozLюes+5P^/<"l9k=Tެڬ3&ͥ&~?r|Ps vA#)_${׫ԎV6T>pMh4/\ˡAU$̪(4#)#e $#1'-J'{ x|tjaҝ nXDeFأ,-*~4#-8|ǻb"5#\\axqiF4S>},Y%ө Hȑ#u0MV:EA1=!D1m@zQ4ޝ#/T^Ѭ#-#)i-Z A8:plo1csWJT"9m^Y;5|R(,,-H`~wp?0qyVvm=2|؎_J`CT<2+rndɠrҴuF:;H#+` ˜PJ(#CcPqBF<]i24>:ۍFRvt]YXHQLEUAEtn9RcxBqjxd1LYC8xj0ߞ\i_e<8I| d.m,_;:vb3c,#)B P OwwvOeu <[#,j#)E^ )l&.2uJ ˲w'>82Ǐk% <#/O9yos&ǡ8.}ƵTusE/K(di*KpxMi#/RјWKc:hp`viq`Jg^&b|ἳvK.˗!B#/6%X[qkdŰ#-`Rb]83cO]B$K|\ț|jg}'$jaT;_I)TeeV#.6®j'pw{?T=#/V!}bxGkΈ<*XƌAh1  jDʪ\9[2 ݌neq$ޘ]Dd{>M{f. t>Hhp2vBT)@vlџYη~n7I?oR7b[Ox8y4˰JFQ\CfCJqixi?K\ADcHJz3rPDP#Nrc5q ݠbY#-ôcmTst:{fNMP2@Lj spm<(ndÜimĎm&a$ǒfseXuaz>x L:- @~Zགྷ̈?_צ"!4~ks6#*g-M/\Fd-vC f縅 d14 Vꗸ4Q!Z\}[crXZ.,#Ώfi?N7I.kSͨ#zGQ#h, ߛє`Uu@ MsϝCmDىGQvhf;C;N* r4+f|L1dEDh>VAE,DD[2cofD&#trrGZK0WKR#-V!Ӧ#/gkhAC;Z[뮊V-V>QT <ωՒ'lļpHUVoфrgs5;Gµ9#ZT#ܩ1ȱf\lu_ľJl,Wa&J/OK3b^oB:^Y'&նs˙gybϒmȎ3'V߆2 Ħj0q+J`I\RogDPрci%ޔ!aN`Ώrj荏9E`odbT[h|#-^Ji5xx#o~#)Y{;!W)LkYsZI->sx%R"gɐ5᝭t_}V;.&uA*$"+A\|B*9!rnmG#-LQi`Ђ oQ@J*/FvM,DzGw)[k"Qzʧ(Xy}&r~տsnG?F(4ID>_TA3q{Th碧G!ueF՛AmRυ[y@Gs.|o?ċ9GK@Y ([u`"%K'l7LK%!k'0ݞ`Vj\C|&rҤZ@4jd$ү*,3ZCQdv/~W#/1o{5dKօP/6blM˰d$ ac±^K:]}5"DPKmn\۱-LVXFf[&it^!y拼EC9H2tflkAM1C,`lرkOIiN}#/n#)A^(l!.o7B[8fXHڀWz2sX( pp4YAa󒥃X8~ =ޡOϒӯtq8==-$ Uma+#1-!%gX'g1 UEilG<8?^j*_nS%S(^x]c-MzBDC k>;kN$og$[$v.Ȟ/jknuVҨ99шd~4ti&ϛ/~/[l:unM({-:;_Qcקn:ǫoԙ=Ck MQfSprLK8'R#-صƗ˃(=4DSX?dK1ugԎ&xtM(_K՟Mah{/\wTH-/Q4V(-M?|]IY8;p~g6T##-%MPp.gZ+ml!Po`Bb=E;{HQkz@}_p1#/Ե%l\Fi H儖" BrZZ,Ya}7zI#/V^8s17f;[P GB6+{NiC&:3:r/U/!Yy 4 R&O :#/B֠|g:-rS1qȀQ#)8guv' 9%GrWtj^[dۉRy6޵2#)U)QU7=f{|GњhC*s@y qIJ=29K?bm4X'?KOamDѨd>vyXB#L(훭`6$:ܮMádx&#/X+#-<DUn#-qtġw@9(X9֙`/ D$)F62!*>9@u啕jyF8{'z=ݳ q#-kCXvNy*|NZY6 tӵX,#/1D#-aI0jl= ټ•vрWc 9NDp<aZ~$#-#-#)"-S++ePQ['(xT'7Z@enZT[-/%a^R0~#{,#/G3GBq Pt !@Pv wn)%wfsj;3IB:=."IekI+sgŃ%0(2%@h( 2 1#)I{x̺}%cK\iqwUZ\ڛ&1T%mϩD絥z 40AMFN Os;5 9`KJ Ais>1C9#-ʊ%,J8]$hӜVܮٖaTd:2'iI]]xfM9/cOښrE=|-̇_V[~ Hssc|a%sEMe=Wwlfg4ܢ`E3Y(3=nRjR5Lߊ{v#/qւs`WLÍVhw-W8g{mqnO<-9֍, C`N`[™y#/Z=s'WH.V|W᪁wUk>&#-~9"ֺN;s4֎Y#/fx}prr=qĖܾ7Αj72sڹV{TsAFŰnm ,#)(lcrgzkKk6w;ŷK! t]= [xJ.;tuY~T+_:>Hا[< ٧*.:'v"Wz&+G|덱*1E-v`#kcdۣrȒR4 s6@Qm3N +ߣl "XH;"=ĐW#/0cM{x|Vf0R5ֽ3؅3|hk}Iv("`Taߦ:bdB;oPhs+!ϖ24jf3 (;tipV2pv|ӃmvK1YtܿJ%@NWNދsC9_kz5JmcvF*̆Mry$%TDR'bfsm:N<^WH^u@CyeN{tVzx7) &w ݋Aթ@xZ#-nP=N6 kؙЄ8i#"E---i}'˂#-;<M ;cox#)$|ʧ]CI%&1j>6?_5ݜ+T[<9#/B76/ {{Մ*8wV[fv0U#m#/NJxQSD;j,0.ojXUX";&03gU_|=?D_zmP]F@ģzGc[#-, #qGAI^vD3d֠E2Ġ#)ԠOEskqVsL AD$S~TWƮ] oC#/uܶ$WtlJEEaFDRAB#-=ץY_cH1lgOއGc8v:Y#"R(0`k! |:/WSmKv53TYųe2?0ٰ}W.YzH M#)7ϻ##/&-@{$C̈~gC B"%LCBIQ]잿r_۬*0_=ÖWyΕ$NIeYU`r,e,r1#/#/r96U-Ѻ ܆~#- T^ ltTlIhJk]!gTbXF+?}/Ca8MW08'#/֢Ժv01G:~F{YW#/Uf[g~~s<7EaVN~fPGն.2Z*dم2QJf %9^,햝7CPE3S5@؟zԙJ`r#)_):y Jab\> e:V3Bx5-J܁/Ԉ ܰnoG^q04@<7;,XO#)vxx!/von~tV:BCv|񙦖\υ*2.%HX/t<4;hldpM]_|LF<k@wt)yA~Hu,C*ri#-w52x ""7sO#=wÙU:T*RBԬ#/~sf4E{QO6X{5T0.{x|`]V8628m4f5j[~ $1!blM1>`\A#-.);Y}c>ODȠ(&]#)iuQ:vٮ"HLWQ[epue֔U^9Ss"V¶=@VW|裃 {9¡lΏgV#/@qP,v4 Xzy&es-~GwbQ3nq  #-A%&N6?ČbIGKVH(ju)9&Qb/6q1oG}.+*`hNBHϭןկ.Mj\(so)g #-4F̷e`0RqQ|;l %#-j'GA>#-GNWYw/9D;z@bR/H'YZt#C,@yNr+(kخ3zL;," 썼BN3$>q64Ҙ#-& [$-Sn-\fx,RoJ R*Op2cM' #1'ة#-$nE"#/ xw .Om~ի֑BzbF<%xk5#0_3HWw=d.;#/*d", iVZ0l@0BQ30[ZQvrI{@{"ϕr[x߼u 9&j7JsB ZlX`az'ﲡSᆟ,XJKDHK]ܰSɴ?;8e.~x$ uRfX~1o'\8`-# rD\Cv_XNe:wQ\+(M-c3Pڿ]daQ#`tWw74|^,4mCz‹qtZCU6у#-eLw !N*Rωlj θJL-rj~Ă=%gJP2 q#O{xt}=}޺lRpLn^|æU̧#-yv{G>laoa-3=k{bh+\ SaBpc=[1q%~^QDByqN6#\6oF:i:O#)YzL{ygfwaA &A7n$:T9oƚg88oe#-#)Sv FT2@z5[{6wܾߢר$dW6#)}kӛm}dQ }@I4riOObx+iM1ftб>sW0zbi'1(ue0on‡ l14D]@unYM׃\EbRAPE H154#)B}Hגht+wn0oVppYё*tw@#/g*^|b )CU+<ߌOMfjoHAJ#JJVݿJv^yy0|y%#)k]q~ʨ,B1F!#/tW>TuUS!_~GS3x%oFK1_bZ&"Zr'?p#-wlcztO6u@#)9iH_/VkrÅ£笧HO% drI5=[#-qtܷK?>F;Z9f^"q,_ʩ}sker'PFTӏwzf#[5RȌ,i~463eJGZ <|q6'P> Z\IiDݿYh7G<4=>4TgNbʊ"h(GO_r-c]I>k@0~߯쳃7`*d#)!e@·ēZ?5?pW8/v, [2 ZB#)Nâ"abe;"97؂#) J 3#)@#ꂶHd’DTKGE@2. &c} #a kJlnxX̬f bXp,cnJRbQ%n}Z"#/_B{OJgg.uMŕT;k1@#-AW 3P\V5pEM`Q:sD*23lRNo)ϥΣM!+E>TsΚ? #)`cnh>+BGG%om_u MQ' wDw,EͺJ1Vo%gv[LC(nqK96w:*p️u=Ь+YG&͊F!:8i5;<@FI4?`Ց;5F(zqTz$۳=f[/0K'N-?<tz s?#-|lg@l>Y/wR$!~Q=bX,dPi,S4f̔"z9**g||p-pq 6Hk{+q6C"B^JaԐHE{K"ZSO8m۾4v1#kg·MG#/}P&7DJө6Ƣsu&Ȉ#-ha(lUeYVHaةFvtG#-m7[RirpN:7T%#-a 3٨j vQ ݉5EdCzNӹlJM*y{:VF,O&0񜓹<t'(v(#/H[nkdcV:ʲZث\mjUڽYwyֺUtRh^eeq2&+/7ɛ<ԒuI릥A3'K0G݊Y<,mKQgߓx ltHh{~ymLQ5UyނB,(D(=yyUҒXnbĴP Ӿj/@{|9AWgy~,sa:lGiop>3Bsp4S%y9|4JԒ#)kDκj@" PoCw;4DpӞ}VN 6t fLFt+i7[>nP!Fda/c)9|ۧi3Κ¥k%Gկ;(#/\(Of9#( 5QVbX!ź/|ll8@G*)qpkՕ8LA/Q1*P<߷9+k| c`=x|lez9d.7#FH=oz&ԳX};\RWE].Ko7M^,%A|86袐z7R{C a=؉Ab:*J㿆ybi&z6cH+XrH#-E`=4j#YA#-c4~hyZn<(E7x?MHg 4N=֒%hauuzlF“e5ՌXkk7=ڙhG~fm’Dn5X:&^ZǾq}NGZtm{fN}%A"LKgD01%S}/2=+> (BYC#-mYZyQ2a0H'ĤȯMzRI3tRt&:NOnP3:0QvJ7pZk\+VF=fEkHb䐈#xmI)MC bph64R&w Rq81sDv{}ɆPE6%֙C],Q=#)::WtRG-M-ԔlU~u7aF*thb)p <'0k9]dLf;zqLIW8 \WmzpMPbwOϑIIz,=H#/TwHY9|L.)* b?}-}H%fL؀ #-#)}kJ/oەZS1_P$TRE Lk?~lN^;mYmΉat,)#-0V®RS2ΣӔ@7U/=Lz3),(KОLb=nu*-/ -"% n"@D__y:#-Z,9:$ѩ)F$'dr7 ?<"nP6ClRxT"œVt_cU^-ʢ%$H19aY?NNѯ]y`2/ÈDϐ>#/m*H<\2^' ;v$T+#/LLglDaJ 0Z@ 7bd{S_wxo~w#/g}> |'v4t$W!bsGko !L}= 3/V9y89M\z#`}%S6a5;%~wwh_#~gvs+Í<ն>Bb9=b Q$DOaWuy`̰!"-I#-Iv`w`<Z%LQ6_#-Zuu;[$@PXiSYo68q&#)_}1ayZr^[{ޟH}kcm%Q#/x&Ef HV7>ue-!t:yW'#/ &sW>NSMϓfvBy|m+swyǂ"4QjykI:fLII<&DbU#)6΃ SOP{GD9=i`M_zҿ:8CY#/Ws&9\s(KW6#/R_~*ͣ?ǫ0AA3)B`I~Ounc8,'g(P<4zn/#)#)A#/ ՘"6wwվg g$d<]m mVDդn9oJ)oyݴ\JLRW<>(B_?C )0jQ^=W8gvYϬQgqE)ĸ;t+:szQVAL!Oi֯k_,Xlo[](kړL鷦]UUQu- Ju׭3\YqXzl+ZP_27HO^^jQDURHG`Bo>_SjԤtsPcV)wc;isga1N#7_h➜iS$S﹭RwѾw/k[3NSu"}͕S-<4?>W,onY_#-xBa[zQa))aެȜ-aJOjFCGz3ӲtR8t}˸xwY1ˆ#/r@{ha~9v <70Fpqu&÷-&4J?-wwowA̺igk;|%4PmҤ'bQbPP.2|Q#/_OPB7v}pGvKM.25#dOB7kFh^Á#\ZnUF"qW:'h2,8'ByQmkGxCG̋ 4َÅܤ}ޯSX5HZl#)Yy)V#/J% bx7#"QU֫/#)@NTxY[uS#-_g/k?Rb́ +;+*󒺃m+7=#/b_wS<3zhv9&"k"#)A?9zrܾjtKd{ƙ80m}䀞y0$< ~I"cĤ )y}^?<#"7ZU#)'O8s3Bp~U!5{B?aMRr#) oM#)1R04);4(4?Yw%H8v7H֮}s`cH (߁ӦkMkmOO"oŽa[@b0>x#)OcDF(XHy9 3#- }{Dt>ñ#)3IH~)q,(IO =Y2$?TjP]>B T%K-{N\kl^?tLCH@ρpsN# M`txN\~g#$}+ueqN5s pҨ (g*Y9p#/Ps!4$INr$&3Yi0Au*8꘻(#)X˖Ĩ(u#)Ԥ:Q8w76NU{j!^;]yUff#/,#tq+{ޖK](ֽ#/0Q,+*J„eroxnR3,>Ŝwn&Y\MwRx=نSq\%OАr:я.8"`i>ˤ:D^c'C&ˎ8]sap2.ZB'>;'"4IB8bM#-ۖmOjhDpɓêКy9Srx-hvd#-Y{ydžڧl~DNPVmH!|O{.zOĨ"R!J!RZU#)&yT!Ѵ]쭵2P]ҽdRl/UdAr#/+`£ز8FmR?Ɯ̠q)#)6z(^Ig{ hQgܹީB=.lhķq$^1e2ht wシms-Ŕ3 vyv\7Ng#/mv 9f$z>WBG'Peo8f+nVbk~0UBM>ku!ˁ:qo= L6i_FR`NN:(XN߯PT^p\Sl6;5*xk,(Y$n!xJcH~OxpQ\%1J }:]#-}ꎽEGCf]q[ȇ+Mν,;qkۿU;#w`#)X&"ǀ~TBøH=FA^ #)#jz~>֕Gadػ#פKPrƖ.,Y>~nZ>i??k|9E#-A:N0֝&S<Ljtm̏j\B-Bs:>cS>{v?BbzN4kZK_o/Mxmyyfu`06 `vqpl#-s\]SxHմwQ; fXA]@r<9 Œ9#=2Vv!m-ZKX9%dJ%ALS#)\TLP/"r>537mv{?RY+h:5K""#-3v)aSh0"09^%&#-uR#}3vagvmZU#qVX*d=ò6PHo7a[yBE#-oe_]: +!҇#-7b>Wq|<_+y[' lW}8YD}[ 9PE[tH!5=@Ѧp-PE2DgEg&1r"mxhhNfCc&Zu5jr"V˥|k#--@1#-FDttmk^%aQOf;4=Q@X>B-})VZ kӫ #-CB;%?l[_ d+OgJ7Rg\.f]%kْt<#-ctg>G@^ Mu^q`mإkNvyÅN`&8yI(K<tI*faHy/"#y#`/-*wl"gfA.Ё#)hڳۘcTq)i8VkjG1xdE u]D7f;}QkSZ&3LBc"Pd#-KCuw}% VgFđ”w`Q#-߀bzݟsDֺFG}>}vovEOtQYxtt4W}UAM! !K$VA]&[_R۴TKÿyӯ8t9~( K,>FJتix ep#)(tE#VFlj8|2-MRCků#)$?-mOuy0}W;hщNrgק~#3K4?nn|-#-යY`AAb'AN`t@`V=te0*oqgYT*Bu2kW>vyo_4$?(b(0 3_@##8mF#-FI?R(دxvbQ` AG-`aۨķ{OnwXmttطT#/?Xf9.} N2+yLO.F`W0;.$#/R#-Z:;hy5G{ܝgHs}ߘu6C#+hbd_0wjZGFs_4P46?{#)r65#-Nӯnf/1؃9" eywZpNO,@V®q|t1f w}^qn.I!2UzY Gd(#)C:VWo?#/A`-I#G`nXp&=7i\ݠjBB1>~VΖ#/Ӵ \-^F.4$7W;m6Qh,B)Սpm#w#)ka(r)H#-Naj,d$@Št޲٬iORy |4U0/?WN{S%tm h M#-j61ol yX["K db#"H ar. ⴥ@Kf@t2y3#\)ٮÂm0rN :1#/d_ @:OWM)''#*ނиx͉Ms5,h#/T=| ];`$IQ++]QaC*hZ{0I`_M\DŁŘB wpڝ:m%l0hL̒~yy'QIJ=o)r?OD27GFkqU/i]}: PpF{q#-?;s#-OOF5 #vb#-m@y- >#I7u9D4UH[~ )K~OJ^s{4eL;d7j\q_Ւ|O0@831n%I$xw%~~3[#-W^B8\?{L<d@AF6Pܷ?tʛv!ڰ-EM=?a/s+ڋrp$9z߀ΣHТ%m.AYu>nCFSl]5iׅW x&N#/QmC#/#-iMͬ#-#-|uOfDfq0hLR-z?<#)܅?6WTj8!IO1k +'iaCQI)2۶HE>ם%=FvKKF2WYiU9 ć4+dR#/܍erhR:I$5QIu--m5sVZ\oL:P^kh5bSL.QQD.^7wٍ@NZ!$@y_5($fVi?܄jTm2sx0Bw Oɨ"$hr#/WQB(cvUyP6 '؏D-5#-&喝DUw, D@9#/[(>2d?ۍc94,I$;]I))2bZ mӽiuqwoȧN)"~]b/KᒛoY}quo0woo6F+0?rӌݩM"\ܦRo 33 ;0Dwǂ}4|~O߭[A%/={78~wn:QRR"2m!\;!7VfIJx1)@)Q2?_7Ѯһ?Nd3'; dBQCF؉淩DRѐN(o@d! K#pb`^A5p F`G ,[xSC #)B}yW9o$_cXWjװ%o`Y"Dr'Qȹg?յ_Hl6B A!?8烟tXƜvHCmS]`|@{|S8sO#/wR$jsܠ)Q~E :z#):+P<@¥?˰=ܡD<FE#!v,Wpmr|#-@fC@uo$T`T>΅>^W/+cao+dh|ew-Nϲ C*ې؇L 1 N#$OjS> .`h#)}^_"}}lvjk{ O{J;=MW֣;[mb"_݈ $˛$_ |P+pGhda\=%`p?4.Bv*TgI>Fv:`br s7y v#z۠dBV#Jp2nD,pKU4pᱬ*蘑)Q8gID5//L0 tR $)Kswha-G- %q&ޝNdS0G-fyX)">#) lV|'<T(/{ LS`Z6KRDkÀ {Ob'>#)Ì+n6wF?[G3#)MO}~aR7Z'K{s*%1%U~QGIB8riYibmJjfg=G|*;TiOzz+ouU[TP1W0QGD6#/(rXb~Qh$45sN/͒.a8\㺔 zc~IW+we?cO9^K"/ޢ>#/z#/WrL2],gXi=]9(n FOcO,zGLV, X#)vE:#-SJw5S3`Q,K%'B F1_ZӕzNa=>v}V8U!RȬ,JfQ]FU\7HlLAY$I*6QMX'4אz>Wۤ ӀA}ռPPp_+` k|g6;R9w7?VSd?`4lw!ikۻbk&׵b jC!#-)D@rRby)y=o#)4z2:o;sG[Qi^4z~I9W,C ӊCGa۸wtBSIϘ;\'w[msu"2#C i#/}l{{gap'Ve&$$G#-)#/(߽d-+^^CO_{.TDm}A||Ԩ~D/C6|Vޙ0Ra X*$V|ÿf!@.* ˂^B#-tUO|QH}$ #G<:GGgYRZFo cgH裼$#'!@HS,a]c J99|AY%! $/?=ѳCqG3#//#-K!,?=y;q @/b#/JEQ9g#/ G~{* ΞPO<Ȁ>/8Xc8H.ce E JIp}n40ǯKeRj"Y.. O`foXA @ #-ӫy<#)w^al}KET‚gӫ%:'ٻѰ{T/\#-U:$d\UA¦ luy+*O X ES#)08Q %AP0Anߍl/g*|7*5^w ݒd0oe*#>1d$N bY"#f}>+x"r!#/IH$bLDhb1"m0F"^o~.-mn~̨9F4cwpΠzU*dqEtOQiNK֡l8k tXrh#-52{";uͳ;R(X5I&hӀkK(L}$ӽ9;Q:Kgӧ]n*ep?Ķ\AN9n#)=A6oUh"5CJNgHFl!IXBF("G Kr>P<;:օݐq.dH%VeU-Ëó˔m;MQ]!VU쒓]Qg^0P>%'czѭX(bbns5aGqiRl[}4u'8MR&7 o ~}7y/#u[Chfq Xџc~j3l+X#)s,Zukgl+ #G*{!Dċh"(#)4V]աA7@h#-3#-z$GdS:Bl~egYb p,C0U.}#-,Ӊ@bvp䙃m^6xm*n`RHWO<<bH+?ڗ>x,xu݁ʥ"I_?~* Æ-ir~lnns,C@kϬ#-[MBA"!#- &H-+|jBz^$D~aqE<ߣ8PGʎy5nםhr:Ǹ9<>W!Ju[dyy4o8^巺eXUGr`6C0z-.?NR_r=5HiP΀t:#3iO+~ coÄBaR|r^(JiT,P@"X ,'eXuʐV066Kw:#r=[>߼#-d0M+kߺVB%TbLr B$`Wҳ#-{™&H1O" T}%ڮ\c3?ݡF%~[N*Fn}#/!FZo9LdOO}deߔ$#-_2]O^0#-,&~//U!?]>B7@>;~cFnI.=י6ɼ}O#)d*6< <=͸_+`ޘr 7,?njgbS}`;apu;f,2P]S|MBK^#-l9<)dE'$^s*f1,h?+6G|EJmUw'E( vzN^/Nt{ w(*7䏄IT-C/ٖ+YtvzqH~D?Gy4 I~CpFb#/(|#_#)hGU}j)'"@D#e;w+ePJmU#/a˲C߀E!I08 t "%U|olmv0UË ?]jEʊ9Id}~7X34m4vٟ0o|zbMu'Yq3#-г>Kx7i3Jc;6S/glu#{ֻ3\b#)xiGgyb@3:-0Wo?\=>Qfao֝5)YkʻLӻϞ p DN&6iQ-9z-bwF-hȁ^P)Q*@KH&Dl6#-cߦp~j-QGcOzP3-TwoQ<4m|zU챔b>xδ0}ZQ^(9#)]= \PDߣ$yAR#))aN^F#H@eU‚Yӏ*li"4{ izv~<|Xm&Fr IS"#/Fv18I՟g#;nZh8UQ֫BFeR,#cqauY#ǘF y*H`صI贺0jǟg(,;SP)#/ 8#)$QyM=\4~?e@2zN7#/ݸM/?4t}t4:_^w¥}v9iDLAn uv8~_XN#~?jp~#)$!!1oUUU[`Nc#-#)p7@H;A`6&ۍፁیo8FBJDP6^ۤ6<#/j&ث,tͤ#)#/3#/I-yQX2]hyeȜ[uup*Jn*.[Y-Vq@ƴoOǝaUk¦SqL`,ݴԏDq3)(4*$]mibN:#q ',p:!{~0O9_Ʃgߩ^Yl$/#)0<$t#-|9ߠ9|@C!T#-=Cr#-bl@!4H,!#fo 9`4۲b)GVvJH>#Dw#/KłE .eEEb,AX˸-#VyZE&F,YKb_NiύacUMe#-dӒCG)AkotcC~^d#/2#)8I $goTTpk^{ IA#s_Бi#H$zZDx#/o.#5U#O9\L:W,y!O! e=;Zw([,Y`']L5m3f#l[}oMM.jV@#-[YrYu0zkP=V%O2(J(Hk2fdqDy".I5ױ]#-0 V蹼#-9IEaښ*v;# + (T]Vd:UCϑ˼xHC:#ػ#)2Kbm U#-b##kkϲ#-"+S5f#/4L"СiHԊQ*cO$g/uvRb#)4Y]uEQ S$B!c5H7FAÑMa!}bȩ z 57#-E#>bƁ q2&X`dF`r83keUF^Ӧu 顉 7;I%:1q 5XT*vCr`ܮ#)"Chl3oJWH81Y3UvG]E5{$#:Z p#{"#aCi#-W7ҹBA\˕$MIAd^Zzl,\ Lfx5OZ4sxs˛H*"xxO+74#-Xo(hmIx/udߏ]iD@2 g˸5 m7nl$IrA듌O(?ܦC$M;q;#x6P[z1wmudlju?zG?dQ黶tL!=H쾂z:ӽl[qdM'Xvc=oX`pedtԪgMx؃Z#/V{'eBOXxشhXbb0F͐{6#/FH@rq x(A0>__uHՑpWZ#/G0sH,:Wj AAOTETd7kST.(f((ym!g"~z"@ BJR&%o~$[v"1)%\R矠uT. VpdZجRx!;zuo1^鿀u D;Qc)DT#/j-"uhy&co;N#/jkTfOJgHT5DA`6$-&Mc"0pT?&F2B;oT 7D_y{C#)XA`3;XE!&lysM7V{ n _ϷJ8Bo#Ns׫hwQ}!\#)V H6oXڹhZKBG;;TD5UmkktUl8!OORI;pYe(0ijI KVlU:#-a)`c4 ő#- #?G? 0kRL[ݼzmMnk(ݠ-ͼ\1nY++Fz% tѥJ L|,ξl@!$Jgps̐ie#-s'`{ OfO%eݜci~i;Ǟ{b]dHvp`Sۜ>8}j1P$MfZ&؉?.\۫B0JrF]14r:rؽC1-#)@_HR?~\;0[,.؄r7V%"3 '*HBP†}*pt0SK#/K\cr!d#-xrnYZ=~-hOoo#-"Bo#-Oy~U{a .w-$%6:(|!ӫ2z0ǒ!;DK%^N$+f1&y9m*` ysgbQL*O4I?7˸j);~O&(%&kKz^@@*!afj H"9WRtIs-PBNڄp5𽮖[`͟x6*#/Z}BFS?-&ZR?!$ kh-J[%V4eTbYYmXmJ֓Zʍ3)#)V1S~G渖9vUuç҇TAQ  C#),x##)P}wa{uX Km~s!CᡱG5jа,XڊȥbaX9;fސ/] $N #)il6M"iҾU744dZ8ab_J &jνt#/ީJhv3N{uqUC&ݨ$[j]8l]*zD`So}=]TWUkZ?gj䢖,$C)#/H>̵$sdkrL5&6dTEo}wWߖr8#) HAdANUG8^gTG i 8DP 'A^N|.$P#-ym>iw~^h{{(F@Y%vx2PX>SwZU~k?K(*#u}qӧUXʅ:4x($&߷M.[6uD~ZPL}Fj${_<'gAēЋA#-Zb i0"$Xߘ۰:A5S2u#-Ou *}9,*_^Y56@A4lK0i|mnua_<}v~8Z?j@;H_W?GCs.gr0N8WNҋ}#)&ěF!P0@=2pU(4Gw?* =$6<#-o__aj#)({{#)f\d]Ψ}|C!`:J f2F<8]Fbr!mlN8y=h*krgYC$3Ce&SWd+\s18;R =}##)DRTT=tx'{t)耆Σf+nxȐ򆔅J5oCqHUBAdDd!G#/fe OcӻTMPb7qB]5}-,F2"YC#-`\>! uXA3d4e7W:zZ5P9#-Zрxx=d1"w@;i YY_A`e5@Rx KߛzuojG̢|z/poyЩVQ0-tiot@szGt]OuÜq1вf[dM r>z@7xhDP$S x7m"[lmp胁7lsy6m\97`WpScƦSPV;VYJEYͨRȵAE AWDGSt|CCG͇^ϯeO8!5o}5&=ÿ9! aP#/!h{HB`%jBUJ))B=џ'X%)W @uapdOľ::"lhoBB.g1m~pTFy#-CHzEm]=) v#(l|.Uw~f@9FnfuxgsbX9Љ`=6Kٟ$Հ8i}H@m1׸fܱ1P4ls#8F:2UTb B&.߿\ 1va>wY1٦в=OwCԊzorg" 3S$Ξ?3ӷN۴Luzt`eH;otx==C~v.Ž^cjZ8>*k ٢dʇ)ZRI֦tԍȏ#]IqB'}_ *~tc:V@3cdE3T ~"2)ώ^:v{kfT:s/#Ū&VbFlK);rXSKj/F!VTd-6HQ#/J].dG Fm. %#)m!@0Vkhjk%YH#/&NxPz9maMVwq_?}~xJTAJIP#-*X5oB$mPB:*||v?] /RQ[ꫝK4I#gmSPM8٢ [3R:M#/"f[+'ʑYUc{^[=x$$> 4U L#/"DRh[!)"HQgݤ止jx>g(Qp9ȒHE 9u4an4kˀI pξtϊUrp:k;d&(`S'\DP ijJHbWm)c[bfUTRD#)߄{bv#:cn.X#/"TC#-4:kzL`x7H#-Y&ooig[&4S$.wy}3|ߦ"m}]~WEO#-k" `HtcήT;N"}: $ 3Rk-+Yj6@|D/B3W(߶* B3{'@/]k[jHڍm@s9w.p.˥1n'$Ґ\&qL7kS"yf#s_#/RbU [iv#-^ < r2/`P*#/gYY),Ѡoyv1RAJ50#/!F"hi"a <-h-<3ܱАxش8X KVFQ uuFe sr_N)do S3Aw,~yDpآU*@d #-AU:sACN9[#)Σ7*UUzK"riqJ\Tb"U`beKLsשw=JQQ,,`uˏ:_.5;^{:zaulUhhD4cJԞ&$D#)Br0*Zb#tsrׂ' وL2nM@yiЪ)Q#)W;Ν* I7QCƼtlV|4AF#)#);檦‰SPXF@.ˊBnJU<f5g#H}N#-#ξml6Qǧ,2KQ&ј\*01<0:(e'&O#/!\4cF($1,Rޫ)Y4Fr9V#-6)z5 [E"QA҇8pfr`ƈ fW!FN'1 McdjB~)Ycd)Ƒx dFS#-cot,{)ٍ0X7#kͅtW&[˷kq:¿{עb=cJ`zBLQq?{ץҢKtaig]aBTtsCyGQ/GV+&56-y6 i"H#/A$Ș!@cj\U7.JQj GRO|phH!T9@6\fr#L(62b% mZ74IТMD&0$ٰvt#ń;ômwG 8kQJl!LU)hn8T4-" X #-#-ȭ[&fV.۹9ML5##|[Au_kA:QB3e'8`t%u"UJbCdMpiU#)lv5!Q =~86C"4(45""Co@6#NQi@> vhca79/_=L[8qÚ׋ƺ;q:Xt3ۖ=قWD- bP@-`ܧ&eQdt՟a5v#-jg>qcC9omRڷF3Lug);Y.E#`M=^C?|;${'/~fY4 2#)#-oN}Mmac@%XV"(bshI=c`͹{nP dƕ H&4 BL,fh#/l#)S`X g7C1 SH0`oaF@M!شȸ2|mB΃ev5 گ$y#dE{5Rɠӿ̾'1x? EiTלjJpc,̸[|$"OrZR~eA`VEW6mEomj]-. vw\N/Ջrw⫕H#)33Y4\.zܼkZReHВ L+L$&5I0biC%4DEic^C&J%2hS&&i#0(Њ%(_uIdPJbRYC#-PLJA2E2VR( 5R1#-3ii AirMmN##/_)b||X&A~lU_SBݘ3fD~w9lY!,A׉i3@s9` gŊ1%q.G\ήbvF$F~%݋}%<,媗d/v%ۚ#27D#b! 9ufT`ckuݹbm d Z^o_bc5#fV*(i`BXyϗ}u3aDPn ;~v{3= ʩ =z0RS8Hթ)[8͏~O~4L+: 18wR>~֟N3=N%ڡ9W2AgˈL0=m p{">N"/C)QR #/U$I#)ܙ1 HQ~~Yw1R="(2F^#->p}1Jx nkw<;YP4p}Z~tI-O>oiȸ*s.#/mf8XP†Uyk4₶0#)IBFMwp$76[j t@BLvQ+1-/YӇ:whג]mw3FWbTrCs/ )X{N L'&BbP{2vN#-"!UEeHUJʳKh#Ħa iFELŒtӃ{m?71csQtΣCL[l͌9B XgFE5(Ԧ.3ZHX\o m.tfں-`O6)A-L^%$t/7Qæ ݦ 28?7\b.&e=Y$j,B9+Ҟ.o(ާt]iڃKT -tx3Fӕ3X$07 $llI9+HIѰ~Z !z/,7#/R[&*_4To#->02!n6#-ΩсĐLc:R7f"7JՆBh`XD12v2tџhF9 i5zY̳~s[icÓXt؂v&0#/ /#-r,)N4bц I.sП{Ɯ$.6ވYt|TzR3LNvY͔#|Ok ݶ!>3ONX}kQǖ(#;cCI4jspumZ6cxb.9{3#- PI=sXݮ2Pqu=ths4ZgV4BL1yRw"$kfM(}%meӊ`ݡ)C]4Ȗdz4r= aEPXiSW(m/ްɆ%+a[*ɾU쌦!2(ƪcfz9Rw\~9w2W<,Q!9n64 kKc2HupUrs)H1tîp\5NKMzɵQ4P\*[ Qyz#/iu%HjTHj&nĒ޸7fg6vqΰtyYzLk,]EƐ4=#/YE&)+afC\ı5F7w#/b=2"r\$d!'tfmlzU}ؒJ#/^n%"eB|8N0j۬}x7[5[sgWXf&,.~x}w8WaN.ff11%39n!Mrë\k({{lQU#ӨBYr㡭7ecs,c/Q%/58QzE<&eQ5Tl ܸ*#-O1W i#\[eqpUX6kC(WG12p8MMՃF9#i$#-ٜ]kc-ޱ&#)XQ:QTTU!D)E H)W<6ni'#-;&CtH,wUꝌybvv -U\)ٞ-8b;J|7o Ժ|&"P&zH9/FP9#)ii.To^Ň&mlJZ5/EpfǕ7LlV[̸Gvwifb]VjX]& %ސ LlM(GED,YӌfpVmrt1=D.Paţ#wbhTk!Kႂ`ȳ#`9>nqիIm)⁰'&xle,TmT E/,-û#-ұp04@!JQ&\,fn &SS4,&)U).:Jp$Btm$FZjlX%[Jakdr&\*N, jS5@сi5͜#-8 v!>9eV'A ء6ʹt`N3aTBeq=Fy\mC D0كitA;Hwn!l}qo]q+YLFjfcO:[!͎ @:4cC#C8-Aon4>ɫ YUq/gg'KD.YVg砠+Ʉ&tq#-)"[eb T rE[= Bԇ"4@AC#/f .x?"[R^(e)#/#/HZ@p[RXS8#K4t26I l]|/XZ5HTX$GaJtކ%ҷir(CNng7*C(Cb[8Kb 9bdmU0&22G6#auR"C#)a3dX]8hƎpUC=AD Fz0F nhg4g.3hn" '[w: c@sdhقə5Fdu"##)DNsR~9Ƥ@:@TC8 8( rO-L(C$SURaϥVCN ~Qdpq}8qispj)ѼduQv"ì#5bۨXE0@Cq*G\'IeKZF̓$d!#xF##Cow`dpCp"o #-HRCF#/AgU֠mO"#-1#`B7 B*#)BƊ!Cd^>qJʁm0bgb4lFF-#/^!\C$&X7^=<,p?-dȸ|Ar~m>Lr=ٗFwG*ɽf&y.U1{|&3pZ5[&dBboQ*4#/:`Z04Αs.7 ϖFiE#-%4x{1".\b3#/٠NGQ0J)5XѨj$Ƣ&IfAE,bַ>IJSJS޿2 tho@A0~^6IfOm'Zy@%9DAʀ0O'W2xLZt.@Iʁ]ْ4UHm$?#-E@!ۮI@)Ŵ-4LdpR7Qzx^w\ߵ^ʺ@nɁ0ɅE1 i Ь$Ŗ]P)-jdae"f83T"s{F3:сYhxrF0#/K{oRCf< (z#-sdd2Րin.d#RUCuHq#/D-ZW$!F& !K)l^#)Hx IJd+FkL[//HyA;nQvId! D*, JR[?hk%u#/^#/ `0HhsI`_#)=*fV}31teq#k'*(3AŽc}"aV9+h&Eה|=uɟ"Ӓ)9x֐Ho*#|1)7v#HPފp(e\#-!4Yw*\[$!M`vhU#/i!Kbg:'5bCJZĭnj%N @"r+t﹵+EeGp0~=l$r/3 $Pc#-հ)†6eP%* UeYN9#/3l+Mrj]0ֹhč('<;XB&[M"ս1C!aa} QdBc2۫AK-nĨQ4IFI8#)ZH#/]y63Y @A]x?Xvה|ʤmozi"@?["(OΆ|l!ֶC7ALD>QuJb`FC+d& I#^#)vMY6Ս[Ijmi$ Sh}JFJ2byC+Qk>kyC0ZK⸚-J#-ՕUڎ[UȡogM8k;ĭLVfFTqK-fSe6MM[jZt42aSFt^&5 D#-QnfL2a$mn^1>ܑ$SNDIeRn.4AΆpT".Fg[S8"n)ʘ;x\:1iD*n%#/)7`$Hfn!T<Οh40+:IS&2lHYzZ <]"&B"ƅN ȤHCޕK6(kj4`u` ȚT/|qucX]ʥf̡&$r8ڥER.R#-]^qc]nmv#-4z 9ХJUr1:G'\AAlm!*\*l]鱀ܐ1q+V2S$nO'qK[njUWi5t)7]L?M2u nd4m߼"F)uQH{-#/nX#/I׍#)jm)ii[FF#)!=6&#)jEEV$2DTd05sou)UbfDd@!e"aւSaMw)EPA%QĶBQiISm63k&SE*Soܡe%eiI#/46e)MI6f2PX4el&I, V-RAQR*R*RU!$mJ!id(II&Ra44RTVDRdfԳY2hҒX`P$AH mYjCIoymk͛ZY+VWW=\ֽfFK`jB#)$("'2IFפ9;Crh9d#7+#-\֫㨂0{'~,唢jdC^o""y8igI*L0y#OGmKTI}Xq(gQ~Q=wz;c YwEgRk^S%Pkf2Fy.JQICK-ZZc;^ݹ@+rˎtOݾ3Hһ1FI@YmW##65JTAQ`v=k#/ T:TI[6'WPRv*W)AqM2Sb`]/b۫]%}Aq ֪<\v>hyT L~#R=)^ ~w"HRvGBNн(A[JBC<#-X#V͐TF#/߯C>7V^ 1d&yiؙc,8g:160b`v!h+յuz@Å/Hv  ~2&¤id-,1 H1@iII娊hnP#/9dhL6ڶ^خ4dXkFȲzE>epgK)=m!:D#- 5wn BnC#ݩZrF!N6ar%quj&d s@9*}(^zv3VT.4;3sΌ9ADJ1,"NU^4>I&Js08,"N2߸C^#)^fpTY#JbW @gUJfT(#-2p`8pv3{rcywwƙ1>5&7"H*1hҵ%$TҩRlTƆO$dMkLpے.yZnj#-/;]]ܠ@ $#8kX7 D!~^Ҫ() By1gaxu#/{WaÜ EHwD|g{{ǟmkXLu#]F\h̎NRMݢXbb(z&ƔpwyzsaZW)PNM;{p݌<1!ON-ϡe#/SY}Y#/F,0%q.FiؒMC2=9yr6[&edТ#T(2/"صkS)xݸ&\/djyۖPc nκe$tw}ᮋG}_fCr@F !}3c;.4bE;Zb~Jf^5f)'hwJM0VY6?Ґ,S&Fl7$& 6QkU2MJLIdlV-oΫr1b+Fx\%PF _jVE"Hhb.p+ b4,{ˮg2ZB[%%D(d c:cgTFG70AByͶEָHp2 MXbRi 5+?^婰nXG%x$ECUB9lM^.V~N#/JHi&,&2P5HE,FEFh5;[mZ~y26@,2囑q8ޣ#)!tH&Azm>O8< `"i( [`,n-gd(?,}sMp.E.#)$q#)%퉨7{Jo߭wQ)#)8T~ΠMdLd6_#Wf/r ΐ4K^n&Q2zi#/QV$q9?"HC]f\^ިoУxT,;:xCAx=ȠuBk))gG_H'V+kʶ\ںYVA**TPE`^)QY,䢴5;̸j?G0mM"n5 [~"dw^5?/pnV!i&'( j/+9A:: C[!as%E IH^E_c| Rgىu(0 Rg: ^z-5ʁ6ٷ(;͡dT5e֟;Ȩ"tP#8~aϳ$Q֐ޤ_֚?;0MuCF QT*qML)U$);Vhaԁ/owjVkV<`]u#/,Ii%stt`7l8`FAFL+]$eݵ&B)ɆޡLDqIlb-F̬FBjcUF%QT|Zjhŷj#-PÚ117) ]"W6mo&Ɩ!FFsؐb ZMF`L%YlBdo%#-*°0&P`NY%G]C[*1^Nۚ\Fһrr7Iz`T2,U"$md6gI1N,f0AΤ]aXH|8#-jƎCH\rCXtj4ihre-Ԅؗq-#-;P'Z@FA@/CKmz*L\6'ckwlfS25;ljh41#CՉt1 ו{&UgJJ!BI<5-fէtj7/+cRQeWUҢLtlacX媺Xm%{e YPu7V-J *?d}Xw"j@QHXHE~g`5?l"R<~.Vc/h!1#)RER #/$#/7G  'Auєe:ohKzM5MO7"ʫ4!x,aa)Rʮk6[2"dblTzŊ#)،h4Lc2#/&"4FT-cW,’[R``*#)hY(UPTQ#qjV?>]FhȵL.Xي4`O܆QK@T(^`b82e bNI,a"ƚ#)x78#)MEf*A.BYli2՗zÒؤa=#) .>~41ڋLŬ UIΝConԈGePFaX#/\k]**}"#)mA>ި#-\{#)lz.;4!WK^9wiKJTcj׼Uk)WQ56`#-w/ "Ѫ~R$ a*h3]l)T!wGj3sfӾ֑a$9ӪLM&MS M8ܼs8H⭾ca#GNfGK:#,1v4" ybiLH>#)F9[D$xlC= 䞗#/}l4HD@\S5$J P Xֵn*0g)Cl$qB'htWӯ\-nlQIu/$#)E?A<3˺ry~s{2&b|VG E/iA#/z|:#)E**:#-~B C'Il*܂%KtD4ByiS~\sþtP#)E0*d3=;i6BZR_QlEt̻ M/Y>δHOQzRX&p5psto\q4Ph #0\lfuN AX%T 76a!e?NB'i@P!r FRPئ)a"%0T$IɠO%'KpMvtG"xUQ# 9I2*<&<)=&ywo#)Ú6`ޘp%|f;`B*YJ;Ekoo􍫆Ed(ŐbPaͿg~'%E ͐ RlYX"QX|3R玓yr) }IzyE"#-PEC"{ʡH)E: eݭgM xɪDlQ#-#/(rQ5$mqIηI2hZ^k#)TU!fN/TmĄi\J~o@NBX6mZPd-9Y]oDyP~; #/#-;?JH[b~fH#-&Ⲝ*TNIFlS]2ɜAۗ'Gg֤Hޒ%?FV]TSĺ+njB~9Br,.Vi\o/}eȷik#/"1*`#)#) AI#)IE[%€Dd*@(U!>=-.rO^ĺj~VʬE3LLJwuU-Эk̬YQ2ѲZM[5z(#)ذIHRD>H/c0T[UjT>3P)N]gW.i,#/>ql#/;Z>jDb!ޓQB qRw@ !*#-,!f!LixݤΚ'U.Mhf"(7i/E G/FAb<"~YPUP&P!/jsl2,sg|]/ BAb47-mhۚ$ۺ j, ݭQtߪ*YMA_^ d,sm "d(QbH$7X6( ؤpR8LEQ(7%>D !.2 qs8`:\C֜ǬvjYV_ (UXj)8!EOiՎFazTkCN7t6a\!yNHReLҺ6y]Iz i0#N$[|M$VՒ佈އj>F$ M fhvc!0::UH̪񫭰ZܷWY4Քi۶؛[fu[+˻JVYF•*mUc[WƝObJV5 9[\ j,#/I=w`e#50u>Vdd{#-[r#- 0v#/% Э#+43@4jaw;bE,4#-qAo#)1#)bLz(ݠ_#-plɕ#/7l!OAsr>b2nlj+s#)oE~'>t^5cEXjӮk@5*f>*5Ut (̊x;Oߺ-SR$]'v5ÂkPX.KT GLv,6JB#)&?I-`5z.#mlAA[ Zip0];`RÖ$C}šX>(DI?X8"iѸtSH˥@~R~Ԩ6(:*@U#//%NtM,!2ߍ7Ck~PY0ّ#-4^)`)`$b6{(47 pp\D!k蚯axAӥgLeXdb;`7xd5Run]3\kCnxVD&ٙ$uGkt0xaJK-C0 ܗeElգzб}bXF9sSDUN繙0Wha#-u׼!幻PmהaФk!#/Yt>{2bAa#)ꪄ!s3S 1Anv3C/m#/|5]$(=|䏟^ w2tT]"#-ppR "]lPWֱpB1]\D@O*EZ#/6=680-M"uA#8ČCfUH&P;3}>}é  ifWSw]վ4FBj؞/.)G=ZS(w,9?3[TKDL%CXѓ2ÄS#ny_[4zJ8AvKz(z$qyzb$+^QFrm|4x4mjBQG4ȋBP2ČE2Dvhd(#)#V+#-#-a%J+dEaFb7H1JЇD(T&0D1~/aen)ᙐi3aCwciGO8a) P4-[y*6T 1`HXKdbb:&I.%7 GN'_a@noӫ/ozEň~F"G0Kyhzm6>m;MmT(XbjDMd֌R3=L7\ܯ7M^O7ɫ:)eYIN.Cmc4f33nNf3nawhAk3WX XA1;TXM$+[ ޹s;"~zE 7c@Q'DI #-Syx;:MnPjiamW\տ]0󂞉7eDL6d j+Zus)?a:+#-%͈tᩯg D+M} DlǩpO|#)!0Adp#/aDl- u%> #P, &BY5,9"jXͭktڤڻEkιtۛwnd9uxڊxeŤZF*T;XJ_䭤 %rء#/BKI`[|6nnaI}ا5rzrU-( QBFZb ]Vo7/填')0Đ.Y-Bz[5#/C, (JjEE6Qkjf*65̬4cL&fQ3&%SE3&WDT<3$C@b+OjM+ R,#iz<Oc|,#9uw|aEj:EZߝ֒Z7s}7YUk~5kp^-tin#m;:]JZۘsYRk+nfU]-4}!7g"1&Y}ERIJ#)aA4I& P1D Ij#/BM(*7JLC@]ACS]1NXϼ>vv>Mzfcd=*!sWZ$2,'4>F·"^&m#-S3ϺWs$PcLR+mM7Ga#ɷe8xJG?! 51HTYϡobVdͺhd7npE3i9F1KQv *B֪+Z$JW#")gȄT>b?"C،" s4?O#)s?U"U0U]#KecNA@~[-]k>nrgLp#-x5]r\ONΖ ̀QM2ohDLJM)3q[=#/x-QU14YE#)غ"P)Z 2H!p .I0X<D_ ;%;>ʤkjlF썶oV#)ωT#8I;ҧ?`< USE2@ Jdb"a,}ƒ*-@\|u+ClUWYZ5O/MC v9d6-\4ؔ^n+6YI#a6T6ݦ4Xh06rlnyv㮻e\"x%Q6[[sY4;wTFG7-tڲ[F,VuMdЦPtPO;QRH9x 邲*#)HRAA'*}Hxu)ijSLHuAq]ݨ&Gs؟ B$dT~Voεl(_9 >̺XY(#-( m|zS,z.c0kcc#- k} 12%AŶ(E39-oLJ5/i-4k[a^B׀dMXN3.7u٥c"hYf%2KIUj 3 &4hȉi z;^`#)s#py#)Q#- b,+65r^>F#-)("m H@-+၎`ŒQLsԱtY&ah# $Q襨$D32|q`djڲp9!BPGʩh}l<X+3T#j2JG&-@#-#/1}δ4$CiDIi!B[qSV.jjW!=rMمKaiGbg3En_a0~'m&mƀdNc]c02 JplTg!A34 c$eMbJ;&rߞLΰY7r=sU@3{{4թ'~3УRCiƙUcH<-ݧBe#-Ix(%Fd dukH#-J5Ac }[A=\q ׮İyLæty#/O8d!{dO#);vYoݕ^P[W_vHADI!dH(w/WAکՂ{k=IS&Ӌ!ۏ't}'PnpD}B>ٸPwxE#)iW,$rdы>i(Xt9C$Pt!'u#/IL~U#/ϙ wR"tz7J.e |ٱl&#Q1lw*)0B'| Bv/ٺ!6*#[?CG8sHH?U9)$s"_f]bS߰wMUN80Xxu1p3C_&UT7[ .eS&I҆##)Td"gCBy`0H[b@PlytI:1*2 EF/y馤0tI#/`#/pT5liYH"(gn{Zs\.^t; 2 Ox5}߽޽I~#)FeRDh(&Dj"%JHIdPZ6OR}$]"H!Δl厳lK6;]/iy5/s7F@(F-r1 8p>hԄh>\bC*l>Kn,.q2Q#/TG:J|''G8M2= Lmf7lICꊕyFF˃`j'eR ƛ#)4dC9?bʦ% akh˜&9T/ lG8|TMh0$#-ؕLd+o3sYl--^voBAX # 6cwKvG{^wѱUk \a[f1F20_@qRĥB&DCۢGY j$kEcRkL\#/pi %p|uW:^ Zb/#/a"iI545q8$nDZї1 RED_NwF\M`7a.$C<'5R_|g5#-#o!#Ch%m nT:)ŚPqsNjjhX 6Z#)Ąz#/ju{.ȄO۹e]!zH#)Z$P @9)Q EA0lqȚ,eښmMf1 4&$J +*ܖ(5TNUiҒF]mCl"- JQ#/Ymӭi6TJT-1X4t\JaJJU.*.TZ%n5F,x#-M=-,ȶgB&%m]*# ظkJE\)X*qe$+$ JdX5ӃL]*h1bȗ# 0mubXZ:#-5M2:Y"mE1fጒ.kRPn rnbZ@<(ӄ}2#-*^*0R;ê0Si8Ң "ȮA&liLUA<_:/ a0AQqkHꚭSZ؊ F7i3%0Uε eY2in#/L#MbAZ$Tr ,h4lU!̚px#!lU4M#/DM,)FH|3H ADfMH}cJfzMͅAJ@!s(O+pktCd|ErEB@!TDޑBi{9 RTC^# ,T"N+`Y/5QAƱ#)Ir ?UqbƷWWMAnH7A=Taj\l$Qrc > bXC :ha ΂$pu#/.<_V#aa͵61.X xۗfs,`6Z9' A+6xnk%R;G>әkWA+p#-_DdB9O׉ex(a('hN#Gyn{<"#/dhxC dJ _w|6v̦7@geҏve(xQOݐ픒mz@4q̴Zoűϼ]#-#.]^KMA@!ي<s#-EP@B_)Gs"ԁl?X:#-'4Ux#i(ICG0'"dl 1#)5Qۭhkk,DNEvEB!.QQwkm6eMdU(ȇ<Bt##)=tQT+L=TR2S{ZPvqP#);f_yހ$<=F䬛炾9=l8ȚkW[WVR$AK$eIfԔV,l%$MB[DZmEmKJ-KFTZlH# KZQ(0ZpRHW`ł,EP(e #-'r `\j< D*i@d(HI7#/#+#)&2KXHP(:0X 4ECJP*B*Z0$(B"#/X>ݝRЁˋD`K@r"(bJE)y( CT|{.1b=#٢أ֩#0N)܇5!D㼻t]J̡}˽Vj6- P8K·eVF#/RhmH#/2ga,A_)-BQe.͕)m1bchiěiJ%MYS||#/oѼDrC"lª<ﴺ{9ܩe:!Vjv~;/dS=Eh&/רur#)vAւX/2犢}=Ip~nxB?2d'"N>ilYD뢚"sm)+voKSU+\&ufp̺ԏ#)6A^#)R&i#-!5Tqtap{ScbQzj`a # b4r}i4o~r.N;:8㢦nKXwo8#-{wij$V/Jgp\>קLwIOQ;`pTq]8R|:Ct42oߌy,.m"e7Jxml2a$3@#-xzk}&6+bm8ř5Iyʪ΁ XtF%M'CenvгFͳ;T؆ Ehq!1Dl0c#)~#/']Ŵf+2 ڧ+^$4Rw[Ai3ĺގ7;BrIy$^34ѼqM&jT&JTcvڧkP:o<0{ZeWyϮbV4WKN 3ĕ۬ι8(u|@elYxǷpʘDû=1ow+]!;r.Lges-> #-G0MS{ )N?~HjG.PPt1fJeީtvь3z8Q>8ğf z3.{SP#m"B!?(E ewtlplpLx27q:hlSAC#)l3X#/"9{LJњ\DuV6Û'(QZ#  Dvbj/.qhaPcM`@C AePL">&9L~p][ev5Λ\6Kx;G3?U(dH)v]60bq׷><aݝ F_Fj-v9*Q-m1y6)51[v@T,%w aLQ ¥ d[3qe(T½K`ϙp*#4Fv]hPQGJ5$r[lb`[P+#-0H#)As-IcAX&@$- ,*#Q koi^Ro4J̅TZAG<1gxPM+BA22+#훞4qM'i>N&}HNLʃ"@q"fZҍn“17-q&}AX#-lSb9׋nF)TEBX8N&!@0I"80EIDNÐ).#o6II$T9Qo{8#)M4L)\tn)iXH#)l+=p3dCfuއF)ל|tg#)Au:Q 5T:o`CHO"Y0Lmmjfa~!#)>N%lh2FNa/j-/*.SD=}<&BB,Aw$Au|=Ԍ#ƓS@:8ڶ/@Q'Ksr[][4"Si*)iQDn-vW=VA_g5KM'RuZ_IJ+ 缐"Ⱦ'Mf[]hzro]mTd3+wKOE*NGש?اauH=β{-_`dFz3#/r<#/77V<@MZ1#-݃RfL~n#)9D`~)AdUL}#нJ;}٭$)NîtV.Z϶d8. r}#-p~Ll=Բ]4X`C$0aOHv'FIj &g>C#)pJr`{7s@q{ bQWIq靔zJ IscQFrX72-Y,FH sI![.y;H|YJwa*'*ƦxN#/%J"#)Qd#)a#) f _|˳ gmȷzԆ#)UCS+1j4t7FGjŁ1 IesFPy@p8eFfǭl&s-R)UHT+ jg#-#-q,-07k^Y9$7CɰMyQDT6R"?a bS"&j`pbH6h"+GӍ-h6gJ-2yiQ睬#/F*^)`^Pn9ɾL@Em#)@$'Nif! ,2ox?*}r/3p& #w0d&Ero5:fbZH@ ؿ4%)Ӡ /=mRc};]'ں%[/PA3P6{.7o %#-HRA]|ըX$Y#-#/JVLREFLR qlh'ˬ3R7yvh0WW4w"#/D;KC;UM#̢F#o XOѱ[=.3}tͧzf4xY8:Rm:L4+eA,>Y8;f$LK1r=I tW:1cvL4f\zmFD$pñ4S4Z 'fܦg0H6SDK;K.eψ[m0Zyk73kyL.®:ċu[[ixȇ-M]>eY,9 "zM"ֳJ0k%LMb]8\ᮛ}qʼ\ɸD&k CV^smvn,$dQŐ_j~E0Vlh<ؘ#/ˁz뜣WC]&&b(nH&l3ytҥg`qoP8qAqHFϹʎ[^,-D$N)6C c*K,#)sՀE%T`ޥԭU9kC#/^ZňIA!'WU𣱬5K`ِ#/͜11HPmQ4,T\q4柁I ddzsoPVh.m#Io{lM4|5fcL>"Ā&v͗'XXx맑65;vK:#rȧ=-1L}_.B5QR/6XZAlphoX,.̓帰0Fk#/`Кփ\߳},`nʈJHP+H*4S&z-4D6s8 9/s-۪h,D℔%Ҕ3B1HivZ7phb)b4"5 ݖf|ŧ0PmSM\ [_N#)!5zc+#vMpR3j23;^PIXga;]' ;۲i9C4;0k0b뚷dcxb4&!`,fR# 9g"Z,PjcUKaU8iEڊ#2G71AR{l[&ɚ4( m-#-i6Yb#-uR%F@bcáZh4&a BQ(d m2k!hE"+\¦C]@M-4 uKsM^LD6DS*vB]4,6"vApFÑTli4Ȃ@ġddj*m@v F r 126MP*!ըУC \$[+%0MKbDfMw<׻> 0!laE jm)8aY0l5UE$Ϥ{XQEDEƽ4xs7- PӴ@ A!"0E*Qdx)oN<ßjPe;EKDӦ7Y:(4-*n09O;`qjQthھHMw]/89IC5F#-x3b[:#/*OwD#)6gJe!DBHUzRYSAEB;40k4AvM2p#-*J;2;˕"p`e"din@#/Q-yZE4ɓ'ky2æ~Mi]HÀ'9i]¦窫[#:=yYg-1ջnc;ؾ1"ESF\x#S՗ *}vǽUK?4@d7i>#/HH(T#RД@or''QK*vZ0b#i`+|C"QoStCm&6,Ial%#bB@45*h#- J4?#/L1iHuTMcwbKDa*vmP͑f%Dp4p(cfiN 3Pe'm5#)xAG؈\hhJ1 ¼=#-G#/ iB#-hQ4eU=jbʯ,_YC\N|=Р~' ܣe9/958MHzѨpTbb>.%Ɯ.D;#)#):Ba9Ђ`1nk$ D¹KogkLY~1^H`1-(0(Q3v^;22(=}˲QMXk_ݭE%kZR7M"*8", b,( qMP0@ႄH "lz@hO~^)RL@="hmʷw8جA0"!|ãSUV o3@H#)"-1S˕5ݽp4^3`]bbNs$xjl%8Ai!O0ѲhL$#/rDEyveۓxKA(&@*b#iY'%:C, 5*;1,-"mf?2wr=\a 1V=3 7#-o]&a#/F^|Csq`mqK$#).k׆KR|>Ec:*'õnmtvAPEUjwM `D('Ş&;`-#/TCCZ񚷙#/3hFTT(b- eDT]WcC#)lo8oIa5_N4&=i|PD}Q9#)M4Aj@{#- {\N~OQzF+d#"Db) F)MK-1)AUlZ6ؑEMi+Wt4k6mu_c枸WVF`l؍q<:NsW1#)>47z:W?@;\ua&$ .lH=xǗ@ڥ@ T|.QN#/,糤$u>^,ݾ>}o~R&M#)7ƛhmNCMԥь;;$iL 57M'MHƬrKDMUKZ,pu$nI22n<vqp`@H)4$.#-KlEW!$&F4bsYL#rAeKhYr8hM #-ױꊜC2!8[+P|FS+"9oV0XXpm/Yc"hYC;\,âY &G$Q:tsb]2*'0'@G5A*t lTdZazg))~~o(b #-(C)@R]>[oVF]ϺGBnfrKYL~s(}^f"Fof /p J֍p6}SP!Ǿ͚롣5򊇐7bH9ȠP.^tl:u H$2c2<]FF$e};>UzyCd)(ļ^Echx[cż fP4J;UOڑM@Peo< @IbTQ7b {h#/ifJͫ~o4MFت6+kjJ^ޛzjQ#)-3a)ki\]O"#a$HNA@CeQL-fQlc+EkT(@'e(^#/4{rMIӼó"I⯈A6l!FOxO?ژs*kr!f!Ƀxv,!8g:I*z3{{,E |4T#/6XR n!ǻIK8NM?N@4S{ը#/ D(JsMZ#/$HB *ZړJMRvW歶m&㔀J\/*SRm/v]~ӏuQ>{<3#-Ytj rfn&yeF5и #)Z?v~/?[?壳O?w??_ۄz?ڿOP*X?˙"O0lS ̫|yp\)EX&?{EaT$$ϦV#-Wu\J#{՞HAviC\yb"6l{erd:n(.kA܀{?e=8+H1 @Zwfxŏ`G(JUh$SgNt?؈OU7K=>=#._ѹhPQ`XBe :vΘڳrݞ.ɫK.؍aܭ {Rodkۺ1٠- : a4hS*{F~ZX4CkFvjٻVVM ,r͙MGj#-[vZtGImƶ9T,vIg=ͅH0Ha3ZWWZsxl: ;n 7!N솃/>&kMN˖(W3$$b1kؼ@ˍ#)hB#-xe:սkȠ]ui64k)#/f|7l3#)9BFA6nwˆ14DY"%aCD#)# C.'C5ʊgLK3/\ m}߶@XD D'VT7]o?/’ni5m)q5ҙj6Tfi"b‚FqJ yЉ#)}! x7E[)hȼ&ĻR">@psOD![w3RtCMʪb1Eí'_8᭺&g>8dClFgotg,r.;@}r#/op !PAyt韈q~d:sLX@Þ4pLa>,5Ez«绵pm44~/q{.m\ЂIM7ex$߁cbmWWսM,#)0 R[/7`p AÒ܊1!I#-#-!@῕9I̝BzaX$26E߸gfNu##=-ƒzO_#/h6I@$fRztz#_wP}ErPѱA,Xnw#$JFPbQ! X"\؀H #/9 |=`?j!xt@O)G2˨m-8@u`9b b{D>N gAX7 ^[ c~qQ-y[Na x(w.[̖)kylBtWPAK#/#IBtu?zǼ\!w$S #/^p +#<== +#-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCgAdFiEEivIt5aBoIuNHTzxwSbTGfAUneqoFAl0q7gwACgkQSbTGfAUn\neqqqtQ/8Dcj08eNGla/JnosmW3PPuCVlA7mYOPBCmdyW3qhmB4/HNniLgprucwMm\nVkkqPzGkTbRXGliDAK3HDFlZsgjcse5PU5/E75bmBAkTMw11YMemAb1E+Z3xbgZR\n2AlfGM6GkQJN5Svfr70LX2nV2S0+Ck+3h6DqPMmBb65Poshes5LvTKPKM2D2CXqs\ngZwDFM3w4b5OXgqeum8On4cM3fxwzJxhw5NBX2Po26t/P7tAxEy+soP3exbtMOtT\nEK6QC08nxLshTKNkVPcgsRnt0lDSYKVeGvSAjMnYrHdCIIGpdiucmWaz1rCZL5He\nB/mcGy+eFbaYZhP4OP5RgizvH+tVqrgPZhRhfuJcU6b4WmmHcowfM+kbxYcptedz\nUM3BTh5WmVUJ08WI2fNyMS1PlufCYpbb/ItO49EsVceoaMfWCW1P0+tN+ZnQmojn\n7wQ+9CQOpP7CI1b8GEabygmef7RkeFMfeGKSA5ptLE5oLwtwVm63pronC/ebg5QQ\nUYWRtpUDZ2oSibyN5Mq5We+9/n0NMEajkPfO1raaFVffYf/zd+q7LN/NK/jwrhSE\nDYGmaTauyVpLW1lkUn1dD1cQJm85GaeSGsq+dyGfSsWdDhkjmKafS16S/DdmozUM\nWL1vkFRMgDPRPzGjh8Bze+bepSvrqOJBErz/ZZNnYQ9SwAV46k0=\n=sEkX\n-----END PGP SIGNATURE-----\n diff --git a/wscript b/wscript new file mode 100644 index 0000000..0f9ce45 --- /dev/null +++ b/wscript @@ -0,0 +1,88 @@ +# +# RTEMS Project (https://www.rtems.org/) +# +# Copyright (c) 2019 Vijay Kumar Banerjee. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "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 COPYRIGHT +# OWNER OR CONTRIBUTORS 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. + +# +# TODO: This file is a work in progress and isn't supposed to run yet. +# + +from __future__ import print_function + +rtems_version = "5" + +try: + import rtems_waf.rtems as rtems +except: + print("error: no rtems_waf git submodule; see README.waf") + import sys + sys.exit(1) + +import os.path +import runpy +import sys +try: + import configparser +except ImportError: + import ConfigParser as configparser +import waflib.Options + +builders = {} + +def bsp_init(ctx, env, contexts): + # This function generates the builders and adds build-xxx, clean-xxx and + # install-xxx targets for them. + + # Transform the commands to per build variant commands + commands = [] + for cmd in waflib.Options.commands: + if cmd.startswith(('build', 'clean', 'install')): + for builder in builders: + commands += [cmd + '-' + builder] + else: + commands += [cmd] + waflib.Options.commands = commands + +def init(ctx): + rtems.init(ctx, version = rtems_version, long_commands = True, + bsp_init = bsp_init) + +def options(opt): + rtems.options(opt) + opt.add_option("--enable-warnings", + action = "store_true", + default = False, + dest = "warnings", + help = "Enable all warnings. The default is quiet builds.") + +def bsp_configure(conf, arch_bsp): + env = conf.env.derive() + +def configure(conf): + conf.env.WARNINGS = conf.options.warnings + + rtems.configure(conf, bsp_configure) + +def build(bld): + rtems.build(bld) -- cgit v1.2.3