From 37d7fa7261d9738e285e70f874ad439974a98151 Mon Sep 17 00:00:00 2001 From: magnum88 Date: Tue, 4 Jun 2024 19:03:30 +0200 Subject: [PATCH] first commit --- README.md | 39 + config.json | 7 + icon.ico | Bin 0 -> 1950 bytes img/aprs_ico2.png | Bin 0 -> 3657 bytes img/btnjaune.gif | Bin 0 -> 34233 bytes img/btnjaunesmall.gif | Bin 0 -> 540 bytes img/btnrouge.gif | Bin 0 -> 33979 bytes img/btnrougesmall.gif | Bin 0 -> 543 bytes img/btnvert.gif | Bin 0 -> 33979 bytes img/btnvertsmall.gif | Bin 0 -> 530 bytes img/datv_ico.png | Bin 0 -> 8894 bytes img/icone.ico | Bin 0 -> 3062 bytes img/nosignal.png | Bin 0 -> 11539 bytes img/test.png | Bin 0 -> 285878 bytes longmynd/.gitignore | 5 + longmynd/.travis.yml | 31 + longmynd/LICENSE | 674 +++++ longmynd/Makefile | 40 + longmynd/README.md | 154 ++ longmynd/beep.c | 328 +++ longmynd/beep.h | 28 + longmynd/errors.h | 78 + longmynd/fake_read.c | 32 + longmynd/fifo.c | 203 ++ longmynd/fifo.h | 35 + longmynd/ftdi.c | 528 ++++ longmynd/ftdi.h | 40 + longmynd/ftdi_usb.c | 376 +++ longmynd/ftdi_usb.h | 42 + longmynd/gosrv.sh | 48 + longmynd/longmynd.1 | 69 + longmynd/main.c | 775 ++++++ longmynd/main.h | 146 ++ longmynd/minitiouner.rules | 7 + longmynd/nim.c | 207 ++ longmynd/nim.h | 48 + longmynd/stopsrv.sh | 17 + longmynd/stv0910.c | 684 +++++ longmynd/stv0910.h | 69 + longmynd/stv0910_regs.h | 4790 ++++++++++++++++++++++++++++++++++ longmynd/stv0910_regs_init.h | 1082 ++++++++ longmynd/stv0910_utils.c | 111 + longmynd/stv0910_utils.h | 34 + longmynd/stv6120.c | 438 ++++ longmynd/stv6120.h | 46 + longmynd/stv6120_regs.h | 185 ++ longmynd/stv6120_utils.c | 32 + longmynd/stv6120_utils.h | 31 + longmynd/stvvglna.c | 165 ++ longmynd/stvvglna.h | 37 + longmynd/stvvglna_regs.h | 112 + longmynd/stvvglna_utils.c | 50 + longmynd/stvvglna_utils.h | 30 + longmynd/ts.c | 548 ++++ longmynd/ts.h | 29 + longmynd/udp.c | 198 ++ longmynd/udp.h | 37 + main.py | 359 +++ manuel.pdf | Bin 0 -> 378568 bytes minitiouner.rules | 7 + requierement.txt | 7 + status | Bin 0 -> 22040 bytes status.py | 126 + waterfall.py | 189 ++ 64 files changed, 13353 insertions(+) create mode 100644 README.md create mode 100755 config.json create mode 100755 icon.ico create mode 100755 img/aprs_ico2.png create mode 100755 img/btnjaune.gif create mode 100755 img/btnjaunesmall.gif create mode 100755 img/btnrouge.gif create mode 100755 img/btnrougesmall.gif create mode 100755 img/btnvert.gif create mode 100755 img/btnvertsmall.gif create mode 100755 img/datv_ico.png create mode 100755 img/icone.ico create mode 100644 img/nosignal.png create mode 100644 img/test.png create mode 100755 longmynd/.gitignore create mode 100755 longmynd/.travis.yml create mode 100755 longmynd/LICENSE create mode 100755 longmynd/Makefile create mode 100755 longmynd/README.md create mode 100755 longmynd/beep.c create mode 100755 longmynd/beep.h create mode 100755 longmynd/errors.h create mode 100755 longmynd/fake_read.c create mode 100755 longmynd/fifo.c create mode 100755 longmynd/fifo.h create mode 100755 longmynd/ftdi.c create mode 100755 longmynd/ftdi.h create mode 100755 longmynd/ftdi_usb.c create mode 100755 longmynd/ftdi_usb.h create mode 100755 longmynd/gosrv.sh create mode 100755 longmynd/longmynd.1 create mode 100755 longmynd/main.c create mode 100755 longmynd/main.h create mode 100755 longmynd/minitiouner.rules create mode 100755 longmynd/nim.c create mode 100755 longmynd/nim.h create mode 100755 longmynd/stopsrv.sh create mode 100755 longmynd/stv0910.c create mode 100755 longmynd/stv0910.h create mode 100755 longmynd/stv0910_regs.h create mode 100755 longmynd/stv0910_regs_init.h create mode 100755 longmynd/stv0910_utils.c create mode 100755 longmynd/stv0910_utils.h create mode 100755 longmynd/stv6120.c create mode 100755 longmynd/stv6120.h create mode 100755 longmynd/stv6120_regs.h create mode 100755 longmynd/stv6120_utils.c create mode 100755 longmynd/stv6120_utils.h create mode 100755 longmynd/stvvglna.c create mode 100755 longmynd/stvvglna.h create mode 100755 longmynd/stvvglna_regs.h create mode 100755 longmynd/stvvglna_utils.c create mode 100755 longmynd/stvvglna_utils.h create mode 100755 longmynd/ts.c create mode 100755 longmynd/ts.h create mode 100755 longmynd/udp.c create mode 100755 longmynd/udp.h create mode 100755 main.py create mode 100644 manuel.pdf create mode 100644 minitiouner.rules create mode 100644 requierement.txt create mode 100755 status create mode 100644 status.py create mode 100644 waterfall.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ba0b98 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +DatvRx +=============== + +Digital Tv HamRadio under Linux +V2.0 +============================ + + +## Version en production 2.0 + +## 2.0 + + +Récupérer le ZIP,
+Ou télécharger le repo
+```git clone http://fra1od.freeboxos.fr:3000/magnum88/DatvRx ```
+Il vous reste à installer les dépendenses
+```pip install -r requierement.txt```
+ +puis compiler longmynd s’il ne marchera pas
+dans le répertoire longmynd
+`` +sudo apt-get install libusb-1.0-0-dev libasound2-dev tstools +make +``
+revenir dans le répertoire DatvRx
+copier le fichier
+dans /etc/udev/rules.d/
+donc
+``` +sudo cp minitiouner.rules /etc/udev/rules.d/ +```
+et enfin lancer le programme
+puis faire ./main.py
+ + +73
+Xavier + diff --git a/config.json b/config.json new file mode 100755 index 0000000..d7e0f2f --- /dev/null +++ b/config.json @@ -0,0 +1,7 @@ +{"IP": "127.0.0.1", +"PORT": "4321", +"DEV": "/dev/ttyUSB0", +"FREQ": "1049", +"F1": "9", +"F2": "250", +"SR": "333"} \ No newline at end of file diff --git a/icon.ico b/icon.ico new file mode 100755 index 0000000000000000000000000000000000000000..787ed939f259eb0b2ffd062bf004a2e23bfe374e GIT binary patch literal 1950 zcmcIldsNe97=Fk|E4yl_X`zLMbTc6pOCd$XOham5fE5tnz#NwWaS?G`fbIFn=baKHif^Gtl@TOTxdsAam zIz?jb+O;q?H3pT#%*>2xnqh8k4n9Q-3kzDCVQFcJMXMTMZDmEV1=iNqx@%#xV+U+( zY_Ns)yKHUYLeb974!d{n2H7Bma+Soh_U?tfy*->537^pyu1)g(c9Y_OePci9O~iY;{%Qx2fn_(*vn#pMF>04gu5PL@b~ve z7M*hshl1c^yA)e+leZ%xA_A9V_P{z&fyH4( z=sA9nUPmN2K|(}DMd4(C451;#h>nhiXKXACcwq<=ZA45=3`!`UoXi53%R+p7yza3f zDIo!giHY#za&az>OMEi8(Q>4wrXnpZ4Utrno}P{j!V&3Vgl2QW%E|&a_b4(lGLV^> ziDs(FqFi=%Hga-uARxF4h2Zn~xSJ+|Kp;SFZZ1Sg7txR-gfLqHA@QljA;`(5($bV`4CB@ zC=ga6SX757nFvy;6uq(pbmZrwvoHh6GBFAY3UIw317dj^QcjVss0hId5hMy8;tN!e z$>`Y?7eiDP33ZVi#k7|f)>Q zqN}S5-QC^j>FI%5twvv8ANu?IF*G!Uk&zLMj*en%Yz*V$8M9 zGlN+jW@mBd&K=ylcMtdP-^YUo5Ag8eLp*x)h`xLOZOECbfmWvG8dE)Rg?V+Lx_aO$ z^U8plc}>G?9Z)glCX7Q24ui*MNEtF#qjK|RWg|;Q2R@I|hZrW~ypp5I*%x|vy-kaP9YSVi--CJb-l zGetM&H2d`LKr?q!lu5iN!=zN2v@Nyh(r+W9?G~>Z85ylxw{HEXn&~??E){XD5~QUQ zq(8>+#WPEnF8zRhbi%{K>ogk8%-j$olJpaUvZQU5vJI9tdu(=o?fS!k;Lr$Bdvn9@ z*IQ*(Rtd5}o&T||2JCoIa6}YG6cH54VMnn2gMzSCr#BfU|H_?u{_PLLAM-ma$bWd= z-&oH-wOr2|&-;7K>%G_(Z1VsM4~tEkHhP%T)|~A%ulMkf7P_4M?AssT|NgD-R)6uv z%P%~;Ws&W|T~F`$#Pp1_MCviY@N-F2wzYKz1_t`LxxHezY}sq{+q`(ef_G0iA7M-k z>-3F!e(m#mez#6PY@*Y%^t{_LJ^#5*Z!#z&z3k_cIeWW5KK|2}=UzPM_+H9$PTSwf zm62XHIPcH!4LNM~D?;2qqUG=1FN}HrQt}sw`>fx5spgN{leebFZcp8s4qx;7hCZ>7 z{7ZHIU)g1ZuYzK1?(tAyRd|M-gU(;e&nN!8T6AM>?(|;`aC&a;hDd#$_&mOLoL7D- xE#@Ni*U)S~{bA7PpB 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 byNJI5ki`@wxmX2`00000NkvXXu0mjf)59lp literal 0 HcmV?d00001 diff --git a/img/btnjaune.gif b/img/btnjaune.gif new file mode 100755 index 0000000000000000000000000000000000000000..6eb732b3498adc44ca0670d4caea4c2479281ca3 GIT binary patch literal 34233 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 literal 0 HcmV?d00001 diff --git a/img/btnjaunesmall.gif b/img/btnjaunesmall.gif new file mode 100755 index 0000000000000000000000000000000000000000..2cdec2a62fed6ddb74129ed7cb8ff820ad66062e GIT binary patch literal 540 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 Y8kA^IqCtrUB^s1yP@+NkA2lfXzeTsb#Q*>R literal 0 HcmV?d00001 diff --git a/img/btnrougesmall.gif b/img/btnrougesmall.gif new file mode 100755 index 0000000000000000000000000000000000000000..43d0724b12d45b7e78b892f64f6a592f72c4e1d1 GIT binary patch literal 543 zcmZ?wbhEHbRA5kGSZd60mzVc3AKw=b4-IDKFOH5rtgLBlY~SCdL7zxVF_tfTWuL*pGE-$!xr&stjd`S^a$ocU2u z@FPF}M`2+WM#h`GydQw>adDZ?BTfub{3qyKl$uzQnxasiS(2gP?&%xAp!k!8(TKsG zL5BedKptga`*&b|frpM%|A{3#FZ4y=;==?Qj zp2mhV$CM@-m~ppP-6~nFC8Mp)&dbEXE+;Lil^ySGsIDa`q|IbBeTEUIBsW8^S1_Zf zkmAf`MoglTj5VHyItJ3(%a=3B@W=MKEtFK8wq?1@nq98JTGB!Xwn}U19*NMAV3Iqv zT$Eq$e2^?Z)BdY7SVTqE9=#)Z|H1UfPcInAynMiN<86?k7T2p8yfPBm9t*_;E-deC z?yCCcXK_QIKdhN`hrliF35hO;eeQ`FTnf{<)FjB;Ao}XMqmq~hgHb_-Kv8@XE4M+6 zLFAjz26h=Uo+*wEhc$FXRV|t3D7hVN=DKdMBH<%vkFW(^ literal 0 HcmV?d00001 diff --git a/img/btnvert.gif b/img/btnvert.gif new file mode 100755 index 0000000000000000000000000000000000000000..f82f89343c19cf667fbdb6ae4544a78ebacf2e3c GIT binary patch literal 33979 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 Zi3TMalxR?*L5T(>8kA^I{znZ;{tu}s!3+QZ literal 0 HcmV?d00001 diff --git a/img/btnvertsmall.gif b/img/btnvertsmall.gif new file mode 100755 index 0000000000000000000000000000000000000000..d8fcc2b1117e4e15c2abd126f96c56a4fea388e3 GIT binary patch literal 530 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 literal 0 HcmV?d00001 diff --git a/img/nosignal.png b/img/nosignal.png new file mode 100644 index 0000000000000000000000000000000000000000..f60da74f63262972efba4509a621671ffcfc1943 GIT binary patch literal 11539 zcmeHtc{E$y*MC%J?c-@{=%A%aJxU}J^Q>r5RL!(#L}(02Bq8R`6D`GKNEK}rt+Azs zh@dr-7>go_nyN}~T1rX`zi6Lv{ob|S^EK_JjhGgD(55NHFyKVVx0`7N3HHTnEgeW;xi(FQ@1!r`%AXg`z`F$9N_LItC} zK%n43f9tNDMu)d9lcHiSNt_Ol81hcQbbg6`+*0yM_E7WG?Q08>x^)FtGdF4$XUFf} z_r!F>=XQMNFEKJ#x40Zh?=3h~YkOYdmGrsJapl6Ls^=d0Ne9J`L|BYe3z_H?NA6oJ zxyC-z(Sf$h-u3pn#?IV}(KcP-E3au?zs!qj-3I*EW=bqMIx`2M>c;n!?^OwWl@;iX zuS<#hBxQKgs<9SUa(Owm=lD0!B{}EtJ3FP1fj|OR(MCqrW=2MT`os6)K}4LcX`O*Y zgS)M-iHihX>f^mfS_38~6278Q)`#D0FVISfjWkTSA=A)s1_##o_QEL;7tq)H%Kq1l z`UVdUJ`izzQokm9T}=6q1b2)@Yhr0%@^uhpd^7{y$E1?&Y?>z=uYXoJzSj^EY%JRV zdvC0~bNEYOEa)s}RIzQ1nQ{GCr-_sk=;%DGfO7;mhoJJ!%Z7}I;AL)&-K5t3hW=; z{~9lCCiQhxLlS8aEPg>%Vv_eZz(vmB^S+91?NygODJwFxt}c(0wY6%v09Mzy?mPUJ zy`eA}TYQ$3WuenXcE^X*+1hvD&YJi0ee9+w!FySS-RiZk4ny4@&je)qxtFOWND#=#QG~CJh2`qrC@&?Kkq;w9sOV&0_lq)N_n8X(HLE6 z4z)&F3hk*Y?Wk%AwZs{rE}%_A@hIC+D?4PUFH+M}T3>IwPOugqz#m0KNCo@*VF+5m zy3*fqwfNWT%@Ap+?;=EBU1=vvYbhfv9wnusq@n}`n*^hSVA6WqrF8I~URpNBC;ouo z-|0$UAQEv}5D1AxQX;{Xuy}8XvZkgc1PX(|U|_xkm=J;?B7(sf!jW}|9~j0c0uqnL z5z$zT)H)`@0~<)xm6qoBOZ{n|KhDzfFL(^$4;J`*K!OoCh_VtC;_nanrv`y&62u4j z!=V3CgJ8#>r4Snw0UL-%qD+EN7~+wCLUu?3Rc$e)Bvj>QR-lXG6DtGgsLDkl~rIUFOGP(L_R3)&2o- z8jt2@CBpBYR;@#M@}bl{)s>;DP&gQ_s;&uE@j$}C8X78^U<4AWtcvvV)X+fvfbv9Y zoxtM#5&UqX{Sn?M2oB@@eT;R&wG6GzbfsZR(7#)({SZVizJji_1sW3={C9^P+89~25x(SoXK!PM=b8d@-@796So zg=sP$dxiXW((98)O6Nz&P0ieY7LLh&* zKtKecJipt?$NJHQynw)XqxjY1k97UB9sOUV0@8~gaW54Qum(ca6RZM5Xn-}5>K^=T z(oj{0K~YFg4$_1pJA$^Y9H(goCd6!?UJp{n4& z2~+-qFvuScL)L4?pC0Q#{y$E1z6<=L$nf=kwDF4#<%x>^Y=$A{x^q^ zlKMHwf5h)kx_;92A2IMB3IEKlpLG344E#sJKeOw9jIQl}FQ-r#{!$V`HK&U%CVW3HJ_qZK#ubz2Sa~;8W>TCsDqG z+i<4N1Q1AQ&-x(%y8mD=zi|uE%+h4bhfN1Ii%7D6Z7l(T4lvA&4ef#lKe2YEb~lRE z2H<*48j>enTwM=|`uH}0jyq-OHP}0ByC!27Ri4 z9tOckaJ5N__+kCGHAPJQwa~&8*BiJr+S-!}{R(*|my;@qt8oFiqhH6e z@#TG$k|JiS2If8QSM-=g_roMi-owNwoPvNFLR|%?Zl#zq9J>5Xg?r@)kX!w>WEUiI zbL&b$x1x#zMN*{QwQ9J$Wn}hTk1}mHXuCf>*$BEahSe95y#I zu-4Q}A8UHi(Rg8=SF^V%R_Jr}Z$9bt{4AykilfXGH)&#D9N%$&5)h964d1zPnHIp^L`tCR zDClggItuTop=NcbruJ7Rx6PZt2u`Nvgp}V!*VwpZy@{^4Rjp%qyG9XT7w%(9Dw}g9 zY{%E^9mYo);mk_?l3sgz0Lylob1UC__oRNLj^@i<%3O9F?c40cB=5D+?){5jR=qp> znYvcx(N^zF!ssgxzjYqB1l)qv=3dq3X^`ay#@NMt-HZ&K#aQ?&g)y(zK3;&h zgYg+ltDoyVoZhV7sDp8)B~C2hmnG^ux1zvASSjwrgb zF7pcG&ZW7oY2>E5TV1@Csx;>iT{N_>b@R*56^{+HxqlPs4howHZN1Q_k_Pd}_o zGb}9&aWM)A9ICopb)&e_NH#Y$&$Ugyym&$?Ey7njZ5&r_ZRj{@pPq|qY*Wa{1X9}_ zEw5K)Rlr{mE0+tCG6YMeDu)zaJQ`#$Jrd-TW|O-KR`KLyZz%7W%R@rg0ZR-Tst=!HoPbSecxyW`ohvg;j`#LD= zqg8e_WIoBiLLci*&Q>O}lubhqh z(8sjd1Z*O3mP*`I&hj?qiuQ9(b}2TmoI+&ol*S!E4C&{%8#Cx%#0T>{6l+iN$CzzgacD zN%zd4P&OK1L%WlCJ^p8Xi#{1cTl7vOcE2p*{knmG|rk;DnuO76_Pm9 zIn7I8WIXv=Ywo5o{nGZ-ksX6$T`%vsCCS(C>~Ae9Z;TseD7u3-u6WD?LtR>@Ep<}7g@w*9%sX=6-Yk_Ycp|a& zCFjn8V(op*JY{aRowjJfmu5~9>?0Voa)Fs-t2x`l%*hNub~fu$%mJbrCQD3v*$ER{ zr2|Bsc9GItAiJNz>FaZ!o>3Bhkp3iUHn4hJ??C_bPPsw4t6oAO@yOK+;Zb37DWQ7~ z>OXUP>cRl(=awVyhq+deHcZu9GQ9%fTyhVlcZ=2YT@RJZZjdA^WV*BjPLqXGqr|VWNU}MCON@z#9sK;lZjCc8;3ZCdVGspBM zLth*X;h4ltjW`rnw3&4UJvL~oYY`()V z<$5T#n78-6!$gNsm(PqMTx&cSq|)rfAs14}S(?%!>YmGo#<}?ky2OVaOiPFE{TeIJ z$}0t?z_%uE>>JczsT^gVy=no(iwTeBduBPAX@oA7osf&=8R?qF&!;TVoO}0)*tXcZ zXfnrS&JD-ARLKGI<%IIhq*SJ4Qr1L#tZen~#X?;6yGP3u^dpDI+P=vR#sbWfG3e}@ zQz7sK1DmTia11|I;NB;3Ev`31$HQl?O`TdwU%<(pY4vB7n%(12tKEL@*&Hbj+#dSc zmrc9jbplrt&vd<%RO&0U4W++zY~!j2GwpGO@B=8r6%sWSxW6Vfkvg6HnoNP*m?k9b zL+^Sr{jfig-g`?2=nV%xg#+V&10^{t?^uMYrN_y-DGXC~!V!3;uZ~s72wi-@yn8nB zrPCpkqLLf0EQ*koAExrr{zX}iskUf+;6i3G>)dUYUt4QYu zvc>Kzj)jr+iu(#-1)=`q?f}zH=;t9E+aW<~IL_camDXsPGgin228s<APyv-+eIZ@?}YyK%uvpyReN>sAdnC*&qM8n?i9Mar;^kHgG5FTSOg;e0}ys zQ!=@Xkg=Fl5q6o3mabh++#0y_C{ii09RNB0J*>k1>nxPz64cf%{4aAn#b?xgQe)GOi8EsUrKH-J)kbq-(;xN79Mm z;*L9uAtU{w9{FGfWW|kkPl%g04qU(dBpV4oiyWPoZJ`|p z;xmP>MvlK6%PYI9A+u@kBFn2l3eY<6=J&kR3$b%2y)35n;(X?hhz{SrGG)aK^l88g z)7{?8M~O0vu7$xK@3o?b?}o!IT$Iz^5)+w>2V}I5lH;ilA4;Dmq7}r)0mcJE1#-AU z`#}X~tC+Y@^x?Y!IUEJfSt};7Q7O<1QuXO zZZz#C`SL(CnOH1$cgd*2T^JZOgcQYuTIHRqHV3@kbg8RrrI@)|Eo(m;@)P@j%HB{x zGD?$p_Gm6;deJe*q2gxT)L;zp*NX}ydD0A>R5$ZF*!l)f^&JNI8W&say;)c zAe+)GhRKfXnW%KxJM?pcfIUGxTq@&c#A2o~ewLtCj_Dz}bVQdC+L#ZU>;7^%=D%I%k1V zr1we9dov(LNtHP681*)t{xyl|m?I{p2I%$XfmSpc%o%Tb*(2YUnN14J4+Y zcI%7Ey(d13Yf@$4lPU1Jjqgr<%-t_=zk{w)!z|5Ps&wc%Ip6Ch9%A3i@x6#s^G|=z z_DQP=bf3yC#GTG=k;C+h#k=@tPulvM1D^XANK?6(6nIHiV3FTDH;TOPZYC6{^h~l6 zmcU5fQXKMQ(X5MHwWfC>>AKaaQ|Bnu5w=?f=aBFRdK0T0U-WTFc@MU-&0zeQ*U}DV zfs#58GVZ3!U@6iy$fj_zzPHyCb&l+GU_P6TU^_I6D3^3H22Wy?c*27rOahi;T2UmP z*Fr!4{1dF_3U%?EYdN(Il|6^!cm@>J(#`_`YXwtTM|b7xhxaMcA2CLLdl1SVEj!)O z6aC`->O?ewQ*Q)KCx1E6PaK4bFP^7#gP8O+(TLBJ>{*s zu4V<?&ZuKTyZk}kIb(DTOj_=raD}PbTdLXKQuk-CQ??^=} zwz~?INt!`?{|MZ|;eKDe_KFw#TeRQ^fob}O!R$CnW5(bmwqow7bT3wwIGK%X*MhHf zz4r*~O4?TI%gj3kSZ(II9Oa&f;8PLYKIkILu(ZoM#_Y(87??aq1EXK*dW$N%uJ-S+ z{BWlxB*ngdse00tD5^YVK%AH!%E)R{pK~FKMw_YoiYnLX5=39b2SHb$`}_N&{F@pu z&L)b9bU$YkiyDpyfrs z3@xjN*H^(!du33~hVvd&Zuq>kKQ5aw8@=y1)N%Tzl@E;)e7D&QKDiK6rRU8&s(!j) z@G1A>3G%7O?Y65yJUck}nXOl=yDhM!=4z(Oh}bXdYv2{oze=Q49V$>}Lg>2ApF=B( zcev_=<$7ZfpQ&Wbu|322OOG`zs_qe%2gG2WUhnC4f%4rUU%a|>Tt5%8iZ?umx4T)s zsp>s&AM@G#1->#2(=MIm<{lLox-!41DA3n=Ixq#%<5qJ9wwm zeuX%kHS8u!rZ~Ye)t}FIcYvRgTW-at#+K=}8+4PcKDNJPn@W0HzcION8w-a{P(!Av zJgq5Tm9O^)dV|#U+iMx&SMKPYH_+OBe<+9Ids=EgN)e0(3}$lDPeHMW;{{0lY5&U7 zr~R6uG_r`XLbMsL^I3kF@r%5B2K!8_ z#q(v{Q(vP*SVqnx))icV)7*{+Gajd0BQ99&wX!Y8H053T(6+DbQcC&tFPQ|fv$1lf zrUwbbYUhSI74b@fapLrS_q#(<@3&91N+nN4eKc6AXN0OHOj)&iizpq*q>`#zRmUdW z`&v6fv|M_bmoykf*C-pldQcr9T=r&!j0J&XdIz9V0m2iawZF}3#D2Y7o& z4)Q-djP$$^H!v|E`7P{54dI4I$Ku`*q3VLyGFL`3gMb{bCqY@;{fATPybPSDT|Y6bSZNp4eHR(olHpe5(4hl@yLeU|YLe?7`~a&Fvsp!wS5n zzBTU(T?t(zi|$svo7?bfBG&wU&KsKb4A!B_aV+g^8N76GV1YDmd~9Ki{u|vy%B#=!$_-cR zuC+PntgW(2TO-ax_J88rD_2yQPLx z&%107K->qm&tnq9SRN{eR=x!|U0_xQ`mWBkBy^-@hH)|Cl3baXYrHV+7u;3f&WlT5 zKMiSLKY3?03QbGL|e>UqtD@}q> z6PRbsDR-zCLbFOE9Dy*g3J#be#0U||X1)BpX6eFR;cwdvr#;xprQ+O$B6dH;>nkSl zs^V%yfUqzV-*Sel3#o=PEBf0@xmzP93g6Ff(+iJON;cB4<#f%{Ato0ItWhJB>%mx6p@i z?stvmt3TwjPhE2vb;H%u?4y~<6zZmr$zApHd-*9S5) Mu`(_^e*Vh;1A~mE82|tP literal 0 HcmV?d00001 diff --git a/img/test.png b/img/test.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5a19044398ab19183c6902e232ca21fa4ea9b0 GIT binary patch literal 285878 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

+d%THy!`vt*A8o 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/!Tb`S^o^elL|vBZSu1W z#ic!nakZg|)LBk=6s_hRvw-MeU`VW|D7bsTxe0+V)W?J>m$PeDS8W~GHmJO*4+>H_ z0vkAgVz4P6>xQaAHhs2#2J>M4#9raktdd6sG?e9Vn}WR)z21&_MVC(I{)1cQ@}EXz z^lgOObVgC%<$9;~F5PoO5&{8J`E?5E_tdxj<#?VPv3_mdWHK;b>%$i~7SY}a(sx|r z|CF+AKBVB4zVVmZ{9U;)$6EFM$7zOTi7y!`+LWIax}E%GaX0Nl*~_BCnHIZtQC$^S zEhz9I|6r!vje1m$Tf)u>Y1{tse&e)$=`|A;pl?8}pCeVxC>A@h2KOa*DX50Fr8h50 zJ|n)+4c=`-IL64#(}z@89h+tBGb{77G4H8^@%j~Arab3YlnASw&D7_~|DVE6v|)83 z9v2d_UE;YX8v2m@FPl8eTuzEw&k*4UFWIa{T-vXU-&_s{iQC_1);(66z0%KcUJ2Xc z-4mS3wZhr-_cQ&5tUw;JHE`#c7b^k%8L@cr=%-iVH{wi_lN5 zkl4Bc8uvvon_A;GlDlMVu>@eU*^<`1(}p9e=iEUF118L*`xFa3UMqdgiS9fP+t&fJ z3_nDJOp$$mc_eAZa->+WC^9cz0Ef^N*Ssq^1d1FhNQt_WKc6E!Fj-80=+JHKmR!Hr z`?gckB@UAh@@8I4$FiKJsrOSpUV&#?8M3Xl2;ezn00O&@T2}(vE}sIMf^DCM1DtuX zGV46pdk2e8$i;c*DFTz{2>S^%jlUIpdzHmD>$w7FH@lAwW)nMX-g8S~WFkd2()e

A?gOKk=wisWH-Mfk_*2@4FvQ}ugkIi)Y@=NPBy%||wl$9(y=?ls>BzB$K0 zx37RdUg7v&Vf1&0B>CF0aFsnuhhnawOJ3r+C-zErrQ^4^OPAGJqjo;A&Otc>T8_A3 zv>Tqr!c^8lKIT8UDt`6&%wXPh7qFlZ!2Rp=q5uC~=btq9AtJA?K^HMPL?c-Dl4vi$ z{TuB7rQC|Xw>NlkpKw&V1Ti~!()kjAgyhr(O5JvLbX%(+zB97KwOVnJ=zN{#`dDJ& zX1G_gh=2`v}RN;GtQ2EgHal=7TCR zPMf95dV5d&yZET$l{a=~$hU&zS-PRq$vxnMcn;6Aayd06$JJTgBh1?dm^8T;D!Jz< zrU88>*U_I%l}U}Z-ryg1iajG#{GQ+NFFz)z3T&if4a~jJ#C^J#=C)?Az4l?YyjMgS zzCKYu+gRXW(d|eEqdl*Mj$`!;kg<)?){CC>da>z=?&nIz+r4Y$&WG8#C-s?O1TKJa zmi<8+D^#xCKF;z8z+ak<)MIj{$mQY{E5jQKX=MD8pY>`P`u;fRlxk}At^*h!g1)q@ z-Ww*&sh4rt{q@)m)n<%29Gm9oV(bSR;FdFSe>hM(zAy*ORte05OB}7Lf!=&F2(`q`Gw$wQNzdGVq3# zgCC~lk5*S|cH1|0*4jFpezFW(;y1O$5$1f9W{kmR{aUitY&TN17D;{Tm`4pD^^gYN zP=B;h$Q@bV{SSbEQaRUl-(7J+h*PLQ55D$5aC#_ksH%Dr-@-^0QC}@jvQ2-phoSlt z6DX3oc(Rb;n%jCbLQV4BO!c`^;?~qn$(Z;J^A2$YkG05HLH4@WwvGN(cmTZ6s(}g2 zD`tW;K|Mhi;tSjsFuvlmbhdGye_iMWZk^8aDF~l18n^^aq(p zT7zS)8zo}7v9>De!hSdu$k10#Z;L8ygB&yqA&jj-7-Gt9Ih?*tBq|g?D{kBDx=6p7 zI@x~@KyJEco9$C5xc<7|FXw9MsYz4M+Q$^5k|esQmzrHdL6<2H>lYL;Ff!kb4TBEBSvVadIwI$F-Q64!_E2}IABU=D6?sdz? z8~O$jO45eztAM0~iU$*94^SHk$|+wfjBH^J;B>0?q&#ET;LvA0f z4lb;?`3r%%)$iK0*W6J5C2^+l{$6U0WmkM0Agf!AK?H9!X)GHgF+(=KJ?70$wO7>a z+j;kIV$Ie~bb;{`GLk%4Aq=vC~)$SsSSb&f-(io73V=<$EdZ<6VpG>P^*o!aFD=elI~UNGmWGMU?R4~fWBlWr!u76F!l?YE5b0KT zop6tS7z+RjL$lNn}}Fb__aeg_yQlP)8G7U3JOI{BE9B1kU7MXr=trkOla_ zF_Ca;>E^1E=hSfhc2eBQ66~);a)4Lz8I<${`=$n_KEz`rIMt&ls=N&lcRu4^lS!Nq z{Z&%m)tHT*7Qg0mn#rWC(A`X@$vPu!&9>oi*M6r%N4Lgm$HO!IhECnJMlo@K9ryj- zU9MMcE6gLJ2Zr@)i$fIMwc|0qM9L+x-MTQud`fpj9C!+NbTbleLAg={MqAHhKG0q%L5kG=h^-hNC9k!)I#x4?j4|zS(~mAC$Lt2r6HU*J4*@eg5~Qjsj{lF@|F!31e~A zKi<|l=&F3Wdj3@&UI7YdpMPv*GpiztTxI22G9e?~PtaL=^|dTl%4Xr5-8Y5;saS~{ zCSF$siTEOO6hC;@r8$jR?J9N0`8Bzw=hx-6a+l;%2U={JNEv#AH?siY57*M?9g)sc zhrE*?0TnY5om;4g-afI;)HCUtVV5i(Rf}Wx#m5OPcNr4!GqwkQDL(x&CS1II9mBq* ziYw@)K5jW39_uz#3>82WXzjWW%)X@tP(oS=J0+tuyc1z8_pa=|?|NCY?D-+2&q@o1 zD!J>1TZtq+7s}>7#WE68Pgb)aoM{VfFO1yUd227ly2!Y@U&ZUN0S9v3>YkDRnTlkI zNkZJP??@P~7?43>Cw8YLwByO#r-=D>i{{oKtb_amy24bzLm;?6fHZ})j+710G0#&> zB%g37%qGL9A@HwDGH-O!zh_5VYD-R4`E^|pie9>f>hh~?2V%D|?CiwRLxe4(0K`PyUNE_-opcLu z)>d-%m?^tebON)EMd`0w?WDY_etiD|V3G(y2H$D($D)GIv{5Q8wcEA&0@hmiQ%zaq z9+pK?Vz>qhWO&`6l_5-jl>NHcMnu5!;BN1Zf46XN9cpEBBX- z=g{uiPcXE+fZ^`7#;%_!-ma8n4!%z>s8e!4e5how5Ha5Bct_VxwIu;Ux$XP4gI^Ww zG>VszHfc$2b1aMtOTlTWtK&ZHBv$4q*#2c2+E(SZzTABL-V$LI3C)5Ed}wr>P+w5E zlNu_1^x08$wY3kjmo=guH$`p$zodKffyf`+B728Nz?PI2lss<6jV7G>t^j;m@qusK z(;cb66Nc$HqelP3v!CvVRkwRNoK;)?CD#T&1R9M?`jJHekzrwMGyl;=?Rl1s>#wux_3h0rX!i2PEZ!{ZOAZ$vl1`e)zbC|yUXSlo z%%@KF()_dsY65D>-HMJ7>JtKWbM2_hq|^o6S-Bf zy~)wb^)kPzG*f2pvw#01JA=3lu3Lpx1+%UEz1!KV2zyI_Xj|liulYKHm?U#OR5v#z zSTG1|8Azkk+rDn3?hzV`SHtK}n|f(?_3}gMy;BxU8P;Qyp|=hlN;81*O=-5^a>E}R zDLRGrxa|0PdEDSe{+|Zr)w6F8Z|D$tIF37dl5P1>TT?`^lfC>VW>>Vr2y^#_@!RX| zS)niDA>E-J1+>y^NP0YkfVC7pZ9i;2br&uZubWiTU+Fiwkw$T^Er6)0H-h;I@^z?L z*RD(-HPdSr!e4ka8%bcrE0oXDrhLA^uc**@W=i~%-Vp1j8!c|wXzeaHoWFO?(1`~G z1--`DkGTj~0S>7#`#8iReAl(bHvTKEy`Ueaa@E% zhZ_at*9!vuiTzVRnBV+R*H{Hthl_m{%b(?8Yna)`f)u1%)XO&Ub@PYbk36szzR$po zx4I0&i+)k>1M?3XRRQ8%9(sk1ii@I z+_O8d*d)%a?u~_4LHuMBU7F=Wpo?dVZxLHRRHj;FHF&o?AKP4InxZ_~%{fe(zz8+K zmth8UUTkKvYAmAh%dv%YoFT43Rk^ zSJN=2KmD@L$}=?H5rfO0qtXsTCvTI_1dHQrk!*wq%gnh&^STjfo^ ze-!{1SD#!7sD}7P)-|N6`34o+r26jT;{p=-hYJ$5uM!S611y;7Lly}FGy`d)7kvH+ zQ3}>y9_?VJ<39f$PWd zlvmq(lWmY8522B-O|#k!o>25aUVOfjxX}eJAb)RPj?^Vg6bI+r=vJ2&9WSS*k)6e@ z_L@x3<%-Ejtb|4$i_|6-pn9NvI89+yy_4OB_saC*JAWrGl7A-xj~2I?@PG7mvb2?Ki_tF%&Lr367g}Gt zD!<1$z-4k@cqPJ@N=mGeaL-X~vGXKx_IWS;W$QqQmJ5uV>mh%687!Di+$~9|8&AK6 zXsxXn*0TVWAE@ty(}x9Wk&;8Qx#d+}4<6THyE~%r+n*aF^MoQl3|?>lRFyPc>NJkC z7DFV}{k)uYmo4Y=<*cjNXbLx^t4EvMq3J~vV5q9eZ|17G>KV}#wvbGzO`x7(VJB3nH@w(xkk^1!%YD&v(A@J~yh*UeF7++GV_In5ci~#O=i6Xh*xhkY z@ATxq+EB9IMoJp3W{J2OaAi|^J?U6DYwP5v9{joZ`%cmKz3=rRF(6pQ;$4~cWLu-O_Jsw#eMgaLGgL`W$$`|kd*Q-4HoBwr_RtGez!^yJ8 zSWEeMtbLiDm)<09b;wSyhc*qe_tGS_UxseU<6GVJGwPBnt8vJ{bI`i(+SVW2K7|a-IWdSj8sa?z|;;YH+B;#-S)UgHLc(?h9p{{Ss z>ho|s9Jc!^ZUiKSa%X>3d6m)jL?T;*2O;qR?5Xi5TLgw#dzFZON`KXsxYX%`udJqN z<+y0YFJhgu$9daB^&+Tv_p%|CX3!D# zsO3S($4Q~98S}eOb~pW5fq?bb(ewz4&TO-kzyh{5T3V+UWk$Sb_Z(b`3Wrq=8*3az z-w|cd-OUBF9qv@eA9AThQ}=jyAGSUuI4|R)Sp)*<+uL;TI4g~iZ57r|9My4e6%Q&B z0-D;hO4o7)mu-AIyU(~8@NI&HIvOUltAZm~QT@8U)qs;*{4 zr@hFDBPAeRk1~$O6a*WsoBkX7a#A9wp}1-wPiTAMq`z%rqbdzTeY{~tD^e@r>eVP2 z$F($ExEwv-^zy*y@89QXQV*Q@!BDTS5!$bXwLsb_hlQjHc)CK2o$(;(FgFTxg*6uCV;TW75Y_`qhZJIiyH2X!T z>{Fr^j?%Q|Ri0+Lt1{#y% zT{Lrb>h3GreglOuv}1$f9q)nIioheX8saO@;~eBlqJaQwYydjUWai{5D4gV`4Vsm- ziK>P@Y%-cp@6}b=^@qL=U9y5Ov6R+_Lf5_Z!!7&^r^5_$Xu@^%Le%Bv15%PtdSZv$ z*H0}^HhMQeL-n)D=SRe@kGSMPw-f(nD8LT@`*6mCIj*$mV$>0;K;P8?p`riC{6ESq zw!nM;>>S=&jnc98$slI$u1itgu)%NY=KU$z)CswVElYGh?KLB%4x0?*2Oip-z-T(Lak*Mbm1z1&TQa5H+8kbjZ2jF+XmwV6D}qP;3vRpJ^1UiOYF43u=Pj0Dsk|+ zsJ=zBov^7O)am9Ft*(l4whvup2QqMVdVc2kF}Y#GNMDue9n_FYv`IH#H)U+Ee6!rc zyz%_cmIQ@%%HWrSNJUoO$Eq#8e=L3(@y5M9`Bkhi1CM6e_s1*0ZG6u81Q?_`AD3e8 z{+U`XS~a$WEo(%}$6I5tiypgeQ}0i77@-Z~$e$GFu`G($daMoNZnKhEHRkRIKxi8I zCCHhHfdK5N!82^lPKUW;63@5P+v_W z3|0q?vD*MDA}^G|Q^GSM6mXDL!C)ZCk|2D*YVw<*1pp?nV@wwUv)I)GBpRJb;s%jic={ zmtM{Jkg#CU&A}9+gcKWrM2SQbNaVIldwsP~KJ%Og5q;d$tpUVt)vVF_;N#kPkSR5lfHrIp>MX))`zn%ND3Co(iB-6)t)Bztk%Lnw#~zvSYyTJ z$K+#|>ykSV{q3wq=fD^9RXbrwm9Y4h&<53ASw04)P+PovrtHHpxn%b|zK18IEb5!y zczY3C3RDdtfC0;OSj^>j`~>%AYt-nv<2(%4c~38-RX^kAIt8NsMw@o#K>?SV{7bsh zki`<~RgP(m9NF-ZR(Am^yOf^Ft+}xwh{dJxHG6yXpy0gnkX2jrh}!>X0c56A14+24 z_jTLvCW2!nS>JXhDw8A?^{QELoBH&07B`~%#cac@K%6+hIB1LzR1u!BKQ(V2ut{;< zxiw`R_08a?bj$#~vr$M$Q@`%nk8PMwv>OSzjy75jIO)Svr~=aeBWikhS?{Mq;rNC0 z`-ln_Toj`_7NhprqkIR2Ee5mswmQ+R71jIs7XoK=X^LC&*-l&Z2=Dd*#<#d)Sh6~P~W4u!Nm<$9qJ{D6il?v z0?uZ$`oj;$aXPg^*W6$}`Jn!JLPvu(*b+L?qj5G<<3?1X-+Aw?>WcdzcL0H>V1|&o z(ac*To@z>NJ3Q^l@Z^a+?^@U1r(Q>nP*Kr zhtCP8OuZqL4$2wB-Yuc_Dr#1v@O^n=5EXY1Woxu-FRXT~Jz1M?EQ-=Hy=lIf2~V*( zZ5uly;SRD#XDPzrxDDi%mZ4SOuuL{YV!#E`7;ZGb{rRr6$3m_U`eP!cjkQyM$lVqG z&GEC*(^Bv*OCw?_Ep4vO1O}gLW{BT{@5VLt+#}bk>{>EZ@}xm5J?rAvj|r{4AqejJ zU`tqO=SzyKn3s<#DkYmB;p0R3Q?vY?G4>%*lS#m_E`z2b54{KTBvW zTu$uv@$|Wey}ws{`I{NLRhXK=3vJXTQ`qFK^-2(ffd8Z~F$INRc(UkTkq)9v6+mH3av$dky zDovi%((xT+qy5Bb53Ab%E8;G@y_!xf6n9LQ3MOuvDofII6Ch+d8R;9%8g@4=hkLbI z@^9dr6#Q8tv_X}z%MfSo4@PGH4nHNV{_?a_2ewFdk_1uos@=AL>)ue0vXs47^<$z% ztJl}zkY5x%5^_4Chy>X(w|MfJCv!B}p%Nwrb3Dih(ySNxJe=@DRAjRGs3z+j4%Cog z4rP0}GqAi{G(E%zutMRFhr4*3%8K0G8^L>2o9&d(c+n!}m_xfH%-CgV-)_aSakoik zz)Dw^q6?@yGs|dMSNlV0+c?{=7PUe}*7jGH-tEvv{yzbR)t#t=NN?nNf95>a<5Smo zioEpi4BhkiJAP-5il%Ekfnm?c&H#e5@E0W>A`={h$r$X+)3J2t@3rBuV0&}F+ol0j zGNb1eu+~R|0!36~n~vRRz0LL-IMx0v6k=7J2u3fOa<(KETw?YLH#}TiuNwL%=aQ^I zqsG+yvpA+6(n6Y%MLdwsQRJK%!4~e4-&g5AU)&Q@w=|rpmOHUo8+r~IfZeN`<-`^e zCc&Q;zpmm!^5eBWw@?N_(=6*|HonZgMk!SdD zQM365auyOzY0nFd;_dsm_K1WgHLNwJUg#`T9q$Rq4qljl*K&qPoEdr>Rn^i5qW15@ z=W9^rQg}gc|6spu%wlnpvIhHd?)`I8t_xv3VX=}l*SOBquO#@?c&_n_Kzsan0zGSV z^ZrVmc931JYF1>H9W0sFFa~svG?PJT<@fGL?UJ9Sr}DhG(tQoW<4f`%(i){g6}rb$ z-2NuUGgE!MnBi=2FJgAXzYAtv<;YQEWx*fKm%=R&{G77;EmTHOLbM$wC8~5N!`o&(cB@qB(5t^2r6XiakU)(R9buZ{x`t;})f1Ue? zmAok~%&UX=L6ItIPr6Qc;cJHKiDC^rsaJlkfz{9#Z# zJ!a_Nlt`w#osB-_77&?9;cfhyh*@G}ahZ}oP%N4#EGIS zvwrP$CuDjE>JH<@9gimm=(AdB!}HFnFPzVbPq~Nhs7Ou{I7C_Xv3(-aS(&j^*68=T)-Zha2g zDn5&08Q_89jhJXqG`?JYBYLOt_^ z^~fX6Y8&aM%x7LQ=}os{FVGvF7u$J?4H`B%IDS52?`hF6DL0OX{hj*M%;QE++O&v> zl~YYMVjy(O-6K=Yh9C*BQTwM>RV*T?_SOiOF2eog*XBF2zjTsr_`bw^>RE+=)vE&9 zCf;=w*i{JY70xC6ZRTyIJ6E?^5xfi*r&W?N)hagSe^wj*L+!qgQm2) zB0zLWHw;Ui+&*Sg~TBxx@`&|L$rE?c;iM?W= zk*hE|BP5>GEv%+W@XBHm_A2mpEgBdsp`LhNY`u6-+1oZU_Z$rhyV(nbM&8|&oND-X zKhD8ztv;lOVz2;f_E5EO+r36Y|Kc(kuw3ZfkY>YLE+VUrNNp1K;t1#fVwdN#3T%4Q z=#)h__Z?9ul@q-gY?@6*<;X%fUZ#$%)Nh+02 zCxF=rfn*dvU(O7laGAZLLE*p#P&QHag<$KyyK+U?>ip^xNb3d_mB!=^wf-l{J)4!n zlV{8H>V${EVjbe)J{=mseFjx~}&|L5ieel!=f#gezr2K6EEQ^y?eR4RUSfjb7-+o2&ZCwktI0yegvsx@m19!c}&YoM{ z2!e*K)rZNo-f8ZbtHA74tOB=Qq20YwKF~s)v_%UssQTHe#e|=)StC;wOby(LqV1t6 zP_S?Qn_LX#eMPWG`ZRT^8Q3X~s7!$hg`Wdnp9*N7^U(Rfi2m2dKklu~`Co&IB{W2N zeA=%Mf)Bptg>n6dhc?$XKicND0~C}Lf_Zwq_}E=)Ilws9%U$JTiN9#AHVeQHs-NHN z)wXw5*vnqWAJ4p$rRJjR9u!i>T_Z^Q77lqkBk<($*d~cw{^ecc{d)EFfYgg-|I$=v z@r=^c^1hZw$k0YpLF+l0m563M_S~Zr33H~4Yn7<2`e&1=T3(XM3iRE%?eDj$tz6%D zRYa<@WvLp@?mp`_b!zRIjZbW}tuI?TRC~j)VQckx+)&|E`1AQ}IZYI#Lcj-_oQH zVA?1(BR93bAOWObAL_+ZVYv-t1r;k)-DUAMe|RFt8QHtAHBDW(ez;*jY4a$+BJ^gN z!;6O7`3Zt`>r%EjODKN8iyBwZ7$+ea{5T~Ct`ASH&`oc6@ElM3S+}l*Y)KnJb}OpM zyLF4@J=8CC$e8Dj{ww|C#rn{417_3eT9-#3^zecwKw32>GibiO$2O@XU9xgBZ_(j zuPYEuIf}=#%;AJ=F$Wh&zq(!baI%57iT%5nS^-Oh?Ruap@atsgv7?8=eGX4HNZQ9V ztF-unF*fP6fBN~K6jb=5v!3C1+DW+RERKP#ugtnJKzYdWPS&S-=me7`%Clc=_o*BQLzSr5N;D?JIDG zqQze6;H_C;TC})2>XT?OVUW&}>V(cLMUBCL^65cah4zV-t3|VCjRPt=5N3RNkLEW= zroW~C5;b5IiY#pvi>TZDc@oHSr=$P=shD2akGXMvXNu=$0MZ+*j#1JcFR+GS`HQnK zL92wH1Q+fgO8Df!jEot;hc;vcS26FB-?&Mp z84Qf4%$~JZ3%W~;yjCy%X`%V-4Qw6jWfQAiWT8++&8@Qz=U-Xnd?~n35uvY*Tx*)S z4V!h*-I`kcPq8V*>SqP1DqXZa@4d6%x%Tt1z;vfF{SHr6)E{l?iIf=Opy;o%Jnqht zaNmQ3v}{W`UFQe<>>RN-L8}J{s9K6Bl6z`fNGbC#OW2 zM|vM@q;JJ8j*_smlV+1&gz0kdEAYOFk2ueBHttp+gYheI6z7&@7D1!NnOJqAh(wM$ zXKG=NOSv51@;Bpn3P&o!4f^F-C<@ur;Qq_pO9ol#zS@PyKWQ>&R#+Al1@??QvR9V! z!u`W2GZe~VX+KVz2XMdEukJwnQvVI6aht7+KhnKnP(zL{m~x$tZCe9lPO(2(^S@bh zS%@*qL0uQqP%5Vzb?7bcyGqy@4qUrg`@6S7DtYzWgDo#MGbh(Kfa`OeN#3wnE^~pB zR4~NOP@C}X7fZb`(~8q;N*itOZPJDF(6sZn<_gn`M>s<)VJD%`&Kx;z5 zd5Rk$ih@73lUOp}-gM=>tA2kG^bDgxh=-e|qxR~nZGFT$)vMp3%$*OOx1z+J4xbIU z)#!Y;P`CPz0OWJ?he-SV|DAxDrm?hTl)ryp*kw~;WvLihC%$9$X;!I8qSoh^E!Exk zd_CRztL)qWg)w$VK!CdgI;?HPJqx78E3@4)s5Tn( z^wgqXohwu0i5H_9&Ltsyzb0{9cR=f8CEgkn$uaamMjnk!_S+KJ;eQkvdC-`!t3h(6 zNiyamwL!-z)739ogyWxP?ity`po#PvZIF+qFJRV^gue`%fMWuIXEG;S8 ziHv%sugy00u&7rzw+C0~i6J|1MV1KUcZ0ZtO@&o@RE@b+W821AXLnkR=^-IhNY z#}!Cgq8W>Ewfp&E@GoEvl`Wu!UAby@6vQ0a2Op!!H1g&cPBo{5yTvxX!mWm`ZI(k;~#;nTgdH`G6h z+7Bz)8WzSe%_3Z6PNNp-krzbPzkW^0_mV^vKqfj;+;03}@V$Xidje9Us}GjIs_C3Y z$@Wcpd)j|j=?)`ji`S^#h5wD9-0}SH3kS_g735nU$JX!vnp6MX!nkzAO6ze&OE2U_ zJgH2yy?o+|@^ekGigrOxP!>sL@`*E_2}C|Ulp8$jpxhwZ)L~cmSUV&)8)=j zfzvO2OfYmb6?6A#!$CX2$aOx&SI z2R+ZdmHV6;5PAj7hFB_Im+~(iP2cUzeMC}I7lfTATo!89QDXwSMV!zf-F@YJvANy0 z)IkLzR2Wtl$Ajt?p;6Bz;hzK$H&6`C@wdbI<-pY8tyw4T+|U*JoqDJk0~jlrEJ_-y zb-b|u_03wk1jfPp)L}1}@IIIcsadvkb%nQx|IchT`WQHB(=-QM>wLJhVH>{;maxC@ zJIZn&?XaQ{I34WK*<6bcWaW@kiO!?Ea_3T6%6n;Dt3s73=iQCU9C@`JgL{c(T}ahh z9Zi0q?HG5yhV6ajaok_$(lai_`1*L4{8i z&ofj^IPW4F-PW~oe(w8^icRLkN>W5x507jR;{Ru$IEFLI-l&SJj=8fwor(2OQfN4E zIn>r#WZECLI6VPw2uk%CHml4uivYqwMN|GjuZy!=WD1}t`=5jtspm20`g|Zat)>At z_@tF}G!0!II+e$mzy~+nx28T+57ADZ?QEQ4EylGRsg~owg!k-(M_riq-Iv|60kd#zY{v z45#8Uq(Z_Q_?jgh3I|)Brn`SjBZZ;B$pWi+k;WcmhS}S8jwS7s2Dq?zE8j`BxchbJZ8J8Or+8 zt(1Nq79)FbBBc<;Fl2r6n?u7b}~K<d&MXtrmg>c3yH{e0HdCE{+YHzV9OiV&O2txA#!{+m%w$@1+6Ayx7Vc%*0Hn&_PEbx$cmG#@y;1`Q-zDbP;L?r_ zTIbqYxlqeR_`Gn!oLSpEIFjfwa?p#ob%7PnBes8@LT64IM<9OeT#Howt;kT}b9{)( zxx)X}{j-rjLT)a_NU^Rdgq`*4+#v165M)hz;gO^?H$lsM_V)j4>O6p&?v}rA7Zo3h zN-xs8C{0m94J8zj7CKP~orr+aLa|b$hAJH?iaad zP0#b&w35qIfOSi9W1}8K5SP^&ki}(`$w;}*gNd*6>C84_nF+i?Kfxt z?pq^sx2f&Ps5+Q8Vi?BVC(C^NZ@$YL+~-$hoYTv_F7&)LODBrA>?h>P9806=7=VZ^ ztG`S2)~Q^*OG|-CvKp@RlB@ z%}Z}pV&y?fo}%NhjV03KTPY!mU`@6iFJ24oaxt#-N*5ps@~`8DGqe120V7JNyGmSs zWTz!9O2GgXmco!geL3n7mgYC4rD}a4z|(H(&Uk1cvZm<<#eIJu>%5eM)$5#*C6<32 zq^lY7_41n75u%G>I4>L(8IYE*`c8RG+6pemrA02oi-!&+SGIu_+O6e;Yvo(v{_0-o z8;bW7xG~B@?J=#c!p+wE*2AP-bPDH5z_?Aluc`_$1IwN#qM&S&z2P-HudT~|rRBd` zfFn$JOA3JpFO?RTdq{fiXUwxezd#;`WFH9%hP5AY87I6h9h3GgJsK0t#GUL2-*Grz ze`Jd-cN*UzZf>J{Og2@XcoY^iM@rY1*t4UPZRDNlbs7@IJlDrP@}k6%eiZuV7%8_L z4hf@t|4vN(5BEN5*x03BXSx6iyI$` zUfF-;8PUOvy+7+=hI0Agl9)Fj)WPnG3RfVe0!@ksA5e9EwVJdu1_7_ z!=|U_I$+P-qE{31rv~1My|YCi?XOoHj(eul6OFpvbTV{UiOkdl>hQ0Zf+IFssn$QG zs_!4$(m_A*Xn12goaWj?J5a;eA1(6J3G}4*toD?UAo`}>!+&(deW`j}=^AB|-o!@y z@xjm=-0ChPM`0u)3VC~t z(4c3H%q4}-EcC1${RrssrcDi>57DUb+vhP|v)xe4b6;!O+L}Aw*1ElqzTXhQzcN;Z zH%#m>-AH2(r|jDw8az5K4Q(BI-fSIju2MTzGaxBYUiW)W@%8K6a>>qj!yFM0D@!I1E%3d8-9Je?1L z7q%UyRgzMpl}+!%y<>kS$6ay=m$-x=BdeOnJblBO|9I0fFH50=$%V~R4%p?Gd}RH# z{UVswGn)-LU><6$Nm;A&de3>x5g?czzmWwP#ZD^pbVa{QR)YDT{JA|b(t-_hulrt!LQWBn?*`MAImG>oX3F7HmT~C4 zTKz9z%T)V)^XVn}apJJU+iD~xYcLpH6O06(POG+3#up%;mxmHcJC@n2?S%^+yvI8| z*`#?l)=C$4n5JY}HUnf=5tS5@HObY;fyAB};$G=bLyhGT%bHi(sKyoP#y4`ws}TKv zXOkll3c-N8zX8i|H_VVj-6Iu+(E>nksBXfl(o!UI5hq-bwO@$YWLh9gg}fwxW{T%} z^yHKWZ%lSg(pQFE0y+Vzv#A1&M=1Bjg3y#b8_=`eAbc2Z#*#}Qf^{*f7Yz}eS}rM? zb8MVEN|wvpm%SC(`SUkIoUQ_gDWMDZ`CFFsuYD7wogWt ze?6G-rqMAX>-Uw{y@?JeiPngh7Vlay&vQ!~oO?dGl_ktBq~|uANWxo5C3&bxK=v!e8b>F?rs#!%yZki#{o@UEME^Tsp+{E5G;Cqb zfi73}T{aH0i>Lj;_|Bx?NKxCFnyd`FYT<#5CGL)g+Z>T-tC!~1X#J2BwOt6&?3q;{ z-7V`O=Y`iEP+E3RqsRuvkQ=n=yrU51qgMev=Vbw*`KE)fbUG)F>UF#6Z!rOD?Xvdb zwBUWiU8%ek>GDV8ElA;-($Qtqc?cZCL;DT)(6$-fK2ID!d^==DTS(}k&+*!1Stwr! znX>U45?Y#lEtNJzE3`46A;e zTK8;i3oM*`>?L!YWO%W}qGD3uO9$!Hl0jB*5VnfJ5NUL8b*~b9!79~6Pg7P<78SJ3 z(2JI-26HwJv_5hH6zo18x7t&IN3dQegt&U8ht1$U@Q*27!U+I53(?rfL{rRWY$As> zZ%JP@@{Hy~eKn1lcOz?k?kUgn43}MFzw*qqo#?9+O`g11x*M_`ur?4lI%B!GTSPB4 z0YW3`0!x^KG(xUvvty43!}IWw9#LRjv;X`uB(0An5hDVN?#H1ki*@@=upzE{*EgpD z+)(EcYG>|eFJOP+9ue<#F79MdKf=?AB@>6?n!#m!Jy@V^;7><`UUue(jb;g-j)F7c zD>r#IEV32>Wfs;3$A%MDa7IYXbM?v^Q4v)p@!Ac^Ej;(%vM!N?v#k4%zuMx|3wDagmW zsC)*S$-EHiQ~WMUHbO4AWysIVnw;qYAt{UE;=T$-3CISlOF`)gytFehfrEsgF-(!E z!9~Gf8S4^cW*po5(yodNd$?RG1V%g!yHP;RJfb$&s_C=Vb!pK7WoVSxMl=B;8X$D) zG)UiLOaDjqNYz>G3n`&B3W*LIKqZ-k4KE z&7C`sf{k|w4JU>+l-SlmY`rlp#?`u2I%wFoiMPrY)KjTPaqtKP^u%??P;JK@_FxL^ zoZLtN0-x?cbW5-ei&5T=a32Ip98Bfs=Dw$^G*o5A9pyTowfWbghPx`T_uv zs=rvCoP$C0v~v{wv->QUFb4F9YWAo(Z0JshU>=}}Up`RXTc*wSJ^I1nWbdwIi0f`& zCBP=0_G=PT$yp8|ODt%FQ9g|9)7>oI9j^PIhBI4CS1QF|(OC`rq@NJFPrR|t&L_om zutv+f+p-}AoUd|*6_>5;q;rrC_3XGRf$4D62dCk%k zy)nQZS6+D*HG9J#jbf40bE3<@aq`K^NB$J7T4=Z>5hU?9bjop2c6S&pakgydZ6}BD zCnP00>6?irNK{7#PY!+k6QS;fT0s=O5H%CEM!hc5eW(W@EVwnLIrRA(C5U1@vWzA? zoDk6go)byWKYNYL!s!_UC^ESz7k@i9A%7nzL@csjZ0O#lw2zX?a(P)kJx8PHOb#i9 zZ#TBR_N#%l3kDgVs@FWki+4s_k-TKrm|0DnW;bQ}&B%Lt`0%$|Zt)>!ULsY<$A{6k z{nXt6u&n~0RW$*g2BW9uVA8DOcP}+5nW%K_Y!A)?Z*y{mrv`g-sHnCtItrDeCB1izL+ zA&IGlZkY!ZyR3~pcG(X-w)|svsW@e)OtH{I>(jl`onZoeL#ERM6&qJ_VA`#jYA3O8 z;nNZRrKOqTDIC7Z?yp7+45O84j8}@FN?FF=wxN>@!i-$B58q?plo|fO#I55sy7eS#v&*joL7VB4l;-=djU5$(yy+72v1fQ$8h4 z<7(S__3LvnbMzzsjUEVmj~^a^2@TC&Q%&_+3|5OE=j2pyEq zy(qIpLalEJfgT$v>2v92fbXRg4SV5cT~>vFK$t7p87{+ip|`F6T}l^p-N1m^wm`8u z>bbaTpl>ajvt=81^Gdo2tJqr^Ck>&rWy-Cspndb-Uw=lj(3Zsn^c()aJ2zm-ajF06zDd zcGP%GjC(Rdgg0!^Cd6r@;p@O-D8=_NdDT5+&!r+`iTX-T5&Y zQHroF>5zCBxt2ye!hGB=9a>(%MNmEO6!#_Vz?YVK&UZH5b=kdV!}p>z)W}uhd`tWN zBetA_()*tGQI+`EW-inH%mGPDp^NlGKy!CFJj7+qQ*X{nm^nv}zmlHK7Tgv*C8edr zcaAe{ce38-tK154OId)yarX7pH9k(sgO#8Yb!Yz|k zJasEd)!lQ19Ta8&(Bqflya%=8%lM5nO3U61yC-Y#uwau%S;Xa zp`bcLFX6HEnGY$iV$X{x%GfF@>(OF)Y{BD7TCsgu&5bQF^<|A=kGGRkK9>481(2?A zvE-9=Uw^G7xE$Uw_!D%icf3aYh1ykdpW#dNPoL)BG9mlNR= zkmF3bD+$THm1&o7CwBVg^yw%@@`{Gu!`V6J5!K61SKe&|>DR~vKYFA}q+RZPCVVsR zI4XO5-{}w8-=|O3ol}X|9Bs5MZI_%89x`~VXp9-Lei~eDfzRySYYYgVqi@GVl4sXl zq+n$dGW^i{=;3dvo1T=>oQ_plre?O;{hbqtrrkajkH^UTK5!l zOwK~23g3VcE{GS;c$qa#hDnD?4%#9f<36xc8nqJs#}d5A7-Q@tL^b5MYj^k-|54U| zXMs^lIYC&du+=jwdnhT#R94WqJBk%7r#x@r$0)*x@@E013qYkC6|Mu#;Fkr26}TT< zR}yL#8xMw6qur?^M4V>QVww?)z(f4BNGu%pO~`NgFjiKtKCKUjp-NfU9(HmR0R%Fp zx8hc|u2ZC`lOh7!+PnvtI|px`H?l6opx62{4lV={{XteX+lBA=$e>os!gn{E-9wRg z_?D;-S=8CuV*wZ?gL;RF>i!ONxX9Bc`Mw6Fj0usOWhzd~DoLQEH-iq_UfNDc&gm1f zrg^vdSqE#PU0$sus5S!s%(rFH>-OCaOHxTo=wE;z0bIZ#;pcvJ`}6#3E!BTncJdmoVH@~$P#8tzmW9eIJ0H)GNkI_+2a!bD6Q6kSqV)| z8&C(eg~9rh{br|H%GHtfLKe9UsBZ*)nI*z%Hqtd7QhVu5M$g_Ab&nCdf-=%Feo4q2 z4`x~~_7Bf5dSE1n1jYzG`!tIsRIpVYQES;Gbn z>jmH1HXzA|`i}pE|5mT*5i(HuZjgi%4|>5Gg5Y=Q8s!s|Y~%-Ahoz!_9wl0qGisUD65Id2liA(IG1S_P%vsta=q*^! z>1fax**(_2j9AqQ6|^BauRb!OerYy$_6)o0y}F;cY2UUI69eP(piny2}PGVU@wdRsA3WX@E#J(kGM&+K+f=DU?obE;wy?CK2s0`-SFwfLp;_|4hk zXbUI*`9OR_nCEeB=GF;e+2c8!Ui{0CYZdrzunHUnxoxNk_DK7lsWK{4AAHU%td#`M z02Y9Mo6@8@2BtjAG;38&+OUa~Ew2%%`%E&L{@aS|%teO#IW>E&XVCe5ikdtIjfIk| zmor+?2Qv41Tt1BxxNRtLIv=b?ANU#x5B@?(AegMFU8+cap|GO9gviMo7CI8C&}>8M zT2QcJDEUii?`~5{*O_fg7!zt{-Lb;1CYEgK?;KTM(Ir~3b4yu#-ahyU2UcMW#0GXU@N!@w?tP9IFeV0Yq(aGrN|q4 z@H0jLfK}Fu9p07(^h zyx7q4FG3r0E@8)3RIvKuH|E9;zRd?ga-2l1%#kC`9G2f{0^KTtH}vl(qwl;QyO;#4(tdc9wA@UNAsj{F=l)In2OZ=AE*rDXCs?@uZOw;iF}qjeyV| z{12`G`R6kZiCOE*v3NF|tiI*-ctKn%$|F@`h>DxfrFf0IA4PP&J+Kk)2zO2dZBo#c{0Z;0 z8+P?aVNEM{VF1`_AtSa1)?3panP_CaF;s1qbqRZ$nfC*7(|)g7EG#hC#y+ztxFvE$ zb0*E@6`PujZLw-kCC1Non1s@vDR)W0^^e!#YQT+C4in27N~^)7g0?qk;-f3goFPX` z`#n{8VW0mu-P4_q{tpZ&xb(k+!&YUcZ)fC)(8~ZKbOfPL0b#?Gl=AJ`Gd3xPHA&T6 z7hWxH&blUNn>hNY=BsC7zWg|AwT$TwYNM_bP&?Kzn{8K+t`F}uiDE!b(r7G7}pg# zDg7Nu3GjYg82V;qa7uA-FPJ=t+L*WP*A`>kLWvBZIXHg6#!XHt(j?7 zx(mRvhD5oV87~U(Pp7>MKEwJ_!skIfURf3!T3U-3`_kuC_l>zP1w}Q_jJvn@I)UCm zX+dDY2jWl}{>2Fa2Zic^8r^OR^^>dFq#4_b$9QM5C-!j)50}2fs*|bkZp{<+C_sP= zE6vvjpGF#IY2!MBv!iA+v3Znt5ujw+3MZbb;TVS|mZMGSg{K5U;KFOgBRQg&>^8^{ zuEN)}DJ}>>DK86nAmzpHMm7aHEhSLjvp3da3Zq3dy9Yz zU*D5E9~DPy3xpla?fXeV4yjJ+Y&{tpBqpgyRpl zUTqw6E!Bb#g}yNTyPI&}^&`FHZoLwiH5MK=_$+V%yLi{}2gjeJ0F!BU0a=-PFzYZ~ z=>)Nk@KQhkl$s>jNDe@iU^(Y;f$c%1Yn(4{T#1zH+IIkGMO}>%UqM7yfDFJ}tV~*7 zBoQau#s@EZh3-2WCMm_U3^U0))H-!Df6HV-5E*v7&=L zYwoc}InQvJo}1Sf-D6gTP8)ek6Su-0HgB%!t-pH$a9e$0@P^E)~S3Vs+uq_8TBi}pM6`!uE zpOiHX-^X*s=%Q_vJcE(D{Y{+%T2LJyqlzC-?^-PMzS4bcwfT`Oq=3`?b6^)1-!E1l z0fT#bTf+pog}4PF8hQX_2iSogq$f|vnvnaGHudwB>U2&*E?>$+&q_}@3??6Gt5jhV zS{Q_0L8y8xY4p!8HpFIG4>7M>8nuMzROech`{}|fl4z*u*V`*Y%h6ueipMGyWqP*e zKPpH1(V@%MF}3&k0B6Z3PFv=0IlKLDNdDqra&K8;SH6IpjH6FfC|7w=Xv#?1=l0d5 zky+PS;D*pNh~Rh0c*V!5)ls&@=>$PtAjLMhF`@H1 zesVjBe3DTcAk^lW;8{6YPp0B8VQDqMMltz9i0AN;cibF5D} z&Nlt4TsijZ5N%br)ui*nBL1pbxi1T!To9Q|yvV#J6GAo$t{f87w{w;>R)LcgD;so^ z@uF8Fg^vc#H2Y7MYQB|($n7D6U{Z3m{+W!GF!LAm^d3vMsm{pMa3P(+R3&LH%-pgB zO6u|8Y~`!e?A-jO$7ULIwe3XDIoK3($LU)#3t31R%k{vQ8-E4K?@8i9C~|75bF(*i zV*;1k@a1{#d*dWrAR@4+YiJgDgfj@yt-`-;L9}3dn#|{YRrAt862+y6s>w}uSoUDB zhmtL<{N40!>UKRjX60l8vrfPLtlijj^alepY)r3UJ43TOh4j4D>ghq0H0N+Zje58G zHsR5)O=BYD*rxx_lyh}V9hDqoC(Zf))&_XpY!4$%8oW$ExV?qyMDItrz1^b|N_^Yj z%@}GneasWX8vGGd$`2NniynHvC#1~T;!#OS!m-uPHa8{gjsJubU+Fe2d8#}%CFG`q z5OeN5dQrBrCt^{SvzV&6_~

@~>te8mXOadw2G0qz_bxAg#n>_W_-Nz%q8*i?);KaPr9ipu6gD;&qbpm3)XG6G2LuE z2@k%vZWt9Mbyr)D0m_o}oh=m9JobC)J+Ba{cK274?rl1to-p>*Gq7dt!>GY z*ms+$n!iesUCQDMb~uN)i&WfrYSp|-7AnKOoWjsE479v-)0B5keVhgClWHchQJ)9= zU$kD`yoblA5qURO7XUhD{9^jkl=ds$M@3${D~{xk;<=t!T>_tOUUboYZxs`}+&-7b zwgw-Iv6+6Ap#Y-bcav4AON8B`$(lWx8RdtJbQAv%mV<5>kN%ZA|1B4oiXhY+Yq_TR z)Qw*@eDoGJ_?{dmJoo@$-KY|3?W<1Z7c9JK%z!;{f-4jR)G)70&|Ri7XHjfKcVQx* z(%tll?p!?{_@|u>}gN`}aj;U(St< z<<;sKU?8NwpNOY+aroecd^%bWzJ_xH_SYDBK0lIf;q$a(t0J7LXGb8SFt{E@IwYU3 zHuQsiDx~98>x)~|0PlO3NmngJR1c5g>skMy2+-AN`2V2EPCdpRJ(uZyPC|#$M8?j5c5IKFShxp+nL;_wP{d@>*1i~yk7P)XYtuU^N>?+>flp7U z?csy9GJMl@nZTvOc%hm)l}u{UN7T%aSIjqcaNv0LlPuG+#ChNQ*=NhExH z>qFxRFYY#QE81Q$IjND~Tu51pGjiJRVJ2?$pB$-+TsZ_s zd>j_+at=2T_0UpC^T^u*Jgtaue7r-+B{#-V-^y(Jb2p3hhB~*+RdwWqnzU*~FeE^0 z>98NbEK#OBkP|iR)!o|byi>ZZ`Lc=VL@HfBRtJ3Q@&0e~4u+Rs#BNU3+lS4h|5dP7 zp$AHNq0dfg-qaa&02llmeq_P^9{A2h%G5m>q~e*%0d{^1HhFIm9(X}7<|e9LY}~@C z#d6ugk}gd`28>(Ae=GGLgxW;gUdjdFGKExM#u^h?y0q2cu-R;PGzhK$@b%X2dO{Z% zhZfoEO+?LllBsLEYaOUCF_`CC4=HBPKtenIcfPcHnaGuBGcW|^?LqH=a!Jz>7+M&5 zb?LKXsi+!3$V8>qYh=DR`8{Hha7UVk^NQ^kLh=Vs1uc+XzR@|u7cLhL&8~*N-{*86YfmYG-HYg4156IubaIHP6&}^z z2&89_o%=9#OSv~ALEB~wwdpKukshbzdSOOe=82pJiP~Q9Hjkv@1zF&@d(}UL z=po6P*&pxLHH3f|G>aS%;%%teRjn8Al8pQ4+FTq?*^?`9HKc0VTSHX;t7Gs5)!?b_728W%xy98^Bl8styKO^t zAmQS(V90UQ=JHO9lR|rN_%Cw*g=r@OtjV}}XMARy4o}_5k*Uj$KVsRmz^u`M2`{QpvEoM@(-N`{$ z0au*+ZKe2Z{XTS6<#seJ+`SY<#-Y&O+{AG-rG?V8JzIIIy!jZDO@E?(wBgRz^{hz$ zo%c8$rK&3kKb!IQMN!3Kf_4NY8$qmrf=kkoLqVTM^57#8Q5kE#rMW)m@eYGD&uA|w zuROkX1xCdhW;?TL>5Z57UX(hS4fLR>-z12e#4i_9NS8RyOuW(zK9`IQhsV)*-UCxp9TqE zsTZ9y$Qrx_^t<7FnKMuKM0d9)p2^-A%WhIFN7!d^XCwQ0^9fFOy|t*eAJ?fdwl$VL zx7ODBkVnp6P?iO_9of9~PX5pl6ZOH$G@zFc|FyL+4&*ZWO%k1By``#NU}Mw`DsPKKd@-v;0q^AG&!= z_}!sj_~+bd_^2bIQ%rAATbV(~YnJ~Vu1sc=? z7x6Dyj(7U#Ky6&?<;cv+;A`6L=gf6P>y=*{jvhQ-%m!HlqHUfwNA8?+)Oy+y5Lbl6 zD|2O@z_#BhlGVf&_>?SjILW{n_+!Ma-vAH}eljBN=f7O^$O1brSY*84jObRMo^MJq z4ZrNS-s8taMeGTUBY(PtqN$*(>_w_qo!Y(%Y&0qN#+&s^$?szh5Z#M?O7bGohDkf(3eNCKWgg5nitd-1U3 zI+2 zb`ETi3B09_9^A6J+k_#Ljq5A)M$^yt7^`GVWjaHGKRa4UG%Cy%A*HW1e^zHuqBV{O zG(U*M*CarR)EZqEP=VZAgo&MQ$OA`4V&`&?-54Ri=*fJ&RD&2fs{dXOpK-)CkJf*F zKRuJ|2mUMVw_ zrY818Iva>`+UxVXCz#h*z5dEU!tDv`ztbLw!rt0$wc;?SERXM|4zCP`NN5=bHm~5_ zc8MH*sX-?@zBlu(_ndZWBY4G@{=pgZ`ian6-CF%gXng8?IJS9OK+DlxNvDS$=+Ss< zCTPv?YN zgHPSgd>PdtEG-Rs#d{_B1FL1iHRp?54GEbAXpiRCtPa*ME7~vD*P)&v#|D?1Iz=n* ziW}(EZZs*XL+kcMGHLXz`b|$c*gv;Tlw^ExfiR+1t1`S zRoctRv(O@b>xEk(F!BF(-V|v#PEH&@o&VBzxG%0Dx2uvgoh*UZ_aY|L3 z$6oOj$X?1Y-1f4f3vhW4?(92iP>at1D_rx=#Ti!5!nXl%X^fj~PnvUKWO*$Vy8W{5 zpOUFt)9?g{wWte2^XUeiUpET_iytwn`5ju!DXtSW`+okK^vt`Rn9g8B)YL;h)2_te z+3yil!H|$}-V{F$EKgP~8gksq>#woVt?T07BDX5X>(Opy)fa>On#0gZWE<2e8}|XT zxaZ7Qz%LaHPK;tr#pJ?aw$^RaeP+f(OadxMMckI_mFS^!vKlapr?r0077*>tDW^tf zzf|vCOzP7$3ING(<5Sp&aLIB_xQ$)3N<=03x$eGC`KYlfcBV6|#!K7Twn)&%{%YG7 z|H@APs6Je?`*s1Y-$rPb>m|J}*=qfv^1GG80D62+PMO262~#C*5DkbsFx~1ly3j*o z_H7VzaNet($yhmZ)wmDj!@AU9;3nm9{k~h}>F~Q;o=+n@7LZ~@_=nG4gZ;JOx`|4M zrp=Y@=dH%OE7NUUP@0>+u4|e|N0u#8R{wiK+_4sz4jL6JP9dx99la-s{p&#dH&@8b zD670E((-^2bTf{kq$(-qRF;;=W1w{Eb!+Oj4C@t`XBV2aTwFO`R8DA1xFPauH9R&{ zXy3i{{E%@?A8E|#lBCvYIa%wMrriz^M%InY{0Vw5skwFDiuXFy=gSjAtE()A>txH~ zLX*$34%aZ<&QIwA%Gkv=o)WgKvyad1WcTbbwBz>;XOQ#ZsS*nA61bA5cxs?#|KeJu+l?va~v()Qw=p}5nJSh*NCDEiGxRvs_$-g671~@ z>dOhxZ25w@&T_Ysf*Un!hU^vP{VF-P7)pO;^u5?kU;Ht6kP=#WE9!Q^i&;l?_{^=A zFBQf!iB8ESus>D^c!cCl-7rpGpz*bV>Yem!k%i?e($C#)?rZpdMyan4;1@jl2Aia+ z6uY^?b&nuz2|>pFa&2MV@jUyE>lf&{KqDpgv-8**Ky~$+>bbC8a^p-7k+w79sK6Dc zQ#j~Ge-YfHef6Thvd2o}!+4C7-}b+|wQ6V{SovMzIpBQB83lOz*2k@eYMg7VNf#+c z(Mm=S`i2RYhNQRN_|0xII{fzW#2F>6>`F<=c%sQ8+?%1b{G7pntp?N2-EK$%#?#=j zPrw^me{SgABkB?H;-v9XW6r7c7_XL_xz`%XG5T4d^-dP?*LF+W7UfsY^kq@Zn(WmI z-ln|$SP&pus;Yj?Xma7dUsk8^*1*|b`Zo`Jp?(&W_SC7XYKN+I@JPXg#q}tfe1A{_ z1IuUKDY=t080C#9DYzP3^N25b>68ffXclnU=&k%$oE`>WKp5rb*OOhBFN}fqC!soX zEe0+7E_JCSSTvLgPt@!dhQ1~UBERH~@V)EM<<;5i^q11+*vcRu-dQV=LSqwqV_m=x z9+B*1o?Pe8>bm=Mb9J(DdnO}1>d5`5g~_Sq&i0pz&6aL&*Uk1@%Xj!LzT*!YY3@3Z zCY<&%oWJzI?#cYsj?&Pp6xD>drk}3D+{5n)oBB7D0#K`+H0Z%7*DYmcnGcaa*~uEh zvTr3!T-vj`xbh0I);ziU&g-8~%{t++zrHS8f)zcuHCnouY4?f;8%LpqFw&uJGPF(qRDdk)SC%dp5}^JPOA-zYn&{l{2+!$>(-Ag!_1f*XZPnBlL2rG@!z9Yh3bMLGe`peNDeP|oezA+)BVmU7k z;Ka8a!+r10{>tA)_;)R;LYjgPsXM{G0F1b z7Ek>zE+QV=VLcf896t`pj=M^&V>9v!6gQncpNE*tVr1keHgaR0(Ga`XuI})4t>d^qVnjM0ZDqp1)tO<`;Hx{myM=9sVsiC?E zELN=J*4R{Fpi9eYvt!$x)aS0+pGw0xc*f2BT&lrIbEWT6DP=qgO>+x@#a>0!k~RIA};z?%C$52K(P;C$1pHs-_HA8Ak_7$ zu;saq@KThib^uVT3ppPbC?t-z?7zPHYf>~95mmw!*g4;H_m9SZ`_GL9q#_{ z!?$0HH_#T-!^;h&nz2KLo^X@+U3sanzI~T@wLlm2_jWn!frw&V zmSZQ~%BKw*O9#69hy84MdO!?YD)67i zuXou++GiM#5Mau{>~c4!8Di!lm$lrtK_hUJMzxFfxijF;8eL0oCu&yu-#=SO?1MgK zYAS>nHgo`Mk{Mh&agb}C^Zpi$cTQ*Un?w&t@{3)FZ0`ewMTX-lmm?=J&vDD^Ur?t+ z$7@PtleGr()H*aBbrSGy77?SsM{Va<+5^ta-hRLz>7Sk4$Zr{Xa!8Rj_NZr>5~%aRE2vXn>w4=PDVtv!@Ax?YCpLyE}4_=XKXyH=DUK z`cp2q`rT`ADyUk;JRf{8BiFl7Kk27e1W${#blfiAe448li3&;i5!t4_5aN?6J9YN0 z^Gr}g>S3_X1n^+=Ffp#L-%M&7vcOY!N_(vDw1uy%-#FQyq$V&*;Swo*T9 z{EtTT?^T~x<8{-nhMF5Y9?h0NzuY4-Znk}`Z*|`6g_e>uwu$(>^`SuU_sk{n)o=wJ zk%E9w9m;pIh=XeF`&*0n{x<&gPZc@(%R)gpuJ=4=ety8dW1F#k z)&AAF#^kopLNA5nYwK|e;P>+#{fvn4+QII6=D~ZX<6+>vJ0aCoH<-rwN`39CbS%j2X*8l}LM~H8X7ojqu#uh3W=u^)A>?z0+ly zCnG0+Ct-fRH)!530E&Noe7LA^mz+Lv@13}fmlsdvDGr0T;$d{G96+z+H8GW)N5pug zMvA*p+Jd!X`TJb?X5p*TzZ3pJj>b3u6*loi^)7*gfk;<1t@IfFU-tHQ|a=278u znsdHsyiro=E4`5S2CwNUq@Z}DP~HQ|k8MD;xbS%&~qqh`p-SRVzHTr$x->R7mk= zAgu)+{-xFamb+8R@b?&dRG(qRDC*NjUr6tScYuulXU{SQAFRdv!UTJ%kKcAItMk3_ z2=L+;*QOe%`GKS>?xN((H2y@}53fl{<(G`9_j2T2-e4ClUe${K(a6NOlC8{qd4ccO zR07!1TSZo$Yt{N)o3|)Lg#YW)Vra$umF&$RXKdp-|2mC{zrw>=XoE5F1pN=BeIHn% I`S9ic16JwEF#rGn literal 0 HcmV?d00001 diff --git a/longmynd/.gitignore b/longmynd/.gitignore new file mode 100755 index 0000000..ff4a5ea --- /dev/null +++ b/longmynd/.gitignore @@ -0,0 +1,5 @@ +*~ +*.swp +*.o +longmynd +fake_read diff --git a/longmynd/.travis.yml b/longmynd/.travis.yml new file mode 100755 index 0000000..d5e0562 --- /dev/null +++ b/longmynd/.travis.yml @@ -0,0 +1,31 @@ +## Travis CI Configuration file + +matrix: + include: + # Ubuntu 16.04 + - os: linux + dist: xenial + # Ubuntu 18.04 + - os: linux + dist: bionic +language: c + +# Install dependencies +before_install: + - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + - sudo apt-get update -q + # Build dependencies + - sudo apt-get install libusb-1.0-0-dev libasound2-dev -y + # Test Matrix dependencies + - sudo apt-get install gcc-5 gcc-6 gcc-7 gcc-8 gcc-9 -y + +# Only grab latest git commit (no need for history) +git: + depth: 1 + +script: + - make clean && make werror GCC=gcc-5 + - make clean && make werror GCC=gcc-6 + - make clean && make werror GCC=gcc-7 + - make clean && make werror GCC=gcc-8 + - make clean && make werror GCC=gcc-9 \ No newline at end of file diff --git a/longmynd/LICENSE b/longmynd/LICENSE new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/longmynd/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/longmynd/Makefile b/longmynd/Makefile new file mode 100755 index 0000000..6750211 --- /dev/null +++ b/longmynd/Makefile @@ -0,0 +1,40 @@ +BIN = longmynd +SRC = main.c nim.c ftdi.c stv0910.c stv0910_utils.c stvvglna.c stvvglna_utils.c stv6120.c stv6120_utils.c ftdi_usb.c fifo.c udp.c beep.c ts.c +OBJ = ${SRC:.c=.o} + +ifndef CC +CC = gcc +endif +COPT = -O3 -march=native -mtune=native +CFLAGS += -Wall -Wextra -Wpedantic -Wunused -DVERSION=\"${VER}\" -pthread -D_GNU_SOURCE +LDFLAGS += -lusb-1.0 -lm -lasound + +all: ${BIN} fake_read + +debug: COPT = -Og +debug: CFLAGS += -ggdb -fno-omit-frame-pointer +debug: all + +werror: CFLAGS += -Werror +werror: all + +fake_read: + @echo " CC "$@ + @${CC} fake_read.c -o $@ + +$(BIN): ${OBJ} + @echo " LD "$@ + @${CC} ${COPT} ${CFLAGS} -o $@ ${OBJ} ${LDFLAGS} + +%.o: %.c + @echo " CC "$< + @${CC} ${COPT} ${CFLAGS} -c -fPIC -o $@ $< + +clean: + @rm -rf ${BIN} fake_read ${OBJ} + +tags: + @ctags * + +.PHONY: all clean + diff --git a/longmynd/README.md b/longmynd/README.md new file mode 100755 index 0000000..81a2d69 --- /dev/null +++ b/longmynd/README.md @@ -0,0 +1,154 @@ +# Longmynd [![Build Status](https://travis-ci.org/myorangedragon/longmynd.svg?branch=master)](https://travis-ci.org/myorangedragon/longmynd) + +An Open Source Linux ATV Receiver. + +Copyright 2019 Heather Lomond + +## Dependencies + + sudo apt-get install libusb-1.0-0-dev libasound2-dev tstools + +To run longmynd without requiring root, unplug the minitiouner and then install the udev rules file with: + + sudo cp minitiouner.rules /etc/udev/rules.d/ + +## Compile + + make + +## Run + +Please refer to the longmynd manual page via: + +``` +man -l longmynd.1 +``` + +## Standalone + +If running longmynd standalone (i.e. not integrated with the Portsdown software), you must create the status FIFO and (if you plan to use it) the TS FIFO: + +``` +mkfifo longmynd_main_status +mkfifo longmynd_main_ts +``` + +The test harness `fake_read` or a similar process must be running to consume the output of the status FIFO: + +``` +./fake_read & +``` + +A video player (e.g. VLC) must be running to consume the output of the TS FIFO. + +## Output + + The status fifo is filled with status information as and when it becomes available. + The format of the status information is: + + $n,m + + Where: + n = identifier integer of Status message + m = integer value associated with this status message + + And the values of n and m are defined as: + + ID Meaning Value and Units + ============================================================================================== + 1 State 0: initialising + 1: searching + 2: found headers + 3: locked on a DVB-S signal + 4: locked on a DVB-S2 signal + 2 LNA Gain On devices that have LNA Amplifiers this represents the two gain + sent as N, where n = (lna_gain<<5) | lna_vgo + Though not actually linear, n can be usefully treated as a single + byte representing the gain of the amplifier + 3 Puncture Rate During a search this is the pucture rate that is being trialled + When locked this is the pucture rate detected in the stream + Sent as a single value, n, where the pucture rate is n/(n+1) + 4 I Symbol Power Measure of the current power being seen in the I symbols + 5 Q Symbol Power Measure of the current power being seen in the Q symbols + 6 Carrier Frequency During a search this is the carrier frequency being trialled + When locked this is the Carrier Frequency detected in the stream + Sent in KHz + 7 I Constellation Single signed byte representing the voltage of a sampled I point + 8 Q Constellation Single signed byte representing the voltage of a sampled Q point + 9 Symbol Rate During a search this is the symbol rate being trialled + When locked this is the symbol rate detected in the stream + 10 Viterbi Error Rate Viterbi correction rate as a percentage * 100 + 11 BER Bit Error Rate as a Percentage * 100 + 12 MER Modulation Error Ratio in dB * 10 + 13 Service Provider TS Service Provider Name + 14 Service TS Service Name + 15 Null Ratio Ratio of Nulls in TS as percentage + 16 ES PID Elementary Stream PID (repeated as pair with 17 for each ES) + 17 ES Type Elementary Stream Type (repeated as pair with 16 for each ES) + 18 MODCOD Received Modulation & Coding Rate. See MODCOD Lookup Table below + 19 Short Frames 1 if received signal is using Short Frames, 0 otherwise (DVB-S2 only) + 20 Pilot Symbols 1 if received signal is using Pilot Symbols, 0 otherwise (DVB-S2 only) + 21 LDPC Error Count LDPC Corrected Errors in last frame (DVB-S2 only) + 22 BCH Error Count BCH Corrected Errors in last frame (DVB-S2 only) + 23 BCH Uncorrected 1 if some BCH-detected errors were not able to be corrected, 0 otherwise (DVB-S2 only) + 24 LNB Voltage Enabled 1 if LNB Voltage Supply is enabled, 0 otherwise (LNB Voltage Supply requires add-on board) + 25 LNB H Polarisation 1 if LNB Voltage Supply is configured for Horizontal Polarisation (18V), 0 otherwise (LNB Voltage Supply requires add-on board) + + +### MODCOD Lookup + +### DVB-S +``` +0: QPSK 1/2 +1: QPSK 2/3 +2: QPSK 3/4 +3: QPSK 5/6 +4: QPSK 6/7 +5: QPSK 7/8 +``` + +#### DVB-S2 +``` +0: DummyPL +1: QPSK 1/4 +2: QPSK 1/3 +3: QPSK 2/5 +4: QPSK 1/2 +5: QPSK 3/5 +6: QPSK 2/3 +7: QPSK 3/4 +8: QPSK 4/5 +9: QPSK 5/6 +10: QPSK 8/9 +11: QPSK 9/10 +12: 8PSK 3/5 +13: 8PSK 2/3 +14: 8PSK 3/4 +15: 8PSK 5/6 +16: 8PSK 8/9 +17: 8PSK 9/10 +18: 16APSK 2/3 +19: 16APSK 3/4 +20: 16APSK 4/5 +21: 16APSK 5/6 +22: 16APSK 8/9 +23: 16APSK 9/10 +24: 32APSK 3/4 +25: 32APSK 4/5 +26: 32APSK 5/6 +27: 32APSK 8/9 +28: 32APSK 9/10 +``` + +## License + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . diff --git a/longmynd/beep.c b/longmynd/beep.c new file mode 100755 index 0000000..7f94e42 --- /dev/null +++ b/longmynd/beep.c @@ -0,0 +1,328 @@ +/* + * Copyright (C) 2000-2004 James Courtier-Dutton + * Copyright (C) 2005 Nathan Hurst + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ALSA_PCM_NEW_HW_PARAMS_API +#define ALSA_PCM_NEW_SW_PARAMS_API +#include +#include +#include + +#include "main.h" +#include "errors.h" + +static void generate_sine(uint8_t *frames, int count, double *_phase, double _freq, unsigned int _rate, unsigned int _channels, bool _enable) { + double phase = *_phase; + double max_phase = 1.0 / _freq; + double step = 1.0 / (double)_rate; + double res = 0.0; + unsigned int chn; + int32_t ires; + int16_t *samp16 = (int16_t*) frames; + + while (count-- > 0) { + for(chn = 0; chn < _channels; chn++) { + // SND_PCM_FORMAT_S16_LE: + if(_enable) + { + res = (sin((phase * 2 * M_PI) / max_phase - M_PI)) * 0x03fffffff; /* Don't use MAX volume */ + } + ires = res; + *samp16++ = ires >> 16; + } + + phase += step; + if (phase >= max_phase) + phase -= max_phase; + } + + *_phase = phase; +} + +static int set_hwparams( + snd_pcm_t *handle, + snd_pcm_hw_params_t *params, + snd_pcm_access_t access, + snd_pcm_format_t format, + unsigned int rate, + unsigned int channels, + snd_pcm_uframes_t *buffer_size, + snd_pcm_uframes_t *period_size) { + unsigned int rrate; + int err; + snd_pcm_uframes_t period_size_min; + snd_pcm_uframes_t period_size_max; + snd_pcm_uframes_t buffer_size_min; + snd_pcm_uframes_t buffer_size_max; + unsigned int period_time = 0; /* period time in us */ + unsigned int buffer_time = 0; /* ring buffer length in us */ + unsigned int nperiods = 4; /* number of periods */ + + /* choose all parameters */ + err = snd_pcm_hw_params_any(handle, params); + if (err < 0) { + fprintf(stderr, "Broken configuration for playback: no configurations available: %s\n", snd_strerror(err)); + return err; + } + + /* set the interleaved read/write format */ + err = snd_pcm_hw_params_set_access(handle, params, access); + if (err < 0) { + fprintf(stderr, "Access type not available for playback: %s\n", snd_strerror(err)); + return err; + } + + /* set the sample format */ + err = snd_pcm_hw_params_set_format(handle, params, format); + if (err < 0) { + fprintf(stderr, "Sample format not available for playback: %s\n", snd_strerror(err)); + return err; + } + + /* set the count of channels */ + err = snd_pcm_hw_params_set_channels(handle, params, channels); + if (err < 0) { + fprintf(stderr, "Channels count (%i) not available for playbacks: %s\n", channels, snd_strerror(err)); + return err; + } + + /* set the stream rate */ + rrate = rate; + err = snd_pcm_hw_params_set_rate(handle, params, rate, 0); + if (err < 0) { + fprintf(stderr, "Rate %iHz not available for playback: %s\n", rate, snd_strerror(err)); + return err; + } + + if (rrate != rate) { + fprintf(stderr, "Rate doesn't match (requested %iHz, get %iHz, err %d)\n", rate, rrate, err); + return -EINVAL; + } + + //printf(_("Rate set to %iHz (requested %iHz)\n"), rrate, rate); + /* set the buffer time */ + err = snd_pcm_hw_params_get_buffer_size_min(params, &buffer_size_min); + err = snd_pcm_hw_params_get_buffer_size_max(params, &buffer_size_max); + err = snd_pcm_hw_params_get_period_size_min(params, &period_size_min, NULL); + err = snd_pcm_hw_params_get_period_size_max(params, &period_size_max, NULL); + //printf(_("Buffer size range from %lu to %lu\n"),buffer_size_min, buffer_size_max); + //printf(_("Period size range from %lu to %lu\n"),period_size_min, period_size_max); + if (period_time > 0) { + //printf(_("Requested period time %u us\n"), period_time); + err = snd_pcm_hw_params_set_period_time_near(handle, params, &period_time, NULL); + if (err < 0) { + fprintf(stderr, "Unable to set period time %u us for playback: %s\n", + period_time, snd_strerror(err)); + return err; + } + } + if (buffer_time > 0) { + //printf(_("Requested buffer time %u us\n"), buffer_time); + err = snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, NULL); + if (err < 0) { + fprintf(stderr, "Unable to set buffer time %u us for playback: %s\n", + buffer_time, snd_strerror(err)); + return err; + } + } + if (! buffer_time && ! period_time) { + //buffer_size = buffer_size_max; + //buffer_size = buffer_size_min; + *buffer_size = 2048; + if (! period_time) + *buffer_size = (*buffer_size / nperiods) * nperiods; + //printf(_("Using max buffer size %lu\n"), buffer_size); + //printf(_("Using min buffer size %lu\n"), *buffer_size); + err = snd_pcm_hw_params_set_buffer_size_near(handle, params, buffer_size); + if (err < 0) { + fprintf(stderr, "Unable to set buffer size %lu for playback: %s\n", + *buffer_size, snd_strerror(err)); + return err; + } + } + if (! buffer_time || ! period_time) { + //printf(_("Periods = %u\n"), nperiods); + err = snd_pcm_hw_params_set_periods_near(handle, params, &nperiods, NULL); + if (err < 0) { + fprintf(stderr, "Unable to set nperiods %u for playback: %s\n", + nperiods, snd_strerror(err)); + return err; + } + } + + /* write the parameters to device */ + err = snd_pcm_hw_params(handle, params); + if (err < 0) { + fprintf(stderr, "Unable to set hw params for playback: %s\n", snd_strerror(err)); + return err; + } + + snd_pcm_hw_params_get_buffer_size(params, buffer_size); + snd_pcm_hw_params_get_period_size(params, period_size, NULL); + //printf(_("was set period_size = %lu\n"),*period_size); + //printf(_("was set buffer_size = %lu\n"),*buffer_size); + if (2*(*period_size) > *buffer_size) { + fprintf(stderr, "buffer to small, could not use\n"); + return -EINVAL; + } + + return 0; +} + +static int set_swparams(snd_pcm_t *handle, snd_pcm_sw_params_t *swparams, snd_pcm_uframes_t *buffer_size, snd_pcm_uframes_t *period_size) { + int err; + + /* get the current swparams */ + err = snd_pcm_sw_params_current(handle, swparams); + if (err < 0) { + fprintf(stderr, "Unable to determine current swparams for playback: %s\n", snd_strerror(err)); + return err; + } + + /* start the transfer when a buffer is full */ + err = snd_pcm_sw_params_set_start_threshold(handle, swparams, *buffer_size - *period_size); + if (err < 0) { + fprintf(stderr, "Unable to set start threshold mode for playback: %s\n", snd_strerror(err)); + return err; + } + + /* allow the transfer when at least period_size frames can be processed */ + err = snd_pcm_sw_params_set_avail_min(handle, swparams, *period_size); + if (err < 0) { + fprintf(stderr, "Unable to set avail min for playback: %s\n", snd_strerror(err)); + return err; + } + + /* write the parameters to the playback device */ + err = snd_pcm_sw_params(handle, swparams); + if (err < 0) { + fprintf(stderr, "Unable to set sw params for playback: %s\n", snd_strerror(err)); + return err; + } + + return 0; +} + +void *loop_beep(void *arg) { + thread_vars_t *thread_vars = (thread_vars_t *)arg; + uint8_t *err = &thread_vars->thread_err; + + while(*err == ERROR_NONE && *thread_vars->main_err_ptr == ERROR_NONE){ + + if(thread_vars->config->beep_enabled){ + + snd_pcm_t *handle; + int error; + snd_pcm_hw_params_t *hwparams; + snd_pcm_sw_params_t *swparams; + + snd_pcm_hw_params_alloca(&hwparams); + snd_pcm_sw_params_alloca(&swparams); + + char *device = "default"; /* playback device */ + snd_pcm_format_t format = SND_PCM_FORMAT_S16; /* sample format */ + unsigned int rate = 48000; /* stream rate */ + unsigned int channels = 2; /* count of channels */ + snd_pcm_uframes_t buffer_size; + snd_pcm_uframes_t period_size; + + if ((error = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { + printf("Playback open error: %d,%s\n", error,snd_strerror(error)); + *err = ERROR_THREAD_ERROR; + return NULL; + } + + if ((error = set_hwparams(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED, format, rate, channels, &buffer_size, &period_size)) < 0) { + printf("Setting of hwparams failed: %s\n", snd_strerror(error)); + snd_pcm_close(handle); + *err = ERROR_THREAD_ERROR; + return NULL; + } + if ((error = set_swparams(handle, swparams, &buffer_size, &period_size)) < 0) { + printf("Setting of swparams failed: %s\n", snd_strerror(error)); + snd_pcm_close(handle); + *err = ERROR_THREAD_ERROR; + return NULL; + } + + uint8_t *frames; + frames = malloc(snd_pcm_frames_to_bytes(handle, period_size)); + + if (frames == NULL) { + fprintf(stderr, "No enough memory\n"); + *err = ERROR_THREAD_ERROR; + return NULL; + } + + snd_pcm_prepare(handle); + + double freq = 400.0; + double phase = 0.0; + + if(thread_vars->status->modulation_error_rate > 0 && thread_vars->status->modulation_error_rate <= 310) + { + freq = 700.0 * (exp((200+(10*thread_vars->status->modulation_error_rate))/1127.0)-1.0); + } + generate_sine(frames, period_size, &phase, freq, rate, channels, (thread_vars->status->state == STATE_DEMOD_S2)); + + /* Start playback */ + snd_pcm_writei(handle, frames, period_size); + snd_pcm_start(handle); + + snd_pcm_sframes_t avail; + + while(*err == ERROR_NONE && *thread_vars->main_err_ptr == ERROR_NONE && thread_vars->config->beep_enabled){ + /* Wait until device is ready for more data */ + if(snd_pcm_wait(handle, 100)) + { + avail = snd_pcm_avail_update(handle); + if(avail < 0 && avail == -32) + { + /* Handle underrun */ + snd_pcm_prepare(handle); + } + while (avail >= (snd_pcm_sframes_t)period_size) + { + if(thread_vars->status->modulation_error_rate > 0 && thread_vars->status->modulation_error_rate <= 310) + { + freq = 700.0 * (exp((200+(10*thread_vars->status->modulation_error_rate))/1127.0)-1.0); + } + + generate_sine(frames, period_size, &phase, freq, rate, channels, (thread_vars->status->state == STATE_DEMOD_S2)); + while (snd_pcm_writei(handle, frames, period_size) < 0) + { + /* Handle underrun */ + snd_pcm_prepare(handle); + } + avail = snd_pcm_avail_update(handle); + } + } + } + + /* Stop Playback */ + snd_pcm_drop(handle); + + /* Empty buffer */ + snd_pcm_drain(handle); + + free(frames); + snd_pcm_close(handle); + } + + usleep(10*1000); // 10ms + + } + + return NULL; +} \ No newline at end of file diff --git a/longmynd/beep.h b/longmynd/beep.h new file mode 100755 index 0000000..91e6fd6 --- /dev/null +++ b/longmynd/beep.h @@ -0,0 +1,28 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: beep.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef BEEP_H +#define BEEP_H + +void *loop_beep(void *arg); + +#endif + diff --git a/longmynd/errors.h b/longmynd/errors.h new file mode 100755 index 0000000..be23333 --- /dev/null +++ b/longmynd/errors.h @@ -0,0 +1,78 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: errors.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef ERRORS_H +#define ERRORS_H + +/* possible error states */ +#define ERROR_NONE 0 +#define ERROR_ARGS 1 +#define ERROR_ARGS_INPUT 2 +#define ERROR_STATE 3 +#define ERROR_DEMOD_STATE 4 +#define ERROR_FTDI_READ_HIGH 5 +#define ERROR_READ_DEMOD 6 +#define ERROR_WRITE_DEMOD 7 +#define ERROR_READ_OTHER 8 +#define ERROR_WRITE_OTHER 9 +#define ERROR_FTDI_USB_INIT_LIBUSB 101 +#define ERROR_FTDI_USB_VID_PID 102 +#define ERROR_FTDI_USB_CLAIM 103 +#define ERROR_FTDI_USB_I2C_WRITE 104 +#define ERROR_FTDI_USB_I2C_READ 105 +#define ERROR_FTDI_USB_CMD 106 +#define ERROR_FTDI_USB_INIT 107 +#define ERROR_FTDI_SYNC_AA 10 +#define ERROR_FTDI_SYNC_AB 11 +#define ERROR_NIM_INIT 12 +#define ERROR_LNA_ID 13 +#define ERROR_TUNER_ID 14 +#define ERROR_TUNER_LOCK_TIMEOUT 15 +#define ERROR_TUNER_CAL_TIMEOUT 16 +#define ERROR_TUNER_CAL_LOWPASS_TIMEOUT 17 +#define ERROR_I2C_NO_ACK 18 +#define ERROR_FTDI_I2C_WRITE_LEN 19 +#define ERROR_FTDI_I2C_READ_LEN 20 +#define ERROR_MPSSE 21 +#define ERROR_DEMOD_INIT 22 +#define ERROR_BAD_DEMOD_HUNT_STATE 23 +#define ERROR_TS_FIFO_WRITE 24 +#define ERROR_OPEN_TS_FIFO 25 +#define ERROR_TS_FIFO_CREATE 26 +#define ERROR_STATUS_FIFO_CREATE 27 +#define ERROR_OPEN_STATUS_FIFO 28 +#define ERROR_TS_FIFO_CLOSE 29 +#define ERROR_STATUS_FIFO_CLOSE 30 +#define ERROR_USB_TS_READ 31 +#define ERROR_LNA_AGC_TIMEOUT 32 +#define ERROR_DEMOD_PLL_TIMEOUT 33 +#define ERROR_FTDI_USB_DEVICE_LIST 34 +#define ERROR_FTDI_USB_BAD_DEVICE_NUM 35 +#define ERROR_FTDI_USB_DEVICE_NUM_OPEN 36 +#define ERROR_UDP_WRITE 37 +#define ERROR_UDP_SOCKET_OPEN 38 +#define ERROR_UDP_CLOSE 39 +#define ERROR_VITERBI_PUNCTURE_RATE 40 +#define ERROR_TS_BUFFER_MALLOC 41 +#define ERROR_THREAD_ERROR 41 + +#endif + diff --git a/longmynd/fake_read.c b/longmynd/fake_read.c new file mode 100755 index 0000000..0afb461 --- /dev/null +++ b/longmynd/fake_read.c @@ -0,0 +1,32 @@ +/* pretends to be a portsdown */ +#include +#include +#include +#include +#include +#include + +int main() { + int num; + int ret; + + int fd_status_fifo; + + char status_message[14]; + + /* Open status FIFO for read only */ + ret=mkfifo("longmynd_main_status", 0666); + fd_status_fifo = open("longmynd_main_status", O_RDONLY); + if (fd_status_fifo<0) printf("Failed to open status fifo\n"); + + printf("Listening\n"); + + while (1) { + num=read(fd_status_fifo, status_message, 1); + status_message[num]='\0'; + if (num>0) printf("%s",status_message); + } + close(fd_status_fifo); + return 0; +} + diff --git a/longmynd/fifo.c b/longmynd/fifo.c new file mode 100755 index 0000000..f52328e --- /dev/null +++ b/longmynd/fifo.c @@ -0,0 +1,203 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: fifo.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - linux fifo handlers for the transport stream (TS) and the status stream (status) */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "errors.h" +#include "fifo.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +int fd_ts_fifo; +int fd_status_fifo; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t fifo_ts_write(uint8_t *buffer, uint32_t len) { +/* -------------------------------------------------------------------------------------------------- */ +/* takes a buffer and writes out the contents to the ts fifo but removes the unwanted bytes */ +/* *buffer: the buffer that contains the data to be sent */ +/* len: the length (number of bytes) of data to be sent */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int ret; + int32_t remaining_len; /* note it is signed so can go negative */ + uint32_t write_size; + + remaining_len=len; + /* we need to loop round sending 510 byte chunks so that we can skip the 2 extra bytes put in by */ + /* the FTDI chip every 512 bytes of USB message */ + while (remaining_len>0) { + if (remaining_len>510) { + /* calculate where to start in the buffer and how many bytes to send */ + write_size=510; + ret=write(fd_ts_fifo, &buffer[len-remaining_len], write_size); + /* note we skip over the 2 bytes inserted by the FTDI */ + remaining_len-=512; + } else { + write_size=remaining_len; + ret=write(fd_ts_fifo, &buffer[len-remaining_len], write_size); + remaining_len-=write_size; /* should be 0 if all went well */ + } + if (ret!=(int)write_size) { + printf("ERROR: ts fifo write\n"); + err=ERROR_TS_FIFO_WRITE; + break; + } + } + + /* if someting went bad with our calcs, remaining will not be 0 */ + if ((err==ERROR_NONE) && (remaining_len!=0)) { + printf("ERROR: ts fifo write incorrect number of bytes\n"); + err=ERROR_TS_FIFO_WRITE; + } + + if (err!=ERROR_NONE) printf("ERROR: fifo ts write\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t fifo_status_write(uint8_t message, uint32_t data) { +/* -------------------------------------------------------------------------------------------------- */ +/* *message: the string to write out that identifies the status message */ +/* data: an integer to be sent out (as a decimal number string) */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int ret; + char status_message[30]; + + sprintf(status_message, "$%i,%i\n", message, data); + ret=write(fd_status_fifo, status_message, strlen(status_message)); + if (ret!=(int)strlen(status_message)) { + printf("ERROR: status fifo write\n"); + err=ERROR_TS_FIFO_WRITE; + } + + if (err!=ERROR_NONE) printf("ERROR: fifo status write\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t fifo_status_string_write(uint8_t message, char *data) { +/* -------------------------------------------------------------------------------------------------- */ +/* *message: the string to write out that identifies the status message */ +/* data: an integer to be sent out (as a decimal number string) */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int ret; + char status_message[5+128]; + + sprintf(status_message, "$%i,%s\n", message, data); + ret=write(fd_status_fifo, status_message, strlen(status_message)); + if (ret!=(int)strlen(status_message)) { + printf("ERROR: status fifo write\n"); + err=ERROR_TS_FIFO_WRITE; + } + + if (err!=ERROR_NONE) printf("ERROR: fifo status write\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +static uint8_t fifo_init(int *fd_ptr, char *fifo_path) { +/* -------------------------------------------------------------------------------------------------- */ +/* initialises the ts and status fifos */ +/* ts_fifo: the name of the fifo to use for the TS */ +/* status_fifo: the name of the fifo to use for the status output */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + printf("Flow: Fifo Init\n"); + + /* if we are using the TS FIFO then set it up first */ + *fd_ptr = open(fifo_path, O_WRONLY); + if (err==ERROR_NONE) { + if (*fd_ptr<0) { + printf("ERROR: Failed to open fifo %s\n",fifo_path); + err=ERROR_OPEN_TS_FIFO; + } else printf(" Status: opened fifo ok\n"); + } + + if (err!=ERROR_NONE) printf("ERROR: fifo init\n"); + + return err; +} + +uint8_t fifo_ts_init(char *fifo_path) { + return fifo_init(&fd_ts_fifo, fifo_path); +} + +uint8_t fifo_status_init(char *fifo_path) { + return fifo_init(&fd_status_fifo, fifo_path); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t fifo_close(bool ignore_ts_fifo) { +/* ------------------------------------------------------------------------------------------------- */ +/* closes the fifo's */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + int ret; + + if (!ignore_ts_fifo) { + ret=close(fd_ts_fifo); + if (ret!=0) { + printf("ERROR: ts fifo close\n"); + err=ERROR_TS_FIFO_CLOSE; + } + } + + ret=close(fd_status_fifo); + if (ret!=0) { + printf("ERROR: status fifo close\n"); + err=ERROR_STATUS_FIFO_CLOSE; + } + + if (err!=ERROR_NONE) printf("ERROR: fifo close\n"); + + return err; +} + diff --git a/longmynd/fifo.h b/longmynd/fifo.h new file mode 100755 index 0000000..9a6ecb3 --- /dev/null +++ b/longmynd/fifo.h @@ -0,0 +1,35 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: fifo.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef FIFO_H +#define FIFO_H + +#include + +uint8_t fifo_ts_write(uint8_t*, uint32_t); +uint8_t fifo_status_write(uint8_t, uint32_t); +uint8_t fifo_status_string_write(uint8_t, char*); +uint8_t fifo_ts_init(char *fifo_path); +uint8_t fifo_status_init(char *fifo_path); +uint8_t fifo_close(bool); + +#endif + diff --git a/longmynd/ftdi.c b/longmynd/ftdi.c new file mode 100755 index 0000000..fcf2ffd --- /dev/null +++ b/longmynd/ftdi.c @@ -0,0 +1,528 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: ftdi.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - implements all the ftdi i2c accessing routines apart from the usb stuff */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "ftdi.h" +#include "ftdi_usb.h" +#include "nim.h" +#include "errors.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- DEFINES ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +#define FTDI_VID 0x0403 +#define FTDI_PID 0x6010 + +#define FTDI_NUM_TRIES 10 +#define FTDI_STOP_START_REPEATS 4 +#define FTDI_RDWR_TIMEOUT 100 +#define MSB_FALLING_EDGE_CLOCK_BYTE_IN 0x24 +#define MSB_FALLING_EDGE_CLOCK_BYTE_OUT 0x11 +#define MSB_RISING_EDGE_CLOCK_BIT_IN 0x22 +#define MSB_FAILING_EDGE_CLOCK_BIT_IN 0x26 + +/* +FTDI GPIO Pins +LSB + - AC0: NIM Reset + - AC1: TS2SYNC + - AC2: + - AC3: + - AC4: LNB Bias Enable + - AC5: + - AC6: + - AC7: LNB Bias Voltage Select +MSB +*/ + +#define FTDI_GPIO_PINID_NIM_RESET 0 +#define FTDI_GPIO_PINID_TS2SYNC 1 +#define FTDI_GPIO_PINID_LNB_BIAS_ENABLE 4 +#define FTDI_GPIO_PINID_LNB_BIAS_VSEL 7 + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +static int num_bytes_to_send = 0; +static uint8_t out_buffer[256]; + +/* Default GPIO value 0x6f = 0b01101111 = LNB Bias Off, LNB Voltage 12V, NIM not reset */ +static uint8_t ftdi_gpio_value = 0x6f; + +/* Default GPIO direction 0xf1 = 0b11110001 = LNB pins, NIM Reset are outputs, TS2SYNC is input (0 for in and 1 for out) */ +static uint8_t ftdi_gpio_direction = 0xf1; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_setup_ftdi_io(void){ +/* -------------------------------------------------------------------------------------------------- */ +/* sets up the IO stages of the FTDI and syncs the comms */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t *in_buffer; + uint8_t old_in_buffer=0; + int i; + int clock_divisor = 0x0095; + + printf("Flow: FTDI setup io\n"); + + /* note we don't accumulate errors for this bit as we are trying to sync */ + /* first we send out a byte to act as our sync */ + num_bytes_to_send = 0; + out_buffer[num_bytes_to_send++] = 0xAA; + if (err==ERROR_NONE) ftdi_usb_i2c_write(out_buffer, num_bytes_to_send); + num_bytes_to_send = 0; + /* next we keep reading it until we get it back, and the reply before it */ + for (i=0; i> 8) & 0xFF; + if (err==ERROR_NONE) err=ftdi_usb_i2c_write(out_buffer, num_bytes_to_send); + num_bytes_to_send = 0; + usleep(30000); + + out_buffer[num_bytes_to_send++] = 0x85; + if (err==ERROR_NONE) err=ftdi_usb_i2c_write(out_buffer, num_bytes_to_send); + num_bytes_to_send = 0; + + /* need to wait a while for it to work */ + usleep(30000); + + if (err!=ERROR_NONE) printf("ERROR: set mpsse mode\n"); + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_i2c_set_start(void) { +/* -------------------------------------------------------------------------------------------------- */ +/* sets the i2c start condition on the i2c bus */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + int count; + + + for (count=0; count>8); + err|=ftdi_i2c_send_byte_check_ack(reg&0xff); + if (err==ERROR_NONE) break; + } + + if (err==ERROR_NONE) { + /* Read back the contents of that register */ + for(i=0; i>8); + err|=ftdi_i2c_send_byte_check_ack(reg&0xff); + err|=ftdi_i2c_send_byte_check_ack(val); + err|=ftdi_i2c_set_stop(); + err|=ftdi_i2c_output(); + if (err==ERROR_NONE) break; + } + + timeout++; + + } while ((err!=ERROR_NONE) && (timeout!=FTDI_RDWR_TIMEOUT)); + + if (err!=ERROR_NONE) printf("ERROR: i2c write reg16 0x%.2x, 0x%.4x, 0x%.2x\n",addr,reg, val); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_i2c_read_reg8(uint8_t addr, uint8_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* read an i2c 8 bit register from the nim */ +/* addr: the i2c bus address to access */ +/* reg: the i2c register to read */ +/* *val: the return value for the register we have read */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + int i; + int timeout=0; + + do { + for (i=0; i */ +/* -------------------------------------------------------------------------------------------------- */ +{ + printf("Flow: FTDI GPIO Write: pin %d -> value %d\n", pin_id, (int)pin_value); + + if(pin_value) + { + ftdi_gpio_value |= (1 << pin_id); + } + else + { + ftdi_gpio_value &= ~(1 << pin_id); + } + + num_bytes_to_send = 0; + out_buffer[num_bytes_to_send++] = 0x82; /* aka. MPSSE_CMD_SET_DATA_BITS_HIGHBYTE */ + out_buffer[num_bytes_to_send++] = ftdi_gpio_value; + out_buffer[num_bytes_to_send++] = ftdi_gpio_direction; + + ftdi_usb_i2c_write(out_buffer, num_bytes_to_send); + + num_bytes_to_send = 0; + + return ERROR_NONE; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_nim_reset(void) +/* -------------------------------------------------------------------------------------------------- */ +/* toggle the reset line on the nim */ +/* -------------------------------------------------------------------------------------------------- */ +{ + printf("Flow: FTDI nim reset\n"); + + ftdi_gpio_write(FTDI_GPIO_PINID_NIM_RESET, 0); + usleep(10000); + + ftdi_gpio_write(FTDI_GPIO_PINID_NIM_RESET, 1); + usleep(10000); + + return ERROR_NONE; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_set_polarisation_supply(bool supply_enable, bool supply_horizontal) +/* -------------------------------------------------------------------------------------------------- */ +/* Controls RT5047A LNB Power Supply IC, fitted to an additional board. */ +/* -------------------------------------------------------------------------------------------------- */ +{ + if(supply_enable) { + /* Set Voltage */ + if(supply_horizontal) { + ftdi_gpio_write(FTDI_GPIO_PINID_LNB_BIAS_VSEL, 1); + } + else { + ftdi_gpio_write(FTDI_GPIO_PINID_LNB_BIAS_VSEL, 0); + } + /* Then enable output */ + ftdi_gpio_write(FTDI_GPIO_PINID_LNB_BIAS_ENABLE, 1); + } + else { + /* Disable output */ + ftdi_gpio_write(FTDI_GPIO_PINID_LNB_BIAS_ENABLE, 0); + } + + return ERROR_NONE; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_init(uint8_t usb_bus, uint8_t usb_addr) { +/* -------------------------------------------------------------------------------------------------- */ +/* initialises the ftdi module on the minitiouner */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + + printf("Flow: FTDI init\n"); + + err=ftdi_usb_init_i2c(usb_bus, usb_addr, FTDI_VID, FTDI_PID); + if (err==ERROR_NONE) err=ftdi_usb_set_mpsse_mode_i2c(); + if (err==ERROR_NONE) err=ftdi_usb_init_ts(usb_bus, usb_addr, FTDI_VID, FTDI_PID); + if (err==ERROR_NONE) err=ftdi_usb_set_mpsse_mode_ts(); + if (err==ERROR_NONE) err=ftdi_setup_ftdi_io(); + if (err==ERROR_NONE) err=ftdi_nim_reset(); + + if (err!=ERROR_NONE) printf("ERROR: FTDI init\n"); + + return err; +} + diff --git a/longmynd/ftdi.h b/longmynd/ftdi.h new file mode 100755 index 0000000..e2a02eb --- /dev/null +++ b/longmynd/ftdi.h @@ -0,0 +1,40 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: ftdi.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef FTDI_H +#define FTDI_H + +#include +#include + +uint8_t ftdi_init(uint8_t, uint8_t); +uint8_t ftdi_set_polarisation_supply(bool, bool); +uint8_t ftdi_send_byte(uint8_t); +uint8_t ftdi_read(uint8_t*,uint8_t*); +uint8_t ftdi_read_highbyte(uint8_t*); +uint8_t ftdi_write_highbyte(uint8_t, uint8_t); + +uint8_t ftdi_i2c_read_reg16 (uint8_t, uint16_t, uint8_t*); +uint8_t ftdi_i2c_read_reg8 (uint8_t, uint8_t, uint8_t*); +uint8_t ftdi_i2c_write_reg16(uint8_t, uint16_t, uint8_t ); +uint8_t ftdi_i2c_write_reg8 (uint8_t, uint8_t, uint8_t ); + +#endif diff --git a/longmynd/ftdi_usb.c b/longmynd/ftdi_usb.c new file mode 100755 index 0000000..1b1395e --- /dev/null +++ b/longmynd/ftdi_usb.c @@ -0,0 +1,376 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: ftdi_usb.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - here we have all the usb interactions with the ftdi module */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include "errors.h" +#include "ftdi_usb.h" +#include "ftdi.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- DEFINES ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +#define FTDI_USB_READ_RETRIES 2 + +/* Requests */ +#define SIO_RESET_REQUEST SIO_RESET +#define SIO_SET_BAUDRATE_REQUEST SIO_SET_BAUD_RATE +#define SIO_SET_DATA_REQUEST SIO_SET_DATA +#define SIO_SET_FLOW_CTRL_REQUEST SIO_SET_FLOW_CTRL +#define SIO_SET_MODEM_CTRL_REQUEST SIO_MODEM_CTRL +#define SIO_POLL_MODEM_STATUS_REQUEST 0x05 +#define SIO_SET_EVENT_CHAR_REQUEST 0x06 +#define SIO_SET_ERROR_CHAR_REQUEST 0x07 +#define SIO_SET_LATENCY_TIMER_REQUEST 0x09 +#define SIO_GET_LATENCY_TIMER_REQUEST 0x0A +#define SIO_SET_BITMODE_REQUEST 0x0B +#define SIO_READ_PINS_REQUEST 0x0C +#define SIO_READ_EEPROM_REQUEST 0x90 +#define SIO_WRITE_EEPROM_REQUEST 0x91 +#define SIO_ERASE_EEPROM_REQUEST 0x92 + +#define LATENCY_MS 16 + +#define SIO_RESET 0 /* Reset the port */ +#define SIO_MODEM_CTRL 1 /* Set the modem control register */ +#define SIO_SET_FLOW_CTRL 2 /* Set flow control register */ +#define SIO_SET_BAUD_RATE 3 /* Set baud rate */ +#define SIO_SET_DATA 4 /* Set the data characteristics of the port */ + +#define SIO_RESET_SIO 0 +#define SIO_RESET_PURGE_RX 1 +#define SIO_RESET_PURGE_TX 2 + +#define FTDI_DEVICE_OUT_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT) +#define FTDI_DEVICE_IN_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN) + +#define FTDI_RX_CHUNK_SIZE 4096 +#define FTDI_TX_CHUNK_SIZE 4096 + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +uint8_t rx_chunk[FTDI_RX_CHUNK_SIZE]; + +/* MPSSE bitbang modes */ +enum ftdi_mpsse_mode +{ + BITMODE_RESET = 0x00, /* switch off bitbang mode, back to regular serial/FIFO */ + BITMODE_BITBANG= 0x01, /* classical asynchronous bitbang mode, introduced with B-type chips */ + BITMODE_MPSSE = 0x02, /* MPSSE mode, available on 2232x chips */ + BITMODE_SYNCBB = 0x04, /* synchronous bitbang mode, available on 2232x and R-type chips */ + BITMODE_MCU = 0x08, /* MCU Host Bus Emulation mode, available on 2232x chips */ + /* CPU-style fifo mode gets set via EEPROM */ + BITMODE_OPTO = 0x10, /* Fast Opto-Isolated Serial Interface Mode, available on 2232x chips */ + BITMODE_CBUS = 0x20, /* Bitbang on CBUS pins of R-type chips, configure in EEPROM before */ + BITMODE_SYNCFF = 0x40, /* Single Channel Synchronous FIFO mode, available on 2232H chips */ +}; + +static libusb_device_handle *usb_device_handle_i2c; // interface 0, endpoints: 0x81, 0x02 +static libusb_device_handle *usb_device_handle_ts; // interface 1, endpoints: 0x83, 0x04 +static libusb_context *usb_context_i2c; +static libusb_context *usb_context_ts; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_usb_i2c_write( uint8_t *buffer, uint8_t len ){ +/* -------------------------------------------------------------------------------------------------- */ +/* writes data out to the usb */ +/* *buffer: the buffer containing the data to be written out */ +/* len: the number of bytes to send */ +/* return : error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int sent=0; + int res; + + res=libusb_bulk_transfer(usb_device_handle_i2c, 0x02, buffer, len, &sent, USB_TIMEOUT); + if (res<0) { + printf("ERROR: USB Cmd Write failure %d\n",res); + err=ERROR_FTDI_USB_CMD; + } + + if ((err==ERROR_NONE) && (sent!=len)) { + printf("ERROR: i2c write incorrect num bytes sent=%i, len=%i\n",sent,len); + err=ERROR_FTDI_I2C_WRITE_LEN; + } + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t ftdi_usb_i2c_read( uint8_t **buffer) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads one byte from the usb and returns it. Keeping any other data bytes for later */ +/* Note: we only ever need to read one byte of actual data so we can avoid data copying by using the */ +/* internal buffers of the usb reads to keep the data */ +/* *buffer: iretruned as a pointer the the actual data read into the usb */ +/* len: the number of bytes to read */ +/* return : error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + static int rxed=0; + static int posn=0; + int res; + int n; + + /* if we have unused characters in the buffer then use them up first */ + if (posn!=rxed) { + *buffer=&rx_chunk[posn++]; + } else { + /* if we couldn't do it with data we already have then get a new buffer */ + /* the data may not be available immediatly so try a few times until it appears (or we error) */ + for (n=0; n2) break; + } + /* check we didn't timeout */ + if (n==FTDI_USB_READ_RETRIES) err=ERROR_FTDI_I2C_READ_LEN; + else if (err==ERROR_NONE) { + /* once we have good data, use it to fulfil the request */ + posn=2; + *buffer=&rx_chunk[posn++]; + } + } + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +static uint8_t ftdi_usb_set_mpsse_mode(libusb_device_handle *_device_handle){ +/* -------------------------------------------------------------------------------------------------- */ +/* setup the FTDI USB interface and MPSEE mode */ +/* return : error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint16_t val; + int res; + uint8_t err=ERROR_NONE; + + printf("Flow: FTDI set mpsse mode\n"); + + /* clear out the receive buffers */ + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_RESET_REQUEST, + SIO_RESET_PURGE_RX, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("ERROR: USB RX Purge failed %d",res); + err=ERROR_MPSSE; + } + + /* clear out the transmit buffers */ + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_RESET_REQUEST, + SIO_RESET_PURGE_TX, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("ERROR: USB TX Purge failed %d",res); + err=ERROR_MPSSE; + } + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_RESET_REQUEST, + SIO_RESET_SIO, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("ERROR: USB Reset failed %d",res); + err=ERROR_MPSSE; + } + + /* set the latence of the bus */ + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_LATENCY_TIMER_REQUEST, + LATENCY_MS, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("ERROR: USB Set Latency failed %d",res); + err=ERROR_MPSSE; + } + + /* set the bit modes */ + val = (BITMODE_RESET<<8); + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_BITMODE_REQUEST, + val, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("USB Reset Bitmode failed %d\n",res); + err=ERROR_MPSSE; + } + + val = (BITMODE_MPSSE<<8); + if ((res=libusb_control_transfer(_device_handle, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_BITMODE_REQUEST, + val, 1, NULL, 0, USB_TIMEOUT))<0) { + printf("USB Set MPSSE failed %d\n",res); + err=ERROR_MPSSE; + } + + usleep(1000); + + return err; + +} + +uint8_t ftdi_usb_set_mpsse_mode_i2c(void){ + return ftdi_usb_set_mpsse_mode(usb_device_handle_i2c); +} + +uint8_t ftdi_usb_set_mpsse_mode_ts(void){ + return ftdi_usb_set_mpsse_mode(usb_device_handle_ts); +} + +/* -------------------------------------------------------------------------------------------------- */ +static uint8_t ftdi_usb_init(libusb_context **usb_context_ptr, libusb_device_handle **usb_device_handle_ptr, int interface_num, uint8_t usb_bus, uint8_t usb_addr, uint16_t vid, uint16_t pid) { +/* -------------------------------------------------------------------------------------------------- */ +/* initialise the usb device of choice (or via vid/pid if no USB selected) */ +/* return : error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + ssize_t count; + libusb_device **usb_device_list; + int error_code; + struct libusb_device_descriptor usb_descriptor; + libusb_device *usb_candidate_device; + uint8_t usb_device_count; + + printf("Flow: FTDI USB init\n"); + + if (libusb_init(usb_context_ptr)<0) { + printf("ERROR: Unable to initialise LIBUSB\n"); + err=ERROR_FTDI_USB_INIT_LIBUSB; + } + + /* turn on debug */ + #if LIBUSB_API_VERSION >= 0x01000106 + libusb_set_option(*usb_context_ptr, LIBUSB_LOG_LEVEL_INFO); + #else + libusb_set_debug(*usb_context_ptr, LIBUSB_LOG_LEVEL_INFO); + #endif + + /* now we need to decide if we are opening by VID and PID or by device number */ + if ((err==ERROR_NONE) && (usb_bus==0) && (usb_addr==0)) { + /* if we are using vid and pid it is easy */ + if ((*usb_device_handle_ptr = libusb_open_device_with_vid_pid(*usb_context_ptr, vid, pid))==NULL) { + printf("ERROR: Unable to open device with VID and PID\n"); + printf(" Is the USB cable plugged in?\n"); + err=ERROR_FTDI_USB_VID_PID; + } + + /* if we are finding by usb device number then we have to take a look at the IDs to check we are */ + /* being asked to open the right one. sTto do this we get a list of all the USB devices on the system */ + } else if (err==ERROR_NONE) { + printf("Flow: Searching for bus/device=%i,%i\n",usb_bus,usb_addr); + count=libusb_get_device_list(*usb_context_ptr, &usb_device_list); + if (count<=0) { + printf("ERROR: failed to get the list of devices\n"); + err=ERROR_FTDI_USB_DEVICE_LIST; + } + + if (err==ERROR_NONE) { + /* we need to find the device we have been told to use */ + for (usb_device_count=0; usb_device_count. +*/ + +#ifndef FTDI_USB_H +#define FTDI_USB_H + +#include +#include +#include + +/* Definitions for flow control */ +#define USB_TIMEOUT 5000 +#define USB_FAST_TIMEOUT 500 + +uint8_t ftdi_usb_i2c_write( uint8_t *, uint8_t); +uint8_t ftdi_usb_i2c_read( uint8_t **); +uint8_t ftdi_usb_set_mpsse_mode_i2c(void); +uint8_t ftdi_usb_set_mpsse_mode_ts(void); +uint8_t ftdi_usb_ts_read(uint8_t *, uint16_t *, uint32_t); +uint8_t ftdi_usb_init_i2c(uint8_t, uint8_t, uint16_t, uint16_t); +uint8_t ftdi_usb_init_ts(uint8_t, uint8_t, uint16_t, uint16_t); + +#endif + diff --git a/longmynd/gosrv.sh b/longmynd/gosrv.sh new file mode 100755 index 0000000..63dd412 --- /dev/null +++ b/longmynd/gosrv.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# 2023 F4IYT + +PATHBIN="longmynd" +PATHOSBIN="/usr/bin/" +#echo "1=$1 2=$2 3=$3 4=$4" +#exit 0 + +if [ -z "$1" ] +then + ip="127.0.0.1" +else + ip=$1 +fi + +if [ -z "$2" ] +then + port="1234" +else + port=$2 +fi + +if [ -z "$3" ] +then + freq=$((10491500-9750000)) +else + freq=$(($3-9750000)) +fi + +if [ -z "$4" ] +then + symb=1500 +else + symb=$4 +fi + + +pkexec $PATHBIN/stopsrv.sh + +mkfifo fifo.264 +mkfifo longmynd_main_ts +mkfifo longmynd_main_status + +$PATHBIN/fake_read & + +# Version to display via UDP on a remote machine +$PATHBIN/longmynd -i $ip $port $freq $symb & + diff --git a/longmynd/longmynd.1 b/longmynd/longmynd.1 new file mode 100755 index 0000000..77f2353 --- /dev/null +++ b/longmynd/longmynd.1 @@ -0,0 +1,69 @@ +.TH LONGMYND 1 +.SH NAME +longmynd \- Outputs transport streams from the Minitiouner DVB-S/S2 demodulator +.SH SYNOPSIS +.B longmynd \fR[\fB\-u\fR \fIUSB_BUS USB_DEVICE\fR] + [\fB\-i\fR \fIMAIN_IP_ADDR\fR \fIMAIN_PORT\fR | \fB\-t\fR \fIMAIN_TS_FIFO\fR] + [\fB\-I\fR \fISTATUS_IP_ADDR\fR \fISTATUS_PORT\fR | \fB\-s\fR \fIMAIN_STATUS_FIFO\fR] + [\fB\-w\fR] [\fB\-b\fR] [\fB\-p\fR \fIh\fR | \fB\-p\fR \fIv\fR] + \fIMAIN_FREQ\fR \fIMAIN_SR\fR +.IR +.SH DESCRIPTION +.B longmynd +Interfaces to the Minitiouner hardware to search for and demodulate a DVB-S or DVB-S2 stream. This stream can be output either to a local FIFO (using the default or -t option) or to an IP address/port via UDP. + +The Main TS stream is the one coming out of the Primary FTDI Board. +.SH OPTIONS +.TP +.BR \-u " " \fIUSB_BUS\fR " " \fIUSB_DEVICE\fR +Sets the USB Bus and USB Device Number of the required Minitiouner in a multi device system. +Default uses the first detected Minitiouner. +.TP +.BR \-i " " \fIIP_ADDR\fR " " \fIPORT\fR +If UDP output is required (instead of the default FIFO output), this option sets the IP Address and Port to send the Main TS Stream to. +Default is to use a FIFO for Main TS Stream. +.TP +.BR \-I " " \fIIP_ADDR\fR " " \fIPORT\fR +If UDP output is required (instead of the default FIFO output), this option sets the IP Address and Port to send the Main Status Stream to. +Default is to use a FIFO for Main Status Stream. +.TP +.BR \-t " " \fITS_FIFO\fR +Sets the name of the Main TS Stream output FIFO. +Default is "./longmynd_main_ts". +.TP +.BR \-s " " \fISTATUS_FIFO\fR +Sets the name of the Status output FIFO. +Default is "./longmynd_main_status". +.TP +.BR \-w +If selected, this option swaps over the RF input so that the Main TS Stream is fed from the BOTTOM F-Type of the NIM. +Default uses the TOP RF input for the Main TS stream. +.TP +.BR \-b +If selected, this option enables a tone audio output that will be present when DVB-S2 is being demodulated, and will increase in pitch for an increase in MER, to aid pointing. +By default this option is disabled. +.TP +.BR \-p " " \fIh\fR " "| " "\-p " " \fIv\fR +Controls and enables the LNB supply voltage output when an RT5047A LNB Voltage Regulator is fitted. +"-p v" will set 13V output (Vertical Polarisation), "-p h" will set 18V output (Horizontal Polarisation). +By default the RT5047A output is disabled. +.TP +.BR \fIMAIN_FREQ\fR +specifies the starting frequency (in KHz) of the Main TS Stream search algorithm". +.TP +.BR \fIMAIN_SR\fR +specifies the starting Symbol Rate (in KSPS) of the Main TS Stream search algorithm". + +.SH EXAMPLES +.TP +longmynd 2000 2000 +will find the first available Minitiouner, search for a 2MHz TS Stream at 2MSPS on the TOP RF input, output the TS to a FIFO called "longmynd_main_ts" and the status to a FIFO called "longmynd_main_status". +.TP +longmynd -w 2000 2000 +As above but uses the BOTTOM RF input. +.TP +longmynd -u 1 4 2000 2000 +As above but will attempt to find a minitiouner at usb device 4 on usb bus 1. +.TP +longmynd -i 192.168.1.1 87 2000 2000 +As above but any TS output will be to IP address 192.168.1.1 on port 87 diff --git a/longmynd/main.c b/longmynd/main.c new file mode 100755 index 0000000..10d0d82 --- /dev/null +++ b/longmynd/main.c @@ -0,0 +1,775 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: main.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - the top level (main) and command line procesing */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include "main.h" +#include "ftdi.h" +#include "stv0910.h" +#include "stv0910_regs.h" +#include "stv0910_utils.h" +#include "stv6120.h" +#include "stvvglna.h" +#include "nim.h" +#include "errors.h" +#include "fifo.h" +#include "ftdi_usb.h" +#include "udp.h" +#include "beep.h" +#include "ts.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- DEFINES ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +/* Milliseconds between each i2c control loop */ +#define I2C_LOOP_MS 100 + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +static longmynd_config_t longmynd_config = { + .new = false, + .mutex = PTHREAD_MUTEX_INITIALIZER +}; + +static longmynd_status_t longmynd_status = { + .service_name = "\0", + .service_provider_name = "\0", + .last_updated_monotonic = 0, + .mutex = PTHREAD_MUTEX_INITIALIZER, + .signal = PTHREAD_COND_INITIALIZER +}; + +static pthread_t thread_ts_parse; +static pthread_t thread_ts; +static pthread_t thread_i2c; +static pthread_t thread_beep; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint64_t timestamp_ms(void) { +/* -------------------------------------------------------------------------------------------------- */ +/* Returns the current unix timestamp in milliseconds */ +/* return: unix timestamp in milliseconds */ +/* -------------------------------------------------------------------------------------------------- */ + struct timespec tp; + + if(clock_gettime(CLOCK_REALTIME, &tp) != 0) + { + return 0; + } + + return (uint64_t) tp.tv_sec * 1000 + tp.tv_nsec / 1000000; +} + +void config_set_frequency(uint32_t frequency) +{ + if (frequency <= 2450000 && frequency >= 144000) + { + pthread_mutex_lock(&longmynd_config.mutex); + + longmynd_config.freq_requested = frequency; + longmynd_config.new = true; + + pthread_mutex_unlock(&longmynd_config.mutex); + } +} + +void config_set_symbolrate(uint32_t symbolrate) +{ + if (symbolrate <= 27500 && symbolrate >= 33) + { + pthread_mutex_lock(&longmynd_config.mutex); + + longmynd_config.sr_requested = symbolrate; + longmynd_config.new = true; + + pthread_mutex_unlock(&longmynd_config.mutex); + } +} + +void config_set_frequency_and_symbolrate(uint32_t frequency, uint32_t symbolrate) +{ + if (frequency <= 2450000 && frequency >= 144000 + && symbolrate <= 27500 && symbolrate >= 33) + { + pthread_mutex_lock(&longmynd_config.mutex); + + longmynd_config.freq_requested = frequency; + longmynd_config.sr_requested = symbolrate; + longmynd_config.new = true; + + pthread_mutex_unlock(&longmynd_config.mutex); + } +} + +void config_set_lnbv(bool enabled, bool horizontal) +{ + pthread_mutex_lock(&longmynd_config.mutex); + + longmynd_config.polarisation_supply = enabled; + longmynd_config.polarisation_horizontal = horizontal; + longmynd_config.new = true; + + pthread_mutex_unlock(&longmynd_config.mutex); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint64_t monotonic_ms(void) { +/* -------------------------------------------------------------------------------------------------- */ +/* Returns current value of a monotonic timer in milliseconds */ +/* return: monotonic timer in milliseconds */ +/* -------------------------------------------------------------------------------------------------- */ + struct timespec tp; + + if(clock_gettime(CLOCK_MONOTONIC, &tp) != 0) + { + return 0; + } + + return (uint64_t) tp.tv_sec * 1000 + tp.tv_nsec / 1000000; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t process_command_line(int argc, char *argv[], longmynd_config_t *config) { +/* -------------------------------------------------------------------------------------------------- */ +/* processes the command line arguments, sets up the parameters in main from them and error checks */ +/* All the required parameters are passed in */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t param; + bool main_usb_set=false; + bool ts_ip_set=false; + bool ts_fifo_set=false; + bool status_ip_set=false; + bool status_fifo_set=false; + + /* Defaults */ + config->port_swap = false; + config->beep_enabled = false; + config->device_usb_addr = 0; + config->device_usb_bus = 0; + config->ts_use_ip = false; + strcpy(config->ts_fifo_path, "longmynd_main_ts"); + config->status_use_ip = false; + strcpy(config->status_fifo_path, "longmynd_main_status"); + config->polarisation_supply=false; + char polarisation_str[8]; + + param=1; + while (paramdevice_usb_bus =(uint8_t)strtol(argv[param++],NULL,10); + config->device_usb_addr=(uint8_t)strtol(argv[param ],NULL,10); + main_usb_set=true; + break; + case 'i': + strncpy(config->ts_ip_addr,argv[param++], 16); + config->ts_ip_port=(uint16_t)strtol(argv[param],NULL,10); + config->ts_use_ip=true; + ts_ip_set = true; + break; + case 't': + strncpy(config->status_fifo_path, argv[param], 128); + ts_fifo_set=true; + break; + case 'I': + strncpy(config->status_ip_addr,argv[param++], 16); + config->status_ip_port=(uint16_t)strtol(argv[param],NULL,10); + config->status_use_ip=true; + status_ip_set = true; + break; + case 's': + strncpy(config->status_fifo_path, argv[param], 128); + status_fifo_set=true; + break; + case 'p': + strncpy(polarisation_str, argv[param], 8); + config->polarisation_supply=true; + break; + case 'w': + config->port_swap=true; + param--; /* there is no data for this so go back */ + break; + case 'b': + config->beep_enabled=true; + param--; /* there is no data for this so go back */ + break; + } + } + param++; + } + + if ((argc-param)<2) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Main Frequency and Main Symbol Rate not found.\n"); + } + + if (err==ERROR_NONE) { + config->freq_requested =(uint32_t)strtol(argv[param++],NULL,10); + if(config->freq_requested==0) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Main Frequency not in a valid format.\n"); + } + + config->sr_requested =(uint32_t)strtol(argv[param ],NULL,10); + if(config->sr_requested==0) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Main Symbol Rate not in a valid format.\n"); + } + } + + /* Process LNB Voltage Supply parameter */ + if (err==ERROR_NONE && config->polarisation_supply) { + if(0 == strcasecmp("h", polarisation_str)) { + config->polarisation_horizontal=true; + } + else if(0 == strcasecmp("v", polarisation_str)) { + config->polarisation_horizontal=false; + } + else { + config->polarisation_supply = false; + err=ERROR_ARGS_INPUT; + printf("ERROR: Polarisation voltage supply parameter not recognised\n"); + } + } + + if (err==ERROR_NONE) { + if (config->freq_requested>2450000) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Freq must be <= 2450 MHz\n"); + } else if (config->freq_requested<144) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Freq_must be >= 144 MHz\n"); + } else if (config->sr_requested>27500) { + err=ERROR_ARGS_INPUT; + printf("ERROR: SR must be <= 27 Msymbols/s\n"); + } else if (config->sr_requested<33) { + err=ERROR_ARGS_INPUT; + printf("ERROR: SR must be >= 33 Ksymbols/s\n"); + } else if (ts_ip_set && ts_fifo_set) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Cannot set TS FIFO and TS IP address\n"); + } else if (status_ip_set && status_fifo_set) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Cannot set Status FIFO and Status IP address\n"); + } else if (config->ts_use_ip && config->status_use_ip && (config->ts_ip_port == config->status_ip_port) && (0==strcmp(config->ts_ip_addr, config->status_ip_addr))) { + err=ERROR_ARGS_INPUT; + printf("ERROR: Cannot set Status IP & Port identical to TS IP & Port\n"); + } else { /* err==ERROR_NONE */ + printf(" Status: Main Frequency=%i KHz\n",config->freq_requested); + printf(" Main Symbol Rate=%i KSymbols/s\n",config->sr_requested); + if (!main_usb_set) printf(" Using First Minitiouner detected on USB\n"); + else printf(" USB bus/device=%i,%i\n",config->device_usb_bus,config->device_usb_addr); + if (!config->ts_use_ip) printf(" Main TS output to FIFO=%s\n",config->ts_fifo_path); + else printf(" Main TS output to IP=%s:%i\n",config->ts_ip_addr,config->ts_ip_port); + if (!config->status_use_ip) printf(" Main Status output to FIFO=%s\n",config->status_fifo_path); + else printf(" Main Status output to IP=%s:%i\n",config->status_ip_addr,config->status_ip_port); + if (config->port_swap) printf(" NIM inputs are swapped (Main now refers to BOTTOM F-Type\n"); + else printf(" Main refers to TOP F-Type\n"); + if (config->beep_enabled) printf(" MER Beep enabled\n"); + if (config->polarisation_supply) printf(" Polarisation Voltage Supply enabled: %s\n", (config->polarisation_horizontal ? "H, 18V" : "V, 13V")); + } + } + + if (err!=ERROR_NONE) { + printf("Please refer to the longmynd manual page via:\n"); + printf(" man -l longmynd.1\n"); + } + + config->new = true; + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t do_report(longmynd_status_t *status) { +/* -------------------------------------------------------------------------------------------------- */ +/* interrogates the demodulator to find the interesting info to report */ +/* status: the state struct */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + /* LNAs if present */ + if (status->lna_ok) { + uint8_t lna_gain, lna_vgo; + if (err==ERROR_NONE) stvvglna_read_agc(NIM_INPUT_TOP, &lna_gain, &lna_vgo); + status->lna_gain = (lna_gain<<5) | lna_vgo; + } + + /* I,Q powers */ + if (err==ERROR_NONE) err=stv0910_read_power(STV0910_DEMOD_TOP, &status->power_i, &status->power_q); + + /* constellations */ + if (err==ERROR_NONE) { + for (uint8_t count=0; countconstellation[count][0], &status->constellation[count][1]); + } + } + + /* puncture rate */ + if (err==ERROR_NONE) err=stv0910_read_puncture_rate(STV0910_DEMOD_TOP, &status->puncture_rate); + + /* carrier frequency offset we are trying */ + if (err==ERROR_NONE) err=stv0910_read_car_freq(STV0910_DEMOD_TOP, &status->frequency_offset); + + /* symbol rate we are trying */ + if (err==ERROR_NONE) err=stv0910_read_sr(STV0910_DEMOD_TOP, &status->symbolrate); + + /* viterbi error rate */ + if (err==ERROR_NONE) err=stv0910_read_err_rate(STV0910_DEMOD_TOP, &status->viterbi_error_rate); + + /* BER */ + if (err==ERROR_NONE) err=stv0910_read_ber(STV0910_DEMOD_TOP, &status->bit_error_rate); + + /* BCH Uncorrected Flag */ + if (err==ERROR_NONE) err=stv0910_read_errors_bch_uncorrected(STV0910_DEMOD_TOP, &status->errors_bch_uncorrected); + + /* BCH Error Count */ + if (err==ERROR_NONE) err=stv0910_read_errors_bch_count(STV0910_DEMOD_TOP, &status->errors_bch_count); + + /* LDPC Error Count */ + if (err==ERROR_NONE) err=stv0910_read_errors_ldpc_count(STV0910_DEMOD_TOP, &status->errors_ldpc_count); + + /* MER */ + if(status->state==STATE_DEMOD_S || status->state==STATE_DEMOD_S2) { + if (err==ERROR_NONE) err=stv0910_read_mer(STV0910_DEMOD_TOP, &status->modulation_error_rate); + } else { + status->modulation_error_rate = 0; + } + + /* MODCOD, Short Frames, Pilots */ + if (err==ERROR_NONE) err=stv0910_read_modcod_and_type(STV0910_DEMOD_TOP, &status->modcod, &status->short_frame, &status->pilots); + if(status->state!=STATE_DEMOD_S2) { + /* short frames & pilots only valid for S2 DEMOD state */ + status->short_frame = 0; + status->pilots = 0; + } + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +void *loop_i2c(void *arg) { +/* -------------------------------------------------------------------------------------------------- */ +/* Runs a loop to configure and monitor the Minitiouner Receiver */ +/* Configuration is read from the configuration struct */ +/* Status is written to the status struct */ +/* -------------------------------------------------------------------------------------------------- */ + thread_vars_t *thread_vars=(thread_vars_t *)arg; + longmynd_status_t *status=(longmynd_status_t *)thread_vars->status; + uint8_t *err = &thread_vars->thread_err; + + *err=ERROR_NONE; + + longmynd_config_t config_cpy; + longmynd_status_t status_cpy; + + uint64_t last_i2c_loop = timestamp_ms(); + while (*err==ERROR_NONE && *thread_vars->main_err_ptr==ERROR_NONE) { + /* Receiver State Machine Loop Timer */ + do { + /* Sleep for at least 10ms */ + usleep(10*1000); + } while (timestamp_ms() < (last_i2c_loop + I2C_LOOP_MS)); + + /* Check if there's a new config */ + if(thread_vars->config->new) + { + /* Lock config struct */ + pthread_mutex_lock(&thread_vars->config->mutex); + /* Clone status struct locally */ + memcpy(&config_cpy, thread_vars->config, sizeof(longmynd_config_t)); + /* Clear new config flag */ + thread_vars->config->new = false; + /* Set flag to clear ts buffer */ + thread_vars->config->ts_reset = true; + pthread_mutex_unlock(&thread_vars->config->mutex); + + status_cpy.frequency_requested = config_cpy.freq_requested; + /* init all the modules */ + if (*err==ERROR_NONE) *err=nim_init(); + /* we are only using the one demodulator so set the other to 0 to turn it off */ + if (*err==ERROR_NONE) *err=stv0910_init(config_cpy.sr_requested,0); + /* we only use one of the tuners in STV6120 so freq for tuner 2=0 to turn it off */ + if (*err==ERROR_NONE) *err=stv6120_init(config_cpy.freq_requested,0,config_cpy.port_swap); + /* we turn on the LNA we want and turn the other off (if they exist) */ + if (*err==ERROR_NONE) *err=stvvglna_init(NIM_INPUT_TOP, (config_cpy.port_swap) ? STVVGLNA_OFF : STVVGLNA_ON, &status_cpy.lna_ok); + if (*err==ERROR_NONE) *err=stvvglna_init(NIM_INPUT_BOTTOM, (config_cpy.port_swap) ? STVVGLNA_ON : STVVGLNA_OFF, &status_cpy.lna_ok); + + if (*err!=ERROR_NONE) printf("ERROR: failed to init a device - is the NIM powered on?\n"); + + /* Enable/Disable polarisation voltage supply */ + if (*err==ERROR_NONE) *err=ftdi_set_polarisation_supply(config_cpy.polarisation_supply, config_cpy.polarisation_horizontal); + if (*err==ERROR_NONE) { + status_cpy.polarisation_supply = config_cpy.polarisation_supply; + status_cpy.polarisation_horizontal = config_cpy.polarisation_horizontal; + } + + /* now start the whole thing scanning for the signal */ + if (*err==ERROR_NONE) { + *err=stv0910_start_scan(STV0910_DEMOD_TOP); + status_cpy.state=STATE_DEMOD_HUNTING; + } + } + + /* Main receiver state machine */ + switch(status_cpy.state) { + case STATE_DEMOD_HUNTING: + if (*err==ERROR_NONE) *err=do_report(&status_cpy); + /* process state changes */ + if (*err==ERROR_NONE) *err=stv0910_read_scan_state(STV0910_DEMOD_TOP, &status_cpy.demod_state); + if (status_cpy.demod_state==DEMOD_FOUND_HEADER) { + status_cpy.state=STATE_DEMOD_FOUND_HEADER; + } + else if (status_cpy.demod_state==DEMOD_S2) { + status_cpy.state=STATE_DEMOD_S2; + } + else if (status_cpy.demod_state==DEMOD_S) { + status_cpy.state=STATE_DEMOD_S; + } + else if ((status_cpy.demod_state!=DEMOD_HUNTING) && (*err==ERROR_NONE)) { + printf("ERROR: demodulator returned a bad scan state\n"); + *err=ERROR_BAD_DEMOD_HUNT_STATE; /* not allowed to have any other states */ + } /* no need for another else, all states covered */ + break; + + case STATE_DEMOD_FOUND_HEADER: + if (*err==ERROR_NONE) *err=do_report(&status_cpy); + /* process state changes */ + *err=stv0910_read_scan_state(STV0910_DEMOD_TOP, &status_cpy.demod_state); + if (status_cpy.demod_state==DEMOD_HUNTING) { + status_cpy.state=STATE_DEMOD_HUNTING; + } + else if (status_cpy.demod_state==DEMOD_S2) { + status_cpy.state=STATE_DEMOD_S2; + } + else if (status_cpy.demod_state==DEMOD_S) { + status_cpy.state=STATE_DEMOD_S; + } + else if ((status_cpy.demod_state!=DEMOD_FOUND_HEADER) && (*err==ERROR_NONE)) { + printf("ERROR: demodulator returned a bad scan state\n"); + *err=ERROR_BAD_DEMOD_HUNT_STATE; /* not allowed to have any other states */ + } /* no need for another else, all states covered */ + break; + + case STATE_DEMOD_S2: + if (*err==ERROR_NONE) *err=do_report(&status_cpy); + /* process state changes */ + *err=stv0910_read_scan_state(STV0910_DEMOD_TOP, &status_cpy.demod_state); + if (status_cpy.demod_state==DEMOD_HUNTING) { + status_cpy.state=STATE_DEMOD_HUNTING; + } + else if (status_cpy.demod_state==DEMOD_FOUND_HEADER) { + status_cpy.state=STATE_DEMOD_FOUND_HEADER; + } + else if (status_cpy.demod_state==DEMOD_S) { + status_cpy.state=STATE_DEMOD_S; + } + else if ((status_cpy.demod_state!=DEMOD_S2) && (*err==ERROR_NONE)) { + printf("ERROR: demodulator returned a bad scan state\n"); + *err=ERROR_BAD_DEMOD_HUNT_STATE; /* not allowed to have any other states */ + } /* no need for another else, all states covered */ + break; + + case STATE_DEMOD_S: + if (*err==ERROR_NONE) *err=do_report(&status_cpy); + /* process state changes */ + *err=stv0910_read_scan_state(STV0910_DEMOD_TOP, &status_cpy.demod_state); + if (status_cpy.demod_state==DEMOD_HUNTING) { + status_cpy.state=STATE_DEMOD_HUNTING; + } + else if (status_cpy.demod_state==DEMOD_FOUND_HEADER) { + status_cpy.state=STATE_DEMOD_FOUND_HEADER; + } + else if (status_cpy.demod_state==DEMOD_S2) { + status_cpy.state=STATE_DEMOD_S2; + } + else if ((status_cpy.demod_state!=DEMOD_S) && (*err==ERROR_NONE)) { + printf("ERROR: demodulator returned a bad scan state\n"); + *err=ERROR_BAD_DEMOD_HUNT_STATE; /* not allowed to have any other states */ + } /* no need for another else, all states covered */ + break; + + default: + *err=ERROR_STATE; /* we should never get here so panic if we do */ + break; + } + + /* Copy local status data over global object */ + pthread_mutex_lock(&status->mutex); + + /* Copy out other vars */ + status->state = status_cpy.state; + status->demod_state = status_cpy.demod_state; + status->lna_ok = status_cpy.lna_ok; + status->lna_gain = status_cpy.lna_gain; + status->power_i = status_cpy.power_i; + status->power_q = status_cpy.power_q; + status->frequency_requested = status_cpy.frequency_requested; + status->frequency_offset = status_cpy.frequency_offset; + status->polarisation_supply = status_cpy.polarisation_supply; + status->polarisation_horizontal = status_cpy.polarisation_horizontal; + status->symbolrate = status_cpy.symbolrate; + status->viterbi_error_rate = status_cpy.viterbi_error_rate; + status->bit_error_rate = status_cpy.bit_error_rate; + status->modulation_error_rate = status_cpy.modulation_error_rate; + status->errors_bch_uncorrected = status_cpy.errors_bch_uncorrected; + status->errors_bch_count = status_cpy.errors_bch_count; + status->errors_ldpc_count = status_cpy.errors_ldpc_count; + memcpy(status->constellation, status_cpy.constellation, (sizeof(uint8_t) * NUM_CONSTELLATIONS * 2)); + status->puncture_rate = status_cpy.puncture_rate; + status->modcod = status_cpy.modcod; + status->short_frame = status_cpy.short_frame; + status->pilots = status_cpy.pilots; + + /* Set monotonic value to signal new data */ + status->last_updated_monotonic = monotonic_ms(); + /* Trigger pthread signal */ + pthread_cond_signal(&status->signal); + pthread_mutex_unlock(&status->mutex); + + last_i2c_loop = timestamp_ms(); + } + return NULL; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t status_all_write(longmynd_status_t *status, uint8_t (*status_write)(uint8_t, uint32_t), uint8_t (*status_string_write)(uint8_t, char*)) { +/* -------------------------------------------------------------------------------------------------- */ +/* Reads the past status struct out to the passed write function */ +/* Returns: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + /* Main status */ + if (err==ERROR_NONE) err=status_write(STATUS_STATE,status->state); + /* LNAs if present */ + if (status->lna_ok) { + if (err==ERROR_NONE) err=status_write(STATUS_LNA_GAIN,status->lna_gain); + } + /* I,Q powers */ + if (err==ERROR_NONE) err=status_write(STATUS_POWER_I, status->power_i); + if (err==ERROR_NONE) err=status_write(STATUS_POWER_Q, status->power_q); + /* constellations */ + for (uint8_t count=0; countconstellation[count][0]); + if (err==ERROR_NONE) err=status_write(STATUS_CONSTELLATION_Q, status->constellation[count][1]); + } + /* puncture rate */ + if (err==ERROR_NONE) err=status_write(STATUS_PUNCTURE_RATE, status->puncture_rate); + /* carrier frequency offset we are trying */ + /* note we now have the offset, so we need to add in the freq we tried to set it to */ + if (err==ERROR_NONE) err=status_write(STATUS_CARRIER_FREQUENCY, (uint32_t)(status->frequency_requested+(status->frequency_offset/1000))); + /* LNB Voltage Supply Enabled: true / false */ + if (err==ERROR_NONE) err=status_write(STATUS_LNB_SUPPLY, status->polarisation_supply); + /* LNB Voltage Supply is Horizontal Polarisation: true / false */ + if (err==ERROR_NONE) err=status_write(STATUS_LNB_POLARISATION_H, status->polarisation_horizontal); + /* symbol rate we are trying */ + if (err==ERROR_NONE) err=status_write(STATUS_SYMBOL_RATE, status->symbolrate); + /* viterbi error rate */ + if (err==ERROR_NONE) err=status_write(STATUS_VITERBI_ERROR_RATE, status->viterbi_error_rate); + /* BER */ + if (err==ERROR_NONE) err=status_write(STATUS_BER, status->bit_error_rate); + /* MER */ + if (err==ERROR_NONE) err=status_write(STATUS_MER, status->modulation_error_rate); + /* BCH Uncorrected Errors Flag */ + if (err==ERROR_NONE) err=status_write(STATUS_ERRORS_BCH_UNCORRECTED, status->errors_bch_uncorrected); + /* BCH Corrected Errors Count */ + if (err==ERROR_NONE) err=status_write(STATUS_ERRORS_BCH_COUNT, status->errors_bch_count); + /* LDPC Corrected Errors Count */ + if (err==ERROR_NONE) err=status_write(STATUS_ERRORS_LDPC_COUNT, status->errors_ldpc_count); + /* Service Name */ + if (err==ERROR_NONE) err=status_string_write(STATUS_SERVICE_NAME, status->service_name); + /* Service Provider Name */ + if (err==ERROR_NONE) err=status_string_write(STATUS_SERVICE_PROVIDER_NAME, status->service_provider_name); + /* TS Null Percentage */ + if (err==ERROR_NONE) err=status_write(STATUS_TS_NULL_PERCENTAGE, status->ts_null_percentage); + /* TS Elementary Stream PIDs */ + for (uint8_t count=0; countts_elementary_streams[count][0] > 0) + { + if (err==ERROR_NONE) err=status_write(STATUS_ES_PID, status->ts_elementary_streams[count][0]); + if (err==ERROR_NONE) err=status_write(STATUS_ES_TYPE, status->ts_elementary_streams[count][1]); + } + } + /* MODCOD */ + if (err==ERROR_NONE) err=status_write(STATUS_MODCOD, status->modcod); + /* Short Frames */ + if (err==ERROR_NONE) err=status_write(STATUS_SHORT_FRAME, status->short_frame); + /* Pilots */ + if (err==ERROR_NONE) err=status_write(STATUS_PILOTS, status->pilots); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +int main(int argc, char *argv[]) { +/* -------------------------------------------------------------------------------------------------- */ +/* command line processing */ +/* module initialisation */ +/* Print out of status information to requested interface, triggered by pthread condition variable */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t (*status_write)(uint8_t,uint32_t); + uint8_t (*status_string_write)(uint8_t,char*); + + printf("Flow: main\n"); + + err=process_command_line(argc, argv, &longmynd_config); + + /* first setup the fifos, udp socket, ftdi and usb */ + if(longmynd_config.status_use_ip) { + if (err==ERROR_NONE) err=udp_status_init(longmynd_config.status_ip_addr, longmynd_config.status_ip_port); + status_write = udp_status_write; + status_string_write = udp_status_string_write; + } else { + if (err==ERROR_NONE) err=fifo_status_init(longmynd_config.status_fifo_path); + status_write = fifo_status_write; + status_string_write = fifo_status_string_write; + } + + if (err==ERROR_NONE) err=ftdi_init(longmynd_config.device_usb_bus, longmynd_config.device_usb_addr); + + thread_vars_t thread_vars_ts = { + .main_err_ptr = &err, + .thread_err = ERROR_NONE, + .config = &longmynd_config, + .status = &longmynd_status + }; + + if(0 != pthread_create(&thread_ts, NULL, loop_ts, (void *)&thread_vars_ts)) + { + fprintf(stderr, "Error creating loop_ts pthread\n"); + } + else + { + pthread_setname_np(thread_ts, "TS Transport"); + } + + thread_vars_t thread_vars_ts_parse = { + .main_err_ptr = &err, + .thread_err = ERROR_NONE, + .config = &longmynd_config, + .status = &longmynd_status + }; + + if(0 != pthread_create(&thread_ts_parse, NULL, loop_ts_parse, (void *)&thread_vars_ts_parse)) + { + fprintf(stderr, "Error creating loop_ts_parse pthread\n"); + } + else + { + pthread_setname_np(thread_ts_parse, "TS Parse"); + } + + thread_vars_t thread_vars_i2c = { + .main_err_ptr = &err, + .thread_err = ERROR_NONE, + .config = &longmynd_config, + .status = &longmynd_status + }; + + if(0 != pthread_create(&thread_i2c, NULL, loop_i2c, (void *)&thread_vars_i2c)) + { + fprintf(stderr, "Error creating loop_i2c pthread\n"); + } + else + { + pthread_setname_np(thread_i2c, "Receiver"); + } + + thread_vars_t thread_vars_beep = { + .main_err_ptr = &err, + .thread_err = ERROR_NONE, + .config = &longmynd_config, + .status = &longmynd_status + }; + + if(0 != pthread_create(&thread_beep, NULL, loop_beep, (void *)&thread_vars_beep)) + { + fprintf(stderr, "Error creating loop_beep pthread\n"); + } + else + { + pthread_setname_np(thread_beep, "Beep Audio"); + } + + uint64_t last_status_sent_monotonic = 0; + longmynd_status_t longmynd_status_cpy; + + while (err==ERROR_NONE) { + /* Test if new status data is available */ + if(longmynd_status.last_updated_monotonic != last_status_sent_monotonic) { + /* Acquire lock on global status struct */ + pthread_mutex_lock(&longmynd_status.mutex); + /* Clone status struct locally */ + memcpy(&longmynd_status_cpy, &longmynd_status, sizeof(longmynd_status_t)); + /* Release lock on global status struct */ + pthread_mutex_unlock(&longmynd_status.mutex); + + /* Send all status via configured output interface from local copy */ + err=status_all_write(&longmynd_status_cpy, status_write, status_string_write); + + /* Update monotonic timestamp last sent */ + last_status_sent_monotonic = longmynd_status_cpy.last_updated_monotonic; + } else { + /* Sleep 10ms */ + usleep(10*1000); + } + /* Check for errors on threads */ + if(err==ERROR_NONE && + (thread_vars_ts.thread_err!=ERROR_NONE + || thread_vars_ts_parse.thread_err!=ERROR_NONE + || thread_vars_beep.thread_err!=ERROR_NONE + || thread_vars_i2c.thread_err!=ERROR_NONE)) { + err=ERROR_THREAD_ERROR; + } + } + + /* Exited, wait for child threads to exit */ + pthread_join(thread_ts_parse, NULL); + pthread_join(thread_ts, NULL); + pthread_join(thread_i2c, NULL); + pthread_join(thread_beep, NULL); + + return err; +} diff --git a/longmynd/main.h b/longmynd/main.h new file mode 100755 index 0000000..539fec3 --- /dev/null +++ b/longmynd/main.h @@ -0,0 +1,146 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: main.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef MAIN_H +#define MAIN_H + +#include +#include +#include +#include + +/* states of the main loop state machine */ +#define STATE_INIT 0 +#define STATE_DEMOD_HUNTING 1 +#define STATE_DEMOD_FOUND_HEADER 2 +#define STATE_DEMOD_S 3 +#define STATE_DEMOD_S2 4 + +/* define the various status reports */ +#define STATUS_STATE 1 +#define STATUS_LNA_GAIN 2 +#define STATUS_PUNCTURE_RATE 3 +#define STATUS_POWER_I 4 +#define STATUS_POWER_Q 5 +#define STATUS_CARRIER_FREQUENCY 6 +#define STATUS_CONSTELLATION_I 7 +#define STATUS_CONSTELLATION_Q 8 +#define STATUS_SYMBOL_RATE 9 +#define STATUS_VITERBI_ERROR_RATE 10 +#define STATUS_BER 11 +#define STATUS_MER 12 +#define STATUS_SERVICE_NAME 13 +#define STATUS_SERVICE_PROVIDER_NAME 14 +#define STATUS_TS_NULL_PERCENTAGE 15 +#define STATUS_ES_PID 16 +#define STATUS_ES_TYPE 17 +#define STATUS_MODCOD 18 +#define STATUS_SHORT_FRAME 19 +#define STATUS_PILOTS 20 +#define STATUS_ERRORS_LDPC_COUNT 21 +#define STATUS_ERRORS_BCH_COUNT 22 +#define STATUS_ERRORS_BCH_UNCORRECTED 23 +#define STATUS_LNB_SUPPLY 24 +#define STATUS_LNB_POLARISATION_H 25 + +/* The number of constellation peeks we do for each background loop */ +#define NUM_CONSTELLATIONS 16 + +#define NUM_ELEMENT_STREAMS 16 + +typedef struct { + bool port_swap; + uint8_t port; + uint32_t freq_requested; + uint32_t sr_requested; + bool beep_enabled; + + uint8_t device_usb_bus; + uint8_t device_usb_addr; + + bool ts_use_ip; + bool ts_reset; + char ts_fifo_path[128]; + char ts_ip_addr[16]; + int ts_ip_port; + + bool status_use_ip; + char status_fifo_path[128]; + char status_ip_addr[16]; + int status_ip_port; + + bool polarisation_supply; + bool polarisation_horizontal; // false -> 13V, true -> 18V + + bool new; + pthread_mutex_t mutex; +} longmynd_config_t; + +typedef struct { + uint8_t state; + uint8_t demod_state; + bool lna_ok; + uint16_t lna_gain; + uint8_t power_i; + uint8_t power_q; + uint32_t frequency_requested; + int32_t frequency_offset; + bool polarisation_supply; + bool polarisation_horizontal; // false -> 13V, true -> 18V + uint32_t symbolrate; + uint32_t viterbi_error_rate; // DVB-S1 + uint32_t bit_error_rate; // DVB-S2 + uint32_t modulation_error_rate; // DVB-S2 + bool errors_bch_uncorrected; + uint32_t errors_bch_count; + uint32_t errors_ldpc_count; + uint8_t constellation[NUM_CONSTELLATIONS][2]; // { i, q } + uint8_t puncture_rate; + char service_name[255]; + char service_provider_name[255]; + uint8_t ts_null_percentage; + uint16_t ts_elementary_streams[NUM_ELEMENT_STREAMS][2]; // { pid, type } + uint32_t modcod; + bool short_frame; + bool pilots; + + uint64_t last_updated_monotonic; + pthread_mutex_t mutex; + pthread_cond_t signal; +} longmynd_status_t; + +typedef struct { + uint8_t *main_state_ptr; + uint8_t *main_err_ptr; + uint8_t thread_err; + longmynd_config_t *config; + longmynd_status_t *status; +} thread_vars_t; + +uint64_t timestamp_ms(void); + +void config_set_frequency(uint32_t frequency); +void config_set_symbolrate(uint32_t symbolrate); +void config_set_frequency_and_symbolrate(uint32_t frequency, uint32_t symbolrate); +void config_set_lnbv(bool enabled, bool horizontal); + +#endif + diff --git a/longmynd/minitiouner.rules b/longmynd/minitiouner.rules new file mode 100755 index 0000000..a0499fe --- /dev/null +++ b/longmynd/minitiouner.rules @@ -0,0 +1,7 @@ +# Install with `sudo cp minitiouner.rules /etc/udev/rules.d/` +# then unplug and replug the minitiouner + +# Minitiouner uses FT2232H/D default VID/PID, but it's own product string. +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{product}=="USB <-> NIM tuner", MODE:="0666" +# Minitiouner Express uses different product string +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{product}=="MiniTiouner-Express", MODE:="0666" diff --git a/longmynd/nim.c b/longmynd/nim.c new file mode 100755 index 0000000..902c1d0 --- /dev/null +++ b/longmynd/nim.c @@ -0,0 +1,207 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: nim.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - handlers for the nim module itself */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "nim.h" +#include "ftdi.h" +#include "errors.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +/* The tuner and LNAs are accessed by turning on the I2C bus repeater in the demodulator + this reduces the noise on the tuner I2C lines as they are inactive when the repeater + is turned off. We need to keep track of this when we access the NIM */ +bool repeater_on; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_read_demod(uint16_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads a demodulator register and takes care of the i2c bus repeater */ +/* reg: which demod register to read */ +/* val: where to put the result */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + /* if we are not using the tuner or lna any more then we can turn off + the repeater to reduce noise + this is bit 7 of the Px_I2CRPT register. Other bits define I2C speed etc. */ + if (repeater_on) { + repeater_on=false; + err=nim_write_demod(0xf12a,0x38); + } + if (err==ERROR_NONE) err=ftdi_i2c_read_reg16(NIM_DEMOD_ADDR,reg,val); + if (err!=ERROR_NONE) printf("ERROR: demod read 0x%.4x\n",reg); + + /* note we don't turn the repeater off as there might be other r/w to tuner/LNAs */ + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_write_demod(uint16_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* writes to a demodulator register and takes care of the i2c bus repeater */ +/* reg: which demod register to write to */ +/* val: what to write to it */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (repeater_on) { + repeater_on=false; + err=nim_write_demod(0xf12a,0x38); + } + if (err==ERROR_NONE) err=ftdi_i2c_write_reg16(NIM_DEMOD_ADDR,reg,val); + if (err!=ERROR_NONE) printf("ERROR: demod write 0x%.4x, 0x%.2x\n",reg,val); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_read_lna(uint8_t lna_addr, uint8_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads from the specified lna taking care of the i2c bus repeater */ +/* lna_addr: i2c address of the lna to access */ +/* reg: which lna register to read */ +/* val: where to put the result */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (!repeater_on) { + err=nim_write_demod(0xf12a,0xb8); + repeater_on=true; + } + if (err==ERROR_NONE) err=ftdi_i2c_read_reg8(lna_addr,reg,val); + if (err!=ERROR_NONE) printf("ERROR: lna read 0x%.2x, 0x%.2x\n",lna_addr,reg); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_write_lna(uint8_t lna_addr, uint8_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* writes to the specified lna taking care of the i2c bus repeater */ +/* lna_addr: i2c address of the lna to access */ +/* reg: which lna register to write to */ +/* val: what to write to it */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (!repeater_on) { + err=nim_write_demod(0xf12a,0xb8); + repeater_on=true; + } + if (err==ERROR_NONE) err=ftdi_i2c_write_reg8(lna_addr,reg,val); + if (err!=ERROR_NONE) printf("ERROR: lna write 0x%.2x, 0x%.2x,0x%.2x\n",lna_addr,reg,val); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_read_tuner(uint8_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads from the stv0910 (tuner) taking care of the i2c bus repeater */ +/* reg: which tuner register to read from */ +/* val: where to put the result */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (!repeater_on) { + err=nim_write_demod(0xf12a,0xb8); + repeater_on=true; + } + if (err==ERROR_NONE) err=ftdi_i2c_read_reg8(NIM_TUNER_ADDR,reg,val); + if (err!=ERROR_NONE) printf("ERROR: tuner read 0x%.2x\n",reg); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_write_tuner(uint8_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* writes to the stv0910 (tuner) taking care of the i2c bus repeater */ +/* reg: which tuner register to write to */ +/* val: what to write to it */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (!repeater_on) { + err=nim_write_demod(0xf12a,0xb8); + repeater_on=true; + } + if (err==ERROR_NONE) err=ftdi_i2c_write_reg8(NIM_TUNER_ADDR,reg,val); + if (err!=ERROR_NONE) printf("ERROR: tuner write %i,%i\n",reg,val); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t nim_init() { +/* -------------------------------------------------------------------------------------------------- */ +/* initialises the nim (at the highest level) */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t val; + + printf("Flow: NIM init\n"); + + repeater_on = false; + + /* check we can read and write a register */ + /* check to see if we can write and readback to a demod register */ + if (err==ERROR_NONE) err=nim_write_demod(0xf536,0xaa); /* random reg with alternating bits */ + if (err==ERROR_NONE) err=nim_read_demod(0xf536,&val); + if (err==ERROR_NONE) { + if (val!=0xaa) { /* check alternating bits ok */ + printf("ERROR: nim_init didn't r/w to the modulator\n"); + err=ERROR_NIM_INIT; + } + } + + /* we always want to start with the i2c repeater turned off */ + if (err!=ERROR_NONE) err=nim_write_demod(0xf12a,0x38); + + if (err!=ERROR_NONE) printf("ERROR: nim_init\n"); + + return err; +} + diff --git a/longmynd/nim.h b/longmynd/nim.h new file mode 100755 index 0000000..eb7136e --- /dev/null +++ b/longmynd/nim.h @@ -0,0 +1,48 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: nim.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef NIM_H +#define NIM_H + +#include "stvvglna.h" +#include + +#define NIM_DEMOD_ADDR 0xd2 +#define NIM_TUNER_ADDR 0xc0 +#define NIM_LNA_0_ADDR STVVGLNA_I2C_ADDR3 +#define NIM_LNA_1_ADDR STVVGLNA_I2C_ADDR0 + +#define NIM_TUNER_XTAL 30000 /* in KHz */ +#define NIM_DEMOD_MCLK 135000000 /* in Hz */ + +#define NIM_INPUT_TOP 1 +#define NIM_INPUT_BOTTOM 2 + +uint8_t nim_init(); +uint8_t nim_send_d0(); +uint8_t nim_read_tuner (uint8_t, uint8_t*); +uint8_t nim_write_tuner(uint8_t, uint8_t ); +uint8_t nim_read_demod (uint16_t, uint8_t*); +uint8_t nim_write_demod(uint16_t, uint8_t ); +uint8_t nim_read_lna (uint8_t, uint8_t, uint8_t*); +uint8_t nim_write_lna (uint8_t, uint8_t, uint8_t ); + +#endif diff --git a/longmynd/stopsrv.sh b/longmynd/stopsrv.sh new file mode 100755 index 0000000..cf387b2 --- /dev/null +++ b/longmynd/stopsrv.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# 2023 F4IYT + +if [ -e fifo.264 ] +then + rm fifo.264 +fi +if [ -e longmynd_main_status ] +then + rm longmynd_main_* + rm flux.datv + killall fake_read + killall longmynd + +fi + +exit 0 diff --git a/longmynd/stv0910.c b/longmynd/stv0910.c new file mode 100755 index 0000000..1d3fecc --- /dev/null +++ b/longmynd/stv0910.c @@ -0,0 +1,684 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - the demodulator support routines (STV0910) */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include "stv0910.h" +#include "stv0910_regs.h" +#include "stv0910_utils.h" +#include "nim.h" +#include "errors.h" +#include "stv0910_regs_init.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_car_freq(uint8_t demod, int32_t *cf) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads the current carrier frequency and return it (in Hz) */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* car_freq: signed place to store the answer */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t val_h, val_m, val_l; + double car_offset_freq; + + /* first off we read in the carrier offset as a signed number */ + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? + RSTV0910_P2_CFR2 : RSTV0910_P1_CFR2, &val_h); /* high byte*/ + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? + RSTV0910_P2_CFR1 : RSTV0910_P1_CFR1, &val_m); /* mid */ + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? + RSTV0910_P2_CFR0 : RSTV0910_P1_CFR0, &val_l); /* low */ + /* since this is a 24 bit signed value, we need to build it as a 24 bit value, shift it up to the top + to get a 32 bit signed value, then convert it to a double */ + car_offset_freq=(double)(int32_t)((((uint32_t)val_h<<16) + ((uint32_t)val_m<< 8) + ((uint32_t)val_l )) << 8); + /* carrier offset freq (MHz)= mclk (MHz) * CFR/2^24. But we have the extra 256 in there from the sign shift */ + /* so in Hz we need: */ + car_offset_freq=135000000*car_offset_freq/256.0/256.0/256.0/256.0; + + *cf=(int32_t)car_offset_freq; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read carrier frequency\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_constellation(uint8_t demod, uint8_t *i, uint8_t *q) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads an I,Q pair from the constellation monitor registers */ +/* i,q: places to store the results */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_ISYMB : RSTV0910_P1_ISYMB, i); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_QSYMB : RSTV0910_P1_QSYMB, q); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read constellation\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_sr(uint8_t demod, uint32_t *found_sr) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads the currently detected symbol rate */ +/* found_sr: place to store the result */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + double sr; + uint8_t val_h, val_mu, val_ml, val_l; + uint8_t err; + + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFR3 : RSTV0910_P1_SFR3, &val_h); /* high byte */ + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFR2 : RSTV0910_P1_SFR2, &val_mu); /* mid upper */ + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFR1 : RSTV0910_P1_SFR1, &val_ml); /* mid lower */ + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFR0 : RSTV0910_P1_SFR0, &val_l); /* low byte */ + sr=((uint32_t)val_h << 24) + + ((uint32_t)val_mu << 16) + + ((uint32_t)val_ml << 8) + + ((uint32_t)val_l ); + /* sr (MHz) = ckadc (MHz) * SFR/2^32. So in Symbols per Second we need */ + sr=135000000*sr/256.0/256.0/256.0/256.0; + *found_sr=(uint32_t)sr; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read symbol rate\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_puncture_rate(uint8_t demod, uint8_t *rate) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads teh detected viterbi punctuation rate */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* rate: place to store the result */ +/* The single byta, n, represents a rate=n/n+1 */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t val; + + err=stv0910_read_reg_field(demod==STV0910_DEMOD_TOP ? FSTV0910_P2_VIT_CURPUN : FSTV0910_P1_VIT_CURPUN, &val); + switch (val) { + case STV0910_PUNCTURE_1_2: *rate=1; break; + case STV0910_PUNCTURE_2_3: *rate=2; break; + case STV0910_PUNCTURE_3_4: *rate=3; break; + case STV0910_PUNCTURE_5_6: *rate=5; break; + case STV0910_PUNCTURE_6_7: *rate=6; break; + case STV0910_PUNCTURE_7_8: *rate=7; break; + default: err=ERROR_VITERBI_PUNCTURE_RATE; break; + } + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read puncture rate\n"); + + return err; +} + + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_power(uint8_t demod, uint8_t *power_i, uint8_t *power_q) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads the power registers in the Demodulator and returns the results */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* power_i, power_q: places to store the results */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + + /*power=1/4.ADC */ + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_POWERI : RSTV0910_P1_POWERI, power_i); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_POWERQ : RSTV0910_P1_POWERQ, power_q); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read power\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_err_rate(uint8_t demod, uint32_t *vit_errs) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads the viterbi error rate registers */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* vit_errs: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t val; + + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_VERROR : RSTV0910_P1_VERROR, &val); + /* 0=perfect, 0xff=6.23 %errors (errs/4096) */ + /* note there is a problem in the datasheet here as it says 255/2048=6.23% */ + /* to report an integer we will report in 100 * the percentage, so 623=6.23% */ + /* also want to round up to the nearest integer just to be pedantic */ + *vit_errs=((((uint32_t)val)*100000/4096)+5)/10; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read viterbi error rate\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_ber(uint8_t demod, uint32_t *ber) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads the number of bytes processed by the FEC, the number of error bits and then calculates BER */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* ber: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t high, mid_u, mid_m, mid_l, low; + double cpt; + double errs; + + /* first we trigger a buffer transfer and read the byte counter 40 bits */ + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERCPT4 : RSTV0910_P1_FBERCPT4, &high); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERCPT3 : RSTV0910_P1_FBERCPT3, &mid_u); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERCPT2 : RSTV0910_P1_FBERCPT2, &mid_m); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERCPT1 : RSTV0910_P1_FBERCPT1, &mid_l); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERCPT0 : RSTV0910_P1_FBERCPT0, &low); + cpt=(double)high*256.0*256.0*256.0*256.0 + (double)mid_u*256.0*256.0*256.0 + (double)mid_m*256.0*256.0 + + (double)mid_l*256.0 + (double)low; + + /* we have already triggered the register buffer transfer, so now we we read the bit error from them */ + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERERR2 : RSTV0910_P1_FBERERR2, &high); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERERR1 : RSTV0910_P1_FBERERR1, &mid_m); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_FBERERR0 : RSTV0910_P1_FBERERR0, &low); + errs=(double)high*256.0*256.0 + (double)mid_m*256.0 + (double)low; + + *ber=(uint32_t)(10000.0*errs/(cpt*8.0)); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read BER\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_mer(uint8_t demod, uint32_t *mer) { +/* -------------------------------------------------------------------------------------------------- */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* mer: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t high, low; + + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_NOSRAMPOS : RSTV0910_P1_NOSRAMPOS, &high); + if (err==ERROR_NONE) err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_NOSRAMVAL : RSTV0910_P1_NOSRAMVAL, &low); + + if(((high >> 2) & 0x01) == 1) + { + /* Px_NOSRAM_CNRVAL is valid */ + *mer = ((high & 0x03) << 8) | low; + } + else + { + *mer = 0; + if (err==ERROR_NONE) err=stv0910_write_reg_field(demod==STV0910_DEMOD_TOP ? FSTV0910_P2_NOSRAM_ACTIVATION : FSTV0910_P1_NOSRAM_ACTIVATION, 0x02); + } + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read DVBS2 MER\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_errors_bch_uncorrected(uint8_t demod, bool *errors_bch_uncorrected) { +/* -------------------------------------------------------------------------------------------------- */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read*/ +/* errors_bch_uncorrected: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t result; + + /* This parameter appears to be total, not for an individual demodulator */ + (void)demod; + + err=stv0910_read_reg_field(FSTV0910_ERRORFLAG, &result); + + if(result == 0) { + *errors_bch_uncorrected = true; + } + else { + *errors_bch_uncorrected = false; + } + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read BCH Errors Uncorrected\n"); + + return err; +} + + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_errors_bch_count(uint8_t demod, uint32_t *errors_bch_count) { +/* -------------------------------------------------------------------------------------------------- */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* errors_bch_count: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t result; + + /* This parameter appears to be total, not for an individual demodulator */ + (void)demod; + + err=stv0910_read_reg_field(FSTV0910_BCH_ERRORS_COUNTER, &result); + + *errors_bch_count = (uint32_t)result; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read BCH Errors Count\n"); + + return err; +} + + + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_errors_ldpc_count(uint8_t demod, uint32_t *errors_ldpc_count) { +/* -------------------------------------------------------------------------------------------------- */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* errors_ldpc_count: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t high, low; + + /* This parameter appears to be total, not for an individual demodulator */ + (void)demod; + + err=stv0910_read_reg_field(FSTV0910_LDPC_ERRORS1, &high); + if (err==ERROR_NONE) err=stv0910_read_reg_field(FSTV0910_LDPC_ERRORS0, &low); + + *errors_ldpc_count = (uint32_t)high << 8 | (uint32_t)low; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read LDPC Errors Count\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_modcod_and_type(uint8_t demod, uint32_t *modcod, bool *short_frame, bool *pilots) { +/* -------------------------------------------------------------------------------------------------- */ +/* Note that MODCODs are different in DVBS and DVBS2. Also short_frame and pilots only valid for S2 */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* modcod: place to store the result */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t regval; + + err=stv0910_read_reg(demod==STV0910_DEMOD_TOP ? RSTV0910_P2_DMDMODCOD : RSTV0910_P1_DMDMODCOD, ®val); + + *modcod = (regval & 0x7c) >> 2; + *short_frame = (regval & 0x02) >> 1; + *pilots = regval & 0x01; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read MODCOD\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_setup_clocks() { +/* -------------------------------------------------------------------------------------------------- */ +/* sequence is: */ +/* DIRCLK=0 (the hw clock selection pin) */ +/* RESETB (the hw reset pin) transits from low to high at least 3ms after power stabilises */ +/* disable demodulators (done in register initialisation) */ +/* standby=1 (done in register initialisation) */ +/* set NCOURSE etc. (PLL regs, also done in reg init) */ +/* STANDBY=0 (turn on PLL) */ +/* SYNCTRL:BYPASSPLLCORE=0 (turn on clocks) */ +/* wait for lock bit to go high */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint32_t ndiv; + uint32_t odf; + uint32_t idf; + uint32_t f_phi; + uint32_t f_xtal; + uint8_t cp; + uint8_t lock=0; + uint16_t timeout=0; + + printf("Flow: STV0910 set MCLK\n"); + + /* 800MHz < Fvco < 1800MHz */ + /* Fvco = (ExtClk * 2 * NDIV) / IDF */ + /* (400 * IDF) / ExtClk < NDIV < (900 * IDF) / ExtClk */ + + /* ODF forced to 4 otherwise desynchronization of digital and analog clock which result */ + /* in a bad calculated symbolrate */ + odf=4; + /* IDF forced to 1 : Optimal value */ + idf=1; + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_ODF, odf); + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_IDF, idf); + + f_xtal=NIM_TUNER_XTAL/1000; /* in MHz */ + f_phi=135000000/1000000; + ndiv=(f_phi * odf * idf) / f_xtal; + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_N_DIV, ndiv); + + /* Set CP according to NDIV */ + cp=7; + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_CP, cp); + + /* turn on all the clocks */ + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_STANDBY, 0); + + /* derive clocks from PLL */ + if (err==ERROR_NONE) err=stv0910_write_reg_field(FSTV0910_BYPASSPLLCORE, 0); + + /* wait for PLL to lock */ + do { + timeout++; + if (timeout==STV0910_PLL_LOCK_TIMEOUT) { + err=ERROR_DEMOD_PLL_TIMEOUT; + printf("ERROR: STV0910 pll lock timeout\n"); + } + if (err==ERROR_NONE) stv0910_read_reg_field(FSTV0910_PLLLOCK, &lock); + } while ((err==ERROR_NONE) && (lock==0)); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 set MCLK\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_setup_equalisers(uint8_t demod) { +/* -------------------------------------------------------------------------------------------------- */ +/* 2 parts DFE, FFE */ +/* DFE: update speed is in EQUALCFG.PX_MU_EQUALDFE. */ +/* turn it on with EQUAL_ON and freeze with PX_MU_EQUALDFE=0 */ +/* FFE: update speed is in FFECFGPX_MU_EQUALFFE. */ +/* turn it on with EQUALFFE_ON and freeze with PX_MU_EQUALFFE=0 */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + + printf("Flow: Setup equlaizers %i\n", demod); + + return ERROR_NONE; +} + + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_setup_carrier_loop(uint8_t demod) { +/* -------------------------------------------------------------------------------------------------- */ +/* 3 stages: */ +/* course: */ +/* CARFREQ sets speed and precision */ +/* limitsd are in CFRUP and CFRLOW */ +/* step size in CFRINC */ +/* fine: */ +/* CARFREQ_BETA_FREQ defines time constant */ +/* once course is done, phase tracking loop is used, ACLC and BCLC define loop parameters */ +/* if DVBS not resolved, attempts to reolve DVB-S2 headers as defined in CARHDR.K_FREQ_HDR */ +/* tracking: */ +/* seperate alpha a beta for DVBS (ACLC and BCLC) and DVB-S2 (Alpha in CLC2S2Q and */ +/* beta in ACLC2S28) */ +/* lock detect: */ +/* DVBS LDI has accumulator. compared to threshold (LDT, LDT2) and the results are */ +/* in DSTATUS.CAR_LOCK */ +/* when lock bit is set, freq detector is disabled amd starts phase tracking. */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + + printf("Flow: Setup carrier loop %i\n", demod); + + /* start at 0 offset */ + err=stv0910_write_reg((demod==STV0910_DEMOD_TOP ? RSTV0910_P2_CFRINIT0 : RSTV0910_P1_CFRINIT0), 0); + if (err==ERROR_NONE) err=stv0910_write_reg((demod==STV0910_DEMOD_TOP ? RSTV0910_P2_CFRINIT1 : RSTV0910_P1_CFRINIT1), 0); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_setup_timing_loop(uint8_t demod, uint32_t sr) { +/* -------------------------------------------------------------------------------------------------- */ +/* coarse aquisition */ +/* put in coarse mode in TMGCFG2 (regs init) */ +/* put in auto mode TMGCFG3 (regs init) */ +/* set SFRUPRATIO, SFTLOWRATIO (regs init) */ +/* set so that when boundary reached scan is inverted (regs init) */ +/* set to keep looking indefinitely (regs init) */ +/* DVBS alpha and beta are used */ +/* observe where it is at with KREFTMG2 */ +/* fine aquisition */ +/* coarse search defines the fine scanning range automtically */ +/* go to fine mode TMGCFG2 */ +/* SFRSTEP.SFR_SCANSTEP defines fineness of scan */ +/* tracking */ +/* it now loads loop parameters */ +/* seperate alphas and betas for DVBS and SVB-S2: */ +/* DVBS TMGALPHA_EXP TIMGBETA_EXP in RTC */ +/* iDVB-S2 TMGALPHAS2_EXP and TMGBETA2_EXP in RTCS2 */ +/* when lock achieved timing offset is in TMGREG */ +/* timing offset can be cancelled out (ie TMGREG set to zero and SFR adjusted accordingly */ +/* */ +/* lock indicator is DSTATUS maximised when locked. */ +/* need to optimise lock thresholds to optimise lock stability */ +/* lock indicator is filtered with time constant: TMGCFG.TMGLOCK_BETA */ +/* this is compared to 2 thresholds TMGTHRISE_TMGLOCK_THRISE and TMGTHFALL.TMGLOCK_THFALL in order */ +/* to issue TMGCLOCK_QUALITY[1:0] which is a 2 bit lock indicator with hysterisis in DSTATUS. */ +/* lock is when TMGLOCK>TMGLOCK_THRISE (in TMGLOCK_QUALITY) */ +/* loss of lock is when TMGLOCK < TTMGLOCK_THFALL in TMGLOCK_QUALITY */ +/* */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint16_t sr_reg; + + printf("Flow: Setup timing loop %i\n", demod); + + /* SR (MHz) = ckadc (135MHz) * SFRINIT / 2^16 */ + /* we have sr in KHz, ckadc in MHz) */ + sr_reg=(uint16_t)((((uint32_t)sr) << 16) / 135 / 1000); + + if (err==ERROR_NONE) err=stv0910_write_reg((demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFRINIT1 : RSTV0910_P1_SFRINIT0), + (uint8_t)(sr_reg >> 8) ); + if (err==ERROR_NONE) err=stv0910_write_reg((demod==STV0910_DEMOD_TOP ? RSTV0910_P2_SFRINIT0 : RSTV0910_P1_SFRINIT1), + (uint8_t)(sr_reg & 0xFF) ); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_setup_ts(uint8_t demod) { +/* -------------------------------------------------------------------------------------------------- */ +/* format with or without sync and header bytes TSINSDELH */ +/* output rate manual or auto adjust */ +/* control with TSCFX */ +/* serial or paralled TSCFGH.PxTSFIFO_SERIAL (serial is on D7) 2 control bits */ +/* configure bus to low impedance (high Z on reset) OUTCFG */ +/* DPN (data valid/parity negated) is high when FEC is outputting data */ +/* low when redundant data is out[ut eq parity data or rate regulation stuffing bits) */ +/* Data is regulated by CLKOUT and DPN: either data valid or envelope. */ +/* data valid uses continuous clock and select valid data using DPN */ +/* envelope: DPN still indicates valid data and then punctured clock for rate regulation */ +/* TSCFGH.TSFIFO_DVBCI=1 for data and 0 for envelope. */ +/* CLKOUT polarity bit XOR, OUTCFG2.TS/2_CLKOUT_XOR=0 valid rising (=1 for falling). */ +/* TSFIFOMANSPEED controlls data rate (padding). 0x11 manual, 0b00 fully auto. speed is TSSPEE */ +/* if need square clock, TSCFGH.TSFIFO_DUTY50. */ +/* parallel mode is ST back end. CLKOUT held (TSCFGH.TSINFO_DBCI) for unknown data section */ +/* or DVB-CI: DRN is help (CLKOUTnCFG.CLKOUT_XOR) for unknown data section */ +/* in both STRUT is high for first byte of packet */ +/* rate compensation is TSCFGH.TSFIFO_DVBCI */ +/* */ +/* All of this is set in the register init. */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + printf("Flow: Setup ts %i\n", demod); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_start_scan(uint8_t demod) { +/* -------------------------------------------------------------------------------------------------- */ +/* demodulator search sequence is: */ +/* setup the timing loop */ +/* setup the carrier loop */ +/* set initial carrier offset CFRINIT for best guess carrier search */ +/* set initial symbol ratea SFRINIT for best guess blind search */ +/* set manual mode for CFRINC to be used - make it small */ +/* write DMDISTATE to AER = 1 - blind search with best guess */ +/* auto mode for symbol rate will be +/25% SFRUPRATIO and SFRLOWRATIO define this number. */ +/* SFRUP1:AUTO_GUP=1 for auto (and SFRLOW1:AUTO_GLOW=1) */ +/* cold start carrier and sr unknown but use best guess (0x01) */ +/* */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + printf("Flow: STV0910 start scan\n"); + + if (err==ERROR_NONE) err=stv0910_write_reg((demod==STV0910_DEMOD_TOP ? RSTV0910_P2_DMDISTATE : RSTV0910_P1_DMDISTATE), + STV0910_SCAN_BLIND_BEST_GUESS); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 start scan\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_scan_state(uint8_t demod, uint8_t *state) { +/* -------------------------------------------------------------------------------------------------- */ +/* simply reads out the demodulator states for the given demodulator */ +/* demod: STV0910_DEMOD_TOP | STV0910_DEMOD_BOTTOM: which demodulator is being read */ +/* return: error state */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + if (err==ERROR_NONE) err=stv0910_read_reg_field((demod==STV0910_DEMOD_TOP ? + FSTV0910_P2_HEADER_MODE : FSTV0910_P1_HEADER_MODE), state); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read scan state\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_init_regs() { +/* -------------------------------------------------------------------------------------------------- */ +/* reads all the initial values for all the demodulator registers and sets them up */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t val1; + uint8_t val2; + uint8_t err; + uint16_t i=0; + + printf("Flow: stv0910 init regs\n"); + + /* first we check on the IDs */ + err=nim_read_demod(0xf100, &val1); + if (err==ERROR_NONE) err=nim_read_demod(0xf101, &val2); + printf(" Status: STV0910 MID = 0x%.2x, DID = 0x%.2x\n", val1, val2); + if ((val1!=0x51) || (val2!=0x20)) { + printf("ERROR: read the wrong stv0910 MID/DID"); + return ERROR_DEMOD_INIT; + } + + /* next we initialise all the registers in the list */ + do { + if (err==ERROR_NONE) err=stv0910_write_reg(STV0910DefVal[i].reg, STV0910DefVal[i].val); + } + while (STV0910DefVal[i++].reg!=RSTV0910_TSTTSRS); + + /* finally (from ST example code) reset the LDPC decoder */ + if (err==ERROR_NONE) err=stv0910_write_reg(RSTV0910_TSTRES0, 0x80); + if (err==ERROR_NONE) err=stv0910_write_reg(RSTV0910_TSTRES0, 0x00); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_init(uint32_t sr1, uint32_t sr2) { +/* -------------------------------------------------------------------------------------------------- */ +/* demodulator search sequence is: */ +/* setup the carrier loop */ +/* set initial carrier offset CFRINIT for best guess carrier search */ +/* set manual mode for CFRINC to be used - make it small */ +/* setup the timing loop */ +/* set initial symbol rate SFRINIT */ +/* auto mode for symbol rate will be +/25% SFRUPRATIO and SFRLOWRATIO define this number. */ +/* SFRUP1:AUTO_GUP=1 for auto (and SFRLOW1:AUTO_GLOW=1) */ +/* write DMDISTATE to AER = 1 - blind search with best guess (SR and carrier unknown) */ +/* FLYWHEEL_CPT: when 0xf DVB-S2 is locked in DMDFLYW (also int stus bits */ +/* sr_top : the symbol rate to initialise the top demodulator to (0=disable) */ +/* sr_bottom: the symbol rate to initialise the bottom demodulator to (0=disable) */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + printf("Flow: STV0910 init\n"); + + /* first we stop the demodulators in case they are already running */ + if (err==ERROR_NONE) err=stv0910_write_reg(RSTV0910_P1_DMDISTATE, 0x1c); + if (err==ERROR_NONE) err=stv0910_write_reg(RSTV0910_P2_DMDISTATE, 0x1c); + + /* do the non demodulator specific stuff */ + if (err==ERROR_NONE) err=stv0910_init_regs(); + if (err==ERROR_NONE) err=stv0910_setup_clocks(); + + /* now we do the inits for each specific demodulator */ + if (sr1!=0) { + if (err==ERROR_NONE) err=stv0910_setup_equalisers(STV0910_DEMOD_TOP); + if (err==ERROR_NONE) err=stv0910_setup_carrier_loop(STV0910_DEMOD_TOP); + if (err==ERROR_NONE) err=stv0910_setup_timing_loop(STV0910_DEMOD_TOP, sr1); + } + + if (sr2!=0) { + if (err==ERROR_NONE) err=stv0910_setup_equalisers(STV0910_DEMOD_BOTTOM); + if (err==ERROR_NONE) err=stv0910_setup_carrier_loop(STV0910_DEMOD_BOTTOM); + if (err==ERROR_NONE) err=stv0910_setup_timing_loop(STV0910_DEMOD_BOTTOM, sr2); + } + + if (err!=ERROR_NONE) printf("ERROR: STV0910 init\n"); + + return err; +} + diff --git a/longmynd/stv0910.h b/longmynd/stv0910.h new file mode 100755 index 0000000..0b915b9 --- /dev/null +++ b/longmynd/stv0910.h @@ -0,0 +1,69 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV0910_H +#define STV0910_H + +#include + +#define DEMOD_HUNTING 0 +#define DEMOD_FOUND_HEADER 1 +#define DEMOD_S2 2 +#define DEMOD_S 3 + +#define STV0910_PLL_LOCK_TIMEOUT 100 + +#define STV0910_SCAN_BLIND_BEST_GUESS 0x15 + +#define STV0910_DEMOD_TOP 1 +#define STV0910_DEMOD_BOTTOM 2 + +#define STV0910_PUNCTURE_1_2 0x0d +#define STV0910_PUNCTURE_2_3 0x12 +#define STV0910_PUNCTURE_3_4 0x15 +#define STV0910_PUNCTURE_5_6 0x18 +#define STV0910_PUNCTURE_6_7 0x19 +#define STV0910_PUNCTURE_7_8 0x1a + +uint8_t stv0910_read_car_freq(uint8_t, int32_t*); +uint8_t stv0910_read_constellation(uint8_t, uint8_t*, uint8_t*); +uint8_t stv0910_read_sr(uint8_t demod, uint32_t*); +uint8_t stv0910_read_puncture_rate(uint8_t, uint8_t*); +uint8_t stv0910_read_power(uint8_t, uint8_t*, uint8_t*); +uint8_t stv0910_read_err_rate(uint8_t, uint32_t*); +uint8_t stv0910_read_ber(uint8_t, uint32_t*); +uint8_t stv0910_read_dvbs2_mer(uint8_t, uint32_t*); +uint8_t stv0910_read_errors_bch_uncorrected(uint8_t demod, bool *errors_bch_uncorrected); +uint8_t stv0910_read_errors_bch_count(uint8_t demod, uint32_t *errors_bch_count); +uint8_t stv0910_read_errors_ldpc_count(uint8_t demod, uint32_t *errors_ldpc_count); +uint8_t stv0910_read_mer(uint8_t, uint32_t*); +uint8_t stv0910_read_modcod_and_type(uint8_t, uint32_t*, bool*, bool*); +uint8_t stv0910_init(uint32_t, uint32_t); +uint8_t stv0910_init_regs(void); +uint8_t stv0910_setup_timing_loop(uint8_t, uint32_t); +uint8_t stv0910_setup_carrier_loop(uint8_t); +uint8_t stv0910_read_scan_state(uint8_t, uint8_t *); +uint8_t stv0910_start_scan(uint8_t); +uint8_t stv0910_setup_search_params(uint8_t); +uint8_t stv0910_setup_clocks(); + +#endif + diff --git a/longmynd/stv0910_regs.h b/longmynd/stv0910_regs.h new file mode 100755 index 0000000..e4f8493 --- /dev/null +++ b/longmynd/stv0910_regs.h @@ -0,0 +1,4790 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910_regs.h */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - the top level (main) and command line procesing */ +/* Copyright 2019 Heather Lomond */ +/* (c) 2013 Digital Devices GmbH Germany. All rights reserved */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* + * @DVB-S/DVB-S2 STMicroelectronics STV0900 register definitions + * Author Manfred Voelkel, August 2013 + * (c) 2013 Digital Devices GmbH Germany. All rights reserved + * + * ======================================================================= + * Registers Declaration (Internal ST, All Applications ) + * ------------------------- + * Each register (RSTV0910__XXXXX) is defined by its address (2 bytes). + * Each field (FSTV0910__XXXXX) is defined as follow: + * [register address -- 2bytes][field offset -- 4 bits][unused -- 3 bits] + * [field sign -- 1 bit][field mask -- 1byte] + * ======================================================================= + */ + +#ifndef STV0910_REGS_H +#define STV0910_REGS_H + +/* MID */ +#define RSTV0910_MID 0xf100 +#define FSTV0910_MCHIP_IDENT 0xf10040f0 +#define FSTV0910_MRELEASE 0xf100000f + +/* DID */ +#define RSTV0910_DID 0xf101 +#define FSTV0910_DEVICE_ID 0xf10100ff + +/* DACR1 */ +#define RSTV0910_DACR1 0xf113 +#define FSTV0910_DAC_MODE 0xf11350e0 +#define FSTV0910_DAC_VALUE1 0xf113000f + +/* DACR2 */ +#define RSTV0910_DACR2 0xf114 +#define FSTV0910_DAC_VALUE0 0xf11400ff + +/* PADCFG */ +#define RSTV0910_PADCFG 0xf11a +#define FSTV0910_AGCRF2_OPD 0xf11a3008 +#define FSTV0910_AGCRF2_XOR 0xf11a2004 +#define FSTV0910_AGCRF1_OPD 0xf11a1002 +#define FSTV0910_AGCRF1_XOR 0xf11a0001 + +/* OUTCFG2 */ +#define RSTV0910_OUTCFG2 0xf11b +#define FSTV0910_TS2_ERROR_XOR 0xf11b7080 +#define FSTV0910_TS2_DPN_XOR 0xf11b6040 +#define FSTV0910_TS2_STROUT_XOR 0xf11b5020 +#define FSTV0910_TS2_CLOCKOUT_XOR 0xf11b4010 +#define FSTV0910_TS1_ERROR_XOR 0xf11b3008 +#define FSTV0910_TS1_DPN_XOR 0xf11b2004 +#define FSTV0910_TS1_STROUT_XOR 0xf11b1002 +#define FSTV0910_TS1_CLOCKOUT_XOR 0xf11b0001 + +/* OUTCFG */ +#define RSTV0910_OUTCFG 0xf11c +#define FSTV0910_TS2_OUTSER_HZ 0xf11c5020 +#define FSTV0910_TS1_OUTSER_HZ 0xf11c4010 +#define FSTV0910_TS2_OUTPAR_HZ 0xf11c3008 +#define FSTV0910_TS1_OUTPAR_HZ 0xf11c2004 +#define FSTV0910_TS_SERDATA0 0xf11c1002 + +/* IRQSTATUS3 */ +#define RSTV0910_IRQSTATUS3 0xf120 +#define FSTV0910_SPLL_LOCK 0xf1205020 +#define FSTV0910_SSTREAM_LCK_1 0xf1204010 +#define FSTV0910_SSTREAM_LCK_2 0xf1203008 +#define FSTV0910_SDVBS1_PRF_2 0xf1201002 +#define FSTV0910_SDVBS1_PRF_1 0xf1200001 + +/* IRQSTATUS2 */ +#define RSTV0910_IRQSTATUS2 0xf121 +#define FSTV0910_SSPY_ENDSIM_1 0xf1217080 +#define FSTV0910_SSPY_ENDSIM_2 0xf1216040 +#define FSTV0910_SPKTDEL_ERROR_2 0xf1214010 +#define FSTV0910_SPKTDEL_LOCKB_2 0xf1213008 +#define FSTV0910_SPKTDEL_LOCK_2 0xf1212004 +#define FSTV0910_SPKTDEL_ERROR_1 0xf1211002 +#define FSTV0910_SPKTDEL_LOCKB_1 0xf1210001 + +/* IRQSTATUS1 */ +#define RSTV0910_IRQSTATUS1 0xf122 +#define FSTV0910_SPKTDEL_LOCK_1 0xf1227080 +#define FSTV0910_SFEC_LOCKB_2 0xf1226040 +#define FSTV0910_SFEC_LOCK_2 0xf1225020 +#define FSTV0910_SFEC_LOCKB_1 0xf1224010 +#define FSTV0910_SFEC_LOCK_1 0xf1223008 +#define FSTV0910_SDEMOD_LOCKB_2 0xf1222004 +#define FSTV0910_SDEMOD_LOCK_2 0xf1221002 +#define FSTV0910_SDEMOD_IRQ_2 0xf1220001 + +/* IRQSTATUS0 */ +#define RSTV0910_IRQSTATUS0 0xf123 +#define FSTV0910_SDEMOD_LOCKB_1 0xf1237080 +#define FSTV0910_SDEMOD_LOCK_1 0xf1236040 +#define FSTV0910_SDEMOD_IRQ_1 0xf1235020 +#define FSTV0910_SBCH_ERRFLAG 0xf1234010 +#define FSTV0910_SDISEQC2_IRQ 0xf1232004 +#define FSTV0910_SDISEQC1_IRQ 0xf1230001 + +/* IRQMASK3 */ +#define RSTV0910_IRQMASK3 0xf124 +#define FSTV0910_MPLL_LOCK 0xf1245020 +#define FSTV0910_MSTREAM_LCK_1 0xf1244010 +#define FSTV0910_MSTREAM_LCK_2 0xf1243008 +#define FSTV0910_MDVBS1_PRF_2 0xf1241002 +#define FSTV0910_MDVBS1_PRF_1 0xf1240001 + +/* IRQMASK2 */ +#define RSTV0910_IRQMASK2 0xf125 +#define FSTV0910_MSPY_ENDSIM_1 0xf1257080 +#define FSTV0910_MSPY_ENDSIM_2 0xf1256040 +#define FSTV0910_MPKTDEL_ERROR_2 0xf1254010 +#define FSTV0910_MPKTDEL_LOCKB_2 0xf1253008 +#define FSTV0910_MPKTDEL_LOCK_2 0xf1252004 +#define FSTV0910_MPKTDEL_ERROR_1 0xf1251002 +#define FSTV0910_MPKTDEL_LOCKB_1 0xf1250001 + +/* IRQMASK1 */ +#define RSTV0910_IRQMASK1 0xf126 +#define FSTV0910_MPKTDEL_LOCK_1 0xf1267080 +#define FSTV0910_MFEC_LOCKB_2 0xf1266040 +#define FSTV0910_MFEC_LOCK_2 0xf1265020 +#define FSTV0910_MFEC_LOCKB_1 0xf1264010 +#define FSTV0910_MFEC_LOCK_1 0xf1263008 +#define FSTV0910_MDEMOD_LOCKB_2 0xf1262004 +#define FSTV0910_MDEMOD_LOCK_2 0xf1261002 +#define FSTV0910_MDEMOD_IRQ_2 0xf1260001 + +/* IRQMASK0 */ +#define RSTV0910_IRQMASK0 0xf127 +#define FSTV0910_MDEMOD_LOCKB_1 0xf1277080 +#define FSTV0910_MDEMOD_LOCK_1 0xf1276040 +#define FSTV0910_MDEMOD_IRQ_1 0xf1275020 +#define FSTV0910_MBCH_ERRFLAG 0xf1274010 +#define FSTV0910_MDISEQC2_IRQ 0xf1272004 +#define FSTV0910_MDISEQC1_IRQ 0xf1270001 + +/* I2CCFG */ +#define RSTV0910_I2CCFG 0xf129 +#define FSTV0910_I2C_FASTMODE 0xf1293008 +#define FSTV0910_I2CADDR_INC 0xf1290003 + +/* P1_I2CRPT */ +#define RSTV0910_P1_I2CRPT 0xf12a +#define FSTV0910_P1_I2CT_ON 0xf12a7080 +#define FSTV0910_P1_ENARPT_LEVEL 0xf12a4070 +#define FSTV0910_P1_SCLT_DELAY 0xf12a3008 +#define FSTV0910_P1_STOP_ENABLE 0xf12a2004 +#define FSTV0910_P1_STOP_SDAT2SDA 0xf12a1002 + +/* P2_I2CRPT */ +#define RSTV0910_P2_I2CRPT 0xf12b +#define FSTV0910_P2_I2CT_ON 0xf12b7080 +#define FSTV0910_P2_ENARPT_LEVEL 0xf12b4070 +#define FSTV0910_P2_SCLT_DELAY 0xf12b3008 +#define FSTV0910_P2_STOP_ENABLE 0xf12b2004 +#define FSTV0910_P2_STOP_SDAT2SDA 0xf12b1002 + +/* GPIO0CFG */ +#define RSTV0910_GPIO0CFG 0xf140 +#define FSTV0910_GPIO0_OPD 0xf1407080 +#define FSTV0910_GPIO0_CONFIG 0xf140107e +#define FSTV0910_GPIO0_XOR 0xf1400001 + +/* GPIO1CFG */ +#define RSTV0910_GPIO1CFG 0xf141 +#define FSTV0910_GPIO1_OPD 0xf1417080 +#define FSTV0910_GPIO1_CONFIG 0xf141107e +#define FSTV0910_GPIO1_XOR 0xf1410001 + +/* GPIO2CFG */ +#define RSTV0910_GPIO2CFG 0xf142 +#define FSTV0910_GPIO2_OPD 0xf1427080 +#define FSTV0910_GPIO2_CONFIG 0xf142107e +#define FSTV0910_GPIO2_XOR 0xf1420001 + +/* GPIO3CFG */ +#define RSTV0910_GPIO3CFG 0xf143 +#define FSTV0910_GPIO3_OPD 0xf1437080 +#define FSTV0910_GPIO3_CONFIG 0xf143107e +#define FSTV0910_GPIO3_XOR 0xf1430001 + +/* GPIO4CFG */ +#define RSTV0910_GPIO4CFG 0xf144 +#define FSTV0910_GPIO4_OPD 0xf1447080 +#define FSTV0910_GPIO4_CONFIG 0xf144107e +#define FSTV0910_GPIO4_XOR 0xf1440001 + +/* GPIO5CFG */ +#define RSTV0910_GPIO5CFG 0xf145 +#define FSTV0910_GPIO5_OPD 0xf1457080 +#define FSTV0910_GPIO5_CONFIG 0xf145107e +#define FSTV0910_GPIO5_XOR 0xf1450001 + +/* GPIO6CFG */ +#define RSTV0910_GPIO6CFG 0xf146 +#define FSTV0910_GPIO6_OPD 0xf1467080 +#define FSTV0910_GPIO6_CONFIG 0xf146107e +#define FSTV0910_GPIO6_XOR 0xf1460001 + +/* GPIO7CFG */ +#define RSTV0910_GPIO7CFG 0xf147 +#define FSTV0910_GPIO7_OPD 0xf1477080 +#define FSTV0910_GPIO7_CONFIG 0xf147107e +#define FSTV0910_GPIO7_XOR 0xf1470001 + +/* GPIO8CFG */ +#define RSTV0910_GPIO8CFG 0xf148 +#define FSTV0910_GPIO8_OPD 0xf1487080 +#define FSTV0910_GPIO8_CONFIG 0xf148107e +#define FSTV0910_GPIO8_XOR 0xf1480001 + +/* GPIO9CFG */ +#define RSTV0910_GPIO9CFG 0xf149 +#define FSTV0910_GPIO9_OPD 0xf1497080 +#define FSTV0910_GPIO9_CONFIG 0xf149107e +#define FSTV0910_GPIO9_XOR 0xf1490001 + +/* GPIO10CFG */ +#define RSTV0910_GPIO10CFG 0xf14a +#define FSTV0910_GPIO10_OPD 0xf14a7080 +#define FSTV0910_GPIO10_CONFIG 0xf14a107e +#define FSTV0910_GPIO10_XOR 0xf14a0001 + +/* GPIO11CFG */ +#define RSTV0910_GPIO11CFG 0xf14b +#define FSTV0910_GPIO11_OPD 0xf14b7080 +#define FSTV0910_GPIO11_CONFIG 0xf14b107e +#define FSTV0910_GPIO11_XOR 0xf14b0001 + +/* GPIO12CFG */ +#define RSTV0910_GPIO12CFG 0xf14c +#define FSTV0910_GPIO12_OPD 0xf14c7080 +#define FSTV0910_GPIO12_CONFIG 0xf14c107e +#define FSTV0910_GPIO12_XOR 0xf14c0001 + +/* GPIO13CFG */ +#define RSTV0910_GPIO13CFG 0xf14d +#define FSTV0910_GPIO13_OPD 0xf14d7080 +#define FSTV0910_GPIO13_CONFIG 0xf14d107e +#define FSTV0910_GPIO13_XOR 0xf14d0001 + +/* GPIO14CFG */ +#define RSTV0910_GPIO14CFG 0xf14e +#define FSTV0910_GPIO14_OPD 0xf14e7080 +#define FSTV0910_GPIO14_CONFIG 0xf14e107e +#define FSTV0910_GPIO14_XOR 0xf14e0001 + +/* GPIO15CFG */ +#define RSTV0910_GPIO15CFG 0xf14f +#define FSTV0910_GPIO15_OPD 0xf14f7080 +#define FSTV0910_GPIO15_CONFIG 0xf14f107e +#define FSTV0910_GPIO15_XOR 0xf14f0001 + +/* GPIO16CFG */ +#define RSTV0910_GPIO16CFG 0xf150 +#define FSTV0910_GPIO16_OPD 0xf1507080 +#define FSTV0910_GPIO16_CONFIG 0xf150107e +#define FSTV0910_GPIO16_XOR 0xf1500001 + +/* GPIO17CFG */ +#define RSTV0910_GPIO17CFG 0xf151 +#define FSTV0910_GPIO17_OPD 0xf1517080 +#define FSTV0910_GPIO17_CONFIG 0xf151107e +#define FSTV0910_GPIO17_XOR 0xf1510001 + +/* GPIO18CFG */ +#define RSTV0910_GPIO18CFG 0xf152 +#define FSTV0910_GPIO18_OPD 0xf1527080 +#define FSTV0910_GPIO18_CONFIG 0xf152107e +#define FSTV0910_GPIO18_XOR 0xf1520001 + +/* GPIO19CFG */ +#define RSTV0910_GPIO19CFG 0xf153 +#define FSTV0910_GPIO19_OPD 0xf1537080 +#define FSTV0910_GPIO19_CONFIG 0xf153107e +#define FSTV0910_GPIO19_XOR 0xf1530001 + +/* GPIO20CFG */ +#define RSTV0910_GPIO20CFG 0xf154 +#define FSTV0910_GPIO20_OPD 0xf1547080 +#define FSTV0910_GPIO20_CONFIG 0xf154107e +#define FSTV0910_GPIO20_XOR 0xf1540001 + +/* GPIO21CFG */ +#define RSTV0910_GPIO21CFG 0xf155 +#define FSTV0910_GPIO21_OPD 0xf1557080 +#define FSTV0910_GPIO21_CONFIG 0xf155107e +#define FSTV0910_GPIO21_XOR 0xf1550001 + +/* GPIO22CFG */ +#define RSTV0910_GPIO22CFG 0xf156 +#define FSTV0910_GPIO22_OPD 0xf1567080 +#define FSTV0910_GPIO22_CONFIG 0xf156107e +#define FSTV0910_GPIO22_XOR 0xf1560001 + +/* STRSTATUS1 */ +#define RSTV0910_STRSTATUS1 0xf16a +#define FSTV0910_STRSTATUS_SEL2 0xf16a40f0 +#define FSTV0910_STRSTATUS_SEL1 0xf16a000f + +/* STRSTATUS2 */ +#define RSTV0910_STRSTATUS2 0xf16b +#define FSTV0910_STRSTATUS_SEL4 0xf16b40f0 +#define FSTV0910_STRSTATUS_SEL3 0xf16b000f + +/* STRSTATUS3 */ +#define RSTV0910_STRSTATUS3 0xf16c +#define FSTV0910_STRSTATUS_SEL6 0xf16c40f0 +#define FSTV0910_STRSTATUS_SEL5 0xf16c000f + +/* FSKTFC2 */ +#define RSTV0910_FSKTFC2 0xf170 +#define FSTV0910_FSKT_KMOD 0xf17020fc +#define FSTV0910_FSKT_CAR2 0xf1700003 + +/* FSKTFC1 */ +#define RSTV0910_FSKTFC1 0xf171 +#define FSTV0910_FSKT_CAR1 0xf17100ff + +/* FSKTFC0 */ +#define RSTV0910_FSKTFC0 0xf172 +#define FSTV0910_FSKT_CAR0 0xf17200ff + +/* FSKTDELTAF1 */ +#define RSTV0910_FSKTDELTAF1 0xf173 +#define FSTV0910_FSKT_DELTAF1 0xf173000f + +/* FSKTDELTAF0 */ +#define RSTV0910_FSKTDELTAF0 0xf174 +#define FSTV0910_FSKT_DELTAF0 0xf17400ff + +/* FSKTCTRL */ +#define RSTV0910_FSKTCTRL 0xf175 +#define FSTV0910_FSKT_PINSEL 0xf1757080 +#define FSTV0910_FSKT_EN_SGN 0xf1756040 +#define FSTV0910_FSKT_MOD_SGN 0xf1755020 +#define FSTV0910_FSKT_MOD_EN 0xf175201c +#define FSTV0910_FSKT_DACMODE 0xf1750003 + +/* FSKRFC2 */ +#define RSTV0910_FSKRFC2 0xf176 +#define FSTV0910_FSKR_DETSGN 0xf1766040 +#define FSTV0910_FSKR_OUTSGN 0xf1765020 +#define FSTV0910_FSKR_KAGC 0xf176201c +#define FSTV0910_FSKR_CAR2 0xf1760003 + +/* FSKRFC1 */ +#define RSTV0910_FSKRFC1 0xf177 +#define FSTV0910_FSKR_CAR1 0xf17700ff + +/* FSKRFC0 */ +#define RSTV0910_FSKRFC0 0xf178 +#define FSTV0910_FSKR_CAR0 0xf17800ff + +/* FSKRK1 */ +#define RSTV0910_FSKRK1 0xf179 +#define FSTV0910_FSKR_K1_EXP 0xf17950e0 +#define FSTV0910_FSKR_K1_MANT 0xf179001f + +/* FSKRK2 */ +#define RSTV0910_FSKRK2 0xf17a +#define FSTV0910_FSKR_K2_EXP 0xf17a50e0 +#define FSTV0910_FSKR_K2_MANT 0xf17a001f + +/* FSKRAGCR */ +#define RSTV0910_FSKRAGCR 0xf17b +#define FSTV0910_FSKR_OUTCTL 0xf17b60c0 +#define FSTV0910_FSKR_AGC_REF 0xf17b003f + +/* FSKRAGC */ +#define RSTV0910_FSKRAGC 0xf17c +#define FSTV0910_FSKR_AGC_ACCU 0xf17c00ff + +/* FSKRALPHA */ +#define RSTV0910_FSKRALPHA 0xf17d +#define FSTV0910_FSKR_ALPHA_EXP 0xf17d201c +#define FSTV0910_FSKR_ALPHA_M 0xf17d0003 + +/* FSKRPLTH1 */ +#define RSTV0910_FSKRPLTH1 0xf17e +#define FSTV0910_FSKR_BETA 0xf17e40f0 +#define FSTV0910_FSKR_PLL_TRESH1 0xf17e000f + +/* FSKRPLTH0 */ +#define RSTV0910_FSKRPLTH0 0xf17f +#define FSTV0910_FSKR_PLL_TRESH0 0xf17f00ff + +/* FSKRDF1 */ +#define RSTV0910_FSKRDF1 0xf180 +#define FSTV0910_FSKR_OUT 0xf1807080 +#define FSTV0910_FSKR_STATE 0xf1805060 +#define FSTV0910_FSKR_DELTAF1 0xf180001f + +/* FSKRDF0 */ +#define RSTV0910_FSKRDF0 0xf181 +#define FSTV0910_FSKR_DELTAF0 0xf18100ff + +/* FSKRSTEPP */ +#define RSTV0910_FSKRSTEPP 0xf182 +#define FSTV0910_FSKR_STEP_PLUS 0xf18200ff + +/* FSKRSTEPM */ +#define RSTV0910_FSKRSTEPM 0xf183 +#define FSTV0910_FSKR_STEP_MINUS 0xf18300ff + +/* FSKRDET1 */ +#define RSTV0910_FSKRDET1 0xf184 +#define FSTV0910_FSKR_DETECT 0xf1847080 +#define FSTV0910_FSKR_CARDET_ACCU1 0xf184000f + +/* FSKRDET0 */ +#define RSTV0910_FSKRDET0 0xf185 +#define FSTV0910_FSKR_CARDET_ACCU0 0xf18500ff + +/* FSKRDTH1 */ +#define RSTV0910_FSKRDTH1 0xf186 +#define FSTV0910_FSKR_CARLOSS_THRESH1 0xf18640f0 +#define FSTV0910_FSKR_CARDET_THRESH1 0xf186000f + +/* FSKRDTH0 */ +#define RSTV0910_FSKRDTH0 0xf187 +#define FSTV0910_FSKR_CARDET_THRESH0 0xf18700ff + +/* FSKRLOSS */ +#define RSTV0910_FSKRLOSS 0xf188 +#define FSTV0910_FSKR_CARLOSS_THRESH0 0xf18800ff + +/* NCOARSE */ +#define RSTV0910_NCOARSE 0xf1b3 +#define FSTV0910_CP 0xf1b330f8 +#define FSTV0910_IDF 0xf1b30007 + +/* NCOARSE1 */ +#define RSTV0910_NCOARSE1 0xf1b4 +#define FSTV0910_N_DIV 0xf1b400ff + +/* NCOARSE2 */ +#define RSTV0910_NCOARSE2 0xf1b5 +#define FSTV0910_ODF 0xf1b5003f + +/* SYNTCTRL */ +#define RSTV0910_SYNTCTRL 0xf1b6 +#define FSTV0910_STANDBY 0xf1b67080 +#define FSTV0910_BYPASSPLLCORE 0xf1b66040 +#define FSTV0910_STOP_PLL 0xf1b63008 +#define FSTV0910_OSCI_E 0xf1b61002 + +/* FILTCTRL */ +#define RSTV0910_FILTCTRL 0xf1b7 +#define FSTV0910_INV_CLKFSK 0xf1b71002 +#define FSTV0910_BYPASS_APPLI 0xf1b70001 + +/* PLLSTAT */ +#define RSTV0910_PLLSTAT 0xf1b8 +#define FSTV0910_PLLLOCK 0xf1b80001 + +/* STOPCLK1 */ +#define RSTV0910_STOPCLK1 0xf1c2 +#define FSTV0910_INV_CLKADCI2 0xf1c22004 +#define FSTV0910_INV_CLKADCI1 0xf1c20001 + +/* STOPCLK2 */ +#define RSTV0910_STOPCLK2 0xf1c3 +#define FSTV0910_STOP_DVBS2FEC2 0xf1c35020 +#define FSTV0910_STOP_DVBS2FEC 0xf1c34010 +#define FSTV0910_STOP_DVBS1FEC2 0xf1c33008 +#define FSTV0910_STOP_DVBS1FEC 0xf1c32004 +#define FSTV0910_STOP_DEMOD2 0xf1c31002 +#define FSTV0910_STOP_DEMOD 0xf1c30001 + +/* PREGCTL */ +#define RSTV0910_PREGCTL 0xf1c8 +#define FSTV0910_REG3V3TO2V5_POFF 0xf1c87080 + +/* TSTTNR0 */ +#define RSTV0910_TSTTNR0 0xf1df +#define FSTV0910_FSK_PON 0xf1df2004 + +/* TSTTNR1 */ +#define RSTV0910_TSTTNR1 0xf1e0 +#define FSTV0910_ADC1_PON 0xf1e01002 + +/* TSTTNR2 */ +#define RSTV0910_TSTTNR2 0xf1e1 +#define FSTV0910_I2C_DISEQC_PON 0xf1e15020 +#define FSTV0910_DISEQC_CLKDIV 0xf1e1000f + +/* TSTTNR3 */ +#define RSTV0910_TSTTNR3 0xf1e2 +#define FSTV0910_ADC2_PON 0xf1e21002 + +/* P2_IQCONST */ +#define RSTV0910_P2_IQCONST 0xf200 +#define FSTV0910_P2_CONSTEL_SELECT 0xf2005060 +#define FSTV0910_P2_IQSYMB_SEL 0xf200001f + +/* P2_NOSCFG */ +#define RSTV0910_P2_NOSCFG 0xf201 +#define FSTV0910_P2_DUMMYPL_NOSDATA 0xf2015020 +#define FSTV0910_P2_NOSPLH_BETA 0xf2013018 +#define FSTV0910_P2_NOSDATA_BETA 0xf2010007 + +/* P2_ISYMB */ +#define RSTV0910_P2_ISYMB 0xf202 +#define FSTV0910_P2_I_SYMBOL 0xf20201ff + +/* P2_QSYMB */ +#define RSTV0910_P2_QSYMB 0xf203 +#define FSTV0910_P2_Q_SYMBOL 0xf20301ff + +/* P2_AGC1CFG */ +#define RSTV0910_P2_AGC1CFG 0xf204 +#define FSTV0910_P2_DC_FROZEN 0xf2047080 +#define FSTV0910_P2_DC_CORRECT 0xf2046040 +#define FSTV0910_P2_AMM_FROZEN 0xf2045020 +#define FSTV0910_P2_AMM_CORRECT 0xf2044010 +#define FSTV0910_P2_QUAD_FROZEN 0xf2043008 +#define FSTV0910_P2_QUAD_CORRECT 0xf2042004 + +/* P2_AGC1CN */ +#define RSTV0910_P2_AGC1CN 0xf206 +#define FSTV0910_P2_AGC1_LOCKED 0xf2067080 +#define FSTV0910_P2_AGC1_MINPOWER 0xf2064010 +#define FSTV0910_P2_AGCOUT_FAST 0xf2063008 +#define FSTV0910_P2_AGCIQ_BETA 0xf2060007 + +/* P2_AGC1REF */ +#define RSTV0910_P2_AGC1REF 0xf207 +#define FSTV0910_P2_AGCIQ_REF 0xf20700ff + +/* P2_IDCCOMP */ +#define RSTV0910_P2_IDCCOMP 0xf208 +#define FSTV0910_P2_IAVERAGE_ADJ 0xf20801ff + +/* P2_QDCCOMP */ +#define RSTV0910_P2_QDCCOMP 0xf209 +#define FSTV0910_P2_QAVERAGE_ADJ 0xf20901ff + +/* P2_POWERI */ +#define RSTV0910_P2_POWERI 0xf20a +#define FSTV0910_P2_POWER_I 0xf20a00ff + +/* P2_POWERQ */ +#define RSTV0910_P2_POWERQ 0xf20b +#define FSTV0910_P2_POWER_Q 0xf20b00ff + +/* P2_AGC1AMM */ +#define RSTV0910_P2_AGC1AMM 0xf20c +#define FSTV0910_P2_AMM_VALUE 0xf20c00ff + +/* P2_AGC1QUAD */ +#define RSTV0910_P2_AGC1QUAD 0xf20d +#define FSTV0910_P2_QUAD_VALUE 0xf20d01ff + +/* P2_AGCIQIN1 */ +#define RSTV0910_P2_AGCIQIN1 0xf20e +#define FSTV0910_P2_AGCIQ_VALUE1 0xf20e00ff + +/* P2_AGCIQIN0 */ +#define RSTV0910_P2_AGCIQIN0 0xf20f +#define FSTV0910_P2_AGCIQ_VALUE0 0xf20f00ff + +/* P2_DEMOD */ +#define RSTV0910_P2_DEMOD 0xf210 +#define FSTV0910_P2_MANUALS2_ROLLOFF 0xf2107080 +#define FSTV0910_P2_SPECINV_CONTROL 0xf2104030 +#define FSTV0910_P2_MANUALSX_ROLLOFF 0xf2102004 +#define FSTV0910_P2_ROLLOFF_CONTROL 0xf2100003 + +/* P2_DMDMODCOD */ +#define RSTV0910_P2_DMDMODCOD 0xf211 +#define FSTV0910_P2_MANUAL_MODCOD 0xf2117080 +#define FSTV0910_P2_DEMOD_MODCOD 0xf211207c +#define FSTV0910_P2_DEMOD_TYPE 0xf2110003 + +/* P2_DSTATUS */ +#define RSTV0910_P2_DSTATUS 0xf212 +#define FSTV0910_P2_CAR_LOCK 0xf2127080 +#define FSTV0910_P2_TMGLOCK_QUALITY 0xf2125060 +#define FSTV0910_P2_LOCK_DEFINITIF 0xf2123008 +#define FSTV0910_P2_OVADC_DETECT 0xf2120001 + +/* P2_DSTATUS2 */ +#define RSTV0910_P2_DSTATUS2 0xf213 +#define FSTV0910_P2_DEMOD_DELOCK 0xf2137080 +#define FSTV0910_P2_MODCODRQ_SYNCTAG 0xf2135020 +#define FSTV0910_P2_POLYPH_SATEVENT 0xf2134010 +#define FSTV0910_P2_AGC1_NOSIGNALACK 0xf2133008 +#define FSTV0910_P2_AGC2_OVERFLOW 0xf2132004 +#define FSTV0910_P2_CFR_OVERFLOW 0xf2131002 +#define FSTV0910_P2_GAMMA_OVERUNDER 0xf2130001 + +/* P2_DMDCFGMD */ +#define RSTV0910_P2_DMDCFGMD 0xf214 +#define FSTV0910_P2_DVBS2_ENABLE 0xf2147080 +#define FSTV0910_P2_DVBS1_ENABLE 0xf2146040 +#define FSTV0910_P2_SCAN_ENABLE 0xf2144010 +#define FSTV0910_P2_CFR_AUTOSCAN 0xf2143008 +#define FSTV0910_P2_TUN_RNG 0xf2140003 + +/* P2_DMDCFG2 */ +#define RSTV0910_P2_DMDCFG2 0xf215 +#define FSTV0910_P2_S1S2_SEQUENTIAL 0xf2156040 +#define FSTV0910_P2_INFINITE_RELOCK 0xf2154010 + +/* P2_DMDISTATE */ +#define RSTV0910_P2_DMDISTATE 0xf216 +#define FSTV0910_P2_I2C_NORESETDMODE 0xf2167080 +#define FSTV0910_P2_I2C_DEMOD_MODE 0xf216001f + +/* P2_DMDT0M */ +#define RSTV0910_P2_DMDT0M 0xf217 +#define FSTV0910_P2_DMDT0_MIN 0xf21700ff + +/* P2_DMDSTATE */ +#define RSTV0910_P2_DMDSTATE 0xf21b +#define FSTV0910_P2_HEADER_MODE 0xf21b5060 + +/* P2_DMDFLYW */ +#define RSTV0910_P2_DMDFLYW 0xf21c +#define FSTV0910_P2_I2C_IRQVAL 0xf21c40f0 +#define FSTV0910_P2_FLYWHEEL_CPT 0xf21c000f + +/* P2_DSTATUS3 */ +#define RSTV0910_P2_DSTATUS3 0xf21d +#define FSTV0910_P2_CFR_ZIGZAG 0xf21d7080 +#define FSTV0910_P2_DEMOD_CFGMODE 0xf21d5060 +#define FSTV0910_P2_GAMMA_LOWBAUDRATE 0xf21d4010 + +/* P2_DMDCFG3 */ +#define RSTV0910_P2_DMDCFG3 0xf21e +#define FSTV0910_P2_NOSTOP_FIFOFULL 0xf21e3008 + +/* P2_DMDCFG4 */ +#define RSTV0910_P2_DMDCFG4 0xf21f +#define FSTV0910_P2_DIS_VITLOCK 0xf21f7080 +#define FSTV0910_P2_DIS_CLKENABLE 0xf21f2004 + +/* P2_CORRELMANT */ +#define RSTV0910_P2_CORRELMANT 0xf220 +#define FSTV0910_P2_CORREL_MANT 0xf22000ff + +/* P2_CORRELABS */ +#define RSTV0910_P2_CORRELABS 0xf221 +#define FSTV0910_P2_CORREL_ABS 0xf22100ff + +/* P2_CORRELEXP */ +#define RSTV0910_P2_CORRELEXP 0xf222 +#define FSTV0910_P2_CORREL_ABSEXP 0xf22240f0 +#define FSTV0910_P2_CORREL_EXP 0xf222000f + +/* P2_PLHMODCOD */ +#define RSTV0910_P2_PLHMODCOD 0xf224 +#define FSTV0910_P2_SPECINV_DEMOD 0xf2247080 +#define FSTV0910_P2_PLH_MODCOD 0xf224207c +#define FSTV0910_P2_PLH_TYPE 0xf2240003 + +/* P2_DMDREG */ +#define RSTV0910_P2_DMDREG 0xf225 +#define FSTV0910_P2_DECIM_PLFRAMES 0xf2250001 + +/* P2_AGCNADJ */ +#define RSTV0910_P2_AGCNADJ 0xf226 +#define FSTV0910_P2_RADJOFF_AGC2 0xf2267080 +#define FSTV0910_P2_RADJOFF_AGC1 0xf2266040 +#define FSTV0910_P2_AGC_NADJ 0xf226013f + +/* P2_AGCKS */ +#define RSTV0910_P2_AGCKS 0xf227 +#define FSTV0910_P2_RSADJ_MANUALCFG 0xf2277080 +#define FSTV0910_P2_RSADJ_CCMMODE 0xf2276040 +#define FSTV0910_P2_RADJ_SPSK 0xf227013f + +/* P2_AGCKQ */ +#define RSTV0910_P2_AGCKQ 0xf228 +#define FSTV0910_P2_RADJON_DVBS1 0xf2286040 +#define FSTV0910_P2_RADJ_QPSK 0xf228013f + +/* P2_AGCK8 */ +#define RSTV0910_P2_AGCK8 0xf229 +#define FSTV0910_P2_RADJ_8PSK 0xf229013f + +/* P2_AGCK16 */ +#define RSTV0910_P2_AGCK16 0xf22a +#define FSTV0910_P2_R2ADJOFF_16APSK 0xf22a6040 +#define FSTV0910_P2_R1ADJOFF_16APSK 0xf22a5020 +#define FSTV0910_P2_RADJ_16APSK 0xf22a011f + +/* P2_AGCK32 */ +#define RSTV0910_P2_AGCK32 0xf22b +#define FSTV0910_P2_R3ADJOFF_32APSK 0xf22b7080 +#define FSTV0910_P2_R2ADJOFF_32APSK 0xf22b6040 +#define FSTV0910_P2_R1ADJOFF_32APSK 0xf22b5020 +#define FSTV0910_P2_RADJ_32APSK 0xf22b011f + +/* P2_AGC2O */ +#define RSTV0910_P2_AGC2O 0xf22c +#define FSTV0910_P2_CSTENV_MODE 0xf22c60c0 +#define FSTV0910_P2_AGC2_COEF 0xf22c0007 + +/* P2_AGC2REF */ +#define RSTV0910_P2_AGC2REF 0xf22d +#define FSTV0910_P2_AGC2_REF 0xf22d00ff + +/* P2_AGC1ADJ */ +#define RSTV0910_P2_AGC1ADJ 0xf22e +#define FSTV0910_P2_AGC1_ADJUSTED 0xf22e007f + +/* P2_AGCRSADJ */ +#define RSTV0910_P2_AGCRSADJ 0xf22f +#define FSTV0910_P2_RS_ADJUSTED 0xf22f007f + +/* P2_AGCRQADJ */ +#define RSTV0910_P2_AGCRQADJ 0xf230 +#define FSTV0910_P2_RQ_ADJUSTED 0xf230007f + +/* P2_AGCR8ADJ */ +#define RSTV0910_P2_AGCR8ADJ 0xf231 +#define FSTV0910_P2_R8_ADJUSTED 0xf231007f + +/* P2_AGCR1ADJ */ +#define RSTV0910_P2_AGCR1ADJ 0xf232 +#define FSTV0910_P2_R1_ADJUSTED 0xf232007f + +/* P2_AGCR2ADJ */ +#define RSTV0910_P2_AGCR2ADJ 0xf233 +#define FSTV0910_P2_R2_ADJUSTED 0xf233007f + +/* P2_AGCR3ADJ */ +#define RSTV0910_P2_AGCR3ADJ 0xf234 +#define FSTV0910_P2_R3_ADJUSTED 0xf234007f + +/* P2_AGCREFADJ */ +#define RSTV0910_P2_AGCREFADJ 0xf235 +#define FSTV0910_P2_AGC2REF_ADJUSTED 0xf235007f + +/* P2_AGC2I1 */ +#define RSTV0910_P2_AGC2I1 0xf236 +#define FSTV0910_P2_AGC2_INTEGRATOR1 0xf23600ff + +/* P2_AGC2I0 */ +#define RSTV0910_P2_AGC2I0 0xf237 +#define FSTV0910_P2_AGC2_INTEGRATOR0 0xf23700ff + +/* P2_CARCFG */ +#define RSTV0910_P2_CARCFG 0xf238 +#define FSTV0910_P2_ROTAON 0xf2382004 +#define FSTV0910_P2_PH_DET_ALGO 0xf2380003 + +/* P2_ACLC */ +#define RSTV0910_P2_ACLC 0xf239 +#define FSTV0910_P2_CAR_ALPHA_MANT 0xf2394030 +#define FSTV0910_P2_CAR_ALPHA_EXP 0xf239000f + +/* P2_BCLC */ +#define RSTV0910_P2_BCLC 0xf23a +#define FSTV0910_P2_CAR_BETA_MANT 0xf23a4030 +#define FSTV0910_P2_CAR_BETA_EXP 0xf23a000f + +/* P2_ACLCS2 */ +#define RSTV0910_P2_ACLCS2 0xf23b +#define FSTV0910_P2_CARS2_APLHA_MANTISSE 0xf23b4030 +#define FSTV0910_P2_CARS2_ALPHA_EXP 0xf23b000f + +/* P2_BCLCS2 */ +#define RSTV0910_P2_BCLCS2 0xf23c +#define FSTV0910_P2_CARS2_BETA_MANTISSE 0xf23c4030 +#define FSTV0910_P2_CARS2_BETA_EXP 0xf23c000f + +/* P2_CARFREQ */ +#define RSTV0910_P2_CARFREQ 0xf23d +#define FSTV0910_P2_KC_COARSE_EXP 0xf23d40f0 +#define FSTV0910_P2_BETA_FREQ 0xf23d000f + +/* P2_CARHDR */ +#define RSTV0910_P2_CARHDR 0xf23e +#define FSTV0910_P2_K_FREQ_HDR 0xf23e00ff + +/* P2_LDT */ +#define RSTV0910_P2_LDT 0xf23f +#define FSTV0910_P2_CARLOCK_THRES 0xf23f01ff + +/* P2_LDT2 */ +#define RSTV0910_P2_LDT2 0xf240 +#define FSTV0910_P2_CARLOCK_THRES2 0xf24001ff + +/* P2_CFRICFG */ +#define RSTV0910_P2_CFRICFG 0xf241 +#define FSTV0910_P2_NEG_CFRSTEP 0xf2410001 + +/* P2_CFRUP1 */ +#define RSTV0910_P2_CFRUP1 0xf242 +#define FSTV0910_P2_CFR_UP1 0xf24201ff + +/* P2_CFRUP0 */ +#define RSTV0910_P2_CFRUP0 0xf243 +#define FSTV0910_P2_CFR_UP0 0xf24300ff + +/* P2_CFRIBASE1 */ +#define RSTV0910_P2_CFRIBASE1 0xf244 +#define FSTV0910_P2_CFRINIT_BASE1 0xf24400ff + +/* P2_CFRIBASE0 */ +#define RSTV0910_P2_CFRIBASE0 0xf245 +#define FSTV0910_P2_CFRINIT_BASE0 0xf24500ff + +/* P2_CFRLOW1 */ +#define RSTV0910_P2_CFRLOW1 0xf246 +#define FSTV0910_P2_CFR_LOW1 0xf24601ff + +/* P2_CFRLOW0 */ +#define RSTV0910_P2_CFRLOW0 0xf247 +#define FSTV0910_P2_CFR_LOW0 0xf24700ff + +/* P2_CFRINIT1 */ +#define RSTV0910_P2_CFRINIT1 0xf248 +#define FSTV0910_P2_CFR_INIT1 0xf24801ff + +/* P2_CFRINIT0 */ +#define RSTV0910_P2_CFRINIT0 0xf249 +#define FSTV0910_P2_CFR_INIT0 0xf24900ff + +/* P2_CFRINC1 */ +#define RSTV0910_P2_CFRINC1 0xf24a +#define FSTV0910_P2_MANUAL_CFRINC 0xf24a7080 +#define FSTV0910_P2_CFR_INC1 0xf24a003f + +/* P2_CFRINC0 */ +#define RSTV0910_P2_CFRINC0 0xf24b +#define FSTV0910_P2_CFR_INC0 0xf24b00ff + +/* P2_CFR2 */ +#define RSTV0910_P2_CFR2 0xf24c +#define FSTV0910_P2_CAR_FREQ2 0xf24c01ff + +/* P2_CFR1 */ +#define RSTV0910_P2_CFR1 0xf24d +#define FSTV0910_P2_CAR_FREQ1 0xf24d00ff + +/* P2_CFR0 */ +#define RSTV0910_P2_CFR0 0xf24e +#define FSTV0910_P2_CAR_FREQ0 0xf24e00ff + +/* P2_LDI */ +#define RSTV0910_P2_LDI 0xf24f +#define FSTV0910_P2_LOCK_DET_INTEGR 0xf24f01ff + +/* P2_TMGCFG */ +#define RSTV0910_P2_TMGCFG 0xf250 +#define FSTV0910_P2_TMGLOCK_BETA 0xf25060c0 +#define FSTV0910_P2_DO_TIMING_CORR 0xf2504010 +#define FSTV0910_P2_TMG_MINFREQ 0xf2500003 + +/* P2_RTC */ +#define RSTV0910_P2_RTC 0xf251 +#define FSTV0910_P2_TMGALPHA_EXP 0xf25140f0 +#define FSTV0910_P2_TMGBETA_EXP 0xf251000f + +/* P2_RTCS2 */ +#define RSTV0910_P2_RTCS2 0xf252 +#define FSTV0910_P2_TMGALPHAS2_EXP 0xf25240f0 +#define FSTV0910_P2_TMGBETAS2_EXP 0xf252000f + +/* P2_TMGTHRISE */ +#define RSTV0910_P2_TMGTHRISE 0xf253 +#define FSTV0910_P2_TMGLOCK_THRISE 0xf25300ff + +/* P2_TMGTHFALL */ +#define RSTV0910_P2_TMGTHFALL 0xf254 +#define FSTV0910_P2_TMGLOCK_THFALL 0xf25400ff + +/* P2_SFRUPRATIO */ +#define RSTV0910_P2_SFRUPRATIO 0xf255 +#define FSTV0910_P2_SFR_UPRATIO 0xf25500ff + +/* P2_SFRLOWRATIO */ +#define RSTV0910_P2_SFRLOWRATIO 0xf256 +#define FSTV0910_P2_SFR_LOWRATIO 0xf25600ff + +/* P2_KTTMG */ +#define RSTV0910_P2_KTTMG 0xf257 +#define FSTV0910_P2_KT_TMG_EXP 0xf25740f0 + +/* P2_KREFTMG */ +#define RSTV0910_P2_KREFTMG 0xf258 +#define FSTV0910_P2_KREF_TMG 0xf25800ff + +/* P2_SFRSTEP */ +#define RSTV0910_P2_SFRSTEP 0xf259 +#define FSTV0910_P2_SFR_SCANSTEP 0xf25940f0 +#define FSTV0910_P2_SFR_CENTERSTEP 0xf259000f + +/* P2_TMGCFG2 */ +#define RSTV0910_P2_TMGCFG2 0xf25a +#define FSTV0910_P2_DIS_AUTOSAMP 0xf25a3008 +#define FSTV0910_P2_SFRRATIO_FINE 0xf25a0001 + +/* P2_KREFTMG2 */ +#define RSTV0910_P2_KREFTMG2 0xf25b +#define FSTV0910_P2_KREF_TMG2 0xf25b00ff + +/* P2_TMGCFG3 */ +#define RSTV0910_P2_TMGCFG3 0xf25d +#define FSTV0910_P2_CONT_TMGCENTER 0xf25d3008 +#define FSTV0910_P2_AUTO_GUP 0xf25d2004 +#define FSTV0910_P2_AUTO_GLOW 0xf25d1002 + +/* P2_SFRINIT1 */ +#define RSTV0910_P2_SFRINIT1 0xf25e +#define FSTV0910_P2_SFR_INIT1 0xf25e00ff + +/* P2_SFRINIT0 */ +#define RSTV0910_P2_SFRINIT0 0xf25f +#define FSTV0910_P2_SFR_INIT0 0xf25f00ff + +/* P2_SFRUP1 */ +#define RSTV0910_P2_SFRUP1 0xf260 +#define FSTV0910_P2_SYMB_FREQ_UP1 0xf26000ff + +/* P2_SFRUP0 */ +#define RSTV0910_P2_SFRUP0 0xf261 +#define FSTV0910_P2_SYMB_FREQ_UP0 0xf26100ff + +/* P2_SFRLOW1 */ +#define RSTV0910_P2_SFRLOW1 0xf262 +#define FSTV0910_P2_SYMB_FREQ_LOW1 0xf26200ff + +/* P2_SFRLOW0 */ +#define RSTV0910_P2_SFRLOW0 0xf263 +#define FSTV0910_P2_SYMB_FREQ_LOW0 0xf26300ff + +/* P2_SFR3 */ +#define RSTV0910_P2_SFR3 0xf264 +#define FSTV0910_P2_SYMB_FREQ3 0xf26400ff + +/* P2_SFR2 */ +#define RSTV0910_P2_SFR2 0xf265 +#define FSTV0910_P2_SYMB_FREQ2 0xf26500ff + +/* P2_SFR1 */ +#define RSTV0910_P2_SFR1 0xf266 +#define FSTV0910_P2_SYMB_FREQ1 0xf26600ff + +/* P2_SFR0 */ +#define RSTV0910_P2_SFR0 0xf267 +#define FSTV0910_P2_SYMB_FREQ0 0xf26700ff + +/* P2_TMGREG2 */ +#define RSTV0910_P2_TMGREG2 0xf268 +#define FSTV0910_P2_TMGREG2 0xf26800ff + +/* P2_TMGREG1 */ +#define RSTV0910_P2_TMGREG1 0xf269 +#define FSTV0910_P2_TMGREG1 0xf26900ff + +/* P2_TMGREG0 */ +#define RSTV0910_P2_TMGREG0 0xf26a +#define FSTV0910_P2_TMGREG0 0xf26a00ff + +/* P2_TMGLOCK1 */ +#define RSTV0910_P2_TMGLOCK1 0xf26b +#define FSTV0910_P2_TMGLOCK_LEVEL1 0xf26b01ff + +/* P2_TMGLOCK0 */ +#define RSTV0910_P2_TMGLOCK0 0xf26c +#define FSTV0910_P2_TMGLOCK_LEVEL0 0xf26c00ff + +/* P2_TMGOBS */ +#define RSTV0910_P2_TMGOBS 0xf26d +#define FSTV0910_P2_ROLLOFF_STATUS 0xf26d60c0 + +/* P2_EQUALCFG */ +#define RSTV0910_P2_EQUALCFG 0xf26f +#define FSTV0910_P2_EQUAL_ON 0xf26f6040 +#define FSTV0910_P2_MU_EQUALDFE 0xf26f0007 + +/* P2_EQUAI1 */ +#define RSTV0910_P2_EQUAI1 0xf270 +#define FSTV0910_P2_EQUA_ACCI1 0xf27001ff + +/* P2_EQUAQ1 */ +#define RSTV0910_P2_EQUAQ1 0xf271 +#define FSTV0910_P2_EQUA_ACCQ1 0xf27101ff + +/* P2_EQUAI2 */ +#define RSTV0910_P2_EQUAI2 0xf272 +#define FSTV0910_P2_EQUA_ACCI2 0xf27201ff + +/* P2_EQUAQ2 */ +#define RSTV0910_P2_EQUAQ2 0xf273 +#define FSTV0910_P2_EQUA_ACCQ2 0xf27301ff + +/* P2_EQUAI3 */ +#define RSTV0910_P2_EQUAI3 0xf274 +#define FSTV0910_P2_EQUA_ACCI3 0xf27401ff + +/* P2_EQUAQ3 */ +#define RSTV0910_P2_EQUAQ3 0xf275 +#define FSTV0910_P2_EQUA_ACCQ3 0xf27501ff + +/* P2_EQUAI4 */ +#define RSTV0910_P2_EQUAI4 0xf276 +#define FSTV0910_P2_EQUA_ACCI4 0xf27601ff + +/* P2_EQUAQ4 */ +#define RSTV0910_P2_EQUAQ4 0xf277 +#define FSTV0910_P2_EQUA_ACCQ4 0xf27701ff + +/* P2_EQUAI5 */ +#define RSTV0910_P2_EQUAI5 0xf278 +#define FSTV0910_P2_EQUA_ACCI5 0xf27801ff + +/* P2_EQUAQ5 */ +#define RSTV0910_P2_EQUAQ5 0xf279 +#define FSTV0910_P2_EQUA_ACCQ5 0xf27901ff + +/* P2_EQUAI6 */ +#define RSTV0910_P2_EQUAI6 0xf27a +#define FSTV0910_P2_EQUA_ACCI6 0xf27a01ff + +/* P2_EQUAQ6 */ +#define RSTV0910_P2_EQUAQ6 0xf27b +#define FSTV0910_P2_EQUA_ACCQ6 0xf27b01ff + +/* P2_EQUAI7 */ +#define RSTV0910_P2_EQUAI7 0xf27c +#define FSTV0910_P2_EQUA_ACCI7 0xf27c01ff + +/* P2_EQUAQ7 */ +#define RSTV0910_P2_EQUAQ7 0xf27d +#define FSTV0910_P2_EQUA_ACCQ7 0xf27d01ff + +/* P2_EQUAI8 */ +#define RSTV0910_P2_EQUAI8 0xf27e +#define FSTV0910_P2_EQUA_ACCI8 0xf27e01ff + +/* P2_EQUAQ8 */ +#define RSTV0910_P2_EQUAQ8 0xf27f +#define FSTV0910_P2_EQUA_ACCQ8 0xf27f01ff + +/* P2_NNOSDATAT1 */ +#define RSTV0910_P2_NNOSDATAT1 0xf280 +#define FSTV0910_P2_NOSDATAT_NORMED1 0xf28000ff + +/* P2_NNOSDATAT0 */ +#define RSTV0910_P2_NNOSDATAT0 0xf281 +#define FSTV0910_P2_NOSDATAT_NORMED0 0xf28100ff + +/* P2_NNOSDATA1 */ +#define RSTV0910_P2_NNOSDATA1 0xf282 +#define FSTV0910_P2_NOSDATA_NORMED1 0xf28200ff + +/* P2_NNOSDATA0 */ +#define RSTV0910_P2_NNOSDATA0 0xf283 +#define FSTV0910_P2_NOSDATA_NORMED0 0xf28300ff + +/* P2_NNOSPLHT1 */ +#define RSTV0910_P2_NNOSPLHT1 0xf284 +#define FSTV0910_P2_NOSPLHT_NORMED1 0xf28400ff + +/* P2_NNOSPLHT0 */ +#define RSTV0910_P2_NNOSPLHT0 0xf285 +#define FSTV0910_P2_NOSPLHT_NORMED0 0xf28500ff + +/* P2_NNOSPLH1 */ +#define RSTV0910_P2_NNOSPLH1 0xf286 +#define FSTV0910_P2_NOSPLH_NORMED1 0xf28600ff + +/* P2_NNOSPLH0 */ +#define RSTV0910_P2_NNOSPLH0 0xf287 +#define FSTV0910_P2_NOSPLH_NORMED0 0xf28700ff + +/* P2_NOSDATAT1 */ +#define RSTV0910_P2_NOSDATAT1 0xf288 +#define FSTV0910_P2_NOSDATAT_UNNORMED1 0xf28800ff + +/* P2_NOSDATAT0 */ +#define RSTV0910_P2_NOSDATAT0 0xf289 +#define FSTV0910_P2_NOSDATAT_UNNORMED0 0xf28900ff + +/* P2_NNOSFRAME1 */ +#define RSTV0910_P2_NNOSFRAME1 0xf28a +#define FSTV0910_P2_NOSFRAME_NORMED1 0xf28a00ff + +/* P2_NNOSFRAME0 */ +#define RSTV0910_P2_NNOSFRAME0 0xf28b +#define FSTV0910_P2_NOSFRAME_NORMED0 0xf28b00ff + +/* P2_NNOSRAD1 */ +#define RSTV0910_P2_NNOSRAD1 0xf28c +#define FSTV0910_P2_NOSRADIAL_NORMED1 0xf28c00ff + +/* P2_NNOSRAD0 */ +#define RSTV0910_P2_NNOSRAD0 0xf28d +#define FSTV0910_P2_NOSRADIAL_NORMED0 0xf28d00ff + +/* P2_NOSCFGF1 */ +#define RSTV0910_P2_NOSCFGF1 0xf28e +#define FSTV0910_P2_LOWNOISE_MESURE 0xf28e7080 +#define FSTV0910_P2_NOS_DELFRAME 0xf28e6040 +#define FSTV0910_P2_NOSDATA_MODE 0xf28e4030 +#define FSTV0910_P2_FRAMESEL_TYPESEL 0xf28e200c +#define FSTV0910_P2_FRAMESEL_TYPE 0xf28e0003 + +/* P2_NOSCFGF2 */ +#define RSTV0910_P2_NOSCFGF2 0xf28f +#define FSTV0910_P2_DIS_NOSPILOTS 0xf28f7080 +#define FSTV0910_P2_FRAMESEL_MODCODSEL 0xf28f5060 +#define FSTV0910_P2_FRAMESEL_MODCOD 0xf28f001f + +/* P2_CAR2CFG */ +#define RSTV0910_P2_CAR2CFG 0xf290 +#define FSTV0910_P2_ROTA2ON 0xf2902004 +#define FSTV0910_P2_PH_DET_ALGO2 0xf2900003 + +/* P2_CFR2CFR1 */ +#define RSTV0910_P2_CFR2CFR1 0xf291 +#define FSTV0910_P2_EN_S2CAR2CENTER 0xf2915020 +#define FSTV0910_P2_CFR2TOCFR1_BETA 0xf2910007 + +/* P2_CAR3CFG */ +#define RSTV0910_P2_CAR3CFG 0xf292 +#define FSTV0910_P2_CARRIER23_MODE 0xf29260c0 +#define FSTV0910_P2_CAR3INTERM_DVBS1 0xf2925020 +#define FSTV0910_P2_ABAMPLIF_MODE 0xf2923018 +#define FSTV0910_P2_CARRIER3_ALPHA3DL 0xf2920007 + +/* P2_CFR22 */ +#define RSTV0910_P2_CFR22 0xf293 +#define FSTV0910_P2_CAR2_FREQ2 0xf29301ff + +/* P2_CFR21 */ +#define RSTV0910_P2_CFR21 0xf294 +#define FSTV0910_P2_CAR2_FREQ1 0xf29400ff + +/* P2_CFR20 */ +#define RSTV0910_P2_CFR20 0xf295 +#define FSTV0910_P2_CAR2_FREQ0 0xf29500ff + +/* P2_ACLC2S2Q */ +#define RSTV0910_P2_ACLC2S2Q 0xf297 +#define FSTV0910_P2_ENAB_SPSKSYMB 0xf2977080 +#define FSTV0910_P2_CAR2S2_Q_ALPH_M 0xf2974030 +#define FSTV0910_P2_CAR2S2_Q_ALPH_E 0xf297000f + +/* P2_ACLC2S28 */ +#define RSTV0910_P2_ACLC2S28 0xf298 +#define FSTV0910_P2_CAR2S2_8_ALPH_M 0xf2984030 +#define FSTV0910_P2_CAR2S2_8_ALPH_E 0xf298000f + +/* P2_ACLC2S216A */ +#define RSTV0910_P2_ACLC2S216A 0xf299 +#define FSTV0910_P2_CAR2S2_16A_ALPH_M 0xf2994030 +#define FSTV0910_P2_CAR2S2_16A_ALPH_E 0xf299000f + +/* P2_ACLC2S232A */ +#define RSTV0910_P2_ACLC2S232A 0xf29a +#define FSTV0910_P2_CAR2S2_32A_ALPH_M 0xf29a4030 +#define FSTV0910_P2_CAR2S2_32A_ALPH_E 0xf29a000f + +/* P2_BCLC2S2Q */ +#define RSTV0910_P2_BCLC2S2Q 0xf29c +#define FSTV0910_P2_CAR2S2_Q_BETA_M 0xf29c4030 +#define FSTV0910_P2_CAR2S2_Q_BETA_E 0xf29c000f + +/* P2_BCLC2S28 */ +#define RSTV0910_P2_BCLC2S28 0xf29d +#define FSTV0910_P2_CAR2S2_8_BETA_M 0xf29d4030 +#define FSTV0910_P2_CAR2S2_8_BETA_E 0xf29d000f + +/* P2_BCLC2S216A */ +#define RSTV0910_P2_BCLC2S216A 0xf29e +#define FSTV0910_P2_DVBS2S216A_NIP 0xf29e7080 +#define FSTV0910_P2_CAR2S2_16A_BETA_M 0xf29e4030 +#define FSTV0910_P2_CAR2S2_16A_BETA_E 0xf29e000f + +/* P2_BCLC2S232A */ +#define RSTV0910_P2_BCLC2S232A 0xf29f +#define FSTV0910_P2_DVBS2S232A_NIP 0xf29f7080 +#define FSTV0910_P2_CAR2S2_32A_BETA_M 0xf29f4030 +#define FSTV0910_P2_CAR2S2_32A_BETA_E 0xf29f000f + +/* P2_PLROOT2 */ +#define RSTV0910_P2_PLROOT2 0xf2ac +#define FSTV0910_P2_PLSCRAMB_MODE 0xf2ac200c +#define FSTV0910_P2_PLSCRAMB_ROOT2 0xf2ac0003 + +/* P2_PLROOT1 */ +#define RSTV0910_P2_PLROOT1 0xf2ad +#define FSTV0910_P2_PLSCRAMB_ROOT1 0xf2ad00ff + +/* P2_PLROOT0 */ +#define RSTV0910_P2_PLROOT0 0xf2ae +#define FSTV0910_P2_PLSCRAMB_ROOT0 0xf2ae00ff + +/* P2_MODCODLST0 */ +#define RSTV0910_P2_MODCODLST0 0xf2b0 +#define FSTV0910_P2_NACCES_MODCODCH 0xf2b00001 + +/* P2_MODCODLST1 */ +#define RSTV0910_P2_MODCODLST1 0xf2b1 +#define FSTV0910_P2_SYMBRATE_FILTER 0xf2b13008 +#define FSTV0910_P2_NRESET_MODCODLST 0xf2b12004 +#define FSTV0910_P2_DIS_32PSK_9_10 0xf2b10003 + +/* P2_MODCODLST2 */ +#define RSTV0910_P2_MODCODLST2 0xf2b2 +#define FSTV0910_P2_DIS_32PSK_8_9 0xf2b240f0 +#define FSTV0910_P2_DIS_32PSK_5_6 0xf2b2000f + +/* P2_MODCODLST3 */ +#define RSTV0910_P2_MODCODLST3 0xf2b3 +#define FSTV0910_P2_DIS_32PSK_4_5 0xf2b340f0 +#define FSTV0910_P2_DIS_32PSK_3_4 0xf2b3000f + +/* P2_MODCODLST4 */ +#define RSTV0910_P2_MODCODLST4 0xf2b4 +#define FSTV0910_P2_DUMMYPL_PILOT 0xf2b47080 +#define FSTV0910_P2_DUMMYPL_NOPILOT 0xf2b46040 +#define FSTV0910_P2_DIS_16PSK_9_10 0xf2b44030 +#define FSTV0910_P2_DIS_16PSK_8_9 0xf2b4000f + +/* P2_MODCODLST5 */ +#define RSTV0910_P2_MODCODLST5 0xf2b5 +#define FSTV0910_P2_DIS_16PSK_5_6 0xf2b540f0 +#define FSTV0910_P2_DIS_16PSK_4_5 0xf2b5000f + +/* P2_MODCODLST6 */ +#define RSTV0910_P2_MODCODLST6 0xf2b6 +#define FSTV0910_P2_DIS_16PSK_3_4 0xf2b640f0 +#define FSTV0910_P2_DIS_16PSK_2_3 0xf2b6000f + +/* P2_MODCODLST7 */ +#define RSTV0910_P2_MODCODLST7 0xf2b7 +#define FSTV0910_P2_MODCOD_NNOSFILTER 0xf2b77080 +#define FSTV0910_P2_DIS_8PSK_9_10 0xf2b74030 +#define FSTV0910_P2_DIS_8PSK_8_9 0xf2b7000f + +/* P2_MODCODLST8 */ +#define RSTV0910_P2_MODCODLST8 0xf2b8 +#define FSTV0910_P2_DIS_8PSK_5_6 0xf2b840f0 +#define FSTV0910_P2_DIS_8PSK_3_4 0xf2b8000f + +/* P2_MODCODLST9 */ +#define RSTV0910_P2_MODCODLST9 0xf2b9 +#define FSTV0910_P2_DIS_8PSK_2_3 0xf2b940f0 +#define FSTV0910_P2_DIS_8PSK_3_5 0xf2b9000f + +/* P2_MODCODLSTA */ +#define RSTV0910_P2_MODCODLSTA 0xf2ba +#define FSTV0910_P2_NOSFILTER_LIMITE 0xf2ba7080 +#define FSTV0910_P2_DIS_QPSK_9_10 0xf2ba4030 +#define FSTV0910_P2_DIS_QPSK_8_9 0xf2ba000f + +/* P2_MODCODLSTB */ +#define RSTV0910_P2_MODCODLSTB 0xf2bb +#define FSTV0910_P2_DIS_QPSK_5_6 0xf2bb40f0 +#define FSTV0910_P2_DIS_QPSK_4_5 0xf2bb000f + +/* P2_MODCODLSTC */ +#define RSTV0910_P2_MODCODLSTC 0xf2bc +#define FSTV0910_P2_DIS_QPSK_3_4 0xf2bc40f0 +#define FSTV0910_P2_DIS_QPSK_2_3 0xf2bc000f + +/* P2_MODCODLSTD */ +#define RSTV0910_P2_MODCODLSTD 0xf2bd +#define FSTV0910_P2_DIS_QPSK_3_5 0xf2bd40f0 +#define FSTV0910_P2_DIS_QPSK_1_2 0xf2bd000f + +/* P2_MODCODLSTE */ +#define RSTV0910_P2_MODCODLSTE 0xf2be +#define FSTV0910_P2_DIS_QPSK_2_5 0xf2be40f0 +#define FSTV0910_P2_DIS_QPSK_1_3 0xf2be000f + +/* P2_MODCODLSTF */ +#define RSTV0910_P2_MODCODLSTF 0xf2bf +#define FSTV0910_P2_DIS_QPSK_1_4 0xf2bf40f0 +#define FSTV0910_P2_DEMOD_INVMODLST 0xf2bf3008 +#define FSTV0910_P2_DEMODOUT_ENABLE 0xf2bf2004 +#define FSTV0910_P2_DDEMOD_NSET 0xf2bf1002 +#define FSTV0910_P2_MODCOD_NSTOCK 0xf2bf0001 + +/* P2_GAUSSR0 */ +#define RSTV0910_P2_GAUSSR0 0xf2c0 +#define FSTV0910_P2_EN_CCIMODE 0xf2c07080 +#define FSTV0910_P2_R0_GAUSSIEN 0xf2c0007f + +/* P2_CCIR0 */ +#define RSTV0910_P2_CCIR0 0xf2c1 +#define FSTV0910_P2_CCIDETECT_PLHONLY 0xf2c17080 +#define FSTV0910_P2_R0_CCI 0xf2c1007f + +/* P2_CCIQUANT */ +#define RSTV0910_P2_CCIQUANT 0xf2c2 +#define FSTV0910_P2_CCI_BETA 0xf2c250e0 +#define FSTV0910_P2_CCI_QUANT 0xf2c2001f + +/* P2_CCITHRES */ +#define RSTV0910_P2_CCITHRES 0xf2c3 +#define FSTV0910_P2_CCI_THRESHOLD 0xf2c300ff + +/* P2_CCIACC */ +#define RSTV0910_P2_CCIACC 0xf2c4 +#define FSTV0910_P2_CCI_VALUE 0xf2c400ff + +/* P2_DSTATUS4 */ +#define RSTV0910_P2_DSTATUS4 0xf2c5 +#define FSTV0910_P2_RAINFADE_DETECT 0xf2c57080 +#define FSTV0910_P2_NOTHRES2_FAIL 0xf2c56040 +#define FSTV0910_P2_NOTHRES1_FAIL 0xf2c55020 +#define FSTV0910_P2_DMDPROG_ERROR 0xf2c52004 +#define FSTV0910_P2_CSTENV_DETECT 0xf2c51002 +#define FSTV0910_P2_DETECTION_TRIAX 0xf2c50001 + +/* P2_DMDRESCFG */ +#define RSTV0910_P2_DMDRESCFG 0xf2c6 +#define FSTV0910_P2_DMDRES_RESET 0xf2c67080 +#define FSTV0910_P2_DMDRES_STRALL 0xf2c63008 +#define FSTV0910_P2_DMDRES_NEWONLY 0xf2c62004 +#define FSTV0910_P2_DMDRES_NOSTORE 0xf2c61002 + +/* P2_DMDRESADR */ +#define RSTV0910_P2_DMDRESADR 0xf2c7 +#define FSTV0910_P2_DMDRES_VALIDCFR 0xf2c76040 +#define FSTV0910_P2_DMDRES_MEMFULL 0xf2c74030 +#define FSTV0910_P2_DMDRES_RESNBR 0xf2c7000f + +/* P2_DMDRESDATA7 */ +#define RSTV0910_P2_DMDRESDATA7 0xf2c8 +#define FSTV0910_P2_DMDRES_DATA7 0xf2c800ff + +/* P2_DMDRESDATA6 */ +#define RSTV0910_P2_DMDRESDATA6 0xf2c9 +#define FSTV0910_P2_DMDRES_DATA6 0xf2c900ff + +/* P2_DMDRESDATA5 */ +#define RSTV0910_P2_DMDRESDATA5 0xf2ca +#define FSTV0910_P2_DMDRES_DATA5 0xf2ca00ff + +/* P2_DMDRESDATA4 */ +#define RSTV0910_P2_DMDRESDATA4 0xf2cb +#define FSTV0910_P2_DMDRES_DATA4 0xf2cb00ff + +/* P2_DMDRESDATA3 */ +#define RSTV0910_P2_DMDRESDATA3 0xf2cc +#define FSTV0910_P2_DMDRES_DATA3 0xf2cc00ff + +/* P2_DMDRESDATA2 */ +#define RSTV0910_P2_DMDRESDATA2 0xf2cd +#define FSTV0910_P2_DMDRES_DATA2 0xf2cd00ff + +/* P2_DMDRESDATA1 */ +#define RSTV0910_P2_DMDRESDATA1 0xf2ce +#define FSTV0910_P2_DMDRES_DATA1 0xf2ce00ff + +/* P2_DMDRESDATA0 */ +#define RSTV0910_P2_DMDRESDATA0 0xf2cf +#define FSTV0910_P2_DMDRES_DATA0 0xf2cf00ff + +/* P2_FFEI1 */ +#define RSTV0910_P2_FFEI1 0xf2d0 +#define FSTV0910_P2_FFE_ACCI1 0xf2d001ff + +/* P2_FFEQ1 */ +#define RSTV0910_P2_FFEQ1 0xf2d1 +#define FSTV0910_P2_FFE_ACCQ1 0xf2d101ff + +/* P2_FFEI2 */ +#define RSTV0910_P2_FFEI2 0xf2d2 +#define FSTV0910_P2_FFE_ACCI2 0xf2d201ff + +/* P2_FFEQ2 */ +#define RSTV0910_P2_FFEQ2 0xf2d3 +#define FSTV0910_P2_FFE_ACCQ2 0xf2d301ff + +/* P2_FFEI3 */ +#define RSTV0910_P2_FFEI3 0xf2d4 +#define FSTV0910_P2_FFE_ACCI3 0xf2d401ff + +/* P2_FFEQ3 */ +#define RSTV0910_P2_FFEQ3 0xf2d5 +#define FSTV0910_P2_FFE_ACCQ3 0xf2d501ff + +/* P2_FFEI4 */ +#define RSTV0910_P2_FFEI4 0xf2d6 +#define FSTV0910_P2_FFE_ACCI4 0xf2d601ff + +/* P2_FFEQ4 */ +#define RSTV0910_P2_FFEQ4 0xf2d7 +#define FSTV0910_P2_FFE_ACCQ4 0xf2d701ff + +/* P2_FFECFG */ +#define RSTV0910_P2_FFECFG 0xf2d8 +#define FSTV0910_P2_EQUALFFE_ON 0xf2d86040 +#define FSTV0910_P2_EQUAL_USEDSYMB 0xf2d84030 +#define FSTV0910_P2_MU_EQUALFFE 0xf2d80007 + +/* P2_TNRCFG2 */ +#define RSTV0910_P2_TNRCFG2 0xf2e1 +#define FSTV0910_P2_TUN_IQSWAP 0xf2e17080 + +/* P2_SMAPCOEF7 */ +#define RSTV0910_P2_SMAPCOEF7 0xf300 +#define FSTV0910_P2_DIS_QSCALE 0xf3007080 +#define FSTV0910_P2_SMAPCOEF_Q_LLR12 0xf300017f + +/* P2_SMAPCOEF6 */ +#define RSTV0910_P2_SMAPCOEF6 0xf301 +#define FSTV0910_P2_DIS_AGC2SCALE 0xf3017080 +#define FSTV0910_P2_ADJ_8PSKLLR1 0xf3012004 +#define FSTV0910_P2_OLD_8PSKLLR1 0xf3011002 +#define FSTV0910_P2_DIS_AB8PSK 0xf3010001 + +/* P2_SMAPCOEF5 */ +#define RSTV0910_P2_SMAPCOEF5 0xf302 +#define FSTV0910_P2_DIS_8SCALE 0xf3027080 +#define FSTV0910_P2_SMAPCOEF_8P_LLR23 0xf302017f + +/* P2_SMAPCOEF4 */ +#define RSTV0910_P2_SMAPCOEF4 0xf303 +#define FSTV0910_P2_SMAPCOEF_16APSK_LLR12 0xf303017f + +/* P2_SMAPCOEF3 */ +#define RSTV0910_P2_SMAPCOEF3 0xf304 +#define FSTV0910_P2_SMAPCOEF_16APSK_LLR34 0xf304017f + +/* P2_SMAPCOEF2 */ +#define RSTV0910_P2_SMAPCOEF2 0xf305 +#define FSTV0910_P2_SMAPCOEF_32APSK_R2R3 0xf30541f0 +#define FSTV0910_P2_SMAPCOEF_32APSK_LLR2 0xf305010f + +/* P2_SMAPCOEF1 */ +#define RSTV0910_P2_SMAPCOEF1 0xf306 +#define FSTV0910_P2_DIS_16SCALE 0xf3067080 +#define FSTV0910_P2_SMAPCOEF_32_LLR34 0xf306017f + +/* P2_SMAPCOEF0 */ +#define RSTV0910_P2_SMAPCOEF0 0xf307 +#define FSTV0910_P2_DIS_32SCALE 0xf3077080 +#define FSTV0910_P2_SMAPCOEF_32_LLR15 0xf307017f + +/* P2_NOSTHRES1 */ +#define RSTV0910_P2_NOSTHRES1 0xf309 +#define FSTV0910_P2_NOS_THRESHOLD1 0xf30900ff + +/* P2_NOSTHRES2 */ +#define RSTV0910_P2_NOSTHRES2 0xf30a +#define FSTV0910_P2_NOS_THRESHOLD2 0xf30a00ff + +/* P2_NOSDIFF1 */ +#define RSTV0910_P2_NOSDIFF1 0xf30b +#define FSTV0910_P2_NOSTHRES1_DIFF 0xf30b00ff + +/* P2_RAINFADE */ +#define RSTV0910_P2_RAINFADE 0xf30c +#define FSTV0910_P2_NOSTHRES_DATAT 0xf30c7080 +#define FSTV0910_P2_RAINFADE_CNLIMIT 0xf30c4070 +#define FSTV0910_P2_RAINFADE_TIMEOUT 0xf30c0007 + +/* P2_NOSRAMCFG */ +#define RSTV0910_P2_NOSRAMCFG 0xf30d +#define FSTV0910_P2_NOSRAM_ACTIVATION 0xf30d4030 +#define FSTV0910_P2_NOSRAM_CNRONLY 0xf30d3008 +#define FSTV0910_P2_NOSRAM_LGNCNR1 0xf30d0007 + +/* P2_NOSRAMPOS */ +#define RSTV0910_P2_NOSRAMPOS 0xf30e +#define FSTV0910_P2_NOSRAM_LGNCNR0 0xf30e40f0 +#define FSTV0910_P2_NOSRAM_VALIDE 0xf30e2004 +#define FSTV0910_P2_NOSRAM_CNRVAL1 0xf30e0003 + +/* P2_NOSRAMVAL */ +#define RSTV0910_P2_NOSRAMVAL 0xf30f +#define FSTV0910_P2_NOSRAM_CNRVAL0 0xf30f00ff + +/* P2_DMDPLHSTAT */ +#define RSTV0910_P2_DMDPLHSTAT 0xf320 +#define FSTV0910_P2_PLH_STATISTIC 0xf32000ff + +/* P2_LOCKTIME3 */ +#define RSTV0910_P2_LOCKTIME3 0xf322 +#define FSTV0910_P2_DEMOD_LOCKTIME3 0xf32200ff + +/* P2_LOCKTIME2 */ +#define RSTV0910_P2_LOCKTIME2 0xf323 +#define FSTV0910_P2_DEMOD_LOCKTIME2 0xf32300ff + +/* P2_LOCKTIME1 */ +#define RSTV0910_P2_LOCKTIME1 0xf324 +#define FSTV0910_P2_DEMOD_LOCKTIME1 0xf32400ff + +/* P2_LOCKTIME0 */ +#define RSTV0910_P2_LOCKTIME0 0xf325 +#define FSTV0910_P2_DEMOD_LOCKTIME0 0xf32500ff + +/* P2_VITSCALE */ +#define RSTV0910_P2_VITSCALE 0xf332 +#define FSTV0910_P2_NVTH_NOSRANGE 0xf3327080 +#define FSTV0910_P2_VERROR_MAXMODE 0xf3326040 +#define FSTV0910_P2_NSLOWSN_LOCKED 0xf3323008 +#define FSTV0910_P2_DIS_RSFLOCK 0xf3321002 + +/* P2_FECM */ +#define RSTV0910_P2_FECM 0xf333 +#define FSTV0910_P2_DSS_DVB 0xf3337080 +#define FSTV0910_P2_DSS_SRCH 0xf3334010 +#define FSTV0910_P2_SYNCVIT 0xf3331002 +#define FSTV0910_P2_IQINV 0xf3330001 + +/* P2_VTH12 */ +#define RSTV0910_P2_VTH12 0xf334 +#define FSTV0910_P2_VTH12 0xf33400ff + +/* P2_VTH23 */ +#define RSTV0910_P2_VTH23 0xf335 +#define FSTV0910_P2_VTH23 0xf33500ff + +/* P2_VTH34 */ +#define RSTV0910_P2_VTH34 0xf336 +#define FSTV0910_P2_VTH34 0xf33600ff + +/* P2_VTH56 */ +#define RSTV0910_P2_VTH56 0xf337 +#define FSTV0910_P2_VTH56 0xf33700ff + +/* P2_VTH67 */ +#define RSTV0910_P2_VTH67 0xf338 +#define FSTV0910_P2_VTH67 0xf33800ff + +/* P2_VTH78 */ +#define RSTV0910_P2_VTH78 0xf339 +#define FSTV0910_P2_VTH78 0xf33900ff + +/* P2_VITCURPUN */ +#define RSTV0910_P2_VITCURPUN 0xf33a +#define FSTV0910_P2_VIT_CURPUN 0xf33a001f + +/* P2_VERROR */ +#define RSTV0910_P2_VERROR 0xf33b +#define FSTV0910_P2_REGERR_VIT 0xf33b00ff + +/* P2_PRVIT */ +#define RSTV0910_P2_PRVIT 0xf33c +#define FSTV0910_P2_DIS_VTHLOCK 0xf33c6040 +#define FSTV0910_P2_E7_8VIT 0xf33c5020 +#define FSTV0910_P2_E6_7VIT 0xf33c4010 +#define FSTV0910_P2_E5_6VIT 0xf33c3008 +#define FSTV0910_P2_E3_4VIT 0xf33c2004 +#define FSTV0910_P2_E2_3VIT 0xf33c1002 +#define FSTV0910_P2_E1_2VIT 0xf33c0001 + +/* P2_VAVSRVIT */ +#define RSTV0910_P2_VAVSRVIT 0xf33d +#define FSTV0910_P2_AMVIT 0xf33d7080 +#define FSTV0910_P2_FROZENVIT 0xf33d6040 +#define FSTV0910_P2_SNVIT 0xf33d4030 +#define FSTV0910_P2_TOVVIT 0xf33d200c +#define FSTV0910_P2_HYPVIT 0xf33d0003 + +/* P2_VSTATUSVIT */ +#define RSTV0910_P2_VSTATUSVIT 0xf33e +#define FSTV0910_P2_PRFVIT 0xf33e4010 +#define FSTV0910_P2_LOCKEDVIT 0xf33e3008 + +/* P2_VTHINUSE */ +#define RSTV0910_P2_VTHINUSE 0xf33f +#define FSTV0910_P2_VIT_INUSE 0xf33f00ff + +/* P2_KDIV12 */ +#define RSTV0910_P2_KDIV12 0xf340 +#define FSTV0910_P2_K_DIVIDER_12 0xf340007f + +/* P2_KDIV23 */ +#define RSTV0910_P2_KDIV23 0xf341 +#define FSTV0910_P2_K_DIVIDER_23 0xf341007f + +/* P2_KDIV34 */ +#define RSTV0910_P2_KDIV34 0xf342 +#define FSTV0910_P2_K_DIVIDER_34 0xf342007f + +/* P2_KDIV56 */ +#define RSTV0910_P2_KDIV56 0xf343 +#define FSTV0910_P2_K_DIVIDER_56 0xf343007f + +/* P2_KDIV67 */ +#define RSTV0910_P2_KDIV67 0xf344 +#define FSTV0910_P2_K_DIVIDER_67 0xf344007f + +/* P2_KDIV78 */ +#define RSTV0910_P2_KDIV78 0xf345 +#define FSTV0910_P2_K_DIVIDER_78 0xf345007f + +/* P2_TSPIDFLT1 */ +#define RSTV0910_P2_TSPIDFLT1 0xf346 +#define FSTV0910_P2_PIDFLT_ADDR 0xf34600ff + +/* P2_TSPIDFLT0 */ +#define RSTV0910_P2_TSPIDFLT0 0xf347 +#define FSTV0910_P2_PIDFLT_DATA 0xf34700ff + +/* P2_PDELCTRL0 */ +#define RSTV0910_P2_PDELCTRL0 0xf34f +#define FSTV0910_P2_ISIOBS_MODE 0xf34f4030 + +/* P2_PDELCTRL1 */ +#define RSTV0910_P2_PDELCTRL1 0xf350 +#define FSTV0910_P2_INV_MISMASK 0xf3507080 +#define FSTV0910_P2_FILTER_EN 0xf3505020 +#define FSTV0910_P2_HYSTEN 0xf3503008 +#define FSTV0910_P2_HYSTSWRST 0xf3502004 +#define FSTV0910_P2_EN_MIS00 0xf3501002 +#define FSTV0910_P2_ALGOSWRST 0xf3500001 + +/* P2_PDELCTRL2 */ +#define RSTV0910_P2_PDELCTRL2 0xf351 +#define FSTV0910_P2_FORCE_CONTINUOUS 0xf3517080 +#define FSTV0910_P2_RESET_UPKO_COUNT 0xf3516040 +#define FSTV0910_P2_USER_PKTDELIN_NB 0xf3515020 +#define FSTV0910_P2_FRAME_MODE 0xf3511002 + +/* P2_HYSTTHRESH */ +#define RSTV0910_P2_HYSTTHRESH 0xf354 +#define FSTV0910_P2_DELIN_LOCKTHRES 0xf35440f0 +#define FSTV0910_P2_DELIN_UNLOCKTHRES 0xf354000f + +/* P2_UPLCCST0 */ +#define RSTV0910_P2_UPLCCST0 0xf358 +#define FSTV0910_P2_UPL_CST0 0xf35830f8 +#define FSTV0910_P2_UPL_MODE 0xf3580007 + +/* P2_ISIENTRY */ +#define RSTV0910_P2_ISIENTRY 0xf35e +#define FSTV0910_P2_ISI_ENTRY 0xf35e00ff + +/* P2_ISIBITENA */ +#define RSTV0910_P2_ISIBITENA 0xf35f +#define FSTV0910_P2_ISI_BIT_EN 0xf35f00ff + +/* P2_MATSTR1 */ +#define RSTV0910_P2_MATSTR1 0xf360 +#define FSTV0910_P2_MATYPE_CURRENT1 0xf36000ff + +/* P2_MATSTR0 */ +#define RSTV0910_P2_MATSTR0 0xf361 +#define FSTV0910_P2_MATYPE_CURRENT0 0xf36100ff + +/* P2_UPLSTR1 */ +#define RSTV0910_P2_UPLSTR1 0xf362 +#define FSTV0910_P2_UPL_CURRENT1 0xf36200ff + +/* P2_UPLSTR0 */ +#define RSTV0910_P2_UPLSTR0 0xf363 +#define FSTV0910_P2_UPL_CURRENT0 0xf36300ff + +/* P2_DFLSTR1 */ +#define RSTV0910_P2_DFLSTR1 0xf364 +#define FSTV0910_P2_DFL_CURRENT1 0xf36400ff + +/* P2_DFLSTR0 */ +#define RSTV0910_P2_DFLSTR0 0xf365 +#define FSTV0910_P2_DFL_CURRENT0 0xf36500ff + +/* P2_SYNCSTR */ +#define RSTV0910_P2_SYNCSTR 0xf366 +#define FSTV0910_P2_SYNC_CURRENT 0xf36600ff + +/* P2_SYNCDSTR1 */ +#define RSTV0910_P2_SYNCDSTR1 0xf367 +#define FSTV0910_P2_SYNCD_CURRENT1 0xf36700ff + +/* P2_SYNCDSTR0 */ +#define RSTV0910_P2_SYNCDSTR0 0xf368 +#define FSTV0910_P2_SYNCD_CURRENT0 0xf36800ff + +/* P2_PDELSTATUS1 */ +#define RSTV0910_P2_PDELSTATUS1 0xf369 +#define FSTV0910_P2_PKTDELIN_DELOCK 0xf3697080 +#define FSTV0910_P2_SYNCDUPDFL_BADDFL 0xf3696040 +#define FSTV0910_P2_UNACCEPTED_STREAM 0xf3694010 +#define FSTV0910_P2_BCH_ERROR_FLAG 0xf3693008 +#define FSTV0910_P2_PKTDELIN_LOCK 0xf3691002 +#define FSTV0910_P2_FIRST_LOCK 0xf3690001 + +/* P2_PDELSTATUS2 */ +#define RSTV0910_P2_PDELSTATUS2 0xf36a +#define FSTV0910_P2_FRAME_MODCOD 0xf36a207c +#define FSTV0910_P2_FRAME_TYPE 0xf36a0003 + +/* P2_BBFCRCKO1 */ +#define RSTV0910_P2_BBFCRCKO1 0xf36b +#define FSTV0910_P2_BBHCRC_KOCNT1 0xf36b00ff + +/* P2_BBFCRCKO0 */ +#define RSTV0910_P2_BBFCRCKO0 0xf36c +#define FSTV0910_P2_BBHCRC_KOCNT0 0xf36c00ff + +/* P2_UPCRCKO1 */ +#define RSTV0910_P2_UPCRCKO1 0xf36d +#define FSTV0910_P2_PKTCRC_KOCNT1 0xf36d00ff + +/* P2_UPCRCKO0 */ +#define RSTV0910_P2_UPCRCKO0 0xf36e +#define FSTV0910_P2_PKTCRC_KOCNT0 0xf36e00ff + +/* P2_PDELCTRL3 */ +#define RSTV0910_P2_PDELCTRL3 0xf36f +#define FSTV0910_P2_NOFIFO_BCHERR 0xf36f5020 +#define FSTV0910_P2_PKTDELIN_DELACMERR 0xf36f4010 + +/* P2_TSSTATEM */ +#define RSTV0910_P2_TSSTATEM 0xf370 +#define FSTV0910_P2_TSDIL_ON 0xf3707080 +#define FSTV0910_P2_TSRS_ON 0xf3705020 +#define FSTV0910_P2_TSDESCRAMB_ON 0xf3704010 +#define FSTV0910_P2_TSFRAME_MODE 0xf3703008 +#define FSTV0910_P2_TS_DISABLE 0xf3702004 +#define FSTV0910_P2_TSACM_MODE 0xf3701002 +#define FSTV0910_P2_TSOUT_NOSYNC 0xf3700001 + +/* P2_TSSTATEL */ +#define RSTV0910_P2_TSSTATEL 0xf371 +#define FSTV0910_P2_TSNOSYNCBYTE 0xf3717080 +#define FSTV0910_P2_TSPARITY_ON 0xf3716040 +#define FSTV0910_P2_TSISSYI_ON 0xf3713008 +#define FSTV0910_P2_TSNPD_ON 0xf3712004 +#define FSTV0910_P2_TSCRC8_ON 0xf3711002 +#define FSTV0910_P2_TSDSS_PACKET 0xf3710001 + +/* P2_TSCFGH */ +#define RSTV0910_P2_TSCFGH 0xf372 +#define FSTV0910_P2_TSFIFO_DVBCI 0xf3727080 +#define FSTV0910_P2_TSFIFO_SERIAL 0xf3726040 +#define FSTV0910_P2_TSFIFO_TEIUPDATE 0xf3725020 +#define FSTV0910_P2_TSFIFO_DUTY50 0xf3724010 +#define FSTV0910_P2_TSFIFO_HSGNLOUT 0xf3723008 +#define FSTV0910_P2_TSFIFO_ERRMODE 0xf3721006 +#define FSTV0910_P2_RST_HWARE 0xf3720001 + +/* P2_TSCFGM */ +#define RSTV0910_P2_TSCFGM 0xf373 +#define FSTV0910_P2_TSFIFO_MANSPEED 0xf37360c0 +#define FSTV0910_P2_TSFIFO_PERMDATA 0xf3735020 +#define FSTV0910_P2_TSFIFO_NONEWSGNL 0xf3734010 +#define FSTV0910_P2_TSFIFO_INVDATA 0xf3730001 + +/* P2_TSCFGL */ +#define RSTV0910_P2_TSCFGL 0xf374 +#define FSTV0910_P2_TSFIFO_BCLKDEL1CK 0xf37460c0 +#define FSTV0910_P2_BCHERROR_MODE 0xf3744030 +#define FSTV0910_P2_TSFIFO_NSGNL2DATA 0xf3743008 +#define FSTV0910_P2_TSFIFO_EMBINDVB 0xf3742004 +#define FSTV0910_P2_TSFIFO_BITSPEED 0xf3740003 + +/* P2_TSSYNC */ +#define RSTV0910_P2_TSSYNC 0xf375 +#define FSTV0910_P2_TSFIFO_SYNCMODE 0xf3753018 + +/* P2_TSINSDELH */ +#define RSTV0910_P2_TSINSDELH 0xf376 +#define FSTV0910_P2_TSDEL_SYNCBYTE 0xf3767080 +#define FSTV0910_P2_TSDEL_XXHEADER 0xf3766040 +#define FSTV0910_P2_TSDEL_DATAFIELD 0xf3764010 +#define FSTV0910_P2_TSINSDEL_RSPARITY 0xf3761002 +#define FSTV0910_P2_TSINSDEL_CRC8 0xf3760001 + +/* P2_TSINSDELM */ +#define RSTV0910_P2_TSINSDELM 0xf377 +#define FSTV0910_P2_TSINS_EMODCOD 0xf3774010 +#define FSTV0910_P2_TSINS_TOKEN 0xf3773008 +#define FSTV0910_P2_TSINS_XXXERR 0xf3772004 +#define FSTV0910_P2_TSINS_MATYPE 0xf3771002 +#define FSTV0910_P2_TSINS_UPL 0xf3770001 + +/* P2_TSINSDELL */ +#define RSTV0910_P2_TSINSDELL 0xf378 +#define FSTV0910_P2_TSINS_DFL 0xf3787080 +#define FSTV0910_P2_TSINS_SYNCD 0xf3786040 +#define FSTV0910_P2_TSINS_BLOCLEN 0xf3785020 +#define FSTV0910_P2_TSINS_SIGPCOUNT 0xf3784010 +#define FSTV0910_P2_TSINS_FIFO 0xf3783008 +#define FSTV0910_P2_TSINS_REALPACK 0xf3782004 +#define FSTV0910_P2_TSINS_TSCONFIG 0xf3781002 +#define FSTV0910_P2_TSINS_LATENCY 0xf3780001 + +/* P2_TSDIVN */ +#define RSTV0910_P2_TSDIVN 0xf379 +#define FSTV0910_P2_TSFIFO_SPEEDMODE 0xf37960c0 +#define FSTV0910_P2_TSFIFO_RISEOK 0xf3790007 + +/* P2_TSCFG4 */ +#define RSTV0910_P2_TSCFG4 0xf37a +#define FSTV0910_P2_TSFIFO_TSSPEEDMODE 0xf37a60c0 + +/* P2_TSSPEED */ +#define RSTV0910_P2_TSSPEED 0xf380 +#define FSTV0910_P2_TSFIFO_OUTSPEED 0xf38000ff + +/* P2_TSSTATUS */ +#define RSTV0910_P2_TSSTATUS 0xf381 +#define FSTV0910_P2_TSFIFO_LINEOK 0xf3817080 +#define FSTV0910_P2_TSFIFO_ERROR 0xf3816040 +#define FSTV0910_P2_TSFIFO_NOSYNC 0xf3814010 +#define FSTV0910_P2_TSREGUL_ERROR 0xf3812004 +#define FSTV0910_P2_DIL_READY 0xf3810001 + +/* P2_TSSTATUS2 */ +#define RSTV0910_P2_TSSTATUS2 0xf382 +#define FSTV0910_P2_TSFIFO_DEMODSEL 0xf3827080 +#define FSTV0910_P2_TSFIFOSPEED_STORE 0xf3826040 +#define FSTV0910_P2_DILXX_RESET 0xf3825020 +#define FSTV0910_P2_SCRAMBDETECT 0xf3821002 + +/* P2_TSBITRATE1 */ +#define RSTV0910_P2_TSBITRATE1 0xf383 +#define FSTV0910_P2_TSFIFO_BITRATE1 0xf38300ff + +/* P2_TSBITRATE0 */ +#define RSTV0910_P2_TSBITRATE0 0xf384 +#define FSTV0910_P2_TSFIFO_BITRATE0 0xf38400ff + +/* P2_TSPACKLEN1 */ +#define RSTV0910_P2_TSPACKLEN1 0xf385 +#define FSTV0910_P2_TSFIFO_PACKCPT 0xf38550e0 + +/* P2_TSDLY2 */ +#define RSTV0910_P2_TSDLY2 0xf389 +#define FSTV0910_P2_SOFFIFO_LATENCY2 0xf389000f + +/* P2_TSDLY1 */ +#define RSTV0910_P2_TSDLY1 0xf38a +#define FSTV0910_P2_SOFFIFO_LATENCY1 0xf38a00ff + +/* P2_TSDLY0 */ +#define RSTV0910_P2_TSDLY0 0xf38b +#define FSTV0910_P2_SOFFIFO_LATENCY0 0xf38b00ff + +/* P2_TSNPDAV */ +#define RSTV0910_P2_TSNPDAV 0xf38c +#define FSTV0910_P2_TSNPD_AVERAGE 0xf38c00ff + +/* P2_TSBUFSTAT2 */ +#define RSTV0910_P2_TSBUFSTAT2 0xf38d +#define FSTV0910_P2_TSISCR_3BYTES 0xf38d7080 +#define FSTV0910_P2_TSISCR_NEWDATA 0xf38d6040 +#define FSTV0910_P2_TSISCR_BUFSTAT2 0xf38d003f + +/* P2_TSBUFSTAT1 */ +#define RSTV0910_P2_TSBUFSTAT1 0xf38e +#define FSTV0910_P2_TSISCR_BUFSTAT1 0xf38e00ff + +/* P2_TSBUFSTAT0 */ +#define RSTV0910_P2_TSBUFSTAT0 0xf38f +#define FSTV0910_P2_TSISCR_BUFSTAT0 0xf38f00ff + +/* P2_TSDEBUGL */ +#define RSTV0910_P2_TSDEBUGL 0xf391 +#define FSTV0910_P2_TSFIFO_ERROR_EVNT 0xf3912004 +#define FSTV0910_P2_TSFIFO_OVERFLOWM 0xf3910001 + +/* P2_TSDLYSET2 */ +#define RSTV0910_P2_TSDLYSET2 0xf392 +#define FSTV0910_P2_SOFFIFO_OFFSET 0xf39260c0 +#define FSTV0910_P2_HYSTERESIS_THRESHOLD 0xf3924030 +#define FSTV0910_P2_SOFFIFO_SYMBOFFS2 0xf392000f + +/* P2_TSDLYSET1 */ +#define RSTV0910_P2_TSDLYSET1 0xf393 +#define FSTV0910_P2_SOFFIFO_SYMBOFFS1 0xf39300ff + +/* P2_TSDLYSET0 */ +#define RSTV0910_P2_TSDLYSET0 0xf394 +#define FSTV0910_P2_SOFFIFO_SYMBOFFS0 0xf39400ff + +/* P2_ERRCTRL1 */ +#define RSTV0910_P2_ERRCTRL1 0xf398 +#define FSTV0910_P2_ERR_SOURCE1 0xf39840f0 +#define FSTV0910_P2_NUM_EVENT1 0xf3980007 + +/* P2_ERRCNT12 */ +#define RSTV0910_P2_ERRCNT12 0xf399 +#define FSTV0910_P2_ERRCNT1_OLDVALUE 0xf3997080 +#define FSTV0910_P2_ERR_CNT12 0xf399007f + +/* P2_ERRCNT11 */ +#define RSTV0910_P2_ERRCNT11 0xf39a +#define FSTV0910_P2_ERR_CNT11 0xf39a00ff + +/* P2_ERRCNT10 */ +#define RSTV0910_P2_ERRCNT10 0xf39b +#define FSTV0910_P2_ERR_CNT10 0xf39b00ff + +/* P2_ERRCTRL2 */ +#define RSTV0910_P2_ERRCTRL2 0xf39c +#define FSTV0910_P2_ERR_SOURCE2 0xf39c40f0 +#define FSTV0910_P2_NUM_EVENT2 0xf39c0007 + +/* P2_ERRCNT22 */ +#define RSTV0910_P2_ERRCNT22 0xf39d +#define FSTV0910_P2_ERRCNT2_OLDVALUE 0xf39d7080 +#define FSTV0910_P2_ERR_CNT22 0xf39d007f + +/* P2_ERRCNT21 */ +#define RSTV0910_P2_ERRCNT21 0xf39e +#define FSTV0910_P2_ERR_CNT21 0xf39e00ff + +/* P2_ERRCNT20 */ +#define RSTV0910_P2_ERRCNT20 0xf39f +#define FSTV0910_P2_ERR_CNT20 0xf39f00ff + +/* P2_FECSPY */ +#define RSTV0910_P2_FECSPY 0xf3a0 +#define FSTV0910_P2_SPY_ENABLE 0xf3a07080 +#define FSTV0910_P2_NO_SYNCBYTE 0xf3a06040 +#define FSTV0910_P2_SERIAL_MODE 0xf3a05020 +#define FSTV0910_P2_UNUSUAL_PACKET 0xf3a04010 +#define FSTV0910_P2_BERMETER_DATAMODE 0xf3a0200c +#define FSTV0910_P2_BERMETER_LMODE 0xf3a01002 +#define FSTV0910_P2_BERMETER_RESET 0xf3a00001 + +/* P2_FSPYCFG */ +#define RSTV0910_P2_FSPYCFG 0xf3a1 +#define FSTV0910_P2_FECSPY_INPUT 0xf3a160c0 +#define FSTV0910_P2_RST_ON_ERROR 0xf3a15020 +#define FSTV0910_P2_ONE_SHOT 0xf3a14010 +#define FSTV0910_P2_I2C_MODE 0xf3a1200c +#define FSTV0910_P2_SPY_HYSTERESIS 0xf3a10003 + +/* P2_FSPYDATA */ +#define RSTV0910_P2_FSPYDATA 0xf3a2 +#define FSTV0910_P2_SPY_STUFFING 0xf3a27080 +#define FSTV0910_P2_SPY_CNULLPKT 0xf3a25020 +#define FSTV0910_P2_SPY_OUTDATA_MODE 0xf3a2001f + +/* P2_FSPYOUT */ +#define RSTV0910_P2_FSPYOUT 0xf3a3 +#define FSTV0910_P2_FSPY_DIRECT 0xf3a37080 +#define FSTV0910_P2_STUFF_MODE 0xf3a30007 + +/* P2_FSTATUS */ +#define RSTV0910_P2_FSTATUS 0xf3a4 +#define FSTV0910_P2_SPY_ENDSIM 0xf3a47080 +#define FSTV0910_P2_VALID_SIM 0xf3a46040 +#define FSTV0910_P2_FOUND_SIGNAL 0xf3a45020 +#define FSTV0910_P2_DSS_SYNCBYTE 0xf3a44010 +#define FSTV0910_P2_RESULT_STATE 0xf3a4000f + +/* P2_FBERCPT4 */ +#define RSTV0910_P2_FBERCPT4 0xf3a8 +#define FSTV0910_P2_FBERMETER_CPT4 0xf3a800ff + +/* P2_FBERCPT3 */ +#define RSTV0910_P2_FBERCPT3 0xf3a9 +#define FSTV0910_P2_FBERMETER_CPT3 0xf3a900ff + +/* P2_FBERCPT2 */ +#define RSTV0910_P2_FBERCPT2 0xf3aa +#define FSTV0910_P2_FBERMETER_CPT2 0xf3aa00ff + +/* P2_FBERCPT1 */ +#define RSTV0910_P2_FBERCPT1 0xf3ab +#define FSTV0910_P2_FBERMETER_CPT1 0xf3ab00ff + +/* P2_FBERCPT0 */ +#define RSTV0910_P2_FBERCPT0 0xf3ac +#define FSTV0910_P2_FBERMETER_CPT0 0xf3ac00ff + +/* P2_FBERERR2 */ +#define RSTV0910_P2_FBERERR2 0xf3ad +#define FSTV0910_P2_FBERMETER_ERR2 0xf3ad00ff + +/* P2_FBERERR1 */ +#define RSTV0910_P2_FBERERR1 0xf3ae +#define FSTV0910_P2_FBERMETER_ERR1 0xf3ae00ff + +/* P2_FBERERR0 */ +#define RSTV0910_P2_FBERERR0 0xf3af +#define FSTV0910_P2_FBERMETER_ERR0 0xf3af00ff + +/* P2_FSPYBER */ +#define RSTV0910_P2_FSPYBER 0xf3b2 +#define FSTV0910_P2_FSPYBER_SYNCBYTE 0xf3b24010 +#define FSTV0910_P2_FSPYBER_UNSYNC 0xf3b23008 +#define FSTV0910_P2_FSPYBER_CTIME 0xf3b20007 + +/* P2_SFERROR */ +#define RSTV0910_P2_SFERROR 0xf3c1 +#define FSTV0910_P2_SFEC_REGERR_VIT 0xf3c100ff + +/* P2_SFECSTATUS */ +#define RSTV0910_P2_SFECSTATUS 0xf3c3 +#define FSTV0910_P2_SFEC_ON 0xf3c37080 +#define FSTV0910_P2_SFEC_OFF 0xf3c36040 +#define FSTV0910_P2_LOCKEDSFEC 0xf3c33008 +#define FSTV0910_P2_SFEC_DELOCK 0xf3c32004 +#define FSTV0910_P2_SFEC_DEMODSEL 0xf3c31002 +#define FSTV0910_P2_SFEC_OVFON 0xf3c30001 + +/* P2_SFKDIV12 */ +#define RSTV0910_P2_SFKDIV12 0xf3c4 +#define FSTV0910_P2_SFECKDIV12_MAN 0xf3c47080 + +/* P2_SFKDIV23 */ +#define RSTV0910_P2_SFKDIV23 0xf3c5 +#define FSTV0910_P2_SFECKDIV23_MAN 0xf3c57080 + +/* P2_SFKDIV34 */ +#define RSTV0910_P2_SFKDIV34 0xf3c6 +#define FSTV0910_P2_SFECKDIV34_MAN 0xf3c67080 + +/* P2_SFKDIV56 */ +#define RSTV0910_P2_SFKDIV56 0xf3c7 +#define FSTV0910_P2_SFECKDIV56_MAN 0xf3c77080 + +/* P2_SFKDIV67 */ +#define RSTV0910_P2_SFKDIV67 0xf3c8 +#define FSTV0910_P2_SFECKDIV67_MAN 0xf3c87080 + +/* P2_SFKDIV78 */ +#define RSTV0910_P2_SFKDIV78 0xf3c9 +#define FSTV0910_P2_SFECKDIV78_MAN 0xf3c97080 + +/* P2_SFSTATUS */ +#define RSTV0910_P2_SFSTATUS 0xf3cc +#define FSTV0910_P2_SFEC_LINEOK 0xf3cc7080 +#define FSTV0910_P2_SFEC_ERROR 0xf3cc6040 +#define FSTV0910_P2_SFEC_DATA7 0xf3cc5020 +#define FSTV0910_P2_SFEC_PKTDNBRFAIL 0xf3cc4010 +#define FSTV0910_P2_TSSFEC_DEMODSEL 0xf3cc3008 +#define FSTV0910_P2_SFEC_NOSYNC 0xf3cc2004 +#define FSTV0910_P2_SFEC_UNREGULA 0xf3cc1002 +#define FSTV0910_P2_SFEC_READY 0xf3cc0001 + +/* P2_SFDLYSET2 */ +#define RSTV0910_P2_SFDLYSET2 0xf3d0 +#define FSTV0910_P2_SFEC_DISABLE 0xf3d01002 + +/* P2_SFERRCTRL */ +#define RSTV0910_P2_SFERRCTRL 0xf3d8 +#define FSTV0910_P2_SFEC_ERR_SOURCE 0xf3d840f0 +#define FSTV0910_P2_SFEC_NUM_EVENT 0xf3d80007 + +/* P2_SFERRCNT2 */ +#define RSTV0910_P2_SFERRCNT2 0xf3d9 +#define FSTV0910_P2_SFERRC_OLDVALUE 0xf3d97080 +#define FSTV0910_P2_SFEC_ERR_CNT2 0xf3d9007f + +/* P2_SFERRCNT1 */ +#define RSTV0910_P2_SFERRCNT1 0xf3da +#define FSTV0910_P2_SFEC_ERR_CNT1 0xf3da00ff + +/* P2_SFERRCNT0 */ +#define RSTV0910_P2_SFERRCNT0 0xf3db +#define FSTV0910_P2_SFEC_ERR_CNT0 0xf3db00ff + +/* P1_IQCONST */ +#define RSTV0910_P1_IQCONST 0xf400 +#define FSTV0910_P1_CONSTEL_SELECT 0xf4005060 +#define FSTV0910_P1_IQSYMB_SEL 0xf400001f + +/* P1_NOSCFG */ +#define RSTV0910_P1_NOSCFG 0xf401 +#define FSTV0910_P1_DUMMYPL_NOSDATA 0xf4015020 +#define FSTV0910_P1_NOSPLH_BETA 0xf4013018 +#define FSTV0910_P1_NOSDATA_BETA 0xf4010007 + +/* P1_ISYMB */ +#define RSTV0910_P1_ISYMB 0xf402 +#define FSTV0910_P1_I_SYMBOL 0xf40201ff + +/* P1_QSYMB */ +#define RSTV0910_P1_QSYMB 0xf403 +#define FSTV0910_P1_Q_SYMBOL 0xf40301ff + +/* P1_AGC1CFG */ +#define RSTV0910_P1_AGC1CFG 0xf404 +#define FSTV0910_P1_DC_FROZEN 0xf4047080 +#define FSTV0910_P1_DC_CORRECT 0xf4046040 +#define FSTV0910_P1_AMM_FROZEN 0xf4045020 +#define FSTV0910_P1_AMM_CORRECT 0xf4044010 +#define FSTV0910_P1_QUAD_FROZEN 0xf4043008 +#define FSTV0910_P1_QUAD_CORRECT 0xf4042004 + +/* P1_AGC1CN */ +#define RSTV0910_P1_AGC1CN 0xf406 +#define FSTV0910_P1_AGC1_LOCKED 0xf4067080 +#define FSTV0910_P1_AGC1_MINPOWER 0xf4064010 +#define FSTV0910_P1_AGCOUT_FAST 0xf4063008 +#define FSTV0910_P1_AGCIQ_BETA 0xf4060007 + +/* P1_AGC1REF */ +#define RSTV0910_P1_AGC1REF 0xf407 +#define FSTV0910_P1_AGCIQ_REF 0xf40700ff + +/* P1_IDCCOMP */ +#define RSTV0910_P1_IDCCOMP 0xf408 +#define FSTV0910_P1_IAVERAGE_ADJ 0xf40801ff + +/* P1_QDCCOMP */ +#define RSTV0910_P1_QDCCOMP 0xf409 +#define FSTV0910_P1_QAVERAGE_ADJ 0xf40901ff + +/* P1_POWERI */ +#define RSTV0910_P1_POWERI 0xf40a +#define FSTV0910_P1_POWER_I 0xf40a00ff + +/* P1_POWERQ */ +#define RSTV0910_P1_POWERQ 0xf40b +#define FSTV0910_P1_POWER_Q 0xf40b00ff + +/* P1_AGC1AMM */ +#define RSTV0910_P1_AGC1AMM 0xf40c +#define FSTV0910_P1_AMM_VALUE 0xf40c00ff + +/* P1_AGC1QUAD */ +#define RSTV0910_P1_AGC1QUAD 0xf40d +#define FSTV0910_P1_QUAD_VALUE 0xf40d01ff + +/* P1_AGCIQIN1 */ +#define RSTV0910_P1_AGCIQIN1 0xf40e +#define FSTV0910_P1_AGCIQ_VALUE1 0xf40e00ff + +/* P1_AGCIQIN0 */ +#define RSTV0910_P1_AGCIQIN0 0xf40f +#define FSTV0910_P1_AGCIQ_VALUE0 0xf40f00ff + +/* P1_DEMOD */ +#define RSTV0910_P1_DEMOD 0xf410 +#define FSTV0910_P1_MANUALS2_ROLLOFF 0xf4107080 +#define FSTV0910_P1_SPECINV_CONTROL 0xf4104030 +#define FSTV0910_P1_MANUALSX_ROLLOFF 0xf4102004 +#define FSTV0910_P1_ROLLOFF_CONTROL 0xf4100003 + +/* P1_DMDMODCOD */ +#define RSTV0910_P1_DMDMODCOD 0xf411 +#define FSTV0910_P1_MANUAL_MODCOD 0xf4117080 +#define FSTV0910_P1_DEMOD_MODCOD 0xf411207c +#define FSTV0910_P1_DEMOD_TYPE 0xf4110003 + +/* P1_DSTATUS */ +#define RSTV0910_P1_DSTATUS 0xf412 +#define FSTV0910_P1_CAR_LOCK 0xf4127080 +#define FSTV0910_P1_TMGLOCK_QUALITY 0xf4125060 +#define FSTV0910_P1_LOCK_DEFINITIF 0xf4123008 +#define FSTV0910_P1_OVADC_DETECT 0xf4120001 + +/* P1_DSTATUS2 */ +#define RSTV0910_P1_DSTATUS2 0xf413 +#define FSTV0910_P1_DEMOD_DELOCK 0xf4137080 +#define FSTV0910_P1_MODCODRQ_SYNCTAG 0xf4135020 +#define FSTV0910_P1_POLYPH_SATEVENT 0xf4134010 +#define FSTV0910_P1_AGC1_NOSIGNALACK 0xf4133008 +#define FSTV0910_P1_AGC2_OVERFLOW 0xf4132004 +#define FSTV0910_P1_CFR_OVERFLOW 0xf4131002 +#define FSTV0910_P1_GAMMA_OVERUNDER 0xf4130001 + +/* P1_DMDCFGMD */ +#define RSTV0910_P1_DMDCFGMD 0xf414 +#define FSTV0910_P1_DVBS2_ENABLE 0xf4147080 +#define FSTV0910_P1_DVBS1_ENABLE 0xf4146040 +#define FSTV0910_P1_SCAN_ENABLE 0xf4144010 +#define FSTV0910_P1_CFR_AUTOSCAN 0xf4143008 +#define FSTV0910_P1_TUN_RNG 0xf4140003 + +/* P1_DMDCFG2 */ +#define RSTV0910_P1_DMDCFG2 0xf415 +#define FSTV0910_P1_S1S2_SEQUENTIAL 0xf4156040 +#define FSTV0910_P1_INFINITE_RELOCK 0xf4154010 + +/* P1_DMDISTATE */ +#define RSTV0910_P1_DMDISTATE 0xf416 +#define FSTV0910_P1_I2C_NORESETDMODE 0xf4167080 +#define FSTV0910_P1_I2C_DEMOD_MODE 0xf416001f + +/* P1_DMDT0M */ +#define RSTV0910_P1_DMDT0M 0xf417 +#define FSTV0910_P1_DMDT0_MIN 0xf41700ff + +/* P1_DMDSTATE */ +#define RSTV0910_P1_DMDSTATE 0xf41b +#define FSTV0910_P1_HEADER_MODE 0xf41b5060 + +/* P1_DMDFLYW */ +#define RSTV0910_P1_DMDFLYW 0xf41c +#define FSTV0910_P1_I2C_IRQVAL 0xf41c40f0 +#define FSTV0910_P1_FLYWHEEL_CPT 0xf41c000f + +/* P1_DSTATUS3 */ +#define RSTV0910_P1_DSTATUS3 0xf41d +#define FSTV0910_P1_CFR_ZIGZAG 0xf41d7080 +#define FSTV0910_P1_DEMOD_CFGMODE 0xf41d5060 +#define FSTV0910_P1_GAMMA_LOWBAUDRATE 0xf41d4010 + +/* P1_DMDCFG3 */ +#define RSTV0910_P1_DMDCFG3 0xf41e +#define FSTV0910_P1_NOSTOP_FIFOFULL 0xf41e3008 + +/* P1_DMDCFG4 */ +#define RSTV0910_P1_DMDCFG4 0xf41f +#define FSTV0910_P1_DIS_VITLOCK 0xf41f7080 +#define FSTV0910_P1_DIS_CLKENABLE 0xf41f2004 + +/* P1_CORRELMANT */ +#define RSTV0910_P1_CORRELMANT 0xf420 +#define FSTV0910_P1_CORREL_MANT 0xf42000ff + +/* P1_CORRELABS */ +#define RSTV0910_P1_CORRELABS 0xf421 +#define FSTV0910_P1_CORREL_ABS 0xf42100ff + +/* P1_CORRELEXP */ +#define RSTV0910_P1_CORRELEXP 0xf422 +#define FSTV0910_P1_CORREL_ABSEXP 0xf42240f0 +#define FSTV0910_P1_CORREL_EXP 0xf422000f + +/* P1_PLHMODCOD */ +#define RSTV0910_P1_PLHMODCOD 0xf424 +#define FSTV0910_P1_SPECINV_DEMOD 0xf4247080 +#define FSTV0910_P1_PLH_MODCOD 0xf424207c +#define FSTV0910_P1_PLH_TYPE 0xf4240003 + +/* P1_DMDREG */ +#define RSTV0910_P1_DMDREG 0xf425 +#define FSTV0910_P1_DECIM_PLFRAMES 0xf4250001 + +/* P1_AGCNADJ */ +#define RSTV0910_P1_AGCNADJ 0xf426 +#define FSTV0910_P1_RADJOFF_AGC2 0xf4267080 +#define FSTV0910_P1_RADJOFF_AGC1 0xf4266040 +#define FSTV0910_P1_AGC_NADJ 0xf426013f + +/* P1_AGCKS */ +#define RSTV0910_P1_AGCKS 0xf427 +#define FSTV0910_P1_RSADJ_MANUALCFG 0xf4277080 +#define FSTV0910_P1_RSADJ_CCMMODE 0xf4276040 +#define FSTV0910_P1_RADJ_SPSK 0xf427013f + +/* P1_AGCKQ */ +#define RSTV0910_P1_AGCKQ 0xf428 +#define FSTV0910_P1_RADJON_DVBS1 0xf4286040 +#define FSTV0910_P1_RADJ_QPSK 0xf428013f + +/* P1_AGCK8 */ +#define RSTV0910_P1_AGCK8 0xf429 +#define FSTV0910_P1_RADJ_8PSK 0xf429013f + +/* P1_AGCK16 */ +#define RSTV0910_P1_AGCK16 0xf42a +#define FSTV0910_P1_R2ADJOFF_16APSK 0xf42a6040 +#define FSTV0910_P1_R1ADJOFF_16APSK 0xf42a5020 +#define FSTV0910_P1_RADJ_16APSK 0xf42a011f + +/* P1_AGCK32 */ +#define RSTV0910_P1_AGCK32 0xf42b +#define FSTV0910_P1_R3ADJOFF_32APSK 0xf42b7080 +#define FSTV0910_P1_R2ADJOFF_32APSK 0xf42b6040 +#define FSTV0910_P1_R1ADJOFF_32APSK 0xf42b5020 +#define FSTV0910_P1_RADJ_32APSK 0xf42b011f + +/* P1_AGC2O */ +#define RSTV0910_P1_AGC2O 0xf42c +#define FSTV0910_P1_CSTENV_MODE 0xf42c60c0 +#define FSTV0910_P1_AGC2_COEF 0xf42c0007 + +/* P1_AGC2REF */ +#define RSTV0910_P1_AGC2REF 0xf42d +#define FSTV0910_P1_AGC2_REF 0xf42d00ff + +/* P1_AGC1ADJ */ +#define RSTV0910_P1_AGC1ADJ 0xf42e +#define FSTV0910_P1_AGC1_ADJUSTED 0xf42e007f + +/* P1_AGCRSADJ */ +#define RSTV0910_P1_AGCRSADJ 0xf42f +#define FSTV0910_P1_RS_ADJUSTED 0xf42f007f + +/* P1_AGCRQADJ */ +#define RSTV0910_P1_AGCRQADJ 0xf430 +#define FSTV0910_P1_RQ_ADJUSTED 0xf430007f + +/* P1_AGCR8ADJ */ +#define RSTV0910_P1_AGCR8ADJ 0xf431 +#define FSTV0910_P1_R8_ADJUSTED 0xf431007f + +/* P1_AGCR1ADJ */ +#define RSTV0910_P1_AGCR1ADJ 0xf432 +#define FSTV0910_P1_R1_ADJUSTED 0xf432007f + +/* P1_AGCR2ADJ */ +#define RSTV0910_P1_AGCR2ADJ 0xf433 +#define FSTV0910_P1_R2_ADJUSTED 0xf433007f + +/* P1_AGCR3ADJ */ +#define RSTV0910_P1_AGCR3ADJ 0xf434 +#define FSTV0910_P1_R3_ADJUSTED 0xf434007f + +/* P1_AGCREFADJ */ +#define RSTV0910_P1_AGCREFADJ 0xf435 +#define FSTV0910_P1_AGC2REF_ADJUSTED 0xf435007f + +/* P1_AGC2I1 */ +#define RSTV0910_P1_AGC2I1 0xf436 +#define FSTV0910_P1_AGC2_INTEGRATOR1 0xf43600ff + +/* P1_AGC2I0 */ +#define RSTV0910_P1_AGC2I0 0xf437 +#define FSTV0910_P1_AGC2_INTEGRATOR0 0xf43700ff + +/* P1_CARCFG */ +#define RSTV0910_P1_CARCFG 0xf438 +#define FSTV0910_P1_ROTAON 0xf4382004 +#define FSTV0910_P1_PH_DET_ALGO 0xf4380003 + +/* P1_ACLC */ +#define RSTV0910_P1_ACLC 0xf439 +#define FSTV0910_P1_CAR_ALPHA_MANT 0xf4394030 +#define FSTV0910_P1_CAR_ALPHA_EXP 0xf439000f + +/* P1_BCLC */ +#define RSTV0910_P1_BCLC 0xf43a +#define FSTV0910_P1_CAR_BETA_MANT 0xf43a4030 +#define FSTV0910_P1_CAR_BETA_EXP 0xf43a000f + +/* P1_ACLCS2 */ +#define RSTV0910_P1_ACLCS2 0xf43b +#define FSTV0910_P1_CARS2_APLHA_MANTISSE 0xf43b4030 +#define FSTV0910_P1_CARS2_ALPHA_EXP 0xf43b000f + +/* P1_BCLCS2 */ +#define RSTV0910_P1_BCLCS2 0xf43c +#define FSTV0910_P1_CARS2_BETA_MANTISSE 0xf43c4030 +#define FSTV0910_P1_CARS2_BETA_EXP 0xf43c000f + +/* P1_CARFREQ */ +#define RSTV0910_P1_CARFREQ 0xf43d +#define FSTV0910_P1_KC_COARSE_EXP 0xf43d40f0 +#define FSTV0910_P1_BETA_FREQ 0xf43d000f + +/* P1_CARHDR */ +#define RSTV0910_P1_CARHDR 0xf43e +#define FSTV0910_P1_K_FREQ_HDR 0xf43e00ff + +/* P1_LDT */ +#define RSTV0910_P1_LDT 0xf43f +#define FSTV0910_P1_CARLOCK_THRES 0xf43f01ff + +/* P1_LDT2 */ +#define RSTV0910_P1_LDT2 0xf440 +#define FSTV0910_P1_CARLOCK_THRES2 0xf44001ff + +/* P1_CFRICFG */ +#define RSTV0910_P1_CFRICFG 0xf441 +#define FSTV0910_P1_NEG_CFRSTEP 0xf4410001 + +/* P1_CFRUP1 */ +#define RSTV0910_P1_CFRUP1 0xf442 +#define FSTV0910_P1_CFR_UP1 0xf44201ff + +/* P1_CFRUP0 */ +#define RSTV0910_P1_CFRUP0 0xf443 +#define FSTV0910_P1_CFR_UP0 0xf44300ff + +/* P1_CFRIBASE1 */ +#define RSTV0910_P1_CFRIBASE1 0xf444 +#define FSTV0910_P1_CFRINIT_BASE1 0xf44400ff + +/* P1_CFRIBASE0 */ +#define RSTV0910_P1_CFRIBASE0 0xf445 +#define FSTV0910_P1_CFRINIT_BASE0 0xf44500ff + +/* P1_CFRLOW1 */ +#define RSTV0910_P1_CFRLOW1 0xf446 +#define FSTV0910_P1_CFR_LOW1 0xf44601ff + +/* P1_CFRLOW0 */ +#define RSTV0910_P1_CFRLOW0 0xf447 +#define FSTV0910_P1_CFR_LOW0 0xf44700ff + +/* P1_CFRINIT1 */ +#define RSTV0910_P1_CFRINIT1 0xf448 +#define FSTV0910_P1_CFR_INIT1 0xf44801ff + +/* P1_CFRINIT0 */ +#define RSTV0910_P1_CFRINIT0 0xf449 +#define FSTV0910_P1_CFR_INIT0 0xf44900ff + +/* P1_CFRINC1 */ +#define RSTV0910_P1_CFRINC1 0xf44a +#define FSTV0910_P1_MANUAL_CFRINC 0xf44a7080 +#define FSTV0910_P1_CFR_INC1 0xf44a003f + +/* P1_CFRINC0 */ +#define RSTV0910_P1_CFRINC0 0xf44b +#define FSTV0910_P1_CFR_INC0 0xf44b00ff + +/* P1_CFR2 */ +#define RSTV0910_P1_CFR2 0xf44c +#define FSTV0910_P1_CAR_FREQ2 0xf44c01ff + +/* P1_CFR1 */ +#define RSTV0910_P1_CFR1 0xf44d +#define FSTV0910_P1_CAR_FREQ1 0xf44d00ff + +/* P1_CFR0 */ +#define RSTV0910_P1_CFR0 0xf44e +#define FSTV0910_P1_CAR_FREQ0 0xf44e00ff + +/* P1_LDI */ +#define RSTV0910_P1_LDI 0xf44f +#define FSTV0910_P1_LOCK_DET_INTEGR 0xf44f01ff + +/* P1_TMGCFG */ +#define RSTV0910_P1_TMGCFG 0xf450 +#define FSTV0910_P1_TMGLOCK_BETA 0xf45060c0 +#define FSTV0910_P1_DO_TIMING_CORR 0xf4504010 +#define FSTV0910_P1_TMG_MINFREQ 0xf4500003 + +/* P1_RTC */ +#define RSTV0910_P1_RTC 0xf451 +#define FSTV0910_P1_TMGALPHA_EXP 0xf45140f0 +#define FSTV0910_P1_TMGBETA_EXP 0xf451000f + +/* P1_RTCS2 */ +#define RSTV0910_P1_RTCS2 0xf452 +#define FSTV0910_P1_TMGALPHAS2_EXP 0xf45240f0 +#define FSTV0910_P1_TMGBETAS2_EXP 0xf452000f + +/* P1_TMGTHRISE */ +#define RSTV0910_P1_TMGTHRISE 0xf453 +#define FSTV0910_P1_TMGLOCK_THRISE 0xf45300ff + +/* P1_TMGTHFALL */ +#define RSTV0910_P1_TMGTHFALL 0xf454 +#define FSTV0910_P1_TMGLOCK_THFALL 0xf45400ff + +/* P1_SFRUPRATIO */ +#define RSTV0910_P1_SFRUPRATIO 0xf455 +#define FSTV0910_P1_SFR_UPRATIO 0xf45500ff + +/* P1_SFRLOWRATIO */ +#define RSTV0910_P1_SFRLOWRATIO 0xf456 +#define FSTV0910_P1_SFR_LOWRATIO 0xf45600ff + +/* P1_KTTMG */ +#define RSTV0910_P1_KTTMG 0xf457 +#define FSTV0910_P1_KT_TMG_EXP 0xf45740f0 + +/* P1_KREFTMG */ +#define RSTV0910_P1_KREFTMG 0xf458 +#define FSTV0910_P1_KREF_TMG 0xf45800ff + +/* P1_SFRSTEP */ +#define RSTV0910_P1_SFRSTEP 0xf459 +#define FSTV0910_P1_SFR_SCANSTEP 0xf45940f0 +#define FSTV0910_P1_SFR_CENTERSTEP 0xf459000f + +/* P1_TMGCFG2 */ +#define RSTV0910_P1_TMGCFG2 0xf45a +#define FSTV0910_P1_DIS_AUTOSAMP 0xf45a3008 +#define FSTV0910_P1_SFRRATIO_FINE 0xf45a0001 + +/* P1_KREFTMG2 */ +#define RSTV0910_P1_KREFTMG2 0xf45b +#define FSTV0910_P1_KREF_TMG2 0xf45b00ff + +/* P1_TMGCFG3 */ +#define RSTV0910_P1_TMGCFG3 0xf45d +#define FSTV0910_P1_CONT_TMGCENTER 0xf45d3008 +#define FSTV0910_P1_AUTO_GUP 0xf45d2004 +#define FSTV0910_P1_AUTO_GLOW 0xf45d1002 + +/* P1_SFRINIT1 */ +#define RSTV0910_P1_SFRINIT1 0xf45e +#define FSTV0910_P1_SFR_INIT1 0xf45e00ff + +/* P1_SFRINIT0 */ +#define RSTV0910_P1_SFRINIT0 0xf45f +#define FSTV0910_P1_SFR_INIT0 0xf45f00ff + +/* P1_SFRUP1 */ +#define RSTV0910_P1_SFRUP1 0xf460 +#define FSTV0910_P1_SYMB_FREQ_UP1 0xf46000ff + +/* P1_SFRUP0 */ +#define RSTV0910_P1_SFRUP0 0xf461 +#define FSTV0910_P1_SYMB_FREQ_UP0 0xf46100ff + +/* P1_SFRLOW1 */ +#define RSTV0910_P1_SFRLOW1 0xf462 +#define FSTV0910_P1_SYMB_FREQ_LOW1 0xf46200ff + +/* P1_SFRLOW0 */ +#define RSTV0910_P1_SFRLOW0 0xf463 +#define FSTV0910_P1_SYMB_FREQ_LOW0 0xf46300ff + +/* P1_SFR3 */ +#define RSTV0910_P1_SFR3 0xf464 +#define FSTV0910_P1_SYMB_FREQ3 0xf46400ff + +/* P1_SFR2 */ +#define RSTV0910_P1_SFR2 0xf465 +#define FSTV0910_P1_SYMB_FREQ2 0xf46500ff + +/* P1_SFR1 */ +#define RSTV0910_P1_SFR1 0xf466 +#define FSTV0910_P1_SYMB_FREQ1 0xf46600ff + +/* P1_SFR0 */ +#define RSTV0910_P1_SFR0 0xf467 +#define FSTV0910_P1_SYMB_FREQ0 0xf46700ff + +/* P1_TMGREG2 */ +#define RSTV0910_P1_TMGREG2 0xf468 +#define FSTV0910_P1_TMGREG2 0xf46800ff + +/* P1_TMGREG1 */ +#define RSTV0910_P1_TMGREG1 0xf469 +#define FSTV0910_P1_TMGREG1 0xf46900ff + +/* P1_TMGREG0 */ +#define RSTV0910_P1_TMGREG0 0xf46a +#define FSTV0910_P1_TMGREG0 0xf46a00ff + +/* P1_TMGLOCK1 */ +#define RSTV0910_P1_TMGLOCK1 0xf46b +#define FSTV0910_P1_TMGLOCK_LEVEL1 0xf46b01ff + +/* P1_TMGLOCK0 */ +#define RSTV0910_P1_TMGLOCK0 0xf46c +#define FSTV0910_P1_TMGLOCK_LEVEL0 0xf46c00ff + +/* P1_TMGOBS */ +#define RSTV0910_P1_TMGOBS 0xf46d +#define FSTV0910_P1_ROLLOFF_STATUS 0xf46d60c0 + +/* P1_EQUALCFG */ +#define RSTV0910_P1_EQUALCFG 0xf46f +#define FSTV0910_P1_EQUAL_ON 0xf46f6040 +#define FSTV0910_P1_MU_EQUALDFE 0xf46f0007 + +/* P1_EQUAI1 */ +#define RSTV0910_P1_EQUAI1 0xf470 +#define FSTV0910_P1_EQUA_ACCI1 0xf47001ff + +/* P1_EQUAQ1 */ +#define RSTV0910_P1_EQUAQ1 0xf471 +#define FSTV0910_P1_EQUA_ACCQ1 0xf47101ff + +/* P1_EQUAI2 */ +#define RSTV0910_P1_EQUAI2 0xf472 +#define FSTV0910_P1_EQUA_ACCI2 0xf47201ff + +/* P1_EQUAQ2 */ +#define RSTV0910_P1_EQUAQ2 0xf473 +#define FSTV0910_P1_EQUA_ACCQ2 0xf47301ff + +/* P1_EQUAI3 */ +#define RSTV0910_P1_EQUAI3 0xf474 +#define FSTV0910_P1_EQUA_ACCI3 0xf47401ff + +/* P1_EQUAQ3 */ +#define RSTV0910_P1_EQUAQ3 0xf475 +#define FSTV0910_P1_EQUA_ACCQ3 0xf47501ff + +/* P1_EQUAI4 */ +#define RSTV0910_P1_EQUAI4 0xf476 +#define FSTV0910_P1_EQUA_ACCI4 0xf47601ff + +/* P1_EQUAQ4 */ +#define RSTV0910_P1_EQUAQ4 0xf477 +#define FSTV0910_P1_EQUA_ACCQ4 0xf47701ff + +/* P1_EQUAI5 */ +#define RSTV0910_P1_EQUAI5 0xf478 +#define FSTV0910_P1_EQUA_ACCI5 0xf47801ff + +/* P1_EQUAQ5 */ +#define RSTV0910_P1_EQUAQ5 0xf479 +#define FSTV0910_P1_EQUA_ACCQ5 0xf47901ff + +/* P1_EQUAI6 */ +#define RSTV0910_P1_EQUAI6 0xf47a +#define FSTV0910_P1_EQUA_ACCI6 0xf47a01ff + +/* P1_EQUAQ6 */ +#define RSTV0910_P1_EQUAQ6 0xf47b +#define FSTV0910_P1_EQUA_ACCQ6 0xf47b01ff + +/* P1_EQUAI7 */ +#define RSTV0910_P1_EQUAI7 0xf47c +#define FSTV0910_P1_EQUA_ACCI7 0xf47c01ff + +/* P1_EQUAQ7 */ +#define RSTV0910_P1_EQUAQ7 0xf47d +#define FSTV0910_P1_EQUA_ACCQ7 0xf47d01ff + +/* P1_EQUAI8 */ +#define RSTV0910_P1_EQUAI8 0xf47e +#define FSTV0910_P1_EQUA_ACCI8 0xf47e01ff + +/* P1_EQUAQ8 */ +#define RSTV0910_P1_EQUAQ8 0xf47f +#define FSTV0910_P1_EQUA_ACCQ8 0xf47f01ff + +/* P1_NNOSDATAT1 */ +#define RSTV0910_P1_NNOSDATAT1 0xf480 +#define FSTV0910_P1_NOSDATAT_NORMED1 0xf48000ff + +/* P1_NNOSDATAT0 */ +#define RSTV0910_P1_NNOSDATAT0 0xf481 +#define FSTV0910_P1_NOSDATAT_NORMED0 0xf48100ff + +/* P1_NNOSDATA1 */ +#define RSTV0910_P1_NNOSDATA1 0xf482 +#define FSTV0910_P1_NOSDATA_NORMED1 0xf48200ff + +/* P1_NNOSDATA0 */ +#define RSTV0910_P1_NNOSDATA0 0xf483 +#define FSTV0910_P1_NOSDATA_NORMED0 0xf48300ff + +/* P1_NNOSPLHT1 */ +#define RSTV0910_P1_NNOSPLHT1 0xf484 +#define FSTV0910_P1_NOSPLHT_NORMED1 0xf48400ff + +/* P1_NNOSPLHT0 */ +#define RSTV0910_P1_NNOSPLHT0 0xf485 +#define FSTV0910_P1_NOSPLHT_NORMED0 0xf48500ff + +/* P1_NNOSPLH1 */ +#define RSTV0910_P1_NNOSPLH1 0xf486 +#define FSTV0910_P1_NOSPLH_NORMED1 0xf48600ff + +/* P1_NNOSPLH0 */ +#define RSTV0910_P1_NNOSPLH0 0xf487 +#define FSTV0910_P1_NOSPLH_NORMED0 0xf48700ff + +/* P1_NOSDATAT1 */ +#define RSTV0910_P1_NOSDATAT1 0xf488 +#define FSTV0910_P1_NOSDATAT_UNNORMED1 0xf48800ff + +/* P1_NOSDATAT0 */ +#define RSTV0910_P1_NOSDATAT0 0xf489 +#define FSTV0910_P1_NOSDATAT_UNNORMED0 0xf48900ff + +/* P1_NNOSFRAME1 */ +#define RSTV0910_P1_NNOSFRAME1 0xf48a +#define FSTV0910_P1_NOSFRAME_NORMED1 0xf48a00ff + +/* P1_NNOSFRAME0 */ +#define RSTV0910_P1_NNOSFRAME0 0xf48b +#define FSTV0910_P1_NOSFRAME_NORMED0 0xf48b00ff + +/* P1_NNOSRAD1 */ +#define RSTV0910_P1_NNOSRAD1 0xf48c +#define FSTV0910_P1_NOSRADIAL_NORMED1 0xf48c00ff + +/* P1_NNOSRAD0 */ +#define RSTV0910_P1_NNOSRAD0 0xf48d +#define FSTV0910_P1_NOSRADIAL_NORMED0 0xf48d00ff + +/* P1_NOSCFGF1 */ +#define RSTV0910_P1_NOSCFGF1 0xf48e +#define FSTV0910_P1_LOWNOISE_MESURE 0xf48e7080 +#define FSTV0910_P1_NOS_DELFRAME 0xf48e6040 +#define FSTV0910_P1_NOSDATA_MODE 0xf48e4030 +#define FSTV0910_P1_FRAMESEL_TYPESEL 0xf48e200c +#define FSTV0910_P1_FRAMESEL_TYPE 0xf48e0003 + +/* P1_NOSCFGF2 */ +#define RSTV0910_P1_NOSCFGF2 0xf48f +#define FSTV0910_P1_DIS_NOSPILOTS 0xf48f7080 +#define FSTV0910_P1_FRAMESEL_MODCODSEL 0xf48f5060 +#define FSTV0910_P1_FRAMESEL_MODCOD 0xf48f001f + +/* P1_CAR2CFG */ +#define RSTV0910_P1_CAR2CFG 0xf490 +#define FSTV0910_P1_ROTA2ON 0xf4902004 +#define FSTV0910_P1_PH_DET_ALGO2 0xf4900003 + +/* P1_CFR2CFR1 */ +#define RSTV0910_P1_CFR2CFR1 0xf491 +#define FSTV0910_P1_EN_S2CAR2CENTER 0xf4915020 +#define FSTV0910_P1_CFR2TOCFR1_BETA 0xf4910007 + +/* P1_CAR3CFG */ +#define RSTV0910_P1_CAR3CFG 0xf492 +#define FSTV0910_P1_CARRIER23_MODE 0xf49260c0 +#define FSTV0910_P1_CAR3INTERM_DVBS1 0xf4925020 +#define FSTV0910_P1_ABAMPLIF_MODE 0xf4923018 +#define FSTV0910_P1_CARRIER3_ALPHA3DL 0xf4920007 + +/* P1_CFR22 */ +#define RSTV0910_P1_CFR22 0xf493 +#define FSTV0910_P1_CAR2_FREQ2 0xf49301ff + +/* P1_CFR21 */ +#define RSTV0910_P1_CFR21 0xf494 +#define FSTV0910_P1_CAR2_FREQ1 0xf49400ff + +/* P1_CFR20 */ +#define RSTV0910_P1_CFR20 0xf495 +#define FSTV0910_P1_CAR2_FREQ0 0xf49500ff + +/* P1_ACLC2S2Q */ +#define RSTV0910_P1_ACLC2S2Q 0xf497 +#define FSTV0910_P1_ENAB_SPSKSYMB 0xf4977080 +#define FSTV0910_P1_CAR2S2_Q_ALPH_M 0xf4974030 +#define FSTV0910_P1_CAR2S2_Q_ALPH_E 0xf497000f + +/* P1_ACLC2S28 */ +#define RSTV0910_P1_ACLC2S28 0xf498 +#define FSTV0910_P1_CAR2S2_8_ALPH_M 0xf4984030 +#define FSTV0910_P1_CAR2S2_8_ALPH_E 0xf498000f + +/* P1_ACLC2S216A */ +#define RSTV0910_P1_ACLC2S216A 0xf499 +#define FSTV0910_P1_CAR2S2_16A_ALPH_M 0xf4994030 +#define FSTV0910_P1_CAR2S2_16A_ALPH_E 0xf499000f + +/* P1_ACLC2S232A */ +#define RSTV0910_P1_ACLC2S232A 0xf49a +#define FSTV0910_P1_CAR2S2_32A_ALPH_M 0xf49a4030 +#define FSTV0910_P1_CAR2S2_32A_ALPH_E 0xf49a000f + +/* P1_BCLC2S2Q */ +#define RSTV0910_P1_BCLC2S2Q 0xf49c +#define FSTV0910_P1_CAR2S2_Q_BETA_M 0xf49c4030 +#define FSTV0910_P1_CAR2S2_Q_BETA_E 0xf49c000f + +/* P1_BCLC2S28 */ +#define RSTV0910_P1_BCLC2S28 0xf49d +#define FSTV0910_P1_CAR2S2_8_BETA_M 0xf49d4030 +#define FSTV0910_P1_CAR2S2_8_BETA_E 0xf49d000f + +/* P1_BCLC2S216A */ +#define RSTV0910_P1_BCLC2S216A 0xf49e +#define FSTV0910_P1_DVBS2S216A_NIP 0xf49e7080 +#define FSTV0910_P1_CAR2S2_16A_BETA_M 0xf49e4030 +#define FSTV0910_P1_CAR2S2_16A_BETA_E 0xf49e000f + +/* P1_BCLC2S232A */ +#define RSTV0910_P1_BCLC2S232A 0xf49f +#define FSTV0910_P1_DVBS2S232A_NIP 0xf49f7080 +#define FSTV0910_P1_CAR2S2_32A_BETA_M 0xf49f4030 +#define FSTV0910_P1_CAR2S2_32A_BETA_E 0xf49f000f + +/* P1_PLROOT2 */ +#define RSTV0910_P1_PLROOT2 0xf4ac +#define FSTV0910_P1_PLSCRAMB_MODE 0xf4ac200c +#define FSTV0910_P1_PLSCRAMB_ROOT2 0xf4ac0003 + +/* P1_PLROOT1 */ +#define RSTV0910_P1_PLROOT1 0xf4ad +#define FSTV0910_P1_PLSCRAMB_ROOT1 0xf4ad00ff + +/* P1_PLROOT0 */ +#define RSTV0910_P1_PLROOT0 0xf4ae +#define FSTV0910_P1_PLSCRAMB_ROOT0 0xf4ae00ff + +/* P1_MODCODLST0 */ +#define RSTV0910_P1_MODCODLST0 0xf4b0 +#define FSTV0910_P1_NACCES_MODCODCH 0xf4b00001 + +/* P1_MODCODLST1 */ +#define RSTV0910_P1_MODCODLST1 0xf4b1 +#define FSTV0910_P1_SYMBRATE_FILTER 0xf4b13008 +#define FSTV0910_P1_NRESET_MODCODLST 0xf4b12004 +#define FSTV0910_P1_DIS_32PSK_9_10 0xf4b10003 + +/* P1_MODCODLST2 */ +#define RSTV0910_P1_MODCODLST2 0xf4b2 +#define FSTV0910_P1_DIS_32PSK_8_9 0xf4b240f0 +#define FSTV0910_P1_DIS_32PSK_5_6 0xf4b2000f + +/* P1_MODCODLST3 */ +#define RSTV0910_P1_MODCODLST3 0xf4b3 +#define FSTV0910_P1_DIS_32PSK_4_5 0xf4b340f0 +#define FSTV0910_P1_DIS_32PSK_3_4 0xf4b3000f + +/* P1_MODCODLST4 */ +#define RSTV0910_P1_MODCODLST4 0xf4b4 +#define FSTV0910_P1_DUMMYPL_PILOT 0xf4b47080 +#define FSTV0910_P1_DUMMYPL_NOPILOT 0xf4b46040 +#define FSTV0910_P1_DIS_16PSK_9_10 0xf4b44030 +#define FSTV0910_P1_DIS_16PSK_8_9 0xf4b4000f + +/* P1_MODCODLST5 */ +#define RSTV0910_P1_MODCODLST5 0xf4b5 +#define FSTV0910_P1_DIS_16PSK_5_6 0xf4b540f0 +#define FSTV0910_P1_DIS_16PSK_4_5 0xf4b5000f + +/* P1_MODCODLST6 */ +#define RSTV0910_P1_MODCODLST6 0xf4b6 +#define FSTV0910_P1_DIS_16PSK_3_4 0xf4b640f0 +#define FSTV0910_P1_DIS_16PSK_2_3 0xf4b6000f + +/* P1_MODCODLST7 */ +#define RSTV0910_P1_MODCODLST7 0xf4b7 +#define FSTV0910_P1_MODCOD_NNOSFILTER 0xf4b77080 +#define FSTV0910_P1_DIS_8PSK_9_10 0xf4b74030 +#define FSTV0910_P1_DIS_8PSK_8_9 0xf4b7000f + +/* P1_MODCODLST8 */ +#define RSTV0910_P1_MODCODLST8 0xf4b8 +#define FSTV0910_P1_DIS_8PSK_5_6 0xf4b840f0 +#define FSTV0910_P1_DIS_8PSK_3_4 0xf4b8000f + +/* P1_MODCODLST9 */ +#define RSTV0910_P1_MODCODLST9 0xf4b9 +#define FSTV0910_P1_DIS_8PSK_2_3 0xf4b940f0 +#define FSTV0910_P1_DIS_8PSK_3_5 0xf4b9000f + +/* P1_MODCODLSTA */ +#define RSTV0910_P1_MODCODLSTA 0xf4ba +#define FSTV0910_P1_NOSFILTER_LIMITE 0xf4ba7080 +#define FSTV0910_P1_DIS_QPSK_9_10 0xf4ba4030 +#define FSTV0910_P1_DIS_QPSK_8_9 0xf4ba000f + +/* P1_MODCODLSTB */ +#define RSTV0910_P1_MODCODLSTB 0xf4bb +#define FSTV0910_P1_DIS_QPSK_5_6 0xf4bb40f0 +#define FSTV0910_P1_DIS_QPSK_4_5 0xf4bb000f + +/* P1_MODCODLSTC */ +#define RSTV0910_P1_MODCODLSTC 0xf4bc +#define FSTV0910_P1_DIS_QPSK_3_4 0xf4bc40f0 +#define FSTV0910_P1_DIS_QPSK_2_3 0xf4bc000f + +/* P1_MODCODLSTD */ +#define RSTV0910_P1_MODCODLSTD 0xf4bd +#define FSTV0910_P1_DIS_QPSK_3_5 0xf4bd40f0 +#define FSTV0910_P1_DIS_QPSK_1_2 0xf4bd000f + +/* P1_MODCODLSTE */ +#define RSTV0910_P1_MODCODLSTE 0xf4be +#define FSTV0910_P1_DIS_QPSK_2_5 0xf4be40f0 +#define FSTV0910_P1_DIS_QPSK_1_3 0xf4be000f + +/* P1_MODCODLSTF */ +#define RSTV0910_P1_MODCODLSTF 0xf4bf +#define FSTV0910_P1_DIS_QPSK_1_4 0xf4bf40f0 +#define FSTV0910_P1_DEMOD_INVMODLST 0xf4bf3008 +#define FSTV0910_P1_DEMODOUT_ENABLE 0xf4bf2004 +#define FSTV0910_P1_DDEMOD_NSET 0xf4bf1002 +#define FSTV0910_P1_MODCOD_NSTOCK 0xf4bf0001 + +/* P1_GAUSSR0 */ +#define RSTV0910_P1_GAUSSR0 0xf4c0 +#define FSTV0910_P1_EN_CCIMODE 0xf4c07080 +#define FSTV0910_P1_R0_GAUSSIEN 0xf4c0007f + +/* P1_CCIR0 */ +#define RSTV0910_P1_CCIR0 0xf4c1 +#define FSTV0910_P1_CCIDETECT_PLHONLY 0xf4c17080 +#define FSTV0910_P1_R0_CCI 0xf4c1007f + +/* P1_CCIQUANT */ +#define RSTV0910_P1_CCIQUANT 0xf4c2 +#define FSTV0910_P1_CCI_BETA 0xf4c250e0 +#define FSTV0910_P1_CCI_QUANT 0xf4c2001f + +/* P1_CCITHRES */ +#define RSTV0910_P1_CCITHRES 0xf4c3 +#define FSTV0910_P1_CCI_THRESHOLD 0xf4c300ff + +/* P1_CCIACC */ +#define RSTV0910_P1_CCIACC 0xf4c4 +#define FSTV0910_P1_CCI_VALUE 0xf4c400ff + +/* P1_DSTATUS4 */ +#define RSTV0910_P1_DSTATUS4 0xf4c5 +#define FSTV0910_P1_RAINFADE_DETECT 0xf4c57080 +#define FSTV0910_P1_NOTHRES2_FAIL 0xf4c56040 +#define FSTV0910_P1_NOTHRES1_FAIL 0xf4c55020 +#define FSTV0910_P1_DMDPROG_ERROR 0xf4c52004 +#define FSTV0910_P1_CSTENV_DETECT 0xf4c51002 +#define FSTV0910_P1_DETECTION_TRIAX 0xf4c50001 + +/* P1_DMDRESCFG */ +#define RSTV0910_P1_DMDRESCFG 0xf4c6 +#define FSTV0910_P1_DMDRES_RESET 0xf4c67080 +#define FSTV0910_P1_DMDRES_STRALL 0xf4c63008 +#define FSTV0910_P1_DMDRES_NEWONLY 0xf4c62004 +#define FSTV0910_P1_DMDRES_NOSTORE 0xf4c61002 + +/* P1_DMDRESADR */ +#define RSTV0910_P1_DMDRESADR 0xf4c7 +#define FSTV0910_P1_DMDRES_VALIDCFR 0xf4c76040 +#define FSTV0910_P1_DMDRES_MEMFULL 0xf4c74030 +#define FSTV0910_P1_DMDRES_RESNBR 0xf4c7000f + +/* P1_DMDRESDATA7 */ +#define RSTV0910_P1_DMDRESDATA7 0xf4c8 +#define FSTV0910_P1_DMDRES_DATA7 0xf4c800ff + +/* P1_DMDRESDATA6 */ +#define RSTV0910_P1_DMDRESDATA6 0xf4c9 +#define FSTV0910_P1_DMDRES_DATA6 0xf4c900ff + +/* P1_DMDRESDATA5 */ +#define RSTV0910_P1_DMDRESDATA5 0xf4ca +#define FSTV0910_P1_DMDRES_DATA5 0xf4ca00ff + +/* P1_DMDRESDATA4 */ +#define RSTV0910_P1_DMDRESDATA4 0xf4cb +#define FSTV0910_P1_DMDRES_DATA4 0xf4cb00ff + +/* P1_DMDRESDATA3 */ +#define RSTV0910_P1_DMDRESDATA3 0xf4cc +#define FSTV0910_P1_DMDRES_DATA3 0xf4cc00ff + +/* P1_DMDRESDATA2 */ +#define RSTV0910_P1_DMDRESDATA2 0xf4cd +#define FSTV0910_P1_DMDRES_DATA2 0xf4cd00ff + +/* P1_DMDRESDATA1 */ +#define RSTV0910_P1_DMDRESDATA1 0xf4ce +#define FSTV0910_P1_DMDRES_DATA1 0xf4ce00ff + +/* P1_DMDRESDATA0 */ +#define RSTV0910_P1_DMDRESDATA0 0xf4cf +#define FSTV0910_P1_DMDRES_DATA0 0xf4cf00ff + +/* P1_FFEI1 */ +#define RSTV0910_P1_FFEI1 0xf4d0 +#define FSTV0910_P1_FFE_ACCI1 0xf4d001ff + +/* P1_FFEQ1 */ +#define RSTV0910_P1_FFEQ1 0xf4d1 +#define FSTV0910_P1_FFE_ACCQ1 0xf4d101ff + +/* P1_FFEI2 */ +#define RSTV0910_P1_FFEI2 0xf4d2 +#define FSTV0910_P1_FFE_ACCI2 0xf4d201ff + +/* P1_FFEQ2 */ +#define RSTV0910_P1_FFEQ2 0xf4d3 +#define FSTV0910_P1_FFE_ACCQ2 0xf4d301ff + +/* P1_FFEI3 */ +#define RSTV0910_P1_FFEI3 0xf4d4 +#define FSTV0910_P1_FFE_ACCI3 0xf4d401ff + +/* P1_FFEQ3 */ +#define RSTV0910_P1_FFEQ3 0xf4d5 +#define FSTV0910_P1_FFE_ACCQ3 0xf4d501ff + +/* P1_FFEI4 */ +#define RSTV0910_P1_FFEI4 0xf4d6 +#define FSTV0910_P1_FFE_ACCI4 0xf4d601ff + +/* P1_FFEQ4 */ +#define RSTV0910_P1_FFEQ4 0xf4d7 +#define FSTV0910_P1_FFE_ACCQ4 0xf4d701ff + +/* P1_FFECFG */ +#define RSTV0910_P1_FFECFG 0xf4d8 +#define FSTV0910_P1_EQUALFFE_ON 0xf4d86040 +#define FSTV0910_P1_EQUAL_USEDSYMB 0xf4d84030 +#define FSTV0910_P1_MU_EQUALFFE 0xf4d80007 + +/* P1_TNRCFG2 */ +#define RSTV0910_P1_TNRCFG2 0xf4e1 +#define FSTV0910_P1_TUN_IQSWAP 0xf4e17080 + +/* P1_SMAPCOEF7 */ +#define RSTV0910_P1_SMAPCOEF7 0xf500 +#define FSTV0910_P1_DIS_QSCALE 0xf5007080 +#define FSTV0910_P1_SMAPCOEF_Q_LLR12 0xf500017f + +/* P1_SMAPCOEF6 */ +#define RSTV0910_P1_SMAPCOEF6 0xf501 +#define FSTV0910_P1_DIS_AGC2SCALE 0xf5017080 +#define FSTV0910_P1_ADJ_8PSKLLR1 0xf5012004 +#define FSTV0910_P1_OLD_8PSKLLR1 0xf5011002 +#define FSTV0910_P1_DIS_AB8PSK 0xf5010001 + +/* P1_SMAPCOEF5 */ +#define RSTV0910_P1_SMAPCOEF5 0xf502 +#define FSTV0910_P1_DIS_8SCALE 0xf5027080 +#define FSTV0910_P1_SMAPCOEF_8P_LLR23 0xf502017f + +/* P1_SMAPCOEF4 */ +#define RSTV0910_P1_SMAPCOEF4 0xf503 +#define FSTV0910_P1_SMAPCOEF_16APSK_LLR12 0xf503017f + +/* P1_SMAPCOEF3 */ +#define RSTV0910_P1_SMAPCOEF3 0xf504 +#define FSTV0910_P1_SMAPCOEF_16APSK_LLR34 0xf504017f + +/* P1_SMAPCOEF2 */ +#define RSTV0910_P1_SMAPCOEF2 0xf505 +#define FSTV0910_P1_SMAPCOEF_32APSK_R2R3 0xf50541f0 +#define FSTV0910_P1_SMAPCOEF_32APSK_LLR2 0xf505010f + +/* P1_SMAPCOEF1 */ +#define RSTV0910_P1_SMAPCOEF1 0xf506 +#define FSTV0910_P1_DIS_16SCALE 0xf5067080 +#define FSTV0910_P1_SMAPCOEF_32_LLR34 0xf506017f + +/* P1_SMAPCOEF0 */ +#define RSTV0910_P1_SMAPCOEF0 0xf507 +#define FSTV0910_P1_DIS_32SCALE 0xf5077080 +#define FSTV0910_P1_SMAPCOEF_32_LLR15 0xf507017f + +/* P1_NOSTHRES1 */ +#define RSTV0910_P1_NOSTHRES1 0xf509 +#define FSTV0910_P1_NOS_THRESHOLD1 0xf50900ff + +/* P1_NOSTHRES2 */ +#define RSTV0910_P1_NOSTHRES2 0xf50a +#define FSTV0910_P1_NOS_THRESHOLD2 0xf50a00ff + +/* P1_NOSDIFF1 */ +#define RSTV0910_P1_NOSDIFF1 0xf50b +#define FSTV0910_P1_NOSTHRES1_DIFF 0xf50b00ff + +/* P1_RAINFADE */ +#define RSTV0910_P1_RAINFADE 0xf50c +#define FSTV0910_P1_NOSTHRES_DATAT 0xf50c7080 +#define FSTV0910_P1_RAINFADE_CNLIMIT 0xf50c4070 +#define FSTV0910_P1_RAINFADE_TIMEOUT 0xf50c0007 + +/* P1_NOSRAMCFG */ +#define RSTV0910_P1_NOSRAMCFG 0xf50d +#define FSTV0910_P1_NOSRAM_ACTIVATION 0xf50d4030 +#define FSTV0910_P1_NOSRAM_CNRONLY 0xf50d3008 +#define FSTV0910_P1_NOSRAM_LGNCNR1 0xf50d0007 + +/* P1_NOSRAMPOS */ +#define RSTV0910_P1_NOSRAMPOS 0xf50e +#define FSTV0910_P1_NOSRAM_LGNCNR0 0xf50e40f0 +#define FSTV0910_P1_NOSRAM_VALIDE 0xf50e2004 +#define FSTV0910_P1_NOSRAM_CNRVAL1 0xf50e0003 + +/* P1_NOSRAMVAL */ +#define RSTV0910_P1_NOSRAMVAL 0xf50f +#define FSTV0910_P1_NOSRAM_CNRVAL0 0xf50f00ff + +/* P1_DMDPLHSTAT */ +#define RSTV0910_P1_DMDPLHSTAT 0xf520 +#define FSTV0910_P1_PLH_STATISTIC 0xf52000ff + +/* P1_LOCKTIME3 */ +#define RSTV0910_P1_LOCKTIME3 0xf522 +#define FSTV0910_P1_DEMOD_LOCKTIME3 0xf52200ff + +/* P1_LOCKTIME2 */ +#define RSTV0910_P1_LOCKTIME2 0xf523 +#define FSTV0910_P1_DEMOD_LOCKTIME2 0xf52300ff + +/* P1_LOCKTIME1 */ +#define RSTV0910_P1_LOCKTIME1 0xf524 +#define FSTV0910_P1_DEMOD_LOCKTIME1 0xf52400ff + +/* P1_LOCKTIME0 */ +#define RSTV0910_P1_LOCKTIME0 0xf525 +#define FSTV0910_P1_DEMOD_LOCKTIME0 0xf52500ff + +/* P1_VITSCALE */ +#define RSTV0910_P1_VITSCALE 0xf532 +#define FSTV0910_P1_NVTH_NOSRANGE 0xf5327080 +#define FSTV0910_P1_VERROR_MAXMODE 0xf5326040 +#define FSTV0910_P1_NSLOWSN_LOCKED 0xf5323008 +#define FSTV0910_P1_DIS_RSFLOCK 0xf5321002 + +/* P1_FECM */ +#define RSTV0910_P1_FECM 0xf533 +#define FSTV0910_P1_DSS_DVB 0xf5337080 +#define FSTV0910_P1_DSS_SRCH 0xf5334010 +#define FSTV0910_P1_SYNCVIT 0xf5331002 +#define FSTV0910_P1_IQINV 0xf5330001 + +/* P1_VTH12 */ +#define RSTV0910_P1_VTH12 0xf534 +#define FSTV0910_P1_VTH12 0xf53400ff + +/* P1_VTH23 */ +#define RSTV0910_P1_VTH23 0xf535 +#define FSTV0910_P1_VTH23 0xf53500ff + +/* P1_VTH34 */ +#define RSTV0910_P1_VTH34 0xf536 +#define FSTV0910_P1_VTH34 0xf53600ff + +/* P1_VTH56 */ +#define RSTV0910_P1_VTH56 0xf537 +#define FSTV0910_P1_VTH56 0xf53700ff + +/* P1_VTH67 */ +#define RSTV0910_P1_VTH67 0xf538 +#define FSTV0910_P1_VTH67 0xf53800ff + +/* P1_VTH78 */ +#define RSTV0910_P1_VTH78 0xf539 +#define FSTV0910_P1_VTH78 0xf53900ff + +/* P1_VITCURPUN */ +#define RSTV0910_P1_VITCURPUN 0xf53a +#define FSTV0910_P1_VIT_CURPUN 0xf53a001f + +/* P1_VERROR */ +#define RSTV0910_P1_VERROR 0xf53b +#define FSTV0910_P1_REGERR_VIT 0xf53b00ff + +/* P1_PRVIT */ +#define RSTV0910_P1_PRVIT 0xf53c +#define FSTV0910_P1_DIS_VTHLOCK 0xf53c6040 +#define FSTV0910_P1_E7_8VIT 0xf53c5020 +#define FSTV0910_P1_E6_7VIT 0xf53c4010 +#define FSTV0910_P1_E5_6VIT 0xf53c3008 +#define FSTV0910_P1_E3_4VIT 0xf53c2004 +#define FSTV0910_P1_E2_3VIT 0xf53c1002 +#define FSTV0910_P1_E1_2VIT 0xf53c0001 + +/* P1_VAVSRVIT */ +#define RSTV0910_P1_VAVSRVIT 0xf53d +#define FSTV0910_P1_AMVIT 0xf53d7080 +#define FSTV0910_P1_FROZENVIT 0xf53d6040 +#define FSTV0910_P1_SNVIT 0xf53d4030 +#define FSTV0910_P1_TOVVIT 0xf53d200c +#define FSTV0910_P1_HYPVIT 0xf53d0003 + +/* P1_VSTATUSVIT */ +#define RSTV0910_P1_VSTATUSVIT 0xf53e +#define FSTV0910_P1_PRFVIT 0xf53e4010 +#define FSTV0910_P1_LOCKEDVIT 0xf53e3008 + +/* P1_VTHINUSE */ +#define RSTV0910_P1_VTHINUSE 0xf53f +#define FSTV0910_P1_VIT_INUSE 0xf53f00ff + +/* P1_KDIV12 */ +#define RSTV0910_P1_KDIV12 0xf540 +#define FSTV0910_P1_K_DIVIDER_12 0xf540007f + +/* P1_KDIV23 */ +#define RSTV0910_P1_KDIV23 0xf541 +#define FSTV0910_P1_K_DIVIDER_23 0xf541007f + +/* P1_KDIV34 */ +#define RSTV0910_P1_KDIV34 0xf542 +#define FSTV0910_P1_K_DIVIDER_34 0xf542007f + +/* P1_KDIV56 */ +#define RSTV0910_P1_KDIV56 0xf543 +#define FSTV0910_P1_K_DIVIDER_56 0xf543007f + +/* P1_KDIV67 */ +#define RSTV0910_P1_KDIV67 0xf544 +#define FSTV0910_P1_K_DIVIDER_67 0xf544007f + +/* P1_KDIV78 */ +#define RSTV0910_P1_KDIV78 0xf545 +#define FSTV0910_P1_K_DIVIDER_78 0xf545007f + +/* P1_TSPIDFLT1 */ +#define RSTV0910_P1_TSPIDFLT1 0xf546 +#define FSTV0910_P1_PIDFLT_ADDR 0xf54600ff + +/* P1_TSPIDFLT0 */ +#define RSTV0910_P1_TSPIDFLT0 0xf547 +#define FSTV0910_P1_PIDFLT_DATA 0xf54700ff + +/* P1_PDELCTRL0 */ +#define RSTV0910_P1_PDELCTRL0 0xf54f +#define FSTV0910_P1_ISIOBS_MODE 0xf54f4030 + +/* P1_PDELCTRL1 */ +#define RSTV0910_P1_PDELCTRL1 0xf550 +#define FSTV0910_P1_INV_MISMASK 0xf5507080 +#define FSTV0910_P1_FILTER_EN 0xf5505020 +#define FSTV0910_P1_HYSTEN 0xf5503008 +#define FSTV0910_P1_HYSTSWRST 0xf5502004 +#define FSTV0910_P1_EN_MIS00 0xf5501002 +#define FSTV0910_P1_ALGOSWRST 0xf5500001 + +/* P1_PDELCTRL2 */ +#define RSTV0910_P1_PDELCTRL2 0xf551 +#define FSTV0910_P1_FORCE_CONTINUOUS 0xf5517080 +#define FSTV0910_P1_RESET_UPKO_COUNT 0xf5516040 +#define FSTV0910_P1_USER_PKTDELIN_NB 0xf5515020 +#define FSTV0910_P1_FRAME_MODE 0xf5511002 + +/* P1_HYSTTHRESH */ +#define RSTV0910_P1_HYSTTHRESH 0xf554 +#define FSTV0910_P1_DELIN_LOCKTHRES 0xf55440f0 +#define FSTV0910_P1_DELIN_UNLOCKTHRES 0xf554000f + +/* P1_UPLCCST0 */ +#define RSTV0910_P1_UPLCCST0 0xf558 +#define FSTV0910_P1_UPL_CST0 0xf55830f8 +#define FSTV0910_P1_UPL_MODE 0xf5580007 + +/* P1_ISIENTRY */ +#define RSTV0910_P1_ISIENTRY 0xf55e +#define FSTV0910_P1_ISI_ENTRY 0xf55e00ff + +/* P1_ISIBITENA */ +#define RSTV0910_P1_ISIBITENA 0xf55f +#define FSTV0910_P1_ISI_BIT_EN 0xf55f00ff + +/* P1_MATSTR1 */ +#define RSTV0910_P1_MATSTR1 0xf560 +#define FSTV0910_P1_MATYPE_CURRENT1 0xf56000ff + +/* P1_MATSTR0 */ +#define RSTV0910_P1_MATSTR0 0xf561 +#define FSTV0910_P1_MATYPE_CURRENT0 0xf56100ff + +/* P1_UPLSTR1 */ +#define RSTV0910_P1_UPLSTR1 0xf562 +#define FSTV0910_P1_UPL_CURRENT1 0xf56200ff + +/* P1_UPLSTR0 */ +#define RSTV0910_P1_UPLSTR0 0xf563 +#define FSTV0910_P1_UPL_CURRENT0 0xf56300ff + +/* P1_DFLSTR1 */ +#define RSTV0910_P1_DFLSTR1 0xf564 +#define FSTV0910_P1_DFL_CURRENT1 0xf56400ff + +/* P1_DFLSTR0 */ +#define RSTV0910_P1_DFLSTR0 0xf565 +#define FSTV0910_P1_DFL_CURRENT0 0xf56500ff + +/* P1_SYNCSTR */ +#define RSTV0910_P1_SYNCSTR 0xf566 +#define FSTV0910_P1_SYNC_CURRENT 0xf56600ff + +/* P1_SYNCDSTR1 */ +#define RSTV0910_P1_SYNCDSTR1 0xf567 +#define FSTV0910_P1_SYNCD_CURRENT1 0xf56700ff + +/* P1_SYNCDSTR0 */ +#define RSTV0910_P1_SYNCDSTR0 0xf568 +#define FSTV0910_P1_SYNCD_CURRENT0 0xf56800ff + +/* P1_PDELSTATUS1 */ +#define RSTV0910_P1_PDELSTATUS1 0xf569 +#define FSTV0910_P1_PKTDELIN_DELOCK 0xf5697080 +#define FSTV0910_P1_SYNCDUPDFL_BADDFL 0xf5696040 +#define FSTV0910_P1_UNACCEPTED_STREAM 0xf5694010 +#define FSTV0910_P1_BCH_ERROR_FLAG 0xf5693008 +#define FSTV0910_P1_PKTDELIN_LOCK 0xf5691002 +#define FSTV0910_P1_FIRST_LOCK 0xf5690001 + +/* P1_PDELSTATUS2 */ +#define RSTV0910_P1_PDELSTATUS2 0xf56a +#define FSTV0910_P1_FRAME_MODCOD 0xf56a207c +#define FSTV0910_P1_FRAME_TYPE 0xf56a0003 + +/* P1_BBFCRCKO1 */ +#define RSTV0910_P1_BBFCRCKO1 0xf56b +#define FSTV0910_P1_BBHCRC_KOCNT1 0xf56b00ff + +/* P1_BBFCRCKO0 */ +#define RSTV0910_P1_BBFCRCKO0 0xf56c +#define FSTV0910_P1_BBHCRC_KOCNT0 0xf56c00ff + +/* P1_UPCRCKO1 */ +#define RSTV0910_P1_UPCRCKO1 0xf56d +#define FSTV0910_P1_PKTCRC_KOCNT1 0xf56d00ff + +/* P1_UPCRCKO0 */ +#define RSTV0910_P1_UPCRCKO0 0xf56e +#define FSTV0910_P1_PKTCRC_KOCNT0 0xf56e00ff + +/* P1_PDELCTRL3 */ +#define RSTV0910_P1_PDELCTRL3 0xf56f +#define FSTV0910_P1_NOFIFO_BCHERR 0xf56f5020 +#define FSTV0910_P1_PKTDELIN_DELACMERR 0xf56f4010 + +/* P1_TSSTATEM */ +#define RSTV0910_P1_TSSTATEM 0xf570 +#define FSTV0910_P1_TSDIL_ON 0xf5707080 +#define FSTV0910_P1_TSRS_ON 0xf5705020 +#define FSTV0910_P1_TSDESCRAMB_ON 0xf5704010 +#define FSTV0910_P1_TSFRAME_MODE 0xf5703008 +#define FSTV0910_P1_TS_DISABLE 0xf5702004 +#define FSTV0910_P1_TSACM_MODE 0xf5701002 +#define FSTV0910_P1_TSOUT_NOSYNC 0xf5700001 + +/* P1_TSSTATEL */ +#define RSTV0910_P1_TSSTATEL 0xf571 +#define FSTV0910_P1_TSNOSYNCBYTE 0xf5717080 +#define FSTV0910_P1_TSPARITY_ON 0xf5716040 +#define FSTV0910_P1_TSISSYI_ON 0xf5713008 +#define FSTV0910_P1_TSNPD_ON 0xf5712004 +#define FSTV0910_P1_TSCRC8_ON 0xf5711002 +#define FSTV0910_P1_TSDSS_PACKET 0xf5710001 + +/* P1_TSCFGH */ +#define RSTV0910_P1_TSCFGH 0xf572 +#define FSTV0910_P1_TSFIFO_DVBCI 0xf5727080 +#define FSTV0910_P1_TSFIFO_SERIAL 0xf5726040 +#define FSTV0910_P1_TSFIFO_TEIUPDATE 0xf5725020 +#define FSTV0910_P1_TSFIFO_DUTY50 0xf5724010 +#define FSTV0910_P1_TSFIFO_HSGNLOUT 0xf5723008 +#define FSTV0910_P1_TSFIFO_ERRMODE 0xf5721006 +#define FSTV0910_P1_RST_HWARE 0xf5720001 + +/* P1_TSCFGM */ +#define RSTV0910_P1_TSCFGM 0xf573 +#define FSTV0910_P1_TSFIFO_MANSPEED 0xf57360c0 +#define FSTV0910_P1_TSFIFO_PERMDATA 0xf5735020 +#define FSTV0910_P1_TSFIFO_NONEWSGNL 0xf5734010 +#define FSTV0910_P1_TSFIFO_INVDATA 0xf5730001 + +/* P1_TSCFGL */ +#define RSTV0910_P1_TSCFGL 0xf574 +#define FSTV0910_P1_TSFIFO_BCLKDEL1CK 0xf57460c0 +#define FSTV0910_P1_BCHERROR_MODE 0xf5744030 +#define FSTV0910_P1_TSFIFO_NSGNL2DATA 0xf5743008 +#define FSTV0910_P1_TSFIFO_EMBINDVB 0xf5742004 +#define FSTV0910_P1_TSFIFO_BITSPEED 0xf5740003 + +/* P1_TSSYNC */ +#define RSTV0910_P1_TSSYNC 0xf575 +#define FSTV0910_P1_TSFIFO_SYNCMODE 0xf5753018 + +/* P1_TSINSDELH */ +#define RSTV0910_P1_TSINSDELH 0xf576 +#define FSTV0910_P1_TSDEL_SYNCBYTE 0xf5767080 +#define FSTV0910_P1_TSDEL_XXHEADER 0xf5766040 +#define FSTV0910_P1_TSDEL_DATAFIELD 0xf5764010 +#define FSTV0910_P1_TSINSDEL_RSPARITY 0xf5761002 +#define FSTV0910_P1_TSINSDEL_CRC8 0xf5760001 + +/* P1_TSINSDELM */ +#define RSTV0910_P1_TSINSDELM 0xf577 +#define FSTV0910_P1_TSINS_EMODCOD 0xf5774010 +#define FSTV0910_P1_TSINS_TOKEN 0xf5773008 +#define FSTV0910_P1_TSINS_XXXERR 0xf5772004 +#define FSTV0910_P1_TSINS_MATYPE 0xf5771002 +#define FSTV0910_P1_TSINS_UPL 0xf5770001 + +/* P1_TSINSDELL */ +#define RSTV0910_P1_TSINSDELL 0xf578 +#define FSTV0910_P1_TSINS_DFL 0xf5787080 +#define FSTV0910_P1_TSINS_SYNCD 0xf5786040 +#define FSTV0910_P1_TSINS_BLOCLEN 0xf5785020 +#define FSTV0910_P1_TSINS_SIGPCOUNT 0xf5784010 +#define FSTV0910_P1_TSINS_FIFO 0xf5783008 +#define FSTV0910_P1_TSINS_REALPACK 0xf5782004 +#define FSTV0910_P1_TSINS_TSCONFIG 0xf5781002 +#define FSTV0910_P1_TSINS_LATENCY 0xf5780001 + +/* P1_TSDIVN */ +#define RSTV0910_P1_TSDIVN 0xf579 +#define FSTV0910_P1_TSFIFO_SPEEDMODE 0xf57960c0 +#define FSTV0910_P1_TSFIFO_RISEOK 0xf5790007 + +/* P1_TSCFG4 */ +#define RSTV0910_P1_TSCFG4 0xf57a +#define FSTV0910_P1_TSFIFO_TSSPEEDMODE 0xf57a60c0 + +/* P1_TSSPEED */ +#define RSTV0910_P1_TSSPEED 0xf580 +#define FSTV0910_P1_TSFIFO_OUTSPEED 0xf58000ff + +/* P1_TSSTATUS */ +#define RSTV0910_P1_TSSTATUS 0xf581 +#define FSTV0910_P1_TSFIFO_LINEOK 0xf5817080 +#define FSTV0910_P1_TSFIFO_ERROR 0xf5816040 +#define FSTV0910_P1_TSFIFO_NOSYNC 0xf5814010 +#define FSTV0910_P1_TSREGUL_ERROR 0xf5812004 +#define FSTV0910_P1_DIL_READY 0xf5810001 + +/* P1_TSSTATUS2 */ +#define RSTV0910_P1_TSSTATUS2 0xf582 +#define FSTV0910_P1_TSFIFO_DEMODSEL 0xf5827080 +#define FSTV0910_P1_TSFIFOSPEED_STORE 0xf5826040 +#define FSTV0910_P1_DILXX_RESET 0xf5825020 +#define FSTV0910_P1_SCRAMBDETECT 0xf5821002 + +/* P1_TSBITRATE1 */ +#define RSTV0910_P1_TSBITRATE1 0xf583 +#define FSTV0910_P1_TSFIFO_BITRATE1 0xf58300ff + +/* P1_TSBITRATE0 */ +#define RSTV0910_P1_TSBITRATE0 0xf584 +#define FSTV0910_P1_TSFIFO_BITRATE0 0xf58400ff + +/* P1_TSPACKLEN1 */ +#define RSTV0910_P1_TSPACKLEN1 0xf585 +#define FSTV0910_P1_TSFIFO_PACKCPT 0xf58550e0 + +/* P1_TSDLY2 */ +#define RSTV0910_P1_TSDLY2 0xf589 +#define FSTV0910_P1_SOFFIFO_LATENCY2 0xf589000f + +/* P1_TSDLY1 */ +#define RSTV0910_P1_TSDLY1 0xf58a +#define FSTV0910_P1_SOFFIFO_LATENCY1 0xf58a00ff + +/* P1_TSDLY0 */ +#define RSTV0910_P1_TSDLY0 0xf58b +#define FSTV0910_P1_SOFFIFO_LATENCY0 0xf58b00ff + +/* P1_TSNPDAV */ +#define RSTV0910_P1_TSNPDAV 0xf58c +#define FSTV0910_P1_TSNPD_AVERAGE 0xf58c00ff + +/* P1_TSBUFSTAT2 */ +#define RSTV0910_P1_TSBUFSTAT2 0xf58d +#define FSTV0910_P1_TSISCR_3BYTES 0xf58d7080 +#define FSTV0910_P1_TSISCR_NEWDATA 0xf58d6040 +#define FSTV0910_P1_TSISCR_BUFSTAT2 0xf58d003f + +/* P1_TSBUFSTAT1 */ +#define RSTV0910_P1_TSBUFSTAT1 0xf58e +#define FSTV0910_P1_TSISCR_BUFSTAT1 0xf58e00ff + +/* P1_TSBUFSTAT0 */ +#define RSTV0910_P1_TSBUFSTAT0 0xf58f +#define FSTV0910_P1_TSISCR_BUFSTAT0 0xf58f00ff + +/* P1_TSDEBUGL */ +#define RSTV0910_P1_TSDEBUGL 0xf591 +#define FSTV0910_P1_TSFIFO_ERROR_EVNT 0xf5912004 +#define FSTV0910_P1_TSFIFO_OVERFLOWM 0xf5910001 + +/* P1_TSDLYSET2 */ +#define RSTV0910_P1_TSDLYSET2 0xf592 +#define FSTV0910_P1_SOFFIFO_OFFSET 0xf59260c0 +#define FSTV0910_P1_HYSTERESIS_THRESHOLD 0xf5924030 +#define FSTV0910_P1_SOFFIFO_SYMBOFFS2 0xf592000f + +/* P1_TSDLYSET1 */ +#define RSTV0910_P1_TSDLYSET1 0xf593 +#define FSTV0910_P1_SOFFIFO_SYMBOFFS1 0xf59300ff + +/* P1_TSDLYSET0 */ +#define RSTV0910_P1_TSDLYSET0 0xf594 +#define FSTV0910_P1_SOFFIFO_SYMBOFFS0 0xf59400ff + +/* P1_ERRCTRL1 */ +#define RSTV0910_P1_ERRCTRL1 0xf598 +#define FSTV0910_P1_ERR_SOURCE1 0xf59840f0 +#define FSTV0910_P1_NUM_EVENT1 0xf5980007 + +/* P1_ERRCNT12 */ +#define RSTV0910_P1_ERRCNT12 0xf599 +#define FSTV0910_P1_ERRCNT1_OLDVALUE 0xf5997080 +#define FSTV0910_P1_ERR_CNT12 0xf599007f + +/* P1_ERRCNT11 */ +#define RSTV0910_P1_ERRCNT11 0xf59a +#define FSTV0910_P1_ERR_CNT11 0xf59a00ff + +/* P1_ERRCNT10 */ +#define RSTV0910_P1_ERRCNT10 0xf59b +#define FSTV0910_P1_ERR_CNT10 0xf59b00ff + +/* P1_ERRCTRL2 */ +#define RSTV0910_P1_ERRCTRL2 0xf59c +#define FSTV0910_P1_ERR_SOURCE2 0xf59c40f0 +#define FSTV0910_P1_NUM_EVENT2 0xf59c0007 + +/* P1_ERRCNT22 */ +#define RSTV0910_P1_ERRCNT22 0xf59d +#define FSTV0910_P1_ERRCNT2_OLDVALUE 0xf59d7080 +#define FSTV0910_P1_ERR_CNT22 0xf59d007f + +/* P1_ERRCNT21 */ +#define RSTV0910_P1_ERRCNT21 0xf59e +#define FSTV0910_P1_ERR_CNT21 0xf59e00ff + +/* P1_ERRCNT20 */ +#define RSTV0910_P1_ERRCNT20 0xf59f +#define FSTV0910_P1_ERR_CNT20 0xf59f00ff + +/* P1_FECSPY */ +#define RSTV0910_P1_FECSPY 0xf5a0 +#define FSTV0910_P1_SPY_ENABLE 0xf5a07080 +#define FSTV0910_P1_NO_SYNCBYTE 0xf5a06040 +#define FSTV0910_P1_SERIAL_MODE 0xf5a05020 +#define FSTV0910_P1_UNUSUAL_PACKET 0xf5a04010 +#define FSTV0910_P1_BERMETER_DATAMODE 0xf5a0200c +#define FSTV0910_P1_BERMETER_LMODE 0xf5a01002 +#define FSTV0910_P1_BERMETER_RESET 0xf5a00001 + +/* P1_FSPYCFG */ +#define RSTV0910_P1_FSPYCFG 0xf5a1 +#define FSTV0910_P1_FECSPY_INPUT 0xf5a160c0 +#define FSTV0910_P1_RST_ON_ERROR 0xf5a15020 +#define FSTV0910_P1_ONE_SHOT 0xf5a14010 +#define FSTV0910_P1_I2C_MODE 0xf5a1200c +#define FSTV0910_P1_SPY_HYSTERESIS 0xf5a10003 + +/* P1_FSPYDATA */ +#define RSTV0910_P1_FSPYDATA 0xf5a2 +#define FSTV0910_P1_SPY_STUFFING 0xf5a27080 +#define FSTV0910_P1_SPY_CNULLPKT 0xf5a25020 +#define FSTV0910_P1_SPY_OUTDATA_MODE 0xf5a2001f + +/* P1_FSPYOUT */ +#define RSTV0910_P1_FSPYOUT 0xf5a3 +#define FSTV0910_P1_FSPY_DIRECT 0xf5a37080 +#define FSTV0910_P1_STUFF_MODE 0xf5a30007 + +/* P1_FSTATUS */ +#define RSTV0910_P1_FSTATUS 0xf5a4 +#define FSTV0910_P1_SPY_ENDSIM 0xf5a47080 +#define FSTV0910_P1_VALID_SIM 0xf5a46040 +#define FSTV0910_P1_FOUND_SIGNAL 0xf5a45020 +#define FSTV0910_P1_DSS_SYNCBYTE 0xf5a44010 +#define FSTV0910_P1_RESULT_STATE 0xf5a4000f + +/* P1_FBERCPT4 */ +#define RSTV0910_P1_FBERCPT4 0xf5a8 +#define FSTV0910_P1_FBERMETER_CPT4 0xf5a800ff + +/* P1_FBERCPT3 */ +#define RSTV0910_P1_FBERCPT3 0xf5a9 +#define FSTV0910_P1_FBERMETER_CPT3 0xf5a900ff + +/* P1_FBERCPT2 */ +#define RSTV0910_P1_FBERCPT2 0xf5aa +#define FSTV0910_P1_FBERMETER_CPT2 0xf5aa00ff + +/* P1_FBERCPT1 */ +#define RSTV0910_P1_FBERCPT1 0xf5ab +#define FSTV0910_P1_FBERMETER_CPT1 0xf5ab00ff + +/* P1_FBERCPT0 */ +#define RSTV0910_P1_FBERCPT0 0xf5ac +#define FSTV0910_P1_FBERMETER_CPT0 0xf5ac00ff + +/* P1_FBERERR2 */ +#define RSTV0910_P1_FBERERR2 0xf5ad +#define FSTV0910_P1_FBERMETER_ERR2 0xf5ad00ff + +/* P1_FBERERR1 */ +#define RSTV0910_P1_FBERERR1 0xf5ae +#define FSTV0910_P1_FBERMETER_ERR1 0xf5ae00ff + +/* P1_FBERERR0 */ +#define RSTV0910_P1_FBERERR0 0xf5af +#define FSTV0910_P1_FBERMETER_ERR0 0xf5af00ff + +/* P1_FSPYBER */ +#define RSTV0910_P1_FSPYBER 0xf5b2 +#define FSTV0910_P1_FSPYBER_SYNCBYTE 0xf5b24010 +#define FSTV0910_P1_FSPYBER_UNSYNC 0xf5b23008 +#define FSTV0910_P1_FSPYBER_CTIME 0xf5b20007 + +/* P1_SFERROR */ +#define RSTV0910_P1_SFERROR 0xf5c1 +#define FSTV0910_P1_SFEC_REGERR_VIT 0xf5c100ff + +/* P1_SFECSTATUS */ +#define RSTV0910_P1_SFECSTATUS 0xf5c3 +#define FSTV0910_P1_SFEC_ON 0xf5c37080 +#define FSTV0910_P1_SFEC_OFF 0xf5c36040 +#define FSTV0910_P1_LOCKEDSFEC 0xf5c33008 +#define FSTV0910_P1_SFEC_DELOCK 0xf5c32004 +#define FSTV0910_P1_SFEC_DEMODSEL 0xf5c31002 +#define FSTV0910_P1_SFEC_OVFON 0xf5c30001 + +/* P1_SFKDIV12 */ +#define RSTV0910_P1_SFKDIV12 0xf5c4 +#define FSTV0910_P1_SFECKDIV12_MAN 0xf5c47080 + +/* P1_SFKDIV23 */ +#define RSTV0910_P1_SFKDIV23 0xf5c5 +#define FSTV0910_P1_SFECKDIV23_MAN 0xf5c57080 + +/* P1_SFKDIV34 */ +#define RSTV0910_P1_SFKDIV34 0xf5c6 +#define FSTV0910_P1_SFECKDIV34_MAN 0xf5c67080 + +/* P1_SFKDIV56 */ +#define RSTV0910_P1_SFKDIV56 0xf5c7 +#define FSTV0910_P1_SFECKDIV56_MAN 0xf5c77080 + +/* P1_SFKDIV67 */ +#define RSTV0910_P1_SFKDIV67 0xf5c8 +#define FSTV0910_P1_SFECKDIV67_MAN 0xf5c87080 + +/* P1_SFKDIV78 */ +#define RSTV0910_P1_SFKDIV78 0xf5c9 +#define FSTV0910_P1_SFECKDIV78_MAN 0xf5c97080 + +/* P1_SFSTATUS */ +#define RSTV0910_P1_SFSTATUS 0xf5cc +#define FSTV0910_P1_SFEC_LINEOK 0xf5cc7080 +#define FSTV0910_P1_SFEC_ERROR 0xf5cc6040 +#define FSTV0910_P1_SFEC_DATA7 0xf5cc5020 +#define FSTV0910_P1_SFEC_PKTDNBRFAIL 0xf5cc4010 +#define FSTV0910_P1_TSSFEC_DEMODSEL 0xf5cc3008 +#define FSTV0910_P1_SFEC_NOSYNC 0xf5cc2004 +#define FSTV0910_P1_SFEC_UNREGULA 0xf5cc1002 +#define FSTV0910_P1_SFEC_READY 0xf5cc0001 + +/* P1_SFDLYSET2 */ +#define RSTV0910_P1_SFDLYSET2 0xf5d0 +#define FSTV0910_P1_SFEC_DISABLE 0xf5d01002 + +/* P1_SFERRCTRL */ +#define RSTV0910_P1_SFERRCTRL 0xf5d8 +#define FSTV0910_P1_SFEC_ERR_SOURCE 0xf5d840f0 +#define FSTV0910_P1_SFEC_NUM_EVENT 0xf5d80007 + +/* P1_SFERRCNT2 */ +#define RSTV0910_P1_SFERRCNT2 0xf5d9 +#define FSTV0910_P1_SFERRC_OLDVALUE 0xf5d97080 +#define FSTV0910_P1_SFEC_ERR_CNT2 0xf5d9007f + +/* P1_SFERRCNT1 */ +#define RSTV0910_P1_SFERRCNT1 0xf5da +#define FSTV0910_P1_SFEC_ERR_CNT1 0xf5da00ff + +/* P1_SFERRCNT0 */ +#define RSTV0910_P1_SFERRCNT0 0xf5db +#define FSTV0910_P1_SFEC_ERR_CNT0 0xf5db00ff + +/* RCCFG2 */ +#define RSTV0910_RCCFG2 0xf600 +#define FSTV0910_TSRCFIFO_DVBCI 0xf6007080 +#define FSTV0910_TSRCFIFO_SERIAL 0xf6006040 +#define FSTV0910_TSRCFIFO_DISABLE 0xf6005020 +#define FSTV0910_TSFIFO_2TORC 0xf6004010 +#define FSTV0910_TSRCFIFO_HSGNLOUT 0xf6003008 +#define FSTV0910_TSRCFIFO_ERRMODE 0xf6001006 + +/* RCCFG1 */ +#define RSTV0910_RCCFG1 0xf601 +#define FSTV0910_TSRCFIFO_MANSPEED 0xf60160c0 +#define FSTV0910_TSRCFIFO_PERMDATA 0xf6015020 +#define FSTV0910_TSRCFIFO_NONEWSGNL 0xf6014010 +#define FSTV0910_TSRCFIFO_INVDATA 0xf6010001 + +/* RCCFG0 */ +#define RSTV0910_RCCFG0 0xf602 +#define FSTV0910_TSRCFIFO_BCLKDEL1CK 0xf60260c0 +#define FSTV0910_TSRCFIFO_DUTY50 0xf6024010 +#define FSTV0910_TSRCFIFO_NSGNL2DATA 0xf6023008 +#define FSTV0910_TSRCFIFO_NPDSGNL 0xf6022004 + +/* RCINSDEL2 */ +#define RSTV0910_RCINSDEL2 0xf603 +#define FSTV0910_TSRCDEL_SYNCBYTE 0xf6037080 +#define FSTV0910_TSRCDEL_XXHEADER 0xf6036040 +#define FSTV0910_TSRCDEL_BBHEADER 0xf6035020 +#define FSTV0910_TSRCDEL_DATAFIELD 0xf6034010 +#define FSTV0910_TSRCINSDEL_ISCR 0xf6033008 +#define FSTV0910_TSRCINSDEL_NPD 0xf6032004 +#define FSTV0910_TSRCINSDEL_RSPARITY 0xf6031002 +#define FSTV0910_TSRCINSDEL_CRC8 0xf6030001 + +/* RCINSDEL1 */ +#define RSTV0910_RCINSDEL1 0xf604 +#define FSTV0910_TSRCINS_BBPADDING 0xf6047080 +#define FSTV0910_TSRCINS_BCHFEC 0xf6046040 +#define FSTV0910_TSRCINS_EMODCOD 0xf6044010 +#define FSTV0910_TSRCINS_TOKEN 0xf6043008 +#define FSTV0910_TSRCINS_XXXERR 0xf6042004 +#define FSTV0910_TSRCINS_MATYPE 0xf6041002 +#define FSTV0910_TSRCINS_UPL 0xf6040001 + +/* RCINSDEL0 */ +#define RSTV0910_RCINSDEL0 0xf605 +#define FSTV0910_TSRCINS_DFL 0xf6057080 +#define FSTV0910_TSRCINS_SYNCD 0xf6056040 +#define FSTV0910_TSRCINS_BLOCLEN 0xf6055020 +#define FSTV0910_TSRCINS_SIGPCOUNT 0xf6054010 +#define FSTV0910_TSRCINS_FIFO 0xf6053008 +#define FSTV0910_TSRCINS_REALPACK 0xf6052004 +#define FSTV0910_TSRCINS_TSCONFIG 0xf6051002 +#define FSTV0910_TSRCINS_LATENCY 0xf6050001 + +/* RCSTATUS */ +#define RSTV0910_RCSTATUS 0xf606 +#define FSTV0910_TSRCFIFO_LINEOK 0xf6067080 +#define FSTV0910_TSRCFIFO_ERROR 0xf6066040 +#define FSTV0910_TSRCREGUL_ERROR 0xf6064010 +#define FSTV0910_TSRCFIFO_DEMODSEL 0xf6063008 +#define FSTV0910_TSRCFIFOSPEED_STORE 0xf6062004 +#define FSTV0910_TSRCSPEED_IMPOSSIBLE 0xf6060001 + +/* RCSPEED */ +#define RSTV0910_RCSPEED 0xf607 +#define FSTV0910_TSRCFIFO_OUTSPEED 0xf60700ff + +/* TSGENERAL */ +#define RSTV0910_TSGENERAL 0xf630 +#define FSTV0910_TSFIFO_DISTS2PAR 0xf6306040 +#define FSTV0910_MUXSTREAM_OUTMODE 0xf6303008 +#define FSTV0910_TSFIFO_PERMPARAL 0xf6301006 + +/* P1_DISIRQCFG */ +#define RSTV0910_P1_DISIRQCFG 0xf700 +#define FSTV0910_P1_ENRXEND 0xf7006040 +#define FSTV0910_P1_ENRXFIFO8B 0xf7005020 +#define FSTV0910_P1_ENTRFINISH 0xf7004010 +#define FSTV0910_P1_ENTIMEOUT 0xf7003008 +#define FSTV0910_P1_ENTXEND 0xf7002004 +#define FSTV0910_P1_ENTXFIFO64B 0xf7001002 +#define FSTV0910_P1_ENGAPBURST 0xf7000001 + +/* P1_DISIRQSTAT */ +#define RSTV0910_P1_DISIRQSTAT 0xf701 +#define FSTV0910_P1_IRQRXEND 0xf7016040 +#define FSTV0910_P1_IRQRXFIFO8B 0xf7015020 +#define FSTV0910_P1_IRQTRFINISH 0xf7014010 +#define FSTV0910_P1_IRQTIMEOUT 0xf7013008 +#define FSTV0910_P1_IRQTXEND 0xf7012004 +#define FSTV0910_P1_IRQTXFIFO64B 0xf7011002 +#define FSTV0910_P1_IRQGAPBURST 0xf7010001 + +/* P1_DISTXCFG */ +#define RSTV0910_P1_DISTXCFG 0xf702 +#define FSTV0910_P1_DISTX_RESET 0xf7027080 +#define FSTV0910_P1_TIM_OFF 0xf7026040 +#define FSTV0910_P1_TIM_CMD 0xf7024030 +#define FSTV0910_P1_ENVELOP 0xf7023008 +#define FSTV0910_P1_DIS_PRECHARGE 0xf7022004 +#define FSTV0910_P1_DISEQC_MODE 0xf7020003 + +/* P1_DISTXSTATUS */ +#define RSTV0910_P1_DISTXSTATUS 0xf703 +#define FSTV0910_P1_TX_FIFO_FULL 0xf7036040 +#define FSTV0910_P1_TX_IDLE 0xf7035020 +#define FSTV0910_P1_GAP_BURST 0xf7034010 +#define FSTV0910_P1_TX_FIFO64B 0xf7033008 +#define FSTV0910_P1_TX_END 0xf7032004 +#define FSTV0910_P1_TR_TIMEOUT 0xf7031002 +#define FSTV0910_P1_TR_FINISH 0xf7030001 + +/* P1_DISTXBYTES */ +#define RSTV0910_P1_DISTXBYTES 0xf704 +#define FSTV0910_P1_TXFIFO_BYTES 0xf70400ff + +/* P1_DISTXFIFO */ +#define RSTV0910_P1_DISTXFIFO 0xf705 +#define FSTV0910_P1_DISEQC_TX_FIFO 0xf70500ff + +/* P1_DISTXF22 */ +#define RSTV0910_P1_DISTXF22 0xf706 +#define FSTV0910_P1_F22TX 0xf70600ff + +/* P1_DISTIMEOCFG */ +#define RSTV0910_P1_DISTIMEOCFG 0xf708 +#define FSTV0910_P1_RXCHOICE 0xf7081006 +#define FSTV0910_P1_TIMEOUT_OFF 0xf7080001 + +/* P1_DISTIMEOUT */ +#define RSTV0910_P1_DISTIMEOUT 0xf709 +#define FSTV0910_P1_TIMEOUT_COUNT 0xf70900ff + +/* P1_DISRXCFG */ +#define RSTV0910_P1_DISRXCFG 0xf70a +#define FSTV0910_P1_DISRX_RESET 0xf70a7080 +#define FSTV0910_P1_EXTENVELOP 0xf70a6040 +#define FSTV0910_P1_PINSELECT 0xf70a3038 +#define FSTV0910_P1_IGNORE_SHORT22K 0xf70a2004 +#define FSTV0910_P1_SIGNED_RXIN 0xf70a1002 +#define FSTV0910_P1_DISRX_ON 0xf70a0001 + +/* P1_DISRXSTAT1 */ +#define RSTV0910_P1_DISRXSTAT1 0xf70b +#define FSTV0910_P1_RXEND 0xf70b7080 +#define FSTV0910_P1_RXACTIVE 0xf70b6040 +#define FSTV0910_P1_RXDETECT 0xf70b5020 +#define FSTV0910_P1_CONTTONE 0xf70b4010 +#define FSTV0910_P1_8BFIFOREADY 0xf70b3008 +#define FSTV0910_P1_FIFOEMPTY 0xf70b2004 + +/* P1_DISRXSTAT0 */ +#define RSTV0910_P1_DISRXSTAT0 0xf70c +#define FSTV0910_P1_RXFAIL 0xf70c7080 +#define FSTV0910_P1_FIFOPFAIL 0xf70c6040 +#define FSTV0910_P1_RXNONBYTE 0xf70c5020 +#define FSTV0910_P1_FIFOOVF 0xf70c4010 +#define FSTV0910_P1_SHORT22K 0xf70c3008 +#define FSTV0910_P1_RXMSGLOST 0xf70c2004 + +/* P1_DISRXBYTES */ +#define RSTV0910_P1_DISRXBYTES 0xf70d +#define FSTV0910_P1_RXFIFO_BYTES 0xf70d001f + +/* P1_DISRXPARITY1 */ +#define RSTV0910_P1_DISRXPARITY1 0xf70e +#define FSTV0910_P1_DISRX_PARITY1 0xf70e00ff + +/* P1_DISRXPARITY0 */ +#define RSTV0910_P1_DISRXPARITY0 0xf70f +#define FSTV0910_P1_DISRX_PARITY0 0xf70f00ff + +/* P1_DISRXFIFO */ +#define RSTV0910_P1_DISRXFIFO 0xf710 +#define FSTV0910_P1_DISEQC_RX_FIFO 0xf71000ff + +/* P1_DISRXDC1 */ +#define RSTV0910_P1_DISRXDC1 0xf711 +#define FSTV0910_P1_DC_VALUE1 0xf7110103 + +/* P1_DISRXDC0 */ +#define RSTV0910_P1_DISRXDC0 0xf712 +#define FSTV0910_P1_DC_VALUE0 0xf71200ff + +/* P1_DISRXF221 */ +#define RSTV0910_P1_DISRXF221 0xf714 +#define FSTV0910_P1_F22RX1 0xf714000f + +/* P1_DISRXF220 */ +#define RSTV0910_P1_DISRXF220 0xf715 +#define FSTV0910_P1_F22RX0 0xf71500ff + +/* P1_DISRXF100 */ +#define RSTV0910_P1_DISRXF100 0xf716 +#define FSTV0910_P1_F100RX 0xf71600ff + +/* P1_DISRXSHORT22K */ +#define RSTV0910_P1_DISRXSHORT22K 0xf71c +#define FSTV0910_P1_SHORT22K_LENGTH 0xf71c001f + +/* P1_ACRPRESC */ +#define RSTV0910_P1_ACRPRESC 0xf71e +#define FSTV0910_P1_ACR_PRESC 0xf71e0007 + +/* P1_ACRDIV */ +#define RSTV0910_P1_ACRDIV 0xf71f +#define FSTV0910_P1_ACR_DIV 0xf71f00ff + +/* P2_DISIRQCFG */ +#define RSTV0910_P2_DISIRQCFG 0xf740 +#define FSTV0910_P2_ENRXEND 0xf7406040 +#define FSTV0910_P2_ENRXFIFO8B 0xf7405020 +#define FSTV0910_P2_ENTRFINISH 0xf7404010 +#define FSTV0910_P2_ENTIMEOUT 0xf7403008 +#define FSTV0910_P2_ENTXEND 0xf7402004 +#define FSTV0910_P2_ENTXFIFO64B 0xf7401002 +#define FSTV0910_P2_ENGAPBURST 0xf7400001 + +/* P2_DISIRQSTAT */ +#define RSTV0910_P2_DISIRQSTAT 0xf741 +#define FSTV0910_P2_IRQRXEND 0xf7416040 +#define FSTV0910_P2_IRQRXFIFO8B 0xf7415020 +#define FSTV0910_P2_IRQTRFINISH 0xf7414010 +#define FSTV0910_P2_IRQTIMEOUT 0xf7413008 +#define FSTV0910_P2_IRQTXEND 0xf7412004 +#define FSTV0910_P2_IRQTXFIFO64B 0xf7411002 +#define FSTV0910_P2_IRQGAPBURST 0xf7410001 + +/* P2_DISTXCFG */ +#define RSTV0910_P2_DISTXCFG 0xf742 +#define FSTV0910_P2_DISTX_RESET 0xf7427080 +#define FSTV0910_P2_TIM_OFF 0xf7426040 +#define FSTV0910_P2_TIM_CMD 0xf7424030 +#define FSTV0910_P2_ENVELOP 0xf7423008 +#define FSTV0910_P2_DIS_PRECHARGE 0xf7422004 +#define FSTV0910_P2_DISEQC_MODE 0xf7420003 + +/* P2_DISTXSTATUS */ +#define RSTV0910_P2_DISTXSTATUS 0xf743 +#define FSTV0910_P2_TX_FIFO_FULL 0xf7436040 +#define FSTV0910_P2_TX_IDLE 0xf7435020 +#define FSTV0910_P2_GAP_BURST 0xf7434010 +#define FSTV0910_P2_TX_FIFO64B 0xf7433008 +#define FSTV0910_P2_TX_END 0xf7432004 +#define FSTV0910_P2_TR_TIMEOUT 0xf7431002 +#define FSTV0910_P2_TR_FINISH 0xf7430001 + +/* P2_DISTXBYTES */ +#define RSTV0910_P2_DISTXBYTES 0xf744 +#define FSTV0910_P2_TXFIFO_BYTES 0xf74400ff + +/* P2_DISTXFIFO */ +#define RSTV0910_P2_DISTXFIFO 0xf745 +#define FSTV0910_P2_DISEQC_TX_FIFO 0xf74500ff + +/* P2_DISTXF22 */ +#define RSTV0910_P2_DISTXF22 0xf746 +#define FSTV0910_P2_F22TX 0xf74600ff + +/* P2_DISTIMEOCFG */ +#define RSTV0910_P2_DISTIMEOCFG 0xf748 +#define FSTV0910_P2_RXCHOICE 0xf7481006 +#define FSTV0910_P2_TIMEOUT_OFF 0xf7480001 + +/* P2_DISTIMEOUT */ +#define RSTV0910_P2_DISTIMEOUT 0xf749 +#define FSTV0910_P2_TIMEOUT_COUNT 0xf74900ff + +/* P2_DISRXCFG */ +#define RSTV0910_P2_DISRXCFG 0xf74a +#define FSTV0910_P2_DISRX_RESET 0xf74a7080 +#define FSTV0910_P2_EXTENVELOP 0xf74a6040 +#define FSTV0910_P2_PINSELECT 0xf74a3038 +#define FSTV0910_P2_IGNORE_SHORT22K 0xf74a2004 +#define FSTV0910_P2_SIGNED_RXIN 0xf74a1002 +#define FSTV0910_P2_DISRX_ON 0xf74a0001 + +/* P2_DISRXSTAT1 */ +#define RSTV0910_P2_DISRXSTAT1 0xf74b +#define FSTV0910_P2_RXEND 0xf74b7080 +#define FSTV0910_P2_RXACTIVE 0xf74b6040 +#define FSTV0910_P2_RXDETECT 0xf74b5020 +#define FSTV0910_P2_CONTTONE 0xf74b4010 +#define FSTV0910_P2_8BFIFOREADY 0xf74b3008 +#define FSTV0910_P2_FIFOEMPTY 0xf74b2004 + +/* P2_DISRXSTAT0 */ +#define RSTV0910_P2_DISRXSTAT0 0xf74c +#define FSTV0910_P2_RXFAIL 0xf74c7080 +#define FSTV0910_P2_FIFOPFAIL 0xf74c6040 +#define FSTV0910_P2_RXNONBYTE 0xf74c5020 +#define FSTV0910_P2_FIFOOVF 0xf74c4010 +#define FSTV0910_P2_SHORT22K 0xf74c3008 +#define FSTV0910_P2_RXMSGLOST 0xf74c2004 + +/* P2_DISRXBYTES */ +#define RSTV0910_P2_DISRXBYTES 0xf74d +#define FSTV0910_P2_RXFIFO_BYTES 0xf74d001f + +/* P2_DISRXPARITY1 */ +#define RSTV0910_P2_DISRXPARITY1 0xf74e +#define FSTV0910_P2_DISRX_PARITY1 0xf74e00ff + +/* P2_DISRXPARITY0 */ +#define RSTV0910_P2_DISRXPARITY0 0xf74f +#define FSTV0910_P2_DISRX_PARITY0 0xf74f00ff + +/* P2_DISRXFIFO */ +#define RSTV0910_P2_DISRXFIFO 0xf750 +#define FSTV0910_P2_DISEQC_RX_FIFO 0xf75000ff + +/* P2_DISRXDC1 */ +#define RSTV0910_P2_DISRXDC1 0xf751 +#define FSTV0910_P2_DC_VALUE1 0xf7510103 + +/* P2_DISRXDC0 */ +#define RSTV0910_P2_DISRXDC0 0xf752 +#define FSTV0910_P2_DC_VALUE0 0xf75200ff + +/* P2_DISRXF221 */ +#define RSTV0910_P2_DISRXF221 0xf754 +#define FSTV0910_P2_F22RX1 0xf754000f + +/* P2_DISRXF220 */ +#define RSTV0910_P2_DISRXF220 0xf755 +#define FSTV0910_P2_F22RX0 0xf75500ff + +/* P2_DISRXF100 */ +#define RSTV0910_P2_DISRXF100 0xf756 +#define FSTV0910_P2_F100RX 0xf75600ff + +/* P2_DISRXSHORT22K */ +#define RSTV0910_P2_DISRXSHORT22K 0xf75c +#define FSTV0910_P2_SHORT22K_LENGTH 0xf75c001f + +/* P2_ACRPRESC */ +#define RSTV0910_P2_ACRPRESC 0xf75e +#define FSTV0910_P2_ACR_PRESC 0xf75e0007 + +/* P2_ACRDIV */ +#define RSTV0910_P2_ACRDIV 0xf75f +#define FSTV0910_P2_ACR_DIV 0xf75f00ff + +/* P1_NBITER_NF1 */ +#define RSTV0910_P1_NBITER_NF1 0xfa00 +#define FSTV0910_P1_NBITER_NF_QPSK_1_4 0xfa0000ff + +/* P1_NBITER_NF2 */ +#define RSTV0910_P1_NBITER_NF2 0xfa01 +#define FSTV0910_P1_NBITER_NF_QPSK_1_3 0xfa0100ff + +/* P1_NBITER_NF3 */ +#define RSTV0910_P1_NBITER_NF3 0xfa02 +#define FSTV0910_P1_NBITER_NF_QPSK_2_5 0xfa0200ff + +/* P1_NBITER_NF4 */ +#define RSTV0910_P1_NBITER_NF4 0xfa03 +#define FSTV0910_P1_NBITER_NF_QPSK_1_2 0xfa0300ff + +/* P1_NBITER_NF5 */ +#define RSTV0910_P1_NBITER_NF5 0xfa04 +#define FSTV0910_P1_NBITER_NF_QPSK_3_5 0xfa0400ff + +/* P1_NBITER_NF6 */ +#define RSTV0910_P1_NBITER_NF6 0xfa05 +#define FSTV0910_P1_NBITER_NF_QPSK_2_3 0xfa0500ff + +/* P1_NBITER_NF7 */ +#define RSTV0910_P1_NBITER_NF7 0xfa06 +#define FSTV0910_P1_NBITER_NF_QPSK_3_4 0xfa0600ff + +/* P1_NBITER_NF8 */ +#define RSTV0910_P1_NBITER_NF8 0xfa07 +#define FSTV0910_P1_NBITER_NF_QPSK_4_5 0xfa0700ff + +/* P1_NBITER_NF9 */ +#define RSTV0910_P1_NBITER_NF9 0xfa08 +#define FSTV0910_P1_NBITER_NF_QPSK_5_6 0xfa0800ff + +/* P1_NBITER_NF10 */ +#define RSTV0910_P1_NBITER_NF10 0xfa09 +#define FSTV0910_P1_NBITER_NF_QPSK_8_9 0xfa0900ff + +/* P1_NBITER_NF11 */ +#define RSTV0910_P1_NBITER_NF11 0xfa0a +#define FSTV0910_P1_NBITER_NF_QPSK_9_10 0xfa0a00ff + +/* P1_NBITER_NF12 */ +#define RSTV0910_P1_NBITER_NF12 0xfa0b +#define FSTV0910_P1_NBITER_NF_8PSK_3_5 0xfa0b00ff + +/* P1_NBITER_NF13 */ +#define RSTV0910_P1_NBITER_NF13 0xfa0c +#define FSTV0910_P1_NBITER_NF_8PSK_2_3 0xfa0c00ff + +/* P1_NBITER_NF14 */ +#define RSTV0910_P1_NBITER_NF14 0xfa0d +#define FSTV0910_P1_NBITER_NF_8PSK_3_4 0xfa0d00ff + +/* P1_NBITER_NF15 */ +#define RSTV0910_P1_NBITER_NF15 0xfa0e +#define FSTV0910_P1_NBITER_NF_8PSK_5_6 0xfa0e00ff + +/* P1_NBITER_NF16 */ +#define RSTV0910_P1_NBITER_NF16 0xfa0f +#define FSTV0910_P1_NBITER_NF_8PSK_8_9 0xfa0f00ff + +/* P1_NBITER_NF17 */ +#define RSTV0910_P1_NBITER_NF17 0xfa10 +#define FSTV0910_P1_NBITER_NF_8PSK_9_10 0xfa1000ff + +/* P1_NBITER_NF18 */ +#define RSTV0910_P1_NBITER_NF18 0xfa11 +#define FSTV0910_P1_NBITER_NF_16APSK_2_3 0xfa1100ff + +/* P1_NBITER_NF19 */ +#define RSTV0910_P1_NBITER_NF19 0xfa12 +#define FSTV0910_P1_NBITER_NF_16APSK_3_4 0xfa1200ff + +/* P1_NBITER_NF20 */ +#define RSTV0910_P1_NBITER_NF20 0xfa13 +#define FSTV0910_P1_NBITER_NF_16APSK_4_5 0xfa1300ff + +/* P1_NBITER_NF21 */ +#define RSTV0910_P1_NBITER_NF21 0xfa14 +#define FSTV0910_P1_NBITER_NF_16APSK_5_6 0xfa1400ff + +/* P1_NBITER_NF22 */ +#define RSTV0910_P1_NBITER_NF22 0xfa15 +#define FSTV0910_P1_NBITER_NF_16APSK_8_9 0xfa1500ff + +/* P1_NBITER_NF23 */ +#define RSTV0910_P1_NBITER_NF23 0xfa16 +#define FSTV0910_P1_NBITER_NF_16APSK_9_10 0xfa1600ff + +/* P1_NBITER_NF24 */ +#define RSTV0910_P1_NBITER_NF24 0xfa17 +#define FSTV0910_P1_NBITER_NF_32APSK_3_4 0xfa1700ff + +/* P1_NBITER_NF25 */ +#define RSTV0910_P1_NBITER_NF25 0xfa18 +#define FSTV0910_P1_NBITER_NF_32APSK_4_5 0xfa1800ff + +/* P1_NBITER_NF26 */ +#define RSTV0910_P1_NBITER_NF26 0xfa19 +#define FSTV0910_P1_NBITER_NF_32APSK_5_6 0xfa1900ff + +/* P1_NBITER_NF27 */ +#define RSTV0910_P1_NBITER_NF27 0xfa1a +#define FSTV0910_P1_NBITER_NF_32APSK_8_9 0xfa1a00ff + +/* P1_NBITER_NF28 */ +#define RSTV0910_P1_NBITER_NF28 0xfa1b +#define FSTV0910_P1_NBITER_NF_32APSK_9_10 0xfa1b00ff + +/* P1_NBITER_SF1 */ +#define RSTV0910_P1_NBITER_SF1 0xfa1c +#define FSTV0910_P1_NBITER_SF_QPSK_1_4 0xfa1c00ff + +/* P1_NBITER_SF2 */ +#define RSTV0910_P1_NBITER_SF2 0xfa1d +#define FSTV0910_P1_NBITER_SF_QPSK_1_3 0xfa1d00ff + +/* P1_NBITER_SF3 */ +#define RSTV0910_P1_NBITER_SF3 0xfa1e +#define FSTV0910_P1_NBITER_SF_QPSK_2_5 0xfa1e00ff + +/* P1_NBITER_SF4 */ +#define RSTV0910_P1_NBITER_SF4 0xfa1f +#define FSTV0910_P1_NBITER_SF_QPSK_1_2 0xfa1f00ff + +/* P1_NBITER_SF5 */ +#define RSTV0910_P1_NBITER_SF5 0xfa20 +#define FSTV0910_P1_NBITER_SF_QPSK_3_5 0xfa2000ff + +/* P1_NBITER_SF6 */ +#define RSTV0910_P1_NBITER_SF6 0xfa21 +#define FSTV0910_P1_NBITER_SF_QPSK_2_3 0xfa2100ff + +/* P1_NBITER_SF7 */ +#define RSTV0910_P1_NBITER_SF7 0xfa22 +#define FSTV0910_P1_NBITER_SF_QPSK_3_4 0xfa2200ff + +/* P1_NBITER_SF8 */ +#define RSTV0910_P1_NBITER_SF8 0xfa23 +#define FSTV0910_P1_NBITER_SF_QPSK_4_5 0xfa2300ff + +/* P1_NBITER_SF9 */ +#define RSTV0910_P1_NBITER_SF9 0xfa24 +#define FSTV0910_P1_NBITER_SF_QPSK_5_6 0xfa2400ff + +/* P1_NBITER_SF10 */ +#define RSTV0910_P1_NBITER_SF10 0xfa25 +#define FSTV0910_P1_NBITER_SF_QPSK_8_9 0xfa2500ff + +/* P1_NBITER_SF12 */ +#define RSTV0910_P1_NBITER_SF12 0xfa26 +#define FSTV0910_P1_NBITER_SF_8PSK_3_5 0xfa2600ff + +/* P1_NBITER_SF13 */ +#define RSTV0910_P1_NBITER_SF13 0xfa27 +#define FSTV0910_P1_NBITER_SF_8PSK_2_3 0xfa2700ff + +/* P1_NBITER_SF14 */ +#define RSTV0910_P1_NBITER_SF14 0xfa28 +#define FSTV0910_P1_NBITER_SF_8PSK_3_4 0xfa2800ff + +/* P1_NBITER_SF15 */ +#define RSTV0910_P1_NBITER_SF15 0xfa29 +#define FSTV0910_P1_NBITER_SF_8PSK_5_6 0xfa2900ff + +/* P1_NBITER_SF16 */ +#define RSTV0910_P1_NBITER_SF16 0xfa2a +#define FSTV0910_P1_NBITER_SF_8PSK_8_9 0xfa2a00ff + +/* P1_NBITER_SF18 */ +#define RSTV0910_P1_NBITER_SF18 0xfa2b +#define FSTV0910_P1_NBITER_SF_16APSK_2_3 0xfa2b00ff + +/* P1_NBITER_SF19 */ +#define RSTV0910_P1_NBITER_SF19 0xfa2c +#define FSTV0910_P1_NBITER_SF_16APSK_3_4 0xfa2c00ff + +/* P1_NBITER_SF20 */ +#define RSTV0910_P1_NBITER_SF20 0xfa2d +#define FSTV0910_P1_NBITER_SF_16APSK_4_5 0xfa2d00ff + +/* P1_NBITER_SF21 */ +#define RSTV0910_P1_NBITER_SF21 0xfa2e +#define FSTV0910_P1_NBITER_SF_16APSK_5_6 0xfa2e00ff + +/* P1_NBITER_SF22 */ +#define RSTV0910_P1_NBITER_SF22 0xfa2f +#define FSTV0910_P1_NBITER_SF_16APSK_8_9 0xfa2f00ff + +/* P1_NBITER_SF24 */ +#define RSTV0910_P1_NBITER_SF24 0xfa30 +#define FSTV0910_P1_NBITER_SF_32APSK_3_4 0xfa3000ff + +/* P1_NBITER_SF25 */ +#define RSTV0910_P1_NBITER_SF25 0xfa31 +#define FSTV0910_P1_NBITER_SF_32APSK_4_5 0xfa3100ff + +/* P1_NBITER_SF26 */ +#define RSTV0910_P1_NBITER_SF26 0xfa32 +#define FSTV0910_P1_NBITER_SF_32APSK_5_6 0xfa3200ff + +/* P1_NBITER_SF27 */ +#define RSTV0910_P1_NBITER_SF27 0xfa33 +#define FSTV0910_P1_NBITER_SF_32APSK_8_9 0xfa3300ff + +/* SELSATUR6 */ +#define RSTV0910_SELSATUR6 0xfa34 +#define FSTV0910_SSAT_SF27 0xfa343008 +#define FSTV0910_SSAT_SF26 0xfa342004 +#define FSTV0910_SSAT_SF25 0xfa341002 +#define FSTV0910_SSAT_SF24 0xfa340001 + +/* SELSATUR5 */ +#define RSTV0910_SELSATUR5 0xfa35 +#define FSTV0910_SSAT_SF22 0xfa357080 +#define FSTV0910_SSAT_SF21 0xfa356040 +#define FSTV0910_SSAT_SF20 0xfa355020 +#define FSTV0910_SSAT_SF19 0xfa354010 +#define FSTV0910_SSAT_SF18 0xfa353008 +#define FSTV0910_SSAT_SF16 0xfa352004 +#define FSTV0910_SSAT_SF15 0xfa351002 +#define FSTV0910_SSAT_SF14 0xfa350001 + +/* SELSATUR4 */ +#define RSTV0910_SELSATUR4 0xfa36 +#define FSTV0910_SSAT_SF13 0xfa367080 +#define FSTV0910_SSAT_SF12 0xfa366040 +#define FSTV0910_SSAT_SF10 0xfa365020 +#define FSTV0910_SSAT_SF9 0xfa364010 +#define FSTV0910_SSAT_SF8 0xfa363008 +#define FSTV0910_SSAT_SF7 0xfa362004 +#define FSTV0910_SSAT_SF6 0xfa361002 +#define FSTV0910_SSAT_SF5 0xfa360001 + +/* SELSATUR3 */ +#define RSTV0910_SELSATUR3 0xfa37 +#define FSTV0910_SSAT_SF4 0xfa377080 +#define FSTV0910_SSAT_SF3 0xfa376040 +#define FSTV0910_SSAT_SF2 0xfa375020 +#define FSTV0910_SSAT_SF1 0xfa374010 +#define FSTV0910_SSAT_NF28 0xfa373008 +#define FSTV0910_SSAT_NF27 0xfa372004 +#define FSTV0910_SSAT_NF26 0xfa371002 +#define FSTV0910_SSAT_NF25 0xfa370001 + +/* SELSATUR2 */ +#define RSTV0910_SELSATUR2 0xfa38 +#define FSTV0910_SSAT_NF24 0xfa387080 +#define FSTV0910_SSAT_NF23 0xfa386040 +#define FSTV0910_SSAT_NF22 0xfa385020 +#define FSTV0910_SSAT_NF21 0xfa384010 +#define FSTV0910_SSAT_NF20 0xfa383008 +#define FSTV0910_SSAT_NF19 0xfa382004 +#define FSTV0910_SSAT_NF18 0xfa381002 +#define FSTV0910_SSAT_NF17 0xfa380001 + +/* SELSATUR1 */ +#define RSTV0910_SELSATUR1 0xfa39 +#define FSTV0910_SSAT_NF16 0xfa397080 +#define FSTV0910_SSAT_NF15 0xfa396040 +#define FSTV0910_SSAT_NF14 0xfa395020 +#define FSTV0910_SSAT_NF13 0xfa394010 +#define FSTV0910_SSAT_NF12 0xfa393008 +#define FSTV0910_SSAT_NF11 0xfa392004 +#define FSTV0910_SSAT_NF10 0xfa391002 +#define FSTV0910_SSAT_NF9 0xfa390001 + +/* SELSATUR0 */ +#define RSTV0910_SELSATUR0 0xfa3a +#define FSTV0910_SSAT_NF8 0xfa3a7080 +#define FSTV0910_SSAT_NF7 0xfa3a6040 +#define FSTV0910_SSAT_NF6 0xfa3a5020 +#define FSTV0910_SSAT_NF5 0xfa3a4010 +#define FSTV0910_SSAT_NF4 0xfa3a3008 +#define FSTV0910_SSAT_NF3 0xfa3a2004 +#define FSTV0910_SSAT_NF2 0xfa3a1002 +#define FSTV0910_SSAT_NF1 0xfa3a0001 + +/* GAINLLR_NF1 */ +#define RSTV0910_GAINLLR_NF1 0xfa40 +#define FSTV0910_GAINLLR_NF_QPSK_1_4 0xfa40007f + +/* GAINLLR_NF2 */ +#define RSTV0910_GAINLLR_NF2 0xfa41 +#define FSTV0910_GAINLLR_NF_QPSK_1_3 0xfa41007f + +/* GAINLLR_NF3 */ +#define RSTV0910_GAINLLR_NF3 0xfa42 +#define FSTV0910_GAINLLR_NF_QPSK_2_5 0xfa42007f + +/* GAINLLR_NF4 */ +#define RSTV0910_GAINLLR_NF4 0xfa43 +#define FSTV0910_GAINLLR_NF_QPSK_1_2 0xfa43007f + +/* GAINLLR_NF5 */ +#define RSTV0910_GAINLLR_NF5 0xfa44 +#define FSTV0910_GAINLLR_NF_QPSK_3_5 0xfa44007f + +/* GAINLLR_NF6 */ +#define RSTV0910_GAINLLR_NF6 0xfa45 +#define FSTV0910_GAINLLR_NF_QPSK_2_3 0xfa45007f + +/* GAINLLR_NF7 */ +#define RSTV0910_GAINLLR_NF7 0xfa46 +#define FSTV0910_GAINLLR_NF_QPSK_3_4 0xfa46007f + +/* GAINLLR_NF8 */ +#define RSTV0910_GAINLLR_NF8 0xfa47 +#define FSTV0910_GAINLLR_NF_QPSK_4_5 0xfa47007f + +/* GAINLLR_NF9 */ +#define RSTV0910_GAINLLR_NF9 0xfa48 +#define FSTV0910_GAINLLR_NF_QPSK_5_6 0xfa48007f + +/* GAINLLR_NF10 */ +#define RSTV0910_GAINLLR_NF10 0xfa49 +#define FSTV0910_GAINLLR_NF_QPSK_8_9 0xfa49007f + +/* GAINLLR_NF11 */ +#define RSTV0910_GAINLLR_NF11 0xfa4a +#define FSTV0910_GAINLLR_NF_QPSK_9_10 0xfa4a007f + +/* GAINLLR_NF12 */ +#define RSTV0910_GAINLLR_NF12 0xfa4b +#define FSTV0910_GAINLLR_NF_8PSK_3_5 0xfa4b007f + +/* GAINLLR_NF13 */ +#define RSTV0910_GAINLLR_NF13 0xfa4c +#define FSTV0910_GAINLLR_NF_8PSK_2_3 0xfa4c007f + +/* GAINLLR_NF14 */ +#define RSTV0910_GAINLLR_NF14 0xfa4d +#define FSTV0910_GAINLLR_NF_8PSK_3_4 0xfa4d007f + +/* GAINLLR_NF15 */ +#define RSTV0910_GAINLLR_NF15 0xfa4e +#define FSTV0910_GAINLLR_NF_8PSK_5_6 0xfa4e007f + +/* GAINLLR_NF16 */ +#define RSTV0910_GAINLLR_NF16 0xfa4f +#define FSTV0910_GAINLLR_NF_8PSK_8_9 0xfa4f007f + +/* GAINLLR_NF17 */ +#define RSTV0910_GAINLLR_NF17 0xfa50 +#define FSTV0910_GAINLLR_NF_8PSK_9_10 0xfa50007f + +/* GAINLLR_NF18 */ +#define RSTV0910_GAINLLR_NF18 0xfa51 +#define FSTV0910_GAINLLR_NF_16APSK_2_3 0xfa51007f + +/* GAINLLR_NF19 */ +#define RSTV0910_GAINLLR_NF19 0xfa52 +#define FSTV0910_GAINLLR_NF_16APSK_3_4 0xfa52007f + +/* GAINLLR_NF20 */ +#define RSTV0910_GAINLLR_NF20 0xfa53 +#define FSTV0910_GAINLLR_NF_16APSK_4_5 0xfa53007f + +/* GAINLLR_NF21 */ +#define RSTV0910_GAINLLR_NF21 0xfa54 +#define FSTV0910_GAINLLR_NF_16APSK_5_6 0xfa54007f + +/* GAINLLR_NF22 */ +#define RSTV0910_GAINLLR_NF22 0xfa55 +#define FSTV0910_GAINLLR_NF_16APSK_8_9 0xfa55007f + +/* GAINLLR_NF23 */ +#define RSTV0910_GAINLLR_NF23 0xfa56 +#define FSTV0910_GAINLLR_NF_16APSK_9_10 0xfa56007f + +/* GAINLLR_NF24 */ +#define RSTV0910_GAINLLR_NF24 0xfa57 +#define FSTV0910_GAINLLR_NF_32APSK_3_4 0xfa57007f + +/* GAINLLR_NF25 */ +#define RSTV0910_GAINLLR_NF25 0xfa58 +#define FSTV0910_GAINLLR_NF_32APSK_4_5 0xfa58007f + +/* GAINLLR_NF26 */ +#define RSTV0910_GAINLLR_NF26 0xfa59 +#define FSTV0910_GAINLLR_NF_32APSK_5_6 0xfa59007f + +/* GAINLLR_NF27 */ +#define RSTV0910_GAINLLR_NF27 0xfa5a +#define FSTV0910_GAINLLR_NF_32APSK_8_9 0xfa5a007f + +/* GAINLLR_NF28 */ +#define RSTV0910_GAINLLR_NF28 0xfa5b +#define FSTV0910_GAINLLR_NF_32APSK_9_10 0xfa5b007f + +/* GAINLLR_SF1 */ +#define RSTV0910_GAINLLR_SF1 0xfa5c +#define FSTV0910_GAINLLR_SF_QPSK_1_4 0xfa5c007f + +/* GAINLLR_SF2 */ +#define RSTV0910_GAINLLR_SF2 0xfa5d +#define FSTV0910_GAINLLR_SF_QPSK_1_3 0xfa5d007f + +/* GAINLLR_SF3 */ +#define RSTV0910_GAINLLR_SF3 0xfa5e +#define FSTV0910_GAINLLR_SF_QPSK_2_5 0xfa5e007f + +/* GAINLLR_SF4 */ +#define RSTV0910_GAINLLR_SF4 0xfa5f +#define FSTV0910_GAINLLR_SF_QPSK_1_2 0xfa5f007f + +/* GAINLLR_SF5 */ +#define RSTV0910_GAINLLR_SF5 0xfa60 +#define FSTV0910_GAINLLR_SF_QPSK_3_5 0xfa60007f + +/* GAINLLR_SF6 */ +#define RSTV0910_GAINLLR_SF6 0xfa61 +#define FSTV0910_GAINLLR_SF_QPSK_2_3 0xfa61007f + +/* GAINLLR_SF7 */ +#define RSTV0910_GAINLLR_SF7 0xfa62 +#define FSTV0910_GAINLLR_SF_QPSK_3_4 0xfa62007f + +/* GAINLLR_SF8 */ +#define RSTV0910_GAINLLR_SF8 0xfa63 +#define FSTV0910_GAINLLR_SF_QPSK_4_5 0xfa63007f + +/* GAINLLR_SF9 */ +#define RSTV0910_GAINLLR_SF9 0xfa64 +#define FSTV0910_GAINLLR_SF_QPSK_5_6 0xfa64007f + +/* GAINLLR_SF10 */ +#define RSTV0910_GAINLLR_SF10 0xfa65 +#define FSTV0910_GAINLLR_SF_QPSK_8_9 0xfa65007f + +/* GAINLLR_SF12 */ +#define RSTV0910_GAINLLR_SF12 0xfa66 +#define FSTV0910_GAINLLR_SF_8PSK_3_5 0xfa66007f + +/* GAINLLR_SF13 */ +#define RSTV0910_GAINLLR_SF13 0xfa67 +#define FSTV0910_GAINLLR_SF_8PSK_2_3 0xfa67007f + +/* GAINLLR_SF14 */ +#define RSTV0910_GAINLLR_SF14 0xfa68 +#define FSTV0910_GAINLLR_SF_8PSK_3_4 0xfa68007f + +/* GAINLLR_SF15 */ +#define RSTV0910_GAINLLR_SF15 0xfa69 +#define FSTV0910_GAINLLR_SF_8PSK_5_6 0xfa69007f + +/* GAINLLR_SF16 */ +#define RSTV0910_GAINLLR_SF16 0xfa6a +#define FSTV0910_GAINLLR_SF_8PSK_8_9 0xfa6a007f + +/* GAINLLR_SF18 */ +#define RSTV0910_GAINLLR_SF18 0xfa6b +#define FSTV0910_GAINLLR_SF_16APSK_2_3 0xfa6b007f + +/* GAINLLR_SF19 */ +#define RSTV0910_GAINLLR_SF19 0xfa6c +#define FSTV0910_GAINLLR_SF_16APSK_3_4 0xfa6c007f + +/* GAINLLR_SF20 */ +#define RSTV0910_GAINLLR_SF20 0xfa6d +#define FSTV0910_GAINLLR_SF_16APSK_4_5 0xfa6d007f + +/* GAINLLR_SF21 */ +#define RSTV0910_GAINLLR_SF21 0xfa6e +#define FSTV0910_GAINLLR_SF_16APSK_5_6 0xfa6e007f + +/* GAINLLR_SF22 */ +#define RSTV0910_GAINLLR_SF22 0xfa6f +#define FSTV0910_GAINLLR_SF_16APSK_8_9 0xfa6f007f + +/* GAINLLR_SF24 */ +#define RSTV0910_GAINLLR_SF24 0xfa70 +#define FSTV0910_GAINLLR_SF_32APSK_3_4 0xfa70007f + +/* GAINLLR_SF25 */ +#define RSTV0910_GAINLLR_SF25 0xfa71 +#define FSTV0910_GAINLLR_SF_32APSK_4_5 0xfa71007f + +/* GAINLLR_SF26 */ +#define RSTV0910_GAINLLR_SF26 0xfa72 +#define FSTV0910_GAINLLR_SF_32APSK_5_6 0xfa72007f + +/* GAINLLR_SF27 */ +#define RSTV0910_GAINLLR_SF27 0xfa73 +#define FSTV0910_GAINLLR_SF_32APSK_8_9 0xfa73007f + +/* CFGEXT */ +#define RSTV0910_CFGEXT 0xfa80 +#define FSTV0910_BYPBCH 0xfa806040 +#define FSTV0910_BYPLDPC 0xfa805020 +#define FSTV0910_SHORTMULT 0xfa802004 + +/* GENCFG */ +#define RSTV0910_GENCFG 0xfa86 +#define FSTV0910_BROADCAST 0xfa864010 +#define FSTV0910_CROSSINPUT 0xfa861002 +#define FSTV0910_DDEMOD 0xfa860001 + +/* LDPCERR1 */ +#define RSTV0910_LDPCERR1 0xfa96 +#define FSTV0910_LDPC_ERRORS1 0xfa9600ff + +/* LDPCERR0 */ +#define RSTV0910_LDPCERR0 0xfa97 +#define FSTV0910_LDPC_ERRORS0 0xfa9700ff + +/* BCHERR */ +#define RSTV0910_BCHERR 0xfa98 +#define FSTV0910_ERRORFLAG 0xfa984010 +#define FSTV0910_BCH_ERRORS_COUNTER 0xfa98000f + +/* P1_MAXEXTRAITER */ +#define RSTV0910_P1_MAXEXTRAITER 0xfab1 +#define FSTV0910_P1_MAX_EXTRA_ITER 0xfab100ff + +/* P2_MAXEXTRAITER */ +#define RSTV0910_P2_MAXEXTRAITER 0xfab6 +#define FSTV0910_P2_MAX_EXTRA_ITER 0xfab600ff + +/* P1_STATUSITER */ +#define RSTV0910_P1_STATUSITER 0xfabc +#define FSTV0910_P1_STATUS_ITER 0xfabc00ff + +/* P1_STATUSMAXITER */ +#define RSTV0910_P1_STATUSMAXITER 0xfabd +#define FSTV0910_P1_STATUS_MAX_ITER 0xfabd00ff + +/* P2_STATUSITER */ +#define RSTV0910_P2_STATUSITER 0xfabe +#define FSTV0910_P2_STATUS_ITER 0xfabe00ff + +/* P2_STATUSMAXITER */ +#define RSTV0910_P2_STATUSMAXITER 0xfabf +#define FSTV0910_P2_STATUS_MAX_ITER 0xfabf00ff + +/* P2_NBITER_NF1 */ +#define RSTV0910_P2_NBITER_NF1 0xfac0 +#define FSTV0910_P2_NBITER_NF_QPSK_1_4 0xfac000ff + +/* P2_NBITER_NF2 */ +#define RSTV0910_P2_NBITER_NF2 0xfac1 +#define FSTV0910_P2_NBITER_NF_QPSK_1_3 0xfac100ff + +/* P2_NBITER_NF3 */ +#define RSTV0910_P2_NBITER_NF3 0xfac2 +#define FSTV0910_P2_NBITER_NF_QPSK_2_5 0xfac200ff + +/* P2_NBITER_NF4 */ +#define RSTV0910_P2_NBITER_NF4 0xfac3 +#define FSTV0910_P2_NBITER_NF_QPSK_1_2 0xfac300ff + +/* P2_NBITER_NF5 */ +#define RSTV0910_P2_NBITER_NF5 0xfac4 +#define FSTV0910_P2_NBITER_NF_QPSK_3_5 0xfac400ff + +/* P2_NBITER_NF6 */ +#define RSTV0910_P2_NBITER_NF6 0xfac5 +#define FSTV0910_P2_NBITER_NF_QPSK_2_3 0xfac500ff + +/* P2_NBITER_NF7 */ +#define RSTV0910_P2_NBITER_NF7 0xfac6 +#define FSTV0910_P2_NBITER_NF_QPSK_3_4 0xfac600ff + +/* P2_NBITER_NF8 */ +#define RSTV0910_P2_NBITER_NF8 0xfac7 +#define FSTV0910_P2_NBITER_NF_QPSK_4_5 0xfac700ff + +/* P2_NBITER_NF9 */ +#define RSTV0910_P2_NBITER_NF9 0xfac8 +#define FSTV0910_P2_NBITER_NF_QPSK_5_6 0xfac800ff + +/* P2_NBITER_NF10 */ +#define RSTV0910_P2_NBITER_NF10 0xfac9 +#define FSTV0910_P2_NBITER_NF_QPSK_8_9 0xfac900ff + +/* P2_NBITER_NF11 */ +#define RSTV0910_P2_NBITER_NF11 0xfaca +#define FSTV0910_P2_NBITER_NF_QPSK_9_10 0xfaca00ff + +/* P2_NBITER_NF12 */ +#define RSTV0910_P2_NBITER_NF12 0xfacb +#define FSTV0910_P2_NBITER_NF_8PSK_3_5 0xfacb00ff + +/* P2_NBITER_NF13 */ +#define RSTV0910_P2_NBITER_NF13 0xfacc +#define FSTV0910_P2_NBITER_NF_8PSK_2_3 0xfacc00ff + +/* P2_NBITER_NF14 */ +#define RSTV0910_P2_NBITER_NF14 0xfacd +#define FSTV0910_P2_NBITER_NF_8PSK_3_4 0xfacd00ff + +/* P2_NBITER_NF15 */ +#define RSTV0910_P2_NBITER_NF15 0xface +#define FSTV0910_P2_NBITER_NF_8PSK_5_6 0xface00ff + +/* P2_NBITER_NF16 */ +#define RSTV0910_P2_NBITER_NF16 0xfacf +#define FSTV0910_P2_NBITER_NF_8PSK_8_9 0xfacf00ff + +/* P2_NBITER_NF17 */ +#define RSTV0910_P2_NBITER_NF17 0xfad0 +#define FSTV0910_P2_NBITER_NF_8PSK_9_10 0xfad000ff + +/* P2_NBITER_NF18 */ +#define RSTV0910_P2_NBITER_NF18 0xfad1 +#define FSTV0910_P2_NBITER_NF_16APSK_2_3 0xfad100ff + +/* P2_NBITER_NF19 */ +#define RSTV0910_P2_NBITER_NF19 0xfad2 +#define FSTV0910_P2_NBITER_NF_16APSK_3_4 0xfad200ff + +/* P2_NBITER_NF20 */ +#define RSTV0910_P2_NBITER_NF20 0xfad3 +#define FSTV0910_P2_NBITER_NF_16APSK_4_5 0xfad300ff + +/* P2_NBITER_NF21 */ +#define RSTV0910_P2_NBITER_NF21 0xfad4 +#define FSTV0910_P2_NBITER_NF_16APSK_5_6 0xfad400ff + +/* P2_NBITER_NF22 */ +#define RSTV0910_P2_NBITER_NF22 0xfad5 +#define FSTV0910_P2_NBITER_NF_16APSK_8_9 0xfad500ff + +/* P2_NBITER_NF23 */ +#define RSTV0910_P2_NBITER_NF23 0xfad6 +#define FSTV0910_P2_NBITER_NF_16APSK_9_10 0xfad600ff + +/* P2_NBITER_NF24 */ +#define RSTV0910_P2_NBITER_NF24 0xfad7 +#define FSTV0910_P2_NBITER_NF_32APSK_3_4 0xfad700ff + +/* P2_NBITER_NF25 */ +#define RSTV0910_P2_NBITER_NF25 0xfad8 +#define FSTV0910_P2_NBITER_NF_32APSK_4_5 0xfad800ff + +/* P2_NBITER_NF26 */ +#define RSTV0910_P2_NBITER_NF26 0xfad9 +#define FSTV0910_P2_NBITER_NF_32APSK_5_6 0xfad900ff + +/* P2_NBITER_NF27 */ +#define RSTV0910_P2_NBITER_NF27 0xfada +#define FSTV0910_P2_NBITER_NF_32APSK_8_9 0xfada00ff + +/* P2_NBITER_NF28 */ +#define RSTV0910_P2_NBITER_NF28 0xfadb +#define FSTV0910_P2_NBITER_NF_32APSK_9_10 0xfadb00ff + +/* P2_NBITER_SF1 */ +#define RSTV0910_P2_NBITER_SF1 0xfadc +#define FSTV0910_P2_NBITER_SF_QPSK_1_4 0xfadc00ff + +/* P2_NBITER_SF2 */ +#define RSTV0910_P2_NBITER_SF2 0xfadd +#define FSTV0910_P2_NBITER_SF_QPSK_1_3 0xfadd00ff + +/* P2_NBITER_SF3 */ +#define RSTV0910_P2_NBITER_SF3 0xfade +#define FSTV0910_P2_NBITER_SF_QPSK_2_5 0xfade00ff + +/* P2_NBITER_SF4 */ +#define RSTV0910_P2_NBITER_SF4 0xfadf +#define FSTV0910_P2_NBITER_SF_QPSK_1_2 0xfadf00ff + +/* P2_NBITER_SF5 */ +#define RSTV0910_P2_NBITER_SF5 0xfae0 +#define FSTV0910_P2_NBITER_SF_QPSK_3_5 0xfae000ff + +/* P2_NBITER_SF6 */ +#define RSTV0910_P2_NBITER_SF6 0xfae1 +#define FSTV0910_P2_NBITER_SF_QPSK_2_3 0xfae100ff + +/* P2_NBITER_SF7 */ +#define RSTV0910_P2_NBITER_SF7 0xfae2 +#define FSTV0910_P2_NBITER_SF_QPSK_3_4 0xfae200ff + +/* P2_NBITER_SF8 */ +#define RSTV0910_P2_NBITER_SF8 0xfae3 +#define FSTV0910_P2_NBITER_SF_QPSK_4_5 0xfae300ff + +/* P2_NBITER_SF9 */ +#define RSTV0910_P2_NBITER_SF9 0xfae4 +#define FSTV0910_P2_NBITER_SF_QPSK_5_6 0xfae400ff + +/* P2_NBITER_SF10 */ +#define RSTV0910_P2_NBITER_SF10 0xfae5 +#define FSTV0910_P2_NBITER_SF_QPSK_8_9 0xfae500ff + +/* P2_NBITER_SF12 */ +#define RSTV0910_P2_NBITER_SF12 0xfae6 +#define FSTV0910_P2_NBITER_SF_8PSK_3_5 0xfae600ff + +/* P2_NBITER_SF13 */ +#define RSTV0910_P2_NBITER_SF13 0xfae7 +#define FSTV0910_P2_NBITER_SF_8PSK_2_3 0xfae700ff + +/* P2_NBITER_SF14 */ +#define RSTV0910_P2_NBITER_SF14 0xfae8 +#define FSTV0910_P2_NBITER_SF_8PSK_3_4 0xfae800ff + +/* P2_NBITER_SF15 */ +#define RSTV0910_P2_NBITER_SF15 0xfae9 +#define FSTV0910_P2_NBITER_SF_8PSK_5_6 0xfae900ff + +/* P2_NBITER_SF16 */ +#define RSTV0910_P2_NBITER_SF16 0xfaea +#define FSTV0910_P2_NBITER_SF_8PSK_8_9 0xfaea00ff + +/* P2_NBITER_SF18 */ +#define RSTV0910_P2_NBITER_SF18 0xfaeb +#define FSTV0910_P2_NBITER_SF_16APSK_2_3 0xfaeb00ff + +/* P2_NBITER_SF19 */ +#define RSTV0910_P2_NBITER_SF19 0xfaec +#define FSTV0910_P2_NBITER_SF_16APSK_3_4 0xfaec00ff + +/* P2_NBITER_SF20 */ +#define RSTV0910_P2_NBITER_SF20 0xfaed +#define FSTV0910_P2_NBITER_SF_16APSK_4_5 0xfaed00ff + +/* P2_NBITER_SF21 */ +#define RSTV0910_P2_NBITER_SF21 0xfaee +#define FSTV0910_P2_NBITER_SF_16APSK_5_6 0xfaee00ff + +/* P2_NBITER_SF22 */ +#define RSTV0910_P2_NBITER_SF22 0xfaef +#define FSTV0910_P2_NBITER_SF_16APSK_8_9 0xfaef00ff + +/* P2_NBITER_SF24 */ +#define RSTV0910_P2_NBITER_SF24 0xfaf0 +#define FSTV0910_P2_NBITER_SF_32APSK_3_4 0xfaf000ff + +/* P2_NBITER_SF25 */ +#define RSTV0910_P2_NBITER_SF25 0xfaf1 +#define FSTV0910_P2_NBITER_SF_32APSK_4_5 0xfaf100ff + +/* P2_NBITER_SF26 */ +#define RSTV0910_P2_NBITER_SF26 0xfaf2 +#define FSTV0910_P2_NBITER_SF_32APSK_5_6 0xfaf200ff + +/* P2_NBITER_SF27 */ +#define RSTV0910_P2_NBITER_SF27 0xfaf3 +#define FSTV0910_P2_NBITER_SF_32APSK_8_9 0xfaf300ff + +/* TSTRES0 */ +#define RSTV0910_TSTRES0 0xff11 +#define FSTV0910_FRESFEC 0xff117080 +#define FSTV0910_FRESSYM1 0xff113008 +#define FSTV0910_FRESSYM2 0xff112004 + +/* TSTOUT */ +#define RSTV0910_TSTOUT 0xff12 +#define FSTV0910_TS 0xff12103e +#define FSTV0910_TEST_OUT 0xff120001 + +/* TSTIN */ +#define RSTV0910_TSTIN 0xff13 +#define FSTV0910_TEST_IN 0xff137080 + +/* P2_TSTDMD */ +#define RSTV0910_P2_TSTDMD 0xff20 +#define FSTV0910_P2_CFRINIT_INVZIGZAG 0xff203008 + +/* P2_TCTL1 */ +#define RSTV0910_P2_TCTL1 0xff24 +#define FSTV0910_P2_TST_IQSYMBSEL 0xff24001f + +/* P2_TCTL4 */ +#define RSTV0910_P2_TCTL4 0xff28 +#define FSTV0910_P2_CFR2TOCFR1_DVBS1 0xff2860c0 + +/* P2_TPKTDELIN */ +#define RSTV0910_P2_TPKTDELIN 0xff37 +#define FSTV0910_P2_CFG_RSPARITYON 0xff377080 + +/* P1_TSTDMD */ +#define RSTV0910_P1_TSTDMD 0xff40 +#define FSTV0910_P1_CFRINIT_INVZIGZAG 0xff403008 + +/* P1_TCTL1 */ +#define RSTV0910_P1_TCTL1 0xff44 +#define FSTV0910_P1_TST_IQSYMBSEL 0xff44001f + +/* P1_TCTL4 */ +#define RSTV0910_P1_TCTL4 0xff48 +#define FSTV0910_P1_CFR2TOCFR1_DVBS1 0xff4860c0 + +/* P1_TPKTDELIN */ +#define RSTV0910_P1_TPKTDELIN 0xff57 +#define FSTV0910_P1_CFG_RSPARITYON 0xff577080 + +/* TSTTSRS */ +#define RSTV0910_TSTTSRS 0xff6d +#define FSTV0910_TSTRS_DISRS2 0xff6d1002 +#define FSTV0910_TSTRS_DISRS1 0xff6d0001 + +/* a count of the number of registers for use in init etc */ +#define STV0910_NBREGS 945 +#define STV0910_NBFIELDS 1818 + +#endif diff --git a/longmynd/stv0910_regs_init.h b/longmynd/stv0910_regs_init.h new file mode 100755 index 0000000..d0b9326 --- /dev/null +++ b/longmynd/stv0910_regs_init.h @@ -0,0 +1,1082 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910_regs_init.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV0910_REGS_INIT_H +#define STV0910_REGS_INIT_H + +typedef struct{ + uint16_t reg; + uint8_t val; +}STReg; + +static STReg STV0910DefVal[STV0910_NBREGS]= +{ + /* SYS registers */ +/* { RSTV0910_MID, 0x51 }, MID R only */ +/* { RSTV0910_DID, 0x20 }, DID R only */ + { RSTV0910_DACR1, 0x00 }, /* DACR1 DAC 1 freq=0, mode=0 */ + { RSTV0910_DACR2, 0x00 }, /* DACR2 DAC 2 freq=0, mode=0 */ + { RSTV0910_PADCFG, 0x05 }, /* PADCFG AGCRF_1 inverted, Push-pull, AGCRF_2 same*/ + { RSTV0910_OUTCFG2, 0x00 }, /* OUTCFG2 all Transport stream signals not inverted */ + { RSTV0910_OUTCFG, 0x00 }, /* OUTCFG TS2 serial pins push-pull, ts1 serial pins push-pull, + ts2 parallel pins push-pull, ts1 parallel pins push-pull + serial data output is D7 */ + { RSTV0910_IRQSTATUS3, 0x00 }, /* IRQSTATUS3 reset all pending IRQs */ + { RSTV0910_IRQSTATUS2, 0x00 }, /* IRQSTATUS2 reset all pending IRQs */ + { RSTV0910_IRQSTATUS1, 0x00 }, /* IRQSTATUS1 reset all pending IRQs */ + { RSTV0910_IRQSTATUS0, 0x00 }, /* IRQSTATUS0 reset all pending IRQs */ + { RSTV0910_IRQMASK3, 0x00 }, /* IRQMASK3 disable all IRQs */ + { RSTV0910_IRQMASK2, 0x00 }, /* IRQMASK2 disable all IRQs*/ + { RSTV0910_IRQMASK1, 0x00 }, /* IRQMASK1 disable all IRQs*/ + { RSTV0910_IRQMASK0, 0x00 }, /* IRQMASK0 disable all IRQs*/ + { RSTV0910_I2CCFG, 0x88 }, /* I2CCFG i2c fastmode enabled, auto inc by 1 */ + { RSTV0910_P1_I2CRPT, 0x38 }, /* P1_I2CRPT was 0x34, updated to 0x38 + P1 repeater off, repeater speed =135/32Mhz, delay on SCL, manual stop + bidirectional SDAT2SDA */ + { RSTV0910_P2_I2CRPT, 0x38 }, /* P2_I2CRPT P2 as above */ + { RSTV0910_GPIO0CFG, 0x82 }, /* GPIO0CFG GPIO 0 push-pull iconfig = 0x01 (force to 1), non inverting */ + { RSTV0910_GPIO1CFG, 0x82 }, /* GPIO1CFG 1 " */ + { RSTV0910_GPIO2CFG, 0x82 }, /* GPIO2CFG 2 " */ + { RSTV0910_GPIO3CFG, 0x82 }, /* GPIO3CFG 3 " */ + { RSTV0910_GPIO4CFG, 0x82 }, /* GPIO4CFG 4 " */ + { RSTV0910_GPIO5CFG, 0x82 }, /* GPIO5CFG was 0x04, updated to 0x82 */ + { RSTV0910_GPIO6CFG, 0x82 }, /* GPIO6CFG was 0x06, updated to 0x82 */ + { RSTV0910_GPIO7CFG, 0x82 }, /* GPIO7CFG 7 " */ + { RSTV0910_GPIO8CFG, 0x82 }, /* GPIO8CFG 8 " */ + { RSTV0910_GPIO9CFG, 0x82 }, /* GPIO9CFG 9 " */ + { RSTV0910_GPIO10CFG, 0x82 }, /* GPIO10CFG 10 " */ + { RSTV0910_GPIO11CFG, 0x82 }, /* GPIO11CFG 11 " */ + { RSTV0910_GPIO12CFG, 0x82 }, /* GPIO12CFG 12 " */ + { RSTV0910_GPIO13CFG, 0x82 }, /* GPIO13CFG 13 " */ + { RSTV0910_GPIO14CFG, 0x82 }, /* GPIO14CFG 14 " */ + { RSTV0910_GPIO15CFG, 0x82 }, /* GPIO15CFG 15 " */ + { RSTV0910_GPIO16CFG, 0x82 }, /* GPIO16CFG 16 " */ + { RSTV0910_GPIO17CFG, 0x82 }, /* GPIO17CFG 17 " */ + { RSTV0910_GPIO18CFG, 0x82 }, /* GPIO18CFG 18 " */ + { RSTV0910_GPIO19CFG, 0x82 }, /* GPIO19CFG 19 " */ + { RSTV0910_GPIO20CFG, 0x82 }, /* GPIO20CFG 20 " */ + { RSTV0910_GPIO21CFG, 0x82 }, /* GPIO21CFG 21 " */ + { RSTV0910_GPIO22CFG, 0x82 }, /* GPIO22CFG 22 " */ + { RSTV0910_STRSTATUS1, 0x60 }, /* STRSTATUS1 was 0x93, updated to 0x60 + gpio2=demod 2 detect iq inversion, + gpio1=demod 1 detect iq inversion */ + { RSTV0910_STRSTATUS2, 0x71 }, /* STRSTATUS2 gpio4=demod 2 lock, gpio3=demod 1 lock */ + { RSTV0910_STRSTATUS3, 0x82 }, /* STRSTATUS3 gpio6=demod 2 failed flag, gpio5=demod 1 failed flag */ + + /* FSK Registers */ + { RSTV0910_FSKTFC2, 0x8c }, /* FSKTFC2 FSK is not being used so can ignore these */ + { RSTV0910_FSKTFC1, 0x45 }, /* FSKTFC1 */ + { RSTV0910_FSKTFC0, 0xc9 }, /* FSKTFC0 */ + { RSTV0910_FSKTDELTAF1, 0x01 }, /* FSKTDELTAF1 */ + { RSTV0910_FSKTDELTAF0, 0x37 }, /* FSKTDELTAF0 */ + { RSTV0910_FSKTCTRL, 0x08 }, /* FSKTCTRL modulator on when FSKTX_EN=1, + FSKTX_OUT=Fc-df (FSKTX_IN=0) = fc+df (FSKTX_IN=1), + modulator enabled by FSKTX_EN input, + fsk modulator output second order sig-delta */ + { RSTV0910_FSKRFC2, 0x10 }, /* FSKRFC2 */ + { RSTV0910_FSKRFC1, 0x45 }, /* FSKRFC1 */ + { RSTV0910_FSKRFC0, 0xc9 }, /* FSKRFC0 */ + { RSTV0910_FSKRK1, 0x38 }, /* FSKRK1 */ + { RSTV0910_FSKRK2, 0x71 }, /* FSKRK2 */ + { RSTV0910_FSKRAGCR, 0x28 }, /* FSKRAGCR */ +/* { RSTV0910_FSKRAGC, 0xff }, FSKRAGC R only */ + { RSTV0910_FSKRALPHA, 0x13 }, /* FSKRALPHA */ + { RSTV0910_FSKRPLTH1, 0x90 }, /* FSKRPLTH1 */ + { RSTV0910_FSKRPLTH0, 0xbe }, /* FSKRPLTH0 */ +/* { RSTV0910_FSKRDF1, 0x80 }, FSKRDF1 R only */ +/* { RSTV0910_FSKRDF0, 0x00 }, FSKRDF0 R Only */ + { RSTV0910_FSKRSTEPP, 0x58 }, /* FSKRSTEPP */ + { RSTV0910_FSKRSTEPM, 0x6f }, /* FSKRSTEPM */ +/* { RSTV0910_FSKRDET1, 0x00 }, FSKRDET1 R only */ +/* { RSTV0910_FSKRDET0, 0x01 }, FSKRDET0 R only */ + { RSTV0910_FSKRDTH1, 0x00 }, /* FSKRDTH1 */ + { RSTV0910_FSKRDTH0, 0xe9 }, /* FSKRDTH0 */ + { RSTV0910_FSKRLOSS, 0x4d }, /* FSKRLOSS */ + + /* clocks and power registers */ + { RSTV0910_NCOARSE, 0x39 }, /* NCOARSE charge pump (CP)=7 (for NDIV from 8 to 71), IDF=1 */ + /* f_mclk2 = 270 MHz, = f_ref * n_div / IDF / 2. f_ref=xtal=30MHz */ + { RSTV0910_NCOARSE1, 0x12 }, /* NCOARSE1 N_DIV = 0x12 */ + { RSTV0910_NCOARSE2, 0x04 }, /* NCOARSE2 ODF=0x4 f_ana = 135MHz = f_ref * n_div / IDF / ODF*/ + { RSTV0910_SYNTCTRL, 0xc2 }, /* SYNTCTRL was 0x02, updated to 0xc2 + stop all clocks except i2c, bypass pll, pll active, osc pad enabled */ + { RSTV0910_FILTCTRL, 0x01 }, /* FILTCTRL filter FSK clock not inverted, if PLL bypassed, clock from CLK1 only */ + { RSTV0910_PLLSTAT, 0x07 }, /* PLLSTAT LSB is PLL lock */ + { RSTV0910_STOPCLK1, 0x00 }, /* STOPCLK1 neither ADC interface clocks are inverted */ + { RSTV0910_STOPCLK2, 0x00 }, /* STOPCLK2 no clocks stopped */ + { RSTV0910_PREGCTL, 0x00 }, /* PREGCTL DCDC 3v3 to 2v5 on */ + { RSTV0910_TSTTNR0, 0x00 }, /* TSTTNR0 was 0x04 updated to 0x00 + FSK analog cell off */ + { RSTV0910_TSTTNR1, 0x44 }, /* TSTTNR1 was 0x46 updated to 0x44 + ADC1 power off. note reset=0x26, upper bits are reserved */ + { RSTV0910_TSTTNR2, 0x4b }, /* TSTTNR2 was 0x6b updated to 0x4b + I2C DiSEqC ADC 1 power off, diseqc clock div = 0xb + f_diseqc = 135MHz/2*(diseq_clk_div+17) = 2.41MHz */ + { RSTV0910_TSTTNR3, 0x46 }, /* TSTTNR3 ADC2 power on. note again reset=0x26 again 0x46 writes to reserved */ + + /* DMD P2 Registers */ + { RSTV0910_P2_IQCONST, 0x00 }, /* P2_IQCONST */ + { RSTV0910_P2_NOSCFG, 0x14 }, /* P2_NOSCFG */ + { RSTV0910_P2_ISYMB, 0x0e }, /* P2_ISYMB */ + { RSTV0910_P2_QSYMB, 0xfc }, /* P2_QSYMB */ + { RSTV0910_P2_AGC1CFG, 0x54 }, /* P2_AGC1CFG */ + { RSTV0910_P2_AGC1CN, 0x99 }, /* P2_AGC1CN */ + { RSTV0910_P2_AGC1REF, 0x58 }, /* P2_AGC1REF */ + { RSTV0910_P2_IDCCOMP, 0x0a }, /* P2_IDCCOMP */ + { RSTV0910_P2_QDCCOMP, 0x09 }, /* P2_QDCCOMP */ + { RSTV0910_P2_POWERI, 0x09 }, /* P2_POWERI */ + { RSTV0910_P2_POWERQ, 0x0a }, /* P2_POWERQ */ + { RSTV0910_P2_AGC1AMM, 0xfd }, /* P2_AGC1AMM */ + { RSTV0910_P2_AGC1QUAD, 0xfd }, /* P2_AGC1QUAD */ + { RSTV0910_P2_AGCIQIN1, 0x00 }, /* P2_AGCIQIN1 */ + { RSTV0910_P2_AGCIQIN0, 0x00 }, /* P2_AGCIQIN0 */ + { RSTV0910_P2_DEMOD, 0x00 }, /* P2_DEMOD */ + { RSTV0910_P2_DMDMODCOD, 0x10 }, /* P2_DMDMODCOD */ + { RSTV0910_P2_DSTATUS, 0x10 }, /* P2_DSTATUS */ + { RSTV0910_P2_DSTATUS2, 0x80 }, /* P2_DSTATUS2 */ + { RSTV0910_P2_DMDCFGMD, 0xc9 }, /* P2_DMDCFGMD */ + { RSTV0910_P2_DMDCFG2, 0x3b }, /* P2_DMDCFG2 */ + { RSTV0910_P2_DMDISTATE, 0x5c }, /* P2_DMDISTATE */ + { RSTV0910_P2_DMDT0M, 0x40 }, /* P2_DMDT0M */ + { RSTV0910_P2_DMDSTATE, 0x1c }, /* P2_DMDSTATE */ + { RSTV0910_P2_DMDFLYW, 0x00 }, /* P2_DMDFLYW */ + { RSTV0910_P2_DSTATUS3, 0x80 }, /* P2_DSTATUS3 */ + { RSTV0910_P2_DMDCFG3, 0x08 }, /* P2_DMDCFG3 */ + { RSTV0910_P2_DMDCFG4, 0x04 }, /* P2_DMDCFG4 */ + { RSTV0910_P2_CORRELMANT, 0x78 }, /* P2_CORRELMANT */ + { RSTV0910_P2_CORRELABS, 0x8C }, /* P2_CORRELABS */ + { RSTV0910_P2_CORRELEXP, 0xaa }, /* P2_CORRELEXP */ + { RSTV0910_P2_PLHMODCOD, 0x10 }, /* P2_PLHMODCOD */ + { RSTV0910_P2_DMDREG, 0x01 }, /* P2_DMDREG */ + { RSTV0910_P2_AGCNADJ, 0x00 }, /* P2_AGCNADJ */ + { RSTV0910_P2_AGCKS, 0x00 }, /* P2_AGCKS */ + { RSTV0910_P2_AGCKQ, 0x00 }, /* P2_AGCKQ */ + { RSTV0910_P2_AGCK8, 0x00 }, /* P2_AGCK8 */ + { RSTV0910_P2_AGCK16, 0x00 }, /* P2_AGCK16 */ + { RSTV0910_P2_AGCK32, 0x00 }, /* P2_AGCK32 */ + { RSTV0910_P2_AGC2O, 0x5b }, /* P2_AGC2O */ + { RSTV0910_P2_AGC2REF, 0x38 }, /* P2_AGC2REF */ + { RSTV0910_P2_AGC1ADJ, 0x58 }, /* P2_AGC1ADJ */ + { RSTV0910_P2_AGCRSADJ, 0x38 }, /* P2_AGCRSADJ */ + { RSTV0910_P2_AGCRQADJ, 0x38 }, /* P2_AGCRQADJ */ + { RSTV0910_P2_AGCR8ADJ, 0x38 }, /* P2_AGCR8ADJ */ + { RSTV0910_P2_AGCR1ADJ, 0x38 }, /* P2_AGCR1ADJ */ + { RSTV0910_P2_AGCR2ADJ, 0x38 }, /* P2_AGCR2ADJ */ + { RSTV0910_P2_AGCR3ADJ, 0x47 }, /* P2_AGCR3ADJ */ + { RSTV0910_P2_AGCREFADJ, 0x38 }, /* P2_AGCREFADJ */ + { RSTV0910_P2_AGC2I1, 0x1c }, /* P2_AGC2I1 */ + { RSTV0910_P2_AGC2I0, 0x74 }, /* P2_AGC2I0 */ + { RSTV0910_P2_CARCFG, 0x46 }, /* P2_CARCFG */ + { RSTV0910_P2_ACLC, 0x2b }, /* P2_ACLC */ + { RSTV0910_P2_BCLC, 0x1a }, /* P2_BCLC */ + { RSTV0910_P2_ACLCS2, 0x00 }, /* P2_ACLCS2 */ + { RSTV0910_P2_BCLCS2, 0x00 }, /* P2_BCLCS2 */ + { RSTV0910_P2_CARFREQ, 0x79 }, /* P2_CARFREQ */ + { RSTV0910_P2_CARHDR, 0x1c }, /* P2_CARHDR */ + { RSTV0910_P2_LDT, 0xd0 }, /* P2_LDT */ + { RSTV0910_P2_LDT2, 0xb8 }, /* P2_LDT2 */ + { RSTV0910_P2_CFRICFG, 0xf9 }, /* P2_CFRICFG */ + { RSTV0910_P2_CFRUP1, 0x0e }, /* P2_CFRUP1 */ + { RSTV0910_P2_CFRUP0, 0x69 }, /* P2_CFRUP0 */ + { RSTV0910_P2_CFRIBASE1, 0x01 }, /* P2_CFRIBASE1 */ + { RSTV0910_P2_CFRIBASE0, 0xf5 }, /* P2_CFRIBASE0 */ + { RSTV0910_P2_CFRLOW1, 0xf1 }, /* P2_CFRLOW1 */ + { RSTV0910_P2_CFRLOW0, 0x97 }, /* P2_CFRLOW0 */ + { RSTV0910_P2_CFRINIT1, 0x01 }, /* P2_CFRINIT1 */ + { RSTV0910_P2_CFRINIT0, 0xf5 }, /* P2_CFRINIT0 */ + { RSTV0910_P2_CFRINC1, 0x03 }, /* P2_CFRINC1 */ + { RSTV0910_P2_CFRINC0, 0x8e }, /* P2_CFRINC0 */ + { RSTV0910_P2_CFR2, 0x01 }, /* P2_CFR2 */ + { RSTV0910_P2_CFR1, 0xf5 }, /* P2_CFR1 */ + { RSTV0910_P2_CFR0, 0x00 }, /* P2_CFR0 */ + { RSTV0910_P2_LDI, 0xb6 }, /* P2_LDI */ + { RSTV0910_P2_TMGCFG, 0xd3 }, /* P2_TMGCFG */ + { RSTV0910_P2_RTC, 0x68 }, /* P2_RTC */ + { RSTV0910_P2_RTCS2, 0x68 }, /* P2_RTCS2 */ + { RSTV0910_P2_TMGTHRISE, 0x1e }, /* P2_TMGTHRISE */ + { RSTV0910_P2_TMGTHFALL, 0x08 }, /* P2_TMGTHFALL */ + { RSTV0910_P2_SFRUPRATIO, 0x20 }, /* P2_SFRUPRATIO */ + { RSTV0910_P2_SFRLOWRATIO, 0xd0 }, /* P2_SFRLOWRATIO */ + { RSTV0910_P2_KTTMG, 0xa0 }, /* P2_KTTMG */ + { RSTV0910_P2_KREFTMG, 0x80 }, /* P2_KREFTMG */ + { RSTV0910_P2_SFRSTEP, 0x88 }, /* P2_SFRSTEP */ + { RSTV0910_P2_TMGCFG2, 0x80 }, /* P2_TMGCFG2 */ + { RSTV0910_P2_KREFTMG2, 0x80 }, /* P2_KREFTMG2 */ + { RSTV0910_P2_TMGCFG3, 0x06 }, /* P2_TMGCFG3 */ + { RSTV0910_P2_SFRINIT1, 0x38 }, /* P2_SFRINIT1 */ + { RSTV0910_P2_SFRINIT0, 0xe3 }, /* P2_SFRINIT0 */ + { RSTV0910_P2_SFRUP1, 0x3f }, /* P2_SFRUP1 */ + { RSTV0910_P2_SFRUP0, 0xff }, /* P2_SFRUP0 */ + { RSTV0910_P2_SFRLOW1, 0x2e }, /* P2_SFRLOW1 */ + { RSTV0910_P2_SFRLOW0, 0x39 }, /* P2_SFRLOW0 */ + { RSTV0910_P2_SFR3, 0x38 }, /* P2_SFR3 */ + { RSTV0910_P2_SFR2, 0xe3 }, /* P2_SFR2 */ + { RSTV0910_P2_SFR1, 0x00 }, /* P2_SFR1 */ + { RSTV0910_P2_SFR0, 0x00 }, /* P2_SFR0 */ + { RSTV0910_P2_TMGREG2, 0x00 }, /* P2_TMGREG2 */ + { RSTV0910_P2_TMGREG1, 0x00 }, /* P2_TMGREG1 */ + { RSTV0910_P2_TMGREG0, 0x00 }, /* P2_TMGREG0 */ + { RSTV0910_P2_TMGLOCK1, 0xe4 }, /* P2_TMGLOCK1 */ + { RSTV0910_P2_TMGLOCK0, 0x00 }, /* P2_TMGLOCK0 */ + { RSTV0910_P2_TMGOBS, 0x10 }, /* P2_TMGOBS */ + { RSTV0910_P2_EQUALCFG, 0x41 }, /* P2_EQUALCFG */ + { RSTV0910_P2_EQUAI1, 0x00 }, /* P2_EQUAI1 */ + { RSTV0910_P2_EQUAQ1, 0x00 }, /* P2_EQUAQ1 */ + { RSTV0910_P2_EQUAI2, 0x00 }, /* P2_EQUAI2 */ + { RSTV0910_P2_EQUAQ2, 0x00 }, /* P2_EQUAQ2 */ + { RSTV0910_P2_EQUAI3, 0x00 }, /* P2_EQUAI3 */ + { RSTV0910_P2_EQUAQ3, 0x00 }, /* P2_EQUAQ3 */ + { RSTV0910_P2_EQUAI4, 0x00 }, /* P2_EQUAI4 */ + { RSTV0910_P2_EQUAQ4, 0x00 }, /* P2_EQUAQ4 */ + { RSTV0910_P2_EQUAI5, 0x00 }, /* P2_EQUAI5 */ + { RSTV0910_P2_EQUAQ5, 0x00 }, /* P2_EQUAQ5 */ + { RSTV0910_P2_EQUAI6, 0x00 }, /* P2_EQUAI6 */ + { RSTV0910_P2_EQUAQ6, 0x00 }, /* P2_EQUAQ6 */ + { RSTV0910_P2_EQUAI7, 0x00 }, /* P2_EQUAI7 */ + { RSTV0910_P2_EQUAQ7, 0x00 }, /* P2_EQUAQ7 */ + { RSTV0910_P2_EQUAI8, 0x00 }, /* P2_EQUAI8 */ + { RSTV0910_P2_EQUAQ8, 0x00 }, /* P2_EQUAQ8 */ + { RSTV0910_P2_NNOSDATAT1, 0xff }, /* P2_NNOSDATAT1 */ + { RSTV0910_P2_NNOSDATAT0, 0xff }, /* P2_NNOSDATAT0 */ + { RSTV0910_P2_NNOSDATA1, 0xff }, /* P2_NNOSDATA1 */ + { RSTV0910_P2_NNOSDATA0, 0xff }, /* P2_NNOSDATA0 */ + { RSTV0910_P2_NNOSPLHT1, 0xff }, /* P2_NNOSPLHT1 */ + { RSTV0910_P2_NNOSPLHT0, 0xff }, /* P2_NNOSPLHT0 */ + { RSTV0910_P2_NNOSPLH1, 0xff }, /* P2_NNOSPLH1 */ + { RSTV0910_P2_NNOSPLH0, 0xff }, /* P2_NNOSPLH0 */ + { RSTV0910_P2_NOSDATAT1, 0xff }, /* P2_NOSDATAT1 */ + { RSTV0910_P2_NOSDATAT0, 0xff }, /* P2_NOSDATAT0 */ + { RSTV0910_P2_NNOSFRAME1, 0xff }, /* P2_NNOSFRAME1 */ + { RSTV0910_P2_NNOSFRAME0, 0xff }, /* P2_NNOSFRAME0 */ + { RSTV0910_P2_NNOSRAD1, 0x00 }, /* P2_NNOSRAD1 */ + { RSTV0910_P2_NNOSRAD0, 0x00 }, /* P2_NNOSRAD0 */ + { RSTV0910_P2_NOSCFGF1, 0x00 }, /* P2_NOSCFGF1 */ + { RSTV0910_P2_NOSCFGF2, 0x00 }, /* P2_NOSCFGF2 */ + { RSTV0910_P2_CAR2CFG, 0x06 }, /* P2_CAR2CFG */ + { RSTV0910_P2_CFR2CFR1, 0xe5 }, /* P2_CFR2CFR1 */ + { RSTV0910_P2_CAR3CFG, 0x02 }, /* P2_CAR3CFG */ + { RSTV0910_P2_CFR22, 0x00 }, /* P2_CFR22 */ + { RSTV0910_P2_CFR21, 0x00 }, /* P2_CFR21 */ + { RSTV0910_P2_CFR20, 0x00 }, /* P2_CFR20 */ + { RSTV0910_P2_ACLC2S2Q, 0x0b }, /* P2_ACLC2S2Q */ + { RSTV0910_P2_ACLC2S28, 0x0a }, /* P2_ACLC2S28 */ + { RSTV0910_P2_ACLC2S216A, 0x49 }, /* P2_ACLC2S216A */ + { RSTV0910_P2_ACLC2S232A, 0x48 }, /* P2_ACLC2S232A */ + { RSTV0910_P2_BCLC2S2Q, 0x84 }, /* P2_BCLC2S2Q */ + { RSTV0910_P2_BCLC2S28, 0x84 }, /* P2_BCLC2S28 */ + { RSTV0910_P2_BCLC2S216A, 0x84 }, /* P2_BCLC2S216A */ + { RSTV0910_P2_BCLC2S232A, 0x84 }, /* P2_BCLC2S232A */ + { RSTV0910_P2_PLROOT2, 0x00 }, /* P2_PLROOT2 */ + { RSTV0910_P2_PLROOT1, 0x00 }, /* P2_PLROOT1 */ + { RSTV0910_P2_PLROOT0, 0x01 }, /* P2_PLROOT0 */ + { RSTV0910_P2_MODCODLST0, 0xff }, /* P2_MODCODLST0 */ + { RSTV0910_P2_MODCODLST1, 0xfc }, /* P2_MODCODLST1 */ + { RSTV0910_P2_MODCODLST2, 0x00 }, /* P2_MODCODLST2 */ + { RSTV0910_P2_MODCODLST3, 0x00 }, /* P2_MODCODLST3 */ + { RSTV0910_P2_MODCODLST4, 0x00 }, /* P2_MODCODLST4 */ + { RSTV0910_P2_MODCODLST5, 0x00 }, /* P2_MODCODLST5 */ + { RSTV0910_P2_MODCODLST6, 0x00 }, /* P2_MODCODLST6 */ + { RSTV0910_P2_MODCODLST7, 0xc0 }, /* P2_MODCODLST7 */ + { RSTV0910_P2_MODCODLST8, 0x00 }, /* P2_MODCODLST8 */ + { RSTV0910_P2_MODCODLST9, 0x00 }, /* P2_MODCODLST9 */ + { RSTV0910_P2_MODCODLSTA, 0xc0 }, /* P2_MODCODLSTA */ + { RSTV0910_P2_MODCODLSTB, 0x00 }, /* P2_MODCODLSTB */ + { RSTV0910_P2_MODCODLSTC, 0x00 }, /* P2_MODCODLSTC */ + { RSTV0910_P2_MODCODLSTD, 0x00 }, /* P2_MODCODLSTD */ + { RSTV0910_P2_MODCODLSTE, 0x00 }, /* P2_MODCODLSTE */ + { RSTV0910_P2_MODCODLSTF, 0x0f }, /* P2_MODCODLSTF */ + { RSTV0910_P2_GAUSSR0, 0x98 }, /* P2_GAUSSR0 */ + { RSTV0910_P2_CCIR0, 0x30 }, /* P2_CCIR0 */ + { RSTV0910_P2_CCIQUANT, 0xac }, /* P2_CCIQUANT */ + { RSTV0910_P2_CCITHRES, 0x50 }, /* P2_CCITHRES */ + { RSTV0910_P2_CCIACC, 0x00 }, /* P2_CCIACC */ + { RSTV0910_P2_DSTATUS4, 0x64 }, /* P2_DSTATUS4 */ + { RSTV0910_P2_DMDRESCFG, 0x29 }, /* P2_DMDRESCFG */ + { RSTV0910_P2_DMDRESADR, 0x00 }, /* P2_DMDRESADR */ + { RSTV0910_P2_DMDRESDATA7, 0x00 }, /* P2_DMDRESDATA7 */ + { RSTV0910_P2_DMDRESDATA6, 0x00 }, /* P2_DMDRESDATA6 */ + { RSTV0910_P2_DMDRESDATA5, 0x00 }, /* P2_DMDRESDATA5 */ + { RSTV0910_P2_DMDRESDATA4, 0x00 }, /* P2_DMDRESDATA4 */ + { RSTV0910_P2_DMDRESDATA3, 0x00 }, /* P2_DMDRESDATA3 */ + { RSTV0910_P2_DMDRESDATA2, 0x00 }, /* P2_DMDRESDATA2 */ + { RSTV0910_P2_DMDRESDATA1, 0x00 }, /* P2_DMDRESDATA1 */ + { RSTV0910_P2_DMDRESDATA0, 0x00 }, /* P2_DMDRESDATA0 */ + { RSTV0910_P2_FFEI1, 0x00 }, /* P2_FFEI1 */ + { RSTV0910_P2_FFEQ1, 0x00 }, /* P2_FFEQ1 */ + { RSTV0910_P2_FFEI2, 0x00 }, /* P2_FFEI2 */ + { RSTV0910_P2_FFEQ2, 0x00 }, /* P2_FFEQ2 */ + { RSTV0910_P2_FFEI3, 0x00 }, /* P2_FFEI3 */ + { RSTV0910_P2_FFEQ3, 0x00 }, /* P2_FFEQ3 */ + { RSTV0910_P2_FFEI4, 0x00 }, /* P2_FFEI4 */ + { RSTV0910_P2_FFEQ4, 0x00 }, /* P2_FFEQ4 */ + { RSTV0910_P2_FFECFG, 0x71 }, /* P2_FFECFG */ + { RSTV0910_P2_TNRCFG2, 0x02 }, /* P2_TNRCFG2 */ + { RSTV0910_P2_SMAPCOEF7, 0x00 }, /* P2_SMAPCOEF7 */ + { RSTV0910_P2_SMAPCOEF6, 0x00 }, /* P2_SMAPCOEF6 */ + { RSTV0910_P2_SMAPCOEF5, 0x00 }, /* P2_SMAPCOEF5 */ + { RSTV0910_P2_SMAPCOEF4, 0x00 }, /* P2_SMAPCOEF4 */ + { RSTV0910_P2_SMAPCOEF3, 0x00 }, /* P2_SMAPCOEF3 */ + { RSTV0910_P2_SMAPCOEF2, 0x00 }, /* P2_SMAPCOEF2 */ + { RSTV0910_P2_SMAPCOEF1, 0x00 }, /* P2_SMAPCOEF1 */ + { RSTV0910_P2_SMAPCOEF0, 0x71 }, /* P2_SMAPCOEF0 */ + { RSTV0910_P2_NOSTHRES1, 0x60 }, /* P2_NOSTHRES1 */ + { RSTV0910_P2_NOSTHRES2, 0x69 }, /* P2_NOSTHRES2 */ + { RSTV0910_P2_NOSDIFF1, 0x80 }, /* P2_NOSDIFF1 */ + { RSTV0910_P2_RAINFADE, 0x35 }, /* P2_RAINFADE */ + { RSTV0910_P2_NOSRAMCFG, 0x28 }, /* P2_NOSRAMCFG */ + { RSTV0910_P2_NOSRAMPOS, 0x26 }, /* P2_NOSRAMPOS */ + { RSTV0910_P2_NOSRAMVAL, 0x86 }, /* P2_NOSRAMVAL */ + { RSTV0910_P2_DMDPLHSTAT, 0x00 }, /* P2_DMDPLHSTAT */ + { RSTV0910_P2_LOCKTIME3, 0xc0 }, /* P2_LOCKTIME3 */ + { RSTV0910_P2_LOCKTIME2, 0xd2 }, /* P2_LOCKTIME2 */ + { RSTV0910_P2_LOCKTIME1, 0x3b }, /* P2_LOCKTIME1 */ + { RSTV0910_P2_LOCKTIME0, 0x46 }, /* P2_LOCKTIME0 */ + /* DVB1 P2 Registers */ + { RSTV0910_P2_VITSCALE, 0x80 }, /* P2_VITSCALE */ + { RSTV0910_P2_FECM, 0x00 }, /* P2_FECM */ + { RSTV0910_P2_VTH12, 0xd7 }, /* P2_VTH12 */ + { RSTV0910_P2_VTH23, 0x85 }, /* P2_VTH23 */ + { RSTV0910_P2_VTH34, 0x58 }, /* P2_VTH34 */ + { RSTV0910_P2_VTH56, 0x3a }, /* P2_VTH56 */ + { RSTV0910_P2_VTH67, 0x34 }, /* P2_VTH67 */ + { RSTV0910_P2_VTH78, 0x28 }, /* P2_VTH78 */ + { RSTV0910_P2_VITCURPUN, 0x0d }, /* P2_VITCURPUN */ + { RSTV0910_P2_VERROR, 0xff }, /* P2_VERROR */ + { RSTV0910_P2_PRVIT, 0x2f }, /* P2_PRVIT */ + { RSTV0910_P2_VAVSRVIT, 0x00 }, /* P2_VAVSRVIT */ + { RSTV0910_P2_VSTATUSVIT, 0xa6 }, /* P2_VSTATUSVIT */ + { RSTV0910_P2_VTHINUSE, 0xd7 }, /* P2_VTHINUSE */ + { RSTV0910_P2_KDIV12, 0x27 }, /* P2_KDIV12 */ + { RSTV0910_P2_KDIV23, 0x32 }, /* P2_KDIV23 */ + { RSTV0910_P2_KDIV34, 0x32 }, /* P2_KDIV34 */ + { RSTV0910_P2_KDIV56, 0x32 }, /* P2_KDIV56 */ + { RSTV0910_P2_KDIV67, 0x32 }, /* P2_KDIV67 */ + { RSTV0910_P2_KDIV78, 0x50 }, /* P2_KDIV78 */ + { RSTV0910_P2_TSPIDFLT1, 0x00 }, /* P2_TSPIDFLT1 */ + { RSTV0910_P2_TSPIDFLT0, 0x00 }, /* P2_TSPIDFLT0 */ + /* DVB2 P2 Registers */ + { RSTV0910_P2_PDELCTRL0, 0x01 }, /* P2_PDELCTRL0 */ + { RSTV0910_P2_PDELCTRL1, 0x00 }, /* P2_PDELCTRL1 */ + { RSTV0910_P2_PDELCTRL2, 0x20 }, /* P2_PDELCTRL2 */ + { RSTV0910_P2_HYSTTHRESH, 0x41 }, /* P2_HYSTTHRESH */ + { RSTV0910_P2_UPLCCST0, 0xe6 }, /* P2_UPLCCST0 */ + { RSTV0910_P2_ISIENTRY, 0x00 }, /* P2_ISIENTRY */ + { RSTV0910_P2_ISIBITENA, 0x00 }, /* P2_ISIBITENA */ + { RSTV0910_P2_MATSTR1, 0xf0 }, /* P2_MATSTR1 */ + { RSTV0910_P2_MATSTR0, 0x00 }, /* P2_MATSTR0 */ + { RSTV0910_P2_UPLSTR1, 0x05 }, /* P2_UPLSTR1 */ + { RSTV0910_P2_UPLSTR0, 0xe0 }, /* P2_UPLSTR0 */ + { RSTV0910_P2_DFLSTR1, 0x7d }, /* P2_DFLSTR1 */ + { RSTV0910_P2_DFLSTR0, 0x80 }, /* P2_DFLSTR0 */ + { RSTV0910_P2_SYNCSTR, 0x47 }, /* P2_SYNCSTR */ + { RSTV0910_P2_SYNCDSTR1, 0x00 }, /* P2_SYNCDSTR1 */ + { RSTV0910_P2_SYNCDSTR0, 0x00 }, /* P2_SYNCDSTR0 */ + { RSTV0910_P2_PDELSTATUS1, 0x94 }, /* P2_PDELSTATUS1 */ + { RSTV0910_P2_PDELSTATUS2, 0x92 }, /* P2_PDELSTATUS2 */ + { RSTV0910_P2_BBFCRCKO1, 0x00 }, /* P2_BBFCRCKO1 */ + { RSTV0910_P2_BBFCRCKO0, 0x00 }, /* P2_BBFCRCKO0 */ + { RSTV0910_P2_UPCRCKO1, 0x00 }, /* P2_UPCRCKO1 */ + { RSTV0910_P2_UPCRCKO0, 0x00 }, /* P2_UPCRCKO0 */ + { RSTV0910_P2_PDELCTRL3, 0x00 }, /* P2_PDELCTRL3 */ + /* TS P2 Registers */ + { RSTV0910_P2_TSSTATEM, 0xf0 }, /* P2_TSSTATEM */ + { RSTV0910_P2_TSSTATEL, 0x12 }, /* P2_TSSTATEL */ + { RSTV0910_P2_TSCFGH, 0x80 }, /* P2_TSCFGH */ + { RSTV0910_P2_TSCFGM, 0x04 }, /* P2_TSCFGM */ + { RSTV0910_P2_TSCFGL, 0x20 }, /* P2_TSCFGL */ + { RSTV0910_P2_TSSYNC, 0x00 }, /* P2_TSSYNC */ + { RSTV0910_P2_TSINSDELH, 0x00 }, /* P2_TSINSDELH */ + { RSTV0910_P2_TSINSDELM, 0x00 }, /* P2_TSINSDELM */ + { RSTV0910_P2_TSINSDELL, 0x00 }, /* P2_TSINSDELL */ + { RSTV0910_P2_TSDIVN, 0x03 }, /* P2_TSDIVN */ + { RSTV0910_P2_TSCFG4, 0x00 }, /* P2_TSCFG4 */ + { RSTV0910_P2_TSSPEED, 0x33 }, /* P2_TSSPEED */ +/* { RSTV0910_P2_TSSTATUS, 0x52 }, P2_TSSTATUS */ + { RSTV0910_P2_TSSTATUS2, 0x02 }, /* P2_TSSTATUS2 */ + { RSTV0910_P2_TSBITRATE1, 0x00 }, /* P2_TSBITRATE1 */ + { RSTV0910_P2_TSBITRATE0, 0x03 }, /* P2_TSBITRATE0 */ + { RSTV0910_P2_TSPACKLEN1, 0x00 }, /* P2_TSPACKLEN1 */ + { RSTV0910_P2_TSDLY2, 0x00 }, /* P2_TSDLY2 */ + { RSTV0910_P2_TSDLY1, 0x00 }, /* P2_TSDLY1 */ + { RSTV0910_P2_TSDLY0, 0x00 }, /* P2_TSDLY0 */ + { RSTV0910_P2_TSNPDAV, 0x00 }, /* P2_TSNPDAV */ + { RSTV0910_P2_TSBUFSTAT2, 0x00 }, /* P2_TSBUFSTAT2 */ + { RSTV0910_P2_TSBUFSTAT1, 0x00 }, /* P2_TSBUFSTAT1 */ + { RSTV0910_P2_TSBUFSTAT0, 0x00 }, /* P2_TSBUFSTAT0 */ + { RSTV0910_P2_TSDEBUGL, 0x04 }, /* P2_TSDEBUGL */ + { RSTV0910_P2_TSDLYSET2, 0x01 }, /* P2_TSDLYSET2 */ + { RSTV0910_P2_TSDLYSET1, 0x18 }, /* P2_TSDLYSET1 */ + { RSTV0910_P2_TSDLYSET0, 0x00 }, /* P2_TSDLYSET0 */ + { RSTV0910_P2_ERRCTRL1, 0x67 }, /* P2_ERRCTRL1 */ + { RSTV0910_P2_ERRCNT12, 0x00 }, /* P2_ERRCNT12 */ + { RSTV0910_P2_ERRCNT11, 0x00 }, /* P2_ERRCNT11 */ + { RSTV0910_P2_ERRCNT10, 0x00 }, /* P2_ERRCNT10 */ + { RSTV0910_P2_ERRCTRL2, 0xc1 }, /* P2_ERRCTRL2 */ + { RSTV0910_P2_ERRCNT22, 0x00 }, /* P2_ERRCNT22 */ + { RSTV0910_P2_ERRCNT21, 0x00 }, /* P2_ERRCNT21 */ + { RSTV0910_P2_ERRCNT20, 0x00 }, /* P2_ERRCNT20 */ + { RSTV0910_P2_FECSPY, 0xa8 }, /* P2_FECSPY */ + { RSTV0910_P2_FSPYCFG, 0x2c }, /* P2_FSPYCFG */ + { RSTV0910_P2_FSPYDATA, 0x3a }, /* P2_FSPYDATA */ + { RSTV0910_P2_FSPYOUT, 0x07 }, /* P2_FSPYOUT */ + { RSTV0910_P2_FSTATUS, 0x00 }, /* P2_FSTATUS */ + { RSTV0910_P2_FBERCPT4, 0x00 }, /* P2_FBERCPT4 */ + { RSTV0910_P2_FBERCPT3, 0x00 }, /* P2_FBERCPT3 */ + { RSTV0910_P2_FBERCPT2, 0x00 }, /* P2_FBERCPT2 */ + { RSTV0910_P2_FBERCPT1, 0x00 }, /* P2_FBERCPT1 */ + { RSTV0910_P2_FBERCPT0, 0x00 }, /* P2_FBERCPT0 */ + { RSTV0910_P2_FBERERR2, 0x00 }, /* P2_FBERERR2 */ + { RSTV0910_P2_FBERERR1, 0x00 }, /* P2_FBERERR1 */ + { RSTV0910_P2_FBERERR0, 0x00 }, /* P2_FBERERR0 */ + { RSTV0910_P2_FSPYBER, 0x12 }, /* P2_FSPYBER */ + { RSTV0910_P2_SFERROR, 0xff }, /* P2_SFERROR */ + /* SFEC P2 Registers */ + { RSTV0910_P2_SFECSTATUS, 0x46 }, /* P2_SFECSTATUS */ + { RSTV0910_P2_SFKDIV12, 0x1f }, /* P2_SFKDIV12 */ + { RSTV0910_P2_SFKDIV23, 0x22 }, /* P2_SFKDIV23 */ + { RSTV0910_P2_SFKDIV34, 0x24 }, /* P2_SFKDIV34 */ + { RSTV0910_P2_SFKDIV56, 0x24 }, /* P2_SFKDIV56 */ + { RSTV0910_P2_SFKDIV67, 0x29 }, /* P2_SFKDIV67 */ + { RSTV0910_P2_SFKDIV78, 0x2c }, /* P2_SFKDIV78 */ + { RSTV0910_P2_SFSTATUS, 0x4e }, /* P2_SFSTATUS */ + { RSTV0910_P2_SFDLYSET2, 0x00 }, /* P2_SFDLYSET2 */ + { RSTV0910_P2_SFERRCTRL, 0x94 }, /* P2_SFERRCTRL */ + { RSTV0910_P2_SFERRCNT2, 0x80 }, /* P2_SFERRCNT2 */ + { RSTV0910_P2_SFERRCNT1, 0x00 }, /* P2_SFERRCNT1 */ + { RSTV0910_P2_SFERRCNT0, 0x00 }, /* P2_SFERRCNT0 */ + + /* DMD P1 Registers */ + { RSTV0910_P1_IQCONST, 0x00 }, /* P1_IQCONST */ + { RSTV0910_P1_NOSCFG, 0x14 }, /* P1_NOSCFG */ + { RSTV0910_P1_ISYMB, 0x0e }, /* P1_ISYMB was 0xfe */ + { RSTV0910_P1_QSYMB, 0xf7 }, /* P1_QSYMB was 0x07 */ + { RSTV0910_P1_AGC1CFG, 0x54 }, /* P1_AGC1CFG */ + { RSTV0910_P1_AGC1CN, 0x99 }, /* P1_AGC1CN */ + { RSTV0910_P1_AGC1REF, 0x58 }, /* P1_AGC1REF */ + { RSTV0910_P1_IDCCOMP, 0x0a }, /* P1_IDCCOMP was 0x09 */ + { RSTV0910_P1_QDCCOMP, 0x09 }, /* P1_QDCCOMP was 0xf6 */ + { RSTV0910_P1_POWERI, 0x09 }, /* P1_POWERI */ + { RSTV0910_P1_POWERQ, 0x0a }, /* P1_POWERQ was 0x09 */ + { RSTV0910_P1_AGC1AMM, 0xfd }, /* P1_AGC1AMM */ + { RSTV0910_P1_AGC1QUAD, 0x05 }, /* P1_AGC1QUAD */ + { RSTV0910_P1_AGCIQIN1, 0x00 }, /* P1_AGCIQIN1 */ + { RSTV0910_P1_AGCIQIN0, 0x00 }, /* P1_AGCIQIN0 */ + /* demodulator registers */ + { RSTV0910_P1_DEMOD, 0x00 }, /* P1_DEMOD auto rolloff, auto spectral inversion, auto DVBs1 rolloff, 35% */ + { RSTV0910_P1_DMDMODCOD, 0x10 }, /* P1_DMDMODCOD mmodcod auto */ +/* { RSTV0910_P1_DSTATUS, 0x10 }, P1_DSTATUS R only */ +/* { RSTV0910_P1_DSTATUS2, 0x80 }, P1_DSTATUS2 R only */ + { RSTV0910_P1_DMDCFGMD, 0xc9 }, /* P1_DMDCFGMD */ + { RSTV0910_P1_DMDCFG2, 0x3b }, /* P1_DMDCFG2 parallel search (DVBS/S2, infinite relock tries, */ + { RSTV0910_P1_DMDISTATE, 0x5c }, /* P1_DMDISTATE */ + { RSTV0910_P1_DMDT0M, 0x40 }, /* P1_DMDT0M */ +/* { RSTV0910_P1_DMDSTATE, 0x1c }, P1_DMDSTATE R only */ +/* { RSTV0910_P1_DMDFLYW, 0x00 }, P1_DMDFLYW R only */ +/* { RSTV0910_P1_DSTATUS3, 0x80 }, P1_DSTATUS3 R only */ + { RSTV0910_P1_DMDCFG3, 0x08 }, /* P1_DMDCFG3 if FIFO is full lose data */ + { RSTV0910_P1_DMDCFG4, 0x04 }, /* P1_DMDCFG4 soft increment of tuner */ + /* correlator registers */ + { RSTV0910_P1_CORRELMANT, 0x78 }, /* P1_CORRELMANT */ + { RSTV0910_P1_CORRELABS, 0x8c }, /* P1_CORRELABS */ + { RSTV0910_P1_CORRELEXP, 0xaa }, /* P1_CORRELEXP */ + { RSTV0910_P1_PLHMODCOD, 0x10 }, /* P1_PLHMODCOD */ + { RSTV0910_P1_DMDREG, 0x01 }, /* P1_DMDREG eliminates 1 frame in 2 if noise high */ + /* AGC regigesters */ + { RSTV0910_P1_AGCNADJ, 0x00 }, /* P1_AGCNADJ */ + { RSTV0910_P1_AGCKS, 0x00 }, /* P1_AGCKS */ + { RSTV0910_P1_AGCKQ, 0x00 }, /* P1_AGCKQ */ + { RSTV0910_P1_AGCK8, 0x00 }, /* P1_AGCK8 */ + { RSTV0910_P1_AGCK16, 0x00 }, /* P1_AGCK16 */ + { RSTV0910_P1_AGCK32, 0x00 }, /* P1_AGCK32 */ + { RSTV0910_P1_AGC2O, 0x5b }, /* P1_AGC2O */ + { RSTV0910_P1_AGC2REF, 0x38 }, /* P1_AGC2REF */ + { RSTV0910_P1_AGC1ADJ, 0x58 }, /* P1_AGC1ADJ */ + { RSTV0910_P1_AGCRSADJ, 0x38 }, /* P1_AGCRSADJ */ + { RSTV0910_P1_AGCRQADJ, 0x38 }, /* P1_AGCRQADJ */ + { RSTV0910_P1_AGCR8ADJ, 0x38 }, /* P1_AGCR8ADJ */ + { RSTV0910_P1_AGCR1ADJ, 0x38 }, /* P1_AGCR1ADJ */ + { RSTV0910_P1_AGCR2ADJ, 0x38 }, /* P1_AGCR2ADJ */ + { RSTV0910_P1_AGCR3ADJ, 0x47 }, /* P1_AGCR3ADJ */ + { RSTV0910_P1_AGCREFADJ, 0x38 }, /* P1_AGCREFADJ */ + { RSTV0910_P1_AGC2I1, 0x1c }, /* P1_AGC2I1 was 0x0b */ + { RSTV0910_P1_AGC2I0, 0x74 }, /* P1_AGC2I0 was 0x61*/ + /* carrier loop registers */ + { RSTV0910_P1_CARCFG, 0x46 }, /* P1_CARCFG de_rotator is active, algorithm=citroes 2 */ + { RSTV0910_P1_ACLC, 0x2b }, /* P1_ACLC alpha=2:0xb mostly fastest DVBS use */ + { RSTV0910_P1_BCLC, 0x1a }, /* P1_BCLC beta=1:0xa DVBS use */ + { RSTV0910_P1_ACLCS2, 0x00 }, /* P1_ACLCS2 */ + { RSTV0910_P1_BCLCS2, 0x00 }, /* P1_BCLCS2 */ + { RSTV0910_P1_CARFREQ, 0x79 }, /* P1_CARFREQ course loop coeff=0x7 (mid) DVBS1 beta freq coeff=0x9 mid */ + { RSTV0910_P1_CARHDR, 0x1c }, /* P1_CARHDR DVBS2 freq_hdr */ + { RSTV0910_P1_LDT, 0xd0 }, /* P1_LDT +ve threshold for lock detect =0xd0 (reset value)*/ + { RSTV0910_P1_LDT2, 0xb8 }, /* P1_LDT2 -ve threshold =0xb8 (reset) */ + { RSTV0910_P1_CFRICFG, 0xf9 }, /* P1_CFRICFG was 0xf8 CFRINIT +ve increments mode */ + { RSTV0910_P1_CFRUP1, 0x0e }, /* P1_CFRUP1 */ + { RSTV0910_P1_CFRUP0, 0x69 }, /* P1_CFRUP0 */ + { RSTV0910_P1_CFRIBASE1, 0x01 }, /* P1_CFRIBASE1 was 0xff */ + { RSTV0910_P1_CFRIBASE0, 0xf5 }, /* P1_CFRIBASE0 was 0x7a */ + { RSTV0910_P1_CFRLOW1, 0xf1 }, /* P1_CFRLOW1 lower limit if not in auto MSByte */ + { RSTV0910_P1_CFRLOW0, 0x97 }, /* P1_CFRLOW0 LSByte */ + { RSTV0910_P1_CFRINIT1, 0x01 }, /* P1_CFRINIT1 was 0xff inital carrier offset MSByte */ + { RSTV0910_P1_CFRINIT0, 0xf5 }, /* P1_CFRINIT0 was 0x7a cfr_init (MHz)=ckadc * CFR_INIT /2^16 LSByte */ + { RSTV0910_P1_CFRINC1, 0x03 }, /* P1_CFRINC1 step size (MHz)=MCLK*CFR_INC/2^13 [13:8} */ + { RSTV0910_P1_CFRINC0, 0x8e }, /* P1_CFRINC0 was 0x10 step size [7:0] + note someting off about spec here .. last 2 bits */ + { RSTV0910_P1_CFR2, 0x01 }, /* P1_CFR2 was 0xff carrier offset (in MHz) - mclk * freq / 2^24 [23:16] */ + { RSTV0910_P1_CFR1, 0xf5 }, /* P1_CFR1 was 0x7a [15:8] */ + { RSTV0910_P1_CFR0, 0x00 }, /* P1_CFR0 [7:0] */ + { RSTV0910_P1_LDI, 0xb6 }, /* P1_LDI carrier lock indicator accumulator. used with LDT/LDT2 to + generate DTSATUS.CAR_LOCK */ + /* timing loop registers */ + { RSTV0910_P1_TMGCFG, 0xd3 }, /* P1_TMGCFG lock indicator fastest, DVBS2 usr SR calculated on 2ns PLHeader + compensate for SR min rate min = 1/2048 MCLK (0.066Msymbols@135MHz) */ + { RSTV0910_P1_RTC, 0x68 }, /* P1_RTC DVBS1 alpha=6 (under mid), beta=8 (mid) */ + { RSTV0910_P1_RTCS2, 0x68 }, /* P1_RTCS2 DVBS2 alpha=6 (under mid), beta=8 (mid) */ + { RSTV0910_P1_TMGTHRISE, 0x1e }, /* P1_TMGTHRISE +ve edge of timing lock indicator used in QUALITY in DSTATUS */ + { RSTV0910_P1_TMGTHFALL, 0x08 }, /* P1_TMGTHFALL -ve edge of timing lock indicator used for QUALITY in DSTATUS */ + { RSTV0910_P1_SFRUPRATIO, 0x20 }, /* P1_SFRUPRATIO was 0x20 updated to 0x01 + ratio=SFR(INIT)*(1+RATIO/256)(course mode) (/65536 in fine mode) + default ratio is 0.125 of SR */ + { RSTV0910_P1_SFRLOWRATIO, 0xd0 }, /* P1_SFRLOWRATIO */ + { RSTV0910_P1_KTTMG, 0xa0 }, /* P1_KTTMG NOT IN DATASHEET */ + { RSTV0910_P1_KREFTMG, 0x80 }, /* P1_KREFTMG refn level for SR course. 0x80=mid level */ + { RSTV0910_P1_SFRSTEP, 0x88 }, /* P1_SFRSTEP scanstep=mid, centerstep=mid */ + { RSTV0910_P1_TMGCFG2, 0x80 }, /* P1_TMGCFG2 */ +/* { RSTV0910_P1_KREFTMG2, 0x80 }, P1_KREFTMG2 R only */ + { RSTV0910_P1_TMGCFG3, 0x06 }, /* P1_TMGCFG3 */ + { RSTV0910_P1_SFRINIT1, 0x38 }, /* P1_SFRINIT1 */ + { RSTV0910_P1_SFRINIT0, 0xe3 }, /* P1_SFRINIT0 */ + { RSTV0910_P1_SFRUP1, 0x3f }, /* P1_SFRUP1 was 0x19 + when in manual mode, upper symbol rate to try MSByte */ + { RSTV0910_P1_SFRUP0, 0xff }, /* P1_SFRUP0 was 0x99 LSByte */ + { RSTV0910_P1_SFRLOW1, 0x2e }, /* P1_SFRLOW1 was 0x12 in manual mode, lower symbol rate to try MSByte */ + { RSTV0910_P1_SFRLOW0, 0x39 }, /* P1_SFRLOW0 was 0x7d LSByte */ + { RSTV0910_P1_SFR3, 0x38 }, /* P1_SFR3 current symbol rate. SR (MHz)=ckadc (135MHz) * SFR/2^32 MSByte */ + { RSTV0910_P1_SFR2, 0xe3 }, /* P1_SFR2 upper mid byte */ + { RSTV0910_P1_SFR1, 0x00 }, /* P1_SFR1 lower mid byte */ + { RSTV0910_P1_SFR0, 0x00 }, /* P1_SFR0 LSByte */ + { RSTV0910_P1_TMGREG2, 0x00 }, /* P1_TMGREG2 timing recovery accumulator, SR offset MSByte */ + { RSTV0910_P1_TMGREG1, 0x00 }, /* P1_TMGREG1 MIDByte */ + { RSTV0910_P1_TMGREG0, 0x00 }, /* P1_TMGREG0 LSByte */ +/* { RSTV0910_P1_TMGLOCK1, 0xe4 }, P1_TMGLOCK1 raw lock info. used to find tmg_lock Quality in DMSTATUS MSB */ +/* { RSTV0910_P1_TMGLOCK0, 0x00 }, P1_TMGLOCK0 LSB */ +/* { RSTV0910_P1_TMGOBS, 0x10 }, P1_TMGOBS timing loop observation: roll off status */ + /* equaliser registers */ + { RSTV0910_P1_EQUALCFG, 0x41 }, /* P1_EQUALCFG */ + { RSTV0910_P1_EQUAI1, 0x00 }, /* P1_EQUAI1 */ + { RSTV0910_P1_EQUAQ1, 0x00 }, /* P1_EQUAQ1 */ + { RSTV0910_P1_EQUAI2, 0x00 }, /* P1_EQUAI2 */ + { RSTV0910_P1_EQUAQ2, 0x00 }, /* P1_EQUAQ2 */ + { RSTV0910_P1_EQUAI3, 0x00 }, /* P1_EQUAI3 */ + { RSTV0910_P1_EQUAQ3, 0x00 }, /* P1_EQUAQ3 */ + { RSTV0910_P1_EQUAI4, 0x00 }, /* P1_EQUAI4 */ + { RSTV0910_P1_EQUAQ4, 0x00 }, /* P1_EQUAQ4 */ + { RSTV0910_P1_EQUAI5, 0x00 }, /* P1_EQUAI5 */ + { RSTV0910_P1_EQUAQ5, 0x00 }, /* P1_EQUAQ5 */ + { RSTV0910_P1_EQUAI6, 0x00 }, /* P1_EQUAI6 */ + { RSTV0910_P1_EQUAQ6, 0x00 }, /* P1_EQUAQ6 */ + { RSTV0910_P1_EQUAI7, 0x00 }, /* P1_EQUAI7 */ + { RSTV0910_P1_EQUAQ7, 0x00 }, /* P1_EQUAQ7 */ + { RSTV0910_P1_EQUAI8, 0x00 }, /* P1_EQUAI8 */ + { RSTV0910_P1_EQUAQ8, 0x00 }, /* P1_EQUAQ8 */ + { RSTV0910_P1_NNOSDATAT1, 0xff }, /* P1_NNOSDATAT1 */ + { RSTV0910_P1_NNOSDATAT0, 0xff }, /* P1_NNOSDATAT0 */ + { RSTV0910_P1_NNOSDATA1, 0xff }, /* P1_NNOSDATA1 */ + { RSTV0910_P1_NNOSDATA0, 0xff }, /* P1_NNOSDATA0 */ + { RSTV0910_P1_NNOSPLHT1, 0xff }, /* P1_NNOSPLHT1 */ + { RSTV0910_P1_NNOSPLHT0, 0xff }, /* P1_NNOSPLHT0 */ + { RSTV0910_P1_NNOSPLH1, 0xff }, /* P1_NNOSPLH1 */ + { RSTV0910_P1_NNOSPLH0, 0xff }, /* P1_NNOSPLH0 */ + { RSTV0910_P1_NOSDATAT1, 0xff }, /* P1_NOSDATAT1 */ + { RSTV0910_P1_NOSDATAT0, 0xff }, /* P1_NOSDATAT0 */ + { RSTV0910_P1_NNOSFRAME1, 0xff }, /* P1_NNOSFRAME1 */ + { RSTV0910_P1_NNOSFRAME0, 0xff }, /* P1_NNOSFRAME0 */ + { RSTV0910_P1_NNOSRAD1, 0x00 }, /* P1_NNOSRAD1 */ + { RSTV0910_P1_NNOSRAD0, 0x00 }, /* P1_NNOSRAD0 */ + { RSTV0910_P1_NOSCFGF1, 0x00 }, /* P1_NOSCFGF1 */ + { RSTV0910_P1_NOSCFGF2, 0x00 }, /* P1_NOSCFGF2 */ + { RSTV0910_P1_CAR2CFG, 0x06 }, /* P1_CAR2CFG */ + { RSTV0910_P1_CFR2CFR1, 0xe5 }, /* P1_CFR2CFR1 */ + { RSTV0910_P1_CAR3CFG, 0x02 }, /* P1_CAR3CFG */ + { RSTV0910_P1_CFR22, 0x00 }, /* P1_CFR22 */ + { RSTV0910_P1_CFR21, 0x00 }, /* P1_CFR21 */ + { RSTV0910_P1_CFR20, 0x00 }, /* P1_CFR20 */ + { RSTV0910_P1_ACLC2S2Q, 0x0b }, /* P1_ACLC2S2Q */ + { RSTV0910_P1_ACLC2S28, 0x0a }, /* P1_ACLC2S28 */ + { RSTV0910_P1_ACLC2S216A, 0x49 }, /* P1_ACLC2S216A */ + { RSTV0910_P1_ACLC2S232A, 0x48 }, /* P1_ACLC2S232A */ + { RSTV0910_P1_BCLC2S2Q, 0x84 }, /* P1_BCLC2S2Q */ + { RSTV0910_P1_BCLC2S28, 0x84 }, /* P1_BCLC2S28 */ + { RSTV0910_P1_BCLC2S216A, 0x84 }, /* P1_BCLC2S216A */ + { RSTV0910_P1_BCLC2S232A, 0x84 }, /* P1_BCLC2S232A */ + { RSTV0910_P1_PLROOT2, 0x00 }, /* P1_PLROOT2 */ + { RSTV0910_P1_PLROOT1, 0x00 }, /* P1_PLROOT1 */ + { RSTV0910_P1_PLROOT0, 0x01 }, /* P1_PLROOT0 */ + { RSTV0910_P1_MODCODLST0, 0xff }, /* P1_MODCODLST0 */ + { RSTV0910_P1_MODCODLST1, 0xfc }, /* P1_MODCODLST1 was 0xcf */ + { RSTV0910_P1_MODCODLST2, 0x00 }, /* P1_MODCODLST2 was 0xff */ + { RSTV0910_P1_MODCODLST3, 0x00 }, /* P1_MODCODLST3 was 0xff */ + { RSTV0910_P1_MODCODLST4, 0x00 }, /* P1_MODCODLST4 */ + { RSTV0910_P1_MODCODLST5, 0x00 }, /* P1_MODCODLST5 */ + { RSTV0910_P1_MODCODLST6, 0x00 }, /* P1_MODCODLST6 */ + { RSTV0910_P1_MODCODLST7, 0xc0 }, /* P1_MODCODLST7 */ + { RSTV0910_P1_MODCODLST8, 0x00 }, /* P1_MODCODLST8 */ + { RSTV0910_P1_MODCODLST9, 0x00 }, /* P1_MODCODLST9 */ + { RSTV0910_P1_MODCODLSTA, 0xc0 }, /* P1_MODCODLSTA */ + { RSTV0910_P1_MODCODLSTB, 0x00 }, /* P1_MODCODLSTB */ + { RSTV0910_P1_MODCODLSTC, 0x00 }, /* P1_MODCODLSTC */ + { RSTV0910_P1_MODCODLSTD, 0x00 }, /* P1_MODCODLSTD */ + { RSTV0910_P1_MODCODLSTE, 0x00 }, /* P1_MODCODLSTE */ + { RSTV0910_P1_MODCODLSTF, 0x0f }, /* P1_MODCODLSTF */ + { RSTV0910_P1_GAUSSR0, 0x98 }, /* P1_GAUSSR0 */ + { RSTV0910_P1_CCIR0, 0x30 }, /* P1_CCIR0 */ + { RSTV0910_P1_CCIQUANT, 0xac }, /* P1_CCIQUANT */ + { RSTV0910_P1_CCITHRES, 0x50 }, /* P1_CCITHRES */ + { RSTV0910_P1_CCIACC, 0x00 }, /* P1_CCIACC */ + { RSTV0910_P1_DSTATUS4, 0x64 }, /* P1_DSTATUS4 */ + { RSTV0910_P1_DMDRESCFG, 0x29 }, /* P1_DMDRESCFG */ + { RSTV0910_P1_DMDRESADR, 0x00 }, /* P1_DMDRESADR */ + { RSTV0910_P1_DMDRESDATA7, 0x00 }, /* P1_DMDRESDATA7 */ + { RSTV0910_P1_DMDRESDATA6, 0x00 }, /* P1_DMDRESDATA6 */ + { RSTV0910_P1_DMDRESDATA5, 0x00 }, /* P1_DMDRESDATA5 */ + { RSTV0910_P1_DMDRESDATA4, 0x00 }, /* P1_DMDRESDATA4 */ + { RSTV0910_P1_DMDRESDATA3, 0x00 }, /* P1_DMDRESDATA3 */ + { RSTV0910_P1_DMDRESDATA2, 0x00 }, /* P1_DMDRESDATA2 */ + { RSTV0910_P1_DMDRESDATA1, 0x00 }, /* P1_DMDRESDATA1 */ + { RSTV0910_P1_DMDRESDATA0, 0x00 }, /* P1_DMDRESDATA0 */ + { RSTV0910_P1_FFEI1, 0x00 }, /* P1_FFEI1 */ + { RSTV0910_P1_FFEQ1, 0x00 }, /* P1_FFEQ1 */ + { RSTV0910_P1_FFEI2, 0x00 }, /* P1_FFEI2 */ + { RSTV0910_P1_FFEQ2, 0x00 }, /* P1_FFEQ2 */ + { RSTV0910_P1_FFEI3, 0x00 }, /* P1_FFEI3 */ + { RSTV0910_P1_FFEQ3, 0x00 }, /* P1_FFEQ3 */ + { RSTV0910_P1_FFEI4, 0x00 }, /* P1_FFEI4 */ + { RSTV0910_P1_FFEQ4, 0x00 }, /* P1_FFEQ4 */ + { RSTV0910_P1_FFECFG, 0x71 }, /* P1_FFECFG */ + /* TUN Register */ + { RSTV0910_P1_TNRCFG2, 0x02 }, /* P1_TNRCFG2 */ + { RSTV0910_P1_SMAPCOEF7, 0x00 }, /* P1_SMAPCOEF7 */ + { RSTV0910_P1_SMAPCOEF6, 0x00 }, /* P1_SMAPCOEF6 */ + { RSTV0910_P1_SMAPCOEF5, 0x00 }, /* P1_SMAPCOEF5 */ + { RSTV0910_P1_SMAPCOEF4, 0x00 }, /* P1_SMAPCOEF4 */ + { RSTV0910_P1_SMAPCOEF3, 0x00 }, /* P1_SMAPCOEF3 */ + { RSTV0910_P1_SMAPCOEF2, 0x00 }, /* P1_SMAPCOEF2 */ + { RSTV0910_P1_SMAPCOEF1, 0x00 }, /* P1_SMAPCOEF1 */ + { RSTV0910_P1_SMAPCOEF0, 0x71 }, /* P1_SMAPCOEF0 */ + { RSTV0910_P1_NOSTHRES1, 0x60 }, /* P1_NOSTHRES1 */ + { RSTV0910_P1_NOSTHRES2, 0x69 }, /* P1_NOSTHRES2 */ + { RSTV0910_P1_NOSDIFF1, 0x80 }, /* P1_NOSDIFF1 */ + { RSTV0910_P1_RAINFADE, 0x35 }, /* P1_RAINFADE */ + { RSTV0910_P1_NOSRAMCFG, 0x28 }, /* P1_NOSRAMCFG */ + { RSTV0910_P1_NOSRAMPOS, 0x26 }, /* P1_NOSRAMPOS */ + { RSTV0910_P1_NOSRAMVAL, 0x86 }, /* P1_NOSRAMVAL */ + { RSTV0910_P1_DMDPLHSTAT, 0x00 }, /* P1_DMDPLHSTAT */ + { RSTV0910_P1_LOCKTIME3, 0xc0 }, /* P1_LOCKTIME3 */ + { RSTV0910_P1_LOCKTIME2, 0xd2 }, /* P1_LOCKTIME2 was 0xd1 */ + { RSTV0910_P1_LOCKTIME1, 0x3b }, /* P1_LOCKTIME1 was 0x05 */ + { RSTV0910_P1_LOCKTIME0, 0x46 }, /* P1_LOCKTIME0 was 0xc8 */ + /* DVB1 P1 Registers */ + { RSTV0910_P1_VITSCALE, 0x80 }, /* P1_VITSCALE */ + { RSTV0910_P1_FECM, 0x00 }, /* P1_FECM */ + { RSTV0910_P1_VTH12, 0xd7 }, /* P1_VTH12 */ + { RSTV0910_P1_VTH23, 0x85 }, /* P1_VTH23 */ + { RSTV0910_P1_VTH34, 0x58 }, /* P1_VTH34 */ + { RSTV0910_P1_VTH56, 0x3a }, /* P1_VTH56 */ + { RSTV0910_P1_VTH67, 0x34 }, /* P1_VTH67 */ + { RSTV0910_P1_VTH78, 0x28 }, /* P1_VTH78 */ + { RSTV0910_P1_VITCURPUN, 0x0d }, /* P1_VITCURPUN */ + { RSTV0910_P1_VERROR, 0xff }, /* P1_VERROR */ + { RSTV0910_P1_PRVIT, 0x2f }, /* P1_PRVIT */ + { RSTV0910_P1_VAVSRVIT, 0x00 }, /* P1_VAVSRVIT */ + { RSTV0910_P1_VSTATUSVIT, 0xa6 }, /* P1_VSTATUSVIT was 0xa4 */ + { RSTV0910_P1_VTHINUSE, 0xd7 }, /* P1_VTHINUSE */ + { RSTV0910_P1_KDIV12, 0x27 }, /* P1_KDIV12 */ + { RSTV0910_P1_KDIV23, 0x32 }, /* P1_KDIV23 */ + { RSTV0910_P1_KDIV34, 0x32 }, /* P1_KDIV34 */ + { RSTV0910_P1_KDIV56, 0x32 }, /* P1_KDIV56 */ + { RSTV0910_P1_KDIV67, 0x32 }, /* P1_KDIV67 */ + { RSTV0910_P1_KDIV78, 0x50 }, /* P1_KDIV78 */ + { RSTV0910_P1_TSPIDFLT1, 0x00 }, /* P1_TSPIDFLT1 */ + { RSTV0910_P1_TSPIDFLT0, 0x00 }, /* P1_TSPIDFLT0 */ + /* DVB2 P1 Registers */ + { RSTV0910_P1_PDELCTRL0, 0x01 }, /* P1_PDELCTRL0 */ + { RSTV0910_P1_PDELCTRL1, 0x00 }, /* P1_PDELCTRL1 */ + { RSTV0910_P1_PDELCTRL2, 0x20 }, /* P1_PDELCTRL2 was 0x00 */ + { RSTV0910_P1_HYSTTHRESH, 0x41 }, /* P1_HYSTTHRESH */ + { RSTV0910_P1_UPLCCST0, 0xe6 }, /* P1_UPLCCST0 */ + { RSTV0910_P1_ISIENTRY, 0x00 }, /* P1_ISIENTRY */ + { RSTV0910_P1_ISIBITENA, 0x00 }, /* P1_ISIBITENA */ + { RSTV0910_P1_MATSTR1, 0xf0 }, /* P1_MATSTR1 */ + { RSTV0910_P1_MATSTR0, 0x00 }, /* P1_MATSTR0 */ + { RSTV0910_P1_UPLSTR1, 0x05 }, /* P1_UPLSTR1 */ + { RSTV0910_P1_UPLSTR0, 0xe0 }, /* P1_UPLSTR0 */ + { RSTV0910_P1_DFLSTR1, 0x7d }, /* P1_DFLSTR1 */ + { RSTV0910_P1_DFLSTR0, 0x80 }, /* P1_DFLSTR0 */ + { RSTV0910_P1_SYNCSTR, 0x47 }, /* P1_SYNCSTR */ + { RSTV0910_P1_SYNCDSTR1, 0x00 }, /* P1_SYNCDSTR1 */ + { RSTV0910_P1_SYNCDSTR0, 0x00 }, /* P1_SYNCDSTR0 */ + { RSTV0910_P1_PDELSTATUS1, 0x94 }, /* P1_PDELSTATUS1 */ + { RSTV0910_P1_PDELSTATUS2, 0x92 }, /* P1_PDELSTATUS2 was 0x12 */ + { RSTV0910_P1_BBFCRCKO1, 0x00 }, /* P1_BBFCRCKO1 */ + { RSTV0910_P1_BBFCRCKO0, 0x00 }, /* P1_BBFCRCKO0 */ + { RSTV0910_P1_UPCRCKO1, 0x00 }, /* P1_UPCRCKO1 */ + { RSTV0910_P1_UPCRCKO0, 0x00 }, /* P1_UPCRCKO0 */ + { RSTV0910_P1_PDELCTRL3, 0x00 }, /* P1_PDELCTRL3 */ + /* TS P1 Registers */ + { RSTV0910_P1_TSSTATEM, 0xf0 }, /* P1_TSSTATEM deinterleaver on, reed-solomon on, descrambler on, + TS enabled, immediate output of data*/ + { RSTV0910_P1_TSSTATEL, 0x12 }, /* P1_TSSTATEL */ + { RSTV0910_P1_TSCFGH, 0x80 }, /* P1_TSCFGH was 0x40 + DVBCI mode, max granularity, parallel output, no headers, + label error packets */ + { RSTV0910_P1_TSCFGM, 0x04 }, /* P1_TSCFGM auto speed, d0-d7 not switched, no invert */ + { RSTV0910_P1_TSCFGL, 0x20 }, /* P1_TSCFGL no delay on clkout, error mode=0b10, d/p=1 suring header and footer + don't load legacy, auto bitspeed */ + { RSTV0910_P1_TSSYNC, 0x00 }, /* P1_TSSYNC */ + { RSTV0910_P1_TSINSDELH, 0x00 }, /* P1_TSINSDELH */ + { RSTV0910_P1_TSINSDELM, 0x00 }, /* P1_TSINSDELM */ + { RSTV0910_P1_TSINSDELL, 0x00 }, /* P1_TSINSDELL */ + { RSTV0910_P1_TSDIVN, 0x03 }, /* P1_TSDIVN */ + { RSTV0910_P1_TSCFG4, 0x00 }, /* P1_TSCFG4 */ + { RSTV0910_P1_TSSPEED, 0x33 }, /* P1_TSSPEED was 0xff */ + { RSTV0910_P1_TSSTATUS, 0x52 }, /* P1_TSSTATUS R Only */ + { RSTV0910_P1_TSSTATUS2, 0x02 }, /* P1_TSSTATUS2 was 0xa8 */ + { RSTV0910_P1_TSBITRATE1, 0x00 }, /* P1_TSBITRATE1 */ + { RSTV0910_P1_TSBITRATE0, 0x03 }, /* P1_TSBITRATE0 */ + { RSTV0910_P1_TSPACKLEN1, 0x00 }, /* P1_TSPACKLEN1 */ + { RSTV0910_P1_TSDLY2, 0x00 }, /* P1_TSDLY2 */ + { RSTV0910_P1_TSDLY1, 0x00 }, /* P1_TSDLY1 */ + { RSTV0910_P1_TSDLY0, 0x00 }, /* P1_TSDLY0 */ + { RSTV0910_P1_TSNPDAV, 0x00 }, /* P1_TSNPDAV */ + { RSTV0910_P1_TSBUFSTAT2, 0x00 }, /* P1_TSBUFSTAT2 */ + { RSTV0910_P1_TSBUFSTAT1, 0x00 }, /* P1_TSBUFSTAT1 */ + { RSTV0910_P1_TSBUFSTAT0, 0x00 }, /* P1_TSBUFSTAT0 */ + { RSTV0910_P1_TSDEBUGL, 0x04 }, /* P1_TSDEBUGL */ + { RSTV0910_P1_TSDLYSET2, 0x01 }, /* P1_TSDLYSET2 */ + { RSTV0910_P1_TSDLYSET1, 0x18 }, /* P1_TSDLYSET1 */ + { RSTV0910_P1_TSDLYSET0, 0x00 }, /* P1_TSDLYSET0 */ + { RSTV0910_P1_ERRCTRL1, 0x67 }, /* P1_ERRCTRL1 */ + { RSTV0910_P1_ERRCNT12, 0x00 }, /* P1_ERRCNT12 */ + { RSTV0910_P1_ERRCNT11, 0x00 }, /* P1_ERRCNT11 */ + { RSTV0910_P1_ERRCNT10, 0x00 }, /* P1_ERRCNT10 */ + { RSTV0910_P1_ERRCTRL2, 0xc1 }, /* P1_ERRCTRL2 */ + { RSTV0910_P1_ERRCNT22, 0x00 }, /* P1_ERRCNT22 */ + { RSTV0910_P1_ERRCNT21, 0x00 }, /* P1_ERRCNT21 */ + { RSTV0910_P1_ERRCNT20, 0x00 }, /* P1_ERRCNT20 */ + { RSTV0910_P1_FECSPY, 0xa8 }, /* P1_FECSPY enable, serial mode, BER, lmode=0, Normal operation */ + { RSTV0910_P1_FSPYCFG, 0x2c }, /* P1_FSPYCFG */ + { RSTV0910_P1_FSPYDATA, 0x3a }, /* P1_FSPYDATA */ + { RSTV0910_P1_FSPYOUT, 0x07 }, /* P1_FSPYOUT */ + { RSTV0910_P1_FSTATUS, 0x00 }, /* P1_FSTATUS */ + { RSTV0910_P1_FBERCPT4, 0x00 }, /* P1_FBERCPT4 */ + { RSTV0910_P1_FBERCPT3, 0x00 }, /* P1_FBERCPT3 */ + { RSTV0910_P1_FBERCPT2, 0x00 }, /* P1_FBERCPT2 */ + { RSTV0910_P1_FBERCPT1, 0x00 }, /* P1_FBERCPT1 */ + { RSTV0910_P1_FBERCPT0, 0x00 }, /* P1_FBERCPT0 */ + { RSTV0910_P1_FBERERR2, 0x00 }, /* P1_FBERERR2 */ + { RSTV0910_P1_FBERERR1, 0x00 }, /* P1_FBERERR1 */ + { RSTV0910_P1_FBERERR0, 0x00 }, /* P1_FBERERR0 */ + { RSTV0910_P1_FSPYBER, 0x12 }, /* P1_FSPYBER was 0x11, set couting to 2^15 bytes */ + { RSTV0910_P1_SFERROR, 0xff }, /* P1_SFERROR */ + /* SFEC P1 Registers */ + { RSTV0910_P1_SFECSTATUS, 0x46 }, /* P1_SFECSTATUS was 0x44 */ + { RSTV0910_P1_SFKDIV12, 0x1f }, /* P1_SFKDIV12 */ + { RSTV0910_P1_SFKDIV23, 0x22 }, /* P1_SFKDIV23 */ + { RSTV0910_P1_SFKDIV34, 0x24 }, /* P1_SFKDIV34 */ + { RSTV0910_P1_SFKDIV56, 0x24 }, /* P1_SFKDIV56 */ + { RSTV0910_P1_SFKDIV67, 0x29 }, /* P1_SFKDIV67 */ + { RSTV0910_P1_SFKDIV78, 0x2c }, /* P1_SFKDIV78 */ + { RSTV0910_P1_SFSTATUS, 0x4e }, /* P1_SFSTATUS was 0x46 */ + { RSTV0910_P1_SFDLYSET2, 0x00 }, /* P1_SFDLYSET2 */ + { RSTV0910_P1_SFERRCTRL, 0x94 }, /* P1_SFERRCTRL */ + { RSTV0910_P1_SFERRCNT2, 0x80 }, /* P1_SFERRCNT2 */ + { RSTV0910_P1_SFERRCNT1, 0x00 }, /* P1_SFERRCNT1 */ + { RSTV0910_P1_SFERRCNT0, 0x00 }, /* P1_SFERRCNT0 */ + + /* RC registers */ + { RSTV0910_RCCFG2, 0x60 }, /* RCCFG2 */ + { RSTV0910_RCCFG1, 0x00 }, /* RCCFG1 */ + { RSTV0910_RCCFG0, 0x00 }, /* RCCFG0 */ + { RSTV0910_RCINSDEL2, 0x00 }, /* RCINSDEL2 */ + { RSTV0910_RCINSDEL1, 0x00 }, /* RCINSDEL1 */ + { RSTV0910_RCINSDEL0, 0x00 }, /* RCINSDEL0 */ + { RSTV0910_RCSTATUS, 0x00 }, /* RCSTATUS */ + { RSTV0910_RCSPEED, 0xff }, /* RCSPEED */ + + { RSTV0910_TSGENERAL, 0x00 }, /* TSGENERAL enable output of second line in parallel line + override tsfifo_permparal and defineline1->TS3, line2->TS2,RCline->TS1 + tsfifo_perparal defines line1-> TS3, line2->TS2, RC LIne->TS1 */ + /* DISEQC P1 Registers */ + { RSTV0910_P1_DISIRQCFG, 0x00 }, /* P1_DISIRQCFG */ +/* { RSTV0910_P1_DISIRQSTAT, 0x00 }, P1_DISIRQSTAT R only */ + { RSTV0910_P1_DISTXCFG, 0x02 }, /* P1_DISTXCFG */ +/* { RSTV0910_P1_DISTXSTATUS, 0x20 }, P1_DISTXSTATUS R only */ +/* { RSTV0910_P1_DISTXBYTES, 0x00 }, P1_DISTXBYTES R only */ + { RSTV0910_P1_DISTXFIFO, 0x00 }, /* P1_DISTXFIFO */ + { RSTV0910_P1_DISTXF22, 0xc0 }, /* P1_DISTXF22 */ + { RSTV0910_P1_DISTIMEOCFG, 0x02 }, /* P1_DISTIMEOCFG */ + { RSTV0910_P1_DISTIMEOUT, 0x8c }, /* P1_DISTIMEOUT */ + { RSTV0910_P1_DISRXCFG, 0x34 }, /* P1_DISRXCFG */ +/* { RSTV0910_P1_DISRXSTAT1, 0x04 }, P1_DISRXSTAT1 R only */ +/* { RSTV0910_P1_DISRXSTAT0, 0x00 }, P1_DISRXSTAT0 R only */ +/* { RSTV0910_P1_DISRXBYTES, 0x00 }, P1_DISRXBYTES R only */ +/* { RSTV0910_P1_DISRXPARITY1, 0x00 }, P1_DISRXPARITY1 R only */ +/* { RSTV0910_P1_DISRXPARITY0, 0x00 }, P1_DISRXPARITY0 R only */ + { RSTV0910_P1_DISRXFIFO, 0x00 }, /* P1_DISRXFIFO */ +/* { RSTV0910_P1_DISRXDC1, 0x03 }, P1_DISRXDC1 R only */ +/* { RSTV0910_P1_DISRXDC0, 0xf1 }, P1_DISRXDC0 R only was 0xf6 */ + { RSTV0910_P1_DISRXF221, 0x01 }, /* P1_DISRXF221 */ + { RSTV0910_P1_DISRXF220, 0x2b }, /* P1_DISRXF220 */ + { RSTV0910_P1_DISRXF100, 0xa9 }, /* P1_DISRXF100 */ + { RSTV0910_P1_DISRXSHORT22K, 0x0f }, /* P1_DISRXSHORT22K */ + + /* P1 aux clock control registers */ + { RSTV0910_P1_ACRPRESC, 0x01 }, /* P1_ACRPRESC auxiliary clock - not used */ + { RSTV0910_P1_ACRDIV, 0x14 }, /* P1_ACRDIV auxiliary clock - not used */ + + /* DISEQC P2 Registers */ + { RSTV0910_P2_DISIRQCFG, 0x00 }, /* P2_DISIRQCFG as above for P2 */ +/* { RSTV0910_P2_DISIRQSTAT, 0x00 }, P2_DISIRQSTAT */ + { RSTV0910_P2_DISTXCFG, 0x02 }, /* P2_DISTXCFG */ +/* { RSTV0910_P2_DISTXSTATUS, 0x20 }, P2_DISTXSTATUS */ +/* { RSTV0910_P2_DISTXBYTES, 0x00 }, P2_DISTXBYTES */ + { RSTV0910_P2_DISTXFIFO, 0x00 }, /* P2_DISTXFIFO */ + { RSTV0910_P2_DISTXF22, 0xc0 }, /* P2_DISTXF22 */ + { RSTV0910_P2_DISTIMEOCFG, 0x02 }, /* P2_DISTIMEOCFG */ + { RSTV0910_P2_DISTIMEOUT, 0x8c }, /* P2_DISTIMEOUT */ + { RSTV0910_P2_DISRXCFG, 0x34 }, /* P2_DISRXCFG */ +/* { RSTV0910_P2_DISRXSTAT1, 0x04 }, P2_DISRXSTAT1 */ +/* { RSTV0910_P2_DISRXSTAT0, 0x00 }, P2_DISRXSTAT0 */ +/* { RSTV0910_P2_DISRXBYTES, 0x00 }, P2_DISRXBYTES */ +/* { RSTV0910_P2_DISRXPARITY1, 0x00 }, P2_DISRXPARITY1 */ +/* { RSTV0910_P2_DISRXPARITY0, 0x00 }, P2_DISRXPARITY0 */ + { RSTV0910_P2_DISRXFIFO, 0x00 }, /* P2_DISRXFIFO */ +/* { RSTV0910_P2_DISRXDC1, 0x03 }, P2_DISRXDC1 */ +/* { RSTV0910_P2_DISRXDC0, 0xf1 }, P2_DISRXDC0 */ + { RSTV0910_P2_DISRXF221, 0x01 }, /* P2_DISRXF221 */ + { RSTV0910_P2_DISRXF220, 0x2b }, /* P2_DISRXF220 */ + { RSTV0910_P2_DISRXF100, 0xa9 }, /* P2_DISRXF100 */ + { RSTV0910_P2_DISRXSHORT22K, 0x0f }, /* P2_DISRXSHORT22K */ + + /* P2 aux clock control registers */ + { RSTV0910_P2_ACRPRESC, 0x01 }, /* P2_ACRPRESC auxiliary clock - not used */ + { RSTV0910_P2_ACRDIV, 0x14 }, /* P2_ACRDIV auxiliary clock - not used */ + + /* P1 NBITER registers */ + { RSTV0910_P1_NBITER_NF1, 0x1c }, /* P1_NBITER_NF1 */ + { RSTV0910_P1_NBITER_NF2, 0x19 }, /* P1_NBITER_NF2 */ + { RSTV0910_P1_NBITER_NF3, 0x17 }, /* P1_NBITER_NF3 */ + { RSTV0910_P1_NBITER_NF4, 0x18 }, /* P1_NBITER_NF4 */ + { RSTV0910_P1_NBITER_NF5, 0x13 }, /* P1_NBITER_NF5 */ + { RSTV0910_P1_NBITER_NF6, 0x19 }, /* P1_NBITER_NF6 */ + { RSTV0910_P1_NBITER_NF7, 0x18 }, /* P1_NBITER_NF7 */ + { RSTV0910_P1_NBITER_NF8, 0x17 }, /* P1_NBITER_NF8 */ + { RSTV0910_P1_NBITER_NF9, 0x16 }, /* P1_NBITER_NF9 */ + { RSTV0910_P1_NBITER_NF10, 0x1c }, /* P1_NBITER_NF10 */ + { RSTV0910_P1_NBITER_NF11, 0x1c }, /* P1_NBITER_NF11 */ + { RSTV0910_P1_NBITER_NF12, 0x13 }, /* P1_NBITER_NF12 */ + { RSTV0910_P1_NBITER_NF13, 0x19 }, /* P1_NBITER_NF13 */ + { RSTV0910_P1_NBITER_NF14, 0x18 }, /* P1_NBITER_NF14 */ + { RSTV0910_P1_NBITER_NF15, 0x16 }, /* P1_NBITER_NF15 */ + { RSTV0910_P1_NBITER_NF16, 0x1c }, /* P1_NBITER_NF16 */ + { RSTV0910_P1_NBITER_NF17, 0x1c }, /* P1_NBITER_NF17 */ + { RSTV0910_P1_NBITER_NF18, 0x19 }, /* P1_NBITER_NF18 */ + { RSTV0910_P1_NBITER_NF19, 0x18 }, /* P1_NBITER_NF19 */ + { RSTV0910_P1_NBITER_NF20, 0x17 }, /* P1_NBITER_NF20 */ + { RSTV0910_P1_NBITER_NF21, 0x16 }, /* P1_NBITER_NF21 */ + { RSTV0910_P1_NBITER_NF22, 0x1c }, /* P1_NBITER_NF22 */ + { RSTV0910_P1_NBITER_NF23, 0x1c }, /* P1_NBITER_NF23 */ + { RSTV0910_P1_NBITER_NF24, 0x18 }, /* P1_NBITER_NF24 */ + { RSTV0910_P1_NBITER_NF25, 0x17 }, /* P1_NBITER_NF25 */ + { RSTV0910_P1_NBITER_NF26, 0x16 }, /* P1_NBITER_NF26 */ + { RSTV0910_P1_NBITER_NF27, 0x1c }, /* P1_NBITER_NF27 */ + { RSTV0910_P1_NBITER_NF28, 0x1c }, /* P1_NBITER_NF28 */ + { RSTV0910_P1_NBITER_SF1, 0x1b }, /* P1_NBITER_SF1 */ + { RSTV0910_P1_NBITER_SF2, 0x19 }, /* P1_NBITER_SF2 */ + { RSTV0910_P1_NBITER_SF3, 0x17 }, /* P1_NBITER_SF3 */ + { RSTV0910_P1_NBITER_SF4, 0x1a }, /* P1_NBITER_SF4 */ + { RSTV0910_P1_NBITER_SF5, 0x13 }, /* P1_NBITER_SF5 */ + { RSTV0910_P1_NBITER_SF6, 0x19 }, /* P1_NBITER_SF6 */ + { RSTV0910_P1_NBITER_SF7, 0x1b }, /* P1_NBITER_SF7 */ + { RSTV0910_P1_NBITER_SF8, 0x1d }, /* P1_NBITER_SF8 */ + { RSTV0910_P1_NBITER_SF9, 0x1b }, /* P1_NBITER_SF9 */ + { RSTV0910_P1_NBITER_SF10, 0x1c }, /* P1_NBITER_SF10 */ + { RSTV0910_P1_NBITER_SF12, 0x13 }, /* P1_NBITER_SF12 */ + { RSTV0910_P1_NBITER_SF13, 0x19 }, /* P1_NBITER_SF13 */ + { RSTV0910_P1_NBITER_SF14, 0x1b }, /* P1_NBITER_SF14 */ + { RSTV0910_P1_NBITER_SF15, 0x1b }, /* P1_NBITER_SF15 */ + { RSTV0910_P1_NBITER_SF16, 0x1c }, /* P1_NBITER_SF16 */ + { RSTV0910_P1_NBITER_SF18, 0x19 }, /* P1_NBITER_SF18 */ + { RSTV0910_P1_NBITER_SF19, 0x1b }, /* P1_NBITER_SF19 */ + { RSTV0910_P1_NBITER_SF20, 0x1d }, /* P1_NBITER_SF20 */ + { RSTV0910_P1_NBITER_SF21, 0x1b }, /* P1_NBITER_SF21 */ + { RSTV0910_P1_NBITER_SF22, 0x1c }, /* P1_NBITER_SF22 */ + { RSTV0910_P1_NBITER_SF24, 0x1b }, /* P1_NBITER_SF24 */ + { RSTV0910_P1_NBITER_SF25, 0x1d }, /* P1_NBITER_SF25 */ + { RSTV0910_P1_NBITER_SF26, 0x1b }, /* P1_NBITER_SF26 */ + { RSTV0910_P1_NBITER_SF27, 0x1c }, /* P1_NBITER_SF27 */ + + { RSTV0910_SELSATUR6, 0x05 }, /* SELSATUR6 */ + { RSTV0910_SELSATUR5, 0x5b }, /* SELSATUR5 */ + { RSTV0910_SELSATUR4, 0x96 }, /* SELSATUR4 */ + { RSTV0910_SELSATUR3, 0x00 }, /* SELSATUR3 */ + { RSTV0910_SELSATUR2, 0x00 }, /* SELSATUR2 */ + { RSTV0910_SELSATUR1, 0x00 }, /* SELSATUR1 */ + { RSTV0910_SELSATUR0, 0x00 }, /* SELSATUR0 */ + { RSTV0910_GAINLLR_NF1, 0x20 }, /* GAINLLR_NF1 */ + { RSTV0910_GAINLLR_NF2, 0x20 }, /* GAINLLR_NF2 */ + { RSTV0910_GAINLLR_NF3, 0x20 }, /* GAINLLR_NF3 */ + { RSTV0910_GAINLLR_NF4, 0x20 }, /* GAINLLR_NF4 */ + { RSTV0910_GAINLLR_NF5, 0x20 }, /* GAINLLR_NF5 */ + { RSTV0910_GAINLLR_NF6, 0x20 }, /* GAINLLR_NF6 */ + { RSTV0910_GAINLLR_NF7, 0x20 }, /* GAINLLR_NF7 */ + { RSTV0910_GAINLLR_NF8, 0x20 }, /* GAINLLR_NF8 */ + { RSTV0910_GAINLLR_NF9, 0x20 }, /* GAINLLR_NF9 */ + { RSTV0910_GAINLLR_NF10, 0x20 }, /* GAINLLR_NF10 */ + { RSTV0910_GAINLLR_NF11, 0x20 }, /* GAINLLR_NF11 */ + { RSTV0910_GAINLLR_NF12, 0x20 }, /* GAINLLR_NF12 */ + { RSTV0910_GAINLLR_NF13, 0x20 }, /* GAINLLR_NF13 */ + { RSTV0910_GAINLLR_NF14, 0x20 }, /* GAINLLR_NF14 */ + { RSTV0910_GAINLLR_NF15, 0x20 }, /* GAINLLR_NF15 */ + { RSTV0910_GAINLLR_NF16, 0x20 }, /* GAINLLR_NF16 */ + { RSTV0910_GAINLLR_NF17, 0x20 }, /* GAINLLR_NF17 */ + { RSTV0910_GAINLLR_NF18, 0x22 }, /* GAINLLR_NF18 */ + { RSTV0910_GAINLLR_NF19, 0x22 }, /* GAINLLR_NF19 */ + { RSTV0910_GAINLLR_NF20, 0x24 }, /* GAINLLR_NF20 */ + { RSTV0910_GAINLLR_NF21, 0x24 }, /* GAINLLR_NF21 */ + { RSTV0910_GAINLLR_NF22, 0x25 }, /* GAINLLR_NF22 */ + { RSTV0910_GAINLLR_NF23, 0x26 }, /* GAINLLR_NF23 */ + { RSTV0910_GAINLLR_NF24, 0x20 }, /* GAINLLR_NF24 */ + { RSTV0910_GAINLLR_NF25, 0x20 }, /* GAINLLR_NF25 */ + { RSTV0910_GAINLLR_NF26, 0x20 }, /* GAINLLR_NF26 */ + { RSTV0910_GAINLLR_NF27, 0x20 }, /* GAINLLR_NF27 */ + { RSTV0910_GAINLLR_NF28, 0x20 }, /* GAINLLR_NF28 */ + { RSTV0910_GAINLLR_SF1, 0x20 }, /* GAINLLR_SF1 */ + { RSTV0910_GAINLLR_SF2, 0x20 }, /* GAINLLR_SF2 */ + { RSTV0910_GAINLLR_SF3, 0x20 }, /* GAINLLR_SF3 */ + { RSTV0910_GAINLLR_SF4, 0x20 }, /* GAINLLR_SF4 */ + { RSTV0910_GAINLLR_SF5, 0x20 }, /* GAINLLR_SF5 */ + { RSTV0910_GAINLLR_SF6, 0x20 }, /* GAINLLR_SF6 */ + { RSTV0910_GAINLLR_SF7, 0x20 }, /* GAINLLR_SF7 */ + { RSTV0910_GAINLLR_SF8, 0x20 }, /* GAINLLR_SF8 */ + { RSTV0910_GAINLLR_SF9, 0x20 }, /* GAINLLR_SF9 */ + { RSTV0910_GAINLLR_SF10, 0x20 }, /* GAINLLR_SF10 */ + { RSTV0910_GAINLLR_SF12, 0x20 }, /* GAINLLR_SF12 */ + { RSTV0910_GAINLLR_SF13, 0x20 }, /* GAINLLR_SF13 */ + { RSTV0910_GAINLLR_SF14, 0x20 }, /* GAINLLR_SF14 */ + { RSTV0910_GAINLLR_SF15, 0x20 }, /* GAINLLR_SF15 */ + { RSTV0910_GAINLLR_SF16, 0x20 }, /* GAINLLR_SF16 */ + { RSTV0910_GAINLLR_SF18, 0x22 }, /* GAINLLR_SF18 */ + { RSTV0910_GAINLLR_SF19, 0x22 }, /* GAINLLR_SF19 */ + { RSTV0910_GAINLLR_SF20, 0x24 }, /* GAINLLR_SF20 */ + { RSTV0910_GAINLLR_SF21, 0x24 }, /* GAINLLR_SF21 */ + { RSTV0910_GAINLLR_SF22, 0x25 }, /* GAINLLR_SF22 */ + { RSTV0910_GAINLLR_SF24, 0x20 }, /* GAINLLR_SF24 */ + { RSTV0910_GAINLLR_SF25, 0x20 }, /* GAINLLR_SF25 */ + { RSTV0910_GAINLLR_SF26, 0x20 }, /* GAINLLR_SF26 */ + { RSTV0910_GAINLLR_SF27, 0x20 }, /* GAINLLR_SF27 */ + { RSTV0910_CFGEXT, 0x02 }, /* CFGEXT */ + { RSTV0910_GENCFG, 0x15 }, /* GENCFG IP is in dual demod mode so both input streams are processed */ +/* { RSTV0910_LDPCERR1, 0x00 }, LDPCERR1 R only : error counter MSByte */ +/* { RSTV0910_LDPCERR0, 0x00 }, LDPCERR0 R only : error counter LSByte */ +/* { RSTV0910_BCHERR, 0x00 }, BCHERR R only : error flag and error counter */ + + { RSTV0910_P1_MAXEXTRAITER, 0x07 }, /* P1_MAXEXTRAITER */ + { RSTV0910_P2_MAXEXTRAITER, 0x07 }, /* P2_MAXEXTRAITER */ + { RSTV0910_P1_STATUSITER, 0x00 }, /* P1_STATUSITER */ + { RSTV0910_P1_STATUSMAXITER, 0x00 }, /* P1_STATUSMAXITER */ + { RSTV0910_P2_STATUSITER, 0x00 }, /* P2_STATUSITER */ + { RSTV0910_P2_STATUSMAXITER, 0x00 }, /* P2_STATUSMAXITER */ + + /* P2 NBITER registers */ + { RSTV0910_P2_NBITER_NF1, 0x1c }, /* P2_NBITER_NF1 */ + { RSTV0910_P2_NBITER_NF2, 0x19 }, /* P2_NBITER_NF2 */ + { RSTV0910_P2_NBITER_NF3, 0x17 }, /* P2_NBITER_NF3 */ + { RSTV0910_P2_NBITER_NF4, 0x18 }, /* P2_NBITER_NF4 */ + { RSTV0910_P2_NBITER_NF5, 0x13 }, /* P2_NBITER_NF5 */ + { RSTV0910_P2_NBITER_NF6, 0x19 }, /* P2_NBITER_NF6 */ + { RSTV0910_P2_NBITER_NF7, 0x18 }, /* P2_NBITER_NF7 */ + { RSTV0910_P2_NBITER_NF8, 0x17 }, /* P2_NBITER_NF8 */ + { RSTV0910_P2_NBITER_NF9, 0x16 }, /* P2_NBITER_NF9 */ + { RSTV0910_P2_NBITER_NF10, 0x1c }, /* P2_NBITER_NF10 */ + { RSTV0910_P2_NBITER_NF11, 0x1c }, /* P2_NBITER_NF11 */ + { RSTV0910_P2_NBITER_NF12, 0x13 }, /* P2_NBITER_NF12 */ + { RSTV0910_P2_NBITER_NF13, 0x19 }, /* P2_NBITER_NF13 */ + { RSTV0910_P2_NBITER_NF14, 0x18 }, /* P2_NBITER_NF14 */ + { RSTV0910_P2_NBITER_NF15, 0x16 }, /* P2_NBITER_NF15 */ + { RSTV0910_P2_NBITER_NF16, 0x1c }, /* P2_NBITER_NF16 */ + { RSTV0910_P2_NBITER_NF17, 0x1c }, /* P2_NBITER_NF17 */ + { RSTV0910_P2_NBITER_NF18, 0x19 }, /* P2_NBITER_NF18 */ + { RSTV0910_P2_NBITER_NF19, 0x18 }, /* P2_NBITER_NF19 */ + { RSTV0910_P2_NBITER_NF20, 0x17 }, /* P2_NBITER_NF20 */ + { RSTV0910_P2_NBITER_NF21, 0x16 }, /* P2_NBITER_NF21 */ + { RSTV0910_P2_NBITER_NF22, 0x1c }, /* P2_NBITER_NF22 */ + { RSTV0910_P2_NBITER_NF23, 0x1c }, /* P2_NBITER_NF23 */ + { RSTV0910_P2_NBITER_NF24, 0x18 }, /* P2_NBITER_NF24 */ + { RSTV0910_P2_NBITER_NF25, 0x17 }, /* P2_NBITER_NF25 */ + { RSTV0910_P2_NBITER_NF26, 0x16 }, /* P2_NBITER_NF26 */ + { RSTV0910_P2_NBITER_NF27, 0x1c }, /* P2_NBITER_NF27 */ + { RSTV0910_P2_NBITER_NF28, 0x1c }, /* P2_NBITER_NF28 */ + { RSTV0910_P2_NBITER_SF1, 0x1b }, /* P2_NBITER_SF1 */ + { RSTV0910_P2_NBITER_SF2, 0x19 }, /* P2_NBITER_SF2 */ + { RSTV0910_P2_NBITER_SF3, 0x17 }, /* P2_NBITER_SF3 */ + { RSTV0910_P2_NBITER_SF4, 0x1a }, /* P2_NBITER_SF4 */ + { RSTV0910_P2_NBITER_SF5, 0x13 }, /* P2_NBITER_SF5 */ + { RSTV0910_P2_NBITER_SF6, 0x19 }, /* P2_NBITER_SF6 */ + { RSTV0910_P2_NBITER_SF7, 0x1b }, /* P2_NBITER_SF7 */ + { RSTV0910_P2_NBITER_SF8, 0x1d }, /* P2_NBITER_SF8 */ + { RSTV0910_P2_NBITER_SF9, 0x1b }, /* P2_NBITER_SF9 */ + { RSTV0910_P2_NBITER_SF10, 0x1c }, /* P2_NBITER_SF10 */ + { RSTV0910_P2_NBITER_SF12, 0x13 }, /* P2_NBITER_SF12 */ + { RSTV0910_P2_NBITER_SF13, 0x19 }, /* P2_NBITER_SF13 */ + { RSTV0910_P2_NBITER_SF14, 0x1b }, /* P2_NBITER_SF14 */ + { RSTV0910_P2_NBITER_SF15, 0x1b }, /* P2_NBITER_SF15 */ + { RSTV0910_P2_NBITER_SF16, 0x1c }, /* P2_NBITER_SF16 */ + { RSTV0910_P2_NBITER_SF18, 0x19 }, /* P2_NBITER_SF18 */ + { RSTV0910_P2_NBITER_SF19, 0x1b }, /* P2_NBITER_SF19 */ + { RSTV0910_P2_NBITER_SF20, 0x1d }, /* P2_NBITER_SF20 */ + { RSTV0910_P2_NBITER_SF21, 0x1b }, /* P2_NBITER_SF21 */ + { RSTV0910_P2_NBITER_SF22, 0x1c }, /* P2_NBITER_SF22 */ + { RSTV0910_P2_NBITER_SF24, 0x1b }, /* P2_NBITER_SF24 */ + { RSTV0910_P2_NBITER_SF25, 0x1d }, /* P2_NBITER_SF25 */ + { RSTV0910_P2_NBITER_SF26, 0x1b }, /* P2_NBITER_SF26 */ + { RSTV0910_P2_NBITER_SF27, 0x1c }, /* P2_NBITER_SF27 */ + + { RSTV0910_TSTRES0, 0x00 }, /* TSTRES0 */ + { RSTV0910_TSTOUT, 0x00 }, /* TSTOUT */ + { RSTV0910_TSTIN, 0x00 }, /* TSTIN */ + + { RSTV0910_P2_TSTDMD, 0x00 }, /* P2_TSTDMD */ + { RSTV0910_P2_TCTL1, 0x00 }, /* P2_TCTL1 */ + /* TST P2 Registers */ + { RSTV0910_P2_TCTL4, 0x00 }, /* P2_TCTL4 */ + { RSTV0910_P2_TPKTDELIN, 0x00 }, /* P2_TPKTDELIN */ + { RSTV0910_P1_TSTDMD, 0x00 }, /* P1_TSTDMD */ + { RSTV0910_P1_TCTL1, 0x00 }, /* P1_TCTL1 */ + /* TST P1 Registers */ + { RSTV0910_P1_TCTL4, 0x00 }, /* P1_TCTL4 */ + { RSTV0910_P1_TPKTDELIN, 0x00 }, /* P1_TPKTDELIN */ + + { RSTV0910_TSTTSRS, 0x00 }, /* TSTTSRS */ +}; + +#endif + diff --git a/longmynd/stv0910_utils.c b/longmynd/stv0910_utils.c new file mode 100755 index 0000000..50388c6 --- /dev/null +++ b/longmynd/stv0910_utils.c @@ -0,0 +1,111 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910_utils.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - These routines abstract the register read and writes for the demodulator (STV0910) */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include "stv0910_regs.h" +#include "stv0910_utils.h" +#include "errors.h" +#include "nim.h" + +/* in order to do bitfields efficiently, we need to keep a shadow register set */ +uint8_t stv0910_shadow_regs[STV0910_END_ADDR - STV0910_START_ADDR + 1]; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_write_reg_field(uint32_t field, uint8_t field_val) { +/* -------------------------------------------------------------------------------------------------- */ +/* changes a bitfield of a register using a shadow register array to do the read/modify/write */ +/* field: the #define of the bitfield as given in stv0910_regs.h (from the datasheet) */ +/* field_val: what to set the field to (in the LSBs of the value */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint16_t reg; + uint8_t val; + + /* firsr we need to work out which register to use */ + reg=field >> 16; + /* now we calculate the new value for this reg by reading the shadow array, */ + /* masking out the field we want, and putting the new value in */ + val=((stv0910_shadow_regs[reg-STV0910_START_ADDR] & ~(field & 0xff)) | + (field_val << ((field >> 12) & 0x0f)) ); + /* now we can write the new value back to the demodulator and the shadow registers */ + if (err==ERROR_NONE) err=nim_write_demod(reg, val); + if (err==ERROR_NONE) stv0910_shadow_regs[reg-STV0910_START_ADDR]=val; + + if (err!=ERROR_NONE) printf("ERROR: STV0910 write field\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_reg_field(uint32_t field, uint8_t *field_val) { +/* -------------------------------------------------------------------------------------------------- */ +/* reads a bitfield of a register. This cannot go via the shadows as the regs are volatile */ +/* field: the #define of the bitfield as given in stv0910_regs.h (from the datasheet) */ +/* *field_val: the contents of the field once read */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t val; + + /* we can read the register value first */ + if (err==ERROR_NONE) err=nim_read_demod((uint16_t)(field >> 16), &val); + /* and then do the masks and shifts to get at the specific bits */ + *field_val = ((val) & (field & 0xff)) >> ((field >> 12) & 0x0f); + + if (err!=ERROR_NONE) printf("ERROR: STV0910 read field\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_write_reg(uint16_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* abstracts a hardware register write to the stv0910 */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + + stv0910_shadow_regs[reg-STV0910_START_ADDR]=val; + + return nim_write_demod(reg, val); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv0910_read_reg(uint16_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* abstracts a hardware register read from the stv0910 */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + + return nim_read_demod(reg, val); +} + diff --git a/longmynd/stv0910_utils.h b/longmynd/stv0910_utils.h new file mode 100755 index 0000000..f925f49 --- /dev/null +++ b/longmynd/stv0910_utils.h @@ -0,0 +1,34 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv0910_utils.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV0910_UTILS_H +#define STV0910_UTILS_H + +#define STV0910_START_ADDR RSTV0910_MID +#define STV0910_END_ADDR RSTV0910_TSTTSRS + +uint8_t stv0910_write_reg_field(uint32_t, uint8_t); +uint8_t stv0910_read_reg_field(uint32_t, uint8_t *); +uint8_t stv0910_write_reg(uint16_t, uint8_t); +uint8_t stv0910_read_reg(uint16_t, uint8_t *); + +#endif + diff --git a/longmynd/stv6120.c b/longmynd/stv6120.c new file mode 100755 index 0000000..571e545 --- /dev/null +++ b/longmynd/stv6120.c @@ -0,0 +1,438 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv6120.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - the stv6120 (tuner) specific routines */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include "math.h" +#include +#include +#include +#include "nim.h" +#include "stv6120.h" +#include "stv6120_regs.h" +#include "stv6120_utils.h" +#include "errors.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +/* some globals to make it easier to keep track of register contents across function calls */ +uint8_t rdiv; +uint8_t ctrl7; +uint8_t ctrl8; +uint8_t ctrl16; +uint8_t ctrl17; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- CONSTANTS ---------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* from the datasheet: charge pump data */ +const uint32_t stv6120_icp_lookup[7][3]={ + /* low high icp */ + {2380000, 2472000, 0}, + {2473000, 2700000, 1}, + {2701000, 3021000, 2}, + {3022000, 3387000, 3}, + {3388000, 3845000, 5}, + {3846000, 4394000, 6}, + {4395000, 4760000, 7} +}; + +/* a lookup table for the cutuff freq of the HF filter in MHz */ +const uint16_t stv6120_cfhf[32]={6796, 5828, 4778, 4118, 3513, 3136, 2794, 2562, + 2331, 2169, 2006, 1890, 1771, 1680, 1586, 1514, + 1433, 1374, 1310, 1262, 1208, 1167, 1122, 1087, + 1049, 1018, 983, 956, 926, 902, 875, 854}; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv6120_cal_lowpass(uint8_t tuner) { +/* -------------------------------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t val; + uint16_t timeout; + + printf("Flow: Tuner cal lowpass\n"); + + /* turn on the clock for the low pass filter. This is in ctrl7/16 so we have a shadow for it */ + if (tuner==TUNER_1) err=stv6120_write_reg(STV6120_CTRL7 , ctrl7 & ~(1 << STV6120_CTRL7_RCCLKOFF_SHIFT)); + else err=stv6120_write_reg(STV6120_CTRL16, ctrl16 & ~(1 << STV6120_CTRL7_RCCLKOFF_SHIFT)); + /* now we can do a low pass filter calibration, by setting the CALRCSTRT bit. NOte it is safe to just write to it */ + if (err==ERROR_NONE) err=stv6120_write_reg(tuner==TUNER_1 ? STV6120_STAT1 : STV6120_STAT2, + (STV6120_STAT1_CALRCSTRT_START << STV6120_STAT1_CALRCSTRT_SHIFT)); + /* wait for the bit to be cleared to say cal has finished*/ + if (err==ERROR_NONE) { + timeout=0; + do { + err=stv6120_read_reg(STV6120_STAT1, &val); + timeout++; + if (timeout==STV6120_CAL_TIMEOUT) { + err=ERROR_TUNER_CAL_LOWPASS_TIMEOUT; + printf("ERROR: tuner wait on CAL_lowpass timed out\n"); + } + } while ((err==ERROR_NONE) && ((val & (1< stv6120_icp_lookup[pos++][1]); + icp=stv6120_icp_lookup[pos-1][2]; + + /* lookup the high freq filter cutoff setting as per datasheet */ + cfhf=0; + while ((3*freq/1000) <= stv6120_cfhf[cfhf]) { + cfhf++; + } + cfhf--; /* we are sure it isn't greater then the first array element so this is safe */ + + printf(" Status: tuner:%i, f_vco=0x%x, icp=0x%x, f=0x%x, n=0x%x,\n",tuner,f_vco,icp,f,n); + printf(" rdiv=0x%x, p=0x%x, freq=%i, cfhf=%i\n",rdiv,p,freq,stv6120_cfhf[cfhf]); + + /* now we fill in the PLL and ICP values */ + if (err==ERROR_NONE) err=stv6120_write_reg(tuner==TUNER_1 ? STV6120_CTRL3 : STV6120_CTRL12, + (n & 0x00ff) ); /* set N[7:0] */ + if (err==ERROR_NONE) err=stv6120_write_reg(tuner==TUNER_1 ? STV6120_CTRL4 : STV6120_CTRL13, + ((f & 0x0000007f) << 1) | /* set F[6:0] */ + ((n & 0x0100) >> 8) ); /* N[8] */ + if (err==ERROR_NONE) err=stv6120_write_reg(tuner==TUNER_1 ? STV6120_CTRL5 : STV6120_CTRL14, + ((f & 0x00007f80) >> 7) ); /* set F[14:7] */ + if (err==ERROR_NONE) err=stv6120_write_reg(tuner==TUNER_1 ? STV6120_CTRL6 : STV6120_CTRL15, + ((f & 0x00038000) >> 15) | /* set f[17:15] */ + (icp << STV6120_CTRL6_ICP_SHIFT) | /* ICP[2:0] */ + STV6120_CTRL6_RESERVED ); /* reserved bit */ + + if (tuner==TUNER_1) { + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL7, + (p<0: the frequency to set tuner 1 to */ +/* freq_tuner_2: 0: disable tuner 2 */ +/* >0: the frequency to set tuner 2 to */ +/* swap: false: use TOP input for tuner_1 */ +/* true : use bottom input for tuner_1 */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t k; + + printf("Flow: Tuner init\n"); + + /* note, we always init the tuner from scratch so no need to check if we have already inited it before */ + /* also, the tuner doesn't have much of an ID so no point in checking it */ + + /* we calculate K from F_xtal/(K+16)=1MHz as specified in the datasheet */ + k=NIM_TUNER_XTAL/1000-16; + + /* setup the clocks for both tuners (note rdiv is a global) */ + if (NIM_TUNER_XTAL>=STV6120_RDIV_THRESHOLD) rdiv=1; /* from the data sheet */ + else rdiv=0; + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL1, + (k << STV6120_CTRL1_K_SHIFT) | + (rdiv << STV6120_CTRL1_RDIV_SHIFT) | + (STV6120_CTRL1_OSHAPE_SINE << STV6120_CTRL1_OSHAPE_SHIFT) | + (STV6120_CTRL1_MCLKDIV_4 << STV6120_CTRL1_MCLKDIV_SHIFT) ); + + /* Configure path 1 */ + if (freq_tuner_1>0) { /* we are go on tuner 1 so turn it on */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL2, + (STV6120_CTRL2_DCLOOPOFF_ENABLE << STV6120_CTRL2_DCLOOPOFF_SHIFT) | + (STV6120_CTRL2_SDOFF_OFF << STV6120_CTRL2_SDOFF_SHIFT) | + (STV6120_CTRL2_SYN_ON << STV6120_CTRL2_SYN_SHIFT) | + (STV6120_CTRL2_REFOUTSEL_1_25V << STV6120_CTRL2_REFOUTSEL_SHIFT) | + (STV6120_CTRL2_BBGAIN_0DB << STV6120_CTRL2_BBGAIN_SHIFT) ); + + /* CTRL3,4,5,6 are all tuner 1 PLL regs we will set them later */ + + /* turn off rcclk for now */ + if (err==ERROR_NONE) { + ctrl7 = (STV6120_CTRL7_RCCLKOFF_DISABLE << STV6120_CTRL7_RCCLKOFF_SHIFT) | + (STV6120_CTRL7_CF_5MHZ << STV6120_CTRL7_CF_SHIFT) ; + err=stv6120_write_reg(STV6120_CTRL7, ctrl7); + } + + } else { /* we are not going to use path 1 so shut it down */ + + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL2, + (STV6120_CTRL2_DCLOOPOFF_DISABLE << STV6120_CTRL2_DCLOOPOFF_SHIFT) | + (STV6120_CTRL2_SDOFF_ON << STV6120_CTRL2_SDOFF_SHIFT) | + (STV6120_CTRL2_SYN_OFF << STV6120_CTRL2_SYN_SHIFT) | + (STV6120_CTRL2_REFOUTSEL_1_25V << STV6120_CTRL2_REFOUTSEL_SHIFT) | + (STV6120_CTRL2_BBGAIN_0DB << STV6120_CTRL2_BBGAIN_SHIFT) ); + + /* CTRL3,4,5,6 are all tuner 1 PLL regs we will set them later */ + + if (err==ERROR_NONE) { + ctrl7 = (STV6120_CTRL7_RCCLKOFF_DISABLE << STV6120_CTRL7_RCCLKOFF_SHIFT) | + (STV6120_CTRL7_CF_5MHZ << STV6120_CTRL7_CF_SHIFT) ; + err=stv6120_write_reg(STV6120_CTRL7, ctrl7); + } + } + + /* we need to set tcal for both tuners, but we need to remember the state in case we are using tuner 1 later */ + if (err==ERROR_NONE) { + ctrl8 = (STV6120_CTRL8_TCAL_DIV_2 << STV6120_CTRL8_TCAL_SHIFT) | + (STV6120_CTRL8_CALTIME_500US << STV6120_CTRL8_TCAL_SHIFT) ; + err=stv6120_write_reg(STV6120_CTRL8, ctrl8); + } + + /* no need to touch the STAT1 status register for now */ + + /* setup the RF path registers. RFA and RFD are not used. RFB is fed from the TOP NIM input, RFC from the BOTTOM */ + /* if we are swapping these inputs over we need to enable the correct LNAs */ + if (swap) { + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL9, + (STV6120_CTRL9_RFSEL_RFC_IN << STV6120_CTRL9_RFSEL_1_SHIFT) | + (STV6120_CTRL9_RFSEL_RFB_IN << STV6120_CTRL9_RFSEL_2_SHIFT) | + STV6120_CTRL9_RESERVED ); + /* decide on which LNAs are we going to enable */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL10, + (( STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNADON_SHIFT) | + ((freq_tuner_2 > 0 ? STV6120_CTRL10_LNA_ON : STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNABON_SHIFT) | + ((freq_tuner_1 > 0 ? STV6120_CTRL10_LNA_ON : STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNACON_SHIFT) | + (( STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNAAON_SHIFT) | + ((freq_tuner_2 > 0 ? STV6120_CTRL10_PATH_ON : STV6120_CTRL10_PATH_OFF) << STV6120_CTRL10_PATHON_2_SHIFT) | + ((freq_tuner_1 > 0 ? STV6120_CTRL10_PATH_ON : STV6120_CTRL10_PATH_OFF) << STV6120_CTRL10_PATHON_1_SHIFT) ); + + } else { + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL9, + (STV6120_CTRL9_RFSEL_RFB_IN << STV6120_CTRL9_RFSEL_1_SHIFT) | + (STV6120_CTRL9_RFSEL_RFC_IN << STV6120_CTRL9_RFSEL_2_SHIFT) | + STV6120_CTRL9_RESERVED ); + /* decide on which LNAs are we going to enable */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL10, + (( STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNADON_SHIFT) | + ((freq_tuner_2 > 0 ? STV6120_CTRL10_LNA_ON : STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNACON_SHIFT) | + ((freq_tuner_1 > 0 ? STV6120_CTRL10_LNA_ON : STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNABON_SHIFT) | + (( STV6120_CTRL10_LNA_OFF) << STV6120_CTRL10_LNAAON_SHIFT) | + ((freq_tuner_2 > 0 ? STV6120_CTRL10_PATH_ON : STV6120_CTRL10_PATH_OFF) << STV6120_CTRL10_PATHON_2_SHIFT) | + ((freq_tuner_1 > 0 ? STV6120_CTRL10_PATH_ON : STV6120_CTRL10_PATH_OFF) << STV6120_CTRL10_PATHON_1_SHIFT) ); + } + + /* Configure path 2 */ + if (freq_tuner_2>0) { /* we are go on tuner 2 so turn it on */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL11, + (STV6120_CTRL2_DCLOOPOFF_ENABLE << STV6120_CTRL2_DCLOOPOFF_SHIFT) | + (STV6120_CTRL2_SDOFF_OFF << STV6120_CTRL2_SDOFF_SHIFT) | + (STV6120_CTRL2_SYN_ON << STV6120_CTRL2_SYN_SHIFT) | + (STV6120_CTRL2_REFOUTSEL_1_25V << STV6120_CTRL2_REFOUTSEL_SHIFT) | + (STV6120_CTRL2_BBGAIN_6DB << STV6120_CTRL2_BBGAIN_SHIFT) ); + + /* CTRL12, 13, 14, 15 are PLL for tuner 2 */ + + if (err==ERROR_NONE) { + ctrl16 = (STV6120_CTRL7_RCCLKOFF_ENABLE << STV6120_CTRL7_RCCLKOFF_SHIFT) | + (STV6120_CTRL7_CF_5MHZ << STV6120_CTRL7_CF_SHIFT) ; + err=stv6120_write_reg(STV6120_CTRL16, ctrl16); + } + + } else { /* we are not going to use path 1 so shut it down */ + + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL11, + (STV6120_CTRL2_DCLOOPOFF_DISABLE << STV6120_CTRL2_DCLOOPOFF_SHIFT) | + (STV6120_CTRL2_SDOFF_ON << STV6120_CTRL2_SDOFF_SHIFT) | + (STV6120_CTRL2_SYN_OFF << STV6120_CTRL2_SYN_SHIFT) | + (STV6120_CTRL2_REFOUTSEL_1_25V << STV6120_CTRL2_REFOUTSEL_SHIFT) | + (STV6120_CTRL2_BBGAIN_0DB << STV6120_CTRL2_BBGAIN_SHIFT) ); + + /* CTRL12, 13, 14, 15 are PLL for tuner 2 */ + + if (err==ERROR_NONE) { + ctrl16 = (STV6120_CTRL7_RCCLKOFF_DISABLE << STV6120_CTRL7_RCCLKOFF_SHIFT) | + (STV6120_CTRL7_CF_5MHZ << STV6120_CTRL7_CF_SHIFT) ; + err=stv6120_write_reg(STV6120_CTRL16, ctrl16); + } + } + + /* there is no tcal field in CTRL17 but we still need to remember the state in case we are using tuner 2 later */ + if (err==ERROR_NONE) { + ctrl17 = (STV6120_CTRL8_CALTIME_500US << STV6120_CTRL8_TCAL_SHIFT); + err=stv6120_write_reg(STV6120_CTRL17, ctrl8); + } + + /* no need to touch the STAT2 status register for now */ + + /* CTRL18, CTRL19 are test regs so just write in the default */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL18,STV6120_CTRL18_DEFAULT); + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL19,STV6120_CTRL19_DEFAULT); + + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL20, + (STV6120_CTRL20_VCOAMP_NORMAL << STV6120_CTRL20_VCOAMP_SHIFT) | + STV6120_CTRL20_RESERVED ); + + /* CTRL21, CTRL22 are test regs so leave alone */ + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL21,STV6120_CTRL21_DEFAULT); + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL22,STV6120_CTRL22_DEFAULT); + + if (err==ERROR_NONE) err=stv6120_write_reg(STV6120_CTRL23, + (STV6120_CTRL20_VCOAMP_NORMAL << STV6120_CTRL20_VCOAMP_SHIFT) | + STV6120_CTRL20_RESERVED ); + + /* now we can calibrate the lowpass filters and setup the PLLs for each tuner required */ + if ((err==ERROR_NONE) && (freq_tuner_1>0)) { + err=stv6120_cal_lowpass(TUNER_1); + if (err==ERROR_NONE) err=stv6120_set_freq(TUNER_1, freq_tuner_1); + } + if ((err==ERROR_NONE) && (freq_tuner_2>0)) { + err=stv6120_cal_lowpass(TUNER_2); + if (err==ERROR_NONE) err=stv6120_set_freq(TUNER_2, freq_tuner_2); + } + + if (err!=ERROR_NONE) printf("ERROR: Failed to init Tuner %i, %i\n",freq_tuner_1, freq_tuner_2); + + return err; +} + + + + +/* -------------------------------------------------------------------------------------------------- */ +void stv6120_print_settings() { +/* -------------------------------------------------------------------------------------------------- */ +/* debug routine to print out all the regsiter values in the tuner */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t val; + + printf("Tuner regs are:\n"); + for(int i=0;i<0x19;i++) { + stv6120_read_reg(i,&val); + printf(" 0x%.2x = 0x%.2x\n",i,val); + } +} + diff --git a/longmynd/stv6120.h b/longmynd/stv6120.h new file mode 100755 index 0000000..98179d1 --- /dev/null +++ b/longmynd/stv6120.h @@ -0,0 +1,46 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv6120.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV6120_H +#define STV6120_H + +#include + +#define TUNER_LOCKED 0 +#define TUNER_NOT_LOCKED 1 + +#define TUNER_1 0 +#define TUNER_2 1 + +#define STV6120_RDIV_THRESHOLD 27000 +#define STV6120_P_THRESHOLD_1 299000 +#define STV6120_P_THRESHOLD_2 596000 +#define STV6120_P_THRESHOLD_3 1191000 + +#define STV6120_CAL_TIMEOUT 200 + +uint8_t stv6120_init(uint32_t, uint32_t, bool); +uint8_t stv6120_set_freq(uint8_t, uint32_t); +uint8_t stv6120_cal_lowpass(uint8_t); +void stv6120_print_settings(); + +#endif + diff --git a/longmynd/stv6120_regs.h b/longmynd/stv6120_regs.h new file mode 100755 index 0000000..38cb84f --- /dev/null +++ b/longmynd/stv6120_regs.h @@ -0,0 +1,185 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv6120_regs.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV6120_REGS_H +#define STV6120_REGS_H + +/* common registers toboth tuners */ +#define STV6120_CTRL1 0x00 +#define STV6120_CTRL1_K_SHIFT 3 +#define STV6120_CTRL1_K_MASK 0xf8 +#define STV6120_CTRL1_RDIV_SHIFT 2 +#define STV6120_CTRL1_OSHAPE_SHIFT 1 +#define STV6120_CTRL1_OSHAPE_SINE 0 +#define STV6120_CTRL1_OSHAPE_SQUARE 1 +#define STV6120_CTRL1_MCLKDIV_SHIFT 0 +#define STV6120_CTRL1_MCLKDIV_2 0 +#define STV6120_CTRL1_MCLKDIV_4 1 + +#define STV6120_CTRL2 0x01 +#define STV6120_CTRL2_DCLOOPOFF_SHIFT 7 +#define STV6120_CTRL2_DCLOOPOFF_ENABLE 0 +#define STV6120_CTRL2_DCLOOPOFF_DISABLE 1 +#define STV6120_CTRL2_SDOFF_SHIFT 6 +#define STV6120_CTRL2_SDOFF_OFF 0 +#define STV6120_CTRL2_SDOFF_ON 1 +#define STV6120_CTRL2_SYN_SHIFT 5 +#define STV6120_CTRL2_SYN_OFF 0 +#define STV6120_CTRL2_SYN_ON 1 +#define STV6120_CTRL2_REFOUTSEL_SHIFT 4 +#define STV6120_CTRL2_REFOUTSEL_VCC_DIV_2 0 +#define STV6120_CTRL2_REFOUTSEL_1_25V 1 +#define STV6120_CTRL2_BBGAIN_SHIFT 0 +#define STV6120_CTRL2_BBGAIN_0DB 0x0 +#define STV6120_CTRL2_BBGAIN_2DB 0x1 +#define STV6120_CTRL2_BBGAIN_4DB 0x2 +#define STV6120_CTRL2_BBGAIN_6DB 0x3 +#define STV6120_CTRL2_BBGAIN_8DB 0x4 +#define STV6120_CTRL2_BBGAIN_10DB 0x5 +#define STV6120_CTRL2_BBGAIN_12DB 0x6 +#define STV6120_CTRL2_BBGAIN_14DB 0x7 +#define STV6120_CTRL2_BBGAIN_16DB 0x8 + +/* registers for tuner 1 */ +#define STV6120_CTRL3 0x02 + +#define STV6120_CTRL4 0x03 +#define STV6120_CTRL4_F_6_0_SHIFT 1 +#define STV6120_CTRL4_F_6_0_MASK 0xfe +#define STV6120_CTRL4_N_9_SHIFT 0 + +#define STV6120_CTRL5 0x04 + +#define STV6120_CTRL6 0x05 +#define STV6120_CTRL6_ICP_SHIFT 4 +#define STV6120_CTRL6_ICP_MASK 0x70 +#define STV6120_CTRL6_ICP_300UA 0 +#define STV6120_CTRL6_ICP_325UA 1 +#define STV6120_CTRL6_ICP_360UA 2 +#define STV6120_CTRL6_ICP_400UA 3 +/* note 400uA has 2 definitions */ +#define STV6120_CTRL6_ICP_400UA_2 4 +#define STV6120_CTRL6_ICP_450UA 5 +#define STV6120_CTRL6_ICP_525UA 6 +#define STV6120_CTRL6_ICP_600UA 7 +#define STV6120_CTRL6_F_17_15_SHIFT 0 +#define STV6120_CTRL6_F_17_15_MASK 0x07 +#define STV6120_CTRL6_RESERVED 0x08 + +#define STV6120_CTRL7 0x06 +#define STV6120_CTRL7_RCCLKOFF_SHIFT 7 +#define STV6120_CTRL7_RCCLKOFF_ENABLE 0 +#define STV6120_CTRL7_RCCLKOFF_DISABLE 1 +#define STV6120_CTRL7_PDIV_SHIFT 5 +#define STV6120_CTRL7_CF_SHIFT 0 +#define STV6120_CTRL7_CF_5MHZ 0x00 + +#define STV6120_CTRL8 0x07 +#define STV6120_CTRL8_TCAL_SHIFT 6 +#define STV6120_CTRL8_TCAL_MASK 0xc0 +#define STV6120_CTRL8_TCAL_DIV_1 0 +#define STV6120_CTRL8_TCAL_DIV_2 1 +#define STV6120_CTRL8_TCAL_DIV_4 2 +#define STV6120_CTRL8_TCAL_DIV_8 3 +#define STV6120_CTRL8_CALTIME_SHIFT 5 +#define STV6120_CTRL8_CALTIME_500US 0 +#define STV6120_CTRL8_CALTIME_1MS 1 +#define STV6120_CTRL8_CFHF_SHIFT 0 +#define STV6120_CTRL8_CFHF_MASK 0x1f + +#define STV6120_STAT1 0x08 +#define STV6120_STAT1_CALVCOSTRT_SHIFT 2 +#define STV6120_STAT1_CALVCOSTRT_FINISHED 0 +#define STV6120_STAT1_CALVCOSTRT_START 1 +#define STV6120_STAT1_CALRCSTRT_SHIFT 1 +#define STV6120_STAT1_CALRCSTRT_FINISHED 0 +#define STV6120_STAT1_CALRCSTRT_START 1 +#define STV6120_STAT1_LOCK_SHIFT 0 +#define STV6120_STAT1_LOCK_NOT_IN_LOCK 0 +#define STV6120_STAT1_LOCK_LOCKED 1 +#define STV6120_STAT1_RESERVED 0x08 + +/* refsel fields for both tuners and path select */ +#define STV6120_CTRL9 0x09 +#define STV6120_CTRL9_RFSEL_2_SHIFT 2 +#define STV6120_CTRL9_RFSEL_2_MASK 0x0c +#define STV6120_CTRL9_RFSEL_RFA_IN 0 +#define STV6120_CTRL9_RFSEL_RFB_IN 1 +#define STV6120_CTRL9_RFSEL_RFC_IN 2 +#define STV6120_CTRL9_RFSEL_RFD_IN 3 +#define STV6120_CTRL9_RFSEL_1_SHIFT 0 +#define STV6120_CTRL9_RFSEL_1_MASK 0x03 +#define STV6120_CTRL9 0x09 +#define STV6120_CTRL9_RESERVED 0xf0 + +/* path select for both tuners */ +#define STV6120_CTRL10 0x0a +#define STV6120_CTRL10_DEFAULT 0xbf +#define STV6120_CTRL10_ID_SHIFT 6 +#define STV6120_CTRL10_ID_MASK 0xc0 +#define STV6120_CTRL10_LNADON_SHIFT 5 +#define STV6120_CTRL10_LNACON_SHIFT 4 +#define STV6120_CTRL10_LNA_OFF 0 +#define STV6120_CTRL10_LNA_ON 1 +#define STV6120_CTRL10_LNABON_SHIFT 3 +#define STV6120_CTRL10_LNAAON_SHIFT 2 +#define STV6120_CTRL10_PATHON_2_SHIFT 1 +#define STV6120_CTRL10_PATH_OFF 0 +#define STV6120_CTRL10_PATH_ON 1 +#define STV6120_CTRL10_PATHON_1_SHIFT 0 + +/* Regs CTRL11 to 18 and STAT2 are all Tuner2 regs */ +#define STV6120_CTRL11 0x0b +#define STV6120_CTRL12 0x0c +#define STV6120_CTRL13 0x0d +#define STV6120_CTRL14 0x0e +#define STV6120_CTRL15 0x0f +#define STV6120_CTRL16 0x10 +#define STV6120_CTRL17 0x11 +#define STV6120_STAT2 0x12 + +/* test registers */ +#define STV6120_CTRL18 0x13 +#define STV6120_CTRL18_DEFAULT 0x00 +#define STV6120_CTRL19 0x14 +#define STV6120_CTRL19_DEFAULT 0x00 + +/* vco 1 amplfier and test */ +#define STV6120_CTRL20 0x15 +#define STV6120_CTRL20_VCOAMP_SHIFT 6 +#define STV6120_CTRL20_VCOAMP_MASK 0xc0 +#define STV6120_CTRL20_VCOAMP_AUTO 0 +#define STV6120_CTRL20_VCOAMP_LOW 1 +#define STV6120_CTRL20_VCOAMP_NORMAL 2 +#define STV6120_CTRL20_VCOAMP_VERY_LOW 3 +#define STV6120_CTRL20_RESERVED 0x0c + +/* test registers */ +#define STV6120_CTRL21 0x16 +#define STV6120_CTRL21_DEFAULT 0x00 +#define STV6120_CTRL22 0x17 +#define STV6120_CTRL22_DEFAULT 0x00 + +/* vco 2 amplfier and test */ +#define STV6120_CTRL23 0x18 + +#endif + diff --git a/longmynd/stv6120_utils.c b/longmynd/stv6120_utils.c new file mode 100755 index 0000000..736b93b --- /dev/null +++ b/longmynd/stv6120_utils.c @@ -0,0 +1,32 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv6120_utils.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - abstracting out the tuner (STV6120) register read and write routines */ +/* H.L. Lomond 2018,2019 */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include "nim.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv6120_read_reg(uint8_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* passes the register read through to the underlying register reading routines */ +/* -------------------------------------------------------------------------------------------------- */ + return nim_read_tuner(reg, val); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stv6120_write_reg(uint8_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* passes the register write through to the underlying register writing routines */ +/* -------------------------------------------------------------------------------------------------- */ + return nim_write_tuner(reg, val); +} diff --git a/longmynd/stv6120_utils.h b/longmynd/stv6120_utils.h new file mode 100755 index 0000000..c6e04fb --- /dev/null +++ b/longmynd/stv6120_utils.h @@ -0,0 +1,31 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stv6120_utils.h */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - top level (main) and command line procesing */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STV6120_UTILS_H +#define STV6120_UTILS_H + +uint8_t stv6120_read_reg(uint8_t, uint8_t *); +uint8_t stv6120_write_reg(uint8_t, uint8_t); + +#endif + diff --git a/longmynd/stvvglna.c b/longmynd/stvvglna.c new file mode 100755 index 0000000..e3e21b9 --- /dev/null +++ b/longmynd/stvvglna.c @@ -0,0 +1,165 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stvvglna.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - the LNA support routines (STVVGLNA). The Serit NIM has 2 LNAs */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include "stvvglna.h" +#include "nim.h" +#include "stvvglna_regs.h" +#include "stvvglna_utils.h" +#include "errors.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stvvglna_read_agc(uint8_t input, uint8_t *gain, uint8_t *vgo) { +/* -------------------------------------------------------------------------------------------------- */ +/* once we are running, this routine will read the gain and AGC for the LNA specified */ +/* input: NIM_INPUT_TOP | NIM_INPUT_BOTTOM: which LNA is being worked on */ +/* return: error code */ +/* *gain: the gain read from the specified LNA */ +/* *vgo: the vgo read from the specified LNA */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + uint8_t lna_addr; + uint16_t timeout=0; + uint8_t status; + + /* first we decide which LNA to use */ + if (input==NIM_INPUT_TOP) lna_addr=NIM_LNA_0_ADDR; + else lna_addr=NIM_LNA_1_ADDR; + + /* in fully auto, we can read the gain sn SWLNAGAIN and VGO[4:0]. First we get the LNA to measure the */ + /* variable part of the gain for us. Note, it is ok to write 0 to the other bitfields */ + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr, STVVGLNA_REG1, + STVVGLNA_REG1_GETAGC_START << STVVGLNA_REG1_GETAGC_SHIFT); + + do { + err=stvvglna_read_reg(lna_addr, STVVGLNA_REG1, &status); /* read out the status */ + timeout++; + if ((err==ERROR_NONE) && (timeout==STVVGLNA_AGC_TIMEOUT)) { + err=ERROR_LNA_AGC_TIMEOUT; + printf("Error: read AGC timeout\n"); + } + } + while ((err==ERROR_NONE) && (((status >> STVVGLNA_REG1_GETAGC_SHIFT) & 1)!=STVVGLNA_REG1_GETAGC_FORCED)); + stvvglna_read_reg(lna_addr, STVVGLNA_REG0, &status); /* read out the RFAGC high and low bits */ + + if (err==ERROR_NONE) err=stvvglna_read_reg(lna_addr, STVVGLNA_REG3, gain); /* read out the gain curves */ + *gain=((*gain & STVVGLNA_REG3_SWLNAGAIN_MASK) >> STVVGLNA_REG3_SWLNAGAIN_SHIFT); + if (err==ERROR_NONE) err=stvvglna_read_reg(lna_addr, STVVGLNA_REG1, vgo); /* read out the Vagc value */ + *vgo=((*vgo & STVVGLNA_REG1_VGO_MASK) >> STVVGLNA_REG1_VGO_SHIFT); + + if (err!=ERROR_NONE) printf("ERROR: Failed LNA aquire AGC %i\n", input); + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stvvglna_init(uint8_t input, uint8_t state, bool *lna_ok) { +/* -------------------------------------------------------------------------------------------------- */ +/* this is the init routine for the LNA */ +/* input: NIM_INPUT_TOP | NIM_INPUT_BOTTOM : specifies which LNA we are processing */ +/* lna_ok: if we find a NIM with an LNA then we set this to true otherwise false */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err; + uint8_t val; + uint8_t lna_addr; + + printf("Flow: LNA init %i\n",input); + + /* first we decide which LNA to use */ + if (input==NIM_INPUT_TOP) lna_addr=NIM_LNA_0_ADDR; + else lna_addr=NIM_LNA_1_ADDR; + + /* now check to see if there is an LNA present */ + err=stvvglna_read_reg(lna_addr, STVVGLNA_REG0, &val); + if (err!=ERROR_NONE) { + printf(" Status: found an older NIM with no LNA\n"); + *lna_ok=false; /* tell caller that there is no LNA */ + err=ERROR_NONE; /* we do not throw an error, just exit init */ + } else { + /* otherwise, lna is there so we go on to us it */ + printf(" Status: found new NIM with LNAs\n"); + *lna_ok=true; + + /* now check it has a good ID */ + if ((val & STVVGLNA_REG0_IDENT_MASK) != STVVGLNA_REG0_IDENT_DEFAULT) { + printf("ERROR: failed to recognise LNA ID %i %i\n",input,val); + err=ERROR_LNA_ID; + } + + if (state==STVVGLNA_ON) { + /* set up the defaults. We are going to use fully automatic mode */ + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr,STVVGLNA_REG0, + (STVVGLNA_REG0_AGC_TUPD_FAST << STVVGLNA_REG0_AGC_TUPD_SHIFT) | + (STVVGLNA_REG0_AGC_TLOCK_SLOW << STVVGLNA_REG0_AGC_TLOCK_SHIFT) ); + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr,STVVGLNA_REG1, + (STVVGLNA_REG1_LNAGC_PWD_POWER_ON << STVVGLNA_REG1_LNAGC_PWD_SHIFT) | + (STVVGLNA_REG1_GETOFF_ACQUISITION_MODE << STVVGLNA_REG1_GETOFF_SHIFT) | + (STVVGLNA_REG1_GETAGC_FORCED << STVVGLNA_REG1_GETAGC_SHIFT) ); + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr,STVVGLNA_REG2, + (STVVGLNA_REG2_PATH_ACTIVE << STVVGLNA_REG2_PATH2OFF_SHIFT) | + (STVVGLNA_REG2_RFAGC_PREF_N20DBM << STVVGLNA_REG2_RFAGC_PREF_SHIFT) | + (STVVGLNA_REG2_PATH_ACTIVE << STVVGLNA_REG2_PATH1OFF_SHIFT) | + (STVVGLNA_REG2_RFAGC_MODE_AUTO_TRACK << STVVGLNA_REG2_RFAGC_MODE_SHIFT) ); + /* note that in REG3 the gain curves (SWLNAGAIN) are read only in fully automatic mod, so no need to write to them */ + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr,STVVGLNA_REG3, + (STVVGLNA_REG3_LCAL_17KHZ << STVVGLNA_REG3_LCAL_SHIFT) | + (STVVGLNA_REG3_RFAGC_UPDATE_FORCED << STVVGLNA_REG3_RFAGC_UPDATE_SHIFT) | + (STVVGLNA_REG3_RFAGC_CALSTART_FORCED << STVVGLNA_REG3_RFAGC_CALSTART_SHIFT) ); + } else { /* state==STVVGLAN_OFF so disable it as we are not turning it on */ + if (err==ERROR_NONE) err=stvvglna_write_reg(lna_addr,STVVGLNA_REG2, + (STVVGLNA_REG2_PATH_OFF << STVVGLNA_REG2_PATH2OFF_SHIFT) | + (STVVGLNA_REG2_PATH_OFF << STVVGLNA_REG2_PATH1OFF_SHIFT) ); + } + + } + + if (err!=ERROR_NONE) printf("ERROR: LNA init %i\n",input); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +void stvvglna_read_regs(uint8_t addr) { +/* -------------------------------------------------------------------------------------------------- */ +/* support routine for debug */ +/* addr: the i2c address of the LNA to be dumped */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t val; + + printf("LNA 0x%.2x regs:\n",addr); + for(int i=0; i<4; i++) { + stvvglna_read_reg(addr,i,&val); + printf(" 0x%.2x = 0x%.2x\n",i,val); + } +} diff --git a/longmynd/stvvglna.h b/longmynd/stvvglna.h new file mode 100755 index 0000000..5bd7582 --- /dev/null +++ b/longmynd/stvvglna.h @@ -0,0 +1,37 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stvvglna.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STVVGLNA_H +#define STVVGLNA_H + +#include "stvvglna_regs.h" +#include +#include + +#define STVVGLNA_AGC_TIMEOUT 20 +#define STVVGLNA_OFF 0 +#define STVVGLNA_ON 1 + +uint8_t stvvglna_read_agc(uint8_t, uint8_t *, uint8_t*); +uint8_t stvvglna_init(uint8_t, uint8_t, bool*); +void stvvglna_read_regs (uint8_t); + +#endif diff --git a/longmynd/stvvglna_regs.h b/longmynd/stvvglna_regs.h new file mode 100755 index 0000000..c5853c5 --- /dev/null +++ b/longmynd/stvvglna_regs.h @@ -0,0 +1,112 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stvvglna_regs.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STVVGLNA_REGS_H +#define STVVGLNA_REGS_H + +#define STVVGLNA_I2C_ADDR0 0xc8 +#define STVVGLNA_I2C_ADDR1 0xca +#define STVVGLNA_I2C_ADDR2 0xcc +#define STVVGLNA_I2C_ADDR3 0xce + +#define STVVGLNA_REG0 0x00 +#define STVVGLNA_REG0_IDENT_SHIFT 4 +#define STVVGLNA_REG0_IDENT_MASK 0xf0 +#define STVVGLNA_REG0_IDENT_DEFAULT 0x20 +#define STVVGLNA_REG0_AGC_TUPD_SHIFT 3 +#define STVVGLNA_REG0_AGC_TUPD_FAST 0 +#define STVVGLNA_REG0_AGC_TUPD_SLOW 1 +#define STVVGLNA_REG0_AGC_TLOCK_SHIFT 2 +#define STVVGLNA_REG0_AGC_TLOCK_SLOW 0 +#define STVVGLNA_REG0_AGC_TLOCK_FAST 1 +#define STVVGLNA_REG0_RFAGC_HIGH_SHIFT 1 +#define STVVGLNA_REG0_RFAGC_HIGH_NOT_HIGH 0 +#define STVVGLNA_REG0_RFAGC_HIGH_IS_HIGH 1 +#define STVVGLNA_REG0_RFAGC_LOW_SHIFT 0 +#define STVVGLNA_REG0_RFAGC_LOW_NOT_LOW 0 +#define STVVGLNA_REG0_RFAGC_LOW_IS_LOW 1 + +#define STVVGLNA_REG1 0x01 +#define STVVGLNA_REG1_LNAGC_PWD_SHIFT 7 +#define STVVGLNA_REG1_LNAGC_PWD_POWER_ON 0 +#define STVVGLNA_REG1_LNAGC_PWD_POWER_OFF 1 +#define STVVGLNA_REG1_GETOFF_SHIFT 6 +#define STVVGLNA_REG1_GETOFF_ACQUISITION_MODE 0 +#define STVVGLNA_REG1_GETOFF_VGO_4_0 1 +#define STVVGLNA_REG1_GETAGC_SHIFT 5 +#define STVVGLNA_REG1_GETAGC_FORCED 0 +#define STVVGLNA_REG1_GETAGC_START 1 +#define STVVGLNA_REG1_VGO_SHIFT 0 +#define STVVGLNA_REG1_VGO_MASK 0x1f + +#define STVVGLNA_REG2 0x02 +#define STVVGLNA_REG2_PATH2OFF_SHIFT 7 +#define STVVGLNA_REG2_PATH_ACTIVE 0 +#define STVVGLNA_REG2_PATH_OFF 1 +#define STVVGLNA_REG2_RFAGC_PREF_SHIFT 4 +#define STVVGLNA_REG2_RFAGC_PREF_MASK 0x70 +#define STVVGLNA_REG2_RFAGC_PREF_N25DBM 0x0 +#define STVVGLNA_REG2_RFAGC_PREF_N24DBM 0x1 +#define STVVGLNA_REG2_RFAGC_PREF_N23DBM 0x2 +#define STVVGLNA_REG2_RFAGC_PREF_N22DBM 0x3 +#define STVVGLNA_REG2_RFAGC_PREF_N21DBM 0x4 +#define STVVGLNA_REG2_RFAGC_PREF_N20DBM 0x5 +#define STVVGLNA_REG2_RFAGC_PREF_N19DBM 0x6 +#define STVVGLNA_REG2_RFAGC_PREF_N18DBM 0x7 +#define STVVGLNA_REG2_PATH1OFF_SHIFT 3 +#define STVVGLNA_REG2_RFAGC_MODE_SHIFT 0 +#define STVVGLNA_REG2_RFAGC_MODE_MASK 0x07 +#define STVVGLNA_REG2_RFAGC_MODE_AUTO_TRACK 0x0 +#define STVVGLNA_REG2_RFAGC_MODE_AUTO_REQUEST 0x1 +#define STVVGLNA_REG2_RFAGC_MODE_MINIMAL_GAIN_INTERNAL 0x2 +#define STVVGLNA_REG2_RFAGC_MODE_MAXIMAL_GAIN_INTERNAL 0x3 +#define STVVGLNA_REG2_RFAGC_MODE_EXTERNAL_AGC_EXTERNAL 0x4 +#define STVVGLNA_REG2_RFAGC_MODE_AGC_LOOP_EXTERNAL 0x5 +#define STVVGLNA_REG2_RFAGC_MODE_MINIMAL_AGC_EXTERNAL 0x6 +#define STVVGLNA_REG2_RFAGC_MODE_MAXIMAL_AGC_EXTERNAL 0x7 + + +#define STVVGLNA_REG3 0x03 +#define STVVGLNA_REG3_LCAL_SHIFT 4 +#define STVVGLNA_REG3_LCAL_MASK 0x70 +#define STVVGLNA_REG3_LCAL_68KHZ 0x0 +#define STVVGLNA_REG3_LCAL_34KHZ 0x1 +#define STVVGLNA_REG3_LCAL_17KHZ 0x2 +#define STVVGLNA_REG3_LCAL_8_5KHZ 0x3 +#define STVVGLNA_REG3_LCAL_4_2KHZ 0x4 +#define STVVGLNA_REG3_LCAL_2_1KHZ 0x5 +#define STVVGLNA_REG3_LCAL_1_0KHZ 0x6 +#define STVVGLNA_REG3_LCAL_0_5KHZ 0x7 +#define STVVGLNA_REG3_RFAGC_UPDATE_SHIFT 3 +#define STVVGLNA_REG3_RFAGC_UPDATE_FORCED 0 +#define STVVGLNA_REG3_RFAGC_UPDATE_START 1 +#define STVVGLNA_REG3_RFAGC_CALSTART_SHIFT 2 +#define STVVGLNA_REG3_RFAGC_CALSTART_FORCED 0 +#define STVVGLNA_REG3_RFAGC_CALSTART_START 1 +#define STVVGLNA_REG3_SWLNAGAIN_SHIFT 0 +#define STVVGLNA_REG3_SWLNAGAIN_MASK 0x03 +#define STVVGLNA_REG3_SWLNAGAIN_LOWEST 0x0 +#define STVVGLNA_REG3_SWLNAGAIN_INTERMEDIATE_LOW 0x1 +#define STVVGLNA_REG3_SWLNAGAIN_INTERMEDIATE_HIGH 0x2 +#define STVVGLNA_REG3_SWLNAGAIN_HIGHEST 0x3 + +#endif + diff --git a/longmynd/stvvglna_utils.c b/longmynd/stvvglna_utils.c new file mode 100755 index 0000000..51b9ad3 --- /dev/null +++ b/longmynd/stvvglna_utils.c @@ -0,0 +1,50 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stvvglna_utils.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - abstracting out the lna register read and write routines */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include "nim.h" +#include "stvvglna_regs.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stvvglna_read_reg(uint8_t lna_addr, uint8_t reg, uint8_t *val) { +/* -------------------------------------------------------------------------------------------------- */ +/* passes the register read through to the underlying register reading routines */ +/* -------------------------------------------------------------------------------------------------- */ + return nim_read_lna(lna_addr, reg, val); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t stvvglna_write_reg(uint8_t lna_addr, uint8_t reg, uint8_t val) { +/* -------------------------------------------------------------------------------------------------- */ +/* passes the register write through to the underlying register writing routines */ +/* -------------------------------------------------------------------------------------------------- */ + return nim_write_lna(lna_addr, reg, val); +} diff --git a/longmynd/stvvglna_utils.h b/longmynd/stvvglna_utils.h new file mode 100755 index 0000000..843e836 --- /dev/null +++ b/longmynd/stvvglna_utils.h @@ -0,0 +1,30 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: stvvglna_utils.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef STVVGLNA_UTILS_H +#define STVVGLNA_UTILS_H + +#include + +uint8_t stvvglna_read_reg(uint8_t, uint8_t, uint8_t *); +uint8_t stvvglna_write_reg(uint8_t, uint8_t, uint8_t); + +#endif diff --git a/longmynd/ts.c b/longmynd/ts.c new file mode 100755 index 0000000..5b43f2b --- /dev/null +++ b/longmynd/ts.c @@ -0,0 +1,548 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: ts.c */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#include + +#include "main.h" +#include "errors.h" +#include "udp.h" +#include "fifo.h" +#include "ftdi.h" +#include "ftdi_usb.h" +#include "ts.h" + +#define TS_FRAME_SIZE 20*512 // 512 is base USB FTDI frame + +#define MAX_PID 8192 + +#define TS_PACKET_SIZE 188 +#define TS_HEADER_SYNC 0x47 + +#define TS_PID_PAT 0x0000 +#define TS_PID_SDT 0x0011 +#define TS_PID_NULL 0x1FFF + +#define TS_TABLE_PAT 0x00 +#define TS_TABLE_PMT 0x02 +#define TS_TABLE_SDT 0x42 + +uint8_t *ts_buffer_ptr = NULL; +bool ts_buffer_waiting; + +typedef struct { + uint8_t *buffer; + uint32_t length; + bool waiting; + pthread_mutex_t mutex; + pthread_cond_t signal; +} longmynd_ts_parse_buffer_t; + +static longmynd_ts_parse_buffer_t longmynd_ts_parse_buffer = { + .buffer = NULL, + .length = 0, + .waiting = false, + .mutex = PTHREAD_MUTEX_INITIALIZER, + .signal = PTHREAD_COND_INITIALIZER +}; + + +/* -------------------------------------------------------------------------------------------------- */ +void *loop_ts(void *arg) { +/* -------------------------------------------------------------------------------------------------- */ +/* Runs a loop to query the Minitiouner TS endpoint, and output it to the requested interface */ +/* -------------------------------------------------------------------------------------------------- */ + thread_vars_t *thread_vars=(thread_vars_t *)arg; + uint8_t *err = &thread_vars->thread_err; + longmynd_config_t *config = thread_vars->config; + + uint8_t *buffer; + uint16_t len=0; + uint8_t (*ts_write)(uint8_t*,uint32_t); + + *err=ERROR_NONE; + + buffer = malloc(TS_FRAME_SIZE); + if(buffer == NULL) + { + *err=ERROR_TS_BUFFER_MALLOC; + } + + if(thread_vars->config->ts_use_ip) { + *err=udp_ts_init(thread_vars->config->ts_ip_addr, thread_vars->config->ts_ip_port); + ts_write = udp_ts_write; + } else { + *err=fifo_ts_init(thread_vars->config->ts_fifo_path); + ts_write = fifo_ts_write; + } + + while(*err == ERROR_NONE && *thread_vars->main_err_ptr == ERROR_NONE){ + /* If reset flag is active (eg. just started or changed station), then clear out the ts buffer */ + if(config->ts_reset) { + do { + if (*err==ERROR_NONE) *err=ftdi_usb_ts_read(buffer, &len, TS_FRAME_SIZE); + } while (*err==ERROR_NONE && len>2); + config->ts_reset = false; + } + + *err=ftdi_usb_ts_read(buffer, &len, TS_FRAME_SIZE); + + /* if there is ts data then we send it out to the required output. But, we have to lose the first 2 bytes */ + /* that are the usual FTDI 2 byte response and not part of the TS */ + if ((*err==ERROR_NONE) && (len>2)) { + ts_write(&buffer[2],len-2); + + if(longmynd_ts_parse_buffer.waiting && longmynd_ts_parse_buffer.buffer != NULL) + { + pthread_mutex_lock(&longmynd_ts_parse_buffer.mutex); + + memcpy(longmynd_ts_parse_buffer.buffer, &buffer[2],len-2); + longmynd_ts_parse_buffer.length = len-2; + pthread_cond_signal(&longmynd_ts_parse_buffer.signal); + longmynd_ts_parse_buffer.waiting = false; + + pthread_mutex_unlock(&longmynd_ts_parse_buffer.mutex); + } + } + } + + free(buffer); + + return NULL; +} + +static const uint32_t crc32_mpeg2_table[256]; + +static uint32_t crc32_mpeg2(uint8_t *data_ptr, size_t length) +{ + uint32_t crc; + + crc = 0xFFFFFFFF; + while (length--) + { + crc = (crc << 8) ^ crc32_mpeg2_table[((crc >> 24) ^ *data_ptr++) & 0xFF]; + } + return crc; +} + +/* -------------------------------------------------------------------------------------------------- */ +void *loop_ts_parse(void *arg) { +/* -------------------------------------------------------------------------------------------------- */ +/* Runs a loop to parse the MPEG-TS */ +/* -------------------------------------------------------------------------------------------------- */ + thread_vars_t *thread_vars=(thread_vars_t *)arg; + uint8_t *err = &thread_vars->thread_err; + *err=ERROR_NONE; + //longmynd_config_t *config = thread_vars->config; + longmynd_status_t *status = thread_vars->status; + + /* TS Processing Vars */ + uint8_t *ts_buffer; + uint32_t ts_buffer_length; + uint8_t *ts_packet_ptr; + uint32_t ts_buffer_length_remaining; + + /* TS Stats Vars */ + uint32_t ts_packet_total_count; + uint32_t ts_packet_null_count; + + /* Generic TS */ + uint32_t ts_pid; + uint32_t ts_adaption_field_flag; + uint32_t ts_adaption_field_length; + uint32_t ts_payload_content_offset; + uint32_t ts_payload_content_length; + uint8_t *ts_payload_ptr; + uint32_t ts_payload_section_length; + + uint32_t ts_payload_crc; + uint32_t ts_payload_crc_c; + + /* PAT */ + //uint32_t ts_pat_programs_count; + //uint32_t ts_pat_program_id; + //uint32_t ts_pat_program_pid; + + /* PMT */ + //uint32_t ts_pmt_pcr_pid; + uint32_t ts_pmt_program_info_length; + uint8_t *ts_pmt_es_ptr; + uint32_t ts_pmt_es_type; + uint32_t ts_pmt_es_pid; + uint32_t ts_pmt_es_info_length; + uint32_t ts_pmt_offset; + uint32_t ts_pmt_index; + + /* SDT */ + uint8_t *ts_packet_sdt_table_ptr; + //uint32_t service_id; + uint8_t *ts_packet_sdt_descriptor_ptr; + //uint32_t descriptor_tag; + //uint32_t descriptor_length; + uint32_t service_provider_name_length; + uint32_t service_name_length; + + ts_buffer = malloc(TS_FRAME_SIZE); + if(ts_buffer == NULL) + { + *err=ERROR_TS_BUFFER_MALLOC; + } + + longmynd_ts_parse_buffer.buffer = ts_buffer; + + struct timespec ts; + + /* Set pthread timer on .signal to use monotonic clock */ + pthread_condattr_t attr; + pthread_condattr_init(&attr); + pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + pthread_cond_init (&longmynd_ts_parse_buffer.signal, &attr); + pthread_condattr_destroy(&attr); + + while(*err == ERROR_NONE && *thread_vars->main_err_ptr == ERROR_NONE) + { + //ts_pat_program_pid = 0x00; // Updated by PAT parse + + /* Reset Stats */ + ts_packet_total_count = 0; + ts_packet_null_count = 0; + + pthread_mutex_lock(&longmynd_ts_parse_buffer.mutex); + longmynd_ts_parse_buffer.waiting = true; + + while(longmynd_ts_parse_buffer.waiting && *thread_vars->main_err_ptr == ERROR_NONE) + { + /* Set timer for 100ms */ + clock_gettime(CLOCK_MONOTONIC, &ts); + ts.tv_nsec += 100 * 1000000; + + pthread_cond_timedwait(&longmynd_ts_parse_buffer.signal, &longmynd_ts_parse_buffer.mutex, &ts); + } + + pthread_mutex_unlock(&longmynd_ts_parse_buffer.mutex); + + ts_packet_ptr = &ts_buffer[0]; + ts_buffer_length = longmynd_ts_parse_buffer.length; + ts_buffer_length_remaining = ts_buffer_length; + + while(ts_packet_ptr != NULL) + { + if(ts_packet_ptr[0] != TS_HEADER_SYNC) + { + /* Align input to the TS sync byte */ + ts_buffer_length_remaining = ts_buffer_length - (&ts_packet_ptr[0] - &ts_buffer[0]); + + if(ts_buffer_length_remaining <= TS_PACKET_SIZE) + { + /* Nothing more in buffer, force exit */ + ts_packet_ptr = NULL; + continue; + } + + ts_packet_ptr = memchr(ts_packet_ptr, TS_HEADER_SYNC, ts_buffer_length_remaining - TS_PACKET_SIZE); + if(ts_packet_ptr == NULL) + { + continue; + } + } + + ts_pid = (uint32_t)((ts_packet_ptr[1] & 0x1F) << 8) | (uint32_t)ts_packet_ptr[2]; + + ts_packet_total_count++; + + ts_payload_content_offset = 4; + + ts_adaption_field_flag = (uint32_t)(ts_packet_ptr[3] & 0x20) >> 5; + if(ts_adaption_field_flag > 0) + { + ts_adaption_field_length = ts_packet_ptr[4]; + + if(ts_adaption_field_length == 0 + || ts_adaption_field_length > 183) + { + /* Length invalid, packet is likely invalid */ + ts_packet_ptr++; + continue; + } + + ts_payload_content_offset += ts_adaption_field_length; + } + + /* NULL/padding packets */ + if(ts_pid == TS_PID_NULL) + { + ts_packet_null_count++; + + ts_packet_ptr++; + continue; + } + +#if 0 + if(ts_pid == TS_PID_PAT) + { + ts_payload_ptr = (uint8_t *)&ts_packet_ptr[ts_payload_content_offset + 1 + ts_packet_ptr[ts_payload_content_offset]]; + + if(ts_payload_ptr[0] != TS_TABLE_PAT) + { + ts_packet_ptr++; + continue; + } + + ts_payload_section_length = ((uint32_t)(ts_payload_ptr[1] & 0x0F) << 8) | (uint32_t)ts_payload_ptr[2]; + + if(ts_payload_section_length < 1) + { + ts_packet_ptr++; + continue; + } + + ts_payload_crc = ((uint32_t)ts_payload_ptr[ts_payload_section_length-1] << 24) | ((uint32_t)ts_payload_ptr[ts_payload_section_length] << 16) + | ((uint32_t)ts_payload_ptr[ts_payload_section_length+1] << 8) | (uint32_t)ts_payload_ptr[ts_payload_section_length+2]; + + ts_payload_crc_c = crc32_mpeg2(ts_payload_ptr, (ts_payload_section_length-1)); + + if(ts_payload_crc != ts_payload_crc_c) + { + /* CRC Fail */ + ts_packet_ptr++; + continue; + } + + ts_pat_programs_count = (ts_payload_section_length - 9) / 4; + + /* For now, only read the first programme */ + /* TODO: Read all programs here to enable PID parsing of PMT */ + if(ts_pat_programs_count > 0) + { + //ts_pat_program_id = ((uint32_t)ts_payload_ptr[8] << 8) | (uint32_t)ts_payload_ptr[9]; + ts_pat_program_pid = ((uint32_t)(ts_payload_ptr[10] & 0x1F) << 8) | (uint32_t)ts_payload_ptr[11]; + //printf(" - PAT Program PID: %"PRIu32"\n", ts_pat_program_pid); + } + + ts_packet_ptr++; + continue; + } +#endif + if(ts_pid == TS_PID_SDT) + { + ts_payload_content_length = 0; + ts_payload_ptr = (uint8_t *)&ts_packet_ptr[ts_payload_content_offset + 1 + ts_packet_ptr[ts_payload_content_offset]]; + + if(ts_payload_ptr[0] != TS_TABLE_SDT) + { + ts_packet_ptr++; + continue; + } + + ts_payload_section_length = ((uint32_t)(ts_payload_ptr[1] & 0x0F) << 8) | (uint32_t)ts_payload_ptr[2]; + //printf(" - SDT Section Length: %"PRIu32"\n", ts_payload_section_length); + + if(ts_payload_section_length < 1) + { + ts_packet_ptr++; + continue; + } + + ts_payload_crc = ((uint32_t)ts_payload_ptr[ts_payload_section_length-1] << 24) | ((uint32_t)ts_payload_ptr[ts_payload_section_length] << 16) + | ((uint32_t)ts_payload_ptr[ts_payload_section_length+1] << 8) | (uint32_t)ts_payload_ptr[ts_payload_section_length+2]; + + ts_payload_crc_c = crc32_mpeg2(ts_payload_ptr, (ts_payload_section_length-1)); + + if(ts_payload_crc != ts_payload_crc_c) + { + /* CRC Fail */ + ts_packet_ptr++; + continue; + } + + /* Per service */ + ts_packet_sdt_table_ptr = &ts_payload_ptr[11]; + ts_payload_content_length += 11; + + //service_id = ((uint32_t)ts_packet_sdt_table_ptr[0] << 8) | (uint32_t)ts_packet_sdt_table_ptr[1]; + //printf(" - - Service ID: %"PRIu32"\n", service_id); + + /* Per descriptor */ + ts_packet_sdt_descriptor_ptr = &ts_packet_sdt_table_ptr[5]; + ts_payload_content_length += 5; + + //descriptor_tag = (uint32_t)ts_packet_sdt_descriptor_ptr[0]; + //printf(" - - - Descriptor Tag: %"PRIu32"\n", descriptor_tag); + + //descriptor_length = (uint32_t)ts_packet_sdt_descriptor_ptr[1]; + //printf(" - - - Descriptor Length: %"PRIu32"\n", descriptor_length); + + //uint32_t service_type = (uint32_t)ts_packet_sdt_descriptor_ptr[2]; + //printf(" - - - Service Type %"PRIu32"\n", service_type); + + ts_payload_content_length += 3; + + service_provider_name_length = (uint32_t)ts_packet_sdt_descriptor_ptr[3]; + //printf(" - - - Service Provider Name Length %"PRIu32"\n", service_provider_name_length); + //printf(" - - - Service Provider Name: %.*s\n", service_provider_name_length, &ts_packet_sdt_descriptor_ptr[4]); + + service_name_length = (uint32_t)ts_packet_sdt_descriptor_ptr[3+1+service_provider_name_length]; + //printf(" - - - Service Name Length %"PRIu32"\n", service_name_length); + //printf(" - - - Service Name: %.*s\n", service_name_length, &ts_packet_sdt_descriptor_ptr[4+1+service_provider_name_length]); + + pthread_mutex_lock(&status->mutex); + + memcpy(status->service_name, &ts_packet_sdt_descriptor_ptr[4+1+service_provider_name_length], service_name_length); + status->service_name[service_name_length] = '\0'; + + memcpy(status->service_provider_name, &ts_packet_sdt_descriptor_ptr[4], service_provider_name_length); + status->service_provider_name[service_provider_name_length] = '\0'; + + pthread_mutex_unlock(&status->mutex); + + ts_payload_content_length += 1; + ts_payload_content_length += service_provider_name_length; + ts_payload_content_length += 1; + ts_payload_content_length += service_name_length; + + ts_packet_ptr++; + continue; + } + else // if(ts_pat_program_pid !=0x00 && ts_pid == ts_pat_program_pid) /* PMT, once found in PAT */ + { + ts_payload_ptr = (uint8_t *)&ts_packet_ptr[ts_payload_content_offset + 1 + ts_packet_ptr[ts_payload_content_offset]]; + + /* We're not filtering by PID here yet, so we rely on filtering by table ID */ + if(ts_payload_ptr[0] != TS_TABLE_PMT) + { + ts_packet_ptr++; + continue; + } + + ts_payload_section_length = ((uint32_t)(ts_payload_ptr[1] & 0x0F) << 8) | (uint32_t)ts_payload_ptr[2]; + + if(ts_payload_section_length < 1) + { + ts_packet_ptr++; + continue; + } + + ts_payload_crc = ((uint32_t)ts_payload_ptr[ts_payload_section_length-1] << 24) | ((uint32_t)ts_payload_ptr[ts_payload_section_length] << 16) + | ((uint32_t)ts_payload_ptr[ts_payload_section_length+1] << 8) | (uint32_t)ts_payload_ptr[ts_payload_section_length+2]; + + ts_payload_crc_c = crc32_mpeg2(ts_payload_ptr, (ts_payload_section_length-1)); + + if(ts_payload_crc != ts_payload_crc_c) + { + /* CRC Fail */ + ts_packet_ptr++; + continue; + } + + //ts_pmt_pcr_pid = ((uint32_t)(ts_payload_ptr[8] & 0x1F) << 8) | (uint32_t)ts_payload_ptr[9]; + //printf(" - PMT: PCR PID: %"PRIu32"\n", ts_pmt_pcr_pid); + + ts_pmt_program_info_length = ((uint32_t)(ts_payload_ptr[10] & 0x0F) << 8) | (uint32_t)ts_payload_ptr[11]; + //if(ts_pmt_program_info_length > 0) + //{ + // printf(" - PMT Program Info: %.*s\n", ts_pmt_program_info_length, &ts_payload_ptr[12]); + //} + + ts_pmt_offset = 0; + ts_pmt_index = 0; + while((12+1+ts_pmt_program_info_length+ts_pmt_offset) < ts_payload_section_length) + { + ts_pmt_es_ptr = &ts_payload_ptr[12 + ts_pmt_program_info_length + ts_pmt_offset]; + + /* For each elementary PID */ + ts_pmt_es_type = (uint32_t)ts_pmt_es_ptr[0]; + + ts_pmt_es_pid = ((uint32_t)(ts_pmt_es_ptr[1] & 0x1F) << 8) | (uint32_t)ts_pmt_es_ptr[2]; + + ts_pmt_es_info_length = ((uint32_t)(ts_pmt_es_ptr[3] & 0x0F) << 8) | (uint32_t)ts_pmt_es_ptr[4]; + //if(ts_pmt_es_info_length > 0) + //{ + //printf(" - - PMT ES Info: %.*s\n", ts_pmt_es_info_length, &ts_pmt_es_ptr[5]); + //} + + pthread_mutex_lock(&status->mutex); + + status->ts_elementary_streams[ts_pmt_index][0] = ts_pmt_es_pid; + status->ts_elementary_streams[ts_pmt_index][1] = ts_pmt_es_type; + + pthread_mutex_unlock(&status->mutex); + + ts_pmt_offset += (5 + ts_pmt_es_info_length); + ts_pmt_index++; + } + + ts_packet_ptr++; + continue; + } + + ts_packet_ptr++; + } + pthread_mutex_lock(&status->mutex); + + if(ts_packet_total_count > 0) + { + status->ts_null_percentage = (100 * ts_packet_null_count) / ts_packet_total_count; + } + + /* Trigger pthread signal */ + pthread_cond_signal(&status->signal); + + pthread_mutex_unlock(&status->mutex); + } + + free(ts_buffer); + + return NULL; +} + +static const uint32_t crc32_mpeg2_table[256] = { + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, + 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, + 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, + 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, + 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, + 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, + 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, + 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, + 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, + 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, + 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, + 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, + 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, + 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, + 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, + 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, + 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, + 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, + 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, + 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, + 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, + 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 +}; \ No newline at end of file diff --git a/longmynd/ts.h b/longmynd/ts.h new file mode 100755 index 0000000..ea46704 --- /dev/null +++ b/longmynd/ts.h @@ -0,0 +1,29 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: ts.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef TS_H +#define TS_H + +void *loop_ts(void *arg); +void *loop_ts_parse(void *arg); + +#endif + diff --git a/longmynd/udp.c b/longmynd/udp.c new file mode 100755 index 0000000..df241bc --- /dev/null +++ b/longmynd/udp.c @@ -0,0 +1,198 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: udp.c */ +/* - an implementation of the Serit NIM controlling software for the MiniTiouner Hardware */ +/* - linux udp handler to send the TS data to a remote display */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- INCLUDES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "errors.h" +#include "udp.h" + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- GLOBALS ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +struct sockaddr_in servaddr_status; +struct sockaddr_in servaddr_ts; +int sockfd_status; +int sockfd_ts; + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- DEFINES ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +/* ----------------- ROUTINES ----------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------------------------------- */ + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t udp_ts_write(uint8_t *buffer, uint32_t len) { +/* -------------------------------------------------------------------------------------------------- */ +/* takes a buffer and writes out the contents to udp socket */ +/* *buffer: the buffer that contains the data to be sent */ +/* len: the length (number of bytes) of data to be sent */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int32_t remaining_len; /* note it is signed so can go negative */ + uint32_t write_size; + + remaining_len=len; + /* we need to loop round sending 510 byte chunks so that we can skip the 2 extra bytes put in by */ + /* the FTDI chip every 512 bytes of USB message */ + while (remaining_len>0) { + if (remaining_len>510) { + /* calculate where to start in the buffer and how many bytes to send */ + write_size=510; + sendto(sockfd_ts, &buffer[len-remaining_len], write_size, 0, + (const struct sockaddr *) &servaddr_ts, sizeof(struct sockaddr)); + /* note we skip over the 2 bytes inserted by the FTDI */ + remaining_len-=512; + } else { + write_size=remaining_len; + sendto(sockfd_ts, &buffer[len-remaining_len], write_size, 0, + (const struct sockaddr *) &servaddr_ts, sizeof(struct sockaddr)); + remaining_len-=write_size; /* should be 0 if all went well */ + } + } + + /* if someting went bad with our calcs, remaining will not be 0 */ + if ((err==ERROR_NONE) && (remaining_len!=0)) { + printf("ERROR: UDP socket write incorrect number of bytes\n"); + err=ERROR_UDP_WRITE; + } + + if (err!=ERROR_NONE) printf("ERROR: UDP socket ts write\n"); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t udp_status_write(uint8_t message, uint32_t data) { +/* -------------------------------------------------------------------------------------------------- */ +/* takes a buffer and writes out the contents to udp socket */ +/* *buffer: the buffer that contains the data to be sent */ +/* len: the length (number of bytes) of data to be sent */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + char status_message[30]; + + sprintf(status_message, "$%i,%i\n", message, data); + + sendto(sockfd_status, status_message, strlen(status_message), 0, (const struct sockaddr *)&servaddr_status, sizeof(struct sockaddr)); + + return err; +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t udp_status_string_write(uint8_t message, char *data) { +/* -------------------------------------------------------------------------------------------------- */ +/* takes a buffer and writes out the contents to udp socket */ +/* *buffer: the buffer that contains the data to be sent */ +/* len: the length (number of bytes) of data to be sent */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + char status_message[5+128]; + + sprintf(status_message, "$%i,%s\n", message, data); + + sendto(sockfd_status, status_message, strlen(status_message), 0, (const struct sockaddr *)&servaddr_status, sizeof(struct sockaddr)); + + return err; +} + + +/* -------------------------------------------------------------------------------------------------- */ +static uint8_t udp_init(struct sockaddr_in *servaddr_ptr, int *sockfd_ptr, char *udp_ip, int udp_port) { +/* -------------------------------------------------------------------------------------------------- */ +/* initialises the udp socket */ +/* udp_ip: the ip address (as a string) of the socket to open */ +/* udp_port: the UDP port to be opened at the given IP address */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + + printf("Flow: UDP Init\n"); + + /* Creat the socket for IPv4 and UDP */ + if ((*sockfd_ptr = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) { + printf("ERROR: socket creation failed\n"); + err=ERROR_UDP_SOCKET_OPEN; + } else { + /* setup all the destination fields */ + memset(servaddr_ptr, 0, sizeof(struct sockaddr_in)); + servaddr_ptr->sin_family = AF_INET; + servaddr_ptr->sin_port = htons(udp_port); + servaddr_ptr->sin_addr.s_addr = inet_addr(udp_ip); // INADDR_ANY; + } + if (err!=ERROR_NONE) printf("ERROR: UDP init\n"); + + return err; +} + +uint8_t udp_status_init(char *udp_ip, int udp_port) { + return udp_init(&servaddr_status, &sockfd_status, udp_ip, udp_port); +} + +uint8_t udp_ts_init(char *udp_ip, int udp_port) { + return udp_init(&servaddr_ts, &sockfd_ts, udp_ip, udp_port); +} + +/* -------------------------------------------------------------------------------------------------- */ +uint8_t udp_close(void) { +/* -------------------------------------------------------------------------------------------------- */ +/* closes the udp socket */ +/* return: error code */ +/* -------------------------------------------------------------------------------------------------- */ + uint8_t err=ERROR_NONE; + int ret; + + printf("Flow: UDP Close\n"); + + ret=close(sockfd_ts); + if (ret!=0) { + err=ERROR_UDP_CLOSE; + printf("ERROR: TS UDP close\n"); + } + ret=close(sockfd_status); + if (ret!=0) { + err=ERROR_UDP_CLOSE; + printf("ERROR: Status UDP close\n"); + } + + return err; +} + diff --git a/longmynd/udp.h b/longmynd/udp.h new file mode 100755 index 0000000..3948807 --- /dev/null +++ b/longmynd/udp.h @@ -0,0 +1,37 @@ +/* -------------------------------------------------------------------------------------------------- */ +/* The LongMynd receiver: udp.h */ +/* Copyright 2019 Heather Lomond */ +/* -------------------------------------------------------------------------------------------------- */ +/* + This file is part of longmynd. + + Longmynd is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Longmynd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with longmynd. If not, see . +*/ + +#ifndef UDP_H +#define UDP_H + +#include + +uint8_t udp_status_init(char *udp_ip, int udp_port); +uint8_t udp_ts_init(char *udp_ip, int udp_port); + +uint8_t udp_status_write(uint8_t message, uint32_t data); +uint8_t udp_status_string_write(uint8_t message, char *data); +uint8_t udp_ts_write(uint8_t *buffer, uint32_t len); + +uint8_t udp_close(void); + +#endif + diff --git a/main.py b/main.py new file mode 100755 index 0000000..21f0694 --- /dev/null +++ b/main.py @@ -0,0 +1,359 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- +# (c) Xavier 2022 + +# pour débugger… en ligne de commande !-) +# import pdb; pdb.set_trace() + +# DATV + +# for Python3 +from tkinter import * +import tkinter.messagebox +import tkinter.filedialog +import tkinter as tk +import tkinter.ttk as ttk +import os +import time +import json +import shutil +import vlc +import sys +import usb.core +import usb.util + +from PIL import Image, ImageTk +from ffpyplayer.player import MediaPlayer + +import threading +import subprocess +import socket + +import cv2 + +try: + import configparser as configparser +except ImportError: + import ConfigParser as configparser + +# Var +fileconfig = "config.json" +fileflux = "flux.datv" +DEVS = ['/dev/ttyUSB0', '/dev/ttyUSB1', '/dev/ttyUSB2'] +F1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] +F2 = ['0', '250', '500', '750'] +SR = ['66', '125', '250', '333', '500', '1000', '1500'] + + +class DATV(tk.Frame): + + def __init__(self, root): + super().__init__(root) + + self.champs = { + 'IP': tk.StringVar(), + 'PORT': tk.StringVar(), + 'DEV': tk.StringVar(), + 'FREQ': tk.StringVar(), + 'F1': tk.StringVar(), + 'F2': tk.StringVar(), + 'SR': tk.StringVar(), + } + self.root = root + self._create_bar() + self.pack() + self.RunVIDEO() + + def lireparam(self): + with open(fileconfig) as mon_fichier: + config = json.load(mon_fichier) + return config + + def ecrireparam(self): + self.StopStream() + jsonString = '{' + cpt = 0 + for v, k in self.champs.items(): + jsonString += '"' + v + '": "' + k.get() + '"' + if cpt < 6: + jsonString += ",\n" + cpt = cpt + 1 + jsonString += '}' + file = open(fileconfig, "w") + file.write(jsonString) + file.close() + self.Clean() + self.RunVIDEO() + + @staticmethod + def firstparam(fileconfig): + jsonString = '{"IP": "127.0.0.1", "PORT": "1234", "DEV": "/dev/ttyUSB0", "FREQ": "10491500", "SR": "1500"}' + file = open(fileconfig, "w") + file.write(jsonString) + file.close() + + def StopStream(self): + #self.Clean() + #self.photo = PhotoImage(file='img/btnjaune.gif') + #espace_image = Canvas(self, width=120, height=120, bg='red') + #espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + #espace_image.create_image(60, 60, image=self.photo) + os.system('bash longmynd/stopsrv.sh') + + + + def RunStream(self): + self.Clean() + dev = usb.core.find(idVendor=0x0403, idProduct=0x6010) + if dev is not None: + data = self.lireparam() + freq = data['FREQ'] + data['F1'] + data['F2'] + print('IP=' + data['IP'] + ':' + data['PORT'] + ' freq=' + freq + ' SR=' + data['SR']) + os.system('bash ./longmynd/gosrv.sh ' + data['IP'] + ' ' + data['PORT'] + ' ' + freq + ' ' + data['SR'] + '> flux.datv') + time.sleep(2) + + return + else: + self.photo = PhotoImage(file='img/btnrouge.gif') + espace_image = Canvas(self, width=120, height=120, bg='red') + espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + espace_image.create_image(60, 60, image=self.photo) + return + + def RunVIDEO(self): + + #Stream + self.RunStream() + + # Créer un Canvas pour afficher la vidéo + self.Canvas_video = tk.Canvas(self, bg='black', width=800, height=600) + self.Canvas_video.grid(row=0, column=0, padx=1, pady=1) + #self.photo = PhotoImage(file='nosignal.png') + #self.Canvas_video.create_image(450, 300, image=self.photo) + # Afficher la vidéo UDP + self.RunVLC() + + + def RunVLC(self): + # Créer une instance VLC pour la vidéo + data = self.lireparam() + + # Assurez-vous de gérer les erreurs de création de la fenêtre + try: + self.Instance = vlc.Instance('--no-xlib') + self.player = self.Instance.media_player_new() + + m = self.Instance.media_new(str('udp://@'+data['IP']+':'+data['PORT'])) # Path, unicode + self.player.set_media(m) + + # set the window id where to render VLC's video output + h = self.Canvas_video.winfo_id() # .winfo_visualid()? + self.player.set_xwindow(h) # fails on Windows + self.player.play() # == -1 + + + except Exception as e: + print(f"Erreur de création de la sortie vidéo: {e}") + tk.messagebox.showerror("Erreur VLC", f"Erreur de création de la sortie vidéo: {e}") + + def TestBeacon(self): + self.Clean + self.StopStream() + dev = usb.core.find(idVendor=0x0403, idProduct=0x6010) + if dev is not None: + self.photo = PhotoImage(file='img/btnvert.gif') + espace_image = Canvas(self, width=120, height=120, bg='green') + espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + espace_image.create_image(60, 60, image=self.photo) + data = self.lireparam() + freq = "10491500" + symb = "1500" + os.system('bash ./longmynd/gosrv.sh ' + data['IP'] + ' ' + data['PORT'] + ' ' + freq + ' ' + symb + '> flux.datv') + time.sleep(5) + + self.RunVIDEO() + return + else: + self.photo = PhotoImage(file='img/btnrouge.gif') + espace_image = Canvas(self, width=120, height=120, bg='red') + espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + espace_image.create_image(60, 60, image=self.photo) + return + + def Testconnexion(self): + self.Clean() + connected = False + dev = usb.core.find(idVendor=0x0403, idProduct=0x6010) + if dev is not None: + connected = True + if connected: + self.photo = PhotoImage(file='img/btnvert.gif') + espace_image = Canvas(self, width=120, height=120, bg='green') + espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + espace_image.create_image(60, 60, image=self.photo) + else: + self.photo = PhotoImage(file='img/btnrouge.gif') + espace_image = Canvas(self, width=120, height=120, bg='red') + espace_image.grid(row=3, columnspan=2, column=0, padx=10, pady=10) + espace_image.create_image(60, 60, image=self.photo) + + def Apropos(self): + tk.messagebox.showinfo("A propos", "Reception DATV via Linux...\n Dev F4IYT Xavier\n") + + def Version(self): + tk.messagebox.showinfo("Version", "DATVLin \n(C) 2023 F4IYT Xavier\n2.00") + + def Clean(self): + for c in self.winfo_children(): + c.destroy() + self._create_bar() + + def _create_bar(self): + + logo = PhotoImage(file='img/datv_ico.png') + + menubar = Menu(self) + + self.icon = PhotoImage(file='./img/datv_ico.png') + menubar.add_cascade(label="Command", image=self.icon) + menufichier = Menu(menubar, tearoff=0) + menufichier.add_command(label="Ouvrir memoire", command=app.quit) + menufichier.add_command(label="Enregistrer memoire", command=app.quit) + menufichier.add_separator() + menufichier.add_command(label="Config", command=self._create_config) + menufichier.add_separator() + menufichier.add_command(label="Nettoyer Frame", command=self.Clean) + menufichier.add_command(label="Quitter", command=app.quit) + menubar.add_cascade(label="Fichier", menu=menufichier) + menudatv = Menu(menubar, tearoff=0) + menudatv.add_command(label="Test Connection", command=self.Testconnexion) + menudatv.add_command(label="Test Beacon", command=self.TestBeacon) + menudatv.add_command(label="Run Srv Stream", command=self.RunStream) + menudatv.add_command(label="Stop Srv Stream", command=self.StopStream) + menudatv.add_command(label="Config", command=self._create_config) + + menudatv.add_separator() + menudatv.add_command(label="Run Video Stream", command=self.RunVIDEO) + menudatv.add_command(label="Status DATV Rx", command=run_troisieme_program) + menudatv.add_separator() + menubar.add_cascade(label="DATV", menu=menudatv) + menuaide = Menu(menubar, tearoff=0) + menuaide.add_command(label="A propos", command=self.Apropos) + menuaide.add_command(label="Version", command=self.Version) + menubar.add_cascade(label="Aide", menu=menuaide) + + app.config(menu=menubar) + + def _create_config(self): + self.Clean() + self.champs = { + 'IP': tk.StringVar(), + 'PORT': tk.StringVar(), + 'DEV': tk.StringVar(), + 'FREQ': tk.StringVar(), + 'F1': tk.StringVar(), + 'F2': tk.StringVar(), + 'SR': tk.StringVar(), + + } + data = self.lireparam() + print(data) + + Label0 = Label(self, text='CONFIG SRV STREAM: ') + Label0.grid(column=0, row=0, sticky='w', pady=2) + + Label2 = Label(self, text='IP : ') + Label2.grid(column=0, row=2, sticky='w') + + Champ2 = Entry(self, textvariable=self.champs['IP'], width=16) + Champ2.focus_set() + Champ2.grid(column=1, row=2, sticky='sw', columnspan=3, padx=10) + Champ2.insert(0, data['IP']) + + Label3 = Label(self, text='PORT : ') + Label3.grid(column=9, row=2, sticky='w') + + Champ3 = Entry(self, textvariable=self.champs['PORT'], width=7) + Champ3.focus_set() + Champ3.grid(column=10, row=2, sticky='sw', columnspan=3, padx=10) + Champ3.insert(0, data['PORT']) + + Label4 = Label(self, text='Dev : ') + Label4.grid(column=0, row=3, sticky='w') + + combo = ttk.Combobox(self, values=DEVS, + textvariable=self.champs['DEV'], width=12) + combo['state'] = 'readonly' + combo.set(data['DEV']) + combo.grid(column=1, row=3, columnspan=3) + + Label6 = Label(self, text='Fréquence : ') + Label6.grid(column=0, row=4, sticky='w') + + Champ6 = Entry(self, textvariable=self.champs['FREQ'], width=4) + Champ6.focus_set() + Champ6.grid(column=1, row=4, sticky='sw', columnspan=3, padx=10) + Champ6.insert(0, data['FREQ']) + + combo5 = ttk.Combobox(self, values=F1, + textvariable=self.champs['F1'], width=2) + combo5['state'] = 'readonly' + combo5.set(data['F1']) + combo5.grid(column=3, row=4) + + combo6 = ttk.Combobox(self, values=F2, + textvariable=self.champs['F2'], width=3) + combo6['state'] = 'readonly' + combo6.set(data['F2']) + combo6.grid(column=4, row=4) + + Label7 = Label(self, text='MHz') + Label7.grid(column=6, row=4, sticky='w') + + Label4 = Label(self, text='Symbol : ') + Label4.grid(column=9, row=4, sticky='w') + combo4 = ttk.Combobox(self, values=SR, + textvariable=self.champs['SR'], width=7) + combo4['state'] = 'readonly' + combo4.set(data['SR']) + combo4.grid(column=10, row=4, columnspan=2) + + button = tk.Button(self, text="Valider", command=self.ecrireparam) + button.grid(column=0, row=5) + + button = tk.Button(self, text="Fermer", command=self.Clean) + button.grid(column=2, row=5) + +# Fonction exécutant le second programme +def run_second_program(): + # Commande pour exécuter le second programme, remplacez-la par la commande appropriée + command = ["python3", "waterfall.py"] + proc = subprocess.run(command) + +# Fonction exécutant le troisieme programme +def run_troisieme_program(): + # Commande pour exécuter le second programme, remplacez-la par la commande appropriée + title = "DATV Status" + command = ["gnome-terminal", "--title", title, "--", "./status", ""] + proc = subprocess.run(command) + + +if __name__ == '__main__': + + if not os.path.exists(fileconfig): + firstparam(fileconfig) + print("START INIT") + app = Tk() + app.title("DATV Srv STREAM") + app.geometry("1024x800") + DATV(app) + # Création du thread pour exécuter le second programme + thread = threading.Thread(target=run_second_program) + # Démarrage du thread + thread.start() + + app.mainloop() + os.system('bash longmynd/stopsrv.sh') + #kill(proc.pid) + + diff --git a/manuel.pdf b/manuel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3e7899030124f156e44f4594988f786a75e61bb9 GIT binary patch literal 378568 zcmce-WpEtL(j_crW@gD^)`%qwEM{gL!HAi`7Be$5Gc%I~7So8CC5tS!*U#O(@7*ur zjg8$uUv@`#Rb_WgbyZg8snb2QDw0wx9IU)Zw8JICJ;QCo`AD1;>=ce>Hb_E3Yzh_* zR&Lf5Tz^Z{*rY&qZWbAr#!VDecU?Wvep5{rsI}#{ zk!G&=52CoBC-9i$R$LPvFr%wm6gC+3#BROuWI)wN%qLRYz?o&%xhJuLr`_Z$bj-B= zA+0#2u~rccG=%o=tAHx^a=^V;#;~gqx+YyLHpw&sJfzrXj9Z(eZW>cd&#%b<2d$FN z%-w-jSjWwXrfJw^_lQ?_bTHOWc|R1+EKvm3UB7Ly$afYD^Hy3WVU_cv84b%|Pj#kA zEJck6ui^y-8BE`D@~*iSn)Sz+y5{~K|14w{Gp=y{CCM{7)#Mp85(ht5K!lddP5t!| z@j*yQXN=Hck~ilVJC3v}HMgQqt_A&x?c=KZvk;P8a3(3L(_`gQzZ|a{xMfztf|4DGO^Zuj# zR~aY!e}-Jc+sT4WN7>BA!rYBb-QCRXpS-NSsg(trHVF8SF>tcUSb(go-6%M@*~CF^ zt|}HT5{~vxjt&+MZWMg~wi!;2e~bp{zp)xN2}e6e7j-97a|<>}3lEUFg_^WD(*JHt zt!ah|>Q)5fwp5i(4mmV734G;|D%aZ5@^HRf&Fi?m%M*XY z0khNR-`(6C%uOQ!MR|C{@^oJ5Pxq#10@?3&mSn)%zpgm`oKgpWlaZZGOiq6D=tC~- z^YHq3kt-ZV@oa8x{;wY%d*)t5Vcum;M`kPPn)wr|ALl}(ss;zY$=UM^x|Cx@d4nzCnTGBPqT5ogo0vZ6KH+qW+)a$Rqu zk_fm>n6R4yc%STy^NC$1*C6^(jCmzOEF3Ys$hERjEhj-ur zi_~fX-Na4)(lmc6SL53Tv-16m^RG?nc?r9nE{{I$o;Eh&Quj=X7qxM1Iv-z+d%T=I zKYV&=2o6nRLY_(XVS^DV89q%6Mj(f=VWHBhB`+}??L)M)tf&b;{u)V{|pF< zq+e|Ot%8Mxy*C3xDlIMOlZzx(Ccx85#FoI>iecYHFDO_FgxKurR4Q4XUS|I|8Lu442w% z+f2vj=fgLY%>_853*Qa;&%bVV;>qQ;M`EOkMQi}sSEuvEqobpzT&IRtS63Nd=4@Iy zQ5H8hr}vyF%5jn(i~3thn-AX-9v?x>yXZF4W{m`bBq4tekzs-+CntOT2=*i#RuqFB z3-KpjlRnnTYmKQA3w}S{nnvtiZI6fNbUiwLd`;e2CC!2i%xD`rx%I-u#pU7Qad&s` zSY26>D^<%>SRvxzh6x`03N<$;B`y6CAgVVP43B=j(|_a9P1#Nq0G-eAt`uNgB06&J z7)8Ly?{X;PveXcVtI8!cb8^oji5g4P>tJa~w@L1?jLvuFSn^viDqol=vbh|YR@mnM<+(a11ImZWDrXaBtaIV2A~-JASxBE!Et_CN7}gNu*jKe6H80pmY#fRp?G z0uPjGZ#Zm7Vfe3VGtad{m0DSL@_xpkNHR+-@^+#sK>tF9vVpj{f>t9SBie73R#s>5 z{qtv;o}1|$epgEw-0Yj?>Z9YMz5AJ~XwY_hvz0^`W0JLjODc?&*^K6c9pI^1GytI7 zjGNc>`s{M==GoktJzKxsej^|e{bjMYFV_CvVx`9FhxUAkNi|Ng?oMWP9%{61;BVI- z@(vxP1El&!&TJzdgQiMK88$W@#(sK#0Q$97tBY{nlN9>;iP_xzCmlL}+%3g2jpowv z6;AM5EM#nq*PZzZDaF<{Vzo8ca`Ii3^YkfgGU*$C^BywnWul}Yc$(dBc|kUGUB;zO zl6Jc8qY74Law{$w2Q8#3I@b)1PGFkH2i9XAoN)gl@nk_8F*)w^LPU=9!Y$B2^NP6D zVM+{LfTj1F7lo$}5|-os{KEit4i8Zm5;k7ZX=#ANmn=qwsw%h5194Ml9|Y<}=2o;| zpU||6Po|Yk`&OH%+Nna?XYB{`V`N@ZR zpgd}*)=}&3F^JEHw{dVzexC=_n!KyT|7T_O3vMRS>&RU<__Vh$O4@qSn#xF~814 zZLOSG4X^XFr1={=kXwZ;-jwGBKD$dD)ka)6kV|a?3b`%A9O+OwN~ahUTmkM<}|LLAB7WrEDakRf|E=Njl`iDkq7wz%}(` z?t+b<6nFFogEq8SnJbncg3|;Mg7j?W;ssP{M#%^u`CA~?98;8jqCYtwa`tK*u+M$< z$i;(~R69DbUsLpm98^D{3qhTp>&y5!cX2h-QSXKlB~EQq&)+%x4h$p|5{t|MVn&G7 zH`$%r6`>}zGUOd=>eKn@?xP+OY&Ov^i~LD2-vx+>c`;GkTOTEKY#CNp52`^Ze`K36 zJOSi;rv3o%BEn9eodQ&tc_|Tn6|MDWE9k7-nmT6Qe-EAu-j;7#m(*3eT`FG_pn3fA zL8_`IJ)Yh>Z>-5*W9CI`^yB229?xK_(Id+Y9gg!os4CD}AR6dX?M=pw6N+ml(sTNL z2ODi+f1IJzs%wiV05%#auL&jDWc}2ALzyasd+}AWAcx(SyYmk!7u`ht;sn*L5W2b^ zBSEO@FK{#m#;Ho^6X~Pc%{BE5CS_iJSZPg?-37LYxxwmo)<*P#)Tlr_71ESQDLZvT zS`B<64_R!H_Vbe9W}`Q5Oz7JTnlNgq*%kYmN`9$m;QQ%hTbt75ptbie=sodWi}^1I z*xx<9$yC{}_h&+VzQI{=D0*nqZm1geH;P|JRj5>uhhqxCe)j)zw1EE?5Y7((Q2ZAR=Vzz*Z-6+(e~YvKjmIS=H2&ur?%#NwmlwdxMZu=7 zXzFT90r(eqr}z&h|FiaI7Xm|0N>&O25)u+Z`tJtuX9Ge40vZbHpZ%}E{M}&@U}0fk zV3FYA;Sf-eP*9MOkdaZ*urN^3Fwu~aG4L=jv2p%Jbrf`b0z4c7EF4^%e=325{(BD$ zEFvr{A`U7tD$f72{27A4M1Z7%9)pIYf`Gz=gvNyYGXg;Z0Raj7Piy}pe_IF#4+V+v zS4#{D0R{d4)j~r3OaBK9fdc(kivf-Cw}#h}sOe!-jw^Orh2sWdP`0LO=lI+%5qLV$ zX&EI@l?bcD@CDyTqGrC=TfnT5IalL>$u@z$mGPuGr6jADYusX~)k`ikKm{BF#*_zg zwu_Y#Xl}BN;+4ealu|8U4%afA!SOiRoLgd6UUEFhz}ZXLvohg?8GU_pB|9T}W1c)L z+52HCNUz^BQ`@A5l}d+^`jSe^~>zKY=&{GVF#|CXP7DIjH-rBHW+nl+TS70F|Q#QWx)|8gg2OnxtmKuIgPw%Bt)hbn&` zFVeT!;+r3S@_loUaX41H`A>w4F^QxHF--}5P0luVbzCB=i^#TJ>Sb;4nQ@7Hj4rZ1 z>DI-O2xpKl@?A^Z<9XVW0=o)={1146BxlhrTHFF+cyqR`w#10C&9Qgb&f{dG6|NI0 zkD?O&-q7{lk6b&D4-h`yr@cQhPe|`XxoZ|>bKJgit7GP!>K?~1z71Mhbjvqrx4e_t zq9ev1o}PYK3bIaL8R#&j%}dCi0|LzFjtv!81^C@!l@CdYeNt@YQu77=KU&>RY_+DhsKW z_veQFxi){F=2rVmnk^;hJxjcP$-CzVMsHJk!$la&IJ+_{9z( zM@^T*?FwTu1|a{AOS0i9UE@gl1ZPS@D$ab@^0TPT+Ff47NywpA=Ah0G@||f9>nZbk zGh5m!z>IKA{kGJkxF623dj03~pi1JKRHhLj=zE5^* zynAV=Z^0;|B1(6I%I()vY20%qAJTBFBP)Q`(s7BFdqZT){KySbJwcz^YWsekoeLy4 zu5D7l%Kb*p=vC6X8_;L5ExGy!%#m_6z==eattBVhPkp+pbFp%Md!2z7Q%)vLEE~i7 zQoAPoj(Sj$0dhdc@7r1O$7+|{_!4}fxlvn3O`I)jqPer4ftH2Mjq0am_qj`^Wtvd8 z)jr!rtVLBroP?zKM7wf>%2)N$g_19u=WC^Pk*)Pg!e#GwzoyFhf+nkDy?v1;ktW4{ z5%#%0Z1a2gJmgiHOBpw`c^WjLOleI5)DOxWN{N?Ei(jjNA84ssmMGMQ*ZVJdUE?j? zlC&svCo8r6Fv-<=U;o$>ae>a1&< zvbxorvhTDY3OT(A=}a~3iSt2TtmF1GL{QGMI9tiqOI%Z&*e2x|k!T}-hqA?YOI(_cwsw}BiSYC@ zYuVPqT*KFE3wZ9go-@zfg?6u6Hl}!-HDteFd*QHTamshr>OFR}Gr7|3dK2ZnrAJaX zvk-?a(WClw+$=V=3Yyy=$6ODxmm99S@FW(+b}Pd412xCR6P6p9UcO&lyY(!}+e$+# zVq^y7r*1{gDlRn(dcA-5GZYq&+e`ImCUZq4`#$D{{OJab_0^t>W^`QgB2kw&L{0PH zWr$z*XcS5T;7I3~$91|t&z3<}tl8(_EzRJt5Xe1s)bDN)XY;i0dBDazef3V$V#Rcq zzO+MqbZ%**XS0gg>wMlgD|1Wv1^ae%!`Pqtq^Fv`OT86Gmk}mBb_;oR8V}x<%LS<> zXg@)<={vvIYMH3tR7pPlPFW6B2@>^#(D=mEIfx+Bjwo-n#z}AQ#^@QzdBdq(qek=H zQ#elon>9uN; zg4#2#s58E(92-~kMR>)uQN|I7oy8ENoHb#G3Cr6V zcScHh%{lG%Y8BL!9ObZKQ)18r>ijV{{}Wk%J|c8<-)&Qp2^##E=o$CPWk zT|3kLAY!toOUkNoIzrYKcHeT52<5X9@qqI8f$#IEZIC@tdb0Eip7`Kb-R96m$*P_F z^0;uUbg$Q^%s8)=wG!t(tT@%uXZ*!j^@%m~q}l_)kn0Y9^$!Ha;ictom*n0_5iexA zc!<|qnGRRG$(Am>*o7&<5a~hLWjl^2I6*B}~lY0+FKISK!&lzXA{)RuAo4e)6YlkTq=0lM+`aKGYj@0W+ zZIFNgt|RLF@xj?VM$ARKk#CAW$H?St8s4%oRLr6`lwd1teDr7Lw=3U%iFe1rc^sU$i!w=Z^WYp?UHG{F6HcN z_10SD;(Hs1Lq%wCRCzXkyN5u3+KoB$M_p1%n)`LEPL~R)tUEB>BOF&JdnX`%!}v#P z_Y9RL7)K43Nt{EiE@DQVvB%x(mvn2nBhSK9uJMbn_G4q#s+K@&8erBh@^NQkU69Z- z$C*Xs4)JAwAQ|_JE?q7+PgAZtCB2&|%BVhGBl`{eh|?uWv8MG2^(`gOcWOZPoRRxZ zj`TZWW>rd&wvs6@rROA-1XfKoYGz2O=!{1_cerjDmkGCwwO4x}+U_ixfje8uA|ILW zwYuDP1pJy^Vnips0zlAGSM?fu3)yr={Fzl1Oc*wU(~?Dh4~TlWmj^`Y_!iAk)c`EP z$1#5(Sj55SkLz5{)3p!Qb7cp{nzmPgB&$}ae5m~A#=`!H_icGTAC$}MTGD+9^N1q4 zT9N62;XoAOqTED@j=0byRy4rF79f?Rey?TZ;8{ z(-?DdB=z4c#2Alw_2t1QT!qKz=E8Y$aDjBCkMHpoIou}Pswyv2r~NtHuB&Hk4wLmV zKFFohpEb|5km^{gH%O2YCii<8FdmpJs^upoTg+{p1T9B*EL<1zwzSE*ofUiK1|Mg( z+(Kf`C)X#&MIZdoYFplDP6J-(dsem`b;m-dT8-wOgrmUccpZkI7wPl zL7QHqzVc@s^;ugRM|#uGTTTzftwPst7H(E{E3tX^!yJv4_a(o|ABCT?>oOY_*Ef)~ zXS*zQt3trtcjor^{A(4hEU#$t!fn5Llx)X?vjT_(uIj3^+n%#t-p&z#KtE-ha0_D9^1&xJ3Yc`1VW1EE-U$g;Fm)ZN|GlN?jjTJt2E z!}e9zQ1E!Rqz^PdYrHh&%1i^5$SKYh*49;Lk7mA6DwpnQd^ zl5_cUeYHBbOvG}Zx)AF(nlw7gESKqb&-Y6G(J*hR@PlRytIj1$O}_nL07DVy*XnTUeV2z$S`!&wWz#M({;zN_>B2dQ~RDw-_SI5t_b`)QO5}D zRcvwA6=dsF4K}-?kSz0?dKjPP-E&?b)lYS1Gtj_(ptjM2XK&|}(4@9h9BbbNM%z@u zQpv53b{9Rbi z^L5TUEN^*y=c#eE;Nb4AF?JnW_Gkb23{dz;ix|u8T(rGlHq=X6DaUN9x^^t$__0-Q!L(*-@nAA97?OQQE|%Y*b_uM- z{Z5RR6Ue7L&bEDzyjiJj(A|nx&3W*OPg**RW%-K*cj5|;M?A&Q4@nOHVN`7YZLPwY zs9VM42*!%nypATT=%t(3rOH}69>T8Lk=S*-2P)Sk30ILEQqs#2-_-ux-r1&XgOX_i zlYyM|L+oz!+0bpZyP5y7UsCG~?VAz*PuxdxF-QH^#ZY38|J-ULfUoE+fNA-o4kDzQS)L&!epom zQJbc$s&_Xtr*U69#j@u+p$L!u%GU+S6ePR@sR(j2C*?j)r)Ja3XAxc|2F*B5>ZgTW z|2&Zvh^KZ^1KTces^&TF2sf>?1oGVUW*^IIDFhYw1N-t%aNnj$$Cc@B&^b^KM8;0a z6bBEjOoV}30A)^ZGBPI@#JX^kBB7u!Je^o_bTQ%nO@?(CR}K8PtQqUPERZ(_4`c<^ zz~?)&|~A{IAiaiRBmJJJuUKcYU+7mbA~AIJ;upY)%Zp=;mfP2fHb z*hP8g*x7h*;Deref`+=bgl!S~wo53@2(BN|7w?`=x-sYPJI)%t2%fs(3*%oJBE~;f z2PQ!MGSt%2d$H7~4jsP__-)&qPeoiqo3~$LpSf~pBuyu;`nnpw0OIw=QrBRBaDCY0 zFKZF!lP7gOFODTA?S#^ME27P#5AWB!&h0&?FV}l^r!TWbT1hR>lQ#GcnDU8D9=K^M ze;}aZk9NLRFxXx)${O-p(04&fOMMJfe0dsE!JLO{uH%j;%zP^PMR@MR`z_nG^f@MI z(ZxwS-_loPum2){AhTgC3iy$kD4{sx+WuV%i2#Z32*C$q zlKoQ_f(`-~*$WnF0h0b7H5rUt`Zpd&NcMj+6&qjwIsIRV=wGgn`!A6P2MGlS@t0=& z%lZ9t*T1+vOgJozzl0-`P;0h0U)5%o1+#9H$HTo~Q;qhVZ@$wzFQ#Av?W_MlApdhIg1Ua*>TWgzyJ_m7 z<|5Th=}dWhyf;+UzVIYzpB#{Cuyu_`xV>DwJ66PZ^)S-moc?eG+2f@955!8V^KsP~ z1z$VST6PEXh=pc?p7X1WaFd;XUCo<*+bAjZ6ZZbWP1ww^bRj z{3U7Dhv{HhmxnZxStc6sZOAP<)N7BVMSHxeDHuyL#w&q(ddc%Jyr!HMWhmi}Y$@&M zT7HGLHenR6PPBQz5YiYAF?}d#UR$vzV#h;vD3tL|&|dkI*-)x)>1r1)4T2S6`-Vs4 z`NV>$A}_N8Qm35Ym@2uVaZ6PePkpN02uSni!y7`V$Y@h7g8WKWC?`pA7I?cHesgk$ z{yhWNp_%s&MBTCh0O;oYg37)D*`_kb*a1rU0P-t~YNN?tt9(fYzSG}j_|%bv;X`pH zX4QmELB3{i8mH@HdD*wLgs5qA-x1okx?Q;v+cURCMX*c+2&!dSGI3-^Ya(GsSs**@ zvs-IO;h}~t+15v0dNNUVlb2Z~%qS4dWTRHBYNM_*SRm-%f>RbbbYrIVDpYa+D&vAs?nRxG5Wh3QQ|RjN&N^@PuPS2yF|lpIS;*1by;CbCaT2S;^1N@W{l37Q@K45gwr3ZJkI#QqkJ!?Z%8 zxS219087D-GWCj@@xT_;9X%F?z9vqW*MZrdHA1@Mf#vNQc+ZRitu{HytMWl!#CI-MGMZMx-&d<3r-7*G%}6d?)G08 zk|5>$+#S&>_m+E*^oOgxczH(A3g;ZV&?E{Ddj#4Cr~F99$90}Bj7eR0FKM6~6L76) zNJ|ntlEPim1XCI}OXH51JsHe9_rl=LX@sUU?xk>`Q`;NVJM6Rk8xVPo z8WHv*7=GZH!1n39LU=NyMLbpnVK4m~e>{{E+h?I-(X)rSUU*S5Snlw5SCd^~Xp>O9 zuqN71;yNW>nwj~bV3QXAI{o>!?^N^Y#L301YRF$Ull%Zr4D+5Kn$wH1sZlnRccq_R zse9wDEK?}Tv0#c{nK*U9`C9G}KGWt*pT!SEn5g`#!e$*N!S!SM)%>XE>lAUhH zzeqk3ns7Hh&x=4cc9>$?0j{B3JQwbC>kmXIwX9R?8x-ub%yas$CIoz_y*&QkgFmgF z^ge>b17T~!rND=L0!j>T`$`BI>Qj5%fdis)*Df148qWxhz+d}oux10PNL7+F3#)(tl z04w~p6JnDm@Q|{EPwyjqpOuhIWj&t5#5=_Km}5L+oJ<3($6_+TqBo$`6t(8E36@T3 z4O(Unu?ZV;C$^-P)d;&YeW{4ar!WamWJmh=>Ulfic^vL*H|zm&SL~D5-nISL)A042 zac)*JroCX$1j&E_vBlQ^98ACf)PjWnnG5lwYvLw@wrUmc0yXU8$+Ob=G5zk{0hgE% zI&mJfP)xIk*~0Deif<1Xe6{8J12J3N@wdGszfn~yE!Ah0A92H}sa3|0q&%x=OEv)f zmRjmW1|<{H3{Q+@{Pu)6_0}3Z9#_GrEGVt7m40Kav;yy>Tw=D27CE3&Dzzx_h~)Vd zfg9$H_qC=R1DbBLDf@=S_=b#XOaiBLECy+5XgI=;U;QQtalEcCaTpYzBM1Y8P*6~u z{(c2Ej#@bM46rBW#JnwuhF9k$Q6S(je7xzKCqW^{8rTjZm5?OQ8IoAB3vRY%9c^$` zDO@UWx3{XcbGIgylU9+appg3xbol){ZqNSR+j$n-Xub}=Z+)G1`dkL29xPHfiX5yA z1sY76J|clN;0|tXWT^BvE?fZj&hXN`y(TT4zpi8FImikdnpct-xbw370;+9~)S;ed ztf1Adej3arT^c(AOmgQc_!4!~5!;MiEiqEmwK=3*xL0$P1@F&Zx4dCd#Np%7LJ2nC zHRTZJAUR_&>}loWyOK_La%`yyR>JDqi=0bzVJJqqZmQ??gd0fI$uNLmX{qx*=Tn4F zF*<>X7m6i=X4xs@cM!G%u?E~kNvuFP67w3eVzhcP>8P^(Yc>vNr|O#UZH{x1bK2$g z$!e2oRO_{yu+ZYQ`r>%RgH6Qun9ONCEgM}!+PavPSqY1&*k3E^g?%kV3Z*I&otl6o zf2{bQ9B-F>Q;?M7YE#NL>`;7lTG$3EzX%2~?rf*=tmA_@LJihG6q5b=u; zm;=b>Qi{+%;|@fQKZyPY1%pM(967JHf2f^KIXNO(@4|K62~rtGE4v;n<*9VQDSt#Q z3{K^+jkwAh)=<0K&P`hPSe;-f9nR>LMs&(ua$cgk0IczKJ*IrIQq8r@4|nQ@tlH&a z-S6W7OftldNG~>!$7K;cAl&LjCBvau1(T}{UqPbkyEo*zt@y^8l6Oi6PXfAr?j&<@ zl1!t%h?s1fd&iC;+#!lF4bZ|=Z||l;sV3}vRmS5VjHD4`WoaR2ad0P;7Nk+OC-OL0 z)o@YLcm0owSMPzPa@&FeVRxZN~Bxvkpm-qV;Qh@7NcwCQjdcz9f4br#9}#L z-LA}X&l*XfLe1~B+xMPQ660>LYANn20OQ^DNhSYM?h0j2k<*1QFU4K)#9}cQ4%cpw z0!b4~4+k*mi5{|w#lFQEN@cPRsLehDSnV!`?WtY2p*z~+|HNEc+1WA?Gs>FV zsA1|2EKXT^%F!@XiCS8*8MCLoo|r{lr{C!d1ZN_5b1x6)-EDh9#KR`b+D*p)s^1gZ zogVV9u=>UXhkX3y@*6o!H6#;9f*f(!&s01z*R%y(zdSEEol0VC*b;2oOPgNWP+rPQ$jZ>w zj)*!6VpIThSrjg$ZMGws^Yo6cfDkfMjmaphBt;Zn=8UN$&NZbXuO*@Z!oI%%9JG_4 z+K5}y@W#s?vQr(hGl;{aB$X=#uPo#&vGJcSS~DCgQaVF0*+50g#TmWfOiuD44dA54 z-X=rx^+T ziD6TfuF`VShLn>L)~ZpYAWD`A_6rjayIr9$mYyZMS@*>To_Qh^MNWc-{qdqfV`Y-Q zLjduoYwsVdE-NX;X)(SuF;Hwisg67fX`|3}lAVNzD$=vs=^rZ#94t{wO?!U0j?yM^ z26nC+Q>^V>0tHpTed|&b=W4bE0D|>zeB-f0AW$}INiy|;J-WjN53pb^dXz>dROJ=z z_7T0sjPWtGT!&YlMckPTM3P_r+A1`lmj#Lo$>9+OW8}&TeY4R$`2Hz_McNEmbuE!e zb&9A@!?IjeQL>H4PA9thcRqMLRn=^mbzNIa-R+~TBE+&7iw+aO>i}2S5AF5U+s709 z2SSx)>AoD5rD4fAqwgLkw#owd1K|A$DNS8c_*K{j4?Z+AN1F z5R9Fyo0XFE9lv0m#1;6|kwO&agtaq}njrfrN%}ISTqd!H5(vuW$VfEE2U>|$z*8phR7)nY~;FJ zNIAvED5kB$hJgyn$H7kDVt!V=(F73*hVI;E!uXMl?U$Qbf^@wYi(K0udbVSvz zYHOltK(RPSrRE%mjew1e%$`}<6~iQ2x)vYsIJL<1AbHiY#hd2c#iNj``ixP}7SqjP z|AKm}?GJ@8&732V$SNUU~Z6-4`)FlXt4 zj0-(&LVJKMWlu0loobGBXR1*_$sj7}(EW2yOw8-Dfaw!CUy>TeW?Ee6I9cRGf_a(W z5OoI_m%mH{>@)J9M4&)hT0*OoMb$@SBOx7FfoTxS<;Z$1XD)=bxW_ERuA0N1fyCi# zw6|QaJixf6GtzS=so_@o8gRBHIPlA7X5MqjIpl`Kt_`Y|vK1Zw$@p4|Er zsW;SZIi*?V#9+Jxi|Whcq%w45r8b#k=nl_ZiwJ&0KK)!d60{z+@4rIf=OKpb=5-!KxG!B@_M(3zqP-bE@c{pgv z$}CSW?&Gf-8Pr6Ahirc!A~$(s_vFxPZk_I;s4TiBF1Chh3@JS7(GGuJ&nDbp$&gML z!#dN4`=tqP&Tk)u>?q3I5e`qB1T8HN+GG|ICHV}orbeLi*ow4OMxFkFSgNpV$0*L) z@NZIp8MYfDq#**~9oS&hrf~2gMsGQ!}iQVf2n+(6tZ=Ppd&u3`!V6L${@SB{aBQUkiSyv@{@sREc zCFi+7o8p#)Na`oLn{A4^YD=AtR5#KS)v?rwTyh!#G22erm`vpEOio~T(auswKwAbi zZBjsyu5dkD+6Govu$)uCU^zvK1X;nma>d6|{<&RWkQlUvH%f|6DI)IWy#v7!sy6C~ zphAjvPvmKW93Y1oxr0@?YLUlvy%o%kV=^tH;w<5zu=Bxlvw?Ib7tHD(Zj>&{-I27R zF3mt6)q0~+m%Xul7fEuys(2a!!>x=e@h%V)!{CJ`Gmvgsq`TH<>XM_Q?i;g4*|5|^ z7IqIm4h;T&n1lByWzRVyWWn zEXvQ)x9LV6lRC$1(;q!MY+hr;$0DXv=- zNH1T#6@U_7Ii-ZPccV(|DAnPZZAx*hEF}?0H{D(`L)k+Rds#!BJr7QkBIWLDso$6V z?VwC3^!fGNYg!F>q~nj1Kn0gjMx)Q+V zo+~#%;;A6pJ%}sGNoJs2Z&Hxo{N`{Uat(8Zo66lvSm>)23jL9d{wapgWf1cotH@3>vvyk*qjFqb^fVEO z3HzRcW43>6AX|5SHf0d)tvsSe%P3Jw$^3BdSsIB(lV;NH@Pct)J|U(cOucN z0QBuooFasTIGR^MShC$S@vtr)|4j_s|i(9m_J$v)i8yEXG4d$YF^7fR_o z$kX^rEn%tubooW(v_|71!NA4c5rk50ZTi#pJA>?x1Fr8Oi4H&XYq)3`4miYXrW;=A zxhN8vkSGcrZa!vuw6X4Es>|r3HGXW~Q0(?jo7Ik!Y8oVc)#TE&S+*OB=49w*U`a@P zwRl9>`62bAu=emx$J83MBx{wDb%M3j^;F23Cm~c;TeZ)M9NSNq$?*cP`||fcT4mh6 z628uqp+c8ZIZ5Zr-X%2F$&*smk76BGk!`366@x=-)C}Vmv$dS+?8)?R0!vnMFQV)D za;ciM&1V9<$A=4Dqg7xb zo0~AxieZqTR<^L2qrC4|;QVLVVD^U7C6s~_J^ocHS3`P1d?K;+yfbWpu!M_KQr}3_ zH6~XstsVQfokoTwgP@^`y#en+!W9w~pyG zMbbV|t7tc+k)IRGP!`GW5jDRDej}Keh34Rp6wh4~=CZAiThMoAe)pHuHfLyd;fK+i zkx#18W)~%Npg9s5GS|y{xy$ws#S<&wdRw_ErdDmNEGrY(@m{*5si&q)cE)+HC^sf8 zC9xNgXILjZDDS(wf9~}#ifQoLm!RWFupTr8qC?j2kjloF+Zi#S)6#&HkCNi|)He_v z^SHZhBQ|}OD75LniQA)|PoTDyR-4vd=Bt3<8N{og(-!bOM)er3^BZGT%}Fh)2ox-6 zrIUp|nMD*;WP#KXKp>L8M6XN)O<*x|v>>iz!0mXA;=@F>{d#n>e@Qj2d%dzh8cSK{ zH9=lDIk6%<%7;h|f4-sK_qf9w!8+G8_0?%6So?vOB&`zk4Eu0$v@t5X-ZeB@=8g3Vl79Pjv7jl%Cn3!N)j6Rh>uo+>Mlp+TZ6DQ>W{+rNj zk+>&Zj{DqIc3kPYqsR%5L{@_`6O+4SQL+DWBg72K>LaSC!kZoW5+NP}&8I5vg;mkM?L$_f9VKEo>|5C~I_lT$+@MR3n^Vehw!+TMVn6CU|eB z7N@Pucr!@0Mqr-8ty|xc^={)96E0Kz2Wym&-1wS4v@*ZRT-fFqnx=0et){rGjqSrm zxW@?KO27_B+DH3<)gVQkW@Qk7u??3X)W+la{L2gYSA>pXi=%XOYlkCmSVj{y<|^0QYS>y0 zE+=StDm$1FC3CNts0>n}-e4r)2$0S{@St zs3aiBR&6_~mi|=@r&u<5q}X?l?jS2?o$@a8i83AMdv>*+VJ^clVViT(j{};hc2&G# z6%|TM{jdAF1?hA`!CjWv9__hfmZ=$+MH}wlmq`|ujK0IIcU20q0Egm=ND5S+P#ISl zsQohOva1T~TEO)KSo+ADIJ zDt#P-f(UKIZ7t06^ zCr+U*KXYC}kNsM+1-F&G%aTiDqh`#I(CtQI$-07`V&D1$p*Ll^%u=a~PQ^8jF4$Qz@CaoeH+uS~3s%_#X(%m^jtHo9-3ebV3T*Z$fyJ zyJ9RndysP5EKE!+XJGwOM@_q4@e4gh~#NCwVHPcYsa}}tBT@9Cf37y zY0^beSuOF@pM<-FF%iG&$COj1h8MO{d|eO;Ncs0LWlgFZvUu$3Da!rFoyC$>KsJ^J-0G;(0NZ%-)a_K*)LE@`mzGM8vENOHpMUM3_zS#qrK zvaoa~(-l1GSL;<8z{@qbU8DVI1mh8v@i4>!=Hm%~cxgbdVu_JCAzA8?@d$#S zkLVaWKcC>k1%!m}L~)YP<>lc^kI@OUsOM+n7z=WJWjS(CVu$7PFK$GmRe_3Oi{D+6 z07_x}aU%l)cqkrtkSYz*2h$k0zobooIFe;`(B(vmtz0hU)k-By$_WCZawY6tez40# z(he$&M^N=D3a}yKx-g?|L4>}j?AH^PZR9*xT#igJk_q7+5jT#)+8T#hr-}V$N#>S(JnNbRR&c4sH*rM zq`h@qTrtxqOp6wG_l4pVcPZ}fi@Uo^p{2MiQe28Vi@O$gcUiQ!7cJJi?eo0%yWgMp zclVqmC&@XD!C{-Cppi>BUlWOU^3*$4#~c&A_=(I{N&r7O6N%sgUrm41-=xm3 z&Nh_BMAMxzg%9_3$s@5}Zv`=@sgH+qQqB{*-y+npU!$-WtGwqfd6<+IBmB?nUQNA) zPEBwoG1g({aOMEYn7{MCh11{6;aQnKFqWkYP3bE1(48JPO#x5zY>5)pqxt{2(8R;i zoo9|^r*rro`Eje16bCujR5gb6U8oq_x?zDGYIb@F!d+RE(x^^7Y3umx z3C-}?xr^AH{ki5Me_&=pL;Tc&e+LA2!V)4=HDJdfdHeElb&uOS1I=BA*P(sW2kj%? zzbk=Y5h!q2F|i#Syl8zs>rl^S81Q#GCYJckB6eP2i&n@Jzbf%B=t0GVo~z=oBJzUe zrpwqktW;lrsKx80Vx-Z;ukr-T(qPIXVI%nwQ64!OXkO!?GXmv}9p8s0hQ=tDvx5Py zXgqcN^(ttnp-i^t>wxw~H!`6jWr037TpQP3fDl$i_;Ac1hi*?O<}d(-J)wP<)?Yn1 zB1|}E0`ZWUV4^?nF8@w~f_S0D);Mj+j>cAV#Gyy%8(bYp*cOy2zTM(P5_Z*r{e{`- zFG#_vP%xnEV(4$X#hGM?&6#8ndJ8evwRO<5%3U1?H;QO7Ke)xhjn4)B4ZLwKx>xeGJB{W8mad;Kv4BA5KmH(3S{wCWE zMK8n=RFbpnQqA>Odr5l8+t+*~3x+wxL^Sy<2=`{$#2Ok8L;BxwO2h_;`&ot93=8`W z3yqFYAk5Y1CD5r>($A{WXTlbPw2EBV2%7re2e6h+Kz%S?gn*i!|CAc16QbJVFlW?@ zsJwz`Yua&P8ce+?9nzSa#hP3@+aMqvbmLY57J97=Uj}bIbTg?Z};d-Uz9#azv$Vv+eiLLCQPhpaAagt>aYN6u6 z&G*X-N{X%IfyPk1WF=~Qu}s)eg1dln_cTWkp{F>er`7C+k>;30$w2%`h9>5**NdmH zo%RLe>khmp545D#ROrsW=w5-Ie>K>&W%>^c(Q`xU!`aZU&E>AAoYxYloRT0G%v-2n z66`w!c(}K)|Ad>MQ7kxYc1#>9cw9Q_g-+vvK}cGfYd$CsrL zVfcQaEV&-Q!RZa4iCv$VpIDz*AOFT7I|5*ispA+P`%j?e{hz?%hl0uQCJmeW-GR;&cBEF8{{i7$*e_C7`E0E|h+Preku}E z7Fl35N2{$qo#&~>BkvV}8qJdKNrtrG>xiAT-bjHh0Vr*<;v|Y0G-pp6|9deomU>v^ z&Z-SU9mC5@6hY8^a7a>GwJ=Zei^*z_IgM4w7Yt&B0vQ}f0?N+ zefKGo`rG26ah}%b=x_w5pDobdwCP0hQt`OsTBYKnL*Z3M#W3q>ifq4K-hz)XB2e zTq10F1yV1XjH#~f=FqCw2w+#%$slQd6J!aQj+4@82(JUil*oJf(?v0&#Qb+XOw=zbB2ozqGr#fOJ9oOzmv7+z$5`d4aEQE`69MYe{w=mPq^K8-YJn zyR_Ugl;sp8lG%I$gv<_W&wh50k!qye9_kdAX(kbP^&9Hjds9#BEo7|Nx2NZP-hY0l zl-^`8KW90>fFkbaPHf^kJ-(etiE({@&w;FEuP?IAU;iOH28aIv9`8plTBZ zD^*`S)!LGxU*_O&%uI(@%}jeGF!b)2QHiN5gv2eC{0b1U#)+|6}=&?iSlBO<+G2F>>FgcVX*d56Bd->dsc zOzMNZT`MRO;>qIajs*%M_hsqto8OolztjF&M&QW96E-4SFc7b2$8>1!&HsU5kwLHz zG|b5cxib^gS6h=q&#KNXpg)Xcs9OZ64<{SFEuEP}cN<*?a%mG!K45J%sXa?-+H$g| zwYotm=awSVd8x6az5WFpZ6YJD*cfhutI^v->CBB$Z`!XR`}>>N$#^pLRFJCaqt+p> zgCAKLGuRsF^(cSrYb$Wyh2O~M>6#-M~XGkvFYY> zMP4!yRss=La)8|nIOQSbaOPRkUn!~;CdJ*9*{Vba1qJ!{9h?qU4bcXH#h zGj0ZP%xa98XdDj0@=#LyaNC@PB)MPU5w}>K0{$2C6_A>zLCq~i`TIe)U*M4Hj<4H* zL|4!9-7*G+?k8J~n1?2JpNA}nPaMXv6Gi02PbV5D8h2mP4H=$%P?sOFl`Vk(t1F9Wg6&&Jui$wW#=baad$nzAzDT>Tjx;EVlp+M({??>hxSHHV= z{EI->L;KLJssG8RdlHQMv14keEF^4{10eaTJBpqEH05#C<@3Bb9apzJ@VnqTNbKoD zY*24Sgo6OXHJc@~z^&f4`nehuL|IhLc# z8zarsNunRjeqWX2`}xirFLXe>VUL9FJ9 z9bDV<5A(kLi+O?VC|W^*e_&2Z8=Fgh<2SuNu&6M_Nx2y=Dzp_oq5+jW20A}nm{tg) z==)#SG%juCJmQlH-~NG-QRMBhzqmHFcYY2U{`;&BU7Jbju!23UCE<>O7ZFmxxt3NyqG0;|6pZ&;E4+c=%wm(ae{% zR93pE%~KxZv!MWnv*pS2Q3FePbaC_c?3xWk<3A|`_GM>> zYi~%~iUK+eYORD(c=XaOr$--&pxziKlSP28#u~l_zsCXT&0hZcj;(TsIV*)}0B@|) zh;BGyzm;CTc$V$CD^K$Kgp{B{7bhCqRw?01w{M?zDgk66puW%V=fHH_ot`{a}T+{M~&)W*2qiPZ>9CJWB@DR z)7(;ZVXh(SZH!=Nec$^71AqSBpo@UjsJ|*PisQq+r5+s~u5Q$HEp2XrukpkCs?Z&L zZr)E>N0mevNKwhAD*aM}`4d>w`xe5(&cQu{LlJwgicr9zZ}6NhC9cjNm8CX%&`7t> zinefBe>8V2AD#azg>Kuz>&!mPRS3Vu7_pdHrGr|1w2CqDd&ok16)zT6J_))u9lCV_ zVJQ=}{zb@=KN7U)y4hct3(XW;Qqjn0Nry#cI_+r4?=;)u>&h%6#Z^4Zl>G#=R4&+Z zLKD_%jdRB1KA6!))is66*T!B1yh^=a_avFl({^{}HS3fUUy*IE*t!D{q)G3Tm?;=4 z1S-7S)8;5(1mN-+$PZLGu(;IhVz8e}1W-0`q@xzL7gXR|M~+7#6rYBED@&=Wi_Br& zGc=3P@X$z?Z%z%nuq_jc=!X%$5QG+Ua|xXrQL=}+&MFtPSI?QIZm6Y|uw(tc;9 zMJH4BjhedimOp^icJHu8EyLsb9=gK!dmHVtsM)Nep^jk#vNHf8VYPNu`>G=mT3{ib zePfa1iy4xA%jZL*B|mJdTfN&Gh%e(bQ1k0l3;fLt#{swn3FYa(EZerAzGl{M`uS^8 zN3_gr+$<%c)=C;sl(r`&Jqt)=oTfR~L&x-w344H!?vZmtDsmYNqH-zn^gl2( zEor@aB=erB-RU z7dxpJKP)4DQI;O1er%npA@ms4CG4b#Q&~018lg_`$dzd<^jg(CPoI7-5 z2>h0yaFZn^qGgR&+c#UJp5aA-rjW-!8n>F zKl74_&!adR6ET8AO|S<2iqE&SDl7&)_z!#MY)x(#^ z9PPZBr(31~=}@2(e&CC|kPM@p%zyIBXa44E{mmDtkSMr6{sat{xtM=!B#+xH`&XQL z5YG0o)Sz16i<~ordUbuPCCz1lw9u6TyGT1J_uCT6f7bkC=`q9O*8eDt*xjG)4ylnZ zahxNjKWmNfPX53&$=G_4_iffSLGjMc>jx;_Q^$mP1N#OJ4iOar>7RZK%wNkmP@4U>b@)b&dOl=|cncT3F6ukD!uu&D=sE1=<)FmtclzQp^es)69~b@s~KB58+K z^K<=wRc8=H-#%svXD`gE_#LQLe-$p@|0cN#0Wrf<1Yc z)(sul!)Znm?zzh6nJ9(zO`KG1+%@AKC3>YNJ6OVAs^5MoHm+3LKtd_fjx^e))R!&U zvAq)7)0J>}1huNgorWKPtPSV=QMYuu=PmNoIOfUk09#;uRkFe_VE4!|U^lIOos_?V z)vl(=d7N8=-fqq6*?Z)76iANnQeJK4Bg|Mz_80k*4k5_fIfPLbh2c^x88d|N)03+L znfDa8{`#j6lgn9pbBYA+j@mYr362?Fz_Cq1+t_VyoJJ&Qv%y__D|iyVYM%fH{%W`{ zvt>FTq7$M!v#4Sa7)4KxI4NGSXvf88FE*2MW(1UEunOkZ-M9Z zGfA5c!OE}-S&pRgPCedYk0c)+zB*#qJ94Z>TZDyc2cN%9T8nCGZo}$hu*{%_(0v;! zLurX^3R|tr@RtDa#G2ggx{H{kTU_X~C(mosd6s5kxKT?gTNZrf`DHMc-n5NKhef`xS4ja~DSl~m9A&2Gg6cI{=%mmGRj9zb3p&3X;9|0}56O&j`0wx`EW z5|N{hSx@+w8gqTe2UF8AD_dhTetn7#9Z4%M&6X9lmV8YX#oIkOjrp=n_ zZ@J1HYqxWECLEfCiQI)L5-vJYdQ|Q3tdiK)*`A@sta5+Nj2-_Se4(IWc0qp%=CQ$e z@5&oNWLjQgZ)8!=F@5)O$6njxt|A~GNf2tT!p8EcKyHvvCoiba+h_@k>uvHXNz@;h z2uJ70;w9ACw1ZzO(!una>{HhDt2-Awa-`bn4UVirX5323hA1swB8Nz4%(F^m{<3Qg zyi&>@+7G)n7LIit+~8rm3aNZ5eU_>TH!qC$3N515fO&A-lkk}BZKob}ZS9g^krjwn zxFEsD2L3hfSJjDLK7lz%_8jC$5-7h0K|$-{GhqCk8y_xx|7LYIq!ws(?i=L3eKJ)SOT=Yl|r7*T~)Js*CQ{srn83 z^c%N9IoFw(Sm-Jc9onFZ9|YtK1E9 z1!+*T4w%f}KuX1OQkb@i@wG*# zJ1sHd$zg=&3Nf*5^sm{+3e$rgu`Q1c_PnlY-$>-*B5Vf^r4d*10^sHc_fZ-TmFl}j zV7Hv{>7=2sOxvXA6+y@#Ko15$*pPJ;KRo%OB#g_!|9(<@_K60)0kw!d8d7#)PrTF} zv&HT$&ptu&K4yQYDHn{Y#zEiJMFkoJ(~>W8zj$R+%2{U%boLMxxpQQB;FhWX=qZoc`r;|FWJ z`GL-No!3@TGu|vruw|B2z8PeA>UZc^3}}XAtc=DJFdRL0{EJ;$e_Y%q_r6 z$9{%k9*SbXh$KxgxFjhx+sjrW?#fn^$|?e6+20TtpM*bRx7}-y8`fX^eJUHw{W!28KiV=Q*}3q ztwR3*$7Zq%UF$xA#Aksn{T@|76*;%5n^eX>Fmi6y|6fS|Hy(GBO8>erD%j`-Ix{F} z*P%aO81lB;ZEtjithSt=8CZK&@t+x(ueJ%Axk@K+T%ro1yo&EKOSDV1)~ zy;om(IR9O}m@*nPF1jE22L`*50>a5}WbJX5^am!*d%_%|Zv%OhsJ$&PI$C4;1H*Qa z@nY@x>>V&&?dcfY{S+RsbfRGW2Zm~s`*CsUVM_eM1MFF~CXsp~s7m(-#^opCLv}@0 zdRERKn4c`V=1QDh_P3$+Z#lBcgCc;+{72cHn)+u-{J+lgG4P+XI0mh)LRl7jM|V7m zFy_FlxM0ai<4P8^D(<-?;F@FUlJ;HFR@r7s&VZNgW(kl)EN&Lh=(QocVYZcx#IZcf z?nu6O#is8MjOGrW;IA3AKQQG#cUasLo~=KSG+^?|ZhZp>=p|EG%z=|q_kg@z9M?qH+pphr>lM!gfSm-WC)`ZqRw?tfsU zc15}m^j)cwn2l?n%47(~?G`i)a=7_CUM} zmKYBs-4RnhRo7&$CN_~@y$TqHP!ZBTm5yw=O1_H@o7#+CQ7>ac)Kp1Y}Lf|kMJ0?r@QC42TIH;PBF0`?SUav zqFX^TXU5*UJs)(sU#Oulhe}^f%2y>rDw2WTV+_aAQdTo zdmF9Z)r4+W;j9LC&=Y>_F?g?2A^Db7)sH@b5-Kt5+4C!`%9NPD#Aacfal_ec3609g z**Yv>{y#Ma{inv`Y$)-EHW?lNt$|fsdAjwTzxYquGbFi<`gMLm9X9^h7SbE7&AY`dcJhB8mZV-)a@JSc(DQ&m36rf%3MiXKspj= zYD8G|y{Q$OTdn8A)Yl8Ix?dul>U{?nDh}!k+;Vr?v3~G6evIj$^DX-x^y4LvVxJ|* z{a-^I1Hz!HpXQxat7kfNA(3?z%E%{aq}yK&fh@|QGA4!Y$0r3*>!V(=Q@MSlm}UHb zU|Q@VK`XXViXqa}GCVbgQ~qQ$U#=pJM#v286C2lP!`KM7N%WO1PEH+(>M}(bb&2Ps z6~`;N$rxI~9IF$0t!DGet_B^|a#BS-C|o)DEkK z{McekYS`-g21Ko88qvI0eAS+%k&lAP^!K?|esg9es4WsW!UBO8$hI*;&Xq#NEmQQbcs z|EEi-UkUn4K9RT^sFqmdU5W?{|6T!yjSJ|w_mL4rS@E?=Hy9!QY)H75287aIshz9J zAL;?t*;~o9$gE(_XW(h+>U)95TyGTlf6w*A53gkvI?j_WsB2~D3l+Q{%plaO-o z$RHEZEc1lo-uW*^=CG%djva{$kB*d>VnNVwux!If_xEcjZ2q}CsT`oJ?BybX=NOa{&O+;hPy4Q^@NwP&v4lO8@T zJU32NBDmSmc7}zjC#?YbrazyEkRjzkdYMvInK|@cBv$#RPnxsKPn0npWuqL@xgW@_ zU0xridb~5z51uhXJ*!y!C)jixKePivPhCISu8M3c70@qfhs4aFchK98R6$jf(E{f# zm(FbWDF?Y1_~48lug(qarn?YZAc$-o+QzaUaKFtOy@wk9Vb4Ci)9Oj?OkjAlf!d=l z4AV)FP@C3a{Dd7o7o$UeA>{_TAs~AV-W8qJ>z*-gxY0Qi#(PqcGA+CzAbJhnBRgc( zd}M%JSXJnU&n6ui4c1P4TIB}59t{1RAm`cdvsOM96RGh*s)bd#a)pitryeB`+JE#W zZB)ij5T;1;!r~^if^@B-xjs~%hhk>RS?3np&V9lUOP(cHlcj)#_%4;A!#1j5)yobu z_}xxRX?9*1l3jbFMQG}z%S1Z%eRdi!pH(y%6Dt6%C%E88m?tEmC8^eI(V}Mog5PKGOHf4td}w%p%D~MRNzj&^Iz}^;Ia8>w&$-q>}id_I_e-J(x)JAc7vVcI{Fkr~qFB)79!8adYnX z<$_XWXA3@`7Gva&F8z|Sja~_a_hX%C`PX?6p2k367?y}wly5)xt-5muV#<-q}n~Oh?A&sC4 zNZWk=K{+B4yJd#7Q<_DYc+_utVh|nHGVV9mlGnT{+s3#Z{H>@P_uw}z*wOca_=8%z z+{%yT{D={rkd4itpXIha9{Ay@j(Dp5YkV2rr=#~}_yUuIe5Qk73^Pv)`69L3zFPM^wWA+s26jW3&VaDV5PQb#Fy*Or2m)dLZ_hQoA{ zIzcwIkL3FUHi02nDu(#M6Gayh6XXZk8WH)FT&Y~sDb3Dium%{sj|^NON?xDWX#9TT zwrh>N#K{$^_R4WK%^B{&bVFp0MPpVx1F<7`QjiPi%oQDvke)I{kAg<2&1f6+>0LAV zBA2-m0^CIreSyoTGcuEoW>+)-$gS~Fqzvs?q~fx@9?W(SK%nCYmwPK1V%K%JZ+;D!8(5G{AaW>`zkjvJXJw3Y+Ij zfSTxYL`390+@~NX!)m2bRIiOxW(5rHs$p)yky{FL4-*HkGQCrCE%@J*$=k9&nbL0uSa6B6Mpdhap-N>%_Y_tuM%GxiD;cp?vlV(Pi>XVi}x-t_04G z+STn>TTmo<3zLszc;?_xx3b$|-U9ENBvt9IJG5crOx(S!)WEC6Qm!fyQ%T@L9a+^R zJA8o7%Hod3=!fGtgSeWe1n=|tccX^*QfGDik*!-^K_;F}4360QJ*M{K1>dv&Gnb*v zrvWY!t-@F`o+~^4Qw_2-JTMXanvy*c# z>6JFzw=9jwHV}v|=fd&ODn@=59U$w|d#(TkbdeZRqSP4%MtrlfQ95EGAwQ7O=nP!i zCzP%qjE3S0sgtGa-WGc$R1xBTX%#;NW^t!=&JSd4^dY^<3Dt1ouCmWmm>7O6 zFY}0D_%2sf3=r{5P4-8{ByhTP4Y&KTnAw2{9R{iCV5KTq`_PJL8_-^%sngE8ac1(3 z9}!M5bN9rtk4Ai3S?37B=p?Dh$2v;Syl_kWC76wbh@$Y-=g&UxkMAFRwr5-V8u@JX zj^OV4DOgB6o4wpAm-@GcNXb=Q>LvjK;C?VpU)tbz6}OK4L@(Z*>^#TcGz2z!e&sri zGbhAxg?0^Jgm>L)5fGxM_;1WU*%r%9WIqbMF;_ZRDw!CNhVNpVA?LRDS?ze<82#L~ zF*cB~v#Tr!;w$iS1bn!geZ+!I)R()@4K9XavW#@{!Zhr|ygJ8%bF=P2ZpQhPqXG#YX1P40d-Rs-IqHk$=|TUa=8>6usl1U&(8ktf^QSHA;x`g=Cl zFQj}YC;F~bGd?z)TA0PJAfdw-67t>5T1klcJ3^~!{9v)3=BPmd9bV#{&odaZl~jlq zl&qc$0@vKOHMuY>fotbdg#v||0xixGhy(}nGj@^0$L2b4F8mH&?@EpkE|GMqM<(Bp zG*Riu{!o!K@FklZHHo#1$NCw+8VAfxUI4F7tCzRg@^{6URW;23AUV_w7n&F0u&Ds! zD2gH&uZ@V~JOz{PJ1)@$oo-zLQ&FxUc~e1{i2WRrGpu&GF!uKO%5%$dUg+%MFKwrP zr7^ULxt==Q=CeL3I=kgjd%OVlVj5(AUMWHUUAH|MD2p%f?l8#e`IFrPfdQL4x}y;K zwMM|j+cp{a?DJ$x(XQ&*1~e|IRbmsNB6(z7k{Tb5G&zL)D+)_9f32L(?C5OIKJ&1R zYM7fiS8Y&OrJKryElogb=-OE^nEf_C%R09HE&Us=5`o@E0}I9%!=Y zxDaYpE34^vs8w6yKK)wPn|ka>=33|bZ{6M4AJU{N@7pG%#SrSFA4_>Ck7*7gW*o;# z_8)1kwfL8tN{|8Kus-v2oG;I+Wu>BRX*NhzZz~)PJZnawnBdy5F-?X;l6E@ z!G@nhST@`vIblt6hT(31+ z+&UMy5UBo(q7(p2K=y;_<=*1l-;RC`{QYCQUli*h(hBFmq6*f0(x>kUF9$y^xOpcp zD>wYSGeq*neL9AaF^lUFjb_?Dm#itcR>ij5Js?)BYi`)9?c-^-M+LZX)lU3~d$W*y zmg>m{Y!UPm5FF_4-0J%~Yafy%Xt+sC?Y_pWy1Q!YiZjbz*V|#e_i^oyI6AiK25jsy}&>nW|_r>&3*^Jm8s;f!NDOTlP(e!dM5vOeO(mK14Ps*979pUaReFL zEukdjBxum6#E-!1k$ zh3BAgP@&o$RHR>o5O_VM%9G%&hr`B+u)v$pm%|kQ2^}4hjZRpQmpW

oeS7andsUBo(PhxalA$i(S#fVmqZV*xPLgVGgi6` zF@e4AH@%_+c0pxB%(!k!@9J0mk3ws2f+Vs2&Sl7N`+RIUm9NET_10O?)(ZMT)uq{U z%RA|lMGC+puf(1L@gIv4d5ooo`3cD_a z#^6X{O8DOxQyPxue(lMiexI7qYICF9-702W$M=u=<<;r%!O>@K+aA0wAiA!SdyV`U z)`2x1P5iKv(DDsXUsgW2V0H5cCjY8JwB!XhQNV^4)zPVT`6-#!D|RhvR>CG+28c44 z1HX&u7xbc8?U67{yh%BKF#T2cDO_Oevk|*B^yx>izEUbqBUET!9TxTah!tOl<=9F{ z%-TVzQ~g-WXCUq>DE}&&2+G70QAn+Or8MZwxf0*Yd;VDRs9RN+=sMVE9Go#nWZ~r- zm|gA4T~Irela7Ov>Dk&Q;VM%Y!d|FVXhyb}SHB8KWXJ^tAMWvLWCQma?>qctQUeo* zTF{&5Q8|_$itqi00KC?|ZW9bm?cBwD8$$+#X`1wB8bJ7}MLAq6suureoc*%4&TZ_u z(g)%tuAkc=yL>R6xtrwUh`x^$vSnu1PQC0e;vbj00p~sPclxLM??pe-Qr&zg*0a0G z!VPYq+y)`@EfX(w_T*=OQGt~(rr`-&$@=iys@2OXW5%{lIF;gkk}@mII+;dYGLWch zvyGx$;tL6qU_uzuU}D@SV@eYk$MWuc`wSed-^!D*|kQh`s}!IOOji?$C%v+uV*1Nj;rPCWqx<-OGL}6 z2dQIr7>QHNsDumSRAtrd-7?va*n(~!Rln4bb=*iex&fT;HPKaY`<&$`)8-g89-mVv zV_RoKtqx!ZpXi=?j9UF#_6$U8BD=F~{r%cyB<+1m&?J=l{Osf08$edM8RO5gsuT8T zu{Bqe=H(=dnbX<(#lP3NU2`|IxKcZ&)A7oCId;=f@HE{fdb{_YOZS5Bh z5wpmooc5S0fF6_6Z=hVyQys!bDc7k&C{N)p&pm3-_$Ya_d)A2Ubzw~C+8ZU#@XLA=z_$c^6SO>NU+9q)Hl`ha*ZM}oS&{SXuxYqYICD=&WUv+?+T`j#b&wp zECpYnQ9prg)AnqeRm)h zqAUbPJq3@{+(e#jHFch^wFFj1+daG#L4CNZm1rWU^0)n1xs8`;qvRqGEk7Z8^8Hn(0e30WY?i$TGO9P7 zoNaPUqPI;SI&JOs`B31`L!cf2=(J(_V@E3>%f{=bqBXmHroR^FvmhjR&2O8!>6#RYH* z69z84EH2qrcB2&CQvEs{v%M^&XXq=C^GWUrex|r^~l2*)IW6wrLViG4Ev73=M^DXn|y!e1lLnv;@ z1f~P9=*d4WbB($i4oL2>tpVSYto)~}xZo>Xwm9lPCT zb0WJd1`1xxmk9Z#F$T8b0=;d^kRrxCWG!R0e> zTO22BCiN9_O)Y(bq?K=;_=cHDqSf-Jiy)LHZ85Y?(m|fCXtdGx%^iqwK?;2OtRX$g znMR*elq9~t^+Bsb?+PgWvd7K7=C42vo;}NNsElH zQG(631uL`pzCT)Y!dC7@gz)3qpZj`Pocxza=IeDYRb7Ila%>(eRf*48B z(cYK0JiC^=Aa`T5{BwfDV!@};>BVfM;X5AfuxxcND3e~W>ZIc*&-HD^GR(&v(^{<` zNA@3i-5CW(ih{iHBtYa^7`955#)?w+`vPs9vLr2kU`%a(RrQQl)=c3IFVFbAQAF?n zO244#f8>Pj+P!PpDE1}QT5I){b?A#icJx$oe_~WT{}RD>rc0-D8X)eRy`?qN@I3@L z4I`MO!M2N4hV;&%cGOm3(u%1+{V@3^d+ZB@y|{^qM3>~7jZQT0v=OT?-Y|xk8~NzZ zPsuU={LqYUk4k2dv1GJ}M^@z&*_e-66B@Ze@uy87n5$59+r56RXS0YZM66?sAVxz~tj73TpyEEL|q!x!)Z!%|DLD}a1lTe12B zR7Ln8`mvsOGi<#0-}y8o3CCg<$4C=QDn73?lphwfK25d>s^+>&AH-T^uMbmda5n-`NbJ+xe@$a#%7HA0 z>QdFxH1wmkJVhAG=mQ zgp{l{L7b0p^ZOcO(F%xuMdEJf+Q7j4`hW<9kA;8oM````|~G)ygl7BZE(@a%0FIIKbb?EZ$*etXO4atXOHCI>&fY$1AF#8SjlvcS6&$TtF4s6Qp4cVAwSEH@H{zrk{qKt7v+!zaxebyV>)%ho` zQ8hA~aExu(tyszZk~!3q7YPuqSJR-f%tH#v$5)9Q^G^p1Y%Zc`YsC75*~?A%hH3yhYS z)_~eU@H+?dFRm~bZM*P!OfBsRh=qgkuu9(wJ<+oVY4L+ed5+RGK7nnE{BY8PlnQV; zD45))?$}M+RT(jWizrdH=ei4peoF*9r8xF`Xi+WKs;1L8Z780#THraQqywE;XRcEx z;j*M++`NN7Frz+j8a8}J`|k?F`PyL=?2RwB>fx@*EiUSF)cZ6^1rkO>F8XK{RzABK zTlP_wk99mS?t!7(hnzb&P?CvIqQUZXkJk*$G5!lG;cTz47&^z49?%Qk?9$q)u!9Xe%LMAFVRGd!qV61B(A9>y)ji8H>L(&Gwq) zY;T(EJHKS<@~8?&Alv;kuf1dhD{bd{RRT9{U?0KNmFB-Hz{{>tSwwa|+OcKli7V5o zC+!-#TUAVUJQ2uRJFn&M5gd+QcxlpcJwRtxQSi&zxzCR!AvDBXJe?%k+?~ zW-5;_Ts|D?Cu2C5Nv>78a>JNcH_8y1I~y0dF7B&y^?x=j0*I=1Q90WQ8zEE|4^0SSrLsjZT|P8&XWVr^8o zO2ZD`6F^6CaN=d#CXKTa`Cd4D54XLcBHK`&p=G`yJ$&z>yJwTTnqJ1qcCmwv%Nl6F zS?K1{_`fJEJg~d3cmHTRPs<5+6*J$(zkG=2330_|?CAig@W^gMNY;lIB_lJ?n`Zuz z;Zm0>!=(&41S)(aXOq5AK)7K6m*S3pa&GfbY?L^Gv|%KB3%6MWS{#b9H6LwHCgm$} zk~05NM33pRo9fE*2gbLAtFw>T)2x~=kx@$G>Y&G76=r>8$}PUnDpPtD3wpaRc*s%4D7s$A#_rnxe-mwMPM{3-U2te-K0$D)}@Ws6ls6*s3^sT_~|U_ za~=2v?bWo0H%mJZMWLl}K*|m(WSs!9Uwh(3+jUjt;%ednDF~qDDWEQzT^H_hovvr% zYQOK@eo|!gfpdyXgpngC&#jTO=%7xX!sRo|O_{)q3{5Uja@EJNNT0VvljoY{-!OCd z3bSqWkD&zYy12$DT^5+jZyH=W!A6P?hr8lVUkn#6eEU0F4MYJi1M^`zOc1eqLdm>+ z2VtFcP(GPtuW5Yc+N)N}u?rZ}2>KLZlmWC>7{Zk(m+}&PTg!|pNtX$P9pyxVub5V&$0Ej{WEQ>f!P z$*@BUT-2NGR8Vr0{n_UAO-Cm`N!$D5ePqSAbuND|ra-8Xe;vKPAgGAf_Vd4WP{ein z_SVv8fZ-SXvm;5@<=`+qJ0L~<{8wFr<@^{ff*9KuEpO}TXm(h89f2aIOGzD0%@YN} zr3qoP2vN$JLDzk888ogTesbYHO8#VW*vytj;prNCRK42KC-&IKQ?HBTEVk-aoOx}8 z5JqJ55TKFymj;e8c?boz7u*Q|r2I8#3O!A7iFsz^$7){~$^_WeW?IG1NJVAprP+@*N{H#1cp#Vy*WNB_ zb}gXLPAn4AU+|vdwE6NkE?U#6eBV8(W*{sFnnJi%bVURPeQBiuGkrFHG1^zSnVHAT%*@Qp%*;$3XCpQfgwws8%yz^?XolSp`H2ghp}U=96ma?hgmz>{7!%8%pBjZwUGiI$jVUdIPK+V zDN=gnvs;!A`ZJKLQUK~7*w9-jXoHIe_3x{9!krj(w(Qwb!Np28dMLZCl0-;T=@6`yC6MU4SRD*0WQkSgkvDQ$;Jt{kJGXZE*25}&*MOZe!FSf08 z62L0gZ`4+8Y~7jcCEp=Xil$l~46Z_XxqKqpS>rHWViM^%AEjCn$4qQ2+l^=}rgJEW zZrThOo%LwBa!Da|gtRhbrSs@sU=Ou+ja z6-5V&~M;Nz%P-8 z@ZXLFt-kta_=@PhI1NDFsh4z)?)0UiI5>VY&PtsbE#}8((QwV6bP$`V*(DoR0&+*G zw12#TqqYZ6bzpx`m*Ilp+oe$Su8#WzF^{lBzz-xV*sK+F(PY^iW&8tk$yqW02*$~> zc;@zSb&5zxmvcG3RtdU{J%#Hf(;2U2f^?ECp^@mk38d<*s!e*?;aiwG&uzUds;9#K zP{ea6D1SUxX>ZwcwyWg-*L(Qy$}heQs<&p{JK*qRx$H?0QEi@abo=wO3UTfT&)W`i z8!TAkT5#_y%Z_)Fxjqo_cg6A0WqK}VXkV;FkrKz!GHdG;)U-_!H_ejFlD=MOi!D5t zSB_o{Tcj87lx;dFX#|wI8Y_wi2=4C>IYJea&@|}K#t4F~)pA(De-H20&)-wMU~A^P zz@4*WZquLE|AntUnMd~Wa5okbWGiv!Y})IhI+;=Aib2WnrDY^!-AF5CXIZR!KU&ZQZ&UbF?KC0 z*YefSGzA2Bf+Jd--|gmIMHxSMQwz9B+}zJ~E~8MLC}1zxvb9#de!;h_aS|uV5xf1e zQ@`sRy$?I0@FrwSCz^ZdcS(gT!xk7DO!vPGEPHtbM-ExFJ?Zh)^P;%N zYgz|v8F|C5(X+{*`BUWo?Qk`qHD*u;CVZ$IMW&`UU3MR#@HSGqIP>mCao*tJH^c-^ z7&D~(sXQ$Q=g8+fyp&DZaY+ zBrFUoEV)*l`e-(4oB`MPCov+j4I^#0JO)Y|KPdG)y21w5_lD$Y)AM%E2jajD2S~w3 zrb+mxw`ryp#*H%j)y^*@y0@mGQs1yuxHI-@6ypFqBAY~vTU8Ac|7XvmCc)3ymZvBc zkSaHMuDKkxD#x}w+V&xUIN;^*T?jOA)?pqH-;{UOc^7fr!Oi-sbyHA;CCwGZj-Yj2 zD*rt)NrbWx*^ac}O2!z!2mzze_u@t^&Z$L9cMc0c%A!Nk&46d4w6gIs_J=$`OnijK zxch8WdwyLuTOOfjviXv)G%jKlo0R}WHcA8^dD!lxgM@hbdfTaKTBkte#*y;2)V|)9 z1SC&vc8i#R71b?8ROp5DS!{!*#`Z1e}NE z)}(>xh%Au7WE|@MGvMX;3Jq{`XSdaTJLPVvkt=_eTlws}sPaMnF#pDuopz92yTvj~ zq$D6Y_5LL_)4O8>*l;Hw*DQf#S4)-Yfx3{?vASV#Tz)Ro3+PNjb8VjS;)_*p!a zUbkw->GkGD7Xg*F#Eba7%Pp{_j1?EId>l_2ca$gP%YSIV|8BOMMv$oMa{x8kb1sEL zh|+aW0ws4}&pFH!d{3E7wj2qKMtk~a)Ng?lQd_Tj#nGEz{lho)x#&%Xw0s)WbQ5`f zV65Da&_bKsnAE<^y@|_ZA_0b31YaeTK&!1K$CbA4_G5>8%kEd;PpMfOEXN2K@nOFU znx!W;epQLNZ|^9Re9JPD+Hk8Xm0QdR`LhuYIMp=V6Z370-Gb4|UDc&cDX2>*Hi&$+ zx0ZT|=jhOLO_DJtNeC3=Fl>!7uz3i#v^aNM!VjwN65{Yuu!69rkk@KCCrw?*$&4!i zak4mOp#1W*a*cI!0dvwd2yy3gqcnMw6JhflzT7%G9)-ZI7s-`IiaB+!-0C#AaS)vY zL4~AfW-|~J`9P53q}eWu^eIe6$E_lp#CT&gfbAt*RcZcD9%6oSRswE^!m|C_w`LRq)j#c{Y$kxzo)=+3$i z#yOEW)C?P|haSy!=t16^9@RC}LEhZ|q=pt@f4mwH4S&yt4700?2fc_5B=*RW%{=Jl9;F%S7C?(+>j`k&Ne+UE5bcSa5ou5`M1 zuxZeaf9hCtsbBq3-jvM8f17gbFAwjNJk5Gz_DA?L2-+*;WXpinV2&o;Xnm>ashYS} zT>()CUTRrZ3D4G>tZ4uhyNSku$}_)+W$gE7uxW2bCh~^;5?<()m)gHd#|Wci+J_n( zgAPN-?2QgNyk=Nt#HYts#8-M$)a%=CIN$D&Tm$O3bX-L)wImUVzAq?eTXmnNcM(hN zd$*oRKF1?*<$C>LF7n6MW*yaKHLQ}G%cpzQcPQjp-0PLG`;{QRjId$s2a+(rm|j?t z23#D50buQ;6W~~NPiuMZm9!Wbf0Igor`u@;YdlGobafV)BLh8Y-aP?LgpHmHlhKLHuHQ-WT`HS56NfX&&f7rCn&ikgBB% zk1SXv3K_L}@kAgz`#%#eU2Atlap`k5$MvWRw#{ePLpY_V@P&`7H|=(Z|Mqd-?zH(& zALAe1|A8eWze((17QFXOVPl#;JC2t$an3h!Aai0-i*uelf$)2k-Y*;Dz zy4Ahs19G&Rvd!P&D6nlrS?|m$TePy67aXKMS#Dun-e8=@Vo;H7LCmZNoI4i><-u-t zqpCj4@L+4u`rtclYsFK&l=M_3=4co8#Xqo_DS;-mlv+kih|{HAhk)(DOZqA8-CE1G+#w#ox){|NX*&f7U;+tb2xO|7nl>lfIK~ z`A7XnJ&O0b_d4{?)z8%^KkF~+5dkJp*$4Tc24&sLPq|Nf)Sd90bgMrSKI+lD$Gz8K zevbL9MtvFgT95QG?Xn&0X541o+yDO?`v1QT+x{z2d((XympJNhyi0p{FGdM|iYs*7 z+x(;h+2(VVx7rtX>N}7Tc-8sn|B~SqQt%a zqxwOEuAAyYAIRJmRKKsyUaO*6#ZL*J)#(4Jbx#}U?2p}h9rnxi|K8zLN08#GCvL{Cu%(f>06%8}Th!Qm^aji`V8zp_DB5<#}UMY)Bhlj{fa;A&K4i3{T= z2d`PlQ8#5t68y(4*S3dRa0vW;9gKi^TBL<^@q4u#=n-@+N=PxV{fL&4K6#w}uZJ6f zT#5%@3)4gAp5I+MG@kC(GtuvyfSVNOjj}xUd+lGL{l@#CUiEADlo!j)6S+lvmBTpH zi7Igf-zY{c)}R3AuWa-*|3g>gr~5y!FS(DrLr{N3KJx#l15v|iQ9x91P((6lP-HRC z2MiKK4M!zm5>hlo0a3yW??7De{d;0Y1wn)VTQ5<7kX{W>DMN|CS$(Na`VVEd2c-0G@in3FC)QkKF}(^oRIw)lPdt%LMNvmATk zsSU#@%j=i=AW=pBW`)t?50B$4s}=om|0755w4jaK2=fS5=+FgV!LMD$QAqCzZY(^N z!vyW;D6ZLg5k5^jlj^>C!laV?*U{Ft|K3my z0D*z>ILoE=rgP=ML*kc0C%sHT%QDM`(?ktIv`&f=;Fx4#CM*`sc*6n=+Fqo~}w zNs2p36O2;l9k`Rn-F;xs=KX~3{9P_ibN#(#zt+LjmNeT1#UE!*Xg7PYIl6X$;>rMr z&7qYUf;5=kw7vllGr@IU93M~%druFm40mc(<+8K^ZK&mGu}>O1^$4NbUN$BYZ7j0X zYMhS3SD34KhO@|`s&-N~$AS*6-JZ+pfToUK)6dm8D=83TL3}%Xz9F`1ko>}kfY+{# z3ywMvlS*8R$NFAhz~GeW4z_Gna4i4!Gg=2}1m*HT%v8JJ_ZdqrXZA1wwpH{c4vDVa zRR>9MmD*hO^+4}^0RtBJVQs39BIRQ^B!i~|?-F+^bgWu`fE&)WQg2n1Hgxb@x}+Dd zJUP6C&4H8z?8#KH-?L*v8UI0~!V*HC!lTMg+hGctnvOG6K&t=?f^7syP?@*U^=nwM&H*+uiwnh6*gD#_Zab9{3*>}wQes}_8!@eXSUa_ zj_vpRoqp`6{pOR3CdJf7k1Ek&lYEFqw!J$fhf#&pD`N6N#WF<^1U`iaURLno6p^J+ z4jypSb8Qvvo&L`o8NoLWfpg?WK8@Ri2Uu(=iXncO69V0p`DV z+RuY0Jtuk|hC&NLM8)Vxc1m6$joA>bH+l4=5EbnJS|Lp>Q|)ar^lDq!hEXOxtXSjX^c z_v9=BCAWgelab-{guFs527ryt;NHbs^niS;HBP--5Z!EXV@d*@eKA)(8O}%%vkKs9 z&qf!)&331~t&cJRU@F{hZ@2ia+3Z$EjIyyuXQJ}H2-U9$WjsH}{Y~pTM%-fT=oA*Z zU%Sqcu6PTTgyM=1*TlGt2zWYpBh^!hKjNsmP zCFM#=$~HD;2KM4wYzPu4b*FXPM6LI0#%8S` zqo~svg<~1K+nkI1h_I$Ku6M$I*Qu^_KC_GwwONnCOv8HWj~fjIr!tO9rXp5lE1hlj z+)alvwa({oR=Y8|^`-h+wY%3*SLE61?GF~T??S2qnGz8@{?$VvafJOJqyADBK)6^r z^}jN_Xj1yyM9*`?^i{JTo?n#$s}z5pL_Yi{vh1X_2BmE z<}Wu7nGHN3VZ*>-bY?&?SnA%TWmdfBDPi%E4R(g{pK8+c$oYwq-Uo^PNHCf6#+sQa zHWusxQEkbl`Y|UQi>ITBUD~=ILg|4%=yl6{PsqM3_&wox@0=6mV0uc$r6}^7ZJT*in$O4i zIYC>k4%|{fYuuM-sxUOS)Iy|2uplaL(fZe%VE+~PwSx!PA7>gc$l@=J3HG0Jw=pdH zK42@RVxkTu?e)PG9dXe)^P8hR5ACW{CoHs+cYUAt|G>)l;WDc4{6(6E+l6&KzWq$6 zM>`J=F6sIjm`yg9z|LLEAyys8y zrTxx7@Dbo-f~;N!^TqP%q}xqhW(E`IUA*Eb&OgMMpqPl>5S8|j=S9jea7Xprm9U!_ zMwtr360yjbGZALc4m7O;A5<+dxR7W4WX!XJXc%u|pb{BQ6D7@!g7afmTKr3w9jV3f_-J>`Qi(R_GpFwPmd zTv+?CT?EAXe)tD=>SX48k2J3KOOIIl#$3u7ceQE)GNf-*Rn+>Nuqf4{;a>lH^p>C0 zeJ>L*N~bs4DyN+T{l0 z?}?yW9T`|H`p`;`nPUK*p11}MZIH8h35Kp?to?JJWUMgdwaFfkDa^!;$LeFU;>4IA-5m5oCEJ4&4sIjN7}cL38F&LYzKa&AhYDLe zB{jg`d6JP}!i#-t>%1I~jq}M@ZI?i&TTCS6?cf>i)FA?`o+_O_;no@m-)DcrEv%p* z>w{~fG4MHQ3?3m}E39>m&3v&J?vz`J&w7+?e zxS6Cq*M2c~VD{Fpc_!Jls7stp9`=#$uCqwa7wq}j+#wul0wA@nQU<%ihrls|g?E9v ztwSm1bV2FNFSnSsAV?{Ggto#}byanlKW8lJH*9UI?kTHA03InlcPOu8bLu}Ni`{tDlu?T{L*Ib*x( zw`-Q<);A%|U{`lJb}Vms6iSTi{Rl7(!r)jO2?~WuH|4pJIc$R|2iHXoRVaa~#K`fX$ zJ%}9lBvV=W*!|8&KIJo6fM(Bz7nL$D1kB4b{H>rhf*z&nBc&TtTg2&49T?O>+p4Dw z+eO`ro~*4PL$6^;rIAK9dzo4g87s309ceyK!J^Lm7w=z#nMV$70g2mc;0X6X>xf+`qTY?dS}!8eLy!gQdw02EEY-pQPqAGzw6oFd#D zNq4&2Yg7ecTHElC4RuQcA$pM}lxB>Ii7zSAcut+Z&O>z~`&W?ezL8)t53F;$rB`_{ z$T@!Xr%lklx;sG9&a{<#5V0T>tS23?AgTIk-h>!3x6Pn2xm*_+?i}o}V4rhkR&cyp z9xf$o(ief$%|7^@gVB;12XBIz*akP<9eQTW{gJ;>o1_krt_C@wAhXIfZrYqPGX$gI^-savAIqU-Pg9kQA>vdwl~qxuiM%1jPv3(7b53iTov&m!_oL%a z-jOTo?)4>4Z~fxe0hOWSeXsI^gq}Fu(2%SQDM)=X7Lr3k0Cj>e8TC-+9+!$0Bh^Z^ zEVOw-la~WAi5-L9)m$n`CZwOX#>TfJCQ#!P@(Yk}z%}IfK-Q&={jIYTq0N|4T+)iG z#MN#+xSE!W@d)6tIz$T@KabJ05$xai)7244j5-aQ$+(h!@^7#YM>Uxslxyw*$gPZ0DM;k);KTV!lk}5!9{+4_qWA`NByD;8KF(g%~bj`rg8S zAYZ^`LE$wweybZ4f}jv33|Shx4U3}x1@rAj1Kxb$!U&n1(d*Q z0ExO?ffaNJ2WqYVcQd_4{SFQS2B0gya&=M_%{))Sp0i&=;|(2>QTL3HTvj}nB#$J- zlWV-O2TxjhN4CCTh+1(JR&PhQpw$hj0u4dTgksmWmx_i0=A+S&_9J0FfE!Qk6F8Nb?2k^X|dC{(iR%?y0Pa#qesw$tmqG%1koi3$6pp}VFj34C8NRZI180TzRGoH{kkIWOIMgYPA%%({DELO1+iThN2n`-rCwuQRo@kUCro*og;wbv__9g$K9Q?l?`L{3A zrIQsNaOA(dC^R_mNm4GcnIhhw4-D4&XLA-2MN}9u?P@eHgz=?hBs6%XAuA}Tj(*_9 zuDe-!K#Y2xGst}umC@5%imlW*y*EE&!(LHv#lXN#Y7Jye)V$kpAhBr>4mcxkXY8}< zH7%~AGH0}*R~4z5IRjb>6m(1*T~)-mDr8p%O-@7WBENB`PkNj>7oy&oQz5R#Tj zpNts6bB9_i#YtIBD7I729nJ{5Q?2e-HAaU}mz(UQ`Xb%pu~uUWGX%mEP&kQ3qvecM zFr09)Nw}uDN?R;#6NSHdU~x|IeT0AC#Q?d*wIu7n@H3+ zf>EdLDi=};At%WBC#bW*jp3Ke;K#9H41SF4A-GXN8h;NaBuCP&bb#gtI85d+_-qZb z6`Xs1%It0q)u2W7|9UQp)6a8^4a31phvL=$ zhk!$YTAPm^mdccS$&>O3Y=eW7gy#z#M>eCvNje?U=x`btj5BAPc6s&XJ$3-I?;AmX z47}n)g&|_AEs)+4)w8~vOp1pU+N6MSSl+f z4N+kq8|aAQXkgpU3~SA;_?j|8AA0~N;KCX@@Rw*s6sBZ!Bp7M1)%w=_7xlNTbj%<` zPttyd(Zx*xfw=f`mqg&0#VPpH8jWkFCp;V5Nn9%=~VtRQ{ObYpaG@9LoFtZZPAtV;Vwqi@UT~G5o=AsTc{Hx+gjEE zI1a#Zx0la=pO^!<4Pgrv7QV0X^%Q9-;w!u6@xBs%V8j1c(+V^EL*-!&5p?72Mal2x46k1K5<~JEc*M5h7jKBQO_& zI3yd{W0=J!A%lsVu&`+HNqDe+KAnc)98$fe8sU=;EM1hm%~H-8YO3U0@?N{Q8E@^eXMx4o=(e);Lm$5E7r`M|D0U1)WcNN2q8=st2R7{OlbvdoYNuC)L>E;+SE3VD z!BYj!Gm}d&u$}7nEwUr?kNTIi>dWOGDV2V4fKFrk!PAKkoKzf^Rpyy+%x~Ln4VUM=W!8VXsEd$-yIh9!!3Q*%u720TZ^y-1!HRqiEjT;mNw z+@{Q<0@j;3o83K#tGw2{y?4nY;$1GePAr9ydU>?tFQXtSx33vTNhS+R_COVORXBB5 zjhZ@%HZ+$VZ|_;~5uU~3f)#`h+9SaE%9tvhaUO@JCLGL{^z-EXc*Trem);I`$BZTZ z%Fg76SDD`9XY!r@FOd2($f*(sY_FoPAAqWdpc5nQ2w68rnB(kJ0%$7->Igbz+Qm!u z-$3(qR~0H^Qs{XP<)&8Gx?&A$V&){?0xMu!dW)>sQ!vwAgGr)~9^TTCjTVv_IhV(9 zm}YcE9@Oa&yC0c*_uQ=zaj*t@ar{|+ABhlnb@ehID436{)u7W|O8mhL23&$I$H|&j zm+n>YjxVEhp2mPS{lP#Y6s@h8{c0=`hs7$q?mwNl4t`p9zEK_3dYe@08hsG=_Rt#E zQE4TWW(mp~)Rk0GYe1QcjQ2&9^Qg8770^d^duUBC=e7=DKpy=EUTR@k=a&UK*!|1n?Pkk8~_Br6HfV{=4A7eqe1n^!oTyI zx(dPaHx8cDwD2RTj1^L*Q&mL=)Lg~;5uW{M!dS%EeoUM6!)6|H(9QT+F?it1Aqkqt zj@E<+I)p3ap$a4pHihyC(qYwS`5n|tkCT@%G$RQe35lV(Md4yk7#0C=P_06hTHicD9ovf`41y=A9nCK5QTJ3=C)qB zeln@U799sp$ffWKT6b2{a&nBPZ9x|jW(mIGYozB2gkztJG z=X*xEiMBqL`6XhRy;iX4kt}<84tof-UA3L!hpH{B=f7jbx38c{%ael(Fldfj{Y9(XTyPLda zz2|34<0C+gY*WoUGd5)}um-ys`fk}!q0OWnvTSiXRj&72pE!IHGp0)OA+o~@+3z4U zFKN=OH+SXDp&wx^5}d$1hYMS!@Hm2_`o?ju${5R-W;*taxMY3TLSL;#}#g z*x7_xVV2)mniqUKOVI+ST*HP+L09+jEj4%hSd|calD=krTkSgTSkMw5)eJbFOX!>I z${PrtvyFVp(R1;|DD?bYMKhiJ`=>C^XM~DUhaTFLsX@H7Z5Bjiv>H4izyz@GWIWHn z&emiV2sJRZ)V&Z!Wwu-LsTK?lw!Ch93XTwR)7BPx2UxszkEfD8U9eruimE)5}YgmSMRR6YXtWh4H%pjQP;$vpZ1x8H&Dw{+SY05BAJ0vl%McU8bNRU>tiXX-|cB-Zb zDDBKlkK+`H)gJ%WveX`FW27z7>zSI78?-6&Xr4N8@jXse#rZzpqEb?`jM_2o>91)K z8RYBoUei*Jo4c}3~dEC+&$tMd9}P9 zr&U_DkyTdLO$rNY23iyaCC=LA*b|5)An>NecG@CintQCZSv>+8*r#>yb6W^F(Aafe zE~-O9e}-w?bNweg4r+zdD2GnHX_8q52dbpP1cH1g9hd$G)gB#vgXYYMxo2F>DZTqd zE;-ryTRzu2#i$>Sfi-FevZbg6wr>dB0JY(S8jSHgIou=cAQfM&EAjGB0+Gbcv2>`z zB3qN6v!xfNy%d04Dh8|H(yyrqy6VyN3OhMk4CeruD07!OR~zJ0cBQ}N03uhT(?wBV zpb&IL_IbvK(DzMQnnxtvDMLW-i0D4!94%k$rb;&mU#Q@;T9|wc(i78`{sVh=a8(*M zga^pJku0f|oeW*_$0d?&L8NVv6xuI#HwB-sIP{i#@PO~k`}|SAv2^m~z_XyJDML=; zjsnR^Qm*xyDu=&<7|xZi3$Fjbb}dHhZ2p0v;PMJ_Xd*?7`k}Ze>`($99%ILG3N@8K z;$gJ_++Zt=EB6a}zZ<9(=;fMN3rYxr+C9QApkWjm=jVscSZ1lRFm6lK6V^U!rGrg~kZYdHw#UE0Z%+L*-3oDR6aw=Ssrp}H}yX;6*M4i4B{uIkQ^ zdW@0=6qDNd48(E}VE7uK)}p3`=CSg$E5dp+`*jLkB|J@GiNZA;qecTfmOA^;=L7pC zesS%OG>U?0tZJBMrK(R^(%Aa|aA2^r>*S<1+$$I=)vpq`TI_FCfQ#WAqo9xn8LC)A z%jV|}6MB}q0hWzdJ|_~%Db-qC=U46-c$rLqItdA`T-^RD$5c_1-YZgJYz^CF={d%1%I{?6(9{;|vRzyp-Z4|uschG?a?3nAa4}3TGGx!L`BC%*^4Q)Fa6%)-c& zy3r8&J%tjfNPJ}Nj!7SyM!b%V7Jw%mO|PSnYGX=cTjpq_#NSYyiu$gS_Qo^F(!y32BYyD%F5kItg~Hj8wfk zA3gy%Ek_WmZWFP2musbOUwtv)6CCX5eR*$e)>>AO)7N6n87VLPzE*uU zne;lAvw}Hb8wI}mebJG98&V8vEMvEtHjH8H$-dghldjF}xotzK_H5c0YRvx+{&x{8 zXwSCn_iTn*m1BIp?Dv#`VJh|AdiHl0Qyn#^S!1sfi})&l!%eWkq*xA9W`B$DCU2q{>c$E^~^3hFYYyrUS&1k`JC}h5<=PmNkCo12J=C{8V#)r|mzC*B@5>5FRQWLxej0OwLNI7QBr*Nn07X84%zN7{{;e z{!#}g#=wiBDi3r8Pozw-19AD)=;-Oyg;_RCF?$XX#UNVOlM}z|+IYq*sYT6}R4Uxb z#KXYnTp**RwwXEa^Et5JuhXRfuhvT`7iKN)H z>2(ZZnsP{pGIeh=6HyeI>}9WqRs@*hsw8s9er>44W|MjD>P|a6r}PM!=~?${)!6w_ z^_*9$aD+fgsf3JXMvZ^2ooHuhH51~|#B(JIB{F{N<}$##R(%R-0rS9nv|c!%jl{*9 z&-+Vy_vBD|zDZU4H2O23j&_@Wn;2c%513tb@bMA_E=J5T(~PQt2t(nQPQ6FPyPVsX zd#oTE82piX1(*BtbVh@eQzeEWn?G?fT5$y8d?ugINU$oTpbLqR&5_G_|AzA^)E97eONkmsufO9|$`bi{osRTNAP(!m zBZeimH_1Iwm}la#B8PG^^lU@Osx-rF3G6Cqpa&OYe~+pC4uNogfhThwgGyKUDu>>O zBTTRVt}t*`g|vK`3T47f3Il3IV{xBYFLt6Fi)q4P5Wy_Tg@*#70M~D+TCsD@SYfWT zaWN4ZpPoE)G@q4IUP&n(=3}bJ%BO&K7k63Iktlqc9|;Y%4hElR{NiDZQ(Qx}fvtDM1B-W3WMKK+JJ0fI^vFOH#C(P0ZoKC7Rl{e6`!VCN ziwURP$1WhU$>xLy<1z|Zvxd;qxd~tX&1}R4kg$j-JW;B>(xqc-ga3j%t2=3TQ*OQE zj8dY0+6^DI`?n>1(bk!<=S+>&dwV2D!l_hNR4jRkh*nz2wSTv;!(d;$ZPA<&ZqcMM zR^u_d*ML7atRZ=l(jmRIb+fgJH*j7QdJGrjaFZ%&tnu<1?nQj@-S&a z8|?B7qo&Nk+4@-SDKRn76OR6Y;jh!5qYb?C6pTq~r^E2WjXn&o6GN8!yzBmX7wlEZ z$rwAqy>jjBOY%|Qk3e`cVl>svgg&|D4Ek+j09}Q|5;-JRXlU7qh^6@g`&u;-Put1QFQZBzA3mRj+C)f3km zQ)NH}R$DBbJ!TOQQ)F}1);|>{4r*qU?vAH)GHy@#Aeq!G^2&f{5hECN;ade-;=@dc zdU=F{(%&kR6-P~AvR${t*hVyY+H(@)dTE7JS{uVRyHGH3_2N0PCSe4!a{w7*+44pQ z1XNbYp2MoO*s4$qZBXtKWr&)nqFxZLed9)HQ|~$|h{VeU5XU<}*D{rJAR@(ZJ0}Ax z*=j=;F<&DBygZemvpT&lq<|8k)*A8;6EasFMUA02f!t%1c12;<*GMkoZ_?st@p$J? zp^{{rx`s_F<{O$6=B(}x2YO57l*&cr9&JgVsVSqCe(>YFA%a)G~W=N{voTEUGiZ)IxC#bgeH&>zxqdd7a?!r?ZINsLI(DPmu= z-NVqQY3OH|4km4U7h7k)U8x^phOhFUv+uU7hf_B=>3x_nRJv(P&6VHrh)9=g@`|6_ zC=~N-5IDmWWp!;Fy(MG6D)&xt2pEooKeFiQKv6glUugKdTXI=IgWdKAMQqOFoMS#p z0WU>qfurLB|CDu*mZCR&bMwd1PkQ~ETYl#<;GDXC+?TW4tfJu^QJBhukl~M_O*p#Y zL3lfA!{jo+E?8qz#^=$oOMLbQWe1Ruq*is*;D?iR{ZeH$*M09>`V98EHzd%$8(vGz zM_o0V#XN1F<&Y$d!Y<}x%4Ejd9E)w^(3309a%cxG`Za1~=CW^E?uQOTwm_ub70cf+ zf944bg}aU!J_-tae!=o%te1x8 z2;%b}XT|VZ7N@x31p^xW-5FyZ-C%|!H_N6WW)@dGk@zHV5;Orb?b5L^RPz$g40?94 zs3Vnt^Svtcw97r5qcpVNy>MruLis%KUJf$#^2#dgFOGz=g{K#%L>Z)q z+klp%5G&Z>4anHm%qBC3M;L2j`29ZSS*npmlul)C?V5YoC_%WZ)eGI4nYR>yq|@;? zY`n~&bwcC(Se6JE_M@onjP~POcm$;DW$C%Pqsoz`dp^cWX_5PjOGbR9Av>CzkOv?P zvCBi)LbWOts|K>{)Hfc;wCO)SGEB^C9j2b)^vg9@fMAZKLmm`;>=q#PW}D`7%GMgS zZe$4D>k|=k0YcDOo>sSe$Q`bTV1F))j8*nJLUXTnYATX#W0x6!smz{Bvs>7YjYKa${t+K^6!8dGkZXnz0>Uwdc5Ddq-Ost zy-e3qrP0{h&>n*$a`Y#Q@F6%ov!Kd|shhiwc{$?@6n(?MNkv+h62`OQKn7M-Vpg#) zUF@u{P~1#vhEP8QuJR@dbz?$&L)c3i0l+y`GBifddDSE~ah|TL^8`~%31SkzO7v|(5J)9r}5;T=){k4k}kJ-XrFE~ z;Xpf<>6J5E=#U^261$I)2^vKUpM-5e!TDsP(8sz@rwT!LHrFWC;zkk0$(7LpSl4y` z!~-#Ee&mNtxO^ABSk3sHfLqNB=+3H9b&FDn!qJ-shylHz+mLW&QcN==d&sDp)R|N- zd18F{7t^~^ljfQT)PKxLH=&cJu35#A6s3S63zE3g3%pz~@kfllSSC zj`}g7y_-BqeDgQI`*4MMS`Y6x=?oZWC%V3CTj zwt_=K)mxlvLue&4+5jQ*_Y}A}ZMZOgQI2j2!B(hiO#ijUXqi)Sj|yc{r1kL`vDiw9 zEl~u<$l!-==|_#Ir;c8tl$%4q?e3s ze~Wr%gq*fKY8}fdTFJ6{oO~`I*I+wa=dL|p1M9)KUOaQe3S_O3Hea&nDUaHS+hq` z|GPzx#n@>3XQ9q-tEQ_1R26E-=JzI*Nu8R}WMSHZ_*&{Zm;hxOF)LWc4x$?q zs9(R%2I#Xyg(Sob!upPXbR+Y6Se0J|5Azaqb7aQQ(zY+(v+xjzN&F0V8Glsd9yoS$ zzl8HL0@DVrrlZ*Gq5&H`8*#OzRWB8`jBW~9p^l;|+%`z?Q-VIgF=@fhahTuin`5!E z&!MH%wSo%YUovefMDMnP3F7s#$e)zJB?+L@5miXRBV3 z`kh^6JwAM=a0{C70tVF`u%=o2YEE09@WWTUq6PUNt zq^&_&)XiO{;jYoG!D6fASvq|LE)f;>5%;&0RTklg!Mki%^BU)s`|BlMbJK63*VBlA zj9CWMOfxv)FATbecI>W=Kx(fm7~v&IHjj~y&vyVD7$eHdH$-VD8k^#$hqRm?yJ`Z~ z6{5%lk}87snqJ>yTV@1PFFzv!x2ov6_dP33f5H8%L8dXMbn2hJ2sx@vcvvr3S-688 zk&0eP_|$Hd&V@c{1;Lcyjd6OnDL@G5G6wlyGhphxVw`rNG|dxz*3!9@v;bD5)1zRV zGVdaD4(N2+nr4+Y>{BA1Czm==4^vgHI}KE@V{=*BGfzm_EgW`%CiRo?0oZE_Ih>gS zE#|H<$4uXtjxBO_*Co$ruCsVAp&deX4dP+;iJ+ES3EO^{5GI7;H5jy4=i-TTf&-hb zJit8%9ke05NWZn1J@k`}88MA}C@qX+)dtfFJ#VQ2UlDt4yfy;qM&`{QeS2R3<$~60 z|22#q;xWFN2{HMctN@OTdEP|DTM!Kh)P3qRNd}1r&(6ojl@IM2Ot6XW5>nl@;6Nw8 z55jL<3gcl|j{Zn+fLB4WHS@}5u{@3Y#-1U=^~_= z6zz${;*tPf%*477}$>1+#tT@3S%{j_rl%21C8H1P!43 zk&-Sh*4r_zwp0+13Cn;Gz?>XtFlRnCB zkx{|scDCFO&~F?Fto|5;h{Jk@!`P9NxPU*1f?t8#?B!`YQX*GzG?%S=7p}o1fANfo zid9YSFb~>_&fSG&g!=qyshjF1tqlT=gA?<0 zvJ!ZYf2YUc#Adv5T}ow)aq&ImQdW)$fk_ZZz+vRwjYR$?r(fgyY&@t@F(Od&;y>#EZR=7#m`50g!)Y?)dSb( zh_X^36>Cqd;O4yT@5JZ`;koEV{xBNda1Yc$@jJ6H->M(qy^nn}Ny9arvE`1ptdgI7 zQL&D#+wc|Xm@|`3fl<^8K$Zt%9|Uq&Ipkn%T@>GuTZ%sbCKar+#;t9bORSm=&t$! zu{FkK>b8b^!lW<|IvO#<09&KgvhbrpFb1Qz{65G&&99)jmT_cJ@mzI_4&yBSEPM!;`QVbqnVNN4(vXCgUaWUoRO*Jpdq6dSqDInYuTmHw~+>cbKmEKCZ zug+k*qP1k*w9Umr!dq9nAM0su2_4+@CMeYfT{!-V(KcgPuZG-UM!Q07x+DJwWp5c2 zN7%Iq5ANzG&zIA4y#BtKbhf$?_p&9(yBI#UG?)^w3~_z(0~>qc{~UJvoi{O^aZ z9&+Ip-$tunpR#K6{TiD6dp(ydg#H0)gwtQ5RNyW$^zpPytnmMSMt&I1%o-r7_nDOZC0mD4ZMXpZ7 zgdCYzpOl}cV3W7uWY2S7_8}HYYPAYK+FLcFDl-KEtlEq>#k*_xOJ`=$IwS~d8I%6J zP5Qrw^^9z}uOaKd46uBZPUf%Z@aHP>y>E5n{wU61y0MBO`}qTHQPKW@VnT6J4$!~)VlPwAykomz2_0V%jvZHuiV%}Yf3%y*Eq4Y*e?DU zEXp`KZ%rYNGwdqgsJKPhU^-H60fqJZ^sh%Wf)KqKnNVd_WtOnN{uCoEiFOZ8_lq9& zdj95SM{?-ra#<a*ZvCBIjt4>WjCYhvhv3HF&@t#{%^oJj*qe!-whkFbdQ!a%ha4`Gd z@KhSJu??t*GAA8J-Gx2HB}9?zqt_9Hr_fDdUs@o#T+@=G-uHoD5kk)E5e9KrWm^$8 z1OlqkjyO2`4ZPBgQ|Z~%7Qe%VYpM0H+olm&N1*544NKMWIe-%{)kDrgbSp^|YKis1FU`%u|%%Hw3Ttp5QL zeT2$t^YD+0YNi&dMbdQX21zKL*9L0H&G?1NrWc{qjYS#Tg($yr6N}P#j&M1yT1ns_ zb96Ma9&3|l=%cK%S5H;)FR(LoM&8KXh+rwPO4mZdUU!{KxYqe~&MhL#E%mWMqZ{K^er zg!}3)$UJnZG<1p8;=da@6%3Vtb9YOuhnAs~Q-7y*0Pe`M-_!2#BN!%J<_0lD&VRi{ zU7x4+YEwQe@7!t)I$k1wqZZ(toNyxC@6ID%2nY}$ck3Fx83lEEuy1zDQM(cSED%C) zv&%l?IBj%V`0l{O{yGPmBzKk!D(;Gd&ruAf5=^Pi!8qTi3nQiOtfM?NHH;j*ue8aL z^jc!83uD#|&&IG=Gq-l~zGiS%CqcCk$440mJmAgH-ggotYWjr8(hl!%_|hNp*Cb*l zk8rw?-NGvgoH?K%^ipwLej&HRe_==KKMfBX!6Kc@d3%PRZ2w%b(ckKHK6;MA@c&Y& z_nKP_RvD3hZC(XiIq6Kkn=yeN?2{B| zznQ2Y^!)MjJ9`BF2%C9xMx^cB3s9@=55J<96Jg*wZ9`F}hL*QH6e;o_;-`#yQ1^%x z=f^@qbh}ezE9M_#s`8qZPgCQi(CLW=+Y1~9UxQLr`|trn<~hrHzuRMGJp7ewwDwIz zC|Y+cd0oc-j&u9=-8nQhQC@_gEJ%F#xJO~|97x#Ril&16dAw;6pXFm!l`2uw0L(8Q zr%L)YRK)N_I||YE`Dh$2y^-~s7v@=y$X|3Z7-@u~?{A`J;4@{mZ}8ilZbEt5fwvc% zI9s7cDnZVoR87pCz_|!$K<^E)KHl=j$?uONQkeALA3x?l-hsbYJ6TpJz_^=s9ZTQE z>Y}u_XY+&z17+=&GVEXZdc*NoB-dFCpZV*OZEr5Zy;s6VANkIo!+!Ns9>Vo}V6knh zzy2~{smh%HTt0#?pZviQ%iiUe{O^DB{r?93%+LHj|C07WmO%ii?an5X@}1PKU+DKYLst~fdwi!`&q3hT0j{&V5vhj81~+88O*ivGhI2lo+*6h zJ52(ZU$Gba?MM13@bHSTW!@zV?UP94GXQa-9&DeC3GgP#&G1)v<9>yhzYm z)I<)^rstRWKVy|TSs!Qly{w2x_Mgy3#PWAC7&M>kTFLr+utU&L_-=i(RU?|tk=-O} zj&VPQMFg-rnId0_slI%MK)(+sxi_Crev-k6z#H~S{{sL5#o%syRj46tp#F}15(&M~ zqhZy`B>%zKbwrh8`nbN^lX9lkDku}Ajc9gRn=W~D2mK?!IS~zV_PAIKryr4%2)Tqxt&Zm#x3UBw>b=e|Jbe+vwfrBRzUMp!p|Qb%bSw>zq5{=-K=(cd&6PkCOCk} zn^D_I`blD{hE^6F+8k#`?ML>(X%u2UOvep7ig#UQcdHe&Wu_ zbisSwY9oFh_dt{{JVVLO_4ur|$gR9|Wtjn~IxC9i)H-3y4TEuUQ|=fvi0?jiyAc^o zWOT}*9NEMgM<0_-ehchLUubh7GwKI%vvsmBs@5VthyAC)9Zi@10_+4de*VCx>bIe$ zaMCXGDyZoZ5k1KdNXFIwS>nRC|2=Ve^1U4eZyzw9)q2d0^ zcZUFP!2d;fM^`m=0)iRuV8Z*&-Yu)B(SJS8!K`=@^uFU>>lcvEQoldX`$Kc}0_Dr9 zgFscJ_WZ+-O%lUIo6ViI(x*RLcdW8{8{$vsf^vFw;uy+%nf;$q zF!0*D{YDW5=#Ig}n#95H8)bZFr=w_3Pft1r-!H$H8*UwssysXjAKS;@KfDIbk}Hcn zlHu2_!dh;C-4I3X^)#9{P_`|pL3TD z>g~Cn{0C?*C$V_n8Di6HS#ZnN+TyMS!E%Ptx9zPCuDI=<=zd%vTOnI<4!P89pD6zW zaQ4ADtgqyHt>jw$=LnvLabTLE-li4AZ#0ouijy6^io9T6aQ&e~-X5gp5CuTQ8*wDZ z#=^pk6sJuQrAAL36mP%A3fobP68kHBZ;`mE91xq5JHTq=tYuy(RgR`_(%K1!^YjR22HS{($$ipQp-eH>)G?9vcLa3>EBEN{b zNY=Lbr>JFyy6}f}I+rq?WySW>KY-EPL%QMgFbeCGxUF?uBCAzLQ8TA#EUUcy^M)sh zK3C>&4{Ab0MP$Q-ifdRRUl4T@4ZYSn?Ki|_ww&Dv8oIHa=vs{H!j5g=9=>Tgt>uug1`vxjjaGY!6)C~O${w|RPED8C_`OX zw{4>rblLj}?~#AR7ezq(NDa8all+c=|KX>W!8#C#5ffwFKm@u-P|tU=ugU<5fp$U1I%$Ka`g2*%eb9IP?e^oPi-LyKLTa85it*jj6wa zOcC8<+hT+;U!|>9^bK_;vaEa>52*iWigCwh0%(gZw)EvGq-?j4BTT4t zj?tOEO`>+V` zSbkH23@K5gAXY^zh(k$65_i?OL(MP@-VxnpKoli^X>{@kV zPhnTZf}PV%Jz2wpaqjSt!N5k{r(e`3=403x*{C^UO_Ls$rMM(6b3n^Hq)VyP03}^> zxZRlTGf-{j0zesAa%b%>JtE|cM#=)w3-}EXBz~KS5SUu%Nw)Yj1slvk9^s{7<83>f z<1E7L$Ks#h;wd?|rq`adXsuKovA1gs?NwEMl zjgH3!6bWUhA1EnNvAUd?^eFi$W=_{OMsM0PT+r;4^FkRHkaD^87P{ za3tm^2a1I*UGW_W99RM*fh??(AS~X|z#s=M6+Kp4^Mfel;sEoo#2ROM%~8fr#eK-a zYD6GcK${i&JpQ>p3G)!aW>|Z9Chl*wQhe74kX#N--i~dF`8Ex5NwQ}_Tg9@5=p8GM z4I^Ud7`@Ro=G&6xhE@p<>|FzEk)Y5!JF_)x)gF#1tc&0jumC)xqD?h7I)FC}tRNm_ z4L?B2UccmZJ7hNlrwmTs3N@JXIp$T zRs6A>S+}D-=!;;;gt{dQIT5K=s$ZDm2(iLmXFMG9)c9D4*8D))aVj2UP~+Aq>Sg?z zjUg;v-XpmCl-?Sq4^ZWj@c!n(p7qEhOr}HE?|JONp?*EXbG~lx^bgQ_LyFh8TUvPa zIcok&*0}DMf7z`3A0WBT=ToWj`h`Ed_wXVQoT85Z6Ri24 zVEO+9?PmSQy0Jap!yx&fOzeVD-qlL2mn*F$6DAt+4EQI|Mt%thD;e3FJP>r#+xgL_ zGNM?_C|-X0IdPS1n!WBq8Z}xWmbj88J~DA`PK<*qmQ=a4wB44LO0|w((p!GtN!y!m zg;Lfp-=)8^v=5!%z3>vwX7{bstsdPF&Su^`yS|CM?)>lE4+RMW^Ixr-|DF3)(T$zJ zng0eD*gt=}C(8Q2azEsMa{t(#Vf*WB!4#_W#nX}ftRRciQE%xis~6$JtSN}&zT4}@ z^Op7dwEFEfL38jD*_76w>c1f0MGh)g5kEiGU!}=?10ueuEkGXa*XL7D{{E)z&z#%$ zV~e<_)AD`Q?@*7nzE61p4`@@>#679^n{FfbFg<3z9#`xzFXh)QL`>Ibvt%(MvIEwwp$AI=R%dRh}6M!U8cpq((_s~c2OMYhDYS=?vGxnzPuks}IeGZE2^!$B(;`ev& ze}MI!vdl2fYz-F=(64Nb?Wa`F^z3by#TJ(uaHO+PJ-?t|VxtScYD0S#g)-MP*L>SJ z2CMxafE$iB95ZenGZ8b6nplpSSb~`?m7#DhGA>B>J)b`J*)k*VzLQkPdGaZDd^`7L z=d}R?J$z||QI&})ZPL7H-Bt@}N`Ah2`K;&eYEI_|C_W`q?+PnLv&sNb=@qRDwgka| zQ;}B6VDijG%S2z`ZySb{)ek8v@l*K8AgO!9)PI2B(X#p&?;K*X}FBjdF5l0@N5ck{$X;8P1mek;qbAhdmA@{uGsdzw!w5}cF(Q4FmNPDJE!eat z^YIgg4$p4h+<2lHV=J8?&NsTZYCX1bkP*@hh|HY!V2CE_Pf|4C7lnB*`v~8s3_PZu zF|u%6;^|DB8YZbDw~KZp^iY>%4!9JH00xhD=J; zY7M=jx?M-4FGdtWfx@_wC4@_l&K{`|9QWemg3JLo1;@nzF=tO;ra|51B`$|1L2+7} zL9?K5x3mn+L;aV)elD6J+61;v$5n1h>s${BhuLOPp`$<21=&=b(FD2ah%Shg>zXO= z9%ElpBAoY%4Bz#XLdvHLC%r6R+IIFF!OK_@HF<1)?KDQf}f76Iw9 zad8TNIT`*W2fAGeT&M7L)2yceQt0VSj1+LC>a^$@^f@ET7f#LU%q@_N_f!-Mh+Kh8 zMch;h+Q%9Zt&wniaVXZ@YThdjq2wd=e&O##w*Qm_8Y+v0@RjM;Ovm~bm?kSBH}X(;=)cD`M%sf%oFE(0XBrqSW3&2tRA&s^J4tCQ z=rvu~Z+*NF17nSFEi2%qcHx)0kn0<UDQ)d9FtqY2E)y0DvZK0>v--qSuu8@==*g;xx(9~C z4y{*fVCG@#vbNceCJ<>nvIsLLT5&hR7jWQO(8my6Vl5h^ts6<=H(1>vP_#F&;f`tM zCMBxRtSlT7vQvi0NZIE61{gEa(nNY0rvp_aXXwK1;v&LWdiu zBdk#F-LO`6^w8bT8IPJ5kCwv6q*@kBwfQ+pvTss&W~ahB7)yFi zK7B5jr9g_k$h9kr-#Fj{Jo0n&1%EMpd_P1zyqwt-P`Fasq}w1W7O=f)ZktM1xNL5l znG`@agk$5y;YEdV-S=mVKT3Re7KxL-8T)B*Y13k(M4%ea7z!3$f_pXt|GEcm6vc^s z5+Gp;Mbx%=WWb{@$qn25pktoGNvQYaqWkY>iGgkoxum9~q^1V?)Zy`c*62~VyNBu_ zX6sf6tlew*_Qv`b&4iz0jtuc7C2o?WWxoQ$2i zC7gz=#l=t>`Vvw#`{~qbZ}J)whz42bT1p&km&p?}1JFrop$s2lw2Xam^um3?LV5{e zyscSK;f+e9A`*F~1n_`WN%W3hurkJ)5$YpDJ*vm+6P2P3MOTfF$a4&NOPQotC_P>? z1W`!}y{JTz#0jd@FS}$bU8=}-X!0A20l>|fCFxD^F#34X9Gm=9QU?5Kscon%6RKMX zg;u+9f5n0#2(~K^S~61I4OP}V8p1HN%6tS}@jmR_^$c3K@!f%{$n$!>h&Du(EfQf! zb(U5Nn+(k}Q>@T9t93Q4Y`v3&^@OAtERP$!ISRWU>$ohq9EEsEa6)>5rN zpq*$gpOb@>kepN+-wL;hyALv`$Lm|BJ-O@xZQdejCq57cpn>u_VOv2Zrh|zgPSk8^ zl&Rkdi@lfUghV8A9pEzLb;lTjy=u|y@UWX`aU*FTjK$KTg$c3?o+ZQT%zeId=@gir zbt-&8>FJzw;#5B`2+|8KgM|!C^hGDl9G`bhMmTz zq#6REMoAYrfxQ;{dQq{$NysMFAp!kqr%7 zXM>yH(^=1FLI^NKk-B|LjtvZg8*&%>bD;L&wj26q57dq&DO?3lUBPc;L@P7!Qe;V? zEa{>@=bR!PUXG?>M)3_1U0riR9`16ch<`DVJ!LxDY#s_Wpmf8WTAPB@o=!2^k*$)` z^;QWzpoS-eRVQl#csaM@2^ff=;Ag&R6*{a@rZvC>%#266cj<&WadXnCkZi^X-DEfi z!{!crOJd!GL&Wom%WY=PHBqdIvymUWK%KMJu(AyLA{)5$3&VM_3Eu8L%QR}M8`>Qn zVSLi4D!B7Y9$whTTw0$cR82ckAUs=N&$qcIzmcc0&&K9OYMCs=`X8g3E*xYuB?G?$ zXoDohzVTb6;BM2Mf_CZuROUB@PBtBFPX5aI3y&*S(uaxNwl9}O(R6{&j8YPKCIP@Q z?jDa;-TT^AGa&j8@P>UDPe{S=+at;g-I^Rd1bMN?iDe5t5WWIOGmIv-1%Mt3V6YW5 zbsWH;!{sh|N`l)!w=zK;JF-@vfQNJ=G3~s^6bceV_}z8OfI)#%uD1gD0)b6#DjhJ` zMv=3NEnZ||@)ZsqQWAzUJbnRFS(aEL@;-ez?dZPq+1TC_zzYC)vaTNv)SdqJ=^)YI zD+s88umS828#|x%t1eY&r$f3%5kP~Bfcfllk~|lZ?LV>|n9ULMZ*0F$g#-i8-;J)9 z;C@NS|J)te4+iQtK*a4iNtFR;BLZ+M;B*gIS|F2k%%OtqzjQNDY%IEg2-RckOtmKs zu#l_jndKMGprY%fgE30xJwI8B6ug_hiD4Eaie@_ro$2DPWY_L4G2Lz!yXao?>G^vha;9}z{y6#AepZqJ?U<*{(>NO$oVF*29K`-_^M;b&eB~! zEor%)nSIfWBgqN?7MJqmMY_@g}4<+i!&X}V|6Ax>X$A%!5>s$Qmcb|k_c@;en zrV3*$jzl4$MpO~sgO{2Wc$l~lGmrxnCK)0o;TmVTSlpvW&qbBt&soJ!AQb-1#-0SO z$qFzB0GLFDHRwVPN;b>~4@Qs^Yp(tZSztuQ;6&HJeu^B;XI9aabfA{a3-a3!30^Sr z)tbUb3_vo1gN2gelw&PeLJ0*=RX(KKHc1Cf970*aZLgCV+J6ADYfi%ar)`n^`?r~$ zw~qsnWU!Veu7CSA%5?WXz$&JH{C)D>$Idoce&RoXExJbUMUM2dh_68FGgvc?olp68 zhW~xrVFzy?w*GTX>3X|z^#pK7`D^+hhtZN_p_h-F+s=)#HwUvTmNcLDtoE={Kwklo z$HsLuQo7Z759}r~0w3Nu$-MDXAL<91moZ4)L#J|vB{3aE^!y0n@W5V}wZHmma;AC` zk?p}X<~{}5LxDPbN+<>gRsj1N3YrM!>6$38iYPqBUhJHA=XG~5Em-q*5kI4AodzWE z(ePXj$FnvPL&i1EdJ*S>Od?Lz`0)SAv#)v!xyi(nQwqj z0n-(Y$2`hugblLW6M}Qz#aDo6)WjLW5-N#aspvKySSu#setyW$^Jl-Ukv;&>9g4rP zUnVwFNqed@m~i6N!B?Yb2LgS;!^B0T+;WAmb~!gK0?;jdm*b;4(wC>${x{RXKvo%*gw${phv_sF31>{lV_Rg3o`rR9{O!3vOTnWtVS5hqloAgKn~>L!f{AWyb#ri{S(|`v6C_+aj>ed8PU`@v=`^m%xpq)Nvu_ z`Obu+kSmA$3Mc#!*6Z?IGJ6Ej)bo)3h2`elS`YgHbMjqWw4~?gr@&@^$!* zKLi-AlU8`^s3K?+PMnCkd)dJTCdo;?`}kALeL+K z{)PTJ$gI_$r?U*miJ$rFgf4@i;c3z6guyeJ3q2vt2lK|NQm9oHIe!(ebR&v@6?gl+ z#wj@>yKKHZj(78f)EpoMVXUOsWiQiLx}>O*fI#xaZ4$CYxd_Co`QAxw8!Ec3c6G3C zL!wsOGrurd=@p&)h$o7JKJ1!ge;@t(9C99;RQB!A^0GV|k@l=Nhw!#GB1v>_Q?Isf z1|AbB*4>MboZ*V-o}zxiCUhW%T0lzyo9&CGmNVyE#qncc<1sMNK|U^oE4a% zIxYVGuEmJ39X{0Q*P%Iw+&$RJwD<*d?E8qp%1F>&beNINPxIW}_B70(gGtBxNsx#C zvB8foryQ`mU?O#YA08}~)92K)@`ZgDis=d-T#o2PjMMe*G?CWKrTI%w8YzT11)r_FbY80qnJhQnIxWm+b|VQ?FED~I_{89=_V&(q5<{{jGn=DFP# zRT&odwG`UIP;EFRnpA4>6FOYjqP@F*+{RK#j~Br&=tpC|qirKGG1zSb`ml<%w}dOx8&VQ4+q>=)4Zl3uQqP81HyVcUmf0b9gR&Rj530fArTl;cPAr_nPS zi1$0lb5Hw()q)}3e?~gXzW2SkiN*hZ44dy|_&y*sP7QGQk~wm%$}pIRuYsR(b?guZ zaku)q59ho555No)uqa@7Z!|67@-f5cbmB#ME#f{Pj%8>BAF=P-lr8fzTz5UfO{mO= zXy26g1=USI{HL*{=Y8ZrhMmQ6Od%`G&hNg%`f@s4{A;c;Cmx#2!dGksg7`_HaL!EG zd}3bH=o~}e9clt1)M^2kRWZ|cs(!V z6T)r-K3QIm;$%O)MpmjGOM<<61Bd&%fA;d8Uw7NZ0@ehnf7CnycpTyg;2da@(J4XJVmL;dljyfw#T%GU7Q;CvQ!rUQB&S?WXY z`*50B+c=2wtPjwckAB$=F&8z6PFcq4#@fX0yuGRs9ph;ZI6eF?Gv>VPqeT4%yJb8x zf)8oW#$|VxS;O1JCn?OME|3Tqr&(jS`NZXAuE?H_$B)JV^WX){^JZdJGymt4kv4tT z&o6`8={Y6ud-{0DjEWa~kA5fHw(7RP_BVHE+rPW8gn4XSAoZA02@T>+yQeTL&vLsX zh{oIewldXi$jVS$;uDb`6@C6rmK+Cbv+3R4#}OsRpNC|8`diveSA9QEzU0KmF!2q> zT+`#_M31L$JB-j+-zO2Sj!=I{9Ue7r^LmX5gpWY*_2SQ@&I?&h?p z!#|06Pk;~dl{57yZzH(<=*@N^)sQ@sb0*{$A$AGjr`tAeG7*88eI9t&lWql&RgTrC zw-GF|xIugU_S*4$5_*A4Kq94&gU$jguC+6$%yd?25A{Sk`yMh>6nLU_p3bJ%QBX-l zfFq9QeOSaZGjlZMvTth^+J^RSs`;52`V7Xb# zaw_Xbs1|GWbLjRDSy$snXt=3tT`q1NE{N>eeUYA4M_8#0`26!{s2ulpi8G+B9ugD` z{)B%vEYvxk;4#grCaZivVDl048ZrsrkmfnTD1)eEiFJyD1$)@2-UeV1UJA&zAzm6j z?}Dobjb=x{2$>!i@D3+AA!qJSNqPO@ruyh#QEnh*Y(2<(TG`9_K466-7!)RWXga&%{NZwjc^ly_(u2(R zYXxia=N`33B%r4OvO}}h=hDIoCD?)Ugi!>rh+{D{0*fgX?fNwi=k$tTZ&-qco7S{! z3_)tsYBryg{Z)dX932q&R{@>NGWp5rf^v!E7}h?e4BT#dJi>GWFpS@_HhKr9#MP*h zd@&XV`3M<^}31&bQjh&Jo=@!dO*3}KWAR2y;k zuuZ>61i?B>C}Lk3^sW*Pa3a8YY%;+=p#%tE)0InOsztyq8157!7Qeuz zu6xYT;qSyqoq9q{R%M4?xrH<;BQcr{SHf@ndAN6*d9FnPj}T&S^}}S^;`tyhza#*~ zf(ik|hlTD8N+uA>oIv~oCHJ6^MQJVO+B7`uTo+Lfn;i(C+3g~AO-4$oVj9t>Y(+!+ zJbEKJ9G6%@u=L6da;_@F>06IShyYe;?qBHqv{XURzq$=2XI_1Ff*ASr$rb2WX-1S zwLd!3#<@f1MYCx?fc{{phnKk-QJ5pyvlbZYYkG+5NIoT*(piI`S0r9uf7`oO0hi`P zM%1Cov(#H3&3blA%tm}c>&glyV;J-@W{_tIS{4y-(%0STOAF4sf$$-LcyyxK?@lTB zFsMa9rj;!>M}r~ufOyw7b>yrf(b94HuzFLShpm;xE?VQL(sX3R*ri^&-qFKhc1%iW zgjI)Dt*YI!U3gpDKM?1(7udCPP^$Wk)5Pk;Tz~f^mC3TpXC`)KW*m}itQxD`6cP1G zWCErk^bU}_l2#y~E#bek8E_4LepPd&{b=+=Wy9pj4Y76#34H=!sp7dP9+1)YC34P_ zj9O}Ah{!XL-Zfhs!5i)Giq607xf1_j58k+S(DlAZ;I-$JCa)Tv_+hSQ$2#^s>Ke|d zJ+kc`KY)VJZB~gMw=TP@OwLHik;2GUQV1edgB|2c#s^|4PRB4WZoGy*`yw9FBN__M zs~sMgRx0grUGGK&q;*qQG8t4+UbT+&XA<3{H}t8llzA7*XB;L!VfE!BwGyX;Y35pRUBrjl=u6Ux^R)PLG zVt&PxH!BcnJ~3L0cfP_6q=(^v#EUn424rf-)YZw` zAT4a$*RE~hP6ZoF#~`L9g$G&O(V$)`L`--aRz^n zURriSv8S;k=TReyh_rERfe@0N3jPfB7NsF6`x|U%gtNWCP$A774ta`Re z?iw{7a!xH#93T)3XHPKT5uzu_JwSG$+QmQbBXPbwFOQwx!H&*H3$tpge_WuKTVF(E zecYizj!0ws?yb7kiIn*BuBgi$jx|9qw(o#e_+Yg2_GU+5K=8fdP%yU9<+34HU|Z48T3H4&S!CJn3UN$OJx#>tzx%c`ztMG%$<_&0_`u2Fxq! zVHH&)~I;-ep@I0TM80V&CPON@dzC&OW4INBbV=;CxNJbtIUDRl7ow zx!GLmr~m48Kx;gI182w;8;rZKh;k<0BMvLI9GHT<&?pqg;?<;9xX!uy^{{GT!9LTE z5dIgNa1ug!AGj_N{0HDw&WVGb5EgYr{c=EKeXy1-iWty!KntO1{igr3r&ZI=DY!@! z%>%x60<^|4WI9$bX9X5RXl3mAJ}Z0&AD>tDZg9`~^bK2ER>Zbb2}=If;KpXPMpK_l zd=oFvdj$O+JyYYefrByUZ^Gyw1rN;AL-|YSbEO8}3{lencbm$%~hcDRoo4Vf%`LVR8Tro%c# zU3kDFc_{YeSED1W6|nPEXSKekuZeoX1dRU^@4JzC2W}>eqW?>TjFYXzP_@J zIX2?B8qmSx^j`!U6)3>IIFBGL9*lQjmz+(^iD46dUI_5pV$O_ha=*fFQgwTLlfOr; z;<9|GB<9o}MJb{;Dn*Da_^7hH@-mRJyokJ)LF7T68|!HqR?ft=Y%00?hz2liHVw9r zcVpQm1wL{BxR7~|fYI!EfZ@0nr8DvOD!72E>TReH9U+RW0WY@Fea02w(Xi`P=)+jT zxkvU52kyHRO#%IlN9xQEt3Hf!Wn|B>g21NPmQS`TND1(as$*s0ndLz1(A-1JJLfiq zSX5ix^{rnXh*0xg*5J)o`PdY?0rq#-B%@9-w4F&>c`EQpa+MEahrCTlxc)kr7o7yN zwc!UWds~5J_3ZA>Hg%Pw>kZ4$;86B9#^Ln=wA>sP;(shhy4<1{1Wtl)!-~|$BbA;9 z1_F!Gkfn^eELp#D3TBcqj_)Z6ey)`h{XOb9T4}nU)rE;e&cnilee?UhSN=7|{`M52 ze*~!yDswU(fHayTMs4IUM=5OinrR%aksvQ#RzHJEq%?*buYJ?u@qo&tx!2VL9{ohN z{gm%PYmPyKnyj%KvNI&g2@Y%fLH6bLHf*=0KLLGvF9S8oXA;v03p<^p;BvqmsG}YX z9&9NX&IxQ;E#&5L$iW$O%0kUo?BtuWh&*+5t3eXAGF4v?`R*Rpjzlvhs$>RyCj+p4l;`xc{zkhd zEp#>MXj~y zEGQ=-CN3!!h~81+e*YA0&!X;K%IQ zmrD6EDZ~o^KR#;1ykLyb6`xLWkGn7NC`0UDHY-Dpcmz~*2u*OhjlUBnUp>d7di520GK+wmpXM%~!pYUZAq0R+%3Q!tdP@x1L00Igse3gynRH9Fzd zk+edF5SyFCS#I$x5n<>yCrm^Hy-|lO_gxV0ptgA{RUH{MVyFW*81Q2K$hI$JeQMtKaYan30tQw%K& zn0{>2#_$(#A%eoUiHrho z6Domn*3x>xCDzO}sMOtTwAj$8nk10M0q|7WYc8;`RbmH_-yo%e-65HOGp%P+PkyD4 zTEY#C4%eju>DM}l*@P(8hENF(#40*Lna6Z>oF(o;975M5R3ga*1oa>ARP3a#63we7 zj2WRc#JG;24kHWYq=bHxS9Hg0lG9xbI=jOtJT+AsV}z#1slwLSC!ApPfyod zTUC$7&=3{}F%EWl%!|!@fUa^G^(fGLGlT+{UI4ztq};=hy->6{$&x`3S0K|kL6&B| z=}sueG}D&i%ixcD8?xYdK6Kj!X%fV(1;1ndgRe*uCM4i#JP!sxe+;ugSb#aiNsayy zjTv`gkCO|7T%|An#3EgmR>y!^92Ywd+Xe0B-&h1K8052gU*0qH6PX@?UM~nz?)}4! zmQvAkRQu^_?abK4yuB1NtQu{T6raI_(=erm1`U=GTs;&b*}zr>A-?Twr;6z3XeBrn7ZjFi%qqbd2tVh%1#>Or1gYP+k$E+H!zwyl z;}L(Rnjs~g%s0>L}Yz9_R=C zWc>$ghm#r#zbYbeJSrtcCo!=A{?b*KCWq3CuaW3>WD06fRumJG5m`t_L*}1S3JCa7 zp}jGu%TIe~mfe~T0;yIIItFHz0qoY|M>j2(_nKXs4S-DmTtVs@6(@2putU)S1K^h@CBrk4PGT8EC?(^(LG?A2#sQ2n4(3}H= z^)hFNL|#Mm46ptkh~TaiR<1uG#qf+n13!~j`y>ljHyp;L+M4h6O8 zCJwuC7?{_)3$l`|sl3BF2fBiFzKqAIOb1-CLb|oj=pEQ%siId>jr2qzQtjod{TG+9%42fqhQmH=b#ryypjMs1g?S6i&5|COir?lJeqF z>dO~ohLv)za%Ew>>UP<<^m>=}oUp0K8OYRe$de8_65arpv3{uCKy&EB%f2-|8am-a zw_Ddr(2c2aC`NzrH+?DD3!2po#oxvsM~u9O@P z8o^jGo3Grmzv-|U)(iG%U2R_SHjz*^{>sHk=CSJ)iW*@T+uge%uWG7YngOt7uopJ3 zanU_JP_*oR5gQkujbO?rI9w-P(Dk=Jvj(6JTe{8A7Q3qx0^j+X_568JBd(FlwaNQ3 zVKWTVNC@H1Mrol{<7Qpa8V64GQn_RMukSU~76-wsSZ<-Mu_qBD4m0 z!Ae?;PGvb=Y=|Kli_OttdDb$Pa_j?OfopAYm_X8VQ8OoR&zSlhRu@JG9p;`7w6UVVD^C<@Oh_n%V zSYbjL#)1JyF68efK=|Fjn4A7i8$^Oe_yR$* zSYIwF!gq3zx{g@987lOG@SP;|Z;)%qQRxn^<@v^ex+qx;1h4B(5t!}5CXq{Vb?whc zT>Aai0d2vc5?qDav}2NusNvw9k2%}uBo027EJ30;35wfQ|AbKP)zv}&|b$iX+v&)U*=S>MMc;vne*n%+21|$(q9xbJ5-_rj}-r>?N<2AT9hk@MzehnK$>*B_8@I#A<-I!h$KcRWG6L9Yl z=9n!PRuStOGbK~4GGO}nSQa$9C7rjNWOaf*^+cFSzqaP8F3RJ96vCGLunt`9duHB$J z4G?_Q5BEW>0nqf#MfvcWiNi(|(>*6nI>pL_Vji5b<+k<5P>afhhS`!J;td&}b#ZSm zneOCh(hv`pSr#;|ho$OY61f zaYR+b?!lojCW~P^kh`m3f$@q0s#t$L#Z@7eQa*y#%?ZV{4wpk^Ig(*yOTi7)H?Y63 z?t{_LIA*c2rigtBc3D3*r7h_TD-wj_ykr?#7*N+}+*X-QC@t;4W$0U4vV22o8Y`PGiA65L`p>BtU@V z^3I)^-#2q-t#94`@9tW)cGWpmeY&4o`&89A`*{rax9m)yo}=&jK8YVUYmYlNGJH6S zA0l5EU3n|Sz3Lpq{1=d~!J#myOcWhvSF?|gin)ah!zc@&8;Fws*Fyk)Z>feZY7 z{5}#&;UZ-`OOu%}0sFkkXtuj=#u8aA!E3_FK|6L4!_(ezaSxGxGP(bFlb~b0F3GS8 z@t-+BVu>7G)*8{(6>eb8r{4TzMK;xRTea+k^~PL;(-un!qOGz z^ku?{XjI)9bLK)&C&c(Eb$_zGQdi71SUMJ;lt+c`JG$k?>A8kSxAx0 zsk?PSULX7Wg3Dy8gh<8#Aw&ouWg@Mw`O#Wi3XwJ%vN>b*6D?XY^n^D23M)N)fcu2W zR%bmwB!f6N)mS6^byia-N^!Wz6t%pc4OR1?7=0YL4Usmtz>DoGtk-D}?jyRW*rkht zD96l+I};XhLrOf_IvS$h35ykygB*Z)KB7l&w*{{iOpv4Pht7Zo(bk%tKr~g0wpxr# za`aHnDMM*J0!=r#o@rZmb5H9zM1qo_%F)^z6NOcJLV#c9NviKZL@IAANUInV6eXS_ z(vy2OENe$_`9kG60LX)6J%cPEYa8wa#rbNu3|iFZdub>RpA*D?!_dy*Waa^n-eF;! zzrR{G8g~hNqz^54g2_{D#)2i1J9EvdmY8jXj~JHTw#C_TVs)L)w=VEh^z0CkhCcM#i){BG8GhL$f2<%Il2WDVwA=?8%$ znUQu(++T+TaRr!(emLNxPaW2igi2eT(G=qDHr`kYDK+WWd>_9_k$zx)Ii%Ogm4qQN zpJ$B_S&|D0K|T5YJY?8pC`u-a)X4eo6n0_Kdzy3AYMawH-Wg{3%n1QxK-OeTciUt< ze*xk)EwxMPR=1+w803Ns_nRkxjp|K#p*?>qr0Aqk6q)#yvT~^MpEy1QICmwEG&a=~ zU6iB-{S+W752=S><~^{yEJGov6*w13BDd&jbZt^@8c!I?&`n{?t={Oo`o;y0^9m^* zcj0m7w91%G%g;;434AtBTn2Zs@rz9GmZJCLbm#XIY};OCjHd_W>IpG5OERe49^Odu z62Jg6bYvEpicRNfI$WOS50M^|Kj%hXngS+PBn=?6a*8r2P-^}wM0XKAn-j+lzRQ)` zwQHl#bN%c3pcXlibv8bVdX#s6ToC1&__U6=7CB$%aFVvlBOF-8EAhZe4|S?X2@u4r zlQUD##78>notHTIwTVu@V!typIXHt%*0$%6n*4j3flJ2Ff`k0vKrRPhNQo}}M78k` zkd^8uSA{HAwBZEZ0z!NO3*USVhMrxCq$CYswP!a={96wDJ@_3k@DAJG=(nlKA{!1zu3d+WOv%BHF`w`mzGFjCJkB8NVN>$4^j?I(V03K5C%6>nJW9b5%B7 zm?7hp6No=f?=Knvp)n4OAg}}z3$c**;4&yM-9{~pmg!?2e=frCT>azqwfA9&_%}Z2 z1fJk|M<|lQ)2Zb?zGC_c>C&PVqP)gbDACem36DM4P2e>Cri9nDA$W+eo9g&rO5)b%Q7XKm!hT1=BE>6vKz&!O`z{qx_kA5!Ay(D(lkp<46E&&?d<7#k;t28TdHs*>3@L zOq+ktR%Mmh|2R|JrDbIJixP$?_eL3~wq7Juj6vkP!Fgjxr?%=4wpm?+>GOTx!#X+&4d`NBg)n6x#eRJsfyH^~ z>j8Kt5`{@Kesn^a$7*6pk4jomke5#0@RSXDN$S%djxU9fxNc!`IFwNix6)cyh4m16 zG&n`0tf&txpHzzRHQd!y679z+$h_1xicP2as=bSsis)w`!sSAZwJ9jYPKKV_Z6b9b z?IBz)B$Pq}E!Tuw7!?w9v{^({$Y8%X0qjV_Q>&O{6x27JVYOg)ftsS*!?ea~_v99% zPr=ULeP~iKa68P41^C`@e@_|VA8MoDInxv?)ombSr@&vB1S9i0+49r8B;cvmzAGf!9~bmh4k1eSaoBiU-D`c zk_$I(N;7v66x1@w8qrg&yWIwck8!EndVlzHc$AV(^kzpF>|T%ZjRK3S1Ks|kD+b^8 zo^1QH5#CR^#r@0FZn1ZMLuMR%o(UynN8w3K!v*Fx8}{cEHOWCrm$Zc~CN9`8Dd#XQ zzTIpZYgW>ZW|L9gatq^;#7s4!Yr=*;Q81GFFegc^-wie7ApI^JAM4~Xq*PD!L;M~RbC+uvPwF}yd5 z(FdfzR@a+y@cKr2o*%H=V=xy4Lg~|9DATxMg(F2I_6K4k3zK`>TiYW7;1gCEwbU@a zW)}0^NjFAMoJ1kO8LTu`(~ZmN04Opc)5M;j!w+E@xFhL@8I(8JFib7+EF=n(+pwO* ztas(BB0=!`*3BZ)NK9l)0ZY%jVHMfmg9h_9wr>O!BG>1NBCI&scOp==FbdXYL^{jBJ$O?qqglG|#)sZzpPK!?f08oSo98 zH)=t(UBij#1?!OR*`9x>ODxX zXo(jA8Ui+*L9vbaGwOA`6v^s-PS+_D638CrJX^r0I`a91mKF8%i%3}aQMrG|>^ zH;QMhmI#TRX7ksUB?@%k~{fb*T zZg4B#!IN4U-{R6Il|5UBZI?~FY$|kASVv@$A;s=!pTa1PhuVES&8Vy}S|dp3la~XK zrCH3yl?z_=+wkR&0+-L&ACjK-DOx5e&|I3S;)Y+-Z^S?$voSufWdArZM{WOL2AdvifwwTu286Ze z8+eGqTB%W0XTi>0yh6I1m})ZGp&ysIXdKynvHV~?cK0gnV9$b*xn%arJ0*2rS7r|q z*At{vgxpl-ZIt$FTsTOX@anfiZrph@aK=fQ%VW<_*Ds;VcPROQ;b`QP@!e54_DJG6 z>Uhi2)A2QCdQ^V)i2fe@jG8M+cj;5It3`&V=0&4J|BVfbdRR&yWSzwb~O%@?YnSj>EX+9zFf@ias&LB+{L_skS|a}xpo<4Z*VP7)HS|<(SUdeEj^#SSBH*ujyckp zQ)Fi-g&hBjzOs)>%{QM1f1G3l>46<1g`KCtf8oM zUwbE5YDC6$gHG^XM=_N|H;dGJkde3H%1OsIKJ0Gucp3HBC!EdnI?&6uWfHKkPLIEX z$*p}zAPA#Z5?L7ytYz?MaNeGYN~riKq37zg@~wsE4Nzwbxy>VV3!eP@%0{l@T%9M8 zA2BnNK9{^=oQ4ZwfE4|)W>t-B>K>{z!L;$T@L*>X^Y#~%diAghCNORtpF288?@Ox^ zo0fFpdc=xBf{}_loRQp!G-35DKMqk8riv6B9`qZ?#SWDeP0REn6v4f$4y8V-rF;XA zR6rXIJqV{ZC#hoJ3qryeo0#S+{8kcP`PXTGZ zn`mxLL_&7g!T^~Sz}G*5Vi6o5x|0Y63_}ZayKa+W6t76=6KTrB$z=Fhgj$j05La(1 zrnvf+BvVQYPd{sS7RsYP5vc`vq8#Q@*P!(u1PJ5b|uOnLh@%R)M^6&pvw> zft17-%Ay_CTQw%6J{?1Xs#Ui6OWW$wBH5B;e~5`@;D&nFaOff40Y5W{jh(BDnA@~% zMKLp|=y1IuGPk-ttx?DWCy!@9vEuGFdRX9hY%BLk`Dn;1$%6IpBKA49*6PpH56`yT z#8wrfC`(PMEIx@}+SzbWqlbR~nNdIN#O9FWf{QDAzk5L2B1+0hztk+ek!CetGCIHh z>tGoPM`eee+5=j}O<*XE^<^exrjh{^nS}jwaKYx$d&#u@9Drs6>A(3!cDq^CCPCrd zG>wV$g^?a?oz4huq0+7^Aa|^2IoO*qvpJ7sNTH^jTsNaUHdzKwiTPVk*c~Lg zmwB}!YJ^k#;H!6vB}&GcO`0*|l!Xq>NWVt*NMV~MrW9H|UI&34`o8&D>^v99qJ zF?E*0?sQuaNF{&>1Y8Alz-4z>*}w9po)E)Z5UXgKf9m@>-iLI0b(iPNTSIgh20iW? z`AiB?g{pgx<}i;$GTuMgyQwLAc@m;W26~Z1&Kk$(QN@X*w#N%(oU|L2kCGBen2n6+ z1w>!TPkd+Xcu3Y>w87z)!EKR_f<175@y4s%mvZUl)D1+$_0A7`rC;I{qB@1GMyHAO z6>}yOy|TPkeGhXb3tDI)QR5#ZbHNWTJ+Ey!< z@z^Pfwdb6WT`iYX-wR4NT~Yn_as4!LGo^=^1cewlMzP}`Lp3cMY0Q*Yz^!gX zJ{%>qvhHeIdOInJD8*Ge(W#`U_McS0RS^`i^8_!R4=#F#m3E*S_FlrJfl6iVM)ZnE z`5)I4Ohr2RdQOts)3e9rCbeRnBm(a7qD3_FP9-rdWB^2&2*db=X3MyPfgxf-6n z<&lHIA35%~_5Gu)-fKN4Rb_iuf)`L|(v3vHUwq|}T78i=1G-saD!5)BW9am8lSAW0 zX$7qk+vWC*sI>XUY-M(w(qf5RWY@zlIpL)Eo%;*kN_hVc%&||H1OODPa8{IQ63fU4 z5UpdBkIDEeg-?i|<*Kld%FoZu5wKE<}(Q|VxV z-R(iDQRfBXx^(!R(prz>T}=WvVtc1byMdmN!m&Maq0p-lNCizecfhL-4RpJO6-ozN zz%AN(i_uvnQqD<;D?)Q~s7XG>T8|TR zuF$e>T$O2K)#ilt%QJPlOvlx*2rGL<{Zr?J>^L-|FY@JqP6ijGRV<IB^I3}tYrG@u^Fo|*ISHleg543)P3Dy z>sDN(hmH%sMdLOiEsFfWL{c-wN5L=Vsxd0%Fo1B?Y2(IcMeKQ(%8%SWA-PJT-po`D zsb+phAlS~t(<(9|dzaa~htdLoxfG4KMq#SD;<8pLRk(G1ICT&qU-iBXJv0yNi%bW; z)1F_SA#p-BttaMQMw&;Fbkopa-#y(q$pw(h*vW@4BoOv?KqMUuCdL1Tm@%E;4@XfT zwLpMy{;EIXPV#1crE6O#MFX2kG9$sEh`2UVT(A)y<9qpFtAz4ff$XIDH%{;tfSG9n zS35M;6Y8KIMyN70UoXmPo;tMajSsrSHpL`9Q^rbf>xaRDJ{sMcECB!|9I9N$YG-QM z=})c>E6(gc!mvQW$wr)*n&hfQ?;@*XBZn_)D_W9nDJ@Ac!T49y;?|eQjXXvAELP+I zzxf_=a^=eDz}8u*vY*>pE6Qct_$7Q-xwgcp+FFghNv{*Y4GQ^7HrZ$lYjww0^}l^g zyA_f^f7M2Gx{fi~;eAV8kPaFYEf%2=^Y2Mg9-WE5n#E+*mx5;H2Cd$FnQgMs@oEaS z&GS{ovql>d_=Q*sRb1!cl=E)VJKEKWQyM>^-FXxHDcebqUt6e+s#^+ESa&_-CxTdbmTLS_VwkuE;%rZk*O7RkI0sd*_G zRENslI*|m#2qsi(vT^KLCR&F)3n{!TL3FY%r;dt_oD`_Vz!}8&3*uFV z{Wcb-Qgm_I?ZDb6?vwKaPb@7?ioP)fbN+xi%!gTS6YFF|Az*O39h2oTy4N)3m)|F{ zVxf(9?cEpV$Dy2+8L5fUR{`Ld(40rFlDFh%hC`DUglC=te|6&BiUq8a4Dd1L3}*T4 zc_m+3OS>=m^^?Zr#5G>%WIWR3Q9KomBA0Y-whMyWLczXts& znODlm$RuYG-z+%EuZ1tDHB~Gk>3X`#AsdO}Bz^){taOs^J1C-L@U6izw#}RWc#`^7 zpnb^RyiY-EbN@r!OSNH|e1^rv(q2Z0sPldn(ONM$aCIwQpx?)8m&7P4eJ$*Wl39;c zz={ne{v^26_{}c5rC|{PLv7(M$pIKesfat1KTXEnizEa6hp}+&325V+E4x3U4L3#!H0Uf8bb`!cJ|rd>C$wAZsZNITIEMPOgNbDoIlhjsCwM7X8YTLC z&f056$)QLy=)-y$^$j!&r~uiJBs+R(#QFdwVOm?%`zE$5I{5W9@sO{_&*4T;2?2mf z0H6R&XuVV;IZ3L~Xhqb_!HB`qS!Of6q zD}*0;4`Ud_44UT2vsa!z7nG}()^!#txMHpCKmuKccx zPblC9sBS3{Ma1M$rb)CCOt!gzu>>}PxjJ|a5?VZPD_2g?;tz3^e{Cew<7k&%2Ekr) zkM)SIFk*gq_aoDDr^jt_7q`P`%Ob0sbiABOur~T0JOo967q~^diHwpgeAzKm43Tykm2@Q-69FpHQ(uX)eSq$r+odGn>16O<3en0zNdPF5#! z&rcd5W_^#{Bn-*(#2V^7dj?162pAw)N`IIBmR0gyeC)z(0So_{Rl`+(WQ2)}#_k|W zJPy*!_Zg#5ep0}6hTyDEsVy=5T|ouWcI1>)3jKCV06`8ujX#1gn5TIfMP#ccU7_gU zk3+t(6b-Kh8V&i{5H zbytvv7|yf$gjq%+Np$$F9?_&ux5%>!#ir#nquh}JxS*HRI#@XRYdOc*aufI_YgT$D z^e(50+v=NqMpr7&o{MKr`Gl~#@d-f-SfP@fGg*`Q&3(i$A_{pz^w+fPz=c^*tvuw& z9HTA=OPN`putL`zhQPT>0^c&A8HI8(R;!hXWBdYD%EH7NCy)wGb&dyt>s(2t=y zx6?lVK{GG%-vOY00mXvcP7j z*<>j=>&!&$_Y!nK&#Y-PG({pY5tHH^hROb>FanAR(kXSIU(LnIl>9Y%h3(9jOf#*m&Aj2 z?$fdc^EuXfuDxC^)pEu*+%YkI3AQmuWLs_6zKR$2@~0W8t`A&sdHXOM)GUOl zRNo69-nw6ieU&f`zy5pd&K#SDi%iIHmsn&svyuUapaQd+x0}3t^6m=qes zShmKJ@`Xv<(7^ghDOXXjZF5u7RKoV@nJ$BEV|($0A-4vXq;OTHs~!MCMPa~pyGB%G z=f{V}<43OD=9aJ65%A0+xC`|>3Vcljfz$)Cg0;wOniNi=#~0Q)A}w53X`hP^Sam;o zDl@5Xeb0lF7g4)K3dDO=N^S3@W4b(~zq@_0lDgr@L!{tPM4=5@FDJi%?)Y^MmWDTO zjwk>a^sf0sRLi11k50-G<0rjlnj6J}rWPeiwOli7iHL zZcV`xG^JQ5nF@F2C+V#znt~g=KI4OglfWV6>EVbs{eQejNQ4Zdp8o z1?;*?F5l#r{-tBCCrx)Wd-US_I0B-t+AKkE9?5O` zdp(K8!p+qoRPoz;v*f$GH&t;*Z1mVpqP%GIMs| zTOqYM8$Ck&OG~2EDEcziksn%zNlg!2+m?YjnzK9ut6Jv2ZGmJ=fUH0~l_4F3Y&yNV zj;ltqbaW0=|Q9O-3f z*C!%im{XKoLUr6`d=x-WZe*yxWs`{y6_1Q|uV+a6^v+{MF=Lkl1)12ml lbLg`F}u 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

S$lMDV3JaO7d;U`Ijudwv&CfMEEZ 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 KDSEFgdxGf+N7Aj0w*SyC@hI9VqR%e# z4#2m@s`@1Ievi=w`xUY$5^1NB!=+Zl!>6W{*|(+&v8yJ1VLQVvA;j}=Fh}=eZvCQ? zx6dzfiOrvbQf}cfl=u5zf{8m@`r1C06hRf`v`)2X72Z@PYp6b=ob|tBah2?>8xZIv zml7w{{tUj@xC{wqt$26?nlF|E;p!6SXWt?!$O=Ejp3(zUYPMh{-f7q~R^57-x;%Y5 zbidt%?)!nx1-q50#d5KTjHMq5`;DUm-Zj0667fS=pg`4XIbQkG8U>A_eB>eo#!Hbm|ck=SQ3| zIiLO54MBsCTGZb%3j7(_cmDX+mTu}J7PoB)GuFHPqF)+)!7oI!kKkI_*przyxb(Vd zs2I1c$K&G)VhU764w;WKD3V0ue55V&?{fNw8o#jK)x*h#ZgymCHXd5Ia||gjaUc}5UNw! zeqy6@?t|TUb}(~fHOD6WC{Tc}<1y#@l%YY zhH|F}wZmH9o@VRDG&>xzI4kwK^pz_2PS@rc7yLz2R^8N3l(vChRe)K2-F}pQ1TbRY zdT&$!HBUlc89;BhGLnphQZ|8A)pVJw`yoc-vc|?Wdo@QRqh4Tr!JZ9kV9|m$Sm&P0 zqe=GSJDEqbY)(oyN_X0aDrbR_7eh&E`C~Rso0r~c7m7OYhBfUUd)t+6mA|y1bC)TT zlbv}TYR8oFMCjO89i?g~t-rM=Dxu;z*Yf1!-XtQ&M-4`6#_tplX6*vy*ts4l^P3$; zt8XE}_3Jj6g`baRqgt&Wt7cJsbhiurrh|dYWVp>xqH3L+kLbsTblCQVO*NpjQwZ#yiD9xR zcF$J+3vg*N3G0k?VD~cxSiZ>y@CB>pkPq91+-hfovd@|Z%!1P1JuAvy6^UaD;-$k+ z><0Mi!m~GnwZ?3B+K-s|`;BtX8#S&V>5rk6B7Es8q7h{1J{f$6ZL30$q*tP$y89v& zFWk0&(is%~0>Es$puxi|!2sZ4+9#yzzjV<5{txK|qDjR=p=eM50z2$nFB$-V#^2k= zJkg8B-iuZ{B78Y6TpQ0nHA2eXO9<>Gy&S{k{38pN`?n}uGtT_C^dBb&nX3lrC&z!6 z{jXT<+?QeU2dh!=#8+_b7wUu_B<7yKbNJsTpbxh&;r~K-`UN=s2i=@<6l5CwKjis` zsDG;nC;n#I!RyrIzE=$9xbx402COCV|7g$O8}|1^?YQt6l9JAJ{OzT(*!YV-=lBco z_(J${_&@Rd&AdwhHi{k|yZjY~f1|mEF{S^zWd9}ssOfk`$)nl-5@riw1n{))JMOsqi!Mh4{|Zl-rVr~y>xaA1w6~1C9SarTU{kD2 zANb=+zL+t6+bX{EltdvIwisW<$muxNmj4>h-&DV`9SX5OIN_Bt&3%m!&ImBstbdW2 zyua#Mn)R;CT+N;WhAri(dphT%;K*MT_7~tcw2VRd*O`f3#q|HH^8Uv5&~o)t(*vKYmSdX+;<~;l! z7QV*O&cRG{{Q|80MR9*a+jV2W*-P_*@}^CUdaZ++N=8Wt!((kR=gDNB{HHqXns&kG zn<8&TF=G$#{xxBLBa8I7b;?)w8cr)Eb-d%@Bq%TpAY|#tRtm9m9XERgBLGwjj2HGd zXk7p0p70x4htm<5i3r!moTLT<7+Z3p4xJH;!0p`Ci>Da>azz*gkiGFWVg6qe^dD5e z@h$rWVDo{fRU<#CH`bVk1lKKttNW?Dy z?@R)5?9Krhg;U2vclw9b_=1d&w6)FE9qqzl+l%^x~Rd6Aq_fGtGU!qA6tT2#w zAAbSLo{?l9??CR;VHC)oMM(iW`JI2x?;jMuyXw@j{kQmwaSq z8Hy!`*Xxd_!k7Kz!W;=B6(s*C^;c3b6iEQ%-jn`;e4*|WpP?dHb>pAk{bW7sJ4i4BB!jlnq1O{3iOdHnPl`Y7943u zFakB^nh`Yi5!nC#U7Uus`DcE)%+r9EoJcRsQi)MQZqeP!j??(IXH_BeL9v~%){DU;`M0qjmi4Ez z0NDNfKd>0bg>ldQPXvEd{|oT%r5G31fc=K!{}aI~NuzWg{YT=Waz_n*WbVdv@=evib@@dgSVWTy@l&JJPclm+0> z^S=ZA#9Z^go%cIG)%;H!#)Zv+{2OHua|!yyQNpeS!TG8G?VA2& zf4kE^$^Ea~E{2~`V?Y6DQ1b}xTm&#z9K`%NcoLI)9YgqOu>E$;|6!c$>h~!0A0lqA z0z?X)pE3&4qeK|`1$-XLEjdI_EkkPXq&+C?TypHW z@Z6?x;P)}ilR<=Apc5E}+okR5abuEa5S~@tH*iLzNExn|{_Vd2_5VYxzGv(}{s}NR zI0#|lDE`xgqm6Q88kStx_eU9WyAEGUEKK(GpsN& zF~~2#RuhKSeLtCE2Onbk>HBS`OjDht>CQF5KDPjWU*V{RwWsKeA+2>#)7pLbc0CK5 z!N6NGNgHODvMFszW44a7uk)n#;{}~Dj4521W4;1MyS4uZU#uGX`}o_JUiVl-pDfai zV84bOr>5PGyD{OX6W2J8-FcIKJPOvw=VPaJq1?WMiyTIMN#h5b_->d+P;Rdeccv+s zmsj^HFY`^jKWsrL5r%rjyRpa5tzVc3`(p<;uTA2JJHk)3Y+=b>J@wU(9JFU=JzjTu zqiR1rJl2xwhy`}q98lq}@&Vv@<-+pg5%1SJJ>aN&kNkT8xj*&7PfmBB!y{0;sN^;u zd;AD+k>lwm@VZz#%oA2pau!}ux;4MEX z+Ooj8{J~kNSS<<16pq7^MTI%R?iRA*f#vB7^|M<4y0bqfm8z$}j3@QON!Rd@kax;G28$%Q4da?oX2Jvc1~_-oN8H59-E8$cL@p zK{Jx8I=<#;52t-@Hnad)TUq9DF>3M;H$moOKNq=oHpMK7@sI2ek4o6yj~~6TOIqDH z*Xi%$XKIN@HEMaPoG8leIbHj94`KY#i8M2@8>o+RRjI2q-Pw7%@rJP$FzOx>;i*|< z%ZS)t0a7qkSSWg9wqR~ykt(S+PC?&=(3zgG!7t-qq;t?F#-ok*!~znwqwA(zlIdSrcc{h`f)eb{lSnp5fjAPsjV zH`UQ@ZL>~65u_N@1J{r)sckAre8k+VXP5yI{PMP0z?afX+~&P=e9f1N;nV?*x+&AI z8g6~qKc#XW`@i!w9>=}M$vnTh?{my>n-HaO_KHu_-Sg?^b3DKD73>EKoz7Hzymgjr zGdSoNavlVK)h_%QN*(JDzjfx}%;caDjHc`nhCB>eB-v?}tdIRLR5opo>qw}VN1T80 z5nhgdClRlzJlFxNpnF~aNZU>u`(v9DLHs3|&}!SK;5QMSB> z6Y6~vBdhw>!O8t4TSq2Bjf-&(38F4`~gbCbuCE}d!H>tEEh zUuvqvd)z9aw4T=JqcYvzm{3sZ4#%E8*`l8j`|dvYTB+{;96!aZsBnO!w?5s*cc+72 zX(G#8@|jznRl&>70`2%&IO~#_6^U9jN9=XknK!T}**JIwzw&bELW|BV`2qvtD|vyA zblun6yJ2fl-=uW&RmAYF`T!!o0M@5xgF(TrCC(BCh#3*8$+S8luon{G4K1R5bIU9T z-A5Nwnb3Jl?O8Kx`xS0=oE(qCyW0k{*O(8TbFwBLy;k?s;vRgY>rVqr!mhSKMn?}8 z zt%ayN+OHT*n2wR|5dzh0jjLMx5PFM(1zW5l7S@dP>R-yA|BOwuY;*nfx;3#rLd1M2v|v9YE_lMhJBJh5~>&5 zYsSRv*_>(tzLJQHt?i{)bsZ{qIWZZv^*Om-I~N`h@fyY5Udw#X2eYCV^9#@!C5+g! zqaFe}WWr8uSDJ_12s5Uqu@9%JflR{808<^+kQ4I z^D&;D0pIdSCMunyPS??BWWi7;TC2Blt+XrRHpS`w&T(=2UZ>b=JWTOxywSyyoX~c; zPukiibC$iWsSH6Uhq4{^G)H%~xz3Ks`Li%Tcviz%L@XCFR*q3Qb99)U51``?Y7y%m z>mDM5%kv~9ny+eolVl~iWwgkzW*JkbypyO?@>4Fid-7=+4~L)d?|o2hMp`a0osL>U z1ADLMP%VXgS1K#6)*ro=aPV7y0YYakowv>+!#r{1i$nU7sw5X=LiAKMAi9z5;RxSj zV)3`C4hd5j8mGc?-V6LgS0jBYG8qfL+Z$o!B-@h(7ZJ*?>jaL*r zP;7RA?ZVPg{$WjVjYl@*)BbadLpdC_0lO-9M<5L;sRrK>R7_iz`^aj<^+A^OLQsubeq<-q#q2mzvGOA+!_k-xa zb`Vcw*{p3^(TX5HNEY^7Q_>=@8F!71jiqkbS&^!H3wNPfzZ)&>td+?Ud#tzb@UE}f z_V=F+{VSejStK%;Qw)Wqy7r5ysf&wArMAv6mTHHfN}S3cDJGY!ojXQ>qb%H6|9e*&^2C?Aer+X6d;A z)uPE3nJ3Bw$~^pi0tc|`RCpV$TeET=T_mbW%_?=uh}u!;Tk~cGKe@$Kx(s5;4X+{p^n|F`fZ)-tna})Sv^TNHi=8C` zJfHc25dy4}Uw}6r3z6P}DVsd4Ni(9J>!goMLac#XWTpnvC49jB&0O!#NS=MJN@_{FoFekRwDpFm19KsT|9E_P`vXVpJ{ zbUhUNj>DYfhg!LEIM$XAdGX?CZe(KXVdK^y*FfR2>EfyDpfgM4)I;*e`#6!(9om_; z_VZ(&Ck($%<4;>LEfgA08`lWDb*ryW);J#x#SGo11YhazXQl?twv88^6$Ok3z0r-I z@_SZ~D%v^#K zvtc^LnX2i=-*pO@{_%%Sk=LKTrtO0b{vt_8?UW;j%dcU`@O9i&W6hg&l$5 z36e|%P^*y#ylOwrbS9$2MY=VKnElu_hW74!;#0>Zp3b+(#4*F*Pk2R(b89hR{zNM2 zXzXY5|NaYTnBC4VqZo|%h=+`2pT7E66W4i0dHL|^iBzZ?d&zwI5B4$p=IkN-SY zo+RP%eP9n0$O0tA=Lq+Jj-NUl8Q*{2w+edY|47*XlxHp|Rukn=TVgcG56GE3h&xMQ zxR0R~zthS8Aqgzn{Z4)WA)!0uS0g1`IEFmd5%dF_#F1;43hv;-$fQn%tr|ohKES~l zoP|~X2m-VN^AvsoLePgOf$w>v8?4ApcI9umI4Ii}yQxl$TFLXAD ze;0)K(F1bOv3HOP`+5-CW3$LbAratFtWo;eYdNhuRSi&doQcFpKRyCE1E+I}-nskYvsWcU`H)lwKnJ&tP zjayhX16Cdd$>Yxr%;TrkUSyJw6IX`OW#z{RZYXK!cJ&coecYjUQRti|d@whgWF~)9 za2!)pXGIX`Pnk_aN@M)$C!jBNqXGq3ATP7h{SM<&2=Dx*=m)t1#io`m|H; z2qqyp>RP87Ve1&CRwW~9Feu^$Z z^z(HDHNs8{wqLQ?*VzYn=km=;z8b$D^LIc}*L%2+wESlYz+O$f4Fp=a@GUI}@;ney zQndzRj-jU<2Z8c47$acNNfJFA`(I}LsHuCPUsffJJ+!fbe#$tU&!ZHH987p!1ovI& zJ`Vw4RqT{Sjwzr9E*W3%QB`SJMOl}e0u+Q3eo&#MG|xlX0i?2{p@F{f zOHIJu>;Ps*49XM!_}rNRE`2ar9t8w_`2}G5mc&u~5kAphfAO`d+{S#Ra#hF+by4Ba zE?8xP6q?Qu0FGu0<|#i~gj*D7ZEfqVGj^^*H@CcbyLdeW$fNK^{vc{fO<5Hsl~`P& z*{fmBM5-7YNssQ9-h!BH;nZC33{}YvPK_qWonbvI z`q^V?{JqL7;CSqS&Uh6Tp`6Sz1FdB}&v3U<9xc#Gf6J&?7rRjCp5o zyV+}CV!VC@ftPb{eXOCbWTWeWz^(SrJX}^lo+FM^EL8UPUK&-w9kn9O_NxcXZlw?= z?5cDHnt(~daCsiiScXITaw`ja1k|7rL7i)EKLHcoKztfXMpB#*NpPPI0l>KpJKShO zoHC1@eJ&&)0t8NLb?J*EgAz#x6Djr}jIbwfC90p`aApL53iYgr7Kx+|FPTE9^&gfI z;Lm#HB|^in%^*RLnCqO7363sEDFP5V6cmKehsCPN1T5#qfWsx!@)0K%z?u}yTm*+; zt_4DUC*bAgujkm2e7rDow=j66s=SagrvY>I0)pqA99>VT8 z2EmLvQoWZvUC#HWKj2U8bDSnl3pE z1b##meQr|XAqCaa0f_!brC=i8Crte=RwKQ$meC~voymfODdOT3t(CJeLvpg-z4e#Q z1Zz(b`(Omf#hK9T@q+E0S`IWupFSH4)cuSMAC8J4CQJztHu@3HxV*tYm`o7>1j${wh*YP0u5+58W*c>t=G}IJj4{Uc~d@2F!@7 zdA@zd*83JKsIM2XqLuum$~kxv3xyL^W(g}SA*ebS15gLWjanuS z1z?%Fhgy%vMiHfc)wWKu@0i(7gz!bOSbKAmFuq-#f7ef~R7Rl#%pP~7h zpYk2JS}Ft6GP8+M49qQq<|N-k)#KeWLEZ%T#@{F2>qjY=pCH}&JsS!pCWFd@5_e5@ zNmr1O6h#^4V@S7kS7tw>5Hy2hwKH^Yyr_xntt+jQzroF&23k*H>;5oUQ<0WOi0?rc z+Go&}&YRNe>jRo1s)7@xv-v+6gNm6jj=;_!aKZbG&>^4o8wv4+hZC*0vX%R1@r26h zqWd;|#B48rz?ocdAh`&uiVUxN6UThH3Un{0*`t*@J$<;7h@D{Ud0X{DIx@HhG4xpr z=|}jtJT@q3VE3q)IHnM8O75v=(JuvRFvY27${!N$;p!vHl`Y^=wo!093Oge32aSZ{ zZ{TI~nJ%5AfWfRtjR6sG8^InZ9!4cx3x<~01n-0cz=J`8NTgqbs)Mp7Bq3}N?hjZ| zz@UWgNbF}WQCnD1XmlvJZP?U4;yPR6zaPs2kb|k-tiu5e+n|6-`h4mLO@cSn1L3NK zZ`!PhWL?zEbh7}+V1PU*s!Gi!0ZkWmA1HyVCi8EjzBK=2u58!BTP6pLx5fvGAkeicFw{A@gm<6iZNpCjUf*hm@I+7$xk)n3vO_N zvAKPngKFML5HVnB?ViYQ2qe9lv#EY40GkRuU1mz^vlM7y7rRYA(^i~}@oC6Q_ z^~g8OE3bGC=T&H&5JO{H=okw+7ruEi;guAxrX8jyaPs7Tbt}hLW#>5&eOe+9Bce;T z=9RrNgfC0eTe%KNAb?;0**IMO6TOqG8h~wNz+$h{+Pn}HK;g573}(aPNfJSVB0K#^74{9<0vXRZalX&>l4#2;S-}feKeMXBBf1yhx=wjETF=r+ zb$2k6en^-J1`KWpT2cJXZ5wQM|6gv~fUth~$9e&5xxgiH^6VTEoZW3&4Q1a@{U^6= zkmiDG&4YHzW6TrZ>06Qghs>+Tai4(Qb}_fr&&{VVmTwFHpU9wSKE_!ezAN5tMC1-NZLc@=;L@mz;5Rsg8X-e2F#lp z%xT%3hTosGhFW7#)5!9Zb^XDxa6EV5EAf_5 zlRpl-nFF#YQXV~uVeiM`J`+!bD@^Z^Ug_cyw0tLv!WXW0(gu8>}O>&Cd~Hh7@fo z5eRKiBz(8U&XB71=)PBusw;fpZj`w`hUi<>K&T-`21W+cB35#a2%U;09g{QYRB=(? zqqqs@HB9#vIaW0l0$1(u7d)pBS*3mQ5&LI$Ij1oil5DyD1G zi-Ka8h~lr&yRZm#Gcsr0msqv%;ho_sDoRbO4(}o{BiQEss&Dq0Z*;Q?SS(`08fp<- z@!a(W2tLL`-IBXFiFLx9zOu5n4jK3}!V_bJoM!c4I1=YKt~M=ry3N-qO22hb^qwZ2 zM534sk2g~+^&~XFW0H_q3~vwIC{@`bckGrpu_|z;zfG!>aBDv-oZyp{oj4NIm9t@L zM+nD~BhbBHYj|d>DoBV%g1ZBk1-C*h^kOUowSIg(CG)OUJ@#bf+W{kfry>` z!fOS#Czg-Ao`w7sIcfSr5xyS3b_!QPYi$%Bixg0zot-UOnrNRzxyp9PM@f=jVifXx zKN~@;Dv0sWpkDVKQhxdugfjjpl8W}o1!9Nj{820hlgxL|bYRWee{$y zO35LJA<@8rizSh@65mcqN=Z|h2qnc<5*K1)9wuVRaVy>NzBeSn0R#jFB*FRG6RX_4 z@9{THLnX>$RzA?U+CBS}Ax#nLg`iUpH`jjw{U*mUlG7hcI)cJM`&}pek%GEF9Phid zT&}3j;r}21GXiKYVT+i$&G1bD>mQ2t;N0yDN&t=tc~+>%!4eX7bpRv)7OPBlf;u-Y zQ1Y9gl%_2yZ~ZSo5E0zn^y^zdb#e!I13QaLg#w(!U*=3PnOVu3Ll;I(=PKNY@UT_0EPHpAWz zS(N-z5PVCV#RdrYI$s&LUmFY*UC5g3! zr1faMMK9J_CL>qXFKpeURl!X5Je<%i5-IRV)+h$Epb ztSh_yLZ|Ox5zg#Iik#YMa z4ff=fVfo)n8`A6MA@|O;;6!zO4ZF>Tl6>bAiD<31M^~3N0hWl z3|MCxmwPwO!u9v2XLYP1A*dd}IAJ4m-=?<5qT(AW`Yx|2@)6$U@Eb19mkD7M zH}5SbsRr!5EKo~Q<^E3kt;JWl-f#okbJ$EuoQ0-JGmfq1Ts%E^BPek0#@W);&KCu9-K)^9-vNDA!i4<`DUii2Dtl|^)ylo;0O zEa`(H{O(aAX9?emYM(5W9`JogOB1uF;XYf{$f1{Egn0gwCGv*M zn#!i(TUS*RaM)fEpvs_hP@qUIdxZ-s1iEQ>L>BfIDcI<7yd!OmFyCiXtY&WSma8zi z(H=C-LqM6_N@JkM7fie<*ArD`9$NGOf3UFAJSGDeBqjQG^7mNl0CzacRS^D22Vo>z-@;3N%5>%souzl=X4UYak!O716K zC$5YgV~`ANzyL;Ol@z?u%;JKOZE&YGYj(BJ!d&MR0YNls&O5#Z;fl3r7~i7a2(ypp z(u-%kmY3_RrV0z$mYhAo3b+6EX~x;DC>8!g+@~FMT}cf!iP8^!goy@(Z3-tCiy(%$ z{x&6#BB#W9KP^)chi2k$WEesE%+Dh@7H81;QaL>J3Un0Qn_p6eL{SDc!jHZup@rZu z*!8MaXR#r%gbf@;LAS+eka)G3lZcj}*;qkjb#;-2l2MKQ`rTFIMvsEO0O4*Qww3rm zs8NV^j+17xigHp|Tfl8#P|cEqqIf9vS5hXbgxPI7uH&&fKvS3}zCPA73b2pnRRX

f;k>`HSW4GTSXJyLTX0gZGdw# zp!i0>h`iGCOa+EfWuU^macjvA1QSgdTo)c;oJVe_<7|_R`?hIRpFH%PKCL*Tc2tbC zv@JQ5?a_4-zphRctqzU0>UH$!T8s(*5TrDfM-DM2_-+Bir`tlw_^U<&o#}8!u;pyP zH|A+meBSS%?gbBC4Afof)FS@_0QamFG zFNk?Hb}3jVXfUzOl1x>rBUI`;R!@J$9D@(3$v>BWIeY@a1v^yp zwUVnRjRFhMvA_28YwuRIs@ADHK%01kgYlPK=%@N?R}E5^gO|dd+lXIBe`y2)W=s_E z9rO{O4-!b$npuun@~8-|BStp_F?@WJasa!~%%J=Q$L;Q=gClRmrDScwK|;anVmWUN zSF}=MPTycSEUSu$t%-Lu#2=cY(y=#$Lqv(`hFBPNHMu%*u*=rZs2vP7BvAJRn2CKO z|EU>jB49mr^z5$5<>=vKS*Y2|*0C20-?~-F8@y{F@bsrzJ+{_;6XvF-Ea5(=&&c0!sme`8 zqbkf%w=mBmo?oUu$s&%agctHwvPOqTa)5+$(!amaRfPLHj_6Cl>yTP~{7QOtLh3%ah-#!;l-eeTkifMo> z4`Da@6Q`M*lmjmlujj{=Gs+K6b(NoCg-EWEZq}lJM{W6;59b(8{@-A1*ltatw2s@d z14L46d_(V(I;Mxo`<}9dZpjJ)UvJ~wevWc`7@J=CTzoPq%mQbsQyxB)j-{0gH+{A{Vj0X=0o z=4iKh zT*goub%7a9YV103^rG&MjneEPdB}BINvm*KphR~MU$1*m#HZtzHGI6POEQ7r!6Se5 zjZ9>-F&erKtIiu!5liBX5Y@dPi+wd#PHi>c)I(tn89RKl_z4I$HoSMxrj{nEvxJD= z>!c`+mj*n*DUJ8%3=Naa@ikv%8B&*M?%A@kStdPX4kI;CNB~bbBQ!tboUcEdJ>NeTGCEn?~0B3CV^{x z5n8tx7+*F)UzXp5;P=tCDjGG!_H~-T08ftmN)>LT9wcg$-`2e9MBuPA)Km{~o@pa7 z>N@9k4I`e5LXSldFj4}-ytyuZa9`9RZUTunK;Jw$Sq$wT#P#i|6v3Sseto08zAy#nG?j6Tzmo9XV)m ztbwerY-ME$@7eh_o!O(VhG6dKilu{WH`p^^+g-M9pNd~knWp)+_bFAJd5(Yp3}R36MgY&pPp_0CnSF@7W@E5>nM*(Nro2n{7!M!!v zkU!6{X5Qz`%bq^+4-7Uw-j;gc(^NsS>n36yrmDC|*jrF9YWFef@xF_HLqOH9Q#lVb zVGesG(W8M&m!V2x0m_*{tNBqQCk_G8CJXg%LZ2l{d~DZHXjKsGOAelO;S|-At>0^E znKk4zBqHfu5L7E_mm)MbV8EzC31R3{!i`ioakZUQW9$_idrEFZE)$2auBf#X0o_J7 zCy29JbwRO?tRwrD@DE(O;5UhkTsdg)%YYGR6L;eLQfOeC#m6|pRlmA z&cnE)kq6f`_{j^5kR14(&>(c%yrs8H(KF@lExMI;UO-==O$5v#phy+cbNTg6Q2`H} zF>q7U4HjRqbKP)KR1U7f4lQSHRi;x3pJBqS&jm3Yn`uHpOD}T!nsyG@u8Ow6fHy%{ zQ};ZHqv_(Pk3ouUp{<8Nj;5?(0N&l$lAuqg=zR{a6!V*y1I;eLQE+wTx8ZyPC8F5@ zG@U6Wqj?>prnp_>BB9wMS*@~p0`seswa~IwCGHU_lx=eAZ&vkD)8VRQc==Q<48nzc zuS}`~3$3R#^wW&E!$B)s1n8ibskNw5k)Qg}`a_$BKn2}I&Vj_i&!({2Xk1g3;Os)> zaI_1f_)hrGhUCcj_^0}HJ(fm?Idu(`57%GVhR2#oO5sTHhDsed=lMlPsH#O)g9u;R z5&bl7eOXM*SU|~RlI%J_b{>O0ScS!`_8LSlWuuhC#~jR3)E4C#=VH$4SyB@B7Sm?L ze6h;DKBH=kASRi|)>c-v-BiqhCY2(V@`2Qy=2vC zSJN!4pnSOXX*L>dEk=UcAmv>g=AO5O)L4UFWs2EG?m%Jz?Du%Y>=~GMA1N_k++{#I zmLmFZ|&+$C|43$jWIzUUcn`ZZ5R?Rcf$~mZRI_&RD!@`yw5j#Tj_dsP zEbz2$m^KnZ)z3dGs4d&j(}G^mbKyb=n!cBozfjadP=Am|5#ZDV0N{gYa6gfL_?V4~ z|4Fe==3bo$PD?2{x%iNc=+4Zn6nX3Mx;%-c=x zZ?+SxUV(CWNqk8kr5k${?kgv3fH$I^8X2`FR^%y5>cQD2Bh+t=l_#5PpB>?59hch#gN!*Vb9-0b8gYj1cYuIuRxfR}*Iasq|N*B{1Rr5x=}d_HGW zNm4pz*^D#^CemU2wzIML;54W9^5M}G>G-}cB)D1M&dc(wiFEMgY-C$RVURR|SF&Z$ zwqCiyE8{(#@1p~$tYxW=YtSxZigy;x+n;N0*0z+J3b7id_*9Xt#VIX=&Gp4q0)oTr$rIOCt(L8JomW4 z-p8wFVbM$8-7hr`0%mESdlB(&B3L9wH<;F-NA`yd6PA; z?@~0ly`(?&HKU2GN@5tp)r8|`_~ww{QYxZ6VudhcE&wp0_7jJq<67c-C+rEozpb>y z2jz}nKh8HG%0=wzIfyY~ZyqAZ3ahDZla$d;uPCKBJj58)n*C5!P_6+t9;95!E{8pL z;JQyQkka2ki*zuJ*YC|0qH$G3Jkv4lBD^_*HDmhnGcv!RV%DrK_qg9aBRMb9^7BU$ z)6fW30&kO=B|>Wu&Y_G&$z*VVt|dcC)Hvct8P^v0hqFi;5yhL6;bKItlxrj-zLGVZ zTY7)HOwNb&SY5|L0(qg-t{%=Gzeg@cX%uj95_aFLVJRtUx4zoEdwsnXt`PPvPu{}C zE>r#~ZkSG94kA`*qj=MYf!t5updk3L8hTxv9CLm=51{;HEESn;hR^JV+Q655VVU7J zQthUwASp>Baid9pbNZ|~nXSEy;#o9Fb>zvIg%z!|v=s75cE{q2;4B@W31P2gnH3cx zeMk2!Vt7M7)Hb(tUY1M8xratOKYO6K=h{0h73qSON8h-T0JfDke$A(Fy|c3L^VCR7 z6q)!aG(=&PKnV(mw!3~3Cm6Hfs1m5teS@3hib9B{69v1sPNyXpVs&8XHjkq~ra@obTasPHQ!3JHT>Kgc!J69L! z=pIdA$kJyco6K@!k1u*3uQY(G7CUYZ723&Mm5XiAB zG~6fVN&_!;_Dfm^Q{&SOYd)R5&=578%8 zX7%ATd9F>$6fYE4XnUL|w|tURHw4{}%{&`B)gUcDN3ERE%b%%~7XmNG@kcPWZ8NzH zDsu=*73~bIn=Rs-PvS4gT7}6QV$~Grro#IpHx0hsDDv^Y#Bov4b3w1%y9mLm)r5ZF zWxis~VLN>HlQrGW_Jc7iYl99GI9h@2wRWy?mE=AVx4tQO$z_gXTaoNz$j*kS)}zYL zmd!o6cvB2eO#QKkzNL^gZB=L& zzdE{?E1jg5MDO(^3}OoU!9t__@t8BDP^yb{EG<+y$W@?+*!Nvf9(v3dj54P=f*(;E zZ#o z1@<$R9JmUUu048;*0~z3A(|DNHNgE*E%pus9viKI5D)ddpM+9XTnNr z=mytu^(rTby44|H%nHSs(1I5AUne&6u>_dsa+8U(f5Ff_u`{#`zvF$o>Xjdz8xAX$A#>%2!fax7 zW1ykJTsVwin6@w_p=x;$d}Z$Yu)N`+f=Co0uV>uF9h;8Oqe!dyvORgY=A3D;eVo8N zayklw;cmhKOPqI}Fn0ae8{f1zj;NzksjH{YMfq)*q-|NI7kh~EBz`HkKB`6IA5)GG zmTgdr&&YN&jk3o4!5%>Aj>w5&5LRn*)4bL;K>S_Ze1%xN8Mf#65fPPi%TJ_dDgxKS9!a-n9~{_xQwl$BA_)y1{dj>KwT zf^E#GLjNfh{t#sO9$fW&p&hRFY#5AxQ459C@mcgNKz{4G&y&&O# zC~3C{_Ln)*LNUT&S>zc(CJ$r{+YIH|}*cK$+~n);J5EgNdr z6eadj5aSz7q-i(d&r?}i?C;Y#jJk~`0;gZy%Xu#`V+SWzEqfGH%Vs0N;~pS~2>Un% zpN$%-^g3vna;(}x^^Q~*$L$;3n#fOT0ePwb0&#OP2k=&gG6mjk3boRiW4gP;Cg-8W zr-Jg*SC89C2lYNP%!Sq}+i@AAEL)=cq1wFR3)LwsJ2YTSxR~1}P`MQo3PY$T`|zrP zdG;NUanu*?6IX~T|MW)y|AgJ**i-CJw`!la4_sXAE#OgLcM`W1eQ(y6$#TrKKdx$e zW}L5VI+RI`jIL%~%L0LX8c7Z7EoCNU&@ufc;t4tS3e*t6PK=?&STWa}Y-D*vk2yI{ zwA{GQ#{d%?=DE3ju!GwlwnCdR$1X(#@@YT8q2k6a-QR^%V-iZD$bM(;sQzB?+y(S? zLvEObY2B~_H79aYmDD*|6HU*G0`jbp!NY{|?P(W{=(7^)y?$Dhi~*ZbE>EL#CU%T$ z+&MEW^j?qbq~Mo~=bS32r`Y+?Z+CB*b{9|4=-!E872id@WcaAyK)Pw(BhqexyW}#I z<=}(E)62;9tsByY(0BQ8KfFNUq?`06>jjqk<7O|aY{@7#KfcJ%0Y;Aa3B!B~(_ns) zgngHnAx&)JZ$B_*e7^S;eYXTEVJgrKv*nBmbx1eSf#MG-dZE4HkYykGwh(L(mQ4jR zqZ;n6R-&qqmnTSAnXmJlC@is%k<$w&ijrb40ZUYGY7L`Pxz;V`i@d9#nw+Bqzz0-- zSoA_XiWwJq+EF)1N``o-`}|V0-cg`Kxej}}@HwYdukI8>nv^U^_sNjX?GeA`#9+KO z9aZ}7D^i-2RT7>>1z(m$xDhBZzXT~Kq35WOLLpwK8&;;Dg_}fycZld}lmP@OApC?6 z>^g_(YMo1p?cFI?W%iuu!Mnnl>|G}Z6G_hTrQ!j3kY?epKn z5LLAtjbo$w%H<|v-qtxpded39h?v!R&a<^adF0sH;@gylM|Xdk&>z#wVSU4@D05@x z7L?C_$sBqd+KRjMGPai9)`E#$H%7%=dO1bE!QlW&`olpE16c+Y-q41fw-PvCde)q= z2|Z|OUHYb~Q6dKqa*XOnm18!(DO_;=I?59*s~?CJDBCJ+JExP(=Go-SnSPM?CD0~J z!o)rQ_tbxJnVA-GeW4D7O;8vouD(z=fdU}>U*vstP+VX1-?FgC;_mM54hinExZC3H zngnNY4esu)i-h1LSa5;`3keW3gg~%#zu#Y{(?8lyJDq7e)0s2-?z5fq?tS;(cR%Nx z&xs%7(ll@)B!lV1)jP3b%TRHe#nqsn5A*br`i<~!xzL>xhGPi}YzR|=ee9Awb!#0& zZBafC$5#GuLS`Wh*z^>|?@f-#oZqgdnU7%#ZKpfjp0Q5 zaG0KzoAgLd(?Dn^(rRrndx=6M?ggaP{qG#!}6dCKv zb4^L=0-T>QQg`l48(+VyWs|+}WuKhq)p?D#RJW@>hOthZn4W#&TDP2yBH2xGH|&yV z+ijGetgft~hL?8eBMf0^(n3r58BIjo%nXibsrp)A|Hj0hOd*_V^wL2P>CAYBo_hgsX|U7$ad)XsR`h+sG9z_x`}7lw@#p4CABZ4w*#4WwFtC zcOBm?eM|jv`9rpFIAjDTZCrKi=SV>ooB5>9^1#;IdVsPy{(R3n4WjKKhLnSKaxK{` zDKPs88S41r9V7a=mDR6;7im;-_vtzcSuR=F{LR5`5yPH+y~aklo>~GMQMe9)obx?D zG%3yGS{P1pCwJog=UI?u8{B&YJ3W>OO(E^eT(xsD{Q-AV(Vug{;R{?x6V0gP#;6=! z+E4@IJxvc@#Zn5Xj5|AV*=}SY3z#k->sfi;Ct{ype2yuGU4iU~=0~?wHRU$*sgi%0cKVGN_b_?}2Q)#)tKM8-f<; zS#oBE1a{mklu27o7R#QfL)dNGB_A~%8Yqd}nIogdI}U&CQ|FYhkBQrt@K*C6Xb?&s zK0hG>^+Pf5?+@7{Zo1%c`gmW;hgS`9wT^ekL~=ng2xdlfAzSH+0+#ZkbBPi6^hX7B zq>^+gIu>tybO9JNTOOVGS*rrxAD%>qlW`5XoPluS8^C|ZZR&W8bvWq)L($1lzu~*J zn#ESuN8!+y9ZjQO@zbL1aqA5O9U?*~9E9YCzbbIw&-HlR2b%M<6-5m*3-S21NO`qcbeHEn~wjFoE^VM%*MR!`H+7{srmR zG5N|PF6u?ZnN>ql{7#(MEa+5*=igLu#c!n=wenM(Ja}Zo-;(6R8%)i0t_6gxvy4D4 z8HDt?uO(aI*(?w}h(sImXsKklEOs_N%2LbIR_I^A%1i7grG{sjk6b|!1rdv=tj2P6 znwntGV*UsO7-{X?oaD+vD8iaXF z@}IsLB@O;bIj)oSAjrDSzJeQ3D(VpT6t|*cX(;qZCCvnyz-}l#j}Nx|YxobA8nI~N zls{r6j8555HHv~l;MWmk6y4nPTo|&;GcfB0M)&V=Pa{)pHSF4qkyye z)BQF@11=5;-0!4 ztnmVYnJNv9*5e95R4}IaE1BVOr{NqWLKo@0^+i=Q^n(6 zxYuS;Fsz!GGOzg~Jh-W^2w_frW9f6HlO~;bVLlO3Vdff9QJTjvEC_EM#UX#_ON5~* zI)a9)$2eTsf)eJ4Ed0A3$yx$wCcwb3Ej}VBIH|Y>EP+y?|JeYK*=q*VZclA&UvF_j zP*63CZAFQg;hlZ?I#0M<_Dl+M3YV!!wJe4enlXWhf;CpV#&k19rIQuJ-ZeSC0uOBd zF2LF?60A;K(Po0gtWK}?07HtdDcKA9XApDKqFu&+Ic6}forqOQ>7v6~PnqQ|t0E(@ zg@q2_Zz=PET5%-q)pAqB(}&a509g{MStLr&*iAcX`LJ-We2KrjRREOB=N7Gwn1gOm ze626|e1n<~KQD3EpspXptr7eW45%NI8YBr6n2c9JHqdkoXa2lhUq2(i;V!0^mLkK7 zjZQma5MkmJnAh^lKi(7z)F(`}hD`;@gw(vi6JVYvT0zkIu$e^iODm3%U~!1X@_(X( zH0$b2vnXf0aNHWn<(>ep65@A?cGuw=7z2sQ%R6GIQK@=}wur(3SO7GczW@+$HRUfr z^9dyz9Q1}rWEo;1yo%n0Z~)nvJbTi+v|2{Ebra8{`iu$mvMgWXQTcH&d+lSs$U*)3F{>@^9F>T^*27GWYuOztBMDF#FU}>b)NLXB>qj>^bE0bH-B}PAimSw2ZgBj!nrZmtX z)CC3r@#tDF6*ZZTy>daFe${=tJq0_(cbmZX$?8nt;&lrO1yj%H@m^&?cSJBN4n-mo zz@RMLA?i*9jJ(Aj&Nhux@p&u!FF=u@9v}k%1XcY>73&E~H<2f%!7@Jo!DrhI?*P?{ z&Ea@}$UO%(vtsJ!QAEIb&iF}xz6(j39DN?z3wNgz2X^+?AzLA)`S<_K^05elUL?5C zP?=aXOL}1v>F+F%&KQ+17f6HE*x>aDirB=9GWFgVXb>0vQ-UF`o~r53xhtf7R7#0>Cy%uv8mBt+*N( zjgKwY3y%|vOGLd4KFypI-Gl?Y^h>obRcGxvL6-SkNmsQ^Sg2O+2qiY_els?$RW}}9 z8jn280Yv%?paP2HBxzdbxs;YsFbpRyt+?%{ut*N8t3&vxkivmPs6(#@<+|zp@zJNN zha!Kd?}s0L(qeXljbedUkrC5|$~Zo0CCMpI`wq`%Wp5$>MEdMovMhfyn~zc6m7oNQ zid?l9?iiqKkER#sG+1b=0xMqNe$A_2z7`%s$gU~a*dS}Dh@yek_E0YmCKu{Eg<3O% zbTS0N(kt4Y8|~pRhDA7RLSG+Gr$G&K|of(k;T|NfOXd5o?zDZG_}&OVR59$Yhky14Y?6FwBwIYT!pH_ zp^;LP8U`9otG29^!HHZJ%9zl4u{MM?z0-glx-X!=TG7E#wQQD%OIM#4&0-`){LLI> zV_lyj5dD6eTryrI4#06#mcp>D4$8g2uBp#eaZu;o5u~vf1RIN3d^2y-cT41_ZEanY z`=h&{Ig!bbbV3>u;8A97s`Jwt^9M4%pyfZ)d;AV_X|f2?t-!v`=OwxDXlZDcaY6tT z7~`4^GV#VliEaeiqoqVMkkz-9F>o=^8`Mgw`r0>&XD`MRQ09Nt0?lG~;bTO`%cfXz zVp|x@WFFT(x};lt2liIuaAMn&ngV?F)NCu@{CP(GVR>Hk5)Ca(@hJ+%9-& z!NNS0yq3x5U?Y8w3b_9Z5F3z_v7xZX0w7~+OttmwQ;o4h*ayC`q-RuDfvJ{dVejYp za&X&8Ib+mhkt^K)TInobd{rc@c$hF7rSQ68qlp_0B38O9t!8 zFAOn%)cZJ~5SwP@WMcb{Wpd}yRq}kf8w-_GBOTLk)aq%`M_ZzT$GF71Jk@LcI>z|2 zfy$=eEXmMysYl1WGR9*^s*G{6a@hQHCbG$)$LO(j)rU-=xFdvl8_{6Ns%e@CQ;?B; zDWg-b){vc^2-(L0_B8A$8_P9f2S3xE;XXL|Qd@>Ih|= zDbP3j!Ud}7^qa6PETg$1#XCYFZV2m>^$3w>Z$q_4`Y`pzhc!KZ8xaX)s#S$y2{Vkv zBlrhStUd=i)Q!cmj#`g^0%xh}!JUz|f0q6~MQ=FvZWyWxzkOPORi|5R;0fVI9rKe9ce~Oa&yIIKmme~gUgt+B`qml{?_uZC z&wNe+SJ_(#;)F@|pJ)H-Duvw(CRg!JOAb~CL z+cu6v5L~~-K8jc(r`HZI8Qh7gAB01%RwsFWWZhlcH<7Yp$&M8*rd$MLt${*NXqlxDu9oB|_0gG<; z>e}2{*c3rWWpHWd<;$_ArjsCr#^(v)hK)K7B`(ZfdN36Om_9pk`a_|eC8548u^={? zn?k2cRTZH|W5kPaymE>-4RnDoGKAfo66GUDI#?)fTe>ST`XL0ynM>8I!oPU!!4svw z14I10-;$4mxm&Jwkqt9Z6~r^=zhJ6(nXX+n{<|Us{i3|zm+cz2pB*evBI)8b!cm7c zRQ7v?*M*?CVmm-^_8d$-MCmOzZPG#b1Ejl5f#ew_p50fu{P} zx6BlG{VuIT)n99*By@x#R86gVA8n8UJiG2r=R0{(!<6t$WYXN|#0YQU82OT*4q{JC z@4N5<`Psq=OqmL{AX!IIqMRXL0;9}#Z(WK_R{LZatNIvvQ`)h|F*AeT8FM)D*Yco; z3SkK}DBlV-T3v+d!>UJe*gu0!%|8VOD)N4j)N`FCR)FP{774oljJI+Ph1yBw+-sJo zs0iD%>5OqGRQU15h+5TdT04Za#JR#ZKH37RqbdZ;b?{I+Y@(v{=zeFJ$MTa*c6=QuQxvO0&i5(FrPq;9lk<<;QYu>~hUn?rp(Ih)K3l`;3lm)V z+-O=wB2~u~q>{pOoKe{p>*yLXhFlY$i4mA%wWQEabRWyb@;Yc)NOQ0nM`%n}QlrGF zZ38%~dxfR@Y_qf~GV7PHkFkn`DfC;BBCr#8IwRO;Plvzu|{D z#aJ4p5fmD6e~m5FJFy4i_>2Xd0|Fyg;=KC58_3_mMAe`7B>E6$akqQ5PbhiGoE?hx zgUo5h*Ax^9K+aWzHg)R|2=OY}R-1Pm2Z$SKv8mSrjHBr=f2LrAd2D_pK*HH9?_D&_ zr2bok4^Pl~%#+VTB+1$~0uN6f((bDH=d ze2py!t9Hra@atF^ml$g7f4tAAp`T7bBPEcYV+(#go)7idY0IN;?3+u2d7R{`tYKF^ zgYy~^acu!h1c|T?_BesHpi&Fb1%W*SGp`qQrQREW+Cuv0%G%2%Rq-P(vaT-Ev;+eZ zOMhKhO(+X#uE;vKVnKf-jN;B$z&kfCJHjkBxK4NR%T*eFR96s&NtV;XvPVTba-rJF zos8|%eQGGPJj1$sMDUC6M*M+Vygk~T9M;YDjTbY0-?>}JFGxOk)zvE48xc%7pbO&o zO-CjOZ=j_+C3C(_+tDt(9yt<)-U)4YB_TZ6ylsdD(*G=9(G-elCEHqMSU3&GQ*M^)*_|UI$ZHiACrSFyoMI!m&vrw!bYJQenDWoK><`)09FUO9EGV7b*v9^lXs!{1#qcJGhhm8b?^e#pS7{HUs@z{HDE>YR^j zD{6TEoQ*Ub>MwP% zjZFF34~${X+>O!g>~_rh`0QJiFXv~C*D8U6>qW^dd)uC!HpTFP4VMVGhITpgAH(vK zmerom$qTYXfol#b4hvDin}{m(t}(^H7%ICnF`uzRew@Q~brxqUw;4=tPHh3Uu0TW6 zed!3U_8G(XaAqcQ6f!Pq6()QH)xN9Lq$DqXWU6&?gkCi?_+gx=l0`KbRgf>*9M6~@ z55lp4d6&>a!c4%jOB(ovS-5@|IvG^Y1gH|Xv^RXGE4-5)T`X`6j3#$V{EZ%6Q!ip4 zO&UcAJZ-u*GU~)TaUUnQZvhBo#w906=-c$r0A>;xt}r~w$+qijqV z7#;~knB8g(9Y^=+8%_k>i48g-T1QFP?`KH@!eIZn5#RBiV4J_Fe$F*ldlJvL-fE+A zIn2Ss@uukUIh`7S8osQR_va(;)!D;7l~9yuAz-z;G!O8xqtB$)*bR|(2;xi@^*PPA z-npmTj0-XLnPul8bNbU7Eq|46spi0SoK*=|HMmn+f~fjCFqD^$)}rU_((P|)Hu0O3 zi*P#F>S;?+h>d8*jD&7 zb#6%@E?-2fhMiD4WijL&q6F2woDH*u=y~d^)FYO&nn_9E9Q8xY1M3}7%#DvWb`o(a zCXUwnS`Gv}QZs-i8;Du3o-?_KdJ!lGr|4AzpA%lcJq*YvinT3bBU3%6n)K*0zz6y{ zPtujT2mjB5LrIWHOY>kJWwq3F9rOve+IgSg>I zjm+?-s%+EsqgDk7Uz3cQEdHYpt9OSk$3^_y;qYGoN3U_pAyJw>U9x&>M4+6+K7IR% zTJC|_yQz!LkGc8>@$&U~;lb zz~Tje&C{p={PQs^JZ{F2sR4gtj)8%I%mNpa7WXb)(F0OgTDP{wWIcAq(d1Y*C!g7t z+ONnC?R#IxMLPI9oysg%^BD1s{A}cpYelXV}5JX%)0J1d9DQ}I647kkuF!`@-rBXgxivv zjugYu5C-NCwnho>tTI`BAJzZ+xz2syW$jMV<|DU+g8$p$vC22*2yL{VUsB%2(u)^;&T=+t zlwC(2PK?x1!V+w?nP-k2@DP0kC!XeQz%U%rIJ6m%ckKoW2n+1tyw#~cx#VXWCC)$L zZrtK(CoPDIEl3&e=5pCY`H_zZjyt`V@jpcIF-30mpCQgbcTVGt`3R<{#Uj-(cC)4d z9(!jisw9oncGzG@NU&*{9}yfaI1Q__F}de~!FXHa732a1EJ!jAF5kr5E=YdLNqo-I zagPlkO3l*;_Ls4NP4mf2=f^ov*FCA5Pc!ulA}|Jejo_`Rsp;FS^Fmk9TxiL5+Q)ey zj^qqxMK&W>Lc9F{M}MyuQ83qhrMI~9MS|P61m2#@K*S>cCFn`%#g)|^WkR9j1-FJq zhPlR5`LY2&7>emo-g@WFxmD+`z|Q=Tt#{4ODN0n$jWX8A1*^vul=;aJF(S$VT1sIk zlQhIPPy8qvKv+iEIKU1mb<`I{?csT3jXHW?!7h)ELKbsggM#8(&A!KpUEM@lH5LqB z3L+%`J^ld1GvfKoon^fEbF6~TJp%s=NYE$#(_$BI=Uk~?QrmnD-M-sde4_#~mY43& zh9=K+=%d?E@s2#N2(mtdU4Dz?A<>M4hW~Wx8ihe@1e-G^2Wfv0Dm7X?p1Z zT|^eaR9H|lS785WQ|i>fGY6ftkPY{us#cNz0)E6~$AF3_&sq>Ct)98;m(AI%jCN;r zMW2jKKUR4dzi%UElV z6q1Xyh*^dKrC86(x)sZE!&T|+bcAtXcW(rz^vIA9YP7XrD$Xs^a)22>OoF9$&p{@Y zAa1+t`n+L_;K(@?)VkHf@6#1zNXOjaEU(FQK=V_`CH0_@_ozANR@$~~XK)7VaJK*l z$D!6xR{xlsZ>SV0DNrV}Esbr3X+pO1KRFl@ZDwz*yT~jkBW`m*f!I|`UTi!7mOaor z<06!3rdIB^();Zm&slj84WGbRUqk#z>okctvgCa-++TyADnqJYs31&qM0|PC#t(BU zS)W`Wm>Bx6Sf*U=@H*U z^eE~;NfZ7C8P+j%I;KGXDc}nP@;RGiV#0W+W4s&J---&LGG?ns*g$)6bk({!6>U9; zsj)mf7J&7Qiqo;^<dvBtm3u8ZcXEM2c2H^30Wm%+)bQy2TEnQ z^33eMY%~0UW9^(lV+Wwd*>Pex@rBN&gh6{t2Pqdaca&Ka6Ej^@pD9vnu5DR&qGgOM z^a>HeCCzvvIu^*1kW|#*o&7y%@|591u!qb9y3YacO;V4!?M*5c6i}$EHb>&Ay%xGm zq*~C>NMdcWdg-hzVQ@qZhqnEACaSlPnXhZGPQ~D{C#lg;-%NYC=$8FuLHI-Qx<7rX z*%<&QKpU5>2jzuC3++skV zSXRcD9qF({P+A^^&Tid#Kp2WNHKxf|Zg4&YZ_aux035H?>}S-CcRodyT^R$>&mW+W zQk4YQR|R$6U@Hfp<-iG?ONSucsZ|5u`>>KEDozgcZO2%3T!3$8*AH@~8z51(R{+V&MPpS#$7YK&|zJ`V$JT@Gh+=J2PaGs$!BP5 zU;cJyw?)ONb9JH}A(SG$*G$*{1TBNR@RbuuR-E@P{S4<&$Y^Q=2~$T7iQvn$UT{Rf z%&tc}{BV@{3fs^8@eIUM2Ca`adzZ9@meKgyKJfs~G|N)$u2A_CV7kJ~_z1ckD&bbu zg^3sx?4NArt#1c>*pNOH_9ZZp;+nl)rr6*rL)P(~4q}S?*q|`%ngm&?)$y9J7+EAQt=5)xIhZ;(fB0?jk~pgL z=9F1!T9w0>ImjUcn(w_TucVlfhTQXlYxzfgTH)nA9MFzD2rmVUyWG^ol0(SXV@;^4 zE%hO#q1W{0f&xK*;-JvFE+{l2esZeKBj{wQj>8ne%M(45-B|)caI;V(CGi?RH;Xopg1Lu`O(rjIl zy#5sm$@yPE&H69L-JkC?iq#BUlLvD1@);QhV#)1kHW-$S-A#Ax3B~br|FoKM=w5+R zfU36Pw|s?Zd&jFPvR%Sx{N%Zw`&TehEm4xOsxURv7Fz+YV2>IzW{esn?My}VY|BH`e~ptQ_Ps6;U=MVY8V*~oAa>JE?pl=F>8G98|Qe`%~{jNb5qMX`15mkm19oh z2Aj8&2^shF)UT0K0*<+V{up&r z?YSCx{QQAY?j4dO+66!&c(n4xPuQUM%wsg3^LL8Q>m&PH*uEMH!YspJJAtg>3GGGez6En~JkP|IC?K^ORrl0=*H#J&gr z<_Kf5)j4N-s4kEHFKOdF`2ApW1z4177+`&(P{VxP3sr<4h&gA;8gA7%cMTfg8)!+E z(-aTLduRl7f7++kj&x~Ijy~pg83DU+Q>~=>Z&bjiHTnjVa2dR|$DAhc_ieeY@UtM? zh&aA>AqHQZ^PMb;&J=LL+u|X2G0et{SXPb2S~?wDoBh)t(d~_7Vu^6=7tx#SwrQqO z-Sik^t;k&F`&>x$mjUcp4g4surt|{N3copKg>&}|fipo^TO{r%pGQFkhGsZh>c?5L zsicOLEI!az`x-28avePxx2+UI!dK=Q9X;aU)*&R5T?ax7Fp#;DqmXY2JhvfH&!Ib( zyzDLJAycQNP=R@Gmn2Xglnn^RL1B|IY@o+9Ts3i^sW)q01VG4S4)v5TSwn|ckS0g( zv+{_x{6OqF0pu5a4ueg{)}?BuxA@Ua*23M9WvWT$l4L6YGc%8vJ`+j&bPQ)Io{G}M zh4*t=Cw3sUUiC$!&5MKqYv4WoA3A0te?wpyu*Al+RQBUen~RE}&!md=j{r`sEol@1MoA?#XHS?M}P z%u-CXp!j_Bs4YYbf^apV@dLWHQAKt|Qh$B>s9t;eoBGg(6J01-JP8$9q7ly;xZG8D zUfi)QZBH|KOZ59?uXfwhC+nN+SF~HVxF+YtZQ8aE#lt^{HeLlHHque6uh1HAwN2iB ze*ENjQ+)hGdTI4l%|A!}{S(K&kpI^XKldPB4$PRE8$9c@)X2yLs$Yp>ls~#Ys}EAn zOjoFHg1V>0moU+avJ+Cctf7;Yj2TwO?Kp~=-`$|}F6tlwcD)+AYHC8!s&B5QhPweg zbkK08w^$K{GO4$Qhnu9bd@rBS5`{#Ur{7r4vSdN1afvmSUBzS3B!j20*9W<6s5POYvmXoC6K`N#5^ zV93kBf;MQ_$=Mi^QyJrKUI>L~tZRS%Rgl0(@uS{)^5V|o&88%RFx zQbX;HRq!=j^6}t`y~9T2*H!eo@oHogc=+Olp)L;gy4ttj0&OlrTi4<9FoAMp&&8I z@wZ1KJHRNU@N(X`c}2y82`UDha{5BI20i>Kj*$d|D4hhw>p95k zm~5Gt{{J@zMk{YJ+{Q6Q~qNXgi6N*tsp^?*Q?1?5bmtnSQa*|$dto~A*c`xPC zp9*?Ri2%A}3th5ca_>nmhc5v8U3z)utDx+*E3K>zQQPlD?~BcsPT#k&hp8Tup5k`e zzI=19wzHM6X|aX&Uhswd56qXgtH>v1k|!WHMm`xVvSaQ=8mHz~=gkSJlC2QE?%-)x zw8BeP*K4jrnn5W0<>Wc?D^`XqG`qo-kgU1S9hgEpNo;cpBty;|Lv`(#`8_ZALf&u1 zdtaw!a62_~^s5DecFm_P1>(O-K$P;=ImSfVB}pl!WMA>&oHqT*9a(W|a-|fQ%47;R zQy=a>(yuachBP=9LcZ35KF|4sn<5>(-pKGO8!sqQ+drhVc^A*Ur%0XgS>Ft!s|7Kp zyt56f95J7cITyWW-_YxmHGol=+!vrgAaN8R^UTYOL1}!8%I{2XtJT_3 zB?%I8^^!|*{i%{4PXHPjorI)&zS@A#a3<{4Ct@daEY^O3|6peH6L-KoL-7s9in#$0 zW4A9BEuHP~mRZ_Tckb=)xbD=>PN8|SHY3AVr?=~8l>=yPR}bo5FOtk#X)s^<3ZOPt zhhCZDQ9QjBl*dq%-q+*}$Ny=rH_2|O=!?_Y&`Uj9H7KavATIuBmlqll{Y&q>01US2 z{@#-k{;(*da8ROLkJ7Y2`5{$rdQ7*gAb!(Q=mrgpZD~GQA36ujv+8*)L1e;ZTzc29 z7PiDTLRwcspB-4>2kc8SSunQ0mlpnlBxM`3oHOQNPW)Q1C}U0>LtR*tJJ8-L&RmXL~4>4LcpYl^WFQA2`W zT{y5mEx^-zNd`TWqji9!4(6?k9$wyvM3Nrc$Tb9M$L2d!Y#hsAHDUJ+;IqvU#Q8X9 zkK@nV327x`Dx>IC9A|2=ivOfSef64*&69m-)GGJp z_EIiWa&KklszEJ7BbYu5lw@0weCleS3)B$|lTR?^bds>(=dz%pU9Lro3{#-<@Eoxq zipoYa*G+Wqhx;@>^d|SB8LdVezz%xGB4`+9o{7MnM;d%CLDqS_wgLoYZ1+6$K1A|S zyhb?QShX1lj*IJPL3yX-Bf?ag*UaYN-232Z$+5Q=#dkSJ>H*nDiWXDF%tOr?U!r?7 zheRRZwiHJ7NxY0Df~Bw@$rsdN<5zjBz`nMTV7~9#xE$51;ig+P&z5huY2NP8yzTfI zqV?(Hv2@$9^un?9)xUx$Aa)VuwqryN-ki$Y$$zBf*)m-hj_pLpRoNpjt$;R!>_h?F z98#<0$V8)zko(~$*TjL24JR7fA+ zv9?P87h&;KUu6Faz*Rj>RXs)g{wwFHs^_WyUfC|q+AYmG_&=1s|IS&&z5nylDoq#i zXqhoKW0Ho0oqck*c7Hp7NUTDNpaIi9P^y8T~bw{FPBJRzXtF=cf+Cl%9$#@U% z4qEO8U%oyGqoBWiHEDJA`X2%&A^G#$l=u60PuF#iPO;nnwnDx*l97Y1fbdD}beUh( zPlUVO@luUek%Zs>&L-)4eN-KPkTfN14WYaf{qA6v3Q#YvyhwR2PmkpgZhGTYc* zPhJ&^@CrwNB|MZ+x%|E9yZ$jrMe=E27FC+2rFZi(nW= z+{<*eSWU{lujINhYeT@oBfcmN8K7N+T<%x##J&o~x^C`0R#1DS^f9~b@EIb`>E&1H zU1l!RXlK7`;JBY*O7910Bh-S~UpY;s96x!g!#YYDkNL`pKeUMlyd?x@xk7Mk8^D7! zGWx4j@T?Q77{G#N0HZgNdh{x3%yS{7@=NUz;1|)c=G#^0fbeTz)NK&3?V2}16A+?rdmf-T@XAc zLyWZk{7l|e&Z5U)GG=3Qabz)%xHZJpriv0I$_bt#V^!~JNJc~io#Rk)H_%lR$ry_= z!~~@~v>vBEF-BrU2;R{){{JGR|E(uQ97IUZf9uqLRWnbjpZ*ym=n!0Cg3QR=pb#KD z!HS>(9%Bdm*xu-@BtyexPwuZE5N_U~e&z=0r@-9cHaDhIL?&#-q-q_&l#I_cbLm`a zN{;+)Ug6YP9-ptnHKSE*@qvgVE9u>jxTewBD95s*dXXg)$*V&p)WSG_{O^xF#By2@ z`cgQ|{ZuVnR;Jkrvjy%kmkFip*qALChXeV?dm8{(+R+~bairsFLvxvU(UQuUAPcOr zr75cUV;aaYZRaTsd$+U~hkTErdLQS9+XiSk zVI9Z2ph3ACdCkuKOE2fL=261_i4F4}VoBR>a#Z&IvSytAFMu28YPW!MN;^^=cRBVk z`tEDhed|~4ZmL10*DSV20W%`OAAuITyih?{jQ3GZc z-1Xgyb$Ggq>Wy!9#A+xV3@E`z;Xv((V%hTX3L10afaszY^4mP%p-w@8Axck)hC#Mm6 zsKrS%e*yA%E;u)+og@6FHq!Cqa?>cg_rzmg=&sR-#SLFXIwVHD;qV+V#|zoVRl<48 z#VLwM_ubQEJ)Y`bS!~O*l14W=Hn}yJPk%(W4J`=!T6(GM84U8XPcb$J?_r8y?QEvr zbOBqdIW4Ny@ZYVFJ`26rb`g;AvP?A`>V8KeSzsrUjfG^E?cSF#YkEqAg_Vd!N%tjT zc|4&huAoc5g1OICBNC2w`I8*ByTw1QWdQ0`v0fH5Ks#IH74v(PKTY%HMR}BznU(F3 zi13=06vqByebZaNJv{pt;OnIkT2*9Bmp8LYk&`PeF)9h;uO$_?iTB^YOdO-wM5_=Q zd3^2Qi`pjWMm;Dp!ZSXxVf!k0vDC;L7(JT6t(r^ z8x;6qST36*-0v>{8N({M6dK-2Q(MMP1ppj{HRxhwWwKZji_Blks3^NZ^hB5?=J)92lY=4k5+58y%pzoOBW&hBNLV2!btlccLkB zEaHoHC=q$MrgX#&Tg-;^z9@Qt|-GF?dpFbf%4D#@%^@>=lfKA;?^@{2m%Wk7|4k zs}ARfPbYX=+kO{(8h$Zvc1L@b$YM7oqLfT71hrK=a)q~|mh*Y={fZq^O21bU#rVPc z1jBy%=5h@GK*Q6Ces9-ry>o&dhm?fCfa(mQ!nA#XI4PZBw(ZHwmp_J3r1 z#4iYnrYBXtW4BFyF(|0Lg@!E(B%MO-e+Y;bFDyOMRQnvsZyfLc1#~ucjBgy=wmgQ^ zFps=1c*gQ7jmp;>KqN=RpNtm7@)p0q`BOJ>%eU&7v=cp`9f~)K^RDbr5aNyUnl4%_ zM_X{zD|CJb&xJ;B3Kt)W(*cRyw+J4E%wB!5+KRQbnHl_96h-8s0%vk}MNP#ZrM`eB_h(7S5ixX1>c^j+KS_(qg3!qR}* z^5$z;=kt<>`Uj)KXSUxWqa?T-fBphsR=-sz-A^m-(j$p;ZNr=#FHm4Xu+U5IT-%be z;@zq8+;)^t1aF_{(5@Co8v*DRxdZ% zKZRmOdqCa0r)8m8dZ}i``3(b09)>2z3k3A*ga~h`Li_rD{FL}>ChgKQgLG=yquLdY z_156PG-1m8m%SPMD;Uk?On2$2L;j?5&=0gaoPp6mfhbG9xv<_?fniujt~;!6RQE?N z`y4~e4itx!uhP={09&-y)ob~k;=~E|RgofuS4m+S?Ub0c&@Ei&>>7} zuq4QCOZ;j0&VJcqc+J^0_nk8HREj2)dGeU|r1)&<d`2Gl}OI>7HA=R9ElyMZF%L07rQ2-98LG z$eA}^dMRq3TNU!}bgl&lTnJorlJ?^A%+Cmpy|~<>p!;_Cja;_=(}tz_2pL>~7GwMg z)N@4TfJL{D7j`NP*SsJ&Xd3Rl?X4Wxo~^o$_me(6??L8Ymd?%Lyuf=$lcs2LS-idU zBYfYYi1tH)`VPMP^IyP*_WeP5P|AZ0vWzy`Bgu%)8=7F;OA!k5U!2|%wS{5d>Ehz; z`z5A-lOglrHBkJ{o<#J-94x_j*QVPX<1MRBlufTkxots<(s);)Q2JCdQ?eP%x-tIV zFeiy>OHYk*(?Z#%;p^DOq4PRtXrzI- zW0D%A!l)#yc+^E#@Z2CV%8t)YhdSj z9%rje(k+%}y#)%95WBO|l`j<{+^39lEIx3j-0(-Bo=m%U!Yii&hpFf-Q?+>FpXQi8 zU8NukT(YmbGKd7uYynVas^I*UY;p=A;Nm=loE@(RfM=1zuu3Quv;s@$8qLWBqhF{%?h6$*0>_OmyxlHLo#zc(bI5MKCo*waZPY8 zHdwLnh@EmIj)bhWK1c84Crx8ian?;h==zAVbu9RU;ROmg|M2J$OPo5_oXL#sfE#s5Etx*TSa^bDew-Gy21QC=Kg# z%z?9%6#aSF>6qP-KP+3BId~}ds!r+BO$hwe7Fl0HPCw1o2_1fHnx^;vxt)kf&mFG)`K&Sx{^&(wf7Y zx#hx3{l2ES5a$FfmPMmnln3N6AAGqRz?t?i+;{x?;QCYJZ zPJG|AqkgZjb*n?*W3Vs5@Ne~pjQeYx`&du57d{uEki!UrXpOuMxq}{n@fo_bj ze_}W#;6cq#s&qFTwUj4emHRqmW?DVC7Mf(eWW4&~qR(@&o$@Z)PHJ2 z7vJ0GMYQX_`@tiX0Y$)9*5B8(cTsxg^4qeXw9C@Q9yPken1|1LyYFC{=VbZ4QDgjX zN>^;DSB7o)i4x+fY=!IsPE!M4Upa$s(Z!4X}$}w$bAYZ zraw;=x+AIXpX2|;-dhIO&Gc#B$IQ&k%*-4!Gcz+Y#O#=vnG!QoY{$%Y%p5Z_#u&q% z-0MFCjP&luI1mtYl-$vp!zVJVcbMzA2gFC@$j?*MhC!OnNUwF17PVSyDtSp%(> z@C3T{C!9~nTrBn6Y@|=A!Nyf$4~V(DQJEA!^P4zB*(F_$sK~cc6VAE4BqhDI0;~+3rzpcCDtYWeMI`Of`YJr9jjN)c`pb8008JKcu=%Qnj4UjytpE5W2it$gFFBZr|Mp9k-|7Esn8g3t4pk&Y z|F+E!VrqYx=3l}m`2*x$#ZLi~?YzAwLT0gz=Rq$L2qLyb!T{{Zhl z0Ac_zP|)8qZ~_O;5YP}1;NTFjP*9N2@UZakaIkQ22#Bc22#6?%aB#?&$S7#&7#JAv zNLbjI=-8;}80f!$1OyDY4>$x21OyB^0vrPRe|viG1E4?y(g0~-Afy0L6c8{J5MT&J zd|=2#(BGla|GAWqP{3mZ0fh$U;sMwH&iyA701g2P1_=f7z6yW`17;$FAp@f>zLfoI z3y}F?PX@;CxEGjdS1qE4v3EwmEH1y?58Z0$Iky04e`J8KF7P`Pc%-UMy0{RwJ*O})832lFm=eKoZIGw-?UE%iZ>~5w9*!_+((H=m)syuvI|(VB;~|e<^hA zpyupJJHK%RL=0!G*m1VE&SE;@#G==fG~XT zTZC-q)b`9x+Yp~!yI(>+Cg4}TXYt?yAb$~nwI}qXQ?VAtk#!60Uo_K=%{826Ly@S-)inI z>kI;$>=hDFW^NP!2q-8dBorjnUowM$f&t4T3MvW96&f)x=w~4$I+;jN?+h}As7qo! zGn=rANzwKnssqcg5Xg&0ru&_?HF@rIUi_>KM)=owt&CzS3UP-P;mPkloUv%c6LNSA zRC(L*)|=vyB89e@lhX0-oQ^v4ibOhFGW>%#7l}jHQ)6X0#mWL&GVG4P*5%b^?o~+& zYN`nbj>iv`-a`I5a)p&q!MI&JaCuI>qW@b}%78X@0 ztp7uD(BG2Z>TRv-Der6(%u&YvlE0M?Nz6{JYg$w=X`C`@#63S(o-n-xzFv*Iq>Fz> z+*T!CJ>=6q#0R6tR<8A}YUgKYd8^8@zs8F;oAZ!P{sh<=Xa(e=ihom!)y=4o^(z%~ zYY*(_rn+edWyzE^&byO%1VyPCv+>8!WeNd#L3C$UhHhoxk@Fz~OAZ(qG$b@6*k8Bp z?~(&7ILZ)c#H7qDD$cATqQ*hJ802iKMka~%>>Mt^g)?HNNq^n4kV2r3pydvcgPOuE zR|KON@pd0~5F(PCnrLv(vrM?`?OJ$pNLRmWMsCT7_~y*(hZ%Px;nw0%fu;EcD$hN`8#UR zHwiSZG~wJanQyGQ;oX{d00uWZ2YW1XFDuMNu-M!q{T=v4`RcqmqIoCo{0d|F%97kj zoo9>NJ+e7fY1lC~!*H4Ip*(6@Wm@G8g^V%QU8OAEpoh>2E^n#Y^JUH~buz7ioS=L4 zmP=}tz+zK%m|g*02=@IWtp*bd>F?*XdB`nOX2+cs?jSfiw$;?%zqEIdQ#*JUV%985 z@jALH=9shZ?D*YlbK!61a6R+?T$dniid^)Xv$FeymtjXW1nULBwXdycy@|A*-$1qM zQbJEwqgEpbNoI7z#W?T@72*$Y$U9jBO|OiCrlU3++yhQkN!Jh4Dk5oK$At*ctKC%)||*_;H=u7$wY7 z$q}ZQpS%0}CXH@dX+-VmA}Wz8@!G2k%_%NHx^M?%E3Gesi^?P78b!sMe>f2hGSJ0= z)!^Ty30MQ707zIwoSBu46ASB!fflrVg=}>Fx8VzsyaFSm@6q!vRb{x~Y)``t6zk)=FK9#S6fv19o&lGgAGo57jZ$P=yn2 z8c$K~>2|j~uo`^t+=q2CCq)CBVexQ1S%qz@U2FqO{|<HX;X1k7kg(>BN!C#2t z)&(=VR!zM5Y%-X`#x4OZ*Qp3n(FTDZ5Ay0(`65jZ8MEPFh-8_`f^9lvLY=5+E z0Kd%w`F4u`uQ|`_cVg@iN66!Lif3lZ-_?-+w&V3-)8rQTcxluBo{9f<(r4*M3vjci z8D61(?f7>BXhqa0z@h^J4FV1{puemLg#|!N@<+_-AmqaOUS?rn;rXNF{I0Z+Upj1w zYn!8uxv)NKtmlB|X+wG5UVh=YpwHw8!G(?|MIv4Bl2w)0GQam|xki+AA%6#;S%!iL z_rRXbGiQ$URD_1wP)O{vC+wRHBDHZk^Ht<=EQ3G@IJJ&}NItQVPtM&*u`(NMA7XlP zVY>|`s%JbYj;(u$N6-c6uTfpWY!9Bb@T{nM>aO4DIVE5gP{%p5cvFlVyN?0_>maK! z*rf-Isdhje{McO#B~U;Ydeq)l*;OGUQz5j9g$wU5T15+3(7-+Hm@!~bM$tBo8$cDJ zI)*NO0N6nH7QOM8At6K}K<>x8&p!U84&Zk?_iu54RSXIV3$Sj#5^*l9pFs{v1nTo= zmHxYaL4GM5fvgM7OCO*kF^qeh0pXa_pc^*Z=%bhhOOF&2MWPiDJVZ^scxu{62!!JX zU4|Lh<=u1Iq%V4FwTVSz#cAY=Q+VEzk>^V&!vt%={Qmu?AvVRr+%NQWv~tO*E^y%w z1@!_;0aufKo$J~+8_I@lEA-E#3Bq96^=UPCMgxY?*i_S&EdKrV$5>5^tz$76SjCxDyV+FVd5&pKrpW9SP}ODEfPzE8U0zpuOqbsuO%_ z6xiBep|WJ7cU&e~Y^hVR<o<#&grNt<>KGF@$*_&{LWn;yG ztdo#(iqXErl5>Ey^OD!W<2enpBP4*Hj<=;$fAxB17M79D#g@Q?xd>gL(0K>=gt|+0 zMOs3_6o4He6emfM`eoj!svv$UC%oVtn3ft+i~AspDwg{)Sg^GsRqRQ0zrgKM-X12I zq!h^gjQbNu@g7Yg3c%&yXl_t^pnWG2yMbB%4sa~3?n#d+#k7Pc;#}QH!d7u7N>%Yk z+=tHZo1U5>hi{=-9OlQQc0;bGLdH+ZygcN}X`Ys5W>x4bim7ybRQ;uNX*G*0c|?W4 z)Wc`|YrY$0RJg@=xWdqaHiIIA!p>CaL)14po0nq;L~|p$TF6FyMsBl`z$0bXeUmLz zCHl&OQkc?&hImMUtjv4#g71tw$}B6-7H;V3H z(SVS)_Tw_+#(ovG90+$GW@)ygMkaO6!!U`I-lcW3?!l>ZC&xja#XU5pdEwsF#F1=5 z+?+kLf^RpEQ^^)Lj5Xfa@&;Bti)>>gI(FXfNP{2ykP7u?l9!|m7{_-je00g6i#NGD zhVW-QblW^$3&>~W$OpCtzH&)quoxS+LpVL(3O6OCmZLbxm-xH`s!45|GEnOjV07`{ zg8mDt`QPlN|A$Wczv-j@12x%ycewvwLCtJgS$q-XVOtAJwW0$f1(8pW2;^-r$~P!3 z-$gQ%pFnwhP?Kb*y`Tj_zrsi>@EnpqqBJ-_D^EiUBCmP7m-Feu%>9B2; zex@S4-+J79ewd$k(`w9w-*nVfjaSqP*3R?JXca` zg~<+7nxIp4e*a(F5p_uh8CP-Ja)m+8n$E-@W9Ul^o?dLzljlOLw?u3hVfl#&*Ytbp z!V{DBm-gAHSWGJLTqhD-HcJSgs!F5Ps*8t+fdpcr0-35J^-3H#%K(F&R6`j@_3Yan_sU*HVuy*%U$kQen>?VP8&XEtO5CKBr7Qm%TPl67pw<-W^1*5lzQb z?x}5zDr~1FIpxm3p79juY~c}g$9fu{?@geTrioYnx`Fx@EA~Y}{aa_9aw^8IMLy>{ zIO0$Ho63qo+9B@|o%XdD;L{pdHI%_RaEIIX6c{X-vNVF9`%^lfQ!)ABoHcyQKGYe| zkXQeNobRYmQAc_=A|;?d=i0*Qk_o4315xGoBKwHPx<;y{PD63L&o~Q;F6tW>I#7J{P9eEUg&#ZJcUaNsW5yY#o3U5^d&F62C-b6eHJ2!B z;*I4NYi3YiU%bk3F0Te1wuRw^jv*;-d6H|ww(JN;cPG05A1Y1swxXysXl4ZBzSwj{ zLq!#BpC9 zs7qU{LCu9KGuZ0z=pB5?Yq_;~HYT(wD0u-{j@z}B5jG$8#{Ayp4J5Q*X0&}1r!=fB z?_&c79In5f<<5etpxJ5-=hrrL!UWCYE0Deh>rJ&FeTzqo^l8C({^5O$3R&X+uwns% zkFxX?fdxX0uPDLVf%MQ#ktm09>`u*9zcrsl+7j)^Qm!t55K8ZI$Qz$!II+p5=ETm! zns0LxLDM4LCC)HcKMHju1JV zuuWm$>HKfg?>03Met-kP4I~iP{y6~&E;u9zfS4H-9SRKtlY$i)Mak&zzA6Oh+cTbO zMWg}=1%uMELcK&pIXah0WUoc+K9s&!Uq{fwHx`3>ObLD=oLVFBxs-Bew`1+XH7bo5 z`E(s!M5iT@y@7Phm#@YmB9$bzs!=a(p?k zw`9Ib`y-OJWd593E?Rip3~o9%I}gi4TXlMVcZ&W9T^UXA?g(3wt1WpOW}iDF`O20b zr;t*wa$tTzPHFFOzap=TC5DccF*UOEoE}Gg_nutlyt;j5jttu~#>^EvckEEq&}x>F z>gmK#u}=(!FREm1#pA*U7pY>%#UyWNY{PZ8<7TeXrRQ#pRA=TKU~l2YsL450Y+qAT z?BGhR;~MqoH`ey_N~$Uqy@(%P^anpk)(sGBz|Q))?*eWo-He32LOLt+bz(j}W2sDL z(KXfb(vk5_re%3+ki0pZ8|fZc6?Rf7vg@X-P%e+D zw6xQQ=odo|w-YP4_+a8!rO1{e%TSMoza{(l6btoQ&$vmuh4SGGJrCPM zEnRl>V^j^fv@_9<{|V-`8xfgatu)2k?Q+FVkQ(sMjeu0PQ(1QgWo=gfah|C?MQ#`RYi zWUN56*o*e3TB;__L5Y9Txj#7LUCji0PxYWWWJWT9!!G=kYI^`gDmtC`kJn}?yq2b_9} z$)2tp?}c&!&YBBQRsq3HhXnCc)>W16FjmeUi`Ar=lDBW5H}GEaStS%UL#ZRRcd+&Y zDGZdM1gpgX<>`|0Vjs=8OqQ!-1*l8oqG_UJkzn!#lbm~14bBX7qT<BSnDd) zE5qhC+MLBLna9J!j4CRig>iR$X@MpUb(p7s8I)m1o^KRXF}K*E8E9q^; zUD1SC4D;jJM|Y)^hSOhPNEZ{h)pg8H^!@!YlQc|h{J+=GI9l+A8*WQa@WftI*fr)t zkDYTB^by!=W@~jOPuSozP<*$r80l6(7h`20%+v2AQ?Xl#8IzHx8;CCnh{@B;s9My& ztrv(Go)gGi@S*gq8W^m%uAJ1viuFPp!}r$$3sxPmQQ5Vj)^Uc#EAFKN6?NnU*JKTH#AoZs5f3`c-Dkzot$+z5<{5ly5B;8K&bgFydjEHTl7}XoogZ zEeCD!oVQM-5N~I1i;d0Dck;gGnGWytuD|!$Lhs@B+C%lS${du^K5>gCKD$f zae5G+e>J(i&`g4a!391nJNfabE_E02F=tS^{Iw5QaQ}cGU?4ERtMEUopFiOT5R?LM zU?Auq-rSV}`n9`)xN>7=Q%3 zVskr~7Pj$RD|l3B*lmr?_X4@Ckl;@B$heLMp?GIbi8o1D?!rcTJ$)5m{DTx-ln*Qk z5UbJ3CdLbPD1**|aMdmHx`G037uW2ymfH6Eg_fJ!5Yu&9k!4xGw<{KJSH%fsk?ZCbJ~z9w~L z@p+LTHN#3XJXJS)t2TNw3%JU1DW>GQ=C*xOP5j2A7OX2JH|*oG*Irfo2KRS+?f>Mh zYhQo!)=?F{&u&288uAW!2i$J*-vYf2YoXtHvI8lL>$uUk$N){ta7y z@B7CLEQXXo>I!^P2z(~{uj=>@t|+4H9Ax~v6ecnY|B2xKV6Jc4#FsW_`eEc$yHXDF zZjFzl!!9S~rj<)#HnhmsY1KZrY*F7rOq2_Gysyy(+mu%5uBnv|r5#?DWMaw;A(c|s zNA^pgu(+m}1E?57z^3%fE-C^n`hIZ;L<_d{^sxD%a4!}tYkTzC;C{HMc?TT#9DXk4 zqV*&-Z3vkTydDRgFw=K~t%dLkmrC3w9LClbxTSklUB{KC(k;5zcQgOKTMEw^T@B`5 zIKgJvsPJ;@y1F+J2v!*W(-^Uk2XVif0!>Y!>N3E12Ji^gC%gj@nE3j;8u<;MfieJL zNkA;Q;0wDYD3Z5BV%6@+Rs_E1bzB@v)wihbvt*TBYSsfiE*7$@616z z$cdmrp#y5b9kpHRWgmt!s&2Q=jY`;+S)G9kk2O@-gln}}gXd9C@)@e9x=@?-=ZJdC zC2VX+$6zYhc|3&-dQs^Gec+ppK{X|x_Z5?Dhr3=|Roi-Ps1xP|bnwT-}R z*PZ|;VvPf}>Zd*W7`4DHOK~ioUe;&E0G6E4c2~+24N|AaO!O8mNL;*yWqK{L7|z}f zfJjBPw+Nk?Dj;o58@#AYNKL+QOwz7(zc z6dFsC5W$0MDUMrn`c&u)LmG;@SFjT{vln>-6E804h#(;R7FfLH91NdWE5lS;q_-bh z8ibxr%9h|I-KItHH9H%`2_H_XvCxLT6=t)=!>OeJX5KC`^dp6^h(Tm*U+F7b^`&2I z1zZra=JHXpl7$>iB~Chzq#zoa2dG_SV;P-IAM(+ee~3h&Ek@3In$n}AJbE;lxLka7Z!Yc}lIy7np1texMwZ2%z^3^kYv!|=+k23VnN}xrHn6!6aFws3> zHP~c?ak*jYr*+~UZYsTyq5Dfg7|;PYjs7?1E+EaBpa3HKY#3L#v_U@5bS!+!RS)~EPwVgQg3pE`h%pB3KJF553{@psPnr(vf4y*W&?6Ikih zRRCd+ENt1n)XV}|-qx>5sWnIl=0L1k;Ad6rWM(pq^$3r`KSmt3YXF{JKXsYON2(l| zH3F(cNJz!Nw3hi3y&c4%P2(td%n)hJ|m1)Mv^laVo7RbPCtvK^PgpQvG(u_BqWTO=o zI8vJ{GuZX7EzjunV~m{8nj1sJe(wNJPi5ljdC_ zWJ9CPEoy9Z1m2~rOXApfv{96+5FB1zk}s+Lr4`$THxhfPa4rRfCRW3Z2<`}`+=x-i zWfg-xKaUz~{J@VKek=wOGc$68zhCv}k8jjLm1@m}RlT1R_!jv3lE7>Q<3gpqq zCbg<>3&Y0Di`7m?YW7K&M+(#vp5e!m^`>&38w;k~x{QsnQh{uxc;s#wL8r7(FwCibEa2lzsg#x zNL!D6P6|=Jkueyh`&!F>yrFWem%>fBchS{CE7Pj)c8Q{3G;6C^uIW79u$iaQ9Tgw# zNR3GA%-{52<6XwNz2*zz>73p7?K?hIYp0z(JnLPohz>A1IWC;x%^V@mu)!fd?}tyZoSQ*NRh7Q z%nF!rUo}<25Ha(3wDS&)P{>YFe8#d2;7apwA?oRED~UDg?J`)f^Xt_(V`v8#R^UU1 zF>u*^AvWdH3M>nK3-E^_FJ4=zIkd~(-B5U1*It~fbGOqFz@F&?6Q_h|-Y*KTi&uY& zB({A!77NAv0a+uf-!zn?FjbnJxv+?x1~a=Yr)&BlH;&3zWrXbc+iUGdF64b)AHwFM zAnH`q?I&?$o7Jk%LmG$i^&IvZ=^D~!Dr`EjqVnSg8CIRTzJK4ogz<;(dq}l{&b0rQ z+x~W>Ke;Uz$3NVbllve4`_~A1p5Ny6_ejwHIDr1oEm(+ISlKzb{~7)1m9y^c?Wd~V z^~m$EQ6=9NE-YjB)S>@|A=B~K2j7;0xl|j+^o&a4z$e;J zOpsf->i=t=iMXUfSjzD5!MigLZWTXt)&n#yG5~v7z)Kj`zb9hoxr3CBs(f?5;2q~@ zC2xp*Ua~x#gTx4D=Fbj(IV2s&Z0Id@Z8R$WLq(jJ| zv)2VB*u>#cfCc1<1)(Y33}r%HSb5NPdf>g@PilitX~LlpfpFjn@4R}MXWy;B+QACU zi!I4dyDlYR#0)`)v!^+?$O9cD;gr8|`)34Ei|A_MN!`-(N(^5RY|!~fA+UVGe%cZ{ z5`3Hts>SlY)@i~Lz_}g1FIaCw)hs%%uZ?&M*N~;nmtO%4XC=3xsC zo`?IBaTNp@Zm_AUDazK~Y7)vfAbq^;>6cRiKU%$oqjhv$)C?k)8p~+Le2g54bXS&I zNh-!8<6PA~3|GI6fF}Ja`WhECW`)?Rqc0@-)- zcFvCCRZOA06HIZ>1x-nWTTD*zOn9uzhaTvcRNk}XYLE4itoHmYi2_U|M5|>7Dw{S> zVd3iO$oom#s0Z(P8-bY6V0_OMYZ5lg2urzGv(KJh7G}QDV0OCe)ALxs_|?7ysRh@* z0y7&LS2d*r%!u}Cugwb=M{}o-G!PE$X;3v5zF>Z8NiZ_O`o&yNSa4KwyrsXfb&zg(^6eP-)0wyLI8p#o3zY78iSl&H3jy9V$5gE zfJ#!^xTVBurPrzBSXmY64%jQ3dZRZtMRpWHq_WpMj&-F)al?V9n;Oi)?BTc13k9_j zI*XEeY9!`y9A;zForZ_$U~lOIxW_*CveAwwh|LA} z9aB56HCX$hwG?eH^hmhj8y;68FD1UYOHmBuj#Y-&OG{&2rD$rOJNUjNr;qorGogkP zxD?G-Y|}`oGLt~P)7KV>eMraL`RSM3f9S;b;-^+-OWJ^Pr^FCFR=|s8&+*>AL2VwC zl|b-0g6~77vSyrnlS^@<)yEQD_x_(}+tyu*7iA7dWFrKmqTo4GailwaeP+3-2cW3a zh$G)RF-5Z=-3+^l6O8T^DWvclzxl_7f3|kx*h@Cl(nQnoQH!lSOyA!ZwV^xp+={(@ zhUly}7MX)#nD@gw z#1a|POq5*M&+LL~qXr=%sm6_>`^#8UfPk>)+be7@uHg(ET_|@19$sytgWj~;hcF{N zf6zkK8xYU>$KGY9DzzJf9cs_^SAPZvRJ#%Q&p|@?gK;=Ul*8~wA1b0~3A!4rf{SBf z(vz-dAKOx5#(Tu;ar*BK>iqT5(U7#3%_0)^R1F&Mt%WGkT*Oq4=iVrgGIYVdyy+ak zu92Ei%PUDI#)wzxk&uXc^*#Z+qyl-Y;)nA*(XhF^9dXU4XSP}v_V6vNnvi#LniEp6 z9A!ty>F~{AC>XHP_@>O*sW3y}$tz{-qwMYu3Xp<&n!1vG(O)4Ev_=q}e>jHVYt}jeGpjrXn=fv{s zH)RgQ?D>`JWYA%UtmZS4-70unC+Q=ecw506=@$!tpD>-wEEZFcwT_d@mNBDt26gTj ztzpZ`9ZZ%}k@T^My!aVZPUp<7v2>*UKB5|bxj99+7Nu%J++L1-ny~Ac%~?N^LEF_EUu~zt<3N7zF6bKer`SgDkd#zmgo*^&wsklP z+)z&@a8lgMl9VYnCB=qvO4t%uuQ zkI_RU%CXDjvYXfFR9zaRd@u?$F02=e93wT^QdXQb`UOZZ)k{t*G(`GJD1>|=tlf-5+YPHzxG+$P_O{xe z!IPYz-`&&#JNxGOeQWr1Ax(s+THNI7WN-qDM88Ba$d!>|9)ID!xwU zR;cszB+u}-ejo+LQgp%G8~6_KOk-uxp!FqRMR-2tgSYz-&Lr|H&v@a`Ky@=tvP_xc zXv5EYlPj)bo?6_Zeh-0Fw!d45jAxJxes286*`fjt`yv|%->tEWvXT`fKpbVMpDr+B51unq_ zn8G?Lvpz@`$wZ}U4YI~a&?Sejv*J{yRBWvhd4#YHgcTMkQ^}#0I;AbUt4u1Z@Oz-b z%p30R;?$3ydYY_+4%Z(FdN?_l9k#bz+FTU#8bI;pA@C{$ewx6H@hOLuPNdKVd6FzN zmv?u-Y~tEE>JMLFjdPRuvapHm*4X{)XYD)o%W1l1-saEgi}N3?m+NCCB4+vnruDc~ z+k49&hXvnuf4pBuv@&+WHT?<~{QNWpkC{gsBb^i{V$&>9;T*$}F)uZ_^c8JShqH7t zc6nP5SrMA7YM@#o24XEREGb8u*-p-7Zx>ZgJL*TgzDm=_h0`zBL+bJ9EECGdA_}~Z zhZv`qo1NQ12z2=f>|)QY%xI3*>tRGslUMT}j^sMoJK@Pdi^%rfS2kreIQyT{KdFFy{u^?F7! zEK4PM9JaB%`bYULe2jM2J2HR#}`YKzi@Advr`!1LV zmL9m;K}z)9qeN|mV$qNz&BSq-Xk3uK66*03*39 zd&*K{Dx|n94$L*qywB$3@*%5s+_Bq3Z|AXGZ&sVOkAsX=4tIlHD>}FLwll3N_f%DS z*XsR6!1qEbhbg*wo9+#MFf=Q|HIK46B66O2z2tEWRb+e0SF-+SIAn}IP1u{W83ko0 zWWchph+Q}>{c1WpYc^X_Zz?^1xMy+f?xVk44Z^7XEw4Eq$F%iJ=(-0^C3FYGiU*Du zVg9HVGE-*z$@x+e?PytlaGZvK_mQz#6!qnDm9zyP%!FS~h-^-RVuUL_&%k%eD`HjL zgNp9=t#y(VHy8RvyR~ml@n62(rP<#-tTmfNoMc=RF?IPrZOeDW?dByP8t|9?I%LvR z_mo>@8x*oVj#?18V`CD07>Kf>{lW*2;!8E62gjQHVj+GT=2w?1n76MoY(=kSTCbh) zA-X`ig@TQeTSzNR6wQOqtcvE0QZz0~Jb`ilC26qL(ADoXg{HWnkf33^Y$8K>huyh( zGvInKU2}T6HJ@;^;r;rT$Jvh#wnev0Z}NLPJ1&R*+iR0f;(Mtx=bX3|67&w_U(ELm z8bUAUttG5b`46ImqoS#z?L2gFu*lgA@?aRMS){%>A#6RP`6i3l1r`l7Wk0aQ^mucZ z2>PAR`68ds$x=yavXgey(Rk9!H{8j>$W5uUXyyee{DsF#ejReI+ZZ*3#E$>Sr_a*n zjPSk(j*RekyW+CzzujFzZ((w{X4H4OdQdXydrVdojf8nJ)2)h>4e_e)|0M_M_Qp?s*oYP0ZFsk=;GO5^b0t7zOdH?xwpbMHAoL78z>Q>BPU4u(GwRDYh0X~uQ?UEEXMXz@HW{j~oT z;%TpQe)f~S#(gmBd680cs-NrIay@#Z6QP!~XisvBJjZpKD%BXyd;_8GUavmy`yG8?@7Fi@= z_mR4wZXs8rHan{Jv^|A#f%moO5Qx1EfS`SdUIxD$o-Tb9dgY`U=qjaak#ropkOJQ6 zPDGKH6l;H29HM9Qo6C8~@P{2XLT&d)7Kam~*F5zZf4RqBmODSiqJK@XuoE?2vmx$` z!D`oIGhlqylJg#`8c=t*Rz!d=ZBhKo_52PP#gZId#k3Dlh1Z#?uN;~j5p7x zvUpU5-e|pi6+NBYt33BteSJCYj>!bOh|VrUc;(~VN*q*NVcYOe5t0ThxG8wt8?)!$ zwbnz2jB|4(t2o)9PKhO*x|Y4UV_SEmy*L?#er+tM|Jn=)i5!X>^pK@B9X6G$f4SWB z4@#XsqzyWNtm{CPM^<4@lEDc}GEa%273sCYEo}p}f&Op-qHwq~SnLo({ua5*v*lvk zUy99_x!HwQ=}%DUhK8@b{D_;OLye==lH-knFn*6bk_OGVMxRnJ@Bu=jT&r1hsv##> zmbDUFVD7AD!8Eo@jc7i9#&AJa&B=r~@`L2Qq|eUBrP+gXF0Z0D9rm7Aj0>vkP9#Y3 zXPUebL86ZLF`Sp)%`U%-C9hvx^<1X;#^Ws!8MD1uBg*f*7Q zb3$~@NXrpX)s#rZ5-F8!QBx2uz{w-f$(D%Y!mfTOHQNKHK}Bo~?MjB)5CB4t#{YfwPX3qD;k&8L^T_z+q;!LSP6_ zC|q({Bv!8r4=QW~bp-k=Ha#W-`bP^D;$<^ivmaZ;7)GE9stgR6n1+1vu35DN>_rvu zI_xUApYjmgiF3HD2rRl@mK0T{Y<$y&I!%Xb`C3mDsA{~t7c|8_Nr&|Dy-q9K_4SNn zZ3uNY$u8X3a(#Y~fl&Z3FpzfJ6Ek?#6P~E2kg%AWS(sa(5FAZNACy#;RH3%u(>_$U zDl#`Jjdq7He5N5-P4|>)agoqm^>J8Tygc)^2q}7+t4?fl7~6{Lj(l6?6t6qMu#u>q zKS52A$sMiIpeENTg_JHZX&3?n&nYx&svXM3_+pug3=`RE;yO$2Rl!2&>*{O~aQ-dq zdHJzXt4oO!QIVe@`%Dn6gTpw)?P-;?#^@?NeYRcu)w5PlP~NNe$1=s4oX@2K+I)tw z)l=Mx0Nm(z-=F&gcxQFbG*zFz4KW(GLtRFki;0=!@l{NLZ;JBL$RLrLA){hfGA6_5 z%%LLSaDM^sC7N!}KehZK6GsZu01YE7MVri=jV0p|gA7Vbk(@&b)Aio}G5Xv0JG|Ps zr;NAoadM&g>xl*L?^)J{B)TsT{hH&NLeA${)YC^|s5c!A_%8x)y?d>-y%7?xa$$~- zE3mGIGq`S`xe}6Fh;t#&TbP@0TodkPNY4*FI4$4;AY`7RrS%9tR7Q3}W|^<#MLp%H zN;n(g7rh@aOpVX`k6d$tsdg70sgtLg*y33?>vR^U^31xoF`X}ED5Y9tamtDHsZ7o0 z%t%%$T_C#*o;;p9ZfY@T#X0wgN|X$!@6@#S|x15FBY209b@}} z8>E!gQX;^7%98Pu6Dh4R25FT9%^7^306qvbfm!wk>|%Cm>mBBhdA)Y%Mk`QF>OTCc z>!>>LQm4}o*iotu@xb3rUkijDS8mxWfTmNb*t18`U?q|jMB4^u*M6&kuAC+f(+NeJ zQ5jT0(I|$AYNZ1u2$C{to*MTRKtbBXgs(nDju!1g_(M-TabcIx#fOm^` z^Tew-utcyeux=3WHZrt&e=nRJkJ$3$LrSQHAM+UWy>#3M)Y!2gRtfGf-bqLX4FP4- zg-B=^E%LFi_kvXs+X}>Tzt?Fs}&pw!bVcwR@n3X|W_3+^-qz_^37mjJ1PXNa5FT-u=Ky^bphfg6^M2ve|%=HJf3Qk9uUGrM$>UtQWA%7kv}`0kvRAm>P8w35xeNM1TOIxdvA)2(%1L2Yl6LMBQLO>{fUa zObHLR2w4Z>DWmG9pE|z5*bTokTA744c&J#rju!ehw=Q3DAMnt_c=J=KQ)E8&rVy3> z{oRBPvdmzwDC%Mo!iw|E5e%NAt`@^Wa(90Q{~2-CpTG*oX*&pmO&RPoF2g;&h$tjKQ@(o|&rt@-zs-W`ZNC6nWt8`Ib^ZPqWRI_kB!F{VT9Ad3qaa$zS01Fhzee|jxY}Q2~ zzSnV=@k*cYQ$+i_bG}u<8p9X%!)fPPq`9xGM-k#*cX-LT)0AI5`?+U^VYkAk?^Tz@ z+)qleKYetM?$GVseatT%jP?~MvTrZnPm9iB#41N&Xq~gnm_3KYvBZV5w1|jVnN9=(z9g4SKiY%zN)mdv_oPrG3WP1K{WQ5KNm5zYuSE9u%&6K2R z#F<3?vhQiiStL>EN^Kad;@{&gF`JS;@BSunVt(Ht^Iw#_Ui~0g? zX5xP__l`l5b?drzS5=qUW!uiOZQHhOcDc*8ZKKP!?JnCkPQ7dGwf8zZ-m|}m{p-t! z88Jp?j+uY%IU{n8>$x7}AMVF_u{*^+=mLtlP1N5mhFP;cc8{LSk@CrO_gc1m+oP{g z@-VS+NVtjGoq(d54RDWeL%WRg3Eh_wVPhgK%nl$zKXwtBhcE(Aq!yagHJX>Df0ll8M<8h!Ofe=xMn4q&vZ z<7QxXJwv#x3XzZbk0CI65bMtN3NY-2(A6GALHBbAzyiD5J)}5Z_2LJU5%k3THWVM< zDh!_-9K`6BHtB<8F0bH`nNYw}d8^ghVU^X|ruMFNc8i47TGd&H!x0o#d+Rx+;{oM{ zE6Q3Gi!Q8=@eElnS;S4960P{N^!okyk~uHc!wM`)jM2|6WGj@P z8mTN`5dVgVZjd9_52x-OvTJF$OZ8Fb(sSmKZNl?OI(}~PP2sALnXcAUr=M=#cvYYn z;M;n2w=!pS}PH0lvI8u!p6S~wbzMpP(Tg{u#4mlxxhGrEZN2iG`nrhbMs->N5fR&c!2G;fOD zG~4|aqi9R-nBU}b?&-{r6`r0EsTK^yka^f|t2AiP&;escuTrnq*;C^o@Sz5tJH`AJ zO|_`fF1aQg2set$Ovd?#4l;b1bJgZqhRGVMq94@^(^akd&RP&vkX7|L&}ocx{q6K5 zBd5ClVG3b#&74(Gh{W#f8Tqn&tKmdcIVW*iyjqaI8p+l8yC#G6BQwkjt<6x-TCKHb zj|*wD_k;_W^_2a z2R{rXimhP-=FCAGQ5VT(-@dvMsYCtt-RPS)dK`sS*j^w2Tky(XJCOWr@Q2XvplyH@ zB0UY{VGfD@sy49ZH$k?^F$i19UVE9oKIG#e|LISV`Vu*}zuofxYajowEq}KEt5l1X z{=c^T{~_KJv9)m$GIlg{Ft>BE{W9i#O=a}0zZ`k|f4!)r%nghk^qtIYZKQ2&Y`>T$ zD}7T(eCDsg*B1o@Y~3_znAiaLG>r80_^eC}`0Q)|Z8~u$eJgWAej8IOV|;ojI(|pP ze^~k$8UE7k{d4ly0w_8`eY^kg`mwWpO%0Xxs`I^S_$tlCIb6KPVWY;`+WFKDXuJh?E|k_i*@PbB+e1XYvEootDX| zb5hYTI~_=1bX8@Q_wlywp28RCG92{BoO+!Er$vg@oWJEbtUq;_Lu{fk?$4Rejf9;9 z%OxL{$q)%VOyLoNM{J~GPNM;Ag3DhEknXbB$-|I`q{9?LL&M;m$-||fHyzcTcn#z!RwXXAe)Qb6C)_#dDA zzanVv;OHc1rtk1qwxsm`W6a11^-o=-qb5B*%U2rzmj~4Ua^1gv??2aT|1-t^b#37T z{&Derfq_c4$~NZz&`tvW5#|4u?tiNy{}+|R`i~Ouze)IiK!<-(IqdZG|DN|h9-eMW z3yn{!hZ*iB8`WH-Mw9e=!aBqRgb;h*Mi54+;DIr+QjJKB@JIT`iGLa(HCCeY*9vP0 zOIllpD;WV-3Wf1mo;FtgTGa8Ztdz@cNq6+e)r(BdHMS8Y+5&^{@S=< zdESVz!`-1z-~H_hztIJ(4X^ES@)Ee)@mv4mDjHgOlgbi-7w%8b_DWB~Ly)0G9bg0( z5Hp|lT0_mXY8hUo?|LP`HLeXI0l5aXP2alX`LLH7ce^`d11!!yL0=VDId?U=Tiut@ zV3(_pe>H(+Yp2#iyi%EUF*Y~0sW!(BeFQ9{wfSdmcj4&X^Z1i}Q@A*Z8r(76ii43; z6FhA5?EQ0ym% z(5aEzck>Snmze5qBqMlrSisItRr`DXonYJi$498mA6cY2H>A%9aIsio6u*;C2}#{D z+wLv2ZZ<`Eg{1J}{ycdldxbkxwI<4jd}l?w*y@~O?zN3MG_gTjg3Q0dP7S(S;^XyF zjy!0MR~Nt-v9{bMC!n=sT zKOymHwCXvg=bQ6#JF8rt>k1`Nea+=31bm$r{GV?NMq3gUQ-*s~?RxDT1$q;$mnstCs0yzW`w1t5R}uncr7}uyLi>!I zwUK(;%DjL8*FXWu3~IyrI7BY(I_o{ndFx>dkiNRFdd`eDV!;Y`&|c8JFL?s!v&Hx+ z{&IvWs-N;-0;qR0t7F44&>pDr?y zG+T8owY2ywHs@>1aggiNp;PYD?n7+QBLm1SC7gv%@9+RCi1Xw3 zFwdpV88S|aa4^!dFm`sVgfwZdPcx+;)S(4=EtFih`G@+U-c?D@)ALC7-i5B6Vl}7_ zq>=zNsR&h}1`!$vBnC+IY9q1cY);bzpe_QuX8zt^_b7mGJrl8Djg<>`bA#5F1R|B)pPj zM=i$ZSYAgZuQ0JAQGsh!B~iy`|9p~`6?ijqD>x_oIOC84=SSJP-1x17y4a(JVm|4L zsZ9{w)!HC_Ej!`Q*~u!|7!aIB zyINMI>M*g;z*%^QV}VgPWcwpTcby4C=Fn1W+d9{4@qw&{w5T@diPita#f~G!96zro zN8HSt&Z*8dXVHv&-a~zqPDp}9jUS*oKtnOGNax)n;yei^uFKbVo{LAVcy_5U7mds7!c{;lmIsyCB})Y$nDZ#)$uA0srPdN%IfF6W(Z^r;Cva~Z&9C? z-9#L5R6me-%T7dWQp~U%6nlz@m@KOwWVjBT+)*SJt(6TLh$|LT4C~aFhB9Mr z1ggaNu2TYgC4)Q$wQnxf3``l#oCu}JL9=#xr;-Cl)xLtFLzd0&pY1Jj5vRLr6SGNh zOeUMP_f@6*LQPc$$;I^&87s|d1Q~I2xv)ucHUD_{O2S6!4Gw&ND?&$B)_YFFlWuMnS-U^@5D%WeW zaWK#4@kDqm6W1-##V2K5*UE#UOGmE)`86=lSCZ@|I+u1w8SRYRg4PwVZg)b}s+!&U z_I4s0+uv#y!MY2{bBy|4oQKz2A+_W?mEwCWfGqfx0SrcsISVEwQrJuHp?k3K9?g? zE>%*u=y);kF_rTdmhul+@-Ez?31sXQC&+Sw7HM#iIrUd?Oij>LDe9rf20*$BLa|bI zQrjZWJ4a+U!Ul2dnQtLY)@z*knQLt=)XzlE%E;5dfMqb;x9_(5OS55dWL~;)$Tcf# zu$^@Y3pE-wa0-sE5Uo%$1iZV=0cpsLwbkvM}vBDbLHO3S-tA_ldcjA~ILZ<#|C5m!3_oV-rNqKJO7Iz`18l#Si8Dwgd7fu}9hzHX->o3B4hL`gR{ZVPe2XC}~t`Ulg$-((z^ zfRB(3;(Z$OeFVLcowMSWXJogY`uH4GrT^ZLc6NndzUM8zU;G2@W^xTdKL{0v)MFvsu^i+Oior@0hu{ z?(j4jTdXuSlFqpn&u&=UE^)-SRw%$Sp2&skou>Dj^Db&VL#h6c^$3&6B3J~iPo0Sa z&BBV>q~26{9sW&zO7*x&qaDw9NT<@MCau1`w>Iehtk7_PMJE0E_5?4F<3s7hX4a_v z4W|Z!`3o4uI;wfrngYSNgOB@cFw67rI%;3aE^IAdAssp|%vHe6YElT6EDwMS`w8eq zT4!*mxEI@nG-t}vP3K!TBmeSm5o54ATiC&szepuTT~nEUW>ULpL75WkPfpU)CJuc@UcP| zP6CT4#%6{4BSR0VKFaZCm&8;(bR{2s#D+RAO~8BWO`Q^1;{oxGvqRfnR|MgOs&D;g z_l94R^Iq}W!|sq zky3ROcL5vV;wmA}MH0otB?Om?^m8CnW?b=3V5JA=+}f-1{XKg`cPC5Z#_QCYhO@O& zylW+})#ID_0UrgEWD-T%tU~dK*6^(fnXXO}Czpo?BF#gZR-_S2Eb>MHz`R0Fx)fTC z#(Y3d3k$*gEHUyF*u-Fd=G%Bp21PUFi`vtEjs+#8BS9nS+Cia@>@I>VbXH4R=rS|u zzlcOiieJl{9;j!j`s7_oUW!etFz@5%TV+K z4%;|1Ba4lOk|p777CVitwqoT+l14S^Y9DJb8_tkBnzGO7hfdKU|GZ;%8Kx9HxU6bG z+7W==K4Yb~{2tSpI%no+0SuTJwOfe|wVp((`T8~yg(BtrI;Omv+TX-=L$ovP^`cwb zw;lJI#x1t1rSo+^oyE85R=DU8|HK{l#fVa>htXRhi6_$ZIyKV}Jim=a51_%MGk%4M zMw}U*NV%j$e)Q~?^K#U~p_8;XYZS{ta6d)jRT@L6#Px-~-%6MnT*Pc1*}z&G#hPy< z{buKbs)hR67l@FoJ7okk1f+W%?a4;N;^pf@5@RG6ARCfPOKi*QmtE^gf#o3v(UIlT zr3T0i!U+$a7K)p@@NaR8Y@}ow_M931ZoW(Ln)iUtGpy3$QHhQu6D*rQr9`L}5$B6C z0(K~2et=vN?NF4QWvBgoo!OoGxKMi)6!w>~u7FTs5oHP1uv!0sI63Amx)`{}yQNRY zyNP-CU}D!<$qNAkkLP*f#4sr-U*O$KE#~K0={Y-Nhg&QMrnWj!rhS#b(FUAX5O3 zndb1jQAm3t)waT(ZG2L!ZvW`(=8bQaK|2b+CP;11z(Jxm@+^yGG*qR)l zFUjP|1}e`l1;ykU+Idi`OxoZpbZ)uFJ@q-II8`rCW7Qy2XV2Gbyup>#;M$tGYTfvj z?PHx=LqJhtUF3Xl2MUuPq)6EjG}MXHi$3uAmcqNWxLV7!INTY>T#$#4ACf ze%uv#_s3IoY&G5HQmejBld5Z%@J-TFCzRXmQjnKaGyCPdTBax)qFSTzA<`K(JpD8c zThzDn#WUU3hgh+OTjJ9m*<&WDT(eyBbQRu*9Wh88->2nzCauc>UegA4tA6~!c;|ll1)gaii^UPr#Sw`XW3{j(s4|8 zw<|0`S3Bk85b!luIg+Qbn(%^>h7I*wl9t zGt|Bg+aS;R?;xxfFNb)WPj?qtoVW?HT+jW%-2mGL#`XJ?BI&&`GM$eh!SOXY_dWb9_C)ydrH zE-cS;aNw?lnVa}sB6qWe3Q>MXZuFSa9PQ~490Uu-HI6Peg55UYiK9&fIXjWS+|)DK z)pdP=`8L!r9sQ!^BJw$9OB9&oyRZ98a3j?*@S#a1kLxmvBab$l_W1UxyP_gW3sawO zlXERZy!&|CcrmUux2<98QL;lh`NLyh6CzE$|*7BR;$H7AaPfq8-NijchC zXIwd1jPOV~4mw?L@n{;~L45a{QBBSvyo-o72SC#I5Qrk;W_3|*08#BM+ufvgj3-?` zcJ&b_f@}n&4x}pQ&c<(2q;VBP%>yVb6jt2gjp&zBq*#8_kl@ys|H4}DKniOHDC%*v z$DJlB*wCf|lCj24Mzs7N=zl~mxjU}J3kKYioGw*t=*4YHygn834!dqV-&PyjyYl|I zFaE+$pVn7XU``wjnF#@Qamm4I#rWek@mP|!`O%EqZc{feQ3b#34 zi65adw6%xQ9-d3q>dBg*Z3H?a=yV77@czxIGi!6=Q=|}sfLURQ`%K2 z>A`^mQBsDGSo6ApHwJ7}^-u;sSW(m>T}MQb)j(K#0HBNhAeINj6(C5ZDtg?Zv0$Jw zeo_~y*PniJ;~iDqA|+ciP*(mhooNnqM>UV=UHpEKMvxRx<9;f`s(QFZ(1lRcd|3!8 zdMHK^ZOCe{?7i?PY9PteQQ~UQ?q%5&HE;~dmy|VGo|=^kTgc5iuUWuYdXc5LQcE40C@bipqBc+={c`lU$eQ_o);tKY)^-haEIZX$DxK1r=`sH-|3F0(@@&oL z?r|etRj$yrJFjD?#g(7`z8kcYSGBl95}Rb_P}$71ijs+U4lxnl7~CeXjaw_$Zt{>; zC8k;p^VomHr*3atb{Q!&lpnBx1QWy=z@0u|wzg35i+ejVR*h>tARv~u zwzfG}tpawiPum`_jDn~dVXL*Vh-wa7-?L~Z%k?Wf|JudKP0?1C7&WXx!J>A@o}HAu zfB^RbI$Sc~+KmnMJPj{`fM(B%zkwC?7z!;+bCsy_d?!gy3MR-fHd34IPn~qTNAj(Kr+iuWuChgRzLeZ6aR){-0+r7HB}vy0FNfJnGOCHJ-++AMUiKTT|u7`A;Q zxTk+*3Cp~80rTLz|0+UTfVS{L2lvbcJwuztb{rLSY)65F;Y?JgT}0&tREQwJA`T&J z)h|89PL!!NHEbUBoS#MT`XLX}>$h;*PBSwlm>@v{4hpLE`FX*hfcDT(3Ut$hkbPAf z5xOXKX6?>{Tf3)<_(&3sW>`R&x5f1^;t7?Y2updUItYF60WI?K(}3egKRJW<&?4Yk7B(0*}S z9EW!BCC$dj_^j$F=`p``*r7rhvMqf4ahOPWN@59@{vb(^KQ&UrRur5F>xe4nZ9IOx zgIcXehCOdlV+$#yjH&9o!U6%gA zyxp{-at>q(@lZ}RpH(iKLY4z}aqD38ro2!7O=~Gu`yh)1d*oi**$Z*_@SP1ElK~?m zl6Q^|_6g8bpZw8In~dCsxOS&HF>_O&W!UE?C@33m~OY@m7sF76s#?ul^+k4$TtPXplh> zf~gS926iQ0Ln10^zsZEnyc@448I`m}-pSu@%E;0V*p7d&`+)Ep)K_pag7Zef4Fa0# zZg*-wLRdW5c>p!yi6DHvP5j_mC*9UmcuD-_Q?+N)5E0Y$Z0bq-BFdeJmWS57e`)KM zP32yF!+pU<(ao%wZT5DW;fnPsaG);EQwQ=yY?s0Z@N*+p18TK8rOtv%+i#p+lLp=l%vh0Wu$LfA8V)N0mg_D>7kMk z3yL!%3gYs2AvWckn7-;*-kbcacRC!O(AS0fdhP>L?kR^ZH;z6cZfn_Fc%;kN?5PJB zB>CCQ!4buRXXH3V$#|IqcL|xeVi_a1aWXEl7uj`30k#jLVAJQ?55tUSV)0vh2RKwe!g+nS@ZS*C=F@Ovmq zswhexVf#axj!dWe`pJwD$3Q^f&wPGvdh7Vfe3@VQ>nFP2 z;Oe$nm^6ZoHWiMJ!}r}i43D$en$#*MZjr^wXr-WW<3zMXp}60RYdqnb-k06x18&7U zNMHN}(+=qFoLpOoE9HfsL~ZffV zQ{LY{pg-ihVlW(7ix5ro%g0yDNDf3KQ(I#DAc|Xh4Xc=J=^xWU>s$KU*Rh#54S7s) znJp>p&-_!Pfl0|3wg@Sewk~o}U_n8{LzwgL!;xB7nIY?lV*l`EEBrYL^biHcRIN70 zB;32`R&_o1e~w2b8^ugRoQMYwM7)IUJ z!~OWQ$_emYgy|ssGxY6^(y9%d?jJc_JydH`EbuuySLR<->l|2OBxzMyODG+uotOdB zk2*=_!JQ4~F-81O2aiQ7GzN}l!T(^FEW4c_NLlcn2de2F?ce-ye8$AmyCvu~9m zr0njzl#lRTAJ=n z_q|H*3gr`0#_J6>h%60|h=%$p1vcy>MPyPOjrz3kc^R@}AICZOKyHa{Vh`uWGt}^6 zWW7))*d4w7wd^`>sEIykV^?&Msz1KqCEeTrqt8H(mCc+0Bj12e!ms!1yF^%9Ub16W zHn+OO9+sFw-VHgD-(fiJ@ue49s=Z3}Y#ggY)ocr_@~Va1Fp7y( zKM${sjEuByM;N0{sxdnINn;2JK}=(lR?r{#O+2m894oDeM%oMk5|-GzI;QfHSvsvf zxxgG1bGAr&Ee2dY&7}Tqg1faYQgH3^(PvY4Gx4Is@nAfa(R6Y=gIzQ%+A2B*hCxD& z@D46GIR4P*7KUI?U7&lujcC%l+=Ueonj!ltkp(qxvh`x zj-UWT6XMRZwJ$O9##_JNN+9wAel+O&FLdz>1%qcy>ZuF72;GIa6<@L>ctiGD=2fgw zPIbGCm>m^rSNPy6Oqm)Cn51ZfR4gc1ktfB^YZ~f&uGNmd8MQa@o5}A4;T-)h+p)uT zn>%=&f%|L(RvC@`!CQ!>KF6>&@>)CAKcsW_= zd?(ihZa$AmHf6_&DRsXd0o}%hb4#4<5eSe@h8LEa)|v0rexsFbU=p+WUr?h&Y0Q{fMi(J1P|xc3^f8Q60WTW7GCJBF3+s300pUh3ZTg;| z=I@Uq(e@DCpP-}#!I6L!9wu^-6%u-hNzj`MjY^k6r%1BOw_6maJBpyU z-(DjjD1^>BG={d~yc;(1C;W)AWTtvT`5|rpgS~2outb;~ z5Q4`8=Sb-XJf5*SFocme8~SHQ%u;Y$=rpZr6|;B=i=5U%%;<)>A*>>Y8Yv6~lEiof z_E%oK_xg1nqakZ1LyUA!Zv;IaT;-)i4S^Ns;9^vyH<3QI)cC$7qN8hN3lU?5;=&h$O@6@Rhh%e`SVM95T+sK+5Y4{3yE`>F|ApctM141{7obOaa;ao zFbtcLlehjT0!J&N04%V8SX%AsZXu7=52&3$*!k%Zsi&uHAr@V3_O?8=Mv!yuhR}KH z*bYK|{|<%n!0MzI6je^t3h_|DBY$&mMgi0>9c24heSb?vLQRd%|) zNKU~smoLq<#jFJ1?SetPREhD^a4gI&*vXiqzBMLBRSmjy+Dp4G35dri1r5t2X>ta@ zZthFf@`Ff~I4EnO?HYlInelyB4f&?qft(F#Tm@wdLYZM8+*heH>g*R^P%0nMuT{mO zKr|D&FPSnb?5H81eNcoDK5Q!7F^6?kRJB70R?c2(XqAhYsF7XOOCN+n*)WB2k4$nh zONz<8G$8u)ZF7nwaFN#DD$k=NiNshgQ_^w4UfevbPENW%eBs!?WL!u)*Rj20T9bh2OuVQ7xe!{N=?ngVNQ*JlQy(GhA~}ODj1D}_I)Px6)jxq zDfkL~bE7dq!I0}Y%<=bfawwC4p{TR{kKm@0U9K~2N3EY7=YO=LG3i;?*Jkb!K*q!L zoVT8=Do#BTh=g*~MEb+TYP&;0V->Mbl@d0dOZbM#D--3v(>!JY3)q)2!HHc`kOnap zaE#{TKnC_;s+Wm~DUKl&OKgi!MClBLmN4)Wp(*)m4C^^X+_L>D2|>6;H$k(&hd2ER zmoZeUj3u1yKeKDmlbVMv3`Ib)y)ju@#o5+|JK2r0DxSS8-{_XxvixFSXRltm--}m4JKqtgqnf*CII{-kwMyt2r6$x%;Z(Tk-J|m?3MVdT4Ec8P$!fW3bp$npY5>{ z5`jifI~h$o&hc%Q-Na2cqx2hCBA^d1T;7n&gv>f6WK}QeiVY!CW`9^uUAbt%LLv1G zE|2jDJwU2h8GS*+S@!41aKlIgwPjr$Wl$LzU-vkrR1lmU2jA(>DV(b+5FOX@A2YO8wQV~CFCjv#^x@iBxdp0 zMVB^;ognKdikzd1a?qi$bLp1fHwB);7^BRE8XbGW=Dylbj42%d?$|WI+vPvvH$Auq zPcxy55@))!@w#>4jq~ol;JVJW_`^a=Lt}1~C+p4NjkD?G<;JT0%c0NN=2u(p0&K)qumY==Qy)7k@j60*S~S+=^o~9&Ok2-k zu=yf@VV2PxZw-PHoLPxP!w>H~*DlRLjt&L-jbdRdFnRx)eUw7;XNZLjCfLfLk^Ru< zNl{Vb$j<$#e$4s7Y5Zl>rfqpu6QDCHl6`lK;wiK;E$R>Bb(9sw#Y4qjTdzrE#?k%C zjaB-euv<%JEMyB|$L@l~dJg-oq!kx6(-14p;WIWnPA=n+(=&wMg5@~iHX#a}=x25_ zaEE6xHG(lJZfADEsPJq0%Wyoeg@#?@TcyzB*dA31J-gHPIU*d-J23-2jM2L_@w!%l z+)nc~j@~zmES25l=EqC~ghi(A;*)`uh2sduY&Ce;u{hc^yYL3VzzUq+OpBX;*smiU+hD)$0L#vzYuRDyA$?YbTM%i8u zi7b7rT^i>)=QLivZ@ch>OCMXoJ#`6{lRf-uc9&J8-n~$S$(9Y28HDR1W9sgXKbgrI z?9`ya8|lk}RA?YH#Pt0&uFSSGP$%WafoPP>dy0cf>4l4d1ZSA`6+2`xmTM=(6?G9h z7ilzN&XniL1y{)?#}@OsPT;He47k5pT5{VE9U|jBSFRK7HI^bNQ{@1le-8B6~4@qfst}huD#VhSO}@2~Ds# zXTDLDX+`Aml_1G<2_3hGdo-|oDC~iQz4H+)7MI2| zZqxGMCEo`pg4={=^Hyt;33M{NUi4gH*%q0jQG8NR`DJShZ%ICDy$Kqi6CB$$0;>>A z&V&{H2N>B@YG0xE0C&F^&=&{}xY|B$RrG?gYoZk=!~7*HroWV9Oi zj+X;lU61{<^v^^uZ}-!a!m%_BJL+A$xAS`0&Ck1cRv)iRyp5JiGN*hQRN~~iLt~jZ z(SulHqhh(j8T~U&g(}Tn`c|%_vER3#pu)l#ndN0nKPn|iSYtEcTWB4JV|Lu0YSSHQ1ERUr|sj;-A3fJzNCnUd*} z5{5_~!mvRF`{RI)Ts9hgD|g99`3ZJP^G$63%S5JbYAJl~lzYQ;6D6Uba}Q?KC^^tIy=gncz;nU!n)XuyMpuO>Ti1W!ZfDE|ZFBDWxp?ivb5okPgl@Q0r-oSVBeBCU z9d#n>wx`%N`_ClV=L?AE!yvfJ$4v>=J*(#qv^(8_E2aU_EhySZLOSCFT-(GfQq71z z5LUYJ1*8#0fFCsyl;Fe>q9rSRkY2wJ6%d;N6M`+RtTJ(Zr<1;N&GRbfNt_}5H@`ii zk&rlL-(KRQwiu9?sjh0w&hEkZXi}sRJd)@U1$Ts#VNUz3=d3eJ^xvqEw9+O;amMu( zEU7a2f+460nBFV|gUmn`vgL!fwwpqX3#ohh1+DpHI^tgAgVNUt%<&mNI;)K4Q>BVFVoH_j zn;XsG%#1xyfX4oSHLrd%MPfHC1G)&+_na@ZNBGnKSLrrkuifjb~FLpi$KES@M<)Z=v+IW>b##F z9B)$hfNyX17q20`F!3Qa^DS$LR)}}$tJHsmL_pEdu9KuyIK*e%rU91dPo+6Js@QW} z%S;-$64B^Pl6bA#N4)P(7tZA@APdd1Rp!W+qA0hp3;5UJkM;;E%mME z>}ldSjml(WdZHUoh>jk-y}`?-)4X~9erAneL0YunIF>Q#G^q9r@3*5Tp`hpn05u7k z%A_3Q<+z%RdaVY%vMg&WIHS|XU@1XI{J9E(QAiSUV=!z4nFL;LbbATUrtK8enM@N8 znyUUFG!XA7gO|abmP+^vtr|P=g>7Tkh)<74o8_Um{W8D3=q`;|&X2o!6aS0t{lJf; z28EP9GZcx+S-rrB@rW!w((=WJ@5mO+0T)&rR)P9N5F+Hvy}={O6mII`*xbH8;7u>czQmRufx~RJytcOzs3AAPpUn4;I9O)^s7ve8Z43)j1dO@ zoQk2Qj#}&=&qFS$;5X*#;cVEv^kcch7D_y|Ao} z;a#U$9bY78qW?H-e1f zsyF^E|0np|kxjmkH;50be*mUqngaU(kIhOd@&MlCh#{_sp9=C4rzJ_{C$^%KBTIK+h z{D!;*aAh8R9yxJIsZ_?!Jc0CYs@~RiGqX4K*eW|S}^O*Fi1}GCPf>I)f zKq{;mx^8p9!$t%o0!OH|)U!@aeQuJk$9cOz+H7&_Dzz;Qd96;~aH4FHZbc8=-LVer z;1tMHtSJ*i5sIn$-t_PVNr&&?!HgKJx~x|A13{v=pfolm0`oschCM2Ut%aKq4%b0 z{9^~ZP6&n(baPK^LrrL(=b*2{oasp8asTyQ{mA_h(cPQ4Pj^CyBng1>mnj*+0n#|N zA+DpvP9;)S1~m&B)EK1C@teyC3j^FUP{9Ex(ij3ekt#W)qgf_yJbp03X7KSEF>}KI zq3j)_dwJRh-C)Pwv6CI!zu301W81cE8#~U9ZQHhO+d26^XJ+2_o%76@nGd~IS65ec zf2dxoy6U>G+oNv$TIm*G`^DFY#Au&@&Nf>7^NI6H-!ex~Um#23FLPU_4EN52d)?4E zQ{8bxAW^vt|2UX~TSrub-2`yTM7Oc7%&_`Bm~A=GBMM(VkUR7rl8!_zcT+N21Eo|v z3X06ty*XUV&Ny0=`Dr`4H1(o@16z2Q9djR_v79bpUG2s)Hx+D)BI9!IsltII z#{AN1X*k0Mz_7Cv(uIukBBa=l+|L9JSMcLh0q12H#cXyBIfe9COraauI})fK=IBz+~U;h3Z&z_bvs?7rRc==OhDASUZ^M@E6S)5Fl5*?8QCqwujhw8C zD6rZj*wso86ChJ5lq}y-({zpw2AaH)IZbjMIr))-N!|Ny>;YS2r2I66-1}P5PFGv2 zzMVDms`FCK1B&*%hsw*ktHq6*#Z`KTv92nc=S$g~X5(w{kUgkWlUiPT!)-qg*+npg zMs2Fk6xhAULpNtse$7<}u7-^|O zDwuk+)fHUNE*BwN>xne7SsjLCXUliZ2#$hD*TD)&VN`@Aj;WlKd=Pkf0rVA^UOZG!xoNHni*-rw6<$b+p$YJ=4pZJLb}A?%&gfOS0{bd6`9Fnpyu*C8#sS60{lboue%s$GO(Bol7 zl;pzR@SaJC1JoqjurAv{%OHh8p5*s)x|pm{H63T+smhLkw!J>T$>CtIhGT$N(?VYY zgpDr%gX?7+r^L%>bK}j~OS*8qP~p7Y+;u)92!5ZQ6o18o*n>7&Jf`!`;iaSblmkBFmC#xmam<*f;CO47XedG`@9ZT)wXSo&fNNE8VoNS z=Xn^6*P#crUOxw>(z%C2qNX2=XZ28P^;|WPTDXoxTJZox#Z3HS&^Ktn&HuYN)pJ+hS`)f%uj6pqPT`lx9h z%0%Aib#hebC?!^*wA*iVqd%UMOp-~%8VcdTtm}Dnn32P=(k5WLcH37hyT#&N8B_6h zA|}&~_H6x+)$ZV@T?B@c8D6IP-c`b)D+vXG$INBz4;rn*hdSfR8&b`^E|M;UyRx4> zlZ+A!S|sLh`R(j{sTzwEq$#g2Crt7uP21(S)IMkurOX|Vw`I~fp1;&1~A5vqQF}y6Bg=Tahn|sFoR_N>e64ThIJlgaO^U@ zqGMLfo*Ld`bsXp)GYS3%b6ttv580z*I@@X{WG@l74mjh_dgm~5rR6oAv=8ayZ_W?6hsYEk^zLjK|5 za!RQ{Es*{Zn1ZB06A=g9&VBB!5OVg369<>PR#S<21r|z$cDDb;Z_MgCR+GbvnEhzSd!oNl@N+9lY|D??qDFI! z`lqauIAF7^Muu)Cz4|;);R{=-w~N7O+-e+q9NUuWEwxndKd2; zE=E$R^5V*rI{wn{^OsST(V04;p-$ISA;g000ZObz#UJw*k=M`h-NzjXsAMFj7H$6n zA<<5f9_V;!Z{i+_+KhK8e`R9qQ4%$2#$0}X7WyBmV%5pbsl{Ypaaz6YBt0AolcyvY zF3Ofsue@{q56~S$EGT2!PiW#)5*Wif5;YNM!;hcTWbi9AKg$Um3`I%Q#ChU7 zh+mJI7t4X4jep2^f8g`^7=;F30ct!m%iD!JsF$V`A^g}p{ z_G+@BAlP-x>}U~zX1wjKXKuEvzt6fAu8*2J-Yr5l{o-K6!G#)t$P*+SnE2uYD8dL*fcesL=`RA!{RPHLcyMYo> z38Xa}vyx_;7cmD8zj&3}3bSx1NKrjzg!P6Wcf`D4oS51<(!eItN_bTDUd7BYnjM$d z3=#@6&J|rYshf@?d9-xCCOOWaUw&g=#~Q?dn*htuTyK!OXr3BtI}3^^Z9q-@r>m!H z%~X@a(PVrqGfM{>6Up$()70s1TQJeAXJn`*coSgf9wAJzDQmKdE%Y&%w9*LUK{2G) z?k7J|3Si2O{0FwkxZjg*i&1o4za zo>9s<4oPAmMh*V1U7Hbo>rR{^EreB6<(D$bS(Cm;bUB~v4~?)X!~<*+!Ga%46R2PD zYo39t#1yAyXTJims=es!O?#a)s+~D>qU#mMfkf8K`z;3=$HZYzh}5u)oNy=x-*g&2 zRUg)gzZy``GYZmTYA5>I-fOvv*idBcn>}?vhZFMMW9G2rU->;_VrfDn6fi$)oY@K@ zrduNQqyv+C6U&C%kSSIvl&P#J%*kXtu=A8~Q%-8YJkI+bI~=v=5<3!`Oz|luCpQD{>SnQE~l8_YH75JI9l)hCnq z^|&UxgScRl+K5JDEoR;VWfl8Y{9&uG7RyX0SRaEMpQxYlOMJ`g9y9*~UJoB9iOz~) z?(MK7TR`dTZyH|zDqG=&@Vm;5>Ql7e3-d3L(Ujmr{mG9!z!6+}WufL{|% znb8ClRn^Q2@~3*?6r>IFv_e-gVjLYH`66>h>_yCM8vuiO3uiF{nLE6^*^6Sz-|AG61ZOi7By)eZtv z5B=q0C>{IB5j>%`<6KA@Ql~I#P z_Vcyz15(=a081WlfubhL7i)sONmA1ee#nnIDLn0>y!NEjVZ zqwNI@T|?cY)hLIeZk1JQ##|-Mw!z;tJXa=-!l@0iBJojtmL>9B0jJ3!m<;YLv&Gs? zKl4D`vLAcz-OD&X%QWvfrwlz!l-e*(YHUwG=uOpR z>=dEJglOWoXS2IXLa~oyj#qEe70!p2nJQnfQe5Tx;wOn$Cmf#9FmnU$}JC`S1 zTM5T(P80WrjfTai+?OdEgQ997mgmY97CJ}I%!C0mhujko=_?CVZd0X6nW8!f0v#$k zsv-Wzs_rU`mF_0R12&h;{+)B%OD>GQ3A-kuW7T@3WSJyd@k!!wii zLPGwc5BKfyS{Enh#|1d_pYN|Iwmlh{FqF+I-T-~kmQrJ{%?W0 z|L&+`2e2~!2RFv{f9j|c_@8M{MI(DN}s&!Ci( zUmysGSQG-Iilcc5EEf=nsRd$D{P4f`ug=mWHU7d(*Ko%Kq`7u%oojLSS9O*laHT4q zVNESv9$ElId75Zz4bvO(29r9^Bo{>OhPl_PKy@B3=V{R7-_a&31G+LsYEPoy5eMix z^|o5;(mcx%^t_rMKG1cR;Yh`}PrM&8{>jubAier2Zy*i~QC zF@t}mxvD=Wc%}sT(0b9lo7f|ueM(kH z{~o_A-$W)03*cV|^LLq%m6d>z<-c9~r|$ds=h{DYtc;8VOicf31O3nWe{cIw9RL9M zAMMz_@A;>X|8_3{6Fd9A&H)Vc|LTW{jUD=5b^ko~yZ`UZyI}Y3j`b!gzAiqRLCd;>v05t)R-p zgp(n`yZ5Kv-Q(i^)aUJOLSXC`BFN)J+iTzpm6ihow*cf_jz+vj)7D3V$^6l?SbVvplM1`&Sna$Nk{ll}uz;bu!wbTVa-@aKq+`}4piu2`7mldD=PMlwc z4d`o`brl{C78`L30fFUVdM_Po8g!D44ogg__yg_J3#}a=a~?i3B4Wt0p?_IdHrAFz ztTD(6jB+%y&&_0MyFBI`Qh5a+IeqE7eQt*$#VazuQ&i?JU`iWHMkh6`;L4<|?L8d4 z-uV*}b`fZ*DRCK{)}N3tNe~?{QRO8m*BMX!?bN+&e}OUY4{C@wJ;g?2rTyJ{E^zB} zD(Zl27bh~|sZS#Q%6Za=tDy2ZJRR z=@_2{Ir7ORsV!3S9v1hoPiVg_na(YNH)Ib+#}7Zk#C}C4a!C*quOo9xBGQ;ZWlJ3s zxAYz5gG!rZeamn>varu?`Ct&3m2x5l|7n>!Li2l?b+{=tz>vZLi^*k#L@ID+1j-)4 zvOoFFHk;MRnCl8AN?W$FcZ;PU;Jlal!}Ku6D+^=rE3B?HoSI}QHpoyzC8~IvXEF5M z;@1ZsDs zvU^NL2Jc`RVv$;BPi8o59l)n-qw?vldNbFA=VegUsh|f_6Rt(VjY}a_0bl}p0(7_n z0tyLTr=4fBz0qvqRJkUJidM7J@+5w60Pevl!W=!E1?F%n!-M}JbEU4-I9YU5!bB?T z+iQnGJB;9#1=vhCV8DcP&r<2DfsMr!fd2VF(I{5UQXhQQR}odn6zFavs&x|iYAg7Q zq#l~W({^BIPy`yfsVFcomU2+k0*x*1Cz8V$dupCPg)zM!`eB@#J-Qy@gT9uUE6!q- z`QW{@(@t~jt8Woqfmvm$F?H(5)DV`V(yeLGt5RQOH0T2q4iOF$CVCKh1Gc0|tbqtJ zsdTD@G#pt>&pa3(^7#BKOf-X#O>R==%n>=%k^H|bdS4vgUm9U$&d0)`;=#fKP$s8RMr^O`;w*cmN_~{; z;?ajmzlek)6Z;jV1ZXj3QkoY>Nj^^Er5=PZ+}bRq@BC0y>kDW!V^DaP(@(bo%g!tq z4SGE(kC1)5pM5t-l|*+@RJ-MA%+630()EddE{<0Eo{3c2`xd8V$|ep$c%T1SHbyV) zTaH|p@oMJD{oGpE836x5>}U{HiY}me1k`dsd!5E+yPMlE|c) zu~W%a{yNDrQ6H{ObD){{D{R8NLa8A8k}CI;FHZ*3e_h2@`3{+wgU7yH;hGnVB#Bs? zjHnHLhmxw2cY3{%1XbdB&34NQ>3c#>!4QoT9g?xOcUvn6EscFMH-J=ZQTW$wCH=Zq z`7Gn81XLb+|FAjl)gc{<^)1QR7P#nM*gZGxrp``iABlij_m?Iof{$YBFK%x)Vz!`B zm?r1!X;|<0!9l%(BB+N8C(7*1ocR(FZJ7wHxeBub>c+Z~nH>BnRh~ko@3bfL(KW%^ zq~->#kOL@a$97({<^=?4$=Yr+FcUkEwp{Ck1^sGuT&!taiKCPZ4~8abaoZLly;SeU+AQdj^T(nTHE>v-1sF@|ao;%p0tlqstg+BJTkdKtyD-7&8*;s>+{uYTw#q>UQq%){!#L`=Fo z=i3RLvl5k$ZHp^s>`IBsX%N6ISMz%*BQ|s_BdR%$Tl>>{#x%5GF!1Q=Puac7{5^H%_k~%+EwT?z;l_yiyY|pSUbG zuaWSkKQ;&l;8a@6n@Kwm#!~fGj+0hYMlo{l;XwlqxkqU3WIU`Yy>)=AQ1%g;3$WDR zG}4|eCuJv2X(!q=A))1-dAl2b#2-LNyJF%s@E#ezV8Lf(TCU4xarkxgA)mR|%*B=f zLF8sji6FDzBZr4G642*XO^5J$`zKle{LUA1IN*~@?2!K#g1#HUA-@|Qq7>{Ae|Vmu zL1M9=PC3zjk15`^;eu?;>q;~KN4;e#`T9%%F=31LC#zU29H)d~I)S{U7^>(2NT|w> zo`Z2eTmBo%Vor62veH^M%|9FUuZJua;OUF-<(UZ9$-hJh@UpCZVS^a zH{2<#Lv&k29*PaK_N2i)fl>Qm#-KC%u{dp@(u}-+|BhT%ngcIeaVc^YQbIbXB+M*c zHh1XFbRT@(3`IxtN{nTob%H2&`=dc`nVPoVZ_U;q@FwDYCZ>n~_>iQ<_d@2riPx*i zX=WD5Uoe_@z^o5z?$NDTTM=5HZ0f%#pE0j#?5BAYY^i2NZ*?GyhgsBg=|Ft;)EKW8NQ zQ``K*Qp_@HA^^sr(Mm$OQ`f<~@BFnb#^&_7$E5(ZDzd|NOa2*l^GnC)J4w~s;qqtO zlvsmf!)AsC$;JD{RovxVEWJzZ6cX8QlH^rK4*Co&>x!slSL}rRnwrRjBbpjEn}xKf zL$&o|b34IdxIAoU!>CwSi@ceVc8$DSf{O)I$I!~_M34$=eNQ}1s_`rmbftB*8{EIn zPuA7ghaGG&UNWb*ZA0c>g@rsS*GZS<%|BLHcx3eVuIk{@fjw%@7gy^0eW^%}pn4;H zxKPHMI3oTOgx@CZ?%-$=$E*`qJ^{z8Ue&gO@Z*OKRCLD1Fx2tntXR7Y#daA_ls2z$ z;{+-pf`9+n1%46`2gE`OP(ub{uGP+#O%KHuuwltmwVYS`NFYlX6{ahY#aAY1A7hh#Lo~p3LF4@)LZo68b2C87@*yzV371|6KbAlaf0;4s zY|ine4{n)whqUKN?CKkJPNrG(6mnU$lH@$N`qwmX_0<)rX%4l%6${#P5EltrazM`Q z?3_$9;;P7m+#`xfC(;^>j-5gQMm77jlzo4ao$~LfC}a9D7D2QB-syRuf#FD*yMU@4 zzl#1S*?~AHWJ=L`yldONNKty%)jezaHCN`YQqf^MP;q9_`{!$rulsYe!3jZA8*{j7 zZQb@DcRFH?sHXK4wFT8EV(~+#F&VQ~Nqw@jr&9!nSd11qh0VbpmjgGUFYt#30U88$ zjsI)qtKKjn#3iv!+%1J?HG^lD3SqB#Fn<)CF9>M?u}WMGp5# zlu-L0Gb=UFs}Im_B2;ds^Ll#x<>S?RBDyX8n4hdI(w2nIFhiK<;4!Luww$)&tra-w zj%9mjn^u7SUE`%c=pya(=U|&K{V)ruNF8#QV19>++G6g6{C=q-=by|!kZPU8)5|zf zqD4?ariTnscOzBgTBsFu!^f5Jb>T}Ps@5N+Lobtg=IOpAgZGS({x7DXZd0o6kJdUT zx8H2IVdJyJi91aXew#5n!%p}|V{=gIgnGuro-v%oZXj5;kyhRqUPN2DamGS0%<{oK z(2?IM6CTDjP{KW5FDL^-C?3Wm-zaDRGnK3F6VOdJc@Tj);Lvb}aH=Ut#!Ub}x8io~ z{-+F6`lWuW-G-$INe`<239NjkJSA2a(F^#KAk)YfEjVl8nMTSzs{qaT$gVM# z(u8(5IUo_W7vR=i>sB~-db=WMqT_ly1CesxT1ol)XC-&%(?k<376+z{0ba`k#MbAF z&6AFUV7JGQ)c71v-j}hXXqv9n%D%$kd}-6C)NbNWDFcR#dUq>H&8bmmTgl7@1hqd~ zAmT9fzyFMYIH4g@cWe08b(esNP}`1zkWteo(pJ>-<$}qW^u(xb+qT9DVO3=2v72!^ zFfG4PPm6jeVC|YhkkNF*Y7iLt@vrhlE~<$58A%`kaw_Q6YnerodD6<2NSP%XG5E~$ zxpRJl(&FOqay%~Oi(+2QsIBspjuzHO5Nv$~-m)Rk43>rV?XaXxa8%JEj^7RJx~V`I zuWQ#wtkZJp*S?>!jp0M}o)Bb0fFdHU7q;5H&z;?f=qD`HK@6hHxp#y%G)A?eZmnwA22vC99jeQR z#?qus$*~+s%aAJ?mF;#rW1!2i=!8l#N3VaSBZ-^RD@4c#V9%pfmim=YokFh}GEkRc ztHqhN?3O;J^SFZHgPVS%$Sh>S{uO1 z=qw3E9yi7xlA)lbq(>_c_s{}p;7Jf_3>DON5e1)gAsJDrLL;<4tPX#2!l2teGMFSp3F3V=&OTVyJ8?Y~X=wFLD60DeqMdd9Z|3Xo5|m zj_hxq()>1GGAYX3s{N%G3d-1QZn*kHW!14m&;Cf9o}}rl>#46*T=0d&xa$~==QrhmL+`Ef7Y?-UgKUsZ5$Y z+C^e&2+nIbX9R3tX#}XP?I7MczDn7O_kP#A{4T=?{-lqkS4s)dBZlo`&VdX_O%hq- zsH2?|*$Ujrm$Hw)AiDY;avD22ngoR|We4F)t13rKH2FL!$v-94Wi~SH;Nz+{gm!@> zzCKZ})!=dz{=76mKjuBNUngO{?t>EO; z);jJwZVuK6Ng|!(!`shb$4r>I^W+@-Z~Z|ZU=rjhtLgIn&L!AqA+~cjjW)pvXmwp3|FSUcI+V?t$>Q$zc4Yo< zVd0B0K%JqE8ZE~xD?P`ADJ3~^aF@^`Y^-(3>>7v_%?AfXwoWs-L# zg6@+Sn*lru=hBn{a<{L|>J#MIkb>|<^nCNQu!36T5of)|z0BgH}=$~ zXskl#`wu~sQlQZe>pAL}r?F6b$dzwlHeVOE&T!AJ+Q1$zE-f`%vWhoAELB={K9ZVk zTyAXZB7e`dRZ`|9d}K8&L?1+8SS|DhT_Yd{Ju&y9RvRRizuyQQf#6 z5z8h<2-OuB4NChitDgpm;BDD@siAK9@9q72Y}uMv@fK@}HeD5#stn3Grccyz*g%J2 zG17nozIS&(=`$Xk^WxyJXMeF>TnV8FQqsg-BnmyA-pd%~<6)V9=Xj0FB22Xnjoc)iam#%EkemSL~oUTeZ{ewoh2U2}f?=AR*#tnt)fc{|UrhhlmkhrAU*T4Y;- z{2-n-O6IBnrf*d(pU|g72df2p5M4)(UOBUQ;7Rj>>2G29#$i>f8`g_gPi&Ez1XCAJ zF9vow5p1}oanDHw&@4D zca45Kd5i6!&vD2=`w+qnHKv2er3C9-yR1&f0l^wNDP#Hyg!6-RM}q4T1CfE!WB7go z5rYzd^FadP`=U(TqS(yNTC?X!eblm4)iP?7$zb$I81iVccqk}Q1Jy#wrrhLQc71s? zX{mA6)&FTPx~-eij%^OGyc?%zAQQ!*)83KT^pc%hk-e4oHq!58Eo0EZRTp}T<1N~Q z#ZQHN`PFr<3FFXoXx!f_+Ma0Sc*}smfQ7Nax@XUhI*bsdM)8YO4& zgKDC(z*b7tpr;xMMG5T65N$IQNx|$Kicud%)sX( zY3WeRq<~3Nl4rRf=GNyHnInd<5q@)_oRrH=Z9QMOug9=~+2IsLSqJceAHzelV zb{4+RnawaH5Vsf}SDbTx*{`W@%~@TVPPhM+l=}TG5e3YzIm#xe!1zYcK`Dw(l zrjdsa*eMOGc<9~qs*A4k=YU0t>d=kKFZwlfhJFaE{>9tkU_0Xfm zbHC7eyVDxa7459>aC;%ekWO*<-!vlBnRxZ=-HbQ}2M_5u0231&7K&6y_3LmhL_85! zjD5l$P~$o5;MS;c4mt26aSLFL9z7{!7m-BIty z$vW`d|lvPJaEL!h;zOrz~!W-zNUZNl|cKjFlM^N)5XkmWAn%;HnpW24HA3nei!etFYeUuFWdjL zYnuRXSLsW0%0w-vu_IcZV%w=lmSNusL=Mih?S~46ju&(>CFJg9=b4OLS4;vxs!`$?1 z`S`*1n(n%dl70B$H)ehHyGl?bmU4KhhhuIhJ1#j2!m71L$JckeidVg>i zc(*@tD1>uy&z?R~#6Sag={kTABbSFvwqx3S95#?Z9Cz9hfkh|+qQs^&QGZ5Uoe9;y zhuRf@`|0vaOJ-wVZHXN`sq%)5MWX!7FKX#BY1P>WlyX^?W3*^u>_-~_PuW0=S%rTp zt=VNp{a~D@>1ss4YE_QJ1>*rne5kS^c(2{Lp{6tvH1S5pR*R1Id;lBX{Pjh9Pj z{Se3%nfBmn+i$uyl50U2k`%Bcf*awCyJ|PU7p_-;0Ukjp51T4I##s8s#6bTLC}!Nx zJ|t8NHndE6QA*+KK&`7*imwzRKD4%?^M0A)^Lc!BweCDN(XjJwctW$a;PW(GLsls5 z(P$;T>G}kW;rW6q);+7b<4?5nWL^JO=u$Z2)P>{mwibiiQYhdq?k@OPa}@0}=p{9E zcTteqPO@oEPT-cFiIYN=sM;-^rO;2dEBqKcSk6GUs{)s*7BzTw-Kw#xO^ftY3$H4< zu7{rq4XT*yLrGjLpidd9sAovIE=rghB_B$Ux|t2#hoT@;XGp1e{gdXfxR>0@e>$D4 zxR=06@^9MjVeTXDJz37b2{Ie>PSJa@PU}~HpjLnvN4dO zzbYS#wXwKurx5Tt&bZwZ&B*qywmdHkrX;_x$P|#@PEf_g=jd8&TAj~XS2MPhdpBHg zRv!4W_e5E_-Xz^KvYrdT9~B?TM*>_7@#l6}JOX$I;n60opg}3gGw;qU>ESffQ_S0@t##4^ymG8PI6am~T_I{?%ZJ=NB zD!#mgY6M~Its6dEhz5G@qZ>C)J9!hk_1q)p-RfNNIEZHUsSsZbOwEti+N-o;eHwj0}03Re5*(~1YvoYgNf5)!A7sm0V zY>(e2ukQ+7r%P^wUj^cX2=>D^{Q<_o2GSx?gZ*}3cUDvMA0_SOZo|_Mz=_TF}Ls7=o|>Y5P9>K9H~9>YeTdm zJ`Hvk(eIqewahWbk80}PWhrEirblx$M%^K#PG`$)Gc`?Dy8eQ;oa@0%m7^c$Iam>% zm#&SWUZASPL|ue^JpPTTVc9U{wP%jNyHKwFxtfC1*=LKZ7cyjRl$ZNSpdfKra<#w! zKIxjcdLx!t9yqqI5x&9dDIux3n{tQCjG%)tP3C)w92hpIy4jk$U5dzgpN;j-^`b0@ zN*qpCBB6RK7x=E{V%5ctdJqwOeEYN^uJj|H6p>X5R_R`+xCw=P!~Y0=T)oFulvP2X7Dq2>?^ zz0&ob;E854dmw`d_{9_5WcYBW?vw3E_|Lq6t+Q=6T&_O>YfjaY z5TSE?cD6rpi=Ax4(eR5g+DyHuofWs`T34NZUwG$%7A``mpM}C(&-Acx9MANS;!3sR z7j1%a3R;jqbtH1?g*a8)+(y+&;G)QMIu_m23wg+0XE@5GSgXS_VeUK7{_(nDTxk*g zaYWhUkl%paN!gr4JHE~-3DHoBbNpw^VHfp8o87t(UEE~9nc_4|TeGgjtzRdgM=W%) z+d&3`VKs`zu57~^h?{s9i#y{&m2~PT)R;3@bheX>lE668J(29M;*0Q*;tdB)$#O;(At-b z)S0Qz4nn1=O)g`9|IQfWNvrD|7VCX$$4~gfsyENJwI4zpVtc}~4%I2|(btB-$HH}q zOlg*nVaveyL}9~1Ka+HMyM$9i{%=-zL!bgnXm*p(y>YSoGLY95WhUtuiMMBs*i&X-u7`E ze-5>1(xK}6@3O+e4x4%KRM@iUoeMoC24KBDr*sLH2})c2gCk&$-gco6RQD#zX* zlM^#f`a;RVvY)o^fa-upK(k>-LPzFmYg<}CZAC;6+fvwhh((j%9_M;1eDFp{zA|u zMz=^vx-}zPCy!8h!M00juOk`>tsqD>6aja9g3L_%2OF>zG=d+(&BhkhQd!Jn6p+Er zGyeaM8?3JU%842oZsis4Jowemb zM|_i_job%uU_@7Fp-+Vw(F{EhP?z`NzcSp|ORX18GBR?o*UPPzXz4ZCvkO;Ve-OMb z%b)Fib%I06uq1?iMIxhYZ zW))7OfHu!rEGudPTEv<8ncTcI5+$Nb3_?akkK-r*s(}Ygn1?Y_3jH4cwii8aXPnk( zzAGir$&T1h*P-cctJi#7b7DlPyjIm_@Ojwr_GF#?wKLqf zv?Oq35H~2OW3%2|U2i$r+JOxolOpEBS?lPbztj4{^vi*+6L52<8h&@uhI|^b^fUUj z`OOYteUvA{qgzm67mtb1xnl9m;dhr)O@wM=9|eBqbx$lp^s{ab!mH=>A*kc%q+eX&;DC=pT>t+VHMqX)Pw z6YVifPA2k(4c z*=6%1o#K7M`SS-)=h?KZMQr+aG^l0DkT$;5){E*6Q>AXXss=!iVFDdkTXHAif~>bU zx?6T4v4c&I52~>rTXJKPlNAGrP?isaNwFaQipbBCB*_#zP?rb;OB_CZ|_Z;QqQ6R9eW)^cm3E(xUvR z$Ifm!x^PMVd>`GYF6;8GgAILdoA0FZ3b&m7#dw9zc=5k1r0ZG z$c(BH8(uCkfNVy|5leZtzU`cU2j}C^hi&b;35U?Uw z)wTo0s<{WAMr@UsTD*QO$m%%;2eCmZM`%N0(2g2^Am$qfK7g(d&aUnK3Z(6H2&0? zai6`!Z&IQ8$EZ$lv2*aU$7JJQq^zX#4-?kfq2mhsd)5NN38YgSlz1ooK(-%svd-+` z;oKp|YnkAHDn45jls}*fvCe$qGr$z!xvue`zlPYKk#8l_P|czYswykls(AC_l45Uf zWiX{?g6B3zu#3NLOV6|Bd!bL(P$yI;H7-`Lf3GLCH&$!9i?|22pmQf7K?-ocQhJ}@ z-Ya=WW{<`YFVVoX0_+<^d<@S(aq0`M?#xx@-rDojxa@M8SSyzpCO6skkmsJBVNq2{?U2yX9K0yK`ovQm8=dxR$a5bMrubKrj#IHb#`EQm@d zEjIu~^TDM8-t4n~YF6sOL35(TD1a#@D@}X)esjdBfBz+Y0w4@L{y1K!LN3de2`FjvnYWLd{=)ar}b&=U$L zv#PrcE{+`vAa5FZc&2t81rMla7D4LVZZQ5{*tbqa8RO9L_4c2;Ctx^Rt*cNkYMe~g z;TNQbPDtCJ^ZQI{1cSNA>GHTIXOhjI`e^Ti!ZWj3Obf-y=|DcYBtQ>4fX`aArr$Sp z(3F9zS^ZuO<2EpWV?WGHZWc5VIf4j6d9a&K!gS<+y(dkNhBwj)8foXuO}$!a{9(H^ zYV3Koa->A$?OS4GBdQIylmVl9aFNJkn zK~(N=ANQNJ>HNeYm_i!UJ&8h8oK+hs}le$1MB*&lf zfnPemj-%>0Y7oT;BT;&F35lVB>sADA$|l#9e{vXFU=(sg%{g$btW8ULPJg!T2CT;LNfbm|=YpZm;F7O_QtG>u_Q@{&D3T;r|ow`rK z@Rt`qqwT~+FIx+t^APi{@aEp~?!;s7Lmz;vmUIn%clp6V;i22@jEjYC3muG&bhc~R z<)}pX^O~KrGO7?^M5*V9ZLQ;cuV0bQ0>3$2hRUQL26`%J*RUVimv}btk=>DP0bn*i z&Ny@0-|nr7R%bC)$6KBNH`r~oo#Z`SY>&f$WS>{`E^p~h@Kd-==kw8yyY_J{7jfy$ z`?tRIvp63ROtdGCh8E*Ik{2+4USDk;0)o2loG(M}>bvCzs=$^MzQG{mw7#;?+q^J9 z!7#cdK+!1OJ0Q!dKs6vGRKBAi-B95!Y-Oo*K*j|?@nEs!Ks7*t zAgMUo8*w!A8nea{Xi2r3W~t40McTAA(yf|#od-obuRPd)Sf$kUF4A1kUe0nl95X#_ z5A%zL#$tL!mjEcL0w4{ZAb{}%5xmsj|4(mE0?@?Kb*sNE;)k|c_4AHZJZqBOO?I;= zw1A*^VevpwN)aQ5D;5Zd2h=KRYwJ~yiuZluRnP(jdRRpPFDfW!MMM!1Zv{dAH@h26 zX8kBcqixvC%j~?FdFQ;Hd25~A(^i(;D_Nmzb@0qaW&iLwb85!rJ2&4qd~MbQ_kSYx zxp+_RNR}R6{;lr96Nd|HnC1Q_mcULx#RX>dfih-wuP=sF?+ahC;6TobuFr4ftT_9m zZsI%;=(>rLVFvbW{I=<56p0`j+< zxO()@8T-=69Y2h{u3K|^y=&%-N4+MbjIn8&IcZ07dC#)%Xiepv`SLcK=0B_1xwC88 zpGR8R4(;$u#jLVx8IO8bA8*;A$TM}$!-O^ivLos~?tZ=UcI}XY(?z>_SY10b%<5)D zzH7;+f1KL$*@4~ZYj2%)TK8%EdpByz;@jr>t*f58_=lAvGaPq}KX~TR%7mXboh%$Y zmTW|;ioXa>=nHdTH4(x&RTRgA%EZwi_KlxRUiL(iN0h1v{&a!%TInR z{~#f1PVQI#A)6mORTJ<@|KF?f`X=RwoYBTAX(fhXZ+?aG=5zdrgR(k99}>SS1IZN!jG*Or~7 zZ&Z55AJp9mexg~H^YiI}r;_rYdD$gv6Dyxj4!@&Jc)w;=)Y`htUk|-MW!~;@s=xf= zZrMLk(OoU(_RDC!v^42K)P}kTO|-u|_S@~gJbHmObvONkO@q^{htBspe9q?!sg;BK zG}{B|2dqBJ(D}u5w>j!G^5+w-$M$Pleibx2t7Dw9a%`5z6ziffSvJ9J2e+(Q4;Q8X z9XGG!v)CBgq5X-!2;G3MCve&Y}A3K=RL=+)J>cb)Q&?YEu$IzH-n zYM*9d$qa90=E{lrBb1rl&yH8dc2CHE(6}dt&J2gEBk$ z<);0*x9WHdy@IVS+N+@wPJHQ>)$YF1G4W7mH_gn1gCYLDUN^2+1UgLe_u79rVPL}U z-68%%Hp_Jn6kE5=nU-+)m!#R{$HKfn4|hG9v^)OL&q@0;ez`e0&eB^+U$~shI8L}2 zpAZmnV^>%+_X$~rSqW<0v+Rv|9<$p$4hpLD^RN7HSab++HuI2wW!Y+~t(r>T*UR$U zUlq68dPJve%0BkEBGz`TWx=Fg%N%cNigK^yHz3lLI%dzg{>iooth~?PN^KW6z2|qGRXI ztw=8LjE_ye+qQgn??$iA%EAn%rqt`#S__5q#Lhg4VWw&k> zMvuJXw|U;R!i!mjc^9t4kGr{g_krwo)ixf_N?f$s%5p%S7?{^}>XpYmvvU^=$}PB( zGp`H$&~|)WWxMg=T5ZLwJtI0;UYyqA;@F${n{JmCI-Q!3o0PCSIl09^|3LqOzY}61 z@L4{+LR0YlM~+8zL3eh3Wba^cI{VW#Jqr^7mzIW1Z1Dk*-at>5D?ZC-^deJ$ZJjmv*A| z#<8P!HpQ-3ZI$lQrL5937AT5H}^I?U?m0jLS;f9gC*uBx5CGKD4pg z+;+!?j1z}GYu95uvqt-8b(4t;%DNt~t~+)yEXk#P-yY5$_b4STHKUWy`8N+pX^pJ)U*J>$}522cC?3_`wHDg`QN-5cEL`zV+LC^Jl&5d+JAQV)`@MpI57@tkJ~3# zq}7I<5ADCxw^QtZLr0|XrM)KW{&0WXV~=jqxRlTfc42$BuPV7ujpj>Ii14sw1<*Bl>Gpw3&-Zcuh*nWSnIdW{TZC|R;`TB*O9pIc)`N*x)I|ar*96miI`rt)_U>PwGO(_as~$R&e$}?fTLa9aq_> z@BMY?zVhAnJ2%W2)#Cm^)_vO99c0M;PgY&J{B4z;&89DgrIR*`Vke}uo;^XDcmBIW z$GR;F-E@v{47l2Bdhd6-9A2#&YSDUXv$*B)hnHu(|KaA3*IX(N`LOi5Z-2TuHrvAS!Nc}98jC*hE{gA$; zo$e(}m`h83?YjAqUu5&rdoHcF{ODD@Gxgj%z3nV}_}sntUkjhZPeK;YZCTr`)trnP zpHPpRS1u;I$2>)O8xZ$5wncY4&AVRQ`Pg+@UQnF6vt&*GAa>@GUJ;&kx~4ftYM;ITm}*ryYg+rP zPV3vgeTNLI?A2RWuULKi+O-~2o*kVN z5U2^()VYPZ{24d;S~1(by!d=^TJhR;smV{b|CPJuuNmE*YiIs)b=`a81Ac0!`JmG` zRaOx{JdeM#$3NEUfPd8<-GHWPH~UQNbY$tI4*TQ(O3dlE$k`&R@;$3TEt{T-$zHYU zli8D*lvxvpbxTq;V|IL(ot9d>?@`|htG-9WYX8bS^-fBMqNuEqJLtooj61T6U2Sn< z?ao|z_cPx{j<`F|C&;Z+Wkp5*t=;dK!M`Luk+wxLz4gD-aroYw8@ zuYa_UdFSJj<;T6;*M__2I&M2!Q1E>6u8o1ql6;CXuPoC{9~C)D=2TWAYprhJhT63~pV`Gn-m3Pm zzVAQV@>-Tp=TB=hpM=Ep-ajt4dib6P@m*6dF`G5n^qA`j~ktXIskS(aOSEhtS;?%(3{sMn%n`_%7N z?9ru+_S_>K=ibC~Z(*u^>Q{vhvaxHMJ&bvfn6uF1#_{hjB!`t;h?#w9)Qwi(UwJ<; zxYTC){k3~EX*-W4$N65tP3bmO zO1t~zUzD_ub%}g`RQIUnhZfYdOmK)?k_=Zni>m&&txLl9$Vy~me@s0;`Tp9N;m;j( zB{?<^Q-7Pdpr%O?)Jkby)j!tdx$T^vFGSs)biYOMfU0KUQ%`$sO|g!emvrpjv)>~I zRONX5STp|G=}N_>nwDL2pVt195>Vnk@_CcO+?%P{J?q|me);C7XN!N6O?%gM^22Vv z;U(e!gqIxOQ<kWFx%;-~frg+v@KfrMNM89=yRaU}*yJPPz13nl(dRZvnwPvC>lqZ0H0 zKKc^0qI}Vc5?X-|{~HN2iZYo%<^z{N8fJ|vK&}GW=wPkS7&qoF?h304P%O5hEv97;EJh*lTuqYi-)^PL~5 zo~rS7(9VS15kNjxDTU-GEX6?n5*4G6s1$@0XwA?R!>~#clA(+V4c7UD^38@wK(RZ* zd-ecDh=iMRgZ==u-$sY*gMzf7A(Jc#B}YP(U1F^Fln~h%WPJ?#3g+l#UpeX+be2Yd zw>^8HF<$hD=JHq=^oSq~Y~ouZC}q$kg5a3Opij87!B4PLfI1K+8>ZVkXsUNGyhm}g zgc}Wf@s)5=VJWkh0AISwMtDbPb)mA+0p339Kwul0Lx9%DA4mo)ZXclW4U#zmR2_^M zTQ(e+(wN0x3NFv%#vO3h`09ey2tBVi8jhaJpCTcpN;#zQ8LHO!P6wF*&IbxPAmJbh zMhdPLt)QhW1({D2l$20P7?2K-7OsoXS(R~Taq=1W^))7opBjRbUx_hJL@+}xev>#2 z_`pC1bDU`=H1$*a^=8muG+?UU%B&FvX`akEZ3M1(%|spo*O}(RqhI^zE!&&K19D4% z>7tC~2!z{wECDDL7&p3x`(P?_l(d4fqxBCBW}xB*&+0U)jrx_?@*04 zh;vZJ1x-~42WW!Sf;$ctUvGn59frBdT&MWKYL;Jj0jnAh))cF)AEj~6@YMn@72IsX zEOX-*Nr$-=B!Ov2P!^43Rc_jFR>kxnWp2I8bsL{Ng;`Y#P){GeR@CpQiUmR;tR`Vy zsb>`s2+ZH$Dw$Khxo(Rlt$u!g#aOr)1kM1MGXwFp`q=9AZ3|?%h4>R@TNL#xs@KG7 z$N=?==_@7;DLe4fj2QqkQ;PaE;%jyvx$mgkqDeEWtQt%j#9`~>iC0XT*hvDZ!ECLf zeg*dWlg4!$pENFLYED^&_^OdvQr53>UVoS*X7ss0uvtfl`2))O710|QA+{Ldg4<>t zA!cjgVMKib@CHVRnPDzqZ`KjQ;}uNvb8eMcabj8%9vL-$R=K#j>FZ`fUO%(GTkh9WkYLu`@bw!F zelF7(oY?wQ^iGI3Jx0uvFnn!-S;mJs65J~p%*OseLu}r$xE+A z*ua98s|{lq!D}IYw~YS3^`(3@v)Lquj(gTUE%#F#a!ql6G*i$~V14iiF%Ego63 zI!*{7ws>UC>Odicu-}V@eP_lp$ePuiLTE89OvvkZ4qhrL7CB&iOs!E$iUFPTLPwEO zxk|62SQXkGLy}4Q`TNLI=i=qQ}=%<2WA`9T}@(3Ie6imhLnzow%LnDG!4 zTYu2=4IsqyKU+U1ya9wbG0m+fNq8HT0(PVt%NXoDHFF39p7R@7RzhxWeTj#K2)Vfx zCOqrM#%OMhi9b*$xV>$S^&I#Oldlnr;*xlKQ}86^ zQigz?uR;J!C~=-7!Lm{a-7<2Ti-3`o5=FpZOCxN2;240nWyZYlFX8hy)ML`H!%*No zU)YNQ&wLrVlG~a=g3pVJSch=|V2$Oc9HL$lp2TnE-3B>GXiaXPA#6~<|iX&qpDpOn-6H%GsyqJc{ zq&-|FqB6x%F%gw19*T*m-k!qa_D{VXHU2OA#9r;Mn>c}QPg_uLPg|I@ZOX(6G_SS* zJ&!MPOxm5*@WBB_+=nu0Lsg?N;@0zDHio^f1i%>aMUF`utr|5(ENV?~JFm>AP>_cp zM_W+w5FcUE?yg1+6%X-97>V9Sifd7a2NUAT-?@z2BLfsrI*t$BVdG7@nRD> z!73muPtxE*LIjM22pELwVf~^o@EAoLXkPt@_<`FvBk~v(Z_l?fX_Hw4iDJA!segGg zSnH!h#}9$%5`qh|^YKq%m5r1x=UO8kg84#}fr}75L>eDT+_5oq%C3m(1mG!?1_&8?~;M^vBbQSRN8@r(_^pZ1v z@H=NG&{gOkr{Pdp7#k;(s4U>&Xao59bIcNnel^RVWQMXZ9{wydl!fu|ri73Kj3#p=of!h8_N8=S;DbnZvGgdpNyUe!uTL31^>Iy9{=umppMWU zep0v-4_#6wwVkAEfyWj$4e_V@$Q5=)*PBogjX2=tSCLV>PAdt4+Rm4)`W_%SLA z?QzjoRDQuHD9Qr>K3K?o(X)zN&nx=VoCJR!Tw*CieBdsAqci%VuMDA2zCk_f5CZQ& z9ibD1o_h%XgbduS=O5VkB;2m&AmYV=1wAhj`pxx(u)E%p(6bkz=PyFPcbw338lh)3 zLcc?r&@&xx?aDM%%D;i)J**b)R(kWWE81?e=t@DC7xrd(JbU3ozzcsYgC7JS3{=iT}T zN}iS!jF}Hx!(9S}Ut9&5CIq?F3yxlH^kSoz8bN3*^)e&A>N!tfFJWi3KK{r@%Ag+t zwLC2q!XX(;Ps8wyXgedy7!d*@gC~iAXp?4Y2n>*8ctIcWj|yS1d?z67f}>UksU{SL zC`6lBxoi!xF}f+CC`AQ2nMF8_qw6Oj9a!c%EDb_XO?DEMP|DC9;$?hS>o zKl4S}gh9?u&dzf1!XRITLij-X5z1aJCjpK=G!1YPu0ULPMUb3EFsMs98TfKkv6`k*=rz=`T`{e(U#0T-jP zliBM}RN4EWb61c@VVs)_`t+F|8al&9CYu)QO=zb|r-53VqMfM?fp0db12RYm5~K@M zsbqt_L&Mx=_JxTzN_k;S3ekghNAFPY0Ie^VCj|0=yx3q1OfXVARV^DAqIT7VqSIf% z6RtDVL3{_{xHM9GvI!GCBtg1>0RE30=+AGv(W~Q^e$@!?Am2XIf(JOe^|h3Z^bYoS z37V#bQKPTwsS-%ip*Hs22u_-XrI8~f@d?!i3zSx(%p{0PEI*ToY7EIIOqr_lQS0j| z9QitkqFjBbrx3USaRj=bhFL`SLlrp%e<*<~DAXQ@7U%(UtL`({hLn>EIW1QZAe;(i ze>vG(F7J(ITz`~lX0Uo1SOswWEulH#pM+K_K^sq#a4Oo40=Ru9hGieNBVA{b<$5y4c*E*Q7RD3H-Kgu!eX0~)E2H8q5x zddRsnhEcEu%NRx}fvK>10OQiA7~Tso5_x49j6&WM2BXDu&oZyTt3sKBjP6Am2Ac!G z%OYnRtEWI39D@;}d8UC4!0cf4AW54D22bQfFpvWgOeLCoP>;xzVK`Wn8pjw0Pgle+ zLc}jLIIW`ofmOulOVNY^ZP~?e&^XPZp6V6t!6PHly{w2QX_9jyjB${pc~5pq>gX zkd51;#Cn4!A-$AwJ&LBdTwaFv0*u0O01Wi8=w79GPAQmuQ9VW^TaXd}t&K3eEOMlc zVG1w=A{e)z!RnD{F^$1M#fV_w*oa_YEkrOHxye|23|f$4FjhQQkT(+72ek4P^iV2r zdqg2CCcc+OYdd4SN(L?AFqld_HYF%AydEt_3v%Ook@XhAC~^P5qKofk#BxNd#QKV6 z#c~9DB1Gc=11!P;_E$tVP=A=rP&A_y_XTdn=1nlK4E!Sr9l8ULXg?8*<=g zw3suTQ@9t7I*DN5K;tl$M5}P)dszi;X9&m;hw~pKCFPbnhWCPw5cLJsLqRCRdIVT9 zG2b(<;57ygYZ>25fpnndv0-}vqwqch3>FlkdceFQn2N^c5AJ2r8r2vFD;Mi~mJsVT zmO=|i?A}-CFjgs+RTeb9=w1e=IYmSFFuDN@2#4JZDjT-}koAuc%@yQ65zQ4Nr$lqb z$Q5WCw$a!?jL-ragE1og%mAn2bYtYK$j@P5-Hp!y>~6w&7kp)f$W8 NIM tuner", MODE:="0666" +# Minitiouner Express uses different product string +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{product}=="MiniTiouner-Express", MODE:="0666" diff --git a/requierement.txt b/requierement.txt new file mode 100644 index 0000000..ed14209 --- /dev/null +++ b/requierement.txt @@ -0,0 +1,7 @@ +tk +Pillow +python-vlc +pyusb +ffpyplayer +opencv-python + diff --git a/status b/status new file mode 100755 index 0000000000000000000000000000000000000000..9fea4f55a58dc0ebafb3ed91f3952a3cc975b07b GIT binary patch literal 22040 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 KBE!HC)&BslCIIRH literal 0 HcmV?d00001 diff --git a/status.py b/status.py new file mode 100644 index 0000000..705233e --- /dev/null +++ b/status.py @@ -0,0 +1,126 @@ +import os +import curses +import time + +MERThreshold = 0 + +def display_percent(stdscr, id, meaning, value): + stdscr.addstr(2+id, 0, f"{meaning}: {float(value)/100:.2f} %\n") + +def display_mer(stdscr, id, meaning, value): + stdscr.addstr(2+id, 0, f"{meaning}: {float(value)/10:.1f} dB (need {MERThreshold:.1f} dB)\n") + +def display_yes_no(stdscr, id, meaning, value): + stdscr.addstr(2+id, 0, f"{meaning}: {'yes' if value != 0 else 'no'}\n") + +def display_state(stdscr, id, meaning, value): + states = [ + "initialising", + "searching", + "found headers", + "DVB-S lock", + "DVB-S2 lock" + ] + if value < len(states): + stdscr.addstr(2+id, 0, f"{meaning}: {states[value]}\n") + else: + stdscr.addstr(2+id, 0, f"{meaning}: {value}\n") + +def display_modcod_s(stdscr, id, meaning, value): + modcods = [ + "QPSK 1/2", + "QPSK 2/3", + "QPSK 3/4", + "QPSK 5/6", + "QPSK 6/7", + "QPSK 7/8" + ] + if value < len(modcods): + stdscr.addstr(2+id, 0, f"{meaning}: {modcods[value]}\n") + else: + stdscr.addstr(2+id, 0, f"{meaning}: {value}\n") + global MERThreshold + MERThreshold = 0 + +def display_modcod_s2(stdscr, id, meaning, value): + modcods = [ + "DummyPL", "QPSK 1/4", "QPSK 1/3", "QPSK 2/5", "QPSK 1/2", "QPSK 3/5", "QPSK 2/3", + "QPSK 3/4", "QPSK 4/5", "QPSK 5/6", "QPSK 8/9", "QPSK 9/10", "8PSK 3/5", "8PSK 2/3", + "8PSK 3/4", "8PSK 5/6", "8PSK 8/9", "8PSK 9/10", "16APSK 2/3", "16APSK 3/4", "16APSK 4/5", + "16APSK 5/6", "16APSK 8/9", "16APSK 9/10", "32APSK 3/4", "32APSK 4/5", "32APSK 5/6", + "32APSK 8/9", "32APSK 9/10" + ] + MER_thresholds = [ + 0, -2.3, -1.2, -0.3, 1.0, 2.3, 3.1, 4.1, 4.7, 5.2, 6.2, 6.5, + 5.5, 6.6, 7.9, 9.4, 10.7, 11.0, 9.0, 10.2, 11.0, 11.6, 12.9, + 13.2, 12.8, 13.7, 14.3, 15.7, 16.1 + ] + if value < len(modcods): + stdscr.addstr(2+id, 0, f"{meaning}: {modcods[value]}\n") + else: + stdscr.addstr(2+id, 0, f"{meaning}: {value}\n") + global MERThreshold + if value < len(MER_thresholds): + MERThreshold = MER_thresholds[value] + else: + MERThreshold = 0 + +def display_status(stdscr, id, value): + meanings = [ + "", "State", "LNA Gain", "Puncture Rate", "I Symbol Power", "Q Symbol Power", + "Carrier Frequency", "I Constellation", "Q Constellation", "Symbol Rate", + "Viterbi Error Rate", "BER", "MER", "Service Provider", "Service", "Null Ratio", + "ES PID", "ES Type", "MODCOD", "Short Frames", "Pilot Symbols", "LDPC Error Count", + "BCH Error Count", "BCH Uncorrected", "LNB Voltage Enabled", "LNB H Polarisation", + "AGC1 Gain", "AGC2 Gain" + ] + if id < len(meanings): + if id in [19, 20, 23, 24, 25]: + display_yes_no(stdscr, id, meanings[id], int(value)) + elif id == 1: + state = int(value) + display_state(stdscr, id, meanings[id], state) + elif id in [10, 11]: + display_percent(stdscr, id, meanings[id], int(value)) + elif id == 12: + display_mer(stdscr, id, meanings[id], int(value)) + elif id == 18: + state = int(value) + if state == 3: + display_modcod_s(stdscr, id, meanings[id], int(value)) + elif state == 4: + display_modcod_s2(stdscr, id, meanings[id], int(value)) + else: + stdscr.addstr(2+id, 0, f"{meanings[id]}: {value}\n") + else: + stdscr.addstr(2+id, 0, f"{id}: {value}\n") + +def main(stdscr): + os.system('clear') + stdscr.addstr(1, 0, "LongMynd DATV Receiver Status\n") + + try: + status_fifo = open("longmynd_main_status", "r") + except Exception as e: + stdscr.addstr(2, 0, f"Failed to open status fifo: {e}\n") + stdscr.refresh() + time.sleep(2) + return + + stdscr.scrollok(True) + stdscr.addstr(2, 0, "Listening\n") + stdscr.refresh() + + while True: + status_message = status_fifo.readline().strip() + if status_message.startswith('$'): + parts = status_message[1:].split(',') + if parts: + n = int(parts[0]) + m_str = parts[1] if len(parts) > 1 else '' + display_status(stdscr, n, m_str) + stdscr.refresh() + +if __name__ == "__main__": + curses.wrapper(main) + diff --git a/waterfall.py b/waterfall.py new file mode 100644 index 0000000..3f9c699 --- /dev/null +++ b/waterfall.py @@ -0,0 +1,189 @@ +#!/usr/bin/python3 +# ZR6TG - Tom - 2022/06/23 + +# basic signals detection code ported from https://github.com/m0dts/QO-100-WB-Live-Tune + +import asyncio +import pygame +import websockets +import os +import pygame.gfxdraw + + +# CONFIGURATION +FFT_URL = "wss://eshail.batc.org.uk/wb/fft" #official batc fft + + + +COL_BG = (20, 29, 43) +COL_SPECTRUM = (217, 127, 43) +COL_TEXT = (224,224,224) + +WIDTH = 800 +HEIGHT = 480 + +class Graphics: + + def __init__(self, width, height): + self.start_freq = 10490.5 + self.width = width + self.height = height + self.x_tab = (self.width-50) /922 + self.font = pygame.font.SysFont('freesans', 20) + self.bigfont = pygame.font.SysFont('freesans', 180) + self.mediumfont = pygame.font.SysFont('freesans', 50) + + + def align_symbolrate(self, width): + if width < 0.002: return 0 + if width < 0.065: return 0.035 + if width < 0.086: return 0.066 + if width < 0.195: return 0.125 + if width < 0.277: return 0.250 + if width < 0.388: return 0.333 + if width < 0.700: return 0.500 + if width < 1.2: return 1.0 + if width < 1.6: return 1.5 + if width < 2.2: return 2 + + return int(width) + + async def find_signals(self, fft_data): + signals = [] + i = 0 + j = 0 + noise_level = 11000 + signal_threshold = 18000 + in_signal = False + start_signal = 0 + end_signal = 0 + mid_signal = 0 + signal_strength = 0 + signal_bw = 0 + signal_freq = 0 + acc = 0 + acc_i = 0 + + i = 2 + while i < len(fft_data): + + if in_signal == False: + if (fft_data[i] + fft_data[i-1] + fft_data[i-2]) / 3 > signal_threshold: + in_signal = True + start_signal = i + else: + if (fft_data[i] + fft_data[i-1] + fft_data[i-2]) / 3 < signal_threshold: + in_signal = False + end_signal = i + + acc = 0 + acc_i = 0 + + j = int(start_signal + (0.3 * ( end_signal - start_signal ))) + + while ( j < start_signal + (0.8 * (end_signal - start_signal))): + acc = acc + fft_data[j] + acc_i = acc_i + 1 + j+=1 + + if acc_i == 0: + in_signal = False + continue + + signal_strength = acc / acc_i + + # find real start + j = start_signal + while (fft_data[j] - noise_level) < 0.75 * (signal_strength - noise_level): + start_signal = j + j+=1 + + # find real end + j = end_signal + end_signal_orig = j + while (fft_data[j] - noise_level) < 0.75 * (signal_strength - noise_level): + end_signal = j + + if j <= 0: + end_signal = end_signal_orig + fake_end = True + break + j -= 1 + + + mid_signal = start_signal + ((end_signal - start_signal)/2) + signal_freq = self.start_freq + (((mid_signal + 1) / (len(fft_data)) * 9)) + signal_bw = self.align_symbolrate((end_signal - start_signal) * (9 / len(fft_data))) + + if signal_bw >= 0.033: + signals.append({'start': start_signal, 'end' : end_signal, 'mid' : mid_signal, 'freq' : signal_freq, 'signal_strength' : signal_strength/255, 'signal_bw' : signal_bw}) + + + + i += 1 + + return signals + + + async def update(self, window, fft): + polygon_data = [] + fft_data = [] + x = 0 + + while ( x < len(fft)-1 ): + db = [fft[x],fft[x+1]] + #y = int.from_bytes(db, 'little')/255 + fft_data.append(int.from_bytes(db, 'little')) + polygon_data.append((25 + (x/2 * self.x_tab),480-int.from_bytes(db, 'little')/255)) + x += 2 + + signals = await self.find_signals(fft_data) + + polygon_data.append((25,480)) + pygame.gfxdraw.filled_polygon(window, polygon_data,COL_SPECTRUM) + pygame.gfxdraw.aapolygon(window, polygon_data,(197,244,103)) + + + + for sig in signals: + text_width, text_height = self.font.size(str(round(sig['freq'],2))) + text = self.font.render(str(round(sig['freq'],2)) + "", True, COL_TEXT) + window.blit(text, (25 + (int(sig['mid']) * self.x_tab) - text_width/2, 480 - int(sig['signal_strength']) - 60)) + text_width, text_height = self.font.size(str(int(sig['signal_bw'] * 1000)) + "Ks") + + text = self.font.render(str(int(sig['signal_bw'] * 1000)) + "Ks", True, COL_TEXT) + window.blit(text, (25 + (int(sig['mid']) * self.x_tab) - text_width/2, 480 - int(sig['signal_strength']) - 40)) + + +class Socket: + def __init__(self): + self.websocket = None + + async def startup(self): + self.websocket = await websockets.connect(FFT_URL) + + async def updateFFT(self): + return await self.websocket.recv() + +async def main(): + + window = pygame.display.set_mode((WIDTH, HEIGHT)) + pygame.mouse.set_visible(False) + + graphics = Graphics(WIDTH, HEIGHT) + socket = Socket() + await socket.startup() + + while True: + + fft = await socket.updateFFT() + window.fill(COL_BG) + await graphics.update(window, fft) + pygame.display.flip() + + + +if __name__ == "__main__": + pygame.init() + asyncio.run(main()) + pygame.quit()

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%0D} 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 z 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