diff options
Diffstat (limited to 'tutorials/sndkit/morse')
-rw-r--r-- | tutorials/sndkit/morse/Makefile | 27 | ||||
-rw-r--r-- | tutorials/sndkit/morse/Vvcw | 1801 | ||||
-rw-r--r-- | tutorials/sndkit/morse/charlist.h | 96 | ||||
-rw-r--r-- | tutorials/sndkit/morse/loadcw.c | 163 | ||||
-rw-r--r-- | tutorials/sndkit/morse/morse.c | 316 | ||||
-rw-r--r-- | tutorials/sndkit/morse/morse2.c | 578 | ||||
-rw-r--r-- | tutorials/sndkit/morse/morse3.c | 572 | ||||
-rw-r--r-- | tutorials/sndkit/morse/randomcw | 2 | ||||
-rw-r--r-- | tutorials/sndkit/morse/testgen.c | 65 |
9 files changed, 3620 insertions, 0 deletions
diff --git a/tutorials/sndkit/morse/Makefile b/tutorials/sndkit/morse/Makefile new file mode 100644 index 0000000..79d36f5 --- /dev/null +++ b/tutorials/sndkit/morse/Makefile @@ -0,0 +1,27 @@ +INSTALLDIR=/usr/local/bin +TARGETS=morse morse2 morse3 testgen loadcw +CFLAGS=-I../../../include +LDLAGS= + +all: $(TARGETS) + +morse2.o morse3.o morse.o testgen.o: charlist.h + +morse: morse.o + $(CC) $(LDFLAGS) -o morse morse.o -lm + +morse2: morse2.o + $(CC) $(LDFLAGS) -o morse2 morse2.o -lm + +morse3: morse3.o + $(CC) $(LDFLAGS) -o morse3 morse3.o -lm + +testgen: testgen.o + $(CC) $(LDFLAGS) -o testgen testgen.o -lm + +install: $(TARGETS) + cp -f $(TARGETS) randomcw Vvcw $(INSTALLDIR) + chmod 755 $(INSTALLDIR)/randomcw + +clean: + rm -f *.o $(TARGETS) core core.* x y z *~ diff --git a/tutorials/sndkit/morse/Vvcw b/tutorials/sndkit/morse/Vvcw new file mode 100644 index 0000000..d7c8e57 --- /dev/null +++ b/tutorials/sndkit/morse/Vvcw @@ -0,0 +1,1801 @@ +#H001
+FSIEL DHNRS NEINN O=IDI
+EIIIE U0ZHS VSE™N BXN9O
+ISEHS N5PAN AMTUP JTGAC
+AEHGE IXWUM KSYQU ISEIT
+SUIVˇ WOUDQ I5™ES
+#H002
+PDSTH ANQ™L TIINT A3BEA
+SUXIU OIDGE NIIˇB EDUNF
+SCIES VEVWQ 2SSRA ITDET
+ETMID HEUA2 YEQND 8A9BA
+ITDJN E¸USZ KAFBS
+#H003
+ERPT7 EˇH8F ESOGE AZUAT
+ILN™™ ANSES FAQC? BATTI
+ZUTWI QTHAP BVIII BISXR
+AVT2N NMESS /EDGE ENYKD
+UEHAT LMJSI SIHMR
+#H004
+JTDE2 TTNSY IANOV ZXUIU
+DIP1R F¸EEH AAQHH N8NMD
+BIAND IWEES GRKII TUU¸I
+ILEEN R/MJA HUEIA TDNAI
+™TCSS UAEAE Sˇ1QS
+#H005
+SDXI9 ANSTC NHSIV MYENJ
+EX82I ™IAQI NEAVZ TNLSA
+TCELH UDNEO ˇKTI™ AMLNI
+SFAEE NEWTH S1GTM PDBII
+MA5ˇE MSHHJ ETIBR
+#H006
+USˇEI SEGIA NBNˇR IQL™R
+DAAET OFMCE MEZIT LPLSN
+SY699 DANDB HIARA HIIVE
+QETO3 TNEAS A6ATI AJXRE
+™REDT DAKSC YWIII
+#H007
+ZSRNI HEˇSE SLTFE LE3DA
+NXCSO INVVJ E3HWS KTEWM
+IYNUI BTUUS 7ZAKR TPINS
+=PEEE A™RII ™NFRA RTIDE
+QDATG AMTL/ WQNTS
+#H008
+IHUAS KIOZV ?NOTT TNXYF
+J6I™U TFBS™ T0AAH EAYUE
+DE0US ENTAE EMPEI ˇGNNI
+ITANT NHSBC QURSL AˇEMX
+ˇIRTR SSSWM EIRE5
+#H009
+FHKCZ O™SES BSIE0 SIEE8
+PAˇUM EUMNA 2IHOD WVSUE
+IEIIQ TNAVP TETXM LISNN
+IDNRT INETR NIGND B2AVF
+XTTAN SKND0 EHUYJ
+#H010
+STPEI EVAIT HSUEA ODWEI
+SSMNˇ YZH?J C™RTO FIBHE
+I6EHT ™ANNW ˇERAH AEXT1
+N3LIQ NIISK =AYSN RTTSJ
+DEHIV SPTND EGSWH
+#H011
+IWRES ALJAE EVWXE SIQHB
+TSDN2 ASSNY ENRTQ EIRTD
+MAEDN UIKRA ZYUCF IGS™T
+SXETI ˇDOCI A0WIE PAIRN
+IDTNI M/EAB 6N9ZD
+#H012
+EPQUR RL2SE HS=VK ETFˇR
+SSTNI HW™OH SBAVA XNQT6
+TIDNN RWECS SAONT I™ESN
+EIUNU SKIIP YETEA 6ETIE
+Q1TJT ZRTDA ™SGDM
+#H013
+KISLO TENAS ANITD W?HEZ
+1E=PR NQ™SF ˇHFBE ˇTLJ™
+CXTMU ARSON ETIIQ SIIAD
+?IHTS 5VPUE HYAMA DSEEM
+ATEAI CCEAN IGTAD
+#H014
+ANSQI 3GMHE EADXE TEEA™
+ESTYI KUUIC THNI6 ˇWLCD
+IAD0V KTETR STZSH FINEH
+WNH3S I™OAP SXVIA BEMHA
+EATDS I6S¸A ˇJZTM
+#H015
+ENELT AHMUQ AUSNT EPMUN
+LAU3Q ?TMTˇ 3KNUˇ NEHT6
+TNMMD SSCWA NTJEI ™TVYE
+ZXACB EIGFO LAANI ˇEHII
+ISTER EˇTSO IGN7J
+#H016
+VIESW I7AAE UINNS EYILI
+NSAAU NED2F SSEIK G™7FH
+IAETS M?NTZ UHAI9 OEGML
+CQQIL MRIIU IRNEN SHRAO
+DBZ™J NTEPE TXOTˇ
+#H017
+DH™U6 EOTN3 A=ELK UIMTI
+ZDIEI LA¸NF SQAHT NADGK
+ISSVS ANVNˇ EIHCD SXEPM
+NTET™ WTNTE UAGAI N=BTP
+STJED ™G?UE EYIRC
+#H018
+YAˇˇB TSVW= NDFOV KTBJE
+AUQ/R TIATI R9PSN E™3HI
+CGRST EXTZ8 ENNIA TMFSS
+TETNI DEECM SMNLH MERCT
+EMAJC NMIAE ATSJS
+#H019
+WXLID TISEˇ SCTUE SCHAA
+RABHR AAH0U FAJII AEOWD
+S™NMH I1NYQ XˇATI PTTVT
+KEAEI ISSEK MIDN9 M1HKN
+ZAI4C ENTEL GAEER
+#H020
+UQNZS /IIHN AN™Tˇ KFYMI
+IZ¸IT 6OENL RII2E ERNTT
+NAMWI EUS¸E TJEES XAC?2
+VINEU MSTDD MPQGS DCNSI
+BTARU ESDAJ RRAES
+#H021
+KAEA= AQXUE DNTTE NAIAO
+HDG3L IIGE/ TˇRAT ZECSO
+ZBI™G HAD¸Y ERE=S 7INIW
+AWIEI ASSDF NUTVD VEPUY
+EMNTW SNIUT AJHIJ
+#H022
+TZQT™ DXETJ ESIBA RHTUD
+HIVˇK YSUXD NˇEIE IK2W?
+AJSIK GSITO EAIUR ISFES
+ASM4D EE2JP IA6GD NNSEC
+LFPRI TSNEX SNDAT
+#H023
+V™SUA XLWAE T4NES FHRNI
+SQSYI SPATS ˇGUNY TKMTU
+LEOOM NQTS™ ESSSB IEFS3
+EHTIC JITBH N5GIT MZEMA
+AEDXI CRD1E T3RNE
+#H024
+YCVSW Q™IEM SJEKN DEIII
+BEEIT AIIEM GESJE TPA=I
+SZTES NONFM RRD9S TTNUJ
+ISHV4 OINQX S2NL4 ISATN
+DSˇEN UGUAY HFMDˇ
+#H025
+KHSAA IYZNA LE5IE UARC1
+N™UTS NHE/U ATD1G OTEMT
+ETIGI INEES QF=EQ DUIEP
+DXSHC BBJAT M™SHN IˇWST
+SIVNN ETFNN ¸IUXK
+#H026
+WAHSU FMOIM TYEBV S48SE
+AENNN IAMEO EJCWN S™EPA
+7HTYM DKQOT YDGTH SˇITA
+HEIAT II¸8I EWMAU ANDLE
+VZRTX BI6AA TEVIS
+#H027
+OPIRM NLENM THUTG THEIN
+XYSIS V™NEA NLEI= NKEI™
+BAYRQ TRFSI SI6S7 NSHOM
+OBZ22 IEDMU EEWSW NSJAI
+RINTE ˇEˇTO DWNTC
+#H028
+H7TNM SN=ZI NTYKJ EOXDX
+AIG™I MPWAI AEDBM KFE=H
+AVˇWT ENUED NNESM QYEPX
+TT8NO LI6D™ SIUPD IESNE
+ACHRF NTNTT IEAST
+#H029
+EFHSH ZˇIUM EEUII LADST
+M9I8N EIXAN N78GT UTLSB
+DEWSM ISTPN ™MRN™ VEPCD
+NEKAT AJSLE FIKGT TEODR
+TSYAE TNAJ9 QKINS
+#H030
+HSPEA TSOHS G5WˇF ME™PT
+IKUPA LˇZ1= R3NDV QTRMM
+I™BBI NGEEK HIATE NNOJD
+EXGRC MASTE MTS=I EISYU
+TEASS TTAES JAISA
+#H031
+EEICS IEPUK HIAM9 ANSEH
+ˇMLAS JXETT HE8ZA NSAI2
+TIRKD IHQND D™NRS BWGTY
+SFDSO JTIAI INFEP IJEAR
+FRA?K ?IWSS EEVIB
+#H032
+STKVB F¸EGL UFRHC GS?CI
+NSZK7 TSG0T EEEˇI UTAIR
+MMTN™ ISFSI HMTE8 ZISIS
+HDPSN SSRDT UYTEA NES=E
+TTEOD XAAQE FJWUA
+#H033
+E8TXT IIZMW TLSWR PITSK
+XSTIF ASMNG MTHJE OTND5
+IJTAE USITB A=NˇU ARJLS
+EEAHE YEUAA SAQLS ETTKV
+HXDS8 ™RˇHE E2NCP
+#H034
+ANNTY FDRˇD 5LETI EVESB
+UIAIJ ?ARTA EOYSˇ SGZEA
+TAMEI IEA™R /DAAR HP?DE
+IWTNE PWIVR NPW4A CFAXN
+MITIM EJHSK IQIS¸
+#H035
+SEO™D DAIGM 3EITN SIQ=E
+EUSDL NV™NN SHYUT ACEKE
+SIGEA UAE™D INNEP AEIFU
+XTBDZ HS8TR RˇJ2ˇ AIIAT
+DTNIR FNDDI ¸ˇT8W
+#H036
+EMHDZ FDQN5 5IBEK SSSEP
+Y0RTS ANNIX WDIGA AQCNV
+LHHS™ DE™IJ ETREI SHOAU
+SAEER PUUEA XTAOC T7IIH
+TˇTYS T0TST EKSNI
+#H037
+ˇIE™Y BHNGE LSLNU GˇISU
+SSQAS NCW8M AETIA E4XTI
+TUAOJ NZR2T E™IAT TUUFG
+EETF2 ASESS KADCO TRRN9
+HSVYD IDTPR NEITE
+#H038
+DDBEJ E™H8R TADA5 DSIHI
+ZUPAS ˇODTI EAVTS YTSIM
+GICFE NIREZ QNAJI NESAJ
+ECKTR TTVˇ3 DTSLA EAXT™
+E4NA5 ENMWˇ SYIXR
+#H039
+SOI6S K¸DTP AKWNI IXDM™
+NN™YB TFL/V IHOCE HIZQS
+TNDTL UE6ET JIUAI ERTNN
+H4REG EUAAT EAMAE ?IˇSA
+ZTˇES MEPJN NTDNL
+#H040
+NPRXN V™ASR OAGJI IASWE
+EME2K ZEGDS MD9ZI EAUAI
+OAESN EZEIA TINSH QICT3
+TRET7 WJBUY NˇSTA AEITH
+S3DGL TQOIU DRTNF
+#H041
+MAPTE RTˇˇT MLTNE IYKMS
+IMZE™ HNAIS TAEXE 6QBNI
+QSTEU MGEZ? HEWCD NˇARS
+AANV4 AGT0V UEFTR IP¸NI
+DN5JI TMACS SDIEO
+#H042
+ˇTMTN SNUR8 DA?SE T™TUJ
+SEFNA MESMT UETWA OEVTZ
+VTYAF NMFHN ILHPE TFCTQ
+TU0TC A/RVN NBRTX EENAO
+NK2ZE NTEND CTGIM
+#H043
+S/SUI TSEN0 INGEP SˇFFS
+ITNDP HN8CT TOEEL EAˇS3
+NSEST NHUTH RAKNB XTXBQ
+HPNAW TTNEU DII™Z RSTET
+VYRFR PHLHE MIE8J
+#H044
+DDBKN 7IXSE RTMAT INNCS
+LENTT ONAHO PERKR EA™WM
+ˇEA™U FA0ZJ JUIˇM SNE1E
+5CHTE NITTS GVRTM XNDTD
+NAFNI 8IETI ANYQE
+#H045
+NTJWF DETT? NEUNP TLRSS
+INOIN USNF7 TQEMJ VMNOA
+EIUI™ T8WYI IAAXU EENZE
+HLVTG KS8AM RTNBS RDHS™
+EˇABI RA7EC EIPTG
+#H046
+WIKME ZRUI¸ 5DIIT EREXO
+RACPE INVOL EDIC™ S?ITN
+1RNET =DEXS BIYQA NSESG
+ITNAU SANHS HUQFA 5ˇTTS
+ˇILSI AODEN SJ™DE
+#H047
+P™EEˇ NBEEA MYOUS RK™OE
+SI1VZ YTUNI SR=TM G™ELN
+DSEIS TASMA UAPA= AAHTS
+DI4QN IIEFT TGMWI ZI8RT
+ESXGR SHJSC SKTEI
+#H048
+DKSUJ SF4IT NAESI SACEZ
+MCZQU HHUBS PTVE7 NOSNE
+?TE™M ?USAI UXNIW BYLTE
+O™SKN ˇBTLI TUAGR 7IˇUR
+SEINT ESYIT IREES
+#H049
+NUWEA ASTND ™S™LA NVHTM
+SENME T8ANI BOZOT ¸HESE
+EHSIE MINNR 5EEDM TXATI
+DKJ/T CK9NT YTS6U B™PFU
+UEV¸S TNLNI ˇGTQT
+#H050
+TMSSE E9IGA BL?Nˇ ITH?Y
+EOTJN ™ASZI GEKST NNIAB
+PRAM1 MJHAS DAGTR QEETS
+GTRRA EUEAI EXNVT NCIIF
+HKX™H UTEˇA IMSW6
+#H051
+UTCS™ NNEKN WFERY SADKE
+TEANZ JLAUB RTAE9 BHGII
+VRSET IDNXU SI¸ED SPˇAD
+SUIUF QEEUI NJJII I9NTU
+AE1H8 OANIW 6TINM
+#H052
+TEKIT GˇWWN EAUMC NPMUR
+ˇ=ENV TSIII S™MSM ISCN3
+7BTHI SHDEP NLACL TATZN
+DEQKJ AEUVE BIRNX TSEAD
+RDA0F OTEIS 9ESNY
+#H053
+CNS/A UTW9A ˇZIEI IHOTE
+MINIR SY7IX ESNYJ QPKI™
+ATNAK REZEV UHISG RKFAA
+YERTA EHUDA ˇ/DIO ˇALST
+NEENT BISAI EBR8D
+#H054
+FECKA REIˇK OIENE QU1ET
+J2DIR 1US5N GBJEV TUZSN
+GIEAP TDSNT NSZSY SEAHI
+HEAXL E™STU ˇULSS 8TSIA
+DˇIWM VITTN SR™RI
+#H055
+NTAHE FAMST SJSIA X™ETI
+TEEM/ TSSB9 6METW AIIKN
+OCAGV TCLAZ ANQM™ AE™ˇN
+EDEAZ HEWˇR SAT0E 5SIDP
+DDDIG TYHLU UIRAK
+#H056
+QAFRE ADN™N MNEII ESSWL
+DQNTI NIYEI THUES TNNBI
+AIQSK ERTFX OUNˇZ YTMUM
+AI8EP NHI/M PEE4V GSHFC
+SAE9T NZ/TX ISBJU
+#H057
+SITNM T9IML IIEGS RBIXW
+FPMSC DUETI VTSSS XJIIS
+EAENS RGEDD Z1NOY NEJQ?
+IRSK3 AGNET NETNF FTENH
+SHAH™ U™ˇ8E IKBAD
+#H058
+AˇNBS LTHIW UDOAE SDH9I
+IVCQQ XIAII XRETN SKARS
+ARTEF SS1EE IPEE™ FS=VT
+EWIUI KR1MG SSEZM FIANA
+SH4YJ MSJEI NDIOT
+#H059
+SNEEP AMNDU KEER4 EWH8T
+TNYBR ADETA E=ETD IATEN
+MNIDT IZVSA ASMFS LSIYM
+BˇIPI ONQNE RVV™G OA6™M
+MNJTC II0AX IMIZZ
+#H060
+NNENN IIT/N EST9ˇ DIUIZ
+TEGWY NLDAE RNIUE 3NARM
+TISKS UNXSB IMRIR YO™NK
+X8AEE TET¸D A4QEE HPFTL
+CMVHA BTOI™ SJKSA
+#H061
+DBEHT GCATI DIAZI UD4IS
+?RFK1 TNHNY HAKNS NNTMN
+ENJLU 0TE™E EE1ˇA ITOSU
+EEXIF EXMOP SDSSR TITPA
+ASSWI TSREZ ODBVQ
+#H062
+SAWIY =Sˇ™Z TT4AE AECI™
+I9EPE XEINN ENTA/ HSNIE
+DTAEN 5KHNA ISICE VJASU
+MKMSV DIITM RBLDG UTQUQ
+OTNKC NRAMW MFEˇJ
+#H063
+C5ANI MRDNM XJPGI WOTAE
+HYESC T0NBP ISUTT F™QAI
+ˇAERH NUTAI RTD™L ETEOI
+VEˇUK NSG8A NEAN2 EITNI
+AOENE IC6US ZFMDU
+#H064
+AEMIT MWMXK DENNG GRI1™
+ERGAT ?SEAˇ OZFER MUMEI
+SVTII S¸RIP JANIT TNILS
+JITRQ 35WAE SEFUA PJBEI
+NNNN? HAYIC NˇUEA
+#H065
+RZISI NANSN /IPAH ETSMN
+OTENR TXUDV CHT/W S™TVK
+ATEJ5 NRTFD AGZAQ IVLEE
+MSAEE 3PP™N XEXSH TDUED
+IBQIA EOˇSI II2YR
+#H066
+EASTL NIETT NSQTB E6ZF5
+GE¸ST AHEMˇ EXQHK IRTN2
+DJAII CXSDS AQMAˇ MFTNX
+SIEAY DTFOI DEBPR 8UVSE
+IT™MW ANEFU NTD3A
+#H067
+CTNHN KBTOG NSEBL HIENE
+ZDNNI IZARN EˇRTI GSMPD
+TKD03 IENUT EUHMB AMW=2
+MJCAA ISFIC TZQEE T2EOY
+NMTVS EIHXS NI™AN
+#H068
+TWMKˇ FTAIN ZHERD ATTA™
+UMADO TSEBJ GASNE PYSTU
+NQEOJ AT4Q= AEAHE ENLDE
+MNSTF TTTMP CNSUI H1I0K
+BVNˇR TAEES XI5LM
+#H069
+STTJD 9WBTI HZKS5 1HEPE
+TDSNN LFUZP EOATT NEAAE
+DTARG SˇYIU IDIHR RZTNE
+XISHX FS™EH NE™SI ˇENE5
+INQ3™ CIMAQ NTVAA
+#H070
+HAEPI AE5KM E41RT TNHSH
+IAJXJ SONEA NGETN ˇCDIN
+NVSSA NTETF MQ™RL SZJNI
+TIA2S IRYHE UIUCI EFEIB
+EADST IB™0R PXHWM
+#H071
+ATAUE ˇAQST IAY¸U MGSXH
+M¸A/5 NZJEA IRH1O ™TTHF
+THNTT EGUEA IJIAD TKSAN
+ITESM U2EEM APENT ACBTA
+DEVYS W9LRT LAERB
+#H072
+ADINT EYJUN ANSTQ EUTUQ
+ZFNEH TEPIA NJ™HN G/SAI
+EEB4I AETMR LUXNN TBKOI
+FSETN DMHSD MIHEO TSEFT
+NAC1P IR0Vˇ ?TWPN
+#H073
+QTTMG IXTEF TEOEE VAZPS
+LNEAN HD™BE UFTNH SJC5N
+SNNRI ™=NDX UYIJN YMUIA
+USSIE IET9N HSˇAT ITEDR
+OMKA5 AT5OF QENWC
+#H074
+KAS5S LYUSN MˇR8O EST/V
+XVTIE ISTEN KXG™U ITAHA
+™8WSB IKAEU SUUL/ LZHAA
+CDQII IEEFZ IEUED TPM¸J
+ETSNT IUJSN RENIS
+#H075
+SNSAI AHROC EE™ZK ™SQTN
+ZTNHI ™IUAA 1TERI FJTBA
+DDYID ZˇMIX I™ASR GVSBI
+4NEEA P5NWB DESQN EII6A
+MI5DK EMIYA LEMAE
+#H076
+XRSRM IRT7B EIEUY KAIFI
+?FGAZ AEAIC EWEOR A™TM=
+ATNTI SNMW¸ JEHDE V™YNL
+NSENT ˇSDG2 INDHA T1WMI
+NVTEQ THNSN EIVAP
+#H077
+BESEM ATEUE HWTEI CTH™J
+ITSUS AZMTL GKNIH SXUED
+ANISX ˇVFR™ WRAP4 N?PHT
+NRESS PBTDN IQSEE ETAO™
+YSTNT XR1IN 85AIQ
+#H078
+ATTQR JKKSX NRIDG OTWDE
+NIT™E AEMZI RTESI VN¸DP
+SHIN3 ES5IL HSESO EXFAS
+ENENT SMNTR YLWNT RSI7E
+NAB8Q IHYU1 PUCˇI
+#H079
+RHNEK LUYFC XUCWE ITSEA
+ABMIS TAZNY LAIJE VSAEI
+™IRNM KDEAT SDEGS S8SZ7
+EATET TII¸O =RIPS JUR7K
+DN4QN ˇMFTI IENVD
+#H080
+AEPQT MIDEˇ NADNM TQ1EX
+ˇETMT NENKU LEERR ?T™AJ
+I?PAI ETIJO S™ALF WVFZE
+DˇANN AT4DE BTNCN SKGAS
+STATU Y6IMS MHIIU
+#H081
+Q5A8E NALRI TTMRI NIORD
+PQOZE IIBOJ KE9ˇE SHEHF
+AINAS SNTI7 XSTAD JEIEC
+RTNDT K™SRZ ITVEN WGTBM
+SEEAA AAH4A ™DYU™
+#H082
+IEEMS HNB3R IZTAR VSADN
+LCNXR TX/SK ˇSUIY DFISG
+3TNVˇ EYETU INSDI QAEWE
+NGS™P NUECN MIEHO X?JEE
+TJ5AI UOSIT TIPND
+#H083
+¸MAEI RIEAA SRS2E RQIVL
+INEWE KQ8MS AA9ES ISSSH
+UDETY EEJ=ˇ QIIDU NSAHU
+TZ™NR VRAIT NIOBP TUMWL
+TECTS NFKGG TXIS?
+#H084
+ETINR TˇFSI TCVFA P4OXˇ
+TADEE AEUSE HNSZD NA™BA
+GMASA YETIT 9NSEE WMRIR
+FDDDQ 7UUNT KTIMI 3LLQG
+ICECV EA0AT NJAAU
+#H085
+MENNK HRSSS EEOEJ NXIWN
+IQJET IUBNS UNFMT ILP4I
+EIHZI DQHST TKST9 SEDST
+NNNUI VEBRN MTA¸™ 4ˇTJX
+3MGJA 4NECE FYIHA
+#H086
+D5ARN ARNAE SEJZU TRSS4
+VIYAE UINRN 9TBNP USOTI
+SDWN™ DTNCT YN4EW IJMNH
+ICIEˇ EVIT™ EQXET TGLXY
+YEESS KFMAB 5HMST
+#H087
+ZSHWE ˇIJUE ENMIN QDNIE
+YNNTT NEADM UHNWI MSZEI
+NSYTC 9IDGC NA/XE LAMVR
+ESOE4 MXRI™ S5HII PKATA
+SQFBK INFST VMET0
+#H088
+3TEVN EAIOZ IMANI PTMTA
+ARMBK IO5EI STG7M U2XAT
+EODIE ™MNAQ TUSSL MNUTA
+PNEDX JXTSH ENYN™ JCNRE
+LE7VI NEˇZT SWIMF
+#H089
+LTSNL R1ANN ˇPIEE CHQ™H
+KEHNS TVHˇN IEAJS T/TDS
+AJEDT SXAEU T9BEZ NKAIU
+OYBHY EHTCN OTGUT 4UHAI
+TNII= ANIXE NMFWE
+#H090
+2AJDE AXHTN SATHX ZQTUB
+ZRTR™ YNSSI NEREE ZˇTFH
+ˇNOTI LVPUE TASNT MTVZC
+DE7ˇA A0FKE A58IM RTNCE
+INRIH SHWEI NAGEI
+#H091
+IG8UH JEXIF OAAAX NARKH
+QIDOE ESSSL O4REC ENICM
+JM8BW DCMIE ZIWNE EAITI
+TSDNS TK/ˇM AHPSX AYVIT
+™ETTT ENQAA TDU5A
+#H092
+ˇ/R¸P ASNSI DIIEN XFVEM
+TMANK ™SSAR LTEIE SEISQ
+IKTIH MTEUZ IQEBW VYISC
+SN4AE DHWYT STUGO E6EAT
+T94SX NNJ™A JUUMD
+#H093
+HNLIV TEITJ RHUES EQA0M
+XNEZN ETHTI USILA APZUC
+XFNUN ASIWW TR=KE AAAMG
+NVIIH AB™EN PEQTY NSPIA
+ˇD3EM ?COTE MIT4R
+#H094
+LNVWS AIDI4 QTAJI EMCEE
+MTM™I AEP9F DM7¸E HNUSI
+ARSDZ J5ZEA NMPVQ STRSS
+GNINY NKM2O BˇSRN TOTTM
+STEWT ETTES IXˇAE
+#H095
+A7KVS RTAVK MDˇSE MSUHH
+NE7TE ENNNA NEH?I NJF™™
+TTESN OIEAA A™VIY PCMUˇ
+IDOSK 84UTI TSIET IDNSQ
+PGIZI UEDLW XEBOI
+#H096
+TWESA TAVLH IR5AI AHXEU
+9TESN 0EFSI =NIEH HUSFN
+DSINN TRXUS NOYDK ™SQIR
+T6EIY ECELR GTNNS VSSYM
+BHZPˇ IEPXI KIUEJ
+#H097
+GNU=S HJETT EXWTV FSPAO
+RDFAˇ NNCUT VSUTK TINUW
+IQEBE IRIBN SN9EN ZFRIL
+SSSM0 KAEUT SU0EE EE0NN
+AIT™S TIDXI HYWHM
+#H098
+GPTZN LTNQ3 TTSDE RO9IS
+SBEIF VB™EV AAEHR JTNJA
+NWXEE FDEIS THHAT ?CMAI
+YIEUP 6AVNE SQHKI NˇIIA
+DIMMA ZUN9S TAXER
+#H099
+UHSTG JHSEL AB9CS SEIXR
+FUESZ IVIIZ TASEE N9YCH
+V2NMD T0OIA FCDTN ADESE
+OIEHI UEALI IIEˇR QIHDN
+FSN/P NAI™S TRSWK
+#H100
+KFPNN UTSZA MIRQS IˇTSX
+YA/EE NJWSD TGITL KIBAN
+ETIMO ˇAECE AMKSW NEVNX
+E™SMR 7IZM/ D3AER HLND0
+MBOBM AATTU EIIEI
+#H101
+EVQ=D ™NNJS CTUAA HQENV
+RSTUˇ A8AIE ANXNT ZˇNHE
+EHTET PKAIS EMDBV N4TUA
+EWZDT ACIEG E5I¸M YXRPT
+4IOTJ FHSLU ISTIS
+#H102
+CIEAC AHVSE MRFOQ EZTLA
+ISSWG ND5NA ZY6/R EQJIZ
+PEQAB IIIAˇ ZDSB/ EXAED
+TE™SK VUNNM TUSE4 SIMNY
+TTRWT UFIHE IDSIA
+#H103
+H™DKO OTJXD IEEHN FVNTL
+AWSHW DNIMG ESSIA ENXAU
+TSXN5 IUˇAP 0ETIP ASEB8
+SSEKR TEAEX HUQPT YUPNS
+ICSII IRZ32 RIETM
+#H104
+YEIEC CTMOY 7VIEU FIHCR
+ˇSABN SI™RD GHDSA AISZP
+EEEEA ARIH7 NQAFN IEQII
+WLNSE GTSSE NITD6 TULNP
+IKXRD IA=WU N9JAK
+#H105
+UA9PE WIGSZ VESEP JFI5P
+AQNRT EANNU HTSNX RBGIS
+=SIDE AHMIT AOOC9 GSLNT
+RAZEˇ ATELE ?UKHT SYIIE
+YTIQA MTD™N RHEST
+#H106
+SHSE? YGAEU EIAˇE ZTADW
+29LAQ ISIT0 WNBDI MAMUR
+HNHSW U™KKN ATAET NEFEI
+OHUXL CSVHN IIAIA NTJRF
+EP0II CWEIA CMETN
+#H107
+OITWI SSPQA ICSTA MNNR2
+HUSXˇ IN9JS CES0N NHKDZ
+TEPUE EEEGN ITKAN IREES
+WESDL MMONT YIYVD HˇDBI
+IURSF SSIT™ T=GE7
+#H108
+F4™RG V4EH= WIASS DETJN
+EENCQ ARINX NˇQKP GTIJI
+TEFZN RAEI1 RTXEI JBYGT
+TT3UI APOLS ADDSE ETNTA
+EDHDU ASSMB MSAAF
+#H109
+™HEAI TIAHL ROEEE SISI6
+THKEI ˇATD/ ASHEI NESLK
+NSJAS DAGZI BTIVJ IS=AS
+PYRZA FA™6O WCEAW QUXTM
+NMERZ D4RTT EJMFW
+#H110
+H™ENT N3IOI FPU5S NEAYS
+TIR4S ™SSXI TTUNL DZMTE
+NBILA TESSE SRUNK 8HPOJ
+8ETEA MEUVE GETQN FI¸GT
+AHDDC TSCYˇ WNRIW
+#H111
+IGNTA IENUS AFIMH SIUEN
+VHDEY ™RCI3 7HPEK MS™II
+ZUNTN CVCIH OTAEA JX?N5
+DLLZS DRAZQ IˇAIE WLENY
+AAIES SDEIE TBOT8
+#H112
+SCLUI IMREI ZNETS SPIPD
+AJJEH NVA9S AEOES MKTZG
+DˇNRW 16NMS BREM™ ATXAR
+ETLOY TISSH IES0S DETIO
+YRATB IE5TQ SFTAM
+#H113
+QHSAT ENETU HSTTE BHUAT
+¸T™TK UHFEV PTSJA LIQNZ
+S=AAT UMD/F WEOII OCSIL
+JSHXI ZRNT3 SAIBV SMEGE
+EUˇEN ST/GS ARY3E
+#H114
+7OVBS IPANO STTAT ZTZ?7
+NDEME YN8™J GERUM N6BAI
+UWUIE QHXTM TNBUT UVST™
+EICMN LNKEM ESDIU IAEAC
+EˇVFX A™AET AIIAA
+#H115
+GEXIˇ ˇENNC N™EIU QMESA
+TI?J? FTTIA DATNN A5NTR
+K1ENS EIHMI ™PINE OSEIH
+UMTCS NAEMV 2AQRC SAIYE
+PULKW HVGTB RZTAM
+#H116
+HXTIB TTNNR 8ACTM G0HDB
+ORTAF EDEEN VTFTC ESLEI
+BOT2I EQT3D NHHJE NAFUM
+USZWP PSR?T ISATK EXSIN
+YETAS ˇSNM™ DSSKE
+#H117
+NOTEE SZ7EA UUNTO AˇGHH
+EAIDC STVEH E7KNE IGDNL
+NEXJO MQTIF N?QHS EPNSN
+YACT™ TR4DT ARLWB IMNSJ
+VT6EI TXNT™ UIIRN
+#H118
+GXAEU AJEYT TO2ME QRVFP
+EEWTA BETC8 CTJSI ZUHNY
+UEIBF ¸KIUH SSNH3 ITXIA
+AEAIS ALNIU HUTUI NˇA™H
+SS=RR 3NDIE AEISV
+#H119
+IMCEB RˇSUK ERH¸R INNBF
+61ITT FTTVE NAAES YAASL
+E1WBU DDU/X TAOGT LPˇWT
+NITEE 3IMAU ZATHE NTQTJ
+S™NHN SASEJ UEAJI
+#H120
+ICNQS ESPZK TEEAI EYTKF
+EDIN= HT6U7 DJNˇT OF™UT
+BAVVT ESOGA UASNA JSGIR
+ZSEAˇ IGSWA MMH9L MT™XE
+NNT3R EAHTT EMRIN
+#H121
+SOHTX DAYNU TDSJ0 SNBTE
+KNTNX MEKID MS4TQ IEKIS
+ESVTR T™LSA AAZNA RQUS6
+FWˇLE ILA3G VEAˇM IS9RI
+ITIME MNMEE CHYEP
+#H122
+PSTBE SVITN N6ˇ2A TDDUO
+ITITW OZY2I NTRSQ XKISY
+SLENL RVHAA HETHH 2AUJU
+RFASG NTEX™ EMENT EVIPS
+TDE/A CSEWQ ELMSI
+#H123
+ETZCE 2EPWY SSMVN QDMES
+5MOIS DSI3R NUUSI CUNFH
+EˇQAB TTMNN ITSNJ ILIUI
+9™AIU IWIII XNXAE ASHEA
+FA1EX ˇYGSB UEIKE
+#H124
+™LOTM BETED MWMPA TNNYD
+EESSH HRIYA NE0TM INAFQ
+UTOSI GˇP3S E0VET HNDRE
+S=T4S ZIˇEC XKDTA NITMT
+ATHIN JAEQK KSNAG
+#H125
+EBNNJ UNAS1 FI/TX RRUQY
+=EMEN IAR™I VOECA STI=N
+IMZEE TUAIP EOSGH TTATI
+NTSYN XETTD HSWIS PAKLR
+RLVAA EDDKS 9BEˇJ
+#H126
+VNQ8R K™R9I IEUCS NASER
+FVN6E ELRTE ˇUJKI WHNIS
+TZJYE IDBSI NXGSE 1IENA
+MIHQA TILXE NNMFA INNOU
+AATSU T9IUG PHGET
+#H127
+UIRS? EXIYY VˇKMG /AYHS
+AE5NI HHIEL ˇCIII TEIAM
+SWS¸F MIIEP OSSIB SNFDE
+HEMEC RZEJI NSKIU HTNIQ
+I8N5¸ NAEUN M™NVN
+#H128
+NWU?A OEOSJ 3EPKE ˇTKXT
+MLIAS QIUUO HCMIA FHN7I
+EYAER IVIEˇ JUSKX TARAT
+U7DII TPN5D NANNN MTAEB
+ME™ES EAGCS TITJZ
+#H129
+NMSEQ SSDST IQ™SM AAT=W
+U8ZEE BHVEZ CAMDU IYMOE
+NPSTE HFNGS TTITH ™SWIA
+NTTN= PSC=N EIGIU LTIˇD
+EKEXA ICRKE ˇAJ4R
+#H130
+AUTSM ASAˇZ FRNLI IBNCP
+IICEG ¸OJNV VEESD ISKQT
+KETET JIISH 2GXIN SEUMT
+N™?HY RS3ER 56SAI EWRIT
+SEEˇ™ NHZRS DVINH
+#H131
+G?MUR CEˇRG DAADH SIJET
+TETVZ STAO7 ENST8 NATAA
+LDKˇE EYIBX ESSR9 QTFUS
+TIAC™ WNODH RAIEZ SKTRX
+ANMN0 BEEIT IIPAM
+#H132
+I™SOY NM™ST TUTXA 5NIPK
+EREDS NT1/N HAENT UHL¸J
+TEEZD T¸RIY TEHDI DAFGD
+EK1VN RAIQN SMMTA NEEHS
+NˇBIG IWN9E UINNC
+#H133
+EAALT ANMDA ENUAE EIˇUE
+IRYQO JCPNˇ BNASE ZTKHS
+SBXMT FWI5N TCQ™O ˇSRDW
+NGS7D JITRN E3UIE A0VID
+TETTE HITA0 NRNIH
+#H134
+RAAYA MJDNO EBNKC NLQMT
+ETITS NKEXH TESUS WXGPP
+MIˇRF TˇHNE 7FAˇZ AUH8P
+HA0DE N4SWA ESIQI IIE=E
+SI™IR UTDVT IAEAT
+#H135
+6X¸MN ATHHT BIIBI EVREA
+OSSCR SFRNT JHNRE LDVTA
+WEZPI HKSHA HX8Zˇ ETTNE
+TNEAI SUIGM TKAˇN X™ETH
+YR4TN NTESE 0?FSQ
+#H136
+RRQ4I TECXJ EWJM™ TUDMS
+FJˇRE I8CAD IAANE E1STT
+ESRIA NSIEQ EIETS DSTAT
+ILGEK SAI6B CNAAN DSZAM
+OFPBH ?GTYT RDAPV
+#H137
+CPEEY ETAEU FHDUN PTIGT
+?HSK™ EHQN2 UDINH UNSJI
+ZNEWA A1QTI MPDAE NTNEY
+BSIUS LTEXT ETISZ S4VNT
+AˇO7K IRMPA WIWAS
+#H138
+SMYˇI EUQLR SSPJA EUINT
+EAVHO BNIIR YETEA EENIC
+™NTAD PZNS9 NIDOI /GSTE
+ˇ0EIB XMEVT MSUNF AXSFH
+WK5VM AINTU RMAI3
+#H139
+AAAIZ NNGVE HXERU K™ICN
+ˇHNIA TEIUI TWDEC SFAAG
+NFT0E UT3ST MAEIJ AHHSZ
+ELDBN IDIDX THUNC Q4MSO
+N™TYG E7IX5 EESPK
+#H140
+ISWSI INHAH ME6TO BHXAT
+VEANT TEM/D TMNRT AENSE
+HXJST ˇIWNT YFHO2 N™4IJ
+SOLIE QETTN KGEAR H0NYA
+ZEECM NFDIZ USUBP
+#H141
+EDOHG R?FIN RVDAI SE9TH
+QESES D2ISV NEMAY 7ITOJ
+ILNSN SAZUU NAMEE ™DKTE
+CT=DI DSPAS OFEAQ TIETX
+NFIT™ TRSBS ˇPVWT
+#H142
+XRINE IN2UQ OAEˇP WEEAE
+QGIN? SHSAK CAURL IUEYA
+THTHN IIAI2 NHGTV XIYIS
+E/EJI VTWNA E5SMM DWUTA
+FZTMZ CP™HI ENBSS
+#H143
+EISTI PMO6H NTAAT GEXNS
+MTEEB F?J=N SQLNI NQˇE¸
+GNDES ™R1AI KNUAE SUNWH
+YAHIC NTGZI SA™IM XDSFI
+TTLVU EˇD7E TIHUE
+#H144
+INRN0 IKIAR XTˇSH TZNSI
+EWA1S N¸DEE ARTIG YH8TM
+AIIEQ NMANE CMENI F4APH
+MTSEC RKMIA SEOVI FESFE
+TAI1D RL™JP GUSGB
+#H145
+EXZLJ SNNˇL FˇMTI MDL9H
+4SLUR 7IIHS HRSOI K™E7A
+CENTI EISNE LNUME IPABE
+ATGFS S=EAI QENUR WNUEP
+CQISQ TTAIA TYSRV
+#H146
+EENTY LTIZF EP6KR IACUT
+HDWDE J=A3G QNDEC ESFBN
+HXA3A NIIHH EOVDQ MTBN5
+SI™EM UˇNNA NITI™ FSMIG
+CNPSI ˇENIA PEINR
+#H147
+TPERF STWER OFA3Q SODRI
+TIPUI AV?ST EHIIF NQRNH
+SMEEH ANEYE JNETA ATM5S
+SEAˇA ITBI9 NGXI™ SLCGU
+M1ˇKH CQZET ISNRS
+#H148
+EBYEC IPMXR AIK8E EFEVI
+2ASNE HU5ˇE AGIHH WTSSY
+SHQTE M3XSO ZKNUF ENHSW
+NLRDE NAIIA PTMIA IJTTˇ
+T8BNI N™UUS ˇJIAT
+#H149
+HTMNN N8SDS SKZI¸ SDE3X
+NEEIM AAUKI LTˇTM JOIEH
+DENIS OGIEA YSSˇA HMI™E
+IQBFA TEVLE 5S9SQ HISOD
+JPCRL T3ITW ATUAE
+#H150
+NUH9H M™TQV LBPLI HˇSNS
+JIEZO AEMAF TE0MT ¸BEXT
+PIYNR TIEEN DES6N QHSˇI
+ATHCS ETSDA Z5AII WT7HE
+M™SAN NISGK UNRTE
+#H151
+SGIHU WRFEM ˇJDWN NA?UB
+=1E9T ATIAX DDAZN ES™TJ
+B™IMV RENSN QIIEO LGNAV
+KAYTE NSIPE IEUEA KGAAH
+CTWTD 1ITTT DDNEN
+#H152
+ZVMNS SYI2M FTOA? I2NNY
+IEHNE EAUGT PUEAN EMBRT
+PS™RV /SRES OTZEI UVWˇR
+R5QJA FIKXS SLYTV OTIEH
+TNCAA ETUNE SDITT
+#H153
+MASDP NTRIT 0HAˇA EIFL9
+TSENG ZDNDN 0UULS AIRUN
+TVNQB IYDEG LH0WE EITNV
+KUNFS GIN™X SEWTS CGTRE
+TSEJE T8NTO UEUIN
+#H154
+NTQI/ SNTˇI SISWN RUEQD
+ESEEY OXNI™ JKNZE MBXEI
+HE=TA XNEIL 5NHUW IEMDW
+CFTLN SRNPH IDE4G CHNNH
+TNXBV ST7IA ™AUˇT
+#H155
+MSBLV =HEFR SIEI2 ESSKE
+IGNZU IEDˇH HIIOS SNZEI
+IHERA KAEUJ I™OSE NN=RN
+H4GJS IIQBC CWDAT HXAAT
+JEINY ICNA2 TUPGI
+#H156
+ACPAQ TSIHT C4KLN STNSE
+™RTVE DMFKA AET2G ERQU™
+YBIED ZWXAN 6IAEM MHURI
+™PVET NUSIT TXDIN S4INR
+JTˇAQ OSEEA A/TVE
+#H157
+TATSN RUITN THTZM EETIL
+2AEZE QOISN SDMRP N3KDN
+JTUEC CGNAT LI™XV MTEIW
+S=NNA TENBS GQYR2 LSELH
+ASEOH FERTQ ˇKI/H
+#H158
+QSVRE ™IIM8 JSSCN UHSWH
+HTAYS EISFM INZGI IIETI
+EMEXU TBCEK KEIKN OANDE
+UFCSU DMLSI ACNPI EIEDˇ
+UA1IA VT0SN 0LA=S
+#H159
+ICF7H MREEZ IAˇAS NIN7Q
+R6EIU J¸TIW SIASI SET™J
+ETSNT NN8IA ™DBED LTR¸T
+XTESI NVY=D KDSNE XSMEP
+SGI¸H ERAAU NNOUX
+#H160
+THDTI DJISA AHAZU NUDEK
+DNSEA I5ˇOE METIF ATISE
+OSPME NNJX/ NGI™E DVF8P
+™SVLE 6ISSR 2ZCBW AIQHT
+ATSTN REYCI TZCEU
+#H161
+/JEKN LYTTX QCRMT IETDN
+ISDP? TIAMN ™OAMD ZSˇE?
+NEFCU AIEUH SIECR 5SENG
+KXRAA IZPTI TARWQ XQDˇ5
+ANINI DEEBN ATEAV
+#H162
+ZTADˇ AJKDE RUFE™ FNSTZ
+ˇ1TNT TEEWT P?GNE ZKETH
+HIUNT ALJNM DSNON EULIN
+VE1XE B5RNC SITUR TQ=YI
+SRTNM NOTEA SIAYN
+#H163
+INPMR YFAS™ HIERW QKTWE
+HETES ˇAAUS T™THH VDAHL
+E9SEM IENNA I/BET OS7EE
+AAK™W ¸LU9M ATINR TGWTA
+I=NID JZSNC NIXGI
+#H164
+ZVEIU JINAI T8TVE LHAUN
+UNNED TQMZ0 O7HIU LSMSE
+NSEEW AEAIH ™ˇHSI FSRRA
+CIPSˇ INGYE VT¸IE DD7KO
+GTTTX 9SEAT BSADN
+#H165
+WNHAS W3PTA TXLUC ETNDE
+ITˇF8 NS5EE ITNKN AIEMA
+MQTZT DESˇI TXRAD VJ2YI
+RJUAY BI™BN EOEMA ELTET
+SFSM2 AMSND TZGRO
+#H166
+ˇNHTA 3IGES ASN3B JTRAO
+DDTNE E™XSO J4SAE HNNIS
+YQIOD TUGLˇ N1NMC NIQE/
+SKVIR TEDHU EKFBP UEZER
+VTAVT EIRIS AWNTT
+#H167
+OUELO RNESˇ EˇTE6 PRSGH
+MN6CT ESBAE RSFAI TTICI
+TJISF YDMVS XK/NE ITHSA
+ZIIQB WLYS™ HTENM MJSNN
+SY6TE U7EMD VNSVT
+#H168
+XN=VS RESES ESDHI NW8A™
+DLE1I HIEGF RAESU ITDSI
+EYSQ? AMˇID IPNNS JRMNT
+FTIEG HOSIA ZMWOT I™AT™
+T?UˇK CBEWS KSTEN
+#H169
+NILTK BISZD ?2ˇPQ EAEHT
+AIYUE ARURG IFKIM ˇESD™
+IASDE SSMET LIETA XNBNO
+NSSHC NSUR9 VA8UE IZAAZ
+IN0EJ DDTWE KTZTT
+#H170
+QIAFO XLTHH 1MNTA SEEN2
+K6NUA TITET ETNAA IGMBˇ
+JTSKT SEVIS AL6XS MTJE™
+T™TQU CYSZE A™NAM FRTYE
+EPEU6 DNWHU DISRS
+#H171
+8/JXI NE6TC ZUTAˇ SETDT
+DOMNK ˇˇTN2 GJFTE PTNEH
+AˇNAI MNLIˇ SLAEA HJBVA
+YAEF™ EHNDR A1RGW MIUNT
+IUIRS NTAEE QTAEI
+#H172
+ODDTW H™YNF =SˇEG UZLA1
+DTEVT MEDS= JAEES SNTET
+PUVAT TAEEH SXC1T KINMB
+VUTMI N2D™T TASTQ AEYLG
+ETNˇT USRAK NOAIA
+#H173
+JDNU? HZNIV MNKOE C™BES
+ZNFUZ USNIE SDCT7 NIIYQ
+RT=EO TSIDE TEITS TITAG
+NNMNU ASEML AXˇIH NMKVV
+EWEE0 IASNP ZM0TD
+#H174
+HI/KT EˇRIA SEATC TWXTA
+ANPNE SNIEI GSWAE THNSH
+™ASLI TEMDY AF0¸E TAZHE
+ZRBI5 XEDHR EUUMV CQHON
+STTTJ HWPO0 A/TSA
+#H175
+ENOMQ ELTTU Hˇ=EI T=ETR
+YOUSA NE8JI TPTRT GNDBX
+EEKET AIMRV S/G™X NIINW
+AVSJH NF3MP NTDNI IASNE
+EOUKZ AYINV CARUN
+#H176
+ASAIY VTTI9 OHILE ZTSEE
+Nˇ8RD WXESM ™TM™I VM1SA
+UYNER NNGTA EL9HN JANPS
+MUTNM GAUSB EFTCT T?KKL
+HSSWT HADTE ETQIE
+#H177
+SANOZ DC™Rˇ HTIIE ESIXE
+HJˇAN N¸FYH CNITR XNI5L
+MANEI IDQKY 5NUES NAPNB
+MWI2E EATEW XGTIY SB3VS
+MNRU3 EICTE RTIHA
+#H178
+RIFS= BU™IM ATRHT IHTDS
+NSAIR AXVQT EEM90 BMEL2
+SPˇCM NOEZU SGEEA KZOAU
+TNL9T ETAAJ OEYZS TAAUI
+EUTGW TTNEI LUAAA
+#H179
+3RCRZ DUEEA NBZII ˇAPK6
+S3EET NE/™N UCHI/ EEILB
+ARLNT IQ™ST SCSBT VNNIN
+IDSTA IDNSE XIWUU OBIJU
+ISAWM SGEFY JLDED
+#H180
+HNSIM T=¸EH NM™MA THVˇF
+ETCHS GLAJT GENNE EE=IX
+GABS0 TSˇON HSSTI ANEID
+NTQUI WTWMR ETRS2 BZTON
+KAIPC WYSTD E/EDR
+#H181
+XNISU TRTFI SPˇHE IAYAV
+K9MLA NMCED GEZF™ EˇMYV
+UUIEN NB/HT NTSIE OA4NI
+IEYEA QWNUX IIJRA ES2ST
+TXTAN SSMDR T0HEK
+#H182
+EFXN0 8NERB TPWIS ATOAE
+NCEIM UZHTA UMTAE CVRSQ
+WNTAG FSRNˇ TIEAK ™ALHA
+GMSEG TTHXS T?HTY TNMIE
+JNE3D ?TEWˇ IUSRZ
+#H183
+9EXEA D/TEM HTTST ™SBY7
+PETLU VIEEM HNRIˇ NAGJT
+ONA¸3 7UMAS FSSNV CZETK
+ENQID SNINI GMNIW ESEZT
+YMKHS UIATT WˇDN™
+#H184
+TZE¸T TSTAY IIESP NOEDL
+JRE9T ANQUM IETSˇ AUJRO
+SCHSY N™ISA 5TPDE BDEDE
+FGCAU ™VTAM 5ETKX 5STWD
+IININ EDNNY CNH=S
+#H185
+MVM9H T™JII TG98T RQMWT
+LIIAU SRETN TLT9ˇ UZNEF
+ATMSH 9HSRN ADAMT NIEQK
+SSS™O ICEU¸ PYBRE ENAAN
+ESTAT UUXSM EEAUE
+#H186
+IND¸9 RIˇCB EˇTPD IEJHH
+TAFVN E4ESA SXSAO S1THT
+TF4RY VTGˇN JE=SI NIASK
+MUAWS IQIG™ HSEWE URSEI
+AISLH MTADZ YEINE
+#H187
+IATGS AXJIM DOOED ISTRT
+SQK4G PYACR 5OTTA NRIRT
+VYBEE ZXTSG DLUAE DTENM
+MPN™8 4ˇWAY SATTI NINME
+H™EET 7NASF EE™HN
+#H188
+2YSEN ASXIA N™EE¸ GIAPA
+TE8SH EESOT BNTNR MTVST
+LAWHU EECYT ZATQH TJIIW
+3URKT I?FOU OUENA INEˇ™
+RHHM2 ADAMN TMURT
+#H189
+QIZII WJR2P TCURS BAˇSˇ
+8KSHR ˇOWSI HYTE™ FSXMU
+TXVEI TMETD JSRNE E6ERL
+SˇIUT ES5RN IKSN™ TETTN
+GENNF NSSMC 8SEAI
+#H190
+ATACD BIZNK IE™YB XNIJ?
+MAASS AIWEA ™VHˇE ARSHE
+SDTLK ENIEH MANEH EHTIE
+UGSSR LNTQ9 OFIRI IA62W
+EHIA9 NUUIT TPQF¸
+#H191
+FRLHI ˇMTTR AMS7D TTQBS
+FS7NM 2NEPT ˇAX6N SHNIS
+MAEPW TMYIZ CSKTN ORKIS
+JNETE URIPR QGEYˇ WEEEE
+NA™SH A3VII EIZIA
+#H192
+VENNY EWCIB 7HUII TISWN
+MHOWD ZIIHN TNITS FEUAB
+ASEDE AMKMT ISQSE ˇTXAH
+LARRˇ TDPOT NNNMA B™J0E
+SXAEE TY5H7 EGPA1
+#H193
+MTEEY N0EBE IRSDN AEIE2
+AUSCA JUQCN HODEE RTKLI
+SENSE MTM8H FNS™H NIATT
+NZ5HO VWBRA 0IHIA ITIAK
+SGCSS TTRˇO PXTPC
+#H194
+OIZRB SNIAW PSCAI AHENI
+SIXDI 0AEHM FDVRT HQNEN
+EANIˇ AHHED UAVTL YGSEE
+UKITU RP?PS AGE™E IJA2H
+?TAE3 IKTNZ WIZBT
+#H195
+TJXRI SUDNA NWE=F SRHBD
+0IBMI ™YAAW ENQXH L/ATS
+HZTSE QUCIG FTIKT SNEET
+MENET IUˇEN ˇST9D P5HIS
+SZSWA HRNVE IECON
+#H196
+ABEIS HTSKX OLB3O SMSHˇ
+ITASA NNIBF IGYUT UMINT
+N™T=D VCZNI TEAAE JNEAH
+RHJT1 HSAES EHIIS ™APEF
+QEXR? BEOUI 2WTUE
+#H197
+CMNIˇ ATBSS UDZSZ 8RKAC
+JENAM EDIDE ASNEC 0TZUL
+TH0G™ YVTFA EEENN TESO8
+TSTML USRAI 5KITZ TWPID
+EEPHD QTTAH NXTAN
+#H198
+GTˇEN RCETR IINMT WOAWD
+7SFNA 0SK1T EIAIP EH9TC
+AEMIN EDNNB ˇYVJO SPIIA
+RBLEE EHHTX TESUH =AS™ˇ
+ASZQH AMNKI IRTSM
+#H199
+UVIV2 EE?IY FNRKT STDER
+SAˇJT ED/DK EHDIE BTZIL
+DE0IS NNPMI ETANT ANP8D
+ARPUS ONSM™ ZGCME GITFS
+MWNII QˇTES AAAXF
+#H200
+YNRXX UIEIG TUTSQ E0EBˇ
+AVCRF A?NTT PNSOH FWDD™
+?CMMS IANEW UG/EE IJDSA
+TIDOS NITIT TSKSM EFSSR
+Z¸EDT L6MEA VASET
+#H201
+I?GAN ZKBRI ENIUE ™GHST
+VˇQIR DXTED YXLTI 9VNEF
+SAEME ADIDW YAAT6 OIVKT
+ANSIE 9IEˇS WDIDP MNHAJ
+YNUAR EETSN TCNS2
+#H202
+EJTND PNARU BEZTN Y™ECW
+X2DTT NIREC FENˇE SHN5L
+SENIU RHE/M ATQTP NAIUX
+NAMSC DNIIQ 5UDEK ˇA0IC
+UEIVG NFINT OTAQT
+#H203
+SJUQ= TIVIV NAERE AA¸NE
+A2ˇSY HES8M CU™AR DIEHD
+LHATQ IEENI AIUII WEXKR
+EPABJ MIAIW SZGEN FIUFA
+WBIS3 9OUNN TAFII
+#H204
+ETNOY AEMQS NF9NN ICTSM
+ISPT™ ZEIKL N1ASE TEMST
+IHDTL BIGUM WFAW/ IEESE
+IXJˇT RA8SN TINHL VLE1H
+AMDTD ™WE™V DNRNN
+#H205
+5TTBN VLMCE G0MSN MSZED
+AEUOE IISGS PSREF URHNA
+NNUOR 8TXTA ¸TEWE SILGE
+S3UEA Z™RKH 3SENP JTITN
+RAIII ITZMZ ˇYIQS
+#H206
+AEBIN GSXHC NˇLAO STROT
+DMIBP SDPV7 ENNTI WEAT™
+NGTTA SANE/ YETRQ IENIA
+NRI/I ?EPDR UIZEI PFUˇ4
+DYAEF KEQAH MDTJN
+#H207
+SAHUW ™QEIE AITSD 4AIˇE
+GMWSE YTMBI UN5EZ SRFAK
+DHLER TNISS RTSAI SZVTI
+A0TOI =XAF? OECYD ODMSE
+JAIRE EDP™S ZCISI
+#H208
+TIIKU SHNDT E8NNE E7EDT
+6NPER SSU8S PSMPZ ARTOE
+SSUEU SKTNA LTGTL ISEMB
+IUTDQ ˇTXPU OVEND NYTT0
+TAOJN XVEHF ™IWAC
+#H209
+IINL™ HNNKM SEMHD ZHP4F
+WDEIS AIAIP TQO8V UX?TT
+IRDT= CSDEN ASMIE AT™ˇT
+ˇNV™P DSASE EAEMA NACUS
+ITAWI EYEVB I1EGJ
+#H210
+ˇZ™TT WSJ1T RSLSS NOETA
+CIEYS HSSIM NSA5U TEVKS
+TIHQT NEHIZ ETDUE ENI9T
+RMAˇJ UEYAE ISMGI EXPZN
+AHBCB /H?IL NSFHV
+#H211
+MESRD TS6JK TTGPL CTIUI
+ENSSN SN0DR SYMON J/WRE
+TEAIA MTQTN OVHIT SDNHE
+IWFRZ TA8SH IENEE ONBEN
+ˇKMWN T9IXN ™QMCE
+#H212
+TBNI2 IHLNN QNPNU IIIKN
+IM™TR QDIEE YCECO TA3HU
+NˇSSD IINVA Iˇ5IE DXTCE
+AJEFI ZU5E2 WXMSS AAZˇR
+XQNET GDMHE AENAB
+#H213
+TNTHS DUZET IN2TJ SNH3S
+AEQXT FEIRR NYMII RGGOE
+J™IIS WITN9 DEPTH LNSˇE
+E4ABT JMENV NNUVA OZCES
+NKNTK AIRE0 UPMSR
+#H214
+HTYNB OQHET AUULT E™T7I
+ISNI= JDTAU ENIPW MSFEK
+ˇEAGU PAUUL ZKIHT ™YO3T
+ELVIT XCAON I?MAE TANNA
+FAIER 3AAEˇ MSUAE
+#H215
+™ENPT TTQME GRUSL ANR3T
+KWESO IGEAC NNEAQ ˇJXHI
+9UTWA STNI5 ESVNW IHEEM
+JNDRZ ˇSENA FBRIE HSRIY
+MWIHI ZSNAP 37TTO
+#H216
+FLDSE NJCTM OHTEI CSSSE
+IHEIU B?MAW FNIYI AWEN2
+SAISG PHRVT TBSTT TT™Zˇ
+DUSES WRR0D GA3ET ETEME
+IKQD¸ DDANS NAX8P
+#H217
+SRIEW UEFEP YWERR ˇTTTS
+IˇZ7E BARTM STINC HINHS
+TTESC AOGSG IAIAU NKRBH
+TETRN QA™MX D8EFS ENS2D
+EˇKVS XJLS0 R2ITS
+#H218
+IDEIT NILHI QRESH EA¸5J
+N2VNR 7EYAQ ICEPI T5IHC
+ZMAFX SDPKX AUNS™ UTTMT
+ENIGA SIMBE A5CES WXHˇM
+NEDAA OIJTT NNXOE
+#H219
+DSE8S ID™ET ZVNTP AUSLZ
+WMTUT NQ™NE ERCUN IINIH
+TEEBW A9TSY CMUTA S¸SDI
+E™R5K SPISI FEEEK NIJI=
+AIDˇS A6OMS SCUXG
+#H220
+7INIL AUEN¸ E8ˇCI SDSFR
+NEIUE NTNQE SIAJV RKUIA
+OKYNS ER3QR S4UVW EISBS
+NJHXA TBFTE SDG¸E APHMI
+MES1T I™TRI MNTTZ
+#H221
+ARAEW NQTSI N9UZI AQN™N
+KˇP3U N™STˇ XDRTV TUA™T
+TUNKK =D6JM ELIRT OETME
+MNSAS WIAIO TAE8N EBACT
+YIIFG EEENE AUUHX
+#H222
+DAUMB MZ/NS VRINA PTAFI
+XSˇN1 RZLTQ EAHEE DWESK
+AWAGS HSSMZ TYTAY RT?ZN
+JC4DO UNTET HISII I™INI
+2EE™T EELAE KUTAˇ
+#H223
+LGIEZ ANIMR EVNNS NUD/Y
+A=LSE IBETA I4EDN PMˇNL
+CAISE GDUEJ OITEN ESLZE
+YXHST ˇNINA KWT0T HDSTI
+MIUCI RX4LF SHMQ™
+#H224
+TXJAN IVSˇA 1NDSD DRMIA
+DESRW TSID1 ES2ET BIREE
+MNSTP WEKNG TASNS 7LTZI
+INSRH OPIS0 FTZXT UCEEA
+AFYEG DDICQ UEKI™
+#H225
+DH™IK 7ESDH AEMPU T™IEB
+ITYHT TTMEO XSTEM EADNV
+NSNHE ITSNC N6LNF WA?TX
+QEˇJU SAMSG TEMNI E3UOˇ
+KNS0K RTTIO NSZCF
+#H226
+ESPRC TUT™I KTAUS ™EˇGN
+ANDAI IZJ3D TILUE PVBQH
+8UHEI EASSS INRII TNEIY
+™?ESZ M5FTU WAIEV EUBSR
+EOTSA PXFP7 SNRCA
+#H227
+T™UHN ETELE G=VˇR ZP0FS
+RASPS SUTIU 8NAMT GAZQA
+AENNI W3VIT YU2Mˇ TETIH
+TRVDN ZSNUS KEJXI TCBZD
+INSOI EEDEI NMENF
+#H228
+ˇEAOA EAAEI IMKT8 NNPTB
+XVDYF IDCWU IEJNT OSART
+EEUOA KSN3™ UEFDI FNTEU
+AAZEN L?HQN NCFEN INMYU
+™NII8 UFIGT TTMH6
+#H229
+EELIH ¸AEON KWLTC I4UTE
+NARAZ TFXET RˇJ6Y AEVES
+™NIDA NDIMA SES5N TSPTH
+WMIHS REHTT OIIˇH TYABX
+GEN?O KDA™U ?ISQA
+#H230
+LWFSL DHZHK ARQNP SVIIE
+Oˇ™JN TSHPD =IEU= UAEDA
+EDSED /II0A CEEIˇ TIIIM
+VE¸SY SEAAE ATGTA XIRMT
+LDICA 9NBSH SASTP
+#H231
+HIIIG GR2E= MB?AD HJHID
+WNZTI XCSˇS NPA™I WNNEN
+TIYEE FEOMK EATRS TXHAN
+LIFAJ DT4/A ETENS EASWE
+IQRVO ZUA™H CTHAT
+#H232
+ESEKP NBSIE TEUXT AJTFI
+NMZZN SDANE HA/UA YERM™
+ˇQIIA IE=NS CD2OF OTENT
+IHWVL NEUI6 RTNNI CRAE/
+KGMNP TQTAP IYRWR
+#H233
+DNJNR IPEIA N=BD™ EEVS8
+GIAAA VNTRL IUEKM RDTSX
+ISCAI CYEA0 TQDWA MˇWHT
+3SETF DTZBS STBXE NTEOL
+ANTET RZIA= D¸HME
+#H234
+BII7D S1FSW E0ˇAE TVI¸F
+KLENA MHADH AGIHN EAXMC
+SNDNY TKAMN NIIHO EMIAA
+IUSIE K1ENE ™DPJA QETUB
+UGAV0 ITSZE TRMTI
+#H235
+EEYKS HNXT¸ GNMNF REESE
+MAZD/ ITSTH ATRI= NU¸TW
+UIIBN ATASI NEGLL TIEI2
+SMHJW AQDTH VC™T= OAJSA
+EMEQE ANT9S ˇDPHM
+#H236
+EW¸IA AIPS™ UISHA EITMR
+ˇNSIS RJIZE ASRTI HQEAK
+¸1IST 5LTVE HANEU IEFNO
+™BENN ¸AMRI GLUDS EIF5I
+MEVNT YS=U? XRQCA
+#H237
+DI=VN E3RTO UIATI SIAEE
+6MˇIR A0HZP EE™LT NEZNQ
+UIACT ETAYD AH8IE MFTTO
+XSMWA BSHDS GJESD UAˇNR
+¸KALT WSVSS IGOET
+#H238
+YOIKS ZFOR6 IED5N HEIII
+IUTEX EIADN ITNTR UNTST
+ANETS RUTSM EGCIV Jˇ™KW
+AE2EL HUSS9 BTXQA N?QAH
+VPEDN SCXEJ DN™NN
+#H239
+HABOH JSSPU ˇNMIQ ISRET
+A2K™S IEFIE FMHTE NNIAJ
+HIIGY 6STVI X94ID NNHTA
+S¸WRO EEHSN EU?NZ IKECL
+EBQXN TSTSM ESRWI
+#H240
+3NDEW ATAEO QUTPV BIHAN
+?EDNT EWNS8 DNE™G IDKMU
+EICSI VRˇTH NIRCH TE™SE
+¸HNIJ GEDYX IQTNS MSRN=
+LINFT RTZ7E ATˇAA
+#H241
+PNLˇI RUMA3 INGIN EMNSN
+EAAMD TKECM ZRC?T SNSJI
+0IVAO UGKˇA OTTZ™ IHIRN
+ATWWH IIAA? TSEEX MFEEY
+RRIIO /ESQV AEEBM
+#H242
+EKSCI ZB?TY RSTST XIEAE
+UOTUM HLITB ES¸3S HWSON
+AIDAN SNEJJ ILEIS TIU4V
+ˇHDT1 AFGRM REAAI WMS™P
+CIGIE 3NESN YQSRE
+#H243
+HOM™A EIZSB PENE™ OETIA
+TWEMA BWTEJ QNUNR KSIIA
+2ORTE ˇRSZE TANNT 5JZNX
+TV4PN I=UCF GTSLH ESDIU
+TRIUO NNUN2 ERSTY
+#H244
+UHXGI T™ATˇ AJ5GL T?1EI
+RXPTN NTHJS PIRSD SSNQN
+EZDAC NEWEH IIDAD IBZQE
+EVRNI RYTDA ˇEOTT SIKEN
+GNFMN INE7S EM1SL
+#H245
+GN21C YIMWS NATRU BDˇNG
+VTWAE TRUGP JK=FR LE™IA
+JAˇIH AASII ERS3E AMˇXA
+TANTU TMISE TE™TT EQMSN
+SIEEO APZTE 3UDˇA
+#H246
+NKIEN YPEPI GTTRT XDTNR
+ˇIED5 PS3EH ISMRE VTUJJ
+AHABA ATASI LVCWN MFMAU
+OEIBE DES™R YRTQ0 LSIIN
+OAESN 5HE9A OSAIZ
+#H247
+EINA3 TKDHZ ™FTMD QYXBT
+LSEBA ™IDSE LPNGN RESIP
+JSIMF A3AOH W3RSN MAID3
+WAVSS EATJE 7INFI FMIEA
+ITTCE EEDˇO UNVUT
+#H248
+™=HME TYYMA ?ITAD ?MPDT
+JQATE EHNH8 TMSDN EIEIS
+NACIE LˇERI SY3FS GVSNT
+PKRAV BATAT ENIGZ IXOGE
+UDTFF SFSCT NAUWE
+#H249
+EDSAE INR=™ IWRA5 EEEST
+CEGIJ C?AJH MSQHO LBP1Z
+ITUUE PTTSA INEE9 RHSHN
+WASNˇ OOAYS VQMUN TINHR
+IFIXE NTWIS TWKST
+#H250
+XT¸JD KSSAG 8SHIS ECOTS
+SHMTI MU™ZE ITTY2 VARET
+K™EHA HS3NI /ATAC BRMTE
+FATSN WNIXM ˇAYEN ETIQF
+MENTP EELUD NUL=D
+#H251
+TBGRL TTZYI KHR8ˇ VAUID
+SQA=R NATNH CIJRK RFNIA
+BISAE EˇUIA ES9TP ESEEH
+INOIE WSXND 3ATE™ MYE7E
+STU™I NISCA MˇGNZ
+#H252
+CNS2N EJSLS EUNFA IDSI1
+OIESL NRIIM TDI¸L RT7ME
+ETMMT ABSXW NˇHQP TABII
+T™EYS SEA9T LNSIH AU3HE
+QKMEG JTEMN SZGDV
+#H253
+TEWTF VSDLI ˇYIME KQAMS
+RYZSS SGET1 XARKI DMB9E
+SQPAW TE6UR MCSTE NTTES
+SIOED ™TMMH AN7TD IFSEA
+XWEAA NJLAI ST1TC
+#H254
+RQHSS PEVTA 3COL9 WMZUT
+TSSS8 AZERT 0AETN UTSGF
+™DTDS ISIFN BEKKJ ˇITEU
+MSTRY UETFJ ANEIA IAS/N
+HRETP ESIXM OUAEO
+#H255
+IALIX ASˇIV ETAF™ EXA6N
+NNCEF JTETU SABUT IIPSM
+SSGUR EVITA TYDES DANTR
+INRTˇ UMUˇA ™HSNH OETEU
+KEV11 ZIEUO Q7WN0
+#H256
+THUE™ SIEEA D/ROD BITNT
+IEVEˇ PNJST QFSLI UE/EM
+MSTAX SDTPN IEATC TMDSW
+NNHZE KNA?Q ATGB™ YS9YA
+INIA6 FISME RLCRZ
+#H257
+MUSEH TN6AE I7TDU HQMEH
+KISGU TWI8E ¸RBDN ASLIN
+?SETE ¸HNTI AE1UA NIJNK
+JNSSR AWVNN ETFEM J™XET
+ASZCT POIˇL MYMII
+#H258
+DUGAA RNUUP NˇHAE ™TCEM
+XEEIT DTIPE IAFTI LAVTˇ
+AUWIN EYOSS NJBR6 RSQRE
+WIAQS SA/=9 KAUIN ESJIH
+LDLII ™ZEP5 EAWNI
+#H259
+PISD6 VFINE L/E8G REALS
+RGIAR UIAXJ =AITE IHCEE
+IKSSB 0ISWN MCUNR AUAER
+ZOTVS XNAMD ¸DHQT TITAM
+EIEˇT OGTEA SZYN™
+#H260
+NWAC™ TZGVP /IA1T TIXIA
+TAVES SFSET ESNH1 JDBHS
+XNEOP IHKUR EIˇDU DQDTM
+ASEHF TIINQ E6MH2 QNSSE
+MTELS ASENW WˇYII
+#H261
+TNQ0S GNRSB HFY1E T=GUI
+SDRTG LJSEE ASBIA ZIDTP
+FEENK TNITT TBDER ™ˇOHM
+HAHSA 1SCEN 0ZTME ANTGA
+EPMTA RWDEV NAXTT
+#H262
+NLRCE GTEQT T5?BD SEWL7
+OTAPA M/NES ADGKU ETAAS
+ZTTAM ASDAA FTT™M VYIT2
+EHXEN MABEN JEKZˇ ICDIT
+¸HAEK MTSTA T™JMR
+#H263
+CDIVT IWYMW NTFZU BR™ET
+S1ENM TETRE /6AAN NHSLP
+STGDA EFHTJ QDIYI XYIIU
+EUGUE EIATA SENCZ ™HKIN
+ONESA NN4DA Aˇ™I8
+#H264
+BMTNE VTUQ8 LQCYI XCESU
+NMVEN ITA/A XGIAA EIFNA
+IRAEJ UPN4G TTAE™ ARESA
+SZT9I ODKET TWHˇE TIMNI
+HHAED N1RAY KROGA
+#H265
+JEKSS ESTIN MQTRH IYTIˇ
+5EB5I NYFE™ MEEAI IN/TM
+NWIIN 8SSRT ROE™ˇ AˇUCN
+BPOIX ˇNMIU HDGN4 TLRDN
+NTEAV SJZDC NEEYS
+#H266
+QTBAM RSNCE HMS™V KTASE
+A¸NCX TMHEA NISDU EA0LZ
+OEENP EETTP ISFSX TI/MR
+SIIY5 ETWIJ EXVSF 8IIGM
+NISU3 USMTN ˇUMBˇ
+#H267
+ˇEIAE OEAUW PFINN OETWN
+8G™CA MJHTM AJNIY RNJXT
+TEIˇB J7EDV NTIEN NZEAP
+THTLS INREQ VN1KS D5DSS
+ˇRDTS ITTHN ENRM3
+#H268
+LTHAO XSHS= DX1PN HLRDI
+GENET FNAQ™ IINB™ SVS8S
+WSYCZ TETMS NFIUS ™JUGT
+AAUTˇ CSRTT KEIEV UE8EH
+XEITS RRISE SIE3N
+#H269
+IIMHM I3GLM ZTHT5 KˇEAI
+XNUNH ™ITAT NEQNA BˇETN
+JNOMN ESADR NP8XS RIIHL
+HWˇZA EGECW AHTTD IFVN0
+NSAI¸ ETUEE ESAY0
+#H270
+™IRRU TVSNN NTSZL ¸AIGE
+MJDHI NOYQN BEBDN PSHAL
+TNEAD KSEUN Yˇ3WG ETIUE
+U1FDS ATSNI ISCW™ 1SXTU
+AEETO M5?IT ETIGE
+#H271
+UYA/F PNXMT SDORB SREVA
+SW™WT COQSK KTRML IRI4X
+STˇEJ SSNAT TICTD TESEH
+MS™ˇE U/MIZ ESSEN HTMAS
+0GSˇT S8TEH TKETE
+#H272
+A/YT2 5US™D RPQZU TN1NT
+GEXMN OFIAC GEEPO 0TDEI
+AZTTT DRSAB KTTNS EAMAA
+GATSE JDEER ANAAL SDWEU
+UIIET HQCˇN RV™IT
+#H273
+HPATE NMCRT TEOEQ UANTV
+AEVTE ML4AR NII7Z NINSD
+AˇESI IESRF HLEIE CMQ5I
+TA™KN DJNIN YUIMN W7O™X
+GHM9I SLSNB QEFON
+#H274
+NHNHU FHEIK XORIA A9AI0
+9EMAT ETEIM HEKAA WCDTD
+RHPAB QE¸GE JDUIN ISSTE
+SAITA HD?TG ELHTS AATAA
+HRN™¸ YVˇIE M1ZAI
+#H275
+ENEIK JPASS QUFNT KI8DS
+ET=AT IILMH YIESR S2ZDA
+TEXEI AIONN AIHBM N9RTB
+TSNEW QXCET KGVD™ AZYUN
+URTEE ANADI ˇ4XDX
+#H276
+OITEX W4DQL RJTEE AYZAS
+MCTEI TNNAM N9I™H EGTAI
+ˇGFYA HSJRN SUU6O EGPSN
+ES9TS GVYAB EDMKT INHNR
+ENˇTA IITSD QET6D
+#H277
+WBJNE DHMII KESIR BT1DN
+ELART SSAZF YEVSE IICNN
+LNTNA IVXEI IDSTˇ E1AMH
+QVSAN E?™OS STEUT ?VSYP
+HISFQ IGMI5 ¸DDEM
+#H278
+TWMK9 NIVT™ EEXRN CBRUK
+EQISD ˇMIQ5 AAJNA FAPTN
+STITY JTEMU OEEIP ˇE?SR
+AM?IO HNUTH QLETA NENDS
+IHSEN CSATG 6IFZA
+#H279
+ERIRS IITSL UUSIH X4KI0
+AAEQˇ GNRWY PISME N™IEE
+TMVYS DIˇET CNSTN SHˇEZ
+O5BIE A/A¸A TDLNO AUTDM
+M3AJS ALCPF TREEI
+#H280
+ALMQO TDOLI TEˇBS ENSAT
+CNT=I UWQ8S SIXDD TEIAF
+EAAM™ PSHYQ MTPVE EKMSE
+HZTTN JE4AB RSHIU SGEIG
+TNUNA =9OT™ ETADS
+#H281
+KAAAA HESYG NNTHY XSSUS
+UET9J ™SVIT TCROI SUIY2
+LTVLQ TDISF VR¸WI ITTPT
+AFU?I RSADR NEESE /EBUˇ
+ENWNE SERG/ AMEZT
+#H282
+ˇOHMA SIGNI EHSST ZTLWU
+4NMTN EMGOF NTU/O TSYWA
+RALSH IUIIB SEBUM KIIE=
+NOEHX NHI™A EI7IX CPENE
+DVHSS QEKJI CES0N
+#H283
+TINFQ RTHEU SEAIE FITML
+R8DLS SPGKE ITTSA EEASF
+SIEAY DS0TI NˇJDC PSMNA
+B™XED MAAIZ NTIZ2 AVZSP
+EEWNO R1BII RMHU2
+#H284
+NSˇ2U ESIDM HPJ=A LIMKI
+HSANI AGRSK ILNTZ TCXIE
+RY=IT EWNVE OINOE NHMLE
+XBQ™E SN0IH NILFI L¸ITR
+EAATE U8BRN RUNES
+#H285
+FARLI SES™6 ITNKQ CSTUY
+S6WEI ™TVII IED2N JSAGW
+MQNSX EPNIQ HNVSA SSCEO
+HE9ˇN ˇMIWU DTTRS IHAEH
+AZADM IM8TE ECTEB
+#H286
+ZU9Q9 EITET EGDSF AG6AM
+SˇSBO E9CAD REJDF TISSN
+EMDIA OTIIS NNN3Q QYLKN
+RTEˇH FARIP ITGTR VGENE
+HTNSW NXEIT ™NHNR
+#H287
+ANEEI ZQUHI HA7JA YNIUU
+UNIBT DT2MS FS5CA ATNNX
+EMRQJ SˇXEI EDUPT S8UHS
+IOXTW ELGNI ESAII KVAˇI
+T™EI1 EZSLH APNEV
+#H288
+IGUGM ETTNE 8PXAK HDRIE
+CTDAI ONNNS SIAWS AE?YP
+EIEEB ATWIV ˇA5IN MEIYZ
+SRHPI MMHEA TXNLH 8T™IA
+1ESRA AQJSJ VHOFT
+#H289
+LSLH5 DSBYD IP™RW TA™AX
+EGI1I 7DQUZ IUBTY ENBUT
+ESIJE ANTTN AEU1E TNINU
+E¸IGS MCIVN OIˇHN 1NSNI
+FAGAV EENDD MKAEI
+#H290
+IBLTR WESSN AHTEU XESAZ
+WN6IN RHSV/ IJTMI UJDEE
+™TTNI THUˇN AEUOE UTCAC
+TQAEI I?NˇS I2FˇS KSFTN
+AYEGV PEH¸J GDA5M
+#H291
+AˇZGY =™BNA MNDTA PPEAR
+MSLDF ET?TC UOI4Q ANSGE
+IENXI AETTA 8IIHR BTDWJ
+EUTEN UPPGN SSNJE KEUWN
+TVZEY UNI/T IHDAT
+#H292
+MP25E STITU TAEAB MVEM0
+IIAUI CKXAP OSYSG UT¸NI
+SMIQS NZLMD ONENB IE3EP
+TENSF NJWNˇ IHDZK GETES
+MHAR0 ISTU™ NINDE
+#H293
+JBUTˇ SNHWI IENHT EUIE/
+AINEI N2SLN RROTW EPZNL
+MRDAE DOCEK ˇDZN/ TSAS™
+MEUF8 GXSET TSJHY TTKII
+IZ™QN AAVTP 5ENHN
+#H294
+ITWEI E5HCK EVSPI EDIEO
+NEPNU TNˇAˇ WSIAA NBRFX
+HX1AA LNMUE EN=0Y HTDJU
+DNASS GHMMI ™IRZE IIIIQ
+OTAWE BNNSA GYUT3
+#H295
+IFIET WS™SS PRTXN 22SDN
+MLˇIE YSEOE EZAEI WSBMJ
+MU0MV IIQ5N CH¸ZO NNAKM
+ISUOA SSLIA ENHPR UTIAE
+RIEUE ITCGI 4SRTL
+#H296
+EEUIA WSMAK HNEDT E=CRV
+EGXNS RRAAS CSOUS YIEZM
+HLNQ2 TNVIA OT5EF ˇI™DE
+JSNˇN IHBQD TIZ0O TOFET
+IPSIM ARIEA 7IDAT
+#H297
+AWGEU RETNI PITWA JCTBA
+I¸ˇTY NIMDT UXSRN UTDNE
+H™NZN IPEDQ YVJSS ATENX
+HFDFE HAEEN AT5AO MISNK
+E?T6V IZTEL AP24U
+#H298
+SFEMI WOINA MUJAˇ GS20T
+AIXEˇ TQMPH CEMIA AMSII
+2NAEI VISEC KAN7T IAI8Y
+ASRUE LZGRE OVBEM ™TKUI
+KNHRD IXTEE NNLDS
+#H299
+DI9L? TONEH HTAI5 IEQSN
+VEEJM ZLEEI ITARS WCFS2
+NQZHE EXGPC GARUT DYTTS
+TAFHI NBIAU IˇCUA NSADS
+™KEN2 INEC™ THNMA
+#H300
+NIATU IIZDH KAMSN 2UUEX
+M™QOO DAVKF //QNH EITHP
+IXCIA KJTNS FRETE EWEGI
+IBISF TETNN AW?NN UYDEA
+LRLTD NNEAˇ IYS2E
+ų%
\ No newline at end of file diff --git a/tutorials/sndkit/morse/charlist.h b/tutorials/sndkit/morse/charlist.h new file mode 100644 index 0000000..053aaae --- /dev/null +++ b/tutorials/sndkit/morse/charlist.h @@ -0,0 +1,96 @@ +#ifndef CHARLIST_H +#define CHARLIST_H + +#define INT_LETTERS 1 + +static const char Chars[] = +#ifdef INT_LETTERS + "abcdefghijklmnopqrstuvwxyz0123456789?.,:åäöü£)/="; +#else + "abcdefghijklmnopqrstuvwxyz0123456789?.,:)/="; +#endif + +static const char *Codes[] = + { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", + "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", + ".--.", "--.-", ".-.", "...", "-", "..-", "...-", + ".--", "-..-", "-.--", "--..", /* A..Z */ + + "-----", ".----", "..---", "...--", "....-", + ".....", "-....", "--...", "---..", "----.", /* 0..9 */ + + "..--..", ".-.-.-", "--..--", "---...", /* ?|.,: */ + +#ifdef INT_LETTERS + ".--.-", ".-.-", "---.", "..--", /* International letters */ +#endif + "........", /* Error */ + "-.--.-", /* () */ + "-..-.", /* / */ + "-...-" /* = */ +}; + +static int +parse_charlist (char *ch) +{ + int prev = 0, i, j; + + if (strcmp (ch, "-1") == 0) + return parse_charlist ("aeost"); + if (strcmp (ch, "-2") == 0) + return parse_charlist ("hilnr"); + if (strcmp (ch, "-3") == 0) + return parse_charlist ("cfgu"); + if (strcmp (ch, "-4") == 0) + return parse_charlist ("dkmp"); + if (strcmp (ch, "-5") == 0) + return parse_charlist ("bqvy"); + if (strcmp (ch, "-6") == 0) + return parse_charlist ("jvxz"); +#ifdef INT_LETTERS + if (strcmp (ch, "-7") == 0) + return parse_charlist ("äöå"); +#endif + if (strcmp (ch, "-8") == 0) + return parse_charlist ("50146"); + if (strcmp (ch, "-9") == 0) + return parse_charlist ("27389"); + if (strcmp (ch, "-10") == 0) + return parse_charlist ("/=?"); + if (strcmp (ch, "-11") == 0) + return parse_charlist (").,-"); +#ifdef INT_LETTERS + if (strcmp (ch, "-a") == 0) /* Finnish CWH module */ + return parse_charlist ("a-zåäö0-9/=?"); + if (strcmp (ch, "-d") == 0) /* Some very difficult characters */ + return parse_charlist ("1j/l4bh569ö"); +#endif + + for (i = 0; i < strlen (ch); i++) + if (ch[i] == '-') + { + prev = -prev; + } + else + { + if (prev > 0) + { + for (j = prev; j <= ch[i]; j++) + { + randomlist[nrandom++] = j; + randomlist[nrandom] = 0; + } + } + else + { + randomlist[nrandom++] = ch[i]; + randomlist[nrandom] = 0; + } + + prev = -((unsigned char) ch[i] + 1); + } + + return 0; +} + +#endif diff --git a/tutorials/sndkit/morse/loadcw.c b/tutorials/sndkit/morse/loadcw.c new file mode 100644 index 0000000..d628a44 --- /dev/null +++ b/tutorials/sndkit/morse/loadcw.c @@ -0,0 +1,163 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#define TESTFILE "Vvcw" + +static int ngroups = 0; + +static void +printchar (unsigned char c) +{ + switch (c) + { + case ' ': + ngroups++; + if (ngroups && !(ngroups % 6)) + printf (" \n"); + else + printf (" "); + break; + + case 0x99: + printf ("ö"); + break; + case 0x8e: + printf ("ä"); + break; + case 0x8f: + printf ("å"); + break; + default: + if (c <= 'Z' && c >= 'A') + c = c + 32; + printf ("%c", c); + } +} + +static int +showtest (char *tname) +{ + FILE *f; + unsigned char line[1024], *p; + int on = 0; + + if ((f = fopen (TESTFILE, "r")) == NULL) + { + perror (TESTFILE); + return -1; + } + + while (fgets (line, sizeof (line), f)) + { + p = &line[strlen (line) - 1]; + while (p > line) + { + if (*p == '\n' || *p == '\r') + *p = 0; + p--; + } + + if (*line == '#') + { + if (on) + { + fclose (f); + printf ("\n"); + return 0; + } + + if (strcmp (line + 1, tname) == 0) + on = 1; + } + else if (on) + { + p = line; + + while (*p) + { + switch (*p) + { + default: + printchar (*p); + } + p++; + } + } + + } + fclose (f); + + return 1; +} + +static char * +randomtest (void) +{ + FILE *f; + unsigned char line[1024], *p; + static char name[10] = "????"; + int n = 0, x; + char *tests[1000]; + + if ((f = fopen (TESTFILE, "r")) == NULL) + { + perror (TESTFILE); + return NULL; + } + + while (fgets (line, sizeof (line), f)) + { + if (strlen (line) < 1) + continue; + p = &line[strlen (line) - 1]; + while (p > line) + { + if (*p == '\n' || *p == '\r') + *p = 0; + p--; + } + if (strlen (line) < 1) + continue; + + if (*line == '#') + { + char *tmp; + tmp = malloc (strlen (line + 1) + 1); + strcpy (tmp, line + 1); + + if (n >= 1000) + { + fprintf (stderr, "Too many test texts\n"); + exit (-1); + } + + tests[n++] = tmp; + } + } + fclose (f); + + srandom (time (0)); + + x = random () % n; /* Select one of the tests randomly */ + strcpy (name, tests[x]); + + return name; +} + +int +main (int argc, char *argv[]) +{ + char *thistest; + + if (argc > 1) + exit (showtest (argv[1])); + + thistest = randomtest (); + if (thistest == NULL) + exit (-1); + fprintf (stderr, "Selected test text is '%s'\n", thistest); + fflush (stderr); + exit (showtest (thistest)); +} diff --git a/tutorials/sndkit/morse/morse.c b/tutorials/sndkit/morse/morse.c new file mode 100644 index 0000000..6077873 --- /dev/null +++ b/tutorials/sndkit/morse/morse.c @@ -0,0 +1,316 @@ +/* + * Purpose: Simple audio programming example that plays morse code. + * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL. + * + * Description: + * This program reads stdin and plays the input to an audio device using morse + * code. The stdin input is supposed to be originated from a file. This + * program is not capable to play live keyboard input. + * + * This is a great OSS programming example because it shows how simple + * audio programming can be with OSS. + * + * You can use this program as a template. Just replace the + * while loop of the main routine by your own code. + * + * The {!nlink morse2.c} and {!nlink morse3.c} programs are more complex + * versions of the same program. They demonstrate how the {!nlink select} + * system call can be used for serving the audio device in parallel + * while handling terminal input. + * + * This program was tuned to be used when practising for the + * finnish morse code test for radio amateurs. It supports the + * scandinavian version of the morse code alphabet used in this test. + */ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/soundcard.h> +#include <math.h> +#include <signal.h> +#include <sys/time.h> +#include <sys/types.h> + +#define BUFSZ (16*1024) +#define SRATE 48000 +#define ATTACK 100 +#define CHARDELAY 3 + +int charspeed = 25; + +int dotsize, charsize; +int audiofd = -1; + +char randomlist[256]; +int nrandom; + +static int ncodes; + +double a, step; + +/* + * The genpulse() routine converts generates a single dot, dash or + * a pause between the symbols. this is done by generating sine wave + * (using cos()). It's pretty slow but works for us. + */ +#include "charlist.h" + +static int +genpulse (short *buf, int w, int state) +{ + int i, l; + a = 0.0; + + l = w * dotsize; + + for (i = 0; i < ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + tmp *= (double) (i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = ATTACK; i < l - ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = l - ATTACK; i < l; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + tmp *= (double) (l - i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + return l; +} + +/* + * The genmorse() routine converts an ASCII character to the + * equivivalent audio morse code signal. + */ +static int +genmorse (short *buf, char c) +{ + int l = 0, i; + const char *s; + + //printf("%c", c); + //fflush(stdout); + + if (c == ' ') + return genpulse (buf, 4, 0); + + for (i = 0; i < ncodes; i++) + if (Chars[i] == c) + { + s = Codes[i]; + + while (*s) + { + if (*s++ == '.') + l += genpulse (&buf[l], 1, 1); + else + l += genpulse (&buf[l], 3, 1); + + l += genpulse (&buf[l], 1, 0); + } + + l += genpulse (&buf[l], CHARDELAY, 0); + return l; + } + + return 0; +} + +/* + * The playchar() routine handles some special characters that are not + * included in the international morse aplhabet. Characters are then played by + * calling the genmorse() routine. + */ + +static void +playchar (char c) +{ + short buf[16 * BUFSZ]; + int l; + + l = 0; + + if (c <= 'Z' && c >= 'A') + c += 32; + + switch (c) + { + case '\n': + return; + break; + case ' ': + case '\t': + l = genmorse (buf, ' '); + break; + + case '\r': + break; + + case 'Å': + l = genmorse (buf, 'å'); + break; + case 'Ä': + l = genmorse (buf, 'ä'); + break; + case 'Ö': + l = genmorse (buf, 'ö'); + break; + case 'Ü': + l = genmorse (buf, 'ü'); + break; + + default: + l = genmorse (buf, c); + } + + write (audiofd, buf, 2 * l); + if (2 * l < charsize) + { + char tmp[4 * 1024 * 1024]; + l = charsize - 2 * l; + memset (tmp, 0, l); + write (audiofd, tmp, l); + } +} + +int +main (int argc, char *argv[]) +{ + char *devname = "/dev/dsp"; + short buf[16 * BUFSZ]; + char line[1024]; + int i, parm; + int l, speed, charspeed, wpm = 8; + +/* + * Charcter rate (CPS/WPS) handling. + */ + + if (argc > 1) + { + wpm = atoi (argv[1]); + if (wpm == 0) + wpm = 12; + } + + if (argc > 2) + charspeed = atoi (argv[2]); + + speed = wpm; + charsize = 60 * SRATE * 2 / charspeed; + + printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5); + printf ("Charrate %d chars/min -> (%d samples)\n", charspeed, charsize); + dotsize = SRATE / speed; + + ncodes = strlen (Chars); + +/* + * Open the audio device and set up the parameters. + */ + + if ((audiofd = open (devname, O_WRONLY, 0)) == -1) + { + perror (devname); + exit (-1); + } + + parm = AFMT_S16_LE; + if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1) + { + perror ("SETFMT"); + close (audiofd); + exit (-1); + } + + if (parm != AFMT_S16_LE) + { + printf + ("Error: 32/24 bit sample format is not supported by the device\n"); + printf ("%08x/%08x\n", parm, AFMT_S16_LE); + close (audiofd); + exit (-1); + } + + parm = SRATE; + if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1) + { + perror ("SPEED"); + close (audiofd); + exit (-1); + } + + if (parm != SRATE) + { + printf + ("Error: %d Hz sampling rate is not supported by the device (%d)\n", + SRATE, parm); + close (audiofd); + exit (-1); + } + +/* + * The setup phase is complete. After this moment we can forget that we are + * working on a device. The remainder of this program behaves just like + * it's writing to any (disk) file. + */ + a = 0.0; + + step = 360.0 * 600.0 / parm; + + l = 0; + l += genpulse (&buf[l], 1, 0); + write (audiofd, buf, l * 2); + + /* Some initial delay */ + memset (buf, 0, 4096); + for (l = 0; l < 30; l++) + write (audiofd, buf, 4096); + + while (fgets (line, sizeof (line), stdin) != NULL) + { + + if (*line == '#') + continue; + + for (i = 0; i < strlen (line); i++) + { + playchar (line[i]); + } + } + + /* Some final delay */ + memset (buf, 0, 4096); + for (l = 0; l < 20; l++) + write (audiofd, buf, 4096); + + close (audiofd); + + exit (0); +} diff --git a/tutorials/sndkit/morse/morse2.c b/tutorials/sndkit/morse/morse2.c new file mode 100644 index 0000000..63e5453 --- /dev/null +++ b/tutorials/sndkit/morse/morse2.c @@ -0,0 +1,578 @@ +/* + * Purpose: Another morse code program that uses select + * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL. + * + * Description: + * This program is a significantly more complicated version of + * {!nlink morse.c}. It uses the {!nlink select} system call to be able to + * handle keyboard input and audio output at the same time. It shows how + * to prevent output underruns by writing silent samples to the audio device + * when there is no "payload" signal to play. + * + * What the program does is playing randomly selected morse symbols + * (based on the command line options). It then waits until the + * users hits a key. If the input character matches the morse output then + * the program continues by playing another morse character. If there was an + * error then the next character is repeated. The Esc key is used to stop + * the program. + * + * Parts on this program are common with {!nlink morse.c} and commented only + * there. + * + * The {!nlink morse3.c} program is a slightly different version of this one. + */ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/soundcard.h> +#include <math.h> +#include <termios.h> +#include <signal.h> +#include <sys/time.h> +#include <sys/types.h> + +#define BUFSZ (16*1024) +#define SRATE 48000 +#define ATTACK 100 +#define CHARDELAY 3 + +char randomlist[65536]; +int nrandom = 0; +int done = 0; +int chars_to_play = 100; + +int dotsize; +int audiofd = -1; +static int ncodes; +static int playc; +static int terminal_fd = 0; +static struct termios ti, saved_ti; +static int totalchars = 0, totalerrors = 0, errors = 0; +static time_t t0; + +double a, step; +#include "charlist.h" + +static void +terminate (int sig) +{ + time_t t; + + t = time (0) - t0; + + if (terminal_fd == -1) + return; + + if (tcsetattr (terminal_fd, TCSAFLUSH, &saved_ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + printf ("\n\nTotal characters: %d\n", totalchars); + printf ("Errors: %d\n", totalerrors); + printf ("Elapsed time: %d seconds\n", t); + if (errors == 0) totalchars--; + if (totalchars <= totalerrors) totalchars = 0; + else + { + totalchars -= totalerrors; + totalchars += totalchars / 5; + } + + printf ("Characters per minute: %g\n", + t > 0?(float) totalchars / (float) t * 60.0:0); + exit (sig); +} + +static int +genpulse (short *buf, int w, int state) +{ + int i, l; + a = 0.0; + + l = w * dotsize; + + for (i = 0; i < ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + tmp *= (double) (i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = ATTACK; i < l - ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = l - ATTACK; i < l; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + tmp *= (double) (l - i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + return l; +} + +static void +playerror (void) +{ + short buffer[65536], *buf = buffer; + int i, l; + a = 0.0; + + l = dotsize; + + for (i = 0; i < ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + tmp *= (double) (i) / (double) ATTACK; + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + for (i = ATTACK; i < l - ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + for (i = l - ATTACK; i < l; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + tmp *= (double) (l - i) / (double) ATTACK; + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + write (audiofd, buffer, 2 * l); +} + +static int +genmorse (short *buf, char c) +{ + int l = 0, i; + const char *s; + + if (c == ' ') + return genpulse (buf, 4, 0); + + for (i = 0; i < ncodes; i++) + if (Chars[i] == c) + { + s = Codes[i]; + + while (*s) + { + if (*s++ == '.') + l += genpulse (&buf[l], 1, 1); + else + l += genpulse (&buf[l], 3, 1); + + l += genpulse (&buf[l], 1, 0); + } + + l += genpulse (&buf[l], CHARDELAY, 0); + return l; + } + + printf ("<?>"); + fflush (stdout); + return 0; +} + +static void +playchar (char c) +{ + short buf[16 * BUFSZ]; + int l; + + l = 0; + + if (c <= 'Z' && c >= 'A') + c += 32; + + switch (c) + { + case ' ': + case '\n': + case '\t': + l = genmorse (buf, ' '); + break; + + case '\r': + break; + + case 'Å': + l = genmorse (buf, 'å'); + break; + case 'Ä': + l = genmorse (buf, 'ä'); + break; + case 'Ö': + l = genmorse (buf, 'ö'); + break; + case 'Ü': + l = genmorse (buf, 'ü'); + break; + + default: + l = genmorse (buf, c); + } + +/* + * Next write whatever we have in the buffer. Note that this write will + * block but that time is at most the time required to play one morse + * code character. There is no need to avoid blocking because it doesn't cause + * any annoying delays. + * + * This is often the case with audio application. While many programmers think + * blocking is evil it's actually programmer's best friend. + */ + if (write (audiofd, buf, 2 * l) != 2 * l) + { + perror ("write audio"); + terminate (15); + } +} + +/* + * The randomplay() routine picks a character from the list of characters + * selected for practice. + */ +static void +randomplay (void) +{ + int old = playc; + if (totalchars == chars_to_play) + { + done = 1; + return; + } + +// while (playc==old) + { + int i, x, tmp; + + x = random () % nrandom; + playc = randomlist[x]; +#if 1 + if (x != nrandom - 1) + { + tmp = randomlist[x]; + for (i = x; i < nrandom - 1; i++) + randomlist[i] = randomlist[i + 1]; + randomlist[nrandom - 1] = tmp; + } +#endif + } + + playchar (playc); + totalchars++; +} + +static int +findcode (char c) +{ + int i; + + for (i = 0; i < ncodes; i++) + if (Chars[i] == c) + return i; + + return 0; +} + +int +main (int argc, char *argv[]) +{ + char *devname = "/dev/dsp"; + short buf[32 * BUFSZ]; + char line[1024]; + int i, parm; + int l, speed, wpm = 12; + + fd_set readfds, writefds; + + if (argc > 1) + devname = argv[1]; + + if (argc > 2) + { + wpm = atoi (argv[2]); + if (wpm == 0) + wpm = 12; + } + + ncodes = strlen (Chars); + + srandom (time (0)); + + if (argc > 3) + { + for (i = 3; i < argc; i++) + parse_charlist (argv[i]); + } + else + { + strcpy (randomlist, Chars); + nrandom = strlen (randomlist); + } + + if (nrandom < 2) + { + printf ("Bad character list\n"); + exit (-1); + } + + randomlist[nrandom] = 0; + + printf ("Practicing codes: %s\n", randomlist); + for (i = 0; i <= nrandom; i += 4) + { + int j, k; + char line[256], tmp[20]; + memset (line, ' ', 80), line[78] = 0; + + for (j = 0; j < 4; j++) + if (i + j <= nrandom) + { + int ix; + + ix = findcode (randomlist[i + j]); + + sprintf (tmp, "%c %s", randomlist[i + j], Codes[ix]); + for (k = 0; k < strlen (tmp); k++) + line[j * 20 + k] = tmp[k]; + } + + printf ("%s\n", line); + } + + speed = wpm; + + printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5); + + dotsize = SRATE / speed; + + if ((audiofd = open (devname, O_WRONLY, 0)) == -1) + { + perror (devname); + exit (-1); + } + + parm = 0x0003000a; + ioctl (audiofd, SNDCTL_DSP_SETFRAGMENT, &parm); + + parm = AFMT_S16_LE; + if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1) + { + perror ("SETFMT"); + close (audiofd); + exit (-1); + } + + if (parm != AFMT_S16_LE) + { + printf + ("Error: 32/24 bit sample format is not supported by the device\n"); + printf ("%08x/%08x\n", parm, AFMT_S16_LE); + close (audiofd); + exit (-1); + } + + parm = SRATE; + if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1) + { + perror ("SPEED"); + close (audiofd); + exit (-1); + } + + if (parm != SRATE) + { + printf + ("Error: %d Hz sampling rate is not supported by the device (%d)\n", + SRATE, parm); + close (audiofd); + exit (-1); + } + + if (tcgetattr (terminal_fd, &saved_ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + signal (SIGINT, terminate); +/* + * Set up the terminal (stdin) for single character input. + */ + + if (tcgetattr (terminal_fd, &ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + + ti.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + ti.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + ti.c_cflag &= ~(CSIZE | PARENB); + ti.c_cflag |= CS8; + ti.c_oflag &= ~(OPOST); + + ti.c_cc[VMIN] = 1; + ti.c_cc[VTIME] = 1; + + if (tcsetattr (terminal_fd, TCSAFLUSH, &ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + a = 0.0; + +/* + * Play some "extra" audio data to delay the startup. This just gives + * some extra time to the user to prepare before we start. + */ + + step = 360.0 * 600.0 / parm; + + l = 0; + l += genpulse (&buf[l], 1, 0); + write (audiofd, buf, l * 2); + memset (buf, 0, 4096); + for (i = 0; i < 2; i++) + write (audiofd, buf, 4096); + +/* + * The actual playback starts here + */ + + randomplay (); + + t0 = time (0); + while (!done) + { + int n; + +/* + * Set up select for output events on the audio device and input events on + * the keyboard. + */ + FD_ZERO (&readfds); + FD_ZERO (&writefds); + + FD_SET (audiofd, &writefds); + FD_SET (0, &readfds); + +/* + * Call select with no timeouts + */ + if ((n = select (audiofd + 1, &readfds, &writefds, NULL, NULL)) == -1) + { + perror ("select"); + exit (-1); + } + + if (n == 0) + continue; + + if (FD_ISSET (0, &readfds)) /* 0 means stdin */ + { +/* + * Handling of keyboard input. Check if the answer was right. + */ + if (read (0, line, 1) == 1) + { + if (*line == 27) /* ESC */ + terminate (SIGINT); + if ((unsigned char) *line != (unsigned char) playc) + { + int x; + + totalerrors++; + chars_to_play += 4; + randomlist[nrandom++] = playc; + randomlist[nrandom++] = playc; + for (x = 0; x < nrandom; x++) + if (randomlist[x] == *line) + { + randomlist[nrandom++] = *line; + break; + } + playerror (); + if (++errors > 3) + { + printf ("It is '%c' not '%c'\r\n", playc, *line); + fflush (stdout); + } + playchar (playc); + } + else + { + errors = 0; + randomplay (); + } + } + } + + if (FD_ISSET (audiofd, &writefds)) + { +/* + * The audio device is ready to accept more data. Keep the device happy by + * writing some silent samples to it. + * + * Note that the real "playload" signal will be played by the playchar() + * routine. + */ + memset (buf, 0, 1024); + write (audiofd, buf, 1024); + } + } + +/* + * Everything done. Restore the teminal settings and exit. + */ + terminate (15); + + close (audiofd); + + exit (0); +} diff --git a/tutorials/sndkit/morse/morse3.c b/tutorials/sndkit/morse/morse3.c new file mode 100644 index 0000000..22eb9c2 --- /dev/null +++ b/tutorials/sndkit/morse/morse3.c @@ -0,0 +1,572 @@ +/* + * Purpose: Yet another morse code program that uses select + * Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL. + * + * Description: + * This program is a significantly more complicated version of + * {!nlink morse.c}. It uses the {!nlink select} system call to be able to + * handle keyboard input and audio output at the same time. It shows how + * to prevent output underruns by writing silent samples to the audio device + * when there is no "payload" signal to play. + * + * What the program does is playing randomly selected morse symbols + * (based on the command line options). At the same time it reads the keyboard + * and checks if the user typed the right character. This program + * doesn't stop to wait for the input. This simulates the real morse code + * exam but ufortunately this dosesn't work in practice. + * + * Parts on this program are common with {!nlink morse.c} and commented only + * there. + * + * The {!nlink morse2.c} program is a slightly different version of this one. + */ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <math.h> +#include <termios.h> +#include <signal.h> +#include <sys/time.h> +#include <sys/types.h> +#include <soundcard.h> + +#define BUFSZ (16*1024) +#define SRATE 48000 +#define ATTACK 100 +#define CHARDELAY 3 + +char randomlist[256]; +int nrandom = 0; +int done = 0; +int charspeed, charsize; + +int dotsize; +int audiofd = -1; +static int ncodes; +static int playc; +static int terminal_fd = 0; +static struct termios ti, saved_ti; +static int totalchars = 0; +static time_t t0; + +double a, step; +#include "charlist.h" + +int nplayed = 0, ntyped = 0; +char played_chars[4096], typed_chars[4096]; + +static void +check_results (void) +{ + int i, j, n; + int errors = 0; + + n = nplayed; + + for (j = 0; j < n; j += 50) + { + printf ("Answer: "); + for (i = j; i < n && i < j + 50; i++) + { + if (i != j && !(i % 5)) + printf (" "); + printf ("%c", typed_chars[i]); + } + printf ("\n"); + + printf ("Correct:"); + for (i = j; i < n && i < j + 50; i++) + { + if (i != j && !(i % 5)) + printf (" "); + if (typed_chars[i] != played_chars[i]) + { + printf ("%c", played_chars[i]); + errors++; + } + else + printf (" "); + } + printf ("\n"); + } + printf ("\n"); + + printf ("Errors: %d\n", errors); +} + +static void +terminate (int sig) +{ + time_t t; + + t = time (0) - t0; + + if (terminal_fd == -1) + return; + + if (tcsetattr (terminal_fd, TCSAFLUSH, &saved_ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + printf ("\n\nTotal characters: %d\n", totalchars); + printf ("Elapsed time: %d seconds\n", t); + + printf ("Characters per minute: %g\n", + t > 0?(float) totalchars / (float) t * 60.0:0); + printf ("\n"); + check_results (); + exit (sig); +} + +static int +genpulse (short *buf, int w, int state) +{ + int i, l; + a = 0.0; + + l = w * dotsize; + + for (i = 0; i < ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + tmp *= (double) (i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = ATTACK; i < l - ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + for (i = l - ATTACK; i < l; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + tmp *= (double) (l - i) / (double) ATTACK; + + *buf++ = (int) tmp *state; + + a += step; + if (a > 360.0) + a -= 360.0; + } + + return l; +} + +static void +playerror (void) +{ + short buffer[65536], *buf = buffer; + int i, l; + a = 0.0; + + l = dotsize; + + for (i = 0; i < ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + tmp *= (double) (i) / (double) ATTACK; + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + for (i = ATTACK; i < l - ATTACK; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + for (i = l - ATTACK; i < l; i++) + { + double tmp = 0x7fff * cos (a * M_PI / 180.0); + + tmp *= (double) (l - i) / (double) ATTACK; + + *buf++ = (int) tmp; + + a += step * 2.0; + if (a > 360.0) + a -= 360.0; + } + + write (audiofd, buffer, 2 * l); +} + +static int +genmorse (short *buf, char c) +{ + int l = 0, i; + const char *s; + + if (c == ' ') + return genpulse (buf, 4, 0); + + for (i = 0; i < ncodes; i++) + if (Chars[i] == c) + { + s = Codes[i]; + + while (*s) + { + if (*s++ == '.') + l += genpulse (&buf[l], 1, 1); + else + l += genpulse (&buf[l], 3, 1); + + l += genpulse (&buf[l], 1, 0); + } + + l += genpulse (&buf[l], CHARDELAY, 0); + return l; + } + + printf ("<?>"); + fflush (stdout); + return 0; +} + +static void +playchar (char c) +{ + short buf[16 * BUFSZ]; + int l; + + l = 0; + + if (c <= 'Z' && c >= 'A') + c += 32; + + switch (c) + { + case ' ': + case '\n': + case '\t': + l = genmorse (buf, ' '); + break; + + case '\r': + break; + + case 'Å': + l = genmorse (buf, 'å'); + break; + case 'Ä': + l = genmorse (buf, 'ä'); + break; + case 'Ö': + l = genmorse (buf, 'ö'); + break; + case 'Ü': + l = genmorse (buf, 'ü'); + break; + + default: + l = genmorse (buf, c); + } + + write (audiofd, buf, 2 * l); + if (2 * l < charsize) + { + char tmp[512 * 1024]; + l = charsize - 2 * l; + memset (tmp, 0, l); + write (audiofd, tmp, l); + } +} + +static void +randomplay (void) +{ + int old = playc; + if (totalchars == 100) + { + return; + } + +// while (playc==old) + { + playc = random () % nrandom; + playc = randomlist[playc]; + } + + playchar (playc); + played_chars[nplayed++] = playc; + totalchars++; +} + +static int +findcode (char c) +{ + int i; + + for (i = 0; i < ncodes; i++) + if (Chars[i] == c) + return i; + + return 0; +} + +static void +editor (char c) +{ + int i; + + if (c == 27) /* ESC */ + terminate (SIGINT); + + if (c == 8) /* BS */ + { + if (ntyped > 0) + ntyped--; + return; + } + + if (c == ' ') /* Sync */ + { + for (i = ntyped; i < nplayed; i++) + typed_chars[i] = '_'; /* Empty placeholder */ + ntyped = nplayed; + ioctl (audiofd, SNDCTL_DSP_HALT, 0); + return; + } + typed_chars[ntyped++] = c; + + if (ntyped >= 100) + done = 1; +} + +int +main (int argc, char *argv[]) +{ + char *devname = "/dev/dsp"; + short buf[16 * BUFSZ]; + char line[1024]; + int i, parm; + int l, speed, wpm = 12; + + fd_set readfds, writefds; + + if (argc > 1) + devname = argv[1]; + + if (argc > 2) + { + wpm = atoi (argv[2]); + if (wpm == 0) + wpm = 12; + } + + ncodes = strlen (Chars); + + srandom (time (0)); + + if (argc > 3) + { + for (i = 3; i < argc; i++) + parse_charlist (argv[i]); + } + else + { + strcpy (randomlist, Chars); + nrandom = strlen (randomlist); + } + + if (nrandom < 2) + { + printf ("Bad character list\n"); + exit (-1); + } + + randomlist[nrandom] = 0; + + memset (typed_chars, ' ', sizeof (typed_chars)); + + printf ("Practicing codes: %s\n", randomlist); + for (i = 0; i <= nrandom; i += 4) + { + int j, k; + char line[256], tmp[20]; + memset (line, ' ', 80), line[78] = 0; + + for (j = 0; j < 4; j++) + if (i + j <= nrandom) + { + int ix; + + ix = findcode (randomlist[i + j]); + + sprintf (tmp, "%c %s", randomlist[i + j], Codes[ix]); + for (k = 0; k < strlen (tmp); k++) + line[j * 20 + k] = tmp[k]; + } + + printf ("%s\n", line); + } + + speed = wpm; + + printf ("Words per minute %d. Characters per minute %d\n", wpm, wpm * 5); + + dotsize = SRATE / speed; + + if ((audiofd = open (devname, O_WRONLY, 0)) == -1) + { + perror (devname); + exit (-1); + } + + parm = 0x0004000a; + ioctl (audiofd, SNDCTL_DSP_SETFRAGMENT, &parm); + + parm = AFMT_S16_LE; + if (ioctl (audiofd, SNDCTL_DSP_SETFMT, &parm) == -1) + { + perror ("SETFMT"); + close (audiofd); + exit (-1); + } + + if (parm != AFMT_S16_LE) + { + printf + ("Error: 32/24 bit sample format is not supported by the device\n"); + printf ("%08x/%08x\n", parm, AFMT_S16_LE); + close (audiofd); + exit (-1); + } + + parm = SRATE; + if (ioctl (audiofd, SNDCTL_DSP_SPEED, &parm) == -1) + { + perror ("SPEED"); + close (audiofd); + exit (-1); + } + + if (parm != SRATE) + { + printf + ("Error: %d Hz sampling rate is not supported by the device (%d)\n", + SRATE, parm); + close (audiofd); + exit (-1); + } + + if (tcgetattr (terminal_fd, &saved_ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + signal (SIGINT, terminate); +/* + * Line setup + */ + + if (tcgetattr (terminal_fd, &ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + + ti.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + ti.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + ti.c_cflag &= ~(CSIZE | PARENB); + ti.c_cflag |= CS8; + ti.c_oflag &= ~(OPOST); + + ti.c_cc[VMIN] = 1; + ti.c_cc[VTIME] = 1; + + if (tcsetattr (terminal_fd, TCSAFLUSH, &ti) == -1) + { + perror ("tcgetattr"); + exit (-1); + } + + a = 0.0; + + step = 360.0 * 600.0 / parm; + + l = 0; + l += genpulse (&buf[l], 1, 0); + write (audiofd, buf, l * 2); + memset (buf, 0, 4096); + for (i = 0; i < 2; i++) + write (audiofd, buf, 4096); + + charspeed = speed * 5; + if (charspeed > 25) + charspeed = 25; + charsize = 60 * SRATE * 2 / charspeed; + printf ("Charrate %d chars/min -> (%d samples)\n", charspeed, charsize); + + printf ("\r\n"); + randomplay (); + + t0 = time (0); + while (!done) + { + int n; + + FD_ZERO (&readfds); + FD_ZERO (&writefds); + + FD_SET (audiofd, &writefds); + FD_SET (0, &readfds); + + if ((n = select (audiofd + 1, &readfds, &writefds, NULL, NULL)) == -1) + { + perror ("select"); + exit (-1); + } + + if (n == 0) + continue; + + if (FD_ISSET (0, &readfds)) + { + if (read (0, line, 1) == 1) + editor (*line); + } + + if (FD_ISSET (audiofd, &writefds)) + { + if (!(nplayed % 5)) + playchar (' '); + randomplay (); + } + } + + terminate (15); + + close (audiofd); + + exit (0); +} diff --git a/tutorials/sndkit/morse/randomcw b/tutorials/sndkit/morse/randomcw new file mode 100644 index 0000000..ed36b75 --- /dev/null +++ b/tutorials/sndkit/morse/randomcw @@ -0,0 +1,2 @@ +#!/bin/sh +loadcw|tee x|morse $*;tr 'a-zåäö' 'A-ZÅÄÖ' < x diff --git a/tutorials/sndkit/morse/testgen.c b/tutorials/sndkit/morse/testgen.c new file mode 100644 index 0000000..b74df4b --- /dev/null +++ b/tutorials/sndkit/morse/testgen.c @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <math.h> + +int ncodes; + +char randomlist[256]; +int nrandom = 0; + +#include "charlist.h" + +int +main (int argc, char *argv[]) +{ + int ngroups = 0, maxgroups = 20; + ncodes = strlen (Chars); + + srandom (time (0)); + + if (argc > 1) + { + parse_charlist (argv[1]); + } + else + { + strcpy (randomlist, Chars); + nrandom = strlen (randomlist); + } + + if (argc > 2) + maxgroups = atoi (argv[2]); + + if (nrandom < 2) + { + printf ("Bad character list\n"); + exit (-1); + } + + while (1) + { + int i, c; + + if (ngroups && !(ngroups % 5)) + printf ("\n"); + + if (ngroups++ >= maxgroups) + { + printf ("\n"); + exit (0); + } + + + for (i = 0; i < 5; i++) + { + c = random () % nrandom; + + printf ("%c", randomlist[c]); + } + + printf (" "); + fflush (stdout); + } +} |