From 2153a583ee31105a8b61f8bfdb356dd9379d836a Mon Sep 17 00:00:00 2001 From: Vilem Zavodny Date: Tue, 9 Aug 2022 10:47:10 +0200 Subject: [PATCH 1/2] examples/tjpgd: Use esp_jpeg component in tjpgd example. --- .../peripherals/lcd/tjpgd/main/decode_image.c | 122 ++++-------------- .../peripherals/lcd/tjpgd/main/decode_image.h | 5 +- .../lcd/tjpgd/main/idf_component.yml | 3 + examples/peripherals/lcd/tjpgd/main/image.jpg | Bin 67106 -> 43700 bytes .../lcd/tjpgd/main/lcd_tjpgd_example_main.c | 2 +- .../lcd/tjpgd/main/pretty_effect.c | 8 +- .../spi_master/lcd/main/decode_image.c | 122 ++++-------------- .../spi_master/lcd/main/decode_image.h | 5 +- .../spi_master/lcd/main/idf_component.yml | 3 + .../peripherals/spi_master/lcd/main/image.jpg | Bin 67106 -> 43700 bytes .../spi_master/lcd/main/pretty_effect.c | 9 +- 11 files changed, 66 insertions(+), 213 deletions(-) create mode 100644 examples/peripherals/lcd/tjpgd/main/idf_component.yml create mode 100644 examples/peripherals/spi_master/lcd/main/idf_component.yml diff --git a/examples/peripherals/lcd/tjpgd/main/decode_image.c b/examples/peripherals/lcd/tjpgd/main/decode_image.c index f7182a32cb..3a02a04862 100644 --- a/examples/peripherals/lcd/tjpgd/main/decode_image.c +++ b/examples/peripherals/lcd/tjpgd/main/decode_image.c @@ -15,132 +15,54 @@ format if you want to use a different image file. */ #include "decode_image.h" -#include "esp_rom_tjpgd.h" +#include "jpeg_decoder.h" #include "esp_log.h" +#include "esp_check.h" #include +#include "freertos/FreeRTOS.h" //Reference the binary-included jpeg file extern const uint8_t image_jpg_start[] asm("_binary_image_jpg_start"); extern const uint8_t image_jpg_end[] asm("_binary_image_jpg_end"); //Define the height and width of the jpeg file. Make sure this matches the actual jpeg //dimensions. -#define IMAGE_W 336 -#define IMAGE_H 256 const char *TAG = "ImageDec"; -//Data that is passed from the decoder function to the infunc/outfunc functions. -typedef struct { - const unsigned char *inData; //Pointer to jpeg data - uint16_t inPos; //Current position in jpeg data - uint16_t **outData; //Array of IMAGE_H pointers to arrays of IMAGE_W 16-bit pixel values - int outW; //Width of the resulting file - int outH; //Height of the resulting file -} JpegDev; - -//Input function for jpeg decoder. Just returns bytes from the inData field of the JpegDev structure. -static uint32_t infunc(esp_rom_tjpgd_dec_t *decoder, uint8_t *buf, uint32_t len) -{ - //Read bytes from input file - JpegDev *jd = (JpegDev *)decoder->device; - if (buf != NULL) { - memcpy(buf, jd->inData + jd->inPos, len); - } - jd->inPos += len; - return len; -} - -//Output function. Re-encodes the RGB888 data from the decoder as big-endian RGB565 and -//stores it in the outData array of the JpegDev structure. -static uint32_t outfunc(esp_rom_tjpgd_dec_t *decoder, void *bitmap, esp_rom_tjpgd_rect_t *rect) -{ - JpegDev *jd = (JpegDev *)decoder->device; - uint8_t *in = (uint8_t *)bitmap; - for (int y = rect->top; y <= rect->bottom; y++) { - for (int x = rect->left; x <= rect->right; x++) { - //We need to convert the 3 bytes in `in` to a rgb565 value. - uint16_t v = 0; - v |= ((in[0] >> 3) << 11); - v |= ((in[1] >> 2) << 5); - v |= ((in[2] >> 3) << 0); - //The LCD wants the 16-bit value in big-endian, so swap bytes - v = (v >> 8) | (v << 8); - jd->outData[y][x] = v; - in += 3; - } - } - return 1; -} - -//Size of the work space for the jpeg decoder. -#define WORKSZ 3100 - //Decode the embedded image into pixel lines that can be used with the rest of the logic. -esp_err_t decode_image(uint16_t ***pixels) +esp_err_t decode_image(uint16_t **pixels) { - char *work = NULL; - int r; - esp_rom_tjpgd_dec_t decoder; - JpegDev jd; *pixels = NULL; esp_err_t ret = ESP_OK; //Alocate pixel memory. Each line is an array of IMAGE_W 16-bit pixels; the `*pixels` array itself contains pointers to these lines. - *pixels = calloc(IMAGE_H, sizeof(uint16_t *)); - if (*pixels == NULL) { - ESP_LOGE(TAG, "Error allocating memory for lines"); - ret = ESP_ERR_NO_MEM; - goto err; - } - for (int i = 0; i < IMAGE_H; i++) { - (*pixels)[i] = malloc(IMAGE_W * sizeof(uint16_t)); - if ((*pixels)[i] == NULL) { - ESP_LOGE(TAG, "Error allocating memory for line %d", i); - ret = ESP_ERR_NO_MEM; - goto err; + *pixels = calloc(IMAGE_H * IMAGE_W, sizeof(uint16_t)); + ESP_GOTO_ON_FALSE((*pixels), ESP_ERR_NO_MEM, err, TAG, "Error allocating memory for lines"); + + //JPEG decode config + esp_jpeg_image_cfg_t jpeg_cfg = { + .indata = (uint8_t *)image_jpg_start, + .indata_size = image_jpg_end - image_jpg_start, + .outbuf = (uint8_t*)(*pixels), + .outbuf_size = IMAGE_W * IMAGE_H * sizeof(uint16_t), + .out_format = JPEG_IMAGE_FORMAT_RGB565, + .out_scale = JPEG_IMAGE_SCALE_0, + .flags = { + .swap_color_bytes = 1, } - } + }; - //Allocate the work space for the jpeg decoder. - work = calloc(WORKSZ, 1); - if (work == NULL) { - ESP_LOGE(TAG, "Cannot allocate workspace"); - ret = ESP_ERR_NO_MEM; - goto err; - } + //JPEG decode + esp_jpeg_image_output_t outimg; + esp_jpeg_decode(&jpeg_cfg, &outimg); - //Populate fields of the JpegDev struct. - jd.inData = image_jpg_start; - jd.inPos = 0; - jd.outData = *pixels; - jd.outW = IMAGE_W; - jd.outH = IMAGE_H; + ESP_LOGI(TAG, "JPEG image decoded! Size of the decoded image is: %dpx x %dpx", outimg.width, outimg.height); - //Prepare and decode the jpeg. - r = esp_rom_tjpgd_prepare(&decoder, infunc, work, WORKSZ, (void *)&jd); - if (r != JDR_OK) { - ESP_LOGE(TAG, "Image decoder: jd_prepare failed (%d)", r); - ret = ESP_ERR_NOT_SUPPORTED; - goto err; - } - r = esp_rom_tjpgd_decomp(&decoder, outfunc, 0); - if (r != JDR_OK && r != JDR_FMT1) { - ESP_LOGE(TAG, "Image decoder: jd_decode failed (%d)", r); - ret = ESP_ERR_NOT_SUPPORTED; - goto err; - } - - //All done! Free the work area (as we don't need it anymore) and return victoriously. - free(work); return ret; err: //Something went wrong! Exit cleanly, de-allocating everything we allocated. if (*pixels != NULL) { - for (int i = 0; i < IMAGE_H; i++) { - free((*pixels)[i]); - } free(*pixels); } - free(work); return ret; } diff --git a/examples/peripherals/lcd/tjpgd/main/decode_image.h b/examples/peripherals/lcd/tjpgd/main/decode_image.h index 8fa1155005..44800b17ba 100644 --- a/examples/peripherals/lcd/tjpgd/main/decode_image.h +++ b/examples/peripherals/lcd/tjpgd/main/decode_image.h @@ -8,6 +8,9 @@ #include #include "esp_err.h" +#define IMAGE_W 320 +#define IMAGE_H 240 + /** * @brief Decode the jpeg ``image.jpg`` embedded into the program file into pixel data. * @@ -17,4 +20,4 @@ * - ESP_ERR_NO_MEM if out of memory * - ESP_OK on succesful decode */ -esp_err_t decode_image(uint16_t ***pixels); +esp_err_t decode_image(uint16_t **pixels); diff --git a/examples/peripherals/lcd/tjpgd/main/idf_component.yml b/examples/peripherals/lcd/tjpgd/main/idf_component.yml new file mode 100644 index 0000000000..a2167bf4c2 --- /dev/null +++ b/examples/peripherals/lcd/tjpgd/main/idf_component.yml @@ -0,0 +1,3 @@ +dependencies: + idf: ">=4.4" + esp_jpeg: ">=1.0.2" diff --git a/examples/peripherals/lcd/tjpgd/main/image.jpg b/examples/peripherals/lcd/tjpgd/main/image.jpg index 803ca2cdca464f387a97af7042f9f4ed040a7f18..cacad0905071aeb6d88710ea0478e122988f060c 100644 GIT binary patch delta 40866 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 RBD!}Crm)1{8wvl8{SUQu%wPZj delta 64435 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 +#include "freertos/FreeRTOS.h" //Reference the binary-included jpeg file extern const uint8_t image_jpg_start[] asm("_binary_image_jpg_start"); extern const uint8_t image_jpg_end[] asm("_binary_image_jpg_end"); //Define the height and width of the jpeg file. Make sure this matches the actual jpeg //dimensions. -#define IMAGE_W 336 -#define IMAGE_H 256 const char *TAG = "ImageDec"; -//Data that is passed from the decoder function to the infunc/outfunc functions. -typedef struct { - const unsigned char *inData; //Pointer to jpeg data - uint16_t inPos; //Current position in jpeg data - uint16_t **outData; //Array of IMAGE_H pointers to arrays of IMAGE_W 16-bit pixel values - int outW; //Width of the resulting file - int outH; //Height of the resulting file -} JpegDev; - -//Input function for jpeg decoder. Just returns bytes from the inData field of the JpegDev structure. -static uint32_t infunc(esp_rom_tjpgd_dec_t *decoder, uint8_t *buf, uint32_t len) -{ - //Read bytes from input file - JpegDev *jd = (JpegDev *)decoder->device; - if (buf != NULL) { - memcpy(buf, jd->inData + jd->inPos, len); - } - jd->inPos += len; - return len; -} - -//Output function. Re-encodes the RGB888 data from the decoder as big-endian RGB565 and -//stores it in the outData array of the JpegDev structure. -static uint32_t outfunc(esp_rom_tjpgd_dec_t *decoder, void *bitmap, esp_rom_tjpgd_rect_t *rect) -{ - JpegDev *jd = (JpegDev *)decoder->device; - uint8_t *in = (uint8_t *)bitmap; - for (int y = rect->top; y <= rect->bottom; y++) { - for (int x = rect->left; x <= rect->right; x++) { - //We need to convert the 3 bytes in `in` to a rgb565 value. - uint16_t v = 0; - v |= ((in[0] >> 3) << 11); - v |= ((in[1] >> 2) << 5); - v |= ((in[2] >> 3) << 0); - //The LCD wants the 16-bit value in big-endian, so swap bytes - v = (v >> 8) | (v << 8); - jd->outData[y][x] = v; - in += 3; - } - } - return 1; -} - -//Size of the work space for the jpeg decoder. -#define WORKSZ 3100 - //Decode the embedded image into pixel lines that can be used with the rest of the logic. -esp_err_t decode_image(uint16_t ***pixels) +esp_err_t decode_image(uint16_t **pixels) { - char *work = NULL; - int r; - esp_rom_tjpgd_dec_t decoder; - JpegDev jd; *pixels = NULL; esp_err_t ret = ESP_OK; //Alocate pixel memory. Each line is an array of IMAGE_W 16-bit pixels; the `*pixels` array itself contains pointers to these lines. - *pixels = calloc(IMAGE_H, sizeof(uint16_t *)); - if (*pixels == NULL) { - ESP_LOGE(TAG, "Error allocating memory for lines"); - ret = ESP_ERR_NO_MEM; - goto err; - } - for (int i = 0; i < IMAGE_H; i++) { - (*pixels)[i] = malloc(IMAGE_W * sizeof(uint16_t)); - if ((*pixels)[i] == NULL) { - ESP_LOGE(TAG, "Error allocating memory for line %d", i); - ret = ESP_ERR_NO_MEM; - goto err; + *pixels = calloc(IMAGE_H * IMAGE_W, sizeof(uint16_t)); + ESP_GOTO_ON_FALSE((*pixels), ESP_ERR_NO_MEM, err, TAG, "Error allocating memory for lines"); + + //JPEG decode config + esp_jpeg_image_cfg_t jpeg_cfg = { + .indata = (uint8_t *)image_jpg_start, + .indata_size = image_jpg_end - image_jpg_start, + .outbuf = (uint8_t*)(*pixels), + .outbuf_size = IMAGE_W * IMAGE_H * sizeof(uint16_t), + .out_format = JPEG_IMAGE_FORMAT_RGB565, + .out_scale = JPEG_IMAGE_SCALE_0, + .flags = { + .swap_color_bytes = 1, } - } + }; - //Allocate the work space for the jpeg decoder. - work = calloc(WORKSZ, 1); - if (work == NULL) { - ESP_LOGE(TAG, "Cannot allocate workspace"); - ret = ESP_ERR_NO_MEM; - goto err; - } + //JPEG decode + esp_jpeg_image_output_t outimg; + esp_jpeg_decode(&jpeg_cfg, &outimg); - //Populate fields of the JpegDev struct. - jd.inData = image_jpg_start; - jd.inPos = 0; - jd.outData = *pixels; - jd.outW = IMAGE_W; - jd.outH = IMAGE_H; + ESP_LOGI(TAG, "JPEG image decoded! Size of the decoded image is: %dpx x %dpx", outimg.width, outimg.height); - //Prepare and decode the jpeg. - r = esp_rom_tjpgd_prepare(&decoder, infunc, work, WORKSZ, (void *)&jd); - if (r != JDR_OK) { - ESP_LOGE(TAG, "Image decoder: jd_prepare failed (%d)", r); - ret = ESP_ERR_NOT_SUPPORTED; - goto err; - } - r = esp_rom_tjpgd_decomp(&decoder, outfunc, 0); - if (r != JDR_OK && r != JDR_FMT1) { - ESP_LOGE(TAG, "Image decoder: jd_decode failed (%d)", r); - ret = ESP_ERR_NOT_SUPPORTED; - goto err; - } - - //All done! Free the work area (as we don't need it anymore) and return victoriously. - free(work); return ret; err: //Something went wrong! Exit cleanly, de-allocating everything we allocated. if (*pixels != NULL) { - for (int i = 0; i < IMAGE_H; i++) { - free((*pixels)[i]); - } free(*pixels); } - free(work); return ret; } diff --git a/examples/peripherals/spi_master/lcd/main/decode_image.h b/examples/peripherals/spi_master/lcd/main/decode_image.h index 1e31e3d1cd..c9aaf0cd02 100644 --- a/examples/peripherals/spi_master/lcd/main/decode_image.h +++ b/examples/peripherals/spi_master/lcd/main/decode_image.h @@ -10,6 +10,9 @@ #include #include "esp_err.h" +#define IMAGE_W 320 +#define IMAGE_H 240 + #ifdef __cplusplus extern "C" { #endif @@ -23,7 +26,7 @@ extern "C" { * - ESP_ERR_NO_MEM if out of memory * - ESP_OK on succesful decode */ -esp_err_t decode_image(uint16_t ***pixels); +esp_err_t decode_image(uint16_t **pixels); #ifdef __cplusplus } diff --git a/examples/peripherals/spi_master/lcd/main/idf_component.yml b/examples/peripherals/spi_master/lcd/main/idf_component.yml new file mode 100644 index 0000000000..a2167bf4c2 --- /dev/null +++ b/examples/peripherals/spi_master/lcd/main/idf_component.yml @@ -0,0 +1,3 @@ +dependencies: + idf: ">=4.4" + esp_jpeg: ">=1.0.2" diff --git a/examples/peripherals/spi_master/lcd/main/image.jpg b/examples/peripherals/spi_master/lcd/main/image.jpg index 803ca2cdca464f387a97af7042f9f4ed040a7f18..cacad0905071aeb6d88710ea0478e122988f060c 100644 GIT binary patch delta 40866 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 RBD!}Crm)1{8wvl8{SUQu%wPZj delta 64435 zcma%iWl&sA&@Qe)7I(tpu8T{6#T|BW2p(A6C6G-B?krcU=vKmAM_3Imydl|tDJw|)l4K>ttv(-{8=7Uq8%8w(2) z3kMqq=YK9-d^{Xnd|VtHJVHEtg8$^{?inG$v;Q9ct)nUb@2eQtn3&iExH!1~)8+qD z!T-14zmI4DJaja4eN1!!8U_Fz6M+727>yAP4ITSG^U(gU;9+4unSzOd_FuCzDH=Kk zCJx4bMiM+Dz{N+yzaLqo^KBM0J(04P|M4DBd=!qbohR4k$`gVb!oibjhx>|)CH z@6$_L&uKY8aIk}~Uq)Hm(hirnfwAqoh@s_66^NsE!0>lfs8eKWW_k0cr=gghY{SC* ze=Wg%8VL^r6CWLo;HljnfQF9#G;6qc&+zfFaWS!fET(Mq9$wnIgU<$11RFqxme@JOp|;)`-_L0rB1$f4RgC@Kr8c*H zTHtgnTfX?WhV~2-{b_PA0cZ+n3mzP1e|=Ly<)2A6MBIh@5J+#uftww+4U6|aYJ<5D zl{$GQ3tb0VZ0_yARD&>@O5J+1nmytvWzOJjGtefX3O_fual6xJb25N6Cq`KjCB-E}|neS!l0WeDG_g4tgSLA~VkSK+1Ev`YM90bOQ& zcRVqFtW?J#U54akFQXU!q2)}G4-E3uL}!=%L*tJPeS6SgI{U{ZjTLLCyu3A=0i-kN z3XUAFui_z1Nr|~Ugl7l#+fE;{)^aq&sWzl*nAGY?#TZ8HWNiIJzRl$VNEXd}Mr@riQfhe=SWQBH8PEBK`!P$R>Z&kkb+3%At^howE z*zU7xq4+s@H*5Oc>(8%bbJdqo4P2-WWVtP`guE5s)@iE67`Shb_S5Xu?m^_RWC=cX zJmY?!WRz2{fSJiqt}1Ub&2!Nm?*m;7aze9o=n^5aOq`6VE`Ias)3|yV%*}|t zw&+9s-)2>2GfAtP?vm=?Viu)^T(SaFIgZEuq#tX zIn67+p7ZRMsl%F@e6WR#j$9_vi+Y*rm(;q74u}XSXI$sYTSQFN1y3Tkd>1PPF}BHN z5spNRA!BTp`Da^8evg2RO(919N?>IJO3Rg0txLx34@!$6eyYM+8+X` zvkdYci+a6pV~4{C+!`!))IJ?C3n_0YUM|*APQB9jp{jr@wA@o22wB##W2tDcrR&Jf z8n>hN4N*FBsNGc7WmzH@@Xa~BN<=H$1)7(az;)vJ=67(6*?;1@NIKDJyMi=z3nhBU zmW#&+$jrdYY*`ea%fM|n67D=&Gq%f(ggMNmY-a=}s`c!~JU;s_4(k-z+g`Ro@s(wo zC8%0)W14*XmpIh;$UQeQS3?#h?Kh63hlyazzA_LXsJl-6SL5rP=)~+YDu&lyJ!C9$ zaJ1hd9_8_U6zkdMYJ|_DYb zG|bo4k0BTsj7bzjsi*8u<)~#WXUV`fKlup8FM;(apY!mFNG40tzFXuT<2Jj5k=7|` zWEHJIjSGO*t~%QSfek{tkrU>I0J=~nE91yvRtWCYkOJpsrB-@9XEs(OAuDo3x%SedkPlR^Z8q$V3<*bK^!0DMx> z)OoQ{SQWY$lP=`4Ci<|`47dkO%kyBl641D`9MflN!Cn|d;;}`=RC>G_| zB@p-HV0#WxOpV;X>diXC?w#fyTe6iEJGvT_(fX-$)|ncQcKM|m!SL!fpogxr%ArtV zQlh5UHsGjj)-w7NqdqV)iEJh&z7C9f*c0^{wT6W*SdNXBT(EtW#NFBQ&LLAbCS&1I zk5@%RyR+*>Ep`T4%;=!=GDbw3^jBt=8j)n0A1w#7H1DU?9%M0?uPwJ)I9yUv>Z#HW z6F56y_oR-nr&LZE!vCS&*EdaGqz~&aPyGP*)Hic#b(s)&1DPu->lTB>Niw^%FRJsa5@I)iB}#9s^a>xb@QkwO=-UlAmZllPdE^YZwD#}9+ZZbZ@GgDj82D#B4DO-kF#nv~LRF%%`9QJK1C>IKAVUDaLmON4$Py6D9#J!_^q}-(9PZm?}cZ zcixq}a+Aw26&iLX{Gmtfrh;H#Ay564MZy|b-zWjOo^*BE{hjO z2LNZ8DXAzll2Wo2ia>Ic8DvtmX>s#ItzFH{G6orJM`Mn;TTEsPImd51ZTK>ywOU_C z%`lKwmB3u$-me8@ptb;dLrye&0pmv9?5=6NJJZF>W=HLA{!i- zlX7gw6NShPIX#zxF$gTEheww2L}chkw0p&JKn>?_L=)45%y&KJoVbHv58S#D@(cd) zvVSn;jUq=Bl+Jpl%NbIz{yzD3(AFysGsMLD$SF?lZBc^=aq7w#elbqbcP1lfdInV> z>0Qh}v}mRZZu@BI!y~iH`_EgfNUz^|n;jNiyf?%H7G}mcaJ+2~UT0_+ zrJsqLMu*wCcwT5>?>sG>eEP8W;?Dg|1LEtMdDGYIv5n|7D_d7g-=cKu`ymv^?5zQw z1xNhTk_T0Kur3)$)eHR7(M-HkZ4^&vQi7G#!ctYUCqe(+Fn!+{_?N7Ogg%k&uo|E6 z-4%z`8OWl(Ez;X0!l%O+&cRlMWBmOyhA_Q7UQ~x!EA|doF0chz0)?`6fnocCL3Qu$ zv@I!sGaCM8gUm?WZ%qM_$;lbAu}L)B1Zy&p4>q8_9`}HMXfKJvsc~K=51?9#T#`T6 zD-u>PHcUB8RpMkWyE1+^;Wusz5n8nkcZszt?;)5Xac?lOmi;vbR~75%QRC;YVCI$V!Tg(gQ>*jWz$oTkZ?hTpbF@&za%%}sR*TZFBBa^&Rj0mv41lG~kaWEc za(VC4oOZedNVjykZ$4@|l^Qg{{F))qsy``h)_u*<9D*|U)OrpeyR$&eF{DYb)RlNt zsriFKIy_^DxBxzI3$Y~t#GPt&i-mws7Igk`ixv7eH9W1xgGga5+iD$3*vfpc^y3op zN71GI0+5k#xJUj+#BJB>(2;=-l^MF8gyc07rc<+oMrb6bBIo5-K}%=erF zOh_h7q;+&iZkMRE8f%ektwvx#^znLt6MA)gu%|UoC(LsB9S?0QT z#9a{o7U?L^VQ*iVtXGykSxDaPy!XOMlrC0Utw)obX*zxy$Ybq$v)p|9m%Pn8^TXKFAqJ5;5Cc-h0QIq;6KW>0sE zYig0sLSJ6{GBHnVRGJ%8XPF49mFF%@f@-(;;BXWtd8JjyXPuh$pc2yVa+FR8_=23v zH1CaQFiVzjbO6IYaH?2n*Hx;yI+lrt45|paCS3Y_ z1i8#KEdu_bwR1Y*r%D$K+V3nMrE8QcRXF$x(iEAR-hNjmH)YEgwQ(C?Fxb`j1fW`r z6ff2NdJ$>UK3#e@w2g|(7+c}se_1nz^wu&iC#+fBQK^9V8cp@A5UQg72zAc#cFXz7 zy9U9Pz7liDblK?`&<3)1P0>V!h4R^vnERaqOl|FyAipP)dtv|3f^@67Wrvpd-I>=w zvAtvEo2Oeqmn@dWu$(4dYL8Ep^joQ?6usV8ke2~@%;a>fpg`@UqTn?C;&_V&bXLQL z_vbNp^(}c8KA~7a2<3MI`Jk~}#wmLi{a0`<4fbRI;S**=I$8GC*hn>sBSVu-Sxj>M z)g0#v6@So|VT-=udmNk#GL}~Y(!Rma-)a<@@*d-ELfy9^C4xNe+^cq!SN%n;#N){` zH}R)U8YDrdG$~djLA7BZ^=L&OI`s}z$EcyNqV{(q{K$(7880s5;OVMLja4SIHDS2_ zUQbC(^~{-tQp#rx5-d4@`w&$eH%Joj*#s%iuyGGm@q@o$$6?_J!e+H z+STtFRFD5orY8YKMiEtniQ>qaKGRd-RnqXO9da7E3|}_mAe!8D{&DdooK;`wcg=-F zX1oJe})jEbYy`5ik(U7o7q6i$GG`AM5nXPO|21yovCTG_q9SYVAj7sKuvyjxH zkro(6!GfZcpEiAauR?lS|At<*iVlZgh{Hn7A3PoXGqbg;9XC+{H~mDs_C$LE7xS{H z*R9iFrDn7uC#u})D|OV0jaNKI9lhJ_iHGh8IO9+b<*{K=|Bi}k+*`c(p%Ctb9{MgO z`Nwk*hj=x{;5Qc@1I8Y|lS-qU?wZp@D0J$Sr&Qp5i(Ex>HaI7NcDLKAsBg7MNK$Nz z)D;kh4YfKMapl>8O2>k{+gz-4eI@V?pY{eQ(^blL(Y91fxR{>4Iv4~ZQUT5kw~cuv z6{k|S098z~roBhrZBcb+!6*F9R`6oEDKuE_)FazO_Xs3>Oa&v=H-38bE_t)CP4!t> z(S>bp-MkCLRclGkbW1kPISbj_VkFG4${I)ZMaq2i_zhb#ZpTtKB2**y{$RY*6(ZBO z^07sHbXg(YdL{Zx$HP=eG`9Nfty&|sU_0y+JR;P8IG88Ev_Akz2ggm@|CPhNqgsFT zs*-9&H*fGkHQuW2h^}WbOJegxnX@aH;&+{R!lDu3e^J$Ngxr#4ga}RZe7OOs4kNp% z7X~yXA)RWlGV9a(*+&xL`QXO&%@&hMe4u-*QMr5O4$W=7*Qdc~{(%&)BMg5cndte` z7^P`<+DmZ#!X~4k3VWsgLI&a@sfq?lh`Lt@f*H&Yz84ktn?m zip}5urHksDy?>us$@2o?u2kQU;g!ORxpy;5vybbJ z(g(9|T+J~ihf1jSxg&2^j6byk-6ikEA>3r6S+6|8){x)=)zb3$l`YydlQ)~FNQ^IBWXE=s0v4=w(|?+ZB?ucxVBy5# zql~{bZ;D{R?qX@8IADg&1HT)pRM#~!<29N{iS}*09_#nz2z2LDfr6LA?$mj4x&EhL zsVX4|xEUA8Rl(HMQ>^3cngi75R6BNb>gLD99-gcl9Te4wzuUN5LO1QR^;apsom4!@ zWg^LCYDr)qU50p+MU6hU)$$Gta=u1&X|845(Tj-+19GA!#m0YO@Gs|;){&#XZAWK5 zD^o>Q_HP0AYijDmvL>r*_-FNMw3YLgDoo$QgF(`RLsfhP++kzarfE_%!8*XLd}3rE z=XMACxj1WX;uf`g{@3&euOsIQWQ~v)(TH-HhMrn=M`OUp)${l3)8Y+!Yr^}QbPbo> z*F{ca|Io-oW6KLo-H3@hcoHfMH(V|cB@O9UBIoPXQ3B;XRo&Sm-G*O~EG$~zu2+r2}DDbJ|= z1o#<$)9NCz@{t#>0A#sJb5@3XKmgvrKeuJBO(`gZ* zynEr~-s_k3DsGXkhBN?K8a)w{ozbS*Xr6lGp7V8>(`;4GB)FfqJ%Jbi57t}Rv^$Pu zCSgz-kDg<%yzd~P^c9n|;|^iSVq1^*_UC;$U@w38E6wx*!o0%-H zOiSpy5$vtutzy$O%1&FxalWH-Ql|1g@*km9AT4Wk6wxL@PA|ku2c=b~M`Lv$5bn!+ zwK=dGH>K>eG;;j+GSWQo@JtRMyN-0}EYCItY;8y}|WGi2`S~i0<>6 zz63kJgoQmwI6o@1$FcXiEGFe28s{q&!5u((nZADX%$B>cRb5C?nBSxOinIS^n5b9F z{>BA0$>NKSn~0sWSUpoC4m$RvRJ911nIj2LdP-GzyHVxrru~)ZDsQ2; zJ!hJ{^)B8t+e=OPMDptrt~BDvUJ;lQ4+kP5*RX{2m*dolsT9x5Y?D;tKJb!V6XiIp zYyh2b(LUqq*G{2eC>V!nM>M+{itUeR;p=vRoO0e;u~Ma}?mX^EMQ)QOw~dal47j}J z=BNY*=IEVr3&+AyWomf_9<4#=o->E*_NQkmObv>_q_RUms zlJ5SYus32y#~K{ju2C27cS869 z?NU#igb?Mv4Z`;?0nPM{vTgEoA0CWw*Z=0ae-9b4kxNB5)BKD)4Yz8}?ISg#x1;S_Q(ggTBQUI7x!uy*&pIle+i6=OzK*BJ+m_am~JdH<&^{ctASg()5Haki3$IgVPT7c_z6QNTq6_=F#hJmV%d6J~Z!2XwUb zahpicQvKOjb7#FP@iQ%&5VsP3PvoLgvswjldro4YTj{R}#B| zh?DCYiE(g?51IHw)QwoGI$nQkh9~J~*$Z{kaUES}hnhml0(v*)oJgG*0Mpeq?_bdn z$!rjzrFck8l87gQ!64_;4HbKsuUHp|w7)Wbl=uoA1B$@s#oEXk+L`jtg?tPhCI~FK z!ziqI=yjAR`gzj14(U@MTziuenCCTV#6sP-Us=k(lKPDb=X<^&Q<-T5Tnl@De`cY; zmbdC~y6sRbUE3N627?QLtUImG7DN=8*l(L~Gsa^<+-1?P2sO%G0whmFq^e4hS$I_i zP!0=i9dFBzp}`}vuitBb@sC*evLVH-NCiG6AvPF~3*R1$;Bkp{3A4E}nsJs}ot~Gp zBuxnorkF(Xs8_FUx;XxTPx(GGw$s^0EobPdvg#+AkMs>{uwRds3n!f!~qHlWd{(F?FkP>0krP7oN{J9&DV1%VHQwLd% zJhU|sDYs)@_`M!AXzI3y^M1yFHOPn{LM$cG47O^w?4y}5#$IKWRK24itE8d}3qWM` zMpgvrj8K2OD-S#X=GgwxS~Xvs^XJxo1LWiVtmA1d(BcUC zO&VvHFI5{qdqGz10{{rz&MVY=Mw0QVX?cif%c4_jweW>{N#=0Sq;(Y#81j5;@W>Eb zE3JVbO9VkrY$DCrQ!u-S*WrEe+mhS~WWdyQF zI6Ts{*2#mYbY3Q8t9Rz<+|Ap|bJ;qP+j`lKvX7M?G`~8_2x-HSYy~lJAh=HW$><_9 z3~t;l8{$Za;}ixi+OQSreDN|R<6RM>uRq6wZ9Qf;%zU)t>dKT`TUL)MJg!6#vCKb< zhNs{oA}7PIvWJXM&s?@Ecbb1V()uLFvi=zJ4_6kM{@THPNEqCe_PwBMp2JwKK5?BZzLW49WDJQz#j;)$! zigzk0sut-0&Pjy;O{@2td_42^J2eV!*or6slz3op^&q>hakLg~$IP^uS2zp83|`XB z4?m5`82_%fCQ_3p+plq%#tqR0S}r)fk~;DYvNWW5M9YHiOv(i-R!IO*)dx-&920k zR_t~H40-~^2F|-CYGoJU!2+``_JfF$lvySrc0N=Xncrq3 zEE&A|tyZpO!B-85A6@pDBo+}4&%t=v{i~-paa)vMCz+c`>igD5&kyw0;aaFod*%pY z7vb+hqHI?*DARsLcdAiB^@dXn zQylF=@nWus&nPR;bE!-W;Z*N<4h_icz)(sk=~a$9O&@+WP5gM-eJMacLN&FLB+tlX z%3Ecw7y839M@e5Q#yE4^@gLgc>W_vMeZd7eM~U2A`uPH1^0}JAWB$YolQ~GmDrRuP z`CTjttk)-VwL-b`X!!vWRugs%;t%i%MmOgsy&vhD)4eT`Cj1x+7hu1(Uzp^x_m-I{ z6xr+1O3ky`T}&Xl{&;br5Tw6^L7)9SDx+}39a_4tV<$friTA<$ta(Wt^ zpAMIg^v4uiHviCi;C0su<;kUb{vUAT_CpOcclBs#d03~BX>H=je`snQ>;Yt+)6``g zFBmIzpG*6diG80aXj!eK&rcMow%*{R4!xm}sU-;BNCmTE|A9`sFjyvrCs zMKHO<2s>@6(^M%Tc+*%7Ga)LP_C3RRa$hvh=F2D{5FiWLOdB64-g!hHD>{t=%t;BPn zf^VNYMHEz0RJ?T4^ubM;rt$eB)TE*NcJhXftIy9TDFqw)rhBJ~GKN1neiB=t2*fK! z!Yejs_L{cN_9XCgp?8~*il;aO>t-94naD?q6j8ycg~=9EopzU6XKmv^qqv|Z6cHlr zFSVfR*Wr@61T7Rx@Udw{=E9VwUA4zk)c8E*|C89ef5^osa9Eh5sBvS5nF zDTkEmGigk=;DtxLf0OwS$4`7%Pe@Pa#7nW^3UVy98UFpg7Ly|UTZX1}vV+(at?WfO zXA4~Cm@37~42z19GDbxQN+IA7T*FvyTer=jY-7;L3Bijo9)udT&)7v2$v(OIpW~}Z zJGLm6N&)kZ*s7{d+JuR%@7h93#M5AKJ9)G`8DnYZtw~_^YV$LXaBG(HIKOEBD9kV; z?5rTR5FSsF*Il#wrmEj9h;~JJYNTx&ap4|c&ubk_WCYhUq0-7dtDIr!%m<20v7Vx{ zG#771SO1WePtds!#>($E$6SdM)RSl|!YU9`1P;oElSE4F+pXHLBU{ot^G1BWa*bFj z9)C5&+&S-h{IK1)v_QCDRdEtsw6IZ|j^6=i%+Hs+IfGvb${*<58P#pZ`>iGyl;Ca- zngDmbR{pl+K5KJ#%8b)Jd<3ar#6U8DNDP%(mhOI#U(div$XH7UZZ*oAfgO>LJ@L+x zXG2^0@VUD-l=p3cfZCp13FdYevTX6j3AyC_qAe#j&+_G_hJEE3qtke)5y`c0@d4F+ zuijn>SBF{UMe8gw3vAbnj~>{8;F+$K3mjgzjuG3W0Y+tfU-JbxBx?m74+y=71ga#m zQ}Z`f(qdU?qB*v`k7|GjJ2nfKS`)A2=xnd`RaKP;*^wd!AZ8g`^;9%SX8=~Pqnk2D zJ%&+cLdK_TY#x~76X{(x>o?F+;J#c-TW|isZSQxeg_;WZFE2pzu$&zOUP6gG`=_2X zurD{?Hzhl-NBgI2fT%OSpYc$rgy^{KWDWSHSYGN zOzerNz=&7%^M2uQ6OYYl;|+5jS~K#2_>48d%h!0LZX-4zc)v|sqUDIuvGMUQx~~5| zk$5YkLsF#nXO!8u>_wq#v&dgWLgkNUY@TJ-yTziLU1Xt@ zZY#81z=D@oOKaP?0Y{C2!1f4xiwxL;+lZxIz1#(*T7+A3;=T3S8~pVOsw|{9e5ml4 zbcyPbD}ki`x%@t__ai0EUWgRu+esVyv_@K9;*5> zHeBaIr*DVNohlBN$QQ*w#l~G&cwglXF#PmA2mV7#HccqsQRre}efU0yY9jt4&$l;g z^dD>=jS0V9_wv;p3O}v$XRUkTx#*i(U~V4YdkOw5^;BW?h$SQU9pz5{)P5r*kjnDFlVE2}aCD>? zt37hcxpY1+=VLDQN}@*V-sK5Tzd;ku-qeQ=X7CBUwz2ptdN(Cz_imWct$V>y=FlX> z%6MVFJyMT@qjAOVj=m)vZGm0ok|! zDN+&jtsMI1)z{De&_K11H$f(XWk1`ax-QT3hIXHdh@VbvzOs^!1<&%t^~6f&0ky&l zS>T+Sl*XWs3-g1dL>Xf>AFFy0&bbtV3YXC;sj7PwA<8R_boSL5=H#_|%I18=Q9{yYp0iINy3E~5tIS?LPXHki_iq=Go3_>LO4+j#_tR!5LRcV50J?fB)sn zoV)7_i)eNzar{gN`c^rsm{Ra&i7R#hK8k%59H8}cB7*avs{KHQHf!DGISM7YQB>%`lI7t+h78BO?-6^;K+HcGrut9~FGaB51^ov51IX z#R!2)v>pG*uejLjNR!Q}p0yaSj^*=oYuXmC%vGwXQYRY|pt^RH9n_a_SnUL0j?Pu8 zjiLmuJt6msJ_Nn|tQXZ0f1SqWkyrj+FB}-yd6y zcXKp;*vf$yrDf3KxEvXu{nOto4Wj3Vg0#c3MQh}=>>)&w z>!f+ORyjNenXhqwtgamoWd>yVjVQ_w%%0BUX_n|Hm3?RoL2cbLePLTNy+H4*w4J5CmY?2qR?21PcVTNhu{;F$q<&aLB zoGiXfrVM}c49YO5Wsqu7mmA~zFI-zBkl^}ZFX~s=*{Rl3lJHi-yf|U)w@S-PXMVfJ z1od*<7Z>lJ*gClJ!^VbJrVO<6GI2X=tZi>*>RwcxO2T09@1?-o6Ngi(;1CIZU&pG4 z5!Llq73yBgs}-@-17p$XNsAuCd(%=DpVW53Y}l{4%QU9dMgz=0St9)2-!A;hQ5?M~ znYrL_a1Ni;7X>T*x_NU~WXb~*q*`b$BnA^}P{%XXV%Qm<4^tC9t>AU@WgF<8guew_ zM^ntOi|r=h-%Tucn8KQANi)F~F?E@CWCUi)_2%C0^xsv}vuRACQrQi7aDaDEeZw^# zu1zvP?On_I-sRfB#t}l|c3rC9&K3WSKLuzy!fV;e!0muCLuH=co;OCzk$uXQsO%$Z zE1xFslk@L?*CiFZZM|rSenL6*tYNHftHuDetIEjx2d*mv{tTjyvl`E}@ zN?SyUTpv5O$;P^g>GtzJE$a^EgpwkV|`$2PeuFD2j9{B^W` z@Er$yI}d2ld~9IH=FBwTwic5KL3IZ9AAM2q`AYkGzjDoP=1;2r_fKt=j;$zov2!J= zJ?6>NI7A~`tzx zWIo|E0X@UBoh4>^dI7--tyDBCOiPx6zj<8WK@eD6!lw@+fxZFM8en^a3%_Tr8V{+ z0Z8$N*2Q8u9H`Ki={D|e=) zT47|mHL)tV-mpa0Jpl`1$6(Nr7t~hKfRRzE+uBv5;{IY#MG-SZJ!27?ohFNf0lw1m zH32xPzfJ#iiH(JEeJTJ}2EqNzoeQR?=^DAOGd7*2voHAZb^pCcr^(3maPc-zJilcHaN-KW z;SgDMPpqs2grqF8#uaM8Nr-|5_NEr&n;+vz(9!rTnu>&(*H?yYm15mVpJ-K?X@toR=8(a|0?zwS@N>YDWc-)-fb)Z| z?|+0?S*cK!Y3UmS8AqnYRUZSdzV}ww)XpfennW4omt-dgo;Ah-e@60{E3s~kG|HZR zw}vz^6WA_wxa|d81YyQp@@>0qXvL0bHIng?rXY(`lARC*6<m*rtGM5oCge_7|`Vx;DE8eM}Q@tR47KG2J3B@xURgcfcu!bNuKpsNpDADF?kym?0rL;L3^wcUpu7^Ulud_SX)*HMM`B>jcP&7YaPaEDz`3g zViE9ezRkxBC+7!7pJ;^y*;KQ>6LKDPe+qt`a{bHI9bC>iEv2O(ui%9W)94SRZAxTST6H)7bbU%cWCE5@?$G_frFrk>?IuGO8ErH9aVtx_+Mi&ZLE zag*RuJ(1#~sZMFrzWp*#t-`_9n$9v<41E5xX@OLStk%U{Z*8x|Bv$vzFi;dU9+hwP z=S<|lZ1TvO>8&ExPk!qwJ;%m}o$pi-A!WhogU}@{clh@-v_q-er3gC&W@w#fydB^-Zyk{scQt%}I8mX6JiXd51&tJC79x*a2Ju+BRZV|&@Kxc-KV^%^+m z?i>9P2Impu$H*{eR4@+GzvC7Z=9nFyG#CK;X9!j>?(6GGI6CiWC@9~WKThDV?kc@b z(B{8%B5lit@u6}Sq9;#F;*yH1bYc~K;vAHpGB+IvYM)+-W889`WZ|`xF;8_>L;1g@$xdW@-yQ$hdawY5h)8e9M*1@V2de~;b?4ElNwdVN^~+{=S=~eDbGUoo)FQ|XkEvXTXWV?yJE4g%$v~#^~*s&_A^6pOQ40Qvj!bXh-zzml9Y(;cw$a zr$QR{*ej~vDFnspMXho7U*BjU3y--0-Pwt@hx}_C&qWlY@A%ji?j>8mXh6A zP=*|0`Z+qEA#*r5GE}|r8{Tvzt^d_Ks;i6_crRV4`ZbE%f##VIpiH29TL)A7k+;}g zRVt_YQiRVn%sKs<=a?cCQs`&rpkfT1sn4i(a(T_w2lN)6ba!yGd0Vq*Q%!YpK~+9= zSDpntKVj+k9294#N`|&St`7{_F5Uf9ZM{j?Xj}rz z`S(X@sY4Q#b*zj{q?Gndks8n3br{(onUHgur=6tn7a`zVi?~(VZSD5qIH_A#lj!qAfkgSwCY^;Fjgr2SkDBWb@!RUabL^s+TbXsd6jn+b@Zp6=_OF^UslGIWUgC94vjd)d~}3 z0KG7CSfRvn(V>g?x=aQkO3A0U9=_G~oDL!!*w`S|5urP;f*8L}%--r?gN zVnsEInO#Y);=w;n+m9RsMJhOf5{mzFP4x5c5OkL7h+PN7#dBD+J#3V_v77DKgb$9) zpr*8QQ1R3b8hv>JmoJk>Az?vb^Ht@NUPp=i`nb4tVlk4?yl4AL6Mlz44s8QYRet#z^*^+6qw{ra zK^U84?AXfF@y!fQKVrXg!h-_6`;7J?xxH5`rnuRCa)YwRbLY3*AH&$MU@SE8(oy6{ zGh43%Z3{lRJ+d{hW$6~LN=b9E_lzfLM>;6?JoTmj!D7c?U?^p2rRv+k+O5f!~}&WDSge4$oH)nGOss zF>YLU_^Z0&TL-gKlCCxRht~SlP%Js{Mh)?C>b>6m=%uw_8^3!a-<@qWQLk0j*!yVk zlD}^l-5Ja8wp;Tp8xEqlanj}S0`iJU1c&3&q>|;3+ac9f0TxKSJ`|A#%V4I26DLLX zvlCK61TI4axS2zq00ZS7g623WYPO!ik=m~3J989Cd~y|~SH-#(`$J^t)a>&{%jV@$ zum=~VW=$>KYL}^rN)&8J8m?9J&{E)32W92)o9o?dD~rBq(>CLo# zy|9|d&mZraHy=}A$ky}R{tyY*_0RSHDfMeVsX!YvSzEw8Q3Z>J}+G?v#--ZH(1IXy-76uFw`^0#%c|4 zSIQyuFo->L#xiIpeQPxf)F z$R%Q(>H^n8PaWmhG~l}(U~`iz0{6mnWw4T#>A7O`)zHQ-lCQhlw` z!wx#3l70sM;tf3V$A)1&(Q(hfI|-_WzTk{C2J~X5+dDVLHj7{Y(5K9@34$nlUH$Kd#K$P2Dq6 z&C^SPrlC7JU|zxlFIzq()7H1%=!-f852Qr^9{GpUe+f) z`d#ru=C6gz*QD`akeTWAdW-0);D+Z*Cm7EB`gP;ve1VNAZ%Z7VBKg}O^s&Oi22f^b zNjv`An|e z)C@a9zkUHZFN1jbo-vx%Lf~!;Cc70~ZCWm8b8AiTIc}}O3=7!2OX5Z{uVk(G&%fFA zaUs)I3`A9Gra7hb$Xzc8f(Q9kyHnoH4P@ZeF#pZd8-pBli~VP@471a*Oy!nvp^2O= z2Oz=t#g8?B*<}Y%;km4Y{^6gNXE#gEX`uMZkedBdX5@g{FZx8?=DXf15_AcwjoYpq zI7us2PHP(T_b&rwV3!?)eEq9nMK>E~-Od^dAw7x$giK7}K;U&2kc!nx+643p%O+Ts?9Juod3{_W+b@61K*ax1?c?m%i z-d(7=D9n(bT#8r4rnqCLPdo}tYRtYb`T3dmk(rQMEP0O{v`T$yHA;bw=pB={!N)yZ z1u`H6ra9(nLO2AdJ_#^kgMIHwd@>cQ8C>73-XIh~&Qz;*WyH#09(jyh`tY4P0LF2V z39PCXw67JhCKiYEGspC^VV{YiL@FKL1jTD5GrhKbw$KclS#W2SaHAJAGK~Xo?P#f~ zE;jVi=b+bfHRzM0plYqCe60s@*}?#QhXEB*09Deb6oiq$2s!E@U7Vrws{Yfb<^6Et zxS-g{SA;wq7>r6$m=Lq8mmbW5mpztmoq(D#Ri;PE|NT69UMbX4$vjX!|7n?)83k*} zp~#Q3=z^{feC=;0?#nLoD#q2-yH%RDV+yZ=ap>^1QV z@wkP}Ma0=Hc#07FU`6?=#uHWG1gOO4B+0=3+@BEI@`v{D#0JS(M4Bf!H@LI@L6ObF z9bthNy+^n&{@la)E{leZLl$j=XXiD=o3+%mk$;uxU^wtg7 zRoC)z-}k2)FJr50G07f%5mc3trMEItp{>bIPI4fv6qxv&&h4$t zlhyF#53j9s+@5z(ZoS)WXc}>PmU{EF9}McStZF|KdMCo#oFJ$KJp1c?H&14n8ZfC( z7N~kv6i{RNulSC7$FZo$-vUI2equN?A-`;{k^L&0rQa?nZjJN8(96{$8n@(j=1PBm z5b+rP@V|Sr>yCf64vmxc9zWf>DC)8cU;QJj;N|k}$%q2c_5SnTLzyg@Tp&Lx(!|BE z991Xy-dhCo_~_*U@)8z>FGtEL)3r(dZXQSOcgOxKX{v3quU^r1SjONU1|yTt6VnvE zor%pLoCc-PW%XhI3=6{gqnDK}oL>lLml4gK?MHXkN4SE?4V3)3YPB~12PGWyj?Pq| zg*5Go6t5fe+(+-UH-zhIYdPPic3VN($8BWJHV^oto-VxQG_ILa3%6gb&~|-uSrvWx z#=w6!&8#bx<2T2_7e;yG$pm8Aov+>N@Sh!=_`&5#vNJ1@dAY1$<`~JE5!>o`L}FXA z)L!32o+Gk2ozZhKmf`sMrMU}NMzpvzWs+{Spsi1|l7G{NICD3yF*+G>+XDmKl{=W2 zco;;m1ufBNyjrTxTk{ZR_-)tU2PS~^=27QzCs_O-l?2}g%^g~p7d;FuunUm*mVa$K z;LD!5J1&JDV-XS1fKOtn=!m><@GxU`wJH~Id#`Z1E^e?g*CAhsS^Q5<=#U|aodmCM zrl7A``3K|Pb=9)cH7Z0~WKQ!y)Uu&TbgRrfX6T7Z4EjrP?C*k}D$74M|FFvAqkl_8 z0JFiKmv^}pi}5b()N=77O_`gf2G;pG{q%1;k)%C7Kn^pBI0f^teszlPQqN}EUje_6 zs2|j!)zayB$49H&@|Wu zKqTOmR#Q7H)8m?`c{reTpm4O zRDPPIFi(}jNlLx)g)FprD92Fmn4_}Cjk@3@mAsTWMNczVanRQMii2S~GtuFQ%^*7K zYm?tGSxzb4W5y3@UY)hcvpH68G-Ce{-QHAJt)>#&kh&uLRj(7vHPe%fjd-%(rwgyQ zZ7Gm1=En|a%OZyyMPOYQ+KwzEPk11O#j_C5tn0E#=xAY`@1rK{TTD5W3nx1`_Qcak z?%+BXjq{JAXfa>YGR1BpQmP?ez(nKHVKHfs!AyX66Au9rWh%w!;q3&<-Q?8svPvnU>RqcV;`9A(0MW2lBe%6G)=nb(w=vUQNex?Ap&R+KZKHH=N zO5c0`i^Zm6CFqCYWt-{32HC(BgRdZY!LmJpG2+qA#HY)+Hk}8Tjzi-5+O|g|P(was z<__Ta+*CFstto%|`dvpHF@`HUuzPdSWu;8G=Y^h00#ypHj`L?l*H%Q?H1rFpY!tal|baS$eVA9pQ`O^uJ5$uYHAZpo%cS6ChXCK4J8) zWkh~BawscY-RC3Wp1ZQ{Z+4HgG29U#aP1q%uU;YYfJo|h=jLHdo zbMCb7m&UBC&ZANwVK+3k+wgEmnRDTLE+YTlz|BL#jq0_Yj5WFwi_T!dJ2o880SWz@ zEv87KxXn=(;%M45KJXX9_cPIa&b1-JJF8SA=#{NMy4eDz^ZD>qS}(~TNE-iMU+V!i z0s>8#A_wfA7;Rm;dtEuFj`Nl8jRzF}9;M;=lYEiapHC~D$Q@j9O#{U-f7pTwA&M@m zUL8+y{n-zdkg{NRKBu!L4u9Iv)~5{2Nf~?m1qrBrld2!_omqoEfuqwWu-3=|nom8n zzynb<&rXDO1;zA*EfhSRvF-AC0GygLrhYPep@#^T9 zYlQuycT2TZ6S67N3-C&0U`Bh|0ntE()i|cnbFE5`8B+5&(;#jK=Tt%%$7`b<>3 zX{)(XsBg8aQ$QeNXs9+5ooSSxVRIi#;S;9su2vSO^t)#t&J3CCY_8_T!!YU>uiZnr zI{Pey`h%K#x$)VOHL{pqMDU4D)5lngHbfxDfA_BA?T<^q|7H#{4__Ty$o(6=j5`r2 z=oc2cp2c!-jr-y*F9@>3Y63hQi#mQTqm6PFpk=h?Ii7T)Fi! ztod0szQys7rP{kK%&A?P>Q%>!qki=7nZ=diw#j4}Y_NAMU~MeG!)^7dqs@2Grc*2L z&h)=~brMZX6s{GU(FZ4DnM~WSr1iRuGuaf!S3WI*z$$$0fz8s<;!tBPB(lQ=uzTq~ z^Q4;uzWKQQ;X(>E!g21Enm~bQ8QqJ?g_u5$L%;0(EzYc;FGrpzq=S#Ve%W=vlGckvYAl@9Pd6arcO2lDV6syewc6}KZT1IhkLy` z|Jk`v!!Ll`qIF#S;*IfH*^oxv<_!Onv~FH?tvc*Qw&9Ti!dX`=wSeBskoP(6g;xGf z8X)4od;cE9AvTWMUtz8Am)$C@dBFH5%5IqpsO|G2{?XY#Vo*eZ^A=gaS3WSB1Qs`ZT{JLhSV0Lx7c)oVlsg71UvJ^MY#im3dKsYi*!5 zWL$3s4zxg6?$Q960w=^&WrUtR3Zbd$;!)WBr}}fDHDOLT+51=X|AIE5zstpvSS-^o z941e^`C0Us*XdLbL8Jy4Q$QAPZI8!a~ zQD6=8Tq;(~pP4Yf68NFA>!L{nuB?`Dwp7>#J{t`mh@$221RCLM3%P#fpNoV`6I8L! ztw33p&<0x|YpIL-IT1=uo2)vO0AjQW0M60VZZ5DV>KTtePk8xfdIG>ar@zv^FQWAt zihvd_1JZJy4jV;|;h{e$ijslMRh)J&O{6g$oc&XsnBbB1>znhTXmGW;1Q&xDWCx(7 zQYtJcIk_o8p$!x>g<2SP)39nH?HBPRd|t~J^dH(tFAkc9+|C~Mg>7ussh>OhfA^T|)Yc{nZP2&nop|4zt0CoN=s@?UmDB7^T9VcO z?mcpj-c)XmktgHWt>`>hmY+jUvnRfXwplE5F`>SsTt+u5#;EB03VL|Pt7uD)kQ### zC1~qzMx`rUA#tV7)kE~fP_;_+b1~7z8 z2xBs6r)__b17|)R7t=fp{M|2Lp^AGfMnXrd3@ST z+UEih;53CT_1w<0)H|Efqy_|$Qh-s+Bon{@Dl^ci^*Gb6L7y;sf}Q@AWERqsy}*-f zl`kgcs>h9K_#uS=IKuJ5u1^9?yb}XTTbd8&5St~EWqP0WvYgcIeS4Jb<%0{SOJdcb z%ZL(6R0`kgo44 z!(C%}ASHId%Eovn2UYow2`*u)V|SmY>3W|MRD6TQ=QfTc?;)JNr#b^dFZrb&yZ>BE#8_+wV{@Imy;h|pgESCvt>Lx-xW0>OXn;=>ShbxkZzp`S9SD_ALn8W`VbqkCSDS|Hx1(wF1zbmx; zTKy(FTgp*#aH+{*bO*ZkMl)X}pP&2d+6ap8!L&+JiUz zRRao2^0k{A!ZZ&Y3T`cho#Qnt*{miSi% z2u(Ri9njYrm`wAX94cX}8;~Hx!xS|v!157GFCTrryg+u{Y^JLr6Khym9B-whQ_5Oq zvU<9p8<@YT7CAxTC2E>|ba0>Yvt81a4fP71kbdBf1oshUwmZ5lK_kW+l8n3A(+isYgFoh7T#k zhaA6?Vb~uNvG2DRYhO$>Es=cTqe>0bAD-OMT4`ZSEyV)O2f5S@YFftoMt#z)GY_HEa>g4y_XkWGr2e{PY$T9g}_snP~j) z9$?~BODF?2?`&X;UaL2|_&}yDx~eT}e(qVd*i`y02;4QJSztMB7?QW@B@`UW4=suc z>6fkk_GB}xkXQ>^Cl{{rG|!hB@${yNY}(ZDcvcXK6&B=jr|-&nk<7=6J&zA*m0k1y zDa>ixJqxtpJ#Hu&Y?EM|%6cuGwzA&6vPQA{GW4*n6HLC61J320&PI(^a$aV@wee<@ z$ZxL%`|ZEP$KM8!+Q|$)$1UzQL|pDx4z?cb>CN$S5w}1aXIehLTnWY?UKLdGxY>{U z=_?k~@M_RQVTS?MHm<`Dx|qZpyBN@hA&~>2P3yZM_>F?aTOa=~%)BTeA5!WbIdpUV zgj)FQ@KSnb&WlF0b#l%}VLKlHW=?e~o++R2JQ8(N;~`Zj^gOoR=f3|0vmm9N;JCJ} zc?kz~MGiZvZ+Rfowy_Jbd2dG#6=8S=q$BkxD*sSzNcmA#9f=ciQDVXM^#nHn;qMz{w9Oisvr&Yr|suC{E^OFRlX0YGMWB{mC1KwDGr2yhi1p_; zaoITwiqlKS=?ZmSST8%TE2TO9JG)@|#b48-@lV~FuTzX9pgw2p59d%&edOOeF=7E}M4*WykSq zd+9H@9@b{ZaW&P%U>FfiL)n_852}9BrWm}@hGr;&D48?$N6b`hSpsl5zewD z9Z~>#5bX;;loTyOIw0-8wz4b;wiXz`9a^e)Q>too)(t!rm%l7_YIPnfz1z_>@i)^5 zYNMxo{Z)5<4V?4Ri+Qw(UZm8hfA6==%b&{=h7V26>&%8{XFYZ3X@``kbpt@kZ9SVT zs$jCpfT(_x*F>p6Ewu*XgQg3LGq%zc@d9m97y?p3BGEF)5(jnT%FZGiK+;nT*!QMo z4Fi3Mqs*XKZ2u>eT{gz16o>0tX|+$Sy_|RV<}QbW_W69zR73JHH>)A8oc6hDq#5LJ z_~%tudWMlgzj7~a$40V>^6NUoBp&gsz*5k-2WH3Dlkik73mTNmC)N6otIw_eBCZ`V zBz->dK277-xZ(XC<`!HYEr;Ra!ChD{zZ-vw_uuMH#gNv-pC8B-<0&+J`d z(%nTy1ORXQcBE($be>J~#7|16aL&%s8q$tJ2VD%Cfy;VF6%#S=u3*xchZph}aoQ9~ z1vbPIu4!^Z6~vv%S=`?|uQ1cTjTthC{{HwRaZ9DIq8+soB2;`x@f|f6;+r5TyaY1N z-k)0g-8$Jc{kdw4PmW+)%v_KDs^>)T#;bp9Ce^|3?)w*9UBsIhlv#-g3uVWJbW~?( z7N?$}xTe9T`9GeS#A$R-dEDQC7g-vA1`~W1ljP}NzZwBuL6Zf^9n>+us8#h5d?~ZL z)YPnK339ovYU;vrDH2b6rMa~l=Jegk-26$o2$eOPbyPS1tJgYpGAY<(pO3-YzoxAt z*N_ovqXg~PTa6;#wt>5^cS9~c6JW`{EJfDEml;=l8Y+4k6Y|^L$Jf%~#$V=yS7E;u zC}tkOdP(Kp@V~71_?_Y7lG(=q#7mzjzbMJe_+Mrpstv8DXI)oR>b8$ey-L`Bu#{Z) zPDxaBIDW{}<=B!1E{d?5u0Y}bFF8X8RqP6@T*aq7@8b<|TEB#n6C5eLFZ0x|uR43=5HkIuM-0denhu(& z>}Zj+A+5mrT&&Ja;mMufJsB?Rza>0V!zNum{2cD~I{aphTCO=m@n9*nuRM;Izx?jb zKvWs;<6H0d>%-l)|K0n5u)@1w8=ems%BKpcaW?r|2c&GKH19$g(GlJ)hOBJ0I($`n zT}x%h3l_my|J@@f5N9UhqM4e@jx{eRbklV}^j*r2ZT7^gu)bH<(K9rz)#b&x+YYM< zf$W;cksj z_^(AyfSfc|dz`g)d;o?>3sc;pQ?QXKFe^84s+*^)ti25Altqxxn#j$ zlypS5EY}>~?1ms@-yvw1jIAEwW)yJgk8QW$*vNBPtlDpVyk~-hm>0OV!BoQHTvgIh zHS%b<0o+gwlmzM( z+R|76wZ4`Gr?#nDbkpw5N1<+PjQ_=TM(dB-!xFk+1gkA$h-M&6VTR5Y5zzw)YFvo= zrjf_nF)JA|cq-u!`|!x4_pXjG=Pw)Fqv2cU&YW`j0To0p19zz|awuwAwBCTkWaurT zjRZ5EjLOPDPAlN?I@HgT`(D!zbtHb~*Cj7skMCz`iS3BHPfAc+qi<9kM;g95q_zm! z4^MSK9B==m*e(Tw;G~f{wO>;x;U%XEo3h89J8M~RS{nmC7j8IlJh=_H7*lSULhZ`U zu-b&QiweKHSJH$$+=3i@2;wQ%F8QhMibkw|nMlsRJ{_`-iJ@IlX&#d8Zsq0@-A{QCFDqqTp8Pt8>X2Jgf% z1-*h3>4$RQL3;1&_z#o$9fF#lpA|^6Pd0f&>W6Q?n9kFVWWi)yX6lD^KV0t6(INC~ zH!-P2=@o+30pC_bE!Ebpo;D-NxjoSXZN!O~y7Ra;bYhs2>5dnkG zmCJ9bAqs-F!bWMj)qU6B)?1RgI9(uM|2e@7D|Ns=>3D!e`P8GN{?iw2Ha9|s=L?J6 zHsaB8l|sjqG7{t4vnQ@0o#m6%U_>QD!%9Z@mFTfoL-w1D2|qd6%p8s#dVs#j4t^lc z+syg4G3&Bg{l00CFbT6-NMQG>GyFV5Sm*VeO#i5-#ac`+C66g^c%h_sh`077TogMy z{L8)_4-aWb>-Aou^iA)ob3o~EZ!SWDLF|*Ebkl&KMzOy?*V3BncPmS)5C?-m7@RY^ z!7v_P(p#iyXmC+?9xnL+?_Nx=`)l2%F2CEW_}j)>m1yUO4r;l&mQX^(UVMNP@aW(& z(1+H;LWd%chXg<&87$Av8WVK3CRB)X}TB za(YRj!Sg5n3+pu1-e61tMG_9TG%a$|=fp!@OR$x`-r_*cC}k8aWJhb>ZRldo8%pvk zu9QCZ_B3MZIY9ey6}5?j=FbIctMV&rsZy4ABJ8*L+OkP|cU1JLK2sR&7s&)49&6`W zYaatSjB>!Y`(Z(deq*eFGA;Z*pSoSSxXP;SG_P6;B?Sj_eCmp46w`MD9QmqZ=70CT zgum1GJan;rz|ZmZGUF_Y_tHPnZ|8eoRWM~-oT|O&@k+X({#Io9(8&CG&K;>eBJ#0G zMg!F1vTLU!F~MLL?sAz_yCKnhxTa(A%-}h$2QsC~x2t?vbMo+1X*OmD6x#>~csS{bqAsk0GeES++c+BaXt+ifgOtN+P+UVvJI@xOb{!N9$?&ki>Q@jkx06hZfc(pGi5ykbBH6=RYuwqN!V zRdOUz-fT3wWIrw=&(c3;Ct40dW?k-#>w-Q(&^}*7@UF^lf-#mM!c2?q*ti$g0xCQ8 z)bG9vlhKFaMS~{4K{oF}A0Z|ol`cz?Cc~*q9-R&~^RIrgQD759!>%Ug z2>^MvnA+@Pv=tcU#Psf^!Q(Ta4YR);49}|L zDbOlf!?|jirfEh!CF&x-J=8gTxW6$%)u;?o^y&Ea(k!lxHJqD>5p3trUzbIf@neVA&eKBr^L{_d^VmA}XQ zYWj#fh0JNG8#2zD6soN5cr`q10n|14$0cw?0*BM}WMecBfa)`Fqw~;mN6K%Gk^}oQ zVCfFXRF=X|viIRtD!(!8)R;q{A%fmvdvh(SV<4$vUYwV{{4&E(x5v?W6|~nQ4wCME z*%Z3Eltmm3?-h*wyQ)3k^i)r+nu{)UnULm#UeJtNj<=}z&{N3wf-N9WqY@;ZoTpX~zZOM%K>nE#Bd3Hm)43+~Zh`sgMHKom|e?62Md(h3zzxnLgzYv>HOf zQebIZ#5V#BJY%5p3JHo6;kYvn2<@tLP)xEy#a!wI!5XR~4k+9w)V-|}jncM$PE zyND$-!^aCeH_y^=)^XqtcL#$nWwM02GP&kUMYcW+=NDG=r*pMa@v;=PNF!y<2v(6_ zRCD8=b&$ej9p-3+igZ+H%}p>$rW?x;vQCM2oKgfEDooBKOfq?h!6rXRaD3HD1C;qt z^1RQSP3r{WeO!P*KZa<&a+s{(x0Ak6(%6AAz-Ew6Zc0!Ux=h=qOM{8R8nmu)>Y2i4 zr8BU^@&m0k^W4gwg}hWiHqq?l^W1FMU8e)mD$=>XkXSQ4`*(cxMB_h& zPx=*7V!@?9AJ^^C1U{@dAwm3I*0S5fwA&ful2Kc)2Fe7ir~#L*E|wXqWqwWe3o`Pl zwS4qV9}^LAr~hhz4iLE=ar?hD64Wfm?Sr?TdrKy!)?gP_q~aGZ@% zS)dCC^CfvMqca~0fgWm4>3`I`wU!B!U)5yOKIV<5deK*N#;amL{&waqba5$$*($00 zB4q6OJly`?WgOBws0}iPAu{;fU!x4#%jS(zqgjXz`ZP-d{jK@pp+pD$r?_y0t%Q2l zws>mf!cJxU&!MIwk{_`&>FDZF1_BGcqZfM}Iw=4En;k!V`8rN+ zUC^IY>-)E#*KGR1MFW80UXsx*aE&wjC`L~VL~7eH9l7dIaPY_S16|42uKN7VNUNkJ zkzbiJ2fLT1W#U)xmDiOeK(r2GB$^1mqV84Ac7B-MGxNn6BET5LCCY?^BGAkq81LB;*f{{Ga;19CVy-fcg9U(7i}@Kc!h z2Sshkvnm#W;U$xgIk{g%kCNWz4*68h8nTmH!A5E}Pp`t}YqKhg@4RAW6%W-0ok;^9 zd1iZ~U#ka@r zZ+Lor~iqc&X2b3|ei)}PYQxRZ%Sb{Q*+@muw$$*3r0-H`dYIaih) zDkw-=2O(@bCYI-+?{mK-BHX(1kkw^~t1YvLF0x9tmzON;t1AZX=i+vsr}98-f>TGa zTz2O3G}(jSxSG|N4`)X)a$J}RImTA+-XJU4fO0}FWhv7s@FhioI7S&RVZLJdr$Bmm z`(tQq@?JBF!j^t3Hn4h<58^dsWXDDmUsh#|MTo%C71-r~=d{fqmj!$}uw%&?7PqGA za27^XZm#1JP=dq-doT?TDRPPnw11ncOglf0)Wpp#*(AIu{rG0Ybr)|+Es;)4t0i6V zNk}nMaDHoNpS|*d>1jOA9Gs-hlulO1TqC!;tA;arRBU`ES663@93(-(QHA^3j=l*( zeD4 zdS(U@q}L`4Fa*UUMi`go5HA{AfdvpNrSv<(Rz#h0<3AXAU(42Ve>+yqQz@CPnAA3Y z2zB;scxTvi5tx|?s$Aqa?l+nzswoFaf zlkKj7;2>?IN9a$k)YvDTos&1;-())kaSvIo9hDe;ii(O>;=msqq)A~bFloMtP%%=_ z-QFP+Kiy&kHu{xRXu_ggrs)vGLi$`}H%hIWsa}k_eGK?ETun@Sm7%}#!f4gaE%MPL z$7S-0eEoFq4>XP)Q&BGYpcdw5!Kv|5FjWWyM`=h6I8wm{5H;^MTRUa#O1momY&YP_ z#Hnez@oRD+e=-HAoANbR7H}c-WmYlT)dEpW=f^Xoe(0yDsT|UXtk^5@TD!dp6=xLMws&6IPjfir$D+@9ix>FaNpo zkq7VXl0IjBx?LI?$fA%N^dcX|QqIhk0UE$jNAMddx2x*Z%v1HjloPs43q78CBf^a( zE{i-UoquUku5TWO=SVg=amUt?2ERu2{kE-NvwGV%I_)g>8tt*goKNil$*zp(hnm|} zNUpZFe3gf;TK7_xndfe;SXo$>SBB zJle9G2KzeuwKvF02(ZzP-$)&gBZ6e&X1Us3IYLAI3Rb4M*r@bWNB_>hQg;#A8`Ou3 zRt<;mmOND-7u>*#q}x??JFPfBfbI4csrsWzuWL-}=svE35fHf2dW(M5W!N8(eCFW? z-zT5D2mDJ9aJf3*hNoO`Q(kQ)<_;MR)l}e+7m?}tfC#NA@&LBKCS2kiqJL z(8!>D0)!N&__u^;xp#ym7+iB^nh~4)azOfz8-a3P=X1tE=9oKRYMZtJhi|=q&Z*a< z3Bmw0{6iwAi54{`n?5EBT~l&$bTF?!A3C~dfS-IP*IuMWE2T`m-4%2sa~?OX*-O%| zS0zK3-$2I&(sFX5hZbVrPyb2eZ>ZEk#JJ%XGyE z0_rMBWiC?>`f^fXQaz{G$=TUynWpYyZiUbp`Gc!M>;8J9HfxF>*`y*0OUI16HVg+~ z1|KwK-k^g;s7`w7%WE1~!Y&FKkklxAQirDB z0g5Lwk+{luQ)KRHrf+!UnF_>5_+ev%IIlFf_%kH;d`e=AzZaXps<^tm5ie9DMK>L) znm1{?GDM#^WM_9t#cTw?-@qq8xFa}UiR0@lHFeo`I(54txLJKBm>kWXHp+*9I1b}> zBPH?1BBtk}R^9j0&2j*Et1%ZGpi{ye0#ibF)YQ<~%!YFht`cNmaNR_ ze;2pJr3I7q%NbNHCr8bb19yoYt%s^_CBf#15L)PeVR&$O%hpe|fz8Jb9x&7$ua- zrDwo^^rEX&&Bh+W#@DW^x6wNxLXH{-R9UQsUT!rog{= zv|J9>^8NF@>S&^yheWku1g+BrvMRZ*RoQLIoGC6zytLW}oYA(JeDVM8RcnKMeIhw1 zKvq5=I2?hhRkz!1;T+k{e11a7?>9}z-}%#dN2tC4cI0v8?$YixTK9V6pdNgu$R~ZS z-cs=#W=}*XWz=9YX?(0k)?ZK8r=E0&S0AQC--xPaYW9C&4 zElc7Y6>4HXe)BF;A&Vyz{qgYI?xcUgfK_z?FBtIxZcv<=9cOxcP@rz$VNARqQYm5f z@YBH6uxoc%x6_%J+TaoZB@lo1#eerS z|3loH`NZ(g<@-@|RJ`Hu6U~sPe&O3BouH5XsqHHB)<0!S!asA_Muss}ppm#4=W}0w z$9Y$p)rTu;8Fy>Ela5a|Gr+l_3jCPU&^e!|e{614ujR#N4>?458$n6T2{W(1=24-` zD8{}-!c z{$VZNr8s-;{jpCxJx0#Z*o>a=*{~&4JIiwJ>%3lig+U4~7mG`2&IPRMI)I;~6(pmY z?Kn*s7n$EU7VCTUh2~oebnR=W?-Qd6IR~_DekClEyrx)u47uR4v(u$A@ zmkfKIW>uC;PLWwH0oUfE4#BeKHnxd-Z65sW(40q(8Y}qp@|K(|$!;sZ$cWgnv#UQS8yaoMbf?(v6T7q zHXV(>!^eLhUk`b5+p{un%6!6VBi{Hr0E?3vxOIQH4RPH!I<^w)j*3N-&W3C(21$(4 z#iX*w44+tn`N`i8P$Q-J_=+oMK?>K&%QuVWDaih62s2vSErslNh4oa!@UifjN3s>H z?*&7Jg=j?KFUsE!3jcDBa&WL(5aJ~6u4q;rF9v6mFfhtEHpesoXjZTsk;3N=+#vzO z@RAejAv@hruh&@Kuj1ra46tv6;{SAw=Ra#7$8^QzN3RBujJgFFkMCl$%F8@mtlxWQ z{I>eab3^&UE@|ElyHslUIY{Vc?;`z3r0*kFuItvy&x@1ZqvtN|CP6tvHi2Wp?WqRz z+s5?Nz=Qh0eFJ^sw1t9v1Obp!m#?n#BfTpyCHsw|4@py&vR_HT*1aoeYih)eEA}_8 zVbe;Bl=w(@^1YEcTT^@GML<%M(W1KPd=6Ml?>4aFcY2%bT}e#(s$6M7=D{~_V&pLA zYj)9-dHq`C{DSOf>{hk&@IMIiz3+GhJk ztx)F%CFX2~FH}ar@BPAYKKb?>AJkB&inP3qyCQqMkzy0-P>e)wwoX^Rx$jg>msX_i zE9!1%8!Y3GeeRv5i04nSyc36cNvNTVM<$m5VP)B08T68IdQW$c-m$K~~w!~S5 z&z5e{FtcTe1?#4LLelGHkCMf*5H1+*&vZ0nV;e!w}3(Cr0;v?4FEA%h$Uk^;MD zM9#^z!+aZDuE&+RgIvEo=B2GjpTDE{bZK$ET2ijeZ`SfWhJ;d|*zQ}!yiE@HyS~S& z6gf=oeb$h()vorunnBpCDS;7O&S;9CBZ{ixhw8*gfR!AS^qfW)SAlLieGd<3lWg*8S2i^DvfKwr0VT zav063-inp1OyDuwk!AOMP)aFvl#r;fAt|Xq@(uxFf6x+#^v0(e@Bu07UXorN0~!uR z*$$yv8Z$eC64vw!mkf~2^X!1|KgMb=t3EEF6GZ9Xwke5}cZD7A0b1~7mKW+6JY?wW zZ31b;B`O+dS0K zLuckF2-ldZ#}d`VBI&TU>{zq3rPCXjI3mAvfoWp$yR?}{DNl<~ecicpMk!4n=!CB) zg>p2jCK@ySKvPgshCI6Fzk375fUunQq;`}z^?f~p`wE5n)OxYEntsLzROC-Bt4Ka8 zyU98F6MPeaY;Jj4!xYL!2qXY0z+|EoQmCURIh^8fa@}nN=6q9Q$PU&TBfP{DVR%lJ zg$(J*ld~MGL~jHi3#HHII${j73k57U(XV%Nue82+ULkx_f;MH~aM2)D*Exp9+2KMx z66*ZfQQX2T9$P0 zBpYSKXMXKkAT+fcQrX)HQby=z`Mj1SmnltNvs6>vojHh?{yfi`DyQgFdPqa*oH{w_ zm{VIC+NXqa)K;GS9W$uF$M*~7Q0t03C@41;JJwYVSnb(?*rb>%)aoy zuE}w9AH&SlrTtkMGarmH#HFH?UGRpKG#``I7Q5cf`w1NY_bjvbSJEIf*Uu2;xtAJp zD+@J#gb^8l2ZZC3`lg5@O1@-j*Y-|hbU9a^1$y#T_|}ElP;=8~W*(1UKufb{Yhn*Y zNnlbq+lpx>E@PUz0#M*lqi!Hnr((J!`yoq$v6FQGi7M{U{6kT?|HyUF+9seX! z;V%S#(7V6U%|rL$MCZSI?s=q{mE>!?k-7_qB*|bpuB&9aZ_f}~lzQ}lt^ibH`MjdG zcNmaF4i#vmtWM(EqTBQN0Q+X|$Ahf3jd3BnY^+`~a`T56hI-TQvANU+d9=Wn%DuU2 zJGd)+<5HlN*B`)RCD9!R9|gaazVaW_ZSjWCHx@DGg{0wUOj|N-sd@b-Fvmot4#&r8 zs#S_ij}ac_g6%hyS=h;x|}|ZV5Erx%2+c@0zF`K|~l&7IV;P*b|{x>-+K{zv*CgBkkOA1$aDN;bRs*@-eZR z{*d46@j=j=rqL{Bdl<`!El`M#;7HuO#C&CR{RwAEz^rCT@3T&VV4BKlVe_>qB)8RD0!F#Q%&Sl^-?ZAae=e)@v@~s z$qlch;ZM*lw0~4-<6lUt!%Woio7`zV{#|Z~gVA&C>_pc32wwJXWDumSLvNx$ zqrFEOf#u2{pWSw5PBp&D(9u#A23fVhy-53GFK4rErorPHCFf)|p#()#Pve5<$S+44I`jD)V+WzT3Yq`xiHVf-|C!X>qLrT@}_X!8qgAAPios zw*#OZF@R9JOGNU2OTSq38(Z_k@Pf0G6Tj#o!eu(2KmN%7Kc=X$)*(4_N%5FyGv#^9 zxA4NmFZyEl5d1^$d`aeKXTV9@oYY&mcedZ6#3Yw4spvLp%mBi3JG{-SpB^>WE*U)E z&oP%OdCiZ6fXq|ObJ4r!xn`u3Y#GAyhSR%pGttr31o4UI*4E=P(^Zi^ClPLerh?d>m|UFbiTD!r zB_fbQo4<)r5EFuJXVS8r#Kr}*!&_(dC5ZAl(vc>UP~DVSs>mFsgBfz#BzaxZTWk9w zX9&-biw*Fexky9rt;n-Im%%U^@R#2Pid~OIy5yfTMcyjvx*p%bd%9@RjE&^MlA;zs z;8I1+@Ook2aUMF_Zs&l9_BBs&>9gVawk25(GZ%r#E^qe-{Tw*Q>L5&^?jrt87c zUov(KhAvVVI=}m7z>(Ir{|IDGpqYy5_8r1yboX{q_%y;O#QPt?bhZ31KjuF!SXsrc zJli&=eaaq-{rbS8Ifk|Iwtfid+4o%S9-C0?d29NP)4VVE%HDAc(JvD(Nex#=vZ10S zZ+0Y8S60n$q?yKOTU=wyy!v}A8U)>7F^?%d?lXtf4){^6M-N&)8vYXLfTdSQ^cuYO zs4eX!-CWWS#Wtt^kk%HJ`BCN2mIkk)j7ep`n@6K}o@Vsl5A}zuYw=&#?#rUvvY-3& z`UIr01XI#7PXGv?7bCPyw6YeFv#p*zuX*^0Vp9vPYl&BA^SUzqg4SjzQ_)=kP zc8XT)J|K2{gbG#35K%(h>TDv(V#39BMBi53-a}?rvD@AKHN{*_T^kLXZ4u5rb7d}@ z`~Bl|yTn;1fd^`z!b=OXqYrEoNGg5$bL=vpD*hb^tTN-`94R|5$msJB`ImFe=}X6- zr5vcKtJ2o0ALmzxsqvrzVpk99<7ea(A2SPU+kY%e_My!@jWn0W_9`hlU`FLvR$n$n z()De|>eR*W~xpPw5u*1X{c13jKT{H$u9kO zIHlA29VU7%c5!Ng_*K0dNIP15Qhg;+io=|AV?o9x>j6=YKqvgv+Cz<>?b%MManZ-+0 zfu@rua<WTQT`kGmCMG;f3KB4|#VDhF6k?m#chcP*P7H&@S-w9PbWFKO)F}sM}+vyHABL?Q=42vp`->2Xu@A|M$&DEUndKVb3hEPsK|-@Hmt`9U>qx3R0sA&GjlJ++)`&`(fF?5PYQG_Ax$^xO$U+htK!G9xVQe9S* zp;B$=Mh$#$m{}0MQy^}Le2UQ+M&Gly6q%n-#d|HCIz!O2hM6BxwzE9 z;Ib5H5k{!-3qcrf^%k3K^8+>%|E@%OPA4?eS1=MYE(oBV0}0H5%&|LydOm%jxnREF;c_uc!qr#N)?%U`>h(wubUxn zl_A-sth`i!O0dojNFn5p&!f_n!o1p-DWQn$`C`_--)fUTuqcl`wg2f!`MTTBpJtlx zw(xa5?PjZ&{VcFrh7F|gw=Lm~mld;9%vUs8Y_(x%kx`ZniUawkycx7p01snQK=ec? ztx1=DWT3Fm6eS1pn=ZyP)g>D{%=3@H%#3ExM6BlnIG9`ktSgu|lcQM!ek*3B(efzz zJ=s=%+-s{+()=>Z&xpnWlOB;8r_=-wL4<6dwYRN7?wWmHQ`gLoc9CfcEH9LxHLgte~fu zl{Xxo`%sW9xu-HNU6???;i*1~YFb}KxZQ?bJXDkL#tLl8Qmutzpp<=%CPZb$oCy)v z!|pZ%B8h2UR|)lHwz*F4Fiv|X<=gTg6f+eurB^+_^M_=4OUsybtBG(1&+2sH&h*F^ znG0iY1<^9jl0pY!<1nH>cYm3YvhA&SNUR_#4giq#-}r0=t|ZcAr-HDrvcDgo<+x`c z!Fjj-kD%@L=sU})C5Ky85X<*q1fwClxM~b|BE`KJxR;6{o7X<#n8Jk(s@auE+fjel zYkw_Yf0Qa$v_C8QGskRg{5xevb2BneTI%O=*KOC!J7?}xHz1e4SiBMq4f0GUYvPD$ z%l8-!f4WWce*Qr?&ik}+C|apJ<|op;xZ-aj zw@QS5i6Jqr?!in0ny*^>uXFi?`Z)BJi2#m@yhpaZT(=lJ3}drZR9eW=*g=&I@GCq# zmWx7Rg%xclNdkw=6v*uEMNld|GA6?s3J!OMn|HOOC{ATOR_Md!)hGxxYhTZ=mFIRvd9|qOhW?|GZL>FiJHrU6*urd+(!?qO7S zpmysd8DyB0LF?EwGZp`w$tn4#^fpg2PoDu-pO~T5I2Gb5M!=VhNG=lq9t@%#715OI zS&fL9u`SNn@ZaW`M?Ntxi^**blrsF~ZnZ*=fD|9@T|`37429L+eLjm5t;Cm!>D%2V6x zUq39Y`Dwn)A7A^1bem>h_?$>}6FX8fv=JZb@}9icYIcDRHp$u%km{M41obVdTtrPIep9R(~qE)JfQ<;jfJ*x;?+-zPKYy3`7Z%+8{-+c)0>$^B*2 z*}&P`u?#X})VrS_YZfYW}-R#>NsM06hcmpSS18tw|k#91|JrrdM4({rRT!l?UAuA8W9!3H~bC z%rhk>sk6~hxlHS^|4}|Nex}Nic`gvtBR}f!s$-K;BxUv4db*C1e(JHjldT-(BrQr0 zOpQtff{c*0jH@gCRu(wd-8aJ`zZ=JL;5v0tZGSEfRaA*V6Bj3zWd?6-%_~mS9j)#a z<`3_Dr!gI>kr)|yc-pcm+;7rFI5~^(qIYlL{46JIn;M(+Qi|dLj z&te}d4%Ezn|GuY@uiyQO{g~bNhS>zd$ZsW;zWH76rP?e@eu*yiQV6c)m|gx#9vm5p z$VZwd*dHCrw3#n)oUin+mXwZVmXkMlSJQl>{nM9Q;S@MhslqUq>15|%d1q73ubtFA zKQ??L`5r==}5OsmJXhPeCV?-Pfus7K1$m4uU~KlDPmCg}KQy)qgn_NJef8 z)Ae-4rv4FZk?EB}4NNV%rVbHq7b;)Y$@+h`(rBAiF2HD58tWgNoj+LFvf$F!&#yRO z!x%9b0#}I(__JrgHiX=*68f;+WhCr-SfI~(LM%;2oSstx*b4tx!6xT-q<4?aj{|zY z$fK8@_0UJp*<;G4PeL^)@`=<6$tplrjfin=h-W38){#wKRlMzndqlHHW)1u6O>mvK zOvA2@oJqZP)Is%rt)$Slva@2HFKMV7(+2Rt8=Dr`*gJ!rE{#T|J#5`y)cdKNT! z`@XdOJ4Z-Vs_PFSk6An#+J4ynfX!Mv4aA`%uFB&)Jdd8W^YP5kEYqpeMa!yTQ0aoT zc4BReht#UG>h4VinSJ=}{a?a2bn)+x9Cz)1k4YVvW`lrHi~r>ozsix1ftUoZSa2ls z&>3sPe$L5I>W#(?!>3u1@O1r94VNJ5GmEVmB70jE06bXiZz}H>L$Lhxd;Lni8KEAq z4>@gi@59n7fF@C24oDc(|nAp{5A)k64|aEAFEf#&OPZzprVNe*;T zMl1is;aHkx1_L=B-3&c@`PZ2N+*S1($?`^S`Cz|;lL39V9Z-x6-?$m-8iJfec(D!U zg!G5>W<8i#eXy3WHyUkVU-Zu2=Pq<(`owM&Yg)6Ci^%Ron3-$B zR0ARaSVH^UqU9*_nC|IS4{@WuytEj6mRYb z?)kFcFDcyzA0A2Gg9G$Mlc9YWNc5Y{%D?gZB$@uP<6V;h2V zvF$uW=3Jm4b>j*R9onynUG0+H7)+<8CQdgOrNtx_rBmIT<+y4>gRY3ugxcgrX{QBQ9T%o7Xugzoy~B8DJ5>N~DF4W3X(GQNzFYl0 zwmmr<;~m*Zw$5iCZnccC>uN|EsIo6bL)Gj`$GyUyXXyeKovg-hfT7Oi3ZBFG2Bi;! z`ffXKSfAJ^`?K#444FIxhSNZ{G7Om&>8FPj&O8?hWo%N98YRC=LUXn{-Uz4_C+&Pi zVgww-jg3uBy3i?9Y9&!N8N8LDZ*6s+9|2)1aC&*QDD`uYlHgFLX{i{LrEx{gG7mW?Tz+c*=p9^%48%al6RZsJq zAiDIZ8&)htPX`La9h0nHAFGQnjp3mt3vmp)`fT!Mdzt6Fx!23zsYPMoYq2^F?|8yM zek8_;x!p@~{4%Bmv*X;zJZ%TWs%tsEtJsOs%2ga5`9Q9;>)hsDzF2gYFrhrGOG@uc zwIUIVVc;!sRX0vta~zZth$h6*F40WD#~*3j@PP8cu%kasJKN(mi^oVo2SNLnNQ0yaj*5!E z#;ueUC#62Ej26H0MX){h2tE-!Bb1dQob4nFj>!~(-C9&LeN{cmSpN76T~q#<^c-$_ z7Cp~6l{0FM4Tr1Ix2gcP*O0(mSYr;Is zJJ&m6vkoDl-WkZlt?e=U2yu~!@Y0=St|VsJnucEiA0MPfuQJ(Iful+-w*Nbmp; zoI&_zyIRGM>SZX#Df{G(UVLr}5G}0k~;;+xQbp8<(eC|KL_(xzfk6emh#)yM+Z6-{3Ae( z&J}F8vNF##L>vyo$G3Br0@dXv=)nMveR+tWCe}-3QKB{Ss+bqEGG}bWH^-ShT zMwYYTNl~s4IbGMs8W5yt2CS1}YPVbF{PmS2qwEMbHJ!ahR8i#7v~5ZC#Rr5|Xr4>> zb1iIw>>i9_?;?ulOQ-69ew zpQM^C?g_vQ=SgXtlFRVvV&LZZV#OT#r(TZTe2ZKo`(xR->OsfbudA7vVa3Ox9*Fz8 z!nq_iNyNpXe&J=>on;35axFYw)tcay<1>n(m)Z2Ok9or>!0Nkc3EImU$ z<53m6`;o~fuPYve+Il2JU(d0xz|y-c*QqCQoicNkU*JkJs}UKWSOg} zz~pK;rf1~v;!M(6ch}zLwlt}Z_a8y&A5Vk6Ph!o!@dJOq6UC(}oA}a?2)BL3wAtRE zx`qc0|I;j{4M~(~aTZ>z;zxY;wWRGhnd=|#~HU8c09?@NtLSG#D={@=IsBD z)jwGDq6^pxhhDuI`IYzR5kgLD=fC-0lrlz6N1DySAF{;$u>G4J%m=w6Hfk|;W)kr- zT5w~p99-Qi->?N_({I~y5l1_O#7qFhv9em5=2(`*^f{m)tdi-jWR=URllVZKMYe`lC@WGbEH-%sn;&Rew*|6To^+q0}w zFpU|^r!sIhm^uLsA}!*uG!fbz^xCnLyuyn5O^4SO2fxvaAB`#h5k&fp_5{!nYTJDP zO)kC;po@kG{v%k0rpphw03H?3FKUQvqwyovf2$7)!JZ)^U{n6%=(iHCA8PbJkqvv8 z&jR_wYbX>{#meW@PWK?;rCUN)iZ#c`c>Oa~2SxYjMJ0#=a^&MsR_ytqS@UTtOaIjI zzNu+cHBCxCYlNZz11cDR$8cC>aLo@n!^18aGANb#HLHMGjz-!^)3d&B$CC=~pHheW3eGx;!?}j-0 zvNs#%wvdq-x+P#tZq(bOa@{vNW^E;v2$7IJwF=2Sg}GnZ^YD-V2p;xi*4k%MHgtui zEpA>2wAeh4DcOv?fmKu|8MCp^xFa`&>$l`5uFW%j| zvdu8^TV@wilo0vEj~`798dTGAYeNRAL;%1v$eSC|e*{(7R}Z1{w+AHYxav$-vo=w7#F9Kaq;HXk9a78mc;>P##%ZRjL4H zNbQ6cthii~{L$K{J99tdstcg9V=*@sho@O}pe13sN~=sz?C5Ou*p{|B2j#0+K|v$84nESxXLcgR`ZHE|Xw*tu z2kK{5$+*$o&!LXs^5giQ_-<7<+t`9AyISTWIk znnFVgoGhOnV_4rLZs(jfeeTtD;~|}OSUKnJOu6M46I5o(GkHFQ?)eXLw-F8fuEE;` zT?{U6a;r5y&{*SML&GMlrnL;|C&g%`eawrRfKi zdD-64H%24oyG>t%Py2{7k0_bhA_69Yhm@Uyeg@|Lpu6x^V>6hII?NEL!bBDQdh^@Y zQB1m;XJtTB`hD1OVlEuEv_okfHl4I6Mp+p;1GQ+I6v-Rg?sU~M(YZmYRtG?gCChqi zy%AY~A{_l2pPAZ3NaFn@NxAW-g;aykhq4-8+JH_)dhicu24_q@g5`Fz8Aq=RD zqVinMw5UAORp^|zW?PNfTC_+zxne!f4f68RDmc~W#5 zQj4mdUEBM#0KUA4$(Z)94|5G4-q*gG8V4N5PddoCLIEDP`r_Zb7&fl^rJ4gfQgTY3 zK-nQuJyyE)Gmio+}v6a&`}c zt-d}~Pfs3j(~kZ=e>*8lIUqFy*jfyKw(7Y+=L8G38Sr4%`YRClWuxB6d}eQl#j~nM z1{tIJx4uJ=#em1EX}0?NBQ{;>AAbz)gIj_&CoS5gYz^f$r6CRVR3+p!0%?|K5YpTd zEMvLh`Wf;C&~7P8%&2toNFwt0EKq0oXvwT;vBU8Gp2A&fYYcdic&@qCIWXhY`QvUe?3 zAS9%kw_y#J3oeA7q(*626bFa+Fmz>8raK{0LvbmUEwi>W2`Z{bFGxdSrZx7A#l|rM zMKvZds$apY^bxN$#CKXV;2QIjTsrpvfTyZ8KQHhNDRao`M@R6GgkJ_)-6iO+>=#=Jopg-`%J%#2H8Xs_)~*e8sd+ zS-1G*z+6*gci~lk_3dO~yKRKa!fh?rpnesP_*P5xJzIcAM}JOsyDUdswUNmn(gmt8 z1jXOD7-gM_-BJ}-UL!2_N(5aeilQ zzg+w=SQIN>0ijwrUi5BdBlF)e~u*I(tIde9}>!u zQa^Fn4Z8{-Szn1OSaebT8m@D-_m3cW=|MiKO_S%Bc*zt{Jn(S1@yYK$($541Dz&lN zMPR(J@x;nWsAIC8sImb@dt|Dn?4B`cBA_|~{`;1GU$~V@Us);VnxzUMV`HDCc}9if z7Stf!q7SK+W;QrY>PI?{;k}Ky)Mg^%JLR03wl$;QZi&VPYW~Z^bhnj^J=I5qcvg(P zXAMseR@(=C#3%+tL1`SPQXRS)!{bhW(FUdEY>k6gIH3!Yk z?jFx>Hf+J**#IP`yLQX4!radJ^F~q2h%Aoc{?YV3+&sItB2r&va^^d+#W|5CDRVX* ztlKgUd{%9FwmriTjW_iM{hEcUxBJD+RwBZdz;q@c5O91WOx=uTtx(iQHX7)V!d0b> zha5d`vT^{NdL$8kdMNj%A{z}XJ#UkWRz8NB1BHA{wtf{%rEyk6x<$$fI(LR!C}_&8 z!VG2{$7#rs*i_fpQemV0epK2;XmvoIqd*OQ!>>{|x~rtpCrw#HOqB^L_ipBG8~v?t z;}jj7hNifPi${N*?kj;)6b70y@RDJWFMyQ^-X8ybkispYWTsp`@E-{PMpa=c#J8}?{ zj-5qIIHm$K>W+`#=T9+PWdjVuI#~K$ zK9ldd`U2c^i3FEhR_K>inc2T`3oW(3zNQTBP2a>)R%K#RDkz7uuLGqIDz z$Bi+b(^@Bw8{Yr+0yyNF@7>9G$}Ci787pjJSRrB#0GpNT#`*}F>6r5v-}sPbxgY_1 z`WhNeF;SthTBX-36$ybdcI8Wiu+}NyZ%jXx_Aa*r}f_!CLi)7!a01Y+J zDGD|3*_3wq4J6Hs`pc?LmwddlfhDYpdoMY9Lf(TO9(pn>&+%rc>7Z_$ z*IbVRItMGBSvO|}N8d+;AqaIqZ4W!R*q1d^{ZE%or{l&AKy*NW7^7lM@fsx@BS@4& zPCIK9AvzQP#2q1&t(S`=Ct(+JKAdL}kL*9Jb>s#z4(H;vsS43;slc6|Niov`z7lMa zb;atm6NXcE1w<1A09E4 zF}4Sw)4X}dp1)V8a7p3YlmH5L_yZy^m!5M1m{5TVka96ot4GizNBjguh0!;|Bv((* zvQC0G@7VR(0y04(mcJ+FrT(V)a?)AwO=Jx>reWX5h&I0891?Hlz%`A*XlI(hc4Gna zZL`nhn@;UlkicTWv`TVQ>+l&5*6s2a2g3{vbLG02;%Zx4@%GMVF)>fvQC*+E{`a#* z=bI!~=t$23I^Z0N?|}-&eC;tZ`^jaBoxSi$>s?=+9qb`zuq)sWdN#Pso7_3g953UK zTKPrCsPUony_2sRI5&d=tN=HKs0h~NY=stZuzln)L*jG$_#y8fL9K<|cP{Oz`u!R- zVnDEmx1n_?hppskqT5ckm$!$B51BkuX{IjEd^FGsq76F%cqXokl$x%D%HM;k#q0`y zg^kUiQ|}QaqQV}^Yhy*!k(1+>0W zvHN4B2T*P3T{ixEO&$e{x?V!i;&KNSf?1yX3Co=?P_ym$Vz|YUWuf91%-c9G)~?jO zAkYw zLPgp@`KTR;t+ce&TwrV@Gn2)cjidp!!i*IEAdvS&U&}zVcGBb$1wk<3ROTy7!_t^z zM`9NkqoWs|=pT?~DBCX>p1*oa4}ABZM3eiy9WIkRxZt(sV#1kzkf}D`4DV=N)BT$) zv-wru86=T6Z<>2HWZUY4gn|Vfqwf(IO|lb_-A0hZT8xnsU zIZ`w3)E-C@)5m+}yp6|PbH`dTj@!xiZ|?K$u6aa$lK7$hlGuThggF?r+6Ch+aW26? zJ7Q9?YR&ZZ3K~4^k_d#hIZ&`Q2l5G|&YN|y#=!s{)y$V_6}@_WQ6Ach&(S}5(jU&x z;%0Qdkak)Puqu8wdb7a9C0s? z0|ir{szK;F?}F`TM3R*%c@vzkdc1p_W{o2@=X5kK=?v7$Jn?zLIZ=}n8!@(=(m)V4 z?FL#p9$hA0MbAr=`f5)KIiJU1pnuk+8UJLcs>agVeMD$D3Q(=D0mFlH%DTt+jBm6u zON1DG9sA^zQM)sI(@#Zisq+1Y)5moSgdf9SMW-viKgH_a4r+|Me6E<^%GWP|GMY#f zjrJY&O{3ZtW)g|Nqz0SGRy+Z7%afZrh~knCmRcP_$SG1kz9n8{%N5uT*tPRNyz}&f z7u|bJ0pL zbWYuk4N6TBWjkvR7iOhcW3hGsrcO0R8hKD;T-C}9nbCO8yzt0wc(^S6#q|Bj^jC z=|w9{{o`KuOG)k}NNxI2Dg@|!_D%0!ZfinN*mBWcd-@P>I5)q=qDcLJx!$p;)VqJX zthM*chd8p!mo2F5Xl4hl%d1oqS-tNLp5l35V%csY8G-~pZ;XtF{*Ee!`JVVz!xI~V zyqWM}cx8+F6ozzu%!mPxiTU&n$d8z#g5@cp)C&(XJl~Al#QFm!5oZ1Hc5A(X=Rfys zo!1!=slHJA8`vBx7lv0!)xi^PJwp}4AFZgq;3M!2c;*_wNlMk*vP`LC@(>8(sMt5W z65algg}khFs7nwx4X{kjfk)SrAMmRSRVeDxnCA(w^$}%(HDuyeQcMLaqCpN$J3=;2 z5GY_1c2;_~uvMnn)ay`@r9%ZWzgUwQSL4p;n?CiD_($-LL%c~Y8lCX!m+&ABl+SR} zWalw#{@^bi6-*wrWZb!~dqd%`cc(b^R`X3grl zkYAX2-rI>~hK^UCJpZfp zB*FQKTATzBbYiYBv~xr`{uDk_YVLpW3xQ6^nrq-A^Vfb6hZ89zv!Azj*hH4A1<@8L zZ=R5wtv2G1rO+h21Q;CZc5)I<{cD>cgNTqsI*=@Lx_ua9_rUg{@$j{r6+YcQFYb8% zU5&wupWucz*uF+mb%JiGo&qWg#)3&7QSzwLZ4;gRgXxa1bLc+tGj0|vag$#G(d zJNQc6djToPYe04Jm|GgBBl(C;qqjiSxgT6tjVp3(dedeup=OGAOlP*!J{x!iBdMwH zyynK2nQ_lOY)e{2oqbQ+{0}8L{diNB&XVylAv$mskKUVn{cbTM`^xP2$9utBw|8NK zAsJ$S{U3K}xXU-Lig_gkN9cFeT=EJRO;Se~hfWy!7sl81JsLOtgs;_T$g6g}U+WtW zj8%uKhLB5Wh*5{etTYTYaEET)z#JR5>dOaP$q}w-G(V&>p>W4bDPoXK&uHt!?jF6oTbf;mHHaVrSuoC%z1b@nugimTs12tv(1Qd$O$_=6nJ@#^T^ze73cSg@AO)bH=Qg(My-vWx z>y~)k+%jFyG#1>5VT$r@uK%b;^QVD>hhFd&D+qZ93e8&r);@r)u>{SQbuUGa8-BOV z0MUjmR@orAA_jSeaT5xLllGZYJD7v^RTG;5Dk^*89)3%bPtpy>u|ht8YC2Cx!VA4q z9@$=n>YF_^T?hMV_m$Wqre4^5IK)k|nf0-0f*JoNM-T}S1fi2B6i?vxg1Z?WC+ z^)xfQXmtSccZi%-L-eEU}aX}{Wa0$ywG zQ!ph)KU)2#v~7Vcpn=FX;VOqoHA%YBq|IuH``tjEYZ2X0M#}Heb7Rn@iE-c62yF8u zCogc zT)WlRDnVmT=tWKjTyXo;I_xQEj3;F-@99SIUydwa#kgzLW__2Rfghy0YR-xO)Wph# zPL_nbtq|Wl$}s7a#ET1m?44$af61`Aj|}AgvlsHyZGo{-w!?gUk0zc2D`Qo{D{Jm_ z=;&pDdk6A`kXlTctopUudU3Md=U@$YF68?1+I$N*ViS8U&B(q!X4C6fboX#Oyo96r z!SQRuyI*W6N8;lN`)`Dw=cOE!q5u0tO9$x>`{QKLCOpv3!!^lKO|Z4~VuWe)W)OKO zWfw)RsQAdenG1srZcyCY1+Mx~GBR4cx*Bl#o(SoFU`BG9sHCYzomiXWx>2P9}lTT-PEDGkG;Se(_f|pi>5(+)=Jhu zZ!g~3LxBqir9Q84jp$}$wdoBXY2?jggLwz5VXI`4`H~;T3}lZrF;TYt@z*^IHI^F{ zslt1O;I4_FuCj~gBjf4H7G%%J(nco+e~JP7%ZJ)|t4r=^(?MdWnt)g`(18rKMfD*+ zu3q=SZdFc0oR#+dpR>;x=j5ziQ|CChh@OU=QS)QsD!_>Sb!{(OhnwWvw@cCna6j<2Xksb8#%&URkkn_%;00% zucRULmD1{?ZLvoz@9cN-C6VUFA?xn%CZ{s>>q5Vh7C-uX4o~DZV9vg;?Z#_}8zTp- z8$h6D<8Jq(+e~FzzKGOeevFJ--WeTDF-s$t(ty`K40-*fN%;TQTK+WQ3a{r}H^aXt z)csS6m8Miv=9Wy=%_*KXie1?C6u+=B31{PxK?mc{i;(ymUTot0uA#T5 zqb9AtVkz^Qb$a5B%?{^+cD+nS*q8ZT$7ZI6e4s79s_m<&^Rj-luI!U zruQ^N)>p|w7#u`O&yZI4mB}jQcq4cWaq;jpvdmO^8n(hE-eF6?M79fu2k)YSbd2zF zry31;@B+w?gMtWL?881ZZlK;)FI~!nlvmqnht34!O1QX&EG*zXo*-@+rEbC3rUIBZ zd9Z>7#@H)EeEJIbN{r*Eg{2Y?Ddo-wKX5o@mp<@|4c7lDM$|b?|KOagN15m&P%x%! z&RAO;0d4PY8{uc)8zf;Nyyz9g8$L{;&brGm%Ruw|&mjFca&lgkI`{h6=(WI+`OA%b zb$yg4AbuzWIaPCej1`>T#Jf*zRAjYe=M!kGm3NUTn@FnoFCVWbxhEU#I74WjQRZ{i z7k2rx#^Q24O7^Ac15uvUR^mx%T#--h^Q3 z=YXQuIZnXsMzIk`k*|~4@-T=Vx%kaCY)`ULv`^n2L?JtOQ1W)3-mqANM_$jT$kIhp zZ3lU|rgLV`k(wI_n{PHVs@H_Z>3eorZDpoul~vOonzg7m4M_e`cw|yPzwquR`HNY) z#;{WFfxS;-g5pHRKLRhK!^bg$oB@k9NKLZ?d=hAd?fL5DILE7y*MQr---EDf2G8Xi zEWB^=wp{msgem3sA?W3xH2sqT^C}43-x*gSYyW=%>o^q0guN1hK@|tY=^|4v zM0c1opE60CHYnb-PX%U$(i0GBEMc8!sU;Ssp+tzb(p7kB9}v`OhR;&CfPlQFJmRNk zX@IYne|a}2-$~Iz*~(aa)`$j9^HiY{-?8p=y)ixYOD=@H(oW9hJWBL@bv~0fjFUHz zVR2KU&N9|X^GxPtg=%0_(A<3_-nE>;mPkjm9n}#1t2RX^X=t3xMeRJLt;uJIERi=1 zO(HiU8w7_pIgjon8EeJ7#$}3E!t5x8BJL#Ce{gQ;>TVqhT4;+Gi0W1AC_eX=!3({a zA+qdwSEs_HNiypRG5UU&Vp9|)7gsT;g+a~DCIMe?p3eIf3=_hRv2ZIus?qu+Dh*#) zJA|p`<{Gxx@}25RMe_csZm?}zyqkdO;@m!Pvt(0+{(7OQ63E~)*GY(#MBVdJ?^8`W zf7N-pZLn`PPcPDaQr&G{&}Q2#__1_{d5azoxkAUR9-gN8qZg#;ysVq1>{5qnnl~um zlTk$!8h3VoRy(<>+sk1E>&*~(f!)~$MYNQW5mWb=r*^XRRt#?nzN1Z4i2nepnvu*- zM{{#EW&(YfWsDDtJ%+lQB2F2+Ow%o7e@W7WnuEHcs7OlF=p6q5E4#v7l2znHg)tp% zo@)u?H+MEE7kO1DVj(3IA_uKTP zMOldyidu$3WboLL0lh#mna9vURTlQXu%)f3k#b z{%;k1_cHZ&nA_sZm3(r{W*JByfq8k%Wz@d?&_9Brx+xHf$fx+hD58QpbhPRI62dF5 znV`@Y_p*IG7^zJpT;@359J>>aJ39-KdO}XByy|yY0C&SCH;Vsg7_b(G60RWhbR^sID65KT= znGp$jNNVw0B<~hdTL`_6NwZo`nw|4G7pmG1!2<=cUj?wXZfS~gG*VwyAv0^TYZzpr z3aBF8F(ow0k`btB+#}20unzU(P`Jcp19DVUq;XS=SeUZ zSUmp#b(0;B3R(#fVl28p;tN7wWFIu}*0;HJf^#4R9HR~u3aWW~GA{PpJ|}om(uGeM zPo&JMUA)wqRp<+&_nER?f69JgAvlvNi<~BzlD$cdpVG9r@C6a;1Gtpaq(^BNsx@0w zN^gL?Le~*pKL%REvdZ9ce8%e-b~{~*!Valn#jI4*>oLp4CjzlM7;vINOARF_QH7x| z-3#1k3R1v4vV#Vmoe{p!*o3J@2q|uR8 z=YP}dFdY!do@<-Fy`SJ7Xjc8bqHs3^pS`C|jpIE^^wq}G=`cVf8Nc=wIxWs8lMK?Z zYu1**81eM;B8)jgP<@(y%~tqlNpVa<@;xTVq-m)>3Y`?_v4O(R1~EoR!3z9O}i_N!bde$wJ*)CC685}&J z-e8rIJkCa)PKtZ{mifj^^GwwsH#i$GT~f4%;zdz^yXNm(e_+ni(PeoalPk7Hnugzt z6F+6&FL>n(%p{`XErrpR=|kpLD>-nx5)nv6!1suJz1uR)Q!E*2apY56NQpAm(| zD@N0q-Hk*DMKuJA4#_p~#kT}8e-JYd1DNpR3}z_n5t19XaOxKcQE)|Jbm)mXlOAeG zGWM+zyBU%Ze-D?52c^X_(iUQ;R9aDa($sDxFpAEI5`&{0qgJsnwGGO)XrhrHMl;LY z<*Z+(mmC25L_dE=qJski5&bVHvD#-e5f9DkfBrl(g%c z`8#YWo&uo!Wj>IyZ)(#Rp9d3D(UV;mw})~0Plo)Sf0W54M3_ZdPwoX&AGKK{Ojb?C z;u0OT3MkX+mzL0oEM3)U`SihIB*`@WR-eb<&rbJy4+T*nR1{NJ6(v{QVPfE2(t<6* zvFT@r7Ug3JV^=-mW$SBFa4$}HjYqtX^sFxStTE{Sfo zj&MP1e;#KhMxarKFB;rfjRPjVVImPwNz;0?>gMI{*b{hr(&jRZE*i~doo?!h6CzrweQHL* zf4k9^;Sex%CnTw;h)dPpW2Mnd@wop092kEl-p!=0>J)^E`mo8HJp?HAK=) zNukjVUSTCIt>ROc2_haSpF~@8yw^1*sFxpF-=r<(H+Z4uD;9A6S;I!yYlyL_c}SEs z^suzc59iyhS$^Njj<`f266| z-eAbHo0^`r)E!3A8xaeV&kfGiN7w*_GOhq^%ujikMX%iQ+8d5{$Wq z%*!C%c$=bKT{3Qpl#++Ln25cif3O1eAnp*@+CuJ-fRcEr8g+|xtfkUMqA_`OMW0nA zPQ@vxu@+I@Cd{mL;sc!(@g^{F9L7$N*FKhXD#M{uGp3E2n5aXhnn|g&N0y(pYcmFs zWYLAALy~2LaS(}B>afJ)Gb7v5hO5egRb>((^;#Y|@y(6OYX)ucDKqlUe~*fv=dA7R zE?3LMQS@TiSrnK@E6Sdbnd=2}#hGUq{{SXkGUhgVi9^$wVfVRCEj2t{Ek3lEs3e&v zLPA4OkoauTGDOERK~2l)^&ux#zrE6sPbMAb&F|^J~kN9jQBSJ!#m^* zOpd^YCf+Q&uR+EfH75j_e>2k}B*<#h)Y?7LQBM_vcOeIZKPvmj5EUt;Mxhd?Hq%S5 zIr05Br%Mo2lM<^b5Y?5lv~%5@Vp5;kJ&1igqy4!){{U@k08)Ib`wBjccUlL=;@`EY z=?i(io_=$XiCh7iTt>U;-BjrKzwa%iq}fP=;wbtt-EV>RGy7Vee~`DELbwj*j~sFC zWyCl(F5-N0W=0m?7OOR*kJNUfQc#@BZ?%P)3?+A}y_^q;tE(k27);DX^B!IBtw^) z)X8UmH!2vN`J=>6k*G$g$>;k^OFgAZWFHVm(Thj@otXX}Hm9U5=JLLL^K}m)ex_z8 z)zoTYX$q5Ttsz2svi)iU6Mf@tPCa9WjXrPOgnYWJ$!<+049SxHaOljw^E z(wgR=w+rf>elD92&`r!e=l8#OyMNnGNs|@SV*KoB1$Kx zQ4w~1>Pn*XSg{GaxnDq;k`-arV0>2b=L2|AFhDF`3dLJ8Npq z5HGW5QM=huKhcGoO7Q0O2je8(FvmPutB+%}oHHId%ubmpH8D-oH6DNvGA_8O)t@ydYr>C{&%wV zcU#rmYIuXWX0v6ng^kxKPiUOD%t&^K?d<%&5qPbvZmvzuplzixOkV)Jm#ezk1;N`l zILDhj7M^2x%{3zOF9C`WFo`#ZA_^v%H>+}KjU`D{PTkvwyI@7+OK`b%Xm&x(KK7uA ze^cjD#5r;z{_`)cs^?J&6(#10Fi9Wcmz}ut?@fj@uFXPfib|%=9NjT3H1z7HPnfA9 z^@yxvM(yP!(jUcym?~4O)oIdCB;FfwMb4whbHrccv&7U*xRWAHk|IhesF;w{DgKO< zF7Ge0Ui+R(;$us&wq-ZWrEkVdq|R6~f5e+Nv3zBen@rfW@*>S?fs1!cU8I>LvT7IF1 zOYTZ2&1aDnqs$gmNNN#GQ_@*K;VS0lPQpnBONUHu>aO%eG?3FzH=5IX!=7SNf5X}c zIe_=UA}YV?78}{|q0K<6_|6^3Dqcb(wh-`0z1LPEmC?(EuAuqDy2HV~3726q^Go=Q zxOmoM!f^KqMR0OYS$onUYN`b3F-1=48f2kVK3a#?vPCY222_wPr9N)!Do*%gKK+D( zb$Q#(XsN|2V8iULNjR-A;A1GWf7!wOQ3s9LMTv?H$*ReSsGUiyMW`zKI%T-66nDE< zSLpNGkS|E1qt&Rf4`rqAx0>?~fjPda?@=$L)~1~qQ_9TM@$s{rfr^0BFEDhR-hYa$ zv~fifO+N~QrX-PB>ipXEBIpPB5%xWEN9GA zm!XKihvFBkn`$>GD z_Lz5l$^IbXN~eoPShjo~A33w|l&L*qzMopw1*?TPsctGNvVqP;aP9%_jlOJ$^)c1J z%L zV~Uh$)rn#IFm2F~$rRM5n1-)*k+5p$-N%Z)myYbQiu;}nqAnrg%d9)B8(vBXm{-wP zJ&jBgv6G2ae@8{JejMtmUY{s1skpVET^+llZ z1axudptCNJy3J51wOi=uw63PqBf!sidS=rQpl>frS4uM6e}zBNcEVKIl0AwNzcjk6 zq1N67z^t=aTS`7qQ;Mbh6xcexjgM7HZA@u~?WgZ~Yz4S+E;SJ6C)#P{=Oz`pdEJ)F zwb!QZa=QAhWDSSHE$Y2X?!8~8tF4Bkcq74Y1&yVDCixInV8xY>XJG>#?}{P)eVbM* z`ta^QN&B`de_h{$dGmWrCgx3eQkdB^zG9n=Ri;>>xkW^T6BRum;*n00+&W^FRd=c% zF&$<7FR>_rWu-A5i1wHk`)FGHrM7JqT_%7yQDq#cC%g8XB=*=b`{~Gf7Q~rry?3cLsw_j)2O}SPu{g@ zxsf7?K8Wn6)+Q?71w2X9&g`~pnH4m5ZDiOO-(DKsK3;2PP3=^+m2eAU2Be~e8Ui~2#eWxm1^jJpSmF0)umq{9bZ(%NAMG*Z$sZaz&=rm3f*Gdx&Zh!)*6 z;x3ULf4$$TvBFz;;}C=o#g9}=wAJEZaVIFc;cdStr>db3WuPt=1g_uBXZB%CYG({M zh=em0C3up^ih|x_VrH2uO+qdcE^h6Zqr+4g*)i1o(F7Z>s>|E~4WQ%|cit3jh zowbj8)?|v6X)LTg9K0>WN~*2ssALs3ZK@mv9e=@B7$J-hA$TtdU139aXvBp+Qmbt$ zcXrfXEwz&NhMCpGk1ijyVk`klrB~1&8TM=eyDC(o@1pNDkICg~{+?DyvXqalZM53k zf5cirf@zw#(I*AqSCLI{`-9f&N!mLyVS&8)H9DlvlK%kZ=URSoKCrffaiUxH(+*n@ zDRC4wAX=ZjmuQaPSbp_`_dD??zHs$gLw$66DCthgb(j}fKrNJX-D8lB1`388P37qt z#A_|Q)Z9gE2taVQVnjs5B;=aWUK|*Ie;azb*ZMwqi9^y79ik*U-nVzv+v2d=8Q$l| z;2mVsCL+uMq`UZ9y27G^>k|*E5-E`Y9bRh^#fIZka$4Xnkm>ICZQ%=MEO79JoI(RG zJBD1MgtC~?A%Q1O(G{c2QLEbfwhPa$q@-~({{VM*^-)oc(gVeo%ZnyI4;Xj*e?<3K zfZ|mL81@g!E+V1QOk{`3q(YHyTUr-SF!#Go@RdX(R_aNH>{c}6D~M|-Js$YZSGeoO zpvV#Grd=wLr?u*~dqm|3!s6Y-2qWs$s-)CsK#t<3lBlXGY38TzTEM3gL-UaInzh*o ze-R$^Sh*~b#E&+hfjRUeo6<4-f0|pZ@3M|WSX6JlhltoBWRWq|!9rG5OsWA$Wkn%U6!!-F%5i&y1tvh)1=YU=IJ^t z6-}~?dLrZ^Q2BjctSp#j{uWH8!2!pC=Q)-yEiGXh~f5?ie)|v%Q z5yQzEe)B~R2NxnB2wRQ2kMVLVJ8`Fdp=4s}^{`BeD9QUYZZ{0pO6qnJi4cif0$C*k z2{*PPs&?5}v8Ba5y3Qlmd!o%lzvc>iL<*7ZyR`SLAG%e5U0-VX?#mYMp%qk$IFOB9 z=d{8r$wq8uo$Dy4!T$h++_ap5ei z{{V)GB(^8Y=`8d#@0b~Zl4d8&;XY9v)@6@BByeT{q>WULgpcchazfbx_5<4x~Gsa?jclJ#k9#eCIf>ffx`?x(~B zYZt~6EoL7kLSF$lH1)|1N=kw6Q?}j`;Ms5uZKoe64Vm1gE5370AGD!S5BYcNTCv~3 z2|l?1?5Wvet=-dN4JHoH3V3Ga#<91ZV+nRwf7Cl-4hL_wQF~T9ORp&u z8Q6#B)9Q-?q6t`xQE=rGK}Pk){phGS`Kb~wX3qR^A=YGMA;QUGD6FLy>0iz}N~(FR z*8KDuB4y4a-^4|<_l{y_a*h$AcXV%!7SpI|rH!lg%#e%2@6rD8i8shpiE&{CYZ-f(k zP|T_+$wa9yD>kL~huyVizGZ-;$#8t%Xqw1fSM+s4ADrxq2)WH?rJ77c7DAzb&ykD5 zt<==#&618Gjz_jO$_STwi&?!gM8hypa<@LJ=jqcx zsr4=4JR~?AL~(Cv)>_8G&qoK_JxU( zfQdj}>dW_709i}#O6$}=rk?eWX{Z!6d=bRSf7HAxAJ6LjHp`3#({E{B0upQH3Po*q z)2TVa#**=M#O)lKo&;s*zb2n#&NOhC)~+5#E@0!)>9c%?Sng{P zB2@a+kHcXd&%7WmuOY2a^l51&^Q676?uyfblIGP@0>o!X)`?st$xzthF9{a21vDl& zf18Vn(+kY%67yTd6ap5=eikRD1p)s63VAhTTMfdFB)9@3_f^@tDvQm!pLW9dSyOor zl^4m6Wr?xzJ1)i_Wj`oiykU(+DA;_~DhUG&1Y40T7k*PKd_>vPV;1}<-?d(5S{$Q+ z70VVd=~R)tx+)Qw*w|A&*jBzLZ;5*Qe-dKd-r6AGy_`QP?e@ajKbgikFLQ_TtXnb> zhG@am3ScCfu8<-ccM5$|bvktUd2A4tUFR-1u)(S&K2tAgi&JydmWzT`$0-#4PZ1AQ zsDJ zcq$0)6zV5qRXp6jD?%p7Y~JcAD;Xl>rU9rsFV0v>T~aBqK>_e~9|KM$*@G?|ny6AQGon3VC`pG(G8Cn@#CN)wMk( zSg|Ras?E`f4}&XHQDkR0Sc+goLl2swh5Z_qP$PTgluOPO_ghI7%O|Xu^GQz0Ga$=+ z7bD8t&6LzCEJ}`oaVVr{6Huz2fREX7AhjpM5>#X4TN(>~Fi5X{i#nWd*&$%A%f-cbigi>z*9KkE0^} z+YmWm#LN@LhH)2oGdMSlG>5np6;ZoY5)^j!W2Qnobm_4EH35vl-h?7UNfss~!Da|F zanzNDsiaIwoo>*JRJfIxju=>fic#R0RhL^#sl^;49&ntH;Z@1tf0Zk0E-gz?sv1ji za@tDgCEg4{$t6(IXozt4!KR*VO&ofk*#cv7%_o+r zCZ}qsvzHd^c}As8pI{T;&IOwEL_`Vel`}65Vc3xQB4)Zq9^pIW)$a z$+=4L0V4H(7pALke^Tt{U1a{ScbnvIQcF`RzNv1qyxQVV4m#wUG81GY?@J*=S831P=hE*sGo$Ssn#vla+u@t!Va#>#1qmA zo(~OLqFtsQ-eQ*k=WXumG6W4Owo=|hc##N~dZf`G*0kVde|zQ=_{yG;cbYqF)ptq{ zfFDN8F?iR>?|OBu2dtDIt7gVvN}ps%ej6!94}FP;hAxtAq@y=zUm@zK*XBkTWHx1& z=BZ1E)NM#f-07P062i^)sF7+4JD=_$Ax&;l+s$Fb`3;>D(G+n^MNp1jO<7uRDMcmK zbb|{|2<99^f6dIyShtNlB5>~#BQhQ*VQd}T!wr6*Ob;R$U#h7*s-+ZFMHY%@Fj94=y{8EH}m z*|M9uui(6eBJR^lZE3dRyZg%%(h{Ua<-YTJGt`%Ae^ltiN6ELA`I+E$#o`etJf9-B zcrJw5I!_4JNRv{nq$VtOl~mhO(v9e73bhoc%YT^OqczBc@H7f_c^|sOCS|7#n&JGf z0f}b=&}PNLs{{mNQsR*=(@aH8F-;W+c9L~%9_^uW{3d3IDxktDsA;N_r?f35n4=Qp zEhNe_%Uu|(Hb+wQz(FGX7`#lA<>et`x0ar6?Ubi0 z-jlu{Q9=4)-fas_mt^o1o{YYPw_4)KbbBY!e~4^a4U^Z9yWwr#YQ$T^m@I`Z6dqy~ z#7l69jbFjj-Lx)hbD3P<1fwKGp$-~|OAAaTr^$8s%)N)Efh<&wIEkwKXpeA@99Wne zV!X{SqcwVEWTrIT96>S{gS9~+9?zI}5bfsO&1pn7A9@82NSySVDn_3Nmsgb0SGDff ze~+q9NvEc(781>@$e7C<9SxQ5lA3U&!9B|L$)OT1Ug~NsQFnHYzER%wYT&nwbbjk* znpbCF@PcmsuW6i{zTpQ5bfh*L7{RpOlIfaSim^JBP(+g?R4ugbAFC=y%VeuV?=+IF zQh3qR%4LYHcY>`bCXH2Wj&6%jGm#j{eTVshl_kwdF-q<;Tf{{{f)NVBIH@Xd)vZ%M#~&b$s3+`@i6&Wa)zx8!A2a-( zr&k-cYsq4v30?Ta1}Fnhs-iZZ6gK!r4v}tc3LAT+n3m~%=FDP}HmDDyE!H72QsX3(BpP9DlH-;A8Q0VF z<9Tf@JB4jN&rvCE?XUauLz%QZ)8jjfz9~ z8pC3)VD4PXH!R)JB&ev?AVMTHe+dYcG}BjyZKg@O-r*!Ri78Lfv@efcf@DKVb#qH~ zzI`t6N|+o92NuJmO*AV=o48S!(n3U4Y3bBnQrtUs^4n0l-qIt7P3o5ODJQ$NU*925 zqfceN!)zVk@EDN-TMVX&S$O!xo0I@XYk0X6p-@RWMMa2pDyESx@ehj0e`1Asyg^<% zDrl+2gmUy*L@_x5H}v?Br=_b7Y|KSwLlClcE5h30mS-lZRWN*)TxA8B3~AF6B=v+y zcK3vRuQj7^7+lQpQ`9U}!-k<}*yKuFOoi4YN#eyxVrp}!aCCh^qcUL?+LVzAMH`6^ zFNn7HZ6gdHXj__Tme}{v2=!-WykoY?|12CL0#0x*qKby3xL=>68w z#qPYZXwhj@;e>eunX=ak!=!P7SC?d0k#czneGi)1pbj1xpNdoTW!kBtF7j2`S^8aHOg)-e_0~eTX|r{3Es8L^mZqR)r2L5L z4L%)8tb^Ni0 zqv`poCH|0~>sTRuL;RNMRPrJ==M#T!f7-;v_pX^hJVkbpcoMP)ef3S305|tt|~vMTu>Wh;Q(bS?5M9hLEQ# zaD20+3>I>!e<`AV0crB3LHCePyK zuoC9SzrTSN&uNcW?M{it-cp^G0U@ZjeCUyN5*ERvU82_!RpqhyPWBi^rmyIxBwPkm zw*}U1)xZI@C*Dwxo7uK{GtAihEunl59bOoDIIN{re=Rc#TYMtbJ64P8D+V&`J}wP= zn~-8Jo9w2*yNiI1^vu8OvEWk{8;)9qxG0}}8|t;?+)3(( z5LGtfkckNpiee%nG>C|Z`9{W>eZ|%v2}#}DX-r281|Qy@A`und9zF9SYUGNNukzpK zv$-Y>fVY*FF}V^Hb#E0%vl6DQ)EY((5&Wx)A|~JeMeX zq`~HV+}__g*rE*8ph|g(8Pn!)L|+w+f09V)C08oGY4759+(T7eAce@6{S_A%$F^FTkO1(ZH;1OQVxtyGcp4=E{P;YYGSoX z^9c&cko&|UHi%A@r!GB^56P20f68`>lN+Fy&I=PfbD|*<%p|J9f)i^cCL~4Pslvr! z_0FUG-%$K#WLi&p3JB=H^HMmBg4^(i|A{l+-hvx^XEcL_zHIFS=EVF8rxMc;kML+UZyxw2EX$9DoGXzr?%65sM z*SeW0E<#9zycvC(c$gl1f7H`Yu4xtNm(VH*(lvN$vFJ-xtJ;49Ce}og8VstZbyoPR zY{-4~G59I=Sob(Ah=2A-cT@flHVEG~C~K8pIoV_7#uwx7o=>#GOx=6Nu_7hFyK0O{ zKq0@Fs`!MgWpSjCAN8uhr4ubWmX^_VnTaC;a6M?sk1ux1sNQ^K}xOiS^2p^0;CrJaDcGx3Ola)-3XoAxSFhmVx~ z+W~43>T}w`iBc_J#k{ONoyLDfydrN#-+i=8f&;A_J)CM&Ne`U@I+g9Ks;By+?^?6p zSLJtN@qMCeNpe+te_vc}`Oe6&Q=NohC7BFB1crSE)M4bsDT-@7~65HJ# zYaAq%6)9!Yhc1Oaul+0;n`s%9_k-cnDb{LefX1VytGR6~W(>@obwO6jgMkj7;>Hx#NI@MM)VJDuv05|S*jM$uao6<#fZ3yxLh=*))F-r zo3Cy7O4Z8!l)~a1r9XDYd#W4{mia!@1C!%h;j^4t8W(ilj77qFWE9g%gf!Ua3sXqo z2ec#AV6(vRe>|O>qGmM;lH}>zR@*q%+QGjVEuj!DXW^+KA~V>s1TDYKpXA1#(D4e_SRVtz}54UGDd-W86HdbxgS<)oSQ9 zrmZa<9lZDS)8VrEg_JdgmM6^<%(Q@R0IB)f#A@pG^DHCF{b{sHavdbN_C73`@>cJ2 z1F?9)>oFb1=_{M&VghD~Tq;RzcNZysFyhb~pCI2yk64&4O>orH zf2W$ox~a<0GEKTDwxW06`MrB)L=-k6IGXT-uTDUqZLdVHFT%V~g-y3tbdz}my90Ee_dI|$}VOxA1-)pD@nL95Q;@$@GhwlM)-Zi zqjMyi-QK2>?8|rSSsaTpLLo8d)!tR5Gb)EREJVrg4pocB<<}=?M8wogX)L=V%H*)9 zuMDiR$d}72+I!)%nisc^D9raqH(vqtOYF)EdIP`w}V7>nVDlHAT< z&L>V$`SS$kI4d{u@Uvp9N*_f_5{0xzqN<&{tTMcrsudb@bO%MWgep{2)s~)6ixjT5 zQj0(y9}V#>9f}PjRXnYdCZuN$e;ZlQjuU8nODofhm0{_1R2GM}W(jGD5e+pgJ>nv$ zxvI4F-tlF$hlMwhvaO+0b%*a4X)&y*fx8h?hM^?HY4eGh*zl{)qLDKtGLJakg&PHT ztVWXcg>BZ}rRPhOVS5_9nwzciH(MUlmXXk@@`>*^shfmud7>?VAvt1=e=#y4=`|uv z%to&jDiLk+*+06JvLIEjSJ9U1W>--(TBzCx2>l?JX^Q?KnHS8aK1xy=cz1@;IE$%u zlcXP@Hwr`~prc6+p$%VEe|p0Ux}0G$>aToq(h*XcaFKObp?Wf8Qfo=mh|)xrTEaU! zT-FwYgr0U#OvP-hN8Fime<|svAS33cs}sugrNS&PH2oTztS?6DCLl|M-KsAvn6$E9 z;a8gnvMfqgi)A0Hy5=*p7m zQqp%@vVACVqPwDETUtS@)e>T7hF(Uo(<>4z#RSDUK<;rHjf=+3f7+(9`e}+Or%HvU zBUM6Nz1nOypJrz%q9T&6!c>UUiw?6AWGQj#SB0qVxeY{BVJfiFJdt68H=HUn(TEv@ zoF;5L!JFT};*(3rtTrG9nhK~cw8)ZDt<R1m9M~eT7~*&?dmUeOJY~ODi#tV=#wZ$>n4HBDf&h!b63N& zGuWe&93#MaVowj8GLuwqjJI4?6oiv!rl6*vrdx?Z9%^d#e{3?9=g343ZG4ElRij@m zBg(526QlBUMlCKmxVw<)5D}`bZ8%s~Yrxk$@cVkg~K;~=y@JRM929$i{Z4*OXigm%cL(id84S^ zgvLeh=)`$NyHhx;!4El+1bVZ$)SBBPsY4yJo z`!*_jw#%O~r$l#{a5qIB99mR*MY`V~1-#sif7j_pq&w*yqw|5+{s!3lv`ha0Hm67L zH@4jzdY=rRNVizN;eV7&PRb;)GQzP&B?)r+Jr+&Fbl|QOSQAY&Y1~RCp6Zk>wEe3J zXW6mVYJW*rbjU?9rx!Vj5?r+PEkl$=;KYcEtSl<$4~Bkl=iJRtn2#jk%Xpk3KQuaj ze-3brZI}{?tf4413hO39LscbL#bT7JdJ@zw2<+zYp$R6KiD4~XXt3r#catmZS$BtY z#Dzj496~vYrmEX;mCs|#gw(&AH&stn{Kc@MHEX(MJZ2dCEg*h!tZBjG`k*qczq%i z*4C!2VlLAYW_fY`Cg$y9y(CFt>h7>C(}R9}oEZbm9B$Z$^z%GF?543;x~20;f1{OJ zzKoh6GEBx+WFC_vJ`fy1E^t5@dUkgYc{!REB3`XdzU`EIuSujHAL`U?e$*yAaM+0S zhk1@347o(d+@U|8l*budU~Z-)n3OIb=_c+?MB3|WC|y}X5gL~f=Bw`pFG6gD%+F55 z;8hBBRfLB%J54>5pzqMc78jwUe~Ol(aW90vatd>azJSWG$E{yKaH>i*jV2VPN)ZVb zr8`Q*czx|kqU<7S5Ri_`3m3a7mrre>qc1t53UHmy^Kta7lM ztVyY?p%p?qhnQ@|b@Noc1%xPr>f)IZRg0P}y71-6hASCO;l%<`JsmiC#KIutD>z!k z{{RQMlA+v0OoT_?t96N9f9TSH{+2$oLj9!8C5MU^NL$Le5zYE(Yb}?#nvW|AzV*KM zMwE;6vHt*GYkO>uH4o^8(iXWT+?8gMCzHr@kk1RAT^nJDFQ57qcPON_%~odBJwnt_ zN9z$T^_%$?r2XVsfL=ioz Date: Fri, 12 Aug 2022 08:00:22 +0200 Subject: [PATCH 2/2] tjpgd: Remove ROM patches and tests. --- components/esp_rom/CMakeLists.txt | 1 - components/esp_rom/esp32/ld/esp32.rom.api.ld | 6 - .../esp_rom/esp32c3/ld/esp32c3.rom.api.ld | 9 +- .../esp32h2/ld/rev1/esp32h2.rom.api.ld | 3 - .../esp32h2/ld/rev2/esp32h2.rom.api.ld | 3 - .../esp_rom/esp32s3/ld/esp32s3.rom.api.ld | 6 - components/esp_rom/include/esp_rom_tjpgd.h | 152 --- components/esp_rom/patches/esp_rom_tjpgd.c | 976 ------------------ components/esp_rom/test/test_tjpgd.c | 89 -- .../release-5.x/removed-components.rst | 1 + .../release-5.x/removed-components.rst | 1 + tools/idf_py_actions/hints.yml | 5 + 12 files changed, 9 insertions(+), 1243 deletions(-) delete mode 100644 components/esp_rom/include/esp_rom_tjpgd.h delete mode 100644 components/esp_rom/patches/esp_rom_tjpgd.c delete mode 100644 components/esp_rom/test/test_tjpgd.c diff --git a/components/esp_rom/CMakeLists.txt b/components/esp_rom/CMakeLists.txt index 04d5cc0cd9..5938c3a823 100644 --- a/components/esp_rom/CMakeLists.txt +++ b/components/esp_rom/CMakeLists.txt @@ -18,7 +18,6 @@ else() "patches/esp_rom_sys.c" "patches/esp_rom_uart.c" "patches/esp_rom_spiflash.c" - "patches/esp_rom_tjpgd.c" "patches/esp_rom_regi2c.c" "patches/esp_rom_efuse.c") list(APPEND private_required_comp soc hal) diff --git a/components/esp_rom/esp32/ld/esp32.rom.api.ld b/components/esp_rom/esp32/ld/esp32.rom.api.ld index bc6fa83390..911cc17292 100644 --- a/components/esp_rom/esp32/ld/esp32.rom.api.ld +++ b/components/esp_rom/esp32/ld/esp32.rom.api.ld @@ -1,12 +1,6 @@ /** * ROM APIs */ - -/* user may provide newer version of tjpgd */ -/* so here directly assign the symbols with the ROM API address to make sure one from rom is correctly linked */ -PROVIDE ( esp_rom_tjpgd_decomp = 0x400613e8 ); -PROVIDE ( esp_rom_tjpgd_prepare = 0x40060fa8 ); - PROVIDE ( esp_rom_crc32_le = crc32_le ); PROVIDE ( esp_rom_crc16_le = crc16_le ); PROVIDE ( esp_rom_crc8_le = crc8_le ); diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld index 9c7d0903c1..d223ff6a95 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld @@ -1,11 +1,6 @@ -/** ROM APIs +/** + * ROM APIs */ - -/* user may provide newer version of tjpgd */ -/* so here directly assign the symbols with the ROM API address to make sure one from rom is correctly linked */ -PROVIDE ( esp_rom_tjpgd_decomp = 0x40000108 ); -PROVIDE ( esp_rom_tjpgd_prepare = 0x40000104 ); - PROVIDE ( esp_rom_crc32_le = crc32_le ); PROVIDE ( esp_rom_crc16_le = crc16_le ); PROVIDE ( esp_rom_crc8_le = crc8_le ); diff --git a/components/esp_rom/esp32h2/ld/rev1/esp32h2.rom.api.ld b/components/esp_rom/esp32h2/ld/rev1/esp32h2.rom.api.ld index 2bc1ceb462..7945722adc 100644 --- a/components/esp_rom/esp32h2/ld/rev1/esp32h2.rom.api.ld +++ b/components/esp_rom/esp32h2/ld/rev1/esp32h2.rom.api.ld @@ -6,9 +6,6 @@ /** ROM APIs */ -PROVIDE ( esp_rom_tjpgd_decomp = 0x40000104 ); -PROVIDE ( esp_rom_tjpgd_prepare = 0x40000100 ); - PROVIDE ( esp_rom_crc32_le = crc32_le ); PROVIDE ( esp_rom_crc16_le = crc16_le ); PROVIDE ( esp_rom_crc8_le = crc8_le ); diff --git a/components/esp_rom/esp32h2/ld/rev2/esp32h2.rom.api.ld b/components/esp_rom/esp32h2/ld/rev2/esp32h2.rom.api.ld index 2bc1ceb462..7945722adc 100644 --- a/components/esp_rom/esp32h2/ld/rev2/esp32h2.rom.api.ld +++ b/components/esp_rom/esp32h2/ld/rev2/esp32h2.rom.api.ld @@ -6,9 +6,6 @@ /** ROM APIs */ -PROVIDE ( esp_rom_tjpgd_decomp = 0x40000104 ); -PROVIDE ( esp_rom_tjpgd_prepare = 0x40000100 ); - PROVIDE ( esp_rom_crc32_le = crc32_le ); PROVIDE ( esp_rom_crc16_le = crc16_le ); PROVIDE ( esp_rom_crc8_le = crc8_le ); diff --git a/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld b/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld index 72156b74c2..22425ce3bb 100644 --- a/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld +++ b/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld @@ -1,12 +1,6 @@ /** * ROM APIs */ - -/* user may provide newer version of tjpgd */ -/* so here directly assign the symbols with the ROM API address to make sure one from rom is correctly linked */ -PROVIDE ( esp_rom_tjpgd_decomp = 0x40000864 ); -PROVIDE ( esp_rom_tjpgd_prepare = 0x40000858 ); - PROVIDE ( esp_rom_crc32_le = crc32_le ); PROVIDE ( esp_rom_crc16_le = crc16_le ); PROVIDE ( esp_rom_crc8_le = crc8_le ); diff --git a/components/esp_rom/include/esp_rom_tjpgd.h b/components/esp_rom/include/esp_rom_tjpgd.h deleted file mode 100644 index 318519ba74..0000000000 --- a/components/esp_rom/include/esp_rom_tjpgd.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/*-----------------------------------------------------------------------------/ -/ TJpgDec - Tiny JPEG Decompressor R0.01b (C)ChaN, 2012 -/-----------------------------------------------------------------------------/ -/ The TJpgDec is a generic JPEG decompressor module for tiny embedded systems. -/ This is a free software that opened for education, research and commercial -/ developments under license policy of following terms. -/ -/ Copyright (C) 2012, ChaN, all right reserved. -/ -/ * The TJpgDec module is a free software and there is NO WARRANTY. -/ * No restriction on use. You can use, modify and redistribute it for -/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. -/ * Redistributions of source code must retain the above copyright notice. -/ -/-----------------------------------------------------------------------------*/ - -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Error code */ -typedef enum { - JDR_OK = 0, /* 0: Succeeded */ - JDR_INTR, /* 1: Interrupted by output function */ - JDR_INP, /* 2: Device error or wrong termination of input stream */ - JDR_MEM1, /* 3: Insufficient memory pool for the image */ - JDR_MEM2, /* 4: Insufficient stream input buffer */ - JDR_PAR, /* 5: Parameter error */ - JDR_FMT1, /* 6: Data format error (may be damaged data) */ - JDR_FMT2, /* 7: Right format but not supported */ - JDR_FMT3 /* 8: Not supported JPEG standard */ -} esp_rom_tjpgd_result_t; - -/* Rectangular structure */ -typedef struct { - uint16_t left; /* Left end */ - uint16_t right; /* Right end */ - uint16_t top; /* Top end */ - uint16_t bottom;/* Bottom end */ -} esp_rom_tjpgd_rect_t; - -typedef struct JDEC_s esp_rom_tjpgd_dec_t; - -/** - * @brief Type of user defined input function to read data from input stream - * @param dec Specifies the decompression object of the decompression session - * @param buffer Specifies the pointer to the read buffer to store the read data. A NULL specifies to remove the data from input stream - * @param ndata Specifies number of bytes to read/remove from the input stream - * - * @return number of bytes read/removed. When a zero is returned, the esp_rom_tjpgd_prepare and esp_rom_tjpgd_decomp function aborts with JDR_INP - */ -typedef uint32_t (*esp_rom_tjpgd_input_function_t)(esp_rom_tjpgd_dec_t *dec, uint8_t *buffer, uint32_t ndata); - -/** - * @brief User defined output function to write decompressed pixels to the output device - * - * This function is the data output interface of the TJpgDec module. - * The corresponding decompression session can be identified by the pointer to the device identifier jdec->device passed to the 5th argument of jd_prepare function. - * The bitmap is sent to the frame buffer or display device in this function. - * The first pixel in the bitmap is the left-top of the rectangular, the second one is next right and last pixel is the bottom-right of the rectangular. - * The size of rectangular varies from 1x1 to 16x16 depends on clipping, scaling and sampling factor of the image. - * If the rectangular is out of the frame buffer, it should be clipped in this function. - * - * The pixel format is currently configured to RGB888 - * - * @param dec Specifies the decompression object of the decompression session - * @param bitmap Specifies the RGB bitmap to be output - * @param rect Specifies rectangular region in the image to output the RGB bitmap - * - * @return Normally returns 1. It lets TJpgDec to continue the decompressing process. - * When a 0 is returned, the esp_rom_tjpgd_decomp function aborts with JDR_INTR. - * This is useful to interrupt the decompression process - */ -typedef uint32_t (*esp_rom_tjpgd_output_function_t)(esp_rom_tjpgd_dec_t *dec, void *bitmap, esp_rom_tjpgd_rect_t *rect); - -struct JDEC_s { - uint32_t dctr; /* Number of bytes available in the input buffer */ - uint8_t *dptr; /* Current data read ptr */ - uint8_t *inbuf; /* Bit stream input buffer */ - uint8_t dmsk; /* Current bit in the current read byte */ - uint8_t scale; /* Output scaling ratio */ - uint8_t msx, msy; /* MCU size in unit of block (width, height) */ - uint8_t qtid[3]; /* Quantization table ID of each component */ - int16_t dcv[3]; /* Previous DC element of each component */ - uint16_t nrst; /* Restart inverval */ - uint32_t width, height; /* Size of the input image (pixel) */ - uint8_t *huffbits[2][2]; /* Huffman bit distribution tables [id][dcac] */ - uint16_t *huffcode[2][2]; /* Huffman code word tables [id][dcac] */ - uint8_t *huffdata[2][2]; /* Huffman decoded data tables [id][dcac] */ - int32_t *qttbl[4]; /* Dequaitizer tables [id] */ - void *workbuf; /* Working buffer for IDCT and RGB output */ - uint8_t *mcubuf; /* Working buffer for the MCU */ - void *pool; /* Pointer to available memory pool */ - uint32_t sz_pool; /* Size of momory pool (bytes available) */ - esp_rom_tjpgd_input_function_t infunc; /* Pointer to jpeg stream input function */ - void *device; /* Pointer to I/O device identifiler for the session */ -}; - -/* TJpgDec API functions */ - -/** - * @brief Analyzes the JPEG data and create a decompression object for subsequent decompression process. - * @param dec Specifies the decompression object to be initialized. The decompression object is used for subsequent decompression process. - * @param infunc Specifies the user defined data input function. - * @param work Specifies pointer to the work area for this session. It should be aligned to word boundary or it can result an exception. - * @param sz_work Specifies size of the work area in unit of byte. - * TJpgDec requires upto 3092 bytes of work area depends on the built-in parameter tables of the JPEG image. - * Thus 3092 bytes of work area is sufficient for most case. - * @param dev Specifies pointer to the user defined device identifier for this session. - * It is stored to the member device in the decompression object. It can be referred by I/O functions to identify the current session. - * When I/O device is fixed in the project or this feature is not needed, set NULL and do not care about this. - * - * @return - * - JDR_OK Function succeeded and decompression object is valid. - * - JDR_INP An error occurred in input function due to hard error or wrong stream termination. - * - JDR_MEM1 Insufficient work area for this JPEG image. - * - JDR_MEM2 Insufficient input buffer for this JPEG image. JD_SZBUF may be too small. - * - JDR_PAR Parameter error. Given pointer to the work area is NULL. - * - JDR_FMT1 Data format error. The JPEG data can be collapsed. - * - JDR_FMT2 Right format but not supported. May be a grayscale image. - * - JDR_FMT3 Not supported JPEG standard. May be a progressive JPEG image. - */ -esp_rom_tjpgd_result_t esp_rom_tjpgd_prepare(esp_rom_tjpgd_dec_t *dec, esp_rom_tjpgd_input_function_t infunc, void *work, uint32_t sz_work, void *dev); - -/** - * @brief Decompress the JPEG image and output it as RGB data. - * @param dec Specifies the valid decompressor object. - * @param outfunc Specifies the user defined data output function. The esp_rom_tjpgd_decomp function calls this function to output the decompressed JPEG image in RGB form. - * @param scale Specifies scaling factor N for output. The output image is descaled to 1 / 2 ^ N (N = 0 to 3). - * - * @return - * - JDR_OK Function succeeded. - * - JDR_INTR The decompression process is interrupted by output function. - * - JDR_INP An error occured in input function due to hard error or wrong stream termination. - * - JDR_PAR Parameter error. Given scale factor is invalid. - * - JDR_FMT1 Data format error. The JPEG data can be collapted. - */ -esp_rom_tjpgd_result_t esp_rom_tjpgd_decomp(esp_rom_tjpgd_dec_t *dec, esp_rom_tjpgd_output_function_t outfunc, uint8_t scale); - -#ifdef __cplusplus -} -#endif diff --git a/components/esp_rom/patches/esp_rom_tjpgd.c b/components/esp_rom/patches/esp_rom_tjpgd.c deleted file mode 100644 index 8e0b8d2713..0000000000 --- a/components/esp_rom/patches/esp_rom_tjpgd.c +++ /dev/null @@ -1,976 +0,0 @@ -/*----------------------------------------------------------------------------/ -/ TJpgDec - Tiny JPEG Decompressor R0.01b (C)ChaN, 2012 -/-----------------------------------------------------------------------------/ -/ The TJpgDec is a generic JPEG decompressor module for tiny embedded systems. -/ This is a free software that opened for education, research and commercial -/ developments under license policy of following terms. -/ -/ Copyright (C) 2012, ChaN, all right reserved. -/ -/ * The TJpgDec module is a free software and there is NO WARRANTY. -/ * No restriction on use. You can use, modify and redistribute it for -/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. -/ * Redistributions of source code must retain the above copyright notice. -/ -/-----------------------------------------------------------------------------/ -/ Oct 04,'11 R0.01 First release. -/ Feb 19,'12 R0.01a Fixed decompression fails when scan starts with an escape seq. -/ Sep 03,'12 R0.01b Added JD_TBLCLIP option. -/----------------------------------------------------------------------------*/ - -#include "esp_rom_caps.h" - -#if !ESP_ROM_HAS_JPEG_DECODE - -#include "esp_rom_tjpgd.h" - -#define JD_SZBUF 512 /* Size of stream input buffer */ -#define JD_FORMAT 0 /* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */ -#define JD_USE_SCALE 1 /* Use descaling feature for output */ -#define JD_TBLCLIP 1 /* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */ - - -/*-----------------------------------------------*/ -/* Zigzag-order to raster-order conversion table */ -/*-----------------------------------------------*/ - -#define ZIG(n) Zig[n] - -static -const uint8_t Zig[64] = { /* Zigzag-order to raster-order conversion table */ - 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 -}; - - - -/*-------------------------------------------------*/ -/* Input scale factor of Arai algorithm */ -/* (scaled up 16 bits for fixed point operations) */ -/*-------------------------------------------------*/ - -#define IPSF(n) Ipsf[n] - -static -const uint16_t Ipsf[64] = { /* See also aa_idct.png */ - (uint16_t)(1.00000*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.17588*8192), (uint16_t)(1.00000*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.27590*8192), - (uint16_t)(1.38704*8192), (uint16_t)(1.92388*8192), (uint16_t)(1.81226*8192), (uint16_t)(1.63099*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.08979*8192), (uint16_t)(0.75066*8192), (uint16_t)(0.38268*8192), - (uint16_t)(1.30656*8192), (uint16_t)(1.81226*8192), (uint16_t)(1.70711*8192), (uint16_t)(1.53636*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.02656*8192), (uint16_t)(0.70711*8192), (uint16_t)(0.36048*8192), - (uint16_t)(1.17588*8192), (uint16_t)(1.63099*8192), (uint16_t)(1.53636*8192), (uint16_t)(1.38268*8192), (uint16_t)(1.17588*8192), (uint16_t)(0.92388*8192), (uint16_t)(0.63638*8192), (uint16_t)(0.32442*8192), - (uint16_t)(1.00000*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.17588*8192), (uint16_t)(1.00000*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.27590*8192), - (uint16_t)(0.78570*8192), (uint16_t)(1.08979*8192), (uint16_t)(1.02656*8192), (uint16_t)(0.92388*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.61732*8192), (uint16_t)(0.42522*8192), (uint16_t)(0.21677*8192), - (uint16_t)(0.54120*8192), (uint16_t)(0.75066*8192), (uint16_t)(0.70711*8192), (uint16_t)(0.63638*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.42522*8192), (uint16_t)(0.29290*8192), (uint16_t)(0.14932*8192), - (uint16_t)(0.27590*8192), (uint16_t)(0.38268*8192), (uint16_t)(0.36048*8192), (uint16_t)(0.32442*8192), (uint16_t)(0.27590*8192), (uint16_t)(0.21678*8192), (uint16_t)(0.14932*8192), (uint16_t)(0.07612*8192) -}; - - - -/*---------------------------------------------*/ -/* Conversion table for fast clipping process */ -/*---------------------------------------------*/ - -#if JD_TBLCLIP - -#define BYTECLIP(v) Clip8[(uint32_t)(v) & 0x3FF] - -static -const uint8_t Clip8[1024] = { - /* 0..255 */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - /* 256..511 */ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - /* -512..-257 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* -256..-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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#else /* JD_TBLCLIP */ - -inline -uint8_t BYTECLIP ( - int32_t val -) -{ - if (val < 0) val = 0; - if (val > 255) val = 255; - - return (uint8_t)val; -} - -#endif - - - -/*-----------------------------------------------------------------------*/ -/* Allocate a memory block from memory pool */ -/*-----------------------------------------------------------------------*/ - -static -void* alloc_pool ( /* Pointer to allocated memory block (NULL:no memory available) */ - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - uint32_t nd /* Number of bytes to allocate */ -) -{ - char *rp = 0; - - - nd = (nd + 3) & ~3; /* Align block size to the word boundary */ - - if (jd->sz_pool >= nd) { - jd->sz_pool -= nd; - rp = (char*)jd->pool; /* Get start of available memory pool */ - jd->pool = (void*)(rp + nd); /* Allocate requierd bytes */ - } - - return (void*)rp; /* Return allocated memory block (NULL:no memory to allocate) */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* Create de-quantization and prescaling tables with a DQT segment */ -/*-----------------------------------------------------------------------*/ - -static -uint32_t create_qt_tbl ( /* 0:OK, !0:Failed */ - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - const uint8_t* data, /* Pointer to the quantizer tables */ - uint32_t ndata /* Size of input data */ -) -{ - uint32_t i; - uint8_t d, z; - int32_t *pb; - - - while (ndata) { /* Process all tables in the segment */ - if (ndata < 65) return JDR_FMT1; /* Err: table size is unaligned */ - ndata -= 65; - d = *data++; /* Get table property */ - if (d & 0xF0) return JDR_FMT1; /* Err: not 8-bit resolution */ - i = d & 3; /* Get table ID */ - pb = alloc_pool(jd, 64 * sizeof (int32_t));/* Allocate a memory block for the table */ - if (!pb) return JDR_MEM1; /* Err: not enough memory */ - jd->qttbl[i] = pb; /* Register the table */ - for (i = 0; i < 64; i++) { /* Load the table */ - z = ZIG(i); /* Zigzag-order to raster-order conversion */ - pb[z] = (int32_t)((uint32_t)*data++ * IPSF(z)); /* Apply scale factor of Arai algorithm to the de-quantizers */ - } - } - - return JDR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Create huffman code tables with a DHT segment */ -/*-----------------------------------------------------------------------*/ - -static -uint32_t create_huffman_tbl ( /* 0:OK, !0:Failed */ - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - const uint8_t* data, /* Pointer to the packed huffman tables */ - uint32_t ndata /* Size of input data */ -) -{ - uint32_t i, j, b, np, cls, num; - uint8_t d, *pb, *pd; - uint16_t hc, *ph; - - - while (ndata) { /* Process all tables in the segment */ - if (ndata < 17) return JDR_FMT1; /* Err: wrong data size */ - ndata -= 17; - d = *data++; /* Get table number and class */ - cls = (d >> 4); num = d & 0x0F; /* class = dc(0)/ac(1), table number = 0/1 */ - if (d & 0xEE) return JDR_FMT1; /* Err: invalid class/number */ - pb = alloc_pool(jd, 16); /* Allocate a memory block for the bit distribution table */ - if (!pb) return JDR_MEM1; /* Err: not enough memory */ - jd->huffbits[num][cls] = pb; - for (np = i = 0; i < 16; i++) { /* Load number of patterns for 1 to 16-bit code */ - pb[i] = b = *data++; - np += b; /* Get sum of code words for each code */ - } - - ph = alloc_pool(jd, np * sizeof (uint16_t));/* Allocate a memory block for the code word table */ - if (!ph) return JDR_MEM1; /* Err: not enough memory */ - jd->huffcode[num][cls] = ph; - hc = 0; - for (j = i = 0; i < 16; i++) { /* Re-build huffman code word table */ - b = pb[i]; - while (b--) ph[j++] = hc++; - hc <<= 1; - } - - if (ndata < np) return JDR_FMT1; /* Err: wrong data size */ - ndata -= np; - pd = alloc_pool(jd, np); /* Allocate a memory block for the decoded data */ - if (!pd) return JDR_MEM1; /* Err: not enough memory */ - jd->huffdata[num][cls] = pd; - for (i = 0; i < np; i++) { /* Load decoded data corresponds to each code ward */ - d = *data++; - if (!cls && d > 11) return JDR_FMT1; - *pd++ = d; - } - } - - return JDR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Extract N bits from input stream */ -/*-----------------------------------------------------------------------*/ - -static -int32_t bitext ( /* >=0: extracted data, <0: error code */ - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - uint32_t nbit /* Number of bits to extract (1 to 11) */ -) -{ - uint8_t msk, s, *dp; - uint32_t dc, v, f; - - - msk = jd->dmsk; dc = jd->dctr; dp = jd->dptr; /* Bit mask, number of data available, read ptr */ - s = *dp; v = f = 0; - do { - if (!msk) { /* Next byte? */ - if (!dc) { /* No input data is available, re-fill input buffer */ - dp = jd->inbuf; /* Top of input buffer */ - dc = jd->infunc(jd, dp, JD_SZBUF); - if (!dc) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ - } else { - dp++; /* Next data ptr */ - } - dc--; /* Decrement number of available bytes */ - if (f) { /* In flag sequence? */ - f = 0; /* Exit flag sequence */ - if (*dp != 0) return 0 - (int32_t)JDR_FMT1; /* Err: unexpected flag is detected (may be collapted data) */ - *dp = s = 0xFF; /* The flag is a data 0xFF */ - } else { - s = *dp; /* Get next data byte */ - if (s == 0xFF) { /* Is start of flag sequence? */ - f = 1; continue; /* Enter flag sequence */ - } - } - msk = 0x80; /* Read from MSB */ - } - v <<= 1; /* Get a bit */ - if (s & msk) v++; - msk >>= 1; - nbit--; - } while (nbit); - jd->dmsk = msk; jd->dctr = dc; jd->dptr = dp; - - return (int32_t)v; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Extract a huffman decoded data from input stream */ -/*-----------------------------------------------------------------------*/ - -static -int32_t huffext ( /* >=0: decoded data, <0: error code */ - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - const uint8_t* hbits, /* Pointer to the bit distribution table */ - const uint16_t* hcode, /* Pointer to the code word table */ - const uint8_t* hdata /* Pointer to the data table */ -) -{ - uint8_t msk, s, *dp; - uint32_t dc, v, f, bl, nd; - - - msk = jd->dmsk; dc = jd->dctr; dp = jd->dptr; /* Bit mask, number of data available, read ptr */ - s = *dp; v = f = 0; - bl = 16; /* Max code length */ - do { - if (!msk) { /* Next byte? */ - if (!dc) { /* No input data is available, re-fill input buffer */ - dp = jd->inbuf; /* Top of input buffer */ - dc = jd->infunc(jd, dp, JD_SZBUF); - if (!dc) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ - } else { - dp++; /* Next data ptr */ - } - dc--; /* Decrement number of available bytes */ - if (f) { /* In flag sequence? */ - f = 0; /* Exit flag sequence */ - if (*dp != 0) - return 0 - (int32_t)JDR_FMT1; /* Err: unexpected flag is detected (may be collapted data) */ - *dp = s = 0xFF; /* The flag is a data 0xFF */ - } else { - s = *dp; /* Get next data byte */ - if (s == 0xFF) { /* Is start of flag sequence? */ - f = 1; continue; /* Enter flag sequence, get trailing byte */ - } - } - msk = 0x80; /* Read from MSB */ - } - v <<= 1; /* Get a bit */ - if (s & msk) v++; - msk >>= 1; - - for (nd = *hbits++; nd; nd--) { /* Search the code word in this bit length */ - if (v == *hcode++) { /* Matched? */ - jd->dmsk = msk; jd->dctr = dc; jd->dptr = dp; - return *hdata; /* Return the decoded data */ - } - hdata++; - } - bl--; - } while (bl); - - return 0 - (int32_t)JDR_FMT1; /* Err: code not found (may be collapted data) */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* Apply Inverse-DCT in Arai Algorithm (see also aa_idct.png) */ -/*-----------------------------------------------------------------------*/ - -static -void block_idct ( - int32_t* src, /* Input block data (de-quantized and pre-scaled for Arai Algorithm) */ - uint8_t* dst /* Pointer to the destination to store the block as byte array */ -) -{ - const int32_t M13 = (int32_t)(1.41421*4096), M2 = (int32_t)(1.08239*4096), M4 = (int32_t)(2.61313*4096), M5 = (int32_t)(1.84776*4096); - int32_t v0, v1, v2, v3, v4, v5, v6, v7; - int32_t t10, t11, t12, t13; - uint32_t i; - - /* Process columns */ - for (i = 0; i < 8; i++) { - v0 = src[8 * 0]; /* Get even elements */ - v1 = src[8 * 2]; - v2 = src[8 * 4]; - v3 = src[8 * 6]; - - t10 = v0 + v2; /* Process the even elements */ - t12 = v0 - v2; - t11 = (v1 - v3) * M13 >> 12; - v3 += v1; - t11 -= v3; - v0 = t10 + v3; - v3 = t10 - v3; - v1 = t11 + t12; - v2 = t12 - t11; - - v4 = src[8 * 7]; /* Get odd elements */ - v5 = src[8 * 1]; - v6 = src[8 * 5]; - v7 = src[8 * 3]; - - t10 = v5 - v4; /* Process the odd elements */ - t11 = v5 + v4; - t12 = v6 - v7; - v7 += v6; - v5 = (t11 - v7) * M13 >> 12; - v7 += t11; - t13 = (t10 + t12) * M5 >> 12; - v4 = t13 - (t10 * M2 >> 12); - v6 = t13 - (t12 * M4 >> 12) - v7; - v5 -= v6; - v4 -= v5; - - src[8 * 0] = v0 + v7; /* Write-back transformed values */ - src[8 * 7] = v0 - v7; - src[8 * 1] = v1 + v6; - src[8 * 6] = v1 - v6; - src[8 * 2] = v2 + v5; - src[8 * 5] = v2 - v5; - src[8 * 3] = v3 + v4; - src[8 * 4] = v3 - v4; - - src++; /* Next column */ - } - - /* Process rows */ - src -= 8; - for (i = 0; i < 8; i++) { - v0 = src[0] + (128L << 8); /* Get even elements (remove DC offset (-128) here) */ - v1 = src[2]; - v2 = src[4]; - v3 = src[6]; - - t10 = v0 + v2; /* Process the even elements */ - t12 = v0 - v2; - t11 = (v1 - v3) * M13 >> 12; - v3 += v1; - t11 -= v3; - v0 = t10 + v3; - v3 = t10 - v3; - v1 = t11 + t12; - v2 = t12 - t11; - - v4 = src[7]; /* Get odd elements */ - v5 = src[1]; - v6 = src[5]; - v7 = src[3]; - - t10 = v5 - v4; /* Process the odd elements */ - t11 = v5 + v4; - t12 = v6 - v7; - v7 += v6; - v5 = (t11 - v7) * M13 >> 12; - v7 += t11; - t13 = (t10 + t12) * M5 >> 12; - v4 = t13 - (t10 * M2 >> 12); - v6 = t13 - (t12 * M4 >> 12) - v7; - v5 -= v6; - v4 -= v5; - - dst[0] = BYTECLIP((v0 + v7) >> 8); /* Descale the transformed values 8 bits and output */ - dst[7] = BYTECLIP((v0 - v7) >> 8); - dst[1] = BYTECLIP((v1 + v6) >> 8); - dst[6] = BYTECLIP((v1 - v6) >> 8); - dst[2] = BYTECLIP((v2 + v5) >> 8); - dst[5] = BYTECLIP((v2 - v5) >> 8); - dst[3] = BYTECLIP((v3 + v4) >> 8); - dst[4] = BYTECLIP((v3 - v4) >> 8); - dst += 8; - - src += 8; /* Next row */ - } -} - - - - -/*-----------------------------------------------------------------------*/ -/* Load all blocks in the MCU into working buffer */ -/*-----------------------------------------------------------------------*/ - -static -esp_rom_tjpgd_result_t mcu_load ( - esp_rom_tjpgd_dec_t* jd /* Pointer to the decompressor object */ -) -{ - int32_t *tmp = (int32_t*)jd->workbuf; /* Block working buffer for de-quantize and IDCT */ - uint32_t blk, nby, nbc, i, z, id, cmp; - int32_t b, d, e; - uint8_t *bp; - const uint8_t *hb, *hd; - const uint16_t *hc; - const int32_t *dqf; - - - nby = jd->msx * jd->msy; /* Number of Y blocks (1, 2 or 4) */ - nbc = 2; /* Number of C blocks (2) */ - bp = jd->mcubuf; /* Pointer to the first block */ - - for (blk = 0; blk < nby + nbc; blk++) { - cmp = (blk < nby) ? 0 : blk - nby + 1; /* Component number 0:Y, 1:Cb, 2:Cr */ - id = cmp ? 1 : 0; /* Huffman table ID of the component */ - - /* Extract a DC element from input stream */ - hb = jd->huffbits[id][0]; /* Huffman table for the DC element */ - hc = jd->huffcode[id][0]; - hd = jd->huffdata[id][0]; - b = huffext(jd, hb, hc, hd); /* Extract a huffman coded data (bit length) */ - if (b < 0) return 0 - b; /* Err: invalid code or input */ - d = jd->dcv[cmp]; /* DC value of previous block */ - if (b) { /* If there is any difference from previous block */ - e = bitext(jd, b); /* Extract data bits */ - if (e < 0) return 0 - e; /* Err: input */ - b = 1 << (b - 1); /* MSB position */ - if (!(e & b)) e -= (b << 1) - 1; /* Restore sign if needed */ - d += e; /* Get current value */ - jd->dcv[cmp] = (int16_t)d; /* Save current DC value for next block */ - } - dqf = jd->qttbl[jd->qtid[cmp]]; /* De-quantizer table ID for this component */ - tmp[0] = d * dqf[0] >> 8; /* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */ - - /* Extract following 63 AC elements from input stream */ - for (i = 1; i < 64; i++) tmp[i] = 0; /* Clear rest of elements */ - hb = jd->huffbits[id][1]; /* Huffman table for the AC elements */ - hc = jd->huffcode[id][1]; - hd = jd->huffdata[id][1]; - i = 1; /* Top of the AC elements */ - do { - b = huffext(jd, hb, hc, hd); /* Extract a huffman coded value (zero runs and bit length) */ - if (b == 0) break; /* EOB? */ - if (b < 0) return 0 - b; /* Err: invalid code or input error */ - z = (uint32_t)b >> 4; /* Number of leading zero elements */ - if (z) { - i += z; /* Skip zero elements */ - if (i >= 64) return JDR_FMT1; /* Too long zero run */ - } - if (b &= 0x0F) { /* Bit length */ - d = bitext(jd, b); /* Extract data bits */ - if (d < 0) return 0 - d; /* Err: input device */ - b = 1 << (b - 1); /* MSB position */ - if (!(d & b)) d -= (b << 1) - 1;/* Restore negative value if needed */ - z = ZIG(i); /* Zigzag-order to raster-order converted index */ - tmp[z] = d * dqf[z] >> 8; /* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */ - } - } while (++i < 64); /* Next AC element */ - - if (JD_USE_SCALE && jd->scale == 3) - *bp = (*tmp / 256) + 128; /* If scale ratio is 1/8, IDCT can be ommited and only DC element is used */ - else - block_idct(tmp, bp); /* Apply IDCT and store the block to the MCU buffer */ - - bp += 64; /* Next block */ - } - - return JDR_OK; /* All blocks have been loaded successfully */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* Output an MCU: Convert YCrCb to RGB and output it in RGB form */ -/*-----------------------------------------------------------------------*/ - -static -esp_rom_tjpgd_result_t mcu_output ( - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - uint32_t (*outfunc)(esp_rom_tjpgd_dec_t*, void*, esp_rom_tjpgd_rect_t*), /* RGB output function */ - uint32_t x, /* MCU position in the image (left of the MCU) */ - uint32_t y /* MCU position in the image (top of the MCU) */ -) -{ - const int32_t CVACC = (sizeof (int32_t) > 2) ? 1024 : 128; - uint32_t ix, iy, mx, my, rx, ry; - int32_t yy, cb, cr; - uint8_t *py, *pc, *rgb24; - esp_rom_tjpgd_rect_t rect; - - - mx = jd->msx * 8; my = jd->msy * 8; /* MCU size (pixel) */ - rx = (x + mx <= jd->width) ? mx : jd->width - x; /* Output rectangular size (it may be clipped at right/bottom end) */ - ry = (y + my <= jd->height) ? my : jd->height - y; - if (JD_USE_SCALE) { - rx >>= jd->scale; ry >>= jd->scale; - if (!rx || !ry) return JDR_OK; /* Skip this MCU if all pixel is to be rounded off */ - x >>= jd->scale; y >>= jd->scale; - } - rect.left = x; rect.right = x + rx - 1; /* Rectangular area in the frame buffer */ - rect.top = y; rect.bottom = y + ry - 1; - - - if (!JD_USE_SCALE || jd->scale != 3) { /* Not for 1/8 scaling */ - - /* Build an RGB MCU from discrete comopnents */ - rgb24 = (uint8_t*)jd->workbuf; - for (iy = 0; iy < my; iy++) { - pc = jd->mcubuf; - py = pc + iy * 8; - if (my == 16) { /* Double block height? */ - pc += 64 * 4 + (iy >> 1) * 8; - if (iy >= 8) py += 64; - } else { /* Single block height */ - pc += mx * 8 + iy * 8; - } - for (ix = 0; ix < mx; ix++) { - cb = pc[0] - 128; /* Get Cb/Cr component and restore right level */ - cr = pc[64] - 128; - if (mx == 16) { /* Double block width? */ - if (ix == 8) py += 64 - 8; /* Jump to next block if double block heigt */ - pc += ix & 1; /* Increase chroma pointer every two pixels */ - } else { /* Single block width */ - pc++; /* Increase chroma pointer every pixel */ - } - yy = *py++; /* Get Y component */ - - /* Convert YCbCr to RGB */ - *rgb24++ = /* R */ BYTECLIP(yy + ((int32_t)(1.402 * CVACC) * cr) / CVACC); - *rgb24++ = /* G */ BYTECLIP(yy - ((int32_t)(0.344 * CVACC) * cb + (int32_t)(0.714 * CVACC) * cr) / CVACC); - *rgb24++ = /* B */ BYTECLIP(yy + ((int32_t)(1.772 * CVACC) * cb) / CVACC); - } - } - - /* Descale the MCU rectangular if needed */ - if (JD_USE_SCALE && jd->scale) { - uint32_t x, y, r, g, b, s, w, a; - uint8_t *op; - - /* Get averaged RGB value of each square correcponds to a pixel */ - s = jd->scale * 2; /* Bumber of shifts for averaging */ - w = 1 << jd->scale; /* Width of square */ - a = (mx - w) * 3; /* Bytes to skip for next line in the square */ - op = (uint8_t*)jd->workbuf; - for (iy = 0; iy < my; iy += w) { - for (ix = 0; ix < mx; ix += w) { - rgb24 = (uint8_t*)jd->workbuf + (iy * mx + ix) * 3; - r = g = b = 0; - for (y = 0; y < w; y++) { /* Accumulate RGB value in the square */ - for (x = 0; x < w; x++) { - r += *rgb24++; - g += *rgb24++; - b += *rgb24++; - } - rgb24 += a; - } /* Put the averaged RGB value as a pixel */ - *op++ = (uint8_t)(r >> s); - *op++ = (uint8_t)(g >> s); - *op++ = (uint8_t)(b >> s); - } - } - } - - } else { /* For only 1/8 scaling (left-top pixel in each block are the DC value of the block) */ - - /* Build a 1/8 descaled RGB MCU from discrete comopnents */ - rgb24 = (uint8_t*)jd->workbuf; - pc = jd->mcubuf + mx * my; - cb = pc[0] - 128; /* Get Cb/Cr component and restore right level */ - cr = pc[64] - 128; - for (iy = 0; iy < my; iy += 8) { - py = jd->mcubuf; - if (iy == 8) py += 64 * 2; - for (ix = 0; ix < mx; ix += 8) { - yy = *py; /* Get Y component */ - py += 64; - - /* Convert YCbCr to RGB */ - *rgb24++ = /* R */ BYTECLIP(yy + ((int32_t)(1.402 * CVACC) * cr / CVACC)); - *rgb24++ = /* G */ BYTECLIP(yy - ((int32_t)(0.344 * CVACC) * cb + (int32_t)(0.714 * CVACC) * cr) / CVACC); - *rgb24++ = /* B */ BYTECLIP(yy + ((int32_t)(1.772 * CVACC) * cb / CVACC)); - } - } - } - - /* Squeeze up pixel table if a part of MCU is to be truncated */ - mx >>= jd->scale; - if (rx < mx) { - uint8_t *s, *d; - uint32_t x, y; - - s = d = (uint8_t*)jd->workbuf; - for (y = 0; y < ry; y++) { - for (x = 0; x < rx; x++) { /* Copy effective pixels */ - *d++ = *s++; - *d++ = *s++; - *d++ = *s++; - } - s += (mx - rx) * 3; /* Skip truncated pixels */ - } - } - - /* Convert RGB888 to RGB565 if needed */ - if (JD_FORMAT == 1) { - uint8_t *s = (uint8_t*)jd->workbuf; - uint16_t w, *d = (uint16_t*)s; - uint32_t n = rx * ry; - - do { - w = (*s++ & 0xF8) << 8; /* RRRRR----------- */ - w |= (*s++ & 0xFC) << 3; /* -----GGGGGG----- */ - w |= *s++ >> 3; /* -----------BBBBB */ - *d++ = w; - } while (--n); - } - - /* Output the RGB rectangular */ - return outfunc(jd, jd->workbuf, &rect) ? JDR_OK : JDR_INTR; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Process restart interval */ -/*-----------------------------------------------------------------------*/ - -static -esp_rom_tjpgd_result_t restart ( - esp_rom_tjpgd_dec_t* jd, /* Pointer to the decompressor object */ - uint16_t rstn /* Expected restert sequense number */ -) -{ - uint32_t i, dc; - uint16_t d; - uint8_t *dp; - - - /* Discard padding bits and get two bytes from the input stream */ - dp = jd->dptr; dc = jd->dctr; - d = 0; - for (i = 0; i < 2; i++) { - if (!dc) { /* No input data is available, re-fill input buffer */ - dp = jd->inbuf; - dc = jd->infunc(jd, dp, JD_SZBUF); - if (!dc) return JDR_INP; - } else { - dp++; - } - dc--; - d = (d << 8) | *dp; /* Get a byte */ - } - jd->dptr = dp; jd->dctr = dc; jd->dmsk = 0; - - /* Check the marker */ - if ((d & 0xFFD8) != 0xFFD0 || (d & 7) != (rstn & 7)) - return JDR_FMT1; /* Err: expected RSTn marker is not detected (may be collapted data) */ - - /* Reset DC offset */ - jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0; - - return JDR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Analyze the JPEG image and Initialize decompressor object */ -/*-----------------------------------------------------------------------*/ - -#define LDB_WORD(ptr) (uint16_t)(((uint16_t)*((uint8_t*)(ptr))<<8)|(uint16_t)*(uint8_t*)((ptr)+1)) - - -esp_rom_tjpgd_result_t esp_rom_tjpgd_prepare ( - esp_rom_tjpgd_dec_t* jd, /* Blank decompressor object */ - uint32_t (*infunc)(esp_rom_tjpgd_dec_t*, uint8_t*, uint32_t), /* JPEG strem input function */ - void* pool, /* Working buffer for the decompression session */ - uint32_t sz_pool, /* Size of working buffer */ - void* dev /* I/O device identifier for the session */ -) -{ - uint8_t *seg, b; - uint16_t marker; - uint32_t ofs; - uint32_t n, i, j, len; - esp_rom_tjpgd_result_t rc; - - - if (!pool) return JDR_PAR; - - jd->pool = pool; /* Work memroy */ - jd->sz_pool = sz_pool; /* Size of given work memory */ - jd->infunc = infunc; /* Stream input function */ - jd->device = dev; /* I/O device identifier */ - jd->nrst = 0; /* No restart interval (default) */ - - for (i = 0; i < 2; i++) { /* Nulls pointers */ - for (j = 0; j < 2; j++) { - jd->huffbits[i][j] = 0; - jd->huffcode[i][j] = 0; - jd->huffdata[i][j] = 0; - } - } - for (i = 0; i < 4; i++) jd->qttbl[i] = 0; - - jd->inbuf = seg = alloc_pool(jd, JD_SZBUF); /* Allocate stream input buffer */ - if (!seg) return JDR_MEM1; - - if (jd->infunc(jd, seg, 2) != 2) return JDR_INP;/* Check SOI marker */ - if (LDB_WORD(seg) != 0xFFD8) return JDR_FMT1; /* Err: SOI is not detected */ - ofs = 2; - - for (;;) { - /* Get a JPEG marker */ - if (jd->infunc(jd, seg, 4) != 4) return JDR_INP; - marker = LDB_WORD(seg); /* Marker */ - len = LDB_WORD(seg + 2); /* Length field */ - if (len <= 2 || (marker >> 8) != 0xFF) return JDR_FMT1; - len -= 2; /* Content size excluding length field */ - ofs += 4 + len; /* Number of bytes loaded */ - - switch (marker & 0xFF) { - case 0xC0: /* SOF0 (baseline JPEG) */ - /* Load segment data */ - if (len > JD_SZBUF) return JDR_MEM2; - if (jd->infunc(jd, seg, len) != len) return JDR_INP; - - jd->width = LDB_WORD(seg+3); /* Image width in unit of pixel */ - jd->height = LDB_WORD(seg+1); /* Image height in unit of pixel */ - if (seg[5] != 3) return JDR_FMT3; /* Err: Supports only Y/Cb/Cr format */ - - /* Check three image components */ - for (i = 0; i < 3; i++) { - b = seg[7 + 3 * i]; /* Get sampling factor */ - if (!i) { /* Y component */ - if (b != 0x11 && b != 0x22 && b != 0x21)/* Check sampling factor */ - return JDR_FMT3; /* Err: Supports only 4:4:4, 4:2:0 or 4:2:2 */ - jd->msx = b >> 4; jd->msy = b & 15; /* Size of MCU [blocks] */ - } else { /* Cb/Cr component */ - if (b != 0x11) return JDR_FMT3; /* Err: Sampling factor of Cr/Cb must be 1 */ - } - b = seg[8 + 3 * i]; /* Get dequantizer table ID for this component */ - if (b > 3) return JDR_FMT3; /* Err: Invalid ID */ - jd->qtid[i] = b; - } - break; - - case 0xDD: /* DRI */ - /* Load segment data */ - if (len > JD_SZBUF) return JDR_MEM2; - if (jd->infunc(jd, seg, len) != len) return JDR_INP; - - /* Get restart interval (MCUs) */ - jd->nrst = LDB_WORD(seg); - break; - - case 0xC4: /* DHT */ - /* Load segment data */ - if (len > JD_SZBUF) return JDR_MEM2; - if (jd->infunc(jd, seg, len) != len) return JDR_INP; - - /* Create huffman tables */ - rc = create_huffman_tbl(jd, seg, len); - if (rc) return rc; - break; - - case 0xDB: /* DQT */ - /* Load segment data */ - if (len > JD_SZBUF) return JDR_MEM2; - if (jd->infunc(jd, seg, len) != len) return JDR_INP; - - /* Create de-quantizer tables */ - rc = create_qt_tbl(jd, seg, len); - if (rc) return rc; - break; - - case 0xDA: /* SOS */ - /* Load segment data */ - if (len > JD_SZBUF) return JDR_MEM2; - if (jd->infunc(jd, seg, len) != len) return JDR_INP; - - if (!jd->width || !jd->height) return JDR_FMT1; /* Err: Invalid image size */ - - if (seg[0] != 3) return JDR_FMT3; /* Err: Supports only three color components format */ - - /* Check if all tables corresponding to each components have been loaded */ - for (i = 0; i < 3; i++) { - b = seg[2 + 2 * i]; /* Get huffman table ID */ - if (b != 0x00 && b != 0x11) return JDR_FMT3; /* Err: Different table number for DC/AC element */ - b = i ? 1 : 0; - if (!jd->huffbits[b][0] || !jd->huffbits[b][1]) /* Check huffman table for this component */ - return JDR_FMT1; /* Err: Huffman table not loaded */ - if (!jd->qttbl[jd->qtid[i]]) return JDR_FMT1; /* Err: Dequantizer table not loaded */ - } - - /* Allocate working buffer for MCU and RGB */ - n = jd->msy * jd->msx; /* Number of Y blocks in the MCU */ - if (!n) return JDR_FMT1; /* Err: SOF0 has not been loaded */ - len = n * 64 * 2 + 64; /* Allocate buffer for IDCT and RGB output */ - if (len < 256) len = 256; /* but at least 256 byte is required for IDCT */ - jd->workbuf = alloc_pool(jd, len); /* and it may occupy a part of following MCU working buffer for RGB output */ - if (!jd->workbuf) return JDR_MEM1; /* Err: not enough memory */ - jd->mcubuf = alloc_pool(jd, (n + 2) * 64); /* Allocate MCU working buffer */ - if (!jd->mcubuf) return JDR_MEM1; /* Err: not enough memory */ - - /* Pre-load the JPEG data to extract it from the bit stream */ - jd->dptr = seg; jd->dctr = 0; jd->dmsk = 0; /* Prepare to read bit stream */ - if (ofs %= JD_SZBUF) { /* Align read offset to JD_SZBUF */ - jd->dctr = jd->infunc(jd, seg + ofs, JD_SZBUF - (uint32_t)ofs); - jd->dptr = seg + ofs - 1; - } - - return JDR_OK; /* Initialization succeeded. Ready to decompress the JPEG image. */ - - case 0xC1: /* SOF1 */ - case 0xC2: /* SOF2 */ - case 0xC3: /* SOF3 */ - case 0xC5: /* SOF5 */ - case 0xC6: /* SOF6 */ - case 0xC7: /* SOF7 */ - case 0xC9: /* SOF9 */ - case 0xCA: /* SOF10 */ - case 0xCB: /* SOF11 */ - case 0xCD: /* SOF13 */ - case 0xCE: /* SOF14 */ - case 0xCF: /* SOF15 */ - case 0xD9: /* EOI */ - return JDR_FMT3; /* Unsuppoted JPEG standard (may be progressive JPEG) */ - - default: /* Unknown segment (comment, exif or etc..) */ - /* Skip segment data */ - if (jd->infunc(jd, 0, len) != len) /* Null pointer specifies to skip bytes of stream */ - return JDR_INP; - } - } -} - - - - -/*-----------------------------------------------------------------------*/ -/* Start to decompress the JPEG picture */ -/*-----------------------------------------------------------------------*/ - -esp_rom_tjpgd_result_t esp_rom_tjpgd_decomp ( - esp_rom_tjpgd_dec_t* jd, /* Initialized decompression object */ - uint32_t (*outfunc)(esp_rom_tjpgd_dec_t*, void*, esp_rom_tjpgd_rect_t*), /* RGB output function */ - uint8_t scale /* Output de-scaling factor (0 to 3) */ -) -{ - uint32_t x, y, mx, my; - uint16_t rst, rsc; - esp_rom_tjpgd_result_t rc; - - - if (scale > (JD_USE_SCALE ? 3 : 0)) return JDR_PAR; - jd->scale = scale; - - mx = jd->msx * 8; my = jd->msy * 8; /* Size of the MCU (pixel) */ - - jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0; /* Initialize DC values */ - rst = rsc = 0; - - rc = JDR_OK; - for (y = 0; y < jd->height; y += my) { /* Vertical loop of MCUs */ - for (x = 0; x < jd->width; x += mx) { /* Horizontal loop of MCUs */ - if (jd->nrst && rst++ == jd->nrst) { /* Process restart interval if enabled */ - rc = restart(jd, rsc++); - if (rc != JDR_OK) return rc; - rst = 1; - } - rc = mcu_load(jd); /* Load an MCU (decompress huffman coded stream and apply IDCT) */ - if (rc != JDR_OK) return rc; - rc = mcu_output(jd, outfunc, x, y); /* Output the MCU (color space conversion, scaling and output) */ - if (rc != JDR_OK) return rc; - } - } - - return rc; -} - -#endif // ESP_ROM_HAS_JPEG_DECODE diff --git a/components/esp_rom/test/test_tjpgd.c b/components/esp_rom/test/test_tjpgd.c deleted file mode 100644 index 673d91a358..0000000000 --- a/components/esp_rom/test/test_tjpgd.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include -#include -#include "sdkconfig.h" -#include "unity.h" - -#include "esp_rom_tjpgd.h" -#include "test_tjpgd_logo.h" - -typedef struct { - const unsigned char *inData; - int inPos; - unsigned char *outData; - int outW; - int outH; -} JpegDev; - -static uint32_t infunc(esp_rom_tjpgd_dec_t *decoder, uint8_t *buf, uint32_t len) -{ - JpegDev *jd = (JpegDev *)decoder->device; - printf("Reading %d bytes from pos %d\n", len, jd->inPos); - if (buf != NULL) { - memcpy(buf, jd->inData + jd->inPos, len); - } - jd->inPos += len; - return len; -} - -static uint32_t outfunc(esp_rom_tjpgd_dec_t *decoder, void *bitmap, esp_rom_tjpgd_rect_t *rect) -{ - unsigned char *in = (unsigned char *)bitmap; - unsigned char *out; - int y; - printf("Rect %d,%d - %d,%d\n", rect->top, rect->left, rect->bottom, rect->right); - JpegDev *jd = (JpegDev *)decoder->device; - for (y = rect->top; y <= rect->bottom; y++) { - out = jd->outData + ((jd->outW * y) + rect->left) * 3; - memcpy(out, in, ((rect->right - rect->left) + 1) * 3); - in += ((rect->right - rect->left) + 1) * 3; - } - return 1; -} - -#define TESTW 48 -#define TESTH 48 -#define WORKSZ 3100 - -TEST_CASE("Test JPEG decompression library", "[rom][tjpgd]") -{ - char aapix[] = " .:;+=xX$$"; - unsigned char *decoded, *p; - char *work; - int r; - int x, y, v; - esp_rom_tjpgd_dec_t decoder; - JpegDev jd; - decoded = malloc(TESTW * TESTH * 3); - for (x = 0; x < TESTW * TESTH * 3; x += 2) { - decoded[x] = 0; - decoded[x + 1] = 0xff; - } - work = malloc(WORKSZ); - memset(work, 0, WORKSZ); - - jd.inData = logo_jpg; - jd.inPos = 0; - jd.outData = decoded; - jd.outW = TESTW; - jd.outH = TESTH; - - r = esp_rom_tjpgd_prepare(&decoder, infunc, work, WORKSZ, (void *)&jd); - TEST_ASSERT_EQUAL(r, JDR_OK); - r = esp_rom_tjpgd_decomp(&decoder, outfunc, 0); - TEST_ASSERT_EQUAL(r, JDR_OK); - - p = decoded + 2; - for (y = 0; y < TESTH; y++) { - for (x = 0; x < TESTH; x++) { - v = ((*p) * (sizeof(aapix) - 2) * 2) / 256; - printf("%c%c", aapix[v / 2], aapix[(v + 1) / 2]); - p += 3; - } - printf("%c%c", ' ', '\n'); - } - - free(work); - free(decoded); -} diff --git a/docs/en/migration-guides/release-5.x/removed-components.rst b/docs/en/migration-guides/release-5.x/removed-components.rst index 7d32006a84..9506d0b38a 100644 --- a/docs/en/migration-guides/release-5.x/removed-components.rst +++ b/docs/en/migration-guides/release-5.x/removed-components.rst @@ -20,6 +20,7 @@ Following components are removed from ESP-IDF and moved to `IDF Component Regist * `coap `_ * `esp-cryptoauthlib `_ * `qrcode `_ +* `tjpgd `_ .. note:: Please note that http parser functionality which was previously part of ``nghttp`` component is now part of :component:`http_parser ` component. diff --git a/docs/zh_CN/migration-guides/release-5.x/removed-components.rst b/docs/zh_CN/migration-guides/release-5.x/removed-components.rst index 1050593192..47adafd2cf 100644 --- a/docs/zh_CN/migration-guides/release-5.x/removed-components.rst +++ b/docs/zh_CN/migration-guides/release-5.x/removed-components.rst @@ -18,6 +18,7 @@ * `sh2lib `_ * `expat `_ * `coap `_ +* `tjpgd `_ .. note:: 请注意,http 解析功能以前属于 ``nghttp`` 组件一部分,但现在属于 :component:`http_parser ` 组件。 diff --git a/tools/idf_py_actions/hints.yml b/tools/idf_py_actions/hints.yml index 5651c4a2db..f03f2e0d0c 100644 --- a/tools/idf_py_actions/hints.yml +++ b/tools/idf_py_actions/hints.yml @@ -191,3 +191,8 @@ re: "Failed to resolve component '(?!esp_ipc)(\\w+)'" hint: "The component {} has been moved to the IDF component manager or has been removed and refactored into some other component.\nPlease look out for component in 'https://components.espressif.com' and add using 'idf.py add-dependency' command.\nRefer to the migration guide for more details." match_to_output: True + +- + re: "fatal error: (esp_rom_tjpgd.h): No such file or directory" + hint: "{} was removed. Please use esp_jpeg component from IDF component manager instead.\nPlease look out for component in 'https://components.espressif.com' and add using 'idf.py add-dependency' command.\nRefer to the migration guide for more details." + match_to_output: True