From da4a2024f2044f1208503289f85d0613344c9ca2 Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 16 Jun 2026 10:38:58 +0800 Subject: [PATCH 1/2] feat(jpeg): simplify decoder example and add pytest coverage --- .../include/driver/jpeg_decode.h | 4 +- .../test_apps/jpeg_test_apps/CMakeLists.txt | 4 +- .../jpeg_test_apps}/resources/esp1080.jpg | Bin .../jpeg_test_apps}/resources/esp720.jpg | Bin docs/en/api-reference/peripherals/jpeg.rst | 15 +- docs/zh_CN/api-reference/peripherals/jpeg.rst | 15 +- examples/peripherals/.build-test-rules.yml | 2 +- .../jpeg/jpeg_decode/CMakeLists.txt | 2 +- .../peripherals/jpeg/jpeg_decode/README.md | 91 ++++++--- .../jpeg/jpeg_decode/golden_output.ppm | Bin 0 -> 230415 bytes .../jpeg/jpeg_decode/main/CMakeLists.txt | 8 +- .../jpeg/jpeg_decode/main/Kconfig.projbuild | 18 -- .../jpeg/jpeg_decode/main/assets/image.jpg | Bin 0 -> 43700 bytes .../jpeg/jpeg_decode/open_raw_picture.py | 189 ------------------ .../jpeg/jpeg_decode/requirements.txt | 2 - .../jpeg/jpeg_decode/sdkconfig.defaults | 5 - .../peripherals/jpeg/jpeg_encode/README.md | 38 ++++ 17 files changed, 118 insertions(+), 275 deletions(-) rename {examples/peripherals/jpeg/jpeg_decode => components/esp_driver_jpeg/test_apps/jpeg_test_apps}/resources/esp1080.jpg (100%) rename {examples/peripherals/jpeg/jpeg_decode => components/esp_driver_jpeg/test_apps/jpeg_test_apps}/resources/esp720.jpg (100%) create mode 100644 examples/peripherals/jpeg/jpeg_decode/golden_output.ppm delete mode 100644 examples/peripherals/jpeg/jpeg_decode/main/Kconfig.projbuild create mode 100644 examples/peripherals/jpeg/jpeg_decode/main/assets/image.jpg delete mode 100644 examples/peripherals/jpeg/jpeg_decode/open_raw_picture.py delete mode 100644 examples/peripherals/jpeg/jpeg_decode/requirements.txt diff --git a/components/esp_driver_jpeg/include/driver/jpeg_decode.h b/components/esp_driver_jpeg/include/driver/jpeg_decode.h index 4266c9290b9..7381f8d1e4f 100644 --- a/components/esp_driver_jpeg/include/driver/jpeg_decode.h +++ b/components/esp_driver_jpeg/include/driver/jpeg_decode.h @@ -92,7 +92,9 @@ esp_err_t jpeg_decoder_get_info(const uint8_t *bit_stream, uint32_t stream_size, * returned through the `out_size` pointer. * * @note 1.Please make sure that the content of `bit_stream` pointer cannot be modified until this function returns. - * 2.Please note that the output size of image is always the multiple of 16 depends on protocol of JPEG. + * 2.For JPEGs encoded with YUV420 or YUV422 sampling, the decoded output dimensions can be padded + * to 16-pixel boundaries by the JPEG block layout. Make sure `decode_outbuf` is large enough for + * that padded output size, not only for the visible width and height. * * @param[in] decoder_engine Handle of the JPEG decoder instance to use for processing. * @param[in] decode_cfg Config structure of decoder. diff --git a/components/esp_driver_jpeg/test_apps/jpeg_test_apps/CMakeLists.txt b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/CMakeLists.txt index 8e38f175ba4..dd16512f6f1 100644 --- a/components/esp_driver_jpeg/test_apps/jpeg_test_apps/CMakeLists.txt +++ b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/CMakeLists.txt @@ -9,8 +9,8 @@ set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components") include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(jpeg_test) -target_add_binary_data(jpeg_test.elf "${IDF_PATH}/examples/peripherals/jpeg/jpeg_decode/resources/esp720.jpg" BINARY) -target_add_binary_data(jpeg_test.elf "${IDF_PATH}/examples/peripherals/jpeg/jpeg_decode/resources/esp1080.jpg" BINARY) +target_add_binary_data(jpeg_test.elf "resources/esp720.jpg" BINARY) +target_add_binary_data(jpeg_test.elf "resources/esp1080.jpg" BINARY) target_add_binary_data(jpeg_test.elf "resources/no_huff.jpg" BINARY) target_add_binary_data(jpeg_test.elf "resources/esp480.rgb" BINARY) diff --git a/examples/peripherals/jpeg/jpeg_decode/resources/esp1080.jpg b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/resources/esp1080.jpg similarity index 100% rename from examples/peripherals/jpeg/jpeg_decode/resources/esp1080.jpg rename to components/esp_driver_jpeg/test_apps/jpeg_test_apps/resources/esp1080.jpg diff --git a/examples/peripherals/jpeg/jpeg_decode/resources/esp720.jpg b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/resources/esp720.jpg similarity index 100% rename from examples/peripherals/jpeg/jpeg_decode/resources/esp720.jpg rename to components/esp_driver_jpeg/test_apps/jpeg_test_apps/resources/esp720.jpg diff --git a/docs/en/api-reference/peripherals/jpeg.rst b/docs/en/api-reference/peripherals/jpeg.rst index 6e17f37c49e..9cb8758b708 100644 --- a/docs/en/api-reference/peripherals/jpeg.rst +++ b/docs/en/api-reference/peripherals/jpeg.rst @@ -130,18 +130,13 @@ Overall, You can take following code as reference, the code is going to decode a .rgb_order = JPEG_DEC_RGB_ELEMENT_ORDER_BGR, }; - size_t tx_buffer_size; size_t rx_buffer_size; jpeg_decode_memory_alloc_cfg_t rx_mem_cfg = { .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, }; - jpeg_decode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, - }; - - uint8_t *bit_stream = (uint8_t*)jpeg_alloc_decoder_mem(jpeg_size, &tx_mem_cfg, &tx_buffer_size); + const uint8_t *bit_stream = embedded_jpeg_start; uint8_t *out_buf = (uint8_t*)jpeg_alloc_decoder_mem(1920 * 1088 * 3, &rx_mem_cfg, &rx_buffer_size); jpeg_decode_picture_info_t header_info; @@ -152,11 +147,11 @@ Overall, You can take following code as reference, the code is going to decode a There are some tips that can help you use this driver more accurately: -1. In above code, you should make sure the `bit_stream` and `out_buf` should be aligned by certain rules. We provide a helper function :cpp:func:`jpeg_alloc_decoder_mem` to help you malloc a buffer which is aligned in both size and address. +1. In above code, you should make sure the output buffer `out_buf` follows the driver's alignment requirements. We provide a helper function :cpp:func:`jpeg_alloc_decoder_mem` to help you allocate a buffer with aligned size and address. -2. The content of `bit_stream` buffer should not be changed until :cpp:func:`jpeg_decoder_process` returns. +2. The content of `bit_stream` should not be changed until :cpp:func:`jpeg_decoder_process` returns. This input buffer can come directly from flash-mapped embedded data or any other memory region that stays readable for the full call. -3. The width and height of output picture would be 16 bytes aligned if original picture is compressed by YUV420 or YUV422. For example, if the input picture is 1080*1920, the output picture will be 1088*1920. That is the restriction of jpeg protocol. Please provide sufficient output buffer memory. +3. If the source JPEG uses YUV420 or YUV422 sampling, the decoded output dimensions can be padded up to 16-pixel boundaries. For example, if the visible image size is 1080*1920, the decoder may require an output buffer sized for 1088*1920 pixels. This comes from the JPEG block layout, so please provide enough output buffer memory for the padded image, not only for the visible width and height. JPEG Encoder Engine ^^^^^^^^^^^^^^^^^^^ @@ -451,7 +446,7 @@ The JPEG driver usage of hardware resources and its dependency status are shown Application Examples -------------------- -- :example:`peripherals/jpeg/jpeg_decode` demonstrates how to use the JPEG hardware decoder to decode JPEG pictures of different sizes (1080p and 720p) into RGB format, showcasing the flexibility and speed of hardware decoding. +- :example:`peripherals/jpeg/jpeg_decode` demonstrates how to use the JPEG hardware decoder to parse one embedded JPEG, decode it into RGB888, stream the raw output as base64 over UART, and validate the result with pytest. - :example:`peripherals/jpeg/jpeg_encode` demonstrates how to use the JPEG hardware encoder to encode a 1080p picture, specifically converting `*.rgb` files to `*.jpg` files. diff --git a/docs/zh_CN/api-reference/peripherals/jpeg.rst b/docs/zh_CN/api-reference/peripherals/jpeg.rst index 515dc6c6bf2..a771605fb7b 100644 --- a/docs/zh_CN/api-reference/peripherals/jpeg.rst +++ b/docs/zh_CN/api-reference/peripherals/jpeg.rst @@ -130,18 +130,13 @@ JPEG 解码器引擎 .rgb_order = JPEG_DEC_RGB_ELEMENT_ORDER_BGR, }; - size_t tx_buffer_size; size_t rx_buffer_size; jpeg_decode_memory_alloc_cfg_t rx_mem_cfg = { .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, }; - jpeg_decode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, - }; - - uint8_t *bit_stream = (uint8_t*)jpeg_alloc_decoder_mem(jpeg_size, &tx_mem_cfg, &tx_buffer_size); + const uint8_t *bit_stream = embedded_jpeg_start; uint8_t *out_buf = (uint8_t*)jpeg_alloc_decoder_mem(1920 * 1088 * 3, &rx_mem_cfg, &rx_buffer_size); jpeg_decode_picture_info_t header_info; @@ -152,11 +147,11 @@ JPEG 解码器引擎 参考以下提示,可以更准确地使用该驱动程序: -1. 在上述代码中,应确保 `bit_stream` 和 `out_buf` 按照一定的规则对齐。可以通过 :cpp:func:`jpeg_alloc_decoder_mem` 函数来分配一个在大小和地址上都对齐的缓冲区。 +1. 在上述代码中,应确保输出缓冲区 `out_buf` 满足驱动的对齐要求。可以通过 :cpp:func:`jpeg_alloc_decoder_mem` 函数来分配一个在大小和地址上都对齐的缓冲区。 -2. 在 :cpp:func:`jpeg_decoder_process` 返回前, `bit_stream` 缓冲区的内容不应有更改。 +2. 在 :cpp:func:`jpeg_decoder_process` 返回前, `bit_stream` 指向的输入内容不应有更改。该输入缓冲区既可以直接来自映射到 flash 的嵌入式数据,也可以来自其他在整个调用期间保持可读的内存区域。 -3. 如果原始图片以 YUV420 或 YUV422 格式压缩,则输出图片的宽度和高度将会以 16 字节对齐。例如,如果输入图片大小为 1080*1920,则输出图片大小为 1088*1920。这是 jpeg 协议的限制,所以请准备足够的输出缓冲区内存。 +3. 如果源 JPEG 使用 YUV420 或 YUV422 采样方式,解码后的输出图像尺寸可能会被补齐到 16 像素边界。例如,当可见图像大小为 1080*1920 时,解码器可能需要按 1088*1920 像素来分配输出缓冲区。这来自 JPEG 的块布局限制,因此请按补齐后的图像尺寸而不是仅按可见宽高准备足够的输出缓冲区内存。 JPEG 编码器引擎 ^^^^^^^^^^^^^^^ @@ -451,7 +446,7 @@ Kconfig 选项 应用程序示例 ------------ -- :example:`peripherals/jpeg/jpeg_decode` 演示了如何使用 JPEG 硬件解码器将不同大小的 JPEG 图片(1080p 和 720p)解码为 RGB 格式,展示了硬件解码的速度和灵活性。 +- :example:`peripherals/jpeg/jpeg_decode` 演示了如何使用 JPEG 硬件解码器解析一张嵌入式 JPEG,将其解码为 RGB888,通过 UART 输出 base64 原始结果,并使用 pytest 做回归校验。 - :example:`peripherals/jpeg/jpeg_encode` 演示了如何使用 JPEG 硬件编码器编码一张 1080p 的图像,即将 `*.rgb` 文件转换为 `*.jpg` 文件。 diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index 7590febebf8..00aff054b4c 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -183,7 +183,7 @@ examples/peripherals/isp/multi_pipelines: examples/peripherals/jpeg/jpeg_decode: disable: - - if: SOC_JPEG_CODEC_SUPPORTED != 1 + - if: SOC_JPEG_DECODE_SUPPORTED != 1 depends_components: - esp_driver_jpeg diff --git a/examples/peripherals/jpeg/jpeg_decode/CMakeLists.txt b/examples/peripherals/jpeg/jpeg_decode/CMakeLists.txt index e7fedd35753..9eaee6b836c 100644 --- a/examples/peripherals/jpeg/jpeg_decode/CMakeLists.txt +++ b/examples/peripherals/jpeg/jpeg_decode/CMakeLists.txt @@ -5,4 +5,4 @@ cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) # "Trim" the build. Include the minimal set of components, main, and anything it depends on. idf_build_set_property(MINIMAL_BUILD ON) -project(jpeg_decode) +project(jpeg_decode_example) diff --git a/examples/peripherals/jpeg/jpeg_decode/README.md b/examples/peripherals/jpeg/jpeg_decode/README.md index ff99171c3e3..05201409354 100644 --- a/examples/peripherals/jpeg/jpeg_decode/README.md +++ b/examples/peripherals/jpeg/jpeg_decode/README.md @@ -5,21 +5,25 @@ ## Overview -This example demonstrates how to use the JPEG hardware decoder to decode a 1080p and a 720p picture: +This example demonstrates how to use the JPEG hardware decoder to decode one embedded JPEG image into `RGB888` raw bytes in default `BGR24` order. -If you have a bunch of big JPEG picture need to be decoded, such as `*.jpg` -> `*.rgb`, and this example uses hardware JPEG decoder to accelerate the decoding. +The example performs: -## How to use example +- Embedding `main/assets/image.jpg` into the application image +- Letting the JPEG decoder read the embedded JPEG bitstream directly from flash +- Parsing the JPEG header with `jpeg_decoder_get_info()` +- Decoding the image into an `RGB888` output buffer with default `BGR24` byte order +- Allocating the output buffer for padded dimensions when the JPEG block layout rounds width or height up to 16-pixel boundaries +- Base64-encoding the decoded raw pixels and printing them with machine-parseable UART markers +- Letting pytest rebuild `jpeg_decode_result.ppm` for inspection and compare it against `golden_output.ppm` -### Prerequisites Required +## Hardware Required -This example demonstrates the flexibility of decoding pictures by decoding two different sizes: one in 1080p and another in 720p. It showcases how you can easily modify the code to meet your specific requirements, such as only decoding 1080p photos. +Any board based on a supported target can be used. No SD card or external storage setup is required. -### Build and Flash +## Build and Flash -Before you start build and flash this example, please put the image `esp720.jpg` and `esp1080.jpg` in your sdcard. - -Enter `idf.py -p PORT flash monitor` to build, flash and monitor the project. +Run `idf.py -p PORT flash monitor` to build, flash and monitor the project. (To exit the serial monitor, type ``Ctrl-]``.) @@ -27,32 +31,53 @@ See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/l ## Example Output -```bash -I (1116) jpeg.example: Initializing SD card -I (1116) gpio: GPIO[43]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1126) gpio: GPIO[44]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1136) gpio: GPIO[39]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1146) gpio: GPIO[40]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1156) gpio: GPIO[41]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1166) gpio: GPIO[42]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (1416) gpio: GPIO[42]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -Name: SD64G -Type: SDHC/SDXC -Speed: 40.00 MHz (limit: 40.00 MHz) -Size: 60906MB -CSD: ver=2, sector_size=512, capacity=124735488 read_bl_len=9 -SSR: bus_width=4 -I (1436) jpeg.example: jpg_file_1080:/sdcard/esp1080.jpg -I (1696) jpeg.example: jpg_file_1080:/sdcard/esp720.jpg -I (1796) jpeg.example: header parsed, width is 1920, height is 1080 -I (1846) jpeg.example: raw_file_1080:/sdcard/out.rgb -I (11836) jpeg.example: raw_file_720:/sdcard/out2.rgb -I (13336) jpeg.example: Card unmounted -I (13336) main_task: Returned from app_main() +```text +Loading embedded JPEG from flash... +Embedded JPEG size: 43700 bytes +JPEG header parsed: width=320 height=240 +Decoding JPEG -> RGB888... +Decoded RGB888 size: 245760 bytes +JPEG_DECODE_INFO width=320 height=240 padded_width=320 padded_height=256 format=RGB888 encoding=base64 size=245760 +JPEG_DECODE_BASE64_BEGIN +JPEG_DECODE_BASE64 ... +JPEG_DECODE_BASE64 ... +JPEG_DECODE_BASE64_END +JPEG decode demo done. ``` -Also, the helper script [open_raw_picture.py](./open_raw_picture.py) simplifies the visualization of the output on your computer. For this to work, go to `examples/peripheral/jpeg/jpeg_decode` and install the requirements by running `pip install -r requirements.txt`. +`padded_width` and `padded_height` report the actual decoded buffer dimensions. For JPEGs whose block layout pads the output to 16-pixel boundaries, these values can be larger than the visible `width` and `height`, so the output buffer must be sized for the padded image. + +## Pytest Regression Check + +The accompanying `pytest_jpeg_decode.py` script waits for the `JPEG_DECODE_INFO` and `JPEG_DECODE_BASE64` markers, reconstructs the decoded raw pixel output, crops away padded rows, and saves the visible image as: + +- `dut.logdir/jpeg_decode_result.ppm` + +The test writes the `PPM` file and compares it with `golden_output.ppm`. This makes the example both a functional regression test and a host-side artifact generator for inspection. + +## Running Pytest Locally And Viewing The Image + +To run the pytest helper locally on hardware, build the example for your target first, then invoke the test script with the target and serial port: + +```bash +idf.py set-target esp32p4 build +pytest --target esp32p4 --port PORT pytest_jpeg_decode.py +``` + +Replace `esp32p4` with another supported target such as `esp32s31` when needed. + +`pytest-embedded` stores per-test logs under `$IDF_PATH/pytest-embedded/`. The script writes the reconstructed image to `jpeg_decode_result.ppm` inside that test log directory, so after the test finishes you can open the generated `PPM` file locally with an image viewer that supports `PPM` to inspect the decoded output. + +## Replacing The Embedded JPEG Asset + +If you want to try another input image, replace: + +- `main/assets/image.jpg` + +Keep the replacement as a baseline JPEG with the same general scale if you want UART log volume and test runtime to stay small. + +After replacing the asset, rerun the example and update `golden_output.ppm` from the generated `dut.logdir/jpeg_decode_result.ppm` artifact if the new output should become the expected result. ## Troubleshooting -(For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you as soon as possible.) \ No newline at end of file +(For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you as soon as possible.) diff --git a/examples/peripherals/jpeg/jpeg_decode/golden_output.ppm b/examples/peripherals/jpeg/jpeg_decode/golden_output.ppm new file mode 100644 index 0000000000000000000000000000000000000000..3face34b43d599c59b4efdb67663e334dcc501f4 GIT binary patch literal 230415 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
8huw0N)SDsg2&*clMY2|B4fSm#$!atK~@ea7k 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 literal 0 HcmV?d00001 diff --git a/examples/peripherals/jpeg/jpeg_decode/main/CMakeLists.txt b/examples/peripherals/jpeg/jpeg_decode/main/CMakeLists.txt index 96f77a9d2c8..1d366ad37fe 100644 --- a/examples/peripherals/jpeg/jpeg_decode/main/CMakeLists.txt +++ b/examples/peripherals/jpeg/jpeg_decode/main/CMakeLists.txt @@ -1,3 +1,5 @@ -idf_component_register(SRCS "jpeg_decode_main.c" - PRIV_REQUIRES fatfs esp_driver_jpeg esp_psram - INCLUDE_DIRS ".") +idf_component_register(SRCS "jpeg_decode_example_main.c" + PRIV_REQUIRES esp_driver_jpeg mbedtls + INCLUDE_DIRS ".") + +target_add_binary_data(${COMPONENT_LIB} "${CMAKE_CURRENT_LIST_DIR}/assets/image.jpg" BINARY RENAME_TO "example_jpeg") diff --git a/examples/peripherals/jpeg/jpeg_decode/main/Kconfig.projbuild b/examples/peripherals/jpeg/jpeg_decode/main/Kconfig.projbuild deleted file mode 100644 index f6154c38edd..00000000000 --- a/examples/peripherals/jpeg/jpeg_decode/main/Kconfig.projbuild +++ /dev/null @@ -1,18 +0,0 @@ -menu "JPEG Decode Example menu" - - config EXAMPLE_FORMAT_IF_MOUNT_FAILED - bool "Format the card if mount failed" - default n - help - If this config item is set, format_if_mount_failed will be set to true and the card will be formatted if - the mount has failed. - - config EXAMPLE_SDMMC_IO_POWER_INTERNAL_LDO - depends on SOC_SDMMC_IO_POWER_EXTERNAL - bool "SDMMC IO power supply comes from internal LDO (READ HELP!)" - default y - help - Please read the schematic first and check if the SDMMC VDD is connected to any internal LDO output. - If the SDMMC is powered by an external supplier, unselect me - -endmenu diff --git a/examples/peripherals/jpeg/jpeg_decode/main/assets/image.jpg b/examples/peripherals/jpeg/jpeg_decode/main/assets/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cacad0905071aeb6d88710ea0478e122988f060c GIT binary patch literal 43700 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 list[int] - with open(path, 'rb') as f: - data = f.read() - f.close() - new_data = [int(x) for x in data] - return new_data - - -def picture_show_rgb888(data, h, w): # type: (list[int], int, int) -> None - data = np.array(data).reshape(h, w, 3).astype(np.uint8) - cv.imshow('data', data) - cv.waitKey() - - -def picture_show_rgb565(data, h, w): # type: (list[int], int, int) -> None - - new_data = [0] * ((len(data) // 2) * 3) - for i in range(len(data)): - if i % 2 != 0: - new_data[3 * (i - 1) // 2 + 2] = (data[i] & 0xf8) - new_data[3 * (i - 1) // 2 + 1] |= (data[i] & 0x7) << 5 - else: - new_data[3 * i // 2] = (data[i] & 0x1f) << 3 - new_data[3 * i // 2 + 1] |= (data[i] & 0xe0) >> 3 - - new_data = np.array(new_data).reshape(h, w, 3).astype(np.uint8) - cv.imshow('data', new_data) - cv.waitKey() - - -def picture_show_gray(data, h, w): # type: (list[int], int, int) -> None - new_data = np.array(data).reshape(h, w, 1).astype(np.uint8) - cv.imshow('data', new_data) - cv.waitKey() - - -def convert_YUV_to_RGB(Y, U, V): # type: (NDArray, NDArray, NDArray) -> tuple[NDArray, NDArray, NDArray] - B = np.clip(Y + 1.7790 * (U - 128), 0, 255).astype(np.uint8) - G = np.clip(Y - 0.3455 * (U - 128) - 0.7169 * (V - 128), 0, 255).astype(np.uint8) - R = np.clip(Y + 1.4075 * (V - 128), 0, 255).astype(np.uint8) - - return B, G, R - - -def picture_show_yuv420(data, h, w): # type: (list[int], int, int) -> None - new_u = [0] * (h * w) - new_v = [0] * (h * w) - new_y = [0] * (h * w) - - for i in range(int(h * w * 1.5)): - is_even_row = ((i // (w * 1.5)) % 2 == 0) - if is_even_row: - if (i % 3 == 0): - new_u[(i // 3) * 2] = data[i] - new_u[(i // 3) * 2 + 1] = data[i] - else: - if (i % 3 == 0): - new_u[(i // 3) * 2] = new_u[int((i - (w * 1.5)) // 3) * 2] - new_u[(i // 3) * 2 + 1] = new_u[int((i - (w * 1.5)) // 3) * 2 + 1] - - for i in range(int(h * w * 1.5)): - if (i // (w * 1.5)) % 2 != 0 and (i % 3 == 0): - idx = (i // 3) * 2 - new_v[idx] = data[i] - new_v[idx + 1] = data[i] - - for i in range(int(h * w * 1.5)): - if (i // (w * 1.5)) % 2 == 0 and (i % 3 == 0): - idx = (i // 3) * 2 - new_v[idx] = new_v[int((i + (w * 1.5)) // 3) * 2] - new_v[idx + 1] = new_v[int((i + (w * 1.5)) // 3) * 2 + 1] - - new_y = [data[i] for i in range(int(h * w * 1.5)) if i % 3 != 0] - - Y = np.array(new_y) - U = np.array(new_u) - V = np.array(new_v) - - B, G, R = convert_YUV_to_RGB(Y, U, V) - # Merge channels - new_data = np.stack((B, G, R), axis=-1) - new_data = np.array(new_data).reshape(h, w, 3).astype(np.uint8) - - # Display the image - cv.imshow('data', new_data) - cv.waitKey() - - -def picture_show_yuv422(data, h, w): # type: (list[int], int, int) -> None - # Reshape the input data to a 2D array - data_array = np.array(data).reshape(h, w * 2) - - # Separate Y, U, and V channels - Y = data_array[:, 1::2] - U = data_array[:, 0::4].repeat(2, axis=1) - V = data_array[:, 2::4].repeat(2, axis=1) - - # Convert YUV to RGB - B, G, R = convert_YUV_to_RGB(Y, U, V) - - # Merge channels - new_data = np.stack((B, G, R), axis=-1) - - # Display the image - cv.imshow('data', new_data) - cv.waitKey() - - -def picture_show_yuv444(data, h, w): # type: (list[int], int, int) -> None - # Reshape the input data to a 2D array - data_array = np.array(data).reshape(h, w * 3) - - # Separate Y, U, and V channels - Y = data_array[:, 2::3] - U = data_array[:, 1::3] - V = data_array[:, 0::3] - - # Convert YUV to RGB - B, G, R = convert_YUV_to_RGB(Y, U, V) - - # Merge channels - new_data = np.stack((B, G, R), axis=-1) - - # Display the image - cv.imshow('data', new_data) - cv.waitKey() - - -def main(): # type: () -> None - parser = argparse.ArgumentParser(description='which mode need to show') - - parser.add_argument( - '--pic_path', - type=str, - help='What is the path of your picture', - required=True) - - parser.add_argument( - '--pic_type', - type=str, - help='What type you want to show', - required=True, - choices=['rgb565', 'rgb888', 'gray', 'yuv422', 'yuv420', 'yuv444']) - - parser.add_argument( - '--height', - type=int, - help='the picture height', - default=480) - - parser.add_argument( - '--width', - type=int, - help='the picture width', - default=640) - - args = parser.parse_args() - - height = args.height - width = args.width - - data = open_picture(args.pic_path) - if (args.pic_type == 'rgb565'): - picture_show_rgb565(data, height, width) - elif (args.pic_type == 'rgb888'): - picture_show_rgb888(data, height, width) - elif (args.pic_type == 'gray'): - picture_show_gray(data, height, width) - elif (args.pic_type == 'yuv420'): - picture_show_yuv420(data, height, width) - elif (args.pic_type == 'yuv422'): - picture_show_yuv422(data, height, width) - elif (args.pic_type == 'yuv444'): - picture_show_yuv444(data, height, width) - else: - print('This type is not supported in this script!') - - -if __name__ == '__main__': - main() diff --git a/examples/peripherals/jpeg/jpeg_decode/requirements.txt b/examples/peripherals/jpeg/jpeg_decode/requirements.txt deleted file mode 100644 index b96544bd0b2..00000000000 --- a/examples/peripherals/jpeg/jpeg_decode/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -opencv-python -numpy diff --git a/examples/peripherals/jpeg/jpeg_decode/sdkconfig.defaults b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.defaults index 38db6f4e61e..cc641ea6033 100644 --- a/examples/peripherals/jpeg/jpeg_decode/sdkconfig.defaults +++ b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.defaults @@ -1,6 +1 @@ -# SPIRAM configurations - -CONFIG_IDF_EXPERIMENTAL_FEATURES=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_MODE_HEX=y -CONFIG_SPIRAM_SPEED_200M=y diff --git a/examples/peripherals/jpeg/jpeg_encode/README.md b/examples/peripherals/jpeg/jpeg_encode/README.md index 507a079dc10..be171117168 100644 --- a/examples/peripherals/jpeg/jpeg_encode/README.md +++ b/examples/peripherals/jpeg/jpeg_encode/README.md @@ -30,6 +30,44 @@ See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/l ## Example Output +```text +Loading embedded BGR24 image from flash... +Embedded raw image size: 2764800 bytes +Encoding BGR24(raw) -> JPEG... +Encoded JPEG size: 30795 bytes +JPEG_META width=1280 height=720 format=JPEG encoding=base64 size=30795 +JPEG_BASE64_BEGIN +JPEG_BASE64 ... +JPEG_BASE64 ... +JPEG_BASE64_END +JPEG encode demo done. +``` + +## Pytest Visual Check + +The accompanying `pytest_jpeg_encode.py` script captures the `JPEG_META` and `JPEG_BASE64` output, reconstructs the encoded JPEG, and saves it as: + +- `dut.logdir/jpeg_encode_result.jpeg` + +It also compares the generated JPEG with `golden_output.jpeg`. This turns the example into both a functional regression test and a host-side artifact generator that makes the encoded result easy to inspect. + +## Running Pytest Locally And Viewing The Image + +To run the pytest helper locally on hardware, build the example for your target first, then invoke the test script with the target and serial port: + +```bash +idf.py set-target esp32p4 build +pytest --target esp32p4 --port PORT pytest_jpeg_encode.py +``` + +Replace `esp32p4` with another supported target such as `esp32s31` when needed. + +`pytest-embedded` stores per-test logs under `$IDF_PATH/pytest-embedded/`. The script writes the reconstructed image to `jpeg_encode_result.jpeg` inside that test log directory, so after the test finishes you can open the generated JPEG locally with any image viewer to inspect the encoded output. + +## Replacing The Embedded RGB Asset + +If you want to regenerate a compatible raw frame from another input image, one simple workflow is: + ```bash I (1114) jpeg.example: Initializing SD card I (1114) gpio: GPIO[43]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 From 0bcccf3206a4bda6e6d32b548ec85d828beb681c Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Mon, 29 Jun 2026 11:09:17 +0800 Subject: [PATCH 2/2] fix(jpeg): JPEG can encode and decode in encryption situation --- components/esp_driver_jpeg/jpeg_common.c | 17 +- components/esp_driver_jpeg/jpeg_decode.c | 25 +- components/esp_driver_jpeg/jpeg_encode.c | 23 +- components/esp_driver_jpeg/jpeg_private.h | 25 +- docs/en/api-reference/peripherals/jpeg.rst | 93 +++-- docs/zh_CN/api-reference/peripherals/jpeg.rst | 93 +++-- .../main/jpeg_decode_example_main.c | 154 +++++++ .../jpeg/jpeg_decode/main/jpeg_decode_main.c | 204 --------- .../jpeg/jpeg_decode/pytest_jpeg_decode.py | 240 +++++++++++ .../jpeg/jpeg_decode/sdkconfig.ci.default | 1 + .../jpeg/jpeg_decode/sdkconfig.ci.flash_enc | 7 + .../jpeg/jpeg_encode/golden_output.jpeg | Bin 0 -> 30900 bytes .../jpeg/jpeg_encode/main/CMakeLists.txt | 6 +- .../jpeg/jpeg_encode/main/Kconfig.projbuild | 18 - .../jpeg/jpeg_encode/main/assets/esp720p.rgb | 393 ++++++++++++++++++ .../main/jpeg_encode_example_main.c | 120 ++++++ .../jpeg/jpeg_encode/main/jpeg_encode_main.c | 153 ------- .../jpeg/jpeg_encode/partitions.csv | 4 + .../jpeg/jpeg_encode/pytest_jpeg_encode.py | 146 +++++++ .../jpeg/jpeg_encode/resources/esp1080.rgb | 97 ----- .../jpeg/jpeg_encode/sdkconfig.ci.default | 1 + .../jpeg/jpeg_encode/sdkconfig.ci.flash_enc | 7 + .../jpeg/jpeg_encode/sdkconfig.defaults | 8 + .../jpeg_encode/sdkconfig.defaults.esp32p4 | 6 - 24 files changed, 1293 insertions(+), 548 deletions(-) create mode 100644 examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_example_main.c delete mode 100644 examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_main.c create mode 100644 examples/peripherals/jpeg/jpeg_decode/pytest_jpeg_decode.py create mode 100644 examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.default create mode 100644 examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.flash_enc create mode 100644 examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg delete mode 100644 examples/peripherals/jpeg/jpeg_encode/main/Kconfig.projbuild create mode 100644 examples/peripherals/jpeg/jpeg_encode/main/assets/esp720p.rgb create mode 100644 examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c delete mode 100644 examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c create mode 100644 examples/peripherals/jpeg/jpeg_encode/partitions.csv create mode 100644 examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py delete mode 100644 examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb create mode 100644 examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.default create mode 100644 examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.flash_enc create mode 100644 examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults delete mode 100644 examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 diff --git a/components/esp_driver_jpeg/jpeg_common.c b/components/esp_driver_jpeg/jpeg_common.c index 28f9b54a2b9..3be45a368cc 100644 --- a/components/esp_driver_jpeg/jpeg_common.c +++ b/components/esp_driver_jpeg/jpeg_common.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,6 +22,7 @@ #endif #include "esp_log.h" #include "esp_check.h" +#include "esp_psram.h" static const char *TAG = "jpeg.common"; @@ -198,3 +199,17 @@ esp_err_t jpeg_check_intr_priority(jpeg_codec_handle_t jpeg_codec, int intr_prio ESP_RETURN_ON_FALSE(!intr_priority_conflict, ESP_ERR_INVALID_STATE, TAG, "intr_priority conflict, already is %d but attempt to %d", jpeg_codec->intr_priority, intr_priority); return ret; } + +bool jpeg_check_dma2d_buffer(const void *buffer) +{ +#if CONFIG_SECURE_FLASH_ENC_ENABLED + // jpeg cannot handle encrypted data. + if (esp_ptr_external_ram(buffer) && !esp_psram_ptr_is_no_enc(buffer)) { + return false; + } + if (esp_ptr_in_drom(buffer)) { + return false; + } +#endif + return true; +} diff --git a/components/esp_driver_jpeg/jpeg_decode.c b/components/esp_driver_jpeg/jpeg_decode.c index 1508d97984b..ee641367c93 100644 --- a/components/esp_driver_jpeg/jpeg_decode.c +++ b/components/esp_driver_jpeg/jpeg_decode.c @@ -17,6 +17,7 @@ #include "hal/cache_ll.h" #include "hal/cache_hal.h" #include "hal/jpeg_defs.h" +#include "hal/hal_utils.h" #include "freertos/FreeRTOS.h" #include "freertos/queue.h" #include "freertos/semphr.h" @@ -268,6 +269,10 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_ //TODO: IDF-9637 ESP_RETURN_ON_FALSE(esp_dma_is_buffer_alignment_satisfied(decode_outbuf, outbuf_size, dma_mem_info), ESP_ERR_INVALID_ARG, TAG, "jpeg decode decode_outbuf or out_buffer size is not aligned, please use jpeg_alloc_decoder_mem to malloc your buffer"); + // both the bitstream and output buffer are accessed by the 2D-DMA + ESP_RETURN_ON_FALSE(jpeg_check_dma2d_buffer(bit_stream) && jpeg_check_dma2d_buffer(decode_outbuf), ESP_ERR_INVALID_ARG, TAG, + "jpeg decode buffer is not 16-byte aligned or not in unencrypted PSRAM, please use jpeg_alloc_decoder_mem to malloc your buffer"); + esp_err_t ret = ESP_OK; if (decoder_engine->codec_base->pm_lock) { @@ -399,15 +404,21 @@ void *jpeg_alloc_decoder_mem(size_t size, const jpeg_decode_memory_alloc_cfg_t * FOr input buffer(for decoder is PSRAM write to 2DDMA), no restriction for any align (both cache writeback and requirement from 2DDMA). */ size_t cache_align = 0; + size_t buffer_align = 0; esp_cache_get_alignment(MALLOC_CAP_SPIRAM, &cache_align); - if (mem_cfg->buffer_direction == JPEG_DEC_ALLOC_OUTPUT_BUFFER) { - size = JPEG_ALIGN_UP(size, cache_align); - *allocated_size = size; - return heap_caps_aligned_calloc(cache_align, 1, size, MALLOC_CAP_SPIRAM); - } else { - *allocated_size = size; - return heap_caps_calloc(1, size, MALLOC_CAP_SPIRAM); + buffer_align = MAX(cache_align, JPEG_DMA2D_BUFFER_ALIGN); + size = JPEG_ALIGN_UP(size, buffer_align); + *allocated_size = size; + // To simplify the logic, we always use the LCM of cache and 2D-DMA alignment to satisfy both requirements + void *buffer = heap_caps_aligned_calloc(buffer_align, 1, size, JPEG_SPIRAM_ALLOC_CAPS); + if (buffer == NULL) { +#if CONFIG_SPIRAM_ENC_EXEMPT + ESP_LOGE(TAG, "no mem for %zu bytes decode buffer in unencrypted PSRAM, please enlarge CONFIG_SPIRAM_ENC_EXEMPT_SIZE", size); +#else + ESP_LOGE(TAG, "no mem for %zu bytes decode buffer", size); +#endif } + return buffer; } /**************************************************************** diff --git a/components/esp_driver_jpeg/jpeg_encode.c b/components/esp_driver_jpeg/jpeg_encode.c index cd18161d022..a5b2592a01c 100644 --- a/components/esp_driver_jpeg/jpeg_encode.c +++ b/components/esp_driver_jpeg/jpeg_encode.c @@ -19,6 +19,7 @@ #include "hal/jpeg_ll.h" #include "hal/cache_hal.h" #include "hal/cache_ll.h" +#include "hal/hal_utils.h" #include "esp_private/dma2d.h" #include "jpeg_private.h" #include "driver/jpeg_encode.h" @@ -169,6 +170,8 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_ ESP_RETURN_ON_FALSE(bit_stream, ESP_ERR_INVALID_ARG, TAG, "jpeg encode output buffer is null"); ESP_RETURN_ON_FALSE(out_size, ESP_ERR_INVALID_ARG, TAG, "jpeg encode picture out_size is null"); ESP_RETURN_ON_FALSE(((uintptr_t)bit_stream % cache_hal_get_cache_line_size(CACHE_LL_LEVEL_EXT_MEM, CACHE_TYPE_DATA)) == 0, ESP_ERR_INVALID_ARG, TAG, "jpeg encode bit stream is not aligned, please use jpeg_alloc_encoder_mem to malloc your buffer"); + // both the input picture and output bitstream are accessed by the 2D-DMA + ESP_RETURN_ON_FALSE(jpeg_check_dma2d_buffer(encode_inbuf) && jpeg_check_dma2d_buffer(bit_stream), ESP_ERR_INVALID_ARG, TAG, "jpeg encode buffer is not 16-byte aligned or not in unencrypted PSRAM, please use jpeg_alloc_encoder_mem to malloc your buffer"); esp_err_t ret = ESP_OK; @@ -382,15 +385,21 @@ void *jpeg_alloc_encoder_mem(size_t size, const jpeg_encode_memory_alloc_cfg_t * For input buffer(for decoder is PSRAM write to 2DDMA), no restriction for any align (both cache writeback and requirement from 2DDMA). */ size_t cache_align = 0; + size_t buffer_align = 0; esp_cache_get_alignment(MALLOC_CAP_SPIRAM, &cache_align); - if (mem_cfg->buffer_direction == JPEG_ENC_ALLOC_OUTPUT_BUFFER) { - size = JPEG_ALIGN_UP(size, cache_align); - *allocated_size = size; - return heap_caps_aligned_calloc(cache_align, 1, size, MALLOC_CAP_SPIRAM); - } else { - *allocated_size = size; - return heap_caps_calloc(1, size, MALLOC_CAP_SPIRAM); + buffer_align = MAX(cache_align, JPEG_DMA2D_BUFFER_ALIGN); + size = JPEG_ALIGN_UP(size, buffer_align); + *allocated_size = size; + // To simplify the logic, we always use the LCM of cache and 2D-DMA alignment to satisfy both requirements + void *buffer = heap_caps_aligned_calloc(buffer_align, 1, size, JPEG_SPIRAM_ALLOC_CAPS); + if (buffer == NULL) { +#if CONFIG_SPIRAM_ENC_EXEMPT + ESP_LOGE(TAG, "no mem for %zu bytes encode buffer in unencrypted PSRAM, please enlarge CONFIG_SPIRAM_ENC_EXEMPT_SIZE", size); +#else + ESP_LOGE(TAG, "no mem for %zu bytes encode buffer", size); +#endif } + return buffer; } /**************************************************************** diff --git a/components/esp_driver_jpeg/jpeg_private.h b/components/esp_driver_jpeg/jpeg_private.h index 0af4bfce83c..60006a4b945 100644 --- a/components/esp_driver_jpeg/jpeg_private.h +++ b/components/esp_driver_jpeg/jpeg_private.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -31,6 +31,17 @@ extern "C" { #define JPEG_INTR_ALLOC_FLAG (ESP_INTR_FLAG_SHARED) #define JPEG_ALIGN_UP(num, align) (((num) + ((align) - 1)) & ~((align) - 1)) +// Buffers fed to the 2D-DMA must be at least 16-byte aligned. +#define JPEG_DMA2D_BUFFER_ALIGN 16 + +// The JPEG codec cannot work with encrypted buffer, because it deals with macro block. When an +// unencrypted PSRAM region is reserved (CONFIG_SPIRAM_ENC_EXEMPT), codec buffers +// must come from it; otherwise use normal PSRAM. +#if CONFIG_SPIRAM_ENC_EXEMPT +#define JPEG_SPIRAM_ALLOC_CAPS (MALLOC_CAP_SPIRAM_NO_ENC) +#else +#define JPEG_SPIRAM_ALLOC_CAPS (MALLOC_CAP_SPIRAM) +#endif typedef struct jpeg_decoder_t jpeg_decoder_t; typedef struct jpeg_encoder_t jpeg_encoder_t; @@ -245,6 +256,18 @@ esp_err_t jpeg_isr_deregister(jpeg_codec_handle_t jpeg_codec, jpeg_isr_handler_t */ esp_err_t jpeg_check_intr_priority(jpeg_codec_handle_t jpeg_codec, int intr_priority); +/** + * @brief Validate a user buffer that will be accessed by the 2D-DMA + * + * The buffer must be 16-byte aligned. When CONFIG_SPIRAM_ENC_EXEMPT is enabled, + * a PSRAM buffer must reside in the unencrypted carve-out, since the 2D-DMA + * cannot access encrypted PSRAM. Internal RAM buffers are always accepted. + * + * @param buffer Buffer pointer provided by the user + * @return true if the buffer can be used by the 2D-DMA, false otherwise + */ +bool jpeg_check_dma2d_buffer(const void *buffer); + #ifdef __cplusplus } #endif diff --git a/docs/en/api-reference/peripherals/jpeg.rst b/docs/en/api-reference/peripherals/jpeg.rst index 9cb8758b708..ca0c1f9ac4f 100644 --- a/docs/en/api-reference/peripherals/jpeg.rst +++ b/docs/en/api-reference/peripherals/jpeg.rst @@ -17,15 +17,18 @@ Functional Overview This document covers the following sections: -- `Resource Allocation <#resource-allocation>`__ - covers how to allocate JPEG resources with properly set of configurations. It also covers how to recycle the resources when they finished working. -- `Finite State Machine <#finite-state-machine>`__ - covers JPEG workflow. Introduce how jpeg driver uses internal resources and its software process. -- `JPEG Decoder Engine <#jpeg-decoder-engine>`__ - covers behavior of JPEG decoder engine. Introduce how to use decoder engine functions to decode an image (from jpg format to raw format). -- `JPEG Encoder Engine <#jpeg-encoder-engine>`__ - covers behavior of JPEG encoder engine. Introduce how to use encoder engine functions to encode an image (from raw format to jpg format). -- `Performance Overview <#performance-overview>`__ - covers encoder and decoder performance. -- `Pixel Storage Layout for Different Color Formats <#pixel-storage-layout-for-different-color-formats>`__ - covers color space order overview required in this JPEG decoder and encoder. -- `Thread Safety <#thread-safety>`__ - lists which APIs are guaranteed to be thread safe by the driver. -- `Power Management <#power-management>`__ - describes how JPEG driver would be affected by power consumption. -- `Kconfig Options <#kconfig-options>`__ - lists the supported Kconfig options that can bring different effects to the driver. +- :ref:`jpeg-resource-allocation` - covers how to allocate JPEG resources with properly set of configurations. It also covers how to recycle the resources when they finished working. +- :ref:`jpeg-finite-state-machine` - covers JPEG workflow. Introduce how jpeg driver uses internal resources and its software process. +- :ref:`jpeg-decoder-engine` - covers behavior of JPEG decoder engine. Introduce how to use decoder engine functions to decode an image (from jpg format to raw format). +- :ref:`jpeg-encoder-engine` - covers behavior of JPEG encoder engine. Introduce how to use encoder engine functions to encode an image (from raw format to jpg format). +- :ref:`jpeg-performance-overview` - covers encoder and decoder performance. +- :ref:`jpeg-pixel-storage-layout` - covers color space order overview required in this JPEG decoder and encoder. +- :ref:`jpeg-thread-safety` - lists which APIs are guaranteed to be thread safe by the driver. +- :ref:`jpeg-power-management` - describes how JPEG driver would be affected by power consumption. +- :ref:`jpeg-flash-encryption` - describes how to use the JPEG codec correctly when flash/PSRAM encryption is enabled. +- :ref:`jpeg-kconfig-options` - lists the supported Kconfig options that can bring different effects to the driver. + +.. _jpeg-resource-allocation: Resource Allocation ^^^^^^^^^^^^^^^^^^^ @@ -85,6 +88,8 @@ If a previously installed JPEG engine is no longer needed, it's recommended to r ESP_ERROR_CHECK(jpeg_del_encoder_engine(encoder_engine)); +.. _jpeg-finite-state-machine: + Finite State Machine ^^^^^^^^^^^^^^^^^^^^ @@ -96,6 +101,8 @@ The JPEG driver usage of hardware resources and its process workflow are shown i JPEG finite state machine +.. _jpeg-decoder-engine: + JPEG Decoder Engine ^^^^^^^^^^^^^^^^^^^ @@ -153,6 +160,8 @@ There are some tips that can help you use this driver more accurately: 3. If the source JPEG uses YUV420 or YUV422 sampling, the decoded output dimensions can be padded up to 16-pixel boundaries. For example, if the visible image size is 1080*1920, the decoder may require an output buffer sized for 1088*1920 pixels. This comes from the JPEG block layout, so please provide enough output buffer memory for the padded image, not only for the visible width and height. +.. _jpeg-encoder-engine: + JPEG Encoder Engine ^^^^^^^^^^^^^^^^^^^ @@ -173,40 +182,46 @@ The format conversions supported by this driver are listed in the table below: - GRAY -Below is the example of code that encodes a 1080*1920 picture: +Below is the example of code that encodes a 1280x720 picture from an embedded raw buffer: .. code:: c - int raw_size_1080p = 0;/* Your raw image size */ + size_t raw_size_720p = EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3; /* 1280x720 bgr24 frame */ jpeg_encode_cfg_t enc_config = { .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, .sub_sample = JPEG_DOWN_SAMPLING_YUV422, .image_quality = 80, - .width = 1920, - .height = 1080, + .width = 1280, + .height = 720, .pixel_reverse = false, // Whether to reverse the pixel order of the input image, or pixel order detail please refer to technical reference manual }; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p); - if (raw_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p tx buffer error"); - return; - } - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10); // Assume that compression ratio of 10 to 1 - if (jpg_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc jpg_buf_1080p error"); + jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + size_t jpg_buffer_size = 0; + uint8_t *jpg_buf_720p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_720p / 10, &rx_mem_cfg, &jpg_buffer_size); + if (jpg_buf_720p == NULL) { + ESP_LOGE(TAG, "alloc jpg_buf_720p error"); return; } - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, &jpg_size_1080p);); + /* The current JPEG encoder input path expects BGR24-style raw bytes for + * JPEG_ENCODE_IN_FORMAT_RGB888. The embedded asset can be read directly + * from flash as long as it remains valid until this call returns. */ + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, embedded_bgr24_start, raw_size_720p, jpg_buf_720p, jpg_buffer_size, &jpg_size_720p)); There are some tips that can help you use this driver more accurately: -1. In above code, you should make sure the `raw_buf_1080p` and `jpg_buf_1080p` should aligned by calling :cpp:func:`jpeg_alloc_encoder_mem`. +1. In the above code, the output buffer `jpg_buf_720p` should be allocated by calling :cpp:func:`jpeg_alloc_encoder_mem`, because the JPEG bitstream buffer must satisfy the driver's alignment requirements. -2. The content of `raw_buf_1080p` buffer should not be changed until :cpp:func:`jpeg_encoder_process` returns. +2. The content pointed to by `embedded_bgr24_start` should not be changed until :cpp:func:`jpeg_encoder_process` returns. This input buffer can come from flash-mapped embedded data or another memory region that stays readable for the full call. -3. The compression ratio depends on the chosen `image_quality` and the content of the image itself. Generally, a higher `image_quality` value obviously results in better image quality but a smaller compression ratio. As for the image content, it is hard to give any specific guidelines, so this question is out of the scope of this document. Generally, the baseline JPEG compression ratio can vary from 40:1 to 10:1. Please take the actual situation into account. +3. For :cpp:enumerator:`JPEG_ENCODE_IN_FORMAT_RGB888`, the current driver expects the raw input bytes in a BGR24-style layout. Supplying RGB24 raw data would swap the red and blue channels in the encoded JPEG. + +4. The compression ratio depends on the chosen `image_quality` and the content of the image itself. Generally, a higher `image_quality` value obviously results in better image quality but a smaller compression ratio. As for the image content, it is hard to give any specific guidelines, so this question is out of the scope of this document. Generally, the baseline JPEG compression ratio can vary from 40:1 to 10:1. Please take the actual situation into account. + +.. _jpeg-performance-overview: Performance Overview ^^^^^^^^^^^^^^^^^^^^ @@ -339,6 +354,8 @@ JPEG encoder performance .. [#] Format of Original Image .. [#] Down sampling method +.. _jpeg-pixel-storage-layout: + Pixel Storage Layout for Different Color Formats ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -415,11 +432,15 @@ In the following picture, each small block means one byte. YUV420 pixel order +.. _jpeg-thread-safety: + Thread Safety ^^^^^^^^^^^^^ The factory function :cpp:func:`jpeg_new_decoder_engine`, :cpp:func:`jpeg_decoder_get_info`, :cpp:func:`jpeg_decoder_process`, and :cpp:func:`jpeg_del_decoder_engine` are guaranteed to be thread safe by the driver, which means, user can call them from different RTOS tasks without protection by extra locks. +.. _jpeg-power-management: + Power Management ^^^^^^^^^^^^^^^^ @@ -427,6 +448,26 @@ When power management is enabled (i.e., :ref:`CONFIG_PM_ENABLE` is set), the sys Whenever the user is decoding or encoding via JPEG (i.e., calling :cpp:func:`jpeg_encoder_process` or :cpp:func:`jpeg_decoder_process`), the driver guarantees that the power management lock is acquired by setting it to :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_CPU_FREQ_MAX`. Once the encoding or decoding is finished, the driver releases the lock and the system can enter Light-sleep. +.. _jpeg-flash-encryption: + +Usage Under Encryption +^^^^^^^^^^^^^^^^^^^^^^ + +The JPEG codec moves data via the 2D-DMA, and the JPEG codec **cannot process encrypted data**. Therefore, when PSRAM encryption is enabled, the JPEG input/output buffers must reside in an unencrypted memory region, otherwise encoding/decoding fails. + +To support the encrypted scenario, the driver does the following: + +- When ``CONFIG_SPIRAM_ENC_EXEMPT`` is enabled, :cpp:func:`jpeg_alloc_decoder_mem` and :cpp:func:`jpeg_alloc_encoder_mem` allocate buffers from the unencrypted PSRAM region (``MALLOC_CAP_SPIRAM_NO_ENC``) automatically. +- The allocated buffers satisfy both the cache line alignment and the byte alignment required by the 2D-DMA. + +Please note the following when using it: + +1. It is recommended to always allocate buffers via :cpp:func:`jpeg_alloc_encoder_mem` / :cpp:func:`jpeg_alloc_decoder_mem` to ensure correct alignment and memory region. + +2. The size of the unencrypted region is determined by ``CONFIG_SPIRAM_ENC_EXEMPT_SIZE``. Since the JPEG buffer size depends on the image resolution and cannot be predicted automatically, configure it according to the largest image you actually process. If the region is insufficient, the allocation fails and an error log is printed, suggesting to enlarge ``CONFIG_SPIRAM_ENC_EXEMPT_SIZE``. Also note that this value must not be greater than or equal to the actual PSRAM size, otherwise the unencrypted region is disabled. + +.. _jpeg-kconfig-options: + Kconfig Options ^^^^^^^^^^^^^^^ @@ -448,7 +489,7 @@ Application Examples - :example:`peripherals/jpeg/jpeg_decode` demonstrates how to use the JPEG hardware decoder to parse one embedded JPEG, decode it into RGB888, stream the raw output as base64 over UART, and validate the result with pytest. -- :example:`peripherals/jpeg/jpeg_encode` demonstrates how to use the JPEG hardware encoder to encode a 1080p picture, specifically converting `*.rgb` files to `*.jpg` files. +- :example:`peripherals/jpeg/jpeg_encode` demonstrates how to use the JPEG hardware encoder to encode an embedded 720p raw picture, stream the JPEG as base64 over UART, and validate the result with pytest. API Reference diff --git a/docs/zh_CN/api-reference/peripherals/jpeg.rst b/docs/zh_CN/api-reference/peripherals/jpeg.rst index a771605fb7b..93532b3cd63 100644 --- a/docs/zh_CN/api-reference/peripherals/jpeg.rst +++ b/docs/zh_CN/api-reference/peripherals/jpeg.rst @@ -17,15 +17,18 @@ JPEG 常用于数字图像,尤其是数码摄影图像的有损压缩。压缩 本文档包含以下几部分内容: -- `资源分配 <#resource-allocation>`__,包括如何正确地设置配置来分配 JPEG 资源、如何在完成工作时回收资源。 -- `有限状态机 <#finite-state-machine>`__,涵盖了 JPEG 的工作流程,介绍了 JPEG 驱动程序的软件流程,以及是如何使用内部资源的。 -- `JPEG 解码器引擎 <#jpeg_decoder_engine>`__,包括 JPEG 解码器引擎的行为。介绍了如何使用解码器引擎函数为图像解码(从 jpg 格式到 raw 格式)。 -- `JPEG 编码器引擎 <#jpeg_encoder_engine>`__,包括 JPEG 编码器引擎的行为。介绍了如何使用编码器引擎函数为图像编码(从 raw 格式到 jpg 格式)。 -- `性能概览 <#performance-overview>`__,介绍了编码器和解码器的性能。 -- `不同颜色格式的像素存储布局 <#pixel-storage-layout-for-different-color-formats>`__,涵盖了 JPEG 解码器和编码器所需的颜色空间顺序。 -- `线程安全性 <#thread-safety>`__, 列出了驱动程序能保证线程安全的 API。 -- `电源管理 <#power-management>`__,描述了影响 JPEG 驱动程序功耗的因素。 -- `Kconfig 选项 <#kconfig-options>`__,列出了支持的 Kconfig 选项,可以为驱动程序带来不同的效果。 +- :ref:`jpeg-resource-allocation`,包括如何正确地设置配置来分配 JPEG 资源、如何在完成工作时回收资源。 +- :ref:`jpeg-finite-state-machine`,涵盖了 JPEG 的工作流程,介绍了 JPEG 驱动程序的软件流程,以及是如何使用内部资源的。 +- :ref:`jpeg-decoder-engine`,包括 JPEG 解码器引擎的行为。介绍了如何使用解码器引擎函数为图像解码(从 jpg 格式到 raw 格式)。 +- :ref:`jpeg-encoder-engine`,包括 JPEG 编码器引擎的行为。介绍了如何使用编码器引擎函数为图像编码(从 raw 格式到 jpg 格式)。 +- :ref:`jpeg-performance-overview`,介绍了编码器和解码器的性能。 +- :ref:`jpeg-pixel-storage-layout`,涵盖了 JPEG 解码器和编码器所需的颜色空间顺序。 +- :ref:`jpeg-thread-safety`,列出了驱动程序能保证线程安全的 API。 +- :ref:`jpeg-power-management`,描述了影响 JPEG 驱动程序功耗的因素。 +- :ref:`jpeg-flash-encryption`,介绍了在 flash/PSRAM 加密场景下如何正确使用 JPEG 编解码器。 +- :ref:`jpeg-kconfig-options`,列出了支持的 Kconfig 选项,可以为驱动程序带来不同的效果。 + +.. _jpeg-resource-allocation: 资源分配 ^^^^^^^^ @@ -85,6 +88,8 @@ JPEG 编码器引擎的配置需要由 :cpp:type:`jpeg_encode_engine_cfg_t` 指 ESP_ERROR_CHECK(jpeg_del_encoder_engine(encoder_engine)); +.. _jpeg-finite-state-machine: + 有限状态机 ^^^^^^^^^^ @@ -96,6 +101,8 @@ JPEG 驱动程序对硬件资源的使用情况及其处理流程如下图所示 JPEG 有限状态机 +.. _jpeg-decoder-engine: + JPEG 解码器引擎 ^^^^^^^^^^^^^^^ @@ -153,6 +160,8 @@ JPEG 解码器引擎 3. 如果源 JPEG 使用 YUV420 或 YUV422 采样方式,解码后的输出图像尺寸可能会被补齐到 16 像素边界。例如,当可见图像大小为 1080*1920 时,解码器可能需要按 1088*1920 像素来分配输出缓冲区。这来自 JPEG 的块布局限制,因此请按补齐后的图像尺寸而不是仅按可见宽高准备足够的输出缓冲区内存。 +.. _jpeg-encoder-engine: + JPEG 编码器引擎 ^^^^^^^^^^^^^^^ @@ -173,40 +182,46 @@ JPEG 编码器引擎 - GRAY -可参考以下代码,为 1080*1920 大小的图片编码: +可参考以下代码,将一张嵌入到固件中的 1280x720 原始图片编码为 JPEG: .. code:: c - int raw_size_1080p = 0;/* Your raw image size */ + size_t raw_size_720p = EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3; /* 1280x720 bgr24 帧 */ jpeg_encode_cfg_t enc_config = { .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, .sub_sample = JPEG_DOWN_SAMPLING_YUV422, .image_quality = 80, - .width = 1920, - .height = 1080, + .width = 1280, + .height = 720, .pixel_reverse = false, // 是否反转输入图像的像素顺序,或像素顺序细节请参考技术参考手册 }; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p); - if (raw_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p tx buffer error"); - return; - } - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10); // Assume that compression ratio of 10 to 1 - if (jpg_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc jpg_buf_1080p error"); + jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + size_t jpg_buffer_size = 0; + uint8_t *jpg_buf_720p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_720p / 10, &rx_mem_cfg, &jpg_buffer_size); + if (jpg_buf_720p == NULL) { + ESP_LOGE(TAG, "alloc jpg_buf_720p error"); return; } - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, &jpg_size_1080p);); + /* 当前 JPEG 编码输入路径下,JPEG_ENCODE_IN_FORMAT_RGB888 实际要求 + * 原始字节按 BGR24 风格排列。只要数据在本次调用返回前保持可读, + * 就可以直接从 flash 中映射出来的嵌入资源读取。 */ + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, embedded_bgr24_start, raw_size_720p, jpg_buf_720p, jpg_buffer_size, &jpg_size_720p)); 参考以下提示,可以更准确地使用该驱动程序: -1. 在上述代码中,应调用 :cpp:func:`jpeg_alloc_encoder_mem` 函数,确保 `raw_buf_1080p` 和 `jpg_buf_1080p` 对齐。 +1. 在上述代码中,应调用 :cpp:func:`jpeg_alloc_encoder_mem` 函数来分配 `jpg_buf_720p`,因为 JPEG 输出码流缓冲区需要满足驱动的对齐要求。 -2. 在 :cpp:func:`jpeg_encoder_process` 返回前, `raw_buf_1080p` 缓冲区的内容不应有更改。 +2. 在 :cpp:func:`jpeg_encoder_process` 返回前, `embedded_bgr24_start` 所指向的输入内容不应有更改。该输入缓冲区既可以来自嵌入到 flash 中的映射资源,也可以来自其他在整个调用期间保持可读的内存区域。 -3. 压缩比取决于所选择的 `image_quality` 和图像本身的内容。一般来说, `image_quality` 值越高,图像质量越好,相应的压缩比就越小。至于图像内容,则很难给出具体的指导方针,因此本文也就不再讨论。基准 JPEG 压缩比通常从 40:1 到 10:1 不等,请依实际情况而定。 +3. 对于 :cpp:enumerator:`JPEG_ENCODE_IN_FORMAT_RGB888`,当前驱动实际要求原始输入字节按 BGR24 风格排列。如果直接提供 RGB24 原始数据,则编码后的 JPEG 会出现红蓝通道互换。 + +4. 压缩比取决于所选择的 `image_quality` 和图像本身的内容。一般来说, `image_quality` 值越高,图像质量越好,相应的压缩比就越小。至于图像内容,则很难给出具体的指导方针,因此本文也就不再讨论。基准 JPEG 压缩比通常从 40:1 到 10:1 不等,请依实际情况而定。 + +.. _jpeg-performance-overview: 性能概述 ^^^^^^^^ @@ -339,6 +354,8 @@ JPEG 编码器性能 .. [#] 原图格式 .. [#] 下采样法 +.. _jpeg-pixel-storage-layout: + 不同颜色格式的像素存储布局 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -415,11 +432,15 @@ YUV420 YUV420 像素顺序 +.. _jpeg-thread-safety: + 线程安全性 ^^^^^^^^^^ 驱动程序能保证工厂函数 :cpp:func:`jpeg_new_decoder_engine`, :cpp:func:`jpeg_decoder_get_info`, :cpp:func:`jpeg_decoder_process`,以及 :cpp:func:`jpeg_del_decoder_engine` 是线程安全的,这意味着无需额外的锁保护,也可以从不同的 RTOS 任务中调用这些函数。 +.. _jpeg-power-management: + 电源管理 ^^^^^^^^ @@ -427,6 +448,26 @@ YUV420 每当用户通过 JPEG 进行解码或编码(即调用 :cpp:func:`jpeg_encoder_process` 或 :cpp:func:`jpeg_decoder_process`)时,驱动程序会将电源管理设定为 :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_CPU_FREQ_MAX`,确保获取电源管理锁。一旦编码或解码完成,驱动程序将释放锁,则系统可以进入 Light-sleep 模式。 +.. _jpeg-flash-encryption: + +加密场景下的使用 +^^^^^^^^^^^^^^^^ + +JPEG 编解码器通过 2D-DMA 搬运数据,而 JPEG 编解码器 **无法处理已加密的数据**。因此在开启 PSRAM 加密时,需要让 JPEG 的输入/输出缓冲区位于非加密的内存区域,否则编解码会失败。 + +为支持加密场景,驱动程序做了如下处理: + +- 当启用 ``CONFIG_SPIRAM_ENC_EXEMPT`` 时, :cpp:func:`jpeg_alloc_decoder_mem` 和 :cpp:func:`jpeg_alloc_encoder_mem` 会自动从非加密 PSRAM 区域(``MALLOC_CAP_SPIRAM_NO_ENC``)分配缓冲区。 +- 分配的缓冲区会同时满足 cache 行对齐与 2D-DMA 的字节对齐要求。 + +使用时请注意: + +1. 建议始终通过 :cpp:func:`jpeg_alloc_encoder_mem` / :cpp:func:`jpeg_alloc_decoder_mem` 分配缓冲区,以保证对齐与内存区域正确。 + +2. 非加密区的大小由 ``CONFIG_SPIRAM_ENC_EXEMPT_SIZE`` 决定。由于 JPEG 缓冲区大小取决于图像分辨率,无法自动预测,需根据实际处理的最大图像自行配置。若该区域不足,分配会失败并打印错误日志,提示增大 ``CONFIG_SPIRAM_ENC_EXEMPT_SIZE``;同时注意该值不能大于等于实际 PSRAM 容量,否则非加密区会被禁用。 + +.. _jpeg-kconfig-options: + Kconfig 选项 ^^^^^^^^^^^^ - :ref:`CONFIG_JPEG_ENABLE_DEBUG_LOG` 可启用调试日志,但会增加固件二进制大小。 @@ -448,7 +489,7 @@ Kconfig 选项 - :example:`peripherals/jpeg/jpeg_decode` 演示了如何使用 JPEG 硬件解码器解析一张嵌入式 JPEG,将其解码为 RGB888,通过 UART 输出 base64 原始结果,并使用 pytest 做回归校验。 -- :example:`peripherals/jpeg/jpeg_encode` 演示了如何使用 JPEG 硬件编码器编码一张 1080p 的图像,即将 `*.rgb` 文件转换为 `*.jpg` 文件。 +- :example:`peripherals/jpeg/jpeg_encode` 演示了如何使用 JPEG 硬件编码器对一张嵌入式 720p 原始图像进行编码,并通过 UART 输出 base64 JPEG,再用 pytest 做结果校验。 API 参考 diff --git a/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_example_main.c b/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_example_main.c new file mode 100644 index 00000000000..d545841f9f3 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_example_main.c @@ -0,0 +1,154 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +#include +#include +#include +#include +#include +#include +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/jpeg_decode.h" +#include "mbedtls/base64.h" + +#define EXAMPLE_BASE64_CHUNK_LEN 96 +#define EXAMPLE_BYTES_PER_PIXEL 3 + +/* These linker symbols are generated automatically for the file added by + * EMBED_FILES in CMakeLists.txt. They let the example treat the embedded + * JPEG asset as a byte array stored in flash. */ +extern const uint8_t example_jpeg_start[] asm("_binary_example_jpeg_start"); +extern const uint8_t example_jpeg_end[] asm("_binary_example_jpeg_end"); + +/* For JPEGs encoded with block-based chroma subsampling, the decoder output + * buffer dimensions can be padded up to 16-pixel boundaries. This helper + * rounds visible width or height up to that padded size. */ +static uint32_t align_up_to_16(uint32_t value) +{ + return (value + 15U) & ~15U; +} + +static void print_base64_payload(const unsigned char *encoded, size_t encoded_len) +{ + /* The payload is split into short lines so the UART log stays easy to + * parse from pytest and less likely to be damaged by very long lines. */ + printf("JPEG_DECODE_BASE64_BEGIN\n"); + size_t chunk_idx = 0; + for (size_t offset = 0; offset < encoded_len; offset += EXAMPLE_BASE64_CHUNK_LEN, ++chunk_idx) { + size_t chunk_len = encoded_len - offset; + if (chunk_len > EXAMPLE_BASE64_CHUNK_LEN) { + chunk_len = EXAMPLE_BASE64_CHUNK_LEN; + } + printf("JPEG_DECODE_BASE64 %.*s\n", (int)chunk_len, (const char *)&encoded[offset]); + /* Yield periodically to avoid watchdog triggers on long payloads. */ + if ((chunk_idx % 16U) == 15U) { + vTaskDelay(1); + } + } + printf("JPEG_DECODE_BASE64_END\n"); +} + +void app_main(void) +{ + const size_t embedded_size = example_jpeg_end - example_jpeg_start; + jpeg_decoder_handle_t jpeg_handle = NULL; + uint8_t *decoded_pixels = NULL; + uint8_t *input_buf = NULL; + unsigned char *encoded = NULL; + + printf("Loading embedded JPEG from flash...\n"); + printf("Embedded JPEG size: %zu bytes\n", embedded_size); + + /* Parse the JPEG header to learn the image dimensions. */ + jpeg_decode_picture_info_t header_info; + ESP_ERROR_CHECK(jpeg_decoder_get_info(example_jpeg_start, embedded_size, &header_info)); + printf("JPEG header parsed: width=%" PRIu32 " height=%" PRIu32 "\n", header_info.width, header_info.height); + + /* The hardware decoder can pad the output image dimensions up to + * 16-pixel boundaries, so the actual buffer may be larger than + * width * height * 3. Allocate for the padded dimensions to avoid + * out-of-bounds writes. */ + const uint32_t padded_width = align_up_to_16(header_info.width); + const uint32_t padded_height = align_up_to_16(header_info.height); + const uint32_t output_bytes = padded_width * padded_height * EXAMPLE_BYTES_PER_PIXEL; + + /* Ask the driver to allocate an output buffer for decoded pixels. + * JPEG_DEC_ALLOC_OUTPUT_BUFFER tells the driver this memory will hold + * the decode result (as opposed to an input bitstream buffer). */ + jpeg_decode_memory_alloc_cfg_t mem_cfg = { + .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, + }; + size_t decoded_buffer_size = 0; + decoded_pixels = (uint8_t *)jpeg_alloc_decoder_mem(output_bytes, &mem_cfg, &decoded_buffer_size); + assert(decoded_pixels != NULL); + + /* Create a decoder engine instance. The timeout_ms value is the maximum + * time the hardware is allowed to spend on a single decode call. */ + jpeg_decode_engine_cfg_t decode_eng_cfg = { + .timeout_ms = 80, + }; + ESP_ERROR_CHECK(jpeg_new_decoder_engine(&decode_eng_cfg, &jpeg_handle)); + + /* RGB888 outputs 3 bytes per pixel. BGR order matches the default byte + * layout expected by OpenCV and many display pipelines. */ + jpeg_decode_cfg_t decode_cfg = { + .output_format = JPEG_DECODE_OUT_FORMAT_RGB888, + .rgb_order = JPEG_DEC_RGB_ELEMENT_ORDER_BGR, + }; + + /* jpeg don't handle the encrypted data.*/ + const uint8_t *bit_stream = example_jpeg_start; +#if CONFIG_SECURE_FLASH_ENC_ENABLED + size_t input_buffer_size = 0; + jpeg_decode_memory_alloc_cfg_t in_mem_cfg = { + .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, + }; + input_buf = (uint8_t *)jpeg_alloc_decoder_mem(embedded_size, &in_mem_cfg, &input_buffer_size); + assert(input_buf != NULL); + memcpy(input_buf, example_jpeg_start, embedded_size); + bit_stream = input_buf; +#endif + + uint32_t decoded_size = 0; + printf("Decoding JPEG -> RGB888...\n"); + ESP_ERROR_CHECK(jpeg_decoder_process( + jpeg_handle, + &decode_cfg, + bit_stream, + embedded_size, + decoded_pixels, + decoded_buffer_size, + &decoded_size + )); + printf("Decoded RGB888 size: %" PRIu32 " bytes\n", decoded_size); + + /* Base64 turns the binary pixel data into printable ASCII so it can be + * safely transported through the serial console and reconstructed by + * pytest. The two-pass pattern (first call with NULL output to get the + * required buffer size, then the real encode) is standard mbedtls usage. */ + size_t encoded_len = 0; + int ret = mbedtls_base64_encode(NULL, 0, &encoded_len, decoded_pixels, decoded_size); + ESP_ERROR_CHECK((ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ? ESP_OK : ESP_FAIL); + encoded = calloc(encoded_len + 1, 1); + assert(encoded != NULL); + ESP_ERROR_CHECK(mbedtls_base64_encode(encoded, encoded_len + 1, &encoded_len, decoded_pixels, decoded_size) == 0 ? ESP_OK : ESP_FAIL); + + /* JPEG_DECODE_INFO plus the chunked JPEG_DECODE_BASE64 lines form a tiny + * text protocol that the pytest script understands and converts back + * into a PPM golden file for comparison. */ + printf("JPEG_DECODE_INFO width=%" PRIu32 " height=%" PRIu32 + " padded_width=%" PRIu32 " padded_height=%" PRIu32 + " format=RGB888 encoding=base64 size=%" PRIu32 "\n", + header_info.width, header_info.height, padded_width, padded_height, decoded_size); + print_base64_payload(encoded, encoded_len); + printf("JPEG decode demo done.\n"); + + ESP_ERROR_CHECK(jpeg_del_decoder_engine(jpeg_handle)); + free(encoded); + free(decoded_pixels); + free(input_buf); +} diff --git a/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_main.c b/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_main.c deleted file mode 100644 index e5f0243bf8a..00000000000 --- a/examples/peripherals/jpeg/jpeg_decode/main/jpeg_decode_main.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include -#include "esp_heap_caps.h" -#include "esp_vfs_fat.h" -#include "sdmmc_cmd.h" -#include "driver/sdmmc_host.h" -#include "esp_attr.h" -#include "driver/jpeg_decode.h" -#include "sd_pwr_ctrl_by_on_chip_ldo.h" - -static const char *TAG = "jpeg.example"; -static sdmmc_card_t *s_card; -#define MOUNT_POINT "/sdcard" - -const static char jpg_file_1080[] = "/sdcard/esp1080.jpg"; -const static char raw_file_1080[] = "/sdcard/out.rgb"; -const static char jpg_file_720[] = "/sdcard/esp720.jpg"; -const static char raw_file_720[] = "/sdcard/out2.rgb"; - -static esp_err_t sdcard_init(void) -{ - esp_err_t ret = ESP_OK; - esp_vfs_fat_sdmmc_mount_config_t mount_config = { -#ifdef CONFIG_EXAMPLE_FORMAT_IF_MOUNT_FAILED - .format_if_mount_failed = true, -#else - .format_if_mount_failed = false, -#endif // EXAMPLE_FORMAT_IF_MOUNT_FAILED - .max_files = 5, - .allocation_unit_size = 16 * 1024 - }; - const char mount_point[] = MOUNT_POINT; - ESP_LOGI(TAG, "Initializing SD card"); - - sdmmc_host_t host = SDMMC_HOST_DEFAULT(); - host.max_freq_khz = SDMMC_FREQ_HIGHSPEED; - -#if CONFIG_EXAMPLE_SDMMC_IO_POWER_INTERNAL_LDO - sd_pwr_ctrl_ldo_config_t ldo_config = { - .ldo_chan_id = 4, // `LDO_VO4` is used as the SDMMC IO power - }; - sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL; - - ret = sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to new an on-chip ldo power control driver"); - return ret; - } - host.pwr_ctrl_handle = pwr_ctrl_handle; -#endif - - // This initializes the slot without card detect (CD) and write protect (WP) signals. - // Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals. - sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); - slot_config.width = 4; - slot_config.flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP; - - ret = esp_vfs_fat_sdmmc_mount(mount_point, &host, &slot_config, &mount_config, &s_card); - - if (ret != ESP_OK) { - if (ret == ESP_FAIL) { - ESP_LOGE(TAG, "Failed to mount filesystem. " - "If you want the card to be formatted, set the EXAMPLE_FORMAT_IF_MOUNT_FAILED menuconfig option."); - } else { - ESP_LOGE(TAG, "Failed to initialize the card (%s). " - "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); - } - return ret; - } - // Card has been initialized, print its properties - sdmmc_card_print_info(stdout, s_card); - return ret; -} - -static void sdcard_deinit(void) -{ - const char mount_point[] = MOUNT_POINT; - esp_vfs_fat_sdcard_unmount(mount_point, s_card); -#if SOC_SDMMC_IO_POWER_EXTERNAL - esp_err_t ret = sd_pwr_ctrl_del_on_chip_ldo(s_card->host.pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to delete on-chip ldo power control driver"); - return; - } -#endif -} - -void app_main(void) -{ - ESP_ERROR_CHECK(sdcard_init()); - - jpeg_decoder_handle_t jpgd_handle; - - jpeg_decode_engine_cfg_t decode_eng_cfg = { - .timeout_ms = 40, - }; - - ESP_ERROR_CHECK(jpeg_new_decoder_engine(&decode_eng_cfg, &jpgd_handle)); - - jpeg_decode_cfg_t decode_cfg_rgb = { - .output_format = JPEG_DECODE_OUT_FORMAT_RGB888, - .rgb_order = JPEG_DEC_RGB_ELEMENT_ORDER_BGR, - }; - - jpeg_decode_cfg_t decode_cfg_gray = { - .output_format = JPEG_DECODE_OUT_FORMAT_GRAY, - }; - - jpeg_decode_memory_alloc_cfg_t rx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, - }; - - jpeg_decode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, - }; - - FILE *file_jpg_1080p = fopen(jpg_file_1080, "rb"); - ESP_LOGI(TAG, "jpg_file_1080:%s", jpg_file_1080); - if (file_jpg_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_jpg_1080p error"); - return; - } - - fseek(file_jpg_1080p, 0, SEEK_END); - int jpeg_size_1080p = ftell(file_jpg_1080p); - fseek(file_jpg_1080p, 0, SEEK_SET); - size_t tx_buffer_size_1080p = 0; - uint8_t *tx_buf_1080p = (uint8_t*)jpeg_alloc_decoder_mem(jpeg_size_1080p, &tx_mem_cfg, &tx_buffer_size_1080p); - if (tx_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p tx buffer error"); - return; - } - fread(tx_buf_1080p, 1, jpeg_size_1080p, file_jpg_1080p); - fclose(file_jpg_1080p); - - FILE *file_jpg_720p = fopen(jpg_file_720, "rb"); - ESP_LOGI(TAG, "jpg_file_1080:%s", jpg_file_720); - if (file_jpg_720p == NULL) { - ESP_LOGE(TAG, "fopen file_jpg_720p error"); - return; - } - fseek(file_jpg_720p, 0, SEEK_END); - int jpeg_size_720p = ftell(file_jpg_720p); - fseek(file_jpg_720p, 0, SEEK_SET); - size_t tx_buffer_size_720p = 0; - uint8_t *tx_buf_720p = (uint8_t*)jpeg_alloc_decoder_mem(jpeg_size_720p, &tx_mem_cfg, &tx_buffer_size_720p); - if (tx_buf_720p == NULL) { - ESP_LOGE(TAG, "alloc 720p tx buffer error"); - return; - } - fread(tx_buf_720p, 1, jpeg_size_720p, file_jpg_720p); - fclose(file_jpg_720p); - - size_t rx_buffer_size_1080p = 0; - size_t rx_buffer_size_720p = 0; - uint8_t *rx_buf_1080p = (uint8_t*)jpeg_alloc_decoder_mem(1920 * 1088 * 3, &rx_mem_cfg, &rx_buffer_size_1080p); - uint8_t *rx_buf_720p = (uint8_t*)jpeg_alloc_decoder_mem(720 * 1280, &rx_mem_cfg, &rx_buffer_size_720p); - if (rx_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p rx buffer error"); - return; - } - if (rx_buf_720p == NULL) { - ESP_LOGE(TAG, "alloc 720p rx buffer error"); - return; - } - - // Get the jpg header information (This step is optional) - jpeg_decode_picture_info_t header_info; - ESP_ERROR_CHECK(jpeg_decoder_get_info(tx_buf_1080p, jpeg_size_1080p, &header_info)); - ESP_LOGI(TAG, "header parsed, width is %" PRId32 ", height is %" PRId32, header_info.width, header_info.height); - - uint32_t out_size_1080p = 0; - uint32_t out_size_720p = 0; - ESP_ERROR_CHECK(jpeg_decoder_process(jpgd_handle, &decode_cfg_rgb, tx_buf_1080p, jpeg_size_1080p, rx_buf_1080p, rx_buffer_size_1080p, &out_size_1080p)); - ESP_ERROR_CHECK(jpeg_decoder_process(jpgd_handle, &decode_cfg_gray, tx_buf_720p, jpeg_size_720p, rx_buf_720p, rx_buffer_size_720p, &out_size_720p)); - - // Write two pictures. - FILE *file_rgb_1080p = fopen(raw_file_1080, "wb"); - ESP_LOGI(TAG, "raw_file_1080:%s", raw_file_1080); - if (file_rgb_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_rgb_1080p error"); - return; - } - fwrite(rx_buf_1080p, 1, out_size_1080p, file_rgb_1080p); - fclose(file_rgb_1080p); - - FILE *file_rgb_720p = fopen(raw_file_720, "wb"); - ESP_LOGI(TAG, "raw_file_720:%s", raw_file_720); - if (file_rgb_720p == NULL) { - ESP_LOGE(TAG, "fopen file_rgb_720p error"); - return; - } - fwrite(rx_buf_720p, 1, out_size_720p, file_rgb_720p); - fclose(file_rgb_720p); - - sdcard_deinit(); - ESP_LOGI(TAG, "Card unmounted"); - -} diff --git a/examples/peripherals/jpeg/jpeg_decode/pytest_jpeg_decode.py b/examples/peripherals/jpeg/jpeg_decode/pytest_jpeg_decode.py new file mode 100644 index 00000000000..0f369c0f132 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_decode/pytest_jpeg_decode.py @@ -0,0 +1,240 @@ +# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 + +import base64 +import hashlib +import logging +import re +from dataclasses import dataclass +from pathlib import Path +from typing import List + +import pytest +from pytest_embedded import Dut +from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets + +DECODE_OUTPUT_NAME = 'jpeg_decode_result.ppm' +GOLDEN_OUTPUT_NAME = 'golden_output.ppm' +GOLDEN_OUTPUT_PATH = Path(__file__).with_name(GOLDEN_OUTPUT_NAME) +EXPECTED_PIXEL_FORMAT = 'RGB888' +EXPECTED_ENCODING = 'base64' +RGB888_BYTES_PER_PIXEL = 3 +PPM_MAGIC = b'P6' +PPM_MAX_VALUE = b'255' +DECODE_INFO_PATTERN = ( + r'JPEG_DECODE_INFO width=(?P\d+) height=(?P\d+) ' + r'padded_width=(?P\d+) padded_height=(?P\d+) ' + r'format=(?P\w+) encoding=(?P\w+) size=(?P\d+)' +) +DECODE_INFO_RE = re.compile(DECODE_INFO_PATTERN) +DECODE_CHUNK_PATTERN = r'JPEG_DECODE_BASE64 (?P[A-Za-z0-9+/=]+)' +DECODE_CHUNK_RE = re.compile(DECODE_CHUNK_PATTERN) +PPM_HEADER_RE = re.compile(rb'^P6\s+(?P\d+)\s+(?P\d+)\s+(?P\d+)\s') + + +@dataclass(frozen=True) +class DecodeMetadata: + width: int + height: int + padded_width: int + padded_height: int + pixel_format: str + encoding: str + size: int + + def __post_init__(self) -> None: + if self.width <= 0 or self.height <= 0: + raise ValueError(f'Invalid dimensions: {self.width}x{self.height}') + if self.padded_width < self.width or self.padded_height < self.height: + raise ValueError( + f'Padded size ({self.padded_width}x{self.padded_height}) ' + f'smaller than visible size ({self.width}x{self.height})' + ) + if self.pixel_format != EXPECTED_PIXEL_FORMAT: + raise ValueError(f'Unsupported pixel format: {self.pixel_format}') + if self.encoding != EXPECTED_ENCODING: + raise ValueError(f'Unsupported encoding: {self.encoding}') + + @property + def padded_image_size(self) -> int: + return self.padded_width * self.padded_height * RGB888_BYTES_PER_PIXEL + + +@dataclass(frozen=True) +class RgbImage: + width: int + height: int + pixels_rgb888: bytes + + def __post_init__(self) -> None: + expected_size = self.width * self.height * RGB888_BYTES_PER_PIXEL + if len(self.pixels_rgb888) != expected_size: + raise ValueError(f'Expected {expected_size} RGB bytes, got {len(self.pixels_rgb888)}') + + +def parse_decode_metadata(meta_line: str) -> DecodeMetadata: + match = DECODE_INFO_RE.fullmatch(meta_line) + if not match: + raise ValueError(f'Invalid decode metadata line: {meta_line}') + + return DecodeMetadata( + width=int(match.group('width')), + height=int(match.group('height')), + padded_width=int(match.group('padded_width')), + padded_height=int(match.group('padded_height')), + pixel_format=match.group('format'), + encoding=match.group('encoding'), + size=int(match.group('size')), + ) + + +def collect_base64_payload(dut: Dut) -> List[str]: + payload_lines: List[str] = [] + while True: + # The example prints the decoded frame as multiple short UART lines + # instead of one giant base64 blob, so collect and join them here. + match = dut.expect(rf'(?PJPEG_DECODE_BASE64_END|{DECODE_CHUNK_PATTERN}\r?\n)', timeout=60) + line = match.group('line').decode('utf-8').strip() + if line == 'JPEG_DECODE_BASE64_END': + return payload_lines + + chunk_match = DECODE_CHUNK_RE.fullmatch(line) + assert chunk_match is not None + payload_lines.append(chunk_match.group('payload')) + + +def _crop_visible_bgr888(raw_bytes: bytes, metadata: DecodeMetadata) -> bytes: + # The hardware can write into a padded decode buffer whose width/height are + # rounded up to JPEG block boundaries. Pytest only wants the visible image, + # so keep the useful bytes from each row and discard the padded tail rows. + if len(raw_bytes) != metadata.padded_image_size: + raise ValueError(f'Expected {metadata.padded_image_size} padded BGR bytes, got {len(raw_bytes)}') + + visible_row_size = metadata.width * RGB888_BYTES_PER_PIXEL + padded_row_size = metadata.padded_width * RGB888_BYTES_PER_PIXEL + return b''.join( + raw_bytes[offset : offset + visible_row_size] + for offset in range(0, padded_row_size * metadata.height, padded_row_size) + ) + + +def _bgr888_to_rgb888(raw_bytes: bytes) -> bytes: + # The decoder's RGB888 mode uses BGR24 byte layout by default. Swap the + # first and third byte in each pixel so the PPM artifact becomes standard + # RGB order that common desktop image tools expect. + rgb_bytes = bytearray(raw_bytes) + rgb_bytes[0::3], rgb_bytes[2::3] = raw_bytes[2::3], raw_bytes[0::3] + return bytes(rgb_bytes) + + +def decode_base64_image(metadata: DecodeMetadata, payload_lines: List[str]) -> RgbImage: + # The DUT sends the raw decode buffer as base64 over UART because the test + # environment only observes text logs. Rebuild bytes on the host, crop away + # decoder padding, then normalize the pixel order for image comparison. + raw_bytes = base64.b64decode(''.join(payload_lines), validate=True) + if len(raw_bytes) != metadata.size: + raise ValueError(f'Expected {metadata.size} decoded bytes, got {len(raw_bytes)}') + + visible_bgr888 = _crop_visible_bgr888(raw_bytes, metadata) + return RgbImage( + width=metadata.width, + height=metadata.height, + pixels_rgb888=_bgr888_to_rgb888(visible_bgr888), + ) + + +def _encode_ppm(image: RgbImage) -> bytes: + header = b'%s\n%d %d\n%s\n' % (PPM_MAGIC, image.width, image.height, PPM_MAX_VALUE) + return header + image.pixels_rgb888 + + +def _load_ppm(path: Path) -> RgbImage: + ppm_bytes = path.read_bytes() + header_match = PPM_HEADER_RE.match(ppm_bytes) + if not header_match: + raise ValueError('Invalid PPM header') + + width = int(header_match.group('width')) + height = int(header_match.group('height')) + max_value = header_match.group('max_value') + if width <= 0 or height <= 0: + raise ValueError('Unsupported PPM dimensions') + if max_value != PPM_MAX_VALUE: + raise ValueError(f'Unsupported PPM max value: {max_value.decode("ascii", errors="replace")}') + + pixel_data = ppm_bytes[header_match.end() :] + return RgbImage(width=width, height=height, pixels_rgb888=pixel_data) + + +def save_ppm_artifact(image: RgbImage, output_path: Path) -> None: + output_path.parent.mkdir(parents=True, exist_ok=True) + try: + output_path.write_bytes(_encode_ppm(image)) + except OSError: + logging.exception('Failed to save JPEG decode artifact to %s', output_path) + return + + logging.info('Saved JPEG decode artifact to %s', output_path) + + +def image_digest(image: RgbImage) -> str: + digest = hashlib.sha256() + digest.update(image.width.to_bytes(4, 'big')) + digest.update(image.height.to_bytes(4, 'big')) + digest.update(image.pixels_rgb888) + return digest.hexdigest() + + +def assert_image_matches_golden(result_image: RgbImage, golden_path: Path) -> None: + assert golden_path.is_file(), f'Golden PPM not found: {golden_path}' + golden_image = _load_ppm(golden_path) + + assert image_digest(result_image) == image_digest(golden_image), ( + f'Generated image does not match golden file: {golden_path.name}' + ) + + +def run_jpeg_decode_example(dut: Dut) -> None: + dut.expect_exact('Loading embedded JPEG from flash...') + dut.expect(r'Embedded JPEG size: \d+ bytes') + dut.expect(r'JPEG header parsed: width=\d+ height=\d+') + dut.expect_exact('Decoding JPEG -> RGB888...') + dut.expect(r'Decoded RGB888 size: \d+ bytes') + + metadata_line = dut.expect(DECODE_INFO_PATTERN).group(0).decode('utf-8') + metadata = parse_decode_metadata(metadata_line) + + dut.expect_exact('JPEG_DECODE_BASE64_BEGIN') + # Collect the machine-readable payload before the example prints its final + # completion line so we keep the UART parsing strictly in output order. + payload_lines = collect_base64_payload(dut) + dut.expect_exact('JPEG decode demo done.') + + result_image = decode_base64_image(metadata, payload_lines) + output_path = Path(dut.logdir) / DECODE_OUTPUT_NAME + save_ppm_artifact(result_image, output_path) + assert_image_matches_golden(result_image, GOLDEN_OUTPUT_PATH) + + +@pytest.mark.generic +@idf_parametrize('target', soc_filtered_targets('SOC_JPEG_DECODE_SUPPORTED == 1'), indirect=['target']) +def test_jpeg_decode_example(dut: Dut) -> None: + run_jpeg_decode_example(dut) + + +@pytest.mark.flash_encryption +@pytest.mark.parametrize( + 'config', + [ + 'flash_enc', + ], + indirect=True, +) +@idf_parametrize( + 'target', + soc_filtered_targets('SOC_JPEG_DECODE_SUPPORTED == 1 and SOC_FLASH_ENC_SUPPORTED == 1'), + indirect=['target'], +) +def test_jpeg_decode_example_with_flash_encryption(dut: Dut) -> None: + run_jpeg_decode_example(dut) diff --git a/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.default b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.default new file mode 100644 index 00000000000..f70e1f1910d --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.default @@ -0,0 +1 @@ +# Default CI build, inherits sdkconfig.defaults diff --git a/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.flash_enc b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.flash_enc new file mode 100644 index 00000000000..2412c23e67a --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_decode/sdkconfig.ci.flash_enc @@ -0,0 +1,7 @@ +CONFIG_PARTITION_TABLE_OFFSET=0x9000 +CONFIG_SECURE_FLASH_ENC_ENABLED=y +CONFIG_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT=y +CONFIG_SECURE_FLASH_UART_BOOTLOADER_ALLOW_ENC=y +CONFIG_SECURE_FLASH_REQUIRE_ALREADY_ENABLED=y +CONFIG_SPIRAM_ENC_EXEMPT=y +CONFIG_SPIRAM_ENC_EXEMPT_SIZE=4096 diff --git a/examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg b/examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c051b55a5e1f93ed0cb6eedd6746e928fa12baf1 GIT binary patch literal 30900 zcmeIacT`is_UIp)C@secfgeAaLJuO`=00{{I zKtlWi5M}`yfJ@{Qmng_DU81-|NqOlq)m190D_5wP=zug=S((__SeaN@*g1JY?AN(D zSXgd|+~DTp7Zeh_1`?GJ6_DT+5ES@FAtaQPlvJ0g7^$cj1=v~G1^yo&gl_=)%cR2; z05X!B08)AqGI|n1CjdmOCk4qr55RvOB&1}-`chuLLPbryq4p|(l!T0ol$?x$f}EUq zcL4Eo069Gc!%a!`ON>Ugl($|nNxezTz07^5@;kHf$Ucws6ZhaNR4lA)*VuXa_yq)o zWMt*!6%>^;?rLgj>*(s4JTNsgfB4A4?y0?lqm%P94^OYx-Y_5Ekhh^>;SrHhNy+b0 zQq$h2XMD`dFDNW3F8NedT~k|E|Fxm9y`!_MyQlX@-{{!*#N^cUubE}!%Ifd6^^MIf z)WPA=@yRLr?ED{ckr3tluj4-i``_fEC(1=iPEJNn`472BNWF>QWc1_|HzhAIs2fq* zzGA#3_2x3uoy6SA?^n2`jrWpG zFa7f;VFo}$MnddOGI{_QaGnumM0MI)U2m0&nF1s2AlnIAEFiJgDIAWI02yT+=7|!PVSfFcN{bY1YxXEd~ zF3~)SG;! zjD?5|TS{Nvbwb+w(@?bA>dQtzxk1N%7RWUcW6ABUkM1b5Oc393El+DO`dyDUx6i}c zjEMCWU_GXLVf|vq*e+8MucP!h+xCMZpXDrU+_u5Qb6K6vjDS^EY63uijsZ+nT8{S6 zo#GZO`K2k&p(fF>(UGw``f=C4S;*|W>00axj}IiO_3E5uIHF?=m#YnSe81dwX%9V> zx-et)(5kj&l|fzV15@Hlm+ns6mgF@{P~OwCPU*|;12ZnU6qE%XGc$R!yPkL!R9*G* z4`x?K=Q58&%RX=MC*8JW}5*n^z*oUNT{s}!v?<}t~IGq4aNR(Qw8 z2L(ZLPR;Ck8n88!@=4A?Mk04hH;>C)3`RbtnS_XRbV&cSS1i@qg$ieD`6#L+4;nBd z>lTR1B##~nDvxsh`SE9WSHywg7lel)F8(^R?1tJkbmgbb*(Vb#?6F^$>gN*zRcSqk zJCz_N-2+m-4>#m$l73}>U#?);ItR9d|jbe0>)38%{JwBZ<2(R^k*zLRA2vWkvV zEv)6;iiHv)OJTCVlD+)V-Tk)fSjBOF6`Qp&uiX!d3#EtM;2F@kIkkMIg57lG$ z>v?&Zm#|FsCBg$K^3HLez7x;Q@3hfW0V~Ri` zO^nWej?#`-VfiDvroBfa4+!ZcR{1Z$UN#;UXlC;&o6a=<@hcS3$*7?4Q4B z>Hr*7D5Lw4(s^ju!`W7`y{Zph57_45_l4OHR|{9Ye|xG`Mi)VT9)jL3u(1;W5iFK( zMQt6!lSeYq=I2wRmjP^?rI{qucW^_HC`q;1YrWZtX3V82<0=%(19x`)GFudFkgvtL z_a5sWZ(ExR3YJQDwIjD}dDhi`RST^zYlqnnrO|fs5CHBD;33)2Vt>|}=UK`RGNh;V z-h{77T8({I-^z;jrtM+}(69G+IL;Jg1l@C?l{MfMTn?@yYZ3G7Hnu!nHJ)HrkKkqqB-3>H5_hmol zZg1rs!`>^3&QddK%1>krk2$BuxlDXFZ)*?>|BlkK{F7hlIT`Qq0iC#X9ZqlAvX&jm z@+rE*lYs!JTEHJ4{+?)_Ok=Q|>mD(<&g^L$OlupL_e0EU{8+&bw6me2f@tAvxxD3a zz2T4Bt;U*!9u*Nzw%4-VSy>}Twa(r7Ry;MnAR`!erx7gec75v|@~^W}z@=B?=IT&Q zLo1Xqn5)y+Q>gDG4Yl(j^4M zQ!?9dG$(j3lUXSKPu^VXwGHroJlc5j8WVMTcorDbQ@^B8{<)4swY2=5&y9~Twok1y z&0F5jk&ygpx zYO?5e9-1!^I?M&jJI_vUkFT_h6$su!q!$P8W=JY0Bs$ZqQ&8N0c>qz;}=p6wYvF3x}4<@2>I@bis;7k6-BWc1cbg204&+Od+`V^d{`Mz9@u}7Y-6rWb8Ft0oj@Dps4K6;)f z5vCT5n6Zr3^vEtLT5fr9*m3^Ze3H&|D$HiE<$FaTRf6MDcha1TVW%I}j5bYoL_94n$7!Q*s5Y z^h-Ok??MQg} zCS?4;Bc{xOi5oE!rrN@D!m1$D+c)!{c%Jn>8vAl& zyDO|Gy_(^8$uaEVXOWH8(u47HlT+47f2NED`|~gpsI0&Ceh191li_X}b7f`7z`#>YKD5%NpHYYb1I-`+g4}C&;Uuy^@SWC5yF*JoPAxw<$l;~0`(hJ` zdni?L=QnG3GsNb3cB!VH4t7bP@NbEbz~Xl(+zn2W-4Kb!+C2?3l*eUzL8*9Xm^j~_ z=nqf=Y4gT*bYS@86DXgCfj4|@NCsWz?}qg*k#ql&66EI!Lb@bXs5Q0df}pA2HLmCh zpP8>-Y6McFHOx_xDK)+3KO&Y366?wX)M{lm8^|H{f;}R6wsbTsGzz&8jDlHrzbV?k4C+_uLNv=2lpenWww!py>qqaiOM> z!K0Svrz!~K-kZC3ti5%jsZYyu)yHsO!0#(=mFwG!JDM04jlRT7Z$G@7kK1q}0B(P5 zFeAnzcA(@c4;fAWU5H-RD+u0t7M&z$Hzd|3BHXGg-_dJ6m=WR%_c ziJiL6n&!~lulW=4qXm+F?Gb0I1 z_^DalX(CfYuwtI7>9|CNv#jjXz~?JwZ+FL{RZcsJ!%HShM^`S%Fw0$CS<6BypvSGf z*{w7C`Z!k6Tb_n^T@pC4`9oN3CpM>S;ty3= zSGeBb;*lO+r1UQSDqTIdSN4Fb&WmI}xKv_DU%D0yZ9Z~8Kqeik@GvT`liZlUu!IWeol!1usAFs09vHCD*H3J z^S1Ghl&F3kKL}&t$4_@z6N4a_XA*FI^UNtaUW-z-Qr@ziFERzc-M$K(PhLLO)N-1Z zd2SSbr-*sniAxoADazEg#d!&I(6_QqiBgH0%<>uYeg1N#YKv{!-4rT4iRDHq>rJMM z9+R9UUM z6Amy~Zs0nFEXutzguD))#`sN9*vQ>Vt4cptGl@Sx;gaRrewo+eksY}WCvSdei@;pM z5dg0V0NHBE4Zose=1sihuq}!!^p&l|^=Suw@HbqnAI#a$Le6n5y_P@dXG^|}L5aAQ zf33HhXx7~16m^}`hrE#K5F_(g-o6>I?%OkD!Mqi%pZGUd&ng?I>IPm&)@8MD)lbbsz(@h1uh-Nnt8sMI$iYZlN28$DXtY%0mCc#Fzj{W9vOTrpmz=~FZv z%5+(yw?Yr?h2mP#PErM1Bo>Xu_f=(EfJ%0Si-3P&KhMu`_jb9-CxWUA%)e$Q3)0>+?kjvos1_&+WIy)U@?a9l{hloP;4+8XOp zaz>ee8aC4ZTWo9rRROXgyv%0d>30wP22rPNd9L*Dc&~K?nJm2v@|P>;m$a83{HhMX zcU%U`3i(9N=cv36^u`H*l=?I24F-kYa?9>O>ak`MH_Wlbd~v7umGOW8?ON{#!6jT~ z{*#Q%DxywPA=4-zgTLC;ks@2BLvuaowdJcO?l~{!AN@>~l8@|Q(_VD>=AmY9H~W6# zG{`b+Q3)o|)qmuoz8(37GMzuvKL&?nOZzF;4j&78xC#;g+TP%;SqwsBrUl-qq}tk) zZ{>XI@_xq!=uh7@GiPIbTIXg$XKtMrd0J#l4M#&$EXGHR9ApGMfx#DFEC0_bXp z5;W3F_)e3V;w;fXfBGSQc&g~V@R+fh_*=(k$2aE#3k{fmgI@a~z6meNtGCtgzvrhR zIkH7;+LYRyFfY7=^m#=2zuzhyI;0ZLIlS|i#ES%-NIv_S4-o*@YZ!~rpORLv05n zJIRsGReRd*na1Gu$d)?Xhaxt=Ufx*bzLvbSBr%wjX@Tx%@@V#z%Uai>Bd@L-URZj7 zd_@%{|Kq@C&7f&U`1Paxy)KM$>D%x})pCAugIeHQG- zI#*0#lxYg=SF}X`mc8r>&(XZ}8i;8ljf-n?S7y6h-%)@7STq@)G=TYc5-y zeE3C^v8Cpk1YPnzPBvfm`BMw5sWZ#bxHzbo6#T2!ZM@gRD;8yO zFN8i81)Jc_Vk+Vr^;$y1K1KQWerR8Xdmas~*a+WaFEedj*QT8~d4IWlAg8R2Y`!)v zMkeyz3M*C71`Isdu-Rk)mLBWrKv0{hA_)M#023jRL?wm3FWZvxs3c|Np$Sp4>{ec;5|zzt`NY4Y!Cn;CTDokDy#KAM+g>10K~om*D#TIiSoJa zY2QMOwnPo0-4f4sAD&5f^HhA6g!4+~LdZyQ;W#+@YuE1WahRozGCey!V6@?h~GnNIw zhPn}ym7*1!s8u^woxFNSVqQ!K`rZoUkMiE1d96D#+hJ#H**D?)vcHE;na4JUzUH*m zO1U{UFQ0RY_gJ%AHVKQ`O!)UM%_XI*Q@sj1cW5@N?CzdWY|2ifoivq@jDNUsQ=uXk zPrZ@6smAJDp4^{$08tR!B5p7|EqW8WdMt3ymnFoanT zq*j*z$Tcs0?|&JcO^=s_LdN?)Hizs1bMO?YYFEyhta>TOqN-8y-@OCHSZP|k})PrU!nC#n`?tOYlWFF9_bZL>+0%oUcdC#^{ zwtQPFkb`7B!I8UOvi#$o#BfFMxgL|XZR)jn=?Z7spSkL{yT>T;`HH5D%cqXaS@u?G z+?Xpbx)D`v$?xScSaKrvlnNN}MoO6u(OQ{h*kkOuYP$0Jr%)iI6*sWisZE{ z9X^@SL$t-nwD#}p+1Px|Xw{xC?zz=J*YRG{8BYpM1Dl?QF5O-JiYJQN^m+#~+HGRNwfy|ojqc*VTpQR6MCgSMZ=2heC z_0~H_PKH&j5K^g7%gjHjLqc_plm3FA5WM9wn9k({RMVCcy-n_Ne9YC}5@3XD3}kHQ zDs5k2>C{057#NWv=zh;`+ao6XT8jAR;lNY)nkq4BC^P?L@#omyjfOjlR2|2hF7KyW z+0cIG>FWpiHCcoAZckq$0K5x)rQZs7qUXef8B-=+n+2FC3hxE~xgw|ZRV~=5G4NIs zB0P|h=#4?Nk`{CsTuPw+NjH{G0FE=2xo;m7{q$ALh96_WUw;4gp2%`Wrpq`>F{Ln% zADdmf)WqHzKEyX!yuQBg81B%-%HVVoW;A%`aiFyjZa25UNe;1TGW+OuUTE)qwIDP9 zgrbruq3IY$QF(r`-a|J=EVM4t1_+#$Iq+osDOY?-R#G9-+B)fP`U$9}yH`H9%x&}` zfHkK=nm!`S@dw#XmH)?7r~&eoxG9<|cgZbOm{HpYX1i)J%Uw3ys<9vjG?Bclk08o9NoYDxKsEA z+X7T=8}S+f4z(gjcSol3BR{|w@6^gvM6~jaeS0u&;R)(c3di|Qz5g_xGgMs?`rV=C zEUV3=s0uw$(hX=HbG1L!A||M@kHxP%aO8RsvoiJk8!?i(9cLRbvNXQTv$(sSql@~a z=HJ4uvDx?-T;Q;PbsYcjq+h=_dO_QP`^+TuaU)&)6>H3~jAE7vQaiGugRD3pTN*2I z13Fdq^pUgDdW4v~rNx3x@BCB$1n`np1Fvy`WA3hT$7AxQ!d+7E)xK>o4&MPqwm$|z?*T_twk-q51$JaHe|2&I9{8p99=ES2ZK%Q zwJ1bigTO8nykvjXboQTVm2?8P5+Z&_^4>|hRh69^rs;8x2yRv_aon*ms9Tv>;j#>L ziHbCd!Si_9qD=P(j|%KQG@><@H+3as=i93K6VKPG3((?4lDLI3SjgCujNhr3q$ZTP zaAJa;T^6tOby}%6m+*&XO~f@+t8ufGigplPr+U^Ne~+Em$hi>*jZ#zv)03xVm-9U> z9D`MqizqO1DK8#+I;$t(T{AXpLvP+rywx3&WAw)QegQk2N=3v_td-Ad!rooqcw%~u z;ctFVhUD!_0$l(m*Br9HCoK5?shUzot<|=1qAk@MFlyCETB*^MW_QD;@Nq9tEP%Li zqJ4Uw6-S!^!QqQEQ6}H2`VxDPWrA7LLT}`GvV((^Z@ZIltQQKWPc{cE8_;c*)w*5X zOsyAsIij-N0LdjQTDeV}Blqi6CKW7y18=eboqqk_)LBlky< z-$;X$$_&qE^}l4F;63YW-rVaK{vafI?03 zqui=@aVbKl>18jYA5Jcj_6$3gVFhBA)D5@N4{uP&{7d4lg{T63aueYMh{ckl(UiMU)56Qq%|M+qBfA5*!7|= z7IjVDyC?nD2%RlJmJDXbUdj(aw(xVuA0w0TEImO4z{c}Y_}=jic@j>e zT&w#6WQobhiZ^zNiCFXeFq06>zH{5ZHheLeV~35zJ^>K9`V|7)I?0H(46+5QO5XT?ypIU&^CC}eN3~O zs%g12ZRMgATkw`LZ%&U9tbdFZAj|yM`fFoF<4NGdzw(LR^cG;#lh#`wMH|#QBA(M) zEpp$0?1gnl@z9FJgMZ^73duSFz~v9|S{4tT=`JWzj63@DohAf*ZBRbo_JF_k5|C`W zjlo~t!#S_U*qX-y>9d>vjZ9T{HAy$eF%RA$j$XkBdO|SxMXbTYF|Y&ty2X}R8t_#f zQ`FPM%9p>sJ%%^w0CU=$#2FW08p~$6K1JX(Ke2wDRZctc@3y;_Tvov0AfVS`q*Cop zYt&<@*`h3!DdVe`R^B8B>+;KxY(V$>@e0J`xh$fENeUwNZ5fz4Z~!ko+H8=&#mdUA z7&f`3_Dd>4khqNi*~VTh{6M$)5drY{44&f8OdJpGtat^K2s>9YZ?m@tw^GgO z+xD33pyA8M@o4)+cKFaqBvEal#Ih^E=&bz?8?>8j#N@!|$k$h*T+Bt9(u!9}ff~1+ z0-P~o=t4{vh$dGlKVEhaq5SA<(0x<@P{Q9pQi*tmZnCN&=9h6klS^b~fE52=NZq)S z@FoLry!bDVK@cBPE{^nW2h#g1jqQkg6;@?Wu4!CN`qfYI{3%(2(&6pIBk@0QWYfG` zyHa*y@jae(-4vB{j@5_{9DD&$h{5LglS-8JZW)RzfN5|=e{{s?CMDHVZjnxJm6iP* zr4)Zvj1qdxYDA<~$MRmV@YhtQQJ;vH`A?rxsFrHuufcmjhld~GizfsC(upg)9zO`C zIc^J=Yn-zK?zg%AP8w8K;c(>OxUj6OS@tAC~jsRFr!xGI8uo6F>9Q==m$*3lu zydp-^{S}(0?57GU6W#JcpI~G{BZMA)SOpqcfp&Y!F)I&irMF`=Q5y8##19ms45 z-nuD%U~v|WOpB0(a$@zy*&UL6*mufAcKTnjhs_k{6}kN!CHL0FNT8P!9}eXSa`PH= zJoV!cRsQeBUDAM~WPlpPux(H)^*EMtiD|^EsNS!(G4=UugZ<2O4-XxzLc8$Bzwf3O zvL3h#=!{#Q060FR#E05wVwfE9jG(Ioz*H1`!;|C~4=kXRAwfcG*Re@gz}x4*HJ1Sb z;E5I)F%y6Fh1~E})j)>kX!`IoH9vH%0IRQ0MD!m0q}*$-Hn=x)LFb(WIx{}Zkdsz zJ1z*>(*>kggtfW2or!pZkJsI>u@c%7P*S?R5IlpBJ4G-Zn0-(2D4*244_>#94Mdyc z8-}ox??>kFJn%#$F7sK@`tRu^n< z=O0}`G?(zL#Ks>kT>(<}BL&JG)K~&cUr+(%F)F%EFJSZ4bZGa8Y=()|n66LGO7HIGJqI%4q?F=E-|t!yqYXXX@FUPv+ddx@Ri69} ze687fS@oH4bgadp@fR_Qu7bI++uPYMEmPcH87m_m`0o0!n0=c6y5JeyWzj= z$;~?!sj>FrL0D_o3U!CHc$yd4_Zn_{(>UIGpSaVuKXIOhqnd=HnHHCA>`}?cfz!^h z!m`OMinlDvQTZ>ds^z3~)!Kt<;|toJ#xfjgqb>MaV?Qc|j?LfwEaBfwL5Z48gmP}D zLF`t_w031__Mb`VFWsm?n;+H}XTh6cZntvx#y%#xCA@h&Nq=*FdqU zP~uLTDWab}tSQ5Dzor?TBx=i&gs!oq;JP1S^?Wu?ZYAbH+jDd-0ifz{cV;zgI#l0E zU%QQ!+8=w?y|kFghCO`M^m9JW`^7rg;w<^35bahv0~_4yVh{LynqiYyTi}$?5PUmV z=dlu5kcYl*HrO8N#ymaK<7)re#q0zX!}DtB)~EQ}(p?4wz?HU`Tze0s=&Q?$6y^CG zc)o<)00>3`YdY@l!nqrX)D0Xd`K84hwGOzJH+cCmID*4tQMM01iJ+6U#907YHYP_G zG*(4e6Yn-(8c!tE-~c$4ANcc81a2P`!&C}V2L?AD@l;ez2m261@X?m3SSNBQ4h zcq0C@Decd!9@M3^F}6<7o%!2V`|i$(Nygv=s1Z5rK6du5ZOY9B^VtpGN|`$Uoi%)Y z$L@d8@LnR#gW=1PC?F12gb&vNeh~z!4oHv<$bQsT^fXhI(sCjxyj+R@1jekIe}mVg z6tp0^!B@MSXB6Tt_!sdVkV0{`}{EHh`inys{QMpbQ0FpQQx8qz65vq+v?X&gH7P zj2=62A^?&GmI;7UqFs4gb_-OuNSt|0@C^{`0Xt=VDH)uXxhry~ z6)Mu<_TV#-8Asg9fAmuh{i#zy;Z4oJ7m~y@bE5Zn!UjH9N&w~GHV+G&W(S{yx1%fa z?uDrUw><@eU!kpb4{^liI{W4f08*?Sc&c_OMe&I zKtFVyzC&1G6CDhux|F!XMT5)73fnHb3iX>*jpsGh)#>oi=h*W;pb5ziXRalNK2?_x zXD1VFdqiz#r?6{A+oQy_(6P+e3?^@Fuy&FM~Dj4NMq&w0zJmj2agChtE5A07uPfK&YHJAtvS?EB&oi<*-++x%)` zdHL8n#I6_lUR51*!L$2)2OsW~!WR?qvTs)QW|Z4!>O;H&M(C0{!2-S=2?(({Pa3eM~Hp!pGpEJ z8fX8ZBpc^Xv^TnV|Gi%{LT)a%KX3Vi;-|BSl%RR+l+d?ha&P9P?3=i>X3^p;_qol+ z?A$_)o1!OAO;ebXvAhjrGeOeu<#(RY^J}%@SW3Orp_7LrWo|dVLK(J*Abd*YI`)Bx zB0a!yTa+3_JvwArJ$J!oz>)Ps(plvVhrW~V6(Ay}jYi-b4&!b6TuK1&zm&GwOo>r~ zS+<{dTBOW(O;&nPQ-;2HAmY@KE2M@xN9i!CLb{ch0(ti9iarh~&-TE{Zja`W=cs;D zF;DZCK~of>fn9Yo$At}k-Xa1Uw^Er+Z-yzwIfo8CBgRhwF6%28=}pQ`NArJV|J^?{ zSe$8YyD6E4sXWR7<^+@iyYU?LD7R2AQK}Q|DC+6vx0i|_&oi*q(>9h(YDGUEBQeHbO>y;9Z5ffqUqkjiN9xI4T$sW;@d)2RgdMg4hRsd@+Fm%j@2(6 zwLU-SeUDFx=7g)gN=*XGQ-#h{OXoc)^{_o*_A;V*Hd{~sV`wx;PK^mhwYWSLwy0gz znsFkRRdmRAJD&m2O*z_p(0}4K;;Qn9t~p~jf2_+_{H}w{%tJM7fb?xH)L*q6`!~K< z=%UX5-kAPdHe&u8dngxGyP)U=<}NUIfzk^SUXbvDgcl^dAmIfGFGzSn!V3~!knn

AKIVTc^idrpӄ大?B66440*/)0'/&0+1,%,%,)-)-/0-.31422/.+/0237;6:EIVZǂ֢hm9>-5'/(&)'/-/-*2*2".".(0(0/1/1/1/1)/)/'1'1)0)0//..8697JH][vzQK<6+/,0),$',2,2'8%6$1%2,3,323232222////+0+0+0+01/1/623/4231:6FBaZyr姧>4>4(,)-'.'.,4+3"4 2'4(5/4/4434351513/3/-/-/,.,./,/,2-2-53648192?+;'F<]S݁Чa\4<19/5/5/001).+0)2)2.2.221214/4/2/2/....-----,-,0,0,/0.//+1-3#4$9-5)85>;gmq}OR@C8.8.2&6**.)-+.+.,-+,,--.-/-/.0.0././,,,,****)+(*),+.)*,-3/1-7250:785OQqsﳽhVO=>+=*)**+*,)+&*'+&-&-'1$.)/,2.1.1,/,/*-*-).).(2'1)6)6+.+./+/+5.2+0,0,OUou紸㵱|oTG,*0.,.+-%+&,$-#, -"/+2+2.2.2,1,1+/+/*.*.(2(2'5'5).).++++.,.,//..5230KLwxrvFGBCJDUOdZj`ᅌ˛ᵽ{zUT5689-2-2*3*3%0&1-3*0.0.0-1-1-1-1,0,0+0+0)0)0*.*.+.+.,0,0-2-281:36677XY|}칺HI:;,0,0*,+-./-.4:=CHMSXvyՓ_a6969.2-1*/*/*-,/..../////////0/00.0.-----0-0-2-2-3-3-3-34,3+2334-3)/YZ͒YI@04/:5$,$, 0 0$8$8--((+),*9472LC^UzpٔWZ33--1/42-+.,-,-,0-0-1.1.2/2/2.2.0/0//2/2.4.4.1.1//..3+6.)*%&'-)/87<;}v~y˷hg<;/*4/....(-',%.&/)3)3((((--...--,21/.1/31KK[[~ΧTO=0@3-&-&&,&,&0'1*,*,1,1,4/4/10101.1.0-0-....,0,00/.-+,,-*+&'02+-/3GK֕UZ3)WM굾@K#',0*.*.,0,0-0-0.0.0,.,.-/-/,/,/+/+/*/*/).(-23./7441HFqo⢢{TK..44+3(0",%/'.'./-/-2-3.10102+2+0*0*.-.-+1+1,0,0-----,,++/+/&1&1>?`aOJ<7:/7,c_zyAB:;-0/2+.,/,0,0,0,0,0,0,0,0-/-/-0-0-0,/+/,0,1,1.,,*3.3.51<8MIYUppϐqJX),.11,-(*0*0,1,1.*/+.0.0/./././..0.0,2,2,1,1,.,.,-+,-0/2,5(1=9@<[Ufd.%=41.-*?1YK㴺_Y?94/72+--/,/,/,0,0,0,0,0,0,0+/+-+-+.+.+.+.,0,0-1,0*+&'"!)(1..+211003993/62+0+0).(-)**+)1)1*3*3-3-3/0/0-3-3,0,0,.,.)+(*-1.2,(-)6,-#B?da۹y1/64%,-4'4"/@29+iu9:78,/-0+,./0..,,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0-0-0)1(0$/$/(2&0'2&1(6*8+2(/2)0'74OLԇ׭EA<8.//0'+(,++++&.'/(4'3,1,10-0--3-3,1,1,/,/*,+-.1,/'))+*+./9854`_yoC9..//'2'2'.%,71a[rjA9,&3-&1%0*2*2/,/,,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0-3-3,3,3+1+1)0)0)1(0*0*0.+.+5/3->9GBstgk22334040-),()/*0(1'0,.,.1+1+-3-3,1,1,0,0,.,.-/-/&.&.(4(43333;0B7՘<693-/&(+1.42.)%jlȶno3+;3*!-$&3&3*5*5.-.-,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0/0/00/0//,/,-,-,,+,++0*/(2)3-+-+4+3*?9E?qq̠QU7+:.5061-1+/'.(/,,,,1+1+-2-2,1,1,0,0,/,/-.-.'2'2'9'9-0.1=-6&KLPZ0156),&)12347/QI乿VX570-63*#0)*2)1+5+5,/,/,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0././/-/-.,.,-+-+-+-+,1,1)7)7)-)-.-/.1,3.:54/nxmbH=94;6/1.0(-).,-,-1-1--1-1,1,1,1,1,0,0,/,/+2+2*6*6+.+.1'2(>>;;ɀTW7:,4(0'+'+97/-YW&*7;*.&*1/0.////-1-1*1*1-/-/-0-0-0-0-0-0-0-0,.,.,.,.,/,/,0,0,0,0,1,1+1+1+/+/+/+/,0,0,2,2+3+3&1&1"-!,.3)./,30=7ICrsϟMJ85789:&+*/,/,/1111-0-0-1-1,1,1,0,0,0,00000././*+*+,,,,4387BEwz.*1-*3&/)+)+84EAҤ{(,+/%1)515152-2--.-.*1*1,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0-0-0*3*3)4)4)3)3*4*4+6+6,2+1)*)*#0#0"4#5(3(3,.*,:'8%<3KB}ıgd4635-2+0+1+1/203-0-0,/,/-1-1,1,1,0,01.1./)/)+**)(/+2..00:583υx9@(/)0/.)(9,@vx:B)1,7(31..+@5>3؃~~-*52.2.2.1.1.1.1/1/1.1.1*1*1*1*1*0*0*0*0*/*/,0,0,0,0,0,0,0,0,0,0-/-/-/-/-/-/-/-/-/-/-/-/-0-0-0-0-0-0-/-/-0-00/0/+,*+,.)+7:ORӓ=@7:+0+0/7'/)0*1+.+.-0-0-2-2,/,/,/,/,0,0-0-0-0-0,/,/-/+-6734ʂss*2+3+3'/5410>=VU{.(600/0/101010102020////*/*/*0*0*/*/*0*0*0*0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+1+1'0'0'0)249,179_aٯ_d.)72-,-,),),*4*4,4,4,.,.,2,2,2,2,/,/,0,0,0,0,/,/+1-336.1D9y~{EB(0-5)1'/64.,^dy-$5,1)1)1*1*1+1+2+2+/,/,*.*.+/+/+/+/+0+0+0+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)2)2$0%1%0$/)/-38721H@rjohB;/'6.*'*')7)7*5*5,,,,,4,4,3,3,/,/,0,0,0,0-/-/*2)1,004>)L7HC72)/(.(,-151;7֛x*%2-,*,*-,-,---------.-.,-,-,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+0+0(2(2'2(3)-*..),'9.5*]_˜B6>2-)-)*4*4)4)4*-*--2-2-2-2,/,/,0,0,0,0-/-/)3'1%+'-=(:%[Uhq0*4.+.-0()23;7miw(*/1(3'2'2&1(3)4)6(5(/*1.--,..0001./.0.0.0.0+/+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/2-2-././+0+0)+*,.(-'5*4)78CDzȷb\2.2.-.,-)/*0*0*0-.-.-/-/,0,0,0,0,0,0-0-0(1(1"+$-4)3(C<]V?G*&1-,,((10*)\[Ʋx*-03&2&2(4(4(4&2$0%1+2+2//00./-.--........--+/+/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/6*6*4-4-10100/0/1-1-/*,'12/0:=QTѡST:;0*71-/+-*3*3,+,+-,-,,0,0,0,0,0,0-0-0*.*.%-%-././<772usAI19(*-/0-,)::44ϟ-+31),'**++,**++,++***//04,0+-.001-.......--+/+/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/6*6*5,5,4/4/21212121+.),*.-1//..JG|yin:4=7-,.-)2)2++++,,,,,0,0,0,0,0,0-0-0,-,-)/)/+5*4520-B<|v%)/3)/(.3052;=fh+%710-1.3.4/6/4-3)5+8260/304/1/1//000.0.0./-,/,/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00.0.1-1-0.0.0/0/0101*0+1)1'/),,/9674hmƢhhCC1122)-)-*.*.,/,/,0,0,0,0,0,0,0,0-.-..0.0)4)4+*/.<6A;ה\S&'+,&/$-622.S\ĩcdkldo_jW^PWHLAE9:783636(-).*-*-**,,/,/,/+/++/+/+/,0-1,0,/-0-/-/-/-/-/-/-0-0-0-0,0,0,/,/,/,/,0,0,0,0,0,0,0,0(2(2*/*/,,,,,-,-+0+0%1%1&3&3(/(/202098JI˦r~2648''((*3*3-4-4,/,/,/,/,0,0,0,00/0/3131(2(2((&&612-X]nfH@)*"#%/$.:572ғoy]gOVGNAE:>//--/-1/.+/,.,.,-.-.+0).&1(3,5+4+1*0(,*.*.*..0.0.0.0,0,0-/-/-.-.-/-/.1.1(3(3)/)/+-+-+-+-*/*/)3)3%0%0)1'/----5342OMxv|~EG/)0*&1%0(3(3,0,0/1/1////,/,/-0-02121*/*/)+(*,,))=@VYA@32'+$(+3*2B=543)9/6*6*0*,&&-+2&7&7(3(3*.*.+1+1+2+2+2+2+2+2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/+-97-+VU6677*-*-(/(/-/-//-/-+/+/*0*0,/,/,0,0+/+/,1-2,1+0<=ghUX;>),/2+2(/57EGְg_ME4-6/3-600-1.)2)2&4&4'1'1+/+/*2*2*4*4*2*2)0)0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0),-0+*.-95?;͗}EB+,01)/)/+,+,,-,-,0,0,0,0,/,/,0,0+/+/,1-2,0,0;:43ɤ4657(,(,&.-5:;uvmtCB875)6*-*/,(2'1'2'2*++,+2*1)4)4(1(1'.'.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0'-*0#)$*74/,JHsq;=68+1*0,,***-*-,0,0-0-0,0,0,0,0+/+/,0-1,/+.100/`d}*,57%+'-08*2SSRJA91*2+13-/(**,-,-,)-(,'.)0(.(.',',,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0(0(0"1!0.1.1:.;/}vFK2604//**(-).,0,0.0.0,0,0,0,0,0,0,0,0,/,/.-/.<@{QY$'.1$)#(2;'0†ghEF1.:73-0*.,.,..00,/*-),),'+'+,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/*0*0%6%6*1*13#/C5hZ;>:=+*21)0(/,0,0....,1,1,1,1,0,0,0,0,/,/,.+-7;FJyz89),+.(,&*4=9BƻihGF3,3,447720/--+.,+-+-).).,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/-1-1+6+6)2)2+#,$9.3(munp@B8800'1(2+0+0/-/-,2,2,1,1,0,0,0,0,/,/-/*,,1',yVO=612./+-+-2:aijmJM362585850,1-,/,/+3+3-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0////3131)0)0).&+3254=<]\⵼uv..22(3(3+/+//+/+,2,2,1,1,0,0,/,/-0,/,/*-$'*-MXA3C51212+,*+6@ُ|yc_[WUORLRKTMRKRKTOYT_]igzӈᖟܩck8@.-542.2..1.1,7,7-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02/2/8,8,*/*/%8#6.7/88,8,efTR42'4'4*/*//+/+,2,2,1,1,0,0,/,/-0,/,0.2(*)+=Gr|vy3096"').(0$,om|vSI?57,<14231.0.0/001/0/0.0-/-/+-*/*/1589-<0,+0/$3&5$2#1+.,/1+1+1,1,----,/,/,0,0,0,0,0,0,0,0././1-1-,/,/)2*3/5+11-3/@7SJ׽[g,/-0,++*+0,1(5(5,1,1-,-,,+,++/+/'/(0.-,+88MMݾPZ-2/4#%+'4,9ܮgd@7<31&1&0'0'+-,.(/(/)/)/)/)/)/)/(.'-&)&),--.320/68=?ORZ]zΘf\F<2-50&-'.!/-'++/4.3-2-2-----,/,/,0,0,0,0,0,0,0,0,0,0+0+0-0-0-/-/+.,/,/+.:07-efDA?<0)0)+4)2'5'5+2+2-,-,,+,+*/*/%.%./.0/5/3-}>G01/0$('+(5CPgh=>>?3322,/.1/2-0*/+0*/*/*0*0*0*0*0*0+0*/).(-..//638587437575?8A:QNmj➡黾KH740(1)+,()'+)-(/*1,3,3,1,1-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/7542>9faJG.)50+.,/)3)3*3*3,0,0,/,/*1*1&.&.0101611,Wd\c290.0.++((1>ivrx89231414&-*1&0%/#/$0(/)0+/+/*0*0*0*0*/*/*0,2,2,2./010..,3.4/40407(4%3(4)C@OLnr•|{I=>22(2(,1-2"3"3&6&6.4.4.1.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/-2,1801)ql736221.-*0+1+2+2+3+3+2+2,1,1'.'.0404402.@E?E06.+-*-,)(?LAI5=11--*.)-)5'3"0"0#1%3+2(/+0+0+0+0+0+0*/*/+0-2/3-1,/-0..---+-+-*,)/)/)2-1,737375;9SOws\X=2=2-2.3 2 2"3"3-4-4-/.0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/&0%//*3.@9rkjh=;2,2,-.-.+0+0*3*3,3,3,/,/).).16162//,<8[W,2,2,)+(1/+)Zew{AE,4(0%%''+/(,'0(1'1(2(0(0).*/+0+0+0+0+0+0*/*/,0,0.0-/*.+/*-+.),(+(+(+'/*2.3,1..113/3/5+1'=8VQ⚚upTO/247!-".!+!+,0,013.0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+. ,++/*.511-}yff0(=5.).),,**)1)1+2+2,,,,*-*-17171.0-;37/۲gq'-(.*)*)742/ׅ8271(-',*,*,-/-//2/2/0/0/,/,+.+.*0*0*0*0*0*0*0*0,0,0....-0-0+1+1)1)1'2'2&4&4'2(3+0+0/./.1-1-*+*+BGLQԊʺWX>?&'-.%'$&22//,/.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/#,#,'5'52402JBɂzJ@=31*1*-)-))/)/*1*1.*.*,.,.1515/..-81-&㇌CM).+0,-'(95B>ׯutCB+#2*())*,0,0020232323/3/2+2+,.,.*0*0*0*0*0*0*0*0,/,/.-.-,1,1,3,3*4*4*3*3'1'1(0(0*0*0,2,2.4.4%0'2-6$-?9RLҏܽyy934.3.+&-,21*-.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/)+)+'9'9+2/68/=4ڜE=5/4.)$.)%+'-*0*0.).)....1212,0*.4/*%]a4>+0(-+2&-97XV|5847.*.**).-,2,2020240403/3//-/-+/+/*0*0+0+0+0+0*0*0,/,/.....1.1.3.3-3-3-2-2*.*.*-*-+/+/,3,3,7,7'3&2&-&-2.0,C7RFوѺQL61>943/.,/-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/1,1,)7)7'1$.813,RW~78561--)&-&-*2*2/,/,/./.2-2-+1,2((00IJgr4?-2(-(4'3;;uuqr?@'/,4*.'+2,60)1)1.1.12/2//./.(1(1)0)0+0+0*0*0*0*0*0*0+0+0-0-0/1/1/1/10.0.1,1,////.-.-....-/-/-3,2.01302-/(++.31,*86MKюVX:<./23.1+.-/-/,/,/,0,0-0-0-0-0,0,0,0,0,0,0,0,0././9-9--2-2$-$--,/.74TQPY2;.-+*(0&.)5)5/0/00/0/2)2)(109%**/:9vuLT2:,0,0)3+5?>5162%/&0*3+4834/'0(1+.+..-.-,/,/%2%2(1(1+/+/+0+0+0+0+/+/+0+0,1,1.1.100001+1+2)2)02020000/,/,.*.*.,-+4+5,100/&2'3*2'/4310DBXVڠox0224.0,.+/,0-0-0-/-/,/,/,0,0,0,0,0,0,0,0,0,0.0.0;/;//-/-$+(/)-,0824.׀vDO)(21%/&0)5)5020200001(1()3(2+2*142XVA>63/,1.15*.OQĥUU*)-,+-)+/2/2,/,/,/,/,/,/-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0-/-/-/-/-0-0-0-0-/-/-/-/-/-/-/-/-0,/,0-1,0+/-0-0,0)-5?Xb~tG=0*4.'2)4,206.(.(++++*2*2-/-/,0,0,0,0,0,0,0,0././-/-/,/,/,/,/-/+-=8vq:0B8$/(3(.(.0101-0-0-,-,,.(*-2+0-8-8ڦ3/40/*6134./_d˽ab23,.+-(+*-0202*.*.,/,/-0-0,0,0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0,0,0,0,0,0,0,0,0,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0,/,/*/).-6#,FK;8300505)-.2,+,++.+.+2+2,/,/,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0+.+.40;7䖤ha5.*/+0(.(.././-0-0,.,.----.2+/(5!.،t*)32.)505432x78;<(0'/(/)00303+.+.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,1+006/588==jhƨRV1/7531-+(/)0+2+2.0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+.53.,[_OQ--..(2(2+/+/-1-1,/,/+--/,1+0-6'0uwdm++11/+1-8484יe`-126"-(3%/(20404,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,1,1-3.42020;8HE܍NG<51,-(%2&3+4+41.1.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,//102<7a\0,62*2*2(/(/,2,2,0,0+-.0,0+/)0%,ZYXa-/+-2/-*:3:3պ~A<,2%+"2 0(4(40404,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/-1+/+/-1()'(,.(*CGhl۶mg+,23&1%0-0-02-2-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,2-39090\Y:7-1-1&/&/,2,2,1,1,/-0,/,/'-*0FEGM+.*-/-.,;4D=QL61(.'- 1.)5(41313+/+/,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0,.,.%,$+&-&-68/1XVġJS09)--1.'0)1+1+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/+5(21*/(LMGI0-30%/(2+2,3,1,1,/,/+.,/*-,/CAtr<@(.(.,,..B;_X8350',',0 1*2*21111*/*/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/,-,-"-"-%/!+01454+:1ٌ[i.,200%2'4/2-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/(3&1,)1.9:TU5.70&0)3,2,2,1,1,/,/,/,/+.*-<;SRxx::'0&/*,+-G@zsci/+3/).).#2#2,1,11/1/)0)0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+-+-'1'1'1)3*,)+1*.'GDkhUR;82(7-/-/-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/)4,7'*+.56./MH:5)1'/,0,0,0,0,/,/,/,/+.+.74=:gf98&1$/).).GBAC/-20+/,0%2%2/-/-2-2-'2'2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+/+/*/*/.1.1-./0/1+-(,%):662gjce1.85//--+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0(..4*0)/741.HGEG*./3-/+-,/,/,0,0,0,0+/+/5353۾WU75&3$1)/(.ID}970/.-0202(2(22+2+3+3+%3%3+0+0,0,0,0,0,0,0,0,0.0.0-0-0,0,0,0,0-0-0-/-/-/-/-0-0,0,0,0,0,/,/-0-0-0-0-0-0-0-0-/-/-/-/,0,0,0,0,0,0-0-0*0*0*/*/4-3,9/8.'++/#5!33,:3E>[TշGN07(+*-,0,0-/-/-0-0-0-0,0,0,0,0,0,0,0,0,0,0,0,0')*,-4-41*.'@7_Vep%$.-++++-.-.-0-0,0,0+/+/302/ߤDA85&4#1).',SQd_50.1+.0101+1+10,0,0,0,(2(2,0,0-0-0.0.0,/-0,0,0%-%-&,&,..,,+,+,(+(++1+1)0*1+.+.+,*+./-.-/-/,0,0+.+.+.+.*/*/*2*2,1,1,/,/,0,0,0,0-0-0+0+0+0+03-3-4+3*/3.20%6/2,/813,YVPY/'5-,,..)/(.)0)0,/,/././-0-0,0,0,0,0,0,0,0,0*.+/+3-5.'0)?53)Ն<53,.-,+*/).,0,00/0/././20/-ڐ1/97)2#,,-'(deQI3+*1(/,/,/-/-/,0,0,0,0-/-/-/-/////00//,0,0-2+0+.(.!'0)2+*'-*-0,/+4+4'5'5*+*++',(0-.+.1/2+1+1)-)-(,(,'0'0%6%6*2*2-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/,0-0,/&5&5(+(+/1;=ᘢN9D//*,'%0'2#2#2*.*.1/1/-0-0,0,0,0,0,0,0-/-/*2*2/3/32-2-1,*%UWrgC81/-+$0%1+1+15-6.1.1.45/0Ո1/86'1",./'(moE=91&-&--/-/,0,0,0,0,0,0,/,/...../././-.,/,/.2,0&1%01357DAKHAC7911553377-3,2+.,/-.,-+0*/*4*4.2.2,2,2,1,1,/,/*,*,,.,.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)/)/).).3401OOG>/.32).+0&0$.*/*/////-0-0,0,0,0,0,0,0-0-0*0*0/1/10,/+/*.)>?YZQJ-,21$/(3*/(-3.3.....24.0~}1/86$.!+0.)'vx>49/&.'/-0-0,0,0,0,0,0,0-0-0.0.0-0-0-0,/,0,0/2.11414a`ō鯯Ꝣ㒗؈|xe]ME3827/4/4/326-3/5-3)/.+/,/0/0/3/3.0.0-*-*----,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/*)*)*0*00033:2LD١578:2/*'*.'+*0*0////-/-/,0,0,0,0,0,0,0,0+-+-0.0./+/+-*/,5689ʜ-,87)3&0'-'-2.2.,.,.02-/pn1166",!+1/*(~8-9.(/+2,/-0,0,0,0,0,0,0-0-0.0.0,0,0,0+/+0+003.1=>depwU\?D6;*+.//,/,/&0'0,0,/1/1-2-2-.-.-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+)+)*0*0.-+*:/3(JJej6;7.6-)&+(*1*1////-/-/,0,0,0,0,0,0,0,0,,,,1-1-/,/,()()4624XRFF66'/&.',(-.-/.*.*..1,/ba1256+ ,51-)0&:0'/)1,/-0,0,0,0,0,0,0-0-0.0.0+/+/*0*0+0+012,-Y]c^LG:.4(.'0)/+.*,,--*1*1(4(4,2,2,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,-,-*.*.,+,+2-7244BB՞^e5(=0+%/)+1+1,/-0-/-/,0,0,0,0,0,0,0,0+-+-1.1.0.0.&-%,26(,A;~x|}AB)/-3$*'-,.-/(/(/,0+/YY/214!-".93.(ۉ.%7.&/&/-0-0,0,0,0,0,0,0-0-0.0.0*/*/(0)1-2(-....{ph=E3;-/13-+,*(-(-"2#3)1*2-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0.3.3+*+*)*+,/5/505*/NIB7;02,2,-2+0'+-1,/,/,0,0,0,0,0,0,0,0+/+/10100101$1$1(0'/96C@ڵ``)-7;%*).,.-/(.(.*-.1PQ)-04$0#/6//(ؑ/'7/&0%/,/-0,0,0,0,0,0,0-0-0-0-0)0)0&0$.*/+0/-75捙o?J4?/.43*)('%-'/*0(.-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-1-1.6.6,),))++--:+8*1)0<2LB߸xJC502-+.-0,2(.+/,0,0,0,0,0,0,0-/-/+1+112121313%3%3&1&13142v~1357)+*,-1-1*.*.(*+-EG*.-1"-%080?7㦧.(5/#/$0-0-0,0,0,0,0,0,0-0-0-1-1'0'0$.(2)/(.0-74ፗQS:<0-52,,))(++.-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-1-1-6-6,+,+*-+.,7+6'0'07-0&WU|}--::-.'(*1*1,0,0,0,0,0,0,0,0-/-/*2*222223131'4'4(1(10./-ELTS87,,,,/1/1+/+/)*+,=>,2,2,"/7.@7⭭,'2-."1-/-/,0,0,0,0,0,0-0-0-1-1&0&0$/$/*0.4>:0,pt]^891,83++..,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0,0,0-/-/-0-0+0+0'1'12.0,?:`[KN58-,.-&1'2,0,0,/,/,0,0,0,0-/-/)3)31/1/4-4-*1*1,0,0.,,*17]c|z;9/-1/1223-/-/)),,:ִPN/-203333////''**9?56%0(3+/,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0+.,/*.*.21/.SRvunq/157////+//344///113'2(3/,/,0+0+*.*.#4#4,0,0,/,/,0,0,0,0-/,.,5*3,+-,32>=⣰YNB71.,)-/-/././/,/,,+,+(2(2+1+1,0,0,0,0,0,0-/-/)2(1*..2IG@76---+0+0-*/,AJHZX`^mi~z砙HM41413131-+1/02,.(0(0-.-./-/-,/,/'1'1,0,0,0,0,0,0,0,0,/+.,4)1&(,.311/ZaE@.*3/,.,.-/-/.-.-----+0+0,0,0,0,0,0,0,0,0-/-/)2'0',-2>:hda^85(4'3+0*/,0,0:>uz+0.3',).2288৮NK30.0+-+0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,--.,,*--,,,*205-4,E8G:jYЄsꠔa]?;2-721-0,)*)*(.(.-/-/////-/-/+.+.,0,0,0,0,0,0,0,0-/-/)0'.(.*01256AAppst4.?9,-,-,/,/-/-/...././.-/-/,0,0,0,0,0,0-/-/(2(2(/$+A:JCسDG'0.7(-',+5)37@z-1.2',).1098⧭d_83,(.*+0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+.*-(.(.*/+0.2-1,+*)2*1)A1:*>0RDzrӟ}y;:321/.,*'-*',(-,0,0.1.1././----,/,/,0,0,0,0,0,0-/-/(.(.,6+5-0-08473̎WO@8----,.,.,1,1/0/02-2-.-.-,0,0,0,0,0,0-/-/'1*4&."*<36-}`h'++/'*),(1(18B|/203(+),2165ᠦ~>;/'0(,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2+2*1)2(1(0'/&)'*30528260=7@:XXrrգSY,,99.+)&(,)-+0+0,1-2..../+/+,/,/,0,0,0,0,0,0-0-0*/*/%1$0*.)-5/60TYKC.-.-,.,.+1*0.2.24+4+/-/-,0,0,0,0,0,0-/-/)2)2$+'.4-0)W^1111*)-,%*(-<@|/124*++,32/.ܐGH1)2*,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00/0/0000.2.2+3+3)2)2&2&2$0#/)-)-..--3412GKbf豪RW7<.*2./1.0-1-1+1,2....0,0,-/-/,0,0,0,0,0,0,0,0,/,/(3(3'/'/-(.)6:`dľmg/023././+1(.-3-34+4+/,/,,0,0,0,0,0,0-0-0*0*0&.&..--,=Cx~@=30+&0++*.-EB0044,.,.12()هhn-&5.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,2,4*4*2-2-////-1-1'3'333"/"/&+%*-/-/,-)*JCibؤks94<7121203/2+0+0-/-/.-.--/-/,0,0,0,0,0,0,0,0-.-.)1)1'/'/,*+)7:36Ȉ>>77-,-,)-(,+3+32-2-/,/,,0,0,0,0,0,0,0,0,/,/*/*/*.*.48FJkh74604.1.-*SM2143--..34)*܂5173+0+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01+1+3)3)1+1+/,/,....)0)0"3"3$/#.'.'.&)'*,-,-8620A@edٱnlEC449934-.)-*.*.*.,0,0,0,0,0,0,0,0,0,0,0,0/./.,0,0(1'0'+)-88//QReg686150(+*-)3)3////.-.-,0,0,0,0,0,0,0,0.-.-.0.0(2(204*.զ?@2-4/=;42]Z/.32,*-+44--|MJ52+/+/,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0....0.0..-.--.-.,.,.+/+/*0*0+1+1*0)/*.+/+.),(+(+7452OGwoĿ{{852/2244,/(+(/(/)2)2,0,0,0,0,0,0,0,0,0,01.1././.(2(2*4'1+*21B;rkEH5.5.%$*)'4'4,1,1././,0,0,0,0,0,0,0,00+0+2222%6$5.0#%ry]c843/47GJƊ2/74**((01*+s|ww;;+/+/.1-0-0-0-0-0,0,0,0,0,0,0,0,0,0,0,/,/,2,2,3,3,1,1+0+0*0*0-/-/1-1-0101.2/305.3,1.3&-&.*/+C7@4d[ig643074()*+'-&,(2)3,0,0,0,0,0,0,0,0,0,02.2.0-0-(3(3'4+80/.->2;/ؤnr2+4-+)*('2'2,1,1-/-/,0,0,0,0,0,0,0,00+0+2222&8&8*+!"NREChf蒚ﱹ/(;4#-",)3(2jlcb(,)-2.-)2,2,0,0,-.-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/-0-0-0-0-0,/,/-0-----.,-1201698;w|ܹy5,7.----+(*'*--0,0-1,/,/,0,0,0,0,0,0-0-0-/-/,0,0+/,0,/+.0.*(]eB=72.4)/.-.-1-1--1-1,0,0,0,0,0,0,0,0,0,0.0.0,2,2(.*045rs4,=5%0$/*4)3dd(-/4*$1+1/.,.2.2-,-,-/-/,0,0,0,0,0,0,0,0,0,0,/,/,0,0-0-0-0-0,0,0,0,0,0,0,/,/,/,/-0-0....,-,--/.025478:[]⽸jg:731.,+**)02-/,/-0,0,0,0,0,0,0-0-0,0,0,0,0-0-0-/-/,/,/..,,=A}c_84/3*./,/,0-0-,1,1,/,/,0,0,0,0-0-0+1+1-/-/.0.0)1*232RQ@:;5'1%/(1'0XXX`8@1)4,&,)/*7*7.*.*-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0.1.1,.,.--..,*4284/+]VÕhq0-74/5%+,0-1,.-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0--2287FEGE-,/.,.,.,/,/,0,0,0,0,0,0,0,0,/,/,0,0-/-//0./)/*06554գTN:4&.&.'0%.JKPW0)3,%0&1(9(9/*/*-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2.2-/-/,++*,(+'1,3.5/<6֎UU661818-/*,+.,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-+,720+ېqq,&5/*.*.*1*1,/,/,0,0,0,0,0,0,/,/+1+1-/-///..)/*043,+}fa>9'.'.)1(0CC4275&3#0&4&4/+/+-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1.1-/-/++((+*.---++/.*)=AptRU),5801,-+.,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+.),4./)ZY8.:0(0(0(2(2,.,.,0,0,0,0,0,0-/-/+1+1,/,//./.).(-.-,+XZzu>9+.,/+2)0@=}zjn<@+2*1(-',1/.,,/-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0././....*,-/)-(,'/'/'.)06813{z<8730/-,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0*/)..*-)A>{xYO8.)4$/&1'2-.-.,0,0,0,0,0,0-/-/+1+1-/-/0.0.)1'//-.,IJA<+-,.+1)/<9`]{./341,0+.//0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-.-..-.--0,/*1*1'4'4$/"--,*)EAmi{u?9510,+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0*1*1,-./85JG~C;(4%1(1(1--..,0,0,0,0,0,0-/-/+1+1-/-/1-1-(2%/**))<=^_JF+,-.+1*0:5E@da@=.&91.103,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+,+,././0101.4.4)5(4)3'1,,005522ub_6150-0-0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/+2*1-1-1;650Й^[!-(4,0*./.0/,0,0,0,0,0,0-/-/+1+1-.-.1-1-)3+5).(-99==XT+)/-+0+0;683zx<7?:15,0,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/)-)-././21211111+1+1,0+/+--/+1(.=HxHB:4.0-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,2)/14(+<37.ce,$1.+0-1/20,/,/,0,0,0,0-/-/+1+1-.-.1-1-&3'4(/$+5645ֶc`(%.++0,1;391֦quCG%,07,/+.-0-0-0,/-0-0,/,/,/,/-0-0,0,0,0,0,/,/,/,/,0,0,0,0,0,0,0,0,/,/(/(//0/050504-4-.*.*4-5..2,0#2%41919͏wr;6+,,-,0,0,.-/-0-0,0,0,/,/,0,0,0,0,0,0,/,/-2-2/2-03&7*DB*7"/0(4,2/41,/,/,0,0,0,0-/-/+1+1----2-2-'6'6#,%.3513זtq**//,1*/420.؃SP30()-.)+')*-+.+0).+0-2,2+1+/+/+/,0.0.0/0/0.0.0-/-/-/-/-/-/,0,0,0,0*/*/.0.020202-2-.*.*2,2,-5-5'4%201()OOee,+10./+,-4+2+.+.-/-/-1-1,/,/,0,0,0,0,0,0,0.2).160%6+=8\WIU)5/)0*0011,/,/,0,0,0,0-/-/+1+1-.-.0./-+5)3#+)1/1*,qn4905-3'-)1#+fex65.-&',-$(!%%+(..5-4*4*4)/(.),*-....11110101-/-/........,0,0*1*1-0-0,0,0,/,/,0,0,0,0-1-1,6,6.2.25,6-55EEϰ<:755/,&+7(4(-(--.-.-3-3,/,/,0,0,0,0-0-0*-*-)1(02/2/6194ᮼ}7B,/'*-0+.,0,0,0,0,0,0,0,0,/,/,0,0,0,0-/-/-0-0,-,-HI?B14+./2*0)/WVei9=9=/304(,&*&&&&'**-(+'*&(')*+*+*.*.*1*1+2+2-1-1-1-1,0,0+/+/,0,0,0,0,0,0,0,0,0,0....-3-3,1,11*2+<:/-jpil:=5.4-)2*3)/)/-.-.-2-2,/,/,0,0,0,0-0-0*.*.*1*12.2.2-0+܁BN,-/0-.-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.+-66NM32)+/1(,,0EBim@D:>+-,.*****+*+*,*,*++,'+'+%,%,&/&/)2)2*3*3+2+2,/,/,-,-,/,/,0,0,0,0,0,0,0,0.,.,-0-0,0+/-'-'8563:=y|QY/':2-2,1'0(1-.-.-0-0,0,0,0,0,0,0-0-0*/*/*3*32-2-5/3-^g[f+*21+,-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.88rrkg:6+,-.)+-/<7wr||OS;?+1.4/203/./.,--.+,,-(,(,&-&-)0)0(3(3)3)3+0+0-,-,,/,/,0,0,0,0,0,0,0,0.+.+././,0+/+)20('('66BB٫5,90----)4)4-/-/-/-/,0,0,0,0,0,0-/-/*0*0+4+41,1,2,0*CJ/,2/-,.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.66NNC=-,-,-.,-93YSu]`SVMLHG==::20421032//..+,+,(1(1(2(2+0+0....-0-0,0,0,0,0,0,0,0,0.,.,././+2+2,.*,(+'*44''fk̴QH=4/+.*)4)4.0.0.-.-,0,0,0,0,0,0-/-/*1*1*4*40,0,-(1,9=tx9540/.-,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.6699ԼQK/-0.+,,-40@<٫wtc^QL<6<690;2/).(,.,.&0&0+2+2.1,/,/-0,0,0,0,0,0,0,0,0..../0/0-4-4*0)/'-'-,.(*?AqsGA+'0,*4*4.0.0....,0,0,0,0,0,0-/-/*1*1*3*3.-.-+*-,::KKRO:7-,.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+.1223ךpi-.01*+-.4253ۈqgE:B74,3+1010(/(/*0)/.3.3-0-0,0,0,0,0,0,0,/,/,1,1-3-3/3/3,2,2(0(0(.$*9;68ӯ__.,20*2*2/0/0.-.-,0,0,0,0,0,0-/-/*1*1*1*1././(*)+5364ԢxvB@,+.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/*.04,0|.215,/),22,,_cȼ{JH:83445(-+0(-(--205-0-0,0,0,0,0,0,0,/,/*2*2,2,201010202+1+1(/(/44//u{.-54+/+/0101....,0,0,0,0,0,0-0-0*0*0*/*/-1-1'/(061,'{zGG.-/.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+0*/,3&-e`:A07.2(,/1+-JMĘu};tqps&.(0#/*64/+&mwPO-+1/1.1.$1$1'/'/1+1+././+1+1-0-0,0,0,0,0,/,/,1,1,,,,620,JS5,;2'-)/*0(.-0-0,0,0,0,0,0,0,0,0*1*1+.+.,-/0.2,0/4DIIK46(.(.(-(-3.3.0000)/)/-0-0,0,0,0,0,0,0,0,0-.12=8b]*6.:(6%301/0HFJE@;0,0,"0"0$/$/0-0-././+0+0,0,0,0,0,0,0,/,/,1+002,./+0,:?}E?82'-(.)/)/-0-0,0,0,0,0,0,0,0,0*1*1+.+.,,11.0,.2312۴WY68)/)/'-'-3.3.0000(/(/-0-0,0,0,0,0,0,0,0,0*/*/;3VNAM/;+5$.,1.37-kaHA1+3-#0#0#.$/////////,0,0,0,0,0,0,0,0,/,/,1*/*-,//,2/?@VW]Y:6+1)/(0)1-0-0,0,0,0,0,/,/,1,1*1*1+.+.-,0/,,..21-,ޘkk99+/+/(.(.2/2/1010*/*/-0-0,0,0,0,0,0,0,0,0'.*1:0D:qy5=+.,/,3+2=1G;7171'1%/%0#./0/0.0.0,/,/,0,0,0,0,0,0,/,/,0/3*.+/-,)(97;9Ҥ|zB@+2+2'/)1-/-/,0,0,0,0,0,0,0,0*1*1+/+/.-/..,0.1..+@=,0,0(.(.1/1/1/1/+/+/-0-0,0,0,0,0,0,0,0,0(/+2;18.ֱIL,)0-'.)03+3+脋暕䖑誥b]?:,4+3(2#-/1/1-1-1,/,/,0,0,0,0,0,0,0,0-0,/+/+/),),741.׀LK(-+0'0(1-0-0,0,0,0,0,0,0,0,0*1*1+/+/.....,.,0,.*jhKE.0,.'/&.0.0.1/1/+/+/,0,0,0,0,0,0,0,0,0,0+0).:1H?ټst5/82(/(/-.)*T\rzSOIEG8D5H9K9(.&,,6%/=_^԰:954--....//,1,1+/+/-0-0,0,0,0,0,0,0-/,.*0*0%1%1-.+,JCuw*-*-'1(2-/-/,0,0,0,0,0,0,0,0*0*0+0+0.0.0/./.0--*JHǾ`W-.12)2'0--..0/0/,/,/,0,0,0,0,0,0,0,0,/+.9630^\[ZA@$)"'"3$574DAݸGB500+,',,++)..3.2(,-+20<3:1QGie<81+/)0-0-*0*0*/*/-0-0,0,0,0,0,0,0-.,-)/)/"4"4+-+-E;})++-'0(1-/-/,0,0,0,0,0,0,/,/*/*/+0+0.1.1/0/00./-IFre--11)2'0....1/1/,/,/,0,0,/,/,/,/,0,0,/+.:2<4ٖMK)-'+!6"750/*~UT1&7,*$)#$*%+$5"3&6&6,2-34(2&>-G6ҜPK0(0(.,.,+0+0+/+/-0-0,0,0,0,0,0,0-.-.+0+0$5$5*.)-A7h^()./*3'0-0-0,0,0,0,0,0,0,/,/*/*/+0+0.2.2.0.0/..-A?~|{2121'0%.././1/1/-/-/-0-0,0,0,0+/+/,0-/-/<4ZRsj-../#3$4*.*.LJ?H+444--.*-)+.,/,2,2,2,2,/,//,*'50.)GM~|.'81$/$/,2+1/-0.,0,0,0,0,0,0,0,0././0000+-+-%3$265HGBG49,.*,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0+.,/<=ef6,8.%-'/,/,/0000....////-3,2-4,3(+,//+-)QP3322'2&1+4%.;9eceh#-,603),-+.,-0-0-1-1-1-1,/,/-..///11-3\b<64. +!,,1-20.0.,0,0,0,0,0,0,0,0-/-/0000-,,+$2%345;<۪W^3:-/*,,0,0,0,0,0,0,0,0-0-0-0-0-0-0,0,0,0,0,/,/98^]5+9/)2)2,/,/0000....././*4*4)0,300,,511-ڇ^`8:&,%+,6(298<;ՙGG*4*4'++//.-,,/,/,1,1,1,1,/,/--11)+/15;6<ΓVR3/$-$--1-1/./.,0,0,0,0,0,0,0,0-/-/0101,-,-%1%15410֍kq39/0+,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/75TR4+8/+4(1,/,/0000.,.,.0.0&4%3&-")0,51A=PLDI*+,-(2)346(*X]\Y=:-7'1&.)1+,-.,/,/,0,0,0,0,/,/-/+-.2+/05.3im{y@>*1)0,0+/-../,0,0,0,0,0,0,0,0-/-/0101----%0&130.+z|x~6<-/,.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/65KJ7/7/)2'0,.,.0000/,/,-/-/ 4 4#+ (81/(ROv~-*85)..3)/*09@ovC?73$.%/'0'0,--.,0,0,0,0,0,0,/,/,0+/*2'/-0-0VWQR(-*/+.,/././,0,0,0,0,0,0,0,0,/,//1/1.,.,'0*30+.)nn=A()-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/85HE?9;5)3)3,.,.0000/+/+,/,/55!)%->5;2דDC43-+.,*3*3399?ܵ;582"-"-'0'0....,0,0,/,/,/,/,0,0,1,1&/'0.1),EF^a$%./.0,.03-0,0,0,0,0,0,0,0,0,/,//1/1.--,'0(1/*-(aaEI()./,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/64CA㳶EA73*4'1,.,.0000-*0-*-*-!6!6+1&,=4jaDF5.5.'/&.-2$)fh0+61!-!-*0*0....,0,0,/,/,/,/,/,/,2,2'/'/(+),FGuy+(30,.)+.3-2,/,/,0,0,0,0,0,0,/,/.0.0/-/-(1'0.*-)VWMP-,/.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/2053ۣKI42*4)3,.,.0000.--,+--/)7'537/3e^ôim1,61&+.3'(01==,'72 .!/,0,00.0.,0,0,.,.,.,.,/,/-2-2'/&.',).EG6161*+)*,2,2,/,/,0,0,0,0,0,0+.+.-1-10.0.'1'1-*,)MPQS--..,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.2132ܜVU54%0'2,.,.0000-..///))/22556JK̴DC7610-,,*,*<;@?͠/,52"1"1/0/00.0.,0,0,.,.,.,.,0,0.2.2*/,1*0&,>C:471)*./.5+2,/,/,0,0,0,0-0-0+.+.-1-11/1/(2(2++**DKQS++00,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.028:䙡]^67%0'2,.,.0000,/+..,.,>6<4OKsy9?/$-"83*%5599[b531/"3"320202.2.,1,1,.,.,.,.,0,0/2/2,/-0(0%-BH<29/()-.+3,4,/,/,0,0,0,0-0-0+.+.-0-01/1/)2+4*+*+AIUU++00,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+..147Ꮩ[]46&3&3,,,,0/0/*0*0,+10?,B/ً^g5*3(,(1-1.3097[Y?E39&5%42.2.0+1,,/,/-.-.----,.,.-1,0)-)-,.,.QY>792(*(*(.+1,0,0,0,0,0,0-0-0+.+.-0-00/0/)3+5,++*@FZ[--00+/+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.23,-م``99/3*.----1/1/0//.908/I5kGA;5//$$3-3->/6'ᏓL[5D/7.61)2*/*/*----/-/-/-/-.+.+)-*.&.)192-&aj@>86*1#*+-*,-0-0,0,0,0,0-0-0+.+.,/,///..(3)4/+/+BA]^*+01*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.+-31)'~jh<:3-0*,.-/11118.4*C2D3{oɽ|C?-*2/+&2-3.2-KK|AE1065.*-)//--0/0/00000/0/0.0.*-.1#'(,;751тCA86(/%,+-)+-0-0,0,0,0,0-0-0+.+.,/,/////(3'2.+2/CC\]**00*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.,.42)'줧ۊ愇yyۂ݅Ӌus.(@:*')&,206;7EAϴaZ5';-,,**-2-21111111111111111,.+--/,.96a^BA76(.(.-/*,-0-0,0,0,0,0-0-0+.+.,0,0//..)4)4,*.,CD\\**00*/*/+0+0+0+0*0*0+0+0,0,0,0,0,0,0,0,0,.,.42*(؃ZR:2./+,#1!/73,(aa³O;>*,/,/,2+1////.0.0.0.0/0/0,.(*01+,RQ??55(/(/,.*,-0-0,0,0,0,0-0-0+.+.,0,0/..-)4*5-,*)BD[[)*/0*/*/+0+0+0+0*0*0+0+0,0,0,0,0,0,0,0,0,.,.43-,يTM/315) /(*.0:7]ZvN=1627+1+1+,,-),),)-)-,/,/,-013456ϒ9933'1(2,/*--0-0,0,0,0,0-0-0+.+.,0,0/./.'1(21/+)CFYY*+/0*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.,.3300ې3;5=)!+%-$,502-ro9<1403/2)*,-&*)-)-&*'+)-11..HJxz5555&/)2+-,.,0,0,0,0,0,0-0-0+.+.,0,0/./.'1'10/,+FJVV+,/0*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.+-2367ߚhneWB@75,)-*!+&00+,'A@rqDD3+3++-)++0+0+0+0+0+0+0+0+0+0,0,00.0.....&/#,2/-*qyy{;=/*0+.,.,,.,.,0,0)1)1+0+0-/-/+1+1*1*1-.-..*.*16JO~{;8>5:1Q\PP4&5'$+$+*.+/6846nrUV:;2+2+,.,.+1+1*/*/+0+0+0+0*0*0-1-12,2,....&.$,8271㈎hk7:.)0+/+/+-.-.,0,0*1*1,0,0....*1*1(3(3,/,//)0*3:MTx34./*(.,.>>NѯGB=8)0(/,4+3,*,*=6XQ඿4;5<+-+-,0,0+1+1*/*/*0*0*0*0*0*0,0,02-2-/./.'.)073=9࣪SY39,/-0-1-1,1,1-0-0-0-0.-.-.-.-*1*1'3'3*1*1-../69TWqzEN&+/40/,+4062icMM<>68*2&.(*-/3-.(ejqy"-,7#.$/-1-1-1-1*/*/*0*0*0*0*0*0,0,01-1-....'/+310GF9B/8.5)0,4,4,1,1.0.0/./.0-0-/-/-*0*0'2'2)1)1,/,/:8hfmt3636-3/510-,;+9)OCID<74646*!,*3/862A=̎IN#0!.///0/0////*0*0+0+0+0+0*0*0,0,00.0././.)/+167`a,2/5*1'.,2,2-0-0/./.1.1.2.2././.*/*/(/(/).).,-*+?9}IQ1900--.1-00/10:.8,ݔbX+(41!1,"6!56,5+A?pnde67$/ +/.1/0..-/.*0*0+0+0+0+0*0*0,/,/////////,1).@D}**00(())+,,--*+(/,/,1.2/3221/0/0*.)-),(+**++,&-'JBOR)2(1*).--),(;931GG||WU97&2'3&4"0.'3,9180hfȨ=:B?$*%+#/!--)-),+.-*0*0*0*0*0*0*0*0+/+/.0.0//../3+/IRnn+%1+-(,'.)/*0)/(/+.*/.1024351403,.,.+**)1+/)5*8-SNwwA>96&/'0,+*)/%0&<;LKΓlo1010+&*%*-.130.+5/E?Ж|WT-126(.(.403/,--.*0*0*0*0*0*0*0*0*.*.-1-1/////1,.VaWV1-510*1+4.0*-&3,.*0,/1/1/3.2.0/1..--/,415-2*B64(][``;;/+73+0-220-+6+4)ZZjaA82&6*.6,4,/+.2.2.GFvuZ[DE9999.-.-,/,/*0*0+0+0+0+0+0+0*.*.-2-20//.35)+z`_:>6:678951626060.,/-.2-1+0)...3343103041A<;6IEd`֞UX0189-.,-)(,+944/@;WRիʿuB;:3+3.6)1*2/.*)732.VTFA4/1436%,*1*/*/+0+0+0+0+0+0*-*-,2,20/0//1/1ޠvLW5@02352121-/-/(.(.&,'-,,++-,,+7621GIsuߩkb9.>3*/%*$.(20)2+5-2*dhWZ+,./+1%+*/.3+(-*:3?8||kg28/5-3,2*.*.+/+/*0*0+0+0*/*/)2)20/0///NNhqHN=C/2-0%*&+)+.0.+%"//==X[wzQAC37'3#%+)/'4'49/6,?6pgYSA;0+,'$0(4&3$1+#';3IAߎVV:1;20)1*)-(,)4(3(3&1&9(;4$:0.0.?=}zwgdJA?6>.=-H/-31,-'(.*1-824.=8JEєwv3434(-).'.(/-0+.:70-=6aZݤhcE@8372././,-./2,1+,.')*4(22*3+TSހֆܥriJA82>8,4*2#.%04231:36/_bäR]0.312/*'-:)62615;*7&D8cW馧x|UWFH>:733$5&6):-4.1+D5=.vusqLJ4/83-/-/*#.&3&3.3.3ACsuig@>1(90,61;39.4/%,"4/2-BBhh䧮qkf`ZQTKF9;.?2M@ów|KP1.52+,+,&-%,($.)4)47AR\ҞIC=71+0*&((*&1$/$3%40/-,F>jb藍栞ۍ̘tsPO10.--1.2#,#,"*"*$&(*477:s}ñqv8/6-1-1-&8(:!63%%))6'/ E;_UݙdfIK1+5/+'+'*1(/'.(/+.036510^]Ĝ[]2,5/,2.4"/#0+,)*.&2*>58/?9IC~|ڤOP=>0/76200.--,,$*'-3/2.<750UX넁TQ5)9-0..,&()+04-1/0/083:52J>d`с}ipKG<83)5+0+6114*-*5+6*0)/))))33//CEegޣ}PT,/14)--1*/(-(2+5,3(/1+.(5*5*3/2.85B?ga|v蛓譥{ieKH>;43654)3(0$0$(%+((0%-(2&0+/-100++HHiiߥ~_e<:532+3,',).+,*+,-,--/.01605//1112)*25ADPS\_nr|ٕߩᄉot[\WXEF45')02//,,,*/-/-.,,--.+0,1)2&/+%,&1144TZtzҬffFD;9(3)4*2+3,/,/*,(**-+.),*-,.)+,-,-1/1/3.61C?HDGLJOPVW]ckjrjplrxz儆zwqsmspli_]ZXVRQMKAH>>29-4+6-/*4/00--*/,1,2+1-0/2.0,.+/*.*/).9887UWǂGU:H.:-9,206+.*-))((!)"* +#.)2'0,1.3/3,0)-)-)0*1(1(1*2(0).(-+/04=1:.6,7-7/914,3+4*7-6+6+4)3(1*2+2301)0(/)3&0%,(/,2,2/3,0,2*05;@Ftwğr}Xc@F8>,/,/*+,-&.&. . .#1#1.!0#3#3#. +')*,*-),*,*,./-.++++/,0-0/0/,.-/--++*),+**((()()*-*-'.%,(5+8)2*3-/+-/2-0388=PYjsٗ`cKN6:26*.-1+1,2*2,4&3&3$5&7+5*451401/314/2-5/3-3,5.)3)3'2'2%1'3)5)5'2'2%1$0&1'2&/$-)0(/(1(104,00,2.EDXWvzҖtyWUGE=8;6:6953/3//+/+203175755151507261504.5/(3)4)5(4&2'3*3*3*4*4'1'1*/*/.1-012346666?@PQol~{坝_YICD9@5<,=-2(4*+/,0-../....,-01/1+-0011210/0.1/3/2.1/1/0000./-.5689:>NRoxڌž|ldaYMSHNBF=A9=59(.)/)1$,5.2+3)8.B6D8H;OBWL]Rc`khxyً쥩숎艑爐擐鎋䎈䖐줚㷵Ҳޢӟ䶷װխ欪ήa_b203  + + + + + + +  a_b򟝠HFI-+.  +  + + + + + + + + + + +  !! +   +    + + + + + + + + + +  /-0^\_  +      + + + + +  + + +  536ywzfch749  + + +  + + + + + + + +  TRUZW]/,2  +  + + + + + + + + + + + +  + 𢠣NLO(&)         + + + + + +  + '%(    TRTPNQ)'* + + + + + + + + + + + + + + + + + +vtv\Z]ecf   !0.1%#&MKNqnthfiKIK`^akik  +  + ZX[[X]       + +  + + + +-*/  + +     OLQtqv  [X] +    MKMRPS + nln   +       + \Z]  + +                 +   <9?    IFL0.0 +  +       NKQ    + +  +       +    + + + + + +  MKM{y{  + + +           nln`]c  [Y\A>D +    +   +       LIOKHM  + +  HEK  MKM424 + jhj,(0 +   +   _]`    &$&    ##'!%!%!%!%!%!%!% $ $ $   +   OKS + + + !"!"!"!"!" ! ! ! ! ! #      +oktFDF  TPY          +  MKM  qoq" + _]`  !   +LHPPNQ + +"$ gelձ326    +0/31/2 MMQǾ¿þ  +zy}ſ +   NLNzw| + + +    +A@Atst   +uvw    \Y_202   }}    #$%%#&&'(YZ[|z}jkl + NLO{w  + + llp jhjllm + +    [X^PNQ +  !" yx%&(   $%' OPQ~| + + NLO{x~ +  nlnoop +   + ZW]OMP + !" wv}+,.$%' \]^~|  + NLO{x~   +mkmpop + +      [X^MKM +  !! ww|$%& $%&Z[\~| + NLO{x~   mkmono  + +    ZW]PNP  !! ww|&'( "#$\]^~| + NLO{x~ mkmmmn +    ZW]OMP   !" vu|%&( +"#% Z[\~|  + NLO{x~  +  mkmmmn  +    ZW]OMP   !" wv}%&( +"#% \]^~|  + NLO{x~    +mkmnmn +    ZW]OMO   !! ww|%&' +"#$]^_~| + NLO{x~   mkmnmn +  +  ZW]OMO   !" vv{%&' +"#%_`a~| + NLO{x~  +pnpmlm  yz|   + ZW]OMP  !" wv}&') +"#% abdTUW~{ +uvw + NLO{x~ VVZtru  !{  +\Y_MJP +" "   + xw&&+ "#$GFN +   +lhq~   |}½ NLO{x~   + +   +  +  +!!;:B YV[MJP  +    +  yw +!"#    + ! +   + +  #449 + +  #>;@ NLO{x~    C@F       BBG   ZW]*'-  jhq^^c/01    + + +   +,,1     + 203 NLO{x~    +/,1 JGM +       >>B  ?@,*,#!#(&(+)+$%'$%'$%'$%'#$&&')"#%$%'GHJ         +       +  +     + +  + +   + +|} ABD}zDAF'%('%((&)(&)(&)&$'%#&&$'&$'&$'$#'$#'!    224zw|89;)*,%&('(*%&($%'%&(%&(%&(%&('')((*(&) + <8@ NLO{x~  + +  ssxᬭBCE679   + +  *',  +    + abd緷DDI **,ީB?D + -)1 NLO{x~ +  oot=>@  +B?E|y~    .,6_]g_]g^\f][e][eXV`_]gNLVpqs _`b##'  ))+   +.*2 NLO{x~ + onr.-2??A  +A>D  rrw徼mkr   }~aacRRW + +,,.*',  .*2  NLO{x~    mkm(%+ ?=@  + + ^[a +   wyw + +   a_aYX`  +*.647+(- + NLO{x~ + nln(%+ ?=@   + \Y_ +   wyxYY[  QRT a_aXW_  +*.536,)/ + NLO{x~ + +nln)&, ?=@   + \Y_ +   wyx +  + !"$a_aXW_  +*.647,)/ + NLO{x~ + +nln)&, ?=@   + \Y_ +   wyx'(*  a_aXW_  +*.647,)/ + NLO{x~ + mkm)&, ?=@   + [X^ +   wyxYZ\ z{} b`bYX`  +*.536,)/ + NLO{x~ + +kik*'-> <:<('/  +.-1.+1 LJM{x~ feeHFI   + [X^ + +  vxwTUWMMO-+.usuijk   +.-1igj :7= LJM{x~ " 639KHNJGMIFLIFLIFLIFLIFLIFLIFLIFLIFLIGJHFIJHJIGICACFDGIGJHFIJHKIGJIGJIGJIGJIGJIGJHGLHGLHGLHGLHGLFEJLKPGFK'&+   +`]b  YU] yxy{z|0.1;8>  +  +.-2FEJGFKHGLIHMIHMIHMIHMJGMIFLIFLIFLIFLIFLIFLHEKB?E{x~DBEHFIIGJIGJIGJIGJIFLIFLIFLIFLIFLIFLIFLIFLIFLIFLJIMJIM)).    <;?B@BJHKJHKIFKIFKIFLIFLIFLIFLIFLIFLIFLIFLIFLIFLGDJJGMGDJ# &  ROULJL{y|EAI  TRTjhj       XT\ + ywy gck      LHP + + ppr} + +  KIK{y{ [Y[kik   + +'/  XUZ + ywy647|z}   MJP  ~    +(-KIK{y{[X^  ZXZmkm  +   +XU[ + ywyMKN XVYspv     +MJP  +ppu~ +KIK{y{XUZZXZnln  +  XUZ + zxzrps 314b^f +LINjjn~  zw|LJL{y{툆758  +SQScacKHNQOR{y{qoq  +73; GEHCDFzxzLJM A?Axvxڟ~|}{~{y||z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}ywy{y{vtv}{}sqs|z}{y|}zx{}|z}|z}|z}|z}|z}z{}z{}z{}z{}z{}z{}z{}z{}z{}yz|xvy|z}xvyywzywzxvy{y{}}{}}{}{y{~|~ׄywz|z}|z}|z}|z|zxzݤz{}yz|z{}z{}z{}z{}z{}z{}z{}z{}{{}{{}|z}|z}|z}|z}xvy|z}xvyzx{|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}{{}yy{|}|}wuw|z}|z}|y~|y~|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}}{~}zx{}{~Ӂywy|z|xvx{y{zxzÍ \ No newline at end of file diff --git a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c new file mode 100644 index 00000000000..fa8509d4075 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c @@ -0,0 +1,120 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +#include +#include +#include +#include +#include +#include +#include "mbedtls/base64.h" +#include "esp_check.h" +#include "driver/jpeg_encode.h" + +#define EXAMPLE_WIDTH 1280 +#define EXAMPLE_HEIGHT 720 +#define EXAMPLE_RGB_FRAME_SIZE (EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3) +#define EXAMPLE_JPEG_BUFFER_SIZE (EXAMPLE_RGB_FRAME_SIZE / 10) /* Estimate output size with an approximately 10:1 JPEG compression ratio for this demo image. */ +#define EXAMPLE_BASE64_CHUNK_LEN 96 +#define EXAMPLE_JPEG_QUALITY 80 + +extern const uint8_t esp720p_rgb_start[] asm("_binary_esp720p_rgb_start"); +extern const uint8_t esp720p_rgb_end[] asm("_binary_esp720p_rgb_end"); + +static void print_base64_payload(const unsigned char *encoded, size_t encoded_len) +{ + /* Split the printable payload into short lines so it is easy to read in + * the serial monitor and robust for pytest to parse back into a JPEG. */ + printf("JPEG_BASE64_BEGIN\n"); + for (size_t offset = 0; offset < encoded_len; offset += EXAMPLE_BASE64_CHUNK_LEN) { + size_t chunk_len = encoded_len - offset; + if (chunk_len > EXAMPLE_BASE64_CHUNK_LEN) { + chunk_len = EXAMPLE_BASE64_CHUNK_LEN; + } + printf("JPEG_BASE64 %.*s\n", (int)chunk_len, (const char *)&encoded[offset]); + } + printf("JPEG_BASE64_END\n"); +} + +void app_main(void) +{ + /* EMBED_FILES turns the raw asset into linker symbols, so the example can + * read the picture directly from flash without mounting a filesystem. */ + const size_t embedded_size = esp720p_rgb_end - esp720p_rgb_start; + uint32_t jpeg_size = 0; + jpeg_encoder_handle_t jpeg_handle = NULL; + uint8_t *rgb_buf = NULL; + + printf("Loading embedded BGR24 image from flash...\n"); + printf("Embedded raw image size: %zu bytes\n", embedded_size); + assert(embedded_size == EXAMPLE_RGB_FRAME_SIZE); + + /* Despite the enum name, the current driver maps + * JPEG_ENCODE_IN_FORMAT_RGB888 to a BGR24-style byte layout. + * Keep the embedded raw asset in bgr24 order or red/blue will swap. */ + jpeg_encode_cfg_t enc_config = { + .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, + .sub_sample = JPEG_DOWN_SAMPLING_YUV422, + .image_quality = EXAMPLE_JPEG_QUALITY, + .width = EXAMPLE_WIDTH, + .height = EXAMPLE_HEIGHT, + }; + + const uint8_t *rgb_src = esp720p_rgb_start; +#if CONFIG_SECURE_FLASH_ENC_ENABLED + size_t input_buffer_size = 0; + jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_INPUT_BUFFER, + }; + rgb_buf = (uint8_t *)jpeg_alloc_encoder_mem(EXAMPLE_RGB_FRAME_SIZE, &rx_mem_cfg, &input_buffer_size); + assert(rgb_buf != NULL); + memcpy(rgb_buf, esp720p_rgb_start, EXAMPLE_RGB_FRAME_SIZE); + rgb_src = rgb_buf; +#endif + + size_t result_buffer_size = 0; + /* The output JPEG is compressed, so the example does not need to reserve + * a full raw-frame worth of space for the bitstream. This 10:1 estimate + * is intentionally conservative for the bundled demo image and quality + * setting; real applications should size this buffer for their own worst + * case and handle "buffer too small" errors if needed. */ + jpeg_encode_memory_alloc_cfg_t mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + uint8_t *jpeg_buf = (uint8_t *)jpeg_alloc_encoder_mem(EXAMPLE_JPEG_BUFFER_SIZE, &mem_cfg, &result_buffer_size); + assert(jpeg_buf != NULL); + + /* Create the encoder instance once, then feed it one full-frame request. */ + jpeg_encode_engine_cfg_t encode_eng_cfg = { + .timeout_ms = 200, + }; + ESP_ERROR_CHECK(jpeg_new_encoder_engine(&encode_eng_cfg, &jpeg_handle)); + + printf("Encoding BGR24(raw) -> JPEG...\n"); + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, rgb_src, EXAMPLE_RGB_FRAME_SIZE, + jpeg_buf, result_buffer_size, &jpeg_size)); + printf("Encoded JPEG size: %" PRIu32 " bytes\n", jpeg_size); + + size_t encoded_len = 0; + /* First call asks mbedTLS how big the base64 buffer must be, then the + * second call performs the actual binary-to-text conversion. */ + int ret = mbedtls_base64_encode(NULL, 0, &encoded_len, jpeg_buf, jpeg_size); + ESP_ERROR_CHECK((ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ? ESP_OK : ESP_FAIL); + unsigned char *encoded = calloc(encoded_len + 1, 1); + assert(encoded != NULL); + ESP_ERROR_CHECK(mbedtls_base64_encode(encoded, encoded_len + 1, &encoded_len, jpeg_buf, jpeg_size) == 0 ? ESP_OK : ESP_FAIL); + + /* JPEG_META plus the chunked JPEG_BASE64 lines form a tiny text protocol + * that pytest understands and can reconstruct into a host-side .jpeg. */ + printf("JPEG_META width=%u height=%u format=JPEG encoding=base64 size=%" PRIu32 "\n", + EXAMPLE_WIDTH, EXAMPLE_HEIGHT, jpeg_size); + print_base64_payload(encoded, encoded_len); + printf("JPEG encode demo done.\n"); + + ESP_ERROR_CHECK(jpeg_del_encoder_engine(jpeg_handle)); + free(encoded); + free(jpeg_buf); + free(rgb_buf); +} diff --git a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c deleted file mode 100644 index cc38e62b8bf..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include -#include "esp_heap_caps.h" -#include "esp_vfs_fat.h" -#include "sdmmc_cmd.h" -#include "driver/sdmmc_host.h" -#include "driver/jpeg_encode.h" -#include "sd_pwr_ctrl_by_on_chip_ldo.h" - -static const char *TAG = "jpeg.example"; -static sdmmc_card_t *s_card; -#define MOUNT_POINT "/sdcard" - -const static char s_infile_1080p[] = "/sdcard/esp1080.rgb"; -const static char s_outfile_1080p[] = "/sdcard/outjpg.jpg"; - -static esp_err_t sdcard_init(void) -{ - esp_err_t ret = ESP_OK; - esp_vfs_fat_sdmmc_mount_config_t mount_config = { -#ifdef CONFIG_EXAMPLE_FORMAT_IF_MOUNT_FAILED - .format_if_mount_failed = true, -#else - .format_if_mount_failed = false, -#endif // EXAMPLE_FORMAT_IF_MOUNT_FAILED - .max_files = 5, - .allocation_unit_size = 16 * 1024 - }; - const char mount_point[] = MOUNT_POINT; - ESP_LOGI(TAG, "Initializing SD card"); - - sdmmc_host_t host = SDMMC_HOST_DEFAULT(); - host.max_freq_khz = SDMMC_FREQ_HIGHSPEED; - -#if CONFIG_EXAMPLE_SDMMC_IO_POWER_INTERNAL_LDO - sd_pwr_ctrl_ldo_config_t ldo_config = { - .ldo_chan_id = 4, // `LDO_VO4` is used as the SDMMC IO power - }; - sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL; - - ret = sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to new an on-chip ldo power control driver"); - return ret; - } - host.pwr_ctrl_handle = pwr_ctrl_handle; -#endif - - // This initializes the slot without card detect (CD) and write protect (WP) signals. - // Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals. - sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); - slot_config.width = 4; - slot_config.flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP; - - ret = esp_vfs_fat_sdmmc_mount(mount_point, &host, &slot_config, &mount_config, &s_card); - - if (ret != ESP_OK) { - if (ret == ESP_FAIL) { - ESP_LOGE(TAG, "Failed to mount filesystem. " - "If you want the card to be formatted, set the EXAMPLE_FORMAT_IF_MOUNT_FAILED menuconfig option."); - } else { - ESP_LOGE(TAG, "Failed to initialize the card (%s). " - "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); - } - return ret; - } - // Card has been initialized, print its properties - sdmmc_card_print_info(stdout, s_card); - return ret; -} - -static void sdcard_deinit(void) -{ - const char mount_point[] = MOUNT_POINT; - esp_vfs_fat_sdcard_unmount(mount_point, s_card); -#if SOC_SDMMC_IO_POWER_EXTERNAL - esp_err_t ret = sd_pwr_ctrl_del_on_chip_ldo(s_card->host.pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to delete on-chip ldo power control driver"); - return; - } -#endif -} - -void app_main(void) -{ - ESP_ERROR_CHECK(sdcard_init()); - uint32_t raw_size_1080p; - uint32_t jpg_size_1080p; - jpeg_encoder_handle_t jpeg_handle; - - FILE *file_raw_1080p = fopen(s_infile_1080p, "rb"); - ESP_LOGI(TAG, "s_infile_1080p:%s", s_infile_1080p); - if (file_raw_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_raw_1080p error"); - return; - } - - jpeg_encode_engine_cfg_t encode_eng_cfg = { - .timeout_ms = 70, - }; - - jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, - }; - - jpeg_encode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, - }; - - ESP_ERROR_CHECK(jpeg_new_encoder_engine(&encode_eng_cfg, &jpeg_handle)); - // Read 1080p raw picture - fseek(file_raw_1080p, 0, SEEK_END); - raw_size_1080p = ftell(file_raw_1080p); - fseek(file_raw_1080p, 0, SEEK_SET); - size_t tx_buffer_size = 0; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p, &tx_mem_cfg, &tx_buffer_size); - assert(raw_buf_1080p != NULL); - fread(raw_buf_1080p, 1, raw_size_1080p, file_raw_1080p); - fclose(file_raw_1080p); - - size_t rx_buffer_size = 0; - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10, &rx_mem_cfg, &rx_buffer_size); // Assume that compression ratio of 10 to 1 - assert(jpg_buf_1080p != NULL); - - jpeg_encode_cfg_t enc_config = { - .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, - .sub_sample = JPEG_DOWN_SAMPLING_YUV422, - .image_quality = 80, - .width = 1920, - .height = 1080, - }; - - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, rx_buffer_size, &jpg_size_1080p)); - - FILE *file_jpg_1080p = fopen(s_outfile_1080p, "wb"); - ESP_LOGI(TAG, "outfile:%s", s_outfile_1080p); - if (file_jpg_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_jpg_1080p error"); - return; - } - - fwrite(jpg_buf_1080p, 1, jpg_size_1080p, file_jpg_1080p); - fclose(file_jpg_1080p); - - sdcard_deinit(); - ESP_LOGI(TAG, "Card unmounted"); -} diff --git a/examples/peripherals/jpeg/jpeg_encode/partitions.csv b/examples/peripherals/jpeg/jpeg_encode/partitions.csv new file mode 100644 index 00000000000..1bd604e2b12 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 0x380000, diff --git a/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py b/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py new file mode 100644 index 00000000000..26e5cb088ea --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py @@ -0,0 +1,146 @@ +# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 + +import base64 +import hashlib +import logging +import re +from dataclasses import dataclass +from pathlib import Path +from typing import List + +import pytest +from pytest_embedded import Dut +from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets + +JPEG_META_PATTERN = r'JPEG_META width=(\d+) height=(\d+) format=(\w+) encoding=(\w+) size=(\d+)' +JPEG_META_RE = re.compile(rf'^{JPEG_META_PATTERN}$') +JPEG_CHUNK_RE = re.compile(r'^JPEG_BASE64 ([A-Za-z0-9+/=]+)$') +JPEG_OUTPUT_NAME = 'jpeg_encode_result.jpeg' +GOLDEN_IMAGE_NAME = 'golden_output.jpeg' +GOLDEN_IMAGE_PATH = Path(__file__).with_name(GOLDEN_IMAGE_NAME) +EXPECTED_FORMAT = 'JPEG' +EXPECTED_ENCODING = 'base64' +EXPECTED_WIDTH = 1280 +EXPECTED_HEIGHT = 720 + + +@dataclass(frozen=True) +class JpegMetadata: + width: int + height: int + image_format: str + encoding: str + size: int + + +def parse_jpeg_metadata(meta_line: str) -> JpegMetadata: + match = JPEG_META_RE.match(meta_line) + if not match: + raise ValueError(f'Invalid JPEG metadata line: {meta_line}') + + return JpegMetadata( + width=int(match.group(1)), + height=int(match.group(2)), + image_format=match.group(3), + encoding=match.group(4), + size=int(match.group(5)), + ) + + +def collect_base64_payload(dut: Dut) -> List[str]: + payload_chunks: List[str] = [] + while True: + match = dut.expect(r'(JPEG_BASE64_END|JPEG_BASE64 [A-Za-z0-9+/=]+\r?\n)') + line = match.group(1).decode('utf-8').strip() + if line == 'JPEG_BASE64_END': + return payload_chunks + + chunk_match = JPEG_CHUNK_RE.match(line) + assert chunk_match is not None + payload_chunks.append(chunk_match.group(1)) + + +def decode_jpeg_base64_payload(metadata: JpegMetadata, payload_lines: List[str]) -> bytes: + if metadata.image_format != EXPECTED_FORMAT: + raise ValueError(f'Unsupported image format: {metadata.image_format}') + if metadata.encoding != EXPECTED_ENCODING: + raise ValueError(f'Unsupported payload encoding: {metadata.encoding}') + + jpeg_bytes = base64.b64decode(''.join(payload_lines), validate=True) + if len(jpeg_bytes) != metadata.size: + raise ValueError(f'Expected {metadata.size} JPEG bytes, got {len(jpeg_bytes)}') + + return jpeg_bytes + + +def save_jpeg_artifact(jpeg_bytes: bytes, output_path: Path) -> None: + output_path.parent.mkdir(parents=True, exist_ok=True) + try: + output_path.write_bytes(jpeg_bytes) + except OSError: + logging.exception('Failed to save JPEG artifact to %s', output_path) + return + + logging.info('Saved JPEG artifact to %s', output_path) + + +def _sha256_digest(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def assert_jpeg_matches_golden(result_bytes: bytes, golden_path: Path) -> None: + assert golden_path.is_file(), f'Golden JPEG not found: {golden_path}' + golden_bytes = golden_path.read_bytes() + result_digest = _sha256_digest(result_bytes) + golden_digest = _sha256_digest(golden_bytes) + + assert result_digest == golden_digest, ( + f'Generated JPEG does not match golden file: {golden_path.name} ' + f'(result sha256={result_digest}, golden sha256={golden_digest})' + ) + + +def run_jpeg_encode_example(dut: Dut) -> None: + dut.expect_exact('Loading embedded BGR24 image from flash...') + dut.expect(r'Embedded raw image size: \d+ bytes') + dut.expect_exact('Encoding BGR24(raw) -> JPEG...') + dut.expect(r'Encoded JPEG size: \d+ bytes') + + metadata = parse_jpeg_metadata(dut.expect(JPEG_META_PATTERN).group(0).decode('utf-8')) + assert metadata.width == EXPECTED_WIDTH + assert metadata.height == EXPECTED_HEIGHT + + dut.expect_exact('JPEG_BASE64_BEGIN') + payload_lines = collect_base64_payload(dut) + + jpeg_bytes = decode_jpeg_base64_payload(metadata, payload_lines) + output_path = Path(dut.logdir) / JPEG_OUTPUT_NAME + save_jpeg_artifact(jpeg_bytes, output_path) + assert_jpeg_matches_golden(jpeg_bytes, GOLDEN_IMAGE_PATH) + + dut.expect_exact('JPEG encode demo done.') + + +@pytest.mark.generic +@idf_parametrize('target', soc_filtered_targets('SOC_JPEG_ENCODE_SUPPORTED == 1'), indirect=['target']) +def test_jpeg_encode_example(dut: Dut) -> None: + run_jpeg_encode_example(dut) + + +@pytest.mark.flash_encryption +@pytest.mark.parametrize( + 'config', + [ + 'flash_enc', + ], + indirect=True, +) +@idf_parametrize( + 'target', + soc_filtered_targets('SOC_JPEG_ENCODE_SUPPORTED == 1 and SOC_FLASH_ENC_SUPPORTED == 1'), + indirect=['target'], +) +def test_jpeg_encode_example_with_flash_encryption(dut: Dut) -> None: + run_jpeg_encode_example(dut) diff --git a/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb b/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb deleted file mode 100644 index 2e5ba5e6a5e..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb +++ /dev/null @@ -1,97 +0,0 @@ -Ɇv~ajmw7A6@7?5=8?6=:@:@5C3@2A3BF@JCKDZZoogh67<;A@'$30'!'!((,!-"/&0' ( (")")&+%**+(*.,1/7362702,2+2+55789<475;>EXajrϵ8B/9!-6B).%"%"($'#%($' *)%%&&((%*%*'*'*%)%)!(!('',,!+!+%*%*++++FFLL^]pp8B1;".)5 - &"'#&)&)",",%%&&((%*%*'*'*%)%)!(!('',,!+!+%*%*+++++,**0043?@HITWZ]䐣ʵŹh\8520)-*/%*)/ "(#) 1 132++,,%,%,),),+++++)+)'('(%&%&!)!)!(!(%&%&)&)&/+-)++('+*+*..//PDbU}vNC631.$)!""$*$*0-.-++,,%,%,),),+++++)+)'('(%&%&!)!)!(!(%&%&)&)&.*.*0/115577;;;;J>A4=6E>feϊC5<7:4+2"(%0 *#+#+&,&,,*'&--#-#-'-'-++++-*-*-(-(+'+')&)&#'#'#%#%%#%#%#%## # &#($()()&)&)146#/.2#IBZT{m[VC>%,$+$/*5 )"*$*%+, -----#-#-'-'-++++-*-*-(-(+'+')&)&#'#'#%#%%#%#%#%#*'*',),)+,*+)+(*115"6#8)1"4.6046KMxäXhO_,8-97:694,4,-"/$)+ ((!'!'#'#'#&#&%&%&%&%&%&%&%'%'%(%(%&%&#%#%#### "" #!$!%!%!&!&-, 1-3/1,-'.+*&.+86W[悆my_k=@;=7/4,, -"')((!'!'#'#'#&#&%&%&%&%&%&%&%'%'%(%(%&%&#%#%######"" # #""$$$#""&%+**&#*%3-.+73?=64,0.2CIV\ٮ|yQ?:(2@*=(=("! #"&#'#   #%**(%%+%+%*%*#(#(#'#'!&!&&&&&&&22..!(!(#$#$%"%")#)#+&+&+(+(NThnƴu_V@9#/"$&)&*$' !'&'%&%&%%+%+%*%*#(#(#'#'!&!&&&&&&&22..!(!(#$#$%"%")#)#+&+&+(+(06/5AH_fӜútoVQ)),++,./',', '&$%%$$&+-%+%+%*%*#*#*#)#)#(#(!(!(!(!(!(!(--**''!%!%!$!$#%#%#(#(%*%*.(,'....GIor{Y^GHLLTP^Znexox}הּڷ^]IH./%'$)+0%- '$&)'((- 1%+%+%*%*#*#*#)#)#(#(!(!(!(!(!(!(--**''!%!%!$!$#%#%#(#(%*%*1,94>>4324;>dg̀黻vyLO-2+0%*%*%'%'''''))))7AFP\fku~_cCG=A.5,3/506*2)1$,!) ( (#'#'%&%&%'%'%(%(%(%(%(%(%(%('('(#%#%#%#%#'#'#(#(#)#)#+#+#,#,#,#,/&*!&#*',0+/&-&il٘xdB40#-&:3(+!(')(-,//)*&'#" ,)1.0)<5XPnfjm*@-;-=0/)/)!$"%  %'/177#"0//-/,'$5.70?6;3@7G>XMbXФƵadQT88/.-,1/-**'#"#"####%$%$'%'%'&'&)&)&)&)&+&+&'''''('('*'*%,%,%,%,%*%*%(%(%'%'3*/&&"&" %!&$"'+>=11>:[WWYqfQV##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#(9:89MOuxxsQL67583669=@fhÉsTG;)7&!#&$- )&$)0%%""""($($.'.')*)*)')')#)#)!)!)!)!%#%##'#'!*!*#(#(#&#&#$#$#$#$"$#%$*"( ,"-'5+9SPTR*#0)7,9-}x罸xz8=# %7<#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($'$'$'$'$($($($(#(#(#(#(#(#(#(#("$"*''%";9WUWUrojpNT,A,A*2+3)%($ ' ' - -$($(& & %(%(%'%''&'&'%'%%&%&%'%'#)#)#+#+#)#)#(#(#%#%#$#$"$$&&,&,$."+".".8.RHᅀFD6581=64(2&NIupߺKL?A7<9>(-&+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($'$'$'$'$($($($(#(#(#(#(#(#(#(#()&&$,*42;7406363GDFCKKNNehVk>R )##.*%%!(!(!.!.%)%)'!'!%(%(%'%''&'&'%'%%&%&%'%'#)#)#+#+#)#)#(#(#%#%#$#$"$$&%+&,%/#, -+UKB8?;XTǛYU* 2/*'! %7?'tsṹolKH',$.++(#####(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#("$ !" ,-)*$)"$)8=V_nvdj?F-%4,3(7,))))#,#,!)!)""!%!%!&!&!)!)!*!*#,#,#,#,%*%*%*%*#+#+#)#)#'#'#%#%#%"$"&"&#*#*#,#,.!.!2%4&NFyqVSLH5,7-.+*'&+)-<$<$NNrrt{GEC@91<4/,&#((11#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#("#%&..33%&388=8=05)1%.[aqwۗ鳺UM:2&%****$.$."*"* # #!%!%!&!&!)!)!*!*#,#,#,#,%*%*%*%*#+#+#)#)#'#'#%#%$& ##$")$+%.%.'5(D6=/:2H@څشjj+)%&!#$(0/7::?PPޤuv/042,*&(%1%12-9;;=BDLQ-5<64EInqȳZ\68%&,-./68(!$ '")+)))!'!''$'$)")"#,#,#+#+#)#)#(#(#'#'#&#&#'#'#'#'%%**%/%//-/-5,+"<5ke>91- /-##-",(*),,$&JLhn.)*&*&%**33!-!-%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#('('('''''$'$%#%#%"%"#########$#$ 0 0 + +"$"$&!&!(1(A:D0BHY`ȠOW;D!(18&)&'0162*&HAkdd`))#&(*$ " -*#(#(#,#,#+#+!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(%'%'%&%&#%#%#$#$#$#$#$#$#%#%#&#&"2"2 / /**&&/2%)"#'(:685.)OVip뙡lc<6<65252,--/"( '&&!&!&%&%&)')'#(#(#)#)#)#)#)#)#(#(#(#(#(#(#'#'%+%+#,#,!*!*!$!$% &"/,24/2\h␜}4=9A%-,4$"%",-+,*&/+tmd`;7*5+6')!&!'%&$#(#(#,#,#+#+!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(%'%'%&%&#%#%#$#$#$#$#$#$#%#%#&#&"2"2 / /**&& -.++'#".)946=AH[bx㥮a\JD+(*'.08:'.!&&!&!&%&%&)')'#(#(#)#)#)#)#)#)#(#(#(#(#(#(#'#'%+%+#,#,!*!*!$!$(#% (%,(:==@FRHTλncK@! 54"-&2 $0!!$0.*(CEilٻFD53*),,'3*5+.$')&)&'#'##'#',,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(....,,,,,,!.!.!/!/!0!0#"#"$$((,,0.+* ( ($&"%8#36'8)UO{uXX@A377:)/"(!(!(!(!(%*%*)-)-#(#(#(#(#(#(#)#)#)#)#(#(#(#(#(#(+&+&'"'"##!"!"!"+'/'$#*)*!pxǜLB9/22 +%1&"!$)'%#]_̠B@IG" '-%0"-)+02)&)&'#'##'#',,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(....,,,,,,!.!.!/!/!0!0"!"!##''++)-01#+ (!$ #.39*3$93D>ij~]^03&*#)-2!(!(!(!(%*%*)-)-#(#(#(#(#(#(#)#)#)#)#(#(#(#(#(#(+&+&'"'"##!"!" ( ($,%--,//3*2)6=lt÷QW*,%'')"#$-$1#@2H=UJѪD8=1#)#)#)#)#(#(#(#(#(#(#'#'#'#'#&#&!*!*!*!*!*!*!*!*!)!)!(!(!(!(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-&-&+$*"("&!(&(&SSxywF=&!93(."'$5!2$%'5!0!0!'!'##%"%"%*%*%.%.#'#'!!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1-&!PW؝lr4:!/&4#-!*')$&'/&>0=.UJтxD8=1#)#)#)#)#(#(#(#(#(#(#'#'#'#'#&#&!*!*!*!*!*!*!*!*!)!)!(!(!(!(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-&-&+$*"("&!(&(&44;;dgЖOI)$(.)/.* 1(9$2%!0!0!'!'##%"%"%*%*%.%.#'#'!!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&,'>D[b㧷;A"*$5#,''(&'*'0-<8>;}~B7;0'+'+'+'+'+'+'+'+'+'+'+'+'*'*'*'*!)!)!)!)!)!)!)!)!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#(#(&& ' '$+&-5@GnsWb055:-,'&"%),%-%%%!(!(!*!*#+#+#(#(#(#(#(#(#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*)0*-#&YVӤip,1%+)"2 (%)*)*,)-*40RO賳B7;0'+'+'+'+'+'+'+'+'+'+'+'+'*'*'*'*!)!)!)!)!)!)!)!)!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#(#(''!(!(/5066>+215IN\`;?'&(+"%%$,%%!(!(!*!*#+#+#(#(#(#(#(#(#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()0(.02*-<9_\ؽnnDD&-(/. 0 ' '10--1277[e>67/)")")")")")")")")")")#)#)#)#)#)#!&!&!&!&!'!'!'!'!'!'!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++**))(()&")$**,-/=:JGƽE?:46.5-(#*$((33!1!1!'!'#####)#)%2%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(41-+1011|i¯DD44$,#+ 0." '+*! //EE螧>67/)")")")")")")")")")")#)#)#)#)#)#!&!&!&!&!'!'!'!'!'!'!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++****))*%")+179340.,)H@sk㳶YS)"'(#.)((33!1!1!'!'#####)#)%2%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/2*)+*6"7#[Ho\`_'")$#)"*%!%(.+ GIy{>67/#########$#$#$#$#$#$#%#%#%#%#&#&#%#%#%#%#&#&#&#&#'#'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!(")*+++%/"-$($($!( 0(%0$RS߄b^B=8)@2%%#'#'!.!.--((!%!%#(#(%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+..4 B/;(甒JI(#3/+1 '+)&)1452(%acު>67/#########$#$#$#$#$#$#%#%#%#%#&#&#%#%#%#%#&#&#&#&#'#'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!(")*+++'!"%"" %&E9:/:;IJzͭuqA37(%%#'#'!.!.--((!%!%#(#(%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(., !$%1->,D2`^00))*%$!,/$(663/;8ت3+>7.....+*),.010-+*()&'%&$%%&')+,-/%&%&%'%'%'%'%'%'"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-"-"+$+$''''%(%(%(%(%&%&'#'#)!)!%#((,,6=KRዓhg5712*),*&$"!""$**!*!*#&#&% % #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''##%"%"1*1*/*[V嫪q++**+&'! $),$(""&'@6A:"("( $#""!!"! "(-(-).).+/).)-)-%(%(%'%'%&%&%&%&"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/!/!-"-"-%-%+'+'+(+()))))()()()($ $'+).$&',,a_핓薞bk7597811*" (&!*!*,,!&!&###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))!.!.',',82#91tm:E3>%"'$%%&('$$""11,,99♞F>?7#)"(!& $# $ $!% $!%#&$'#%"$ "!).&+"'$"!%%('*%(%(%'%'%&%&%&%&"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/!/!-"-"-%-%+'+'+(+()))))()()()( % #%)*/&+./11/-ECz{ׯ]\?=1*1*&#&#!*!*,,!&!&###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))!.!.',',3.0*7/E=Պvq!$&*'' (!),*(&54,,;CltND8.+*+*,+.,0-2/5061/)/)/(/(/&0'1(2)-3*1(.$*#(#(#'$('('('''''&'&'%'%"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'&'&'%'%'%'%'&'&'('(%*%*%*%* +)))&#!$%'54/.CCggjr8:@B57)+#&#&%%!&!&!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()#)#%+%+!/!/))"-*4,*"NQюJE#&),)'''+(+(33)(]eۡXN=3535332210-,)*%)$823-,%(!(.%5+90$!('-+1.3-2+/),'('('''''&'&'%'%"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'&'&'%'%'%'%'&'&'('(%*%*%*%*&( , ,'$!$$&**'&1033MTx߼mo79!#68#&#&%%!&!&!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()#)#%+%+!/!/))$ %"4,4,>AY\ܧnb?4%!%!$%+).(1,.0@B朮|~yrj{cr_mGTCO=G6@1:/8/708$.#-#,#,#*#*"'"'')')'''''%'%'$'$"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,**''!$!$!#!#!%!%(())(+./-.)(%&)+52.+21HGm~4=@I%#%#((!6!6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/(/()+)+!*!*## $!*'/157oxNCNC'#!#+).(2-')WYcmXaFO5>)0$+&+(-')')'''''%'%'$'$"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,**''!$!$!#!#!%!%(())1/*((,'$%&!#,*/-8698LN\^x4=%#%#((!6!6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/(/()+)+!*!*## # (*57W_mums)&&(&-$ )/'$op쉔}jsW`=C27.1266666.&/'-&,%)")"'$)&"("(,)-.6;#5$7!0 /%%#&$$!'!''('(+'+'#,#,#)#)#&#&%"%"%"%"%%%%'('('*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(AB~TNIB.'1* '!$)$$((%,%,+,+,+(+('%'%!&!&((#&#&#'#'#'#'#(#("'#(#)$*$+#*#+"*{W\*(*( ".!1&/)24+.%ps`cNN@A###$$( &#'$ #-/4010%8$7. /'&$$!'!''('(+'+'#,#,#)#)#&#&%"%"%"%"%%%%'('('*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(DFJLފ篻}TN%2+*2&#/$$((%,%,+,+,+(+('%'%!&!&((#&#&#'#'#'#'#(#("'#(#)$*$+#*#+"*twGL8=.0!##!-!-,4*286IH婩{k}TdDS8D5@06/5/3-1%&"# ! !#$.)*%##$$#*&,"0 .00//!)!)%"%"!+!+!*!*!)!)#(#(#(#(#(#(#*#*%*%*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(66CjhPGF<;.7)$* -&1)-)+(%-&...//++''!(!(!)!)!*!*!,!,!,!,!+!+!*!*!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)!$,*/-1-95WZDG&,%''''!&!&#%#%%%%%#&#&!(!(!)!)#'#'#(#(#(#(#(#("'#(#)$*$*#)#)"(99,,CG=A/3%$"" *",'),-#%>@sucaDA@K7C-/+-)".&)'%"%"!'!'++..!#!#!&!&!)!),,,,**((&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*(-+)+)'%QN헙RK>8%/%/#+#+!%!%!#!#!%!%!'!'#(#(#(#(#(#(#(#(#(#(#(#("'#(#($*$*#(#("'++$$.1\`,0;?%$ &0!,34%&FHÛr}KN8:2*703'/$%"%"!'!'++..!#!#!&!&!)!),,,,**((&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($' $%#:8,)<9?@wxQJ%/%/#+#+!%!%!#!#!%!%!'!'#(#(#(#(#(#(#(#(#(#(#(#("'#(#($*$*#(#("'##((=@9=ϓe~&++0** "$/%3$27:!`_ED4,3+/(2+.-20$'$*$!$!"##$&)&)") '((&&$$""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((++!+!++&+&5%>.viEzQ]6B!"'"$ "'4"//7nvkt@D482-945(2&*+&'%%((++//-.++#$#$!$!$$$$$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,11..!"!"'&,2!efݢCI>D0/+*%'+-((++#(#('$'$#)#)#)#)#)#)#(#(#(#(#(#(#(#(#'#'&+#$&*++2=E.:*7!&#(  #"'4$29A^b94,').!"##$%%((((((%&"##$#$!$!$$$$$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,11..!"!"%,5#*=?gimsA:>,+##!&$'$'$#&#&!)!)!+!+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)+)'+'+!*!*&& !!"-+,*--55ilv{><@>,0!$,,,,#'#'' ' #*#*#*#*#)#)#(#(#(#(#(#(#'#'#'#'$+)1#*#HXƀĺqg*(0.-0+.!&"'$($(!*1;ސkk=D/6#''*32;:20)&'$'$#&#&!)!)!+!+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)+)'+'+!*!*&&%'$"0-78-->AVYߢfd42,0,,,,#'#'' ' #*#*#*#*#)#)#(#(#(#(#(#(#'#'#'#'!)+2%,$+;KRaUH2%2%*-+.%,#*#$$&*2?Gzt_\\ZYUURSMSMSKTMRJRJSMUOZVa]gdjgvSb+5)*-7:1.&")&)&'('(#-#-#1#1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(3$3$-"-"#%#%,,6/.%5..().0!cb̛`^#&03----!&!&''#+#+#*#*#)#)#(#(#(#(#'#'#'#'#&#&#,*3"&!%3A6DŮ~I<5)0#&**-%, ( !6>LTdfMNFDKHJDGA;89773627193<4=5;3;39393847374744:8>FNR[`jgq⍤ΣyeV2%3&-'3-$,%+2*)%&#%%(-%,$-"-")")"%#%#!%!%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7&3#B>TO޵258;0(*"# %#$.$.--..!+!+#&#&#!#!# # !%!%!)!)%%!*!*)%)%-%-%8Beoku&,$**,+-!'(:=OḼhj@B13&&,,#$$%"$$%%'%'$($(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(&&%&"&%(****3200/0+,../04455E@RMge}{uuZZ52/,*&.)# $"  %!'$*#)#+#+#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,)3020%"li嫨egST3.0*(&(&#'#',,,,!,!,!*!*#&#&#%#%!(!(!*!*$$!*!*))))-&-&.349IS&,$*+-,.#$ /AQb{~EG6879AC8721)**+')(*(+'*%)$(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!( ' '&&$'%(****4332231233224444;6725364HHdd׋ࣨ[X96'",''"$ !%### & &&%#+#+#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/-1/52-*IFdaݳpq-(*$+*)(##',,,,!,!,!*!*#&#&#%#%!(!(!*!*$$!*!*))))-&-&6;+0˕0:!'%-*-*"!%%(DVvsz35+-$((-(.$*%$+**)('((!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($,#+#*#*%(&)')')"!"!&"($)%)%*')&-,*%*/$>:FBWYqr\XD?=1D8."."($)&!, ++(//..#,#,'+'+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( +!,$%)*.#-"f^鯨ff?>+)20-)+'#(#(#(#(!*!*!,!,!,!,!+!+#*#*#)#)###,#,).).+'+'/-/-T\Ʒdn0: &%.+.+"!%%%TfԙPWEL)++-,0.2&+$%",('&&'(,-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%-$,$+#*%(&)')')(&(&+',(-)-),),)./2%0"2'/$3/3/BD:G.7!*%(#$!'%&.$+sjw5B&(312%&  '!)"/(5***+*, +!-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(&,&,%*$("'#(#&$'#$#$ " "  #%"$#% #$%&&,+..,*,*/,,(.'>8ia_bI>F;5342$-&/**''((#*#*)-)-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($ 2&).*2-傀KI86.%/&'$'$%$%$#%#%!)!),,!,!,#(#(#%#%""%-%-)1)1)()($80-)ea+43="(#%!!&$%,'/ހ_i(66D/:'!#%(!)"$'((*+))'&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%*%*$("' & &"%"%#$#$!#!#!"!"!"!"!"$'*)+++((((&%52,*.*40932,0(0(IFqmװWLOD861/( )&'''((#*#*)-)-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( +$,#!)'% 51.,omDB%6-'$'$%$%$#%#%!)!),,!,!,#(#(#%#%""%-%-)1)1)()(*"2+3/3/ҹbo'*2%" )'.*'#14Y]UP>9),')!!"!"!%!%#(#(%*%*%*%*%)%)%&%&#$#$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'%'%'#(#(#(#(!)!)))))))----++!)!)%'%''&'&)%)%+$+$/416JOkp_bAD24;>%*!!&!"%%)25#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))..'-'-1+E?oo1'D:6/)"!(!'""!#))++#%#%% % !$!$%*%*)/)/')') '#4,,$쏒Q^!)+4%$!%"-('#8;koig510+&((*'(!"!"!%!%#(#(%*%*%*%*%)%)%&%&#$#$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'%'%'#(#(#(#(!)!)))))))----++!)!)%'%''&'&)%)%+$+$#(9>38?DUZy|=@+- #("!!*-,/*-##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))..'-'-5/4-VPϋ_U6,(!-&+%)"% '"$'#%))++#%#%% % !$!$%*%*)/)/')')"/+0(' fiZe3?"(%,&")"&0.*(OPGE75%$!$!" %#(#(%*%*)+)++++++)+)+'+')$)$'"'"!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%%%%%&%&#(#(#+#+#,#,!-!-!-!-!,!,))((((((!*!*#+#+#-#-#.#.'.&3)"#(LEc\\[5/0+/'4,)%! -,+/!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!,,55../+%!+"D:WM$"313.)%& "#&&**#%#%''#'#''''')*)*#+#+ +.("%:;>I+7&-"( '!($(/-)'bcΪcn=;86,#/''$  $#(#(%*%*)+)++++++)+)+'+')$)$'"'"!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%%%%%&%&#(#(#+#+#,#,!-!-!-!-!,!,))((((((!*!*#+#+#-#-#.#..() .596:=64-[Lrd⤙^Y=7&1*/+'# ##'*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!,,55..*&-)6,5+hmê3164/**&"%&&**#%#%''#'#''''')*)*#+#+ !.(.(45,6(2(-""+#,!.!33--׃MU)1!'"(!##%$"! )&/+++#*#*')')+(+(+'+'''''#'#'!&!&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#'#'%'%'%)%)%*%*%*%*%*%*%(%(''''#&#&#%#%#%#%#&#&#(#(#+#+#.#.#0#0&'%"#"(&+#+#>9XSA@=<66@@67-.!$$&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/"/"'*'*//**"&5/,&77YY鮶^jDO,/25/,*' "$((,,#*#*'$'$%*%*)")")#)##+#+$1,-)*74WU'11:%+#)"+!.%44..ؠ[a.7+3%*%*!# " ! *'/+++#*#*')')+(+(+'+'''''#'#'!&!&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#'#'%'%'%)%)%*%*%*%*%*%*%(%(''''#&#&#%#%#%#%#&#&#(#(#+#+#.#.#0#0"-&0)0$+#"(&/-3+-%2,0+FHhjѡ|{VU**,+,-,-%'(+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/"/"'*'*//**" /*/*2177wմYd+.-0-)'$$&((,,#*#*'$'$%*%*)")")#)##+#+.;)*"#74:8Ԫ}(/9 $#(#.&0.,7957ÿYS60"&&+ /. 0-)+)+3(0%**((#&#&%&%&%&%&!(!(++,,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#)#)#)#)%*%*')')'('()$)$)!)!++'-'-'*'*'''''$'$'#'#%"%"%#%#%$%$1$/")&,)&/$-&!".!-(,%))(,,IFb^\f8B!'(.&)+.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7'7'/'/'#%#%##"+""&)-3.-(LCkbDN.8#&#& #**00#.#.)()(%-%-))))!,!,%9+"&"&*(0.؇fw$.8).$/&0,/79792+3-)-$((,,,/-04).#**((#&#&%&%&%&%&!(!(++,,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#)#)#)#)%*%*')')'('()$)$)!)!++'-'-'*'*'''''$'$'#'#%"%"%#%#%$%$0#2&,))&&'-$3 +$!%(,762295;8NUku4:,1$'"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7'7'/'/'#%#%##)"!%(,51/+<2E:*".&"!**//#,#,)%)%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&)/2512.qoqq00)&)&!+!+,,###+#+#)#)#'#'#&#&'+$("'"' ) )*)陕.72;!# &%'&*'(&;30'ֻ^V&&..&'.+(!-!-'-'-%*%*!%!%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"("'"' $#8=UZOM64 &(.**))%&%&-"-"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( -&30(*#G5LCOI3-%$%$&&((++!-!-)+)+%)%)''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&!%!%$$##'&+0-2)(+)g_t.=$3"(*0)%"%+!-###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("5.%"0&+!fnҪgmEF#((-+' '#*,&("^Wԗu|QX)'1/%#%#&&****%)%))')'%(%())#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#$#$!&!&((*** ,"(""(%1'2(A>FBlsŨddHH(*!.%-$(#(##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( 3"5"+)+)-2-2`n]W=8#!0."0#(#(#(#(#(#(#(#(#'#'#'#'#'#'#'#'714/BA %$).*+!/,%' b`PN76 $,0)&)&!)!)++(()$)$+$+$#(#(,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!'!'%(%('('(*+,/&)#$# 50,'55WWDE45.-11&($&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((2!*!%)+//+.*0.nk_c'+59 ).#'#'#'#'#(#(#(#(#(#(#(#(#(#(#(#(3-+$srA? %%*.*+ .+$' fc?>0/&*+/)&)&!)!)++(()$)$+$+$#(#(,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!'!'%(%('('(()'("%"%!'$*#,'4/>=<%$))$&&(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( &/%/('+(,,(.*/,OL㟥|,1)-").#'#'#'#'#(#(#(#(#(#(#(#(#(#(#(#(4..(䪽`^:7 $#(1-. 0+$&rs5.+$#+'-)-)%+%+,,#'#'+!+!+!+!#'#'..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(**#'#'+$+$1"1"7,." !,/57#-';33+:2SJ圖l~1=%0 "$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($&$0!-'/$+#&7)5'fiͨR_(5!$#$#$#%#%#'#'#(#(#(#(#(#(#(#(#(#(.(/)VS74 $#(1-. 0+$&||3,+$&."-)-)%+%+,,#'#'+!+!+!+!#'#'..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(**#'#'+$+$1"1"+ ,!),.1.$ +5/(& .'4,:28/e_MY.:!#%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#% ,+&.#*#*B3)?B}}4@%#$#$#%#%#'#'#(#(#(#(#(#(#(#(#(#(*%0*n%;5 ,)5(!"#!"*006㛛uq%("0"0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%(%('('(%)$("'#(#*#*(&!$!! )(+$#$!$!!!"#*&../+, & &! !  %#%#&'$&$*&+!*!*(($$##%%))//22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(22((!"!")+)+uhgA(H/- *%$('*$'-**''%&%&)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%-%-)+)+)#)#/'$/.<;騬uu3"5%2/*'&!*,'("/)')'/&/&+'+'#(#(11-.fe%:4 ,(4'!#$!"*017䪪¾kh',!!/)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%(%('('(%)$("'#(#*#*(& '*&  *#/'" %%*'.$,#*'33,,%$ %"&#'%&$'(&''-'-!*!*(($$##%%))//22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(22((!"!")+)+@Jr|eLB).!,! (!,.,**''%&%&)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%-%-)+)+)#)#( &+)97y}ѺK;2!-*'$$&)*+,)')'/&/&+'+'#(#(11./dd%81 ,&3&!%$#",16:弿`['0&+"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%'%'%(%(%($'"'#(%+%+!)&,+*0)/6341;:DB>A9=-3,21266;6;6)2(1(/(/&,'-'+),"% $ &%** -!/%*%*%*%*#+#+#*#*#(#(#&#&!$!$!"!"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&&&!'!''+'+.-<;xy䷸[S)(.-,,() $%) )'''((%'%')&)&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((%)%))')''"'" '"&%00@Astsk4,,)-+")'(-*&''''+'+'''''!'!'/0,.^_' 70!-$0$!%$"!,19>XR(1')$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%'%'%(%(%($'"'#(%+%+!)&"0$%+6<[Xdbihji]aPTAji˒귽zyj2929183:3;5>5=6>18.6*1*1+/).$( $' ' '$'$'('(',',%,%,%(%(%#%#% % #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!!%!%!*!*%(%(0)(!3(J?grEP).5:3-'"'###))#)#)'&'&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'$'$)&)&%"%"#" +,!#/269mk(&20-2*0&&$$#%#%)&)&%&%&''-.,-QSɜ*%5/,, #(&" 23CDh`NG)0#&%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%'%'#(#(#(#(#(#(#("'"(#)',',%*"'58fiﱰyX`6420#)&+%$$)#%#%)&)&%&%&''-.,-MNŋ,(40.,#+($!64IHRJE>*/#%$2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(!(!(!(!(!) (")#*),),)+&)qy\bPW<;540(2*.#.#' ' ' ' %"%"%%%%#(#(!*!*!-!-!.!.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"#"!&!&!&!&!$!$&!)$/*& ##77w}_c<@4(<0, $#!#!!*!*#*#*%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'%'%+'+'%&%&& &!+/2&*2/LHijJJ&,(. )%!'!%!%%'%'!'!'&&)+(*GH{}.*51.+#+($!64KIE>A9+3'#"0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(!(!(!(!(!) (")#*),),)+&)tsXWC:80-!)' ' ' ' %"%"%%%%#(#(!*!*!-!-!.!.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"#"!&!&!&!&!$!$)$"/*<6;:,+BIfmRV-!5), ##!#!!*!*#*#*%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'%'%+'+'%&%&&&#,5%)#GD%!ϸ`a(.(.$-(%!%!%%'%'!'!'&&)+)+EFtvsr/./.+''$1+2,63KH?6?6*&**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#((((("-#.'#&)$'//DDkbSK*:,;+5*4%)$'""$#!"#$ (&'%,.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%/%/#'#'! ! !!!!#+#+&0%/'/&.&*&*|sA93+1&-".+*'&,'-' $+0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!''('(+*+*%*%*****!*!*+)+)QPǰ9>)-27-3")!%!%%(%(!'!'$$#$/0GJWZji**/./**#+%+%2.KHB9B9+!(++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(((((&)")#**,$'55TUǾetL\/:&1+.25+*%$"# "-/30#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%/%/#'#'! ! !!!!#+#+&0%/'/&.&*&*]Uf^:2.#9.# # #(&,#, ( %"&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!''('(+*+*%*%*****!*!*+)+)KJOT*.%*(. '!%!%%(%(!'!'$$#$--BFPTaa%%---+ -$*$*$;5]WA9A9*#' --#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!(!(((((%&!'%**+$&A>mjxMf.<+8+/492/-+  "&'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%3%3#(#(##!"!"#/#/"4!3!- ,"":*E4痔ih<9;8&%((#&"%")#*!*%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,'+'+-*-*'+'+--,,)))&)&27CGDG&(-/"##$#&#&%*%*#(#(##"'*9dg(*.0&$*&.&1)SK؆~@8?7&"!++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!)!)(((("/)$%+12()93YSntHNAG01241/30(##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*#*#(#(#&#&#'#'$*$*!*!*))''5*.#'$PL9C+-13('$"!#. /#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--'('(-%-%+&+&!*!*++#(#(+$+$(#KS˙88,+('(''('(),),%)%)## "&)1558fh*+/1*$(#*"+#OFӄ|?7=6&" +*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!)!)((((&("),2<=/0.(71~?@&'" /-,'%!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*#*#(#(#&#&#'#'#)#)!*!*))((0%.#>:95^coy)+)+$")(%* $+-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--'('(-%-%+&+&!*!*++#(#(+$+$#$5=ltFF((&%-,'('(),),%)%)## "&)2658]_#'/3.%(%+$*#NDτz?:>9&$!--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!)!)((((%-&,&,9832.(.(ܕjuGJ>B7575#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###'#'%.%.%+%+####!!&&..! &%>;.+31trFK16'$(. %-1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%&%&/ / -!-!#&#&))%&%&-"-"-2INⰪji75(%/,))))+-+-')')#"#"$(0528UW"/30&)&/(.'QG҇}@;?:(&" ..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!)!)(((((#1%+!+*0/5/61ffSW531/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###'#'%.%.%+%+####!!&&..&%-,,)-*HEHEχkpAF!&+$.$7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%&%&/ / -!-!#&#&))%&%&-"-"$49=BքGF*'*'))))+-+-')')#"#"#'0528?G"+0,%!(%,(,(DLxllBB25"(3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(@?^]gc"'0536,/!!"%&)(0# '+.+.-*/,--!*!*%&%&'#'#%#%#!&!&**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($3-! "!%NPpr.$B7/$0% &,%'%'%(%(%(%(%%%%%"%"!#!#((..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*.((-.FAҐzx,;--. .,('"%%(?48-@H").,%!(%,(,(DLxzzHH14#&,2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--<<[\{}rw?D'+/3%(!'+!)#++1+1)+$')&/,--!*!*%&%&'#'#%#%#!&!&**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#2-"#&(*$%;=LNTJ@6.#7,%+%'%'%(%(%(%(%%%%%"%"!#!#((..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,((00>9idA33%')- .+*#&$'>38-BJ$(-,%#( $,(,(DLxQR/0*+**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(% % )&0-BATTlmvwU_5@029:.-&%"!)(+,&(##$%('****((#&#&'$'$%%%%#&#&((**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($1*"$*+)$"*,,.nxמOJ)"91 &(#%#%#'#'%'%'%&%&%$%$#$#$#(#(!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!#.050<7ݧc^0+&)"&'),!.(#'"!/ .7621HP"'',,%#( $,(,(DLxXY'(+,!-+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(601,,)'%**-,9:<=??@@FFJIWTkhЈ뛖jt9:23+)&%.--,%&!$%---,&%**((#&#&'$'$%%%%#&#&((**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%2)"'$$"-/02@Imwws$,$%')+#%#%#'#'%'%'%&%&%$%$#$#$#(#(!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+, "+,:51+х83'*(,//!.,'"'""0,5510QW),),-&#( $*'*'BKvfg$!,)%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#$#$$%#$"$!#"$!# %&.).)/&2*:0C8O?)*ef¦lgE@724.#$#$#%#%#'#'#(#(%'%'%'%''&'&'%'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(21 #6-:0JLnp#%,++'$%&)*0/29.5Y`/1(*!-&#( $*'*'@Jt~4/2.#* #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("(!'''(() *$.", (&#$"&#'2(2(/%'(1'J@[R|uMQ;>%(.1))## +%##%%!(!(#*#*%*%*%(%(%%%%%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(!0!0!- ,"& $/*75_\||A6>3%&%&#%#%#&#&!)!)#+#+')'))%)%+!+!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(3+ &+"2)42IGܾ4;3: # # #$'$'(*48.3Y`/1&(!-&#( $*'*'@Jt~=850!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( &!' *!+!,!, *) * * ("*"($-#2(:0;1=29/=4=4@:KDabwxϘԼcg'**-//--  ##%%!(!(#*#*%*%*%(%(%%%%%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( *()%' ,$(#'.)4/@=C@ؖFE"$!#"&$'"'+5:.3_d12,-%-"*#%/+($9DZd<;;:1#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('('('('(%*%*#+#+!,!,,,++++))''!&!&%'%'+,,-01.0=BZ_jx6C$(9<6/'  #$(#'"("(") (#*#*%'%''$'$'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&++,,%%!%!830+MWÞA6"&15&',/ %,$!+!+%+%++%+%--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++%%#"#"////R]4962-(!!+,"$!"93@:`e./)*%-#+!#%.*&!4?Q\VTA?)*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('('('('(%*%*#+#+!,!,,,++++))''!&!&%'%'%&'(.0,-/46;FNRYߪt:>%)!(!)+)+'+%)$*$*#*")#*#*%'%''$'$'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&++,,%%" ,('#9Cjtf[%)-2&'(*#&"%(.$!+!+%+%++%+%--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++%%#"#"////FRU[$$(* "((%&=7F@hn.-,,'-&, #$&,)",8EQV\'3'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(- - +!+!+"+")$)$'&'&%(%(#)#)#)#)..++((%%!"%#&"% =7ZT狈MS4/:500.-(*)+),),%,%,!(!(#'#'#&#&%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%%!*!*++&&"# $#('-34:x9>)/13-/(&#'**#,#,'('(+ + #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#%#%!)!)((%(%(/7QY+'3/5.6/4310&$&$G=cYu{,,0/%*&, #$&/+$!+7@Lkq(5)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(- - +!+!+"+")$)$'&'&%(%(#)#)#)#)..++((%%$$"%#&'+),),(+>871>;SPƇҼVQ62,+))(*+.*.'*"("(!(!(#'#'#&#&%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%%!*!*++&& "#*)109?'-N]ƙW\!'.002+*"!**#,#,'('(+ + #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#%#%!)!)((%(%(.6-56340(!!''(&$"G=qg+)42#''+""&%0,)%-9=I:27/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()")")")"'#'#'#'#%$%$%%%%#&#&#&#&++**))(("*'  #!$ #./+,,-#$44UT떖^`88543388/1(*" $%%%%((!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%)%%'%'!)!)**")!'%*44&&10ZY6?//=<,&1*%&((--#*#*'$'$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+ + %.%.11&&*-ܒLM78,'0,33@@>D6::NNZZȮEE54'(,,+.+.%))-%%%%((!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%)%%'%'!)!)**)!,%!,,//44;;W_**66.((""#((--#*#*'$'$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+ + %.%.11&&/2dnҰqsEF94<800**.49?hdѝ%!51!%&* ! -)+',:8F}{=;#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#,#,#,#,#+#+#)#)!(!(!(!(!(!(!(!('$'$'&'&')')'+'+!)$,'.)1)0)0(-(-!+*$,&;-;-UH̓wXW,+'&,+32)+)+##%%**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-%-%)%)%!(!(,,!40$. +$"-+8*.wqγ;;33,$#&&--!+!+%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(//'1'177&&('@EċYb3423..+,_p}ݴ&"95"&&**&)%(63AJH#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#,#,#,#,#+#+#)#)!(!(!(!(!(!(!(!('$'$'&'&')')'+'+&.'/'.%,!( '"'%*% #"'.)*$T[EB20&(#&#'#'%$%$%%%%#)#)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*%&%&''''!,!, *(-,%#HLQK83&&&&(',,&*&*QW4:-&6/ --44#+#+''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%+%+%)%)#%#%####+*# ,'*%)%,';4keu{;A65330:+5( *$%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-) :7%"զ}~KL(#3/%"%"!(!(!*!*!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+%%%%'&'&#+#+!)'++""46prd_;5%%$$'',+%)%)npy@F%3+##--44#+#+''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%+%+%)%)#%#%#####"'$# '#-(0,-(.'=6qsӭy11'&#--6'1'1%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($ &";8(%lncc .)%"%"!(!(!*!*!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+%%%%'&'&#+#+!)'))$%35XZytC?(%(%'( , ,&)&)\[2164"()/**,,!(!()!)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*%(%(#&#&!#!# &(()$'"$"# ")*+1PV`d;? $,1*/+0&'""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("#&2+*"IC׎3'5)'"'",,..!$!$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%%%%'%'%#*#* (' " "00=<ፔ~GB(%)&()".!-)+(*UT?>32)/&-**,,!(!()!)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*%(%(#&#&!#!#*,"# !""$!"#&("#()-3%+U]ae)-)-(-',#$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( #1) GANHE:;/'"'",,..!$!$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%%%%'%'%#*#*'& "43//t{EA-(-( ( (",!+&*&*LJƔS\'16@"'%+"#""'&**%%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%&%&%&%&#&#&!'!'((****(+.2+/63HE뗖JG2//'7/!#),#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(' *("("5.=6猘s;0/.0$+0%$&%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%$%$)#)##+#+ ,(#%*,/-/-fi蛞JF,'-(' (",!+'+&*EC}zMW%/%$*(()*))%$&'&'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%&%&%&%&#&#&!'!'((****$!"'"'/,74lkΒFC)!7/&(#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()!,& *%6/+$lyQF--0(,0%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%$%$)#)##+#+("!")')'QTruYW.).)!&"'"+!*'*&):3YRFO953/( .&)&#!#+-4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!$!$#%#%%&%&'('(%*%*#,#,--..*$!$($$!67CD䍚oo1):3,+'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(."2!!))70FJ}x'.-3,+)),%*$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%#%#)")"%+%+,*"#$&$&9=BFli,(.)!&"'"+"+'*'*92?8IE3/*#/,)&#+)0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!$!$#%#%%&%&'('(%*%*#,#,--.. ,(!$(+1.*'1201S`NF:3(&/-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()&5!!%%>7&=A}18(/&-)(-&*$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%#%#)")"%+%+.!0!)&)+*,5:050)2+#$$&"*"*&+%*7./&cb75<::=58!)&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%!&!&'('())))+)+)')')#(#(!'!'&($'"%&)")& * *$1ZfTW*!=4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((,8$& 6.1*90PHH[*<)!" 5,0'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%")")"%,%,)0)$ $$(-1(,޽/(0)"##$"*"*&+&+:00'ҺSQ75&)(,$,'/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%!&!&'('())))+)+)')')#(#(!'!'&(')#&#&$$#,%/)55AeoŠqt.%3+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)5&',$4,:12)~j|3F '7.0'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%")")"%,%,).'$ $#'.2.2䛗/)0*""#$")#*',&+7+4(ᒘgo3<+3$*,3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!(!('('(+(+(-&-&+$+$'!'!%%2(3)*.(+,.,-",(35Y[SF4'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((2!+'+&*#-!9'(\^ҠE]'  ?15(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%"+!+!%-%-30%)$)#(*1*1{t/)0*""#$")#*',',4(9-ziqBK#)##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!(!('('(+(+(-&-&+$+$'!'!%%.$0%'*'*.0,*",$/-/46Ǝr>1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,6!'+15"&=+0GIz|Qj(  ?13&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%"+!+!%-%-#8,&&+!&#*#*g`HK="8D#(# &)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(QFg\fiDG'0'('1 $(,)!.;?44)*"%$('!,'1%/%0$/ - -!* ( ' '"&#'%&%&'('()*)*)+)+#(#(%&%&%&%&%&%&%&%&#(#(!*!*!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#/#/#0#0%*%*/'-%900().DIʒ>C*/,$5-!#1 -..!!#!#!%/%/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###,#,)*)*-!-!--44敨-81=$)!& $%(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(<1PESX'*&)"&+'/'/!$,=>Àt{HO6=/78@.5*0'-&, $# &%#"  ##$$''((!*!*!*!*#*#*#*#*#)#)#(#(#'#'!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$%$#*#*#,#,#(#(("("0)0),-%&WdԠgs=I+&72-&& )!*--$$####%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&#,#,))))+ + #"/-fvTa-;(,&)'&%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*#7/\a #(+!#'-5$,"&/=>[\bi;B08*0/6%+"' & &$#""####$$''((!*!*!*!*#*#*#*#*#)#)#(#(#'#'!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$%$#*#*#,#,#(#("#' 1*CD12;=::872424././----)*)*%'%'#&#&!#!#!%!%((**++!)!)#&#&%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%!%!%&%&#+#+!*!* $#'() !#,3)/82qkPS-!5)'"&!!*!*..#)#)'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--#,#,'&'&' ' $)$8>,1./23$*"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*)%$NSI=5*-$#"51)# 50)%qr~kxOQMOJJGF@B>?9999----)*)*%'%'#&#&!#!#!%!%((**++!)!)#&#&%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%!%!%&%&#+#+!*!*+/!"&(!"')/)#GB猘eh1%6*(#'"!*!*..#)#)'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--#,#,'&'&' ' $1,9?#)0234",$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,+*)AFSFJ=/&) 41#+#'#,)LP͎退`_POFBD?;6>9>7B;@7?6-$/&+'*&$&#$ (!)&( *!,%,$*$("'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%)%)%,%,#,#,!*!*''&&&&,'.)NW؏<5GA-(!'!'!/!/#+#+'"'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#*#*%&%&#$#$""+,'':;UYPRAC%+##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( ' '<;zypcRE,"-#0/#)!'#,)DH|oiLG4-/(.&0'.%'!%'*+"*#()) *$*#)%)$(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%)%)%,%,#,#,!*!*''&&&&#3.7@Waf_<5&!+%!'!'!/!/#+#+'"'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#*#*%&%&#$#$%&$%23HLnpEG*"( #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($*%+<;fei^+&3/*,*$,&((**48\`ļy[OA6;3:23/3/--..&+%* ('('")#*%,&-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+#+#+%+%+'+'+%+%+#*#*((((24'*'*ןEJ/-0/#%#%!+!+%+%+)$)$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++#'#'%'%'!*!*"")$"+):7vsRV1*,%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-#24.C=xm+&2-*.*$)"**++.3EJ禮KD@8-))&%%()$"!) ('& (")&-'.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+#+#+%+%+'+'+%+%+#*#*(((("$-003(+vخin(&10#%#%!+!+%+%+)$)$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++#'#'%'%'!*!*$"))&,*85PNX\0)/(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+#21,,&9;01*/%%""$'$'!(,4逄V_BK9@=E+4"*#*"(&$' (&-'.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!)!)'%'%)&)&+(+('*'*#*#*!)!)#+/,2.GCso#'48%#%#!'!'%+%+)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((#$#$#)#)11%(%!&"4+3*nt*)21#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.40'#巴RS)*..**$$(,&)(/,4hlܵzCK-5!)(0"(!''& (!*%,&-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!)!)'%'%)&)&+(+('*'*#*#*!)!))1 --)510+GC4837%#%#!'!'%+%+)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((#$#$#)#)11))'#($<40(Щ%$32#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(243*,#qz"+-$12(**/$*+2+2NPӒtGW'2*4 (!)% &"(!'#+"*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++!&!&' ' + + -$-$+(+(')')%)%)%2#*#,%6)1$ԧfr.41.+&$+(+(!+!+,,''%"%"+ + %&%&,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#+""!.,/**$LRqw9350-!/#"#'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!(!(!&!&#&#&&) %,$+-7 *+8䎛QU:=%*%*''$$$$)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+.$'.*62@@nr1(0'!.2% !2$:,vh2"-&#&#)(3+(+(!+!+,,''%"%"+ + %&%&,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%-$&$(# 4:GM<761, 1%#$(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!(!(!&!&#&#&%( #%,"*+6!,)6{knEI%*%*''$$$$)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((*&(3.62==>:2.'#(/&)$'+#)!bmonJH,,'' "$'+&+&))++((%#%#+"+"'&'&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%,'$"*&&".2.2џIE=8-#3) &%*)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#&#&"%%''- &)0#+&0[fW\'+'+!'!'%%%%)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#)#)502.52LH4/*&-1),&),%( OZ~<<,,#&"%+&+&))++((%#%#+"+"'&'&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*$+%#%#,(0,48,/o~\XB>) 0' &%))#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#&#&!$),'- &'.&-$/8d^x|NR>8E?+$+$''))((!&!&)&)&''''!)!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#+)1)*"##&"+,$%HP~TU,%1*"&$)*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#%#%!",-&)!%&)&)',&+qx+-+-#)#)&&%%)&)&-(-('('(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( -%,)($;2h_BF-4!2,'(+,-.3-:4պqu821++$+$''))((!&!&)&)&''''!)!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&$,%'"##&"1223;Cgh-&.'#( %((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#%#%"#,-"&%(&)$(*/!堘+-+-#)#)&&%%)&)&-(-('('(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!.$-*%">6YPku-&6'+"&(+%.%.-(}le@81(1(#(#(((((!(!('('('('(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((( $$'%&%&20658:Y[븿723/'+&*+)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#%#%$$++ ()''""01x1/1/'+'+''%%''''+(+('('(''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,$0,#:.C7鰲.&6'+#'!.$1'0"+:+3$c\װtm1(1(#(#(((((!(!('('('('(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*3"+"%(%&$"'&<>@BҜ:650).(,,)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#%#%%%))++'' 44pi1/1/'+'+''%%''''+(+('('(''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&62$ 6*5)ۦDI6;!%%, (&$0%3*=6unG@1*.169!($3!!(!('*'*'('(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($($( ' ' $ $$%$%75-+tuUS97)+!#1)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#&#&%%%%%%%%'%'%'%'%_VѱVP/)*,-0! *&&%&%&+(+(''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#'"@8>6הei5:$1*%$#.)%&D=MF᚞䌐|wtzxҍ䭯}uLD(+/2*,-$!(!('*'*'('(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!(!(!%!%%&%&64-+dfϷdb86'("$.+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#&#&%%%%%%%%'%'%'%'%QHà]W2,+-.1#!+&%%&%&+(+(''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+),&'"5,XOPQ0(C; "!&1"#!33%%զz\[LKG48.:9CB\_orֵYX54$+'-##*#&#&')')%)%)!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&(&("+"+** ( (-**';6toHH(%*((.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!)!)!(!(!(!(#'#'%&%&%&%&'%'%'%'%3,sluk>5,-11(#/&%#'#')')'''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((,*.610+d`ڼA@/-42/,)3/$+#*BA҄uxBD)+'%*'+)+)'$$!   '#3.6261.)&#"c^ۏUT(&-+%#,*%#%#'('(#)#)((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$$$**,,((&&((4+\T]_*$-(',#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!'!(!(!(!(#(#(%(%(%(%('('(''''4,d[zF:*)0/'%/('#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1+7140GCݣ_^/-31-+&2 29!EELLܻ]a8<-/79%#)&+)(%(%,)0-0,)%% #*%1,7395JEJExx~|0.,*)(('%#%#'('(#)#)((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$$$**,,((&&))5,PG鹷rt(#,&),#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!'!(!(!(!(#(#(%(%(%(%('('(''''<4[ROC+*--'%/'(#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.)2-95heSZ0+0+ 6',7!>2-!牐gc0'&'5( !#!&&-//,),'+)-(&$!@$/C6znPK82/(& '!'!'&'&#(#(((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%"%",,00++%%&&6+C8虔%("--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&!'!'!)!)#)#)%*%*%*%*'('('('(81G@]P0/0/'$/&'#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7,2'YVۣu|*%/*#-56 *%00$/#ahǞda@=0'90,#!,-0-22!/"0&*&*&$$!;<9->2fa>8-'!'!'!'&'&#(#(((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&$&$ - -11,,%%%%6+;0~!%//#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&!'!'!)!)#)#)%*%*%*%*'('('('(6.=5g[5420(#.%&#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(;0.#tqC77,/8%(3&#).%)5;V[W_(.*2#+$-%#%#%#'#'#(#(#*#*#*#*#(#(#'#'#%#%*&*)"!6=kscb) 5,"#"#+* .-,#,##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('&'&'+'+%$%$&&0.,1!&b^߼NY-8#$%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(98-,؈0!:,!!(.!&!&'&'&'+'+#$#$'&'&%)%)#,#,#,#,)1& "&((''&"&"ABhjfZ7,'(.1*)&*!%.4?E^f;C($3-5$,#)!#%#%#'#'#(#(#*#*#*#*#(#(#'#'#%#%%!+'0/('%-CJ뢮~~7.7.))---$-$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('&'&'+'+%$%$&&0/,1"'[Wآ_j0;"#%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(66,+׃0!:," %"+/!&!&'&'&'+'+#$#$'&'&%)%)#,#,#,#,$,%-'*"&!!""'#'#YZJK -2!+% .$1",)(+(+|½*1%,($2&0 )#&"#%#%#'#'#(#(#)#)#)#)#(#(#'#'#%#%++&&(,+.'!)qzID1+  && *!+,&,&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'+'+%$%$%%0/*/!&OIysw2> #&)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1/'&{0"9+%#('./!&!&'%'%'+'+#$#$'$'$#)#)--++%")))%%,).,31.,܋no(,-2 **%3*",/2"%c]vy%,,3"0 -'(($*&#%#%#'#'#(#(#)#)#)#)#(#(#'#'#%#%//!! #,/.6%,OYvd_*$!!((!+!++%,&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'+'+%$%$%%//).#(HBWQ2>")+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.-'&sz0"7)$")(..!&!&'%'%'+'+#$#$'$'$#)#)--++ '! ((420.64;9齿NP'*('*#0*#1-0!9;UW箶JG*-14"2'#)('&%#&#&#'#'#(#(#(#(#(#(#(#(#'#'#&#&'+"'%$++2(0:B>F86),),))!)!))&(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&',',%$%$$$,.'('(?8@94?&&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,)'$in̹1%5*"")).-!&!&'%'%'+'+#%#%)")"!*!*//))!#-(:35.^\Ȉsv$&'&$# -,+#1), $029;ˁig:7),/2/*)-&% #&#&#'#'#(#(#(#(#(#(#(#(#'#'#&#& $).(.%&%,:B7?ijNL*-*-**"*!)(%(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&',',%$%$$$,2"#)*<4=57B))''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.+)&bhů5*8,""'&--!&!&'%'%'+'+#%#%)")"!*!*//)),'+&-&6/ӆU\+)53)*#$"*$,&(!)!)LVܐKF4/ #$*)+,$$!!#'#'#(#(#(#(#(#(#(#(#(#(#(#(#'#')%1",$!!&3715ٌvy.2.2&&!&!&'('(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'',','$'$!$!$+$2''7,@5AJ//""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.(*%[aɣ<4>5%&'(.0!&!&'%'%'+'+#%#%) ) **00**%7-.%H@ng53() !&/%-$"+.6(06@blB=<7 "#$)(('$$((#'#'#(#(#(#(#(#(#(#(#(#(#(#(#'#'#.*"%(-)/15)-x{).).$% %!&(*(*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'',','$'$!$!$,'6&&5*C8诸GP22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/*-'Y`ȟA8A8&'()/ 1!&!&'%'%'+'+#%#%) ) **00** &2(+!aZУ\c18"2+$!*8+#$-#+3;蟣;46.  ''**'$'$#(#(#(#(#(#(#'#'#'#'#(#(#(#(#(#(!."/((%#*-(+Z]/3'*$#$##%&) '+1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&',','%'%!%!%,* ://$᢬gp,)'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*%$UZ̏TN.($&),**!&!&'$'$'+'+#%#%/)& $ (0.,1+. "0(IAQX(!6/+(&$"0,!&'0 )]b­1)7/  ''**'$'$#(#(#(#(#(#(#'#'#'#'#(#(#(#(#(#(!.!.&$##.1.1Z]=A-0&%%$!#$'%(/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&',','%'%!%!%++ ://$ᚤnw.,,)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*%IOWQ1+$&),.0!&!&'$'$'+'+#%#%& # (#,21./.0"%B:tl82712+*#%!,!%*."&'+fjus$71!!))+++#+##(#(#(#(#'#'#&#&#&#&#'#'#(#(#(#(#-",#" #.215W[»X\:=+%*$ $!)$0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%!%%+%+)&)&#&#&,- ""5-+#䇕|1/1/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%@Ioy_\52"''+. 2!&!&'$'$'+'+#&#&$$&&&)"&!)"+).&+46?A|{׾OJ2-+$("&&2'+&*5926<@˙us$:4!!))+++#+##(#(#(#(#'#'#&#&#&#&#'#'#(#(#(#(#-#-$#"#-1.2RWnr@C*$+%$! -%1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%!%%+%+)&)&#&#&+- ##4,,$v,*1/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&!EOktkg:6!%"'*.!&!&'$'$'+'+#&#&''(($' '&..3',*,^`LR++11)(/.#",*87''PRҕ)%51%%,,#,#,/ / #)#)#(#(#'#'#%#%#%#%#'#'#(#(#)#)',', &!'%$&/%.PVGI(-$%!#3$4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%+%+)&)&%'%',0 !$.**&dw($2-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##""KVepqp>< %!&*.!&!&'$'$'+'+#&#&"'"'%#%#5-;2G>@7[\qx./,,)(&$//%#3333?B_b2-/+%%,,#,#,/ / #)#)#(#(#'#'#%#%#%#%#'#'#(#(#)#)',(-!'")&$%.#+V\GI%.%%!%6#3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%+%+)&)&%'%',1 !$,),)Yk$2-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##MX\gqp>',@HDA/,((..%,%,33#*#*#(#(#'#'#%#%#%#%#'#'#(#(#*#*)+(*##"%-5/8ltLN&4'""4,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&%(%(/#4 $*'1.La&":6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%% ?JDOrq<A;&$"% +*%$&3#7(>/數L_2F);(:#,"+'#)%, *#$#$#$#$%%%%'%'%'$'$%$%$#####"#",- %"'+$)"679;ۚJE*+*+&1) #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#( 10#% !3*)W`+&72!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($#&%44BAFF60A;0,*&*,*,,/,/0.0.2+2+5#F5M<;)H8yi_Y5/&$*("%'&004$0 :,2$qtZm.A&8'9$-#,'#($-!, #$#$#$#$%%%%'%'%'$'$%$%$#####"#" 4-!#(0)*#01/0жKF,-*+%0)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(/.#%"#7-+!U^+&72!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$&%32A@CD,&2+# ()()*,*,.+.+0)0)5#7&=,H6|l躪NI-.-.*'&#+&.,!/-*(9:nnJP0032,(,(&$$!%%((%(%('('('('('('('('('('(''''%&%& -"%(51.*?=GFNH./)*$0* ##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(.,"##%:1,#T^+%71!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%&&33BB죩v{filobidlS_S_ScScYcYc[a[a\fXa^eu|ÿ'( ,)74 &$!+)75789:ov2121+'/+'%" ""&&%(%('('('('('('('('('('(''''%&%&*#"$'-)-)YX~OJ01)*#.* ##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(/,!"!"90,#T^+%71!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&&&44CC^a9<0'D;(#(,*&330!B>͎K9D205"&%$#)+'*'*')')')')'('('('(')')')')'*'* #03),01?@ǒJH/2&)". ,!"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#(#(!2. " 4,+#Wc+$70!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&'&'56HI[^'/&)%&!'("/&1/1/2.SNݮmZSA..%$&%+,'*'*')')')')'('('('(')')')')'*'*",0#&23UVݴHE/2&)!- ,!"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#(#(!2/!#1))!\h+$70!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&'&'9:MOPI6/+-/1$$$# #'0/*)]]瞝|H7;*,,..11%&%&#&#&!%!%$$$$!&!&#(#(%(%(,/.2afB?,0$'!.!.$!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#'#'//$'!0))"^l)#5/!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&(&(=,+11cc츸\JB1/0222/%&%&#&#&!%!%$$$$!&!&#(#(%(%(**##+.;?ފ@<,0$'!."/$ %#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#'#'*/&)!#1+)"_m)#5/!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&')>AWZ2<7A*4'!% $")/'.&`[֯nf5611(4-:11((" %!& &!'%"$%$*%+'*&)=;64OS|C@!03,'$("#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)%)%#&#&)/"-1)$-)_o% 51!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%(,CGknKU)3 '&!',+1%++#,%NJvr`a99!-&3##&)+-!& & &###%(+*.DBwuA>!$/2+)%)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)%)%#&#&,.),'#0+jz'#51!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("&(,EInrU^0/65&)!)#2&3,$#3131hnݱ^_CE0.1/0246-2(-'.-4 ('/3;5>8?3:6857ooКYV85"%),'*(-!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%*%*)%)%#&#&--#''%2/z("4.!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)'+HLswKJ,+$&#%,,*+" $#65-,?Ekqa_HF+-&(&++0&-$,/7)1%- ).5HOqt>;52&('*' .(-!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%*%*)%)%#&#&.-#'+(41뉛v})#2+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&*%)KPz~~A=52@>39)/'!,( '0%.(+/2ssdcRQFJEI>F=D@I@IHPQXnr,&1,&(#$&!-)*!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%-. %)0.43蘬gl,(1,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%* &OTӃ}x0.75)/&, +(3+ ("+,0*.GGrr(#4.&("#* ,$&"##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%,/!%&+0.21妺[a3/40!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($)#TZَoqllLM"!(&$,$,11'(')&(. 7)u)$4/%$"!!,* "$&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%)/"&$(-,1/LT4/2-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*"[bߘK:G7yɽss(&+*&-! &3,-(*$%,. RHh^in.)61%$#"#/)%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%'."&!%+*.-BJ1+.)!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&,#`f㟥}RJG7ZIG;i\VY:=-$0(9&$%''&&%%1402r}ޭBG3-3-))####!+!+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$,,))#("EA>:=B+*,+' ' %"%"%#%##&#&#(#(!)!)****%&%&#(#(!*!*++**#'#'%#%#) ) +1#fxƻ+)&$*#1**4,6Zy䒱`c.&.&0 -+)# ""%%2525EPitձsx9=3-3-))####!+!+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$,,' -'("HEMI=B*)((' ' %"%"%#%##&#&#(#(!)!)****%&%&#(#(!*!*++**#'#'%#%#) ) -3#izp|HT/,$""*#,6(16UMkֺVUA@0(90#"'"-'0&/$' "&/(`\䘔DL/7',',!$!$#&#&#,#,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$!*!*$&0-&#PNhgs}7@$)#'%'%'%(%(#(#(#(#(#(#(#(#(#(#(#(#('$'$#&#&!)!)++++!*!*#(#(%&%&24 #n}{7C*(+#'!!%%**%%&(&(ጇᴯ^]+">6'&)"-%."+!# "4-0)=9VR٢098A',',!$!$#&#&#,#,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$!*!*$ *,)VTՄ`i2;$)(,%'%'%(%(#(#(#(#(#(#(#(#(#(#(#(#('$'$#&#&!)!)++++!*!*#(#(%&%&/2#%uq~R_2>(3 #(+++&&%%((1346_ZfaMPADCE:;,2(.$" "*%$!$!'$]b֛Yd#'5))((!*!*)*)*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%(%('$'$'%'%!*!*'$.*+bcΤCQ'5&&/!-!-#,#,#+#+#)#)%(%(%&%&'&'&'%'%'$'$%&%&!(!(******!)!)#(#(3-2+臏ip25*-&+(-''0+/$() /&9&9&F9TGX[57-.'-.4%0 *"'#!/,2/>BHMźGQ*%3))((!*!*)*)*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%(%('$'$'%'%!*!*'#-&( "rs3A)7('0!-!-#,#,#+#+#)#)%(%(%&%&'&'&'%'%'$'$%&%&!(!(******!)!)#(#(.(=7V]@G03*- %).*2&."'!&-#/&-$YLXOF>1,;624,.%"-+#5(:)(<*`NNS16!.&%%))#(#(-%-%!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'''''''''#(#(")&.,127ٌ&.+2 !)!)#(#(#'#'%&%&'%'%'&'&)&)&)')')')'%'%'!'!'&&%%%%#$#$%$%$3)RHky@N%"+)+%( %%)*$&()**302/:2>6㡘ph94/)"%$&$&(,/.1165=+3 Yk'-%*)6 %%))#(#(-%-%!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'''''''''#(#( ($+-2')'"0.2/)! '%0-3333IHml㼺@@.-54$!#)&'*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#&#&%)%)'('(%&%&'/&.2>epOR'$%"! $!%"&#&#'#'#+&-'&"&"&%&%))))*,+-+0+0(-',$($(!$!$#")&&#( +$7,<15-}vSSC;JB&( (!)"$!# (*2/85cmКNT..66%)"#!#&'3'3&$% ($[Z֕򄁻][FE1425(1$-'")-,0//)*$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!&!&%+%+')')%$%$&,+18IwFF5342(&(&'#+&,&("#$!&"%&&(&+&+%+%+(,'+%*%*$&$&&$&$+)/,.'$/&918-&=<@@&%$2,&+(-)/*1,-'),%)#3)2(FEfdޭFG((!$"""%#&%1%1.%*!3.4/</=.1'3**/(-20'(''.-++IJghZ^>@DE><86%'!"!&(-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$%-%-'*'*'#'#28$fzUZCN7B,<0?6:25,/+.**,,'&&%&&''$(%)#*")('"$%&(*+,..++,++*))-.=<;::9<<]_~⨭rp[Y45'(%%* )$('! "*'5/2-9595QTqtٹL=@1* +!',(- 6!7 $%&& )(11;<45XXĄ[]HI+*)',.46,1"'!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$%-%-'*'*'#'#+1#(܃tVf?N;?59,/,//.11,**(''''$($(")!(('%&%&&(&(''&&''&%@@11<;SRxx풒ts86=;4511" "(-,'&)&/+1,)$2.95ք뻾zzGM9?%+)/ #"&)(5+2")&"#%B<}y?:.**.37 0!!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$#.#.'+'+'"'"%)BFBR?O8E5A0909+1+1)-(,!'!'$$$$%$"!!"$%/1342615KSx¹U@5!14)#*$+).-&%$")((*OOoppuLQ*0%+ "/"(/,, $0+;5-'84NKmi48#'!1/?!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$#.#.'+'+'"'"'+fjmwPY:A3:*.)-!' &##$%+*&% &&01BDJL|h`KC=)D06!2!"&)0..-/.6+5*;.UHQK1,2+HA "-%/53('"*+;8UQ郈W\=8;7:.5)*$("##&&")#*+,!. - - -#0$1A 1'0%&$$611-CE^_VVE?<65+:0C4J;>-?.C;F>X_zԮwlUJ6420$'%(,2 '*&/+4*.$2.95?<>;oormG@6/!/4+(*/"731-FP[eȿpkIE0%0%,%.(((&&!"/ -,'((,"/ -07"6!5"#"#50-(ce̲dZMC<-5&?.YHy}lhWG<@6/-0.!%!% &()*,(($1'4*,'(#HEρ~ouDJ.9/:,0*-#"#"!&#(*7$1*7.:22(',1#bSpFEAA77661379679:(&,*/'2)5&3$/,#(/.," '/#?67.җ林确ml:14+,)41-3,2/-/-#-$.242450/*?F]dѝ=H3=$'"% $#!(5 - ,".,,,,6(<.@1D5\Tʆ~ppKM57 !(&'%&',-..#*#* /#1%<2<2ֽswLK87;28.0-2/%+ '%)/*%"%'&(-()${ﴻxEI475)B63.&!*+$6*<+/%)$&&'0)5/SS||엠튓kp\aFD863+7.>2B7A9=4:+B3P@D4ULxoel<<..'#,("' $##!) .4B-;/=7E_i{X[."'("3.$0'4,>,>+/&*()%-$820)32@?jrȇ~urjeZ^SMDF=7(0!5%+_U˳{JQ5<,+320,.*!&!& '$+'#',-+#2"1@Mjwbd=?+(62,$*#* ,)-. 0&+"'+%)"h_ߒyyiimiea=;20!"%+*0)"! $ 03%'.7GOņɼ[W95/'/'&#&#$)%*+%3/('!&%*3-5/2)90WT}y겶_f88))5353*+)* %!&)!+-)$%"!&',-(+=@t|v:775/'5---&&%0,756.*"'((2$4'MHtoyRY9:77/+/+'"!$+'.(,,!!"",,;<577812`cfc.& $#,,'2"..-&+!& %"/ 2#?1;.:583CAHGܯS^FQ4;/6//774040)$+'%%##"")".""))22,,&'*+VW{{ꃋZb;62,0"5',+)(%%$$#&%)),),"'&*....0//-3.4/B1TDupc\MF3+2*.+.+*,()%!&"*%,#) #"$%(*C.;&9-9-SUwyͶsmKF6(3& %$''""!'+).%)%%##*)0/:5=96&7'=8FBaiƃ诽떜y][NL?8814,5.1.0-)+&( ' ' )%#$*-0,/!#;&6"D9eYv^R5+9/7283/3-0$-#,%0#. * * (%)('&%#*13:GOS[瀃glW\<>-/%%++0.42! # #$"&&.+3/7*2,1.47:6933,,H?lcҤdZMB/*(#*.58-6&/#."-!+$/&/(0*.'+&* /..-.4)0/719.8(5*.#1145:6PMxrϖǻzv]XMG.62:23562)2).0".* !!##% )&"74+*$ &%#$"+*+*=IBIDLS]du}ņֵ둞؃juS^=D548'*(+(+-0*,()!" "!##&#&#%#%#)*')$*#)!+ **)!*'$!')/1QWek謵UW8787>=GF$4$4$2$2$.#,"( '#& $!!""&"&"&& '"($! !!#()()+))'.*62F@QK?GAIENHROYV``kfqxxyz~~sqmkdb`]\VXROIIDM>I:?08)1%4(5,9/ %&%)'$("' '"(%0%0$-$-$+%-)-)-"&#'$)$)%,%,%-%->>34-//1OT{봹KJ(',,+-#,&0&-&-#& $!!" $ $" #%(&)*,)+**--52524/.*,%*$/6/6/8,6,6,6/:3>9D8B8@7?8@=DGKNRXNSIMDG>BCNKVى~_pET7F*4%0!( '!"!!#! +)%%%&''#$%&&&(("%&%&&(!*%,%,#)"("'#(0&0&/(0)0*0*-),(,&+%(#%!%& ( )" "&"))++#!$'!0"1 1-#+#+$+#*$,"*#+")'$,0:>HWavs{emFMAH39/5(.*0*/+0&&()* +. /(*.241,')(+*,,+*)(('(')(&"(%+&,'*$*$*$+%*++++*)(******, -*, .#1 .("((+ ,$0#/!.+*''$&%%$,,..9>;@V^emЃўszY_GM4:.4(-', (#+$/$/". +,..+**-2 6!7*)*))(('%%&&*),,*&,(-(,'*$*$,&.) , , ,++++,. / .-*((*&&&&'()*(()'( ,%2*7(%(%,+11CCUUjotyv|bhPXHO8340/+/+0,516172/*0+.(.(+$+$+&-(/////./..,.,.*.*,'-(,)+(*&*&+'-)*++,*)''#.#.#/#/#/"."/"/!+!+$+%-&,#($'"%,/,/02-/+.),*.+0KLOOZYed֢qlkf`\VSLHC?722,/*.)*%)$'!'!% % ....-,-,,),),(*'3.3.1-1-/,-),(+'+ .!/#1#0#0"/!.**++ , , - -%%& '#(&,-/.0#%)+68?AKMSV\`bf⍑mqOL?SHZOjaofxo܃z珆옏ƽƽ˦uuxLKN336--00/2336336336336336336336336336447447447447447447447447214103?>A--0447214447ihkHHK558103214447447447447447447447447447447447447447447447447447.//778223566;<<::;zz{dcgJJM::=76910333655855855855855855855855844744744744744744744744744744744744744744744744798;87:OOR^^a,,/214558558558558558558558558447447447447447447447447336336336336336336336336+*.214)(+>=@zz}۷_`cJKN358+-0)+.+-02479;>24724724724724724724724744744744744744744744744787:447@?B87:87:ØMLOEDG::=4473362140/2+*.447447447447447447447447447447447447447447447447..198;336769yx{윛zz}QQT::=769::=87:214558558558558558558558558447447447447447447447447769336..1#"%214"!$cbe<<ssv - #CAIWU]ZW_WU]US[US[US[US[US[US[US[US[VVYVVYVVYVVYVVYVVYVVYVVYVVYTSVIILTSVWWZBBE;9AEBJPNVWU]XV^VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\WXXQRRVVW]]^"NPSz|('*{{~BCBzz{!!//7QSS?>Aqtt7::!%ywDFH=?A('*889zz{!!//7#&&447y||/12!% )+.kmpign -%%&<=@~('*iijzz{!!..5add&&)NQQ!%=?Ahem AAB=?A('*rrszz{!!..5"$''cff!%KMOljr - ;<<>@B('*rrszz{!!,-4퍐! #+..z}}!%UWZmks 334<=@('*ooozz{!!,-4%%( wzz!%NPSmks -CDD=?A('*mnnzz{!!,-4~('*+..x{{!%VX[olt <==@BE('*tuuzz{!!+,3򌏏||)(+033z}}!%]_bolt -<==9;>('*rrszz{!!+,3󈋋#"%),,ruu!%UWZolt -<==9;>('*rrszz{!!+,3󈋋#"%*--wzz!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%+..vxy!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%,//svv!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%.01!%XY\olt -<==9;>('*rrszz{!!+,3󈋋#"%/12!%XY\olt -<==9;>wy{('*rrszz{!!+,3󈋋#"%033Z]]!%Y[]olt -<==9;>RTV('*rrszz{!!+,3󈋋#"%144!%Y[]not -EFK86>olt(&,kjo|}} #('1&&)11:FCM"!%VW^not - GHMfglZ[`RSX[\a_]e_]e_]e_]e_]e_]e_]e_]e^\d^\d^\d^\d^\d^\d^\d^\dccdZZZ_``aaaFDK -$"*NLTolt\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f(&,igmyyz #%%/vw|&&)=?D -!%A@Enot -<;Aghm(&,{z} -uvv #%OOY127MPP&&)@?D -GHMfej - +*.!%A@Enot -{z lnq(&,CBH}a^f$ #!!!!!!!!"!!  !!" ' -&&)RSXFDJ "!%98=not -AADwy{(&, -            &'' #!$$&&)LJP[\aCBH!%;;>not - 136(&,VVW #144&&)#!',+0 !%::=lns VVYnpr(&,wwx ##"%!NOTBAF !%EDGlns ! #Z\^(&,99: #JLM#"%@?D  -238jin!%<@B569)+.$&)')+(*,%'*#%(#%(#%(#%(#%(#%(#%(#%(#%(,,/)(+)(+)(+ HHI!%hhplns 89>宰UWZ !qsv(&,ffi #lnq#"%569\]b pqvttw--0;<<!% -NNVlns KLQvxz "$vxz(&,HHK # #"%*,/ -  jkp,+0<==!%\\dlns =>C "$(&,0.4qou #AAKyyddn(68:#"%68:56; -hinXW]@@A!%YY`lns @AF=?A (&,BAF #++5㾽ǁ/.8358#"%136not -ijosrwAAB!%MMUolt -<==++,$#'~})(+ %+/-^^_[]`&&)223 - jkp -889!%XX[olt -<==++,$#'~})(+ %+/-?AD #kmp&&)223 - jkp -889!%XX[olt -<==++,$#'~})(+ %+/- -&&)223 - jkp -889!%XX[olt -<==,,-$#'~})(+ %+/-xz}&&)223 - jkp889!%XX[olt -<==,,-$#'~})(+ %+/-oqs&&)223 - jkp889!%XX[olt -<==,,-$#'~})(+ %+/-9;>&&)223 - jkp889!%XX[olt -<==-..$#'~})(+ %+/-TVY #&&)223 - jkp889!%XX[olt -<==-..$#'~})(+ %+/- -&&)223 - jkp889!%XX[kiq 778))*")(+ %+/-<=@{{~&&)778 lns566!%XX[ljrEEF889 )(+ %+/-!{{~)(+""# jkp334!%XX[pnu EEF++,")(+ %+/-024zz}('*??@ -klq 778!%XX[qow -778((("!$)(+ %+/-dfizz}! #pqv pqv|| <==!%XX[jhp -99:223 )(+ %+/- `af -rsxxwz ;<<!%XX[olt )(+ %+/-TVY#"% qrwBBE;<<!%XX[eefrrs('*)(+ %+/- 447WXX~ -rsx%%(MMN!%XX[(%-778ssthhh-..::=)(+ %+/-CCF[[\ћill255vw|{||FFGbbc!%XX[" ',*2*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0(((&''**+%%&))***+por%%(+*.*),+*.&&)0/2('**),*),*),*),*),*),*),*),((0((0((0((0((0((0((0((0%&-))1**2""* 216&$,~,,-QQT FDJ - -""*((0%&-$%,))1))1))1))1))1))1))1))1*(0*(0*(0*(0*(0*(0*(0*(0)'.(%-,*2*(0)(+)(+)(+)(+)(+)(+)(+)(+*(0*(0*(0*(0*(0*(0*(0*(0+)1+)1+)1+)1+)1+)1+)1+)1//7$%, -**+**++*.+*.+*.*),)'-)'-*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0)'.*(0&$, - ZZZIGOzz{103ZX^(%-~,,-{{~!cbe{zolt 77?  - - ZZZ::= -)'-,,-558*),pnt dejBAF ZZZ#447IGO)'-,,-IILljr mlq ZZZ <=@  -xv|('*,,-!455  ihkHJM ZZZJJM - 336hem&&),,-214caissvDFH214ffi ZZZSRU$#'rrs$#' a_essv,,-SRU𯭳_^c(&,dcg!UWZ JJM!!!##$ uvvƿ­ŹŻǿĹʷ¿ݳ޽ſ뱰Žÿÿû载ɹ diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.default b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.default new file mode 100644 index 00000000000..f70e1f1910d --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.default @@ -0,0 +1 @@ +# Default CI build, inherits sdkconfig.defaults diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.flash_enc b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.flash_enc new file mode 100644 index 00000000000..2412c23e67a --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.ci.flash_enc @@ -0,0 +1,7 @@ +CONFIG_PARTITION_TABLE_OFFSET=0x9000 +CONFIG_SECURE_FLASH_ENC_ENABLED=y +CONFIG_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT=y +CONFIG_SECURE_FLASH_UART_BOOTLOADER_ALLOW_ENC=y +CONFIG_SECURE_FLASH_REQUIRE_ALREADY_ENABLED=y +CONFIG_SPIRAM_ENC_EXEMPT=y +CONFIG_SPIRAM_ENC_EXEMPT_SIZE=4096 diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults new file mode 100644 index 00000000000..e9af03208d0 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults @@ -0,0 +1,8 @@ +# SPIRAM configurations + +CONFIG_SPIRAM=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 deleted file mode 100644 index 38db6f4e61e..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 +++ /dev/null @@ -1,6 +0,0 @@ -# SPIRAM configurations - -CONFIG_IDF_EXPERIMENTAL_FEATURES=y -CONFIG_SPIRAM=y -CONFIG_SPIRAM_MODE_HEX=y -CONFIG_SPIRAM_SPEED_200M=y