summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test.rawimg82
-rw-r--r--Lib/test/test.rawimg.rev82
-rw-r--r--Lib/test/test.rgbbin0 -> 43554 bytes
-rw-r--r--Lib/test/test_audioop.py202
-rw-r--r--Lib/test/test_rgbimg.py39
5 files changed, 405 insertions, 0 deletions
diff --git a/Lib/test/test.rawimg b/Lib/test/test.rawimg
new file mode 100644
index 0000000..a6a0480
--- /dev/null
+++ b/Lib/test/test.rawimg
@@ -0,0 +1,82 @@
+!)#"!:76<:=EDJIILOOR!#&"$IFLGDJDBE97:DBENLOQOR)%-TV[UW\UW\\^c\^c"!(YX^UX]X\^Y[^ $QSQ\ZUWVOSQS"HFH=>8IJD)'*"&$#)Z[\[YV^XV||~}^_`PTVTW\SUZRT[NPWKMTFHOCELDIOHIPHGNFGNJOUIJQHGNCELIKRHIPFGNCDKBDL@BJCELFINEHMDGL@CHDGLACHCBH?>DCBHACH9<A;@E@?E>@E:<A:<A:<A;;>?=@%#&425'%(>4>&+!,'-!A?BIGJ# "!$#(#'$KOQMORPPSQQTTTW/-0iifUVWQSQQPO#(XXUXXU[XSTPR !XVX[ZS[YT%"!!%_]`GEG-+-" "('&RSMy~xojlWWZRTWQSVPRWNOVIPVHOUDHPEFQFHPGIPFHODFMACJDFMACJ@BI@BIACJDFMACJ>AFBEJADIDGLACJACJ=?F@BI@BG>@E?AF>@E9;@=?D<>C:<A=;>7572020.0-)+&"$
+/%.G>K!"
+ vrtIDJ
+ "!!!1/1?=?LJL%#&QQNQSQORLRRO#&YYVUURVSNXTV XWVYZTXYR%#%! \[a]\ba`f$$'WXYPPMWQO^VTVRPz}w`c]WYWVWXLQVKOWJPZGJVNPXJLSGIPGIPEGNFHOGIPDFM>@G@BI;=DCEL@CHADIJMR>AF?AH?AH>@GBDK>@E>@E?AF>@E::=225--0''*+)+(&(*(*#!#%!#)%'" .*, !# '$#! !KKHMOLNRJNOH!VVSZZW\YTYUW `_e]^_abc=<C"abibbkaal "#*NPUSUZWRX'#%$#[[X]^XkjiYVUXX[SUZPRYNPWKMTIKRKMTGIPBDKDFMDFMCELACJACJ>AF@CH@CHADI<>E=?F=?F>@G=?D<>C=?D8:?203*(*+)+(&((&()')'%'$"$'#%($&)%')%'% $& 4*9
+
+
+"
+
+-((EA?=:9)&,RQPMQOQSPRSM'$# %"[][cba][Xgce!ZZcbcjhipEEP!__hddobbm$abi^`ha_h##>@>:8:(%+ZUP`[Vvrpda`VX[WY\Z\aQSXLQWJNVEIQHJQEGNEFMCELEGNBEJ<?D=@EADI=@E>@G<>E<>E8:?:9?,+1)(..,.*(**(*'%')')%#%(&(%#%&"$'#%" %!#&!%#"726$#1),,') 
+ !JFDUPJ#"!-,2STUMPUVY^^]c0-3 ^cibahbagcbi ^_f`ah`ahTV[!edjedj_^d #MMP130''*!A@?-+. $'$*@=8B>@!$"de_}gehUY[UX]NPWJJSHGNFGNEGNAFL>CH@EJ>CH=BG>@C>>A447//2,*-+),*(+*(++)+(&()')(&()'*&$'%#&%#&&$&$"$$"$$"$$"$$"$" "&$&   % #(,.!phlOKS728# =;3WPDZPA^WK869<;:>ABQSXQRY,-4#aflhgnmlronu$][dffighi[Z` ccfhjhefgVWX_a^VVY@?>'%("%gcaa\` ! &GEG(&(^\^zupwrt[X^TU\NNWDFN=CK8;@9<A/27),1+),/*.-(,-(,+),((+&&)&&)&&)%%(((+''*''*$$'$$'%%((&('%'%#%%#%%#%%#%(&(" "-)+)$&|w{&!%KEC"bglRXZJNP77:+-0(*-$&)
+>8@'#JE9^RClYGu`T)!%2-3D@BB@=UPJQLFGBB:59#SX^SRYONTWV];8D3/8[Y[[\VXVY#[\]_c[`b`_a_`b_^^aEDC647 kffmhn"olr #!$WUW& $,$(RMM[VV{{D@B424$$'$ ""%(&)+),20324779<9;>:<?9;@8:?68=57<247,.1(*-'),*(*(&((&((&('%''%'&$&(&('"$D<8ecegjk]`a367$))!&& #$#$%" "
+"!?9=,&$^WKkaV]O@|dU~dY-"(#)735>;6eZOaWIWLE<64<?D=<B!!
+&"+-"'%"Z\SSQT$"Y\]W\VZ\Y^b`oqoddg!?A?)),!?=? 106jih"+ )PKOLFD*"( OJEhe`XVYIGJILQFIN<?D@CH>AFBEJEHM@CHADI?@G:;B<=D9;@;=@=?B/14+,-,*,)'))')(&((&((&(?::-+-''*˿bVWGBBb_^SSPBB?330..+8;5463+-+##&  EC<VSHmcUrcseVn\No[M]NO[W_(+0EB=g[RfYL[PEJFD#'UURH.!J8*RSLFEK '!^gmbglhgf &BDL8:=-,3<A=
+EGLLNL# &fdf,(1#hfh]Z`# &FDG!"$"%PJHE?=FDGbdiPOULKQIHNIKPFHM?AF@BGMLR54:0/5-,2+*0+*0*)/)(.''*)*+)*+)*++),)'**(+<><!!OMP# !ǿ%& 25/@C=BE?22/..+!  DB;DA6\RDzk^SD7B3&SB5ZKK#%(RMGmbWeXKk^Qe\URMQNKJjhc*X=,M8&h_Xnjl! &S[_aeg~ccfNLG $TV[ "'YZ[('.ddg409#gega^dWUX#!$ecf!GJU d__}}]XXNLOJJMOORFFI@BGBDI>@E=?D>@E9;@>@E=?D==@??B>>A??B>>A<<?336 #+('--0$)&! Ž$'! @C=%'$IG@VSHi_Qxf\XH>E8-RG<bSSrlde[Qm`SjZJsf[UPKig`ZXQE61[>,J0}$$)&,bhj|{wuoqhbda E@;OIG"&9;@GIL%PRW61=#a_aXU[XVY ;:@ *$(JDHRPRtrt\Z\XVXKMRGJOFINBEJ?BG;>C8;@36;.05.-3.-3.-3+-0+-0.03+-0  /'*{~ iegmlr&'(,(*
+! (-'<A;+0,+0,/+)A<6WQGh^PbPFP@6E:/]SH_RMniclbX{nayk\wjc\V`\Tqlf TA9aC-T7%}u+$+`_ePTVPSTLMN #!$EA?RVM&(%#MF@XPN(04VX]DFI(DFK-+4"NLNOLRXVY !! ! RPSoqtUY[MQSJNPCHM?DI>CH?DI@AHCBIBAHBAH=?D=AC:>@6:<4/5$#)ojj-(,{',&9><*//&,(54-/*$KE=[SIsjMA8E;1ME;pcV!/+-OD=reX}pc}rg{pph^ebWrph624-(":(bB,H/ia_1-/cgialmY_aTZ\7=?;AC,24OSU
+
+ !<94!## &16;^`e JKL # &$'!"HFIJHKQNT"
+!%#%%#%GEGusu__bNPUJLQCEJACH>@E<>C;=B136136469/14GBH+*0oge$# "% !.,.$!',&7<:*//%+'/1.(&#<94D?9G?=#3*$D<8RMMh_YfZQqf[zm`whyqgfcXlk`530 !" "($"-F+8!]_\algZ`\_eaiok]c_=C?JOO74/LGG "49>\^cYV\027PQR $ !$!'! $#'567SUSegeJLJJLODFIACF>@CBDG?AD;=@>@C99<'"(! &uom*%)$)#5:8.33&,(45/,)$KF@IC;cYUYQMJE@9610,.$"%,%vlg[\b\Zifa@=<42/'J3'9%ʽyu ,*,3::HKL)*+abc}~ )&!`Zb27<8:?"(*/@AB'#+
+
+203" ,*--+.RPSIJKEHIDGHCFG?AD>@CACFBDG@BE"%<64 #!.'"@AB½0.0%*&275388$*&<80($olgb\Tuqlc\mh\pj`ujcrf]sf[j\SRNLRNP]XSmd]j^aE:?.*,$#"4%'WRT{sq% %$*&*, #(&)hgm %#hgm# &+,- $536
+ 1.484<
+84<+(.'),rvtRTRJMNDHJDFICEHFFIFHK*%) ")B>@C;95/3*%))&%½'$##!#$(&9></42$)';;8#-6F`COj5:S0:N=O],<L',>+2@:DO^bjhgfngoyszosd^OMOIGD#%(>JS-2Obn%%% <?@HMKVVSMLKLMN "#!XSW 73;2.7"
+ !QORnopfdazTSRLPREIKHHKJHKGEH;44)*+MGE5-+604YQTc[Y'"&"&$&632½źOLK"&$8=;053#(&597) 2 72+<j9v)K}'P>l,Z2[EhNfLT^wkb820?@AHHEjnejnfu;]q}xu{{C?A# -3/CHFuzz#!
+ 202h\Wf]]`\^^Z\JFHQMORPS,') %!.&$LFJ# &&!*" vsr{źGDC#!164386" 861$""(07U1U 6\/Tw;j-ZEo,Uy.Ho|l`WEA?.12*/+_cZz]fmY|o3,,456UZX~}lkj),-^ch#!||IGJ !" ##!$DBE'#+1.4839NHPaZd B=A{ojleepgglee\WWC>B'&-*/;54:(" WQU!>9=~w·$! #!/748=;!48:!&,"#CXRy|^xCWeHeq2Gdy{yvpeZKGEBEF162zwv&AZq8549>>digach034%"!d_Y
+ POUHGM
+ FBJ?=F::E2)0@5:~XGQi]ldZkwn{ohoJGBUSU[SQJCCA=FSXj$$!odi(xr987$#")84597/40%"(";![YVemoXb_Wol%Brx}{usoeZOIG$%&#%"]lq.E+C}PGG)')`dbJLQ`cd!&!!" #
+ 3;K$"%
+ ~ig}brH.IS=WB6?VQQ9;>-/4.31LMN94:$&!%)+(}rwpjnwpj%"!   *957;9.62'"&'&$)5&K!?;9xemi]to$Aqy~|}wmbHB@)*+#%"#'6_r[e]P}_UX,*,BDIsux"$%)+
+&<%% $,*-MIK)$&!" ,)(dZm*v}E<<!<@>020053GHI ( #$!'!?A>tin
+%&'5*)'!%[VVg`Zvysxxu#!#'628<:/;8%"!60&&,<'P#"T[[Tggt{`jaYpk.K{w|zuk`vpn*+,02/jb` '2qbynbc$"$.20,*,*,1bcj'$1<9E!")#A
+
+ (#%$"% !" "jfh&!##%0&:9=E'"5/'lkj
+50+!>C?LJEŹGLJ./0'"(%+()*1)'*%'" "~yy[VPnunz}wnunrsm  '304978>@!FN^$-\& &43sawu[d]^up.Ozx|~gZM~ !/1/PXbdy[|vw !;>?1/1//2*)/\XVCBH " " #C0)%.'$*0-3.,/1/1&$&B=?"%>JQg,#3MJVu !a\JC>9*$,ILFPOH(&)0.0+#'ywt)-/EIA~eofltjgoeime(//2;;50<"& )0!6l$"!-4]tyFROQjo-U|tyrs`V!"#v*;H!KJP:8:8;<KNO>CC~==@"""="*V6!TLg@>G+'/!~RON'"&
+$#125@gmv$68-&#+(.#bc]31,)-+C;?$%%"EIA}x\e^fme`g_ah`dh`&--4==30<!( )a''!4KJdx|MVVRih3Xwqr}mwn!"%Oi'{"$Y[`,114@?4==LXW$'(!!CCF**- #**- !<%T'J25NbTz~
+
+ PML CBHVTVc\\nov1%!
+bc]==:-.(LDH%$* /40$$'#~y4<89?;-3/5;7]`Z!((1::--8#+!#"%--e65F782?A>382nuuOec3Yyt|~HYfGmtDT^'-/05:ÿdii\hgt{{ !"
+6#P%J7eO|~y'URQ($&0+/'#%"2%*ypwA65`VY]^X123KJC@:>#xzw&"*+$|/74(-+-3/SYQ"'',55 57?'$6n/&*"-0*6-&;66mpqFOO0QcP;s8Oz\hw"# S`kKlGk!BX!6B)+)Z]^>ABaY\%%(!##&((+!0!KA;fOysp}*56 +}zyGDC-(,GBHE;DC4?|aST
+ ef`kif567!TRJUOS5:F(%+$ aVUcYU*()"%,,&&&#*2.JVM"#'32 -52 !,0e!3!,*%<:+'"JG<#Bd,W@-NIg}$#GXe:FJsnn/.-
+X[\QTU"%& !$"%&>#QB <.:afrY^^kmjQMK,(0#2+2:18~yTKKx<86&"$SMC}vv!tihnfd/'* 6=3:B>&--#&').*FPG!"#/.+30%)1h/3HHFC$$!-+#:0393+?=:$@b,WF*KD_w"~xpn&8;<}Ⱦ~yy?@A '%(%#& !
+%=!Q@4/ 9inzdiihjgRNL$#<8@FEK
+:18cZZ4/3'&%v}zu?60+&!VLA743 "wpw$ y~|5A@9BB9C@;FABNE !".- '',41$  2k5@?>@B@+0*"64-7966Y)WF+J9Ro& ~hZ[946yyv|ƿqnm.-,
+$"$+%E1-XIbdiudiiVXU~QMKRNV~xw~||!;9</.-}IE=4-''""$ "$
+ $"_bc4BA8FE:IE>MHCOF!!&21"))%,,,!!;t8'&%+-*4;4589/3+1601S+VD.M8Qt"|{t`TW.*(ajjľ`]\321&$&!.
+ "%-'-56;9TVSURMTPNQNT.+1"#.%,nioMDD
+|xz86800-LJC#!#(##!$+$$hbf:=>.??1BB4FD:LHJSL "/0"$"*.'" )!:u$&A*% QQF;;.XYL14( /LJt 6}*K"?oį &!ttqI?;" V\^ºRMM" $
++)+++. $%&567>?@KLM(&),11fhfPTR<>;WRMl`[slrjhPJN!"
+,&.lfn\SS"+JHAFD=NICRLDws!% upp!)&w|IQUCKMBKKJOI! -."*,#)+%,#%#%&1&B{$>'#!560GE=VVKMOF!#!,I Ku 6}&G9i!&!SSP@620.+{yvEIK4//58=##8:73/1pmlFDA('&464#%#_a^JLIAC@?A>Y[XNNKa\WȴѸѵʹTC=#!UOWxrzxq{~w  #"3.-"%  410?>3KH<86/upp=88&JIH4<8û -.#+-(+,*/%+',.6$Aw%+E#!$&$?=6QQH]^W$DDn3z(I;k $,% KKH:0,641JLOļ2--20-HFH=;43/-@>79:4uvp'("EIA6:2DH@BF>FLDTPHʷʲɱéոC73GBH%!#B>@?75
+ %32/(4&#042-42+PUS$$!4)(C87DFD084ù# "# #""%%)+%+-&,.*02,0228:%23&12*/-*1%0)%'.$?u)1K$"$'()GGDTUORUO&(+$@Co2|&G#>m0/5+&!31.4,(,)({soJJMʿŸƼɿ,(*ztr=82zNLEe^X~DA6./(,+$^`W@D;CG>AE<X_SɯŪʲʲǰʳ;/+>:< -*)HICJKERSMRSMLHFKFF*+/4!<,%$#ͼ &!CA>%$#~! !:??575?A?/:;.:9-98-98.:9/;:-89.9:4?@2=>.;</<=&34 -..$!%4*)08:%=t(3L !)&%))&JMG:>6678!0;g<@*=gC87'%(+& 3.)+&*ɿNKJ((+9=5+2&C=3][TB;5__VIL@`cWUXLIL@÷Թӽ_]Z&$;?=,/0;>?7:;9=;^`^_`aKKN*--1795K329DFDCECμ)+LIH "GLL=?=н9@@/;?(02,55)54(43'32$/0#./#./"-.&12+67*56'23,6-5EY'!$-H~*4O##&,(*/-&XWLcbW\XV
+' &Q:|D'9_+&(#$1/(97:RONý%%([SQ981"'}r9<0]XRymhDD;RUIJMAEH<aaVƸʿ %"!/-*513C?A&!!XSSupr;,ZA2-:'%F20@&%+''*()*ƴ><E$(0%**575jee]\[IOK+67.:?.6:*33*65&21".-&12"-."-.#./ #%%' (*/1($@[ /! ;q$-K#"970JH@LGG.-Q7c)@j)DZTX(%+ '$"$(&#CCFkfjľQNMſļ--03('TTKjj_6;/A?8A?8TTK;>2VYMRUINMBǾֿH??0-,'#%-((NIK ?< ?)&Cbcn:;<&&)$#*,,/rh^]VIGD" )-+046*24+89*63/<=*6;+37)22)54$0/$0/*24*24 (*#$"$ &((.0&,.,,#;].7p'3R'%($#$#"(&)##$##,# ((#'&%+,(03,3.)-758Ǹƾ^YY¾GHI2*($$'}w"$ƾH<50/(7;3??4DE8qqdfgZſ¿') 
+ ++2514/3.0-234123123*)(NLO;fa\?#"?[[n3829=5 %+(4edjWFF%!)% ! !2(+IRR5=A5=?1<=/79*24'/1')#%!#!# $&!!#%&)*!,-!,-.5)7Ie)",N+4E " #!&"%&#&'(--053256439<8A>69XSN~zGDJyttлzvĸ&!#PNQ46;_]_+')aYW65.Žgf_?:4ú970lf^::/ttgigX{iwo[tpa.)$  71!;7!44!64,$"$$"$!!!$
+07.cE8kQLd%>AF -1/{y*+2ĿB.&7+$4+%<-'E608+ D8)N=0UB6YH8k[Hv\NgLnQ|u79>#)+#+-,24'-/%+-"(* "#)+#%(!#!##%')"*,%-/)=.ho{'#3&- )A%3J!2=8>C?=plj˾ɿ'$#(+0XSUzuu# NNQ|vwq*&(hd\<71SNH64-2.&zwk{yjyi|vf<:3495 $"" "(&('&%(&!750$ JGF=B>#'6\^slc]JEE3<<FKI,()0ja\U_YWY[TSWVy^ʻ,-.(*-'),&(+%'*!#"$%'!')#)+)/1,;: ") .G:Il)9eS_N<8217")ukg}xxwurƾ~wqȿoof# wuONG:6.}{t10)MLExvnyowrf~zk{tflf\PLJSKG! .)-<<9PSM478#!"PDYE>H`^Y.#(#&'(,*'%5'(/486̝mʚg˜eÔZƔ[WXW\VS}KF/aca''$ "'),'+-)+.(*/ %"$#((,1128:+05=CK(=Z]f]e>Q-L|PDGNLU(/~uoRONB=?*(!~wrlƾ^^Qzr" yx20(65.#$qe\unbkfZyth ">=603-MSOgegbb_FKE).."))*-2Ŀν[`ZXY`+-01,0624wuw$"2%-35ԛa̞qC“]Vĕ[WWWRlE-
+\SS``W+13-28>@E%)+&(+-35"*,$,.,02)+0439!" #+-&.2+0684663@%T3+SWPW'#txz}fYT('&EB={u><5[ZSA<7
+ļPNG@D;ZTLJC=,-&xj~aYO/-*8;@acfbe_STM21*LJC.,)242#** !$-/2}}}w*&(aaj2.6zu*):))2LQVŌReϖT“]əbȘaŕ^ʗVși`E &" !(OOLü/35 "#') #)+08:(//+./;<6FIC)00#'#/#&1639Ʊ%/)1fho)!W$;#L_X_hWg"':AAɽ:76!'"&$ " #qgjtpnμ.( /2%ǽ|}]\[NQV9AK5?J9>D)1./73>C?<>;#"!.33'/1).3!#!')')+89bdgrpsmknhfi`dfX^`TZ\PVXQRSONUffuxt}z%$588AlnqמdΠs֝[͝jʙd̛f͜g^`??#!VPHjdh?@98:=#-1368;'-/)13-22575EDC./0 *,/SNTyqt3.4-/7nt~mor /L!<$L|ww#!};36%#&!!#&)-/(*1NQVнLC=CD=SWN|icaZZ]<DN7DU7G[1BY:I\3<C*02!')6:<''*28:3?C+28.:>,78!#(,.xszv~}|'&7%%.ljlߨnęmݦfǛiΚhÐ[i@71"A
+|NK@478 %,02!%'##051DIC22/('.nelnZV1("-',(*-$*!50+("(L(F&M$ ĿĿYLK(,."''"#$$/6672,9;2{w. 
+/@N5EU7Ka2Gc.C_1F^1BY4<F:7=/7;)-!*1#14#01025+%)Ϲhbj~{mgkzw#$5()0)')٥lͦ|ڤaʡ`ŕ^c
+
+
++('Żkec#% $
+
+"#$*4$!8#!.'"" uywCECZk{&*$&N+rbR4^ss|VUN"0G\bl)0F L"<{(:t]c_789tvmRPMg_[¼JHJJLQ,16-05%)+)+.!#&336149+/1 &0 ,3|}<LVqx~7=M6=KǻAFL9?;23:25:+/1+-4**3"x{}u>5/FD?xwnA@G]fm@CHpko""1%(://8Ǜs>j]X%J@<JEEQKO5/3& $937:DAQVP27C5CX'#!&4Z*S@8)F.1%0 99#7d =w-/4pro45/HF?˻)+)@;5}~)-/!!'"$HC=)'*~|/-0*.,gfe012 %9>D536-,+@CU1AJ04I6@O5:@<A?/1867>>>G'*5%%2"(qeSRG-,%ymhd\?AH6:BCBH" jhk%%0!#2447," ! !/-07589;@?@GVQWƹ|yE6:)\XZkei]W[HBF[UYUPT
+±Rb|# #F[#^SH1++*3:,)=#Ay)!+fed""34.*'"|1&e]YXSW425~UQO7<8 ccfniiwwn;>C8CD|9=R1;J38>>CA24;BCJ77@-0;%(3#-1n`RI;bXMzn~ic[8:A8<D>=C ^Z\402mkn&&1!#233697:?=@JHKECF@BICEMGBHпuv /+-LHJ[UYLFJ#!1,0@;?űlhkcf3Fd#&P\XI+( #,2%1":kC>BA<@JH@,+*@@=2/.(,*iifbRIº% $g_]qsqKOQ68=_ZUbVQOMPXRVMMBKJIu~~<@U*4CDIO8=;)+2=>E@@I+.9&,4$%²u]TPF;[QCl`qf`XACJ:>FEDJ~|~#!" igj#&LLO!
+504FDGPMSFGRVYdLGMƵ~   ?>3ǿH[ySPV+&J!XVG&&%,2"
+' AFFQ&(&%&VSN#!!#!$)%?DB#!SQSnlixnȴ#!ZTRý~(*1 !qea~sl:<AXVN410:8;mqs:?Q1;Iº@EK9><'+->@CFGN(+626>"#ùƴRC=B>6PH>paTvr]a[SEHM9=E639omp%!# usv,->138"" 2.,JEI;7?KHTIIV95>k]^KC?ojd_[YE@D%#ICG~oimgaegaez~/*$xkcYq`Z@Se!'#!4 !(fa[*!)'*6-0<! .!)'%(0.1-,+432BA@.-,+-*x}wm\O1)-A<<2:>$jdhhe`QVPigbDA<c_]%"!<@O<FTAFL=@A0:7@FBIHN69D)*5"*,ĹĵMD=A;3RG@\RHgdSWJEDGLvqwXRZUPTojnqm}()B,.6ilm(#' 31,731A=;OJEUPJFA;A>9FDA<:<*)023>86?2++vphid_ 
+pkoA;?YSW%#icgec\{x?P^# 1"%# -+4--8++6%%0 !,&'2(([]`#"($"63.FC>B?:><9??<CC@$"$!?D@gd_''*=5+'#4//KUY'()mleKOGbc\*+%_d`QYV?CR<FTAFL@CD8AAAFFJIP14?(*2$,.øC?=;96NHFGGDPSMIFEQTYidj&!%jgfqlpws,-F.08a`_>86654979=?G!, #!2++502;79;:9336--679A*(+j]\ZOHvndy\VZ'!%& $" 3$$$'NGA8CN$'),7136$$/(!!,' %(-3<:=?=:=;6=;6?=81/1)&,53..&*1,,XfiNNK{}zWXY+-0)378GL@DS9CQ>CIFIJ18>BEJ>=D),757?(02CC@AGCZZWOQNX]Y[]ZпJMRjek&!%jeiuq)*C24<'9G\;ALe(/E,'!"-&-0+13144/3?AF68@:8;̽yncymh`[_QLP" %#NHLZTXz~0*.715".)#=EO
+"!$/ !(% %#""+$!!HIJIKI*-. &&%+8:=!!:;<& (.20¶*"&/**Wko'&,#"&.efmF]iCFR:DRCEL;>?16<;=E@>G'+3.08%-/ywлѺSV[WRX% $e`dpn~'(A35=nsy#+0:H 2!&8, '#%513C<<617107.(,e][picLI>NKF"#!$!$!$! "##&&& ,-..03#%(&(+ (**.0--0+/1)*+//2"$CHMEJHп/&-()*)!%,')JgrrI\dnwRR_T\l>JQxNhvzhgt0;F@?F;AC,/49;BKIR+.9%(3#/3||ǼȱͲɲZ\_XU[uqy'"&]XZkkz),E44=h]b"!##)#+$ "% &=<C& $,)(pjn("&[UY715d\`|&!#'"$3(5R $'(# '&!!#& #:<?:<?79<PKOkdk}B@Ccac+%)..+&")$&3L]fu{onYxrob(<JNMZ9DO\^U:;B379rst038<>EA?H25@+,7$.2êĪͯäɰtuv_Z^fbj% $e`buu-0I009&& "#$%'$*-*0=<C$"B2:1 &!& MGK*$( '"$*1"&&&#$%)'0.+10-3"$)>@C*,/*,/..1TVYCEH43:1,0KFF*&(-*%ɽ-%)2-/|z@TbBWiGrG}`Xl.COnyzIHU-8C,4*MNU;=@/23',19;BJHQ25@+,7#'̽ïƮūĦĭqpoQLNYS[&!%facffu+.G22;4,6-'/!*,1#%,!(.)5 &!#%#&A@F'#%  
+
+  # # ##(#)"&&(,+2217 %"&%,&^^a003LLO.*, !:BD%c_]Ľ*&('!0(,0,.÷nwp?R\7=M9AUzhhw<FU<BDtlhLKX.9D"$)8:=&+09<AIHO26>45@ %*Ʒ}{{{h`|scc`JEEHEK ~iegd_c]]l#'=<=D)&,06@63?##,;<G+$,.,.?43ZRVYY\478-22&%$"% ""% ",$'$)!$+#&)$&# (#%&!#&!!!$$"'""$"#!"!2)',)/ )' $&# %33<WTZ*(+``]xzw<?@ %C@F&'Y[^Ų7'/##&˷5*/1/1¹ou;HY4>M/;Jy~~mo~2BU-;:TRKRQ^2<J268:>@:?E=?BLNQ04<%+5!$)khgÿ\^\lnq$! ;9; FDGa0$'848:+-5HQ_.0?(&*9!0#WPZiknĹeenNPXFIN*%'%!##(!!!)"".''1**&*##-&&*%%'""-((+&&4//)$$% !!L?><5?CgTl
+( !!&$)# *42;)(/HGN%
+ B8;65.!83M_c?AH2'.$8B8eYZ5/3846ʾ%+;6CT@JY9ETjssspk}1@S4@?GE>VUb",:>BD9=??CE=AC<AG79<>@C04<'-7!$)%'%mkm&&)850%#%" "!!SRY./@$'86:<OMO43:U\h ,"" )!(!(2.7#\[lLO`??H+#&+ ,$")!+#!,&$/)')#!& $-%#.&$-%#/((4//#-((500-(($$"$~yE78&4U;*"*%)#218% &'%()'*!"&$'!bVRòcik9:
+$'GLdZ}613-(.̺G<A)')ʾDJZ8EVBL[7CR*65LJE$.B&21A?8ON[%3046*.0/35'+-).4/14+-0-19*0:!$)$(&558Ⱥƴx~JEI646SNHnnk&%$ba`XW^():$'848:HFH1,0"#*2.6% "1,0C?G(*/̿XViFI[CCN)!%*4)(.#"+ 0($,'"4/*(#2*&2'&/$#.#")""*%%+&&zsvi\G8C2):%(#&%!))211:+,-#"!!! 54: !/)-#$%SJDvpmtzWH0p:f*0FpZ[7"'$!'йaTY/-/jkvAKZPNQFP_>JY#"FDA$->,55%"KJW,5C9<A:>@EIK39;7<A13616<$'2#&+ 034kfhtoi,.+'&%zkidFEK)+:.157EFG( * !%"#(#'CCN<<K@:H1*1' #+$$&,##5,,8//0''2+++$$' +$$+#' +""#!#rmgG=/b[g%!,328%#& !# !! !"&&"/3;6ONE_h:7DaZa~AI].*27,1+(.}ry(##ŹLNUCM[:FU,(LNS(2F#%JKL ((+<;=D48:BHJ;AC.16.16),1*-2&+1(+0469$%&¸yoc[YSKA5::38=!{yq&&)%(4+.?SRX.&01,0#"% 0-311:700;8D??N>8F3,3&' -&&&6.12*-6.1"*##)"")""% $! (#)+&*+#&-$$$#"ge`fa[(smu&'.#"! ! #$"# %#! &%,+/7|\@;UiShh^a;KU7BC>38'$*ƺ:0,ACJ^\^46=<GR<KQ)EHB)/9\_d %.6@"0=FL4:<@BE-05),1.16!&,"%*.039:;zp~slξE:?/27AFFCA<eg^*)(--8wtF?G2*4% $%# &+'(/e^^75>00?D>LB;B-&&%%"0*."+$$+$$611% ~ruaY\$#! +#&/&&'&%]a_|~/%( " #!TROOJN%=AIW\X#-ICQJBV<#4wnuôK@E!$lkj0+&)#'(ihoDFM'7@NFO`?BN
+
+1+A%?CKIGI %.-313:.2:05;%(-0.1!{r{qme˶)7&(%5ǿ-(*D?E-)1811}ffo*->EAIĽ%#!!!$"(0-0;%$*.-4UQYB;E;;JSS`SNT0(&!, !NE?F><("&#)""%)""3)%( #'"(!!,&$0,*__b]bg% "eXS÷(#%*"%WHH/.-$ ""&7:E=@AUZT535`Y`<AM"bZXUOM#!!!XMLHIPFSdAHV'0=+-vZWZ=<unaWb_+7)&BDLIJK!,-.?BG05;,17$',vltwoeս*8,%/#0=,(*<7=/(2@86ys}~_[c&)5;:@̼)*1&$""-%*6<DN %$*+*096<=9B;;JJJYSPV+#!8,-*!+$YNM*&( *##*##(!!0&"( #'"*##+%#/)'mno`ej&!#ǻŹȻ(%+%#&F85410$ ""7:EFNRf^a{y{z}~u{}hekINZ!(" &&!!! !!!F77A;CGO_V[gLNU
+ +2!'
+!'
+!" &' "DBKGHI,.1LNL %*<AG).3HCGxkvti׻.8,%,&1<)&%604)#+G?;{IDJ"%0##&'+3;IX'+3663B@=?;9,-'-3/Ya]89@-0<:7Didh,"%.$'&&" =<5l[[&!' /&&-!"5(')$$$(##*%%80.egebii"!ò|vigb)&%% 83-854$ " $25@>EE³̿qjvGS\^]cEER!$!&"$#!  !" 5'(KFLU`kQ[eGM]((7`]orn#"9
+
+
+ :,'Q94V!(YU^BEF+-08:857425:01<(04ƺvɰw{qg 3?!#/5?bfh%'%1,.! 'NFDyl}vKDK#%,558#%>C79B5-:-#."B-iIDJ@>G5/7@99."#%+$$%! $þpp2$%$' 3**-!"0#")$$$-((0++6.,ege_ff#"vlaj]\/,+&!!+*#Ⱥ1.-#!03><CCnhvIVaVW^??L ")% "#!#!  !" +#!IKNFR[ZelDOZ9CN*1?21N0'c4*o?6|[QIe_A=]9AKXT]LOP027012IKI02912='/3÷~qlrnwngԽ'3%'7@N9?G!#&0,4!$/LHJxjavkdF=D#$+><?>H76B3/@0LcP9TC )>_M3N=<ZJKGO45@-*6C>@&%' '#!NOH&"' ,##."#2%${{xȷ(##% '"")$$.&$=?=]dd{pehYY30/'""!"3..%!#$ (9<G9>>c]k8IVCGO==J ")(#%&"$%!#" " " " " #QPO<ELIOQ;GL@HRxzFGN(.8%3LUUyz{9>JOKTBEF/07)),<>F78C/7;wrlɾ5HT& (:BL.38hijB=A54;RLJ]XX:5;!(.CEH.E2LoWuz(?, ,+1:37D9(4=?BT;;D<@OKIYFBJ.$'-#&'0*(c\V&#"!' .%%."#1$#DE?̻(##% $&!!.''+)+:??o_Vol-*)#$%>99#!# &DGRDHJ}7HV_bm67B.07($&'#%" #!" " !#!(GCEQPV]Vg=BTBI[}vTReaap<?DPNWBEF()0+*034?.08.6:ĸӹ׷̰#1@%!)&+1xxu{{{g`Z\]d(*-7CG;DDfkk-*)0.78>:~fC{E,K{XJFO>>KSR_=<C+#!/#$0$%>40rf_+#& '"3**/$#1% &!!$(##+&&(#')$(&!%sc`{zwrʿ/,+% ",(&Ķumi:55'#%$"%RU`DGSugd@JX\_jCCN.1<*&(&"$#!$ "" " " ).4QUd!)3@GSlnuNQ]lnuwmpDGRa_h>AB'&-+*178C7:?&,6͹Ĩz..A!#+957|v÷A56'#%`^YpqrJSSUZZNdǜ\HQ53G0;5.(}ySOW77DTS`[Za*" + /#$=3/wpĵ+#& )!$4++1&%<0+.))&!!#*%%'"&! TDAc`[1.-(#%-)'ŷ^VR<77'#%@CN;>J_QNBMXSW_^WWzzOOZ-0;$ "%!##!$ "" #!&"$!+#!31,]NNOSb+3=@GS\^eILXRT[cY\:=H~a_hILM/.5/.5<=H=@E.4>}r03>#&'}J<=!"\^[komtqp~}w|zgki]`anHiܵUHM)",)&255@zsg}˿GDJ33@87DVU\)!2&'3'(4*&~Ŷ+#&"% .%%+ 6*%y)$$% &!!"E52NKF0-,&!#2.,ĶUMI:55&"$#&1BEQRDA<HQV[aFFQ8;F'#%'#%%!#&"$-)+#!($&m`U{k{pcXSWf-5?ELXZ\c}ttEHTOQX`VYDGRtr{EHI43:,+234?8;@$*4}wpd]B;5{{h`˿A?A83.f[Z><9*,*646 #678txvjmrhfcpuqTVSTUO[QG^RS41%,(&D;BznewɼA?A11>DDQHGN0*(*3'(7.(*"%# &!-$$.&$6-'nicϾ+&&% $(##0&"CA:4//'"$842I?;B=?&"$ #&1BCN4($ƹ<HQV]cPP[=@K&!#'#%)%'VRTgbdSOQ#"+')*&$GGDgX\X`jMV]HO[UZ`tkkCFRT[aF>A@FPpstihoGJK46;-,269D/27.4>k_Z\WQhicnjb}kgòѿva_$#)?7;&$!gljQU]qpo~|wWYVPQKSQIgXSl`a1*193;<8A{~unMFM;=LIKZ:6?0(+,%%/*%/*$.%%$)""*##(!!'$d[U³-%#&$*##### !(!+$ {{p4--$!=53UIEJDH)#'" '-/4@:2ɸKTbDIU\Ua:;F-'+0*.;66{|!%" #+-*7.. WaeKW^IP\S[_mhh@CO?KT424<AMJGF`abCHMPKO-13--0AEM;@E)1;ZRPV]c.7>;=B.''1((*%' )LGIyglhltxcv~GEBZUPȾqb\wji5-1?8?C=Eg`ZngamfnCDUVWhGBN-%(-&&+&!61+lh`ɽ¿+""$&-&&*##-'%JB>* ˿+""$"+$$%#"".&) !βsrgé6//# ?75pd`e_c)#'#! '=?DEBAAJXTYewp|FGR(#%*%'~}% &*"%tsZ\ZĽMU_BLZIN`GNTqllLO[9EN9>J=>?WY\=?F('-$$'BFNAFK19CWiw7Mc'<U0E]H\p!/"&%$PEJ0'.momnvzVhHQbPZKLLISNNȻzlcro*!!A9=IBIjc]gb]OGEĿa\`9<GcfrC@F.''+$$.)$(#sog+""!#*##+$$3**!$-$$%' (!!("!#)%-ʭspḛ6//$!0(&xrbxtlfj("&& $$>@E<98LUcDIU~|GHS,(*/((wt/)-+#!QIL˿XagKW`?FTGOSRMMSVbCOX=BN#%/16OOX&'.:@B((+JNV27<19C}us4CP';OATl1?Vabs#&.%%(!!`X\2*.¾OSQ=BBs{}:KYa`fY\PPNGc[QƷi]Twt,##3+.E?Chc^1-+%Z`bbcd+&&.''-%!+&!a]U¿) "$+$$/((.%%"OMH-$$#+$$-&&!UXc $Q70_ǫrj`ǭ8//$!*" ]VHvje}("& ">?F987CMXEKU~vtYTTȹOR]%#%,''$-&&1&+BIIbZXLXWEQVAHTLTXB?>FIUBLVkik8=I*17HHQIKRAGI**-<@H,1606>{us#%*!'SVb)$0"!" $""'%ZYXmecLSS2>=^afqxl~~slǻ\QJ1),85;D=E&!! .,.<BDfrvoqx/**1&%+ $ [YRB93¿0(&"%0))(!!*##/)!{ɽ+$$"(##)$$+")Xb_ )X<<gbRItql>55#!#( #>86;4.g[\+$$#<@H<:<ǹHPZIP^OGK"!'PE>{BBO' ž1(('#%6<>LPRXTV5:6"++HQXFO]PQ\RP`7AK_`a69E(+7?AIFHOEHMHNP)),IIR18>157KIF% ""(#% #!%()BGGpvrRXT9>CĻE;7zliԾ-&&?=@6/6<;:phl''4BHXfdt% .#"-"!%!%# -&&")""/((-&&0*"~+$$"% -((+""_d^^esZZe­G90a_ZD;;" ".+*2.,wor-&&!"'AGQGGJRZdDL`+ SLFe_g)$0*"&8)-yjj+""'#%/27NQV77: KQY@GSGHSECS7AK"#$854,/;=@LBDLLNUKNSBHJ%%(AAJ/3;69>IKI!/((8//B==HFHjeeZPLsmkhgfOTR>FCNRPDz+#&!0*(A@?613EKMDHF,*:DE\qm}+#&-"!0%$ȿ'"$"!' +$$.''-'rþ(!! &!!&!!&$!\`^gljdcb"7-#=;6aXX#!#(#%63.{uLD@*## !"=DP=>EYMIDLV@HX.)/JFHxr!!,52>(#%1'*,##&"$79@NPWNNQ %@CHLPX;AKNPXjlo;9I)3=GHIolk%(436B>@H\^eKNS4:<FFO,/;.07145KJP~wd\?BCoqo#{n% >;:D??7AEDIE|~?<H>@UXR`.''-!"-"!*% gb]˿*%'!' 2++,%%,( |pǻ)""!#.))((%`beekgddg"®?4-{rfg)%'0($RJ@zqcZOH1,,,*39CM)*1vv& JMXEHS|{^XV( LOZ:<D+&(,##&"$56=VX` ")#JLS@AHfgrFITnpsECS(0:hjm:8;%(4&)5@BJVX_CEJ7=?--0iem?@G01<57>FJL/16~rnѹub\XNX(!+ !E>8NFBMMJ}|{*"A;9}l^{ka$#A97B:8/8>256{ylg65<ORdLHX+#&+!$/#$,!*$xpf2(+ !/&&.#".%%'#!kj_(!!!#,(&,##bcdbkkade %wxyĽ( &[QGe\Nb^V+*)&&8AH'&-0*.&(&{sq?;D5;KTU\OQTEKSLR\:9@+#&-"'%#0/5NOV$&.loz]^iV_eUQY75E@JY7<<-+&?@K'/?/6D16B-(DFN<>C558<?D%$**'-?AF48@68?8:?&&)ŭ>7?%')""C?AhjmS]a1!I=9vaUmc"!6.,?75$&-$"$}yqma\2.6V[mIIX1,.(!0$%3(!.( me[ɾ3), !0''/$#/&&!_^S' # *&$-$$YZ[Zccilm#77:C@;*"%)#!ULENG;mkdƹ.-,  )%.PL\..7D?9l`\839IP^EN\AFLBHR>EQ@DL%)#$"65;UW^+19^fp_`k]flYU]/-=8BL9=;$+1(=&-A"."'0689<A7:?*)/"%:<A+/724;/1677:ƭ|̿;4;!(&!'Z\_9=?yy."?82dQEvf\@860(&)%-%#%hh_[RL0*2NQcFHW0+-+!$4()0%("{ƻ.$',##-"!,##&" :9._VP&(## -$$STU^ggbef #8+*ZTRqkc& $&#"YRLC=3vto˾)('!! %9>J@BEx #Z\dHO[MWeAEMCFRLVdMU_ !"/)')#$"*,1IPVKT[KU_PQ\\ekA?O)/9"%+5@&.>-! &NRP5:898>ADI#528!#((,4%'.<>C>>A{˺nú3-1'"$ƽOW[agiå&94.WJ=qcZ2))&(!)KLEQHAȶ('aduEHT833' 3'*3(!+%ne^2))!+""1&%*!!'!*( ?82  '""%!*##OPQ]ffade#"n]W\PGpf['"&$ "ID?2-'sqn,)(#!!%#/6:<:j]X# DIUCJVAISCMXOR]KP\KUdLWb!$%-(#D63' & $..1<CIGPWcgoT]d.+154A5:F(97G*2B ( #g[V||79>NQV"*'-68=#+-2835:??BzgֻpXŭ1***##Ǻ49R??TPD]YSg`\lkgw{frv{(80.H>4fZU+#&#!+%)" >;6C70ʵ.&*MNYgdp1)%/#$*$+"%lc\6---$$-"!-$$%!+*#)!$&($"?A?`iicgi !`PF9-&_UK&!&502.,.a]_Ǿ.%%# !""67>MQY>DN.2:IOYBIUEN\@JUFP[>HSIS^!#()!jZWxw"$"$(##49?BHRINZMKM8:B!+:8CT(1B()$(XSG~][X9<AKNS!#(-/4-/4*.6+068;@?ADk_PcRD/#& !"&!#gryGHO#/((@70`VR&! $"-+(#³953BGLlpr6.,."#1%(3*$$1(!900!*!!0%$/&&%&!(*&$EGEcll`df %xnPB9+E;1uid)!$&"/(/!QKI) ! !")*1<@HFLV-19Z`j?FRIR`MWbCMXBLWQ[f!#(*" J<3~}$!! PGGBDIEKSg_]rmm=BN/-/?AIERe,6E((1QHHd[TWXQhmi249OQV!#(027+-2!#+-/6:<A669d[Tsi~ne|qj. !% #!#(#%ŸW]_2--")$&2+%WMI% $%&1/,Yae8034()/$#1("B92SHA+"""*!!*+#!%% +""+'%*,*gppimo%|lcZNG1&%D;4\PKµ,$'&$#!)'$|uond`!#@DLQWa"&.LR\?FRGP^=GREOZDNYIS^'%.)XLE{u'#%#"!"paaAFL]XS<AM/-/:<DEN\*+2`ZX[VPzBJFS[Wprp67>NOV(*/:<A,.3 ( !(;:@$"%B:6PED!%!#" #!&"$ltvRMO!! *% JB@$ ($&SLL202ahnJOU/'+3('.$ /%!.( ?7-)$&+""1&%) ( #!%*%%8:8irrcgi!nbYaUP0'';7/7.'ǹ1),% ";61{iYO
+) *%'425$%,IMUV\fDJTOT`:AMBKYSZfCMXFQ\NWe"',"%ukg&"$ !! >AF`[V5;C003KOW%cZZ~ee\<JI+74OTP@BGRUZ":9?*,1#$+''0CAD+')%!#922*(+!! (##)$$spo]ei/)-| 946#sniPC>RJH)')DLNCHM0+-*##&)""# %%#"+$$,$"'"$'"&$ "$ "*"%-+-hqq]dd!VOCrda"!8>:#ķ/'*# }us#%"!$(!!!%!!!*GHSNQ]MScFN^EM]:BR[_nOYgGVcOXf'&-$# $#&$&EDJZRN99<opwPPYehi|xtd\XGMI7BC*564;;IOQ%$*2/5!#('-/#$/:<9+(.!!".+*}lv-(*YPJ8/)4.,A<>E@B" #AIMV[a(#%+$$&,%%&.&$&% "% )$$&!!&!!'"&$&gppcjj!NG;oa^@EEgb\&$ "!"!$!" "*9;C?EOJQ]BKY:CQFO]V_m?LYHUbIT_MWa76<(#'  y|)!$CEJWRMHBF\TW}{tILF?DB9GF.779BB.557=?98>1385;=*+6PNK%&-700'!% gjdyvqθn]g! $(C>>=<;C=A!IPVNRZ604)""+$$*## #4,*&)""$(!!)#!)#!)#!,&$*"%.,.bkkell #;4(xu_]XZXQ#"!# "# )""%!)$&..4<;CM<FQBLWJT_DNYGQ\>HVAHT^^gA?B"!)$(% $OCF(CEJec^`Z^xMOM8AA8GG/9=EJJ099ALM?GK#"(35:,4612=]YWJAHdig]ddfe^ZIS!%#<77EB=MS[HKV?9=' "(!!%2*()!0(&*" ,$"( /'#.&"*"*###!#Zcccjj%"(0)504upjEB7#
+"!'!#%%!)46>4:BCKU=GR5?I@JTOYc8BL1;I>>M;6:&!%! RCG2#'"
+[]b\ZUqvva\`~pLQK:???GI!/2QV\6<8CKM:FJ:BF$68=.68/0;]YW]KM_`Y]\UX]]Vbaong \ No newline at end of file
diff --git a/Lib/test/test.rawimg.rev b/Lib/test/test.rawimg.rev
new file mode 100644
index 0000000..6565c8a
--- /dev/null
+++ b/Lib/test/test.rawimg.rev
@@ -0,0 +1,82 @@
+ZIS!%#<77EB=MS[HKV?9=' "(!!%2*()!0(&*" ,$"( /'#.&"*"*###!#Zcccjj%"(0)504upjEB7#
+"!'!#%%!)46>4:BCKU=GR5?I@JTOYc8BL1;I>>M;6:&!%! RCG2#'"
+[]b\ZUqvva\`~pLQK:???GI!/2QV\6<8CKM:FJ:BF$68=.68/0;]YW]KM_`Y]\UX]]Vbaongn]g! $(C>>=<;C=A!IPVNRZ604)""+$$*## #4,*&)""$(!!)#!)#!)#!,&$*"%.,.bkkell #;4(xu_]XZXQ#"!# "# )""%!)$&..4<;CM<FQBLWJT_DNYGQ\>HVAHT^^gA?B"!)$(% $OCF(CEJec^`Z^xMOM8AA8GG/9=EJJ099ALM?GK#"(35:,4612=]YWJAHdig]ddfe^}lv-(*YPJ8/)4.,A<>E@B" #AIMV[a(#%+$$&,%%&.&$&% "% )$$&!!&!!'"&$&gppcjj!NG;oa^@EEgb\&$ "!"!$!" "*9;C?EOJQ]BKY:CQFO]V_m?LYHUbIT_MWa76<(#'  y|)!$CEJWRMHBF\TW}{tILF?DB9GF.779BB.557=?98>1385;=*+6PNK%&-700'!% gjdyvqθ| 946#sniPC>RJH)')DLNCHM0+-*##&)""# %%#"+$$,$"'"$'"&$ "$ "*"%-+-hqq]dd!VOCrda"!8>:#ķ/'*# }us#%"!$(!!!%!!!*GHSNQ]MScFN^EM]:BR[_nOYgGVcOXf'&-$# $#&$&EDJZRN99<opwPPYehi|xtd\XGMI7BC*564;;IOQ%$*2/5!#('-/#$/:<9+(.!!".+*!! *% JB@$ ($&SLL202ahnJOU/'+3('.$ /%!.( ?7-)$&+""1&%) ( #!%*%%8:8irrcgi!nbYaUP0'';7/7.'ǹ1),% ";61{iYO
+) *%'425$%,IMUV\fDJTOT`:AMBKYSZfCMXFQ\NWe"',"%ukg&"$ !! >AF`[V5;C003KOW%cZZ~ee\<JI+74OTP@BGRUZ":9?*,1#$+''0CAD+')%!#922*(+!! (##)$$spo]ei/)-")$&2+%WMI% $%&1/,Yae8034()/$#1("B92SHA+"""*!!*+#!%% +""+'%*,*gppimo%|lcZNG1&%D;4\PKµ,$'&$#!)'$|uond`!#@DLQWa"&.LR\?FRGP^=GREOZDNYIS^'%.)XLE{u'#%#"!"paaAFL]XS<AM/-/:<DEN\*+2`ZX[VPzBJFS[Wprp67>NOV(*/:<A,.3 ( !(;:@$"%B:6PED!%!#" #!&"$ltvRMO#/((@70`VR&! $"-+(#³953BGLlpr6.,."#1%(3*$$1(!900!*!!0%$/&&%&!(*&$EGEcll`df %xnPB9+E;1uid)!$&"/(/!QKI) ! !")*1<@HFLV-19Z`j?FRIR`MWbCMXBLWQ[f!#(*" J<3~}$!! PGGBDIEKSg_]rmm=BN/-/?AIERe,6E((1QHHd[TWXQhmi249OQV!#(027+-2!#+-/6:<A669d[Tsi~ne|qj. !% #!#(#%ŸW]_2--(80.H>4fZU+#&#!+%)" >;6C70ʵ.&*MNYgdp1)%/#$*$+"%lc\6---$$-"!-$$%!+*#)!$&($"?A?`iicgi !`PF9-&_UK&!&502.,.a]_Ǿ.%%# !""67>MQY>DN.2:IOYBIUEN\@JUFP[>HSIS^!#()!jZWxw"$"$(##49?BHRINZMKM8:B!+:8CT(1B()$(XSG~][X9<AKNS!#(-/4-/4*.6+068;@?ADk_PcRD/#& !"&!#gryGHO&94.WJ=qcZ2))&(!)KLEQHAȶ('aduEHT833' 3'*3(!+%ne^2))!+""1&%*!!'!*( ?82  '""%!*##OPQ]ffade#"n]W\PGpf['"&$ "ID?2-'sqn,)(#!!%#/6:<:j]X# DIUCJVAISCMXOR]KP\KUdLWb!$%-(#D63' & $..1<CIGPWcgoT]d.+154A5:F(97G*2B ( #g[V||79>NQV"*'-68=#+-2835:??BzgֻpXŭ1***##Ǻ49R??TPD]YSg`\lkgw{frv{."?82dQEvf\@860(&)%-%#%hh_[RL0*2NQcFHW0+-+!$4()0%("{ƻ.$',##-"!,##&" :9._VP&(## -$$STU^ggbef #8+*ZTRqkc& $&#"YRLC=3vto˾)('!! %9>J@BEx #Z\dHO[MWeAEMCFRLVdMU_ !"/)')#$"*,1IPVKT[KU_PQ\\ekA?O)/9"%+5@&.>-! &NRP5:898>ADI#528!#((,4%'.<>C>>A{˺nú3-1'"$ƽOW[agiå1!I=9vaUmc"!6.,?75$&-$"$}yqma\2.6V[mIIX1,.(!0$%3(!.( me[ɾ3), !0''/$#/&&!_^S' # *&$-$$YZ[Zccilm#77:C@;*"%)#!ULENG;mkdƹ.-,  )%.PL\..7D?9l`\839IP^EN\AFLBHR>EQ@DL%)#$"65;UW^+19^fp_`k]flYU]/-=8BL9=;$+1(=&-A"."'0689<A7:?*)/"%:<A+/724;/1677:ƭ|̿;4;!(&!'Z\_9=?yy*"A;9}l^{ka$#A97B:8/8>256{ylg65<ORdLHX+#&+!$/#$,!*$xpf2(+ !/&&.#".%%'#!kj_(!!!#,(&,##bcdbkkade %wxyĽ( &[QGe\Nb^V+*)&&8AH'&-0*.&(&{sq?;D5;KTU\OQTEKSLR\:9@+#&-"'%#0/5NOV$&.loz]^iV_eUQY75E@JY7<<-+&?@K'/?/6D16B-(DFN<>C558<?D%$**'-?AF48@68?8:?&&)ŭ>7?%')""C?AhjmS]a#{n% >;:D??7AEDIE|~?<H>@UXR`.''-!"-"!*% gb]˿*%'!' 2++,%%,( |pǻ)""!#.))((%`beekgddg"®?4-{rfg)%'0($RJ@zqcZOH1,,,*39CM)*1vv& JMXEHS|{^XV( LOZ:<D+&(,##&"$56=VX` ")#JLS@AHfgrFITnpsECS(0:hjm:8;%(4&)5@BJVX_CEJ7=?--0iem?@G01<57>FJL/16~rnѹub\XNX(!+ !E>8NFBMMJ}|{+#&!0*(A@?613EKMDHF,*:DE\qm}+#&-"!0%$ȿ'"$"!' +$$.''-'rþ(!! &!!&!!&$!\`^gljdcb"7-#=;6aXX#!#(#%63.{uLD@*## !"=DP=>EYMIDLV@HX.)/JFHxr!!,52>(#%1'*,##&"$79@NPWNNQ %@CHLPX;AKNPXjlo;9I)3=GHIolk%(436B>@H\^eKNS4:<FFO,/;.07145KJP~wd\?BCoqoĻE;7zliԾ-&&?=@6/6<;:phl''4BHXfdt% .#"-"!%!%# -&&")""/((-&&0*"~+$$"% -((+""_d^^esZZe­G90a_ZD;;" ".+*2.,wor-&&!"'AGQGGJRZdDL`+ SLFe_g)$0*"&8)-yjj+""'#%/27NQV77: KQY@GSGHSECS7AK"#$854,/;=@LBDLLNUKNSBHJ%%(AAJ/3;69>IKI!/((8//B==HFHjeeZPLsmkhgfOTR>FCNRPDzǻ\QJ1),85;D=E&!! .,.<BDfrvoqx/**1&%+ $ [YRB93¿0(&"%0))(!!*##/)!{ɽ+$$"(##)$$+")Xb_ )X<<gbRItql>55#!#( #>86;4.g[\+$$#<@H<:<ǹHPZIP^OGK"!'PE>{BBO' ž1(('#%6<>LPRXTV5:6"++HQXFO]PQ\RP`7AK_`a69E(+7?AIFHOEHMHNP)),IIR18>157KIF% ""(#% #!%()BGGpvrRXT9>CƷi]Twt,##3+.E?Chc^1-+%Z`bbcd+&&.''-%!+&!a]U¿) "$+$$/((.%%"OMH-$$#+$$-&&!UXc $Q70_ǫrj`ǭ8//$!*" ]VHvje}("& ">?F987CMXEKU~vtYTTȹOR]%#%,''$-&&1&+BIIbZXLXWEQVAHTLTXB?>FIUBLVkik8=I*17HHQIKRAGI**-<@H,1606>{us#%*!'SVb)$0"!" $""'%ZYXmecLSS2>=^afqxl~~slȻzlcro*!!A9=IBIjc]gb]OGEĿa\`9<GcfrC@F.''+$$.)$(#sog+""!#*##+$$3**!$-$$%' (!!("!#)%-ʭspḛ6//$!0(&xrbxtlfj("&& $$>@E<98LUcDIU~|GHS,(*/((wt/)-+#!QIL˿XagKW`?FTGOSRMMSVbCOX=BN#%/16OOX&'.:@B((+JNV27<19C}us4CP';OATl1?Vabs#&.%%(!!`X\2*.¾OSQ=BBs{}:KYa`fY\PPNGc[QȾqb\wji5-1?8?C=Eg`ZngamfnCDUVWhGBN-%(-&&+&!61+lh`ɽ¿+""$&-&&*##-'%JB>* ˿+""$"+$$%#"".&) !βsrgé6//# ?75pd`e_c)#'#! '=?DEBAAJXTYewp|FGR(#%*%'~}% &*"%tsZ\ZĽMU_BLZIN`GNTqllLO[9EN9>J=>?WY\=?F('-$$'BFNAFK19CWiw7Mc'<U0E]H\p!/"&%$PEJ0'.momnvzVhHQbPZKLLISNNgXSl`a1*193;<8A{~unMFM;=LIKZ:6?0(+,%%/*%/*$.%%$)""*##(!!'$d[U³-%#&$*##### !(!+$ {{p4--$!=53UIEJDH)#'" '-/4@:2ɸKTbDIU\Ua:;F-'+0*.;66{|!%" #+-*7.. WaeKW^IP\S[_mhh@CO?KT424<AMJGF`abCHMPKO-13--0AEM;@E)1;ZRPV]c.7>;=B.''1((*%' )LGIyglhltxcv~GEBZUP[QG^RS41%,(&D;BznewɼA?A11>DDQHGN0*(*3'(7.(*"%# &!-$$.&$6-'nicϾ+&&% $(##0&"CA:4//'"$842I?;B=?&"$ #&1BCN4($ƹ<HQV]cPP[=@K&!#'#%)%'VRTgbdSOQ#"+')*&$GGDgX\X`jMV]HO[UZ`tkkCFRT[aF>A@FPpstihoGJK46;-,269D/27.4>k_Z\WQhicnjb}kgòѿva_$#)?7;&$!gljQU]qpo~|wWYVPQKSQInHiܵUHM)",)&255@zsg}˿GDJ33@87DVU\)!2&'3'(4*&~Ŷ+#&"% .%%+ 6*%y)$$% &!!"E52NKF0-,&!#2.,ĶUMI:55&"$#&1BEQRDA<HQV[aFFQ8;F'#%'#%%!#&"$-)+#!($&m`U{k{pcXSWf-5?ELXZ\c}ttEHTOQX`VYDGRtr{EHI43:,+234?8;@$*4}wpd]B;5{{h`˿A?A83.f[Z><9*,*646 #678txvjmrhfcpuqTVSTUONdǜ\HQ53G0;5.(}ySOW77DTS`[Za*" + /#$=3/wpĵ+#& )!$4++1&%<0+.))&!!#*%%'"&! TDAc`[1.-(#%-)'ŷ^VR<77'#%@CN;>J_QNBMXSW_^WWzzOOZ-0;$ "%!##!$ "" #!&"$!+#!31,]NNOSb+3=@GS\^eILXRT[cY\:=H~a_hILM/.5/.5<=H=@E.4>}r03>#&'}J<=!"\^[komtqp~}w|zgki]`a-*)0.78>:~fC{E,K{XJFO>>KSR_=<C+#!/#$0$%>40rf_+#& '"3**/$#1% &!!$(##+&&(#')$(&!%sc`{zwrʿ/,+% ",(&Ķumi:55'#%$"%RU`DGSugd@JX\_jCCN.1<*&(&"$#!$ "" " " ).4QUd!)3@GSlnuNQ]lnuwmpDGRa_h>AB'&-+*178C7:?&,6͹Ĩz..A!#+957|v÷A56'#%`^YpqrJSSUZZ.E2LoWuz(?, ,+1:37D9(4=?BT;;D<@OKIYFBJ.$'-#&'0*(c\V&#"!' .%%."#1$#DE?̻(##% $&!!.''+)+:??o_Vol-*)#$%>99#!# &DGRDHJ}7HV_bm67B.07($&'#%" #!" " !#!(GCEQPV]Vg=BTBI[}vTReaap<?DPNWBEF()0+*034?.08.6:ĸӹ׷̰#1@%!)&+1xxu{{{g`Z\]d(*-7CG;DDfkk>H76B3/@0LcP9TC )>_M3N=<ZJKGO45@-*6C>@&%' '#!NOH&"' ,##."#2%${{xȷ(##% '"")$$.&$=?=]dd{pehYY30/'""!"3..%!#$ (9<G9>>c]k8IVCGO==J ")(#%&"$%!#" " " " " #QPO<ELIOQ;GL@HRxzFGN(.8%3LUUyz{9>JOKTBEF/07)),<>F78C/7;wrlɾ5HT& (:BL.38hijB=A54;RLJ]XX:5;!(.CEH#%>C79B5-:-#."B-iIDJ@>G5/7@99."#%+$$%! $þpp2$%$' 3**-!"0#")$$$-((0++6.,ege_ff#"vlaj]\/,+&!!+*#Ⱥ1.-#!03><CCnhvIVaVW^??L ")% "#!#!  !" +#!IKNFR[ZelDOZ9CN*1?21N0'c4*o?6|[QIe_A=]9AKXT]LOP027012IKI02912='/3÷~qlrnwngԽ'3%'7@N9?G!#&0,4!$/LHJxjavkdF=D#$+><?'+3;IX'+3663B@=?;9,-'-3/Ya]89@-0<:7Didh,"%.$'&&" =<5l[[&!' /&&-!"5(')$$$(##*%%80.egebii"!ò|vigb)&%% 83-854$ " $25@>EE³̿qjvGS\^]cEER!$!&"$#!  !" 5'(KFLU`kQ[eGM]((7`]orn#"9
+
+
+ :,'Q94V!(YU^BEF+-08:857425:01<(04ƺvɰw{qg 3?!#/5?bfh%'%1,.! 'NFDyl}vKDK#%,558̼)*1&$""-%*6<DN %$*+*096<=9B;;JJJYSPV+#!8,-*!+$YNM*&( *##*##(!!0&"( #'"*##+%#/)'mno`ej&!#ǻŹȻ(%+%#&F85410$ ""7:EFNRf^a{y{z}~u{}hekINZ!(" &&!!! !!!F77A;CGO_V[gLNU
+ +2!'
+!'
+!" &' "DBKGHI,.1LNL %*<AG).3HCGxkvti׻.8,%,&1<)&%604)#+G?;{IDJ"%0##&%#!!!$"(0-0;%$*.-4UQYB;E;;JSS`SNT0(&!, !NE?F><("&#)""%)""3)%( #'"(!!,&$0,*__b]bg% "eXS÷(#%*"%WHH/.-$ ""&7:E=@AUZT535`Y`<AM"bZXUOM#!!!XMLHIPFSdAHV'0=+-vZWZ=<unaWb_+7)&BDLIJK!,-.?BG05;,17$',vltwoeս*8,%/#0=,(*<7=/(2@86ys}~_[c&)5;:@25: (#*$,SLV@@OAANPKQ,"%+"LA@7,+XML4--$!&+$$+$$(!!2($y{#% +$$-'%-)'``cSX]'"$$#"WPP, 202%!##69D>?9ɿQOG<868=I!2*(71/B==!%  #zrp<>EGWg;ES9BB2iV 
+1+A%?CKIGI %.-313:.2:05;%(-0.1!{r{qme˶)7&(%5ǿ-(*D?E-)1811}ffo*->EAIĽGKM'3<-00=*&$'.'/G@J==L66COJP*')!-#/#$" "*"%' )""+$$)""4*&ef`oq% % ,%%*$"+'%__bY^cȼ%# &" hcg(ĸ543#!7:EMPJe_Uh`\ż<AM%$+>64YSQlgg!qgc+ %#$107AL]9=L<HM 'fc96f, 3WWRRy% .4<CAC*)0.-468@+.9&*2!$)+),:57ýt@NW.#vv803olr54;502ADEZ]h38J/+4E>F# &!(77B9:EST_&&/((3(H@CC?HCCR<9F@;A$) 2))3** %(!!0($j^Z'"$!( #1(($"^ccbfhPHF #%!!& $*"%OIG6110+/~48@dfdÿ?PV$$wxy]SVE95#"yy/1924<-5E:EV#%8jdQN88qJ-/)?$"!!$+.3,.369>,.5#(.!&%'*313wtnljl{u'%(/*.410 &(_ff,4>27I00;2*4% $%# &+'(/e^^75>00?D>LB;B-&&%%"0*."+$$+$$611% ~ruaY\$#! +#&/&&'&%]a_|~/%( " #!TROOJN%=AIW\X#-ICQJBV<#4wnuôK@E!$lkj0+&)#'(ihoDFM'7@NFO`?BN
+
+$'GLdZ}613-(.̺G<A)')ʾDJZ8EVBL[7CR*65LJE$.B&21A?8ON[%3046*.0/35'+-).4/14+-0-19*0:!$)$(&558Ⱥƴx~JEI646SNHnnk&%$ba`XW^():$'848:HFH+-5HQ_.0?(&*9!0#WPZiknĹeenNPXFIN*%'%!##(!!!)"".''1**&*##-&&*%%'""-((+&&4//)$$% !!L?><5?CgTl
+( !!&$)# *42;)(/HGN%
+ B8;65.!83M_c?AH2'.$8B8eYZ5/3846ʾ%+;6CT@JY9ETjssspk}1@S4@?GE>VUb",:>BD9=??CE=AC<AG79<>@C04<'-7!$)%'%mkm&&)850%#%" "!!SRY./@$'86:<OMO)&,06@63?##,;<G+$,.,.?43ZRVYY\478-22&%$"% ""% ",$'$)!$+#&)$&# (#%&!#&!!!$$"'""$"#!"!2)',)/ )' $&# %33<WTZ*(+``]xzw<?@ %C@F&'Y[^Ų7'/##&˷5*/1/1¹ou;HY4>M/;Jy~~mo~2BU-;:TRKRQ^2<J268:>@:?E=?BLNQ04<%+5!$)khgÿ\^\lnq$! ;9; FDGa0$'848:4,6-'/!*,1#%,!(.)5 &!#%#&A@F'#%  
+
+  # # ##(#)"&&(,+2217 %"&%,&^^a003LLO.*, !:BD%c_]Ľ*&('!0(,0,.÷nwp?R\7=M9AUzhhw<FU<BDtlhLKX.9D"$)8:=&+09<AIHO26>45@ %*Ʒ}{{{h`|scc`JEEHEK ~iegd_c]]l#'=<=D&& "#$%'$*-*0=<C$"B2:1 &!& MGK*$( '"$*1"&&&#$%)'0.+10-3"$)>@C*,/*,/..1TVYCEH43:1,0KFF*&(-*%ɽ-%)2-/|z@TbBWiGrG}`Xl.COnyzIHU-8C,4*MNU;=@/23',19;BJHQ25@+,7#'̽ïƮūĦĭqpoQLNYS[&!%facffu+.G22;"!##)#+$ "% &=<C& $,)(pjn("&[UY715d\`|&!#'"$3(5R $'(# '&!!#& #:<?:<?79<PKOkdk}B@Ccac+%)..+&")$&3L]fu{onYxrob(<JNMZ9DO\^U:;B379rst038<>EA?H25@+,7$.2êĪͯäɰtuv_Z^fbj% $e`buu-0I009#+0:H 2!&8, '#%513C<<617107.(,e][picLI>NKF"#!$!$!$! "##&&& ,-..03#%(&(+ (**.0--0+/1)*+//2"$CHMEJHп/&-()*)!%,')JgrrI\dnwRR_T\l>JQxNhvzhgt0;F@?F;AC,/49;BKIR+.9%(3#/3||ǼȱͲɲZ\_XU[uqy'"&]XZkkz),E44=h]b'9G\;ALe(/E,'!"-&-0+13144/3?AF68@:8;̽yncymh`[_QLP" %#NHLZTXz~0*.715".)#=EO
+"!$/ !(% %#""+$!!HIJIKI*-. &&%+8:=!!:;<& (.20¶*"&/**Wko'&,#"&.efmF]iCFR:DRCEL;>?16<;=E@>G'+3.08%-/ywлѺSV[WRX% $e`dpn~'(A35=nsy>86654979=?G!, #!2++502;79;:9336--679A*(+j]\ZOHvndy\VZ'!%& $" 3$$$'NGA8CN$'),7136$$/(!!,' %(-3<:=?=:=;6=;6?=81/1)&,53..&*1,,XfiNNK{}zWXY+-0)378GL@DS9CQ>CIFIJ18>BEJ>=D),757?(02CC@AGCZZWOQNX]Y[]ZпJMRjek&!%jeiuq)*C24<(#' 31,731A=;OJEUPJFA;A>9FDA<:<*)023>86?2++vphid_ 
+pkoA;?YSW%#icgec\{x?P^# 1"%# -+4--8++6%%0 !,&'2(([]`#"($"63.FC>B?:><9??<CC@$"$!?D@gd_''*=5+'#4//KUY'()mleKOGbc\*+%_d`QYV?CR<FTAFL@CD8AAAFFJIP14?(*2$,.øC?=;96NHFGGDPSMIFEQTYidj&!%jgfqlpws,-F.08a`_"" 2.,JEI;7?KHTIIV95>k]^KC?ojd_[YE@D%#ICG~oimgaegaez~/*$xkcYq`Z@Se!'#!4 !(fa[*!)'*6-0<! .!)'%(0.1-,+432BA@.-,+-*x}wm\O1)-A<<2:>$jdhhe`QVPigbDA<c_]%"!<@O<FTAFL=@A0:7@FBIHN69D)*5"*,ĹĵMD=A;3RG@\RHgdSWJEDGLvqwXRZUPTojnqm}()B,.6ilm!
+504FDGPMSFGRVYdLGMƵ~   ?>3ǿH[ySPV+&J!XVG&&%,2"
+' AFFQ&(&%&VSN#!!#!$)%?DB#!SQSnlixnȴ#!ZTRý~(*1 !qea~sl:<AXVN410:8;mqs:?Q1;Iº@EK9><'+->@CFGN(+626>"#ùƴRC=B>6PH>paTvr]a[SEHM9=E639omp%!# usv,->13897:?=@JHKECF@BICEMGBHпuv /+-LHJ[UYLFJ#!1,0@;?űlhkcf3Fd#&P\XI+( #,2%1":kC>BA<@JH@,+*@@=2/.(,*iifbRIº% $g_]qsqKOQ68=_ZUbVQOMPXRVMMBKJIu~~<@U*4CDIO8=;)+2=>E@@I+.9&,4$%²u]TPF;[QCl`qf`XACJ:>FEDJ~|~#!" igj#&LLO," ! !/-07589;@?@GVQWƹ|yE6:)\XZkei]W[HBF[UYUPT
+±Rb|# #F[#^SH1++*3:,)=#Ay)!+fed""34.*'"|1&e]YXSW425~UQO7<8 ccfniiwwn;>C8CD|9=R1;J38>>CA24;BCJ77@-0;%(3#-1n`RI;bXMzn~ic[8:A8<D>=C ^Z\402mkn&&1!#2336Ǜs>j]X%J@<JEEQKO5/3& $937:DAQVP27C5CX'#!&4Z*S@8)F.1%0 99#7d =w-/4pro45/HF?˻)+)@;5}~)-/!!'"$HC=)'*~|/-0*.,gfe012 %9>D536-,+@CU1AJ04I6@O5:@<A?/1867>>>G'*5%%2"(qeSRG-,%ymhd\?AH6:BCBH" jhk%%0!#2447٣jm}\8%4.B
+
++('Żkec#% $
+
+"#$*4$!8#!.'"" uywCECZk{&*$&N+rbR4^ss|VUN"0G\bl)0F L"<{(:t]c_789tvmRPMg_[¼JHJJLQ,16-05%)+)+.!#&336149+/1 &0 ,3|}<LVqx~7=M6=KǻAFL9?;23:25:+/1+-4**3"x{}u>5/FD?xwnA@G]fm@CHpko""1%(://8ݧmʠrƗ]z9"35+$B(!3 )%#½?=:979aZZ685'%"/**ӽF:64GY4N\;>I8V"}%;bCEL:??1T 4 2N8m'L,@z$ "wznvtqǾ`[_RMO!&+$-13268'+-%&'87=FKQ/4: $"!$!.;0@P9;CMWf{{~6?Mø8=C9><79A:?D!!05; #(,*-)!$ICK|JFHysw''4#(:,,7qΣsݣ^ڧkk( 63.94/1)'0+&˽9>>!' %17/GKB34.)%'' |þ<DT-AU;EZ'Al . 1U[]d$3Z#0I,M'V,Y1M@8;x~{Ƽy}ƽɽD@B!#') 1/195761789@79@"&//"!'*7->V1>Q%*/(7EOdw~0:H9?IABC04<5=A$$,39 -21=A faesnp &6..7٥lͦ|ڤaʡ`ŕ^c
+
+|NK@478 %,02!%'##051DIC22/('.nelnZV1("-',(*-$*!50+("(L(F&M$ ĿĿYLK(,."''"#$$/6672,9;2{w. 
+/@N5EU7Ka2Gc.C_1F^1BY4<F:7=/7;)-!*1#14#01025+%)Ϲhbj~{mgkzw#$5()0)')מdΠs֝[͝jʙd̛f͜g^`??#!VPHjdh?@98:=#-1368;'-/)13-22575EDC./0 *,/SNTyqt3.4-/7nt~mor /L!<$L|ww#!};36%#&!!#&)-/(*1NQVнLC=CD=SWN|icaZZ]<DN7DU7G[1BY:I\3<C*02!')6:<''*28:3?C+28.:>,78!#(,.xszv~}|'&7%%.ljlŌReϖT“]əbȘaŕ^ʗVși`E &" !(OOLü/35 "#') #)+08:(//+./;<6FIC)00#'#/#&1639Ʊ%/)1fho)!W$;#L_X_hWg"':AAɽ:76!'"&$ " #qgjtpnμ.( /2%ǽ|}]\[NQV9AK5?J9>D)1./73>C?<>;#"!.33'/1).3!#!')')+89bdgrpsmknhfi`dfX^`TZ\PVXQRSONUffuxt}z%$588Alnqԛa̞qC“]Vĕ[WWWRlE-
+\SS``W+13-28>@E%)+&(+-35"*,$,.,02)+0439!" #+-&.2+0684663@%T3+SWPW'#txz}fYT('&EB={u><5[ZSA<7
+ļPNG@D;ZTLJC=,-&xj~aYO/-*8;@acfbe_STM21*LJC.,)242#** !$-/2}}}w*&(aaj2.6zu*):))2LQV̝mʚg˜eÔZƔ[WXW\VS}KF/aca''$ "'),'+-)+.(*/ %"$#((,1128:+05=CK(=Z]f]e>Q-L|PDGNLU(/~uoRONB=?*(!~wrlƾ^^Qzr" yx20(65.#$qe\unbkfZyth ">=603-MSOgegbb_FKE).."))*-2Ŀν[`ZXY`+-01,0624wuw$"2%-35ja\U_YWY[TSWVy^ʻ,-.(*-'),&(+%'*!#"$%'!')#)+)/1,;: ") .G:Il)9eS_N<8217")ukg}xxwurƾ~wqȿoof# wuONG:6.}{t10)MLExvnyowrf~zk{tflf\PLJSKG! .)-<<9PSM478#!"PDYE>H`^Y.#(#&'(,*'%5'(/486B.&7+$4+%<-'E608+ D8)N=0UB6YH8k[Hv\NgLnQ|u79>#)+#+-,24'-/%+-"(* "#)+#%(!#!##%')"*,%-/)=.ho{'#3&- )A%3J!2=8>C?=plj˾ɿ'$#(+0XSUzuu# NNQ|vwq*&(hd\<71SNH64-2.&zwk{yjyi|vf<:3495 $"" "(&('&%(&!750$ JGF=B>#'6\^slc]JEE3<<FKI,()0WFF%!)% ! !2(+IRR5=A5=?1<=/79*24'/1')#%!#!# $&!!#%&)*!,-!,-.5)7Ie)",N+4E " #!&"%&#&'(--053256439<8A>69XSN~zGDJyttлzvĸ&!#PNQ46;_]_+')aYW65.Žgf_?:4ú970lf^::/ttgigX{iwo[tpa.)$  71!;7!44!64,$"$$"$!!!$
+07.cE8kQLd%>AF -1/{y*+2Ŀrh^]VIGD" )-+046*24+89*63/<=*6;+37)22)54$0/$0/*24*24 (*#$"$ &((.0&,.,,#;].7p'3R'%($#$#"(&)##$##,# ((#'&%+,(03,3.)-758Ǹƾ^YY¾GHI2*($$'}w"$ƾH<50/(7;3??4DE8qqdfgZſ¿') 
+ ++2514/3.0-234123123*)(NLO;fa\?#"?[[n3829=5 %+(4edjƴ><E$(0%**575jee]\[IOK+67.:?.6:*33*65&21".-&12"-."-.#./ #%%' (*/1($@[ /! ;q$-K#"970JH@LGG.-Q7c)@j)DZTX(%+ '$"$(&#CCFkfjľQNMſļ--03('TTKjj_6;/A?8A?8TTK;>2VYMRUINMBǾֿH??0-,'#%-((NIK ?< ?)&Cbcn:;<&&)$#*,,/μ)+LIH "GLL=?=н9@@/;?(02,55)54(43'32$/0#./#./"-.&12+67*56'23,6-5EY'!$-H~*4O##&,(*/-&XWLcbW\XV
+' &Q:|D'9_+&(#$1/(97:RONý%%([SQ981"'}r9<0]XRymhDD;RUIJMAEH<aaVƸʿ %"!/-*513C?A&!!XSSupr;,ZA2-:'%F20@&%+''*()*ͼ &!CA>%$#~! !:??575?A?/:;.:9-98-98.:9/;:-89.9:4?@2=>.;</<=&34 -..$!%4*)08:%=t(3L !)&%))&JMG:>6678!0;g<@*=gC87'%(+& 3.)+&*ɿNKJ((+9=5+2&C=3][TB;5__VIL@`cWUXLIL@÷Թӽ_]Z&$;?=,/0;>?7:;9=;^`^_`aKKN*--1795K329DFDCEC$$!4)(C87DFD084ù# "# #""%%)+%+-&,.*02,0228:%23&12*/-*1%0)%'.$?u)1K$"$'()GGDTUORUO&(+$@Co2|&G#>m0/5+&!31.4,(,)({soJJMʿŸƼɿ,(*ztr=82zNLEe^X~DA6./(,+$^`W@D;CG>AE<X_SɯŪʲʲǰʳ;/+>:< -*)HICJKERSMRSMLHFKFF*+/4!<,%$#upp=88&JIH4<8û -.#+-(+,*/%+',.6$Aw%+E#!$&$?=6QQH]^W$DDn3z(I;k $,% KKH:0,641JLOļ2--20-HFH=;43/-@>79:4uvp'("EIA6:2DH@BF>FLDTPHʷʲɱéոC73GBH%!#B>@?75
+ %32/(4&#042-42+PUS!% upp!)&w|IQUCKMBKKJOI! -."*,#)+%,#%#%&1&B{$>'#!560GE=VVKMOF!#!,I Ku 6}&G9i!&!SSP@620.+{yvEIK4//58=##8:73/1pmlFDA('&464#%#_a^JLIAC@?A>Y[XNNKa\WȴѸѵʹTC=#!UOWxrzxq{~w  #"3.-"%  410?>3KH<86/!$+$$hbf:=>.??1BB4FD:LHJSL "/0"$"*.'" )!:u$&A*% QQF;;.XYL14( /LJt 6}*K"?oį &!ttqI?;" V\^ºRMM" $
++)+++. $%&567>?@KLM(&),11fhfPTR<>;WRMl`[slrjhPJN!"
+,&.lfn\SS"+JHAFD=NICRLDws'""$ "$
+ $"_bc4BA8FE:IE>MHCOF!!&21"))%,,,!!;t8'&%+-*4;4589/3+1601S+VD.M8Qt"|{t`TW.*(ajjľ`]\321&$&!.
+ "%-'-56;9TVSURMTPNQNT.+1"#.%,nioMDD
+|xz86800-LJC#!#(##743 "wpw$ y~|5A@9BB9C@;FABNE !".- '',41$  2k5@?>@B@+0*"64-7966Y)WF+J9Ro& ~hZ[946yyv|ƿqnm.-,
+$"$+%E1-XIbdiudiiVXU~QMKRNV~xw~||!;9</.-}IE=4-'}vv!tihnfd/'* 6=3:B>&--#&').*FPG!"#/.+30%)1h/3HHFC$$!-+#:0393+?=:$@b,WF*KD_w"~xpn&8;<}Ⱦ~yy?@A '%(%#& !
+%=!Q@4/ 9inzdiihjgRNL$#<8@FEK
+:18cZZ4/3'&%v}zu?60+&!VLAUOS5:F(%+$ aVUcYU*()"%,,&&&#*2.JVM"#'32 -52 !,0e!3!,*%<:+'"JG<#Bd,W@-NIg}$#GXe:FJsnn/.-
+X[\QTU"%& !$"%&>#QB <.:afrY^^kmjQMK,(0#2+2:18~yTKKx<86&"$SMC@:>#xzw&"*+$|/74(-+-3/SYQ"'',55 57?'$6n/&*"-0*6-&;66mpqFOO0QcP;s8Oz\hw"# S`kKlGk!BX!6B)+)Z]^>ABaY\%%(!##&((+!0!KA;fOysp}*56 +}zyGDC-(,GBHE;DC4?|aST
+ ef`kif567!TRJLDH%$* /40$$'#~y4<89?;-3/5;7]`Z!((1::--8#+!#"%--e65F782?A>382nuuOec3Yyt|~HYfGmtDT^'-/05:ÿdii\hgt{{ !"
+6#P%J7eO|~y'URQ($&0+/'#%"2%*ypwA65`VY]^X123KJCC;?$%%"EIA}x\e^fme`g_ah`dh`&--4==30<!( )a''!4KJdx|MVVRih3Xwqr}mwn!"%Oi'{"$Y[`,114@?4==LXW$'(!!CCF**- #**- !<%T'J25NbTz~
+
+ PML CBHVTVc\\nov1%!
+bc]==:-.(+#'ywt)-/EIA~eofltjgoeime(//2;;50<"& )0!6l$"!-4]tyFROQjo-U|tyrs`V!"#v*;H!KJP:8:8;<KNO>CC~==@"""="*V6!TLg@>G+'/!~RON'"&
+$#125@gmv$68-&#+(.#bc]31,)-+'"(%+()*1)'*%'" "~yy[VPnunz}wnunrsm  '304978>@!FN^$-\& &43sawu[d]^up.Ozx|~gZM~ !/1/PXbdy[|vw !;>?1/1//2*)/\XVCBH " " #C0)%.'$*0-3.,/1/1&$&B=?"%>JQg,#3MJVu !a\JC>9*$,ILFPOH(&)0.0( #$!'!?A>tin
+%&'5*)'!%[VVg`Zvysxxu#!#'628<:/;8%"!60&&,<'P#"T[[Tggt{`jaYpk.K{w|zuk`vpn*+,02/jb` '2qbynbc$"$.20,*,*,1bcj'$1<9E!")#A
+
+ (#%$"% !" "jfh&!##%0&:9=E'"5/'lkj
+50+!>C?LJEŹGLJ./094:$&!%)+(}rwpjnwpj%"!   *957;9.62'"&'&$)5&K!?;9xemi]to$Aqy~|}wmbHB@)*+#%"#'6_r[e]P}_UX,*,BDIsux"$%)+
+&<%% $,*-MIK)$&!" ,)(dZm*v}E<<!<@>020053GHI A=FSXj$$!odi(xr987$#")84597/40%"(";![YVemoXb_Wol%Brx}{usoeZOIG$%&#%"]lq.E+C}PGG)')`dbJLQ`cd!&!!" #
+ 3;K$"%
+ ~ig}brH.IS=WB6?VQQ9;>-/4.31LMN'&-*/;54:(" WQU!>9=~w·$! #!/748=;!48:!&,"#CXRy|^xCWeHeq2Gdy{yvpeZKGEBEF162zwv&AZq8549>>digach034%"!d_Y
+ POUHGM
+ FBJ?=F::E2)0@5:~XGQi]ldZkwn{ohoJGBUSU[SQJCC,') %!.&$LFJ# &&!*" vsr{źGDC#!164386" 861$""(07U1U 6\/Tw;j-ZEo,Uy.Ho|l`WEA?.12*/+_cZz]fmY|o3,,456UZX~}lkj),-^ch#!||IGJ !" ##!$DBE'#+1.4839NHPaZd B=A{ojleepgglee\WWC>B;44)*+MGE5-+604YQTc[Y'"&"&$&632½źOLK"&$8=;053#(&597) 2 72+<j9v)K}'P>l,Z2[EhNfLT^wkb820?@AHHEjnejnfu;]q}xu{{C?A# -3/CHFuzz#!
+ 202h\Wf]]`\^^Z\JFHQMORPS*%) ")B>@C;95/3*%))&%½'$##!#$(&9></42$)';;8#-6F`COj5:S0:N=O],<L',>+2@:DO^bjhgfngoyszosd^OMOIGD#%(>JS-2Obn%%% <?@HMKVVSMLKLMN "#!XSW 73;2.7"
+ !QORnopfdazTSRLPREIKHHKJHKGEH"%<64 #!.'"@AB½0.0%*&275388$*&<80($olgb\Tuqlc\mh\pj`ujcrf]sf[j\SRNLRNP]XSmd]j^aE:?.*,$#"4%'WRT{sq% %$*&*, #(&)hgm %#hgm# &+,- $536
+ 1.484<
+84<+(.'),rvtRTRJMNDHJDFICEHFFIFHK'"(! &uom*%)$)#5:8.33&,(45/,)$KF@IC;cYUYQMJE@9610,.$"%,%vlg[\b\Zifa@=<42/'J3'9%ʽyu ,*,3::HKL)*+abc}~ )&!`Zb27<8:?"(*/@AB'#+
+
+203" ,*--+.RPSIJKEHIDGHCFG?AD>@CACFBDG@BEGBH+*0oge$# "% !.,.$!',&7<:*//%+'/1.(&#<94D?9G?=#3*$D<8RMMh_YfZQqf[zm`whyqgfcXlk`530 !" "($"-F+8!]_\algZ`\_eaiok]c_=C?JOO74/LGG "49>\^cYV\027PQR $ !$!'! $#'567SUSegeJLJJLODFIACF>@CBDG?AD;=@>@C99<4/5$#)ojj-(,{',&9><*//&,(54-/*$KE=[SIsjMA8E;1ME;pcV!/+-OD=reX}pc}rg{pph^ebWrph624-(":(bB,H/ia_1-/cgialmY_aTZ\7=?;AC,24OSU
+
+ !<94!## &16;^`e JKL # &$'!"HFIJHKQNT"
+!%#%%#%GEGusu__bNPUJLQCEJACH>@E<>C;=B136136469/14/'*{~ iegmlr&'(,(*
+! (-'<A;+0,+0,/+)A<6WQGh^PbPFP@6E:/]SH_RMniclbX{nayk\wjc\V`\Tqlf TA9aC-T7%}u+$+`_ePTVPSTLMN #!$EA?RVM&(%#MF@XPN(04VX]DFI(DFK-+4"NLNOLRXVY !! ! RPSoqtUY[MQSJNPCHM?DI>CH?DI@AHCBIBAHBAH=?D=AC:>@6:<+('--0$)&! Ž$'! @C=%'$IG@VSHi_Qxf\XH>E8-RG<bSSrlde[Qm`SjZJsf[UPKig`ZXQE61[>,J0}$$)&,bhj|{wuoqhbda E@;OIG"&9;@GIL%PRW61=#a_aXU[XVY ;:@ *$(JDHRPRtrt\Z\XVXKMRGJOFINBEJ?BG;>C8;@36;.05.-3.-3.-3+-0+-0.03+-0  <><!!OMP# !ǿ%& 25/@C=BE?22/..+!  DB;DA6\RDzk^SD7B3&SB5ZKK#%(RMGmbWeXKk^Qe\URMQNKJjhc*X=,M8&h_Xnjl! &S[_aeg~ccfNLG $TV[ "'YZ[('.ddg409#gega^dWUX#!$ecf!GJU d__}}]XXNLOJJMOORFFI@BGBDI>@E=?D>@E9;@>@E=?D==@??B>>A??B>>A<<?336 #?::-+-''*˿bVWGBBb_^SSPBB?330..+8;5463+-+##&  EC<VSHmcUrcseVn\No[M]NO[W_(+0EB=g[RfYL[PEJFD#'UURH.!J8*RSLFEK '!^gmbglhgf &BDL8:=-,3<A=
+EGLLNL# &fdf,(1#hfh]Z`# &FDG!"$"%PJHE?=FDGbdiPOULKQIHNIKPFHM?AF@BGMLR54:0/5-,2+*0+*0*)/)(.''*)*+)*+)*++),)'**(+'"$D<8ecegjk]`a367$))!&& #$#$%" "
+"!?9=,&$^WKkaV]O@|dU~dY-"(#)735>;6eZOaWIWLE<64<?D=<B!!
+&"+-"'%"Z\SSQT$"Y\]W\VZ\Y^b`oqoddg!?A?)),!?=? 106jih"+ )PKOLFD*"( OJEhe`XVYIGJILQFIN<?D@CH>AFBEJEHM@CHADI?@G:;B<=D9;@;=@=?B/14+,-,*,)'))')(&((&((&()$&|w{&!%KEC"bglRXZJNP77:+-0(*-$&)
+>8@'#JE9^RClYGu`T)!%2-3D@BB@=UPJQLFGBB:59#SX^SRYONTWV];8D3/8[Y[[\VXVY#[\]_c[`b`_a_`b_^^aEDC647 kffmhn"olr #!$WUW& $,$(RMM[VV{{D@B424$$'$ ""%(&)+),20324779<9;>:<?9;@8:?68=57<247,.1(*-'),*(*(&((&((&('%''%'&$&(&(   % #(,.!phlOKS728# =;3WPDZPA^WK869<;:>ABQSXQRY,-4#aflhgnmlronu$][dffighi[Z` ccfhjhefgVWX_a^VVY@?>'%("%gcaa\` ! &GEG(&(^\^zupwrt[X^TU\NNWDFN=CK8;@9<A/27),1+),/*.-(,-(,+),((+&&)&&)&&)%%(((+''*''*$$'$$'%%((&('%'%#%%#%%#%%#%(&(" "-)+1),,') 
+ !JFDUPJ#"!-,2STUMPUVY^^]c0-3 ^cibahbagcbi ^_f`ah`ahTV[!edjedj_^d #MMP130''*!A@?-+. $'$*@=8B>@!$"de_}gehUY[UX]NPWJJSHGNFGNEGNAFL>CH@EJ>CH=BG>@C>>A447//2,*-+),*(+*(++)+(&()')(&()'*&$'%#&%#&&$&$"$$"$$"$$"$$"$" "&$&& 4*9
+
+
+"
+
+-((EA?=:9)&,RQPMQOQSPRSM'$# %"[][cba][Xgce!ZZcbcjhipEEP!__hddobbm$abi^`ha_h##>@>:8:(%+ZUP`[Vvrpda`VX[WY\Z\aQSXLQWJNVEIQHJQEGNEFMCELEGNBEJ<?D=@EADI=@E>@G<>E<>E8:?:9?,+1)(..,.*(**(*'%')')%#%(&(%#%&"$'#%" %!#&!%#"726$# !# '$#! !KKHMOLNRJNOH!VVSZZW\YTYUW `_e]^_abc=<C"abibbkaal "#*NPUSUZWRX'#%$#[[X]^XkjiYVUXX[SUZPRYNPWKMTIKRKMTGIPBDKDFMDFMCELACJACJ>AF@CH@CHADI<>E=?F=?F>@G=?D<>C=?D8:?203*(*+)+(&((&()')'%'$"$'#%($&)%')%'% $/%.G>K!"
+ vrtIDJ
+ "!!!1/1?=?LJL%#&QQNQSQORLRRO#&YYVUURVSNXTV XWVYZTXYR%#%! \[a]\ba`f$$'WXYPPMWQO^VTVRPz}w`c]WYWVWXLQVKOWJPZGJVNPXJLSGIPGIPEGNFHOGIPDFM>@G@BI;=DCEL@CHADIJMR>AF?AH?AH>@GBDK>@E>@E?AF>@E::=225--0''*+)+(&(*(*#!#%!#)%'" .*,>4>&+!,'-!A?BIGJ# "!$#(#'$KOQMORPPSQQTTTW/-0iifUVWQSQQPO#(XXUXXU[XSTPR !XVX[ZS[YT%"!!%_]`GEG-+-" "('&RSMy~xojlWWZRTWQSVPRWNOVIPVHOUDHPEFQFHPGIPFHODFMACJDFMACJ@BI@BIACJDFMACJ>AFBEJADIDGLACJACJ=?F@BI@BG>@E?AF>@E9;@=?D<>C:<A=;>7572020.0-)+&"$
+!)#"!:76<:=EDJIILOOR!#&"$IFLGDJDBE97:DBENLOQOR)%-TV[UW\UW\\^c\^c"!(YX^UX]X\^Y[^ $QSQ\ZUWVOSQS"HFH=>8IJD)'*"&$#)Z[\[YV^XV||~}^_`PTVTW\SUZRT[NPWKMTFHOCELDIOHIPHGNFGNJOUIJQHGNCELIKRHIPFGNCDKBDL@BJCELFINEHMDGL@CHDGLACHCBH?>DCBHACH9<A;@E@?E>@E:<A:<A:<A;;>?=@%#&425'%( \ No newline at end of file
diff --git a/Lib/test/test.rgb b/Lib/test/test.rgb
new file mode 100644
index 0000000..5fe2994
--- /dev/null
+++ b/Lib/test/test.rgb
Binary files differ
diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py
new file mode 100644
index 0000000..3acf1bf
--- /dev/null
+++ b/Lib/test/test_audioop.py
@@ -0,0 +1,202 @@
+# Test audioop.
+import audioop
+
+def gendata1():
+ return '\0\1\2'
+
+def gendata2():
+ if audioop.getsample('\0\1', 2, 0) == 1:
+ return '\0\0\0\1\0\2'
+ else:
+ return '\0\0\1\0\2\0'
+
+def gendata4():
+ if audioop.getsample('\0\0\0\1', 4, 0) == 1:
+ return '\0\0\0\0\0\0\0\1\0\0\0\2'
+ else:
+ return '\0\0\0\0\1\0\0\0\2\0\0\0'
+
+def testmax(data):
+ if audioop.max(data[0], 1) <> 2 or \
+ audioop.max(data[1], 2) <> 2 or \
+ audioop.max(data[2], 4) <> 2:
+ return 0
+ return 1
+
+def testmaxpp(data):
+ if audioop.maxpp(data[0], 1) <> 0 or \
+ audioop.maxpp(data[1], 2) <> 0 or \
+ audioop.maxpp(data[2], 4) <> 0:
+ return 0
+ return 1
+
+def testavg(data):
+ if audioop.avg(data[0], 1) <> 1 or \
+ audioop.avg(data[1], 2) <> 1 or \
+ audioop.avg(data[2], 4) <> 1:
+ return 0
+ return 1
+
+def testavgpp(data):
+ if audioop.avgpp(data[0], 1) <> 0 or \
+ audioop.avgpp(data[1], 2) <> 0 or \
+ audioop.avgpp(data[2], 4) <> 0:
+ return 0
+ return 1
+
+def testrms(data):
+ if audioop.rms(data[0], 1) <> 1 or \
+ audioop.rms(data[1], 2) <> 1 or \
+ audioop.rms(data[2], 4) <> 1:
+ return 0
+ return 1
+
+def testcross(data):
+ if audioop.cross(data[0], 1) <> 0 or \
+ audioop.cross(data[1], 2) <> 0 or \
+ audioop.cross(data[2], 4) <> 0:
+ return 0
+ return 1
+
+def testadd(data):
+ data2 = []
+ for d in data:
+ str = ''
+ for s in d:
+ str = str + chr(ord(s)*2)
+ data2.append(str)
+ if audioop.add(data[0], data[0], 1) <> data2[0] or \
+ audioop.add(data[1], data[1], 2) <> data2[1] or \
+ audioop.add(data[2], data[2], 4) <> data2[2]:
+ return 0
+ return 1
+
+def testbias(data):
+ # Note: this test assumes that avg() works
+ d1 = audioop.bias(data[0], 1, 100)
+ d2 = audioop.bias(data[1], 2, 100)
+ d4 = audioop.bias(data[2], 4, 100)
+ if audioop.avg(d1, 1) <> 101 or \
+ audioop.avg(d2, 2) <> 101 or \
+ audioop.avg(d4, 4) <> 101:
+ return 0
+ return 1
+
+def testlin2lin(data):
+ # too simple: we test only the size
+ for d1 in data:
+ for d2 in data:
+ got = len(d1)/3
+ wtd = len(d2)/3
+ if len(audioop.lin2lin(d1, got, wtd)) <> len(d2):
+ return 0
+ return 1
+
+def testadpcm2lin(data):
+ # Very cursory test
+ if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)):
+ return 0
+ return 1
+
+def testlin2adpcm(data):
+ # Very cursory test
+ if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)):
+ return 0
+ return 1
+
+def testlin2ulaw(data):
+ if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \
+ audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \
+ audioop.lin2ulaw(data[2], 4) <> '\377\377\377':
+ return 0
+ return 1
+
+def testulaw2lin(data):
+ # Cursory
+ d = audioop.lin2ulaw(data[0], 1)
+ if audioop.ulaw2lin(d, 1) <> data[0]:
+ return 0
+ return 1
+
+def testmul(data):
+ data2 = []
+ for d in data:
+ str = ''
+ for s in d:
+ str = str + chr(ord(s)*2)
+ data2.append(str)
+ if audioop.mul(data[0], 1, 2) <> data2[0] or \
+ audioop.mul(data[1],2, 2) <> data2[1] or \
+ audioop.mul(data[2], 4, 2) <> data2[2]:
+ return 0
+ return 1
+
+def testreverse(data):
+ if audioop.reverse(data[0], 1) <> '\2\1\0':
+ return 0
+ return 1
+
+def testtomono(data):
+ data2 = ''
+ for d in data[0]:
+ data2 = data2 + d + d
+ if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]:
+ return 0
+ return 1
+
+def testtostereo(data):
+ data2 = ''
+ for d in data[0]:
+ data2 = data2 + d + d
+ if audioop.tostereo(data[0], 1, 1, 1) <> data2:
+ return 0
+ return 1
+
+def testfindfactor(data):
+ if audioop.findfactor(data[1], data[1]) <> 1.0:
+ return 0
+ return 1
+
+def testfindfit(data):
+ if audioop.findfit(data[1], data[1]) <> (0, 1.0):
+ return 0
+ return 1
+
+def testfindmax(data):
+ if audioop.findmax(data[1], 1) <> 2:
+ return 0
+ return 1
+
+def testgetsample(data):
+ for i in range(3):
+ if audioop.getsample(data[0], 1, i) <> i or \
+ audioop.getsample(data[1], 2, i) <> i or \
+ audioop.getsample(data[2], 4, i) <> i:
+ return 0
+ return 1
+
+def testone(name, data):
+ try:
+ func = eval('test'+name)
+ except NameError:
+ print 'No test found for audioop.'+name+'()'
+ return
+ try:
+ rv = func(data)
+ except 'xx':
+ print 'Test FAILED for audioop.'+name+'() (with an exception)'
+ return
+ if not rv:
+ print 'Test FAILED for audioop.'+name+'()'
+
+def testall():
+ data = [gendata1(), gendata2(), gendata4()]
+ names = dir(audioop)
+ # We know there is a routine 'add'
+ routines = []
+ for n in names:
+ if type(eval('audioop.'+n)) == type(audioop.add):
+ routines.append(n)
+ for n in routines:
+ testone(n, data)
+testall()
diff --git a/Lib/test/test_rgbimg.py b/Lib/test/test_rgbimg.py
new file mode 100644
index 0000000..7418e69
--- /dev/null
+++ b/Lib/test/test_rgbimg.py
@@ -0,0 +1,39 @@
+# Testing rgbimg module
+
+import rgbimg, os
+
+error = 'test_rgbimg.error'
+
+print 'RGBimg test suite:'
+
+def testimg(rgb_file, raw_file):
+ width, height = rgbimg.sizeofimage(rgb_file)
+ rgb = rgbimg.longimagedata(rgb_file)
+ if len(rgb) != width * height * 4:
+ raise error, 'bad image length'
+ raw = open(raw_file, 'r').read()
+ if rgb != raw:
+ raise error, 'images don\'t match for '+rgb_file+' and '+raw_file
+ for depth in [1, 3, 4]:
+ rgbimg.longstoimage(rgb, width, height, depth, '@.rgb')
+ os.unlink('@.rgb')
+
+ttob = rgbimg.ttob(0)
+if ttob != 0:
+ raise error, 'ttob should start out as zero'
+
+testimg('test.rgb', 'test.rawimg')
+
+ttob = rgbimg.ttob(1)
+if ttob != 0:
+ raise error, 'ttob should be zero'
+
+testimg('test.rgb', 'test.rawimg.rev')
+
+ttob = rgbimg.ttob(0)
+if ttob != 1:
+ raise error, 'ttob should be one'
+
+ttob = rgbimg.ttob(0)
+if ttob != 0:
+ raise error, 'ttob should be zero'