From eb39e8bc4aff4d211e6e182a774de997445f15eb Mon Sep 17 00:00:00 2001 From: Derek Jamison Date: Tue, 30 Jan 2024 22:48:57 -0600 Subject: [PATCH 1/3] Xtreme/RM now contain the auto-detect patch! --- gpio/ir_blaster/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gpio/ir_blaster/README.md b/gpio/ir_blaster/README.md index e72dceb..4ba6a68 100644 --- a/gpio/ir_blaster/README.md +++ b/gpio/ir_blaster/README.md @@ -1,6 +1,8 @@ # IR-Blaster ## Overview +Good news -- The latest Xtreme and RogueMaster firmware now contain the patch! Additional settings and modifications were made by Sil333033. Thanks to RogueMaster for crediting me with the original code. + I created a YouTube video to explain how to modify official firmware to use an external IR Blaster. Here is the [original video](https://www.youtube.com/watch?v=o_Tz68ju4Dg). In the comments **Jeff-ss6qt** posted a question about if we can detect the IR hardware and switch automatically. It turns out that we can! This tutorial will show you how! Here is the [updated video](https://youtu.be/gRizmfNbIsM) that discusses the patch below, which does auto-detection. [![Flipper Zero: Auto-detect IR Blaster](https://img.youtube.com/vi/gRizmfNbIsM/0.jpg)](https://youtu.be/gRizmfNbIsM) From b995a55ef3790a3d8c1f2cb9b0ad3c9a95bd7d36 Mon Sep 17 00:00:00 2001 From: Derek Jamison Date: Sun, 4 Feb 2024 13:13:58 -0600 Subject: [PATCH 2/3] Genie Recorder v3 --- .../.flipcorg/gallery/01-about.png | Bin 0 -> 2183 bytes .../.flipcorg/gallery/01_App-About.png | Bin 1947 -> 0 bytes .../.flipcorg/gallery/02-learn-done.png | Bin 0 -> 2265 bytes .../gallery/02_App-FoundAllCodes.png | Bin 2264 -> 0 bytes .../.flipcorg/gallery/03-send-some-codes.png | Bin 0 -> 2395 bytes .../.flipcorg/gallery/03_App-MainMenu.png | Bin 1401 -> 0 bytes .../.flipcorg/gallery/04-main-menu.png | Bin 0 -> 1487 bytes .../.flipcorg/gallery/04_App-Config.png | Bin 1325 -> 0 bytes .../.flipcorg/gallery/05-config.png | Bin 0 -> 1638 bytes .../.flipcorg/gallery/05_App-Start.png | Bin 2317 -> 0 bytes .../gallery/06-config-genie-file.png | Bin 0 -> 1673 bytes .../.flipcorg/gallery/07-learn-codes.png | Bin 0 -> 2406 bytes .../.flipcorg/gallery/08-send-new.png | Bin 0 -> 1606 bytes .../.flipcorg/gallery/09-send-complete.png | Bin 0 -> 2117 bytes subghz/apps/genie-recorder/007F1991.gne | Bin 0 -> 262160 bytes subghz/apps/genie-recorder/README.md | 157 ++++----- subghz/apps/genie-recorder/application.fam | 8 +- .../genie-recorder/assets/genie_10x10.png | Bin 0 -> 1824 bytes subghz/apps/genie-recorder/genie.c | 307 +----------------- subghz/apps/genie-recorder/genie_about.h | 14 +- subghz/apps/genie-recorder/genie_app.c | 244 ++++++++++++++ subghz/apps/genie-recorder/genie_app.h | 36 ++ subghz/apps/genie-recorder/genie_config.c | 166 ++++++++++ subghz/apps/genie-recorder/genie_config.h | 13 + subghz/apps/genie-recorder/genie_file.c | 210 +++++++++++- subghz/apps/genie-recorder/genie_file.h | 10 + subghz/apps/genie-recorder/genie_ini.c | 79 +++++ subghz/apps/genie-recorder/genie_ini.h | 6 + subghz/apps/genie-recorder/genie_learn.c | 129 ++++++++ subghz/apps/genie-recorder/genie_learn.h | 10 + subghz/apps/genie-recorder/genie_send.c | 259 +++++++++++++++ subghz/apps/genie-recorder/genie_send.h | 10 + .../genie-recorder/genie_subghz_receive.c | 18 +- .../genie-recorder/genie_subghz_receive.h | 8 +- subghz/apps/genie-recorder/genie_submenu.c | 97 ++++++ subghz/apps/genie-recorder/genie_submenu.h | 13 + .../apps/genie-recorder/protocols/generic.c | 151 +++++++++ .../apps/genie-recorder/protocols/generic.h | 69 ++++ .../{lib/subghz => }/protocols/genie.c | 31 +- .../{lib/subghz => }/protocols/genie.h | 8 +- .../genie-recorder/protocols/keeloq_common.c | 126 +++++++ .../genie-recorder/protocols/keeloq_common.h | 91 ++++++ .../subghz/subghz-read-details-good.png | Bin 2080 -> 0 bytes .../subghz/subghz-read-details-keymissing.png | Bin 2619 -> 0 bytes .../subghz/subghz-read-details-nokeys.png | Bin 2577 -> 0 bytes .../genie-recorder/subghz/subghz-read.png | Bin 2067 -> 0 bytes 46 files changed, 1825 insertions(+), 445 deletions(-) create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/01-about.png delete mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/01_App-About.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/02-learn-done.png delete mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/02_App-FoundAllCodes.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/03-send-some-codes.png delete mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/03_App-MainMenu.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/04-main-menu.png delete mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/04_App-Config.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/05-config.png delete mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/05_App-Start.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/06-config-genie-file.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/07-learn-codes.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/08-send-new.png create mode 100644 subghz/apps/genie-recorder/.flipcorg/gallery/09-send-complete.png create mode 100644 subghz/apps/genie-recorder/007F1991.gne create mode 100644 subghz/apps/genie-recorder/assets/genie_10x10.png create mode 100644 subghz/apps/genie-recorder/genie_app.c create mode 100644 subghz/apps/genie-recorder/genie_app.h create mode 100644 subghz/apps/genie-recorder/genie_config.c create mode 100644 subghz/apps/genie-recorder/genie_config.h create mode 100644 subghz/apps/genie-recorder/genie_ini.c create mode 100644 subghz/apps/genie-recorder/genie_ini.h create mode 100644 subghz/apps/genie-recorder/genie_learn.c create mode 100644 subghz/apps/genie-recorder/genie_learn.h create mode 100644 subghz/apps/genie-recorder/genie_send.c create mode 100644 subghz/apps/genie-recorder/genie_send.h create mode 100644 subghz/apps/genie-recorder/genie_submenu.c create mode 100644 subghz/apps/genie-recorder/genie_submenu.h create mode 100644 subghz/apps/genie-recorder/protocols/generic.c create mode 100644 subghz/apps/genie-recorder/protocols/generic.h rename subghz/apps/genie-recorder/{lib/subghz => }/protocols/genie.c (96%) rename subghz/apps/genie-recorder/{lib/subghz => }/protocols/genie.h (93%) create mode 100644 subghz/apps/genie-recorder/protocols/keeloq_common.c create mode 100644 subghz/apps/genie-recorder/protocols/keeloq_common.h delete mode 100644 subghz/apps/genie-recorder/subghz/subghz-read-details-good.png delete mode 100644 subghz/apps/genie-recorder/subghz/subghz-read-details-keymissing.png delete mode 100644 subghz/apps/genie-recorder/subghz/subghz-read-details-nokeys.png delete mode 100644 subghz/apps/genie-recorder/subghz/subghz-read.png diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/01-about.png b/subghz/apps/genie-recorder/.flipcorg/gallery/01-about.png new file mode 100644 index 0000000000000000000000000000000000000000..495969bee3b283b9366e52b40e65691da202b80f GIT binary patch literal 2183 zcmb`JYfxL&7RPspN~snqy;lX3>NqNDZ0~JjfD}Ud5(O!=ri7 zcItyr$Fax=B&p5V@JND4Nq|7fz2z2%Ap|9ySPn`0kV44=Xb5Q%LOiiJ9^0>eIJ3{% zd#`==TL0f#b3V(=cx%Yyh5mDfD2{ zcD*K*0-Dsf`$qr;oNBi6^}M_uSQ-70WzYkE=f=_P#d{WeqCJ0Ao3 zu=#(tiPGSbzlFLqH`%-7>JPF5fk+k0qGTyqlu_bTOt10eq5<6PyXxz}GC&8*@$j)MTN^NSb z*&thJyL+NsE#?UALf=+Nys#A;}}Y#T=qfpgB@8pV$*n7TMN5rNIh!tXK|`YwU87{5fQ2 zyo{pckqY7Lo$ao^6zT+DHD~my?9FDUAxW#RX~2T>&jYYElpHDks@(FSrnNUFdg#gM zk}$9WQRerREGR6!ctCrD5?VmJOd}ggQ5z9EF9Q$2qewzSS@G=;(z4bR-^`trYrGkT z&OrU*p0yjphkfg=Nw_~V&+Z|9-SdN9#;0!6mtq*5 zfh2VY9vt3^oF9$ocbP<=P|~L;y*XaK&mM0$#LyotUl4H373@Y-bnn4+oH#KMwBIUStFb z@O~KwFM)hQnm>H#LL?BLM6eBIiYIb~b=PeIU?qatIb`yqNMww=uSm!yP1NateH$vu zUEyH$0E!~So;`*n@s(vA&uv1yCCe&=PDSjREY!_YD9=7kPpjE*5x;=dwVFfJBf^7YXy(bggr%;NvyK%beqc_S3e!1IR?85j* zG}P|K=g_PuCqb&R-`r*Ki53*eH8BV`MZp1j)tH(yL}w6YnzQ9rR}z}Ol(@4DrP1Z= z^gy1;*e^Gu@6;6uQcFjY%){xZ*@q}0|CJIW#Khz@^Qx)?``HS!%3tKD$VNeBgpjT~ z@1pz(>YhQ&I4{B7RPxECIS;pRAxkEwP^_W@oemLOvEdeOA2Tc!&%LT$Bo2MFTi=%z z$Yd*Mtn#Loj7BC6MdM}4tqe0p9jjWb~^>mw>lxqkS!L@27?kn*I zXL6yaMB^6c3VQeXxzF^^e2c20oX4k*$O@lSW#9e?`o(ktpIAn=#Rz6i7)s zkJ|eU_8y#NyHbC%@2JImRV$rtuI5C?S>htlf*i5=mSoACaVXxXxYBkE&ZY#qkKw(v z<5RFLXt=!7X6W`TM-AQzI|c(+TL}!2#U$zFLuds#%Km zxcxvsyd3ew1NAHnukTo2x}$Dqa?9E_LxPezBkJcucJDg`a1JMt-aa?2jUa$Ta8msQ7NtyG;wV6AnMS-DJ zW!YpchNCKBjPB*-Rxq7JKkO`mlZcRWFZno`KG-9tzE#izapAnGu9}1UD{0LCi(*gZ zbv`!q8Qn^lF^r&N+{4856ufR98ffM4_3ig4zN#b?T)Rhcx_#EFo-$jh_{WDVx4CRTbB f6$DiGm=>(5KU>x?nyo|rEI`_u8QWD`-#_^qT4#>A literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/01_App-About.png b/subghz/apps/genie-recorder/.flipcorg/gallery/01_App-About.png deleted file mode 100644 index b2d0ebf34c5ec95292b6dff2ca70d00ce63957b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1947 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 literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/02_App-FoundAllCodes.png b/subghz/apps/genie-recorder/.flipcorg/gallery/02_App-FoundAllCodes.png deleted file mode 100644 index cc45a40ae735147126aa8f4d607c1d345a47fbfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2264 zcmc&$eNvy)b4t4#q(H1UJ6ijbf|VnCvlnykbGSrX+tSx;N4 z16^y~!Ag>e=QM>tw9<$$L+lXfSO^~`0TYv8J>^P5h!8J<8$y;GX?y3{{@XeG z2Gd18x5q;U-@Ba_92nic1nhVn16HI0@X?C^Tv`bCC7|-WUYdI`?EnZe;Z+A&Zu2ndfmfg4JfzDIu{_^2P2+~27L#jEs zZjL5$5nZ|4p_3gw`(jckunpz*{KPZg7RbjsN+r{2HOHV*=rrkUnql@!=kEPmum(!S zTTvW5u8shmv`-i`Q3_v@s+(c;+h(2@pM5P5^->_tpbrBcbN#(^p^WYjOE{BPcqC{v z*TbzA++e>4@#A!JSPnf=65V;<)%lqbQ@m!eTJ7y&#|v!Lx_HND7t0o^NuE=j*hGy3 zn-43!2^*#1k8W%3@OovIToVCsgN{PLI=wM^M^!~`yHkk2T;ES^Q~JNcLQr+Av{OOB z<+r*fzxv!(* z)}(e+~m3`?<S>5xQHlB6;HGEd0H=~F&anth##0^KQjzr(m z!8Z+7Rcybm(&vg+#Af4KdHLo`WE?WE)3mh~g->G{#;Ko_Ra%s=m|)RWVSVERRoJ2K z?@-yQn4t%Se34(G9*z?{>~HYd=;pc)H1&l|81j~C^mTe9h z9o8-)E&zo8Qv9D_LhTP7DVaI;cj>M~8GakmBquv&4^-uk4}=%5#6N*j&_aCqhO4Eo z-(sVEb;gTnDV~?BjjLG7e@fd@D&J>u^P$R5B?*ProU2G%luI(DB<&7Cn>iFZ(!g-( zr>J)s=FSjiqQ|3f}fFW%i9ytE8Uvs&>Z=ZL4lx%NcQq2vT2AbwoMT#bg=)6gQ zajIG6-kk8iZd#-S+p5xFMe68I-7k(?;o*neQi!x->6!o03|<9#iAF z(gMh!Yk7xdy29&`=5K#`jUceSn8qCSl{%v3l=6U}Yor&Mt4Owt7u)HX5#OY9_lID$<&39IqWOxMTPT9n6Iu6OV& ze7d%M-%L&`)fZV-bKYC)rCn%fT6sKc|TNl?2jk%*5Efc$2 zp*II)C{KjzVFQCrk7Dt)2V@{3fS{oO0sg-kq`d`Fg2v^ diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/03-send-some-codes.png b/subghz/apps/genie-recorder/.flipcorg/gallery/03-send-some-codes.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9e68548057d51565751a350f0ffdb1f11c87e6 GIT binary patch literal 2395 zcmb_ee^8p|9e>rPP28z#t+RTq?Oj$)lk-=ox#i|)g znYpG`uT7c+MTl|<2`I#hS_LK3Hcln)8;d|8fXNy`K|o`GiVDMPcX_wl?zY?hc<*_i z=icY@e7~R1=lOo$kB?=h1^9>i0{{?^e)!;V0Pyv``T*OvhK#3qao%A^#o@dv0Qkk* zTaQor@n0@`*8oNdr_hKH{0W=)@X==~TURXD(9;{?hLOZJq zqh>v#eOV>^OTylXQaX{#)rx1Rfp2EtQ?8oHprac}~p zb#}l6+Y%dPd?Q-Qm1U#oH^Iy!cIP<}2AwGufX&YX&7H)jaEJzN8av0zXl z^y8@VvXJm)a4IWH=Ci^U(`@4c4jY$%Lbp-iaB5fi6q{aU-z13>Or_U5-g4{S)k5u zs-%qm8On07@-^%ieY|=>n>@LPPE;QL_BDi$1PKjd!v&h*B^+8>(BoQL=wN>Oho80VU-!&7zO=ltPZxR4yEj`TQ=zN&%k8WgZ$&og&N&*1nz@ zd4G3ZP!afsS6#44zVyL3t1^>AXH6q^j4;yt{&M<-|5VVrb#w#Q6KRy2lX)&Gzka+( z#PmmOV)A`quYK zK*0JkqT(sj2G#7u(jD)-BKS;2L}0XekA(-EOE`J4QE&Cu6&<`8!*`g%HUs`JgNe(B z#hQ9>{q7Egdb916^oFB|g#S#7qLb_RJ|YsIB!SWh(AQp+8aW{>6$ zNPM~({)G}dNxz2>k1lej!A#uP>tSV!sER;D`B4=3ow#BD@Vzqkps}z~**A=y$IbST z@U)vOZ&kc9w5mz_bbw?RZ$}w<3+$dsqU+wmW=HAZMXG=dzl-34H}v8iGV4RbwTn+l z7%`7IQ=FeU>WC1!GVeleb>-NmrPoB~m>jhra#LCC^^3;q@{%SG?FPk@J*mQsJ4>RG z@%4v3kWm|kpmNRc`8fJZT^eX0?xYps||^u;|dastp;51c7H2l6rGEZAw_eHqqXdI}c4SW*4#<&LjB~vS*Ad9dl+D z?D*B%T+=^v%c_7Pg?64tdO|boVY{sdQgw$Ok`?ia3FqrMGgpa*%Y1Vcj$L}&jmK#x z#F~v5B=zLj>;5QddR$U$t)@UfS>4`Cz8|UP*;38d#LQz&R~ko=@n$%D+u~7CCFn=B zDCaIUL|U#%>I{tLD!Atn6*cLUw~8?4#dUtyxe#jJ$>g7E`SP!8D>Ic=>L2OPSXkOr z-$pdbE_8n|&8z<;b2Ju*2+3r5rwRnRk@UH@sjb_f?wx;H^!_aY>8Y6q1qX`G{|#Ci B_yzy~ literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/03_App-MainMenu.png b/subghz/apps/genie-recorder/.flipcorg/gallery/03_App-MainMenu.png deleted file mode 100644 index 5c9a88b6a0e35ba54a012908bce8fb8027333f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388|?c*QZDWAjMhW5n0T@z;^_M8K-LVNi#68 zYJ0jkhE&XXd)KjOwu6YnL5-)6pVZj3oPYj#$)>A18qN%v4@%!pauT}v6ucN17O^lWy!!Y~ zn&H8J-M8#Bm>Ci#GBCJsGB`}ZLtQz3etORKXKP-~tgn9X^WXgU#V_A8t~-Hb;s)D> zwdaqgSI^t`tS)Vbf5YMkM!2bSjo3FFyH?v|y56?>U&2|tgICiP8u+vs8Z;OgI)oS+ zR&0OEsB`nzoZ8pr-}?(Mp3vUuiOTT{kCOjkU~;-_#4B# z`H$aQ3fG_geP&zwhOhVeP|P{LJAc8UJIn=bw$)3+fPn)IqdNWv3E?wi88$G19RqSx z)sH%>16$u%=I8Es)-jv$K@~8}Ktb1L$&h}Nxdh2;1i}qpm?Fv9{;T_I`Ny}uzV3g; z*;(gn>*gE3EAF59o;QIP$$$Ne?`6C;E3yrrUF8oHwohrhCSaAv}?fp`j5H&sP%D8EuQj1P<7UeRq$qk!SF6f+mjK{p<_} zvOy_B0TN23H{=fNK6m#1ubm90&lngaI3V#b_fs_k!#$1Cgv={zuJ# z;j;nIGzW;$r(}RS5wSSMlA&R?F}0*$O|fiv{@mAlnqB$J$g80-fB!Wir!im{ZL|CR zZH>$W(=&_=1_F@OH|v+qf~A#BYpZ#(<94U{Cw;WMbtwJjbB44HKk9FFzh`dngn4!o z`-W#a3rxS+bk{$PbdG+{_+ToMIaaCs3Fp6mVYHZL$-uw{OL$A%&RlUiJ-N zeg2!Ke|cZ2dq8w1B8a~hq}d+WizJZB&!BJ$k-xHDZEj$=aULnGfn^4ASOaazJ2wKQ b|1w)c diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/04-main-menu.png b/subghz/apps/genie-recorder/.flipcorg/gallery/04-main-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..d46f4e9a18d79af489afa26177a1d2f6eb69f17e GIT binary patch literal 1487 zcmb`HZA?>V6vxl)l~xF}WNbPJTUl@$nUU477;8n;bkRzJFIk}Mg*C>ti8GVf0iCsP z`!bE0WN4UODn%2cOFHOWfl4iu5Ou@b+r=(a5PF+AOIAwTVCaPv=q`hKAN*kUVIOYJ z%{k|J&iVh&x%bS0sy#Vb1z7-)Bik!I1i)clF<84~_D$D{7?WAQw^j|X?)9YylO5WS z0LU=Oq`ThJSf<8zwM@SA;?9G+XHLk4XB9fzSBDF7h;M(q^mE??(cbb|T1K^8xOQuC zZnBvIO)Hh2PX#*XJZi8PVQ~5dFkZLP>5C&}oREv$=IY}7<11l8Cv_j^9d4U*3&Z)N14%`dX)5IefJP=i`ba2^<^r9 z+Tr;D!iPB}8^O3#f2lP;2|;?eIeObi@Q7Q=xRze5GrE3ao9sQp57}JC=uP~?yU3-V zQasThy#`R{(VH%#Qcu35!nIamC}v}o)KPkX#r|T|)oOr)9LQxrKVvFt#vTbg4P%P>;6-76`;>PT-47+Vp5)&prF9zVQjETv;f{cI~8wr zYiX@DFLa)1MU=a|%1lCNoY0p;+KbHRst-;zz8YFJYBByGHMc;Qe{Yu1JtQ|73}_||E$4oF7f)6Kl!gkkmQ{41?k)a^Hf&n*_m wGn~c9`MQ{mr`duyEUUl5O}h2D&m$T6xIk?RE(o}nnLjkh-mQ{$>{fjFHvwh~V$@n2EeeGQ-Mg|v728SsO3@)~D zwM+~(_pVhn{AOUdp~Aor$iyI^iii68?W6NI$(!?UJr_7oR~?sK9T$9l|MQ<8H^-lj zK5mp{+QU^BQvXMGdc5TnMi$DL~T>o_9{?~e8amfZuV3%nC9XM+f zn?ceO+jGkEdn>=}sDAdf&o1qCg!1#9sZVw&_dhH?w`-pJb>?$b`($nBFTOwj;hL|L zCRU528Kam`aBa`S$lnz`ZzPS9=Y3rB^UKZp_guwO{@g#Y>-x0C_SM&l(~iabocdcz z_U~NnJ=b~|7#6WGD0l&>eOKZf%I~YEus-|y{^{ye`j*{-kbnY) z*Oj7b#@>iTzqc!{o~zty>2)vmXZ=T+3iIEayTcQZeEi$A!S;8v{N3fh*F5g~^QLF# zq3~GkW3qey8Gm~+vvAFBiJg4f@$$+H4IrqKMnQ)Dl4K->j% z-m7ol84LDmzmH{jW{B`@RmFR=1AFIeb)SsnI{WX8H=fHbIE>H?@*C8Pqts|f47$Yd aO8?o)-pUXO@geCw&FmfUQ diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/05-config.png b/subghz/apps/genie-recorder/.flipcorg/gallery/05-config.png new file mode 100644 index 0000000000000000000000000000000000000000..235e7d29afcbbc82160b0996313e19120ae3c3ae GIT binary patch literal 1638 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388|?c*QZDWAjMhW5n0T@Af^h!jGjR%9~c{7OYq_jX z#(H&bdj4$X|NL*(70$o&Z_VGIB6f^m%Rr{Z8nFjNST{$0yLQd}+M4vWwfA?n*?o$r zIWNP&AkD-e0Q7F)>ATz+Pof@2X0LRY`+lP8>CO2!tJh5Yd&l_G4rTkp`{#X$Ivdq( zUsNOe^SAb#yZ^HGU%s3C?b%<31VN|))8{bH*y?Bdde`HL*>l!MM9HpU~ zYqH}D*Jb2eyVpHC_x_jiW@lEUNjnI$5pV_h5Sx& z0n~^yX5UagzntNkVRqeVb%q8FsQ<6;E@xAFYTp&r zVutkhz8jmY_lqaK*mZaB);-Mi=YOTiS}Wh)`RK3Zrn&3;_G}NY;QhX>_~^$Bpm#1q zJ-X~H;B8`-1j3k`=j#nz_4n)n*3|CK4oQJc3-n++rIRzwfAiA<=^9H5K{yO1~7G$ zzP4;oetj)s@U_gDtmj4V?zETReO;gWjDg{X03;l%ZtrdAi%5L? zY4z1_=|?8dJ3aZ#ue~vU?`~ebw|-vLyA&~`{N-!SUhqxozw-AFkq_s6UH$fahq~=_ z^_`z@07K0GiRqttNKS}*e~*!&?(WTEQJ`f&yR?9DR>a5fpqaOp{nL@ZKn66^?wwcl zKf7VM)$VusNMUyUgy|B78a<@!zN}W=fZ?@;(eS35L=Ilh9lC3Bqre! zbXgf2Ve_y`qsF+>8n_{e2!TN4$0-c#AU8(xV?@H0(isv+BE$qC4Ov*}yzA-dIs0dS z-1FV{e((3*=Xsy^d%v&hXjaC$wFzqh09cp#R{GljuqyV70bW=h4$U2ZEjGlLymg!d z0NDQJ2lLS{v6}$kg`Ujx{j~Gfyw3cZ$=xrnzW3zB<=Wt>A021da9`!@@5K^-b!a=n z>7Ki_;}4g^7vGdEE{08rIBu)yPf9Y-i+>K-_X`a0@*x0_{1^cKx?*}knW`$tDlaPf*vRLd&FXAfQ@7F$7t434Le5ZOuNwMp1j?xL9ag$nXu9#arQn~gnZ!Somlg% zr2lRMcs>`!+ei`cLepY))A(ubSf})CTlhc--7P*aQOt|hEsBWQ_2JZ7Po>muO-!z()@mI#Zba348%Pc9_+?|1Aq1e*Q`1uG<7 z#gMHxtLd{@21)}qJNbrO*gz_%frF!vBa-dP<&II$Rx(bagukqK{m3W-iRDsMe_DJyd+4jBqFxl6Uq`VOe0PZa(v9^f`Tog| z)dLFp|D>Viv8=bA^+lod`t}mgA0*UAyC>7H)`v1uvoGvS)U-o>S|w*fgre(V6agw- zkJaAu**IUg`Jty)(@rJTJ%@5(KP6XeR1pj^Au=^S0fjH6ol##rqS6Ir^EHKjLtqqz z)?$mPYt>y)`jYoH@5SJmnl8EDEEn+#7JR8gDDt}8xR1^6GA=>E_*?>H?)jZRi;Dhd zQLJ|^I)|Gf->GAD62_z4r1@VUyN*l#rU=7cZTU#ohvc-@i)v3U_2(JfbB*l~OShHLvm4`#5d|1z$A=BE{iH!S zGM7YF{H==edy9{Q?u$PWVZ5!J&#SsBIvX9VNBw!9%fm0qd8{qh7ZcXj(>vi|uEtr5F5C#nBh&jHP-$B89$v3dx(vxMOjR$z>>117M#SxTN h-#P#PZ>DF<%;w)R>Kv>0$L=>k=9^jRnm0~d{1-ov(uV*5 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/06-config-genie-file.png b/subghz/apps/genie-recorder/.flipcorg/gallery/06-config-genie-file.png new file mode 100644 index 0000000000000000000000000000000000000000..6e024f34a49c527ef5816e3de50eaab780a0142b GIT binary patch literal 1673 zcmcgtZA?>V6n<}kF<`U^!crz530s`0_z^M*w6x51BL1jgCeX>(NaVVNu}Up1^fMSx zGLR6BQiV2KvH*gBHe30SmJA7XVsDnw)Hh|E1oKLG&F_X~ly{pQ#j^MKEUv5qp?0K|RZ|DfCx?^^+Q zi=0dU_%mMTtNHw!X8O+T{8J08UGnoR!KEBGFF7^3H?NoRz4P<3hHGF75M{qE)vFP-?GXVy zx*Q9#uK+*~1KG2GWJ%gbygOVFa1G)91&)6l)FE{x-A)3m{iHxGFa*(=(BFaE@fd>^ zp%DcXl2!Cj0Tb)?L8je-$ew3>K*l-p_aRP=UzAp zntKoql8*uKT`)*~$s&|b&50Y^UAqilcZ_Ha$jfFY`*)Q4%E4_dj`_KN%gyiIBn#px zC--tHSKJ<3Vad{b`aGgR+J=`cIFB4tmXDMaxqD^fVmD>lx--QUCqJjNCFNBH=;Rm@ zC-9ZeXUS$_f5)vdjzc>`LCr>vj_Vy96|WZ*Y_aYqzs(p_bg(;dqonT^^_2HTW*WRI zUTaAymtg=Goj~>Fk-NW{`N}%9T27#JVGd98L7Fj1zELvP6(QC!(@CmD8oP@~(&8RJ zu{3lm0%NNe*3^2nf;dwt2LA#A_48<{ugy18fCmx_rk`z?r=M4mCK>>IGrsh><>O0eHIpkzh4gpXN)1Zt?MWDpo1V*IQb0H|(Y`g_6# zDi^_;fJX!_s}Kx@ZEbjuUL&QEWU)ijz*^_s6nk2o&_t_G(SE6l1T`z_pESZt=Jc83 zB{OWl=gO#YjPD@3ojB2*z{oQx5ic}&woW=?bNPAZ8qd*EXtatYZ|Q4#ttXf?yVZQ^ z(>=&R%9N%!krx+OyPgLQP8DOkGqYK#m}JuyNbqYFS1J7=gDgnL9QaTwRWzz?td<;8sZ>ev~WCPf{Gbwsg@nOUY+9_#^`;&aW(V| iCg+>prT=%_=6e~(Q|;w4GSm0AfZR_R^nt_W4Sxa9)n;4( literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/07-learn-codes.png b/subghz/apps/genie-recorder/.flipcorg/gallery/07-learn-codes.png new file mode 100644 index 0000000000000000000000000000000000000000..51740f1379b930ecbca7af118d2038750bbdaed4 GIT binary patch literal 2406 zcma)8ZBSZg7QV)sk0zRSGu=cZnq9NqPMmB_Tw*Ixv(d(nY{VKqqDVAt)kbR7fT9J2 zZZd1LQJf4hX+H3-v5pZ@tLUOp!8R#Y6Tzr}fQXJCSQJS`xDf;vCw6+AGja$M>N{IWmBR?*M3;@6X)5hfy zpM3DS``y0yn7?6)?-{l4x6M9y-786aHHEFzzgNsSFT28Qd{h$#15cipzFAC~>`I2T{$ zr0zFgX*JN<=q#Dztln(kn+reK3cQv809Sqo05yXOAZsxV1YPUYvWMfGPZ_88nGZ<} zPo5h<$+*Z+X1*tZv&o%&)p*Ut$afA=|3#T>q} zyO`l?)t80Un&Oe^+gGb*mOJNBd?FWv{AZ;r>PEXyU*Rh+{TmkiPRK>RT#^EvxV&bj zOzc-CCYCA@5<`>zSW(aJDT(f4m`11V?I;A)8!2+{dr*gD`Pd&)G>ch}*^#8^N0 zv+VV-^N$2PX{&}x9l7ZWbDG4jOyz8ng0=eh#q}1>nz6Z}xsSl?O5~*pUc>}Q>6G;v zY!gkI$(SIxF*H*DFF{nh^0N zECFpuR+YVkN+Y4Gs~k3+U*rBEHbK~G90q+D3kP!jVQw&sy)0Y~B-9B>5gFj8%IGpD zWg&Xo#hDCPrKh%dJPq#>y9Os0QIrL=+-VZzvfIVAdBNeU_0fUV_m&9yg7KkUKR1Vmb;dph^;eGN=Wh>Y0;Z=kSk*KAZMO zvrFV%OOeZbPKTXmhp1^X!ANyj_y7!|x6!LT`7-(Ke74l0s*1?r>(op`Fl)>;>K0kEH>Fcg zr8bdgC$le=kFDZMW4oax+h1uBQI>B^A8=tHa$2{B+>h3};^n1t)7sPQg z|IaYu+*2cjFhjG^u_zFi!xn8Mr(LyIiMcfvplE#NA6nRVJqc9JJ6z`13YzF2O+d_#d7Is|WK-J(xSk_m& z1xg8}?vU<>7MpsdduR+=0Q2C^_>0d1|((Dp9KVC94$dX5u8 zBhJOO;9RJ3g1lg~xiOE3n%)IN;Er)PS9Xu*q>%KSf=Q*cqWllRuu#S-Qv*)GM=5Mt z!{vK(Y!t3?`v5F%k`S^Y49b;?POtr7c27U`Be*W5cmmDuW67>DBlj(=9{DW{v-^`s zF<>jj5}gNOC^Nl*PRWw&)K(k^I=9fpha4J0s?z=gJ?suo?p*>o6EG7UWea3SS; z0Lo(0+y7P_!(+J0;nsvykE!rY{1)<)-gaONt~$RxrTmY$f69u>>tBGiv+Ko;!|sC< O5dU6cO!LW%fBY9VybYHC literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/08-send-new.png b/subghz/apps/genie-recorder/.flipcorg/gallery/08-send-new.png new file mode 100644 index 0000000000000000000000000000000000000000..2170e3bd95b0e590fe983ed0166df3a9ac70628d GIT binary patch literal 1606 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388|?c*QZDWAjMhW5n0T@Af^h!jGjR%9~c-| ze|Wk$hE&XXd)KjVjs=6m#g`h#PyQ_Gn4|x^bCX17NVlU=?(C+2@7Gp29tfDS&p_no zkI%1<+cSKrss7HuP{Gg0&>_Uopn*cIcyAr{>+SRR!Kdw?Zs&0SUE2Qf{@WSieOKpx zFFbPh+)QoTr<<*<&s{!UpBKSkGnawEg_FVI%BE@t~blYTW!)KE2zpXc|ome~P z=biO6|9+kNT%5K${kr|8bDPu7&0PFd=H_2pTkCm(<+s;|#xQ~{oC35rw^IB!1EES++MZ#Wwx> z>x{YKMXU@0z@Q9dVh|{OY1&e^-^nomi|Su%e0jL0pI)5ows+Jy1kM396ay!{!6mw&I`V`YOnQwzW4QZsnyfU z5l-9srkp|f^IGN8>!Y6UjsgaNb!P3H z$n&!Q;$Nf1%yHRgXBl_Q(?*YH)L0)OycO@?%N@A7@9&?#_wU!&{f*f4=e3c$+qTkc zXUf85+b0^%k-dGfEd83j(Z8AJUz~cp;Z;mj>AiJU{O)U_&R?_&?|rU`l>VN+V_dW8 zaonM~+pQnHd>#Mv+~Yfi@6)eVRy?h8yYu$<)@DSQulQoyu>Ab}UX3%!O!FTjvV>MG zf5LI=#CH!~)T$|;_dPGue)qjg)phIX=c-OwgwL$xKhL-IvHf90k_-7IcVKns`yKn6 zL*JY4zrFk7e53r|QwrB@`u)GuVs+V{^c_s_JYB^9puT45Z$@Jo_8+&9+`W_igJ=5l z6-wN)SA+wmE{uK)FO^J8;%zopr0Kx1Hp8x;= literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/.flipcorg/gallery/09-send-complete.png b/subghz/apps/genie-recorder/.flipcorg/gallery/09-send-complete.png new file mode 100644 index 0000000000000000000000000000000000000000..38eb0b0ff660e05f1135cb721d229dfd490325f8 GIT binary patch literal 2117 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≪uqXavFFhtJ701$KPiaEpP;j?-l%+ZBJWQ9 z^1cg2sQXeW}g2V-ih&<0*0R^nHeYR(~D%hdXiGz5z`uHgLf!g#ON@| z`?6+AR34<>@ML(RV!utCYaR-cC}R9DaE-dD2W9ZULWWALdU;fM$+D;169=I~sfEi? z$XlqOrXum}R&_KfkAur=IJ=amRp!6!9^Qz|R5= zHR1YArw|zm$|w#i^1mQx zjA2&J=`v}@ic6TR2Gs-Ar83M)as!mOL8itgvIc)p(g2(-HHG9f?3V~${oPV86 zW9)}2Sbl!`v^d7rq35e~!L&()nBls=DGpiN<0W?*=#;mzpDQ>2Jt`pSD3ZP-E7brs z<`|SH)r+TN)#YubuN|5s!lOhGlKaaz#?{I|ZxVc$i5bde)XB)ulF{9?Ju4?1>&ESx zXr%LWdUq0W(nM!o_zSydn_>V$B@@n8O`%aps}J=4G5BN14uVe0{$c|vDE0W$5US0S z1@%_&-6Gh#< zx$XUvj6gI$Lj!Lwpg-l~e~BPJ1845x@_SDgMie2X9|pvhYQ06~fX{ky@S_ z__59|x-?CPuK8}Y*Sfo545M8@bemOy*tNOV;PoXB07WGP| zQtuwtRn(sq^AjJfY2b;9PRdUss4pV&b#NATO#kEFOm|Gs*4?kSg?zOp|09IaLDF!3 z7IUg@Cb{QC{YdPD+8r0ax6WRzTBt$-C29tI(oL~*FSNheaUxn|gQ#Ck%T6Ywd2!_c zxJPjdRkf zm?>R|{yFUQv-LJ}5p%Aqh;@|YG)=&JkKEfB^hhljxdE25CjGVQxhdY~mzk5dqJ>q} zn3l!%d8mo4w#v0n{?L+?S&k(cJ2`6q59oZu zy%NbEIkd1O(%I%bkxO3R7#5s4)$Mr&_L~U>tx4FoRTM5k_7OE6yZgVo2Y?T4Xy0yv zH<_syLvzepU-3z-p@ZzrAz0RY_t84~b&pqSvCT?s{#=vGv+Poo^!pf(bzSSkz^zI! zT!|D1xgG64XCeH0r0eUZ>VTG@$eSQ`HKN0Va=U-$S}S_~7)D77VJ8pT>me|2CZs2c z$e|K3T856k67MRZG(b;}hS;MgV-LGq2C{s{u#b8d;4O4ZaFraK{X zJ^s(;#%%iZhs$$u_t<)_uHHj#zb^8+_Cn5N5!3|QU9WCcFB7X?waw{|B1hQbJ;f;g z8bVPqNtr12Uz)@{ZdW`W2_3?!hON(&uUld!Pg_n0ZeEU!M=Ulw=DiHgC#$UKAtr!9 zg$dffRmt$D$mXPKANWQuks(X{REDNCejLx#%jQ!~Cn*G`a9P?NzOfPT?yZ=1jtQ^d zQ7bnpEkv&y3t593!66r71!W$?mUl=ynTnl(Y=&KfXQX&{_TvTx>%^(407F2$zc`$d zkJ)c*FfPgkPkUkL%su0UUAhPkI1i=SFY+uv0YV@AwUM8jKxj~YQ$pG6PO)`U1o}4n zS0F;IZ<(v|E(>iLyRd}K4ASLPzd{rD@4EwvE@6d#gBbvBN@~0%ypFV;PsLo*RpMp7 zXtW=ptCDJw)NQIauGd&>+y&)P#F@-SDKOBtnp%o~%CV54#3i!gQ#oP9#Qt^_y#|>0 zn>=_kuBLf17)v6ZmTh$l;AId~oP>X2hNlLkEG|?DWEb;L2_kk_7$TFY$r{**$*Z)} zge4h5qx(?!(4Dswn^0EIfxVDB7m_!jf|4-02Uon{T;h!WW!HYx%cnBGuDek9F)X_) z#f<1yP>|&#KUo0ZInb~bt^5ApoA+bJx%@PUrGMb(_$p(%PmR(Y&ZrTOE8<60-Z)tq z$~Oc*SqZyNqS; zIc+&V_7JU$6@eu`@t@WFRM zSIt+SuJO!IUDRd{5B&qA9BqoGZXOI#5Ej!r8=3_*M0z^3MEPKTh+q6D|; zF6*G9YJMiwj?=c3wQgNO0I~%Idu|{o^m0->lPFd+r=|jKN7XPiLiww{A>5JZoE8ZD zh@|bGXGMCG|I1|^>NZyrgTkbbh`?0#;6vG`IOmbm;ynW4ngQ!-P?72}N&G=zlVxGb zXtkzw#gVzpn*JIothX#tK7^|cLHenlvxSmEF2@zKJ{xb~jk-Kf5Xxw@)7O!Me@1>Q z2|S%FKYlYVz_iR(3SfickkF9MsYhLd1MxN$RMEUw|HGwn`liG$1-GcVVN8Ha2&L}; z1igQVEZ75C%Mj_Npj65oHk^GIyf7TZO&3g#2d*o8;js5W9H!``a=;}b4($@&I<|bE z=&@$x^j_v5a$1MULq?8}4fw%XznD>Fjxy<8TKRijOQv z6Pe^~SZ<4&41is+e1Q2Ed+Vz1YjFC$ds)~!s05P7gN+K*P>VQoERl*H2Zmq%xtuZ`_9lb>M{wkYcM1`_}}9$Ai%{+l}pO}+5ra?GMk#w+1}BNa$0 zA)YG#ar1r)8{ZB1*b$Q0b3#3#CP&g2iP`oyL64iJ)Qun2n&V=XNPTUB8<8fpF57c{ zkXftrqQQk31717hv;a3KLOOP%)2m@nD##iIf;0gbKMYbr0T-QVK_FG}L*EIU3Q zoW_x`_xDiK6=t%g-3{Wf_06jtmDUf&BKu_+(W|AS>}U56E}wpcwp0M1b1_a|VP7f#AFqtcZ?2_faHrdo>1s{~V}80-^>}7# zt;kOO1M6pqC*u9!wr2f$?A|4wt(Kb6ODAu|FwZscUx536_S4Xwq%URcDe-qRU|K^> zTdV-T;r#qxU>Dap3CVzrJ*)Krcdxlpp~Dckn?g)9N1k83w~+xt+5Yzs`HVQ-#-wf+ z1@u4S%l8%Vj{UhO`zJtS7I z%P&`T#hf0=w%bnToBl*yP2HAKcm)S`2GsyVj2@zyNh*@bhQiosPpMWXk%%s5bBMct zlH|>9#HQ}fFiJcr5AY$&T`DGHn_b*%Hh}h_ca}2AWp*8z&_QfH*KWCP8x?!&^MGnf zve%ER*m_N1q^CAxzkaC;^XwG-KCnFVNz>j_g7?q$CP{u7v0U5ownraSlx0jwFR@-< z>9TEpNlVEK<}NK+c5z4E6_9xn*asH*kt&ap>z8E?P;9nJnQq+O%e$9j7RBH~*xVZ9sTV zt&V%snUijw22i65m?(8hUjwTFG0f)nJosY6miHRT|C*7?kAjB!iUww?K)najRkqBn zJ_u^|SquMWU~6F#XlY*~)YPVTryEPnZt$}DKXvhZL|`aOc4T>`{HpzM$@{X~?3gI< zTpiwyb!zNQ_vedXo3DseN}l8OVj?4nK4uJP6wCpWrh531c3jSn-Lis) z7||f@AlI zCh|hw>qoLa{{SK)YoX|5&dKhv&i)jM*A?G0~ay~b|bvu_pt7; zm6|2-(iWBWIha4>V`zk7TS^~cs8bS0?k*=usM1U5YVw>k!opYXhc3* z=_G>FE)5?5oI*unH?~V=r*=1yrG*c&_FO;oT%n2DcAmxrM_)@edwYuc+kcoN(1--2iA!0em=Serxm6}q)mL)qXYf7@?J z#=8Wir7Utuz*@ye`nNze*@oDp&%)NQTeprFLpz^LX3N-3N^K zHY=yBiUOe$(R%QnwZ2qC#@@7k(xTa|?*pVQNYnunoLccs4r!LI}5?z1=HG36~xXs~)3p^(dwYv0#5assz3>71ZOgvhQG1 zoi{1kF3%a$++p02HBOK#aP`wb!1nmZs` zT*QXYNA=O}#Q6?v$?t2j4|A|TK*PQF-N-~ZO3_x+)CZ2 zF3;;l45Q?{z!2?vlI{>gJ`fj=*`zYh{cKkL)|^Sxb(B+$XpFM(GBbQhJ1LY*+xG|< zdTErf~4FG~xV8FU+Q9p^<35JA0+&cV7KhG_;LV|-D}(X<=ql+Ky}81g6( zBcW%P*Egw5oc0dZ{d~z-mxgFXhWs7Y5Y)`{!G=;#kEyemHt-wv*`>xsDcp7kafPir z0o%$gMbhPqb#T2J*9`Qt343`fn5%`sb09I8^qUS@^G&;uT%>-mer)JggQq5M$H3qN z`O%`+JRH>-gYHiWPA&yvJU)#m2rZGrhZ!AvqH>MRVaM7@LEQaol{aPOXOh4fx7!VBvm?Pd2l7Erz~V7iLEb?mV99?92EpsB!FF@3}^elDqMKKa;6VqUOo zVymvXCS#*^D7=aS&lR1nuzMX17CP@#nIp21Qg6RKdpD26t37g$@b$m)JXsS8^s24Z=LNUZf3&Kq$}jM-vwt}$lvtW35KcGBy8Bz@}xu5!k!0QI{T zl)Oz+8CEgX?yCpbxeeaT3RFO_@ZinQA%Jr!4W}ZZI@wm8GSGZZCNTF$A3++b_b=08 zGdrh0rX)mPs{G;BL#QF}+^Mi;#Wtf1*VzNsx7uaym|5P@>JA1d-i3bf)UQzJ&+OqE zLiD}W(>%T2H+Wi0&)t_R{J=JsKUCwMCBC3>7>ORCG^|i;j-Sxnq;tCYH;v-EXuqz# z)>gXqP!8PLmpM&noI4v4b>=m$B`uKd3Rr{9Hb>CJ*SU*4Jo{Q8UZN|r^&$8hCuKKh z@y`HCS6^Log2Xn!kQEPuu234wMKX^!3^bxHL}hH_&>Gkv_YB;SJC9anA;RS9jY~-c zTX@V!APb2>AGNoB4(YrIiI`Ktr+SD;LlB7P~ur z9VNLDVJKv7d?;xR%|CSbEaOe}q!b%1s!6OQ@!G9ICnz29=WjMlZPI7V$DvL5c`wkc zVZvyCqIK88Cvf}WhN7(z;?>?L2A7AJFaVj`FP@ZyVvR)(NqhM^k*ksx1E}1MR}l0U z!xdIROJVnvwRcE&u$SiT*?^#!b3!e@4!@|;O1m8W*7`ro1>ba$_4a`6J zWhcw#?)|KXdE)I=8`d;0v?y!nz!_U~%J_X&4Cqv%^2J)l3P1ddH5>ERVC))oL|BCq zw0OCA~h-8D#Z4>XYqE{M0hPx!^q ztr}FlxG!(TT0k$84W9x^D~iT?NMsoe0@nAnsUIl97}QjPhj$)Hw&(Y0wm4D=P3`bk zwdA*(A8x}%!HQr-?}XjXxtQ){46A$d{;&q)^$tn0z%7x>+xghf*WMkiD;8U zwq#xivX1=8(DU)2_qL-c!RoK@$rVL(!pxRAUWa1@-h9PxsxT{%=Y6`3R;I>Mx2Xi% z|Jij&;oRs=%dBhdv-r#2Rethq_vR3rxC`(dCr~yx|6yi2XkH?N;g}o?U0=?`aLb;+Zq|VTM#WHmU=_G6RnzS-;Rn zg&UB*XitXbfOBJ`?a5N@d|T1mvqFf~E+M@}OKDD&3Z7P&Efm0}qyP^d6$9R(7Ejss5qYy#Z^Xq3(n{_a*>Gw@cK01U+>Dy}YV}uhO2u#^ zUS|O&r3)Ke)r;H&A-9N9Bdp)kPL#TG1Us&&Q4LAQEA3G^)yoo4<~H!oGh*#L-+TuM z-XHMBASPD+=OFg4ozy_vqxBHL%X{qpb$rv|u)~?0iJ}~PFdR<+>lSRuOR~J2)g8nc zYL+|Ur55vzSphEyEcHS=4gE0X)P3VH{5P89_MkJOFfc+qHM94euk7mc#Qszu+t9Xp zcyJA6_9zWsHs>CVsdB0jvxR$c8v2W)8SD8%@*!a-p;7;u9WXJ1@JnLpSXxZX zpWwT28-ob?!UU5i{avF4`-W7UhCdW1w4ksB!0z-7Q6H7%TkJgC?4T^C6@I;tsD zj6z=ARcGrs%ERTbUO>QNU@G%fnQEWO)XQYqDwNk!Gv}!|SllE$)@>_{HiMw9s7qHw zfaSt;$4Uqco%T4TFY3r9MgQS?5xWZYhYAVc9hjH&&yI~Z#XXE}w{-q;Vy_Woey-kJ zudw|(2|$_1q`hHQ8ZMRxotu<+HN3ow(k-%Nw&4$fwcvYpenA|S zM9y7T;1Xc7R34XDS+*#ldS6p9~oYwB`4QPIQ9RswVNln(6z8QkW0JJJ<jI<9WiFus3TW* zkpp0Q3+fa2aFk!D2t|!CAhSO99lQgBl;F{@BwqVdPhZ^h zyk3`0%hX50S28gtGKgK}CE#on`0!j+t}F01C_ zflt>zuu71Pip(?aOGc+S65OiiS*{36Yid(}!C_#Ni@<>rJE4>slq4|$r*WS4?M8MX^An19v8dF8i3H-2JOw5(k$}5 z*x569HHB)Y^Uyf)b3mH5P#`TMa%@*WXy$~IOWeG0O!FvPTQr7{!IH|rJ`6&qmTc>v zb_}3pvYls`Hgctv8G}l@qNG==Q(5@EoA$dQUDNTC254R~c4L;5Ai5qZo5ueYoS2oE z`?Jv}(tf$G=waskQK*mj*}@yVS*=O}Q&_7ZjN@G;URQp~gW4v}iSe;QlLIX(?vBge zYl#5bmeEJtxA<4b~TR z1fm~UHOMe!TK=*1;|f%Kt6;!KbmtLw{1B$@J@dKkDAdb8Nt?5fO#$$l66$j-?&{!M zjv0uXnC#fwIPG6}FZmsZ@RjuK8iaz(L@6<1%z$H9`!v&VJX~WbkrAqXCSWGOz`)iv zPCGjh=KFUiG^?pKi>k+ zd#Q&j1<3P85zofZx1wT1ByL7i;kg{lr&kVc)$Ax#?W`y8M>8~=ORjZCGAV_zp9CJ1 zSP?m7x-OB$TEZ-}!&*(gV1jrB=v8^yT$cppO+e$}p+RGgG_V|d4FM|FxPyIdt$no$ z-B@@*gh5^G)Ep?&HS^Cy&2$`bSd!?7i391<;4?WW0(j6Qy9tu*y4$$KIBm)yDt#>y zIlx-vJr63pf^@P~mt)h=p;XM9|FUd?5*bCN@UB@)kU>|>Ey=t*pFh%#AzCffZ`L>@ zPHF%MDWG4SSz?6bM$6}FDclg^`EJtQ`_=$DpuH4+dX0@bzS99cmzjMxN1w?@< zgbTREXmJ;FclR|U&Eqg?ONKenFDsTKAZ4>?yqhZl{O03WU{rA1c46>eI$ji3f`O0G zq^}G7Tx`54^DO&5iTh)&3GMi*Df}^NIjAptE0LKeI5lGP8QuYFsh1Ohd1#!oxcl`X z$jsjY`6vG0#1s&D-dy3t@myG~VXv4_{~;(z;a9fOI?@Vm&>R$R>!sepm1{vuO_^!n@(E{#QyG(T+i+~-dqDCNhC{gz6yS<8gbwAwZ| zT6J$O_vdHer3#)VBV9*cuX9lA8<}naZXjX_ci1|I*sLJ zg%k{30`FarXr~{$gu4IEW`Xv?^X_Q3E*9(rsYhNqT%t-IV(NDJBUhHk-lIEX^!lXu zSe?sOdrtcdChCuM!B@2@esnV1^f4fjn30;Hy=7GdSX@6ww*p~cS5p}b#tySyE}6~( zY)pX?@O3vUuMN*M$0NSGlgHvC;JPKIK$uN4c$tI?_7|FGMLyVa?iCITQIa{(TjAWB zX_BC}LuULZW1tYW1B55qUG&O9PN$+Oj2UB8k5`IFOWN1sdeE=<4mEK_!42SP(y|}gAofD3=P?gyu?_uN~x@R2!ztP^l zzZV)P-gA27b5=R(*PKHejPmChxpiZh+eTH`GAj4ZbIC!rOO`%p7s^+&Q9_5gBf4Qn zfYQ^)Y8C2Jyk^<2pds3lNF!hge+$`M2(|tFUv$j}mh+8;T!FJfE7-VtxsknR*J`m&^zKt6(N6}97x7Tz}h6YkDlIZCD0?PkBfsYw) zKx+3TT<_{Z?V-Al^SYvW5ipbhFG$!XiEvlZ0A<8?NB>^eIztrS-Od4ODK~d~d+9T2 z86>Lie7YmG5Fz~v>1kHM6V`vgjnbvqJ`kYgELVk;b!=DMVru)j($~Sj-LtP%8K5d8 z)Y%kK+O?aIi!hM>EU(sa&~G(ZHK{!&)UAGbXoHgPNBusy399l)bg13;nIaS(fO^=? zQ}Yc_ZW0&Yi8)=E5|M@h zv<3ok_gSyzp2f(kPMA(SbGi{KoppAUMiUKhtj12KIdotHD^WI0I7uV9%_SGYlxh*D znBCi7&q2~%Eo@_X_~-K`tOVK*D=<<2kKEMpWi?^`{aMO|=6@HYKT~(*>efeIzyL_0 zPbDEBF!i$BLh%=CYepP9PK?=RYhk#QThumiLEDmiQ{8&*dFopWmrS2@m`m{zM{!GV z68W#L?7R`c1YtQ5tnu=%eWRsykx3?4)NUx5csuYg*_#574)OX%@5wzWXZH|f82}MK z&vt4H7WVMtsO{X%D4$t{cz4)el83qeeldnUSRSF36HPNq!ChVw;AQHs8Bkvp+p@RP zKn4Lir3g7c=5OP?s9*%OW%HGxPUy9jVzu1{1biBYo2mjxT4oKp@t#;}$ZJ%e$?PuF z(1CcgRz3^40N}MAQ75G*Z`TJC-uE%lf+myK)QKiEL%0N(c#vEa_UMBFK zAC}dF9V>8sZhI)%|HQl?S%iHaC;HQ&rQb83*1K(*ZT?1fh;>6IbG1YD@ISmA;i$Pt z#C@gTek@4F>1B+Ug)e-k!SEMHrlwPkAe%m)LSOr(1SHqWo@X@rRq%biJ(cElp%5WG zBS)IilPSg$8pON8}5G1 zTJ>M=d}?e|W2I9oMJ>6U(w|GVEnhwJH}36y9Ytm%YYAciXj@Z0)yn*fyCt07-hKybdz@|cd8Xad171(@2S66(OH;``erMIbW1e-ZttyPDO zG~!<$2^S1@zkPjeS{jGgZP+#vU=?FnnwJBc-RDxy|8 zkAx`7H!mYH@X(}%hv8lR)?j%S88mYBn;GT zKl6zCX-`LekrvIji@QYW*8nb_2Zno0upBt=;k-XV;XYJPRRm=KuK}0Coe4%*%10i7 zHRL_HV(z&5*7a3n0jJ6=vjV8Kv$PGK6wYX-%v1-4t6lOV{$a`xtqt;DhJ?Uzw95Y; zh->Mq>aN;<$g)kGf3!zxZ5QGK4Pe>7D}epRaly9~;l~>vcs!C(HF8ct3mjpW!!gow z9S=IW8wzy@c?PQC{c10rr&8CaWhWw5~CorKdH0lAwUK6{!gZceks& z09uKt$Kh@jRj0c5OutDju(v?+o*4#LpsS^qD2S1mc_ zysona!_nfaP;N~l;O7x+EwD|*${o@a9;&Y87E}2E=g@SY3_%$YVZyTwxO|wW;ZXn1 zE6$PE65m2JB9gHyteGVvo=W7he;+LG4Yeyc<)h+fey*`5znoVZ%?r!3(c7uTIjxQr z1$Rv(qyGcx;O4uAOPyETkZWhd-7Q(%IIO>_obJWUeMFFxwGM&*T%2BIQGl@iz(aom z>vX|S+Mune%scP?%=z*CLpo|TjPQ1sDdGtZJ@or1&tSAZt{0h(91rZVW;=<`oQ!|pCEjrF0$z4eI@6VXW!XkWj_2)BQ ziJm=(fF!vshH&|mTrHU%lUx9Hiq*G7G)Y)uzb}Fmih>46lUP>Z0giw&n0^)dEa z5=j6{IuOD!_%cz8b2=#y4nsbYYr2mPs_YI~AB`>zXyeEn;sK1&RX_7cBmQY)CMLFB z+R{)%9z+FsxL+yyRqbm>5b&Sv*uCZPqjh3pu8Cg?LLx14u$C*55tn{bNF=H3XU@*U z$56kqq9ogswRtz-P>7q`*NB4&j4UQJ_mu!;Ixu%YSin#|8&60((IjMT11k{#HtFuq z9c^{FN5N}37&A_+#M zIl_achzaCMYTa?GmuYT6|~h1ZLmfZic%3${qzc6>ls- zcjn1%CJ;P%w8J4}kImwuUzABcCy3O{BBzB}B>W*KK;%lZ^{P>>~P*V7z%2TgegCRrmAWbNR z=d1-ht;r6Nbwvd-w-H{IGCkcqc$IEZ2{iUZqG(j20rAsagPTAu@-;GF!|YHQyKzr? z@H5J{Qua3I5f6NEo2#+-Gnm2V!rh%vRAXTYNr_lqc6ZCI-;q1;zcmuVHtm{@D?$4_ zYjqeb=>+w#BN zn8a&L1A^C4U&lcDk=|8qnyW|#aXzJ!oxqR(=$E@>xk?vj9)55QgS0da^o#|At9u4^W>%Tc!fRf z)MdLHBdS5Yr8nGsfR|VWl|9b*t9ms4rt3+VmwH>?d~FR3l)foaxe$aVC$r!#YDuJvo--AlpF78~mT!tUX^BF@vq{=H1nm&!!2-Q#x@# zBpXb_3%bod$X6mpAauyXqbmU^lilrl#xI_w_lA19?EmH^1?fSHi6}ww|5Vyqdb}AO zcS>TRmE@dQx61n!xx5@^43kjjwxAel@LB3g>jfQ%j;hmcrB9`05=JjHlWb`OFDLoy8wXiHvS)M&5o)?r^O?zIEE5P>G z&U&))QrYe}?Q53fV2tkRZO2UYs=++~KPS3nI;div^+kZuA-%O74w^XQqg@E3 zi)&X7siL)}Wt`Av#22sAyNJ4du3)r~%^9K!jX9g+q&urGOy4~*gX3YqMJV{53WqW@ zp+%wag#QQDiG(r$jZXbn^6=s+?n zZCtU)d`C2FlDnQb1d+2Cykgi%l1wuM-qB(-a%hDwTKxv`F=Xw$4V-&^HM0G;=dcUE zvSaylPl@^Z)49=U=J3AkLPtKu-~2aC-?b166-kzDHk)T{n2Z9Yg63D)n#z+Luy4%w z4PGJEJqkOs_on`q0F2F|z3?RCWl5&$=42BLQJz!#qKKX704d`gQkq^180g|2ES>Bb zQelNfDP^x>p(#ID9=bmNHVE8dSY>;ihwpxngn42wh8jiKjs|e3M*%({nBH?K`iPg` zUhBfGl6iPpLE)Od*m?Q^BzinhyJvg8G~46DT~npEER%*dfA%1%06-W{y;6ER9?if4 z-BIjl%3d1mRxhb}?VO0tdf>;@v})g24p1_}RPt^6Ra`FGc<~lI2#+aOZBy$}E~TFn zo}!KSl)YeTc`?at&%>WKT^`4&6v76H?V$0~5REb%`PTvW7}83J5TE``AI%}jn8q-f zGSD>P}uBLb6Q_8*(46%th{2zJIta6VtFXKUxKb--p5GgUw> z%=x<2#DY!e)XCTZfVKsRKS8kcfaHBAX{|jPd$B6v)y6kwrdX=N_DwM=J-BXNMMF(E zcAcD&GyYk%j=(RAf&>f2E!BnjTX4|Q3^iT`PKXkG3eQFX^+eW29=yBE`W=$2E+JK; zU_>gbez^%&;5tuURrpzFn>z)&09d-})2R$jxS2ELVa3~k_W)QQnu_S;I|ea$G55g6JHDL$P3VcwsN|Y829l67`KffE zO~G>_rRc~wICjnkgkJrYS@bM-dK5U*UNDaFWCR69f@Qm(n}scMcgoTyM|kuEZaZ*} z1a`?g!lOiF9Pv?5PKnS8J$Q#B(|+037p;{*+gg)-f-N^6pF(kld%tiat{Tk57sOD_ zNW0Umzbo$!Jc_?a?Y@un%{F=|~kCmR8 z9;c-SBt5b&&EI17_GEVr%QDTbn|a69FT;p34|DLQh^_p?`w2Mk1`A~9exgm=dZUiX_gXGEokIr$ZXBwuEbfilyP8L*LclnM zHy@1$lz}QA){QvSbsKVKII;d!AvZlquM?8el~8ICX5qtZgBTxlM9~2#RS81Lmmo#a z3dJ&qyxH?|Gb1&`gkWE2{8ySJy|uFzsQV>JNe6*)$9G(}wTMGGuaOk`jZQB}e_#WC)ZH1F+}a=uVi)#v1RSoU=JezTXexNsVJ{Xm)_>m*+VZ>Tll zoYG0siYN<^gF>I(7>H9zx*_y-m#BPq1ttnnDENvX9k-r3vg0{9p4h-G!`b?_-@XTJ zLx>;aS2+fQa4mVDeyT>bc&$jrZD;N*9(ti2F9zz2GtyD%)w|MR5paSAi|JasOr9W^=GG0poRe0ww<&-o?Us6#Rh5DpW zFSHi66zgN*J7O4L{ksfA<%bEU1I|sQ1B0h@)y*-qquHBz#h%_tyXvyH$0ACYc}*d;z{{UiFQUl$vQ?a;r|x+Rfl=x7)71ep21$SLyo zK6$>f+~+7Vi{rj48qEoUV>fW$H&7PlT~es63&(Aj&hwR&8it*g71fV0OKp$B{Q{oY zsl_}fb6B%O&+GaYt0@vzy!kf?Zf{Ywn)D_YZMTx)o%Kl1}&Y~Dn@8hudOeY_> zXH*q%9Af+k`jk<>$_-3-{CM#iyhHo78O(f2%g0W=B!ouzb^hc%3pJ#!4D)a6Py?Ar z;78nd8n}A`5`GtrJEK^g*ttTPd<2#H%}u;`4`r4f8?gM*JL_6#s)mKJB2 z%4t;1!VizK^D*`c^{;W%YPsQ3+S0WB3Uq{b;d}BCP|4COQWeM7eF}E_w z`8v8RQ-ru7E`XOTaS??jI-T6NZs9g9HHZ$|sS3`8sJQy=U8go}dg1qUn?oTn83s1A zLBckZPYmwY=m64=XWqpbEjtgBI<6J?*{M-^6Y;w6i8xjg3&Ogz9sFdA@A|CocKrMd{$-f!lLqW5xge*AvJXE{iJb3^{a5; z$RkQv4DULsm#_0N>{;>gQ|Cw{gd454K+C%+`@&oUmoLxsfr_tDy@sw+Mg#dk&B)cG zE)s;CDAKS!5RnzeBC5MkoeFE0UrKT~M0d^m+XJGZ&3(Po zb9D(va+OTyj<-gqpRG=h+J#eIrf3<)rhCVx8L63&w28!nS%JHMg`&Qul+$fx)9UBD zvev243jEJlc|+B`c-D~DG4@HHi(k&9;)1Fi=32awU1oxx{^oG$(WEY#>^GJq>?)OBLN z@%x;3zke9tJVZ?bvdt)bE39S>wT{7X(i=Xc0 zYp*7r))_!gJhQ>z@(ls=%HL{`12`ClsNlU+9|-7XHhua%{eGoFB~HHYaE)dO>7<4e z9R~0XlkirWuc!xjOHQ55t6-g=J6;Peb@d(Sn%oADVPdVF{Y!hLue6pC!+Y9yPP8>w zj;~3#ozHsJhZK!`k&4@n`IpFPz0Rk&kghzMGR238ofHr_0W_oD!cr;6;e0dTe=T3C`d+5cWu4nwiOdIod z%5;rzNm;SRac1m1^%81yH1y!8wu>6HjYzU*@1Y8E9U%#0+TJk5#%3~DvKQhpAl=G$ z2m>1L2Kfd4&9YnVXr-ibBX^rrrZ2BuIdQ& zlM#>}S^Dd5u>w>Vg??1?Bjhsi92j80Gbw=kWf4CtF6nGi=8)5mO=X z@^iPn!+lED4#9j#5rzaD4)=U7HJti=k5kLb&-{Ddkk{%5TqHt{aD%505VTft5h9&ithEE4 z^{rK`?T{Es{JVwlRSjD8v4{5kx^?6Q2(k&QVBcE*Q2cTdu@qWEVu@+SL682xTq`4<;Cg-KVZp8PZFBtL%)W8h5uM2&OFDKptoHH=@+ zVBK#j+r{nd2sY``sU0|A>1R~=R{y8HS$quwSg$DSTI%gj?=J~&4tqPB6Kg)jT^dT` zWiqBo&^Tp@mGJlchU=QtM7M?qGVN8<6ieuZOQJh3x`=nOwuM=C9|g9obBEv z@Zl|H7mXDHbI(mQWKa$W<^Gs{JrJFHh#Cfxyhw9oP5*tmVh;sUKU1MQ{evSKS=$y$BQA zMoQ+UgAUW!v3HxVbYpszqSLZ$zKyApK&=PneG5hbDJ?RkU#%#vTgB zf&=GWNBZNs3@HJ*?V{q_3fgd&*(Z-jz(v)p>CQxgqNM8C_~MCMg5Qk9ygIJOb)`AI_S zmIGM}m)WG^oe=bP1RZ>S8+2Oq6}@UO&F$jx9n_2AO!4;r;B-n<6gmMd=6nY?A>DPs zMyC5qq<;DLChO1kNqeuk#-~s9+LYsLFh5PcSPoAJLFD@qOKT=s6IWB$d$O(=)czme z{?y=^=vkO|?k`t%&E1~phxk&(7T%SyP>EheC$3|fJV#L&?FbXE?d2vAg<}L{<}!5Q zOaokD9kOo`V0r|JytRaj*F_(+sLrkONuKCt^_+zOyHSleUp_DM1SxdWAv9U0_o)1B z(*3)lfWi*PbhISDCR5~R=+#(m!&XjY{dZK&bWT=_l{g?*%aCDsRXO}nC!?{_M7SF` zEJao8Gr(J#|Ex3^tz<5E91+6VOVc!o-sxjMIapVf^7IkMPHuEdlN8>E$T7c&PI+1n zzjs1GXFH`160o4|lC~lzTn5)!ntQpC8_VUgUq({|Wf1YTSpZ+?WyQ4M237=*K8qfa zB0D9b@qm6ya%83nsIX?mg2(U@^T8j<<3a>p?Tj10Bae#I9qxXON%_Ui8e%!YO?V-0QEr5rYT|dXs{`;%+SE?}Pen9`0z|SP5&{Vhd0Nnx+yqn4dZb z5?Y-Npvfer;4GNti}pE$f4o#Q7;wrL6#Z;rvt45`8njHkL7^qIu{)M#Q4y5SJbZ5; z6iCR!wNKd&Z<$i(a<*f|1E%)Z{BP?dWxl1y;o;z~zdzxzr+~eE=rg{MSnoZeQjN_A`Or@HgO}Ev6A~0| z?qbd^5^_~QuYABSDycUJ(fg#lK@eEPzV7r+?h!H;4ty;$TUV9bstvp3Zj*P2>MNve zh1-Mowby-tQ2Wa=DtPs&YPt{Mq`$>x1;nUtxfa=E)KrbYDj-=|o;|Wr&&J8Yp){`prbgv_nZ2HH&&Typ$4N zVx?#GRbDm)(_=I#FPkuN>;dgK$S4AT-}*Z&)(i<#rX760Ko!ocQ5J7$8AHMU$38zn z4t8~G?vjiu-rPhRpZi@&ABxYgz($!0kZ$PsT*fkze%4dA*>E^Q$h` zerIav{SA^@j|0AjwB`7)04qS$zcF_&R0d&ZB-DFS!mQ?;4o`rE_3r!3Oj)(yL!3_5 zPcU{u9l!nx8e>=^QlYI-3hF00{7?I+As@%04k?ybgTkahV++Ta^!7XD7+pt;6F`1E zWE{{;sP%))Wwr0oLb%=JcuTBIV?CjqT!=u*|1)xG(<}B%3~Y(qNMhymND`mH`s0br znZL{d)k{Js>vaz=UuqCwym}zc6V*Xhj#ifZ!2^?J1i_#cX?UL_wQbC>vsvj8i`6U% zEZEjQgg&l}kCN*)qbF{qsX@|~d4Ub&kK-S)teKtm|3%#n`y%3_@Dk4^bjQd3P#9;8 zoIHX14!Ffe@`hjRjgRYc`#NM^u55A0^&Q>fcyph?SNZn5qjc|#uV%3qtrcZx?OJ|J zdm7D){D%%!IrMHiL=K}B$Vb~mc;ACWs6c$^h=5J`453$SI`p>+x+xjwruU&P@X6<9 z%bpcb?>W8?=|SRjOJanRF9PC07}~)3T-<`TZ@|{!6qWudP(-WeVLn!PEA{{M#0I1F zXq^OUwQyHmmv89uGZheE!S6d;es4F4ZuPB;i5BFY+>(5F4#a0@Ts-5+Sm~nsQs=VIuqXjf;*M z8DpZGohDSkTRFce3`6bj)V|>tXrZ(<4Ea$6D8j5h*F9oy(gfs;y<$`bK>&f5i$*vo z=V+Ui_(Nz&m|6<`)FFM!LK_qo$7sa_2=AE%jVjR1$X()SbDPkb`g?2(nwXj$wyGTU z;K=!J!Jj=NL>MPI=L3Id9;0R}@nq}47{2@^zIKGV+~y5~VNH_}RD)?2jauyn1DzZq zc}w)2J~25i(O$hw`CmI~T8_>4_WZf2ylooI#u5QrO;i=A4%=lQ&>>Rq7cWHx2d1@= z!-$D4NSm40w*)A$pe4Eeg$G3T*Lk9K*~@9=n%AxGB#Z6lS-ON+EnzZWY{BG7{4*14gO9>~&!HxxVjcY;!L z?6R0ywzF4FUzUx|kZJKUy`4b6qaC$$C6qKYsKQ!)@&2`Rs;bNHfr8oKRZA98+P^4M z&&|rZ#B15C2V}cYIl`EG8SCrmW9AWh5i#7aY_r%LZymgsy(Jt;6$*S)Op=fud2Ps7 ztGM_E@9+7iqm5_C!*Wlx=p!!}7%iVdu+s0eMjqHEaZ2`bTQr+5tqUOfAzaLk_R@vN zm68*Pt-kr<9C9CsLyT5iHh|iI&zuPY{s!(yj|ZO=SJ7~#@u-^Sh^lXHI+k_sp?^L# z&m}tk(E*bj@NU(JXQ6b9i?~rv|6(+SgJ*U+C#(L+9nlgOxvjO1mFR|!THLmo?~eyTFnfpwtWAG*Svl_^{nowJpZ&DO~%vZ84Bb@1LQa>?upM5+2t9 zXZibZhRQ|ymL|7pAoQzBS^--?r7zs6Ti6(oGiiD4QS{a=%}-Os_DaX#PFIp4_-AJN z!Nei`)v~S)MUi!9lCcQ?Y-bin>TPqfbGoSb*zl?KoLAK#FcLK9!hvl94!AldWK-&H zn;{#o*SD zJspy#pe%jNFZ7yq>}Rticr!UgAjdb-)SyxCxsm!D_4STM0A52=ny^nb2Ytmzo!hH& zfzXtjDhdA}Df57CEu7xS!d5glTr^@Xw-WsE@m>&F)jw%JtrOj7FMMbJ7EilzP&ycU zd*5s&hV0$qoGp5w=$Hzb2KloFaQF#dC@|>62tNYa+o&w}C)Fz@cetUKgAW7Bb~VJq zPv?)AMllw2*JU0EMOiE~aC@!~uqNrYOE@jPTj%4uNLN`)6z(OKKz?zXH4PfxJL3ELs$F$$-jl4xNo@)HZK* z5KsG*u7mYwqK*?1^qnvHb!rom#d*!4>)T_4t}1V>VhnoRRbuoys7em&3E~vEFkfV4 zJruW2h$A{qo&bcplLn5ZzU~;SI!lbE@`@{3^swxu%#I<0wNb)fgdFq@faDS>K0MB& zuTan4i;YV;8Sg$~V8H2>^LsA;gL*pVmhMU_Jdm^Aw76*&LKjk>zz^o$PxKI-)ym%_ zru0kZyfD$?1Mq1?HP3^Hk%9<81DTh9Rhqg834cuPu>UVFRIb zCDy|0Qj%#MxGEyPg7`quZR_fEO<2^FOz{-ScS(^E$1N)mLqW%Otp# zv{hJ3f#{_7?cM|PTYe)V$!CUaE*~D7VxHR9=>n2)iSg2H zdyG{fC5HiAbppV<>TgyL=5*!%90qv%yO6wcyhd0EexX|HM|U3tyyK_@^F z&cH4c4n75alt~H~00o3F$+!WEjGS||_P|}~i0V8$F1sgSsZCiZgCW%J$R4Gyw+q#{ zvi8fhmbg3^lM76o;O1`C=}X1H!4=_zxjf+;?C&w2WVMQmxj_o|+Wn&_FwI%C)?7>h zK(_)G%EYEGH~h0|b`Mfeeh)Mb=OUcXeDp7*d||DXbzZ$h!vy-QA@wM1BRS8o&LUr7 z-XhtI=U}6$r7!9YWF*f7R1}z8*kG7DCuHuRi*p;(&V@W%|MT zU}3|FMgtdGtd;Tf<%_`a4xbh$*=$#$7#&HSDopXv7bh`EzfbrBt{dksWhA0LE!O<5 z)|o_XZ62=DmKuNBJWNg72Vjm^m|bX#8*t8%sFjojY{lhnUwhk*O7_mRo$%*K49>@i zhf9JrDE5cZMFPE^e+L+hgC>9s`c&UWAMH0pgV}~q?|wi>{WbuP8)@8UZ&Y}*JSLRh zpGx6mvUHN@uyR9|pf5i8C@KqEw7-YB_y#B-f>w3 zzp!HlQ91tCx9M40k^5=TWfxip&$Qi|ZN#f(Ra`n$<+dc0o#xw!!XE5Dba8kj!3B@hdygfCDpN0UL#&*ckC*!~Upbfr=TiV?4kX?hP)4b!*v#d!E*Z<6IP~qs7csMh zA4M+?O=TtA>_eu1V-~axW%=Un6IBKXtY2Z|H?!N?^|Ga*jy_%T zE>wktw`W~s9rs0w8j#O{4pmZ>XR^z*D@V1UVku2T=J7KK z@5_R{iY;IJ18-pkwvBTdMo-a=HJ~he(06Vmn@lE)xJIM*$VRcMlBPINg>dHlfEVxy z$AqqIwJeY-X)2-7Eq1!2hdb>_4RV+A4c(Kt=SxlDa&h>vk}h*^*KB$E`Q^>SgeGxIe#vLZ@SxboZY%Lh4t4`iv2l$A>ERKSv~XmwFkt>aD@9jR21H_# zv{z7r=mE*w3xu*6CD^F%LDIVeyOEfcigB zj?z4nf6!`rDqr4t2J2JZ!z~v<5C5MRg&07|AzOWqqdF7F#+BmVhKp`BifVQ3rVumL zfrj76v;RJG5!)?8Ii8UR>5C75YH$_Q{YrLXEY0XDY0)L_A-IA?xMM9m2;NO zcQR!^)4VbeEVPM2MboMqr(^6fdRyR~^~c@5ZV7<2FyiZEz9)j*i6nk+FvW$~AK<0O zYDV()@^yHgmObHUvqdL7x}^aX%Z#Yq-8ao&xa8^O^HvJ`IkAv@!x+6t@jLuHmrfBP z3y9wP(plyVZ!@iRU>%A!hms2TN&V&VcU$MBHGj*V)so*hT>B)bNYEVS%Zo{R9m4&+jBB6c@VJo|& zBK6+edf3Gjys=OR`IEO)hyizYw^@|A6a4iOXbn)Y&Qwl{W%txB4VlDn( z-^GBgxa%*QcN_c;;F8%t#ssRGaT2D-C%Tme{lrPO9I^wAA7=}?+FHOkwaqh|x?UTP z6f6yw&yig1JH?p;ikHrDP{ZDG0kb=Ij)pp7FGXFTmc0H!21*uus(FSusT~nkYVt%5 zf0&hh_x4oh8WZ*4NDnHU{vc1X1Xk?>H&ys_v{n!!?^cxFTgMKje@uSvh=OV)@TuLp zE9e7V*D(9t+0b=lYBdRirZiBR8cPoaHPTr+QFK{>a7%4!z22q*XfVKojS3sd}Y4DE``{qXO z$vT2i*!42;o3!N)ke-&v?affGnL}s`Q9nXF2EF8Rn>_gt1Wy@UYO9|9=kC|Dm#zO= z6e+?J+&u6oBb^HIJ(YsV#G0{{P1RR*dHQ0Ky|83b??kGqJt>XNN>(Usf-uTWCysokQ3t zYu7Fu%NUiD+slc4koH^X?}kMNSIW1!<6Z_L-y=o3|4#YRo;5&x(p0KR?sm|v*1AwbR{o)zxzMTgZ2#3 zRN_Bo1>Y66nQiQKy=@7m8y_e0O(0`Z%yt00)pe0GXk+ssP%RhXI$FUN-{&T(uBA_m z)-gTO8HM!0cvDs;1DIb%@>!K`#poiy_4x0#n4(J-3-fCOT~(Dams;7uPI)P7$a~Ul z<$bSwlsx|f#_RE*>b?(KmRt${RwBjY@y+~V(k0Q{>e)8&YK3&0t@G(H62!g*h$r_W zh8q;3>-=j1aRfGFWdO*aLN8x$$G$Gl%$WRkOM5mDm_bydD3)GY!@xyBzHfJ3MQU@` zY_oDbbu{lZGMciM!*EyA$t7GefykX`y&whLV_(@1QQo0gy-z4m1gBPio0H8~_Kg6U zO%CDH>OZ^DcT@btL&e=J5kQKJNXLh(SNSALDFiOL?RgTdAsPTwE!*H1#tZ{1*Dr&LVrP(B+%YJfAAL_bdgG6q19#pX-&W|3~aqeVV_3( z|EvY^s9+9rlcm2m%_y~C@4|_c1or3qFyRem=&LQW ziNveRNcPEd{7q#FYOE1OhT<>fe=MOino62S+^syN5i0`}aJ9Fmb+aI(aDP7w9!!N^ z6fDb197e)Lh6$wInf#}l{jD9Ep#Dhc>fU3GK_Z@n#tlRx&PWbIE@6fX&sT<$WP`tO zrhNa1dUOL=5fVmL=C6$J$&e^`)v@ZVVY`rLTBogWQ^pr41M1;>qi*p7-gQF7d$;%& z=!q}}8Y=(noFt7`slNjwcjMxjuLrR!z<|=jl?mHg4~yXT8ZeM*-v--gj+pqwwpcxh zN%Ux1-a-}Bvyh@R(%GgR_*~JWnQ*~l#U|)R#*X32px{@B@a#x=0E$4oSYJPjjH0LX z8pQvv<4^Eey}i2xnWtw|xlVk^ihrYN=Ptt2?Yf{?RCecIz6j?nJz=zu5pG5jHKtC& zlwAZj+LaE5Pm@p{c+jUw7%-hYp}ka@2(4Ijq*m(dQX)O1@(w1bAESL)jb`?JaBD)F z0)?nu5c!$7S%<-^!2392s8It6hy@gk1#4KBEwe)6Pz2;24dL|mZ|#(tn{0;{$muvU z@p>Tm4*Go9?Kjs74q3c_>hzJEX5c>_z{tyD0dA^Jw4~M!e>-jSL+s=?=hTRYPhJIh z5PwWi`hac@fw0K0e---vuoB~wrvGo`z@sWtA(`L~2kG_>!g>mVjBMw@|K)}V??#0Iyv$8azR!USD) zYA&U9P~lh|NKvD9YSy~Xs#EEgKRdsN3+vL5?tuC+@FvL0>R53qKo{cD>Mj3n- zwgqxuz1yk_Bxdm*UUUq$!c8cxx!B9CXNiPqNRe2m9mqpq%#E%T6bbY9SCaOwpCvDzBjlo z5^^8`%4 zeW-bzP(}Tgxe`EIpemm>^pv$;|B!?R8`@$)H&n==kikLgJ&AlEiN%-Q5inZLfeoV% z70Vo~B)+MS3Eq43idVERRKO0NR?va26`S=-n4X}>0JJ<!8Ekic1)p zz^pH0hTBSnG1GA#G))QyG@UA`MZGfn+2!`r1{0pySTN3xLN0xr*>W~>gYNfb3DGBj z7-5e8WscwD&nDjVLZYuy8zvTH=OA;y$y1y~2xlHIu^0tGDB1R)A5K*NCNghzd7dGP zg)c7u^fzev-fdh%+j9%5(fW$yeA*Hy^5rndKicSJ4OP)+jv)wf_?|6uQT4Sd{A4(^ z{Pm+SE5Xe<{~*_3e4%T*WIrnH&3hg3D5Y<4z`I4G>|X*CqQr79t#} zv9+Xa?Hf*o(Fy7B*88;dQCx51>WnLZibzZ}Ca;I+hp@|~I(Xi5TY$enPJ^Zi?#G7R zXUywIP{i!R6t~20*&B!>#dC27HfQGoN$pL?;`HZzi3ln0RZcbYlwG-)?+Ni%Wfn$w~#lcY%AEmmAfe>&#aHp?_ zUNY-_d=fw!XX`!tHHuE{=bgB^UHMo2HL75LIz;vxuT3Ox|3I++&w2 zTB0rC^WMR@IlqrJo>Rbp4W1K>Qn2G&lp;>u3h00L7$YpIag$Fl*PV_mhj5!xewTiBJ{?%!-|`^*)*1XVjwh<8hGP0 zfLBZdrxD6K>`FdDH;FIM#N72kmb-x(d-rXn4;1inb#b420Qhc)*y&-354|o-FiBZ> zDrmH^S}yr~%rcS4>vwfq76XbM2Vx(MbMSNxEo61Yo>F1775@JMK}+r-Mh#VY+!n${ z(R}?s=Mrhfh3@?$SYF`z3U@~2_YN4^dK?&$fH1_1nj$_;J;SF1%$XwufsB5if9kt& z(S%i5adLFt6F_vSsHr7u512{-!1^E%oR>T^ui z^Fli6fdSgrL5vwHTV|xXfO3vnl%k|r8de)I^CK6YkW~0Mj8EC-=8`K&Oj0MXYTK7= z>~6oioWyH^??!~>$-5Ngqu489!&P7sd2HCPXnt@rg_06)z>q?Q5-t8*#2FZOQBH9Q zlFk9}10w{mV0PKCr=f{wYrft6iu}nnKMJ}l;^L&c{Ot?M4=HJF2fJGVC+qLmR&S0 z6NdMAuh#}@_Y_oY)crL<039{8r@hRr7P1&FECmAE)X&&9c~#s_8YsFpi)i~ju0{dm z9oJJq%^@YbN*^a1o@oL~L(VhadW3%LQ>Bq2TH~fs_C?~>ELTW?{u+S@mVkH&z*Hjt z)}?Hh>tq$sKt$?b`fM=d&!g8Ggv+NiCO7I43@EVIXKwt>E93$rKaQ;3kXRDS%*4yu zJH^&5j%GQ$QIkewNko|iufwO}BZHzKRKwxr=m#Ai9e(Z}mxQV+YCTdi!uc4D%1EHg z?~D0Gn$6_ncJ;dM`VJqRk<96fZT!$uZ`m9PF>wk9*heY+`TAiHYWFB|xgO5OyFhtX zl(+j8mqvVm=qZs5tN~S=L+_G=Dltn<97+$qzkAkZUC|X~27zwyE+0KCK%pe{iyW{K zgrXU#tGG6C?I+Q_$6_M`5dxf32fgMYtnYQ8W}#(@*oKrnRF0i5rQbi4JVx2-^pG#- zwp|C6RQ1jw?ZG2&?GeIfFCc)BRqNPyoy>Fs)YKi3(Xq8>7ojgGkZwpt1TgC_B{H5} zgF6vh7%cY<HXB0Iw&Jzd(%?y*2a2xqYTBoS`3spSRs@xWo{1bye z0$;3c330oa^YWNUQ*EsD8iyEO5RN-^SW*xCTxKlfZ}o5X_Yh~ZfR-nxxO;kslh--C zgPXtq+h>CSi8f3;nDI`!bKl`!M##!)L_@N1XUdhe3~i7zo?fyXDgHU`av8vbfJ((d zKKhLpmfYU23k>0!uEV7A0{fEa<2p_fQ`G$U04=~}5OPCOGPz44UD2I0v({TBtsxfj zOf7>GI_J^KQCmGMXC@&cBxk*_cWDZyu8p1=4&6-0IYItUYE&!}-YMC}4B|JaCMQ`n zmhSi(Ly4De6{n6Q%w z+-CZKyhd_BdMmu>)jJkrNG~kz~d3=rGV;NsD_xQ>C<%@zL+V zGhn%`s92iLL4qwu>6~i!X8g>|us3^Op_xc#f~HbUs3`&fG!t1z3}%M4J516&T`;tF z>m!Ng?{T+6#{WM)r`_Dw?E-BT?}}g>fMG;Mu$glxUhfLM?!zeRiWdU2ujTZ|ws zl-5m39rR1aLt;-TkK)TBo}NzU>IO51FU;4l_uzaC{@S}u#Amnqs4c&TG$5})egaRV zl?Ik9e@VO8_S`@q{=YL7B*{sy4=w4$7FAS5bX7)D!RB2ehqEr_mZUfzTe9!KbZ29q z<$^>LSLj~iyuPnU*CxV)LP~E7+DNt7;uCe?$nuc2<-Ja~{FdP3YD+K^#$vfzsacbH zdy`90N?wRMq))+!L3Cc-)2*;Hexu#KpZvC!w#-SWg>VV?@VgV+iFDjhjS*DpT`A9= zpJ)2_L`(oCcTIt=Rdg>Yu$VM{7 z+4o1*K`2LRHoW7*_vOEtYImxhbvtVw_Aps^V9KwmAJEysbPRNg;a(MTBHgs%^GT3+ z8R2>zrjtso;c~>{^mZFS*ZseHHdxdl{q(y{?vK(&92I*;sm{scaW$#_*#!#rbH+H= zM-9b!)!;V`U&(Bzm!24lRD^^G#W4Js)J1Y3!A|eZLQx{b0FYIoaUur1x;Ex8c!!TFDal zBS=|+VzLt=*0-z0Cio#uo9&DL{Wrij>%jjgyD!I#RW~e(?XBOr`ZPO8olJmjj|xn` zYlW=I`xP!Y?|fTPh%2hF<+*}8WO^pC=EQP=F{uanqwDS=CZloabTqOrO!^;7Lu)-~ z0}C+(a~aSkRjW85oUe1DZ6#a}sgPd#Ex2e~0^G`X!tAr8AAcwik& zgD=QP(67oQhAm4$IC+hPoE{>;hmix!o#32Cgk0uxMznZzFIP`CGs^~FZ?ra8`o;)O z+?rY$tmrvls+M+go&@I{P=$=zn}NOdl$Bq%SBBL=#ER1bkuFve$Rv&1@h{z1Z~Hyn zK4AJR_`1U!V0M+G$N|70pTR{Pfyn!lR|B)CZ*z}X#}1b zzF^wh?JA2~)?{A#5i<4CC&CLB7YrC6BEjy3=EMEt&`qa%+Riw=tzH7+t*~VCe(Fiq z?2NR4dnm`d3!){-HFTH*Ct8>FfT<>3n-oHT9Gx7Jzei}P#C8B(rcv!L>X4Da@%p0L zgKfs3F2$%eH=3EPGneNM ziV#39Vt|_pl7|L52d3|iM-Z%zV7l3KF&F9v^D5>f>xzV!H4@tGc3bm@N0t2xd}-1)Mz243E>E9DADnkGYk^k(t3qH z_jkAG;F(uV*6e_P)xR)>%I-PlTD6x^A(LipDxo3!U7x*~Y~$+`JZM5``efNQ!-eSvC?? z+1;Ekz;R~!p9dz)uYK&Q-P+CWj_MML1xJZ$wi7jWJm9ydZ4`mv;{tXvyw zuO-TB;#C#CQoH>p%n3as1?7_f!4M2|*u*Omp$%d9A)}W@Q2QfjUmkjws~7S!59!{4@Enu-69cGswF$>I(VM@%Nj>agwHfiDGD58+NsST&#BJkZpa zdOvyT(0qnjVa-A?^Jc()Zc)5oD*7EEB?A&9p9Kkd^STetZZ^ zbIqLo}W%gET4nA}n4^p$W7l%~+`!9GuP4pm%C zd$FM}$015ZY?$me=H9Nqon5f*NlR-mPK@Ftj==an0`_ zEJtrMn7e@`5Brk}Y5EHb-4#=?L%n_Lx_85HL$G5}7pevSEzJV2#WJ4(s-^`%%N)$E z#_O6!@=5MW!?1Mfc#VGkDkX|GGLlkN0tZ(W1gucM=$=Lg@zJ@+W<6#7SgVcsPOz`W z1Qz3yTM=YoOJmblK`xk3_PtR$0m_$#$mMhCnStE+dCv)PD0BkxEDNpVcxx;Y!SFna zvs84f!O}Zs_+1A3i>)sAdOoOo)5Ot7exofYRHlKvf@zc^j=pzrT5s!-lP;_pUB`)I z8%-h3q!T2qp!S2?&+9PIoFu(dZhQz~b@fG{&c7sA=firU13yUWlVyEnbIlmJs|IuZ2_K1JdXG>HSkl=67@x%Ze}IXtcvCu$ z)kA{25FR|S$M#V?`A+-ze|@z5|sZ8Fuf@1?+t+Xyo>@z93?p zNWfMwr^J0JufMgAC#d^z45l}2lq7g(4yb24@ryrMdLEP`8FQ~T2(EbJ*B+A@=W<#W zrC)ZTBN)-4xiy$*N2c;O`Lp(^hdH2k=fx^x-939uf43`NCv%-CBSAyW5>lP_ymHXq zFL=)SG*X`jAG{~X&IM!tHu#Qo@83@0Y!(=_n97K}wrdOgS>kO3!d(x)<_f?EcfcE`sB^a3r4D>4f&I^ zQjX7!iO0o?(dLI-^k>STFO4#aKp-+B_g^0#4*Y{*SKy*gVUJRxqSVwOnp7J#mo5D7 zl8a+~8ubCiT&vp(X|xJ7r-E9Hz33fi!H0k&xrR@6BKA6)8HDvamft#x=N{g@;^6tK zv5|rp@v+#WyywX-RlTV?<7v{bAirGcd}D$+iivu_HB{zOMXi+4ayCm2)6=sbXXLi^ z1DL15F|LMhf}xzfFB@J~)`rAQ1vT8S2Qffnq~R@C49&$rTOd#5n8*v_CZjNcz{l%D zg9k6CRqlQ!!F1xdVz}ql#OYCU(c==fA9yb)WUNTSk2h)x`aK8aw!#J{;jY6rsTjX22ZXxfD|6Qu+=Wd)Xe7C z%`>hjiA`^fsdGRBu#6+|c5*w7--Zjv6uBR)V5=CdX1ZxKUR_McHX5_(?a3BqyH2&b zY@~@a=3@K(>>4giJh|+yth_ILKa&8i?i1R}w1T-#9AD4D zZ*_(cF%+Rc_x#TJ_;iyM&U*P(96SULdxWjQgA~+acA4PUV#`a21*t|fOs&RM%-|bZ zI`Gt=9ZlDDa+P4F0itrE2&-1)la=r?nahnkdyP6u9OXmDg~+qA15{NO6#pU4kjhfO z)J&kg=Z~!}i7D{_x6;lAW6a1&J%UyI=SB<^t}sjCw=X1hi;}Eos%yy%kh`Y;B_O(|1|xeDtvIF9p1N{}yDXE=Pp7}iv5WOPAL|9z5Tetoa-|t0p;y-Sk}_62|2@Rl8xdnMUP^TSIZbE7*SgjYK(|x z6#8AtdHLFP->r>(RB*q)ZV8?p^3^$q$RBn(%uB z*uy_Q4^ZU9e{|Q45Q9vvT3M5DvHt)N$Nj2vrs?k(oHyj_Q9~p@^~HQ*xqbQHN_r{N zp*KxcL2vooag|9z;VdTW5B}6TomdW`!xs$)tSdl!Vh>4^?&wo!MgQv@j5g3Ubt4v+ zWYBko?WgN^udmlLdm#3L&#}MeHR;9gl#EpI0Qkh%I&8=a;6=T5QZ%ti3)U(r>?@Oo zI7lL~<&hk)2BLn=JfN%9+=-NIkfsPsz^i>I3w%P zNPVU=eKB9kz-5>BYiRIjyc($+nOT)Yl7P@1mRD(&+8b*9@@@e69BrirLHb}+gCyas zKxE)WR3u?Ci&^U)9cnW`yi~sK2@4Gp7$CT6Z#i(e9S?O0!^6h>|8^NVjg^1HAFu4O zsS|e;AFO-d47_owiA|KQOtis&u*M2R@tYXu%`$ z(}Vx9XUD6Q)ICb`kUkb1JXhrJUfjl=YWXdz@kbQ{*)LvelN?`41Hzg-lG5utpVlU& zct}6R8N7c+^iw?Ks`s-sWShYNJe%;eCw9kv=@~Pd``1Sl{!Ug2F@N?r{sfsdMS?h7 z+}eBdPN3#2PIhj_m|BR^KSYIMDe3c45zRHM7Z@kKo$K| zoK!{a-7nMl`KTL>__yo%msTOJdC-tanoth{9tY^lrpL#5V-L8GL zPi-Nf4>=%dGXDYGi;mdH`kn-YQcCYY+?%UuYuAF7iMqE*SnmC(9?UcpL;;oMj@0_u ztvHK-?O%&uzSM#Oo8Ms;K%|PzLV!1k*1~`CQuDN=oFOH^3!2!+)pQJiOOJz zFA{M=sF@Pq=PyDTDq<3+V}|m)V_5makbKPh-`mCwyxyU#`;47RVFqh|1Zc$U z#bkIkuDe9o!H#PKPN9d0A8@|wLi71uhMpe+yDm&KIlbtKerZ-xpVs8FOq#Edko$)) z+YLJt{KFuA5|N9sK%3fSBmi&-24G-dxB#KZ)34{Q z%dB298*o8(2HTrH0Cd;YzwC$Af!nwN4#k5r z(kEY3|IB=fKg-ps0rB>-jvNJd6>}`KGj1h)Sio-3IFK!~;Yt4qAFt#wTinQJajr`L z?byE|NXuWU;!Fhr+dLA=MrRtTa2r>>!f_!?iiv#qg>Fmy>HZtp_U0adRh{;D%eX-{ zHzgsT0SJIx6B2!{osxk01?eWTv+tW)Yz3fvtj`_jtUl7Z=?4d}ybRK5z~2cxj~-lL zOvOmJ##twCnKj!nj(n)07LebQ&p^qzT*|F5QGR(u!Iagqh(*1I;Js+Bxl`BFB2c+8 zyltUk;-pGv6#**89I(UN0(+YWviP^&gM6xQf_@M z>s6#Rm|)fQ&gxqwp~WADl(jg%v~6dGBgq`YElU}S?pU}KlC260(N~FXJWwoq>c_8W zlTSTPB`mZ-4p^5V5Cv9!Q^TWdt)q5GMjfAvz_c{0Eo6Q+r45=#;)HRblpd`iHPaR* z55@yFoRYHDI==v~PEQ*lMW0izb)fZR@|O@C-eykD<5y=MO%0?c_HN`VqiU)Lr(xDA zTR4St{_6CQq?{do3GL9MTZj!yCtg}qZ?l-ZKaJzEZ13w`bEKE&wfpBDOba8L^4sh>2ZN>J;nSQGa zdr2kkjV6YEK?z?^096-;*8TyoMJX!ot|3t?5GOKLi__jiWOhb$Tiaof~<34x{lR?l*JE4t+um|io@ zNnC+{s%zMUV_>s+)MhxMn%{(02Irh>#vM--v&17~h`c8&jM!49vHWIh35%7?$f zm~B5Ra0xHY>Y}Jfk1|G{o$@32p4|s2>HMAfXA}^N5@nhM#X6~;ajGw5S-ipQCW^vv z_ywA1h+0##b!b0+7C{op?N?pnYclSx<16+vHxW%+0Qt7jmYJP-(ea^D)0jUe&Q6eg zsT>&86Z)QgEyX<2JchZ_q;E2D@wk0X13&deSpSCl$$KFEqldGJ8*>RQ3;k}eBliOf zK&_hH(e*=3X=@Cz`qGe9X^?>?NKnVqL+}&HZ1teFR`qsj2`|*Sra9K;-O@2yY-p=v zYhKIrX{u%sgw*A+1{()`p6vDK=3VMC3SN(TnAau9Ea4zZcZLJ#sKlm$p+egGi8ezi zyIAoo&{fkYSGVzIH|Iovc_cd@bvwElx6YUS*1je^b0<%aQr6r}2gp}ny>N;ozIMJ} z(rFuc5cq>niK(-@9zfvaTqD%o>e=gs4;bdKB!l6JlO8DxjF-638@Nu*9v=Vq-&s6g zeQAYG{}BL-?Vp7ST~n;%y70UJ8QlnpWcYT&h?#`ngG;#Wlfy`Pk$Yh1qq4u+_sH8U zS>mJzLe>B2p!im7=rm|* zL?SWh9XsHinc~x=oyrSXRFZJigARz&6u*))pk8;WohO&LzOgsfRw6r*=MUdcXO6$c z9`{?L%D$Xpi>jA5cB5Ou>U?HDgZ}d#OvU%~hxW94>NcwtwN#u} zo`#0O_)I)&naBnNi%KBtnXsG!0>beyDJS>M0n}pu^e(lS^qt5qo`v@!M0C?V)%{rU z+*&~`EpDIoLePB|qLw$B8>i;E5?ScA0?*@tBBL18h2RP(9tEL_9BEB@Zdzu`99-TY zn%Ap$K~rs!r}VCurI5C6vX_Rf{|*dpj^}5_FFY|iH5vfxP&y(8_q=Cs=qi%aEOV>M zV9SkNe6k$hKCfF9qYb`g09!z$zeNVFDBghm_?jVE&(BZx^8TK-X%-cJUhQi0)0Cz= z{HCP5Cgt@H3^VE&JV1I++SMI7h+G+7y)h*;xk4L5M&EPZW`FU6aP4^DYKb{!aOo1C zQK@ab^=8qs{J%yWpjEtnlgh#7t_D95{W127 z5oqR*F-&L{|8+QZ9{V>CqBqKqhy&v@it|JbGkM;~hAWuepklti*~1E5oy_%pkm?#8cPym}4x zHI~APr8(qM@pRu-SPbRlQ{n<7 zVfVbH^UpKn}2@QR#|^#P?w|5|X5f{53_HYzXi zS|f9y@Z)hII1Efw_EkMdii+Mf%C)$jtTha@n>nTus8hHSz-z}n^bDBaHhP?8UUx{L z6Tj&47niSE$U;sjgRk158!$a2dxeye^b14ZajfYZwNB1kITfiMwg+&Sei0ftB=2Vz z&lEJ3EHx=E47trKAnPTnkqChyV`G^AOAiSGpP_o0_7vP?Ay#TN8!L>NQ$myG;JktD zzS?DWd%<;|gw)J~8vl6uYh*0ZRLeM^*Xe`Mn-AT)+KZCIGfZwzy|!?i=;>QM0{ZGC zCoX-Ki9;aKl1X_)d(2rlqgfUPV1P$Mu*ielYj*`JAs`9){`o=JQgOe0`p8?8lFI+* z@=2zMV&d+!?A@+5i=8-&5iNQ8kiqyndY@eJT~Pplwyxb$j1fhzs4Fw-HQkjNt4Xg9~n9@Mwh z()s&x8_G-{T#&<(?FSt`7XUYkEmwP+kB3MHKx^5oE3P} zzG`gkU$2~hXnF<4qCWbkNKeFZxshvbKe}+br`EcJwYhQXD5F>U4ABZs$zg9#@rOa& zdSD1tdx+mD7@CR!In=jMzivtJe)H1>;5Cj~Mzlk6{sj@>Bd$Tx zi+^J4_GFN>!Y%zh!)d@+mkK)B67`%RTLecjvMjkPdK*{yh=d99%15sK zk<+0lsVi#%MVcIHj@=uZLBP?*bhP!IUa>(&_+ZfcVCYQXP3=;9AEpPpId&_9qKVRx z9KPFTbZcEvMsn8ndK%)kqQO{C4eGu-;AlW&1`LXTzjL}A;?eEy&E4qWRN(*w$c2AS zKdVbnJN>kPT%}!CQ~zp?G`~xP9YTzE6xyW}liz7pQ-9So`ov=s)i`Bj=rb)cNs_mS z;C+GWc)RV@|CXMAAk8GyBGQAE^rTbbc4=Ku!rsl77~>7vURsCr&Xqk?b=C1PHpU4@ z`_-b@%*m*6%CNNB!K_0_vW9+DHtInmto%t7j?&ftlVVbA-Lo*Nz5a%%%2}DP*RH## zp%;!SRstlkkwFXd9PjUbF3Toe^5`;sTU#;*p!hrYQKm{ext8-u=EdT7ZUs_@!3aBu z`=4Xt-BmdW%kBq0RTw@e+e^c&e^HF;uRdN5fqEzkp9@^s^t*km`CjI7oiE})1(=Em zrS}kUo28B^1?;4pDk=u|I23bl}5V zm#N&r$K=grb{ymMzX!~jjXyiv&%#rD&{C_16AUo;^eWBOnZL5TmYc7o7r@Q;!*di;*+IK%x{V^vyR_(p8KF5CMDG4)>ue@ z_x+=j>=+|F?Pf3gnU^Ml?oW^&%JdHDjr=mUIG}fOLqC8*Cu1@WP#aS7&_DllRAJb3 zl)vb7W_KE~;E2R$&0>PAtFazvD#z$T>~G_m_(n)^YQ3Q?xLITtB;Gw_(r=osu_pDa z`9XCAp+YyDwQYdQdMKyny!dfqS#;IP4TT;76qT&@4=E}xVSTfKf!f2-A{v#^;ym8gj}zx0@79kFpG>GJcV1%f?r`PzQ?TsU#$Fp~i$7)H4f+35OKrVQl@ z^&$sxS(ufLK@FlFTrL-xnulVpH=Lg#Lx0ccln8y5rEb;ePeBw|sfuEH#6PrY60D5q z1qm{(MNph9@cY!)C*_6|eS0jjzhBq!pamxggg-L)lrkz1$Ox+@fZk7h@~d8P{g*x; zHKjO#C*TItHW&!@i5S47cS82EOt_xjd+wSXHE1#8#q(lhg87BZrkb#Q4(o4;HbF&eWXdiTJE0f z5y!~D%@dW;PCM2;+LZLKjMo|GY{~f|+^3`%#3~XS4zg5)}0hFhRt0mMPiLur-4{QNK zJa!)K!U5X610Qj11BfX`iQmoa7Lf)Zj=F}99M<3{1!Z2weTQJ}d6d3N51dGEDl9IC+zSM^DcSB9Fv)q}`^+NoM1@l=^1V>z`Gz=}@<>l3aLZj0b zYo;a!0iM4|60$x4LP#5#R0v*MQ)^+uPAJJv?>>Nt`XG6N4+d_E$A@@lQ|Os2s;y~Q zW4Sk-Y*iMF`w(dkXShxor^x^gO6@IOm|7yk5~Ixg zm*lD*@HH#7Q4|*YLDrQ(QgpQAx?tXL@K}OXWPY-{QiV8XvAbOCQ}-?(nSGU**|=Wg z5{|i1pGRLD{M36Tk&@Od+5gFuU( zMe4j1X;xTEM0X}^4W5d|3?-+wDoUYnG&;FqxqaK3)5Om|$5|T942?$D4!z`A#i>HhOy3h2PS97Y>Ze z9x#)GKx*Ei4p9QaSzBL-V;lUs2`+&{cY5I&zAGLNB9a<9R*(d859JQpq3^L_7}QLY z%T55bpSD|>KSSn;hbwbJq2y-9C4J6x*&Kd(GjfC(Cmy!US&z6nntE-$5kj6~6J)LR zsdH-H<3}?Pr%FWZH|j+Ha?w0*oybhNkcY2b-*qv@I&(;D-jS`*llfs zD!PnEx%X%H@;wUih^5aK3V*}86NO4p0pmD4snfRaHP|L!eSq65E*}$Q5t^!+>O8t0 zJ#C=P=J5}eWY*X3#5{d65u9dV8B@nh$7Ot z8s!$Lh4hH-oN5bw2M*01ep~S(&@>4F`+B^Ty3Z?7s5x*e72USHj98fs1-Q#67Dp%a5QVKkFJkk-{^6tgOX)RmUg}p5Yqq&780vWbQ*djiPIU(g&JNLHi zg*dgdkSxs&3k`r@3iP46gX@-oM3El_{DhFY6#Tw8svH`mW{hds(@vfb0Xv zt#Tqpzihk*K@;SpWuw=}43H^ZoR?L!QjuD&@F^UugDGDqq-Cu?-@nrBUFJle-1H+( ztHx2Ob7mj=t!W=wdvzcASSV&Z+WN#+YF)DE`Mq$}TefM0L;+#8_;*0j7 zev%Ujj`@cMxCw9?dI&LwwD{w)JGDR;yN3eY3EuC!!B=n!RiyY$#} zD9yMGqO12E6t;*uutzEL&f~_pZtE2NZ}4M7Zr;G&JJP_Q4=7VR$WBS|eV8|S=>ahZ?fxVLbOkke>c-Ljj-|CQeywyk$q>}g)YXEW0 z6Jsf$AYYge9i|7?aJg{75x0O@8~3mLJ4PhHftkJLCVZef8^R)ngH%B@QFWu;qWN43K zWq2$|q5tJhsrDLCcYZ9$WrG{U-bnV3u~XvrmKmA0O9#+BuK#Q+;?3aqgWz$<$X)Jk z2Qi`s>0SLZ{BR4$U^ppI$5iNZ!*naHqLi5~<({_52WUf~TEG*L2LqxbA!ug`&_F#v zxJ<_I3-MrIWMd)M7NsqD>dQfiI^^f0J|Kl?0X3#f;_cw@*FWVe{&fO()$(BS;tn@{ zGUUuWeHi}ZbV46FV2T2EAjK(e7oiGPU<=HMkGkh1=D47eqnMKN`Dm*P1^pLQt7a(H zm;O6yq%#^(mja2YgZ}XyXg2HDXPK>47jG}YxE5?7tjo5dPHoZMH50st`vf1T^N5)# zW7~n^yDF+>h;|Qu|o4Ica4xZZ)kln%5(<)o_l78zeK1HTJZ0(irBmr@@W3)2mhbQUq zHP|K%oHk38+Dio8i|fy*e(X>{*REOg?AET>_R6+3wzz@k(}BM3xgW?NB=uL3llkWO z5k3rfwF2muu+3)77XH5EHLu0+T1Sbmz}}4x@~vk+H{t3cT)qg1w5*9*;g)Mj7*6mH z@-EXM<6E}$;c@#49=3I7zYbYoCPR7vfPhCc>_^PpJja@H;^g$i?$~?4Oq^dH_0D!;}nB;^A7OOhycDN<6w{;=Qm)(Gp^mD$dO`biN z!;~X4LGYE%eds~yBavB-h?9au>@F?IliV?XD7?tX&KDQS_)IkZoiRaGe|;Ja`iz#o@m|H7H>4?oj`wU`?zJ zrkwR^D-XB{yERk+IlcJ2Yr+ zbSvIC_xxpNU>+XU0#iXG0!14_f+s0okss?IN7zX-L5JWh5!c!`#sQeG>1Enwu#0f) z*Q%k8a5K6%r@}u5{VFi)+k-#`A%g7m#IGXL(zgJZ=F(O@LN=F3?5(r126T!~wc$If z{aFTd7O)oyG#^EQORgjkfscdOh4f2EhU3YH=I7~l>!@PaS|AOp;?kNU#G!SjtHT)~ z&yjG-bSgJ<*Sf+z?hAbk5kM5ke>6Ta6Os|B?O5B_Eq_ zL>AoyG}$&ix{+`i!G>YrJ_NJkK!K{&z?`t0cc~9(gFs857L2fFXNr!;;X$e#wbT!y z$OjZPKEEWD{Y50M%<8bQhP0XI36E>74_CVYtCWAz%`%ZZfd-kp8RIX6uSAu0!)HNZ z;^<6{RmrkL-siHKnSC!wUCGuX>^CN9`zk&HYy>KYJ!5I!sKRgMJ9(UkYqW)X3+CCl z!_O~m%kp;(SuNaacWo>5?rO2s$F&MkG@xXm3q*(eigiY6Oh|dfwxtP!v!x{3&+uFF zs_=O%ODrULf{b-v*zT!d++ASr#iQMnZc#M=3ZS~SI;4>5)us}jCs_@0=-EC>EK2Qr z-s;|&H-9t0lkkH%+~S-X*LZ9jms~&Zr^=17Z`9Om$9|&LieJW({>S+G)-l;s)B9_m z2d_hE@QU)nhM_~@78p(1)R?M%{l)6vG8tNXOCk68fZ^goujr*%xp6T$h&js-RN%Y} z_vu;3YZ8>+)!Di#o~JWI!>ROv^&%U+K=YK-N6$KhO(=dFB=hOqUT+VfOxo z?OAo`{8|lo$1caIUADjgKsavsflCc z*`SyccK9lpUfcw?-u2GiDaiolx?;)ikB7{jO&o9I5{}724Wd98F}y45^G<6n*N|9W zK@M}L96Xisx3o%}ngoD#Mi_bId&w#wVSdQ_aSR}&l@3i$ST}HWKC=Y>$y3D3@yReg z?UTW>YD%u}ec;ABC>CLEk1Rd}XV|K*wIMO32N$il}-N_8)LR zjee1vJm%Zd1(3y6>;t_ZX;)yh_wqe=p=A4;0oVtSM%|C&nIwFUy#ZrOJEJzd0vn*~ zNk!npP_Lu@{d&X;z>VR4bFdec%B}xl^;4Ny+GN5SWJgj}i!Naxnsf}MJ-BA5rLU1L z;=nGoNztMt6{EN{{*A+-BPRkzbz4W5}?2AF3+wcFFJiwh{V}5%mCno&Iml98?N&*I^axxG zPk+rE3nOXiH9*{r5{D^Rkd`GfSaQAq{`AU+;piacpcWHCeUwHU_(&tdMq_81sN*9S zYhWv^u;LsL)cp-!)Y=JRy4ezcH z0XWzj?~TZ!kHJ>zM=|Rz+Ym5l7CjTNthS$TVrv|BTgk#h>W`GbQch(l4g`p#wY}wz z1O`Kq`9hOKkAgSB(gAzAMOqFpTJ_~|zwXAdRV3JZ7Pc%bVAB8@;4(11@&v3>3^=Byv=D%<5nV+G#=s zR*lX!0^f8+P815$Egk1f`=SRME`x&N@IEswA#josg$wWxy3HcBRrQZ2gK4Ltkfqz; z`lC}Kc#22!fETQ>Ih3+JU->l++o3~l6H+^mZziYOVv7^j7?a`ZrNw+>GQ2{E;flK2 z5mmx2Dv3sFCPfD6|GlFpJs2{{7>CrJXpT!jCEN3Rd4-b8bXY`^@KX{IeoJGk6&b&1 zyc{P{sTae)^&N1m#593Ak^n9@T2vFPDPyqm0wEp@{SrHv^=fSKU<2cYYCGv57aC!N z^SqAhf<=?%!r{D79d}QzJ7m7(b$1x*G4ShGVN^eqXB7{oOe>N0Er0ews4>e=8E;GW zJwH5u(2&nNxwIAusDq3j4vTPDA0lfXH`MRmKMQu%aAfpAm^?8_bYVaZgM_3|@CrD! z;YJ@cD%^l-N^T}c5z7pTX7KfpVjiTI*}lyhCk$`nN>kRzUbqG-R&ou!p;*xt{kS?( zef0LGpP((6x;q6S?gEyRO>4fb21RG{A?NqIsM7KcACz3e6ROnQ__Q2AIt|b-m*mY^ z%SDq+YeV7{vbpD9*AwN0J=D)qt1q`Yo>ajM2Xh@M#bQ)@iT5h0~g~ek)TV{CKq1$l^AvFW+5V7>er4n zh6@C3zPlP4`o{XjXB1FuS@Vmqj~7{!X*wic@mB}!0bjz5Jc_~1$$}PJv&#aAB{HMsONi)V^)>cICg(E30d{J!H_v+wDF*9D(HX; z!vjFEOCsuV7-`v z>n^AR7BOQA0N*TJ*?IW^IdSCvE1Fj?MsDeUQhHOuEFFJYAD=czCKer0#kr7sL@Is! z7WJ`GTJk4{^Gt6W(jB|< z=;*xSrFCk=U(6Fq_q!YRkQ8E(4n@@7c|;%;go@vC#%L`=53M{YPHE%Q{2A}LgMMu& z3GG`4o&rDrcJcODq#f9Q8AONxmsiWsvZO#`My161)`-k%qoa4hczSgv0Y`Siu$l8+ z@`B#;S%pvswL&Q~0}XgPaVJWq*&Cy(YD2L_bEi zvBVl06`!m3>sPOK7d79*Mj#(`vs@CXIKpVx6ClEdBfKG-_*nZ5)Dz|uKdF#KUaDl{ z?u_^|KI-r9EnGC^-z2Ed9~m|#>LW$hN7_&SzKXWP^w)f_9p})^EYJ!ppTzRDHF2h% zlBsZ1Rrz*Ke7JsHgt05I3$0J6!z<&b;SE~hYRg+gXC+?v=A(VoQXlj^u;nbQ2kkYe zF!DLM$ryWQ5>C+;{=okh5~oic2TgKe;M{?%wb9sHAb6sh;%jw^4)&l>6;jZa3z;%T z$^Dv63wzE9T!77jiU>?EvC+8)$@mfwJ{C;8%`ksm$%tY7`#8UvkCbjM9ecM!oQPtd z%S6&(*MJ@|6`VfYX+Ua?#KF_c0F!>rTM=Hyw(z@{hiq*Pg;=b9VqoL~>9ctrLMjl3 z%*5`PCg*=1q!^vJP2qlzQyeBd`nQedI%{InNP(m*5GNIgW2@VIL$3(|ks5p<0vmc0 zwmX{}1tUR6MFE{xC%D&~1oQogM7QJ_32E<>Y-JDUyxvuK(%I_YMUV8|-@q+fzF@Nb zk=)pJh%(s7D6fNapZs!!OcV`YY~*dh;j~tEG9{kk9SgS2!i2E%pE}4 zuw_%EeQrD>)bC(ajSp;qm%rxVweux}dIX?5pmd;Oi)+i_kHW?%*7|@)cU@4L@YP}v zl|^KJNedX5)m_`yEHmmmgu=D}Da3*Hyv|A^1Kha#$sU*53d+w|`IUmA{x#n)w(+>V z#-s3)iDqPGg4sMC*&Bbq z&VXNp9q2e}|4hijFSWSHgRb44eZ3bNZCdbC#>COfD6?P}Gicr+8ho|kFH7=) zP!PeH>t)_R7Q-Gp+9YN7$}>lnRTgt9YFq*q6M|*;8by%#py`QA)Eu=1Y266Abr7;o zb;usEf-3#u97Hl8p$u7IspvSVRzBA9EC146`{$Q6V*hNI^rHN@WuXWl6k}E~>zN-* z1^DUR?jlAdbnj_`EovOz-i`eV%aK6H4Ka+6mU%<_ESq8s2&RCg>*FAztuG}iB}=Pk z#d3O+t&Ne4x~i9EH?!m$w$rW+La@ggpW1zS1xaV<02|c=|Ks)PqNjEt;JTXxExv3= zOFj@ITEd02;Y=BED7cw>@K%V=4~4y4YV%E{HDq4h_S5fWx;yr3z8jmbw_8^4S`BwK z8UiYGHxVf>N{Mb1Uo%G0g&(>U@@PcwCeXPxx-X4;)op+(X+w$8dLOstRm9 z17Yv=oJEx*xV=6k$%dZ0LVh)dcqby@BKF%YC%NWHMs15MhF&M_zgbA(Y_LV#ps9qV zLf5EuQKfFx>CCZ=Rq{Y4ubAp+aKF;sJa3pA2UE1UUUGtJY=ze{zaJe=$)2S|RxVrD zf+p54y=MhpiW(Ij(q{S5W(y-K0~yFX+8SuSXC-Mxms~+6meL}Zx@wfih0~9lkwq~I zm?&XN7UD-Y4_I5BGw3^I*>8bfWmVFfbvUfajl*wZZccF(HpBDq-W#(whCnJ|>@j!+ zPQ*6_mcbLn@pZ|$Q@&nNBq6hf&oeYQJ#E&AdresoOnz$@;zAKRyT(qD1cprtQH%_b zo@6-#>uAB+o}-$my}fN?bUv!T4z;49%?%?`|MPfqsd$r;&hjMpt}h~(^n7@J-KzZT z7~vjNP-FL`TqM$Yq7t-`0H_+B)QyZ#%$|$Hi$uL{@0Ki{a(96X%G#zzW-Ep98Ryqi zQX5`T)^>@k_3gb4e_5e$4nB59u(w|>*q=!mLcqGj6m2|QKQ)xQt#f>&B5~A%@3O+hpBvXg$1`Gi8pHG%s{J3@ zty+TNxyJp1ZzQsfa_ht#EKL?{yz%l^w2rsT7MtoK&GpEq+)#R9tvN$%EPVI(^yFZK z-iQgZ%NGK3wjv_nn}towy4D69GK*3dvsGXOxl`4Zfxr!I_fbc%7{@?fN<%zuSl>Mc zM5hL_J_W2qEgf+FTI7@BOB3+!jI`gWAi_s1 zcJNliH`h=cLMTG`G)46Dcyr8vQIhwr5(%P(#x&CN%zWsbi-6pY!aDM!hH_h5q>lh5 zTFzDv@qJP$lm}@M{~UX0V+nf7V(xX)7a!kaM`+-TXu`ZBiXnxrQzhG<-47iPW*)bm%v$w$nZ^mLtxZAqPRz#9x zklBg-+d1%_!k~b!F^aPm2#d$V*8+rN2x*sLL4xi2WKy@D0qW=J%mB7g`>2+rKwVUE zY?8FGR=Hn zm-k+Ar-v>^<0`426j>Tf15?FQ(9&I<9J~UHq*@n;u#CDNH|pg_xCrc=-HYU%^{6*8 ziyDi~CddW4g{BKnw_4o?E3K}>y89^qqL=ltly?NHiaq3xDI=t$O)}8Mke!vKGWtG@6lTsaO3kM^KRGV+~DpUMSwkyH9C#)|Y0jjEk;Q`(A7W zu$mb~TX`LH_U#oZnzC#aL%h6)!kE@qihn%tQ4p{T{te#5-qu99%%#*jp`MyC+agb{ z8dZ!=9VN&cwEt3)LFAg&XA7@$t4oeMXTTDBUwE!lxFf(2+)mKo9ZaiS)BZ7!b#sK@ z+GAX9LIP&$S>|VZPR5#>e;lL2vAf&OR3dcjwE8*N&YPy>es-*WzdNAuGnE>yP z#xqKseA8@nJ)!NfJTe%=t&tOW%X&ZtkG<~$`#jjJJJuFZZcUyI)1aCjwtT6~T-=Pd z+5+pCxb!RO*k!C&b5S~cZ=#HAH;W49{XCw`wNntr*S}*jU2Rt$LqU$NrFY>0dQX6d>`WWBQK>CiY zzMxw4+nAO>SFI6L1ld=~)N<+4FTJIA&tfw&iNwxYzG@(SjK1i`QpQfCSrzyZng2Y7 zaqC(p$xzMxZ~&*eo6&L5w05hpWLtxD;|WW3@}n}b)0#%MxSil12j$WPRj|j1{dO=dCOZTk488;BP{1gSw z`{S19(Xvp1-xJ{bv`WddL1-?0TbaXED+Co?pL-6DlVqr`x1P*P=K)`m7XOQW>yb7h zvI>>Xn-SS)yEC@;Z7&kFr7-}(T|AD}-{)1Wfy)*}c6zdQT{F54x2ckc(@@p6jVpbrFZ*(xiUg1y}-Sq~Vb8 z7}jlONQFTudQZ=mCr0j8XTl8V!Z9$XwUuWam^Bab@xLgtd?Ml}D>{zi)Bu%cfWNKQ2}NL2y459!F~be)mIc>Uw}M2BkQ^Sx5#6K~gw zd@SD}k}WE`C$H|Uj|+4cJ$Gqn+^UNwod`|-HwcCX(*V#wujjp4 z=v>xIxm8_u3xymPj@D;NOzKBb)tof{v{u5L?IDQ0%!ee1xXv*MFfHjU6i9JgH3u6S zh-R2QVgqnUG=X;>^Q8G+@hHC%dP!12t}PlJ4$)@6TD!Y&SEwj&c50%0<{ypm2DeV7 zC{V!nEyPV0^I50Wo=;h6ckot1_^z9qHKqHheUA;eE5RMj`3@+2MtgA(+)9pCubPAB z$vvr3H>vr5R7)3Epl%5F+Q4WRi7V>nhnr51hM?2yRQn-YEtly&vLo+(ZWaYJ;i=W~95zKJX6%XL7> zF?hRuJ)eIB|H00ZCwDBgp zKqW~PD(C0HYMDm>)2hI_6I#Km=OiUdG^L@ zL31q(LR3wfc^huoyp#+51{L6fNY>Db0o#loHwU+edIK zw;Dnp@l7AwBJCDK6In{uN5zzwwRKNyTvU(P7Z>(?gs!V4p;N?RHJpulAnylV)pQWn z;#v?|C8dyeM(lZ_e+aQCJjDzW54sxm1i;=8xfg)g1IWj5vrJd4rk?4vL@L*ek4cmj zIj^>~09Ziulw11IioO4)K)w@u)Ej4=Ge$kg8PXWP zRqyZH9QT9ML@ZT*^v$*zOAz+}t>C8;KPMZr4&9zaI}5)6E8!V^BG(!!L=ye{IoeMC zH7_zDdBw^BQcdd`m8+Y7sYZ7zzmw16$+VDfSE_?JajbAZb%B^BCJ=-r*@uFn{;pZJ z`TeA8)f3jS?U(2iBhOt$t5pbV(JH^EP)q{qY0$o}C4p4cdL!|ncStHE;=_cK;Tv4@ z{6-Rs&KYdPjkiE?sWY&8MN;AeB^I=AJHd|L(H>H`qa&w1qO7&Ogyep|Lt6?JJRikZ z)>s`Pheq{WSxixB5k7KMxCC)~LZx@;Up+@r7^X9)CVZ}MZ4XQV{A}_~CXp2c$0BU!Iqs?6xPgwExJx|X9SIRheJeGV#~TDHA9yaoBH7_@0; zd`JNp@ELHF3EFiiDrHdbqu`LPQPVOUhnt{ZkM%Q=dVoF~T$`GpoXhZx8A$p^1_n%p zLpPnv7?rMG#jvqrkq?>l!@#$Z+!j>O-kdD&7snK*r~6Ev#5JgFYQF`|Z>ylp-qN9g z?KJASP=6@~SRBMU>Q8&f2Q^fEe6|Ln2@G)z2!fCD!(@aMlna=f#GDj*2YY>C!^nJu zE_(Gq!WfxS6^Y|NrKGb8Tm3#{4aj{O`&F2~hh-w zqJ{h7+xnjAOw?hv;UXD;KN^1Wi&9;We_XkfIoqX~SEw-&V>g0D*Zkw;wY@2}CdE4A zD!>`E43DENjcn~oP8Bh!Kn|_in|vIs;R#`I50$#19SE~#T3!BH$tTflIZJDB-l6@W zh4zPjLYyiTRO$RN*X?kKQa^TFs2GiVO}%J9Ix23W#KizOI4yN|^Hl(fse-hip8`%9 z=`jAQo)?qKfLS~Y%X zeLjN_GJ2!X;YEbNjRMx#HXvj$#)j{ryExe+!3vZZMI8I^zlifaK?cvrcU8X!BiT82 zQS)FpY_J-5G$hpWlIYCW2POn!J(}Cx8q~=Af(FBdtL~|xl8>h|rQU8V#kJak|C1x+ zV1%EYrc|wl>T6Wv^~(JLV0uUv&Ed8tRGeBVGy1q+FU|Lyj0|`lj?Buh88nvTF*-Wu zQnlvFh+@?*z!*FTwus(hCag1;62G~4JQt7x2c{;srsJ@Y239_J5Ep%?nH_VElQKkC z04Oe*DfU*$?`C{9?mUl`7r~XrDp5BAMAqPsx*GLWgMKGk+1puWMFaSA3yds*wSmlz zj%=gDx5~FAn?i$uRN-j1*f)LwTp{iw744OL8~;eTl&DX8<~?d1)WLOxIg>}oMZ=BF zK~5E0pe=~u295$gU`qv^EIktI2C?_bFl87zfHSP8B3*JCT_FEE55kUEm5ir zy)jK-xvC-AyMH|1?UUpkZs;zNMDRsyw#+<f5U@f^~;{3=Y z!gXG$)m*&9m9i=%>Nq;*QjcEwKiz1ZT3hL3VP~3aOR371|B0)SVlzb76@M`2qIoXG zatjHE^2i`L(zvBPt6kdczb5aiazZQ3gJo6K1rgc|9ERCezV44f8LQ{?Ji@>Wluyow zw9`!kn@@>YR+t;Zy0kCdvMaySgw?=cmw}Ck4iHFkt_Makg2Aw@`YFkWlAofT6$#3T znZEo~ZyRkbL8Lae7Q`i>YHFuQ_+r+3&95S>ziqb`WqcjfFQuCji2Px`S(k~1YviKz zyagJJo#>kyqF1H30_}I3m7h~Xr(=M~dSWp&RLm~Rm}Dg-z!VY%m|J4|czSR)?DHwg6N zE&OC^2z@9X%Bs~!KLXAU5*TwWi4h(OfUSbUWfbt2U|7<~04c#mU`Q`LXj1C8-ZWMJ4W*fkxsomp}2Ke-1UZm zQ7+=nKb;~fKJIc0lusC+KCVuu;PGJ*CwqrCXaj+Ee9$_W_V;j+f!>yXs^;sAIIxSJE?v+YCPKlxF}ah`KgVhO{Ky%7m8onuIq3JPf)4znt^NV}dy- z9qgG~V4NkWPPzyi@+3ay!BEp|&`~&Q-h~x|by8jIbK;v2Bf+5}(pRzWGE1^kYiJ+e zm7i->-t}AJlTk0rs$GS;812?7&rI;**{C<%Xp>-@?*JGXE`UCBca}Q!?J`I%N~7^b zR-4fC?2$m!2YdgH0JBD(o~fd!_%?y!!K19$%x+4_uetL`{HJ*4Hxw~b-ny>1l=p~d z3h+ZC%^n4&-T$UgkvifzZlPxd2+cY0?joSV$`6Q|HSfb{<(bpkWEu=HhccGpM?43u*r4-LW2_$-@DtouNoMs#Q$=YAfSY(H z2YL3#Nq%&5oMpnd$s1)f*L(8S3o{V{Fo$IqfLe^E<mSpS1`YOODYN>teP5eBd@2p87gD{*r^=At?h4l+#wJUtL{`k`1_W z#Vn^fjm~~bmc{t8v!!Ke>?-LB|D>Er6tRs8dN2)`J#mcMB5XJ&?#RiO?Xg|UzD&fC zi?5ARfv5!U(c=QQB8tCCm5JVHMyPpDb*z|j$_Tc zy%A<83r*-S@xt}tflVDQp_05^07dQW(CeoUo8tjK&x-1uRosU0a+q?^OQ{>|vda0e z#3rCh9h^*J(``1fBX#GjrYAINg^(>;i9@@)8=b`_`MhC8dG~@J)I%Uz^dW5y6PB(B$)Y%F#@DR6#N2r)ixfmzjb>2 z{;IDT-avp!YhG$a)J=3WLoRCl*P0L`+}kXOtlfVt^GUS~#Wt6&n}r@z!p~2$S6Nxg z>-0kSSbBQ4schB;ByPI0zKUXl!{G~!f^`1@>z!2RTvl+BWX63#`tmUkdGm1p)Gw`A z7j+e8cOS1kBJ!z{*2+H$D+XF4SR}}wQvEUTAhx7)ve@~ECGB$x3&R|G6x!6Wg-=`? ztjEVhHKT=1Md;m%)>;|eD*geYpJH6=>a436aMbsGU%A=b{64?#3z`<^Oc^gq8vb#j z+$K&n<9Z8+XW(Z3w>g9i)zh-r13DPz zQ^_UJz$Yxuf-yNA7!kwD($i(fDvP){O#hkWnXMmE`LoOjH{bR5xedk`OKzig)a5Qe zg|IQqa!ytr$Sn;t{?l$ge^C`eAJnFF*=g{^^bOzZUlF0y8pYJjf+Rm_RX})OkBie0 zaV)=dJ-hr2t-gi}G%NyIAu92|;&9(owIgfH6k0uc$*WF#T0+>~!CV(TxSSR5HR=+? zp*CA$*57`MUy=+&nA|Z$^bH|JIK&$p^5`R+PLt~jL%nNw`R!8v@_BD-lEqV@ILk(l zqorZ+ch>6murhiBd$XR0;!3ncH9~D$h!WsoCNS{KM0R6TpJ`MaQoXFWd`<_uUd+b! zL{X={cFp(jb8yv_3!ziiq27hQi-kD)xqRPP4-VJBXBo@E3R7DSn%PG$__)t?-i_iA zh_>Q*B*-(Xe6Vg2RNxu|C-%A;H&(N;M3p%*j_8b0={tFaK?aP#orms)kBWNn^a|44 zH2U664r}AsvJ($?N45}xD-|zl%X!}MljG>pXdX#MIEEIl6B?k|0_LE(WfJ+*U;G`36z!ddju7s{wYBE~ilUEo3Jwj;n@)Tc;=KC1@ZH}>V{9^mgrFsBKS zBhQ#3}6eYi6Z!2sn1`PKHt8#fSjn(oFKl*eeknK_D5$4>f;9k5 zo9Ovxjn9c!!yKUP_3!D@X8DRcnFf|HD$9Zk_(juNAU@Y|Dh#c?{Gq0L#?m|5sg^bEyi%ye6JFr73et zd7DGqs%A?G2x9)O@Esmv+IJD-QC`Ok8)J~{;FbMjzcz84^}lW(0Z1^vcsx~=2<5V( z9ambWq!CZD!@4LCSuma^wd=?@-stqhB0(xTsGzg`>sw$7cmM{?`EpTVa(Z}btg{Th z^!zCI{uqPOwdIRg?Q7ZPXGBUbHj`D5!roAT0p0_aEb$7{tdGi|Sf(^+A_t604gDo2 zoj}{j7v1k^PYyGnn>_Rm-V^1r;zbXv*HFImf zLfnYAYLRnd)%Pw*-DcpJDFeV!G7Itm&7bQ;2e>wOyGS9!jaY(MNZ=h2~Ro znMjb>7or{$m~Zd~tOED{B7f*)K%`{0g6}@*IgXXE-V87e_^5+8l=*jL$=e7mBdr{I z0u1@iqfY8wAIJX&AX_a!;Xp=CZJ70csTtW^;c%<2 z2f;@<4zOzDGq=zW7hsl}41C}EWksF*&D+%|$2bkM zbziSYgU6?>P>R_!auT$03?!3rvBgSbMD4)*kaCJS2%QhZ*bqY zj#^nDSc-XttC2L`^SE2#YuLpPFQphHD4#+no61R-cMx2i{Jb;c!Z9$kfUWe-uF!Uy zq>+INr3|ksvgi0Vmo0d+_(ug2Tb|q;*?>gRC8Pr&7}CgM$SSEP!s}zBG7$>o%{AB5?_ipp{dS&Go;692KAL@m;Frs zol*sOyc-9yP*m@YvgHwt-Xj)=oYWuGYP)IfEQ41>R;O-<&25y_^VJ-5#$I=8Zag+Q_jzS3TWc}idb^$vHwXWIcZKoWG&bdjU+FXYHMw!;G(c{R84 zG&L9<3(jWFr`~b0)yo4@PSre(WgZ+)-bzK44)~q_(j>ANu zJ97D|GKBm=jR=@>F^4F0k^s`qJIg{89S0Z2`*+cCZRCy$l}p`CcuirC83LX*F;Y#K zi9sgjvIz!h6%vs%;(16x3prB+RZ+Njf3L%b;dr()gKuyhm?2WU>{LsK{%!LssE%zV zg}i;*Pnv9Vt!_A9uNa%ph81m%x|c4K>wlVNo8+H4y;=d4zKCbkdWo9^ zs9q?x;vsOy-|@T-X5gZvD4IeX#Zx4XXf{cS2FUWGs&&y18v4Sz@a~tAiVU!RK*5wm zFEX~b7VT~)7LTed6OXEt>5R#-?nn!CbI$;t@tC-mNe3&fn@J_8&U}ApJU2mVA}PE# zO_Z%^Qgu;=N5_YkDKrX~#FUg_X4?h6QWRL%oXCm!XKv+0cQM*OK|pg-=Hu*|Aq19-qoI~*d5F9N>R+$kmt7K zv)7k{H8$zU!q#SzZcAHE7{*`xBIhTgH9RuRh)}8@Is+2eTbS;Irz!Y;2kvpb zfNb;4aqW$zm(!C549ZT(&9JFtWBJ8Jvls8lFT)!nOOCTUHT4?99{ue4LtZ}KSDnQ~ zelaTC0h$f?C9o0|8l)l3wyTs}zOm_B7bLA-kCue1&^_s@4*>p9ptvk!QGDr?FM&3d zp5*q>SU&=iOyvDr_jgV=!zJM-1DHuGV_kv}yaXN~?p$vG=!2VfznJ1z9zqZSynh8G zd1W@qcuXZxap$bX7$T}g_5$?Ev0`XnvX%%=XCL8qiB$4P&uPGH7k~q%<;>_38P)x= z?gQ9t$AiWR_(MD5o7e%Bov*z}uXkwGCIrPi*#rsapYloBVw-4%1PcwPw1$nPpT_MCFKnOl_7{%n8BGX*=?i?SRC zMvz-*ah>1s>L1+LF$nIZh21qXax4k|_1owXhm!a54*=AlO~50BR6X~{ur63C4%Z;t z-5k6MYvmP$ZHaD9WQ!Q?kO1rxIB{yby;LZ80>noIa;1wM z_U5L`py({^L)2zULLyGb?D*hO6z~8&c>`nZbl#?z0dMl{l=0pLWi*Jy>g$jL0m07@<;VrZe?A-iG8GA$N#szRsOJXXrC-#4 zqIo@e?7RPH0A+BMIi9M7Pz{}F$%fHy&h5tE>Y?(0Dj8`x3Ee4@G~I!<&c_*FAJPP; z#Fb5jqrr;b3v)~!qq>@S1zn9P)l_VqxcB*=lW{^(e*+Llb3I~-GeX%NSJf2{k1V%^ zcqJ;fvY~fzF$AO)_?Mb*p>9I1Fev;G6a5IusSN#zr`Q?$U6|~Z_mH~AN$DkdBPZ4^ zX_eFoK=KKjSr-9>VmZV!r({~?nr4bA9}9~vN0mP(K=@HqT^rW`;pep?(KX$Lqi5Wt zO2~gctle9j^e-4CJv3a)&MGFvdm(UktpxK)5;KIIKd$zZ_9+0IR2bQ7O7TMQcvP2y zzo?#ts3|?5;osg%F_9g;+>sNG5)~}0)2T%ykB&MUOR6jyy~T27DLk^A8dV8vCSBYr zA0>g6QABV^5N1x*pn@Wc{dxi)r=-DV|1&_iiQ7E-TO>sa2;^txlC_&){WkzVlXy*1ghF;Tsa93KA$ z3sVneY1uksrP02v>+AB{I~5Td5o&QKJ{hnNImPF(2V3s~ma@S|2k)T1Ac-@bXvzhO^2r7+n^8y$a*~gNQI0UEXsIs@bJ^JdUGzq907#ubk zE8I1gxbN)@);T#6bd}I~Qm&g`mbY)2rXOsZ0jKQrO)=@tU(50|AUb0|O=~=Foktqh*jV;tB_pEQxdt zVbJA=nL&miXTZ=%IFXrBW=T)rT66*<9AF{6k9Y~7@rdGxO-e&5LpQ9b9C)40`b_)R zpnSwbta$Z=nS7y@l9rnmU8GZInpY#GJ|IlkjzSZ2oFN+NDn^P-f^~ifa&E0y0PM90 z%OC+=L=BuvhTU!l`n(KGI4{&1*#?2gaMQo9<}lWH=^FJ&1K*Zr~tBOQK!=EMnD7w#|)``3xl*I-flsivUKI( zK>UC<1f-m+p?8kAF2xF{0?=os^$Av;;jV*9bA2uP3cybenx0u=651T*b3AHbZIg_Z zuvhp$hV$DN8O3%2x|Vqs+Hb&o4g>kSBZcoiELnuQ`?sMKOC4A}1dnDDem4aIj5YX! z^Fh{pxv#@P2O4}w7dKTrInlyj)Lh*-keZ}nZ^5{E(#eKW9!M9098bKCv7;zg#5xf+ z2WB74)J(BVYDFhOB(8mA+0ZJw z&q$1`g@;DQ=bVanMj%!xY&a^A%IV|b%7;wO6}VS?Q;}K$U*a=#vbhZF^m=2w0CBox zplY6g8|JSs644Hri-(BQeI;a%w%*_!Z(kPOH+~ zABqZhD(E*a(-=7Z3<_WpgrT)h``Sm&d>=uCHH??TDMx!_(jtvaunVm(t?8BFvY z^L+Q`OU>@ebk50GP|ol_)rV&Y95{OZNyTe) z1G-v`#n}ZT=?%HJpH2n{eoe~`9z-CwP=xhqmCvFxP*!6%xA1KCrCJhse1;-JD1jT! z&Lzb|g_Y&E{3ah@uo5yaCbwTK$VeN#1?!D0tF0zCW=`7sw<&7ZaXZ~7yj;f_pC-@w zbjyqX@LPf?4{uHj#MN8yUmSy(ZkYQksV4!|4x&1p)_Qbar`TqR|2+I)5xAJv^$!!- zz#5~IGZo(9^gUxW!v&Mv8-%t$Y`9{c1ibKX>*@UC+)2IiUu-%r3&*W9*PaHpoaYgr zvs29oZPUbnM#A@jtxb#2?F4SHNr7xY{UaY=PZjuy6NDxBXYt_TDrXC=nb|8*U)9~T zrV3W!i6R*@aLzu5e2e*wq#>hBds_(NhpNZ8)NrFn#LAaQClXcr=n4A~X9wJBp5z4M zGO~^evb~&EQWer zvlhP~cAQ;3umq^>;Ly?~*f?z39$GG(LB z7<1=e1a!dVO1?Bs1d;(kd)1T&AmtK1xqp+u2I};tJ5#A$ziO!`eGj4%|L2g4ziRv> z7jH;#M9UQ3G|?eRy9{?I2^ck;oj$y5?DV~}Jm-rmb+Omw1u=GvWBhXLM?_(TifaXn z5KGWNub|XCG#3e0&I$(Er|C|ycvReC(CZOWyZYUG;MN%#)kgOGNZUEV^CY^{M255q z`*pt~^($=VdB|JtF3+d@p(8aLLs^V&@hBF+*vRe^Pzj+3+_0?~2}y3Ihibrr;e*eA z9DEMaKzIefE2B2L%>DIgrVoShVxGPgsRWj9*lojT6DUE@mIIs#OD>?1&v)5ot<1d1em|ggQ~1M_?Qu|*mY3MLziP|0b_#qySM2s z@dV7xZN7BF*&b(^K-QulB`w%gk+ zeHY;C4RCy6VW@VT&L)$xkW=KcyqUMkUW5UJjsh4FP7@4zbG;F!G8-oaZHb?xd@{HR>+Y_xgby$>Y6BC}eeORi2XFATZ zbWJHM>S#6mgI#8;s=m|6=Fp2+G<(PwO>KRwN1gDXg{2U7Y+r%@C3f+BR~@N}Y6N@k zc%5xkEOX4&Z3jo4mT0yHYZ9t*mmA2f$b?$a7^C)^gZF>h(OqOJN(mu2`O)u$Rd#5Jq~)JgUL zBMU=>+iy+;LZyE)gl5rZ{&1P$kN*2lLeevy*@Y7KjgSYFt1p0epyf==K>U-tj0Vpx z@aPKk^5L&c*|3vy$~&#I@N15cgHzElsx#eXStDX!Kf#V!(f6+4{90>Nfp^+khQ7ZAtTho_SwAgfodO5bOQWx(vv z!F>u@qg0pRM{#NiH5qF>ywJ*!N9wSSJBy0e1$PjZ@^GF^u87|spM7FE*!h-=%%NTd zD!AX<{*zaa)a301utt^p>eBC8=J5;1W(?N%t3^!*=;s<7~> zdL_4N;vkA&1X|D=b}cF(n*e}nxKy@2Hh_2F1#O{-4sFP6>P?tN2+AP%;q76>zJ%n) z93rpnh3gg=COBj9xNIdfOe4ui!=GusM#XI-ubTcQS` zr*U1EYPwZYP8E4Mo0@3Z!?$)rX0;jZfPSWSc==VJir~~kg&Pp&d_woPryEaYcNzD% zU-LWUInHM{Q%Dh5H_8AlkY4(C6hY2{y1N$}l^Eb0yEK#*+c*8xGbFu6XA+rY8GWBX zL9O8LCV&OV{i?0!&y&@k6DA-vv-x8SWEyS;W=?DUPLM2I-0=ecL9An(4rXj zXIGQ=Mpzf3V`L3_+!?m=Y}QSs@XH+BvsN4kmcD;f&~Uk4&5GvId8KU zA{EfarPEoJ9vb7T(iugub#s*}ic2G;sefWrR-oK4w5k|O#YGTb?K>&2iL$K`i;^t; z;nNpD`+$aC1*l6148AAh_q?`k*ETf=3nKdq-FQ(5_yY3Q{%WBsgHiq;^yWAe=eYzN znnXarQr_^*{I4RKndNAEpf`_xVdGZKk_vwrHJ&Skyj?th9y>_1Z1@As9>%N;s^|?w z3SOgLS@w#oa;@E4VKzT_|FU!H08Wp>u6PxRn*v}YkS`;Z%{(p{Wl1l%i)fkgi?*F- z|0tK8Wk=tEZ=Kq^pJ(V$ybz}PVXy`rXc?5k|C7xE=-tYl*hK%>ls(CR3nY)QwUTyf zY8TC8*v#a?LC{kdfo<@MPP_uERtL0%uHT!|+$bbS_Im9!W&!_asCvob2=vi5>g{NtDG`I7Me=nV#E?ZDwrz@Wo_m)S@9j+&Y4I{VQrv8W9?T(6Iv;0R1SIX z>!!LsvK5~DZw5rNr2M<4N9&49!?t2vqT$tk8+^K~6`LnOq|@)vaLR7`zBf-()m@GR zEzOXFaU{r|-P+}wxMXky5v`HmML{u@WvkNzB0OZ;DwMLcSKgWDCgH45jKSA?DLK<4 zih=?nGMXp--wK8G5mdEpL<@>)1Ty6;&{wK?wu}ai^{k=qeis%_5d%uAJ2eP z@Hm28mmt>f(Y4J@ki|H2{65~%*zRz5)*5?hbL|G@#h4O=tEeA9l`wha-Vg<6j({3` zBg0+D*Y`7ewWBw!XNi=b7VtkaUplp(SSV$GVw(A;-~9XjZ=?zHYY+s|VYY{c$_#hd z*L`_u=desXP6yhvKQiXyFEa?7+%1QHLuF&`$-aEPuQ!?rS)+r)#(psN1%B1G*UiuJ_*qX=>b!=`?F%mS^Z!Q(}mwI|uMf za!Ff>B%e26jw&bI90}Z>M4yseR;!qSW{$m19};pmVS>m#L?s!#0iW+a8JovFyL43t z2nNrf8Kz1Bye4}0b+U5u<^{Oo0fkh#Ox4vYXkO2W`;b2WwXuJES*KShi{bO1ih4hb zbjuz`43ccPsvESfU$8zLxSS|29OtAr{5`|p9Yzz?5-grvU7nkEp`PoP-jN=#TmYeN zPoMJC(6u6Q4uYD?#uyv=CK&!DxVV}`fa-99kbrSd#pp{3TNw6C*rjeul>dsSL=Hg0 z=|Y=9Hu%%c^)$&sFX+R(K*l{C1%(7DI1F|U+}GZwWWCorVlW?eSPclCy_;z-Qiq+$ z6c>7Hx?*YRsP4VoqKDbpb|&4cb0^&QcQ}aCSU|OtbhzT@5CVCs>W_S)d4p9g58eg% z0rgv4P<=n$%U6;kda@Ij)s2mQrGChrlZyMbG-l!tG8l8N+n#lm)+~e7f|HLic1%n) zAoYayC!D858KmKx2lHiG{*|O=LTsA%M5$8@8N%%W_BwALF#X0h648Juall54fDXn@ zflr{3gRJA4fU?%Qd8@1g+(Zk75ol3^`Fn(lSFGAW$gYv5Ek1Zk*}Et*TlyA@*6c-5 zu}-ggh*uQQ0=aD&i>u{6?g8lcjoG=Who^?-n5QQ$pP?G9G`eH~6`-1Vd|bzJJP0xh ze>XyIX*Ca;j>%9`s(7?v?3Kr|F2QV7#8pJv0H*%a;l^zbBs%$aRffW9eJwmM0EE~x zvFyL{(!;&a*n)0u4Gt&57Gd0ht44L(tqVb4J$7ZoDCFcCLjdaVFdbk-w2oL+1Bt|L zyTpOM+w(5IV=oWZH5h=lW=xZW+WEt7t7vmP_^5if-O-ipg-D zd8{5GF7ZgK%FiXuN0T(Ds&c|0`==I{&3({7yIfrutW$M1obX)Y%3PW=R^lmbk(s(P zBx1&DZ!ZjtGT{+7y< z?r%*Auqh+{ssRUxg1hUNBwGXkArnM-igCsGt7JZx2wRe@U4`bV1(N#ptm^^vxf3vX zjv&Y`S8tU8!k)*7b%;Ji4y^S0wme!<`=y|Ge_HQY|98z?M=}W-Ic1mBNVxOtfCwW# zhyr$?Qb#lhZ)CG;Uer}_7sOd+@$65)5dG3Gb%r)FpK}s4weN#&s^~y->3yco?)%R| zz9S{DU1kRqdQ!%%^E9^l>n6XZv(R;;7W3Ymv*b`Sla}5%C~yP>>wdp~5T7t@sQOT^ z45UP@KP)x;$BFg9AFtAEs3A%+vvz$@wnz~DO~ddhJ?k<%smHDSUZhmDKpIuu$fG1W zPni683reXF9Hj9YS?d)|3Y1AMx8zW!2Ue(})j4)Pg1f+@5q5}||HvBliR;mVjdt2C zxB>JX`U<4V7Y@dbGN~zRc^ZS}pO3`pcfa<9TRYnLNRxJTr}2se_aD0gr%MDM5zpxL)>!h?6VOkD3K7J5qI}VvQ6sQmghI7 zV;=l1eTsxLs+M{&vmc>i7f7neT0*YZ(ljj9jK&893-K?`V3bGwsv`gI>9 zjhyc1CwRo?x5GMAHqGKlSn1j97$i$4rCg4`7O)oO(79Wfv>W+op2htYeZd0P7rM>H z$$6JZnt8J#z{E;#HV3oa*ZY}(*J+4a^a-B-`nng^L8Bv-Ph&X2_j4iFMKkg+QDV8} zwRbuSIef4W{=&{{4S(2jH^msuy2b`W|n4!=Ex&k$u|$Z= zjUkLhlg0_9=h6UrUsnz1U}7rXDDXv?x~Jzpz37E^y}Hwg&V~aX(0w+<6aII<^3%?p zNIB<5K_+_E9~e#h9cKwg<0mNSIb^10PnvZ~qHO*<_=Z5xg|+d&Ww4kIEfK77=SCjh zF>v}-Alq-mg;8OJJ#j=fWZ^ZZvmI& zMjspjLBJp;@*4js1e3{H2QVPdx?RQ=)(^37Eg1a=O3D?>VKI(fW4r#D0&?QMiLLh< zax{z8$3AW6k0i&DAmD-#zd?=^xWW|x)i6szahZdaft;n;GcJ`v94b$xd|``?4K>t@b5HWew= zmb8Mf@2QooN{!Hd%Yk1@d^2Fn^7XzdFaDtx>7_{-&6|oOuvgKR~r8KyBfEa=O zRQ#(=;WXaw5!Opm{I@raQatTgZGgL^M^KI$SWG+2nwPMKFgXIV5KTpa1>}$GX`O7X z_UP6Ma!L7<^$C1zUbF2zMdTHHHb`{ooSgjf~bQxlOR+W%yH>jkPd-(VU#o*ZGoYE!tT;UT?Ue~ zhK}o_n_Xq1aw@Rnwk?fI@!og@O7724YM)J%H*HDy?9joKB=u7I9to1Wx3`qHz4pax ztuN~x8Ks^_Qj{v)3!VT$hRVoQnQ|lS-WZd)B^>#Km00xuJ z5Cj))0ZmY@)&CTMl`QF2wJx}fn?w=e-I&!a*nOdrQ$C7QbZY#R{Z)J7a|{=$MP6n7 zEbN$#3WPMt2%>}{T4BO39oq0??M=RPwYM=>{+eIcY}hA{pVG;@)uG=2Az??>Q>C%n z-R@mU10(3f_b#S6-y0`rPS0m!ptY;<^AFV~75!$~0f{6izi*i%?i|BvrVqUlKD*87 zXI%_Ac!;EzzSS!+9M$(;rCnn@$OH^oNIMl44Ug(imS<>iEDYRt7n;XTV>28D=oK~v zHz@35V~nHKh>y~hjN`3q>PuiT2Yn1lt(&?zDYv5wWM1!QmhKBgAhG1&ymCoN9_4$|I&uJO|MPN@Y9v(HrduT{V$EA^tidl! z<#lM-Ce*w}N;h_G>2WfEcScn(Rmep+X}5VKj#{oPrW$+qQ@ei z)zV-)YP_R-(T(jf!ce(?=2rSo?}&#}ZHV*@c1USzUq6Nz)Jv>M5#1&M--F9!DA*Y; z3D}ovGlL+^T3dS2IMGJr=)ij-ylE^S48sHSBXJ$gW@ z^_(mSFGy2Jzy<*z2^@R8jx?948)G#8U z0sI>T=+a#L)aAV0{TI3Q(F5G%>Z$TY1Z$`qsm*guduWYT=7VdgdxO{Lqwj(&8JEkl z-%eAj$P$mizci!|iR_}Qj6~`;W%VGrVPk$|ivCZiWF6ZZiD~He41?HW@y_6%# zGOgN4Qg&^$zH1j^$^dQBsu=5K9^o=#DPK6)<9IEtPUBUGbRZIe+)eA9Vyi0b6w9~$ zr6XIZf~!MrcVOpUKo%&2hbYThd-oKjOXHp~#a8Q%v_?aG+65 zFBo@cyJ}-Y`q7WpTG>37%BL1xNl8gyx(6SAz$Vl6jOnXk&>^uJJIAW>S@Z?1s-58&3h!5omJ0HDmXLmawQ1u^JZiHqG-A4U0c8MDRIAtxQTwQpw2Z zIPyTBE`lv@725?04KbUZyeq|yeC>PE32>l3cMjXBwpiLsaQY(fBAiX2lkn&xl6ho> zG7rx+ROk<~yWz{HX{$7Kh6_KxF<4E)j5-3){K9POKaukq@!pVxJ3r{-LlhOa+{+O` zc;F?J?D0m_rKS)0aksW8ja3M?LQVKj&tyIoD-pr4A&WSq6S$Rfb0klS*x%oN?Q)RJ z(6Xr9dV=R_>_~D`?gNh}?P}u?fLdN?{8zVex3H)!=D#H+U%6b)1{yC<=25 zJ`!o!^lJZv@T8~W}yOUCTEijlF4>_}ZZyHkl3kTnviU zZC$-vRtyieLW{WAR$PxvULTzLd4*9N;g_?w+hQ6d$xQ!r*&oB0<$Oh@t7$#fOR25WDU{Qj8OKgdFU27EQ_y9h5JnW!;-~M1z ztZw}})!0k|{Bo+R^lA?O$pF5z-=&)vTq8H0CO z()3(9yv#`RyOuv@M-WoN&aW5=2VtbJ+yUONihdnSAtW*E(wNIKFL->!w}*%J6KD{^Or{Y- z`&+pB5rq1au9hxt^S*P63De@Zffy6=L%m)_EV{kFwEm4q5jnzPGqtz6G}<3#D!Gm! zwb1kbfO_JBYbHBwey=0Lz^0;9g(i%Ca16OANXrrT1&YC0x-VG7$Cye@c0=80>wRo|#E;dob;n*)Ld! zF8{|KgX0s9qjj3q7i{MLys;$KJR~*yH|ZQACm`h?wmmC_@~T5DFrecQ<(Jw#EV%r@ zxCh|@=+bO4y$W&CM?65+Q2cL=C{;K$_!^r4%!ETsejlbwO|Wago===XDP$##l&{IS zAf^aBecBDQ@6G@q_PvsMi1lk>jdtQn ziT+^}E8;he77tVAOsWmU`Amz^#Jl9WEA1k{%rsq9$qviRUK62I+?nU@%A~%UX0!xL z<&15wsp{}NQ?%iKnJu(FB8{oovB=J^ZzUU!&Wgo!s6gYN_LAaiDic2TlQ@%AuRD#v z2+`bR_dgU#(H!?75ogs#?Dp7#Sz6HL9AYQ8W`qd<9S7ZsX+#z)ahxYB329bd*tDy_ z6H~;)+0_X!ap60NN;+4v)a2t*G8S0-Fh`A+7 zpJd~4Jr;~PzZYZ1k~6aP>VGF{HV<+IoBq3MFcRkyFgwn7v7RS+HLGlzrF!)c+^!uQ zXht>E0>Uv-2leiEWfEGq1$s0(_O8}+DVo#7Lj;(NJ1EayrO2LC$vPQen#fz^6zP!p zS+aKT_9wK~>gp3blRH$foUEEveB^|;FF!{~8&W?>1oX&s{Vi`84N;dSf=I(Qp4MzB zLO6ndSxAmBUuIho!;MUJ;xP+XF{zddki0V;nsQ>P_-RZiUNaBWg6BazVf;I z=U+d8IIFe#cO;`hc14|KE~3y#pA#}6xhTOW56MOj6f)Z8qY(z-d9_jzWKBo3ruFvcp#P`4rsZacpLA z&iXYCfb|&eY|-?**qX=6HCf0UoU_J&c>I*pdWG(A=V~6Ex(O}0@`D9KQulCb=-9=s z0M(3m;bQ?7Thc6Qf;()&b(8U9?Fdp|V&UaW9_-ZMz5?N@)2eObnmO#qo6y>>Uc82# zlw?Vz0WU*fVwJg3jTLgUQfwSo!gQzW$)_A2;t4 zN?)689AS#8Ge`Eq0)%6@?uOmai2#s8?xHXkZB(vEkXdJ(oWt?{Ost0g*{uLOX zS}1?iC35DL#o{{vUa0h_Khn*kYcF8` zh}ukmOeU8(+GF^%JIPV@UBbpd044mWR&l}P7JOUNpCj??bP)Bil~Zt+%1B+HqM85$JX%V8h0N~ zg!X(e6KY6P;ODu#7N1u#m0{n^=%}(Rc5#a<{C3MalsCD;qVA0Lk=%BQb^Ts|Rv01H zsyKCrg4cg@=mbR&vTON;Je&V#`kL#IBwRL>FiYQ95Jw#p(;SBIl`Ffm32`rf^PbI}&s66^HLYD&xNmIT5LS`LH0&`d{w8309dzr3(mbK;n z=kQqRWBWXm`JsqSV&8nR%{#>zjWp=X;M*VeTk6iMeFvNz>%PR+b(U#`8|kpsW%%({ z)Q!xI!u(4bR$NzD;(BO;V1NacSX4*P5JqUZpNiG5I0LwK*=Q?N@!5Sdnucz2P<4+t zssGI*Pw&zc;m#0t)9ef#X&S1tI|)R49kj$+Vd>xelz$Q&pDG)=p-q_WHEqqtkOp^{ zwxblj2CU{D(F+3ac;1B3_Gt4ao?2aTJOk2>9^KLjvGp>k8*Wgn zv83_~ODcI16bERmOD))`E*yGW6nma+`U;^qJ#9BR56?iyU5MKPmN7hf!I+li%nUrl zMMRD+42_N!1^jP?nlcPN7a7XKT8=RXuq-8$fvVheIoA?YsUzHd3r` zz)N2v03bEB+(8*KJ0ijHyGO6NX}7-d3r-OJvkHTUOQAe9Kgc&|5F2ohaPfX%aH+5f zBQm7B)dwD)l+VkWI(~p9s*yBoFjZ-GyAzju;Hh99PZX8}03?6)J=J}tUi#*<#Z^RE z%-+z23l<@(fw4#Llo^w~)Y|$cy>W6ve$>mB_`g{IKEIJqc7Iq5mAi5C^<^n?|2z)) z3xNIiTgIc69P2UzN+=5~*}@RkA4hh5oJME*y^&;@PNR$xOJHT)-I&Z4JzkS2!r#oOF@QCzY9}L620ucX=jQFk=8{@U` zfc6JtH;>8L<>sH-e;P&~h7=Kok=np{5sCKOzp_?(W1f0*(F)t@j&0R z_xWN^!s*QtO#-*?%6ryVua1eST7m(^D;Is3Oy4YN6cn=c-c@-Xf%ltzG3W@r*&b;~ zO66t!=SA2PwOQ;R%czWL#{3p+FPcr(b{boc6%ZjNI?3U*7`AkYZkNdb7@#|aN!NT) zWq89-ChkQUWk+xBuO;Rs^Il=St2+~@R92}z*^M(Pl7VZMw24(fo$knG_CyRb1FeTR zJ7b`5gcv{vx=tv5Sf2q_HmTZApL*TK8|Pxi6DCpwE4Z9RKQewnwmeSI3H;D7gjfEB z$PyZo7o|i-u^FBP+k%5v)G(NEyPGc8&Y~_MPugXgBZ*Lkf;vN7C9vVK19?m!aQy9+ z|7H7P6QT-eC+|+oq;8z2?w{$?nn^59XKXFo^HO+@Js^K-s@47ca#q$F*`7 zP^7RpwYu1^Sq4qC8Lds_KRBHA_b;>m_A*ZxP`ObIBlj(F^iMyH487EcqSePi7WH}eN(ZeroNA(_n$T>9!FrF}+@(_t za%oKidYyJ*o{Ej)+QTL|9@>x{nlx(Xtqrz6Sc$()!5V~#{OPY}XKbWt5du>Sm}`X= z_(i`eWG0i*7oDurrbRio@4_X#NH?+s%%|m*3x4JTyMw^(-&s2TV$0aA4uj*O z{isD^r3ZY{kB_ZqNl;Fz?c3s~xE-IN+(>=h&zfdzAq`(wh&MS40G@7c=0ig=*}aO*r+5b_2PFpt@Fj zi{BR)_{R>LL(^b?qeXQftzw{wgi487%?^CA1vC8MGm&EWOWmu4A-F*1lfYvhWqch5nuv_5+l6(jW(QQ5f)hw+w62+TGf^9 zXS+cU$d_BLSGTQ|^-KDT?&io)oF)1sgp{4waDQC&>j>}~oUU77KtK)JeWy4%cb*J= zE~|4N3@Ey-7%+Dsc73s5>c-M{A1m75KAArp9pC$ZSe(8jGjjA0|D9Yp=~4vNdfHT> zuS+lEGP_8)tc~rc693NX)B?u_A56FB)&sYN*@t$gUrG{6oPK=P7Jn!~d(@p8hr=ST) zs`OR!5H>ZOHSi^A?VPP{!=<=Of4ao^_xR*p!@3lX~zc>TRQ@SyY75_6A;UKtsOWQbK zZUawgL0=C(u7C9|H=JNN1^{kIEeG#BF~f>P&YDd#-7AvVs-w;%K|JOTG+_wpFwv`I zSKk;6G9~!mffo>w#r!#_42_ui55JpRqDIBze4sN`!)Z`I<%o0Sg5(cIt%hPy zAR#9p-m*^&UU7fW%7*_(t0n@EirrYnL0a~*nFDCY^7q9^uplrGA+$cbp+fG;O=Jkf zY)qYJxxH9BRI;#jHUVWsOZQ**28GL>O1m6)TV+o_aV)c~(Mr(wF1WJ~8d4DtKn9m^u z$)&fa>UoW;eRb#X1aE!`>ZpCqdEHl=h(%>cxSQVzDBNEjmt}rkzw~4nt0B!6Cg#>+>%P#w9jfh$E%IG`EDA zzVOJ4K@ogFiwuhM-J{$-ov&8Rc(iXEHT6$z19ZZ4Z3sEw(RViv2uAEFy(d(g4$WS- zjFti}e_6TbOd-6FVG@OH2I|x2(!ra`Dk+t3eVZ2y-c)Gtb*(zwFAWQE+mr7*5%qrTil7Zs$BVDia3L&Gg&hOoUMQ zQU7ruuJA9ABM8U6tL2UG8uLD@-Z7~x;^44Z;nEI9ebQWGI8JL2`J`ERaW;cl5qY(z zvBh5}(CWjv-l5B5o4jN_?i_wJ*kr40uRAHzbyVb!p#*LvDW{8z_5MkadVRVI^dZs< z%7q(~pbe2Xn$^Hzxp>~T2dm7G+9~qp*0Ia8B;hpz$)YG^-%Luys2>`>4#w5TA)bE= zkFDYrLSZ{~OrSm`L`P&iU*3^BTmE0*!JB+%ps?KRGrs?@LI7Beyk4nFCJgc6W(v4> zZjJ+oZau*=AmvTzKaiiWh_=!ymCa9>maYM8+vNMgQH$h3Y6RR0_EdBEN6^zE5r;vA z{er7>a&Y0_Ven1Vm!WE}R z6FYtEQ{m}#xu~))rqw$dT{T%qxd}Nt%$cRxJwqr@PG^!fgG_5Wv1hO80Z;*n0mOEkLMKXNU`Y~@-|s3A9M6)o#wFof%sAu_V2h9$ zqDN=N`#y8XKwURvFK97(*IA$+eZM02sAdRsZTt?Q!gzigI3L2 z)e4|5F(2ZjPxPZW4K$tpL!E!JgFs=}ZE$Ra*kF`-5bmv1JMEGP>ZQWf?Wy4z-y8%2 zcN=vlB#Q#UKSu_RH3yNFXDpafiPEAmHoOHZ9MRJ?2ypVy@HmIzczMM7G;s zOl+nP>puj%9&v{)E_=Mx634QmF^Xy7`>p{znu&5Hv9NSlY)8|1tJ3KM9s(XE+>!!P%MgQl_@qlnC*=2jJwxaI1P`KQB@zZ@t? zhal!<5m5C*{!KqslY2VV)~|e1oIw72x!PQYwH_{--J~mf zIybY)bIvTP9XY_ByYF}fahQCAnoe*p98zRZ5jYSqVz;TKFqI~J!FFZR0#wGTmx4ZLv$a-ibbd(MiI|%lZ z8EF>fYHRE9Ifyp%S-0Jux7w4QJ8T>EF7M%gji<|Eyx44Rju#C1H%dnwue|~38xg=Y zVh(ZMyjTq?6j{-$tdP4~e1)plse}tsFlCV<^wEVsPO~=kSzQla#o5+>c=ZnlA*KY2 z^z;|Ygm{AunohPr$n4!4(1R>mXkgl;q1#S4Ba^dng(8i0kQ|v7+q&Pe^LuAF9wSQr zkExFt(x|XJMPA1xwK42*u_>1tS&1}U`Js*Fk@_`urVYo19B4W-=8m&biq!Ij6`G9T zm{h*{D6_NU4DE_Z_*M0o(7G$M-4n>eCkxg{ed*jwblmPD@*SwMfDgf?`1?s_0VYI@lH7q z25!pC2WLX2v1#`Q78T5N9(a`ka;7-Sp>`pCYu}{32?28miSqJQK5Srgs`E`FLy&ob zr)y3(HPKzGHFk#kk;Re(M(fNx1e-3WY2n??aBu5VdW&I+6oL~E-b{}6HU>fnwg-l> zB$SnOJ^i0`+T4b-$*_bpzLEs7IC?w?9)1;RfLb?N30(3;FCM$IbNA30{z~#>)y2~d zeNBCVm@xMsZ;+wK__AEOD^v8n)k>OvOZiA;*qY$Ndpi&T+vx9uAUUt9I3G~^5iVjk zHSGpZWJ$u)hMt>+(;^PR#^=qI_}W7R&z9-Dkt~fQzyh=iTZ%{kkeTHq;{h(y?(#5H zs@s7kwn9dhV*rB14!`qQ?=NR+hRLNoBKtFYCCBp4DXj_*tfZHeRhru(lvV{FGjQy$ zPOG`z7HTE_Ef>aTivzUc2klD6U%LUI_i$e!@ItucJfP9I0|LEpUh8{c^6K`t zt`~T(%u)z)Y%3ThwHZ>@#ZG3mWg%iiEgPtPFHD+=X;cFsx;b{9x$Je{nm4M zzP!gbzUd?Z;thXsOsqYH{Md>|#kuX;xSmo&m)%dWu`oFXg|`OYDyjpB@$OBQ1PkIT zypRxu+tut-6@(J|;DzH)%ljGsB~1HyIYZ1zh~3(Z>y#BJN_4_aGWRFT!=1Gx?8zUQ zCBU;j=z-Q@6I+_L%+cvy9l)g$u4+DFa z*Wi@ER@LG6s8p2-$9E&9t{)snrH?;X=RR14+0=;8-APP{z?tu+GR6ap@Mmy8l91Xh5A2bxRdsctWU1_;D}1aBm}SDb`+HiEsH?%GUy_nh z0Xj(BQcsIGM%2Q?C7&%KLDsQO_cnXWC{gUIw!Ch-bqg_|JI&R#+Wc0X8gIillTT>Z z2uSN8FrX99N%+WMxkRKYAEn;mS*W-DKeyrSt4|J<0f(idqh%jjGAMcuJ^66&6K~?R z@iD^dL9ymyI*}Fv)l++MkOT`@<-m{98-~ZWHL0O*SP!^iUtzGJFT9|a#R#E);P83Z zTq>TX;sFh|MiEKyLE2~5c1MQUZl*!H?yXSE$C*-X7?Aq{u%PqgqYk>6g@=dyvmJ#m zXCVPh8K6Dd#fLMDo&UoNpH5(*^SK$6eGR*GyxnE`sL^Lm(bf}eXLAam4~tcJ>o9}E zDy)J?+xl%8?p82DzygTRKI58Xf8=kc=ulGd5vicOMriQx7r}iPP;>TmM^rxJ;&1noUJO5@SZ8vcQf7K_y4pF9OHeJ%HNU zKuzi%Z}S1fjP^ST;Q|NKq6&*RuyvwscMP3SNo~J9k@uT80yb;GxJLx_d6Sq)Q_GXh zX$@~V7o~bNWtE#7)f?8t*q(rV2$*QQcZeJz{2xu%Rgi?uGa&O>@)*K!S)EBWdIqD2MkvO1C~5Vc|j=`=?X#-ycKwYba0D!cN3LecmSpo4*#J65s6gJA z(JW@jdUe%ZL7=k2ib$|D4N(wM!Rwx#*R4HjDyXp!*F^*0>m#y>=sJk9nDp`#;}S{LS3TA4uGr z=9q0lHp_MIOtO|zbLH1rUc@wzQjCbq#3vp0Oz<2^XR(e{Ys+BF-Ru4CmGH{X=-TQ}2tj`z1AM(Wxd>zaxP;MUV5JyaKd@O2I^M*Tc`96OJc-Rj$))b4YqmTx&I% zsd8er3Rr(|*Z@7{NXEZEu0$tKzhxJ4VUSn>gsm-IRKq%firw310O;-)D+%;|e!MAL z!s^Q5e+_6musm7udjT~GSR2-1u1*Th@<|b82sNy4UBmy~e{KcHZn;{pXfUOZuzx3W zMWE;Ji5R=+UlsL`AXoe1ulFv(<1z##M(hF0MjH_uLD&*@|qxN*5?FL(Yvct1T^ozGfBd zz<#NJSnGTu$NvGcFw*BVl&+PRAUbo#o?O-X`b0y!W(%+3LUoG@G(xc9e$%?2o1Z$! z7jJT4yfqN^+Iw_vIs2!N7I;8yTy)GKDK_PVts#9)yb%an%h%|yk&G3D{8*-R#BnV4Xew1V){fCv&ooJzK`QZrsklp4SLsO z@-W+H`JyVNc~T!8Ga;G}r|Tq{XK zG?3G(xpYjvd@-9qM9+~86FVG~wTk)tNj|@8Y=q!MO=(lj+JG~rm^+pjX@GRQgU0s*GOH7b#1X;Y)=^U@oGGD~R^4!_P^*{wu5 z1Z2E26tGD!yLrg##zi2nEJDKOthk(5DarZ`DQW4OT8qlc+<9j&3fQP`XYT~j_)s}H(%kolv0;turE>{ z(84*NP_CsfR32<-f}~3a+361M8Z4&Nk4K7ka9$-4JQCNW*wY(2u)uKRyyIT%U%m?> zC06Kl4O2Zq*-v=RJ%VTlWD5nq#%s6IOG-O0j1l0^cIY!}>avh``U6LlyM{luv+iL0 zSOS~BOgBtDeEv^cy2cAap$imzuDzTo2znDLT4MiZw5O)ywYzlu8F!)AABNl9T8#Ay zKC>QC4Ug8SU6uFXioBKDAH*$`rlAjWf$~~ioC(rr@-Yi=_TYZ)#Npc2p+ zYF4LqOulI-BBL2@y2y4i?mnFlNu3gj(2yo40Rs{hWz%Fe55&pK))f}k!ah>-+?JBt zRcu-#DCCJD`{(BoVH8yxJ-BX>)bNV zg;SKMq0)0IZev{)!(w3$M*FQ}{ootc7+z`rmSs^kC;9Lq_NrboH_0MswEENoYI7(>+ zqQk)gw-m-V^zi#_>GN$PqmaKR=%C-k6=YvKmRVxi5OXy`1=}a%2A_Pf!G9`JGqW6g zULdeY9BX8J)wP0|Met0srK9CoBVd(|m^Jjy8z+ey*BW$tKHF(~KbbTkjCpF-0AA*W z4xY2Dk%d#XoF~Z?8mEX zE=9-#-ueE93{lHn3VVa^jJ5M*3U^?sFL_Pda!O;2*$$& z%ESqg0T2=|Qw8ysP7;1Lu*?U2ooJx)1sLAllm8sJUVXzlnM? zhgYJd!__+or_45N_ep{&6hb*IH4G@bHlQGnnP||hE8oyb=6j?Kp2jof*CCA%KxHum zMW2oV>65e)t7vomg8qeo20)p|%o_wMkscMhs_P-1awg4%)r43I@{MZ^LT#3!bCV_5f#z%D5!Gq2J;vG z0jqg!Ieq0!n7=i?W1#9{rf*;!Ks53$Km|z*J34wgX)y8bV7p$TXz|TY)=gLb#HxsH2wt!+?&|81*_{9)EW<)O!Ycu% z3!a?qHC*2zST*G+gnPOuM-u3iJdO1Anq3nzzK_WF!63^Q$3Cny#t_p==5&n-D8~-6 zLI90{-}w*R?4WoBFFHE(==89=IP=)7V+zmX;U2D#Aj(o6y*A()xrC2-tq<;8reBDeVE_1C!H8ofMdL8RqX)$e;PB=L$<7l;;^r6Ne`pJ`TeDq zz5`b8KKy_G3NM`Y0;?n{h|wu&wZ^FUUM?!02TA)0w90EOF8R--_#Q$81wrf)f5*#& zyHKiXbD#QoNXW=>IkZ+y(PBQ9V>E}*KCOkq@-}K-9zq?w!Yw;de~`0jDK@3I?q2KW zh3@}_($nbUfV#o!|q9OTAQE*T@E>C$8=}ct#lL`Qq z-?uM}P!kenK&-9TDHu~AS?Lc7Tc4sex^QrK;_rCW-YGo*saj5Fbf&`-gP28amUFk7 z8QGsxQ~C0pr#h@sYfzayn_Bi>LRH5Z;lR}N(T5LxK}QHBXAS;lgI;+R@`E_NquJb8 z!vdqK3wpSBu9Sn_Z}D&G$T9;XjRW*;kfxE|-~6O3tB^Kgg>tx&q~^MVY!R2(+Cn~F z)7rWXi0=YKAg7YPzxU%H?d+^$ghReb6HSOEa>g(9rRBgKB^PI`45SN^NJNFdwP{V8 zH5%(RB^n!?zF2$;QZW`jou%U*#9|Q}ZO0k-git`+9ZNSmRGSReeQadNtD{UiGr3!t zvkFHOJmRP)RR^{esy8DHG}u}D306}Q?mT;CX{P+P0?K!W>=t}J?EY-v(6Hwq^ z;uRqFh7=ng6S*Zx{9S~hl;+EV3ALe95wS|Bar}%8K%O@Tw}AF)Df^R=QTW+!p(g+~ zgkpd5!q>M3v3G31Td6iKDA^S-3%k; z75M4&yfbvjT~LX%(rS`Y4vq0L=-`@*gs+_!6CW?zvua=7K|gb2X|@y1&YX^M9=*45jM%&2P?RAK|3IT9Yw$3eQ>qoIr{NH83OMusy7>#Ctshj$>QhIN}0C!@+sSRj6a_pez z(!D9}kZg$S#_tD87loZ_&IpP*;Y_||TA~s+-=OX(fP} zjm$L|gZjT)iE8w~0e1t>Q2e}9xB=ooaLdnZIY|OnSNA(<65J^+q{Kl*^F$rX+aB(R zRjps#QY=PfcnxfhF3>q7JPosa0o&`A0pBuqY zfFMA9?KDpHyM&9BZ+F{Yhf?58dD#IFMco^Ku6PRqb&LVZLLxlXlrk%F#2BV`?&zE$6v4A832U=k3l>we8{f==A*4y za(;%PKd!yNcwVG~UtTGl?6_$4An*TqpKdF|Dy6QD#qI2{Qs}XPd^`^vBx%EDJNw0I za*|x5XmpZlXLnoE(>#vSg_I>E*3|XE#ZRZv__=l*uxd@rKy$LYxODAnzveITk^E&P zxrVK*VO?Kyf5B0cbN4)zMcjl|y`qP1b_}H6K4MdpUX3qky9lAH0&IsL9bMqIF{=^J zQWGDdiUmPqEbF8LS6I3rciii2RouYI*SqKg^Hx6G&&o-!Pe6zZ5l?9rB4?L)DKhuE;X0u=qldTR8sg-%u^idj$W6a>qCP1USHaIIXJdv->St3ARkRES~LT%ub;-9emcrC%5-oz6k~ z(+&mY@UzXJ1J?^Wb=C8>_Go<{;KOc}Q( zey`y8ux&~O)xcNj%1s`ukT0nyZnOV_fjna1DUr{2%_iK%h8lD`2wr0lOFyfF!3xi; zW-H^C;5JFLKIn_==7hq$W|qniWqr?}rDJwa=S)q-(1y}d1_U*KF;PSnPHul zD3N}U4_N<|7wCuSbwrVbGnT}vJnk6-X1~bfKh}3{I7HH4UU^UyJ(yN^Q-SFEiuy>m z7hf>ZCe?w#+vc^@QnLti;EkZ-^+!9!apYQu`0L0hJ-H^HPUD3&myG~cOL_c_E6e;l2;Q`%z|AUVrG zgy$A5&i+T9rul^zk4vD^WV-HiMGR%jQ-Uf%2NcwDTS!puBhl-~4sJ8h>_Z=MnG|Uw z+KDCY?^ah@e| zB4U+awWpZJ3W?@}&%Ge>olW39Tq8OA)k7X*JALH&xWDXOLUWvp+;R6at51~3L149X z@H0{rcBrZVKl{-%Ntd)d+{ZWgIqKL4#6qC9N*;De< zeZcq2?EZU0LU}BvY3mltkTq1-lf|a(Uguzy4yCgh-FXQc=ruo}PRAqS-em{h&MTGo zxV`ZpUjYBIvZ^rnN}pAmzzNh6^caiK4-vO}u;T#A*1)i8*;+5X=tG#e==Yx3x&Ic_ zK%hrnQe{2hvlEfy_j+xqvEc)rfB5O5UD3ryUcYmU96Z)bh*=c5r7)bHvy`YKZZ?7H zOtqh2)oXNpDU9Zg5I-m~p8b2Gb_4RP=>GsH7}PsZLrXeRd4;lnvtNB3-}#R9QWdiz zOr+AT4W5`m*uI1ZXW>8-G0LzQM@f#Z*V%y-nzM89z!{RaF=sDJ8!v3oq-o4P0G0MkoHx9BgNF97VN4t z>AS%A0`hS&(bQ?Jy1_{RCi!Av5cl*4I?wR;w)^~Gg1tS%jDjH3hAV#QUE;JgE13ZQ5{o@US zGS72)*bi95B|V1Uw;^D?mHqS`$(=0zVSU{GZ1A({!lR?4hvr?gJt{+IF8Xf|b!pZn ztwvKNJ>6^JJU5Q~B5J!U+>nOI=C8->F#TV}hcRf%_;>t?&j@YIjtbl{DctgZ8W-kr zXPtv-B~^zDyR{>AuziFv7hOLGTMOw~2V4uEvZnen#A%BSBfO6MIo9^c;{9KLAR(u^qXcF~)t_9ksYKuTmL zqHOxXQ?DiHYV6+X5GOS@OeI9~mNLVoNo#x9E#hgL#8Hvc`ojzaBWtu0#`2+r0N}&Q zV6x0#U%prrz?^pc!bltC7Ym?j5^PXjZLpSB4})*bu(c14y5~Sx1ds zJHUU#oG>8m1{F}JyH{~YIXWxMW|?URa+r%A_cY7dj_8hsfF>5(&fU*Dyn z?n3@Et3hojP#5=YpdAu!`ZrfLv;7Wl8OY*;$S`?bQR9+<4cBzpQW&(+ZC05kZ)X1& zX-DexyhhD?a`pBtM2yXDQu(F8YfM)&81vL}ux9a>N=2Yx24+fWjhhWhq|LmLl zXYZQ$0PVD~>F=@`3b2zF9Kw!|(u%l%&p~By2W6W<+okIpyT!c#0$5JKObsRd&K+Xv zXDJ{4MR0q{Lvrzf5v0BIt&d3kXVnXu&mym$t|oaFrBn8JW5}p*u@}P}A@TzL$_gHr zxh^5=Kn<3Gs?{j2;#Y5ABb$fYD}`1#tmU!I6b;TuP_pzUB~pz=W`^ zb)v4v5v1TBf`vBbvA(7^%TEz*)9+#X0Yi$S%@YRx&P>f5+By~~NG^$?ota|Zw6pFj z^nJel(g3iT?sgC@fYW20>W)Jn;uI3UhUH$LqAdLgj;W9@yI(-dpU5mN&cl0-7XA{1 z^Bp5=HNBclFnPfDK{ug8Jg+54u)o037X}3-bKX8w)iB+6gN9g`FG_y{5oeAXjELNh zM}P48lR&?NFfGHuFT>{|ha?Ox6<9KA@5mSwM(bF!3b2IZGewqS;9ex$*sW1aVjTJ&Ky*KViHQ(x6bL)z%AtNKuv*~?{;-MZjjvS9I%tdGRzFm zz&C@cG=(B{@ZmpxLRy*gG8BQ)l^>!qD2FV#{qOL+$n^4f%VEae7svA&nZea@fa6Dtb;am3*i7;HuxXt|i@O~#w;cM%!lvEFPh zjb>>!Zb$^R!Rh}ek;}QS7G&0V_iLPl3mOUUdne}wlXD!P3BTZ|^`$+;AfW+RLVsS) z{5bA&Pvqa}Xg3S!(^% zfiaZwr3g0yp~*y^=n1(fNps1~gPy8Ke^L){IeX!W_&#B4FB`=jCxZwPdwN8j6J>1h zH6S`jaGA|c9bM6$pI-7{(^R{o<5IAWwA|sQ2U&aOCjcQj_q`@>Tgkv9-NfT#ZTa>+ zTqpD<6UJ~*QJy1r`g=@G0N~RLT zPMn+O`FI>0@}aFd42JgCaXmKT(Ojrc*uD|Z5M7#do*F+1L?oGRGPSWgca4xw-rSU6 zzu9s7c~F|2x1{{^+X-MNi8lp#6`_wFjDzYT`oVia;4NjRP|zCm&xwaGR$RnS)(uSg z0NkHc+~_^ok#pMH;{*r>rAx&wn2=15jlBS*WlIntwe^~3VPNa|aY84Qg;xUP)k0D~ z{qR3WgK4&?Vs+Ie$_17J$deRy$+vwt6(hFSq_=hIv z@M+U{A$<+8ORiOMpk9<9)s;jmzI*)SUL*vWB#^N(80Jo4$bASU{4A$9_Q6ovuEztB zI@+|xsbg+qy*AH1yP06JZfIr{J0Jq(i_oq%^|M7nntjY1y`mt1qwrm@R+QMCmu&pb zOJBG#&$ZC-!^2ouwMdZ08(`{MHB6FiRKNMv)ln|j`AK{ZL*_4FuYR{_h=zNq*BPIV zHqpBy5jfJ~)A=y8Q}wWr^eI~XDe2Xt)kdad}^@Q8kfb6)JZGTITJ<*DZc96@@FJ|qrKpA^-TbebZs63o+sRH z?;u@uW`qz`w*Kkd?Y*ap%*z5+{Y#+aO+mB}HO36iLq5a&4L9I2?Y)WR0|3O!$}BbX0{%V7;ON)gB3u+1(t$_lZU>{CKAIM4n(RhkugX%v`=6YmC^ec|n)t|cd%A^f2Z8Z08bRLCptjpj`Q6@aJ|Wc3 zrYbxiV|qzHRv2JQ!=23sCMyONGikaxa#IYVZkdr{{0qNc7yXASQ5 zpxF=d^g$#}!}slRjJtXLNJ3V-*ca54$lD?QvGf6PH#w^a=u5gUZ$(*!3o_Jn+fo%( z^dErt@^^QxDdRkLEBWM5Pf$a#1WQf=#lT%!s`+;?GgE+&{iGjiplP4mqb2zl5awAG zOVclb>Rlo9I$asjDfDsLH7D3uLto-i19U!AElHs6$J;)Ojc@no@8DeHW#M}1U3d^M zs~WGWst67XNPR%=RE@@0Ln0Ua5(HokJpH-kfOl@?u(Q$LG|Iit{$~`k!(*$SHjBFZ z8txAaenbmlOgl!~HJfvXx^JPGg>mp4Ka-lTT)A*=vVgZxGZ-Fe#*5f2Yo9(HRf{tA zaL7$-Sqof7at=PN+rTovQ)1B~2gS-u@Wp`@h_tzv2TSgh!e zo@t9GKS1tF+`?Eg{gG=G0Nx*I345A#^Cap;0}X%WdK(9_Thw~&6+&Qk9?BrqvDJj2 z$=F^^7|%oWPGHw9AN8Bi*r|*ubg;z6z~ z4P+a{BJiP2vkOsX&uRieWD@;|MuZ8$cAh5l;h~e|AL8z7j7T~>`EO5___7b)yXW@~ zOalDt7}19(r)v)~d5Fjtub=&O#lauaH7*=KC`7c(ja<*^Gof~kFRrb6hRGxr0Bc=h5(TQXwri zqY7o5uC=T;+YlEL;+LgNG#bh$AJwPf5K11XCDt!KiGmHhI-D{%y$8^_IX(|{KpI0a za59Z~mLQ)w6R@**ES21ZonlVI;Kvp)* zed`zi(fN^W9$@aeb`!*^Rol1XDhGEe=J3a3J) zoOb_@NSnVo4?M6ge&s#?E&^)ob%@SUzMw7tkx#sg z*)rDDw%9j*(6(JL5Ir5rYvD8@&Ubt5*!nZ!p^K_*8aqhTaIN(=^z9Qii_cgN^5!db z9dGK*sY5Y;z8iBJp-)hnNs~lEhdpT_#&kKz&Jj*qwlk=|Ec9sFMWExqxSV?I3^{t3 z3VUk{6!5Y_@;5V1*Ld#N!FNGGuJY;^SC>{cOlPbQekx-%4amPo5zJc5R1_%E_aYZA zi6q#JhR3U{pdU)jPyi)$*o^V++6gGt;cDuAMp5c()o?+s11><{TCjxNT=L4k9Imjz zI$w#$E>VA5_lJ<0+n-L{swXoW!?hBpQFU1h zvqN=W#rm#;|d<-8}*ML*-RvoIem~|*ABz@n@w-1OIl~|>D`>W%5j#~1= zl6`Yd(msC;ePXGs8gl!U?opiLX|LSxYwAVrx*z^lkV<*xAV?S+VgQoTXvP8M+gEjW zBf9V%WTH)M+T%^g-7nAdfG?i=minyYdC3s@-Y(uVyE+5KTKYS6M7&uVN7XgUxypOqmduT!U}tZiyy1KTP#RJEfE z$-5o$<~wZVI((&KzAYtE?kvROcv(vKIOI3vtgFWX$!MuNHp)b_s*-obE@PjqOOg^aQ4<~134~&p9|ndVFZra?VUeUA5^OZ(T3#Fcc+%8) z3DehF>O8r{eCM3fdLZpLYRn7b;=y4|QSS}L)_S3@O#m%G(!XRS@4L=nGd2C(JxjN`W@5}PQCC< zflh?L6a(IYe^~NVV@7V41dLVP?3k3vzkNC5LI0+1Kw(;Vbu_*?vN;Cv&QbZ58HBP@ zIEk0nscUP3W~UN78fTUJNLM-(o#|{v9V-VjdOQc{uYYsGk#SDep~kv)pV2l9qplA} z`tCF17obCT$y!Y^MR+>99t}_L;MGQy;^L49#F#OcWM{H{le8npw{$w{bN15fATxaE_}bJCM_{kuy^- z?b{pr%==n&0{-E8AJwDfa-=^50z%CnL|lp`P6u@wt)$Dwr1w41xSeURQT?@`90K=v zySV&Tb)?a9AErNpU(qJ3=Dm6Ygh?(c2PII`giBUo&IEYBZkpqNg#Nuq(?BzKSR8JMjV9P%$ zMmbmNiI6i85>C$MXTtw~HRv~T0*!uRI6rw}g{R{W*0mYG?a>bK`F2&l&%jcY4;1~pZ%9L*q$N6 zV;Fq}bi_nf7>|%SeiRzd?FTG}Tr>b7Y9i1c>iuepye{%=BJID_^;}1@DSpmY-7CI} z%x`dvZVcMe12&g5%GDiC0&>yRnXXM8y5$IFKq;x7pKMf!?+SoE&V{rHdk~F@!nI;ay$c}^_YwDzyDRd=O3Y=GZhbNPsMwO|O2K*TW% zb}^!3VhXLK_oRM|%z;<`&tj+ep@>)V_2rhZJJMCo;~A!*8S?mh-2ffg==yc+$~&@%9J4rnpR z5z2k^p|1~jO2_|g_a>?s#jF-gU{dmgybT~W_H{W|lYuHNWP8)qLy#l<+|0O6F-$@e z6LQ274+H|q0&P2>O-V2Fgf+xqX#(2+3kHMba%VW-RFZpDzx-}tb(Ynt_^N_=kbUj% zuJ4i-rB6%jO{)1~YJA;e46WB&Z0&t7F0)TZLuM!)NnTB6 zObM@kEQoIq_nAS!w)h4jsQE|Vf<_cvQJC9xAVKV1hksav%DviE?>vv8c0xEhC3++g zowQ~9ls_Y^G(R5G#Px&W8@j?~z6!yL3OE?h2Xm=*01|pWM0pz(t)S5nuG5oE|Lnr- zMDpIYuxf6ILZD%vSk50Cjz%KHp(+UPoc=7c-?g}Lfi=bWFY>sG9tDMU`F;vDXdguz zcnbV*+br#=CYbQDSlE1Gb*YE*kFBxg<{nWEOha=rH(T|1!M@qis?*&;NT~jfev_zh zKSbFbzP%wg3oEZycD{y!T+8t6< zs!E^7@P? z-7*%coF!5X=c?s~vCeD$Zw-|`4|0fa){1n`&s)n^b9F=d@}khiNqB3LbaXKo&;*{3 z+8_R9Pf#tSjGX6fy0PWSA%ir7?2b77~PdA96#L!`$P4CxRAM=x zt&~0nnvwL^U7R)~HxlH6oQcA zYB;}O4dF@+79f6>`+LwoxG3yEk8Jq_7*O|8pyxTSb-qb1jw=fV@fAn8MM@A_Q2kF3 zWC~Rfpiu=cbwU8I7(OAKwomQ9XbGn*9`Ysa8O!oavUD9-Pw+)vS&GF=U}sh9=##d0 zc1$Of>P;=MAHc41I03M#e;idZQ^VZfcwcL+@{pUmHZlA6I)ezk-RN57??b%-={GLH zK^^Q?+$!CCn7S36!hXrPqhK7|W;AT4Z)C)ayne<=dqdoAuKg$R>FP?Nt|3|Xt;NGI zv)4I7b?<*ts6}3SbO#7{mMorxkfTGPbBVTUhusnPLXtr%XEIM~;j|O&# z3?zYfg(quvh>XaH%IkPZ$&^9bsp#>0r>ODoN}-uuxj2NV522KuGl_gjPPw@n7EK(k zGnRcjj$~-lr;a!47#^imitTgkyNnV_)Z6qN7xy%ME+&vvW!6Sr*T&>?z%7}wwk!9c z>+W5WqPHUWJ3K_q6ApHn@AVzi9uZt1wr|QQNWh1NV6`%%O&|Ds!)tO;0tLq=@P*eH3_0+-8z=3?P_fU(bj*2oD*#?2Y!p$KyuOFj4@e&3(oB zCp_0C)429}PrWPWGz{KF08gp>*O+V* z*L*MNu6h_YqN?4W4x#kP9f5xyX-nunX7Sd=9*9`oOGYY? zpOJCi=Nahw>n3lOVhTHCz2TwJL9K8uPpg(`jg+F?ikG&cWj?@GCGJMJ4=?2YopMoy zW}idbU-=2*euvPM^?|%C!iOf$y zf-0ErBq@Bi{9az9X;Uin)MHz)FJ;k5UW{{{jj08zY=kBpp7^qvmS}cr<8V$SxLIdr z->6b^Y3xDAzjXa7O)c=X3mn8UdkxMF@qiGWEn zEV|l1ljSoi@k~DOn;GAG7A~IJ+;rBOBZYD_EW~IYN9E7ufX4;-^lyG-Tw_V)`l!*u zKNIcH)!z7Nx5r66^!q6nP7(4lp2hp-{#<>>8D1#T@ zNx|fMd*LjM{i13=bB)zzgg)sfD*1XY(hjag{cEm*CeyOi9}QTGRQiH1?&m6G$Znu? zrT^BfGqY22a&rstF6G=oh~VadnLS*6ucgH`qAG~QWov?O=6n?5R?A@!uw*tZdlwC8 zu$`vf(eui0@~S7(v><(1H;ziy*w>*bKrwd z$=8aTZo1b$xm3|#jQiOGj+XOM0#h4QrV~HeJczO-%A}(79%e;K^8wuCPILGVMxa@e zNu1x~8yCN&Pe*ass`9vE!PR=hxm=<89F;ix_krf`Kmre6iiIqgBldkj^>B`iH5{5@ zHgjTUtWVACAaU!;?2iJEG+oklIm13o$Q3XW6>A6f_0)_@5ulnN(|Lu+41y-=dhqqe zXxL%pcSO7WOr55Q_N4^vM8XUg1K0yClZJzg!G)joG7G1~1-QfB&Gexm57pNFEY%6aMuqeDkVsy&#!@iSLJIS$w|@@M+GX$S`PSL%L!t18q5Gh0N(2M8YeR5 zu3AZ-@3bm3VOm5~?mICHq-*9%!m`0 zMF5qZP3|0%GS(vx^|i%!rw50wJ<02zXNutJ%K*N5fp=w{h#`)jNY*jKDJyf#SWrPh zk+vHHTp*5pwo^1Q#PV)sz)<CC1XR9w~X58&**dd4q9UvJcxU7UP zy5Yts{VKSi3GEOJl^iRN8~w@9k1K{PwYy=|H+|fb{Oe6@<`>+^T3L%X)-gcfjkRFS zM(5z?b;Ss;`{WoI1ZN$*p;E3}3&*Gqe90Z&nOt^sdDz-?Kju!pc4NND3vr;8F*fW+ zWJa*Y;A;UICfpz^qz%yB?z~_&_$U&JttcdXY<0sz^sfM()_QlGWqWcG8Eo`>F79oI zD^->VJ0(DMWa29P=}O!T_pmG`8ocfhdLau_V=$@E7z|$a6%aV)+cqNU-a+1H1#*Fl ze-gVI0}#rIekaGdDiD|f2nL)&*6XiP@Ixzy@-I2>Vb3@$9E8H1j}|RTr8?M;;ll=2 z>wKA;_wO+b_+BLxr{%l{>|(%oTVZYE;05jfxa3~4Jo{@UZ2 z)0df2A!v2TNxm5s9Lzu*$hKzvC||OU3()*vsTcV3tA!Op3i#x9Z4l%RvN}~4mC=97E@6}>ek~HFAj8zl6qsQK&nex%rEO(xMSih$tK1o=0@PCUngLH zx?f4zi-AnNuRdB{Tg2NyhhAhoU!8?N%;HA*2)_#*tLrM5mp<{cuqXXbSDZ&t`XD}7+4tj&UBOG^gLXQEPBNr<&2=B@B8#F9gC2JL|`{sd}s6!l}N}Vsjb#HexKXb*hjDI`)f-p62RNMn<4B zEOcp(c$`-2x%i##1#Z&UpM2M=#t6`nwVJT5#=;IZKzVi-lEURlV&Z;#?tm7MNyyW< zs32n8wj74k1KYh_78%H?Og|=?!NniV7^qXFTMp6_SC)bL1OclGOD5vfxL7C@`;<30{60Zn#$aEO=fg4dU zTkY!F>D2vLKCbbfQAK2*!53)|SeG^3EE@%XVgqXD^1AO#9Q1SgBUIdN7h2-1$yanX zp?5omuL>RY?kfqHjd(ua(=vnghNWYQGhNa6Z@d&OEw+N<0VM*BRX29)FxnrDidNaA z&yjQs@momLns505|7W8>?%D_|+YufZ{lOxbtRY{bmfi;h6$`F(X&GPUYC$3cT+aDm z7Xc(eTJbJ_*0_r5Fa{o%>=6~VmT&3gs}Bk&02f6O&ylkb2wqQRk@{F5Zdsa%Z6%eJ z3gfJ%GMx=bS|>+bl!UaL>S`rFibK*Xk}$62ICkq4X+E3%M4kVxDf19XRGUznpF@&lJJ+&KzF0};1y-O~Oz z7jIbZamzLHntB{aaE-D{Q8lT1cg255m##tVjq@O2r=PZrW76Yv6&U z3d8xC$E%GdI7wP&n6-e4gEtSXEE$4QKOVBGoo@_nF$^iQqv}4aj*GLL!GMKvDFT1q zxxjz5N(vkXu6>bF=HqOOMBd9bDOHQ0>%qDbv3P#XbwNlW4#0r`OTe$mT}t5r!?|5@ z(R+f>?Q(Y`GAe$0TeFUH>GRe4x7{;v354i1xw6x zb9*b-Qu+0r0o^kD(-m(DQXCbT_6CK>!L~B?7=KF@BD6S-!#DGmik}yUM0t|;CIeMO zK_KDMF!~T=dvOCqB8p&upEtbk&H3p)oD+FH*I*CaGah&oDa9N%L&0mpitcOL3_ z5dQwX^_pApfOhg3-Ynbc@X_$b!G+qf8!vp_?l^|txnjHx=sWREIIKWdGGO>X9!*V# zs_jpUm=rR0R=V2oEW7)>@z@x`z|s>}Jce*Z682ov@;Gej?37Jm=B@TuCDAXrH7o$Z zElz5(_J?6z73OS!jSPhrPul+>x={v5>R$p8_4e}8J(Wp(sGBI(ZSXGQ7IY^J9){I+ zqRX!i8(^3fs$EA{#zvFT&j+Lu&;l4h04tcxq{TZw?&YN$G$BA9?}!EYz$&XZaX#&u zFd~=%ge}8QnQUmip`^**34Dxr4?N^E!UkV_`A^e7JLMBU>F?HKLwa+TGoT6#aQVck zKmTnJg%#LK*3DhNsWaY5xI1C{(0*G+BPL!jWF>8D@gPRj>|WKmEWFaITuI=V&2`d7 zHEiW1=qHfbgFEai1ol8;w39WGH@^T$^2iF*cyFnviwuE#E344m~+6;=Yia zY;7SOll>h(2l;XsX8#D9KyXUbkE3UpHm}yM4Z91@EY1+uDz;k?dY5HudOBu87GlF! zC#{W|5^+D*qY<;5)hk$6pibOU!$V4+zXvY_#V3yn&h*PH(jckci~VOE6J%o9sE~U5 zS!$Fbg^*}mfuX&xrl|i?p#c%=3OUS6oc<6qb;7g7PR^9cEW`yDguSsffXFo4nbaMq zNNd`O%pd_0ofcmRF1QK(yN>fbh=2#=3qgJ=dG|Vhc~=ZZB_J#MT^GZOkll>A0Z-sp zEmHgUdyCO#2gsw^HZ3n>Z*8J`)3AL<$Zgasqep(#W~;e$rm_px2WYE6D4N5IQS1iR z{e5Hh6|2mRApBB&4L=<$abl7k>eJZ2sOHuvG%eBAUaS{Ba{D+@n|PwL{hqNt<+i zC$iDFX<+{ocYI0WbaFHj@F8aW?*DYHy@!Q?Ux=abKyuqD)PgZvYH%+Hp*~&fAzCl3 z@*oKd?m6yu9_&R8uSNFybt1h+OVleY9_~3^Uf@ym1|JIfg8`<8(S=LitR92LKQye^ zlCp}rPog5bkXAOKy7c^?LK#x{NWh|So)D$Oc^dbBPB1-|*H4>2dcjd{-}3m8 zx*Z$M3(wPna42y;jx>-wFOVM0Q0xepw|d+Vn;^VQAicB{)&-(zx8rV?WP#&C_5^kI zaToc!bP}7u$+Tqsx?g}*VCS)hC_=iUjALCFIHbj8^Wn%iP7160e& ze9mXC1M$e>XJyu)C42tBb+&roDQ0X4hNAW*&bJuR)N-wy6=vE%sJr~?|CbFt>S5Co zTO+D_o6#DTZY?K2dK3YS zQHBj?&kHox5TI~YaOAR`uvw6!&8&q@thE1Q*lN&=66bDiS7|FWykGyB-pz&8N|j&y zkc!?>&#}w{$`xxkkqHMB^B@Wz#F9;l@BM^+LHUp)n@z!w zM0ExA(qG*I)!Z@we8ZE#nZ8)Kq~pc?K_kC1qfZT|xb_*cj4zKCV;2X80Z);)Y89W$ zM`#=3cOszAo~PMUC+SxX88mHca6Z`Cnbmm2x1KkjpO{yO$KsxkvkP3cn} za5`&by2YQxz}872sgHq-f^@<44HAA?CLfjb`!*0N{-;+c9Nn zzsM%aKT2M(8i3b-aD#WCv&VkF<2|ADfZJ&G}~Qg>UGXLqxnfnd(zSvhI$ z?vq|4cyn)iUG{~Gu|hM<_lswM5@E7{_t0JA8WA3xP^!j#`A=1q$i^zE7Hm!6QsQcq z>AmvG{?xHie#m;lB8)_+iW&=O{a>ohMUjkhDUj>zNW?xrSvDcXQ#DxOMj%ZS7-8ga z*0Tq?wMBf>$us|k{ePeqB-Gf< z?aQ_Tj1*jQx?I@Sgx-5tt&JCC7^Fxi1-`q~fr=n?+Evcov>UQ|kQU>a*G|67iFdt3 zxLgu8z$gfy`ed|;a7LqyQbR1e5{@xxACAw@3N=sL5hq22u^w8KX)7cTn%StlMNDQu zitzlt#|hq4h8*x7HSZ|JJHvBqlUzgv=_ovVeu6RAUW>ea!O?SQg7jwyGgbCph!g8Z zy*kaD{Dhu6fn?@pZ8W8aP$XgcsX8YYQ^||Y|E_}YvxBc=tfIP{k6#rQ{2F*@rhvR7 zN}-hB-UCjW#Hhgj6V)pMhASeSR+VZ1-{NQiF$spW}1*SW|MI)$sZxdAit;1^v&kJLfRww#-$d#@7C+k0>U z?WZpF?QtsEpVfMcT7}u`eZV4?)N3>;OZU0@dF@JN_R6!XB#YsP1C#pmj6jcK+R ztWzYPpEYT?OF^S8)+^Be+Yl;VH=Z$TX+}ipe2P*47}@3A2ql9lXp*~MI;@b(z(Ufu zh;v3mQ&YcipcFHLsIZak{XQN%X0`r?f!4NKSLv7O*RKaqOBu7UqX)k%hs?vzTwS5- zJr4$sDA3K_k{Qx5X;%DxQPYsa4WjQi~Iqe`{R< zY~jWwiK1g#**~d7&kV}e2?V%1A?MR)L<2-WgOWn4+e^ok-%tJ=>+g-$d!sEvMwYo% zb$Kj{Q2Ut3DNaLY&cDmrkuq%MO7o0Z95aHGK}5?lEq)4^=((q|sC7FvkN(70Y=j_z zp=xV}*c1cjTwJ+0i&L)zz`EdMjFBD^)*Ej zO{)?_a2nCin(r5Ri|#?#1kFhG*^2Kf=LaW*sexY;6*Cy2?$nz!Coz zvPGb@<1?AvfVuGM-rerR=2t|7VkU_};vQXP(_0jH;(h1)nVR&?OoA=SYowLvv>Lii zJRC=bFOCaa$TE|t49wBJlKP*-CdcM~`VZ{TfsQdv&@>;Tk|+bx`0J>t)SE!4_gRW0 zVOmfjtcd0p&A*=&>5r}l$#kSsLa1S-#~GgA z5XqbuRB5ip)X0pRRyT~e{qx;ojoy#N zl#dJ%+PU-K{fz;E%nBvS(yMH%DB`+kz6oPVb7)wl3|AOj4ck=)gwwr7Jbldz=eW0> zI-p~d5%;@lr*;7c*AuA6E%u>ElZNbqfJ%#m5~l0ZOfiq^UTd!R5n;#>gq;KS30&ou zn@=(HuPd}!zm+)`MJK=0z;&jmmzr42j4)chY{`>`EUGj#$JorMZQNmxc_{gq^ zj~h@}STboF_~{#-6PW%=0*Bn%7uChj<3wg-p0qOL)V)FR-P->?Ne>gydf5HH)G@EA z_{jpFAtfZFtl!XJL1>jZ=x4$b>B%m6ekAfWo7T;SN(GX9x#7W&8!3>lAF3K1dAu#& zuI1ZlNOecs)IY)q=oTSu;U|S!RabYRr)QtbgrH2dTpU~p(7JR|4`pqh^&s4M8wt#Yi2pRrgx2fyuRjTs0YzqMyq5F+&c(Z+#2 zxN#WM(=q_*}HJM-iMX~hloQDgaGv%H#%Op<1ZOt~820on_O z*JX{P+mTdura>&z8>?Ev%ZmlYlx3h#<5s?L)-_u}Qqq5>iAPs|e*=ZS)L2g@{DnhD zMzlNk{M$DWo(ucUWU$BAlmuM_nNRZ-<4~_-UY1FmoX-W?;SR*=l-X;aj2L2xZp(gQ z5rVY5H4L1CR0PIN4^&CPlF`LuNmR&nhlTboTE4h<_WW2xmrWetQS8V{k;(q@x})Ff z>)pBQVzj1ZX%twsOR#yUSEM;0RiOeZoXGm+rc=5u%Be|~vMMXt@s_ujlCXY0nqbQ< zHV!adH`^vkOiN7qIklj3Fv>C-6AX(Dqx&cqcQI7M0|`RFo+S&ue_ruZ4DkGEI;Q7f z1p>Ar8uC@?1>mHV6)?E|6w59Js~lnFOPOgj8`4|Nw(+Q^yjkT3lC|*4(cD4xu4cF! z-)!)1A!?F0cX$VmlEnK3rVP}$gQY1yB?rGWXqSx}sDyDoM;frUd|{Aq?co<%b_NBP zE?RD%u5{cC?A<;Rdun3EvNG#E;AqG=9S|9gOBJ|Q(vWLlNHY`W43GrbF$QciTay3P z&y&q(aZF1XB=G?+vdO>jllBaCM^OX+7w_f0GAy*;Xr7IlJ>G^;Y$u>(490LfGLRF! zr!ljy%WO4=;9P#GCV>)Kb@K)WAOel;B2B{H$e>iEnx@?79>ieqwPyhv2^h&$?hAV| z)dwnw@8B@Io_LDg#sIc*8g4qsmtZ7u#c)2?B?YbwZkR0WV=}R$c1AqL>x3}M2+|Ua zs3h9=%9U&+oRx)MgJLxDK}#=1@Ai?d=u*p?qz(S)p3Zyi!7Q)Mn>x2s+b6NXcK$-S zCcnE7P;`#Cz?5S-w6EeHQVbc3395Cg8scR6y)?@_=BB<{&-zRNa@Cl`Qv%Mvd)jhN z4af;oWrd%|Fd`?YTKt)3pj<&Ud2~e}eWcRAbTFOa*x}Egg$3K!!9C$`{gc+yQhh8&T^xL zScpeuoH(oW)eEejp03+@5L=vC$|gT)qN|*=K@YIlC z=(^?tq@&)ZTw$n6-J|i7|Jqr{JAqSZa9Lm)IzRQ;(|UKYma|iDUmrjZo2)mIxmb`QYmJ5|5QIf+XK_kKRzdqx+&6;;1iY%dwy7Tah-54 z9R>ItOxms!%w~pHhqw@fw33iRNpZCjfJ%1oMo}uF0El_y<=R$gbe&?h{7ylOsn)RK z^Fd&(nJ8C7;}(c@@GKoF$eHlrmcEX|CIRqPQHj~|p29;qf*xxMVWzx$Q|C@E74xI{ zy`hz6iH>b8f5kcJshY^w`CNnPx3`9qVCtv#2IibZO^CUcO-6Oq^d8^K*G~6kJ6HK} z{xi;kgY-pBNR5Mr&=`MmJ6hDRM5Yw{6n=8Y?A6_An24KjO6Y6DEpu0S0v58enW3^QKj!Oamq>W7GR~L z%DJ-ZzFMNrv#g-1*dJ~wdC$otjU2~Y5PXI^=th(*{)SUj7|c4G!^beS;(DKJhnh;zcK@fO_J}LIj!E5ei^j&4WQr@oFyeMlz143Hxkx8>8*tXQHXb^)aFn$ zSE#vp=lcCTDWf=y@6KONB^!%!0-;Wf1hu?tS>j7VPh4qXJY@(OW=)WAY;ct1w?mkA zj66M?YtzYiAp~{{|!H2slcjDRV(_@%Sx+ts6a<_VG8k z3`Psjh>k%#8IDH%lI8XT15-1)>WnBW`i9nE8gV0Mla@TYl4&88&IwP3x?OBYL1Fdy zaYdO;w`vqy8UQxqyEKaf=zTt4%xZI69}}tB{D=a=Xy^joljr+K7bbdQZiwwOWEMmB(_PeRgh4+4>1`C@#CM$uvV;Yo?D_$_%r zlw7jsTd?IuL~K|lydTS^2~f7QomIlYK1D!0Ys&!3v0;xlj1D%EhY!EoToZu$9Es2z z+f6Z(!14&k;Y8Uf5O?JEw<6m@)Etb`(3P7?dv5I4aLLLC}sTLSg&(`9I0Vrn{=k^1~ z+v!G(XRQWFmm6U;p+)V0oEB6QjrLc|%^J1NXyM-J)T6gpK>0l~KFi%upvqYkkva}M z$m}`Jw9tA>scqOa(7s%KA+)d@h=cW^K-PZJ&Yc;9Q=_o$X{@dX^kbL>0v)pq=LtdR zvA2jXg;lw-Z))e7VblQ+C!IozmpC3-kAvnK&LiE*q0$?K9*vMQ%yICk_9aS-($giq z6xfS6VVI6FEvuC#{l4{Tu$OYvrMuJh2s@Zo_;ZGyX>v9yNM6SJ&$*o|=R6>~Q z3g3eA17sZHFd^>sTuRSWs+w)<6XR&+jdb1hJl#P9L-u5>TaImm0r;CBXD*FSw^GtV=UO^U`Y*fK={@ zt_e-ekX*z>`~&GL`YuR&K$8Z=v{*a~qnj#cOU@F0$XJtpYuMfBuh4}lwnkpWwukB1 zSbqtJXVEO6f(ig>$#R$FV~ba-DD956ZLB5b{)2Oi zNd*`W)Ng0%(8_EdJAX5AgLmd2n6D5qG|=8ddRD@ei6rZSee54s^%bHZeZuQgd(d_N ztyFFQzt?|^Ot-DX8vQz9(rq0J$}Z8dx_zgM5S(0zSpRJFY{M6Jtr9v{kL(9cX9CJb zX)3@f+NZ64W6a1#UWHKb6vMfe%pT8GG3~QRO;1GDksa)^jXF0pTK}FGJi%f>k+(jr zttD7p>bvc-Ll z7~N`RXfS)?+U9)y#_rv#d6E-)%-lgcyGt#$4{HYk;S!!(vX?yw<^%gP0rmXnRk~qI zJmN3iWG0vxOykph7OmCeGOd;9GWOJDPx5y1P(()q|KZ?aDtA2`-UO_F0%I3x|LZph zgj<q~=Yj`M?wn2Fzwf*jAp?bJ*Wo)6EtRtU4GDxXezS& z(TQN}8e_h&$Bs9oWD&qFG`kr1C-rv4#0oz4oJ8YWBv`%qqh+C7nAA1Q8nQo8Chrvq zNrYxvN|7Qui>`>y8&o8gI?YcR1s6>6=?Ye;*x~km)Q#^BoLtQpZ4Htl2H;XH@k6I6nKbfL|wc!!K5EpiVOx ziGgL0*_6YDL?DidkFEH133UQg`3P`W=8~0!bN?6Gko%IUq02J>I~NmiwBzbWg(Z}E zO<4=)R+9fv)EGg@C5hGL-rpb^>;UCG>6+G(sjTk%z_2S_5dC|PK|zk0O=rygf{CM7#9ZKmz9zuSGv zDkgf~_NDg%<>&6*?h~BsA;}34joGqv`OXXP30aj-5562n7?{`>WP)9DC`L~(#u;%x z6eeFv<)nnl*u&CnQyY+o8{|_KqMRTCawnWIBGMX{!KZCS@TURbB~n-q zVvh1U2=_kk3=SNJy9H-<>v=g!_ZR3O8zLokGHo900 zHfvlFFlN#WtXtI!BwTEBmq71E&`IRNUVYY#%Rw+5NoT~Y9iRHR3`-Paswx%xrAwOR zIvW1HM~{z>f@NnLEiCJ@u8x4A4tY~lKA4e+J*g;y0{st%N2`|9GcqQiO^afO>LeL~ zNl1YZ#3dH8&d!0MZ8pq}wwjz*X0u3=#Q(D1kYwBUfFzoWy?T!wXrenHUG8DaS>Dn? zOl!8g47U$5e*H4gQQHI zl1Z8P%YYJ?QUP!^K^XWy3N|=0U9;mn%1tRwS!PgW|g`(^8aShZT z+x%{)q0V9{+vv&feZ+;ih~z>cz#)6L(G}lyvyJvLkCrqfjGl?C@Z$8#8SC#uW0%%K z(p9iJ*zE^qXbCj)K@<0Qx2=$F%~RDcI4(o3*A^I1QSoVr$(=>1u*VOldXb!PEVF8i zw!&@y^ZngD*IjQrWrQcIwhU{skqT~dxI@Py^cYtT+%JN7-{fIw9$9tH^b;?VeLt{i zAFr_~n^jBp(p3n$Vo2+uB_QqJJ9%3qC>`^WoVa2w^F6os;)v!bs<_u1Sq{HJ=OC=@ zD_Sv8(BeLeyJjI8taSD1RY>J(=Pf#QL(Mii;%POc~fi4@pUr-W$)dk7L`SZGT z+>#A`n;tbto4FepqiOm}h<#qDMTI24YJF*PZz45hH)88|id>*}`u>Dm2aEyhoLL$@ z1?YNIi7>9@|Ml$PgJ>F2k9cFCIx zh6^65ff%vR>@fAG0hHcU#^Ohyx28L*6e)`UtnSc$i?b#4y zd#4wI@-Yk&wlgDiW2-kcGZHeXI8#U7fGeMSLXyH$ce09d(VTPzs)(3Vj7k zj1!C`1Nk<_L|yM+>8UdfpSqz{op3_=Z3Uvis-imO;Sw4asLS|8bRabPh zDkRaimmHvqeJ$Whht4^qNaK;-fR;{8+CZpaEVxi!eLeVYSs7n~69dWZ$*G~!nA0UH zkcbJ(BE5&_iYbuqz)ks=$i@lvv~XT@bP(r~>Frlx>>G#gJwSTDPeX z@W)vPoUX=?&zMISqXA~FZ7b^Z%mFcAZk1|O7e|Kho5Ng1=9xuuPNt&ohO_JgZnXyo zYlJ#a4F(jZ6Z7P5ckiaLYG?fuUGr;?>>@iu@<_?79CY_OlK?(eqw9KQSH6a67Lw|1~#FShO=2 zzj>$(u-os1yJ*u4q;h$kuJygtMxmbFz#Z{V7`rXOtE)AV5^nGGMXTYJ#lqiZw z?Hsw4dxp)lO$_W6bpfp45_uG5x5#OjJQ+U!S7Y@u%2H@7Vm&kaievup-{^xju%nBT zvw7u&Aw#kKOy@%Foe;cb0j&FJ#fgKJh~ZvW9Gpx$S^I*dbiQ&g%j?ZQ+;=uO=_4bQnvwhM^3q zLrY~sK!kn5+PM9!x<*o7`bauG>$-!fEz2ZOh^GaUZ(<&IC*7TuLdQjLOa_e(wZ{fW z7?-KvRPx%QN6^tM{{a9Sq{>~Nw?cHjNg;G)17I#Y#IbV^E88Dpv7n+J1Z8C)M@Ceb zx>gcvY((CP*68|_k8ED%-rKxFDTVAUp4XagJWZU>db;{ZKl}hp7UE@72E58qMC6K- zh%fm}H~k*HeCuV2{B(*Sy)@fz9Ux?Gr=r=JAu@sgFMu0emJZn5P1O)SLW{Ka~4UHW|tRLL_{+4^gi5jxrfhxKrFU=l&7=G7b~ebLpU zCr7!fnHb`H--j0_IJ4f~&hvn#c@2X>NrM`TK#d@YZt(BcNxEB8rz|pX3H1<99{RaT zwJ6%m&E>-9-R|Q+*GPKgJ)*75?MCCNRai0Wbua!G)A@&_%z7z#^j zpzTZ=meS)%8gf-*d0aE#HlxnmcJJ_ts#9Z1Ht}s7i52}bK~XJ9JmtzZ5Y6YnDrHuX zMEG)P9i_%PzBNXXhF?&0qh@Pyx5scg18|n&UE2^-i-dR{{!9<(2nmXU3v$mqx1?PE zoBDtV?%3*@F-X>#kzGlrV5sdtXwPNxEc{q3xR(PIyl5<3HtSUm<`=+$rs5s?A}+K> zr$j1R`{OjRZ-f)_0dv+dW;5+9RO>v8@6PQ_8*m1O&x9 zCOdf=LijhMJT2K)!DHef}yG*7hygwjw?}Op8`e|aU#a}MKLvq0GRHeok`V+7e3CCJXAuGwHmEnd12J*spW-N>wV7|CYBKE5Fgsq!(93ME7y<|P#nk-(JRM`} zo=AV7;oRRf5{kbUr+qtJ9mo2MXFbK^^6{I^O#wLRmtP`0vGA(~B>m1Jjb~uomlL!= z_{*p6UZvn3jILU3Wx98VdZaFYwYG6V%oO^7{3|_4_Yj$G*ApD^jR#FLe4TBY(>*GL zOwG;pBf9Y&~qs>Hse9J9At%XS1$r=BOo+tml;uJrJnHDf8-QMb)_lT+kv+%9$ev{)T8prpL zLG{asyIzXfXK>KW<C))=9^N89BfGM%RxZgzuz@y&Of|;%td%EN4kQAOG)tb%p z>(g}~m5jjfgfK#=DmJnvPVN4f0B}w(qB+@G@;e&%!bm5@YSI-hjp0S|`9$E@KMwIJ zFzV7(Puue;f~JJj?4<16!H6jrN$dV8i_$|gGS=4&J$U~fdAxU6MxbfaDkBBb{ z(d&{BW*jSrh2Cwsb=d^r+GF8dH#HVg{j98z8JjqNCJJc8FRonVMB98)b`BFsx}gz z{A26Nlssv4r3XcubcT#*0OFgcLB}9Ec8~;&&9aN$sJ^6(z!LHf6sSW3@d%@XV=>vI zid&0M=GC*OVuJSN0pN(yZ~G;UFa~KU0hmaSO^RtPnmpC9<>R^jb&V(0l&Eg_1a4G2H4L17crgv6zJS=w3rm0;+>6x%QYDx!?=qk_p{ihl(IVpNH zWe#bj(QH%QafsH*!8?0TynGPvVmzB(y6@I$VOjSU;+WJtrI((fKxM*~uMZRo=9yl$ zXUHjjj7JErXX%4bs7MLrQF(YD4wE!14Le0khu;y618mQUd~&_0x>uW}J7a*le=Z0~ z1D)9QZINg=dVx=s&rp&vs{wVvO<;nY#8Q&F$N??yijHzL3?e4ZTP$`^LVmTK9l!(b zCDQG*k!n`6gCJfvk=sim%DWNkcp*(=_ivCj_O+zp0Hi``WG~$Fo^kWpuQF*M$4WN- zJkQMP&Qdkas}{y;utkh`B2>!fH-ELO?4g7G^zb=Al^ z_E(sY%na)7#%JByET=*%9=9wl_ozhH84JuJHymcBcj==@X2M&#Z@#gFc7JB|vnKb9 zlP3mX&>hVO1r(5O=ytTlDJVUTHKwtWHj1k*%Y7P83Kkbo&cef{n}R{3tWpW7L(OZ- z%WYph-+r`4wwhQc479n<2PQ70p~;4_1G}89hDhD2;3+BS0KHw%!n5Ax~dxRGQ&FJ1vVc45#l$ZAbM{ z0^pkF<-7oH^cJ``%%Iqvaz7HrfuXT8y7*4LHRi-pELpQSdBdU_>~VgD*faiZV>umW z4ou`fTkg|x+!!oPa*uktf2%_c+s2VwE<7QE z2(0=S)n1*uXBvetmWQ(i^SU2IO64MAI~9yJ7RYu}Oq$bOTeSphfMlhw(6JAmyI^#} z8&FCybWc598fe7549`0W_a=yn8G`c~`|A2BILXogY`q%cn^hw`?&%y!%IcF*`g=bX zqz+Ruze$7uJ{!-sa>Zn!CL8P{)PuRm&TYP?oZl7@H)D0F%WszwOB0NeaTc(Jr#NtH z$7^0x^gCDvE2ia6X+GelpfrJGF!6Vgq%ctv=C0^!+ zRoqe0YC(_e*DPOP=Qto{Q)0kiXsUD!dd<2!P8At5^F#>WtG^`RgYz^#a>$4AE~^kD z3B{t(7H=n@uSb}*U`LhJ>vTdv&|>NvJA7{udG|ADg-LVnKvp%lpuA8ARNA6#OL6Li z|9nD8_)buhx^33T7>(O|q-P`GcF3r;gs=Z;l`~#`@N+7u(N|QvmfI^5J{Q48NWxBp7KsIb5`DF`=j|QMTt|HEokR4p4HwEF%w*-JeAq_*EvI#T#~6upck!yAg*12` zo;^9@jrB#%B>i%8_7#4ef=DK4&lWP_=Vk2$R+EUHt|;R@Sx`YsZTd*_5Q$Zr;s;~H z7#V9(-w(#_udFDj3UuO`dW<|wnJ7x`D+gjB_GdCP{xz}tHmAp31-+oJ4c*mMp(j4K z$j{*=3(|UkwR;Be7v7ef+LWA((bcxr3;qGR)C^@O9tF6nW;8Lt)~47j!x>vq-b-LL z<%Qrb617W87jHlA{lXAMWRMvuc+#?>EhN4%lc${G%b+K-G^`V^p`S=mVVp?6eUzKK zr181axvGa^5MZ;djY78I0@*MK2UpPt`4Szdt@(I!KWTu2pe)UzPhgFgKW z&FFW@2XxYdfaf4wwKd|RVX@RvKDXf_z;&fhcwHNLmD;7Idr2}vFQ`E}7pS^y^pfqY zgulqr#7O zd;?E7SGV*TUCDM@wpHbqoy><)N_6RO7)v0+sYY$t)95Qvi=vGs4szg+e}u3)a7oW5IKT*TU0bcTjgb!3jc;^M4(uj%3ElVK3B$6skCE=h_8@+h5GD3hv2a z8TsJ9)p9Q{3IIFncgY%!=UXJ4)W!AHg=75Nf)shKFry*8DsZ<`IqcxtT`I@%Qz>Zb zPH~!DnI;5m;wT_PniGZvhIUaVUr5O^Ljm3c!r$*W+s$74mfhRrW33;FCp^~SH`2qt z@L=`Br!FN3hBULUNCB2K7U^5nqmcj9$`a~`?)Oy%n{Y@+6!KxM)*YWjo~cX~%uxs& zr5&jC$U?EZNtMvj`gHYURYzVN^FTpR0f_&&cyOGhP8q88#wf4kklVX{$<9!4o>p(2 z;=rtzqyb!r+cDAJl%*?SPS}w;T0<(<_|jpqgS(ii>Gm1a+O~aTp=%d~yGxylc%SG@ zbm_O@yr2T45f84ysCezYVQeyf4n5`LrPPxPbj^55m2c|Oa&}PRp3g*Xil{;#+Z&BY zagn*Cf^Hqi*G(U2@|5KLq34Msi`56^&7>j6Mip7u-ennE1m4w(us~QCoJciPO&T`2 zDzCfFy2e~8(gn7>-yHY_wx0HN;~5}qRSw3R`SHt0Nun&o zT)u7h%p^xxwqJ4|MGHEWQI?%kXs)Eg#!nd zEe4Is>dH8WZvdn;wg5q=lwJ}ch)Rvd?$>}Lne@b=yInTP8J-dw(c6ICw34H}>zD`n z`k!(GXh^sMx0Pv;;&8h+&AfU^b^WK%8l7Qm86KA(*7W#i zfkq{JVk1mNyV?5vGzV}qiDlQW+;5JU>vN?7P)!^0xz_}3>7L%XY=7#H4LV`nx6r4) z2{p*$ml;a?mG>d>NuezSLH3B2#2@#nAi2Wxx3gOj(pV1%$=Z4!uE_AyvvF`rsR zy*HdOnBUor@yAr;<#niCPghPb!{K6WIvDGE%&Z@u5k^fBmLi+4d~O#8=cI<~vN2io zg+gpbd_!517)OMTobe_}{*(i+bRL3d>}g|Nr-OGu%;4ZUIu}+F?dl_O?4ak>f2ld< zmNX`qQ3tF7rw^6b;D9xHC$I?DHri4{a0iMoyE|hZEWm(h zZ3ZmJ+IRl0>lw^&jLYy?;b8Nnb844L{6e*ckP^#_85YTMfJY!fRlVB&|+&9Y0Dq%|9x_MwaE=F8%zxy}V zYppmxFae&3+tm60J9*Ho!r7jsqxjR*?5>{dzj!5po(62LFi&MgPH5qgD~2$?BjeB} zeS^#|MPb$$Wih<&7w%eMi}Uv>RV|P7e4<$(0*-9%t!J6jn^rZz&St$k?OxA=FTi|+ zol1>RW<1V)%nwkmALbuVEVeY8{jV`%MAw~(5QO}1JAQ#EWYF>n?zt;Q(ZsMGQ0P3y zWQbiA>r>u0bo5Z&)t8r4hBcZAk9MtpsR=fY@hR06I7F(kOPI={7!<(B%sA2v(d;7Rhf5gu<3_*!W#gVQmHiwFS zh79t+i=;QKi0!4!F%h5}pC6FXSWu0Zsuvu8QLZFDc0kxdvAo3h##`{t<7c z>#~prE}#{7E_h&I#z4}jLvHqZG+eC3I!3pyjh_pNvGebHqtD=Se4ijWDgc5e5N(Ksq+yf}i2!qB?0`AJv{5MR?>f3J1bap7MN}VR3j_ePieHb?J=q z4|KU>soq<~zoH6ScYYL3wS903rSRkTB}r5*GTc zSy;NDTxQp71cko=6sM3RXBtx8;cr^a7mxrCyZbi-?K-S8QN~EGDk1m<`p-U94Cbhc zfr^QG2wJH)v@N8>mxSc;j1Q(rpYy!AR{*c%9(3hM#*UVQ~RC?GHoqg6`VawwV zv9joC!(C>`ESw_rXvX}s6PX5gHN|+KU5F`KrpbJgG@C>YQkwlTcz+3Kw)wF7VTGnH z&(1f1Viq(4@e0-5`@2>V(6+AW_ zE>R_IDNR+zwtFo$Z8O(zI>_X~gD8dZzxh6Rmb$V7b{f`uqHzxbUgJ}rk^6i&iLjVV z6`QlOVVLnYVn!Q;L81SRXfnl8PMCQ!ilfU$7`|9)b8Wp{w#xfd4!5t7>@BPfMNIxj)$#>d_AqTayfj?VgmN8{~j% z%pgNSzM4<%z&DXE)BOiJw{q$Qf<2W`m1r(<v_`eN%8J!nMMCTgl&2&tMK$-83qno_5*E{(;?C=`}jDs z?~YK!Y(3j>CB{M+F?W6%r@-CdXfDBeu@u7q8@lq!&mN`1+og`@bL?>yYfoSL7niH| z+%B;x{H}wF@+0Cxm_QU@ww@f+1;iM)k@TBVm{bInpv5aNiI5*h2uRadD#+Nt$lI9) zapn1bU`?Qob;*Gx;By2N0oMDT>9+2C>0!e8@e{scIdce`30w&Y;AYGs%A1;IJ6O=c z?d{Y3GR8sh>INuKvpzKRnT2O!249%2X(ktuCXMS+8`d36W_TH=6lC-7mfVyaiF0i# zMd|Gcl&41Nt#XKL#YsqN~GzGnGJ+ z$ZaqMVIZsbb;PLpqU-9F%$ObrogyT+@#WSJ(=@JCwuNQ}>Sr_o-)fg0bs;r#w+{5} z-1Jvae)XsLEtSywwUZ7(Yoa3_cUvv{;hKXdtp5~sNka}YoWvB{Azw9!6|(uoGf07s z%)U1}BDEA19e9lL&ZZaBU1ybY_^^D?gfl&w`lX`J{ADgAu%cgkpOn4sAcqOWgQ)x~ z4P3TyFaHFKWGmS*F6>Da)+gQ|X`U*yC_a+suNm*-4jC}Rq1p({1AfEP-<;EAf5-_t z2%(9^T;xVBZBPFO6QDLyBBnR6kpPLZ>AR()%f<*>Y3*@B$o z*2}NhyhA4Sq%yEWwIX84nPqH#F=T6RY*rWMxK`AhE01hqXXtz{(~)@Y0pAo-I-2Mx zR$G-zNjIITII#4io3tT`XyWo9t#Y6zkTx$lRsSRf^hy-|nTb>-8S#7luSdybd|sG9 z4-y=Q%)l%C4~MT{vCBA{k*!m(B!jAz?@w8dkU+$0djWXbo8mqtZJG8i*HY#9U)2@X zM@zl*WYrDF4`mxBTdM!bT@eZMrhvLx2(^JZ31oY-nPA)|)Z{%kvX z12I7GBF1Vh?CKp>w3?zL2E(4s{dDEsmy_>_dJq*oZ&t^Fm zSkwX6w=4+=I+Kl+NSB4!jUU8shh)+%Jfo3F2}43MOPi?+0y00jx}2x@HwSVW0|@@C zzVqSpr^FDh8)<3eLkOBHl&gEq&ff3#KfWh;P60ndEF0~#m1y&~^U)up%}}a3_|GsR z`T(qK znQXJa8HBprxg9H^4U8zJ%k(Hya`g>lq=T58$N=qJ0xF8pj}pva9_iOgkND$zSo-YI zhhGd7E)|0G6coY#M3-FkDNSQWGAx#s(;oelgGL>TMzddf1HYGr0vGVVaDSMe3}PU1 z_*VoTA`*Y&L^^pgc%8c&mTt#e&o+ThaI5?__1kw0vx=QW0D>p^tk&pbs{Ha5NSCu& z{xpaVa(do`RXW=MHb2E;8|QwJZ{T_hbxg!tGx+{VE<#=)HN&k+1mVuDXlkedG@^iF z_o)eqlE;=anMqDFf=5YgV6bF(jt?n&1&Me@iVPzF_p=9~it^(B0CfnzCJKeir+9dj zZTYcXR=K9HN$2xKS}Vwmu!9|Sdt!i*+$MNbXyL>+$mwoJ%8nkVLPc!R-BMuxr4{&i zLXSjWu~SI20}FkHDUj;EO@XyQlO8gcE!y}Ga?Z)d;JDz`?DdVL-11|g`OD%H0!n_D zaV)3HSKDrUG#{XIBMLS=(tAxsD;BICV4G=*OPrL+@@Qt}>6BM`ePxS98Bw&J{)2=P z>B*lZ8C~wOfH$Benp>Y5-w*P3TpRuK)H4aW;JVc3JAB7?{5cufv>Jrp;=hyrX+dWp z=$L9l^y8~I;-t_B$sgy4EADYSrW-H8bqi1xWo2ZYu;o4NRXg7AF*hsmzV(BLt0j%v z5wbmW20*NKob>Y3JWR6OOu9-rRow~qZHRG7Qn-y!{!t{fy89m7hF_E0ND{U#tuBRf zO74qn`vC2MaO0eL*@Q3A^&CuWb6n{INcK~Z3~M|6wNTx)5c?>ASaKU{xBIxc35*{kJY{G%-Jo`B!^nUKj^x^^U*II<_{(6mZ!Kh@S#ot zCgT9B{co=w|0+w{7p9~p!Hg5k+bj^?O^2z_FuNA-j1rvQ8kfkIkZ~6h*D8XBRaUWZ z`;J_XI(@E4OrFUCh9I{rfR9??3%c>#n6edVV0xO^jN1WZ<~ep|z2TRxh1?4V2$95L`1aGTqABkS)=HPhHisn`J*SXR{2E!4rc1`!1qdx{#BeVP zsi)p;?R8&f@n?0!^2x@*-CD&d1;N1vW;e6BeMa3a+lXu3Uq8b0LLGN?!|8TB<*RH^ zb$+hkr%KEgxIiQ`CI3jLQBRfDRws+6KmOcJ-{cZyec3Jzh~T#}V85g3+eveP20!rq zcrW=`uR7p`D2~K=lLs>b#6$m|T!FEnQR3&b)pau`VI8nO1uH=yXofjcva>5OFjkvE z4{0|{(CI2p-*<0~j8Z(OI*pqMRxluf&+G3YlQ zzsN%~xAoUEy>U&ge}J(4y4o{+ugiV`^HPmLhrC;gO^LS#orDZ^u|g#)0w-4HO?lab z!V1)*KD-MikQ?VDcn5n2U%jrqY`q+$>g6ycPjA#i5B?(p1>1DPLf2)35^-Zhr2dw^ zXN!fU{GW1!ABClHHTk2;r6y0B3+DaZi=LnJKm>1qFq~ws z^gfAfMR?G>eRr&-t9=`C9%r^8i9Y>JT<6AuV&;wMKIW!#uTtijjBvWu(w)0mW=o6Luq>S z8uIoK)&oi3&`?JIK(wcR|Ek31l*n-=E~_J}PHKcK#ii|QWYo@;o0nCGhxPlt)2?ci)=8 zZD_`{56epS`HsxkWT~p8H5%0mxefn+*2y1JAp3_Bt-2cpSSZ6?oS+vykz32zuB&zC z(?}6;$g{7?CO$-FEM$}A4rxuzo5lOhD|b!_N1Qtf8fYtzvz}iGcC5R%f?c#Yx@JIE zHj`bah{_Ou`uZQktqvZ8d#v%#T%a!-W={^XJ|^ZpN1)1XjcbQBu;&}YPXSLi1dL8g zxkJs7BNntTpZP;-mc%o|h~$|*eTj!QfETgatBG^W5!FEaEEH%yFO>IP$9euy&WtSY z()nya7rC+Twi*UZ{oY)kM;eBnekWxi(fDb)ilXN(1sO+sA^#UU6-dmpe>t4Y0q~w+O>DK5ERAzX;pH!jXZdEdrQUuLy*Tn(p1Z20>&1gxvV~oi z1RV0aM1xKFyyuz-ea&S~R`lP;brc zVI@uK|0gmlB^`w8GEuP0_z7QVI)ZnLD5|*?bw5JFe|hM8!lz11W=Q>JTqZOrsIgIW z`L*AzeEuGxAphLn8ha+KgD$Gny>>MozLh(_$N`99&1W>+fl@y-7A<4X;*uLqJ$?o~ znC=u!xjLRIY^bSUnWDf>ImZ%=+9#%5k`DFo*^jTV?qVQ{*hQN};2K68@v1vI5_!x$ z(O^>q<{C>o!^nk^^6QqQ=L+&>tdkb`Di31zc8{*OjYB!sd*xIpQ*`zCi^Gi zL``0!;Dct1fAAEUwLP;r1Q0R;iXp@&nK|J)MkDdpNOmkE9_`HpYYtViEWg%_6h+GF3l-vskZQXFVx9^(a(J1j5-~* z&Q6wD@1{Seh!(uR>8Af{oX2wkX$jzt2Kb%uZS_`ZI_Z8@z^b!qQow)!BYPx0;lEY2 z;!It(r<>8vG`x`v5@d|r@1sCB1*eT`u*B(|5?+7+DgHELE&WyDe~mTc1Oo2XSn^Ez zT{P;PN=_l+!;n%|z(8#->DnbEtM&FLkY)_oTo}Vx6-UJN!!tc5Dm^76wy){c>J@!o zxg6;s+86uG&XV9@Le6L7Mrz@7mjo#D-0=macgx&Yv-%swkQQD7A~#)}Yy3wUw~(+a zM`_c@VXxAYJ}L@&rBKyu^lE7U6`@8@b}kswz@ng+2^qO8i|8pbs00IHb`d{{s`kgL zrPb^GK~v;`>xv5~Nkrn^YjGEB%KfkI)+DEpauy~Quf!^m;*Y2x|3xJKH(kE}I`@Jeq5cm{51yEd8IOV zg^UyEI*psg5J$a>8&7vmVpImC6=`m~esHx?MfzAth6FGs@-s zDq*j1#A~yDLB7C!!`@{!F-{Z3IQW(?!7}@{Voe|R9gG0943aBaS5*uCOivPf^M7qr z^;1{`-Dy3Z?4n$}-Kr}uc#8fFvBFwhebH?uj2r*8UxVP*zhX&8g? zuU-k|hXjn`w}ANmI!F<-e} z(|OA}O}3NM-PJzi>uM16E-KUiz)SiDiF~jkPKN#Frk7#iGzIZKniKYk9^g@EKB>H&&g-kq|*`*%&C0Vz^!XV9d(w5TKn@f*`6X_+)>!0 zdwWH9n_S6FsTJZxTBO6DgO7>HX4UiF>brqwiSrAX;DlP|L}iLO9c4Vpl&dPCQwa7` z;RfOqp&{1I8oJV!D%%%;|D!RdSNjbIP98?Q+2bIWg~2b`Ks92WaueY1=+gcUc?Z|P27(^S&v4W^*(r$yD$CL#X2mX zkcS#*kjr>arki`>zlgd&Cc7!t`}w84y+Bvgg&bBdlRg9Hd)d^OetRuOjA$@mk7?3r zab#3QHucTueYTf6Z8w}B(Z_3QSbPAXr%s-#@JQA<*zm5~2xvomI zbsFXz92qgPeXf;fn;#{S*)|hGa12mdg*ub}U*JW33iEC4e*Pa@zBTR({q)SO6J%0< z7#0ugKjgd^EdL<%^ztk;_VygoVZKIK%>HmKTKUlmr_>_A>E)MB{Lp`uX3uv+DaY7z zh`L;xb*aap!bC#@5pvCdrbEFx1hl_=8-D&8G=hd)&2FKQ`Pj8P|AdO(aX`4PmVy^H zO@rsTny+13r~cwSO6VyFjt3zKjL)(A#X|Z5QEr^tJ;%CU0TK^-#CfONr|sxkfRRb% z5AP`XZ@D5u-@>JeN%{C60c`2R>N(juK5j`TA%$gB5;duCuz}EIeg(FbxSHO z8}-mz8ug9z`DHpL@q-w!>WE^Apt$u_h93{{!>PE9#%mVtM~ds zSU4E{kdUnx6w#WHt)sgq64n4xS<+B4=5pvACu#JMtsf&UjAUUbjRSpEt#5&P!w1CH zoP4*L-$}|jq9O!ag~{XC1JX5>(H!NKDbZ5VOPPR=M2Nfl<*oJgc`8Ajot6)FZDc!=kt&`DwG7c;$^0yGK@v(0%qDzidk*)W5Kq8n0HK7*V+~Uj}=D~9GvxiqcRYzZw zgTv0I+aREHz$M@Jyaa_5Arw_btRA)Iu1kAa!$FN+Oe$CjOp=OJq9#(~Y`q-*zNm!H zy#FM#^O?Q8P^kdn_#b4scd z)cHN%aBuf{{#=RotSpJGZY7|Tfjv`^AP0_PL#3YvpH*45r2B4Ub64pkcZad~v6##d z&ASKR+}TWyz)+70cI&{i_|L61LgY^r#LlMKGCQ}c6m6>75^N|rq^zvN&v+|vw~;qS z4Lirn0@pTAo(12c5@EqP+!|s`v{TltAoo@dPkX&(zc&kHMKB&c0=L=^nb5dt^nXY+ zu&_+#2-zM?QX0o%fQ>ID&cH7Tu|i}EJ70F&Np5oP<765c3{M@tk?$`7O3#%_l&r;b z2%-RPt|EML^dhoHy)O;)qVoapxn0m)UE@a-sZE zyJto&0Q#6_PeMLf$*&9qEe36)QI5@#4)=)x_G!F$9bQmK+vr0Rh3Fdo%xph^RdNn` zw&oRcl3gdke64Zg9+?gH$gCGGay;KO*6B)ifcpjOpv=0=@ca}Fs9oHW*Y zG)u)HW|Ff7ruYmEH`12I6)*{OzOMXRZddUm4`5DCet({Ov2vwu`;96t1zzuoaWejd zSc&E2tZSy2ZxP`6b1V|@C4#0Sf3*(M2W7LueDRA#g6wM@2}~WW`p;m7S5l82^adO7 z+Rl(|imLv19dY|QtxOo?{)c~ya=(*<&!!vEJ)#>Qho^gS178cW5PO6x(2=zBWUynY zNzwUow<`2VF}!v^b4rqV+dzg_e$kP_DO-f}@Ja76A+Q?S1XtA<=umtcI8ENn8A)cH z&5=s^P7sh0EeuC`mZ_WjSDRH{x~}0RymznHTNIzqHqlwdo3kqg#=aH=?9z}IAuQfr zHuHTNpELPT?5TF61^Q1|3e}%m+RqLXcH$|Mwmm#_L#LcCV@3v31rUjJX&T4jx{D>e zf8k{GryxXS5LShrw(NcY$p@V5Je%zFnFgLr#ND0fFq>mevzUiGhJ~jne7bS9F5vxs zVJG$JnYNdHY9L8zyiR0wD&Ib}`$}-GT!G6gn8V>M$vq0u#v&jlpdtkJlAPJPxX0|8 z1Zv9y%(~FJXZ|(>s499-1SUU+2;?S=k71$<>cX=t1!bTB)8o6asBt&6yk2KSpO|o3 zz{`oYHGk}V$W%QO=`T8BBzjWK^LTwt7INnt<*&SDCCs-z+z#VVv&dfAg<_5d;iCD8 z2?_*j=Qf@-$;LPsdGZ3Pg*3%`B`tkv0sgQy=z>tuT$hR%@IJ)Df!XvNe496t_+&oT zAFaQF^elV8kV-&e1yFOmyE8l3!GSFRpKlSi(|H33m6K2ZopW&6pLNpNR}?)pd#HIQ zQ3*rFo`DVv-8^*t0x^SMZDbknl`w=#{HRSNADAiF2+7NnZm}nyYr(E5yc zfou;_KUg4)f2NmtBR7pE3^(D3JM~?-a!P0xOJs-}5|TrvOMdu-}9$rnVqJvT6cdK4~Evzhch#*o{s^Aw6EF$bZPgnX^e?598-;{I&m6q`pGk7NtW{u`;5EB<2hp>x+ z=~#jYSS^!jI^t*u-n>_pmR!=kfMh;jnLVHy=D%nmG28O7zp2*F+TH;ICdhzld{s1f zK0}PsabM@;2ujZ0`k@Tc+_+(zyeF-I)+w?iuYbf*22%D*W~UC0TnTF(D)=t#SrCz0 z@T@Cj7B$P7*>f~AoJ*7Gx}iaoy$HHm&=welhc#BJ>vw;s2t*%l+SOA!yeZT=pdGAS3|g;qDBilmGMIL%(mmQaVYFo!V3chs2diH*gpU6T4>GrT;JBF)Mq~|f2_R5VmuL%@sX*ieguqy+Cz;g(TkP zV_l%l_k5pdAXjT=2xGp?uWZUX84jk-nnIkyY_%gXuXlC;bXpo*G$Aub?8 zp2so|=koP&BB{&66?wY}WrhM<>O=J*pDkT4ax4f%dm6?K8D<7K=Q9=HFWp)F!24$W zXPp!dLm0K4x!JIEoy=4MD9XzXdQvl*>F`y7y!}3@LxP8sINqvKm6(W=B9XG=^;zz; zI3yqPh(t7jjBg3~{B#ML26pd_6MYYWMo<+b*G4n^>d6j{hi)%m1 z0ts3wYew*V9E|01Ypt9zH>)J131Ix^aDYd6)8a%>`ktOyEI|}IbjY-89&5@`Ditx& zjJmZbHxO0HP`uUu*Bp&qR^P<+-*B+=ohK2j-7uyTYtANfnnQVzu>XdWgBFh3u^FxQ zP7UeA*NcK(8t?6Ya~8iOn!O1&En+TCt7ond$&VugA>Eic6} z_wLS)r&E$}(=sUzobf0reG<+kpvxtJjNv1GbfR|y({ujkjocnWkNpCb$M@`t)0NHh z1B@b6fXaLPe;8v>qU*gHBx_M|Xe*>tI{bhsCLkDC7Fhw|I14Grz+ma@6*-uL(5)rWs<^4^gWc40`gtA&=DgP>m*!Lc zCh8|Ge(ab|sM=^Kbq4p#g4EMGjhzfgu`QEHM^Abb7{bmX^A4mb4n{z2bGjak0TEoH ze^6lAzF;up$TkWs_j-gD%T!)zw>B$=Y*V4Z3Bm&{*}1-9kqCFdu42Vcj)gxb>2GM` zdEc*kaZScPIeSH!U0PptnMsYcU&eV!5ib}W2638d=L&$gO?86Mq_IywdtG@h~DGN>oY?EClcq*HQeAQ(ecJTEXak});CERL!i-j$0q%hiY$_vNYqbo6U_MAK^Xt;j;AVeF~~Z6ovkAY$R19p8T^=Ee^u`qMEJvu*nsr z?O=wz!v&Bo$Fq$)#D}%LF*sA@8LITr%tPX)ll_j4nsOSf*Bb3!p2YKAkZeH4WF59a z*LwFBf6;fZ`RqrN1fu3|5co~c+RzuisE&FCF56)^kr}s)qi{;-OM^fPUCXMD4qt70 z$xvSd>qxm-_ZC@XG{=w8p}TRynlBAlIkhxj4qwrD$@(MwM{AbMNiz~}QR$HEJ%aKZ zx|06I)b4RK>LkR}{89!|Y#)!QQ_kdzBt$c+3rT-C=7>Vho$UKkIi?JN)9B7&V{UO# zq;^nn9FPQ(BSeB*fL^ssyn;ZM$J)WWyCc?|L1NhA<-PISe9j6k)|hrJja&6;I>MP< z0~WWR7%y~Mo{pmusmY(Er4btI{)MXR@j3Rs8$ z_DF6Sdw*&W5v}dCzphk~q~O9F^cP?b5M zxgJxmw)O0l+z6VWa0Fhicit6Fuo|i=B%m^6`0$XM%WR9Ni$7RQ$P2dOT(|nhoBd>3 zJK`|kBAzhPC$^l47GF#|^^8Eg4f0VnrzWE&{;4C=Kzh-I-6FG!)LC>NIdlENK<9D{ zh0}f3$fQ?|ZSBK$==vKEq?O2AdO9^8E%1&>fu>Z~c4c@u#;d1DfXYiX^u~jQ; z)}BliQOd#iTT3xgyMzQ>1;s_T)_?xwMyMSa|2Joho*;hbs6Ci55jU&{b|2NcJ>ujq zH9uC+71Fn?1T{{_E@-pNZx^O4wo916wdS5-W-`+A4M<_fHOHK)?i@Ct0(embMO~Mt zkpe*Lw+cYTg>AEkSAp(dpOOQym9xO*yP>z===LbCk2|7gy7=83>Qc59TMcRb^ukLG zKM4KbFtViys<}T8sAm@V+)iAs-#@h}ocgIY8_uKtaIAGpi9-zvG_ZVpn&p#*(fp^C zC{<}Ky$3qr6NNXmNu;au$PO|;eEz?9ZJ7|P51ql3_=(kT8%fAQ4 zgtW5e!P5l@f)C|p{z$ivNo9ny90mKit;Vl!tVvhn0F$>;m?oLpIZmr`mya4uPqRMb?tjPnBK5KoLbq1tQQXHXBJbey=MBe*gI_POr zFZ{V+LI~q%zYd__cDa5Vie6}###v+A`Wfblkt!5%R1&xh972ll79OCb7Z_TswCPFl z(T>MbR1fD%Xu%wchN^mI=<5XmOBz~!8UEGOFf*5$Z=3W`CqcLIm4MX-N|!iSeDy1_ zAnt`U5Ml^vrKiKsM+W90fdbLNv_Eo-M-DOQ|5oxwT{DA@yjijUl8DC1?N&h!(Ti6! zw;)3(HhA_!fpAjKf%S%c4=E2++FvE|@7}Rlqf97V1 z0sfr!5CKURZ}$c=rjHjel%Ta6H;~5_c@h%F=R8+eg9`Uc3*3#W!w7Haz@N-Yin7?o zo;#$)8(-}{{AA7mE{O(Y1ZxNO}t#yJdnOzm$m5N3%XZ}Imy?dML2D0n&-FA%q{bo1nq zjrgqq3#0-D@=gwwa11;f;UI-u-$^aX>zhxuHR7aD1ohLplM~` zsO4lOh9JSFp?9GK!<3a?PW5#AkMOcD$>zW0svWU5E$o_UtmVG4x!D>{#jSja{Y(fV zU-TKHyPvUT&^W0NP?7Q90PlA0*f;go=EhrMJ}#y$K&^KltA8%|)hA56BGhdLT28(B z3#NZL3hO15EDna@nEWG|0OKExj@ea4-cHwtl@_HBj6%Y*PPjt+C(%LTUH5vA(woaBYYFE+)q z`{0Owz^0oED{)~Yz3X;10xdIOq%Ant%M5f#S@ESY@0+eymVvFS*4Q~rW#+;$Xd;GK zP2W)7TPB&;pz6Vcy7zrLn|hA6MMlGw92jDrHZz(U?nNR1HbO2;BC(F*W-USh36Bw6 z6nm5izV0ZyI*jntHrQ&lumVom0;^?R>GRbpWAo|#a_yt*h7Ib^(G;;r^I;?}W|17$ zO*!K$hQT$i2qM)aT(4gt(k0Yt7A8+3@1ezP8!TsB;cu2fmz#5cs0!=hvVqc1+6fcG z^c|cUr9z_wD+3?}@*{`-n=QdnB7Pg;#zXEp`v8E+%F_Hd>a96dJwmGKP zvA|}Rt%@PW2g45oxZF1luz2`Vp`w3*_fh_&@;ln2c^tOSuN8X1m+$Jmswi#ND+$&g zN+U>%P87Q!<_w_e>aC7&QC}i+O)7b{<2a(U&{~vQKPdrns=&NT`Wv zTgYUs8w?KGnDt-zfOgFzE_4Q6t|g4nVStn9vxML>%C4c!fj*g@74_V$Glec7)t2BD z{0)8!B;3~_$1;acPKm}UV@a`5=G$er_5@DraO;dzdCKu^AXi zsKulGrX$L%s@N654+;vi?a9Je!A{6w^^aruzcRd*Gh$$q%KZYk1g;m=s}+Y7X&*vU z#Jgw^=qRpmT(i&*`PpC1%J1;iq(dC`_X48qoga06l@>PbvM6QuMetNgHmH!@g|WV) zaTNpFUV7cgPq9b4RzW(nh17>M-IYKZuQ1~khnz1!69Ur6ecFp1))sCY>})VyQi;m2 zOM(Glm59nQqbwugp$d))`E4l(g2TbG_iTHSOs%mnw4{?0Nuo6Yo=s?mer;Y6SZ+2K~%Jz~u>rz%nsm!zOp#NxafpyerDfKQ$&3PtnJ24xF5p?kvn-<{{SW zth3lUagR@@m7G@)+~`)hpad~Q4(d{4+(4gWmJH&cby2Z<{3Wzal(XjKG3M*4rH3v* zDftN(Gr_80dd*%-k&k)(Tx;1MN0sMX(AX*SS*|C5))2u|b_ys#Ppnrzi#vG}Vx}=6 z$1Eue;&7~vknPQ&3P*q+?g#}*hyVrIL6t7(i<8|Vvk1oLON2W=jB}N{?IpuoF8mI3 z616s5%wJsgZ3i4aQdQ;5GbuIKc}}yu7%VIT3#&5f{|B!#@j4m!bKDZjS}t?Vj&ipx zjec*0eZ#i8FzOM=+z1QDjxIt6L0dNfM}$*3r(l$h2}=xV;jQKIN?o@uBgQBwTg6C@ z+pY?cxk1Z$>Iq*o&7=sDpxlS7^$jH()qCBQo*hhYyJhE8Ev02bW90 z8>0VAdMp>qN%}GviQ&4a$yGYh!4IC5h5^}MnivJt^WuyiYa<7F13q3A{@bw}kW5DQ z#xd7>EoYnu3i-&d^C4eGiWcCqgP(!D%nwHJma&iWD*qjyT$yk@wTy1@?{>ycQ~xu% z@iTer%Eq!(q+y`m=bg0nWHmRrB2s|(8GoPWY2uK0DgN}Pk60NTaOfeI=o&6~7 ziL(KY^dg^0jE&KH)?ppNa8a-^bA@7K2WNMWh;qQ(AnFM(Dg$}t%NUHVw@;ZEIlDI<=;k^StGzxvoqf1;SPlE@* zct5?y$4-SIgJwFX&p~2~O$LF{ZxDA)_jDj}N0cP^PR#vQZ7q0@d3i{JGtx*OFwzf~ zE}H^B+}#W|)$dmMZmqGJeOlF%O;i3^fmY!_;+~CSy7r)9mV4)>JXsQgBSc|qZ@!)B zjhihHE2mEAAiVd)9Q6C!zd6-G9ER5x}N6oEgCfI1S6vRNMUbJ=b^ z2?HZk8SSo{rqILhk?01)*fzKEDyt4xl(72cQJRn$?*Ek(Dl$_VkM3 zl+>f+g?8>njnzhKORr!a34aj1_jG6NpXYcj`){If&V?KGIy~2@!?_T&Kz)jK;K>8) zstpLg5vb+i(XO?NTI7`?Z8cfW*Hrg;Lrl%On2P6Q)Wuz_oE`JOs}QXba`Ev+*RZA~ z(Pe9Fly!@)sWxtJ`CNyclEI!gci-bzJ%hg1y2CfxOJJELT{N7os!UF$`*uFCCFtJXt1 zoA_migP0m~31LA6I+dOT0$t^XN#z|X=T%hHI%jx?8C2B0hB1)dX_^T^7NCR9;-^Qq z9Jh4nCTA#&1x1a%g7d#QnRo+95`{OAIrlOTUY!k9Ij@YLgL-nwCClBRZD<~I@V=UZ zY3@>BS9t~j{Q*g+HsGM_CIF{1bks0@CrSou6||V@cAeE~Dfr^3PFqj&zH(GPh`9OI z$f<`1eihEtN)6V+)g!#3Q7Ly*e%xzrlAMAmpBQvpCbv}{Gp|DA3nLm!Z_$+fP`_=* zViHGu^YBY>&L0sk!xp=WWUe{rM4&w!EDSor0dQ@IwwupBOZrMZ`*4#I~5sV8$d=P`=0K6D4&C;scf#ll4Ol?$_ z-}-qUNd%hs`j3Le%{V>kAzd%L}&XQQ*itk_tbOPqAssg~R7_xD@|933_#}5lh)yD#pPs<$WuE z>LwC?jN5ip((-L?b$XbcAQc$&n;+BXuzf8Xfk(|PBfTlnSd!%g>Eg!ig-c}NOXf_) zxJ{9WY_?CU+@~zMVR0-)2dc?5wZj60vm{%og7`ZbieND&$4O4az3K5$gE469&iQW+ zX^&=wHjD-OQ{U)85RRwIvp%FGd?0;Ki~EoZaG)JOHy?V}$1tdT{Y6N*PrhM+jSUs3 z5SME+PUf5Guk`G&a*!CWq5n+9_mb3$HaWs*s|7Uz#!S9nDx6x*_^tvM{W9(DKFA&i zja+w{wc_1FR@=4qUpl~i69@a0c;5oMNE{sH=ISJEJlMHG$JmOdTtakbuYw^(wTN|j z@+)=LkF>V!+Z}~h+c(rqo{cEzNb@CrX;*zo#G6DFk*!p@L|N%M7rg|qz`+WO3hms+ zmSE#fV1gO&tKM=}4}L4s7@6}^p4@}L3V8nE8BLIGuIy&o1J|Hw}0 zyexu#*2r>=`QQ{NH=p8KMI=>_?PkcqE5suux}})Xft%&KBzDBx(VN(<6u(|Qy6~^3 z9xkhJhDCnYaNilyum$&2bm! zl>+_zwY;Y7gFn6j7YmFLWCjLdt6u!WW%Ce7@Rv6@0)%RemK9kZT@g!lDdYZY!?7E55~OKhPKR> zTbiPmz%dbZ;969_mDzx}Y8dRi7Jf~i#@f)^!egQh=6U9aAORbmD;h4H`$oCf_l_W4 z-lX1!+LL9wRXgU0zzms@*uAzwRTAHPGcA1+%UDdMmMIC-vQIlMYqFo-*uyZCF5w?8 z31)2AxP?i?Hk&JrpAw*)#n^Ll6ez0mjzzQGUGrO>nVY9@HWoIbh$X{K^^4att(^#$ zqF+Z_5o%s|2T#)8g+<7bS($@vp3>+2n;xbj(;`J%ka&Ta=|fPd50##GK>-}e5j;GK zE+32kl6H&p&Kv+p|H5)YHoapo*>XPP1)kb7Xzu9Bm)T1-^vE;+;NA>P-L)k{5fyMA zTyWcI{J$+`+FrBYCwCk%7%kGPazW0s0 zM5D_$?;C-W$7P>7U2HS>sJh)c->o(AfXCG8Vu$ANrcn!aKpA-95{E`DN-=m2BL-%q zf~nHW0V4uklL$QuR>~v?l`k?4(v!^#T1~F|wA@C^;wPM|kIeM_F1%w;;L4nF5$slX zg;X7gSVw0355OUob($00W&nvnW28QY$EQMq%}-144fJ$U*YY&w!~?xyEhZH9&*Ylo z*pd9nIRg#!x(27VGPUeS*`L1kbQdT5gE%&MYD3@6aB?jC16&AWy2c#$Y}iJM{v(Ph||)| z{B!_VW^Xyug25M|Y7 zWURI4ibX>6$c6J~1h&^t)a{3Dq@#yMP!-lwR<+*1pdeIi63rl#QN58gX}Kl6;s`J~ zO(S}f5!j1l?q{q^DBLI!YUiC(Fyi`7atC!WiecB5SpVSbOy1A>C+}lR)?QI-$S12h zgVS9H1z7j+>JiR@L4f_Q*u$F}K!pQFR&Fenc&~qXZ-C)S59u)lq(NQBo%;YF7o;1e zCEZoI1gijK!F0UJI`D$V0{W*|`4zf}@9&te4d{mqP~mcY&g?4JM%q*HfZVz&9dX?Z zbIRaX6v`nwLZB`8n?Zxp`0LRrxjSexXm*O(rY$lpJI}hUV{5rxi`V_^*JN=*i!QXQ zIMfDzCl-n@b1=eum`+b*^WZvtlcv|fuLI(%B^&>SnNd$43W#&bY8|4?KHtVXDt|k- zwK-E#P?%0=JE+6m{ZcJ3!I1+t|KVgcoa&v_0mDUYcg1l9yX=SWQEvah4o|&UAH#zh zBQNF#ppLPcj>tMiwi}f4sJbMs7>IqL_TNJrR;Qb={M4RmS{hVemFu18lb10l{+&fz zey#)ZKNqs5u4#4(|8mnSE<(kC6H%vwY>tRq@AhG(hXyC|tODS;dk98`NcC9Q zDoRk&?tVzqDAQVA!1HZ0zKT~{UjXlLww4y;LKkEnC$@}dr3qOJz^(bZwcXC=I(+M1 z$i#3?)r^H9VVOS1YW_PxkHp;)Py`4*``+tAb2$!~Rz>~c#7_)5={FwbG zx*_-ft4T{IKWYrbLEdWLplWC%52QRvV~OOoQM}D>fB_+8SHP*tnkZ{7R(N9}VJh0i zKIqW_G2-Xv_NjxSCoCA&EQyzEXT*SV)p}WI^Chh7BQ;xCl7GCR_KT#>75al?#H-G2 z@KW@I;M~@-7`&ahLmz(4oFu&JMq^=0?lZy<;dGm&CnSv&ERz{kASB<3IwbdXL20k* zz(uMJH5cGsVxX+=J_R|p*i@PuMLWGe9$huav#gKFWSli>RyZD$1q_GuziG|Om4=4L zHw7J4;#oirIb_5EfPmgZ2k@W7D^Z!rJcrJaow9d z8AHxbIZ>HyCTorJB=dblxRjjMVk*>CpTTT@roSvOr(V!KL(mIfwT>ZMg$LNgBYGWA6WVU*dM!sz0zpypWuS15sbB zRR;0vLR{&c6FARZ%@4qw#q}}yLc@!SiMgDuWnbC z>)zfK*KAw4#KRXh*$PkXmy@y%6!&tNev_e#i~{6o6ba(ijbqJ7%c%6i9~k=gqqK>S zCStyx0UzzjrgVD!@)}mF%0NMbt8AqYVtDWC)Cchq4R>_cC-2TSS`Z9ZwyC|g*mt|4_RS(;O?xr3fqmo z+qhE8Laf2KVuyg7P7Qo%Il}l^6jCksOmXgG*ric+kooCk;`mx%L$Kv*e=yzgdY6PW zd7KGjQf7xZaQvK71u%cLVh}WtYeTo>d@dgGK_G}SP;?$0lLr$*``T~5ZP!#guFj*o zG+@%A=5&o9XaP4Gjyzg>_vWwXIzir)#>N%ssjr?Ixxh`ap)zC%OE{Vvm5?*kt1EyY zAZ@7zXzRW|YGZ9(2i7Iv!o+rTTVpC_H6sF1Qv@&qWC}+7X{0r1JbM2!;P+oS>fh>P z?W4q5!JV8*OCYtGS`_-Ntt6u}P_@8PLF)ApG?NR;wUPZJSnIFaLJ~A(dqPrnY17>JhJrxp2iwDW-BizTQ+p2FX_8#V_tfblfT+#8!~H= zs?t_&6;$!vnc`EV?1*_7#Qj@pdel%v4J8urHa6q3qx@1TPL1GVhub(2LBAz-ggI_J z+#)ACk)u`OH(?)O$s$tt$yO5zQ$((Df-BBq>@$&s zQZ&Mx1#O`K%+|CJ$fSb4txKVve;&9-D2w5pqPx%js|DIMl3H>5(S0YYeYi|c`I(BA zIvj{+41(XWTway;$%W<*LuXqeWqtU{8kcrT?~E>qe%ZT6j>5H9i*FyFrDEwQrq9}z zkv}eKAn|ZdZqQ-QgVj20j)?3K4YmIohv%vzR+h_J`Ay~KA5qcf7rd`#&1+*YcDM2R zsllE+suNd9;l48Bha*I_7DBHxzejEMbxqW%Oc1T?p;@7+;|}dk)wYDJHkEKCmy?y8Hi)a0+XZ)+vS*R|-8iU_WM_Q!NsE6T@CH$HlKc#OHz-o4*&c8n=AnH?w9h@j-lsk5$%An7rGkGqG`LN)!G~Vj*Td9;U&JfoEimK_ zPJih~+TO{}bFT}2Z&Cth3!M@Ysb@Ln)+4w*Em6I=L)2a1t%@Ta?`j6jxpMZ#OcFKF ztvGd0SuSE}VSafM9;Db6a(fF2@)?m0-D<-}N2ST4=u=SE#&qzvP0&~fejS}vpE^>m zika#CNJv53O>f}EpbD4X<-Q)q;WEn&o53;_hrEC7H7s+X($^%aF z!@>3SF0v`e;APCs6zG|uTW(;bBDRW+X!1jpP=7CO9au}`ZNRzp`Da4QC#D6X<(^i^ zTPwDy>p}C_l$7BbOuFA=zu%2~u7Qj$>B#eryd!W(6iR}SjR=U`?F-jA>L5IpD{Q>dqDlh|dbcujmX7?w8ny(k{aE8_h zFwLG=C8Za4n3|z9n7ONDls;LVN)Y6wtp6(!dVq4LEJ2}$m){~jhIGi2ZIK4jM&jo< zxk?H#WjVQ0L+&=ycjiOUdtsfj#n?OuLD*KcwUpW6vNy4faD5J*eIp;q$yWe-Iiz$~*d!;;{yq-j6J@)CXRgbD@r4(Jt^5oKzEKON?5yh4Q>#T#y(}}>aL#qu=)WIhq9)Qov8t+6kKar?cllIw;Pf7GzGevmz2V0dM&b%F#sAAE^Z@^-2U( z-}5NOK3l>Z6Xr$asj8y`VTFMQ`E#)~R{|%s&=q zOIrOxFycu2iVxZcxy=$dPI!<{U+dazNLYIOB)7@Hi6K0AyGd9M#b(ILE|J$ny&0BzX*ZTEv9MohdV zT^W{i64XI$mGfN53tb5kesYYT>V%}%`9<%kfovajFj{M=B#x(8rx2nVFt{cAh`>v! z&K9$=kh3aDx!$8<%4co<;{Zc?=rl1>1Q1~t3%Sej6UVoXp{`C8|4x_;K2dQx zxEw!`b*$^SM5?OGSI;!Q(iQvg{?4HTnwtK!;ZFau29G`^nF78gw|`}aR+tL=W=9nf zU3PVZVDwr$T9{M@6j>t7z?wiX1!kRMrW62tfrd6Td(ydfE}cP4c(sV%3voc@2~m&` zdTLqwY1;{$JW6OY?O?aP4RqZ_RCDeY%^p4a=gJ^hKS{8oh601gXONM{r6S)wXxYUV zPLpIoGIe-6U@2#S?OO9X1Z?ro-uXkrF7b;edhOMH<3o1q8EF?Dr?%v#2o82wv=Tg6 z+v2#Wl@m^~%**HP0iE2F1 z9C|}Ne&HlxTBmUK%j?>FOej`Z_lVaP!WuqYX0AMRd=o%cxN9ElF=yA~E&Vv!qQCqeoU1-19&@XfB^BL#$-HStKl zo57R5#U8seJz0k>`PT96Sv<(+eB%b*ZuKRTSUsWB2!P)$OWTIMiZ8@Bj6-%G=79X0<^D9^9J1MyMJa zkm5&d$=51(q%Xxc1Qeit@!}t6g_WsB0I5s$)%$U1HbA)?e&K#pa0EMqS5ps|E&Ld% z6~+1`HV29JPE#pYWW%8sY0$;SeAUO6JqqMrYSzK;yEz(N`3?U`$BdFKCsn%b?u_$q zEgECt&9FD2BosSBx;_xlEt0GkAro1_rEM#zW*0rP~z8tkN5ONp*|+ITUkhpUdZ3Q7r~fvDoZL)1^B9a=xYG%fVSF6R_)LtV=?R z8p+_)JDyLgdvhKUsWOIgPd$6uavEG@3lIznn4W7uPEwv@**Nqu{Ru?DfCSCoc^R{l z^mXYV?{Eb~VMqtDYXKlI1>Ro0l`KZN{1&tJ=oAU}@~NkhYsV%jbhd(3JY)M8ks}e;zRFWc&Pbj)N@_R z4AJ8i3e99OAgykq4PYsoZ=9~>5%~n4FnZ-IjFOG`bLUf6@j7i~>gEvy{ z_$zi?txIauHr-6ppRrq1g@%DUAB=+aCU+eV$PuGjG}XR( z3Jdwu=8o4x#b@xdYMVyJI?r0ZO-OncQatqxH~zc_72eF_u%S1+qK2jcpJ>US8y%wM9U0t z4;o^7bkw>`#?RlP{mWTO(g@KiPCY?)i{`z^({PPgA3u;+ml;Sesi9Q9ZZZ96;!!Ar zF6Y8x5q!TsTPAi}2OpzxUqkSRPO));fP_gO$v75Q%5)vj=`5=q$bucnM z06?lQP_9TU-QsTU)+$%tK$~}vBTcEOb;RlOgu-4EwSg$#iIB@P5N=fHP!Gpdb+u>^ z$D6fuW6HfuQ|O`@H{H9y+7?Mtecr^(e!-j1uctnH*SW*j2Wo-V0&`oZz~^3}n}5_0 z2|+W&XDsH27V*8wc2B1^K|h-s-(K3pN36s?*(aqI&@_l*(k}uBns-(-MaN;E{5OLl zN<8Ar%5fECY#r)@1U<24-O^GAw>dy8M11=l1%Ru$x{yp3y(Pn`YR8% zI(?GaR$GyvPh#i+5(42E)P8{tex;39cfjgUc8T#)crU+&-P zvZ~q-_;A>#$)aNn`InCx5jz6ejyNim3L6JZ+U_S()E!fc92)&yT8GOqLM})7S;2u1 zlnzIfRfbCfTeFtu0p`Em50pv#%Xx4SH@08!piq^}sL#<-SlagxU67ey!Tv{*O7Ij+-3>XUSkL5QE&KXUrJnla#4o`RjJoKwBb~yG=NyeBdN=Tl;Zkv+q2Cv6PU(u0d+@&) z#?4ID)AuSC&PQYNJ2+O6^yaoUcI^-7?n+~2hyzhNJ7PKZr~gP~?lj;>N0-EW)DH<7 zaoHJd$V>)CE!`!EJ^(!@UYq1;G%6;ej3R45%2Dx1~zk%si?@CS(~uwvM$dSEgDoOI@cY>Ad>wm65tO_twkj3 zguxb)I-oEo!05lFxh%(Y_7<%!M5w=7=fh9WHFHJ9R_oWz3~c^918R&VXR;XNY6wan z--HO^~1qTwGqO&1{AE_BKNjO9|8#! zd|;eaGw7g9cyAQLD*&ewW$87z1b%#j^%fXUuE@ANVrXo~@@ok*0jjhMy~q}{4wM#>p>-)ZBVXw*Xk-mI8Fu*?j)8!F;A+x!}5ve@?oQLT6uO5gcf*+dp3m=-(;{5chk^4RdP#DuoeYy0>KW*dcYAu$PP$pfly0=B|kUp*g0 z$XFY6Gf6nYtz`o8b^gLxxkbsfBZ=cOxr*P~4V=aiX_AF_1U&HQiUJpncSCIhn;9qI z@x@tJcCcFE*?I5V8_gE!A^AO3Om5p4m-0@v zo&NXdYzGd#R_(QIUBb{upJQS4Wh-A}A$-*|XPc!npY`5oHWS`?qhpoPk~U-Nx)DTr zdF1e290Eze?}*VolPw4MWG}^~H;XD1U+fTcx2Lqb%3E z+49f)<78od)jSl3&8|a?Z9WR_wtWR_@9QrFyv?l?lSs*!p1^Z0&stXxVkuHRAh^at zs07A2+0pJodJhF+WaY4MW@JG87_lIvyLQ|+iJ(f~AvYp3Ek5VU(NFD+U%G#$yLhjF*Os~ji@&Zg-J#T!d-qKH~&)kM@(vXWH{MSV5T5X3d1Qy1SkAT53%CaSX~GG<-H`o zITlWF@COM8dFr*Ado#Qk9m%{M{U4_#RCGX7E6o1+D7GVt%q7wdL;y5#A=I@g|Dj5s@-vdzzp?id|Q=0{> zF?xVAg#%c>_Lj^2kc{1K#I)7C=+by#S3`pQr}S=;b4`30G(GTWpiRF>|Ic@~1W zliQLAeO%vY6hP^STjEB_mmoKIx`<3^cpuG|fO9(FNG;C!Bh7V*rVf3KbbX2> zW!zsKfZXCov6p2l5D;cypUmHKlcJ3slw0a`~ zk!o*PiccCg5PQSgM!Ve{JMdA#HE$flHkg9=Rj0GQRC_cV%jv$#`5nK$S)VOk!p#rU+;-rRW(SpXxElU8m z^lna32dQ>}bA3QB#$)A6H~EIV21_#ow=JSZFt$}QhI+b*1Q-GoZ&j+|beeIqq@N`p zC*aD+l14x7rsWwgsS^4n2;ngUFwdn?(Tx6NXEUhw#jeeX-Q&e=!}Rbq0Z&GZJCUKu-U!2#&102z=$0qNPz}7uCP+ zk!alP2LG#>YL9)v)5A1De*^F$qc5&7rdMe4!;-VdSSm|&k55JiyY?)xk?8ccIPQ^> zBT^dCyIrgsBxeSsq9PFhLqNR0F$XdMQ=0(~yjvJI9z2hdd*Gf8NT|^%h#8+p$Zov<{{x!Teaos!!IR#D^fOf1K0;h1uNh^P zfa>WAF1aK0?Eejj*Ip4^QHN11jJphvEwzRce0=~N-D~IK^zf(89PA}{Ca z7sPvbKogtp${~tri|o@A_9;e*K*NeB}Da_x-cjQyCp@F|@~_ zT2mqQ8M$u=-_yAC>q9DklooG@eNpM0Ze68Qkf_XJkgD~si7FW)EaGzRmJy`XvN7L> zzLMz!-oGW%P5-wd$E#S&jUCb{vqt#h58AiBUvj>KYYDQ7MU{%etnLQwLt^KoPape( zM#LcAzW*O?5d0>&9osE(1lh03BE1Dqmuuk1dRvY%^$VB(%?EpOuY3uWn^uUP;01Z# z=OCgA)=L>IS`b~&F858&wh31=m&Ft6gm$P8&f-TwxQ%jz{TGgWSCQW*PTIJb9wZFJ z8V%cYEZn&p6MS)lpy^Xk>2tKowUm1WGmeEk6HH%qHsp(N6?(|){YE)zBXml)iF)f@ z#@G7Li-hoJ9-c+;;X;%c-vp*QhAKAaSqZQ!HGNo~pDNeU16w!9);t|kyCi%7twU6T0 z927G<=LT1KvqKKr(K0r<3iZi=r@JBkpiEn`PvA(pSBbDQ6`3K{dQ%HNbI7GANU8=o z@lL5R%1x@PN}IO^5C_VKjn0!_k|{?8}~9!)Ln2gZh7F zl>gPV|I8hYu(1)aT>`d&Vn-wtu3tK&W(b7X47qyPxnckJ@CbY@&j{08I}-#n)2I0R zSpTd8DZNRa0zyw#TV0n{iG*88;vM~Frf6#ym(*N0Qp)0vKg#t|YbFOB#8C98Mv{|3 z3*24ZgqdQc{YNjnDyf%hs>>n@xTrzyF=g%XsovDUfy9>jyFfOD+W20bnCFV6gm~El za?CO^q&NNnjzRhXn2ox?92)iByzNO)^98Pg*~vXiqTx=-@B@ z!-!yk{HCA7c)`lTYJN33+S|qIaHjO;C1|`I?*#PmBb7 z+TJIM2LfUIHE<@T2_DeujJ@U&KLik* zl<5m$9CeSnghq_TJ5qw@q+F?Z6H=U(ZJC-q=O_UC7qZ|Y;+qZ2{-G95 z=!X9W%7_~+fd9!S9OKAr%SWDdwML{2_x+)8Q=mZo=J*)+&4$sPJN*$~i@kqddC;3M zR~rL!Z94WA4#yu`0)7B z1;s{BfU58}2N?d1p5~)E?^Re4UW@x}4`v6?N`&_Wyc|Sm)LN$-GN$j|;#43{^&BWa zmJfIhoj4@k7_0OApn-)V_{sc28lTL&rFLc--~zBLe&fwU*!mj#oCY^Drp}E-DrHKynz>KnOgygs0V(0lCc`%UfF?EibS^SQTetiTwZ%2FX zMpD^Q&vjD{zFoQcZIa4%^)%>nMChS_ruAfTx>#~Cd^ohyV6NyWl|A(DzPEz|*GI%q zq@LvMb~xgK%A6R=glh`lipZ6xTJx+#W2(}N*Wyk*f*&4;SyfUEP=|a~#Jgzj*KuVC zUy8plKvUzqTrs~1`4{hAy=IYV$xCdl4Da=|fjdyB`%%kZf8xnqE593Y4J|`sC;FmC z=P|inO+DyiFsnuFk@Jj|SK^p=V8FYM%ju?M*>e)}HX6B~I(6OX_N-?E2OeeqMGZD9 zpJ6cQ;z&=)J|_9+5NF8Gzl2|iS$s2r!*iirD7y-IZ!CArF%<&H1zDCI zDkqh*(PYg+Nn!Bf02Wm4Er9qHS}nW{9ZxgC1`M3gHLZx+i`10m(@!qYB4v@X$@o?I z41Yy`pYL!#8noSHuvs?K%9W%_{0l@xTBu|<@hN}w{x(h`t3c(7TxQ$zGNw-5_gs9yTeoQN!@43uvV!bSwXlE4YJc z6Mg03c1wdh1q6dXWYHDZOVFeuMUHAg>_&&!y~D*R;BLhnZI>sLJ5`bMVb zQS!;nORa)Bdu&UjY7|kg(gmkt@|AZjy|uJ~!ou>6~bK?g38> zP?gDzo|`q3{y)nW%$M!Uu~lIc1EG*p6CJUCq)3gOm6ND)krl_*#ey`271vdqVFCR5 zYy9&=*{)>5jxcGzf8VEUP)4FZ{gf?^N=$Cyg8D11aOMxnn+Kp?r8vY;XMcM&4zb>E z&XK?BC?1zcp;YmFkHcHcTA0oEH=nu@pY4}!IOkYd*(tR~)4*xXiH()+@r3tpdAw*Y z2;Cb%N}}&PCZ<#}!S^0JwWt;?{+=xMl`31SIa4>U9F zQZaVpm1+{cpgVuiF0#Jf*#H0puvmQjdKULb$F$*10^Lz*TFDz^CMYCi{>c=%?4`+b z?Q&o^tnWZGvFLj}!o#N}wRurhEX0D3ivljV#A=a_iZ~GTvAebcn67XW+gEQT=ykR0 zvKGv9JMB+`eh!K#&B?Xb|2A;$jwMj-I3a@dOtyAhz1XmB-+Z9FUDzVa>eXsR^i*Jrz>yezjF|4RWBO| ziBy${{)KNZ3j&HJE9rZUK1AXNpSTtQu~1{kRejl=@;&@TbuwZ%et|q!b;&RB-f&-R z!Gn~y0Q5!wd6tr3KoB|V{}X~s2R?(tkz+syDfO_#M5Xc62197uUe$H*y6)5vIxRk@ zj|^yECqF{)JZGm7t<*vPlU<|3ivSL}f{KuGmun3rnXs+bt38ni_Ts?5H@gj4jO7G&NrhCP~ zl(*L1AqxMJpMQ+8ob@3czN?u4qvQ`nlOA&h!R#%ZFI|HDmS*bsrH?!DO@Cn6tR(4x zZ68TG3-n#*r_-@_7ZER&*=}f^3RRvA@H!EsU`WUht~MV?ekvNcD4Xy1HFJ^D<}D+9 zc-J~yj%@~i{I0v5M%vCoF_+@aQRW#}cgm{MLUWtvdI9{>$9yn03(5FfR%~>*g%Z;{ z1DAlxVeRZX!V7AP2zpZf+&{u#F*6IfRObhmkf*ORf6=2IH~yS2FmgKfa1n$A3z#+v zA2}eESYr@YEVUhepp|BYU{lle`yijvQczGuE@CyH4oo0C0h$)^d|3$~8vd?PX zyup#n(H47j%sn6UHXugkyjPmx6o76a2vLX_Into8O0SB$96&j<@PA&ao#``_~#;PMJ^qoWtqo+sA zb3C$vAe_%0?Qw9JxfclevFwPmYN%l))|XUidjor?Xy@@+)=6))i^Y^jMGgZ^pR)!Z z9*@BjG+j@u6Vfr!+rD*cLrG|4MSEPE1GovFeHhv zdI3G0HFNyC{D&2)8tu9JiaLRy^SyLK&_=NXB@=N%#+u%?vfZDCQflR!?IGv6wMd<_ zYslUjOFjC1kJIO4PFNF|GE;QC2@*|zqA?3g%BC~+cETVS{2r|A&4AcdIWP-U_}mIU zk49s0C4JC8eUZ`a$t=*uVVjzs!k>1&S_;b5mOn5UK2Gb~lY$xM=P8MxImg(IRuV6;fRXv~uZj}v)xK=4z;)SkT!pa2rfo0c!knwznJ%T5 z32e}bG~}g38Zgbhl_h6lefyEhn)Oixlm9PQF%2q?64W>c@iJ2boOb`!{>iEe&>8N7 zpv>tyRL%IYmE1Rd@Bp1n@of$cfw2!91118s`Ip=4&K=rP*#+eAD{2}#z)M?r@n8dM zb!u2@_*bXA$GMePo~_6eQwm*d2(L;XcT5KEfYW|*A{`EOICp>H9jTXpAd8Bdh z$%ppZOmVrJqKd4haBNLJM?Zsn5t+<(Y@kp6cyW-3WSJT7c;CGa+7bSl03ahC9NmZ% z%|Yh>ot{jL=x?~|5m@B8`xxGA@SQtMo=8$2_uE1~cLO@dIk`rMza#(2EtRC?iB}=l%()sG^AvUK za+OWm9lt#qygzL;C*lZz>gjDI5mF2qYZ*HX(h!_2(e0zS$NFk`iX6t{!_i)HCQ~^} zPy*K%@#td@Wc4vO>1`(vQPO~>4r<+&kY}wlg&%NJ9!okvE=NkQXuuW)%1@a-eRmM9 zgVc=y_+@$fJQeVHJzbz!l=G*RZg_P~-wmSSl+aT}fJN_qT{zD38h#ltY=N5yNdtmC zx$se~z!;j)&BQt7XtU>PW%V53i&T(lNJFoM>8W>;G348~9;fXzK{Q6N0C|~!(%K8t zv03(+bP^t;h_;N=c|GIIV)C-L-PuG(VZ^_n3e4v7*VvOgJK4KnhQI)95lIrkIGIcc zQ(oDE_Q0GJGg>mmjK;e;5grvIcO)9ia)>ycn1P493K1x1z5VepP~1!psBb6b5?|L- z?a$SLT`PLDrk_n~UE6JZKF7O9-IpyQMA8i-O55=SvIH~93C!0zj9$!}xJ}9BtJ2Xx*d+DZgVOOD<&u|#ptnsUP38IDbzkuW;J?R=)mGne_di`Z}09-NTr0s&xqBSvJ9 zAc_N^lb++`C3puj<6u6_f))=37gbv&w>}%Ms&Gjj)g0>?)Kv#wd4Q=J*-6gjI6lk3 zvI&DhCybpO&cR&XjfVsDjtKY;tj89+Aw$dSF8qg<9X|1z1)KIT*2 zB%^>ICSrrk>J_TIE~s=uHqrq!x$|6ypk!EeSFTM;cGv`sc%V|bOW|oHAU4O!mXiFx$!y~cVIs=7B!@AzHCPpw$_ zIih?xv+pr;TZtD(yXIpEQj>sP)UqR%;s74Z05M~gU{4Lxxx-#O1zb5-#1RD>YA5Tm za)9LS!egsY5o2K)Yvz-isHRNQpOaoY*55eJHWTWin8}3GF$$Ek_4{t#6Nvf;*!kG| zyJe#L5&tB4@nAAEKI26Vd+~}p+2Jq-$E`X}9~ao&Gn8E?Pmd2rpQaCFUp&^e(|y!8 z)T=+;9|ofb&W#_f|5VIKhN6C|3gL-fo$hAR-41wAi_`{!TQIe4&|1#|<#+6@O*ycX zOlU=5FDyVYttzAMobem$w7nw6SGI#wx57 z@~XOYF(VvNV=zQK*>Tbx=LpVR!r-sA-c?f4F1>u;Aw$@C>Z6;gXZ@P~l-gSv8@SiQ zpahYBY$J&xL%w=6u!c$uv6YCRf~?0vX`|A+;pPCD>@K1tVB?LGtx8$bXhh4oYi0`j z=uec{qOakgGkA-1H^Gn;6P^^~{ZFkoYE#i2dP*pW-hRhSVKG+>Y82mSZ%iAi4JKiu z0-O|$(t%qmR5Vll;Mc3gk#IRZ*}d6gWk=snJ`?vRaNgaxef!mh3kM4WM1b2J4RzzA zxx520!EQLlg9B)PhM!c}LX60UBtw6_wJx3L@M}z7wt63)Zg=7GcKHj5CPyc`r3Uqr zKIv|HZ6~3apD+C_2Ffu+SU(){f6QNli*mM6B8^L20QBf?_W_V6vYn=wAKjn2)2XV4LvT#TxsOoeKlhSrRNrz{VE*H(^W47SlGae`7mK3g9{k7 zGGb~p)~4NCVwKf*Hc$X7vw?*-{{l@O*$-S3Q*b}&fb@#P$rAWY>w9xT0opDCreVCa zuo^i^f=MSZ?l;wIYI16Cb*;)3ZE3QGx8hK2VB$Rv#AA=7( z1hr%?-^^O){GQ=9=!E_+f2TMRmrnE{0KTsbNtCqe?sDV#cBfw?0hKR{K&Z2(G3uYmhu)}NReQ-U z#J)6~Ggw_ZRof8$^QUXe$a?ZFcXy>@^XuDjr%-JCJPq3yuB9b;K6~sxg+aw z)0g*u70e1q!XfO$C}C${9Pf^cH|v8jSmMG%*8o}?X_5DyA{vIWdLlW(jsPMCNO%Mb zMChytVTIw(v9-{F{nnDKG2hI#m^z!0`94uv2vnV2n^r%`*) zzSxVsrSg-O)8XIafibYHLa+P)gyw^;CF0^e`?UmZ<2$~$7PY=whR%uHAVAtuv-qB_ zM4iP=FX5WBu9SoR#$)vV-&O;x;Mq`ukW1yC!M7e-S0fX`Ck-;#P$m-Ek;aF-3?lgS z;F80D4+I#Emo|P7HSY*H!&&9+ZIs)FQT^=J2`Z%B$ER7x{4WUfY^BC?+*}B|-n*de z*RSF-;X8z?E62jTM)T5zDQVl-+`Fgn$Vxzz#JHLqZlGS2pjh7`Dn<*b{rzw(tFBYy zz1&o;<3R7e$E*j)zvA*%Orc_c#dpk#prO=EQdvP{Jx~`fi^$d9L_A1(yQ&#N1AWdd zSVQw5O0M}}HdyW_zs|Hx!qC6D!j8rla}LNN9NBE!JPE~RGB(b`uRdcu-sMIErgD}0 zq)nNc4+tPmGyum&GZ|WZ@;q17bmLBv7WJg^9JOF3c#2by_y(jjlIeO(Bs4s0*zj_H}T%sK9f4#*b8;w0pkROrdlT?2C^~ zh2-V(4+mOC%w=_<*Lw$u9rT%v&o+FSy?AN}E9BDPPD)v`^2VX5u>nnx|EYq=?`sSL zIvxa`+i`xw#~cPybW7vJ9B$rlj#W9kHg+FtlTLy|74U|3c(&uugxy=_HRMi#u%Q8s znw;KS0U<3WYwI*ij#&7K8kvyj>RIj_YgC7Kt?YlWIq;1x7!NO>bu!~b?t@gu=n#8> z0v1^;A*`R4)8x4vKWfRrVWaq=0=|-J8BU?MB}7?O(JHC*mYP*vN);p`6vWo~-B_;u zFE8*-2dn~F>XiLAEa;Z2YQLka!_BY9vh2EoQeJejIbot1c#}3!Pad6;#5>UVpPW z`+@CQY?vYMj`BXah5ZxAUWtBpgxhjbM@K=vIviyrW;Bb#7%Ep1gg{oU-Vcn19a%#655o+K4YWg1;x&RQ|>~ zPx^G=>;gp_fYPewW(x`J646L)GL5JVzb~imkaXgRf=}))!O{2w7za@%lpbO&N||op zYvD1(R3<${BNi!ghO%X=3)q{dVQz-Fk8ua{KZIXZ6BxExZlJrBTQaeq-nqv$XUao6 zoX)>c`^1ty2k-q;xLWbF6xJAY<>K6jR6K9XU~=|$Wu8n!I3>2a$eHhzwBTk=?O-+9jqey4>?@OHFLslDK-!`(i&W*8sP3TNIf}7`xCtLq{z-aC0Y9EUr zmF99PjL%{I73*a&`;f9}Q^QN{Mk0;FjAv@p3M5Z<@6I>(1}!h{MsF6{;T( z8KuNr4Uip?Q}F7>el~BEx6~19c#-Fk!ADwFW!37^;BhmtX6xawSUzPTPAKp4r@b6{ z109KUJ+2F(7`~YY>+j?}&o24Z{j!S50(K5Hu>{eQsPj;cIXA)vbbc@gvm_ zd#qEC>assRN;#y-4EG@@$oQZxEMN76g|BH4@1e2^!W=?(OJc|jW|=pR8!@o=-R(~L zgE^M!B%%7*rQ=XhM1hPwkoS;K9J7$|MCV-AZA@>MG_BbxS&3oEp7J6Ux9$6K;PVoE&P(Q0878 z068l7>xTj(Lw5_rHR6nTSw>*SLGB;>-~RdxZsDS7EYDIm`Aqi{u>W1cCcsEZo&9>o zEW{#G(|>lzYXp#(2x)k1A#+#GQ{uAMORXFQl6YmrHS`Pa>Og%M?x3s zKfmjZDl)S-&i6-e%YoePzF7iNy1u?7R_YWePrX!X?I@dd>Va%B2h7@s z9qF=a%T?Zek{ zq!A^iOv#+BxVz>Eb{uoqafPn^v>yc-=3Du~@#lQIk6o7~j76zMA|8*E{5q22f4CH; zhzo450H#_FN>!K}tkrm5PAAvAI9D|nmrzMC*4IZ4C>{xP*YIz4lcriDqs;%#my^TT z=Wyb}H#bQ-6Jls-;6#=*dqsrfZRa zLg>;RRRD{~CZ-Mi9gJI9>_yU>Sv~y^HM)s^O@M#(@)-U9XbpXvza8n|_Mk9SPjTpg z`cZ*10;_7v!3|K7{!IFb<^iN|@u;poGV7vSo%4(lbx;me@Dd8SZFR{^dWF?W`Gq?= z#0!<=mnWW``%(PW{C_vpD$<`Q2d|7r5c+Q~1c@;#IXmhS?emjGj5X^evQyzYs&)OrU zz0RhDREZ=51&qhzxBi@uHhzF)1MRgUl)4sUTAnjb^X;ye$4JCiq8&GsDVA?)29PiL z7uOyr43)0;*}aEO8>9GSQs3 zonASueC=Bws6xc>GtMac$Qa3pdvvfSpB=eo9Y2;EkKh3CM6FWp~+x z2DI|jWnh_v4NGonnmEa@m}M?;?+E{Jw$xV=iKE!Vb@{X3uFtm=hZ2nRWdv|b;0;G- zqo_Lr%wJPo7)p}lt0uV4oeK#6^AJG1D{l}P`A9yl>K-M+6cL>Iyw9Dr?(}KZ!A1U%TZOS+CSM!&iy0pwsOWRj|sf+(B6QJE3 zM!h)*h5TPhphTEw{*A;FF?o#j4sYqE65A&!hO2Hy={ zoM}cz^ra7oo6i+J(T9QV2*-N25*}2p{aG0IXld%-23d{&npA(}iJoH8u1H^jkCu9D zEq`PB!6PP@9G+SfH)VENA@x!ho(@HQMAUKVUTDt3+AJgXvxU&$^zhxXRC*60VRl@% zBwmXbP?B-KE;V-@!)pOtBS2K6D|kP+Btkc3!Hxcs_vsM81AT-f9Z(m{79R+Gj=CDuqhQWR^!ShWXG_jLm6jlwBbwz|}bdOQ< zM2fCO&2kmm6GxysrhjV=1vLk@*XM&32&41*C4;6=H4o;K71fLP;e$s`y}v%1FbV8r zZaqPQ;>lL=-j0+hdVoBv4=T<+l>T2pFKB?EMHUv4R)7+jk;wOBG?$@RZDQM6?TzzR z(!H5|uHTaoKKOJPNZ-9pBZqYw81o*Mb`2;Sg52Fw@%0WV^kGmvc9c?Xn&e3?l-I17 zJ1#mBE$zxi?hQmnSBQ}y0Z3>j-f@XkJMdh< znomSRUt^b0OV2}TZM`;K9&hxXQvBtsg@xTgad2yUo**r;=f*N`N<8%mk;w}};g`$C zm<=I!L(lvqF>r~$OJs4*@C}qHE<3wYvq0dWl|$Ao1k9}0&hsR|(0?Qa9wr$FJxm)` zJ(2&w%4UKS1qx=E#?5?ZF*a{-{6X06{q&y~#d?%&DX7<##su_Qtwk<4WIk4YKzXg^ z(R?x4PCk8?ErCd+V?EWv4k;NKd6p3Drv)Jt@Rg&Nh0U)19A zi06X9GSu7=+CP+Wgg*TyF3T?Ez~w3drhvO0`blO+&y32=wHlVdxVCC0TT-LCAx!CD z4-SgfdY~R;6zUkYqTl`nXV*ro^P`WE3|WQ(I8G*s!HVv`Q0B@igmf3R-$XwX!^x$8 zglYBTPLbD%Uet9NRSUx`_ag=3#QiHy_4im#hF%Eu)P_F4`=?sAmV5l2yQUir-r=YD ztU_D5!Xz3`6X<_4;j(wxR2pZrDMt?4vC%4_a!&H%X#*FjR3)<{(bybmzghhTu!m)t zFIzQ+JW9rXSG~&?ZY5r$jLj{N@+r_0!FeOER$nOV#fK`Pkv%DyzEc8=L|CT|hbAmIOkP7AYYAb54xNg6zV0Tsy$vj*u@mhl`aL*$B#4lQmT1yG0c;~v8xBz$w zS_}r+5Lyac06Wn2%=7@m)BEjPu2>10Me7D|?58N0X^~jxEAupYNij}y=zXxz^s-Gy z!oh!v{zTLh`^{2N!7L&E3^9nhWrG~4F8<$2FfyP#ne z&m|cl{c$1p8Rl#A1dP#axC4JrqhrqV^a(&cZ_64mXu(RGZMST$bHT71VTP2}I5P70 z>fUJV0b#dJxLpa1p3e2i;~@@zWv^#K8@r8Qy}I)>fH&O=&+^q0Ez3RSZs$W^qdr}H zmIt+Oghc@;OC(Kv@DS)*FFvDNlC!wR-$d5sPv?>J;QjPh*hmc%*;nFM3_<#S%uz zm0lX;J?8oGVXhhPKwy4a={;LOEu?lwfA`N=k(~z@yH@Yc(0|zgY%uJXh;2G>r@i(K z@<%)Ezru?0n>tS!!USOHFP`8qs;P^n9P00Jw89&7fkKk+e%V9^>e%q_x5A>y+vqGY zg0lmRhHkH(`(;rW$$x_p3IAi8H%0hB|A{ z$^C}H6VQ^Oux$>LNa6!K_&4ie1Cqe;3r27~w~>q|_PdLrsp;Z8NI{7r@X1F?b-@c~ z3Hw(K1=T?i6yEfx)2)a+h#Axy7H2buXcJyx0hl5_m^-in*ZO%Ubi|`xL(z0_)qR}! zC{GE}zi-W~y2>#RqCAr*XIFJT+8Nw+U27yM9`mP zSIiDpp2p&M-K3>=M&>^hO|1`muqtkwz92Y4VWK?PoW1x~K3%cT)}I z*b0D)nV8qN*phqgL&N*fGa&^*;`j6*^#We+@5dULJjsg%n8w1JJQy>u&f^m09}{`- zY4MbStT@rUpPaju2l6OtC;Sme+`yU>T|bjkaLb8k>e+s(@r=S2TA#FmB{g4Ev5!)xU7>qe`_5!{t}%?!Rbydwgpz4rMJECyy!c&JToR26Ft|1fCt8_3X$m-2XShsa9t6D zY(i0F58=XSwsA~$*Sj;cEuXL2;n^9C)GyZvIde#bzQSX)*Glssl#NpP<^zx1{>B*b> zGsWCZE^-j_$#!zrOTxoe`wvwH&60+jtQ=Z4LyUUCF|;*niA6MmZv_~I-re6OLxxH0Gx!A%DxSaoJj5Bdolwb+C2t-cs` z1V28sh!Ru~v3w50eiR>?wQ{^ECKm9OgAk$E-Yn)~Q0S=^ft%p=Mc8e1A1pmsHA{<6 zutGhAkWj(PZJ>1Wj_tOG%A^NIVG7ck4UH(VEkJ+8>UG?XK$R0WY4aNZqdmTzNd0$U z)t8oTC*2Q2>DcjSZtf`i4v z6Qha4c1<@im(9bFHNbIW)GEokpMVap zbC$J|4dKSxTw!M$vyNct1J(RLj_7Iin1LcDIH@P#;4lX_Ni-A@M%-sY;M3jPWK+fv zPdq>YWUa6OvP60MpxA+1W~vCS?Ic?__Xm(fBMqT@h1k&3? zc-eMt&DehHI}RtQKk#@fgTqwWW4Wt$W8CjNR5fNT+*k|uD`f3kB8CIp#95eft{K)y z?IdnG0OVR>4@dPW9Ro}*J*l09KMDWohH;sj3&USQP4I4$2}};KH?pf;hBN@kyD!&# zeMFe9ed7F!b3yVc)W*ar@oqL@CM8mZ@QphP?^m%>4L(H&-2{*?aD`x7M{hZ_y8p9i zMr8KCndF<>L^m~^m2lCXE}^qOf;Q-d?}$AttzI-(%x7;V`l+VCOUHy zoS>bupl4$~evUfOo0NWDrM8?PlaGG=^GfPF1u#*AU*l%Qq9oOdN_w~L9ka%J~410KE`);r6Xe9k(9*&5sRq!UCs@f=%K84K4q)_3&D)WT4HE-^q32Xi@is}L3>Cq-2tDN}YS|1W;vKGOVs!tY^2nZ`emCq&KfBjKJltUXvYaV)8uCqkW-_|D-r)4Y8E}P_eV$S|OnV~t@(yXz z)SOVf{vl@r*e8NGqAy{(1rW&?5byF&6KnQ#7RnC ziCH9$oJ8t6GGS@UJ(YabN-6VM2Yg#aFxxQoE4|3{Zgc zzT+VTysUIFz$zLd`;@2ZoWfUUXM%L=Yep7A#UlX=Jxi^{6gsDEzmvXjY;J=PoiHL; z3fO|8BC_Z05ry%HQVo4Lj7k<2eemQ24k3Ll) zut%_i@wr2^_Y~!#tS?pJOMBL$m*OlCidcxMI-N%t?onu`aGZ18Mr3CS`; zD##I6iD4qd-Oo*6S)eVu*~doXXSu(Qd55Y9W+%3k*FjMb#G8yLcRSR;XBwwDm}aj@ zk*5XGDv#vdpC?sTRFuIV#Sk43qxO&t+Z5WVK6?S8E@u^`cbNr2#}FKc%)b`rD1et^ z{7i#vnUq+6UAY2Kq>*BE25fiMw3><~k3fRActH-B(&I-FjtCljk0}q!0@^coC7kD# za^k1-Lw-_C*13!($AoDfahx9f2Z0tICM&2o0)Z#A*Hw?OQVeqX#G?fHw~2j8x)KV3 z;0_@yogJQMxGN=UAt)>;pF0|=HF;1ME)6oL0V59ja40gzJ^G*B44a;RUhd8h#_~f5 zT7VRKr%)^`z3O{+V)Z|1JhP(;sv|MMq1r2ga;Zt05l6dl#I-_6_F(z`v+4(HK%jCG zz*ALCfn3iqzux%$Mj6>4;t=7|eU7gRRM7xbTVYN1V=L*`Vlsj2EZ+df8 z^|G6Cah⪙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

-WARNING: For my remote, the codes wrapped after 65,536 codes were sent. I'm not sure if this is the case for ALL Genie brand remotes. If it doesn't wrap, it's possible that the remote could stop working (if the manufacture implemented OVR bits). -

-WARNING: This could desync your remote from the receiver. Be sure you know the process to sync the remote back to the receiver. For my remote, I had to press the learn button on the receiver, then press the button on the remote. -

-WARNING: Don't run this app near your garage. There is no reason to open the physical garage door & you will likely burn out the motor. +## Overview -Document sections: -- [Description](#description) -- [Installing](#installing) -- [Determine Genie Frequency](#determine-genie-frequency) +Version 3.x no longer requires changes to the firmware! The application includes the Genie protocol encoder/decoder, thanks to @MMX for the suggestion. + +- [Warnings](#warnings) - [Connecting to remote](#connecting-to-remote) - [Capture codes](#capture-codes) -- [Sub-GHz Read](#sub-ghz-read) -- [Sub-GHz Saved](#sub-ghz-saved) -- [Troubleshooting](#troubleshooting) -- [Sub-GHz application](#sub-ghz-application) - - [Read](#read) - - [Details](#details) - - [No Keys](#no-keys) - - [Key Missing](#key-missing) +- [Sending signals](#sending-signals) - [.GNE file format](#gne-file-format) -## Description -This program was written to allow the Flipper Zero to press buttons on a Genie garage door opened and record the rolling code. The goal is to capture all 65,536 signals (which hopefully repeats when it gets to the end). Our click speed is current 2000ms per click + however long it takes to get the signal. In practice, it typically takes 2 days to record all of your signals. +This program was written to allow the Flipper Zero to press a button on a Genie garage door remote and record the rolling code. The goal is to capture all 65,536 signals (which hopefully repeats when it gets to the end). Our click speed is current 2000ms per click + however long it takes to get the signal. In practice, it typically takes 2 days to record all of your signals. -Once completed, the built-in Sub-GHz Read application will know how to playback your Genie garage door remote. +The application also has the ability to send the next code to the garage door opener. This starts from the first captured signal. -## Installing -- Step 1. Clone a firmware repro using ``git clone --recursive``. -- Step 2. Copy [these files](https://github.com/jamisonderek/flipper-zero-tutorials/tree/main/subghz/apps/genie-recorder) into your firmware ``applications_user\genie-recorder`` folder. -- Step 3. Move the files from ``applications_user\genie-recorder\lib\subghz\protocols`` to ``lib\subghz\protocols`` folder. -- Step 4. Add ``&subghz_protocol_genie,`` below the line ``&subghz_protocol_keeloq,`` in the ``lib\subghz\protocols\protocol_items.c`` file. (NOTE: You can add it lower in the file if you prefer.) -- Step 5. Add ``#include "genie.h`` below the line ``#include "keeloq.h`` in the ``lib\subghz\protocols\protocol_items.h`` file. -- Step 6. Build your firmware & deploy onto Flipper ``./fbt FORCE=1 flash_usb_full`` -- "[Debug]Flash (USB, with Resources)". +This application is intended to **replace** the remote you captured. You should not use your original remote again once you are using the Flipper Zero or they will get out of sync. It is recommended that you capture a backup remote you are not using. -## Determine Genie Frequency -- Step 1. On your Flipper Zero, load ``Sub-GHz`` app. -- Step 2. Choose ``Read`` to start scanning. -- Step 3. Press the LEFT button to edit the Config. -- Step 4. Change the ``Frequency`` to 315000000. -- Step 5. Press the BACK button to continue scanning on the new frequency. -- Step 6. Press a button on your remote to see if it is detected. -- Step 7. If it is NOT detected, try 390000000. +The files are stored in `SD Card/apps_data/genie`. You can copy the `007F1991.gne` file to your Flipper if you want to use a default remote. On your receiver you will need to sync to the Flipper. + + +## Warnings + +WARNING: For my remote, the codes wrapped after 65,536 codes were sent. I'm not sure if this is the case for ALL Genie brand remotes. If it doesn't wrap, it's possible that the remote could stop working (if the manufacture uses OVR bits). + +WARNING: This could desync your remote from the receiver. Be sure you know the process to sync the remote back to the receiver. For my remote, I had to press the learn button on the receiver, then press the button on the remote. + +WARNING: Don't run this app near your garage. There is no reason to open the physical garage door & you will likely burn out the motor. ## Connecting to remote +

-WARNING: Do this **at your own risk**. You could damage your remote if done improperly or if your remote doesn't support capturing all of the signals. +WARNING: Do this **at your own risk**. You could damage your remote or Flipper Zero if done improperly. -- Step 1. Open the case off of your garage door remote. -- Step 2. Connect GND from Flipper to GND pin on the remote (Shown in green traces). -- Step 3. Connect A7 from Flipper to the signal pin on the remote (Shown in orange traces - top button, cyan - middle button). +- Step 1. Remove the case of your garage door remote. +- Step 2. Connect GND from Flipper to GND pin on the remote (Shown in green traces for my remote). +- Step 3. Connect A7 from Flipper to the signal pin on the remote (Shown in orange traces - top button, cyan - middle button for my remote). - Step 4. Put in a fresh battery. - - Risky Option: Remove the battery and connect 3V3 from Flipper to the battery positive bar on the remote. Be 100% sure that GND on the Flipper is going to GND on the remote (and not the signal pin) and that no wires are shorting. If you are not 100% sure, then DON'T DO THIS! You could damage the remote and the Flipper Zero. + - Risky Option: Remove the battery and connect 3V3 from Flipper to the battery positive bar on the remote. Be 100% sure that GND on the Flipper is going to GND on the remote (and not the signal pin) and that no wires are shorting. If you are not 100% sure, then DON'T DO THIS! You could damage the remote and the Flipper Zero. ## Capture codes -- Step 1. Be sure you have followed the steps in the [Installing](#installing) section. -- Step 2. Be sure you have followed the steps in the [Connecting to remote](#connecting-to-remote) section. -- Step 3. Be sure you are not near your garage door (or that the door is unplugged). The application will be pushing the button many times and could burn out the motor. -- Step 4. Run the Genie Recorder application -- Step 5. Choose "Config" and set the frequency to the frequency you determined above. -- Step 6. Choose "Start" to start recording signals. - - You should see the current broadcast count (how many times the button was pressed) - - You should see the received signal count (how many times the signal was received) - - You should see how many codes still need to be received. - - Every time a signal is recevied, it is written to a log file. If the application exits and restarts, it will resume the counters where it left off, but be sure to NOT press the remote because the counter will be off. -- Step 7. Let it run for 2-3 days (the goal is to capture between 49,160-65,536 signals). If you capture less, it will still work but when it wraps back to the beginning those codes will be rejected by your garage door opener. To successfully wrap, the remote needs 49,160 button presses ("16,380 remaining codes" or less). To be near-sync with the remote, it is recommended you capture all of the codes. -- Step 8. Press the BACK button twice to exit the application. -## Sub-GHz Read -- Step 1. Be sure you have followed the steps in the [Capturing codes](#capture-codes) section. -- Step 2. On your Flipper, press the BACK button until you are at the Desktop. -- Step 3. On your Flipper, press the OK button and choose "Sub-GHz". -- Step 4. Choose "Read" to start scanning. -- Step 5. Press the LEFT button to edit the Config. -- Step 6. Change the ``Frequency`` to the frequency you determined above. -- Step 7. Press the BACK button to continue scanning on the new frequency. -- Step 8. Press a button on your Genie remote. If read successfully you should hear a beep and see "Genie" followed by some code. -- Step 9. Press the OK button to see the details of the code. -- Step 10. Most firmware will have a "Save" button. Press "Save" to save the code to the SD Card. Press "Send" to send the code to the garage door opener. -- Step 11. If you press "Send", it should generate the next code and open the garage door. +- Step 1. Be sure you have followed the steps in the [Connecting to remote](#connecting-to-remote) section. +- Step 2. Be sure you are not near your garage door (or that the door is unplugged). The application will be pushing the button many times and could burn out the motor! +- Step 3. Run the Genie Recorder application. +- Step 4. Choose `Config` and set the frequency to the frequency your remote runs at. If you don't know, start with `315MHz` then use `390MHz` if it doesn't work. NOTE: You do not need to do anything with the `Genie File` setting at this time. +- Step 5. Press `Back` button to return to the main application. +- Step 6. Choose `Learn` to start capturing and learning signals. + - `Remaining code` - how many codes still need to be captured. + - `Click` - how many times a click has been sent to the remote. + - `Prev` - how many codes were previously captured (no codes captured this session yet). + - `Got` - total number of codes captured. + - 16 digit hex code - the last code that was captured. +- Step 7. If you get the message `NO SIGNAL FROM REMOTE?` see the [troubleshooting](#troubleshooting) section. +- Step 8. Let it run for 2-3 days (the goal is to capture at least 50,000 signals). If you capture less, it will still work but when it wraps back to the beginning those codes will be rejected by your garage door opener and you would have to resync. To successfully wrap, the remote needs 50,000 button presses. It is recommended you capture all of the codes. +- Step 9. Press the BACK button to return to the main application. + +## Sending signals -## Sub-GHz Saved - Step 1. Be sure you have followed the steps in the [Capturing codes](#capture-codes) section. -- Step 2. On your Flipper, press the BACK button until you are at the Desktop. -- Step 3. On your Flipper, press the OK button and choose "Sub-GHz". -- Step 4. Choose "Saved". -- Step 5. Select the file that you saved during the [Sub-GHz Read](#sub-ghz-read) section steps. -- Step 6. Choose "Emulate". -- Step 7. Press the OK button to generate the next code and open the garage door! - - NOTE: If the receiver is out of sync, but within the 16K window, you may need to press the OK button twice. This will open the garage door and resync the counter on the receiver. +- Step 2. Run the Genie Recorder application. +- Step 3. Choose `Config` and set the frequency to the frequency your remote runs at. +- Step 4. Choose `Genie File` and select the .GNE file that was saved during the [Capture codes](#capture-codes) section steps. +- Step 5. Press `Back` button to return to the main application. +- Step 6. Choose `Send` to load the send screen. + - `NO .GNE FILE LOADED` - Confirm you selected a valid file in step 4. + - `Remote not fully captured` - You should continue to [capture signals](#capture-codes) but you can use the application. + - `Press OK to send signal` - Press the OK button to send the next code to the garage door opener. + - `Long press OK to reset code.` - This will desync the Flipper from the receiver. It will start over, transmitting the first code. ## Troubleshooting - If the LED on the remote is not blinking, be sure you have followed the steps in the [Connecting to remote](#connecting-to-remote) section. -- If the application is not detecting the remote, but the LED on the remote is blinking, then perhaps you missed the step in [Installing](#installing) section or the frequency is incorrect. +- If the application is not detecting the remote, but the LED on the remote is blinking, then ensure the frequency is correct. - -## Sub-GHz application -### Read - -

- -If the frequency is correct, then you should see the "Genie" entry when you press a button on your remote. If the frequency is correct (typically 315MHz or 390MHz) then perhaps you missed the step in [Installing](#installing) where you copy the files into the ``lib\subghz\protocols`` directory, or the step where you edit the ``protocol_items`` files? - -### Details - -

- -When a code and the next code is found in the .GNE file, you should see the KEY and the NEXT CODE. Official firmware does not support the "Send" feature for rolling codes. - -### No Keys - -

- -When the .GNE file does not exists, you will get the "No Keys" error message. You need to make sure you run the Genie Recorder application to capture the codes first. - -### Key Missing - -

- -When the .GNE file exists, but the key is not found (or the next code is not found), you will get the "Key Missing" error message. You need to make sure you run the Genie Recorder application to capture the codes first. +- If sending signal is not working, then ensure the frequency is correct. ## .GNE file format + The file format is as follows: -- 2 bytes: "G*" (0x47 0x2A) + +- 2 bytes: "G\*" (0x47 0x2A) - 1 byte: Major version (0x02) - 1 byte: Minor version (e.g. 0x05) - 4 bytes: Fix code from remote (matches filename.GNE) @@ -139,4 +92,4 @@ The file format is as follows: - 4 bytes: Reserved for future use. - 4 bytes x 65536: The dynamic part of the code (0x00000000 if no code has been received) -The file can be found in the ``SD Card\apps_data\genie`` folder on your Flipper Zero. The name of the file will match the ending 8 characters of the fix code. \ No newline at end of file +The file can be found in the `SD Card\apps_data\genie` folder on your Flipper Zero. The name of the file will match the ending 8 characters of the fix code. diff --git a/subghz/apps/genie-recorder/application.fam b/subghz/apps/genie-recorder/application.fam index db68073..e534550 100644 --- a/subghz/apps/genie-recorder/application.fam +++ b/subghz/apps/genie-recorder/application.fam @@ -1,13 +1,13 @@ App( - appid="genie_record_v2", - name="Genie Door Recorder v2", + appid="genie_record_v3", + name="Genie Door Recorder v3", apptype=FlipperAppType.EXTERNAL, entry_point="genie_record_app", requires=["gui", "subghz"], stack_size=4 * 1024, - fap_version=(2, 5), + fap_version=(3, 0), fap_icon="genie.png", fap_category="Sub-GHz", fap_icon_assets="assets", - fap_description="This application connects to a Genie garage door remote and capture all of the codes. The Sub-GHz app can then be used to replay the codes to open the door.", + fap_description="This application extracts the codes from a Genie garage door remote into a .GNE file. It also plays back a .GNE file to a Genie garage door opener.", ) diff --git a/subghz/apps/genie-recorder/assets/genie_10x10.png b/subghz/apps/genie-recorder/assets/genie_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..71eb2be36486887dd5f3ed2c3c0ffcd70ffe7602 GIT binary patch literal 1824 zcma)6eQXnD7{Bo`$CipB3L%TR91y_K-u1d}>t#pX+Ok!-QTD~=7rXY}wnsniyt~qN zTNY$h7zP+o6beyreCQw;5sU~7M3FE)X2h6?h7tS&V+gWrf*8zvukE@O=SP$4z3=n< zp5Oa>p7*(@!%ZJykPXo-Z3|}>D3k`y7TstJ!b=Lhe`s2YtJ;#$?v=pk8K&6x^cM4*mWbeN4g?^502b_ za{sh2X*OtknEHZj_N##|;@r%v)*-{f?<(+#L+3V{ub=22s99(~@Kk-*x=R>OPXGDQ zP~)L_XZBf__Fkwy{KxRI4;QZ#PhGlo$8xcq?@?C!CN6q*@4X%&{_aE9j<5Z=b#5C! z^|hC5c-`SUFM3~Se`9d{6a8y0hrCBGJDYDlFZFgmv*+5qoLTRE-8v;SxT>%BM*h`u zuCC{o37>>_*4!%AwPtPAdhUN==vD6}+p(n9Hat8GmvyHvx53vGv9eJ{ki5s#Cku)1 zn28{hr|`86N&~ZmatQ$)%Lz`Piv&c7Mvzi-L}Xn)prB6R;e#~x>#>s<%5yZf+{h4& zXaQcnvRMK(%~iFoW}nN%Vdh1e+|mdI83I6I(MZ4_l&J`fC5S1wR?RquCLoHB#u^w0 zY7r!W8g)h;fx&PTEtNPoRc&3I3Wqxy^D2r+;dnS4)`bl^LGs{wlgWe=Bu zpu$G9L3wtPBt>HdvP*j9m{G8;qH0#FvgFGw}83jmGjQ#J=50saOn9{@oamK8dPv7W{UJn6zD z$ryoyTm}pswZmDF8Wl7qS67sycAKS0Zz?L%k~(;(S}DpNU_D?72znH6^1xB+a-PdD zs)_hR>W$Y0d6+txqG%X(&{#2vk5D)M-45@9Vqm9otioDZ1qvn!*k^iDOA@t&kt!r9 zy|I8WQ3Omq0Twvk9sMt8qPtP}D}^x(Lsjy!B1qA+In}c@;N>x zq9kx37vK^Cpj{T+N|=>EnFrnJ^*TMFD;mLuy#O*~=Ab1(f3Impis9rTBOSOyb6T@rfjoRya=J4#thlCUuvd zZy*SVngplUgw^bHIQiz-t!1?{m%EypVn}vL-swrx9zmQ~$26|o-kFp0^rTa(U&%r= WRS4a;`>o^ZsI=RvtOv`R*8BzS&~;=0 literal 0 HcmV?d00001 diff --git a/subghz/apps/genie-recorder/genie.c b/subghz/apps/genie-recorder/genie.c index 8be62a2..503c935 100644 --- a/subghz/apps/genie-recorder/genie.c +++ b/subghz/apps/genie-recorder/genie.c @@ -7,316 +7,19 @@ #include #include -#include "genie_subghz_receive.h" #include "genie_about.h" +#include "genie_app.h" #include "genie_file.h" +#include "genie_learn.h" +#include "genie_subghz_receive.h" +#include "genie_submenu.h" -#define TAG "GenieRecord" - -#define CLICK_SPEED 2000 const GpioPin* const pin_remote = &gpio_ext_pa7; -typedef enum { - GenieSubmenuIndexConfig, - GenieSubmenuIndexStart, - GenieSubmenuIndexAbout, -} GenieSubmenuIndex; - -typedef enum { - GenieViewSubmenu, - GenieViewConfig, - GenieViewStart, - GenieViewAbout, -} GenieView; - -typedef struct { - ViewDispatcher* view_dispatcher; - Submenu* submenu; - View* view; - Widget* widget_about; - VariableItemList* variable_item_list_config; - GenieSubGhz* genie_subghz; - uint32_t frequency; - FuriTimer* timer; - bool processing; - bool pressed; - uint32_t click_counter; - uint32_t rx_counter; - uint32_t genie_save_counter; - FuriString* key; -} GenieApp; - -typedef struct { - GenieApp* ref; -} GenieAppRef; - -/** - * @brief Callback for navigation events - * @details This function is called when user press back button. We return VIEW_NONE to - * indicate that we want to exit the application. - * @param context The context - * @return next view id -*/ -static uint32_t genie_navigation_exit_callback(void* context) { - UNUSED(context); - return VIEW_NONE; -} - -/** - * @brief Callback for navigation events - * @details This function is called when user press back button. We return VIEW_NONE to - * indicate that we want to exit the application. - * @param context The context - * @return next view id -*/ -static uint32_t genie_navigation_submenu_callback(void* context) { - UNUSED(context); - return GenieViewSubmenu; -} - -static void genie_submenu_callback(void* context, uint32_t index) { - GenieApp* app = (GenieApp*)context; - switch(index) { - case GenieSubmenuIndexConfig: - view_dispatcher_switch_to_view(app->view_dispatcher, GenieViewConfig); - break; - case GenieSubmenuIndexStart: - view_dispatcher_switch_to_view(app->view_dispatcher, GenieViewStart); - break; - case GenieSubmenuIndexAbout: - view_dispatcher_switch_to_view(app->view_dispatcher, GenieViewAbout); - break; - default: - break; - } -} - -static uint32_t setting_frequency_values[] = {315000000, 390000000}; -static char* setting_frequency_names[] = {"315 MHz", "390MHz"}; -static void genie_setting_frequency_change(VariableItem* item) { - GenieApp* app = variable_item_get_context(item); - uint8_t index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, setting_frequency_names[index]); - app->frequency = setting_frequency_values[index]; -} - -static void genie_view_draw_callback(Canvas* canvas, void* model) { - GenieApp* app = ((GenieAppRef*)model)->ref; - canvas_set_font(canvas, FontPrimary); - canvas_draw_str(canvas, 5, 10, "Genie Sub-Ghz Recorder!!!"); - canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 5, 20, "A7/GND to Genie remote"); - canvas_draw_str(canvas, 100, 58, (app->pressed) ? "SEND" : ""); - char buffer[30] = {0}; - snprintf(buffer, COUNT_OF(buffer), "Click %ld", app->click_counter); - canvas_draw_str(canvas, 1, 45, buffer); - snprintf( - buffer, - COUNT_OF(buffer), - "Got %ld", - app->genie_save_counter > 0 ? app->genie_save_counter : app->rx_counter); - canvas_draw_str(canvas, 75, 45, buffer); - if(app->genie_save_counter < 0x10000) { - snprintf(buffer, COUNT_OF(buffer), "Remaining codes %ld", 65536 - app->genie_save_counter); - canvas_draw_str(canvas, 1, 32, buffer); - } else { - canvas_draw_str(canvas, 1, 30, "Found all codes!"); - } - canvas_draw_str(canvas, 5, 55, furi_string_get_cstr(app->key)); -} - -static bool genie_view_input_callback(InputEvent* event, void* context) { - UNUSED(context); - UNUSED(event); - return false; -} - -static uint32_t last_count() { - uint32_t count = genie_load(); - return count; -} - -static uint32_t save_count(uint32_t count, FuriString* key, bool is_genie) { - FURI_LOG_D(TAG, "%ld,%s", count, furi_string_get_cstr(key)); - genie_save(count, key); - if(is_genie) { - return genie_save_bin(furi_string_get_cstr(key)); - } - - return 0; -} - -static void __gui_redraw() { - // Redraw screen - Gui* gui = furi_record_open(RECORD_GUI); - gui_direct_draw_acquire(gui); - gui_direct_draw_release(gui); -} - -static void press_button(GenieApp* app) { - furi_hal_gpio_write(pin_remote, false); - app->pressed = true; - __gui_redraw(); -} - -static void release_button(GenieApp* app) { - furi_hal_gpio_write(pin_remote, true); - app->pressed = false; - __gui_redraw(); -} - -static void genie_packet(FuriString* buffer, void* context) { - GenieApp* app = (GenieApp*)context; - app->processing = true; - - /* - if(furi_string_search_str(buffer, "KeeLoq 64bit") < furi_string_size(buffer)) { - release_button(app); - FURI_LOG_D(TAG, "KeeLoq 64bit packet"); - size_t key_index = furi_string_search_str(buffer, "Key:"); - if(key_index < furi_string_size(buffer)) { - furi_string_set_n(app->key, buffer, key_index + 4, 16); - app->rx_counter++; - save_count(app->click_counter, app->key, false); - } - } else -*/ - if(furi_string_search_str(buffer, "Genie 64bit") < furi_string_size(buffer)) { - release_button(app); - FURI_LOG_D(TAG, "Genie 64bit packet"); - size_t key_index = furi_string_search_str(buffer, "Key:"); - if(key_index < furi_string_size(buffer)) { - furi_string_set_n(app->key, buffer, key_index + 4, 16); - app->rx_counter++; - app->genie_save_counter = save_count(app->click_counter, app->key, true); - } - } - - app->processing = false; -} - -static void genie_tick(void* context) { - GenieApp* app = (GenieApp*)context; - if(!app->processing) { - if(app->genie_save_counter > 0xFFFF) { - release_button(app); - } else if(app->pressed) { - release_button(app); - } else { - app->click_counter++; - press_button(app); - } - } -} - -static void genie_enter_callback(void* context) { - GenieApp* app = (GenieApp*)context; - genie_file_init(); - start_listening(app->genie_subghz, app->frequency, genie_packet, context); - furi_timer_start(app->timer, furi_ms_to_ticks(CLICK_SPEED)); -} - -static void genie_exit_callback(void* context) { - GenieApp* app = (GenieApp*)context; - app->processing = false; - release_button(app); - stop_listening(app->genie_subghz); - furi_timer_stop(app->timer); -} - -static GenieApp* genie_app_alloc() { - GenieApp* app = (GenieApp*)malloc(sizeof(GenieApp)); - app->genie_subghz = genie_subghz_alloc(); - app->timer = furi_timer_alloc(genie_tick, FuriTimerTypePeriodic, app); - app->click_counter = 0; - app->rx_counter = last_count(); - app->genie_save_counter = 0; - app->key = furi_string_alloc(); - - furi_hal_gpio_init_simple(pin_remote, GpioModeOutputOpenDrain); - release_button(app); - - Gui* gui = furi_record_open(RECORD_GUI); - - app->view_dispatcher = view_dispatcher_alloc(); - view_dispatcher_enable_queue(app->view_dispatcher); - view_dispatcher_attach_to_gui(app->view_dispatcher, gui, ViewDispatcherTypeFullscreen); - - app->submenu = submenu_alloc(); - submenu_add_item(app->submenu, "Config", GenieSubmenuIndexConfig, genie_submenu_callback, app); - submenu_add_item(app->submenu, "Start", GenieSubmenuIndexStart, genie_submenu_callback, app); - submenu_add_item(app->submenu, "About", GenieSubmenuIndexAbout, genie_submenu_callback, app); - view_set_previous_callback(submenu_get_view(app->submenu), genie_navigation_exit_callback); - view_dispatcher_add_view( - app->view_dispatcher, GenieViewSubmenu, submenu_get_view(app->submenu)); - view_dispatcher_switch_to_view(app->view_dispatcher, GenieViewSubmenu); - - app->variable_item_list_config = variable_item_list_alloc(); - VariableItem* item = variable_item_list_add( - app->variable_item_list_config, - "Frequency", - COUNT_OF(setting_frequency_names), - genie_setting_frequency_change, - app); - uint8_t default_freq_index = 0; - variable_item_set_current_value_index(item, default_freq_index); - variable_item_set_current_value_text(item, setting_frequency_names[default_freq_index]); - app->frequency = setting_frequency_values[default_freq_index]; - view_set_previous_callback( - variable_item_list_get_view(app->variable_item_list_config), - genie_navigation_submenu_callback); - view_dispatcher_add_view( - app->view_dispatcher, - GenieViewConfig, - variable_item_list_get_view(app->variable_item_list_config)); - - app->view = view_alloc(); - view_set_draw_callback(app->view, genie_view_draw_callback); - view_set_input_callback(app->view, genie_view_input_callback); - view_set_previous_callback(app->view, genie_navigation_submenu_callback); - view_set_context(app->view, app); - view_set_enter_callback(app->view, genie_enter_callback); - view_set_exit_callback(app->view, genie_exit_callback); - view_dispatcher_add_view(app->view_dispatcher, GenieViewStart, app->view); - view_allocate_model(app->view, ViewModelTypeLockFree, sizeof(GenieAppRef)); - GenieAppRef* r = (GenieAppRef*)view_get_model(app->view); - r->ref = app; - - app->widget_about = widget_alloc(); - widget_add_text_scroll_element(app->widget_about, 0, 0, 128, 64, GENIE_ABOUT_TEXT); - view_set_previous_callback( - widget_get_view(app->widget_about), genie_navigation_submenu_callback); - view_dispatcher_add_view( - app->view_dispatcher, GenieViewAbout, widget_get_view(app->widget_about)); - - return app; -} - -static void genie_app_free(GenieApp* app) { - genie_subghz_free(app->genie_subghz); - furi_timer_free(app->timer); - furi_hal_gpio_init_simple(pin_remote, GpioModeAnalog); - furi_string_free(app->key); - - view_dispatcher_remove_view(app->view_dispatcher, GenieViewConfig); - variable_item_list_free(app->variable_item_list_config); - view_dispatcher_remove_view(app->view_dispatcher, GenieViewAbout); - widget_free(app->widget_about); - view_dispatcher_remove_view(app->view_dispatcher, GenieViewStart); - view_free(app->view); - view_dispatcher_remove_view(app->view_dispatcher, GenieViewSubmenu); - submenu_free(app->submenu); - view_dispatcher_free(app->view_dispatcher); - furi_record_close(RECORD_GUI); - - free(app); -} - int32_t genie_record_app(void* p) { UNUSED(p); - GenieApp* app = genie_app_alloc(); - view_dispatcher_run(app->view_dispatcher); + view_dispatcher_run(genie_app_get_view_dispatcher(app)); genie_app_free(app); return 0; } \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_about.h b/subghz/apps/genie-recorder/genie_about.h index dc0bb13..cbb7f3b 100644 --- a/subghz/apps/genie-recorder/genie_about.h +++ b/subghz/apps/genie-recorder/genie_about.h @@ -2,21 +2,17 @@ #define GENIE_ABOUT_TEXT \ "Genie garage door recorder.\n" \ - "Version 2.5\n---\n" \ - "Custom genie firmware is\n" \ - "required for this app.\n" \ - "---\n" \ + "Version 3.0\n---\n" \ "This app clicks your remote\n" \ "and records the keys, so you\n" \ - "can replay them later when\n" \ - "you load a Sub-GHz file!\n" \ + "can replay them later with\n" \ + "the application!\n" \ "---\n" \ "Connect Genie remote to pin\n" \ "A7 and GND. Wiring diagram\n" \ "at https://tinyurl.com/genierecorder or github.\n" \ - "Once remote connected and\n" \ - "firmware is updated,\n" \ - "click Start to capture!\n---\n" \ + "Once remote connected," \ + "click Learn to capture!\n---\n" \ "author: @codeallnight\n" \ "https://discord.com/invite/NsjCvqwPAd\n" \ "https://youtube.com/@MrDerekJamison\n" \ diff --git a/subghz/apps/genie-recorder/genie_app.c b/subghz/apps/genie-recorder/genie_app.c new file mode 100644 index 0000000..d8ab34b --- /dev/null +++ b/subghz/apps/genie-recorder/genie_app.c @@ -0,0 +1,244 @@ +#include "genie_app.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "genie_subghz_receive.h" +#include "genie_file.h" +#include "genie_submenu.h" +#include "genie_send.h" +#include "genie_config.h" +#include "genie_learn.h" +#include "genie_about.h" +#include "genie_ini.h" + +typedef enum { + GenieViewSubmenu, + GenieViewSend, + GenieViewConfig, + GenieViewLearn, + GenieViewAbout, +} GenieView; + +struct GenieApp { + ViewDispatcher* view_dispatcher; + GenieSubmenu* submenu; + GenieSend* send_view; + View* learn_view; + Widget* widget_about; + GenieConfig* genie_config; + GenieSubGhz* genie_subghz; + uint32_t frequency; + FuriTimer* timer; + bool processing; + bool pressed; + uint32_t click_counter; + uint32_t try_counter; + uint32_t rx_counter; + uint32_t genie_save_counter; + FuriString* key; + FuriString* genie_saved_file_path; +}; + +extern const GpioPin* const pin_remote; + +ViewDispatcher* genie_app_get_view_dispatcher(GenieApp* app) { + return app->view_dispatcher; +} + +GenieConfig* genie_app_get_genie_config(GenieApp* app) { + return app->genie_config; +} + +GenieSubGhz* genie_app_get_subghz(GenieApp* app) { + return app->genie_subghz; +} + +void genie_app_start_timer(GenieApp* app, uint32_t ms) { + furi_timer_start(app->timer, furi_ms_to_ticks(ms)); + app->try_counter = 0; + app->click_counter = 0; +} + +void genie_app_stop_timer(GenieApp* app) { + furi_timer_stop(app->timer); +} + +void genie_app_set_frequency(GenieApp* app, uint32_t frequency) { + app->frequency = frequency; +} + +uint32_t genie_app_get_frequency(GenieApp* app) { + return app->frequency; +} + +void genie_app_gpio_send(GenieApp* app, bool sending_signal) { + app->pressed = sending_signal; +} + +bool genie_app_is_sending_signal(GenieApp* app) { + return app->pressed; +} + +uint32_t genie_app_get_click_counter(GenieApp* app) { + return app->click_counter; +} + +void genie_app_increment_click_counter(GenieApp* app) { + app->click_counter++; + app->try_counter++; +} + +bool genie_app_has_no_signal(GenieApp* app) { + UNUSED(app); + return app->try_counter > 3; +} + +FuriString* genie_app_get_key(GenieApp* app) { + return app->key; +} + +const char* genie_app_get_file_path(GenieApp* app) { + return furi_string_get_cstr(app->genie_saved_file_path); +} + +void genie_app_update_file_path(GenieApp* app, const char* file_path) { + furi_string_set(app->genie_saved_file_path, file_path); +} + +void genie_app_update_save_counter(GenieApp* app, uint32_t num_saved) { + app->genie_save_counter = num_saved; +} + +uint32_t genie_app_get_save_counter(GenieApp* app) { + return app->genie_save_counter; +} + +uint32_t genie_app_get_rx_counter(GenieApp* app) { + return app->rx_counter; +} + +void genie_app_set_processing_packet(GenieApp* app, bool processing_packet) { + app->processing = processing_packet; +} + +bool genie_app_is_processing_packet(GenieApp* app) { + return app->processing; +} +void genie_app_received_key(GenieApp* app, FuriString* buffer) { + size_t key_index = furi_string_search_str(buffer, "Key:"); + furi_string_set_n(app->key, buffer, key_index + 4, 16); + app->rx_counter++; + app->try_counter = 0; +} + +static void __gui_redraw() { + // Redraw screen + Gui* gui = furi_record_open(RECORD_GUI); + gui_direct_draw_acquire(gui); + gui_direct_draw_release(gui); +} + +void press_button(GenieApp* app) { + furi_hal_gpio_write(pin_remote, false); + genie_app_gpio_send(app, true); + __gui_redraw(); +} + +void release_button(GenieApp* app) { + furi_hal_gpio_write(pin_remote, true); + genie_app_gpio_send(app, false); + __gui_redraw(); +} + +static void genie_tick(void* context) { + GenieApp* app = (GenieApp*)context; + if(!genie_app_is_processing_packet(app)) { + if(genie_app_get_save_counter(app) > 0xFFFF) { + release_button(app); + } else if(genie_app_is_sending_signal(app)) { + release_button(app); + } else if(!genie_app_has_no_signal(app)) { + genie_app_increment_click_counter(app); + press_button(app); + } + } +} + +GenieApp* genie_app_alloc() { + GenieApp* app = (GenieApp*)malloc(sizeof(GenieApp)); + app->genie_subghz = genie_subghz_alloc(); + app->rx_counter = genie_load(); + app->try_counter = 0; + app->click_counter = 0; + app->genie_save_counter = 0; + app->key = furi_string_alloc(); + app->genie_saved_file_path = furi_string_alloc(); + app->timer = furi_timer_alloc(genie_tick, FuriTimerTypePeriodic, app); + + furi_hal_gpio_init_simple(pin_remote, GpioModeOutputOpenDrain); + release_button(app); + + genie_ini_load(app); + + Gui* gui = furi_record_open(RECORD_GUI); + + app->view_dispatcher = view_dispatcher_alloc(); + view_dispatcher_enable_queue(app->view_dispatcher); + view_dispatcher_attach_to_gui(app->view_dispatcher, gui, ViewDispatcherTypeFullscreen); + + app->submenu = genie_submenu_alloc(app); + View* submenu_view = genie_submenu_get_view(app->submenu); + view_dispatcher_add_view(app->view_dispatcher, GenieViewSubmenu, submenu_view); + view_dispatcher_switch_to_view(app->view_dispatcher, GenieViewSubmenu); + + app->send_view = genie_send_alloc(app); + View* send_view = genie_send_get_view(app->send_view); + view_dispatcher_add_view(app->view_dispatcher, GenieViewSend, send_view); + + app->genie_config = genie_config_alloc(app); + View* config_view = genie_config_get_view(app->genie_config); + view_dispatcher_add_view(app->view_dispatcher, GenieViewConfig, config_view); + + app->learn_view = genie_learn_alloc(app); + view_dispatcher_add_view(app->view_dispatcher, GenieViewLearn, app->learn_view); + + app->widget_about = widget_alloc(); + widget_add_text_scroll_element(app->widget_about, 0, 0, 128, 64, GENIE_ABOUT_TEXT); + view_set_previous_callback( + widget_get_view(app->widget_about), genie_navigation_submenu_callback); + view_dispatcher_add_view( + app->view_dispatcher, GenieViewAbout, widget_get_view(app->widget_about)); + + return app; +} + +void genie_app_free(GenieApp* app) { + genie_ini_save(app); + + genie_subghz_free(app->genie_subghz); + furi_timer_free(app->timer); + furi_hal_gpio_init_simple(pin_remote, GpioModeAnalog); + furi_string_free(app->key); + furi_string_free(app->genie_saved_file_path); + + view_dispatcher_remove_view(app->view_dispatcher, GenieViewSend); + genie_send_free(app->send_view); + view_dispatcher_remove_view(app->view_dispatcher, GenieViewConfig); + genie_config_free(app->genie_config); + view_dispatcher_remove_view(app->view_dispatcher, GenieViewAbout); + widget_free(app->widget_about); + view_dispatcher_remove_view(app->view_dispatcher, GenieViewLearn); + genie_learn_free(app->learn_view); + view_dispatcher_remove_view(app->view_dispatcher, GenieViewSubmenu); + genie_submenu_free(app->submenu); + view_dispatcher_free(app->view_dispatcher); + furi_record_close(RECORD_GUI); + + free(app); +} diff --git a/subghz/apps/genie-recorder/genie_app.h b/subghz/apps/genie-recorder/genie_app.h new file mode 100644 index 0000000..850f9a4 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_app.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include + +typedef struct GenieApp GenieApp; +typedef struct GenieConfig GenieConfig; +typedef struct GenieSubGhz GenieSubGhz; + +ViewDispatcher* genie_app_get_view_dispatcher(GenieApp* app); +GenieConfig* genie_app_get_genie_config(GenieApp* app); +GenieSubGhz* genie_app_get_subghz(GenieApp* app); +void genie_app_start_timer(GenieApp* app, uint32_t ms); +void genie_app_stop_timer(GenieApp* app); +void genie_app_set_frequency(GenieApp* app, uint32_t frequency); +uint32_t genie_app_get_frequency(GenieApp* app); +void genie_app_gpio_send(GenieApp* app, bool sending_signal); +bool genie_app_is_sending_signal(GenieApp* app); +uint32_t genie_app_get_click_counter(GenieApp* app); +void genie_app_increment_click_counter(GenieApp* app); +bool genie_app_has_no_signal(GenieApp* app); +FuriString* genie_app_get_key(GenieApp* app); +const char* genie_app_get_file_path(GenieApp* app); +void genie_app_update_file_path(GenieApp* app, const char* file_path); +void genie_app_update_save_counter(GenieApp* app, uint32_t num_saved); +uint32_t genie_app_get_save_counter(GenieApp* app); +uint32_t genie_app_get_rx_counter(GenieApp* app); +void genie_app_set_processing_packet(GenieApp* app, bool processing_packet); +bool genie_app_is_processing_packet(GenieApp* app); +void genie_app_received_key(GenieApp* app, FuriString* buffer); + +void press_button(GenieApp* app); +void release_button(GenieApp* app); + +GenieApp* genie_app_alloc(); +void genie_app_free(GenieApp* app); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_config.c b/subghz/apps/genie-recorder/genie_config.c new file mode 100644 index 0000000..59cfc29 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_config.c @@ -0,0 +1,166 @@ +#include "genie_config.h" + +#include +#include +#include "genie_app.h" +#include "genie_submenu.h" + +#include +#include +#include "toolbox/path.h" +#include "genie_record_v3_icons.h" + +#define TAG "GenieConfig" + +struct GenieConfig { + VariableItemList* variable_item_list; + GenieApp* app; + VariableItem* file_item; + FuriThread* thread; + DialogsApp* dialogs; + FuriString* tmp; +}; + +#define GENIE_SAVE_FOLDER \ + EXT_PATH("apps_data") \ + "/" \ + "genie" + +bool select_genie_file(GenieConfig* config) { + GenieApp* app = config->app; + const char* previous_path = genie_app_get_file_path(app); + if(previous_path && previous_path[0] != '\0') { + furi_string_set(config->tmp, previous_path); + } else { + furi_string_set(config->tmp, GENIE_SAVE_FOLDER); + } + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options(&browser_options, ".gne", &I_genie_10x10); + browser_options.base_path = GENIE_SAVE_FOLDER; + browser_options.skip_assets = false; + browser_options.item_loader_callback = NULL; + browser_options.item_loader_context = NULL; + bool file_selected = + dialog_file_browser_show(config->dialogs, config->tmp, config->tmp, &browser_options); + + if(file_selected) { + FURI_LOG_D("TAG", "Selected file: %s", furi_string_get_cstr(config->tmp)); + genie_app_update_file_path(app, furi_string_get_cstr(config->tmp)); + } else { + FURI_LOG_D("TAG", "No file selected."); + } + + return file_selected; +} + +static uint32_t setting_frequency_values[] = {315000000, 390000000}; +static char* setting_frequency_names[] = {"315 MHz", "390 MHz"}; +static void genie_setting_frequency_change(VariableItem* item) { + GenieApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, setting_frequency_names[index]); + genie_app_set_frequency(app, setting_frequency_values[index]); +} + +static void genie_config_update_file_item(GenieConfig* genie_config) { + FuriString* current_name = furi_string_alloc(); + const char* current_path = genie_app_get_file_path(genie_config->app); + if(current_path && current_path[0] != '\0') { + path_extract_filename_no_ext(current_path, current_name); + } else { + furi_string_set(current_name, "Select"); + } + variable_item_set_current_value_text( + genie_config->file_item, furi_string_get_cstr(current_name)); + furi_string_free(current_name); +} + +static void genie_config_ok_button(void* context, uint32_t index) { + FURI_LOG_D(TAG, "OK button clicked. index = %ld", index); + + if(index != 1) { + return; + } + + GenieConfig* genie_config = (GenieConfig*)context; + furi_thread_flags_set(furi_thread_get_id(genie_config->thread), 1); +} + +static int32_t genie_config_thread(void* context) { + GenieConfig* genie_config = (GenieConfig*)context; + furi_thread_flags_clear(3); + uint32_t flags = 0; + do { + flags = furi_thread_flags_wait(3, FuriFlagWaitAny, FuriWaitForever); + if((flags & 1) == 1) { + if(select_genie_file(genie_config)) { + genie_config_update_file_item(genie_config); + } + } + } while((flags & 2) != 2); + + return 0; +} + +GenieConfig* genie_config_alloc(GenieApp* app) { + GenieConfig* genie_config = (GenieConfig*)malloc(sizeof(GenieConfig)); + genie_config->app = app; + genie_config->variable_item_list = variable_item_list_alloc(); + genie_config->tmp = furi_string_alloc(); + genie_config->dialogs = furi_record_open(RECORD_DIALOGS); + genie_config->thread = furi_thread_alloc_ex("config", 1024, genie_config_thread, genie_config); + furi_thread_start(genie_config->thread); + + VariableItemList* variable_item_list = genie_config->variable_item_list; + variable_item_list_reset(variable_item_list); + variable_item_list_set_enter_callback( + variable_item_list, genie_config_ok_button, genie_config); + view_set_previous_callback( + variable_item_list_get_view(variable_item_list), genie_navigation_submenu_callback); + + VariableItem* item = variable_item_list_add( + variable_item_list, + "Frequency", + COUNT_OF(setting_frequency_names), + genie_setting_frequency_change, + app); + uint32_t current_freq = genie_app_get_frequency(app); + uint8_t default_freq_index = 0; + for(size_t i = 0; i < COUNT_OF(setting_frequency_values); i++) { + if(setting_frequency_values[i] == current_freq) { + default_freq_index = i; + break; + } + } + variable_item_set_current_value_index(item, default_freq_index); + variable_item_set_current_value_text(item, setting_frequency_names[default_freq_index]); + genie_app_set_frequency(app, setting_frequency_values[default_freq_index]); + + genie_config->file_item = + variable_item_list_add(variable_item_list, "Genie File", 1, NULL, app); + genie_config_update_file_item(genie_config); + + return genie_config; +} + +void genie_config_free(GenieConfig* genie_config) { + furi_assert(genie_config); + furi_assert(genie_config->variable_item_list); + furi_thread_flags_set(furi_thread_get_id(genie_config->thread), 2); + furi_thread_join(genie_config->thread); + furi_thread_free(genie_config->thread); + variable_item_list_free(genie_config->variable_item_list); + furi_string_free(genie_config->tmp); + genie_config->tmp = NULL; + genie_config->variable_item_list = NULL; + genie_config->app = NULL; + free(genie_config); + furi_record_close(RECORD_DIALOGS); +} + +View* genie_config_get_view(GenieConfig* genie_config) { + furi_assert(genie_config); + furi_assert(genie_config->variable_item_list); + return variable_item_list_get_view(genie_config->variable_item_list); +} \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_config.h b/subghz/apps/genie-recorder/genie_config.h new file mode 100644 index 0000000..ea93489 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_config.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +typedef struct GenieConfig GenieConfig; +typedef struct GenieApp GenieApp; + +GenieConfig* genie_config_alloc(GenieApp* app); +void genie_config_free(GenieConfig* genie_config); +View* genie_config_get_view(GenieConfig* genie_config); + +bool select_genie_file(GenieConfig* config); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_file.c b/subghz/apps/genie-recorder/genie_file.c index 6dd264f..635f7e3 100644 --- a/subghz/apps/genie-recorder/genie_file.c +++ b/subghz/apps/genie-recorder/genie_file.c @@ -1,3 +1,5 @@ +#include "genie_file.h" + #include #include @@ -19,6 +21,13 @@ #endif #define TAG "GenieFile" +struct GenieFile { + uint32_t key_hi; + uint32_t key_lo; // sn + uint16_t last_sent; + uint16_t rec_count; +}; + static void ensure_dir_exists(Storage* storage, char* dir) { if(!storage_dir_exists(storage, dir)) { FURI_LOG_I(TAG, "Creating directory: %s", dir); @@ -83,7 +92,7 @@ enum { GENIE_REC_COUNT = 10, // 2 bytes GENIE_RESERVED = 12, // 4 bytes GENIE_DATA = 16, // 64K bytes -} genie_file; +} genie_file_layout; static void genie_create_file(Storage* storage, char* name, uint32_t low) { File* file = storage_file_alloc(storage); @@ -120,6 +129,181 @@ static uint32_t hex_to_i32(const char* data) { return value; } +GenieFile* genie_file_load(const char* path) { + GenieFile* genie_file = malloc(sizeof(GenieFile)); + memset(genie_file, 0, sizeof(GenieFile)); + bool load_success = false; + Storage* storage = furi_record_open(RECORD_STORAGE); + + File* file = NULL; + do { + if(!storage) { + FURI_LOG_E(TAG, "Failed to access storage."); + break; + } + + file = storage_file_alloc(storage); + if(!file) { + FURI_LOG_E(TAG, "Failed to allocate file."); + break; + } + + if(!storage_file_exists(storage, path)) { + FURI_LOG_D(TAG, "File does not exist: %s", path); + break; + } + + if(storage_file_open(file, path, FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) { + if(!storage_file_seek(file, GENIE_VERSION, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_VERSION @ %d", GENIE_VERSION); + break; + } + + uint16_t version = storage_file_read16(file); + if((version >> 8) > GENIE_MAJOR_VERSION) { + FURI_LOG_E(TAG, "Unsupported version: %04X", version); + break; + } + + if(!storage_file_seek(file, GENIE_SN, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_SN @ %d", GENIE_SN); + break; + } + genie_file->key_lo = storage_file_read32(file); + + if(!storage_file_seek(file, GENIE_LAST_SENT, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_LAST_SENT @ %d", GENIE_LAST_SENT); + break; + } + genie_file->last_sent = storage_file_read16(file); + + if(!storage_file_seek(file, GENIE_REC_COUNT, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_REC_COUNT @ %d", GENIE_REC_COUNT); + break; + } + genie_file->rec_count = storage_file_read16(file); + + if(!storage_file_seek(file, GENIE_DATA + (genie_file->last_sent * 4), true)) { + FURI_LOG_E( + TAG, + "Failed to seek to GENIE_DATA+last_sent*4 @ %d", + GENIE_DATA + (genie_file->last_sent * 4)); + break; + } + genie_file->key_hi = storage_file_read32(file); + + load_success = true; + } + } while(false); + + if(file) { + storage_file_close(file); + storage_file_free(file); + } + + furi_record_close(RECORD_STORAGE); + + if(!load_success) { + free(genie_file); + genie_file = NULL; + } + + return genie_file; +} + +void genie_file_free(GenieFile* file) { + if(file) { + free(file); + } +} + +uint32_t genie_file_get_key_hi(GenieFile* file) { + return file ? file->key_hi : 0; +} + +uint32_t genie_file_get_key_lo(GenieFile* file) { + return file ? file->key_lo : 0; +} + +uint16_t genie_file_get_last_sent(GenieFile* file) { + return file ? file->last_sent : 0; +} + +void genie_file_set_last_sent(const char* genie_path, uint16_t last_sent) { + if(genie_path) { + Storage* storage = furi_record_open(RECORD_STORAGE); + + File* file = NULL; + do { + if(!storage) { + FURI_LOG_E(TAG, "Failed to access storage."); + break; + } + + file = storage_file_alloc(storage); + if(!file) { + FURI_LOG_E(TAG, "Failed to allocate file."); + break; + } + + if(!storage_file_exists(storage, genie_path)) { + FURI_LOG_D(TAG, "File not found: %s", genie_path); + break; + } + + if(storage_file_open(file, genie_path, FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) { + if(!storage_file_seek(file, GENIE_VERSION, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_VERSION @ %d", GENIE_VERSION); + break; + } + uint16_t version = storage_file_read16(file); + if((version >> 8) > GENIE_MAJOR_VERSION) { + FURI_LOG_E(TAG, "Unsupported version: %04X", version); + break; + } + + if(!storage_file_seek(file, GENIE_LAST_SENT, true)) { + FURI_LOG_E(TAG, "Failed to seek to GENIE_LAST_SENT @ %d", GENIE_LAST_SENT); + break; + } + + if(!storage_file_write16(file, last_sent)) { + FURI_LOG_E(TAG, "Failed to set last sent count to %d.", last_sent); + break; + } + } else { + FURI_LOG_E(TAG, "Failed to open file"); + break; + } + } while(false); + + if(file) { + storage_file_close(file); + storage_file_free(file); + } + + furi_record_close(RECORD_STORAGE); + } +} + +uint16_t genie_file_get_rec_count(GenieFile* file) { + return file ? file->rec_count : 0; +} + +uint16_t genie_rec_count_bin(uint32_t key_low) { + uint16_t count = 0; + + char buffer[128] = {0}; + snprintf(buffer, 128, "%s/%08lX.gne", GENIE_SAVE_FOLDER, key_low); + GenieFile* file = genie_file_load(buffer); + if(file) { + count = file->rec_count; + genie_file_free(file); + } + + return count; +} + uint32_t genie_save_bin(const char* key) { uint32_t result = 0; uint32_t key_high = 0; @@ -288,9 +472,10 @@ bool genie_save(uint32_t count, FuriString* key) { uint32_t genie_load() { uint32_t count = 0; + uint32_t key_hi = 0; + uint32_t key_lo = 0; Storage* storage = furi_record_open(RECORD_STORAGE); FuriString* buffer = furi_string_alloc(); - File* file = NULL; do { if(!storage) { @@ -310,9 +495,18 @@ uint32_t genie_load() { char data[8 + 1 + 16 + 2 + 1] = {0}; + int64_t offset = ((int64_t)storage_file_size(file)) - 120; + if(offset > 0) { + storage_file_seek(file, offset, true); + do { + storage_file_read(file, data, 1); + } while(data[0] != '\n'); + } + while(storage_file_read(file, data, 8 + 1 + 16 + 2)) { - sscanf(data, "%08lX", &count); - FURI_LOG_D(TAG, "Read: %s, count: %ld", data, count); + sscanf(data, "%08lX,%08lX%08lX", &count, &key_hi, &key_lo); + FURI_LOG_D( + TAG, "Read: %s, count: %ld, hi: %08lx, lo: %08lx", data, count, key_hi, key_lo); } } } while(false); @@ -324,5 +518,13 @@ uint32_t genie_load() { furi_string_free(buffer); furi_record_close(RECORD_STORAGE); + + if(key_lo) { + uint16_t count_bin = genie_rec_count_bin(key_lo); + if(count_bin > 0) { + count = count_bin; + } + } + return count; } \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_file.h b/subghz/apps/genie-recorder/genie_file.h index 77d3531..765a49a 100644 --- a/subghz/apps/genie-recorder/genie_file.h +++ b/subghz/apps/genie-recorder/genie_file.h @@ -2,6 +2,16 @@ #include +typedef struct GenieFile GenieFile; + +GenieFile* genie_file_load(const char* path); +void genie_file_free(GenieFile* file); +uint32_t genie_file_get_key_hi(GenieFile* file); +uint32_t genie_file_get_key_lo(GenieFile* file); +uint16_t genie_file_get_last_sent(GenieFile* file); +uint16_t genie_file_get_rec_count(GenieFile* file); +void genie_file_set_last_sent(const char* genie_path, uint16_t last_sent); + bool genie_save(uint32_t count, FuriString* key); uint32_t genie_save_bin(const char* key); uint32_t genie_load(); diff --git a/subghz/apps/genie-recorder/genie_ini.c b/subghz/apps/genie-recorder/genie_ini.c new file mode 100644 index 0000000..f05129c --- /dev/null +++ b/subghz/apps/genie-recorder/genie_ini.c @@ -0,0 +1,79 @@ +#include "genie_ini.h" +#include "genie_app.h" + +#include +#include + +#define GENIE_SETTINGS_FILE EXT_PATH("apps_data") "/genie/genie.txt" +#define GENIE_SETTINGS_NAME "Genie settings file" +#define GENIE_SETTINGS_VERSION 1 + +#define TAG "GenieIni" + +FlipperFormat* ff; + +void genie_ini_load(GenieApp* app) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FuriString* buf = furi_string_alloc(); + + ff = flipper_format_buffered_file_alloc(storage); + do { + uint32_t format_version; + if(!flipper_format_buffered_file_open_existing(ff, GENIE_SETTINGS_FILE)) { + FURI_LOG_E(TAG, "Failed to open settings file: %s", GENIE_SETTINGS_FILE); + break; + } + if(!flipper_format_read_header(ff, buf, &format_version)) { + FURI_LOG_E(TAG, "Failed to read settings header."); + break; + } + if(furi_string_cmp_str(buf, GENIE_SETTINGS_NAME) || + format_version != GENIE_SETTINGS_VERSION) { + FURI_LOG_E( + TAG, "Unsupported file. `%s` v`%ld`", furi_string_get_cstr(buf), format_version); + break; + } + + uint32_t frequency; + flipper_format_read_uint32(ff, "frequency", &frequency, 1); + genie_app_set_frequency(app, frequency); + + FuriString* buf = furi_string_alloc(); + if(flipper_format_read_string(ff, "path", buf)) { + genie_app_update_file_path(app, furi_string_get_cstr(buf)); + } + } while(false); + + flipper_format_buffered_file_close(ff); + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + furi_string_free(buf); +} + +void genie_ini_save(GenieApp* app) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FuriString* buf = furi_string_alloc(); + + ff = flipper_format_buffered_file_alloc(storage); + do { + if(!flipper_format_buffered_file_open_always(ff, GENIE_SETTINGS_FILE)) { + FURI_LOG_E(TAG, "Failed to open settings file: %s", GENIE_SETTINGS_FILE); + break; + } + if(!flipper_format_write_header_cstr(ff, GENIE_SETTINGS_NAME, GENIE_SETTINGS_VERSION)) { + FURI_LOG_E(TAG, "Failed to write settings header."); + break; + } + + uint32_t frequency = genie_app_get_frequency(app); + flipper_format_write_uint32(ff, "frequency", &frequency, 1); + + const char* path = genie_app_get_file_path(app); + flipper_format_write_string_cstr(ff, "path", path); + } while(false); + + flipper_format_buffered_file_close(ff); + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + furi_string_free(buf); +} diff --git a/subghz/apps/genie-recorder/genie_ini.h b/subghz/apps/genie-recorder/genie_ini.h new file mode 100644 index 0000000..f107d3e --- /dev/null +++ b/subghz/apps/genie-recorder/genie_ini.h @@ -0,0 +1,6 @@ +#pragma once + +typedef struct GenieApp GenieApp; + +void genie_ini_load(GenieApp* app); +void genie_ini_save(GenieApp* app); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_learn.c b/subghz/apps/genie-recorder/genie_learn.c new file mode 100644 index 0000000..1bc8a3b --- /dev/null +++ b/subghz/apps/genie-recorder/genie_learn.c @@ -0,0 +1,129 @@ +#include "genie_learn.h" +#include "genie_app.h" +#include "genie_submenu.h" +#include "genie_subghz_receive.h" +#include "genie_file.h" + +#ifdef TAG +#undef TAG +#endif +#define TAG "GenieLearn" + +typedef struct GenieApp GenieApp; + +typedef struct { + GenieApp* ref; +} GenieAppRef; + +#define CLICK_SPEED 2000 + +static void genie_learn_draw_callback(Canvas* canvas, void* model) { + GenieApp* app = ((GenieAppRef*)model)->ref; + canvas_set_font(canvas, FontPrimary); + canvas_draw_str(canvas, 5, 10, "Genie Sub-Ghz Recorder!!!"); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 5, 20, "A7/GND to Genie remote"); + char buffer[30] = {0}; + snprintf(buffer, COUNT_OF(buffer), "Click %ld", genie_app_get_click_counter(app)); + canvas_draw_str(canvas, 1, 40, buffer); + uint32_t count = genie_app_get_save_counter(app); + if(count == 0) { + snprintf(buffer, COUNT_OF(buffer), "Prev %ld", genie_app_get_rx_counter(app)); + } else { + snprintf(buffer, COUNT_OF(buffer), "Got %ld", count); + } + canvas_draw_str(canvas, 75, 40, buffer); + + if(count < 0x10000) { + uint32_t remaining; + if(count == 0) { + remaining = 65536 - genie_app_get_rx_counter(app); + } else { + remaining = 65536 - count; + } + snprintf(buffer, COUNT_OF(buffer), "Remaining codes %ld", remaining); + canvas_draw_str(canvas, 1, 30, buffer); + } else { + canvas_draw_str(canvas, 1, 30, "Found all codes!"); + } + + canvas_draw_str(canvas, 5, 50, furi_string_get_cstr(genie_app_get_key(app))); + + if(genie_app_has_no_signal(app)) { + canvas_draw_str(canvas, 1, 60, "NO SIGNAL FROM REMOTE?"); + } else if(genie_app_is_sending_signal(app)) { + canvas_draw_str(canvas, 100, 60, "SEND"); + } +} + +static bool genie_learn_input_callback(InputEvent* event, void* context) { + UNUSED(context); + UNUSED(event); + return false; +} + +static uint32_t save_count(uint32_t count, FuriString* key, bool is_genie) { + FURI_LOG_D(TAG, "%ld,%s", count, furi_string_get_cstr(key)); + genie_save(count, key); + if(is_genie) { + return genie_save_bin(furi_string_get_cstr(key)); + } + + return 0; +} + +static void genie_packet(FuriString* buffer, void* context) { + GenieApp* app = (GenieApp*)context; + genie_app_set_processing_packet(app, true); + if(furi_string_search_str(buffer, "Genie 64bit") < furi_string_size(buffer)) { + release_button(app); + FURI_LOG_D(TAG, "Genie 64bit packet"); + size_t key_index = furi_string_search_str(buffer, "Key:"); + if(key_index < furi_string_size(buffer)) { + genie_app_received_key(app, buffer); + uint32_t click_counter = genie_app_get_click_counter(app); + FuriString* key = genie_app_get_key(app); + uint32_t num_saved = save_count(click_counter, key, true); + genie_app_update_save_counter(app, num_saved); + } + } + + genie_app_set_processing_packet(app, false); +} + +static void genie_learn_enter_callback(void* context) { + GenieApp* app = (GenieApp*)context; + genie_file_init(); + uint32_t frequency = genie_app_get_frequency(app); + GenieSubGhz* subghz = genie_app_get_subghz(app); + start_listening(subghz, frequency, genie_packet, context); + genie_app_start_timer(app, CLICK_SPEED); +} + +static void genie_learn_exit_callback(void* context) { + GenieApp* app = (GenieApp*)context; + genie_app_set_processing_packet(app, false); + release_button(app); + GenieSubGhz* subghz = genie_app_get_subghz(app); + stop_listening(subghz); + genie_app_stop_timer(app); +} + +View* genie_learn_alloc(void* app) { + View* view = view_alloc(); + view_set_draw_callback(view, genie_learn_draw_callback); + view_set_input_callback(view, genie_learn_input_callback); + view_set_previous_callback(view, genie_navigation_submenu_callback); + view_set_context(view, app); + view_set_enter_callback(view, genie_learn_enter_callback); + view_set_exit_callback(view, genie_learn_exit_callback); + view_allocate_model(view, ViewModelTypeLockFree, sizeof(GenieAppRef)); + GenieAppRef* r = (GenieAppRef*)view_get_model(view); + r->ref = app; + + return view; +} + +void genie_learn_free(View* view) { + view_free(view); +} \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_learn.h b/subghz/apps/genie-recorder/genie_learn.h new file mode 100644 index 0000000..2e64a04 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_learn.h @@ -0,0 +1,10 @@ +#pragma once + +#include +#include +#include +#include + +View* genie_learn_alloc(void* app); + +void genie_learn_free(View* view); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_send.c b/subghz/apps/genie-recorder/genie_send.c new file mode 100644 index 0000000..b8e889c --- /dev/null +++ b/subghz/apps/genie-recorder/genie_send.c @@ -0,0 +1,259 @@ +#include "genie_send.h" + +#include "genie_app.h" +#include "genie_submenu.h" +#include "genie_subghz_receive.h" +#include "genie_file.h" + +#include +#include + +#ifdef TAG +#undef TAG +#endif +#define TAG "GenieSend" + +typedef struct GenieSend GenieSend; + +struct GenieSend { + View* view; +}; + +typedef struct { + GenieApp* app; + GenieFile* file; + bool loaded; +} GenieRefs; + +static void + set_genie(FlipperFormat* flipper_format, uint32_t key_hi, uint32_t key_lo, uint32_t repeat) { + FuriString* genie_settings = furi_string_alloc_printf( + "Protocol: Genie\n" + "Bit: 64\n" + "Key: %02X %02X %02X %02X %02X %02X %02X %02X\n" + "Increment: 0\n" + "Repeat: %lu\n", + (uint8_t)((key_hi >> 24) & 0xFFU), + (uint8_t)((key_hi >> 16) & 0xFFU), + (uint8_t)((key_hi >> 8) & 0xFFU), + (uint8_t)((key_hi) & 0xFFU), + (uint8_t)((key_lo >> 24) & 0xFFU), + (uint8_t)((key_lo >> 16) & 0xFFU), + (uint8_t)((key_lo >> 8) & 0xFFU), + (uint8_t)((key_lo) & 0xFFU), + repeat); + Stream* stream = flipper_format_get_raw_stream(flipper_format); + stream_clean(stream); + stream_write_cstring(stream, furi_string_get_cstr(genie_settings)); + stream_seek(stream, 0, StreamOffsetFromStart); + furi_string_free(genie_settings); +} + +const SubGhzProtocol* send_subghz_protocol_registry_items[] = { + &subghz_protocol_genie, +}; + +const SubGhzProtocolRegistry send_subghz_protocol_registry = { + .items = send_subghz_protocol_registry_items, + .size = COUNT_OF(send_subghz_protocol_registry_items)}; + +static void send_genie(uint32_t key_hi, uint32_t key_lo, uint32_t frequency) { + uint32_t repeat = 5; + const SubGhzDevice* device; + + subghz_devices_init(); + device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_INT_NAME); + SubGhzEnvironment* environment = subghz_environment_alloc(); + subghz_environment_set_protocol_registry(environment, (void*)&send_subghz_protocol_registry); + SubGhzTransmitter* transmitter = subghz_transmitter_alloc_init(environment, "Genie"); + FlipperFormat* flipper_format = flipper_format_string_alloc(); + set_genie(flipper_format, key_hi, key_lo, repeat); + subghz_transmitter_deserialize(transmitter, flipper_format); + subghz_devices_begin(device); + subghz_devices_reset(device); + subghz_devices_load_preset(device, FuriHalSubGhzPresetOok650Async, NULL); + frequency = subghz_devices_set_frequency(device, frequency); + + // Send + furi_hal_power_suppress_charge_enter(); + if(subghz_devices_start_async_tx(device, subghz_transmitter_yield, transmitter)) { + while(!(subghz_devices_is_async_complete_tx(device))) { + furi_delay_ms(100); + } + subghz_devices_stop_async_tx(device); + } + + // Cleanup + subghz_devices_sleep(device); + subghz_devices_end(device); + subghz_devices_deinit(); + furi_hal_power_suppress_charge_exit(); + flipper_format_free(flipper_format); + subghz_transmitter_free(transmitter); + subghz_environment_free(environment); +} + +static void genie_send_draw_callback(Canvas* canvas, void* model) { + GenieRefs* refs = (GenieRefs*)model; + GenieFile* file = refs->file; + char buffer[36] = {0}; + + canvas_set_font(canvas, FontPrimary); + canvas_draw_str(canvas, 5, 10, "Genie Sub-Ghz Sender!!!"); + canvas_set_font(canvas, FontSecondary); + if(refs->loaded) { + if(!file) { + return; + } + snprintf( + buffer, + COUNT_OF(buffer), + "KEY: %08lx %08lx", + genie_file_get_key_hi(file), + genie_file_get_key_lo(file)); + canvas_draw_str(canvas, 1, 23, buffer); + + if(genie_file_get_rec_count(file) < 0xFFFD) { + snprintf( + buffer, + COUNT_OF(buffer), + "Last sent: %d of %d", + genie_file_get_last_sent(file), + genie_file_get_rec_count(file)); + canvas_draw_str(canvas, 1, 33, buffer); + + snprintf(buffer, COUNT_OF(buffer), "Remote not fully captured!"); + canvas_draw_str(canvas, 1, 49, buffer); + } else { + snprintf(buffer, COUNT_OF(buffer), "Last sent: %d", genie_file_get_last_sent(file)); + canvas_draw_str(canvas, 1, 33, buffer); + } + + // TODO: Is this off by 1? + if(genie_file_get_last_sent(file) < genie_file_get_rec_count(file)) { + canvas_draw_str(canvas, 1, 63, "Press OK to send next code."); + } else { + canvas_draw_str(canvas, 1, 61, "Long press OK to reset code."); + } + } else { + canvas_draw_str(canvas, 20, 36, "NO .GNE FILE LOADED"); + } +} + +static void genie_send_refresh_file(View* view) { + with_view_model( + view, + GenieRefs * refs, + { + const char* path = genie_app_get_file_path(refs->app); + if(refs->file) { + genie_file_free(refs->file); + refs->file = NULL; + } + refs->file = genie_file_load(path); + }, + true); +} + +static bool genie_send_input_callback(InputEvent* event, void* context) { + View* view = (View*)context; + genie_send_refresh_file(view); + + if(event->type == InputTypeShort) { + if(event->key == InputKeyOk) { + with_view_model( + view, + GenieRefs * refs, + { + if(refs->file) { + if(genie_file_get_last_sent(refs->file) < + genie_file_get_rec_count(refs->file)) { + send_genie( + genie_file_get_key_hi(refs->file), + genie_file_get_key_lo(refs->file), + genie_app_get_frequency(refs->app)); + + genie_file_set_last_sent( + genie_app_get_file_path(refs->app), + genie_file_get_last_sent(refs->file) + 1); + genie_send_refresh_file(view); + } + } + }, + false); + return true; + } + } else if(event->type == InputTypeLong) { + with_view_model( + view, + GenieRefs * refs, + { + if(refs->file) { + if(genie_file_get_last_sent(refs->file) >= + genie_file_get_rec_count(refs->file)) { + genie_file_set_last_sent(genie_app_get_file_path(refs->app), 0); + genie_send_refresh_file(view); + } + } + }, + true); + return true; + } + + return false; +} + +static void genie_send_enter_callback(void* context) { + View* view = (View*)context; + + with_view_model( + view, + GenieRefs * refs, + { + const char* path = genie_app_get_file_path(refs->app); + refs->file = genie_file_load(path); + refs->loaded = refs->file != NULL; + }, + false); +} + +GenieSend* genie_send_alloc(GenieApp* app) { + UNUSED(app); + GenieSend* genie_send = malloc(sizeof(GenieSend)); + View* view = view_alloc(); + genie_send->view = view; + view_set_draw_callback(view, genie_send_draw_callback); + view_set_input_callback(view, genie_send_input_callback); + view_set_previous_callback(view, genie_navigation_submenu_callback); + view_set_enter_callback(view, genie_send_enter_callback); + view_set_context(view, view); + view_allocate_model(view, ViewModelTypeLockFree, sizeof(GenieRefs)); + GenieRefs* refs = (GenieRefs*)view_get_model(view); + refs->app = app; + refs->file = NULL; + refs->loaded = false; + + return genie_send; +} + +void genie_send_free(GenieSend* genie_send) { + furi_assert(genie_send); + furi_assert(genie_send->view); + with_view_model( + genie_send->view, + GenieRefs * refs, + { + genie_file_free(refs->file); + refs->file = NULL; + }, + false); + view_free(genie_send->view); + genie_send->view = NULL; + free(genie_send); +} + +View* genie_send_get_view(GenieSend* genie_send) { + furi_assert(genie_send); + furi_assert(genie_send->view); + return genie_send->view; +} \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_send.h b/subghz/apps/genie-recorder/genie_send.h new file mode 100644 index 0000000..3a487ed --- /dev/null +++ b/subghz/apps/genie-recorder/genie_send.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +typedef struct GenieApp GenieApp; +typedef struct GenieSend GenieSend; + +GenieSend* genie_send_alloc(GenieApp* app); +void genie_send_free(GenieSend* genie_send); +View* genie_send_get_view(GenieSend* genie_send); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_subghz_receive.c b/subghz/apps/genie-recorder/genie_subghz_receive.c index 58f323b..b301617 100644 --- a/subghz/apps/genie-recorder/genie_subghz_receive.c +++ b/subghz/apps/genie-recorder/genie_subghz_receive.c @@ -5,17 +5,17 @@ #endif #define TAG "GenieSubGHzReceive" +const SubGhzProtocol* subghz_protocol_registry_item_genie[] = { + &subghz_protocol_genie, +}; + +const SubGhzProtocolRegistry subghz_protocol_registry_genie = { + .items = subghz_protocol_registry_item_genie, + .size = COUNT_OF(subghz_protocol_registry_item_genie)}; + static SubGhzEnvironment* load_environment() { SubGhzEnvironment* environment = subghz_environment_alloc(); - subghz_environment_load_keystore(environment, SUBGHZ_KEYSTORE_DIR_NAME); - subghz_environment_load_keystore(environment, SUBGHZ_KEYSTORE_DIR_USER_NAME); - subghz_environment_set_came_atomo_rainbow_table_file_name( - environment, SUBGHZ_CAME_ATOMO_DIR_NAME); - subghz_environment_set_alutech_at_4n_rainbow_table_file_name( - environment, SUBGHZ_ALUTECH_AT_4N_DIR_NAME); - subghz_environment_set_nice_flor_s_rainbow_table_file_name( - environment, SUBGHZ_NICE_FLOR_S_DIR_NAME); - subghz_environment_set_protocol_registry(environment, (void*)&subghz_protocol_registry); + subghz_environment_set_protocol_registry(environment, (void*)&subghz_protocol_registry_genie); return environment; } diff --git a/subghz/apps/genie-recorder/genie_subghz_receive.h b/subghz/apps/genie-recorder/genie_subghz_receive.h index f880d80..1c55f56 100644 --- a/subghz/apps/genie-recorder/genie_subghz_receive.h +++ b/subghz/apps/genie-recorder/genie_subghz_receive.h @@ -4,9 +4,9 @@ #include #include -#include #include #include +#include "protocols/genie.h" typedef void (*SubghzPacketCallback)(FuriString* buffer, void* context); @@ -18,7 +18,9 @@ typedef enum { SUBGHZ_RECEIVER_UNINITIALIZED, } SubghzReceiverState; -typedef struct { +typedef struct GenieSubGhz GenieSubGhz; + +struct GenieSubGhz { SubGhzEnvironment* environment; FuriStreamBuffer* stream; FuriThread* thread; @@ -27,7 +29,7 @@ typedef struct { SubghzReceiverState status; SubghzPacketCallback callback; void* callback_context; -} GenieSubGhz; +}; GenieSubGhz* genie_subghz_alloc(); void genie_subghz_free(GenieSubGhz* subghz); diff --git a/subghz/apps/genie-recorder/genie_submenu.c b/subghz/apps/genie-recorder/genie_submenu.c new file mode 100644 index 0000000..3ec5937 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_submenu.c @@ -0,0 +1,97 @@ +#include "genie_submenu.h" + +#include +#include "genie_app.h" + +#include "genie_config.h" + +typedef struct GenieApp GenieApp; + +struct GenieSubmenu { + Submenu* submenu; +}; + +typedef enum { + GenieSubmenuIndexSend, + GenieSubmenuIndexConfig, + GenieSubmenuIndexLearn, + GenieSubmenuIndexAbout, +} GenieSubmenuIndex; + +typedef enum { + GenieViewSubmenu, + GenieViewSend, + GenieViewConfig, + GenieViewLearn, + GenieViewAbout, +} GenieView; + +/** + * @brief Callback for navigation events + * @details This function is called when user press back button. We return VIEW_NONE to + * indicate that we want to exit the application. + * @param context The context + * @return next view id +*/ +uint32_t genie_navigation_submenu_callback(void* context) { + UNUSED(context); + return GenieViewSubmenu; +} + +/** + * @brief Callback for navigation events + * @details This function is called when user press back button. We return VIEW_NONE to + * indicate that we want to exit the application. + * @param context The context + * @return next view id +*/ +static uint32_t genie_navigation_exit_callback(void* context) { + UNUSED(context); + return VIEW_NONE; +} + +static void genie_submenu_callback(void* context, uint32_t index) { + GenieApp* app = (GenieApp*)context; + ViewDispatcher* view_dispatcher = genie_app_get_view_dispatcher(app); + switch(index) { + case GenieSubmenuIndexSend: + view_dispatcher_switch_to_view(view_dispatcher, GenieViewSend); + break; + case GenieSubmenuIndexConfig: { + view_dispatcher_switch_to_view(view_dispatcher, GenieViewConfig); + break; + } + case GenieSubmenuIndexLearn: + view_dispatcher_switch_to_view(view_dispatcher, GenieViewLearn); + break; + case GenieSubmenuIndexAbout: + view_dispatcher_switch_to_view(view_dispatcher, GenieViewAbout); + break; + default: + break; + } +} + +GenieSubmenu* genie_submenu_alloc(GenieApp* app) { + GenieSubmenu* genie_submenu = malloc(sizeof(GenieSubmenu)); + Submenu* submenu = submenu_alloc(); + genie_submenu->submenu = submenu; + submenu_add_item(submenu, "Send", GenieSubmenuIndexSend, genie_submenu_callback, app); + submenu_add_item(submenu, "Config", GenieSubmenuIndexConfig, genie_submenu_callback, app); + submenu_add_item(submenu, "Learn", GenieSubmenuIndexLearn, genie_submenu_callback, app); + submenu_add_item(submenu, "About", GenieSubmenuIndexAbout, genie_submenu_callback, app); + view_set_previous_callback(submenu_get_view(submenu), genie_navigation_exit_callback); + return genie_submenu; +} + +View* genie_submenu_get_view(GenieSubmenu* genie_submenu) { + furi_assert(genie_submenu); + furi_assert(genie_submenu->submenu); + return submenu_get_view(genie_submenu->submenu); +} + +void genie_submenu_free(GenieSubmenu* genie_submenu) { + submenu_free(genie_submenu->submenu); + genie_submenu->submenu = NULL; + free(genie_submenu); +} \ No newline at end of file diff --git a/subghz/apps/genie-recorder/genie_submenu.h b/subghz/apps/genie-recorder/genie_submenu.h new file mode 100644 index 0000000..03a7b58 --- /dev/null +++ b/subghz/apps/genie-recorder/genie_submenu.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include +#include + +typedef struct GenieSubmenu GenieSubmenu; +typedef struct GenieApp GenieApp; + +uint32_t genie_navigation_submenu_callback(void* context); +GenieSubmenu* genie_submenu_alloc(GenieApp* app); +View* genie_submenu_get_view(GenieSubmenu* submenu); +void genie_submenu_free(GenieSubmenu* submenu); \ No newline at end of file diff --git a/subghz/apps/genie-recorder/protocols/generic.c b/subghz/apps/genie-recorder/protocols/generic.c new file mode 100644 index 0000000..f59323d --- /dev/null +++ b/subghz/apps/genie-recorder/protocols/generic.c @@ -0,0 +1,151 @@ +#include "generic.h" +#include +#include + +#define TAG "SubGhzBlockGeneric" + +void subghz_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str) { + const char* preset_name_temp; + if(!strcmp(preset_name, "AM270")) { + preset_name_temp = "FuriHalSubGhzPresetOok270Async"; + } else if(!strcmp(preset_name, "AM650")) { + preset_name_temp = "FuriHalSubGhzPresetOok650Async"; + } else if(!strcmp(preset_name, "FM238")) { + preset_name_temp = "FuriHalSubGhzPreset2FSKDev238Async"; + } else if(!strcmp(preset_name, "FM476")) { + preset_name_temp = "FuriHalSubGhzPreset2FSKDev476Async"; + } else { + preset_name_temp = "FuriHalSubGhzPresetCustom"; + } + furi_string_set(preset_str, preset_name_temp); +} + +SubGhzProtocolStatus subghz_block_generic_serialize( + SubGhzBlockGeneric* instance, + FlipperFormat* flipper_format, + SubGhzRadioPreset* preset) { + furi_assert(instance); + SubGhzProtocolStatus res = SubGhzProtocolStatusError; + FuriString* temp_str; + temp_str = furi_string_alloc(); + do { + stream_clean(flipper_format_get_raw_stream(flipper_format)); + if(!flipper_format_write_header_cstr( + flipper_format, SUBGHZ_KEY_FILE_TYPE, SUBGHZ_KEY_FILE_VERSION)) { + FURI_LOG_E(TAG, "Unable to add header"); + res = SubGhzProtocolStatusErrorParserHeader; + break; + } + + if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) { + FURI_LOG_E(TAG, "Unable to add Frequency"); + res = SubGhzProtocolStatusErrorParserFrequency; + break; + } + + subghz_block_generic_get_preset_name(furi_string_get_cstr(preset->name), temp_str); + if(!flipper_format_write_string_cstr( + flipper_format, "Preset", furi_string_get_cstr(temp_str))) { + FURI_LOG_E(TAG, "Unable to add Preset"); + res = SubGhzProtocolStatusErrorParserPreset; + break; + } + if(!strcmp(furi_string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) { + if(!flipper_format_write_string_cstr( + flipper_format, "Custom_preset_module", "CC1101")) { + FURI_LOG_E(TAG, "Unable to add Custom_preset_module"); + res = SubGhzProtocolStatusErrorParserCustomPreset; + break; + } + if(!flipper_format_write_hex( + flipper_format, "Custom_preset_data", preset->data, preset->data_size)) { + FURI_LOG_E(TAG, "Unable to add Custom_preset_data"); + res = SubGhzProtocolStatusErrorParserCustomPreset; + break; + } + } + if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) { + FURI_LOG_E(TAG, "Unable to add Protocol"); + res = SubGhzProtocolStatusErrorParserProtocolName; + break; + } + uint32_t temp = instance->data_count_bit; + if(!flipper_format_write_uint32(flipper_format, "Bit", &temp, 1)) { + FURI_LOG_E(TAG, "Unable to add Bit"); + res = SubGhzProtocolStatusErrorParserBitCount; + break; + } + + uint8_t key_data[sizeof(uint64_t)] = {0}; + for(size_t i = 0; i < sizeof(uint64_t); i++) { + key_data[sizeof(uint64_t) - i - 1] = (instance->data >> (i * 8)) & 0xFF; + } + + if(!flipper_format_write_hex(flipper_format, "Key", key_data, sizeof(uint64_t))) { + FURI_LOG_E(TAG, "Unable to add Key"); + res = SubGhzProtocolStatusErrorParserKey; + break; + } + res = SubGhzProtocolStatusOk; + } while(false); + furi_string_free(temp_str); + return res; +} + +SubGhzProtocolStatus + subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format) { + furi_assert(instance); + SubGhzProtocolStatus res = SubGhzProtocolStatusError; + FuriString* temp_str; + temp_str = furi_string_alloc(); + uint32_t temp_data = 0; + + do { + if(!flipper_format_rewind(flipper_format)) { + FURI_LOG_E(TAG, "Rewind error"); + res = SubGhzProtocolStatusErrorParserOthers; + break; + } + if(!flipper_format_read_uint32(flipper_format, "Bit", (uint32_t*)&temp_data, 1)) { + FURI_LOG_E(TAG, "Missing Bit"); + res = SubGhzProtocolStatusErrorParserBitCount; + break; + } + instance->data_count_bit = (uint16_t)temp_data; + + uint8_t key_data[sizeof(uint64_t)] = {0}; + if(!flipper_format_read_hex(flipper_format, "Key", key_data, sizeof(uint64_t))) { + FURI_LOG_E(TAG, "Missing Key"); + res = SubGhzProtocolStatusErrorParserKey; + break; + } + for(uint8_t i = 0; i < sizeof(uint64_t); i++) { + instance->data = instance->data << 8 | key_data[i]; + } + + res = SubGhzProtocolStatusOk; + } while(0); + + furi_string_free(temp_str); + + return res; +} + +SubGhzProtocolStatus subghz_block_generic_deserialize_check_count_bit( + SubGhzBlockGeneric* instance, + FlipperFormat* flipper_format, + uint16_t count_bit) { + SubGhzProtocolStatus ret = SubGhzProtocolStatusError; + do { + ret = subghz_block_generic_deserialize(instance, flipper_format); + if(ret != SubGhzProtocolStatusOk) { + break; + } + if(instance->data_count_bit != count_bit) { + FURI_LOG_E(TAG, "Wrong number of bits in key"); + ret = SubGhzProtocolStatusErrorValueBitCount; + break; + } + } while(false); + return ret; +} \ No newline at end of file diff --git a/subghz/apps/genie-recorder/protocols/generic.h b/subghz/apps/genie-recorder/protocols/generic.h new file mode 100644 index 0000000..e873083 --- /dev/null +++ b/subghz/apps/genie-recorder/protocols/generic.h @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SubGhzBlockGeneric SubGhzBlockGeneric; + +struct SubGhzBlockGeneric { + const char* protocol_name; + uint64_t data; + uint32_t serial; + uint16_t data_count_bit; + uint8_t btn; + uint32_t cnt; +}; + +/** + * Get name preset. + * @param preset_name name preset + * @param preset_str Output name preset + */ +void subghz_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str); + +/** + * Serialize data SubGhzBlockGeneric. + * @param instance Pointer to a SubGhzBlockGeneric instance + * @param flipper_format Pointer to a FlipperFormat instance + * @param preset The modulation on which the signal was received, SubGhzRadioPreset + * @return Status Error + */ +SubGhzProtocolStatus subghz_block_generic_serialize( + SubGhzBlockGeneric* instance, + FlipperFormat* flipper_format, + SubGhzRadioPreset* preset); + +/** + * Deserialize data SubGhzBlockGeneric. + * @param instance Pointer to a SubGhzBlockGeneric instance + * @param flipper_format Pointer to a FlipperFormat instance + * @return Status Error + */ +SubGhzProtocolStatus + subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format); + +/** + * Deserialize data SubGhzBlockGeneric. + * @param instance Pointer to a SubGhzBlockGeneric instance + * @param flipper_format Pointer to a FlipperFormat instance + * @param count_bit Count bit protocol + * @return Status Error + */ +SubGhzProtocolStatus subghz_block_generic_deserialize_check_count_bit( + SubGhzBlockGeneric* instance, + FlipperFormat* flipper_format, + uint16_t count_bit); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/subghz/apps/genie-recorder/lib/subghz/protocols/genie.c b/subghz/apps/genie-recorder/protocols/genie.c similarity index 96% rename from subghz/apps/genie-recorder/lib/subghz/protocols/genie.c rename to subghz/apps/genie-recorder/protocols/genie.c index 191170e..58de1b1 100644 --- a/subghz/apps/genie-recorder/lib/subghz/protocols/genie.c +++ b/subghz/apps/genie-recorder/protocols/genie.c @@ -15,12 +15,6 @@ #include "genie.h" #include "keeloq_common.h" -#include "../blocks/const.h" -#include "../blocks/decoder.h" -#include "../blocks/encoder.h" -#include "../blocks/generic.h" -#include "../blocks/math.h" - #define TAG "SubGhzProtocolGenie" // Should be major version of supported Genie Recorder (.gne) files @@ -379,12 +373,14 @@ static bool subghz_protocol_genie_gen_data( * @param instance Pointer to a SubGhzProtocolEncoderGenie instance * @return true On success */ -static bool - subghz_protocol_encoder_genie_get_upload(SubGhzProtocolEncoderGenie* instance, uint8_t btn) { +static bool subghz_protocol_encoder_genie_get_upload( + SubGhzProtocolEncoderGenie* instance, + uint8_t btn, + bool counter_up) { furi_assert(instance); // Generate next key - if(!subghz_protocol_genie_gen_data(instance, btn, true)) { + if(!subghz_protocol_genie_gen_data(instance, btn, counter_up)) { return false; } @@ -465,12 +461,21 @@ SubGhzProtocolStatus subghz_protocol_genie_set_sn_and_btn(&instance->generic); + uint32_t increment = 1; + flipper_format_read_uint32(flipper_format, "Increment", (uint32_t*)&increment, 1); + + if(!flipper_format_rewind(flipper_format)) { + FURI_LOG_E(TAG, "Rewind error"); + break; + } + //optional parameter parameter flipper_format_read_uint32( flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1); // Get_upload will generate the next key. - if(!subghz_protocol_encoder_genie_get_upload(instance, instance->generic.btn)) { + if(!subghz_protocol_encoder_genie_get_upload( + instance, instance->generic.btn, increment != 0)) { ret = SubGhzProtocolStatusErrorEncoderGetUpload; break; } @@ -582,10 +587,14 @@ void subghz_protocol_decoder_genie_feed(void* context, bool level, uint32_t dura subghz_protocol_genie_const.te_delta)) { // Found end TX instance->decoder.parser_step = GenieDecoderStepReset; + + FURI_LOG_D(TAG, "Found end TX. Count bit: %d", instance->decoder.decode_count_bit); + // We expect 64-bits of data, but some Intellisense compatible remote send + // 66-bits or 69-bits of data (+5 extra bits). if((instance->decoder.decode_count_bit >= subghz_protocol_genie_const.min_count_bit_for_found) && (instance->decoder.decode_count_bit <= - subghz_protocol_genie_const.min_count_bit_for_found + 2)) { + subghz_protocol_genie_const.min_count_bit_for_found + 5)) { if(instance->generic.data != instance->decoder.decode_data) { instance->generic.data = instance->decoder.decode_data; instance->generic.data_count_bit = diff --git a/subghz/apps/genie-recorder/lib/subghz/protocols/genie.h b/subghz/apps/genie-recorder/protocols/genie.h similarity index 93% rename from subghz/apps/genie-recorder/lib/subghz/protocols/genie.h rename to subghz/apps/genie-recorder/protocols/genie.h index bcec3da..e0476eb 100644 --- a/subghz/apps/genie-recorder/lib/subghz/protocols/genie.h +++ b/subghz/apps/genie-recorder/protocols/genie.h @@ -1,6 +1,12 @@ #pragma once -#include "base.h" +#include +#include +#include +#include +#include +#include +#include "generic.h" #define SUBGHZ_PROTOCOL_GENIE_NAME "Genie" diff --git a/subghz/apps/genie-recorder/protocols/keeloq_common.c b/subghz/apps/genie-recorder/protocols/keeloq_common.c new file mode 100644 index 0000000..e5d6955 --- /dev/null +++ b/subghz/apps/genie-recorder/protocols/keeloq_common.c @@ -0,0 +1,126 @@ +#include "keeloq_common.h" + +#include +#include + +#define bit(x, n) (((x) >> (n)) & 1) +#define g5(x, a, b, c, d, e) \ + (bit(x, a) + bit(x, b) * 2 + bit(x, c) * 4 + bit(x, d) * 8 + bit(x, e) * 16) + +/** Simple Learning Encrypt + * @param data - 0xBSSSCCCC, B(4bit) key, S(10bit) serial&0x3FF, C(16bit) counter + * @param key - manufacture (64bit) + * @return keeloq encrypt data + */ +inline uint32_t subghz_protocol_keeloq_common_encrypt(const uint32_t data, const uint64_t key) { + uint32_t x = data, r; + for(r = 0; r < 528; r++) + x = (x >> 1) ^ ((bit(x, 0) ^ bit(x, 16) ^ (uint32_t)bit(key, r & 63) ^ + bit(KEELOQ_NLF, g5(x, 1, 9, 20, 26, 31))) + << 31); + return x; +} + +/** Simple Learning Decrypt + * @param data - keeloq encrypt data + * @param key - manufacture (64bit) + * @return 0xBSSSCCCC, B(4bit) key, S(10bit) serial&0x3FF, C(16bit) counter + */ +inline uint32_t subghz_protocol_keeloq_common_decrypt(const uint32_t data, const uint64_t key) { + uint32_t x = data, r; + for(r = 0; r < 528; r++) + x = (x << 1) ^ bit(x, 31) ^ bit(x, 15) ^ (uint32_t)bit(key, (15 - r) & 63) ^ + bit(KEELOQ_NLF, g5(x, 0, 8, 19, 25, 30)); + return x; +} + +/** Normal Learning + * @param data - serial number (28bit) + * @param key - manufacture (64bit) + * @return manufacture for this serial number (64bit) + */ +inline uint64_t subghz_protocol_keeloq_common_normal_learning(uint32_t data, const uint64_t key) { + uint32_t k1, k2; + + data &= 0x0FFFFFFF; + data |= 0x20000000; + k1 = subghz_protocol_keeloq_common_decrypt(data, key); + + data &= 0x0FFFFFFF; + data |= 0x60000000; + k2 = subghz_protocol_keeloq_common_decrypt(data, key); + + return ((uint64_t)k2 << 32) | k1; // key - shifrovanoya +} + +/** Secure Learning + * @param data - serial number (28bit) + * @param seed - seed number (32bit) + * @param key - manufacture (64bit) + * @return manufacture for this serial number (64bit) + */ + +inline uint64_t subghz_protocol_keeloq_common_secure_learning( + uint32_t data, + uint32_t seed, + const uint64_t key) { + uint32_t k1, k2; + + data &= 0x0FFFFFFF; + k1 = subghz_protocol_keeloq_common_decrypt(data, key); + k2 = subghz_protocol_keeloq_common_decrypt(seed, key); + + return ((uint64_t)k1 << 32) | k2; +} + +/** Magic_xor_type1 Learning + * @param data - serial number (28bit) + * @param xor - magic xor (64bit) + * @return manufacture for this serial number (64bit) + */ + +inline uint64_t + subghz_protocol_keeloq_common_magic_xor_type1_learning(uint32_t data, uint64_t xor) { + data &= 0x0FFFFFFF; + return (((uint64_t)data << 32) | data) ^ xor; +} + +/** Magic_serial_type1 Learning + * @param data - serial number (28bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +inline uint64_t + subghz_protocol_keeloq_common_magic_serial_type1_learning(uint32_t data, uint64_t man) { + return (man & 0xFFFFFFFF) | ((uint64_t)data << 40) | + ((uint64_t)(((data & 0xff) + ((data >> 8) & 0xFF)) & 0xFF) << 32); +} + +/** Magic_serial_type2 Learning + * @param data - btn+serial number (32bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +inline uint64_t + subghz_protocol_keeloq_common_magic_serial_type2_learning(uint32_t data, uint64_t man) { + uint8_t* p = (uint8_t*)&data; + uint8_t* m = (uint8_t*)&man; + m[7] = p[0]; + m[6] = p[1]; + m[5] = p[2]; + m[4] = p[3]; + return man; +} + +/** Magic_serial_type3 Learning + * @param data - serial number (24bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +inline uint64_t + subghz_protocol_keeloq_common_magic_serial_type3_learning(uint32_t data, uint64_t man) { + return (man & 0xFFFFFFFFFF000000) | (data & 0xFFFFFF); +} diff --git a/subghz/apps/genie-recorder/protocols/keeloq_common.h b/subghz/apps/genie-recorder/protocols/keeloq_common.h new file mode 100644 index 0000000..45f1c79 --- /dev/null +++ b/subghz/apps/genie-recorder/protocols/keeloq_common.h @@ -0,0 +1,91 @@ +#pragma once + +#include +#include + +/* + * Keeloq + * https://ru.wikipedia.org/wiki/KeeLoq + * https://phreakerclub.com/forum/showthread.php?t=1094 + * + */ +#define KEELOQ_NLF 0x3A5C742E + +/* + * KeeLoq learning types + * https://phreakerclub.com/forum/showthread.php?t=67 + */ +#define KEELOQ_LEARNING_UNKNOWN 0u +#define KEELOQ_LEARNING_SIMPLE 1u +#define KEELOQ_LEARNING_NORMAL 2u +#define KEELOQ_LEARNING_SECURE 3u +#define KEELOQ_LEARNING_MAGIC_XOR_TYPE_1 4u +#define KEELOQ_LEARNING_MAGIC_SERIAL_TYPE_1 5u +#define KEELOQ_LEARNING_MAGIC_SERIAL_TYPE_2 6u +#define KEELOQ_LEARNING_MAGIC_SERIAL_TYPE_3 7u + +/** + * Simple Learning Encrypt + * @param data - 0xBSSSCCCC, B(4bit) key, S(10bit) serial&0x3FF, C(16bit) counter + * @param key - manufacture (64bit) + * @return keeloq encrypt data + */ +uint32_t subghz_protocol_keeloq_common_encrypt(const uint32_t data, const uint64_t key); + +/** + * Simple Learning Decrypt + * @param data - keeloq encrypt data + * @param key - manufacture (64bit) + * @return 0xBSSSCCCC, B(4bit) key, S(10bit) serial&0x3FF, C(16bit) counter + */ +uint32_t subghz_protocol_keeloq_common_decrypt(const uint32_t data, const uint64_t key); + +/** + * Normal Learning + * @param data - serial number (28bit) + * @param key - manufacture (64bit) + * @return manufacture for this serial number (64bit) + */ +uint64_t subghz_protocol_keeloq_common_normal_learning(uint32_t data, const uint64_t key); + +/** + * Secure Learning + * @param data - serial number (28bit) + * @param seed - seed number (32bit) + * @param key - manufacture (64bit) + * @return manufacture for this serial number (64bit) + */ +uint64_t + subghz_protocol_keeloq_common_secure_learning(uint32_t data, uint32_t seed, const uint64_t key); + +/** + * Magic_xor_type1 Learning + * @param data - serial number (28bit) + * @param xor - magic xor (64bit) + * @return manufacture for this serial number (64bit) + */ +uint64_t subghz_protocol_keeloq_common_magic_xor_type1_learning(uint32_t data, uint64_t xor); + +/** Magic_serial_type1 Learning + * @param data - serial number (28bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +uint64_t subghz_protocol_keeloq_common_magic_serial_type1_learning(uint32_t data, uint64_t man); + +/** Magic_serial_type2 Learning + * @param data - btn+serial number (32bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +uint64_t subghz_protocol_keeloq_common_magic_serial_type2_learning(uint32_t data, uint64_t man); + +/** Magic_serial_type3 Learning + * @param data - btn+serial number (32bit) + * @param man - magic man (64bit) + * @return manufacture for this serial number (64bit) + */ + +uint64_t subghz_protocol_keeloq_common_magic_serial_type3_learning(uint32_t data, uint64_t man); diff --git a/subghz/apps/genie-recorder/subghz/subghz-read-details-good.png b/subghz/apps/genie-recorder/subghz/subghz-read-details-good.png deleted file mode 100644 index ec664935cc8795836a2130224a85d1c06fd6d17f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 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 diff --git a/subghz/apps/genie-recorder/subghz/subghz-read-details-nokeys.png b/subghz/apps/genie-recorder/subghz/subghz-read-details-nokeys.png deleted file mode 100644 index 1b71249a656493eb1dd8793a9f757413c0f64552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2577 zcmaJ@dsGuw9v(#NV;5L=54$ZE=q_iMu32A=AOQl@2Pi!TJdQ+6CNf!ViGA@c?hwR5ECHL0~kn{gn~&((o8lS?di}z_K!I;ckVrR zzTfxw-MJWxi*noIwFLkGw1sc!6d zfR{`O4v#(SfKC4dfc=|+(pav-4X=&$qk@X*(ea-mO+CYd$xt-A>iw>X$(UkepTH<=s&xb*l%eWH=@hfp@0{z-vhaV;|AH zl`A!F=S-&9k37@2s;DYSs~sIS7563ueDU{?WQ$2kIX@gmt!e?EVt z@lrtcU32H~VBq=h#(J&A<;(fsAmr^m@rTbc!d|3%L+SRNtzkhoQ|zz7%%eEHhS&wO zb;YkE4N{Uc42HF!& zEU#fjbUkh&U%m4|YUFRSY4dk{FW`h803HPSIj!zA(SHG8ld(<%0MCavy&3(QgSV5b z!`l0QDfpWKSh+IpK^L04t<2Hadu_PsnBI2~oFoX$E{jk+xspB~DBj?WjD#-*keNvY zX=0|~rS};LX#3otEw4^%Eq+{W(`AzNF8+BMk>|HXmOKF}&ZJVj~5q9{K8a+^pO0zQ{@d1u{;>G=@{2XfEXMcx0T92S3y zR5n-|$8Ju+dY!z2Fo@Fh{(~kh&8gZ>1nMDYQ@w#;dQ~%oO42G`X{1V~fO;;}=$0g+ z;d?10>U6^v%{)bgNO80L?9sLqx1Yhl&~`4cW@etgPBJcv;u8zuleb1y7NH209nu4V zl)bw2kj#l(o1aFp{E~B$d!Pp$g!lb)Xr` znS1J}KZRspx^$9DBp|WrCFfHj9F$SJF(&o>WKyvj}-OLS;xx zKSrpe$?2q?D|lrrQ$N>_04dZbr_J0w9o*qi1fM=6gtcgtntbq31)M&y-E=$;`^2Z^ zrUX^u=SMj^?lpw0y6n1ZcU+!fIllgvRDlW=+xjUy9nWQt;!@F*NZj^1*XDwAP?IX8 zc!`l1jy`t7TDVCY6oo-}P^ybJ%(9tRA1v@2$T}26n(xYCQe|bM(EYFA!8JWhYOI?T zm8|>`;b^VV?ECjxTOYd6HzLMU9D=aLECz^}a-5>s)q#kE;g$2a1A83rU? zj!Rzlh0wkMzTkTJ91U8Nmcb$g$S5Fa^E$J)-JurI^%UsZw&oS@Z@X6bAE_5}OswI7 z!uJ$3x#QjzWND8nfI#2mV|g;f_cQVo*>ot=gyy8&5fkdKYRS74gM|;*Bi3h~+3^86 zn>FTPjyn*ZmVss07+l|dxzC35<&F`T=Jt{?4`xEBq>lt8vo$mA_;F+MPZlp^5XLA# zgIp1$;Mb;6!ObP#R9gVMSU-a`(y<$NFIk9e%pk%?%sUtM-_9|9Rw8*O;OyhOmTuho k+d;AVGxFB%&EYOH{q?w=%#Ld3KOS)85bhwj|K#WY14RgTdH?_b diff --git a/subghz/apps/genie-recorder/subghz/subghz-read.png b/subghz/apps/genie-recorder/subghz/subghz-read.png deleted file mode 100644 index 5ca07d7b21d1309851614038c087311230a3e9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 zcmeHIeN@s{7`|kNc1~*9&dw}cJJzvDJ1vbSl33=3+M+L&sKho)8rp{;q98`DPIL3) zbd+q(&n*x76QL8D=670|Bv7d^G(=}X0%GC^f?v~-SmP+-6z0G7=!VZd%-3N{iypP%f{2NJ0OI6PPwFb>jT9RTo$K>@o% z5^{%>_pkMMJJ~+%%5I5Ga%dhwyUIzZ&?l%9an60yCW+_r-NtGEFYFtV=cZ>JK_WJO zKVbVV2fH@IfKxC4m)8JLv>0l84E8+BBAS^OiYctGNYri>5(C%=mVph~0N7P_+LS6)7_)>vL5v8&fP2N^yZCZN&0(b9)H1ke2Mmhs8%+$cZo7BY(^-%=``z9*O@=If^ zD~Q>+c!WUdd<13udZ2@`jy@3{mT#WMRw-inSVC7)RO@=8h7$|P$nqrUQIbfbB^4M@ z$BW>A4M5;R((ruS?K&ebwT&T*L7cg(PVo0TAzu&mR#C(R_2Kb#uO~nAjm07dGV2;B zxtvCK!u(k;QQVpOJ2p$V-s{VT7%aLt`c?PK3|%6D{~@;M>d0E8oZ-c%|Ih8ZZtld7^bQC3yEZm@YBMk9$t-nIPIh8t2n zT|TnqvPWp+B?o%G?N~MqJ498MYK2nlxy09`EI-K#_ST?9Ns?;aK@$r*zG8>OhMoQ| zdZihOU4U1+^O#O|; z!xDg%w2R?y9uC3*!OCeuh>m^rvgwfldBj`~QW)7gs1*u$LGT&SmuDpl%Uxq8fg%!) zk7Vfv38Uz5@{v)EIoD#LhE|1&)Ji6P#1)B>_zgK6bVxe&)u*b1rgIH3xs9&2Y@G9= zP0j0qAKg|)$#WAFuvFK~`kO601>i}j|2X5q&^z0t2M77s);vsr Date: Sun, 4 Feb 2024 19:54:24 -0600 Subject: [PATCH 3/3] Latest OFW needs this file instead (thanks Prophet) --- gpio/uart_demo/uart_helper-new.txt | 272 +++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 gpio/uart_demo/uart_helper-new.txt diff --git a/gpio/uart_demo/uart_helper-new.txt b/gpio/uart_demo/uart_helper-new.txt new file mode 100644 index 0000000..edb8b87 --- /dev/null +++ b/gpio/uart_demo/uart_helper-new.txt @@ -0,0 +1,272 @@ +/** + * UartHelper is a utility class that helps with reading lines of data from a UART. + * It uses a stream buffer to receive data from the UART ISR, and a worker thread + * to dequeue data from the stream buffer and process it. The worker thread uses + * a ring buffer to hold data until a delimiter is found, at which point the line + * is extracted and the process_line callback is invoked. + * + * @author CodeAllNight +*/ + +#include +#include "ring_buffer.h" + +/** + * Callback invoked when a line is read from the UART. +*/ +typedef void (*ProcessLine)(FuriString* line, void* context); + +/** + * UartHelper is a utility class that helps with reading lines of data from a UART. +*/ +typedef struct { + // UART bus & channel to use + FuriHalBus uart_bus; + FuriHalSerialHandle* serial_handle; + bool uart_init_by_app; + + // Stream buffer to hold incoming data (worker will dequeue and process) + FuriStreamBuffer* rx_stream; + + // Worker thread that dequeues data from the stream buffer and processes it + FuriThread* worker_thread; + + // Buffer to hold data until a delimiter is found + RingBuffer* ring_buffer; + + // Callback to invoke when a line is read + ProcessLine process_line; + void* context; +} UartHelper; + +/** + * WorkerEventFlags are used to signal the worker thread to exit or to process data. + * Each flag is a bit in a 32-bit integer, so we can use the FuriThreadFlags API to + * wait for either flag to be set. +*/ +typedef enum { + WorkerEventDataWaiting = 1 << 0, // bit flag 0 - data is waiting to be processed + WorkerEventExiting = 1 << 1, // bit flag 1 - worker thread is exiting +} WorkerEventFlags; + +/** + * Invoked when a byte of data is received on the UART bus. This function + * adds the byte to the stream buffer and sets the WorkerEventDataWaiting flag. + * + * @param handle Serial handle + * @param event FuriHalSerialRxEvent + * @param context UartHelper instance +*/ +static void uart_helper_received_byte_callback( + FuriHalSerialHandle* handle, + FuriHalSerialRxEvent event, + void* context) { + UartHelper* helper = context; + + if(event == FuriHalSerialRxEventData) { + uint8_t data = furi_hal_serial_async_rx(handle); + furi_stream_buffer_send(helper->rx_stream, (void*)&data, 1, 0); + furi_thread_flags_set(furi_thread_get_id(helper->worker_thread), WorkerEventDataWaiting); + } +} + +/** + * Worker thread that dequeues data from the stream buffer and processes it. When + * a delimiter is found in the data, the line is extracted and the process_line callback + * is invoked. This thread will exit when the WorkerEventExiting flag is set. + * + * @param context UartHelper instance + * @return 0 +*/ +static int32_t uart_helper_worker(void* context) { + UartHelper* helper = context; + FuriString* line = furi_string_alloc(); + uint32_t events; + + do { + events = furi_thread_flags_wait( + WorkerEventDataWaiting | WorkerEventExiting, FuriFlagWaitAny, FuriWaitForever); + + if(events & WorkerEventDataWaiting) { + size_t length_read = 0; + do { + // We will read out of the stream into this temporary read_buffer in chunks + // of up to 32 bytes. A tricker implementation would be to read directly + // into our ring_buffer, avoiding the extra copy. + uint8_t read_buffer[32]; + + size_t available = ring_buffer_available(helper->ring_buffer); + if(available == 0) { + // In our case, the buffer is large enough to hold the entire response, + // so we should never hit this case & data loss is fine in the + // exceptional case. + + // If loosing data is unacceptable, you could transfer the buffer into + // a string and prepend that to the response, or you could increase the + // size of the buffer. + + // Buffer is full, so data loss will happen at beginning of string! + // We read one byte (hopefully the delimiter). + available = 1; + } + + // We will read up to 32 bytes, but no more than the available space in the + // ring buffer. + size_t request_bytes = available < COUNT_OF(read_buffer) ? available : + COUNT_OF(read_buffer); + + // hasDelim will be true if at least one delimiter was found in the data. + bool hasDelim = false; + + // Read up to 32 bytes from the stream buffer into our temporary read_buffer. + length_read = + furi_stream_buffer_receive(helper->rx_stream, read_buffer, request_bytes, 0); + + // Add the data to the ring buffer, check for delimiters, and process lines. + if(length_read > 0) { + // Add the data to the ring buffer. If at least one delimiter is found, + // hasDelim will be true. + hasDelim = ring_buffer_add(helper->ring_buffer, read_buffer, length_read); + + if(hasDelim) { + size_t index; + do { + // Find the next delimiter in the ring buffer. + index = ring_buffer_find_delim(helper->ring_buffer); + + // If a delimiter was found, extract the line and process it. + if(index != FURI_STRING_FAILURE) { + // Extract the line from the ring buffer, advancing the read + // pointer to the next byte after the delimiter. + ring_buffer_extract_line(helper->ring_buffer, index, line); + + // Invoke the callback to process the line. + if(helper->process_line) { + helper->process_line(line, helper->context); + } + } + } while(index != FURI_STRING_FAILURE); + } + } + // Keep reading until we have read all of the data from the stream buffer. + } while(length_read > 0); + } + // Keep processing data until the WorkerEventExiting flag is set. + } while((events & WorkerEventExiting) != WorkerEventExiting); + + furi_string_free(line); + + return 0; +} + +UartHelper* uart_helper_alloc() { + // rx_buffer_size should be large enough to hold the entire response from the device. + const size_t rx_buffer_size = 2048; + + // worker_stack_size should be large enough stack for the worker thread (including functions it calls). + const size_t worker_stack_size = 1024; + + // uart_baud is the default baud rate for the UART. + const uint32_t uart_baud = 115200; + + // The uart_helper uses USART1. + UartHelper* helper = malloc(sizeof(UartHelper)); + helper->uart_bus = FuriHalBusUSART1; + helper->serial_handle = furi_hal_serial_control_acquire(FuriHalSerialIdUsart); + // Typically the UART is already enabled and will assert if you try to enable again. + helper->uart_init_by_app = !furi_hal_bus_is_enabled(helper->uart_bus); + if(helper->uart_init_by_app) { + furi_hal_serial_init(helper->serial_handle, uart_baud); + } else { + // If UART is already initialized, disable the console so it doesn't write to the UART. + // furi_hal_console_disable(); + } + + // process_line callback gets invoked when a line is read. By default the callback is not set. + helper->process_line = NULL; + + // Set the baud rate for the UART + furi_hal_serial_set_br(helper->serial_handle, uart_baud); + + // When a byte of data is received, it will be appended to the rx_stream. A worker thread + // will dequeue the data from the rx_stream. + helper->rx_stream = furi_stream_buffer_alloc(rx_buffer_size, 1); + + // The worker thread will remove the data from the rx_stream and copy it into the ring_buffer. + // The worker thread will then process the data in the ring_buffer, invoking the process_line + // callback whenever a delimiter is found in the data. + helper->ring_buffer = ring_buffer_alloc(); + + // worker_thread is the routine that will process data from the rx_stream. + helper->worker_thread = + furi_thread_alloc_ex("UartHelperWorker", worker_stack_size, uart_helper_worker, helper); + furi_thread_start(helper->worker_thread); + + // Set the callback to invoke when data is received. + furi_hal_serial_async_rx_start( + helper->serial_handle, uart_helper_received_byte_callback, helper, false); + + return helper; +} + +void uart_helper_set_delimiter(UartHelper* helper, char delimiter, bool include_delimiter) { + // Update the delimiter character and flag to determine if delimiter should be part + // of the response to the process_line callback. + ring_buffer_set_delimiter(helper->ring_buffer, delimiter, include_delimiter); +} + +void uart_helper_set_callback(UartHelper* helper, ProcessLine process_line, void* context) { + // Set the process_line callback and context. + helper->process_line = process_line; + helper->context = context; +} + +void uart_helper_set_baud_rate(UartHelper* helper, uint32_t baud_rate) { + // Update the baud rate for the UART. + furi_hal_serial_set_br(helper->serial_handle, baud_rate); + ring_buffer_clear(helper->ring_buffer); +} + +void uart_helper_send(UartHelper* helper, const char* data, size_t length) { + // Transmit data via UART TX. + furi_hal_serial_tx(helper->serial_handle, (uint8_t*)data, length); +} + +void uart_helper_send_string(UartHelper* helper, FuriString* string) { + const char* str = furi_string_get_cstr(string); + + // UTF-8 strings can have character counts different then lengths! + // Count the bytes until a null is encountered. + size_t length = 0; + while(str[length] != 0) { + length++; + } + + // Transmit data + uart_helper_send(helper, str, length); +} + +void uart_helper_free(UartHelper* helper) { + // Signal that we want the worker to exit. It may be doing other work. + furi_thread_flags_set(furi_thread_get_id(helper->worker_thread), WorkerEventExiting); + + // Wait for the worker_thread to complete it's work and release its resources. + furi_thread_join(helper->worker_thread); + + // Free the worker_thread. + furi_thread_free(helper->worker_thread); + + furi_hal_serial_control_release(helper->serial_handle); + // If the UART was initialized by the application, deinitialize it, otherwise re-enable the console. + if(helper->uart_init_by_app) { + furi_hal_serial_deinit(helper->serial_handle); + } else { + // furi_hal_console_enable(); + } + + // Free the rx_stream and ring_buffer. + furi_stream_buffer_free(helper->rx_stream); + ring_buffer_free(helper->ring_buffer); + + free(helper); +} \ No newline at end of file