From abb03b8dc44f510c7e2f85ebc1a61c4b156a9e48 Mon Sep 17 00:00:00 2001 From: Armando Date: Tue, 21 Mar 2023 16:15:13 +0800 Subject: [PATCH] doc: added memory management programming guides --- components/esp_mm/include/esp_cache.h | 6 +- components/esp_mm/include/esp_mmu_map.h | 4 +- docs/_static/diagrams/mmu/enclosed.png | Bin 0 -> 14663 bytes docs/_static/diagrams/mmu/identical.png | Bin 0 -> 14613 bytes .../diagrams/mmu/inversed_enclosed.png | Bin 0 -> 21220 bytes docs/_static/diagrams/mmu/mem_pool.png | Bin 0 -> 12108 bytes docs/_static/diagrams/mmu/overlapped.png | Bin 0 -> 16221 bytes docs/doxygen/Doxyfile | 2 + docs/en/api-reference/system/index.rst | 1 + docs/en/api-reference/system/mm.rst | 177 ++++++++++++++++++ docs/zh_CN/api-reference/system/index.rst | 1 + docs/zh_CN/api-reference/system/mm.rst | 1 + 12 files changed, 187 insertions(+), 5 deletions(-) create mode 100644 docs/_static/diagrams/mmu/enclosed.png create mode 100644 docs/_static/diagrams/mmu/identical.png create mode 100644 docs/_static/diagrams/mmu/inversed_enclosed.png create mode 100644 docs/_static/diagrams/mmu/mem_pool.png create mode 100644 docs/_static/diagrams/mmu/overlapped.png create mode 100644 docs/en/api-reference/system/mm.rst create mode 100644 docs/zh_CN/api-reference/system/mm.rst diff --git a/components/esp_mm/include/esp_cache.h b/components/esp_mm/include/esp_cache.h index 800e886569..af51a18ed7 100644 --- a/components/esp_mm/include/esp_cache.h +++ b/components/esp_mm/include/esp_cache.h @@ -41,9 +41,9 @@ extern "C" { * @note You should not call this during any Flash operations (e.g. esp_flash APIs, nvs and some other APIs that are based on esp_flash APIs) * @note If XIP_From_PSRAM is enabled (by enabling both CONFIG_SPIRAM_FETCH_INSTRUCTIONS and CONFIG_SPIRAM_RODATA), you can call this API during Flash operations * - * @param[in] Starting address to do the msync - * @param[in] Size to do the msync - * @param[in] Flags, see `ESP_CACHE_MSYNC_FLAG_x` + * @param[in] addr Starting address to do the msync + * @param[in] size Size to do the msync + * @param[in] flags Flags, see `ESP_CACHE_MSYNC_FLAG_x` * * @return * - ESP_OK: diff --git a/components/esp_mm/include/esp_mmu_map.h b/components/esp_mm/include/esp_mmu_map.h index 33d3396441..75f37f4040 100644 --- a/components/esp_mm/include/esp_mmu_map.h +++ b/components/esp_mm/include/esp_mmu_map.h @@ -47,7 +47,7 @@ extern "C" { * - the to-be-mapped paddr block is overlapped with an already mapped paddr block. * - the to-be-mapped paddr block encloses an already mapped paddr block. * 2. If the to-be-mapped paddr block is enclosed by an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the already mapped paddr corresponding vaddr. - * 3. If the to-be-mapped paddr block is totally the same as an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the corresponding vaddr. + * 3. If the to-be-mapped paddr block is identical with an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the corresponding vaddr. * * - If this flag isn't set, overlapped, enclosed or same to-be-mapped paddr block will lead to ESP_ERR_INVALID_ARG. */ @@ -77,7 +77,7 @@ typedef uint32_t esp_paddr_t; * - ESP_ERR_NOT_FOUND: No enough size free block to use * - ESP_ERR_NO_MEM: Out of memory, this API will allocate some heap memory for internal usage * - ESP_ERR_INVALID_STATE: Paddr is mapped already, this API will return corresponding vaddr_start of the previously mapped block. - * Only to-be-mapped paddr block is totally enclosed by a previously mapped block will lead to this error: + * Only to-be-mapped paddr block is totally enclosed by a previously mapped block will lead to this error. (Identical scenario will behave similarly) * new_block_start new_block_end * |-------- New Block --------| * |--------------- Block ---------------| diff --git a/docs/_static/diagrams/mmu/enclosed.png b/docs/_static/diagrams/mmu/enclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d5563b705755b0f46ee165a33645948e3a93f8 GIT binary patch literal 14663 zcmbt*by!qi+wP`ILZqZqQBt~N7`ml91PMV-120cmMzkQM<41f;v9VQ6ON zY<}N+zH_eg$GP73oPU_vdzjg4ueG1&xu5&KSG10nGBF`7Apiixsw&W@0D#E>z8}KJ z1pmq`cshVDSRN2neSCcU*=6k|@bJE;qOqr*+jCDJo7eV$!%H_;dmfKxukGz$dN{gy z9$`TAybufBkd|-WM7zRIIbH@wE^cT zl}dRSlVSIJV`5cq+n_J(PQN!A4EYJne2;TGhZU_kod@(Nws>l`L!o28-|DnR6j#Hr zCnM-cm8vIe3bV49B+nBIEQp*I1&1nyX)Xg$DnHvdrBAYaM$&zJ>Nn%;GK%s!Yq%A} z3B%von{-)!-TkuDoUjVON=xmD0p_%!^rHJDkwXa*33{9q`UWZNCFLQmvthwgUaqsL z?9pWWA|gecY8Dm@%T~G+Nx)DIKAKZ5)m~8-im9ZmtSz}$r^Cs9%r{iSJ;aJ}86ZQ3 zAI1A_r#aQWr1Y@>082_rau=h=$NrIE3y@tAcjM!Rvc92VIoTM#cOQUN?j)%|h5o*I zdl_I^=f~OEu=nO*L#>3=syZB^#&$?8iK5b;pFPbL$^z$7#}4q|z%$q_ zkP|&2tG9W_Uh+E@;>m7caJ0Q;uYANF{V=B>cm~FsWk3tqE5G>9W76TiLHaj|D1Un*G?(rh*%y34|W5r!c`#Ns?e+|A7T_4m(EF^OtaHl~#J zFTsc>@=#n~zE%1)dMV1+Iu&i{%JEs`pIKQkvYF}#!Z~65o%h(We~nvIz2xM0$ch!` zWeUtE^a`3uQ5xpwy!3|9=x^m%E}M=doGrbW}r;wQEc{ zJlguEni?8wCvWl_(z7jFx-Krn;0#3S6BLSfPfrfHEzX2Ke*8#t|2|96c>Qp8??l4t zuXW_=>T1u`FU-yzY-zThhP?n8Z6TsOy*O|U+(*`O{rc`ZSf_>5c!xu}UeUvo)TD!> zjKRpSDHj|OE7)}`p^Q|K<7g9d#OP08(4$zd8`mluk!|qG&vgCe!=;-1w#%BIhC;L0 z%)~fV(VW@Ei~=7UA0r&H{8Mn0A`7#jCfALM^=OHbg@bh2-B>6lPh;yLwo3AvSc2;; zn7s-p$uS?B*v!bzllIk=A053)f;|-^ACZT9j&zB?4|QfHW7eWnNRRTmBP?MErrv>2 z?xBxmo?Jxv=M*z!m=ub-6pHKs(jS+L2WY{HE_$}f%1X;W89f_cTIwl!_j@jT;z;E|m;(J;mv_F=n+xcfI47c@hGcI>W{}m%K1U@kI{ly*^Qapjn=}QuW`Ff^- z=Xij3&LJ|=K7@maI_A*&)DW8E&YkP4=abAj|V*GDFrF!ol1brRh z662_lA2RQlUMj(4zRp6xHSLLHUW=UxT%2xbG?+=o@fIEu}obwiXyq(Lof{ zrm%(u<)=sPG<)tHt#yyeXXv^;7-9}7w=T(0>C{KoaCgPk2%9t6wm`y@Zze;KCbe@m zUq2nTu}y{;kqQ~dq_B;}&c$N$1f0QOZP}9uF zwOy)(G1B#j<*_=s%DS}f6MkttN`lX;1Un@iWAsv$R!JCgGQ4%>B&pK!d9bFWPyyaL zRzUGrL0CvJ-X|^mT;z}^5 z{aqK8e)edRORRK~M+#k2p&ic|!#y-Q=Q~14DpiY&Ss!u>SPS8jLI0BUKWN>3>vr=r zZ^}yd!_%)Zyx=rQK%|h}ALtBCM!`vet!P>4VUJ;Mk)3LUkXn$KCR()}{@o)rZ)?>u z*coZM=<8pEkWTJMzHHvT2?u9ov}1)%yRGncD&*%WB@@(=vHd%a@IuC``Vd#^nnR;a zNB7HGf%|c6e2f04mqa^%N5s)FZc-L3}3EL}%PF7jz^}y>MLnWLennd~>$S@?Pwx>WgR8R@a?e z%0t;p7^=y3(*ZjrnY@z0%iqI?_}b4xsE;p55Yj}7<%f@wL#;C&obf%5T@{P4iBclE z#d{axx;;HTP?1c^_?1ZR8!;2A8QGwy0vvkr*K2>OpH=RVxDYD%?#;I-TbwVAXVQMB z%N}Ujhodi?6_6b0!(BIzrckU|5N?W)u8}M>K4?XC=}s{Ox+sXz+(BQmDO>m;y6U^? z&l$M6IvFqFrm(A1p92{&KljmRnTFU#bM5_JK5kCN)%J=07l$5;CX|-dm(hU*O`$CZ zW>!oKhkw58>^B7}`VQ}5;q~WSX3~mnEdaNf>kPx z2(d9Azbrg^7Ps-b1KBv-!PI`7)5qYmxED{H>9e|(ahT!SLb@?Gmzn75;`j%FXen}% zX?sNf@{jxZeyI4A*L=wEY5eS2Q{~Ra$(x&I1t@PC8!wp>K8S7hyF$mOTpzD%9g2lR zSki{>jx+QRZk~jJXgHFDf%RtdBY~^p3&{liOe-_TE9dL7dHw;&^7LPoX@rA2aS&_^XybG-PnlHlrKtw zmu+{A|Cq^9bg|f2aW~hdJJg>ffpIQyG2&_|qh*nkBKu0iclbPLuem8?n0Q&Zk+fA@ z!q44$Hp9JpBji)2zn@=Xq zC-`~xJb0<)J|6A%(nNHJ)m&qHd(i5=f^{u-BN4ElBK*pE_n^1i9_fY8Gn7_S~)6DFV zCag@l$>7tnGTQcwgO~f;@ymmB2n~$0fy7B%qd7}@hCo{d-`-T|LgYph54eIgALOnZ zgd;?yQfJ$m@`6s}MuauT8B=uZJUs>FAhSkG99wd8i4m_g~%-c^PCo+BJ7H zyMBaxAnJFx#QFHmNwg;MvfaU2Q0V1uGw*?@9`Yo}BmX?}wCibQoXj_oZ_98t<%RuA zec$1EH!98SPR|+eS~f$$#>&CRo5XaDF3yf~4WkT!?$YhEk|X}-nUCDA!3SRC+s3uq zhqKHO%~Rq`ycl?mzq$glC}i#)T{l;Qln+h8*3y1|_8-B&Brc^^)vr#j{2c$(%=XfA zw=C|0&-LxU+C}ZpPSPw~Kr4R|$YhVASJa75`^UY{Q*jsE67+s_>Fu05nQ{wUR*|7{ z@*HZ?uhA~sV})=>AzIh%NHQ9-7g~;?$Zf%uC*OU97ITqks@5Y~O?uPI_)f&n!u@gvlu~K*GjiDS$<%t#XaS-N@ zJAU}Z;Z)`3qFUVt>-po~Z1*-8^X~IGCh53z2k$n$X<}CerZr4SdjZHGcHQ}zvg<3B9q4_Lg}jfol9!)FRWikD>Me%lP6Ehz zf7wL&pthB+Il%w4zWpHkqbBJbnt&xyT4UfrfL^opQp@J%DSwOs7u z_Dfgwhj@|Kt1Lj9FGIi?XiHac}x@))R4pfO(OcKUK0RWy{#;ke6DecmOZDzwx4v!SX z?cpDajJDXN*!X=FAQ<{XS#QqK8+$AdSK68WT#iu;xD#9ANec8i|fqW zXD8b3-uj~s(TQx@vG`qgH?w~0y86?Ljk@DfuAQ9i-K|j?C6W30g%qcku9F$2?|;os z3xB4IK+P>8Cx#`xKoa3|I3!oN_-SJ0om?M58pXGJ#R0K_r~KV%YC| zQTm(c3!3!ygtJN(Hf(@w3<4xg>N|WsNIj6^QwjHdA@F+^epHLZrAc3CfO;62eh|{6 z6LoB3*b7WA&m%3I@wd#n+)ovsIH&tHiC(foEBSAEp!J9p-?y0>1(!a;2J(vR?yVIJ zYqG!wGEU)ALc*fDNB2st7Rh(qqMeeU#o4=i2Ol#8xH>M^+BCP%ilV4A&%z|G{7r@M zg$r?8o*^r^sQF~jLtt5x`6F^#tMQp*f^x@ghvqTUeDuhIp^C6FBrox1&}X?!a$hTq zIa$RqP_?3vZ!F_4zE?k+Df@!V$1TTLM^MoDK@r|$uc6)Mhc>!|WlTL>dBY1gl- z60USQnrwG0Oa9gxomYj%{6vbmNNVG>Qi?lDW7Gl@mh|h+$hCiz(R&o2G}B+ea*cw61mt? z7?B_8(qqBXuIO0&t=3#zUlu&0oB*-0Y~99Evyuh-uj}1 zU{w5R2)x=ZHmZUXnRZ`Xe9Py|AD-6hD2^|VEKp9w4VAY&saoGkc{luATNdfLvgg2q zIk&PJMnKweJ%2#OO957%hsFi+c{*aR*9J@+vJ`#4+%<){&Vr3|ej;@WH}fs^G&dk` zpi8k*P`4_Uuo_jV$C0yMZ4$mU3wv5c0)g!`_b5AQV_cXRumc^0%rb*34z5WUL8%Yh z?_j{9qod`RnaP(fO%{YSuiz`G_BfarE4F2&w0Ce7)uGpTFt8^N(C<$is{^Sj#o|QF zsO<}r>4f_CNT+`>RJpcY8IClOP+a3}1)3$YS5adp0a1VPMz`yL z87vC*GbrXEe7z3PMrX%zt0r^#o_*Ui*GB7^=jAI2G=CK*3SGP^Jrkot9mJlOwN~+AXi~n@Pi`J z#Y!v)w!K4$lr!fAn+(eR($ua-c|LYqVaG07{*AnL&;mz-0#;8AX_5zvAWJ_A| z={sy>_+LuZ@Bx^qpObYNE*x`zy4Jzn{m>)l`jZOGK@g9Pp z7_VIhbtwM)4@`hUk>$=IHUaX_PX(dBkARk5GTe{2JuUwEIm8r;jbjzn_!!wNJ>mo6 zVh*p}k8h$aaVo#v%`|g4)m3N1Ype-knYiTJ{xo5DuW~2G7G7(l%n|t|5C=b$mQOzX zp>cgHVZA|HYvG+LE!ZYv2IrPu9K)1>iVt*9TmQ%W)c+*2ek(+hfKQwL6$K$qehsyH z2sFhIur^6u6>BoD+~sU=&&452F;BrC*gQ#QXOQ;OXNP6)JHdJ$?&;N>o_S0qi=?4 zG_dbA)G*gD%vO_43kV31lSC>K>uQYaQ-nuRcJsgO%2i=h8fblU5@kK%B~2b3r6jG* zpEDY3NcwoE@YTiPa&Ihk?9DjQRyyXN(TFY4XBivS&-$sjjhT-VMTx+qC=W+~#MVt9 z?SD@5{&&RHr#aGaMV?$r*)XdnfAOUQxIx_@_H5}9?9eJ22FU}HjX1-L4gxIBRLK;E z8rSQl&1|#Ams#wpvyE z+$WX2IV?z&QM>T5m=e;2MA(~PVPS=#l^NfJy{mq`{v$xf>M2(;i)p;H|C!5tGi4c$ z`g1*Gm1+HtnsP#;XGL+I5`nX>jdul1O-)^9gO;`%`{}v%xiXALNd+37s$ynja?mKX$b zM$3%T)b%TE_o@f(E<|lVX9ROU;R|Vhr(dWiI$M?$rKOK!Sjk~10u1A34gH0&VHFBR zlUCoOhq9Nd1_snTreOl9JZ7mX>;N-u{L0EuOZSia^-B2r)Np2H90Z|=*A)D}X)sGEPzKH@*k*AV2QAQY^c*GGQ|E=89J@MAhy zN+J@ksCmuB1Vz-+E|S%GyYRWWuxbm+gFo2JdJmdSlRe(14(GIV)WvVAZ1LQFniLFl zlJ&+Ki-Z9%Eeuwu#nkB?T^DV+IqWTe{07oow`5OQnxFFU_z&%a0L&=^ibXWq;;9OA z{9VJH->t}j8I>soSmVWmCD4WoXTR`?dYe$tVJOp`J9ngx2iWG+6@-2uUB2ZIyOU(o ziVp<;zYyrXnEu?WIRsQaF-l2eSU+Dp$&K9FuBY+6DxNAv_)XyI%wn#P<&go0MwbRw zn4|D}D|yYQkFreT??U_!=}!^bG`^N#WRA$+e$*97uV0PI;iP!o8&9Z)$2`*p67Hjh zgvNYI^pLd5;vguhSZkO&sqmF5hVEX+qUpsQ2jmZ9a=u_!$pgc)D+Q zLS(gw|x10=q0jo6}ou^n7oMig_|9_ zYjSN-05l6_Q1Q?HbiSBKC~j3-qW`>1{~70}$V2`ceZZYQ@{4eHj0oJuJ&H4dhk~V! z9P_ItCJUgQa(1vSpUiHnNfeH$JFPyInzr_)63Eic-!3GAYCkljiP5Gm7K|YS*2v-G z#S$go0qJp+^s_&Lkmm+K`v_PFeIKvonyL!j%X;k2Y6C;Qj1Cok*q(i=&X&L%U3|FSztkdF98g+IjWWEqDQ#HVq66*sUAenb~Q~lE`2?H8$qn3lxMYqd_UB@eun1ZG04VE(Uljh8$r)c}ixtIDYTdn~^Tk$9U42ju)w+f0NjhqrRI` zs8O`9Ji*5r7b1A{jft!&rkeNID#k167Nkog2#Sb2r&02{I(kf=(pU!o1M9CrFz~ATf3MTya6*3pvipyaJd`QB|&6C0Ow3i zySI)EhuGNK<~w6#KY}4~qA0(*O6H8-yEe(w`3MdYY#at^eu`hnujhi2wSCqd@h`mQ z-+tAmDS?6(Lm&9cn8hnjX*_9A)tr?1>*SHVmK!tS z3|%k1^&!Boptw5au0_&h<6J_WwA<-_8jxqRZla>1Trscby{6{fyNQ9XJ_ieCZf%sr z-urU|K*DOdRR^QhbbFxxvuA98)XiacqSSHJPIH-I#nr-jdt|}RWJRX)Ml)}QYO?+$ zy3(S>1;qH*FRZR-xT;z)f$^U@Xb_+2O$Mt*u&Z(zRdRDZn2A3|=ugPEqtZdnrm~ANL znbE&rxif;WN?vZ>Z}!^ZhZXbCUUh)&gX?V2Q7^T_)gpLyh_B-gFl7}SIQ=3LHC1KB zciaJDn3nx!A`htN9%1-*;VJX+$;k)D!9zTatvAO*`D8O7+E@+-`(QvWj1xd05K>oL z1*N6rkE~55fByL*1@+neBOkVPygoz}{yi}WQBcDYgYwy%36GW1>&uq*f7!ApLZ5X% z-)G^?W~o7$`P6*%Gv#SA9ALKLwp+FIT@JTbpwP3IA`$h#=JJ%{t|j*ESi)Q|t8~DZcNE5Auz@xFE^weiGH10N4XHxPs+k9h8!5 zsAF>!?W-$yR^qcO&Vx9TnHEdnMjSkSD$J}Bwn2Uoe+~4{^>Qpc(Wnu)`1iO zKAh&LuqV)qlM{xY?aihQKX=Hm*(`*zhH&xg^;HEUUm&WSOr;oe9u$D-HcoIvhr%9> zLZ)jJmB&?ASA*+8KU6!ujS#xe#>Q6FdQ8YDouu+pYWVVG6Av>a8C>&2a&z}C96f5+ zjJS}HklR7r;+_%lO?m?ZP*4!?f*1Yx%DwZQi0{)z2Ya{IyhBbP6`S2my#ksExus0X zBvW4cR|C!2{pwSpdKxeI;B3@mfr$EWw{~>p?=U#L8E{#?%2-iA8eBp8gXREJ5ZO|B z4Pw&Uj)wx0X8xLBBX=M;Pv@7ACPhAQ__wSIwISM(E*soFAiJ@&(B?lB!MSl!m}Y4@ z*|F2?)_T+zf`!Mf`j{^N$d^8LlaxV1Uj$lw8Qj4lA&B$*2MrSwy62&cu9X$(I;5@~ zeNLGV#+79oZD_#rD9q0H+A=0aM#Y?J(`3@;a~}34jC6GO!oRrA4yEx~HG4k7hj?0B z%YDGiCQsfDm3BQyWNs8!49`Ij4_t#EVCN8cT4qIgxfvt^ zvIjpuz5S2O54~eLx`8t7ytF*R;$-(fxZtA;Glm}*rOmMax*`Z2W7&F6i6GQp$q`{T zgiTsS1KOl=mhvB8=Yf*6Xl&`afq)-mGWhH!?d>O;tZs2*fm?rvK0|+=K{F+ymL0$P^srHJBJofN)^q>8!>FUZXK9IbDkU z`$`=3!#xN!=S%{OY$9X-V2oX9j$;tSg^-HiVE~!WU)=(bCMlp2YA+{$;q zNp-)gDpMFKF4Gyk6bqp^-lh^s>1{7W-eeh1593CH;7;mSVQ)P?XFU0^)Yh1zHij7V zgP)B&Q^h;W5Vf_t>!}Ei&VungrHkU0iVsjj3wldc7##OyHM<_jc)%vLH}Un~VR}g7 zb#V=e;n}2mfDWC&A$iIH!ICuprNSbwjn*bJc$H6~wHcv{ zmm@w~3=B6v@`;obi167iCyp3D&)P(=VZn3HP27O1^p!e zY`-v%ldxf&>^}Gn!f?!a=kHz?&1n(bLt!8VwQWh8u!@a|(VT|+3I_vb9E^~IGWXF) z&o{XGz1bee14e^HdOTb2l3}`sE8>R#xS9^|^&kWIJO3&3Hy8b~l{;61@BaVXL&BQx zIVrx|3gwd!z37Vi@$}Y0D4_AqO5{D|QS{wJ!Yl}3_-tW#bSG0NWYYJ$9x}fHpg&J;7!@ZPV&=+(SIz<3EB98*y zk{UuW%8jmO?7(T-CL1Tidss<-KBTmDtZ|ZD4~+ z?1I@3=hZ{S4C1`LgKo*YT`^N1$>gs4Pg#nvKt$_1TB_CIItzVlTLZ73z6=No2r&1I zKm7YEPbrP+nOE}w0BDR$dGCI7{2(LGxxlMf@No~yOGy|GG79y8xeWy7K=`M@l_mn@ z-Ux5$u90+leXy487TyI(*2tsX!la>fjqy8?-S*0XTZK>l+l`qMnpej%Gx>EO^L_a%rzPkV^mn3(0Dlc!bkMlO_I5&O7>9`JfAK#t z2NfH`nGXdz8%IG)*)0L|aj$0&(6eCA{T?K8Ypeq~*8iuT>+emjRwh9E?#VwQQf$AyXDM(P7%l6lh?nB zEwsxfb*s9X-qtafZk|hYw~Pk-aOP&Rvq;u3{jxFN9j(6cHm)?T581>7BOjXQK=|p7 zxQh9Tn!uM-eC&~~rzFprnmq@#J4BB72G41v7TY}qZ-%P&6Vh@>1gZFuQ=1m{H#wsF zFH6@bax>_6(L)@;)aX(49C;v<_?NMB+B!B`o?oK0oQChCr9O;&UV3ZhUX(75Lv60s zi71e?pIZu!l3Jo|s^n4~8_AS8TJ=Js3W#U)L!WYLWPU^*)#v!3)H_;t$bV~dW8zA% z$R)Ek+YlJ4r!XAP@#GrE8_at@C6`-_i^31FRV{G*U?~@ng%5mudSXoFQUu{DU&odv zK0Jm$2@qJzb(A16$Oy&62#YKcSE2u|ho&Fw8q;*iz;oy5y8po<=Pi-m{7(pp*5A6l z^Q6$nA|&KI*bR!Mg=rC`rD2hfYB2mm*tM&^8rTuAr&rSVz5gVn^W$4rv(1pF#rH@^~{&-Zq)jD4<`>`mZHy-Tlc-kQ$l$Q-?Obb5A3DFfEl#^YaQm?8hY+T zPCWIWCG_0$Jw-HPBm>ML)&xViFzzmW(b{*R?Zi)Nba?H+#qf!ru6{o6gfTZYyKa;K9FT z`#1L`Zl)7)9np*Mh%5NVr9j8)p-pYBSNr+*{g?(;Z@S7R|8eSV;Orc z+cb~UNxj%jBQmb9W>(*($|_{>SWGu`X?U;ob|l_h^mQR&JARdZj_|2F zbIwvQ5tY1oe|mlJ=j!k?Rog@1kGl+vE{ngVe@{?oowZ&&#BO4vAKg7mjnKF|!{2iP(PxB8ko z8js+OqFUF?G-{s2h4o*kFtH$~EMm#Sm{6cIs?qzwv(IJ`HXk$aD;+iKMHK;7o|4K1 zN9EClk&ch_YUgKmNSO^ggpa0PzjbD`4{MrHU`1iO`zi@#HdSui;9>$gX#W0$LU0$v>y3||i*Ac&4l3mr zHqOG0HU99M4ye{GZgr=xkR%Om<*9u3d@;p(_m^P$AX)&SVHgW#g-7K%#AJFGRh9Yk z69Hd~%BosgS_H?&C)26+#3Cx`qDR_2A4ndrBu+Z)U(79%XoAnIo2q=j^#j3Aj5mW7 z!M*_oy$ntFBW$$D^!B~eZKTOd_~N0g8QG8KIYEa?ol2Ww6~mi)F*eEH;}fEH0G*DK zV$q5Dd8s-0q`!(MCr@ekd(z#&(|FN^+vYS6)xMv~34HKQKmYhQeR;+Iq&%Bt0Zt?q zeU{0F{BQ5VQ$LRv9@_!+8>t%_rEQW~!f_hG%E}$7F44-#6`I=zsMEyATI)OKb&X!d zufUxZWOC&dEeuax=eyrNBlZ${IO8XX8&;P~^>(a)A+8()RNbCjCd+t^o>?5wOxF;- zu!}$MSOVK6_RF@Cv)}Jt+C}=$O5he$RKyqN`Kk+yEl$I8p2WE{x3qDM&&`wzyEc!xvtBqMkJSHe_psh1t~@^ z2$L$JmaE=HtCFi?j$iwVZ0d~vYzV$k~mt7%;!AH3-j8JzcE zxnLbCtIu^3#sABIh{Jkb(Y?48*w}L5W~x( zVeFv=;j16XhGnb&ctSeUD@gP#(;Pj>I~SVsJ{%H&55m6PNoG&6RrLHEAme5-xm}#Y zE09}Uz@H?~f!WvJPpQZv;vgk&i-V7m;*QvYTk~_y+&CTSluJLjBPDHDI}JMfLwPIv zQp!z%Y8b#TAW-87&o3>$hp8h{@yl!8MZ|y7#35ShSF~v~V9N{qX^?*M5dcSp!c}peGNBk#L zg7xvkJ!n>vgCd=w|AeE?JOXTXg?$W&zI>*tQo_h)lrmZhGcWk7#MOkItz2dA$5Cb! z9ehPTwGv!<{|MY)^rS~zO!W1yf*fK-T%sR8-b&xW#|o&c9{{-EQkid}idz1#b(M)2 zC$mFLfw_XjIQl& z>bXk$^vma-sVom@tsgzzr2kxu1#V{=kiXx0R%qHFtWBzi)W_h}0i7wV2o}fZr|~Jp z5!3#Q`h#$;yE;U|F;zWif>%%L8~Pl9?a`5Q$;F1KTZ>zxDwo3YMW75V+!jUF!TUwh@dUsG{ubQw|H7ZHOicb92SV z;;aPax)W@WHOZ{cg(P7#yw6jJ0>wUXFGME9l%)-of~Z{vd6iFC|DO&5b6#a5avSlF zjxr5zm>&n;>Hf;ib!!ohe#!^#?y(?Hr2AMD-D}PY?w|VL2S-(t#~hOO78k^px=Wv$ zrG~G&uwr=f(D?D+!74j@ZkzD{xpjKGpM|^YDPJ=O!CgR1?R*ThA3%u(=S#5x`u-=H z@5w+n_tCD;lo!tss}>nfR4O&7ma}3ndH&0wWbl)Nby|uJFGa0f(ZTjs)n?5z4%E~? z!vq+dvj>@nYE*!|4hV*4`MsnV6o=~fD83i4`gH_OKAo|6g2LRBCr>$4^M{5AFnTH) z*yZX_I&oeS>D&93&?rc?&wCZQN8ih2vT%Rkn|!^4|f)?5PL(s?KvdOUG{>EUJRW(8O~IXhbMx<7ZbvT|~_arQuC zc1QyNEASX5r|X@*o#C4Nbjp7<5dE0`^OC@`;0G8wrIkGT?rtkQj?Z|b9kIzvIk0Qh zMYwtTYx3}G9LM3cLf!Z0m$8DC=d#B#1>OuJu#9z;-#@mom-Btwm0p9V;mbZg-y@r3 zSm65wGiG(z+d*o*t*{~R;?XF5><;?NTWg2km(qcqhQ|ww=L_cnGNz9o9N+D8Wdwkr zmo>I?^`om#^r)JV4kGFkL^vU)Pnia)92tO%fWT=IK&xbmKDK{%*JWCNu0CzJU=eLV znQxCfR1H6gLm9r$=O$pYu(a%2-Ounpnt}OcjdGD&eB>l!!Twadv40A~`2G90h{Ja% zK^SaL?`Gr3HmktJfFOz87zc#ZI~Msj03d>tg_)U|1PjCTDMM`d=<2NlhHx?>9K}BZ z3gO}5FeX5DqE?xM-R_-6rCCL^J}I{0dto6Vjtz^sqr_WEB95~hQJVbOwOAjAU)Ib} z^6~>h^s#+?eTj)=+J5D7OY}eKO)lvv7ns8>X~T_Dc1H#Th=$w#8ka&Yl zr^uzP#YV>RZh{Gp_niRfHKNngTVHO(3kBxtBdJ*Xn|l;Rm3?sM@p>(pe8OxKcg`rR zBjH#s63{a_zd%>YvaAtVn+#lbm7tL<2(}Bc8~7?$CqA23^q7TW=hu93WmME&Bk}&4 z5U0r@b>K1`NkW?r1sv;?)Z`}bYzH-{Ps(X0Lr@c5&=;bKW`VHgtB`vZ{Ac++xSye{ zhpG|B<8RCY|Em!WTAc6w10%Z=( zHC{J!_j;EMMxiF27G>COyp2d&ZC3vA$D>AfFDMDyX&*^ zOMod$Lwie>(1lkL_9t)eeuN^EOE7}OB;@90uN$&MutFMzfPbTud68`%1MQjD*T&5! z*2aYf5{)CvNW;dd5(u&nj}cn*ay}tA@tU;!NDOhe^%pk};iRYcE}%_qQSLahr30%o z*1D5C`)_-VV>IIUw)$Vt@cp-bYu&#OzF!FTk_J1u|LMQ!^b2nf%Gp*-SmELxUd~*H zJ+4iL;&zmkQN3fdcs3yUc-Gu+a*n_i$Cgc5_{ z+R)J;DL4*7zJ7?>0m_mpVI>~H2QJTE%hg}mvjQO#JiWq$;Hz;~_)|Tp%k>1mK=4FMfl0ztBi ztld(CDat~OvC;69k`HXPeVE&lFwL=g$JrEky}r(ie(eHV5*>^apI6Xh!T%a3KNtU3 z&G(Nvv)i(I_2WShA}Of02_Q*nCMELz@|Jc%nv7kZKZW&U-rX_P3pw`m1*!zQO{)`D zCLi1FmXH$j**7E$$Kkm`pRmW%&(OX89Ew|Wq3EW&L*20oX^*5Qfzv=4JSY{l6G0|kiB8% zQ`atXC+C$FPp4*82g>Ej<<@F&$_g;!9KG@q=CKNG>qZTXLzcv-k zf9kSQx^ykWKgLqpDvZF)XM$?uu53v47v5^5Zx*rKZAZ1diVi6aLU0!slRxHX($HMo z{$`FPuHZvC=7mAD08Z5PtvtGwqjk+7UCe3L>1;6tO2vow+v=54n78&e+^`F?aZ;{2 zsy&D8c6+1m&DDd^(s3>h3^l|(&^km>jO|ARNgRq%CctFcQ@g~ zn_b!TX6==6*`vW8A~tccxc!Zi3i7gXeDabAjEzHaWLI_Rw0U3#{BQgfh`@&&`dki+ zE^@566PKguOQqblAF|9Gr%XGLU|=aVY`^}wG>+nz_MRBw?de+Dy=`#0M;fprhKrt| z|8cmKjuIQu>}bUfo|YC|1%GQxohH`o`gow_i|<}}S#H)vzi4^;3o%;8`RdJ~b8}C| zftkSh-FjaVKGWx;BfPm?OApaM>Q}q6zP;zW7*v;NAi|9hb#6N<&uZNe>wnUs)DW<( zIN)kGx=`onu}Kps*x(oJSYjY?azf+fNJoqlA&PEYPo%L2oA7+oKBA%>)ow4rX$T&_ zxfUs@^TN?*2^lXVm+4#c&Rrj;Sg*qfdj!7DYA;^T7nZ-4_p+;LQszlYg8=?MlJ|@9 zqidRvF0xGj{ETH89ezad*~Y5C0kHW+$BXwXl>qoUlDsP8;)xjIA555LzWhBgEqTyg zg3B@*N>HTR?t}RJ;WNjBn!TdxqwWWbYQryeQt2>b#$kd_)Tv$`+VL=aRIx5N)IU~{ zPQ4RDrE&^0bh)3KuCAs_{)Eajin(T!(CNMMMyGgES`Iu`VEwGgtxkNuZY@6Q z`ke9}D(G)mta(YhyCCKD14<~z{ZXaQLmhWa^+~=Br_6n7{IJ}Xor@&Xsg;8*!#iXj zdGtEDQ)++0#C7>bgUvFF0+u$Ix?@R$B|0w3=AYhLR`z>lCuqi_VK86dW=TKZ^cf~3 zc@Z~Med_vwFF97nQd}r=sP|Tm%e@T#-xJ!ChMx=HiW*FW6}^B-CZ-lWvyseFhsozC zv!|&l6d6JQ%!T8bA1BrL`UDd`cd|75x|i2RDlT828E7DlNr1nZ+I~=C0a=w{qvzNz zm%(u!6c4O6h_G`wS(JXG^b=l1)rc`L@Y1>#SNd!<_y4w#96?ljScXG+hI zm1d4@VVDXN2g>(mXN7XBK9$>kETBUg)(W#{YQ%;?0JF1YHIBL=?%z=#PmII$r%IlD zUL#*85AE!f&CQ^gtQ-6uY2R^7^!@Y`ng9e0milQf9E@r|@8<6b$mSx&&ML0|^oKo% z3hL}_OitEPYrH_X(xzpMq})lIEK7@2KFd*{@0^1GwKK)ck6WH^&?X`*L%Ws|{Aj7%&Q=9(VCbjsc2aKVVe|hVY{wSpgScM%C;A zs7hY{mnTn*C7DB%CCO4#@5r-Pg+=KGp6#Tu_&*jsP_bk;h>S1PXg!UJFUL6WC{5yOt zHX8yGV!?}2d^TiSiM$WMZ?7!-a3|8=!gM_S>ABp|`f|T%HIRceb^O44t}reK79h@& z!OTK9Af22V_q%XE5*qp>Z2U!ILR5IqUa7R%*TUJw#XimgPWdMkr!zY=gj|IxNz3x$ z)Fg^e`drGB8m%pPsTzYt?+j5WVjBabBKiu9s&kpIbnAR_hK!=o1 z*~LD3?(N-Zze(@Ma?sr!Ji01zzEu->(t9kIR`9sj%jZOTt*NPrm_Z~|ex9ONNd4?Q zd-KqT70TMqN7qsI;iP-HCxR5*a53JLm&HB`xstZ&5eV+eR%U)VI5q}#{qP7xzOa+0 z?(0~ahs`#J*`B?gHa5zWUG>|yl;Rv_Yadf)naSGXFX5XY|6qUv&d|h!k&ce6ZhB<+29BKj(@f4%#wHwQ&p(F;XtX%H(FLQqW? zz5b(RCwPL%gVdaBUZIyc@2Y3y4|@-H`{+WGlAfTP=L?mtySp*2LiuSUY3v(QzHNFU zLQrD8B~+5PRlbV~rKvw_6bh)B34QL#P>R|qHD(m;5{dg}$Dpf6WrRCZAA3X$00U}; zM&>5W)~VPKB5eY9SstWZFDV52E;@&;p8ys{ z)O&8U*ia?_q!9dkd{N&L;z)r4+gETj^yZiyA$Dow!=V)lXE7ifX)}hA_t1eBhfTH_ zYy?3uv zo;cHUX2F-=esj!5=>5XDXY?QaBDsz^OqnB&h2OdBgk)qHv2cPK_UMjnCkb2#8Cw1zoY?Rj3wnUux6x0uv!|{PPdj$b&q! zLSB$$!HAEjSd85%>t2;~CBa998>Q`b4;oXZn44am%(jR#I^DD1`!&#B`Gc@mY z#G(u1!0V%e;auM%{)P@CHw_BouWnKwqp9_m&S7U1F{r&yu>*GZJ zomoL~Mxr>Uwxdkzl$h7EyngLRC~;$~~dUBt3T$G}|O8Jh~-TZ)si^ouTOMu6&a+&^IhqcGF|2cZL?)84=c3b=jVLy+(i zW}z>#dStHWp2{y?O@1~!(JdTLotgB|n>KHC-a1`eJQjWAfzV}Sng5tk^m9ckRc$pU zl1_cPP6x-$m&K0`_1^tS&gVZ4Y;>c;lyAGd+a;4;Zw9;^5g^*vU-8)X!*R$k+;Mp> z>3_W#>U6SC!k_+%Fv~Qnh40|P-DX+A!4LXFFmtr`*7BgCc$TW&L>R@>#nFIWg9?Yy zUr(xBxXH5ytq~9U-Xg1aXTaq9e0qL=P>RcH8PkGx%1$pr`A>V`Yt;EPZwggfdXbuD zFBoaHxG6sd`ZKeT-hPnk{j-+E?uNFq7NRB1R~M(~XW80(uASR9P0_}`!zNxXyHBy0 z)TsNC^ZLD&XV3%Saf&Gc1WM1z)Mb`C_s=%Z)^2Z;NQW2LHV<}NH{%j!eTP+jm~<;L zJo({uIk0$oHo;^XYsZroqnKOeedkGO{bP@c8#Z0aYd!M#NXuKO_E)_%3A3bOnSROC zm#+s0FBn;qmHSHai`L!5s(72Xi_7@m{mFOZco##SQ)}nB&Xp_PvbFX_Vu37RJK-F+ z*|?5iSy}8y^==og>Z#vjOyK)l9_j*urm9qj`k%9lo(O|O!#GLd%lB$_XX@QQcSoFM7+!|? zahiW4@~;<5%!rJO&l3Cjr#=4q+nS8VOI5v|vAa)FO@tq267kpUo-UV(F8T{nOTY8G zb6;8y$wo;M5xm5_C**+%5cS}Nb>~2X%y@oAO*JDg<6WynK_#IEC;g!WOQ@Isrn57{ z)lOkRSr4IgYS`!qsWPvhd~VBlm5w-d90zBeZdL7;z}fkc^wqHUZHoBN+#-4Ir+4yt z#;SKuds{{&(0?k{e3>885oYziaAo}SS()483Kt#DFL@E0!4_o5Zut|1RC}12p|Uw+ zD8{I+X1D&?V>fYe{xUaCosUwrzhtJ$TVsi=7wn#No$qa>52Piys@%z2Qd~ie;gzGQ zsPNi=uKR%OP*{$=mQ8-aC(M_bpF$kxZn$q_Ph{H0&V+@e7aF}dXSs|L)36!fy>?%j z#)p6m9t+M%0syl~z8!z&?TCT*pBdUW>YcY;7j;+Y#aABW9S|&ie_8Wb0tOX@gPeF( zf3`bhOmmUd#`n){tT7&rj3qm3*0vxIKa(~&tk!pSmFAGkZ%aD3&%|yNkR$yNuI0JN zk2veBv4P}m3UgOW5`j~DA8H-O*n+<;iD@*HMs1zVdP#G*YmmoCy@RH#xkB>i;i}mY z$}E_^FFKb)^33@SQu@)iyEKfy{aLowB0lN^gt;T^6YMJo=uLi`{Z8nAcp~Q5`g1Tn zDQ`ry)|q&@1;y#V_)T30(q^cM#PH*Vk=dZR&vFI)c-16Gi;6dn&lNFt^SK>gi^7X; z)w;<}s-*F)s6L!+RGtNi+pGt2n>8xFqHPT;`w1NUodkOqVvwcbp6x_qBR2B*x!0y| zfmCqF>PHIW8)UU*4w2v1M|(j3n_0Xs!@C*B=zd z`>UPkgjkO)z7hnp^jG@M|5>p5hwyQtKGB=?gTIn1PDLyZb!0vh^e>-8G^()jk z$mXnE@~o01@y+;&jR|a3fH#N_QWO?t`_Tj6g%|_mtxFrzOOZ)i#l_-r3bbY8xE%9u z{8_Y<39{q&n&T-joSN4QjytX|MHl@ZkiCHdKY28~UWKHOzhlOD*I#%zK}I>=h5@WG zpyBi15*l8JKbP6|q6!!i(m`KRqn(#eU zQYR!}`jF9IH_{fRq0yN4+=yIc+s63TMi5_qsB`Qj7c-X{UMCfeXTn+U#GW>=O%z&& zz|+a{o_&aKPJoP5CCo0%$^Mnj@iw9&#kb0dyzXcPln~4ZT=VuKCE#~ulYxMDko)Ot zKp7S1x4`*n){!{-U5_bNvlRP;z#EADzZMq%)lc1MW-l*N%t(?>)p?4wWmXA`#UYm> zAnYLCCSC!H%{cO;+z|^LA(8D7$K2U8VV89(Xp8v0^{0}`IL(|q9v4?S2g%8u%@tkD zRODqQA((v5{Cm^>#Al`~OcxE44Uc}dpv>M1{FYm!7Z1KA9T0D%NIGCeh3~?sbVpW* z`o*XOU@<3R$0`oR*o`UFl_4_+H4_u2+16Yjn(X<{TQ10rI&HUYNT*qZ8rboG@7x9{TwUaTjW4q z4cUV8nRmM`uv{7v9#Gpv393*PfHZ3Cu3AO>$LrQPo1{%ukwq-zPQu z(>vz4b`@F9AdfI@8Keq#uN6xkR;yM>8{QJVNgI9dph-x;F}>3;v;ix_7Z&WIQtJ$L z{Hk!iv((0cWibxjt3rUPtct;W5C)ve#nBfJ{mCp-biJC5a;4@@4ogNV{7_C)Mts}G zn)8`h2H?cfjL8O21VKT`M^6t_FAW9`*~l%xPUa1=cd4_7-f}1YW8Mh%@&8d*{D(01 zpJMWc38Crq>VIrlYs~=%Yubo+%+jKwUI%N)=L2z(#;%R!n;sEzScdOChj<&79zQIvU9Ho9v^_UZ<%0Wa@O!Q81g^}9+%bY_ zkA|B1)y|I@vJTVmG++l&H?(`|m!oBKezbiT)gtKDWO9!1^muA$D0_Jqb#ouZ#ZKQV zb2i(0oSMtga}DwEYp=j#uR3GLUu_Dydc-&((pmBFj=<}y@?#BcNfo%!gqmVN`u z+q6XOm)p+hj|@%(%MW+TCt44`J>8@BP)BahHGt*-yW;Ba-*L=R^du22zrzvS5?(tV z_LZAL5-VPVvX_ytXI4&)g48rOTg&f9B58dmrcdy$XN24DD(LAoU^N$fLU7-@b<4o) z^{+1{+|L670?-R>-ny;!1WZysl+#Md2oHkc;ouR zy3@-5BxmFf@J3d462i0($2;_y7aERb5IquQWa5KQoY%_X09y-f=b`~9QNh$0W#C}R zNtQ5sn}M2|T0UoNY%GCWTIz?8`VS*~Na!^-u-4q}ih6`(pV)(dWCjZZA|GUB1Pcc` zLBkm3*_F#OUzAmHkU`{?#;)Y&=}C+8>bFK=&W zi$$nUNCsS-?Cw@7FM!bk9Bs>YX%hi(CJoa|y8RpsqcK~P-u8+`htVHI$g>$h7anwr z^b4sY(@oQKSKhAqq0Fi<4XSKL)^zSfq3N5*F?96~&o9{_v{{436GD+EV5VR$p0Wd5 zlpV6B3NxhOi6Y0t!h6nkkAdC(G9XZZmhu;IRAENMUw(Tgvb<>|59X4w9xSGda-A7Plr?IO<+ALXP!u&u&TOyY(HqCmS`5*4gKa$f&C%n&CM~0C{2*;tTl{5yJ7GuZiZk#Yd zEqVw5$5(j(4P0xv35&G=*goZQF<*rnw?0W`mUB@~kX4Z)L2oXnC-@U)<|vob9bTY9 zdT^g4A)1fZxCp3S%}&a!cV-R08x@R^$3RN<<{N4Cp&Tx*kN4ufRriAob13m~1$K6uU2h+|NLlP|%-6gWS*grCN)#`8?SxER4>KCQnVU3XM+Fb!cT z#D->3diJud9COLiv&`y8GOK#g!esfG&f4X62+QSGCYaXNCn{d$@8v&K8yNV(Ab{C~ zgGc98q{!Q-(wwVoN?XqG!&Y{HO{+c>W99tkfDX@)VSH_kd zGAeY2h^12tSX_V@)etwwk<^t|QQUu4bkH^ZQLbFNl^g_7qI~$=5Akj%2xE=%twsVZ z2{^Bk)`DuDNwOfT6@vzALvXUjnG8iU7VYP&4IY$L^I?}>U}eWBW08RNq}|w_ zV8RQI6!*@-@t0BaXIgs$_GtYs9btd`Wq?C`Q=*w z&JBDm<9@}15jmm(Y(|qH8?l6uM^0F_5m!GSQxGM!J3I3h{+juo<^Fae#G2IRDyO*HY`N0$aA9m@#>5_kWt;=4dvSN-N+fleYu(BOl?T8~)xbfbd1EW|yD%q?8 z1gd3oq5-hUuqLk?XWC7^&(uK^R*PdSIWI>K8N^p{Hm{jU=Bp6G%%`iKrMtP4zqZ<% zm;bXL@Pl-Gb2?iUqxWGWQl?MmeL1T+H||?0?gj2en z#yQR%5P*1N@d0Smo_vRSOOP2v=*2WY_r4E`#{WU1xyn2ZNB5xaCY+Kxp zMfCnD9;CKSJ{QRvleqhm!V7Br+maoka|x=1_1Nr!y;QOuvi98F9U$do$28sKT-oS7 zQ^i*1;vTlV2i1=7G!FrSCRXVsO@&XsKacl6>0xRA^X0B0Q>#wM4mm111LF7`=b%s9 z7>=bZgTqGI96v$9fwhG4Ki_GTgE3WZ*g$Ic;%lAq34D>7PoI)8`NU{e?6TJ6-cm+` zR=bapnfTRNxm*Gj83>Omq~xbL%e&0%wI;vbz@ts_|DC!1kI`~M$|4;jlVeM~oXNT! z)Gh(Toe;|ZrarFlv6oD-x#!}-uVyAaE30D4u7r#QZ~&FVcVY@Y7bkl@Z5k&^V?DTN zm#y#jyWf$KE`ty<@i=}Gp*XvIvWIf|;>o0OuB1$SZ!87AcJrlY{x%TSv}_@Tdqc(3 zo1wy!;IjaqrZ=MyF2tGT^bSJwhdvqhV=|JGTLj&3*!WyM@5h==VI|!ROWFe4_H9S! z&Djll{z$9?kRRZQfvT^b-h87gDx8?%EIR&GaBUsA|0ty*J`SjRX$hr^@Cm9XHOkqf z(0~~cGW>Es-F<{i9pWFdR>+&^onQrL=u&TbXQ54YcEhi~*E<@01Lfbc1nAfh!Ni{J zD#wISJd*?`dF75h6abOW-$}k++$GBj#lvdEx!j@8;U}wFGt`AmS&mN_%{hoDlIiLx z_SL$QEx(5Q!4UWNHu>!(F_N}DC>==|6}6|~u`nL+!NMe@umlG= z6aD{6fEI0pcDW>#-*81Wzv?4#3e?6;l)(l|IEaU;VPs&AUZzcj$3ItOQk(GG9~MP7 zqT*y(EB()pG9NHSC{PF-dijuN|zY8X1%FzARnYgtGJ0sW8a(iHQ6*H(VX%VHyOOcKot z60K)UUO(8P;sq-o!H!4jw-+yl7cagKNOOW8Q7V$P?mNG=m?5CxQ`_=q&=s z=2n@e>_a*APKW`9?-gq?0IBr2c%}Ju|4^u`v%;Dz4E>~$_;mhOQll+WNi2WlvFvRB z$z=e0ur8nxDUFI;6>6zp*)!~wx;q>2k{Y-Esi>z%kCi8O>DF)Q1!3u{mWc<<#;5=|2d8kwy4(0+4m46vV1gtS(|5+%N&$T9| z(Pl?Y^4u>8G9dPvZt+^WV#F+o9g`u6slxI#_s zcLN^4xKdKlepXyke%4LX&bqObNH0m2@%{NcNv~3()cBCznNz;Zz3ni$@&&>WepWgD zKl*w=deqY~QL#%18p+yYiY}jO5eJ1J3;w+(oP4QMev|)AsntKT0dY@f)-DHDW+>J2 zUmRD0;11nWYcp%O7Y%2n0tBs@x=#y0X27GG2owc~w=;AJscYlT*5mpZ2KtB%#)SQi z?Y(-t+1zX(QKBdVWIX_|SYn+LaX3N8y&bgbw~jYX^`3zB{dDy`aZF3oX;$Dv0az>1 zgrjLdjG&^K&R&!vT67R`oa6jKfpZ)$>-zw?=R3_53k|v=xx~lA!iYkE)GYBPZJ*;G zctJfogE=nvfh92KgaSo@Ffe;>vALKJ*hXQUTwYlSa2vCWO9PXehdDWHvogWd*~NF3 zJA#gg5zB`Ah-L4f6p>00E3WR7k*$GhlUg$HyK*oS6IdfM0b?z1Jb8K7gkFf4aCsMn z@bBg+GS%>JFc|Dvqc47uQizazV9%VjxN^kQQ%F9sxcnlfZ<&0g^KWWeV^e8G~ST1j!B! zWP%K?+K2&9VjN!%1^m)8Z}Dc&I20GF5GM4e@Kv*4EjX?l+WOgK=y??f|r%-#fr;@(z`w5w-XLyubN+ zTN5n4@=mU{-vncO1sL$nu*M$qx83c5)y8S9949mOTdAH9RzkMiXH}mVcn3aE=|7`iq)(@ zX>cUez3K8`i-{gHj&upj$%xGszMZ%iybsrPaiSabyifDkb*Bq1IU z&;fD+5MGs~<&8WBlgWZXIne!(2a5Np_)c*%h*`uKEI*U=D*{XVr*IN6Ie8gl(MaQb zj4_6oHINIib+Tn7Wgi-64q5`NSf%ImSb&<$-vJ={!zHA^7NnDWOMF7hY9ah2xA@npRVJY;wvD6R~JVH@809oqU<^n~e|%Fz zdtZHhuir6IDt6V>n%)O>C3SK6ni+@hONOy=PM#(B8WYu}&0<%A5YHO?I6ZUfej$*7 z@{o^7Ulff7E>)Fe`Ye5P@x?uuHhd^|iJUi(x}I6RcEGJAaf_lfem`X+WaEp0G~ALU zQc|1XFxCcKsX)Wwl3TVofm)UeC}SZVKbnW2M_4i77jN_l$Ux+mOdv*K2OjN3E6Tam_DyOZWSga?h(y>H8K`c4H3pQq~=}?Z(iVo&&k) zP+yE!tUu@km~7{0!K&TDP19A54uYuBMI`Ui6FF^vX>-}FrxOk$nqs6g0aTRc7Dlvx zIT#E>tE0F$N=J0jd;MLXMv)C^)woHgncwBurqX4AjH6T-#>Lf0Q5|7+M$*`PP`h01 zK2*cpgF=zQ!&Zns^kJ}&f(ZnnKOuyVn`DLs#m52G668Iy%hJZ!L#bsYxGe8#V^}K_ zM`4ZaN!V91NKI#t!NQfbi!K>j>+A%Up2%(+mOjGN)shtmDW_X8pwiMLG6V%Wp0d@g z1{LDsZSJUGFH9H6MJ>$!aD zE8{-{9>@@O+oS3@Ub{;S)?RonTOVJK{OV}7MZHG1Z%rJ_bW{q-YU}BlitXmB@;9z5 zWC>$Yn0Q|;Xqx+U4H`Mm9h9(~^%R;JOsyW9xjrv4Yd@{NyW?-9XC7#WR$6rLGHS1R z#OHH;cx*tVr#EG=)3zmL?sI@-;BQ-s@?|+|8*<_uz25D=-rYmn0;*4-td9B9m30{N zU1_|gKig5q;}CNfBs^SrJXqkYSQ}@j1rad2 zT8K?CbNOa;3*EGG9B`nbfDKr!r>g6jpCVJF&oT)gjfigss|Nb6N9uSMYX+?6qMIyU z{0vr=Im>5htEPMeKB!}>-?b8dfM&r#xYm#EQReS$sQFb#$(z&8H*p1)-Z1btK0{xM zwy)mHLYETqT^?Za(-jxjXVNM?;%h%>=m=O6#?*iZs7_|vJeO>1)f%*?$S>CCDX9DW z(_32tnWw3l=jPKaR$~9ouT(NIy%ezN+ap~d4&3eSV7@v%9yt8$@$FLUDZe$vx|^Gi z_yf+$k9Rc-+|PQ|^kgnHy&f@Ne%*cm{jZXPNV@zj@B5NQ-h2mC2s85r$+*8(prAQpTCvSk>gP2z@rN^4=WQx{!e&vwUl#j# z`g9N89*7o~wOX8N8G3%KCsdXm{l0&Iu#8JH*I1d$ec5C^jpcR3(lcYWjFafG)$6Mi zrP@>nn>+757O#vI7DheC9(FAzjeFZ#Su`5|J)( zUyo=w94r=k&YAYrkD;3X_lo6SA3)S*JQd^Be%{=17C7zMs!DR(?U#xeJ;@tL4ifrx zQ(P7ch^gB9tQ$i#BtY~4+Qo}HRg=VkK3;Y2v#HGb1uIXF3IkRsPQU85 z8Vd5AeSW@w{j2Lb6CO&b{5vY_?VF5}u)W>}>y`6558dh7o#|rg!Y`5j{9q{n$){WE z7e94t1#;D6FhfNO-BZ13fw$BB%bC+2A2RrK$&>Q;ssv;?l13@}^)J{)QitizGWp4) z>yMJZ8&Y}Gc_tG!?^C0}h zc<=MNpPxutOs3a@Z^gye%U^LaxWX?BxyY-)?4cQWSTwC6x$sI3RN|)C#Hmfsco<_9 zg)V#D6AIQ74Qmgz^@XT~g|-upK8iHwA6j_ddl#n!03?@{FY?L>Q{2LePjqHWMa-M6 z=H5s1w~K)bJ-A8|6W)xbFB@)tcH*fvo4Tca92O`a}2PF>@S@9SP6Td&>W!c%rF@jtQ`M>f~c*XD6uh;X^6>NLpbcruU~u zelg2cA$qHL=W=p;=<33YGigNORe^Cv*;l{o_oV5K9V_T{3)=99inUU6de(KyFD4x$ zVco`4{)ow9Jv^mHJ-N%LDaN-B+}K2=2myiSLancw>bI?HDEg)qQwWrLdWvw(yw_7Y zF04Sl^{Jy*Bz>q_jx#EZaW^Ro*ZB5wMUR`WwJ#I=2xVoAZtIYkW*YcH$ z57X4tC`)icySrTQepF-%dSG@65ItXKEAvBVNgsa9@oMV}cWRw-lIjt#mOP~Slj>*m z;9zD2_KH(nx_!!#UbT=t|Fc7p9j%Ymoum@Zfu!Y=%#!7*Id`jJf!fs1k!p_#F~Mre z9B63LsUIT!G${)&fQLpkc0lF)YE7x8+0rIoO)!xxz>r!sHhx%5gVNelp@NdrZ8T%! zb%lua+DLF zcWRR4aRmf94n+wh3fx!LnwN@OpRef&Bc4;dgXIVyuT)c&#j~O>f5xNlc`YKJr9QJ9 z$dM>-^yZL!Use#UxW}^HCpa-->n})#uQV|c`8jRDj>YSbSG8CFDmvshI%KB>>qKIv z38x8Xkz9Dq%S(E|bywj1`QR5-`JrApEF8K@%y}3om$+`U=r!{A+EH-^R?)IruA5hQ za&T5#@gk7GvJyLaK@RBjSv#jzeyaI6^y=F{#w_bzK3QJb_zCPrXdMTaxahnd*MH4| z%0klxt~F6PpUZr;pcq+4*-CI(>U9LnbO4L(b3Oa-1h;>yWb_-Wm zaE5_YyOWImV8Uhw>hy6sxdqqqr+Q7;mjJP0>IK^yXJa)h%6tORI8LS3zL8# zlljM0q7`;qW5H_J89@w+L5QpO(Jn=ig4h@&b`37NoF z=f;D;{A_VSrZPcECzK7a+pn(*n?U4c2(r19Zz%4owcBBN6ddIm0|V<6JfVDdF8jPD z;-MCGP{kXz1ujGjp+9I5c_1au73pA`&YYg)F!zd4iPDldJ?SE#V|0}Q-w+c-ri(J* z`Zn@PoRP=e7SL6WZrUQ6RgPzuIileHhH<`;4H{fFOHYC?>#TABHbV4>zjZ?3Dyt_U j|8Fay{>AY6u5rtDaExLTzFdL}8-d4)8nAMCi{SqcqOAKb literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/inversed_enclosed.png b/docs/_static/diagrams/mmu/inversed_enclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8f0ff228c7bb6454f678797f8cb48883792a12 GIT binary patch literal 21220 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 P?`rgZS0v5u==t9P&b}MI literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/mem_pool.png b/docs/_static/diagrams/mmu/mem_pool.png new file mode 100644 index 0000000000000000000000000000000000000000..876a6f98a88c3329be69a1be4d462e865c9abf23 GIT binary patch literal 12108 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 GLjMmZ<)ude literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/overlapped.png b/docs/_static/diagrams/mmu/overlapped.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d6ba3302cb49999b84377d603e54f053c41c3e GIT binary patch literal 16221 zcmbt*cRXBeyDo!B5H%r0iv&sZE;<=4dh|~8PV_cRM06rVF9|{P7M;<1nIL)?y^UyN zFzQ*}_xtwQ`|NXm-`@N9Bg+VDJn_)I-4W`l@^=Yn2(YlQ?kXyPUt?i`rhxB% z-Ub2xzVw<+2QE17GKyNaZ{MC*BG8(<*_5#fYT{me%sg_>&owVPO@x*SfK4`Ds3M*xWNSJaM>tR;6$!T5qPgxg*xc zT+`qYI*+#oPp)O)hpaa)2TqM=v#yoYM}<9($9gJXVG1=T-3n-O%0I+E=k6MD=+`Gf zb^3E)!fjOv)Yd|*8ylA^Gw)|o#Sjz;bi_LW3qkt^>%Lign2Zgv>;%@-7uio^iPNUOIaMRTlhR_hhDmHh!t^DD8DUIVJH+Ws&Sj7<7R2~g5uvB z%8){Q+Lj@y6I`6Fj>6@JjE8zY*idhLh_L(7q@F&W2I3^}>JWe1#xlIS_qO`I&<0$Y z<`T%_{cqO!>fS>2Nx{481|%fiH5!G5CcZNz^aKu3tfWJucW zZwYya5sk`k(sG_=ZSZ`BEVn7+tBj`*yb(??`2Li@)O3iDD;Tc58b;`={5+>G+Cl`( zLFA5!}F_){hL0L+r3QYjpu!Fa zn`EsVT4QCBlUl?ju%t7vz`WSez#9MBxpXlHhP~uE?7G9-*}d^z86PIIh#Pr-Z1AEp zBmn=fC&XEhESGEE*q4-eI`qbBjIu>aqt?pf^?7sXi>}C&XO(<5#VVaa zy5V_=H+y6M``J&h!G@c~ zD48*RAM_6wvKId?n>(uTggmO-asd36qZ+T;$xyIazyZ3|QAO~^jeD!FW3K9~<03ML z8$=Uxiw`G9B4OTPPEgbI_F{q?34;V}jGPt7agMURju$&d?lDaa@7@^jajTgZJ6_=l zO^jUbXl-edl`IpPT&rCg@X9HF&vu#{wN3P8Z6A^(6QH>(*SdEeBNsxw>znnDck)dr zpF>J^n-pRANqyB8Gn1^wKiwf8|G@kIc*Xv!MqBC|Zwa_}XIvVb$!#wDE81|Y@}+kt z4%!=XJ6};-TMmoicx>qrNOYgiRk=*VyEN12U0d!6Z*#&7@|#3Zgnwb{kB2CCpO1F$ z@Ry{0_64@3huvr;$T_)Brjqd+HTX1>wiwATE$P5XN@gC;Q)h(@!4I&9rgiWk$Ds=O zAPU0i{xQqfWH?+ONlEK(ouW7Xa^)S6t@dUaEZ7tpu#-FYz7RenwRq>uahr+kpW#QJ zq-dy5hXV1nm(KP}Ck`8TxbL29Fyg%=t{NBXbU*DOjYvb7*F25Skt*(yOx&_)VUTj9 z$2>Oh_5kbTt^jow{|-sZw~JQ*Q#Q|O@o_PDfjNoIf9wO+ReP$b+MdPmqQUNBLaFu5eQ+G~azAqV9gnvJ}d?*~rNd z!+vi-Bz)f*a_4~3jIsi80b(_I1Vl|BLM_f7Fzj>wpb)fveSh4Lu%9mY0_(ju2 zL3M(Q|4P{2`Tcqlu11<{MBVP=Y!D-wNj}VWx%x(X+;z{4P&xNL&nhe~ z>o7ZrS+@K^nq69w)dUh0}7djzu5DgA}?BPqcau;rZB z9=)S5%q4v=Dy3Gf%qk77Dy~;2{`R5#=dIr%O_K4LFqBeVi*B-~@OFV3)k4%y;(=Hc^h0r?6Odon=*bwEgh#aVZZ;n%gBFWdf7fCt1CS zwb0j@Yd4`-Kg5SXW!M_aI6B&zv8<1~clKEs>Qyv=R2p24_=hx(_qOs`-@&@ zbg(Kr>8AADV?<3dRi!c9+jy>46#eDT=_*}mo(0KlSTt)f7tB&0sXO4XB7JUiegfw* zNWudgrQDcgwoDD?Fn2u4y2*ZEAzvO6D-WydXp_IQ`N#98Tfd=in2)||IK3l34HxV* zhfBJIs1jsJr#zlm6KP}!7?CajAsKM$TB?&!6Z!cOrMltiS=NSrQa52rcDAXJ(JGP; zbb5A^@uP!7@JS|-p82qP{C<&?{C*=wI0^`BMvtcU|R=gzZi3weU+{CjZ`REHiCAU+zjW zj;p1r@SaM74!X4XZ6tx&MS|heD`Rt-WOp^ z<)TR1eO6}#aiIgkitbcM6rz#aZHdac#a1c$>169=Ra4e+AmRk6hG=p4>q(Vs8FBNl zlVsTS(J)SBCL#kBhzL5`F1^>ZSq2=>{59%;<1#tmT3r;|9r2rN4wL6%)L1G>2^^ps zX1>Gl#3W-Hf*ObIoi9J=n3s3lI!CkaHU{)gf`R=n<{*#7kmq4aK}R3>Bu?J%ougZ( zoc0)|YixEmG5X8xHYY~jqiw)3R$85R*GY(M09G197^l?lN3p5y&-j-wG}K7OPxHDi zQAxN%mf634=Xm5t8bk$ZW9x?%%7{rCp2WPKOnJaX1MZT$%a(rP=NZZ$T_U!Eh{u$Rt}Bnm8E2` zPucej^$tJ0I{NU+`fdKl7^}mz)Jpz|$lP4Mtq#ZGa&b50;$z**lXGPzCSC$es*#(Q zwd0&?CBI08m1U#I=NN`4U%cS%=8famWm+g?bwdBx^eR!jK0O0XDUph{ea*}qJm|29 zsX5pK9+^EBrdWFP5I#alw7AiXvlpTDVGk(MPV3Hx))1g;sB0*1TvVllbL^Kti=P540pT(e(M8G#}_%QWk-p%wayJV7L4_b>;GF~7*>V6sr zrFB>jtNSzYtbksIYfm@!$IjI~N7L$MDQWD{`7?Ll*=ZGjC@he~bmCm^DapIU9yyxV zW-z?!iBOobSa%nwB;>)DXL)Nkb9p~_qT`zrLprTu@3X9dwK0KQx%D9}9*Iv3z;Cbg z(`92i&Nsul3GS|cSO#1ub?s9;9bIhlV6~S2DRldo&|6`cbk1)^*UL$5yT5(u!g4Z& zv$^?h;XT5MuSn;SJhac-^InuiVd|THex=Z@)4o+b7V4?-PRtvKFf+eI7Tiiwn~qc2 zDq)PG@E(C2r(~+i)`6upzhn~oeH&#aUc1E=`Rv6VkFUJ^JOaEazY&?J z7KA|W()?+&-xB5QwJH#F+<=)6f?05XewFvSa0o0wEi`E%p;ndk152&D;uEyw*D*VN>XG5L zSI{kcFJbWnxUTY6A77`TWZutq}bWs~mJ0gjacEFN0hIF>5Dg2bQlO zL3n2O68ma_FsZtx?gpYKw+wjkLm%#OGTmxcTu& zVf(N6pshlWvF|Mx&%T-e`n07r{-e-ifS)MW`hoTHdD>4yL>sp}nR0@zuatS~#@SUl zFCVzSn6R%A6wjcn(wr$wQ_bf#4Z0p>)hnL-R5+O=S>uT;M!%E?JoEN_@y`lIr;-Do zi@q48Wznd{OC&xlNjw~1`=!p}Ir-v}B7q3YBF>JN0_=L6p zyH4Ciww;!PAFraKaXEEQ{G;`i?tYo>CplfRn5~OnzrMc^5Md5{`?Ex6WhS8TO^O^Q z%8=n|JZ?e9c+7w;_O2Q$>a)FPZSzK%F;3}+(_*yT?MYfUacVWS#Lz!ke%tZ>yUi9% zFYhr7SQX_JZdFMnDq2;ARObb3Ev?FK6r{XXYSzvaNOJc6q&WY*))8>;Z>*l;g}rxk z8^*a`VFLOYnfwMBs0cMf``c3w4qhYay54^B<9)#!xazEt$)TpEwmyrvf0XE~Ws@Fi z57%CEdES8sw7@dVnN1$Z-Rt8GM0ROvz6Q-8am;WEIFWXMMM-n~U?}!Up0{H`>$SnN z&lVEjnR75>r_&xa)--DuwhMi+%@_DoXCoxLCF{NU&jrRyl6rcT{G5G0jy--{IM(G; zXrETo>(XNV!!}$+#wboxj4vKeO<{r8-&AE_$DTmPM$NL-NMEpyFKQWS+LDq_J%tvI z*XIblI>YaC{LzGymjA3}22|156((2Jv%0A@!(CXrS9{%v`c$sn4R;S&D}44iK~a;J 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