pgmagick-0.7.2/0000755000076500000240000000000013200337770014326 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/example/0000755000076500000240000000000013200337770015761 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/example/bezier.py0000644000076500000240000000055013153230470017607 0ustar hattori-hstaff00000000000000from pgmagick import Image, Geometry, Color, Coordinate, CoordinateList, \ DrawableBezier im = Image(Geometry(300, 200), Color("white")) cdl = CoordinateList() cdl.append(Coordinate(20, 20)) cdl.append(Coordinate(100, 50)) cdl.append(Coordinate(50, 100)) cdl.append(Coordinate(160, 160)) db = DrawableBezier(cdl) im.draw(db) im.display() pgmagick-0.7.2/example/blob.py0000644000076500000240000000031513153230470017244 0ustar hattori-hstaff00000000000000from pgmagick import Blob, Image, Color, Geometry blob = Blob(open('example.png').read()) #print dir(blob) #print len(blob.data) #print blob.length() img = Image(blob) img.write('from_blob_to_image.png') pgmagick-0.7.2/example/docs/0000755000076500000240000000000013200337770016711 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/example/docs/japanese-text.py0000644000076500000240000000034513153230470022031 0ustar hattori-hstaff00000000000000# coding: utf-8 from pgmagick.api import Image img = Image((300, 200)) img.font("/etc/alternatives/fonts-japanese-gothic.ttf") img.annotate('Hello World') img.annotate('ようこそpgmagickへ!!') img.write('japanese-text.png') pgmagick-0.7.2/example/draw.py0000644000076500000240000000060713153230470017267 0ustar hattori-hstaff00000000000000from pgmagick import Image, Geometry, Color, \ DrawableCircle, DrawableText im = Image(Geometry(300, 300), Color("yellow")) circle = DrawableCircle(100.0, 100.0, 20.0, 20.0) im.draw(circle) im.fontPointsize(65) im.font("/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/UnBatang.ttf") text = DrawableText(30, 250, "hello gm") im.draw(text) im.write('circle-text.png') pgmagick-0.7.2/example/drawablelist.py0000644000076500000240000000204013153230470021000 0ustar hattori-hstaff00000000000000from pgmagick import Image, Geometry, Color, \ DrawableAffine, DrawableCircle, DrawableCompositeImage, \ DrawableText, DrawableList im = Image(Geometry(300, 300), Color("yellow")) circle = DrawableCircle(100.0, 100.0, 20.0, 20.0) im.fontPointsize(65) im.font("/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/UnBatang.ttf") text = DrawableText(30, 250, "hello gm") drawlist = DrawableList() drawlist.append(circle) drawlist.append(text) im.draw(drawlist) im.write('non-affine.png') im = Image(Geometry(300, 300), Color("yellow")) circle = DrawableCircle(100.0, 100.0, 20.0, 20.0) im.fontPointsize(65) im.font("/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/UnBatang.ttf") text = DrawableText(30, 250, "hello gm") drawlist = DrawableList() drawlist.append(DrawableAffine(0.9, 0.9, 0.1, 0.1, 0.5, 0.5)) drawlist.append(circle) drawlist.append(text) im.draw(drawlist) im.write('affine.png') im = Image(Geometry(300, 300), Color("yellow")) d = DrawableCompositeImage(100, 150, im) im.draw(d) im.write('ttt.png') pgmagick-0.7.2/example/example.png0000644000076500000240000001722713153230470020127 0ustar hattori-hstaff00000000000000PNG  IHDR,,"^IDATx}toBrCAJE)X X9hǗ5G{Z{(Qmm(EDb C^$#i>;9ygq`ŸFHPXyJUU3iiAn.AUt(KrikCA.0 \t.bݍmۤU۶ KK✰ KV &NĮ]2E:.v;|YYEV|vt(EDkŠ 䠣Cz$it݋ѣ’}3t+-ŕWJ19ZX 23gP:,p6n ƍ7r8/}?(wG?.gZġC1B:AcIڊɓ&RQq Jfsx9ǣ#!$lnƘ1S551.넭<(U: & VLV`cdXqZIhal "mm=6tXvwy5bЩף[: " f׵MR %/L;2;Z-@? -IȋCOÁ c$Yӄ$|QC GG0 EEj`zNX_ / i"(usĢEҡQ4X: 7o٤KE6o")6M:.*|SIh#%N$%bA|tI}f <#Dr %EJ>;Itbd>Ś7q"jjGG@ZtQ&X* B[RR*5!RX T 1$wJGA#*0KG@f ѲĤE#IKCSbb@ #D/K|-a0 IFIt$$Dڇ$#) Atv"1Q:`s44HG` LBS]-10 IKG` !I.t$$Y$HG`LBK`S#0&!I:yR:`$N6&!:qB:`$6G3$wIH8rQ$d0&!9Hc c06G$,f3 1 IX? il@1Ú$%%IG`LB!0 IҥJG`LB4~t$$I&HG`LB($k8 IHƎ$)-M:t<㥃$$I6GI…̛'10 IUWIG` LB)1ctv"1Q:`MH2$c* IH2-0$c, 3$nG\t21 ImIG`$LBp IO/Ě"mJf&!EwHG`0lRY,9R:#aMH bRD=t(ETc#ƌ`XRdf29KG`HlR_T5!Eu1՘!<"Q9Jް&HxYfW )xyքv+V0}aMHaW^l IHᕙ* Q _XR 1<|bMHa};3?! xtu!pQ %&- --Q餥mQ]b C 3*,dr!'G:2\\.1.%TVb G,)SPP EA3001.X,HML ))AD.l& Emۘ 8<QԚ8556]áhk30nl;6IEc&^1 h3fB::2l?f@Iё>t _tIGGVT ׮jẔxmp80k`OGI g ?I'VSF,jR0HJKk+ctd ;v+07JJ6n0ث/r ϗ>Hp8WS.{G5l6̜j郂"(3HLäNBV+. mmұSD#FHa^$!V ]:| x44`(8L-$/(߂2z4x+i3#d@NXjBhh`F@o5 uu̔ L<0rBpG(-C? P]pt88&q&IB[D;AЇ>̙҇VZʻ$e+DSO8gt451kѣQRy mZb4G/{7,JPTŋ HBXyEv6|QV[¦M(+cK$j>sd$%A>ň" lX,|' 4ք}t)jk~8v&H)SPSmۤmCM 3d촵@zQAdqѳGr99҇Y䠲R;9'T*.ƍ7E:B̛'H16*+̛&qޚǣMMbAer8\.| Jb{.{ oplߎEh{u:og*3?2%x}46S6&yyBy9V9 j yy.)pᥗt5filijJ,i>F_n.]"IgOžnGq1N:"P\ ]pIrh- g1ff"p >ȑTUjxU46 ܂#01cp(/ł"\)<8,A$ꓰȑX۷nDZc+S`d$+=`o|$%IG$%!?o:|ѐ1I͋Ä 0?n͆TWa{ b<\u231vyz< 5qvXhiACNɓ8~'NI>&$dd^;nvp.+ =c(jGO'+611UYv6>ܭԈ@k'_=><ȸN;&D&ǻ)44@J B(-Ei)Μٳ8HKÔ)5 Ko\.a47  pEHI73q%b54QS3gގ!CTdeat\vݎwEa!z 9 xYw7PYGeq8z;N@Wpej\}֍Áp0ND{;3Hϙ:Uakxy_'ŇӉ;|Sikplݸף6rus3yH,_oz+.yyoՅrlߎq͘> /.mǏ?gƍÖ-^o;q>))X΅l_% N2Ǝ Ɯ9noypMulZァxE7+Vl>͆^MH@NVF6Lu?|wbZ[[_} GtuMj%gM4d.c>lr2n#\s~s%aw7~ceL܉^y(S;kj_BxgϺl^O;y֭;fɽ/{%op+oOٿ'WJ .jLO~Q^׷ SnVKpv;nYYO?m$۱j7믽ٻW[/%'cY{;kUc`\}7^xAQ h$&0/[_RRZqk㭷`$'+v['a_۽6v< P.[!CP\6!8|Q'?і7{jk1cP_/fS4}846HM|(c)9k?x6S1n 7-FpNLDW>ܭT~8_{Mq! wm. ct~/YƍR֬7o+J[I'+\.ڥ(Mu-=ͦ#$t:Qw߭w76*co[q=/jK%$ORgѮ]?N]vJ][pܹQcp(+_Eʴ5 sN_š[nwB8u8Q[pǎ`pr*(>[^zI[01q3YJ}i|[ڕޚ%=^~.YU]M]{R;+h׌h|v?Cۧ*V*yq4J T|ۺzNk9`$q]WhX,^_ravʹs~VZvMe%"7^y6|S|嗊PeĠ+;.\믃 pzI`{}qeIurBSiA|M.X1"wBz.m`b;l'0|BeM6AN€p_ʳ9ݭn|xíBRg{B?C!O:+sk<mЙWu!&&7t)9ݰC)Յb=n<X9ztlw:5$wۿ_1EGhWz47&g[(&&ycc1n֭ !<;} kFYe7F(*r[sv ۚuiSf9#V<$3>;֮&#_'8xCLt1uS!$纹V5kPSȓOj/ |stO&-(aEK9^¯^nkΜܹػWʯƺut[tv a樲ӹ=Z@w^ V:BCW67cB̞ .=;VǰvmcMBくlq(æ}Sm(@%&bunZ{:COIw`͚ޛ'&rhMi+O8 OԮ9R׬"8^a`bH|hn  HI 6 rsnV'=+n ^Z9__|]GbtwaVDZf!bdQ{Vc7fPt5>؛X,i<=o Z{;-CBnţ23mff*N3>T}RcamW^%%??rz)hEiM7i׸\xޤ =v(^]sz87;vhLMx >{wl@ehݍxsp&t+ k_+|۟vNHD;f78XT̴5 T|<|R; g&Mw/7@Q3f⋑ gW(RC"9njW^ k_w"_~mRX, aѢs\m7'Rmի:zT$ () [WvR,[MtwrjjZP-l޲}W>/c0=K2PyGܪUz;,ڞ; )Z O>7; Zp\.c mA߳}27 & /KQQ烶mSݺUo;p_'_ޭ$t:x]/O=c|V8l2vT=`0̙{Vc$'{ę3C-xe<+RY2KRN!oC7uo V o~<So|wc^,?CwމG8qo-%o x#3/gb)%&bfTTNό(+SzG9oWpO?9cnx˖i'>ǘx[C>}@AccQXW\i\~yRR@X#=ގ5ΞNdpͦ ԩc~f1nѹsz{* R\֮w`_/+CY Xou 1TUna6 #- Bg'ǎ \7q:asx=tt uth$ETNNgchhnǏ 6zPΜsC<+>%%(+C}=ΝC{{CB0kf ٭>8xW/Xk3xmXYZ Zs&XYZ (W3XYZ Rsf32 B&lcurv3mluc enUS$esES,LdaDK4deDE,fiFI(frFU<itIT,rnlNL$noNO xptBR(JsvSE*jaJPkoKR2zhTW2zhCNKameran RGB-profiiliRGB-profil fr Kamera000 RGB 000000exOMvj_ RGB r_icϏPerfil RGB para CmaraRGB-kameraprofilRGB-Profil fr Kamerasvg: RGB cϏeNRGB-beskrivelse til KameraRGB-profiel CameratT| RGB \ |Perfil RGB de CmeraProfilo RGB FotocameraCamera RGB ProfileProfil RVB de l appareil-phototextCopyright 2003 Apple Computer Inc., all rights reserved.descCamera RGB ProfileCamera RGB ProfileC   C   ]!1AQa"q 2#BRb$3r C%Sc&4DsT5Edt'(6 B !1A"Q2a#BqR3$bCS %4r ?_hkW*AS8;w|\Mq#FWEfW0$$eH*V;¼HKC{bq4z Zd%89pp(E v'rjrMv:n6A %ƾ N )\D@V QQ¯/Da) }1V>Ԯ37F|V$# fNMHT*ɳ45 VA>[jvU$단gsmVNX"GDħsg?U N02S*,?-G=Ө2+gދ)ɳJ`{Զ& %Еs`#}j[>ĪIP-q"0;A‰Nq9-* $#c|u(k2(e-9Is+ N5< ֽ+3ҹ{6&d!ǑR N7-GU_p' >b:BDoI N[d!N:QϥRK%} IVrΪB:P0ԤU/ pICGpM<7#PHږGK[3I| 'X>FaQp3샏҉&ԗ1k0IQU1 Zlt 27UQ.a~?^3*Aa>C5p?Ts檕wˢ.kZi'0 SGMN$"qe䶟&kF${uaHǼHIL:!@gAp尔x@]*(ozK#RMÆxkfжO:mpA|>ՈJڔ$aCe-tV6m0q0=HE ڔe)8>*SYɮ'%pA?j8%՞2W/w WRB mF)4f+.idNi펤RҀ 랴ώxl\e Xwsң% +z0!;j@aHQVN 5FQ\sewaa–[R'’~ptrHmkuv{n!jy #8,wyNv5J^,NxᎻQ'头ӊmMnbF=9K%QdP\Z0[Kh Jʮ\3;5m~YqV,JΞƭrJJQNw##QDj5;?mnXY d[ p*մ\J5F넚2Sw˓aA`㫎7=٠?G[T,UY8#l]>ԂUwߧp1inMgQ: SCmy  z2d*3٣3ھ;tP5.ASVHp4S]q$CΟ3s Ovw:0=Ir<&pK޵#.oyϥ$)H'=J=-nI`G&IᇇCN3-C8o#+ve?PqZoN4pP8y(U}KRe^(`[tË̚Q 92,*$ډ >lqIKQտs5^Ze\ʛXtT#'jH~/ǧcnO$+J|" wKlaGS\sc i,ȡx㤷xXy%"e G1H)c׹ ᶗĉotlw%A JGe`꥾wV[czV]FOOxz̍D-9`e(Km8(%CXǭj8KUک/㷉Lt\tTRyC8 5/EK$AꔟU$)zUCum"(Tڍ?BT_ 5ȮY!-#?Υ%%e -+ uSc>/5mnocooh $H;I]'Z̒Ǽí?CQ^j8[TĜ`(fryNvfNCQTk>FŝCt4*a#T?fF~9?6j(JҖ>Hu8tca24Ws'C=gXElp|FO@ L^KDp㷆(6W{ݾ#ʔ&/yUj/ӱKt8[|FxT/Dp=աEϖ@8?yN}w# GY%Pw~40y҅[lee7.JRm$|ÊZ'Ĉj\{B!'z?:Fu ߯ߊJ*QIW)zSrV`a7Tb!6x(!-g_MzjxY'b\iy&TfΦZ<S>b~۞Z3nZ|/dHb'(R*[>cgI$cR,=3s|*L1'EEzzxᅧ+p/UG N6&Sګ=i$\^ Ѹ!c7 )3hI^hUY><:@_rZ"H?RZب_ 5 ]AN%(vQ-~۽-ō5;Fu֡ZsKA[D!% gH5a;b1">2_?Z^Zl; UJ#uzݽ#vV)ˇ"&>R893Y1(&D掵VԢ-<)'0仿gYz=u!ڌm!V#:iZ5 CRncꢒrOAԛbhsIMlDd+݃@]/0S~(FQ xqnRqKwJ$mv3k oۆ}ejY"8"۳%հ޹ WmoPYoȒH6KPgpW^y]0r㷞Wo,J6wDcRPߛ;ihHuV5Hz])QsmTVnV*?vQwގԥos'gzHWV_%]gpPT=ةEe8Z9F Sj>ڿu"i] %@W77.ogܻhAAis9fl~|hfU?CS&A{=;V5*}:\x楫ծ:~Np髭64J;!;:s5a6[SҶ QFG#֭->]r\Kwm("H$xFgܱhI(z3+MnʔzF@| cj׻ \vw*_iM ʹ$6lUqdu%etFf$qiJKɪ'$}έӸm%3SZ\:9'!Aٚ$]-PG o+j V?iNѢ>ڒ0BwbB!6+#8sdAϔկEX5I_*Nz >4ӈ$`u'vh!T#ᚖ ;EGt*!)S벴V`nu U ”@펠<g)'է'FOBIH>a;PXT@JJ@܁Q0ƣiHY)c*cХ5:3;Te4g)sF$Rۏ8%=O9+%rx%Uڃ I8I %DҡY3 ٣ƘEhLk!f0 ÒJ !֞Ct^rE+*?I)?(iw{^`|M8%Ax%*CWpy sTa3{H R(#օHAfO!>(\ cbT-#njdcCRJHsSᨩ$( cjr[dE39s۽<)5Мt0o_zyx%$FRyojo ,CF%]PG~(7sGT r~F-  C)WI!6TVYH' }CKIW77/sMa"$t})O/7*$gQQJ(TMۡFҝ t`vдr(M˨s]^\Ðf/ʜRPʥc'|U;xoEyS+.^8oq0.۫qHy]m^+9Wle~ڪqzUJUνZW!ƀJ |Qʁ<C;umCZF)T{jڻ]oK=M2-sODr'A~ur TԼ $Pr(w^*Y"DqjShq!6uґ-IYPH[6ܴg\n\ ^ixi_a<ӶO'\s*iB:FI֮УNOj6駢LJioi-,~@n 1td:T{5^/mۋ*[[r֔$[r#i֒"ێu.lӠG`ytH'DoVөʗ\qbY|6pbEw4Lyу*ss1{;/LTCwq|IUŗjݵ GN١K:bY9-b|9o1d Jq}Oe\R]KF j=26]/o k>RQSS֫"jGᦔozb #>uՖ[@SϴI+Mt:URFo|3 75Zc*W7azUB a$Cޖ;#sz\nrImsUH4,[[U[u-rMQyl (gQqA_11g=k_K:N[Wu`n.SRˊ FZx RVqЭTc ]#QڗNh *A 3BrbU.iy!VM.sOrgXMF&^Pa ?5}7jZLhβP\ZQ̼tg\t.iZnR|!g?FSto$Xm/MLrDKm+=+[ބD'VcVs>?Ż|BQnSm+J9y޻G~ѯ},Ζ99&DvZ5Q-n : *={!G;pkEbii 6շ/9 #ӾhhŬMQG,i.qӺ~*uuh)$f$GioJ?CbzTH/މ!))LLgps VaP0JUԺ=wݷDZn1ӋmyY~YN'_Cju1ڪtIlc{=M|zO{4 \r5W]je2f!6G\me?.ܵ B |QO2բ_:NrN~F$!Vp Sqk+v~(@)zG\r Ϯ0O9$(348<%WZ#5$MuV95jEqʓߥkKn5F:.(8Ç#5_)E;|8.ōadkFX9G#N:ho[oE$ysIaPG#Qcj- G<#$֚R*)kR1H$ێ6Bv-,(PB)#mMVaa&<2J1hK *=j3m. @ ; hȊB>u sq HU!*=vʒEwa#tTLy@(zt{4)䓗W[~e[!(r<|Qq/ZQ /Fn*WK%{oC8iJ˫m'=pgT.۟!*0ОMKk=Anë/ CIZŽzPgwq_rv{% ~lA 5}Y`c B*)HmZq3iBP5ZKٯ K~AhK\Z\#ڐeBPr1GSr"8:M0? 8ɐW srW {#TB?ʗ.DjKd 1bܘ^9ia=}jT0*u3YGУ?ƃԩ>I543L80dCV&E=<&NUA)g5?+E?9fn# zj@-NվdE 4 a~_%]?5T-=jjn9|IBKdޕrVt,7 $PP?ҥ$@e V(OLХN-=d.?wG݇?RH57q`)[ֵ{㚢vfVaI\V HJ9v5GE BJԥq ,mpYⲄ\/F}[dKK|3{W&Kq~wpy8KyJ\" ,V fHQH*(HGwSkFk)n7kF\\PZS!k MѨ?wܒNy{+&濸x J;\KCe z b;Le@g5yy^|a$qZtɯG-g:u\}A.`dzw86W XH.2:R- BQv 1 sn)[M)\K GjQLiؚZ&KHhE;99Q'MfÄ[7Ddjm+ \.~aRCn(`:ܔ{טj:(NTj3j~-Kim6Pp6s[vpcTdBzkϯJ]a5B(ehX줟ZJKEŝDrΛ־t\5-!].s:b\)!WiuܩGyI(:Zk;JVf͌1O70fnYj1-.vԏ2aHdZP9Ri W|ANו]ȷ'Wu.X!Qf:A*[OOq63e EĀa(R$.d۔\Upu3t]MοjQxc-m \n [:G> .EBYN? 9Jo-<:FδbƷ7kۈ'$<|āؐԊnێ+Qyls8a LL7U.ZO"C'9AI,6d],2c`A[@H<}kjgO&-SZlKSZT S) c|WYN2Շɝ [Nqm4ⶓʄ +F L qao6s(S643Lik'z>Q%z)X!k螝jFCuu製_o:nRy.s)GgsѷQyd'lzPcöxQ]!kjO"oSy{ %G+ūۥ'br_Ȝg+!!IcY)XVdlB=p,vmQ=N放t;ξwƗZVgJzV-rEx54kCu 4^3⻭/Ӫ*E*+kUU1&1^-lv, EgIWJ^3gS<0JRDXftQ"ؖ 9I.'egH޼[@mJR}?G8Bv$е+0վגZKD`FcֽV* Š׃H)NR1'vE$u!)׺e$Ob}LI}EeM!q,Uպ2P~+X-b>jK,κ:#ԷM3d_,[(7zPrwG%,:p`.^ BG1?͏Jw =KDlq 7ecwrޑ:Kb(zR[Ci)Jp4-K淰YS2)_P_Bh)x#Ʊ#/}OGybeIrHt/8N6J6WnMexB3vPTݚd'sY gS[|eq1Ms 0Luo COʖR %Mg29GwS /%c8 d6OyWA4GqG7y ];jRj4j=Y< qҺ{W? yaVC>9 V)d$*N'8{>OBgЄp`jӦ اMy ^}5~/T䳌 JU>\QqnPkֳ( 1#Y9IV%@[1R@PX_R}*=x}ȥ}}iIX*J76Fxab oZ '}M\sPydAT9VdADq?q@#B:r%' ڂbM2+A{ԩՌ2MNHw-ZRI=JVp3mpJ^(YzMliO%<^A UN2p|"#ޙwIQ$PGzH~ʟ4xMn}!U5Tc O })(yJHҗt8[uSOkaasR2SȂSXKh +gW H!ڠY>pMihBMz?"sQZA?(}Q?,wJH&QCs'R_E=|D}~g)CV~"-rm{)\$d(=&ɋMċvUWPriŨek[*%!*;;}m#*ح.푥3'Iq[ h9r)F?0Bԙ王l{#' ښKvG%.w|~,"[QMrorgFZ^ nƉ U咍A/pERM$)=OʉM$b臺KT\F]m;qiP8 + &%#NFGmUuۮ}+N8 _|z_<:L CGe!_А:VV-y.Z}LZv>d!o(rs$] E|5Rob!L~d6~yrwZz}mXtY}A\/:f^aJ#؊jWU)&Vc n]qVqṚ$չ3X5b,zt }!zZ_t'8% q vDՏͭOuHnxp7] 6R#Ɓ_Y8RIܟNג$1JUw=Y.m6/Tx8` }pT݃vޞm'oM.i:5,ħV2K3(V2J֟wؚw'-mQ葼1xZ` %GCE#6Sro56{c2 X?ſ]^! H*ԳQR_Fݎ1\ܛv|"=$ι$5!hP)G fG.{llaD)7ʽJ2QJː.08 ԶTבr})O(%'޵l /31XUi[L交%@n64ӧU~,V~]ㄗYwv/ӶVZԶ[SOIAv;mE(i#Nrme>77\R߉s Jغ` Ӕ|[\`:q.G@.5&kK! ea|BoESwJQmk[[W Wڬ/[5Q.(-ͧsԟsM3b8r6~ǫGK9duN X Z=޵%N>p?y!-9^={zeKlP}I]O V|2zwǵQ5.z ['#[+S9V imQcԕHc"'PSR"@ZeFBDoj+\)"#tL]"RIv$iW׈v6KW'dIt6I( Qo^SU[y9D0ҋƽEÇzFѪ fuw0v)gL_ġ+nIbIrOtʀw)AK_Z$eJ'IbjP̎N o[Ɵ IJiх *t~yBQ-ŧ Tɯ%UV Iҥ7"%;IlʓD~xt;2ҦHJsįUjmdNJ{A rJϫ(cBdR> &eඵtQ \!`uߵy} G:*V.;4 _S1ɷ9T *szzKxlSjd8?7uV,Φ<(qmQAJcނB6φs= ]23s=a[d[]0s \g8j.&:LՌq/Ĝ5*u5mԈCr㹲8VbkZ$}0{.s5%mѪmZi@yVTj^.6+djl #Qt%.йeE?1e0Ψ5 `M*q\.ae9 m\=IN zU^J~u<ˑ%\{K>[nf~5 (: 2E(WG]qLZv7 ݠt>47:9ۃ=M-CqmyL!l{ \՟G)# tZP.\^HISL!"6w+и8'K?ՈxHJ9K-FT~dԚepH-)Kp$*A}#|kap{ QybgrW)mAsWꡟʪԜ##s+ #TzF} }>a'zjquk/BL0 d8aώA.$$OØY#bhܻl6O(=2a7m5_ByH)he[}K:B9|ĞPUc$ZR#ҞR a[O5Q7"#gGoWۣx:o#/s2^#M)YT 4edI0g/Zo/֣V qCH(r|({`~X@ ȢΔ2JQ`:Rzs'QU }KDGcPcm%e:b\J֧\bq| &AFT3όuK(iE.Fe8<|2Ö4n(?ZpEl"KC=?ډFr6V^0>yO %;qKj5;>~ 7@2aҞ["XA3MAKN˅3̍ \ɁܕΠʛdI\!CB[ӄy)8vE̽nEAj)F sm\J)~"іf,vVXokNfeCy*lm5("mc_HG?Wi$M<L{gG-;9:BͶ|04)ȵ*G( <^r^hLh}0-OKt}Һ{m:VYלv7{Ͻ]e^&KSRj$ZI ^_J>}hC(.%چ|w J 6SJ?r3OjۥJVd(!AOÙ-EaGgHu)E) ;V ~u_+/^tR.WɎh򭷓pJTjOZz,# Np{N,Ucdk0m8QRQ%?u_a=uމ.&U,` 4{a4d,Sn֚!ei'O29Wn{VBqU˖U8#}|;kU[ywNGS/<$g+r{-+W[^JS.}V[p%ꛔfҩH)`>U1ϭm>Xxj4沞Tp'ԺJ)zӪK ĸU虾`+嵹s)d)Gk~Qs(q!pLk/N'KAܦ8RFvs*xgm?a.4xAÊn:|VƦKՖA2 giB ; tAcX§˕:j?.5RVJW#r|!k mNq J'8ܟ(J]g!'Y-+܏d6G^\`~J_fTjR?g%˾H8ZH- <6ϏAOeV.XqA/ȵih S S@laV (mEk 6_Pq.rƜsy4]M.Ɵn>԰Y,8W0OPsB,UJ 5˟s'>ݻMuE 49gc 8/~ӷ;āFqjrz2nC#rH8])c13h=ū- -4\ wJ{\4B''@ck[ H2m %AKsӥoӦJ5'/Eiֽ"[BHOJ6WhEEvQ<=32Mc2Kl̟z~UNd!m*ˆVl)Jtu<85U)T)]?S;a)(g)&S&"=e?˒ntPA#qO",U✞1\F1!-ۆ6fpMc;gaw?kKȺළ림֥ՒY@N\|zzko)xMzF΅5VeW ` 'xrW%RyyF5KӿΩgKNh"J)26)14ܹ.ɱ^C>bO7 s#\:2Ye埬Z=(ׅKwk-HYmrWg{84G[MgֳpyzjhkTTeb׋kq~ێ)j A=+Gr%YqZ,AD{g2*$-!F(O3X{o^k}wڼe%_f; D/nQ4/:Fsg|Vڽou=>չ"egޖ;W/ q kae.Լo^+R\Z|ZP.z\"٣Z4hRa-%N'Q>P.gy.{3-e!`繧~Fhr).~u*⒩&WAuQT~.[#kU&Cr _H5Fx'O&{ ߸aq:f#vڐ=I~](wXiU^U_ڶqXNo-ILJiOsN]#bY_1\P_S2u5IeP}A׮)J"Zfb*o@̝ɮÌA`/ʵ!q 7j@r>CV1aʦ#e\'\D?NyM.2ʈ(%=󤤑'?D[~IJw~9K"YaBZOT)Qnͮ3)I~URUIo4 rdYj9v{l_@n}ش#R$n% H縿Oʥ-S}a8H;"+ugQmx3FRؗLTD2I6ۈ Z&OL GF('< h%*<~K~NB߫"5cCcDž)Сc[Fl3䚖y#V^=}n;ʇI`= 8ԥ_u1R| ؤ Sjx샄#Js5gpwy ;yw>%Snlf T$(?z0EA$ckH9 `,XՖ )IW #뱣*YLꨪ@-`Hg N%mBsQs}&j~C jKȔRmY1ܸ>RY֝Ukm^!4{R-r9)` Գ75/u,B|ˊ)wý[N  "A+[`#=w-57,Ia"Z.b8V](EL0T6HJC`Q} a%,yz{5mKLIkYCJrF7֧qmn5nEZ`1kAgJkvh HJa"K>ŠIٴ8U\gvf CJCIP3Du/nffCm2Q`⎩]D ׭)7V˩NH9HPoڙv]gȸ\J9Օ*ZI-Bck d t6Q$SOZv~ gxSEjttK[&!is*V )1֍U˲qRPZJH5NW#:p\ǣ]x8kMMҲ[VB=N(i[oZOHYCc.-T:{ JpK<^97Kq:qr;P sR,|/nmaH\.F學@}h4F B@YZ̊r;I)؜uj԰rboK_r{r[a VB@8ϯ5lS(ZvZW.z2Ѧh&[WD#! A$JD㠮CMI*QI&s:*%Rᝑ<@ڊZPm *Ro )Z֌(3%EgXM[G;YXI5ory;-2!B<M!,:B`*itBT_8ק~gkl@_:>طgOY/Ev< ۜP 5.@uu(OZٵWN\1o14Fϩ_%5jD7Ƕ2/[InU" 5OObB/yHV?l3;A%K7naxn=%$:\M}73~CWrBF9cqUC 3DL GrT 864YEx}w?x!c_6}3CsoSRKr͎viQ̟9eJZhv56J<^>ER_[^@iP{WG"zB+̵8 JwLjꔾ9:'i;"-g@rvGzWu)9hc<}{ Mc?p>u x̋Hxx&DnTy<so?B1PX12"4Ր9{ z:jAw/6 k7%'tT7㸌/bEp-R#3ƸMQO;NƮz)olkī)ud 6cY򲞫^3Uu,w1~Ta% 6TyI9!)7nSQ <߂>6׹ BmH׈~zI ~1;KB5UZG}Kۣ 7LdǀNK'Nzhݴ5UGnk̻L:-Z^l QAJSȕsoohں=KZ(E#51p6'΃ >,-I 5՜//\kWYRTypOzhB2T:b^%(xX.{ޤX[:d˖ϒIKuA*P80Gr~ xd7O]eŽ-*o ]YA@u((+!cS5CLK̾L&})~ûsɗSv>/z=qF/ =۷UeSnIмK~ -/l1#|1ߥ~moUǯcv)OH|YYqɲd*?JTFKGmSƫkdkrpGY/tZVDbDO׫$~@}F4?sQjKǙh*:*N8"ؙr.j[]; {zU5)JۦjZVjݽBymʫƲ}".MpnvT|ӍңRHqRP~HAdC.P@&l ]ݥHAd[**C` l.$_px SC):Ө}FYJW1'֖U)% hʀ?:iJ+J\puC[xD@R]Ϩ?YqNY*2OJ 9HuҷSz%(B uΠbK--*46N5xأ [67A-p8~AVTهF*>E6I]KEW _Hܭ i|+s}OK GC0`~ fD𑒸yeR?zP8' pC2/22-_3deBn1}w*3d[q)?QSV E8OGe}҈ڔ#)rP^ kH*2ަY<'9T$Zu-z~^jkLHJ&{QE@Fޮ*/ft.[Cj+j2r0RO,?ÝtӷҟQ^oȧ3zZ M"RH],ǔe'FTOB?g0jqS !nɖFP#ֹ8af5]lCd3(=?(h"hgva%%C*o'DSnk8﫜l{y~M\47ZDH.!E<ךvPTk:<ðH}w&sHkQK% 6 J5ZUzVyJ wۥyR)լ`SԖ0[Kpᛊ ܧ낃vל9hJ* v#tW.0Fr\?!}Ybi?c?PJ~WTrXv~CD;l~~bBrrl"#bgDUߙ95aFqMCiI-9#l<ݶ3oZM$`-KeDIRQ(8$ugP\n[+SvPT?FrRl+59efLfHH+pF*ҥ,.J0S.we\YCkNtާi5n'RXB]}:ץuk=)qO۬EQe2h +Rzc\Ʊ bMv=4i-T8H+\%Ώ;R$cn5qRN*SrTkO7/cI./8iT@ɷWwGN.%lB]Ye+qBG0$`Qn\rQ촽w֎Ұ cat0MdF34|$`$mץWɹ byS!2DYO.BQ=}F<Ą)rW?UrE3,,JN-`/ /|"FҷbO!ɑ m%%M;saYJ= J$;k[\ZrzЕ%M>SL3pF gRGĒW?)(ݞ vurcֻ}5FS'C c{zԷ&^%:^O̺ȵ1rY/iKA% P׎NNTj,T]mٵDk>t.%Mcd B\ 'fO<3ؔh)?yiy G')`oָE |BLMEmb%So))q>iqQ~/&N^J'qЖrS-o#n!gbPzq֡}aWWmn_ȣBxPKM]q [2>⅕lW?*5+ ;Y5!|XpW4z,{[̺HmC/Ҹ?Tz*w[O_bKLuL:dX}ko~R:=*WzƮsxtSL'?ZWSx'G?FS $G n3[iKQڿ7<5 co'Zgq> m1R]AeS{-/F1oIP2( m>z 0y rDcQۿ)]RI&;_ߥRj,*=?GŸ+$ə%vZo@ޔOik\*)"J <N>7/ GiZأ&B\J*"~3 }+GpigU8giߡW4(w`4X.6BTw S\M!TpTH늚\she Hl]/Vᓓy?S݀Ki!Yo8C6}T,vXqoXBOPrE._yV)،9= R,(~IX%ZCwDۊq W: k*L6 -/t2\*OZF8v_~$ e_ݫ8I%*-PɉgR(yeJ;uR0z nE%* JcxQ9J hpG|TN,HI.69U'V Ʋ|er}fd/){'8mj͹ޮn'*uD۠ƣeyQ]bi-S\,D;_ðWO!s+I 9?κ)G:I95P]᤬c<kRjwޢ38ͥ)KlTqzq,M+ݒr>ԧi@8ɩBXNsȍ&͢_RXeiPQOrIXUiqm/!ْd%~^|>Ufrmržב6ޑq+}IjNϧժyBmɅ#6U;9+S!w ,*RDE2#o R>dV)>dU)+ȋV,Q(p^(:.2u pTz)8tcCqz[V[ 'ҹ-R/bmyń)RyJšIIdk:ۤ]1JiFzִhg[*|#f,h[ "yxtpj_RnG^q'%zjU#&B CBҹJ,r㰑\q1Z6A{ZN<2Ye6R]8|K0r+Cܣ!hKЊ)Ƨ&qŸM% :ԕ:ei.QZ'Ǹ8ɐLM̊wqᖩxiL`B+ >XhfZz3) 5>M}>5ZKJB;.m'܊s$ܡe3$a  Wc眛t؆Gm^/|#ބ3+<,0ɥ=#]Xhzyx#~St ?\Q^N.ώt<oJvBFtܦ55H[b㫬HJH?| .jv׿ڲz*EҔ<.VH%,XdJCKXl T9Sd7Iģc +xfRY~phz)]UxbMO÷K&2'@yj[Bp'`;&y*|#5ObyeUJYߜyjmi 5fƗ1 %sF26O7g\?Ժʭ燘 Lj&B-L\XmiWOUpBSjQRJcc^k8rh43|fCVh˵ -Nso!_k;Q $/UŦ/(-`InN@>^{*Ti;7!)ӷ@ b)(# !9*sEPl(S Hy0v߽'xGYI)84-qr@jrxҜ;4|PY/x8j}P^אdF]$rM%6GM災<ZΣ%xAcrN*NN@#8Ng6#n U@nO,2N w.XBޔcMt-퍹TNQq15,0n2P9U$S!qv ;03 Jps+>Jl!XcK L7I;uډ5TXB4|! )!gjn|PGRNߐ%$t *o8H=6= 9)") (u#\W£͎ӗ\b09{Ԛ^&(da$cu] NѐØ8dc>)60aL/ ?r AB HӸl`rmzn3 ݨ{2A=mG:|sLl N Rq?mI :l.pfIm |99MfrwIQi!MѹtزZf㪜~.2館d/S%H#Cʮ;R0fw䤵XJAҔ:8M, I.:"B;KVۜqilTp6ρ#ehґ-GZ BqV`+2ŀxJ֩VJCH *,B_70PO/c;lsM)qKCY[Q?.pR}wi%4/;%%nw@GJ0B vH0ڝG@EC-t<9!(a|b=j(K (ho:խM]Lq ߔ~: .Don:~2q%0m9h‘Џپ|EZ%8zȥ &ebr+g%:$3Zޅ27*yS5Ks䂥G;LHx}s$Lfa72cȰGB֝R[IQ$N\]mŢMe- -}SD`([XX ?̷JhixqOl ΋yN˃*w*h+oKI\95h8aN87'VyqFrթ"KtRB˨W'Pxd|Cї6Ҥ6 -8 yOmя"zK/:&bpUr|vt )C>iu#9PWn=Jl֡,2tA֮tRUuJ)8 ŴҔМcoJT*[?ߡOxWށl^T:SgwSv hSBӅT:GQqG!>QW%lՊhS!HV)%_CY:&ҷ,ñ΁;V]4CVYKʏޅiijs ?($x'MJOeb2] HB.w'YVY#'eȼ f8oc/%nO.,̔f?6v? GN>i4H-J4km0-A9 KV5zJ⊜|7|). :?)ZH<~UԽ;UfTKn\+dn&ki|f^3l]/Y,=5^EjZ-fަ0H CC*YFmCQ mynu-:#ZI8ۤ צ~Ԫl&=k}ZcԍZe[y$7*na^!j:u5))e<ߩũ"#H%D 鷭{Y粥g tK<-D)?Ԋu)Sk&] A(;^[qeq"KQҧlAؘhT|"x]jwŖϨÁD!?°3\MJpoڥ%=+3Eu%S~Z/SnѳMn0-CõtIwaE 4G^=MwވUx)^Ҽ2n-MW7{gDhSq r?ŷs^Jƍ>S=/G&hםAStʣWB4*S4HG/®m.ʨB[q)(#4Z0 Be<ɎI5 K Q1㸠,$&iRB ?S(PL.,r0>tPΌ| VP7'=4Xa IAXFFYA͓i@v'&6O0T1Np(r)ZA#֪ТBW|djs}c]d@MJ1`Z_J4Z64muR=2^VYB6;N'E!-J#(8 L>G~bmml65'v )j|恷?8ˈINNzJ1Eym 6=quFip9BN-gf|B@շo)^S KӌЕ!ȴ^)0Km%;>g1Io\q>B|rGS$'JݔNP.kW kcǙ4;Rv߶+ Y\b#?v`_o$%^OenVRy * #ֹZsrzI72AJ̑י)Ҧ''a]JmͲH},M`V qZ@LώeZU ɥw$B-bGsQЇ ˛U]BOèA.\}I p*S ȓ9pp%9Ms0^\Uy7W8T{+#Z !(HZy=Ei[l iËcYBm`;߯δ4u wۇhZz͡ CG8=6IÆs2%5#c܊ʩM.SOhfե [uQ\2Şr7 ,`hQY+ń4{j(~[~kN&4,7x/i.X/qD} m܆{|lZRP3ߓ@i>xIG)CmIo! T{ݼP= 퓡',Tp'rڲom$ˌ >7^iYT.T_gf^ c#Qi+-%X.(6> ~DO-7Vma&dRIS_ْR%.ݗ }=A>^% .ӟ71n֍Q?MDÏ23X#=(iT X1?PuEu*"F$.ߦJm.-_21/nNXufkc54uZ&5p~$6L|S8ƻDzuUS=oiC߷X^HǤj3tKBc\#^TNJxy&K@RvEy}JlF (вrNJ=L.ƷY:NͶP$?֪\¼\*tX-U :p F:]{OHi)ÒKc#oZtD,b[a e-P> +INN 󧜲3dz|h"߱%&#>rM,1K/0`_8*R(Gkv{@r$RZ8#^INi&!p>"_6K h)<_~egUhFN\r=QBoS.R}L6FQdSaMBH;Z&ŷ#%&$s~=1*ʯ$X~]k;}iq'厴c B\$r~SRԲ"4͍+(xZ?8lҺ( ZA $,U?r;ɏ :JۡAS$r鋺2VGҴᖰ$IIʎVs  RR儒I* a\QR>ҲI}4po AI֣%! lǽF;,t$$OQi K+R\'TRSkZ9O*sc5PlLߜc$b}YgrI!|<zTeٶpU{3B GR H$ƄEMP<7MF%cCsBYȢ%$n sZlvڀQIci猇Qpn0I5:qc80 rO*rFw )IO4ؒB3[)#oST9ѶJJz@FU5eJPF;欪YQM4Ty7'j#?fggI|{ ;%Ei ;j;4-qO*KS2HRTd k@&KR%)#@i9'4U%!I s*tZRz0o"UgV8vCaJMr)!tgKAX'$(J)0Lۥ'~u! Y2hXz妓#^ۗ ]gLq҂\ Qkۊ91W1u29pv'aTEwsrh/J*C{SؾAq2zQJR#l{TWdSZKP)ˋ@9 M>fX%uBui1PO~8*\pVGH0uM.u$-hhKcW\70"]A'֨ғo\厤P ]ZN1{tH E$\8-`if{rR8 )G%nئ"@w*<4TUJ%42xJVTuc]k o 3_]̞ӁRxlma{uĨsd9#J"A[Ų&HYP $tRkq4adk!( cqj]|xgU?aߗ;¶(X3d'd =JNOdxGbi2sm*trKA+)>vWbxV 9Ak8qz^%j2e$sgb>#J1t/Oj{)@-%NMe]$eu.v>>2&4sPӁn5zo c%ښΦa@qvԌbklrN*sҜ$̧H+9?)I&fYٗ=hG W*;jQlλ"ROsQ>L0ƹEu!>_9t\~,+M,1DZ6+oIJOi_75ZtZY5-bʑiqJ+$=2z|k3AfRr%WZ1$4 ғ Me.^ytҬVw1j4"Ե;~Nn2\B@ms8 9qI 'ݕLe%ymذ <($*ڸryFťNrQ "cKvbOظp}yfo48;ջ#w/GP Z Ɇ~VUe'wc, x˺+4{沕ds Zl+Jt&m)yDWڒz7YɖY}_1JX*$|/+[OQ^階0k֗$t9,.KvlJo! [; pN5#jj+>Olm" 4om z[lBAY! $dkiViK 5}O =)(CY9*=VU d4uCXw^jm#/T뭖P_uMI4ѐr B:J}k}'OOB76’!wRQk<;כu4pppG^R\zP=y@9\.v={T7ڥ 68އ(bnsۚ/OyzS^XZCq2mY ]y$CSq"q2eyo!>qd|yZ sOA^%Sr$@PRV6͊9Srd!)J'T-P RK C0D9FO)p*">qxd}1HG HFJ jB5IV֐~tbJwRA#\ykZuyR:9##cfѭIl]se9+ Cڢ[?1#?P{RX$,t+0z-N۟DO7͘5Sh*)QU5Mn*h[·汌\pP -yVWEhp[Yy@ (ޥ$fY sŶ*>tB|D"$ D+$$; (s@ǽC26-bQ%۞r8y0YyEQ!1(㷨Hzqsʻf&r[?Ȗ< aEC \H|oJo1#9>%}("(XۘZ{ (cp0A=jnH|=ls=YKrad8PI<ߋh$e1@Q%Il(mQ.FAR ԥӪi <%CubB@Ͻ4&nAHIBQ슗Ք')}!RRAsݨ#`9$sE>ZPˌrhl&nTA=E4x-*I?ڧ,{(gl}hm /u@Z9RO*Gci~FSouH]DA$u+?º-)']]>[K<VV9v^krij8#T[=is2qAmF3Y`3ã-n0` VE=Bi˻@eKRz7owJOs89$PZX~'VADOsboR!ijr2U1ҍ*Iv<*>vAJV)8MF_$Wk3m2Rq<Jpo S $azyN;N|4D`cAKl~i{g;gޠO3uM]S!N(ۛ5y,8YLP~cVẙ[]w,I_<$5|Fl[gqqZČ,quE\(`vMǂȍWo v&r4k8Y7+ Q-`^K3}2( 5ee1J[@`z%0USvtQ'@J˒v.<{oGas>H()j|x49 2WoZ#iq=G f j._4P0P \Z/BN>{ژ2NBН=F>f3rJ?gѦJ*>f\Z3Ԧ:ZAP'zݻYYI+ƼR0[h;foImm))AۓH]g(ᙕRUEL' qA儃OWub.?u <2kK5-)TDy@tXoN|"7y^sv]U)4k+a'ٓV𧤡d"Fyq_;{8E52q?no@ VTzgt'W.9"[{3[1HXCx^Ⱞc%]YӰq56YsԵWW͖N)XA;dXT亪eM<يyH&6'"z$'UT&603WMrk1;CJ`-jrHN| zz]U3OhUdbr46-ƀЏ~?߯aZڹ" *D=6ymEӿ*z+bbj/U~wm[z#@ANJzH%?Z孈ꢰrKܲ_< -rS[UJ\,d_\#^ukxy) )*"^ V2OP\dzo@yXI5jO|]#QoksS m򝒙@=+'MQV}.NּO6f,h0i[%Nd;!R'֔4/+Sq]R˒Tք O`:_6[ҕ{峤K+%4kW-WeN~IJo2 w, 삺}G"BS%lRaDz4L(&8 ;0B H]^2ބ2P=QܓJPiIjJScř$ HF+`ǥ!83+?ҐT\#>aB>X9)4}ϑ#9SHG~ڐ8R'eZB†-Fӏ:mHG1TJss_҈zz><(!.%+)•g9o*ʔp1b4="|r?SBZ谥7:Y(NlʁoMn)$ӨRP\+) k=A޶%SR\1a) eGOʪ.{>BRJOjף,$~\Ţ%z!$z-^r( $iGGM)†TIJ<$d~L\\B {cQ"MpUBA;|Q2A6 A `߽U}&(^Bc6H2 P`)c2QphъKOzza@eK؃U9.ąG''l `=9UY|2b y8(R>#KwcHIY'=֤kG0s wQޠ:!`Zw8R "yBz`5A0ʹ"FM;ȿ}_.*qXm@(RޟH;P+"PQEG>d PċmF`ZjI&iE 9qGڻ"T>o(r\!VshFZ[RBjRӀsXjhx587S*bjC? ͛N/-$e,JY?ISd#{ tܒ+ax;d+oE8uypN5/g% c JSt(̡H維Uң:xAi$ˈVFNʋjfrBqI;}Fheg,җo#MҶeAm\92v;nzF\R CHW&H$?Wa{1 VyEqJ#V}ԆIbhmc '½weF!lk-0JN2Wd ME~ᠦ-ԅȕN:Qrjoj^x*ĆO2uoʣkW4DMLvڪ0*[JA'z2 l'686̒h l;=eoôE nqXeܽ,yn=ApTlyhq $ӟI}6mZZ#k,N& xₓhuE cz~u]EkhI˂x` W-(˓{dt6tǃj\VqB~~'JPYj'ʡ6$v䴥X!RCx׷D;y GQWƯF~|K֣(SчƦ\PRͥį';޿nKOҪx氕-ݖג5\.Z>UUEGa 蘗U3OZ*Jm7z $bHQZt*(2U "-8˳ oyPyAxˋ2h咕&+%'9IRrȵ̐۫QKhR| %41oR- :a@~3BpO ׂ~0801$t)TpF2)T@R'{RJr!B1 Hi3٤$<6KI 'F ʤs!*p\t' :ƣ}#ťf2\py1]j׳,9|ia2)!'ֶG!byH*=7񧞋p,`r+S< JT3z@UJ/ Hܵ=QOQa7bE_qħ%aoF8$} ]1Ќ^AVCVhmCesdTA<85.AŸ9<;i4aɣoJoH{t)ĬDMa+)s$; ^yG$)梩 z.A)脓pTp~] >6R0ZsLu5Y %'r!$%X=*@RB؏ŊwL:DlN󁶠_7*H*0_a`&g oI޵*'/y(2[<ԑh%)c8 o׆ps=OAcIqyTi{3"Z$V)lV.']h뤗b's)zQ+ѮL,߬*%֒2әF}jPX+=Z"u[vyDF\`Im.7{i<2 LGx*Vt~g\)M ENoJ2x8#۝ V0R7*4$K4TT5XYeY?&D6زE\J]o*II?֫Q|׊66R|Ć$d ֙rCI%0iJ$X#ߥެzD+G>JM YG:w@RHimvm"Ҋd8A 3UܟL̖u`SMGֱfT{smiZ"@'sy $ܛnL5YCͤAE_(z/zj > )rI[cl=#5GW|uS^X([ Cl~VN[pNUyυi)9ָD޵x*COaIY=k(ǔtQ[+Cqμ 9흷Lq:E.˾אqtڼu1)`~xbIPJTܹ cįf nPW!o.ӉV&sLo"wʗ}:mJieeuVyW~yfnF3ZJW3RI5a%\܁h@HY!p70?r6>˴ph%*!YR˷y?*ɯRKմ8.sԋe'i}ƏpCt \0Ÿ`Β CIYQuNo8HQ!lesPKm#Kx=O`FPY8}G,m?3X1k %W_w*0PyB; ̜Ci8ԗ#PpBXJE}jЬiZMVtnੜ/Ca(z:=,')SG wadHb JC R:eY5[vI̅HO5R/$+LvP U(`}58lڬ b %jIFCACnr7 = q56㻬ņxgQ[X'(>mS[:M?ᳪk'w.Jn@6ޙ)J[OV]8ˊ_%W'cgYJ'|gZ՗ӂXt&ʴ1u񸍯_JE$jC^Cei隍kyn Ş!KangOz*ߦ:4*{,^kn"{W̙,GaWkok[Q^w&ase91Ѩsu1hgCZgQIi9!8¤d!gߦ-S&B EU6J=s[ -2~^EZ .Dvy՚zGV;y̧`u p^w[&PT2AH]meW^shTNp))>TidA0%E/ 5f(%h1y\ 4m;>&47 ViYN)ӭ VqS-Mžfߩڮ2дeb:j ;RA=ƙR[$~2$GP^9h /(b*oa+TނE((\؜ўESRL!@L SeUaN#j#)?#H@C ()pHA͓NM)N6 %!?[8%7 !eN< 2\u?RxbސMZem H =g8.]M欫!Xw48X5d!&ot N>Dz19*BW$K5eAj[GL$)DcEwvԣ&7×|}7y< F䀾fHU)UrȰ!Drkm.P`_Q.X#s!W),.H[%7D/RT$ ldRNP rZ .d#w>7$eS!sy#3K,,|(ҚRh|HRT6f.!C*S/LuǐJ3HJ;u56b =Z@#l7O/"~R@$|J"nrTb@ƙ$5 shHg Sl0*< G&N~tMIJ BsFQ\v G)9G(=ɆE szFm7k(P(Vs&$ҧ]2~$<6>E)O'LxIءSr+ Q#P&W(c8Tc E8X)<4NAV0El+SĈ6(P ATʹ8\ 6*I77;jQރ@HH)'|Rdy# G=/l~ȩmI F\N^sA'iQ<5(Co=0%N2k&!^f P7Y-Eԁ''r?42M+*ܞ*k!U5xXN+5(?,]}^Նrm9r@sn) Bo+Sӽi*M$.3!IqSFJdR zP^ Y-);_tJ4`#ޏVO!$cF$L%{Zqx+ʧ8x^Ԫt3T-{Q 29$.Wd`B %E?1AEJ ۝S6nsnARqz #ǍZeݧ&9F-ǹV~ΞVP px7W{1V:}Ai<$ۀ(g o[kj؅ZJ}orw42|4IQTpc=ZJ<QJF3LJ [ZsIZ?S;`T-a# ?ίOj (T}4j^!N&Ҡ5ֹBKoK  AH+; S.FNYj [mRn;i`JnsG],i%A=J(a/'?^+Xq0 r9Mj+GE>")HKⱏAgެhvQџ *za.51I'UxEHl˧"Ϸ2Ȭ+=rg SWmkݭ26avMaޭ,o t<MIJs,(<=+8,w z@J A+kcAR0yGVƙ PerF:](inv4۞ShRJsJӗEzLz CH!.6H#=[mREFHB %X)Ϧ+.y671ɒQ# BqmRIbc52Ru%XXq$c;T;JsRä_3OQnTQ;z 2mCmL p @+\yR*R{ #.آ+xKC! Rz\欣oY-gMt2r,~^Gx#:_YG;RnRpz5jWJIUa(]8y_V>S'G.ik92`좸ʈ/ҹ{ j7Ԫ7pcs3q'iR\ג<+خ%ʓ#|x [ț1rT`+o7QoJMQ#xo~LxHb>K/aD#~uMOr+5Ydktඝ/og^o3&B#ÍS.l)+V#)N}䪨@+9K";Qfe >\d9V[|mrI?ix㵲%*dG.HKnÐ/,ל\Cq/\pnf7ҢW@W;ZQ;d%WVA |V?A(.øn*U쭲zѩr$ ֑% MY]4 kҜ$5碵I`+zSN-; F9";+R6;њ)r#r=jIԲAS OCHBFکw[-vKrvsJʀOnemPs:#Zx%e?m# O?ցQɌhˀ%t?z䒪uBN$ˆ-@I$#iG ,$=0n (lDDt$EeJHPPG>LN: p^@% W) x$!{_)>@P4 A&QˎRU܊IKGy*( e$OB$W,d -} ʹ3II"Jr]0n8mļFGS9~K(CRTs3ޡ).,Jm967T͕gCY@(->׎cN %`2><c^ NX %N$=F-.ƌEm)J81s]QGdOj&- (NyCzPCs.$plP2(Jʌ}9X$sإP78}"xAl={?c9@耠z yEe1E'PIqԢ}R~(+ڍ`7NO)'jETOk ʤ(me6O8҂PTF %4cnsM-*_,Tq`+) Hi|8#;PMEy! O) m@FPB? Q!F5,ĔrNwYϺҺEdnpA  IR.@?V*N$Z҂(Uy ^r{˻IyM$;kTY$ ,ֹpD4S IFZY-OњR񙙰VDnye ?Z.W^(ƚi+T[$2G¥F;DvK peN\OOޕ}<.J|2uOnR*+Y\ω%).Z)%]OtGjHC qo6A%WKg{j ra HchQk C. l'$F7enjLq1;M>RT}ʭʫxs7{$Gni~0wF~˒Ty%s$iki12;(+AMeѪ"+2u7.i53XY(9I >==o7$Z>S#}ЖbPj..=]atGsoHas(9[2f\QG 4WORs\0mdg6?9kXm$~M*s)j坙[`2Ha\i J\uZZ5e3laޞ@rBSTGff+ T]FmnpMa#J a"ҤJP; VyxӍs@:^n_j_q%1*=Z4x:?\o,Di =FS8}E>s a>ƭNXx3䲸?C2SQsfB .pWG.et?9Hpy+Evo[%H*-l#Dch$\_w:x-bTFfj9+fkF`B~Qnz,SnE$7xr2õj15RrŐ1F-G>ҡoe}ǸJGtվ|2g\@-$JO6y@9mO ~:,qt / ԍAvw+*Jq2^߫h}IW̸ֹ;k=&K!Rnܭp"d"lFO򡱰ֹMPIp .AF3j77IaĘQAK,[vv\1c&St6$=ά%F{gֶ!MqِINUM"<II #9,Sؼ^7V =* JC}lZoө7ï sIEKn$Ҁ>F0-cxlB(Qme؊nJHqZE-3wHGʯ*2>z.^2Lvys̔6+ Rr+dxN\Z&ˆ\ T)̐JQ{TnI -<@,uX/i%~-6BBOv6adԇ 5Fu|܎֒"!/Hl_DU=܇б# ?C[w Q72nA8!D|n"S+9$b: + Žp7RtߖPFU\TX4<9#jd/y}R@3֚ <h'ya\c=z4IF{/i>wpW , Þ'&DҔ:jc)r'$D89prwO(`O>U\gnkIÎu*4|VKv6ѻ̇pRFqڭy`#x#)F@'nN%j-$p 7 p\,(%-Ii3֣Mg'|PsHFxJU% ȎFpGji-Жů٥6!kS) 4tօ_WcW,#+)= TZ-71x ۆ!" ByJkɾGAɅH$rX?ẐMᒭeRŵpKqy)HOˀ?*-6QZ8i_wjeRw|GoSl[/0šQxMlTVQBo#Cf|uxY#VG2ێ}?[,C-i#FV =r+K ֎[x)lvǨHI2KV͹HۯzvtR@@)>z1뇽GEk&,<쟝r5GI߱rCLp6*Vy]ߦ<#:˄=@d6HJm@1|OZGR-HWNV"6"ٻ10O[Sm%*++LaQ {Em[p2u}$tU u[ZQ,g$ܱiNXQHHԔK_w=LAC+' 1\j?Km?%/z0CX2~X& Y:+;6?><㓟#oxз_[Ҵ)Sp9;ky,C^'k[6A*u˄J _^cNCr]93-@zj.W5ԘPUҠ.ɓ8hu'`8ZWN@#lUoq=(YQJAEMV) zU2v#QA$`m#C"pA ;v4dAR3i g 4wa琣[`+疰.RA>|7_J' h}-τdנduG5Mc;B\3źb1I ,25RM`tԓp#cXy&AZ5.$|?ZP^7%Q~d^V:1jK~IRR-91'z֦-~"SAoUY"TQHo҇(5:ZK+sv57L؎*RI)JG7ʧ& qL/xdb> )%xJ )q dʬ`g7` TT#71TA)'%z v \7A/PtW5iO RHIPPtׂP!n`PyN1?ցQKV20:Oܹ% ֋I?H65(>͂Q);|(O[I$|B)}QX@rOOjBO=O?)}߁A`L>S$_qRאmUCUvM (@$䁱Ѡ蚐!]p},(%I)wQ~LTiU:a*doq?IJc^c)tK ?J!rBG]RSRL&"҆PG72 / Kk*'|e,]Q >{%(ުʒsLu=1ޥKަJrcuy| 7R3`XIn,JQܕ.y9u<k#o*[pN\|Tg)y<@?!B(R뛻2D!(2GKd h(1-d,Ztt)NJT@;w *J 8 E~S+%l'%I*4˶Ro6wV)Dym-| %> ޘZMB-}?kQ\,KszcIHaX">P劭v 8/ -HjF)J$g'UJZ|,^8Yl2Zg:Hzq By.)J~N(V|jGBq{ZVG\%*G\!_/qOl 2lMeO(%H Y' % 5킧] * 7*rhc`Y#(j2[xe}oB sO~_5@1{jB*\=mYa9NBֶia7/OggC2Ns/%l9<~Ɲ-jy/yԁ^-*9d7t<(;}EP0OD wqXH#X:?H}%?ă)@Y3jeEpHTjܶ=J),Y!"kNv۰*U%'Ϊǡ/x1 ʃiDQR':z#dhT8˘3|JУfF vּN SZ<ѥI%r|P7}YnLJۉ>[` t:,D[&f ߲4zmVUȬɥap#0''Hy'ȬˎR*Rv~ê8. ;"R8)BsoWh m&Ys[/BkW0([ Ar~S:Ino!)@+{c MK&wyKE֝s0\N~C`^7 E=C-ٗ YrC$4B}J ? Gz4P2 v9A[FNp{ժl'*b@ҐHZVBOFzHF.aTj;c'R$gtt`|P3HF@0#bVc!ȦaS6B5 %8&iwd_˿oj:RSC~{ⵡ6-JH ctoȰ\f4TG|Qg]1~弥i05Zr#S\"LPRNjt*I X2Ugڬ"H8˩$rcH]d6zWimKqr FZq/QyKZ@é5Vڟ#jZd+T\4Y J@*mDzs"*<*!K<ڂ]X@Nyqrb +|Pvsl.#)$s9=Jm)IG!YsH RMga2I 1֙$ #~@FT2jiA&s iN8 *Q*VF:dP◐Aj@7_Bk#&718HȪk*s`s+$c^Z/Av߯ENlpRAA4]z`E 5x `*c ``rP"(Q#!_EBVIy$}㡟("QŽ*ycRP" )'Z@Qא{SY D,8?o P0'"]BR 'Jw,.,48xp|mr%YH;ۧ5MDvY8;)J\Rrȃ֯PY/k<JU1z;yUE~Lea!/KSrjIeԑSiC m!dzI1|rAJ+,nvFuOf`/P^P{G#XᶻjqSPo4N H?8ȹ]. nc}K$&o!i܈!(J*魫K1L.05iv$-0g,tedK>Td];Ga_;j:J̙zti*lTFA =Gf ^~D[l ૥6*,䉚WTF7!89YiPH:C |C5MXn0,(_JЎR:pM_ZhjK2U?KIFO Y|Op:kDBE% 0֌(E~㶈,7gi)]N2vNhy IRyQR% (i,(M5u$뎒*s%*G2j+l6s*HȚ G;6ۯ#-Z?5~ yi߅}uЁN1_#x%dFY usG@9ޏ(߽LMAG9@' 'ެ4@4h }GHF li3y˓A`HG#fJORH{SSB;xS)E$(m|errAߞV8~W~M])=TCop+nm]8dc˽XqHJD7䇱"*vDT줆SMW( 3O)%'%WˍȢrB/W5jŗ $GYZ3W,"L}$UrHn jO}דl.FNI&XUF[<$e уk,I!K9HRAr,RCo猄C* '"pAvoCfQ`Q0n`'ެ=;h21EA=I '9g_>rғD6 TR8gMr)}? ;R"G8WbFe)D;UȆתkf `y"W,=8W@܎NjrVpK%1<neA}L7*CxZwRB9wa=ŷ-(%IwBӅuSQE?q"gK~eʕ:H;|B!bjy:ۓ~6G"H ^r_4=hU66JKb ev޵*4䩞U 2[RޔR0J qEĽV[Ӿ~R,+K=-& hq$HCO2d';U4R]1ֺ_>\Ł@K-G(SVVo7S7N+m:9z-Ve)}-k#m*$a%^cM:yB$<~B[2L[&ܫmwQS@R(N:Eڭf;G¶Ô?Jb]Y)ySiI^=@Q^p.#Pė%mHIϵuy970~-[%`$=*Eu ܤNO1YQ T:Ҕy״̧#yu !ėRA?@&q6`nyq`YۿΨ[<Ϣ|y;3"&7KAd)0-8OQWt8[F59E\gYqԒHqQj<0Eu܆VBрZ~uflaQqHqIW0CڹiMhކ_9PYKJOdV]yGTj/Ki P\`[ʀNsz8ԒFݥ,biI&ݬM4ڜ˜Rp@+d\n ˝/s4$ݵYH:zr%N+3C ڵ5Z}OO,=+wy=-/+xK6^ڲ{X%[z'|oFr%J&)a/@ n\JKɎ:c#q5AGs-}]nC[Bگѵezi44XSnFϖzkSHͩRRxex:'5>jj[J%*ʛ/|h905wD$"]mrz֣gʓlnP9rUi/g%Vд'qhR⦊(Ot2KI%/)_Nl4gc4 T0TZ5.84$H#ҚM'!ɮwiˌS!(RJyULi崲?3/ۇko(zz$cVJD: hǮJ9LgG}vŧ8YL?S'jƸe32DgTJs9z}1ĜZ.mjq\"yMx m# ]֥GJ9BJ{B5A鏭!)KQ#JB5aȤ# wɤ#AHGH*B1O0'$v#ⵍ?*B=Jyr RŷD; KNuQ$o~gVXeKJ؁ό6bI+Iddj#i=%1~/idYmIJ|\Ƶ=EjK;,6 @~HBHIVmfN)!#*SbᎪXSPҔ~\&eҩYn(i!-fڮᔥmœSDu~/IjZxd/-T~XrT\^9۴ 8< ?- ⇇2K12G/Ç'ך48EH:Z;s]Y4~9GPГʟ,oӭo71-:ּF3?SI><1̎S |Un-lMiשS:)mhִOZH)Z=$GAO,u92pFOCL漓HҤ%8BNK 55ʒRw4M rqM&mpؙNV ;.;*fTNH֢m.)(8Wh%%+!K*8*}^ʠ26. !*YIWNcXxjw2B ߸YR42GZPM5){L<AA)79JAUWIIA'oztl$UeR!+(OF:zSi%IBpQM2, J(bljJR&{`ބ1ELEwӠSȢʒ|%L6.RȢ'$L7RyTE H=>TȰ(8NA=#C(P'|}Ρ(eȡAP$35 2) oj>mVrZ7| zR6? ;t2AHFH#_$́d*Tr@eBO*? cN9OZhZEe4oͻB= +v$8Dl4h+S>j# ]_CerqC[FcO dok]Ì-+ci2r6eiT)F8e$N/Nv.r6 @qq+:DA`X-kq˂^ =OLhvY6E$!d?)@+2TOZJ2,lX= ~V@KQ *;`Vm!Q}rP? d7 Bj/'S.%̼Lל-B/\e)Y7us܊Jr nCi}n>4)Lp?P3J-sgxa R6ӷ=M0ͲoNUU:t=Wwh])_JvKLo.)nx#hMf>V?S{vty,˃\:M--T}A /OATԕI#Z4)n`VX"TqHͽ=mq]L&QC  8ZcHw+L\cuw;TVUTj G:vѷhq<)>aƫXG %HkIj\WfI[C[k /-vI67?p._zdW9qM ޴F{9(Ԏeka48oRDXklWyrS>䷿ҴYko-j H =9~!׶iQ8+2A>.1KO8<ĩ[I8}hֹ i6% -M4?̑"VCμSlgSh**çrqOtS-+ǐ(txuFu94v M+KO$J27?ֽRv7Vwڗ<HqiZ=$K.4R~NsW3LnqVq6j٧V2G %\t(0 7ۯ3һ g92*ȘJ@ܓB:.|5ESB2 @q\w;uj[aig4 %@,= y2N#zȄsVpusH9_mlCWTrA #z.VJXL5-+KR+#sVKp|jxa?:-p[27@gXo>r@n*\0OwEk cqkXLP vKg Ok=m\G*5%l[uz޴ie A“,)ߝ$y$׀kw56\):ig^e|xP$-O7:H^Iu'ԠD.@d#%mJVrT1Q%lѶ0C ~%:$S|XsI|B. D8ɔFTT`ݹ_F]wn;jkr4@ʜZ)F<ȭ^0<\t=tuG.oE$R;-)9&MdgZ˞.gf]#j(]ɮ:ezGXqڭѡS Z1QXEW=ԥ(R4Ug*RT0Si($2q4l@f=9%J>%c'֦5".|F I/>,?ø#N`]u4AI$vNp ;,A͟YzX"I܅FNz1^rA ]$LԈu=XMx9J9ҍ xwTi'pOzB0Vqϵ!c((R`ʐFA i!9$_!]{R ? Cq\Y@9V}%7:0?KN&Ÿn_ y(~F7)GK2/VG/aֻ}W.O\8P5&[W&6Je8hZzL#ϐ)N/LjWamRy\=JHOs=jkmXkܖ;YgHa[Ǖ1$(4:Tf/M~#jCqiG ORӭYZUgOQܭHOq-Q֣@R({GjtQѷG3D!gq/<6q"թtаT0֦]i0|C<$zW!>4)W+ç[-ALeK̽$d4ꯢ5W˓Ĝ=NkwޖFyJrܓE)˜'v A εIcp hi'*{U;: Ff ӵWzBհ<=H[C8sޥp I.5ȤI B\1l@ I#8U9#k,MOJZJO9 OGB}By@jJAa>BhJs;HW4} %*$g&k#r97a Bp銞iLr1ӽMIŏ"3Gw9,] # z /#M',t&)6(G|`FkHؤBA4, Hͅ|_ VFGAG\ k%J#jJK'Yt(@ )9x@9|\c<Bձ#IYFp'l+zͧ<*Q|HR # /Em˰sRL`BJZ"ڎRl*q5%J'62Mxai~k;d`2Ei`@R 6oS\Jqr-?u4_Sj% OLO_5j*y%Snp A}iQNSCY,矄EuJ't#ΧJ_ԢL9r_m!c߮~2Q죜=o*9%yY!<pJY%iVLk\7Kᡶ0BBp0;oQcK.|*m+Z;ԫTidW,xm/F1,fX#[USo[Iktp4 **$~@z{UZ KK㋥d@-VF 9J2ۖgT˒j4ʚZҕwV7ީ/+8Qd=76A_R }+ZێYF璩qfTjBZB'!$f*?<7SPS J3r|($~1iCf>\6@;َp~ڪK3^.O(:r0QxN OMR+<<'Dō  zu0N EUvkS)#@lV2|"|J}qK(cΘT=S?`&h[lpM+.•%Gk[0R^O Qw@nN{}~_wGT:V㺐,-0rE{>2q2R#LF\7]ddao6|iorcΝ{ ;:{S$Ad#$qҹGX?"'m%`$F?Z}=99c7J8gwuG DD Ab+p&x_7? RbđT/aQ,3COs__iRJ 1Rp=r~FjMG<M##}q׺Y9y/$2[ۑʒ5a}JQt(!)Jb u|Zj<#6Y O8l+3Pɫx|zoA4e] AA[m&w&̎(m9sUڄ旒PϑSGNvJG?j1[ KgG ]x(rA)(EtP90V2Cm>akl@8;MrT+p#ОCE$5I;oOHEg?LxW!n<6H2̙Ms;%$>l9аHeVkwE4 I@F"LO(W/F$ 'I"f<)4xvx V b,F+40Y|F:d~k#۱#(FNA Vܞ`*.Iv:} <3qn]G|j2sܼ5BN=r]aQku^0ͺʔ??JgU>!~!rkව b:Y&@*e3%CC=ґU Q R(IĺhXТH|^~OzX;ǍmZ9ol\ +s5ҼڸfDl~I|M|u&C*JvRĂ+9yx½JVGm}zJ4,WM}'pX5iiiNI򎀼 ͭ* VeeoP65r4+lQqNh%HIi Æ|pY2?yWĘ2u*h+-nW$:`dkDaT3e.ph*ubmG}U5i:zD*E3\i2ot!{4:~x46tcWќ9A~Қ|mNIRNB4e4VݡmPRmq?ښsY+Ybꛑln1Z4jjZiFIzU< 0iLJz'YxgDcъRQOSSix/9$(XԜ*XN tI/$ rn?:PCnxKKqHP 8 @RW4$'$g*@FD#VB˄c#ra@ZI#;H2+:<1?Wqk8l%_~s턓Yv}U&N_ze[L3a8@~%)}A&(G.ɡ.ܝ3.;m!$sb|dsק&earW.8)KB =z /,a1o=iXvSmOs@9Di7 !:mUQ'. Ky#^c@av\sd!N4<޵- vtf"'N7h&l%KieG`F2ӽ9'[:iHPzboGHnT&i(jR跗ʖ[׮>tY5 kM7B\F.qm  U+uk)Λy=1\gRİm<0[- * $6׵uZfm2n+AX81޻~KjG>(Jsδ<S%$ehu5RI "=bvcek.,4G7/7/kJ75䖳mYHp2~umn\Ln)[l}3-5>E u@RLFmB_gEkMe-I^T 0Sъ:"\t.2D clנ71لCXtlfH,$z֥Lb/<\ + #c5%Uy9z~z/m S5mBO1QjcjZ.!f\E4J3y|DZ~V@ (dzrҫ%ٝp B ĝ“gn>P7$ѕΟ0mL? 4ÌM#?)kZӶ3azTE4XhI6:vC+vP̿ޏgZ.=>%Nr $Z׉Zi}j.W {鎅RT 4)NRQee3ّ3*q NUk EbEJ~$%Y{U,W܂Q*KXF0G_IAO\*?MCe<:v *.9Mp\K}:GiF^K솚P3!Xխו?I'G*}5ntG9mQ_tˉnGYJGESVl#Р*S~b QcjxH Pp IO•%򤝳),y E@Z ނyΐˎBr@ њoOO}V!tu ?w)IM_8-<ÓJ ;:qɍ3J9>ƧpLɑS#ъҔ#RxB {QZ(c0h֡z$sn9ΐ o˟zB> y #3iv:}-ZD++-h|Vֳty/Rj˜` }|OnD]UnvŎo"y}CЬTxXVt<۸1lxn2aL`kmHPf%]'䝨s9~o$`kG CdlG HQA.ɷ(ZDK\COp~xaۭpI8ֈaŅ}k| 7ҺMuuS^PQ%m[4xժa)Ho2p2Ϧۊ MZż߅sP~hz{;7pu b] AJa޻*9We/PELi/WL%'!@s^U()lTcf5N,cJ\wjk֤/8a3gh3,Tp{ƲIrN]SQao ` ErnsCj[GO U[G۵ѧf&ȱLA<#c}k:&P647*ʷJW0#؊5)aUxu.̖'9?Z <MIJzfh(9&+I E| Q҄c=$TOZ̺cr6(!&ER"zB9b1S&' <(*P ''$WD a2y;UyTkh!E@`j}tX)#Iڝ giǰ&kiA fTq9!G)P)/֚M>׀!)H' I)Q(9ISs$U8Ȕ$%H'mӤM'&C+XW2Ai*lSySF(I(I)cQCU'5A@*L[~L4#O2QOI %)Qǭ1?ʤm֧0ܞi_N(8cbR9:Rm1Atl٥>8BV Y|0XJCpZrA%dc46lL*^H }:iA$D$ Slg4`ors) *[2eZico6˷4\s=NGMJ،9E)jY x/zY[Kvu[dczZxTo|B_yzeO)bG*%G?A?=/Fd9^!bjDi-aY@O\6r7/_UvrKc*;)e 5qKe.S(YArdg+N:&+N95)۾ȶެwG%(9?žHҩ%_f4 xgȶsU͞e-7D5^`ƥN[t^Y8|2-츌yΔ{܋Uv qM=)Lʴݐv(i+ZܒK#r~IBnӲb<5Ld8$}?4*<"^Z} xwjN#O)gd2ۡ!|ݳ=JK.BrU+zçKzcb%@d䤀>VT4smQ/L[$f c0tJձqgAa|\YQ nD`G (A?ú}}C^4r>JIKc#AD'<$P7R*-M c'Wk8:+$)Y(*z 9e,\ܭrậ.Hrxe +5-xKoy|Jы,a0ِ\ wOAEJ[H ZRBl}y^;z/' ζRLZp6\tZtlYQ/i*KZi)xNs;]NbY߂ZVUI!T3f(JEM/J<۩ JP//iy8k:0  ⸻ګuzfl=k `ϱZ/6Ve~@rھ:nJiIG&9}k~poS~*xsBCi'C(,qq B$ s'+Tn24O+G]XW-Nd$'8˴(\HFBXZR\~;ؒK((7]80ed:#<@'~Ӥ.-W4UZzV4|ŠnUY~\[JuPB7%[#cKc/ tuk;(񾩧yFr}+cy*ԤǍ+S`(GRPem% ) G2N v=:5gG+\Zk)x=~ZQ^GzN^nMPخQJږd~tYx.~ҬM2 C u{g$- 3_ q*"+$I+"6 zi((:Qϒ]mm2ĕyTU&/.[nir8Po#a`Z|EKOjvɥ\w%Kw'iHw*AHdQ+R&CbU>tPRH%jm,G$`Q-r]$\tGy=0C+WZrҏ8#T.L&=pmO4gI$d?=5rF"/) ; Rh zrez~Bդ/mm#l{|*JeהNܣ9Hғ6N󘆈n4@ +:6 Ȼ >x^p.L#Tݒuȕi&mӧ.rOK<-_JZBe=?-Km;wzM>j*q^ 7ʖ- Rydc*!,}-\**q@[Gk[$%(.M- }ydc6J/@ʳ|g4Ԫf48!8G(Ǿ(*>sߵ4E}` iSl1Hm} (Jpv{D%i*zzDGu.}T)ɩ+'g%fɁ!\ÕGx5$χLNν-m ,odUΐW N^3b.K;-."ءO#zG0W1w21k=tPM1), mL/Y&|̤ruù3kYJqJYDT̄#8;->04㞃aiR*zTR(hga mC|K7SЀp6.9!QI*9F)m2ԅ'~lNRkG ZWHgSj:ni%U~N7tTE d",UbsӧJKg#zmp%>I~ rs~H.r$Fw)gL0(?/3{`'8W*NJQ1elq58oɧJ[@ Ij 4 1a6Kv9I|T2B?Kș)G;TMps58};oMk9~x*ErYn,RRJ dE@j)!kg|iaԸiS)9#rV ^ƸC74) s| =%Ju^k6-%R{d ҨE\K$_N[|Mk[ĝu4L %ﺵ0%A$ $3ZKӓ2etftmIWNvk¾8+>$WKD /. \u'! %?scsЮ,ej7h>E8j;E]@Plo&в)3Z7 nDylY.G~ձx$VrtרN6wyZ,.آRKol FNK>R(YG$@ӄp%/3w5tӡVm}U}ki[:ѣa!#V]MtKvTʁ- $$mZ\eG)fkpDa[XqX0Uy@}Kr\9phʗ\:kIa}HMܲ2tMRкĜ~+OqmAI8#]F1u(6U&[; Q; 9,Jl+S^9FXR)M<Ǹ'4S=7 6ϸ`v\iحNJ<p=%>P#;`twPNf6y  8\䱻rB{1Shwmb۞{Kpq Ӫlu9̌ qYmOrdgz\b Nʤw`%z5#i|[Ew [pr$:;vsx[ ?=+60aOwDm-.PdJvu{UY&㳘%ŁTrbr2VIe&խXEMNfVq\Exg<{a(\A9z&uzQx#R疜 9ѷniT/1m;xiW3!qcw4"go![rfz֩^͛đ)HB~C``EhGk_R}+Lbk[:CJ9Vg)؜^,Lym\Q}XUVW|CbjkIQ ̶IHT$+R7k*ͿdKi~ ;Qa7l7ZAI[XS ?Bw+DW<>R7vJn.F^r|v 8&,9g-FANި?4.5 ~͚է?IC;Fli-إ $RhCK 6Uҋ+'7? eW _7֨'.l""pp Syv$SfԛF)A3:t9BH.s$l{l6+"aM t%Ne2q8ħZ3 io>+*NԕaNQNt4×&]r#y>1YѵJ~"WY'J:RJL{cAmhKV#N\6ZQI# P~Z #Wu}jMFғ R}v#& )IH( kAECp,/+*WÆj[ ,`nSQJ|ܛJT$41؟*w#,>ac;-\G1ޓ2)!*/9ͅwe^;2o$}OcRt,sM:QELܔJ) ޥ*i$@ '8Q\I8Yp_)01 )Ϡ!s’B)M'lrB.9!^#E 58 TF;f(;TmrpjT}HX|)9G;(K" (ҧ8 T P$?g,=({Ud%SK+_b?*RTq:FrAk#r:Pԟo 03kWѧÀ'$N3o硁Yx a!!$ju 5xkdh.BMg;qG=Х_*ʟޜ3EpNJxGq'Jۮ2ڃn~tFy4y!J>dia3=ūڧPp_+BBJSsZԩC)c6DFnSr>LY|qRJ>,%oNܛx9j+rCT}w *ze&"L(tIko<`yJ1ST9 nRyYBMk[wG*pyʇćI NïCJuQP|, B2zC 9XU쩮Ҡ3{-NѴ HeMغRs$PVS4(ǂE~aC>!* bh[lBYJCAP#=s^sq97hB֜ykA`h6F1/%EN_ $yO\)5w.* #ϵnq嘷K$ݦ-a-u7UDE n][X*y]M/.6։>Z>)HmiRz|+m&&K52r[jmBRJG& 킊ӣYc|mHAHߣ"":BVø>N\Y4+ɓN )1ξjʭ,6jQd8 jRxӶfގX [{u+M(Kv= ,Ha Ђ ǭt8u&f\'8C,W~!8 ugh O7_ҿ:2B)譿{FL.%U/.iLJ %v)$,.6AUqmutR F7>r}6>k{h\%#_>ɧ/k&+h)nr# ַtw5S'Vq;msQք@?ֻN)3*53+sS_U2FMk|/Q#ߠWyDe',#n85ޘ[% V{WQVg'dCmin-衶JBJO;zjNN($9 aֹZ" ;ù+e)T>/ʬƻٷ$(ŝE]X|)3ܧ"R켝]{qKB$ֹJ^qaeUCƆ ƸE)Jqq* DZ7^O9nhʖoOd\FCr=jhXdܼsC5*cl>22N䞞uj ?JҫoR m`<*~\4%Mgo*qC*O&@V{beQE#vҊE?"I/}vUWn}\p6Blxͮ`oO w,K#5%6؅k?m+LۜHY$'u g '#J7kl^3 s۾ȟ9TV_sCZ.qtR%{( )mZ4a)~E$OGxttz|HT@T*i[`dRzDx~HBIZĞ0R$bhc@fgxTO(`>{MgZԦy>D'DUW [?$_; -GO{ca%<"N LtRGRqXO{Qp*QʄshSx+չd|gamf8O19_֭RRl/hnaEJ(QֶXEt9HZ۬䤈(7XO?> L.ȴ[:~CAt=Hϯ}~Le8q#<6|^rOҚI/(VBml<<$\P9Zh!yIS5Vz+u&E+h&y;_{ 4,$Z2+i+Ω_:zM5u5ʿU5M啻21/ԩT~MN8q'.o>%w$jP] ( G:8vA|~ђR0N>C)جa/OMb"8~ѨQ&C J|A\ $H(x-8k"ct̾Z,-$Q]Umo^SeWOJp\%s&㳋֮ߵ.ѭmnBYG[4WM`g<1ZJ!@Aj.9t&| 𧍺7Q*NlՉf@ASI!+H@Y QcՋQ9!۔ڛ\V'#$1V<۬A&gcExo)ptO+>J{9'd{:胆D %E%0:B@&9&K_?ZeQ}iyG H '+-APȩ HQ=j3 !}|Js1کm)t`Ts(t?$6)t3,>N2;^0O{1J]x%|BUN6$ $sz 8<1% 8V8DZa|GBjehj1F°TT>45![ SERAO1{-Q ]'/!u9P hj9 '+ X(ң瑱+)J JF稦l)#m}, rAOn×רDeBT{I ~lwP%?;Ӹ2[Ahp5%%80_:l"=G<Is4%ԶHR8"MRZy)Ta@s%-ieWW pSo4m&ŽM5o. ˆ@ߗnj٧J] 2!_[jm@ E'裵&p| QM)N2 $C󮒴nC)yo  d03 W Mʶ5 JBoҺ/Ku#"2$Ajm;č_|Z,)8+V*,CѺ??C')2JS*RF{*+){Gq%,Ҝ[e(P?B6_K1<[k;w \NsSi tͮ` ӭz%”']yABc$pN#AaƛyM(z(`496wHwz<ǣl#9*Qްe tgP!p8caG^Hg2tVq?a6i[nj!ŀcpOWs N:azXyEH_7;j\]mymrKOL= $PD(a7Q6e1Ë8tUSi&q5̸nyើb#EE2eLJҖQNqfԆyT+rQ='e0%i'&Jcy,g)?g9z%ۣ\E) pH| s:\62|ϺaGPY+S* 8ۦ:V0#oZw]:ݗ$k_E?-kuMAhrtI'JUH>pRe=A*t*ϣ+WMZ,ʵ&;hI8N3뻬- '9'0^B vsKڶoy6.jCa*AV3˷OJE}lR+zUڶlv&}[)F92F}.T&~e6ոH-.S(둏~z5,MZYO/ݛEvkGoV>疖z8{(.Z*KeyL8T^&7%x6[-ot kR@=SӿZϩ/ GE̹ TM\˵Lչ.,}k2L=G$i^W]t-.m| ~BI l[tީ>-vw̬%KbB0`y-A'r;Ğ"d?pȺٔ99yqG>p&ÿ6!ZJs[u:j;G9JK$K;(P<6|SW)Ըx &Wؕ͠kѳ6W 4Xd*[ ,n9:wVWOJ_,`7pPDKrI u&{yɅ}p^.ۗlk\A8 R},RO O<^8y6X)9!d=r+>u/ "LDq sbAr:Tf k =EK~^ISe"yKBnp~u[MYn70\$5h$˓1ԥկmv*qjSex &M)KP'K޺* !ӝ"qD#A !^BVAvHxSN6͙w },+ OqAaX9B:Z:O29z<'R"QqeI$zw%2|y5R} ,c+raY=~tXŮ-ɉJ]JBI&x"Gt-~ TS,[7@J@Gq,F]#dC<)JdwR䛂fRrc4l&%N8S TTwҞi^ʶ1SyQvFImC Ym`zT% (򠒣IEeФzwqLHDUJ~ICE\ (|2Oe{)@gqʢ }H ~H'ب%I2Z:rLW3T#bc&bpۥ C&%tC?ApKNSS!n:pdTEM=8|̛|%K9SK $~$՚Ue-ic/0⡴AwL3 X}7da8HVI߭tZMJ̛,ծIjJ? >Vͷ,ƟSh[ޭ[ؿqLIRXt$/1Dh*| P]Ȋ"S NWD!RI-tPKF0P'W{ȽM6YO}wƎ⵻S[\][9#1TR?T)1?ck-=yBZI{sXm*EtN7j= qD|hqi]E 6_-!e$b :r{7c/SH!* nNԁ/y>|Ɲ @-6kκ3MG8jpSp vOUQG{zg_;eZ^O><IJ-sSTܷH]-dhZ\(䭦$v.K=qiu/@u[xԺdG{rmZRU7A(td8A2ɭ$A򧸧]yG2I˄<(:;m<~$U#+u)h4m)1f*uQYWVsn ]-hB[ FI#e'P-s㔇zmhVXA<XH_BcU/ uB2#yeta*g+)Ir~9>:`\t.Z%єBN֍gJ8e~٭yפ>-jXp; 5΢Ƴ+ל89I'6c< x5*ٻEHBwJJIk&UhSOKEvIMyEI9q?!E^$u#oVtqޛz4ݎYAPNWYьRU_UhR%>fPw֗H.ɽ3gڤҧR}$4nE[֧"\U$`rz_SL2LiN i&3`'?zt|oVhs~٥Vkw\Zi$T96Ӫb ux V#Wan`g91Wt18RRR}jNOiO>9&Wtb3[s!rN@2g8W饟R++O?#O z/Zq{Rm3J *#ǒZ%Ɵ=9ep6(OaBtgW|'O^(xn_nV:I''D*Lo!#TRNI] r~сHGrzfC$i=ApRQ']ytਥ<ۥsNdϑm|*}¹@(O@.pXrFkRH a+q}eYR4]x2tIӦ%gdcޞJ5Kj)@=:_% d7")5(i]B/9gz2-X;t_Wl,<$jMrKЄjl..KE1j1ح4@=bsn_<5Œ]fe)~UfR-e~CAPPʹihk~{~ہ[< ֱ֔'NvFlDJ,o8>#uLEƲ"׭J#Zڹ|t~?v}줜nXcT#VA#=lVRhs=H‰M#43AEXH5J}!:Y2|0x*Ҭcih8Xep$W[ed&`G>˃ͭ6iԀJ:cRJ^W_B/c/8Au/ _4֘Ok"S12lv)}pQv; BsI$5Hx7ƚJޜJTYRm @s+ 㯽Njq`!J=Lz0zJur tɈ_ģ‰ϒWO&3UjI-4 G"A)繩F% ɰHU䋖|L`@'6H*xêABRNvl FPF 4g3\VR1iYLQ0s d<*#0M~(9IIE#'a%P8n;}^.HIk.]K=) Ǧ1kV tq5ʐ%ax :ߋ:S7kh5SCP0Aއm7ɶ\ W:3]cZ?X| .9$zՌQMw0ʤ%*8wC784 vO o}B %!#l5GsY22{`RWos5uE]xϕ+?} V[ ;|] s ~\$1t5)a'ZHH@+}#)<Y=9@ᠭkBr3P~VKfʍ滦|sqBՂVX=vY KG}a8sq `aW!uٹjyEDj.P n\l:%% C 0"383އݺfGr+yN]TS$7tad;uO7_Cs*ѧ8AU|CPB՗Fyc q\,G)*{ﻘ0c|#< =qY,Q9EG\ľeq[F߉/CTS W(žO8ƽ 9jyM55,){)S#=} akQ-䮹4Bw1\Mu d!=Ei}% > ~ s=.ɢWmx;^/f0_C=F\ףl\#ڗ/iJIRF]Ӣ^U9aoRO|}ļL̥ˍo:T{fYfyyE6Ӱ֜OW-#fH5AJQ<_kanZM51xç9rse%[|TeMfPaz3M8ꖌCdנЩ`y1CĴ%LOkBwmCB8{O4p:SFWO}+Sh% w+ltHr;GYs msSrKIrE.8x tMnm%BNqCHIB+4*xB# 3 id:T.3Г!v?Zʹ!ӣ՟(O;Fk!^K-C`k &CAd*w[ZYM vDMeu^e8N~V* kӜ2⮶ZUgҎZrHo֙(.DOK| G" A9Th4$&.lZXQ1NBޮ›24DҞ4Ƙma06+j-; ܲ<6~iR!a*Hz ^wM,|Z0[ C%ZԣEGQi>͛C\e8mȟ$)W7j y×{7AZluW6{i+qo;M%j V}ZtdF -ENj6}Wu`1fBϘӨg|Ecr st?P;σG*2M*T&RjVdWi:L!\jBr ]MM%RoB*[g_ZXC91$_M8ƥ:I_SHFdg$HFaWE$JB0+ F>t|UqHF<DzHGys#sd}iX#sHGF4rS6i$2kȆ/5@:tTo.cB +o\ph)qe i8CmlF=:$6,~ !-_[ҜY%N{dY2P-DҜc~שe8%I)PT1T[XEE~>4*9gԄxj2P9-k^]\Jq,>qW7|FŔ IrTOҪni*O<21| wP)T NnnHO5@Zq)hߧY*j/ϱV_u|蜫nG2:IV) 3@\?<L/髛A@J9w۽}<~`bH*f ^@}XO͚U=IIsSl$$w /ǯ҅&d4M  Q~܁ZoRr*`%5pO2y(I>A0".-"ͬսo=INh|FW8=~_[O%|5 gۮMtZNsV2Xw?FKXV{ƲpO:+J\ E ycqfMwa2%XJAA FԖRO2b鏳SYj8qlk0L_n^t~F}3C̯Y=%qlb㦃iIXjfMOJ֎^/ (5h.pi\]#g=yK yV\$(jl=C;ۺvtʎu(QI€ڲ Z5]KkJJCEL6Umu7Ni%{ʒ\}MZZ=cqZ>\ޱ`mhB]oRxufj+ɆL <ɵN8)}gMHx/Wa-K,m${UI6EI% cOJj.y t AWc\ۋ:O_:Gm8; USXƔv*J0A~;~u+9|\{z.AmRZ< (ں)G0ϡ#5GKIt#Na fS޼~Ǔ?J^^mRW 0kފG6/bSy^K.8Q򫘂q^AESpe_kM1xJ\`); Y|2B7pX۾Y4UonMm )ո03Xߦ #Z=, N OEtz-uŸaxDG Fb츻O(sNPIw^'' F^TIR%S >;_nDm8_v"#Jud0l0o:1}TL)źgX/ %6ܝ2һ=_XDiqV Jy.A72YgMXyBJܝќ,LPLf`sZ9'5J:AB{W+81 چTżBx;1(L8?o!L,6F^0}kmJ8hE@EX#uz֎\rPdgxMБ%2Ù rDOM^YsDd"aOBp#?pHPy8Rd+ 4@8Ϩ.gKg( xf\]շ̱oe@wXGC)o mܩFcBExO~!%{К՟*K2!߆|>ˈ Sc+ԧ7)Љԟɦs6cgT3գFmGy/*TZAO`B<=Ebba?m[gn*s[9`>%0[#r~*˂+ߛ<Rw*9" ypcj4a'B^бoޭ>75l:`l03DK ݜ2/83>tF)YV-b:Ӽ) Pz Q]FaR)j7>Yg~cJ~6#J]_Lš6aԧSmZx昸Lym'ވUIIR;1\ݻ7ѱNJK SǷq᷉]5Xvm*M9;8CاNEd\S})9*%GIar^AYPqJA=vU/'VyU3 N[RSO L($'8$S@a$6I”yGJ]ह6,`9 *m1q/m /Xttx>{?Ĵ+K.RĖ[RnrӭTkm-~ҍFǿ#^"-M4)o]w8a*ݒ))b]Zur6Ā3cֹo'GkzĈvʖHY=MaIrNg|/rzﰢADI 'GT'MJs,AA䚚4HRs1DK)3J!C/e`_`\!%pwjxXJ ^XINyL-NRTzI䊋1r悢.|Qzీ".sc$ A&mn7W*{֟hdr8y ډY@tĮ밢I͛|ǝeD=qDC"?dM0پg1m/?CҽqSyMq_A7-pcW\^Cr= q6FhMӏUUeInߚn# ⤄O6PgB _$_K%^.d+N#[1 3x`kNۈ^ROJu=r t`!+;_j4Hu'&9_ln}dlʕ"5íay,gAy*}~ m7=Q 7ђT@=חŒe de@ej%IAxQzJVu(>R}#[<"Cxn'NpR Rk#^Y\MOFqKx4JJ|ڧ r1~š-͘s<};E*uVR$,0~c8#^ |VO)-Eb:'2yg?PV^z)dիV0銷xE>QV>VJ: G0;37]n$r$kr~q[=9j$} ?J!g/e#KMKj+ db\#d 5$d2ۭ0@*N7J·Ì[V.S4n*[V ,g'U[n4A)HAu|wr4 !qW鷸۷k=!n4+r8IrՖ_KAepH0'E-ygb}8}e-B<- NR6! νRI{+uJT )'e{̹ N\I}6 CkvԵCYY t\_ugx:CX@O m:\䚩Rc4júʓ.BKhՖenI@|-;U[圏}Ϙ"FAuk'AcA Rڥ6 D$B?>*UcfrQXHx".3ҶWAT%ޟˣS Lsa@{V=#r-(%d]'##OiSp/Jᦑ,mVB L%sWRyA(߀TW C[Ki!M86I?F^ ҽIsAl,#=v}Jၥ_SZ[%JԒMp )aG[T]mϸDigOu(Icy8RA)z>f ӈJ:mMņ^djXlsW/zM)OL4_V^:O YIFszJȖ\ζZR!a5cP͝¹H=A_5S(ˍNpCqî ¾3{Wݐ0:qfM[U,RX Ac9r0Ci# x(jڄ?)"?ƓSJBmb>hpGz}C%?c2|1xk2bgl:bHHx*9 kB֤g(]VO OUMJ8y$}ؓӕ8nRv.yo&e$,)rO^it& #F D sNy4JO^)[my[%,RD_2w;F ƅq9M{B4@) |99=i ?yǦi֤#HG{MHFx|!BA[LL-!`'kx#FCWRyUkxjۿ{t#qwJ9lORHz]j8†Rs4<];\p4)1]9͵Ç"G) Nz JVגZ,ϧiƮ8I_ >-𧅜Ynϗ:VySGN.9dVB.Q흪 X揭]ۓ6K'6 UƢղ@ڥJ6IQ> HB.'ٓioxnpPC!=+{w;W-Z: o/ۦv17)e88*$uZ#9k9U{‹O C'<-juǨ* oP 0ns^T\#mǭe^:e.cůⷅmZl][Vi7Sh^nTmgzѨ-Ҕ);+THRHPPۊ_e50Ȳ^B`NsP.It, 5qP%&SsS*$$[J2AJh (ZԚ7A߭ YFܒXSGXR1Jʴ_IҊyPrp'FN.-e?sF-Ti7+)pK!C$m X2)ܺ&}z"na)*>,_Lndwn%ԚR>&bAϖ')#*t[,M%GaشɤŲ3qba i BR6ηЌwRUebW8sIpFB 4)r6zW/%k{͹7izY͵ <æwԨ-U:9FTnvc9܏onSyE;j%<99aMmp3׿J $`b| 2IH^1rfSo,aœCޢ|q^LK/ JX+c4U'O=3xk\b n9L ߝj)=GzRltljT PRa]^LRݞL1M% Rz|o+!nhZ݁TPZ[8xz]ԛ<5KnHKC[;KDz􅄎NiD'qIMgW%Nii/Kԑe6k02ui8 T*2eũ-;iS` ǡ>||eCЫ Z d|*ZTشۢL.D+;)d%.;Y$d+)O#nM^fbD)xOw Waƹu]QJ1IM-k…fdFLEt:})r GKsxq-8ΥER\Np8 U4W?oJ{.yuS..3s8 +uEH)F2qYXZz̙_7}F{s\R ZT0U8=ĵx:DG{A%lXdCn۾n:z)E쭿W.wۏm*Ypdcq3\eeXp7mm܏Ƨ?;gdn'j-YQ:B kөmX8ȣZR}MVma +Cvs1SvRPΐ^_*H ʂSvA韭uW~f}G7mrm(-ߤ@g"cJּqV75z14gάO7(î]eB:3hYXשYm%_e)km`3PP4m<-NyHu\ZA#^|-#J2`Kmʹit4ߖ<Sk&u=־,TH}Y`›Ë v3``F'4yMnS2[['^?Y%5 5OIy#L}YPwu{ruT6gNx3x\K r 3Q`?ܾX̥J `o`G2F uAuR!A$vZv1ۙ09V!"o-WTS8X:M:)khH$덪:1xȎҐ) $skO+S#78+W+Z ykt8bR:(Ev)_Nҷ4b(*Q>LGqN-ȥsl1Pʀ6G=rszM7sװ9VNQ"+ܰ΅|ĉHW $ \x7l, .JzѳPKe:'=rn/5hM~SMY.7FxhZbmnTs%䷀9Qr{֕;/-[|@+H0;mS)C &s}< |7g~ǵq)|]mƚ㮇Tp{ZPh\e(5ǎ1Em~܆Sӗo\,Ӓi8 O]UˁkJ'$JlR[iF!W.Smq9eʦ{\oM:U,ek %[MIؕ!+ڸ|{D--I ߡ%iV_-ORR"e_rί3eN[#Jp1\꾝}{*⬸g?vv[d n ZHn\{+:_3kkrnLtԲ]b4ͥ^e"g׋$!A>X_68'" ҜmjeI^h4|iXl`%<:kT "&Jמ ^ʹy|ժZ|IޔB }Icb\mWR1Y)$zح^]NW4E>'j// -v\Im)*Ҥ:%M)h)#V)S !c#t֐2>i?!|D2>Ty( a?SHGr4{ό!scHGWސk1|V,रӖ: Qhm߽NG<1V,$T9O(ЅqKNcui4ɟa{Idjy^՚^_ZJԕ}r#Y6#E ZT>L wF{36נq0v .H[/ 2gӱІ@@n3ozlrL4c]t*B@;U& z Rs՗%3<.nVCbcFRkQ\쟟fK֋˹;+N0m܎f!S1Ŝ+_) 1'RYA'8_\eIO9`(jXDhF•Z׵|1%꛴6RuACoB8Bxp;֕WE#=~-vJx/$زJM$];II&]TI#<b|T;!#?!]x|gm-3"2U*AR,XMz+aԎQ(>N!5F`ȁ.+BT IzVUjL׷uIgM u(B{RW~r*݌0-R΃_,]-VۑOCϧ05vK=ꤗLRsmkWu:,?",I%nmmԷ/.6K|Ka6!6Ӯ&:󝇡ةψgSZsrQ=>Q4Ρ1nQ˹kg>Z{u}#&Jb/z&%JNwC$mO8^ ÔZa USQ'ah[Rt.@Wn6 ymrr뱤)R9-dqIjk˜,8}or ̗$$H8ۭPQkzPo,]Щzfly!36 }ko=ۃ~Xdd--+N Rkoe6$BF1C$`2 ոTѼLZq2?l-~o)*{@AZ琂9G6åXiaݎ˃ޒ_[\¢)KRo&]JOP{r%*ܟj*\`!͑Ǜu;E&8]JJCDJKHJ\c֊r]d1Uv2L.Q5sXd@Kgu8rvؗI yGLw1!.,Bqdr#*M;wG/6ҔIW\c $mZ4 TDǚ:RP#(1蜎lo?ZR3bVRBR)5bݮ},8V[_ZU/5)ShqE|á O^dֶ_, 2:Su*R{9)3,~dd3lc+_R-[Dv9xH劆oPn"H ZSDz~u[Wh+IW-9qmմ$|{'}k,Ad暷: ROA1Tat*~ nl<\7:f8$.lvCEX^9\R]0 Z9+AFC1ZdXC@G¿&bY<?.>?=ބF]n]c8)q@̮ErglWoq=̣JKzg<{ңhڅYW~hKF瞼YЊ4R>HXoڏ80]nj;m() l$q?^o)mF q_b<}g|ώc˿ÃZvMZ g,oR֔Ӊ.)۫c{J0fŲuzyP'c5Z9K9!ֺMR[JfF':MXURek'sMۛ.Fj2\ܭ lzT=g{,mKHi͹sFi9F)1m:TU99t[p_Wحt}Zy.-)h3һMÃW+vF2-./՛RFoڦ^\t-hP(8?ߦzzWC}Ml :RY!v"1Qԧt#ʲkL#, 䅂cJ(J/3J=  %Ns)F=ɩijnG[BFVm~9{ҽF„d<'bJېyK s;֛iVy ZJYIQqD~$G]8fo96N>2^kg(iAb#Ts|WUÍ0. zy@kd){g8ԇ\9k*p @c_F9&p iK%pۢWQ_A{ ʼgWrIo [:#PH yJDc HHIRh9_&@zrufcNz}EBu&P*LµlM˨^D9NV6cNiG^*]μ\eG}5M%-vEdT)(:g[O&%+jn_VzZTߍƒCG[*=r1/+E#Kۖl tor-oUp3p\'f Lϓ"07W|H͹uޤPOS$$+jTbQmW᧏M=qMOR!!BxKiV^w܈׎h"E< nXVMǤix,J{ƏA6 JK#bN d$=!n;go$vJAAהēJY_dWpasD* Tyvf"(dy:M (:H4U21Ÿ#Wl}#%$ӈ 7NrҀXy9z|l0e%I} Iw}!W;>'o-n-vۥĺ6e5 O@>rQaC @éX =v+6$HidhLXa@NשN)-Q[YCXQ(wm(R| {Pڔ!*QOTjJ;:+Dn)[]i\$m)TڛpqƬ[ԛ 8wԺ[IZjfO2p+ ('Q&J֞i8qTRP*#6>w~M.9c4}Qo#YDE8bC^Q2}3b5z~b˺񓯕 ѮvcZ!=)m_*q.JÓ-“' *ĸ}A|:Qo9+e3!{HGԄ2"-; (k>腣,H曌 JF;V*ލITX` ǽjZSʎ.Uc 8:vخ}2]n.y3!sQHlԅĤI!`c gl4[Җ֨SwI B$[ tQ+ǪRK3{o`+ ߭TK֒"6Ch-'%Ys X%ZY򤍎rh+ ۙ[Sp3Yu*}]ʟFL:H7Jg=h58v';cg)i#F8Wr:rUc(tPiKJ|5N1ْߺ)%Aăn1j? ap8ZGc|o\TUA1]qcuFR{ RQz;s?3=-5 S>[r '%mN3yeԗ0GW 'Dv<H+쌳/T0{ m*#|zRJ|D7.-oEJ 늵N_bh̐@n)!v})l\jQWXۙ P$g F_b\X*ښmxKQ HUcA/|Ax'&G:Y HW8ZM2[䄒G+T>c`g;%MXe{[&'-(.d~Ҥy>SuN{k~tre~eXẗ ɵJ׀V;vg<6<wH[[N6$|[Nm8m.Inﭏ1UʣԪHMCk(T6MBI<+xF ^4&rDuyh{ 8:V>exec kS@Dp␟B;}N+6|^^5@,6v늕&(Yjmo6! KNFsqnۥ,*ovQfQvZ$`qJMp\xś:Ts.uj:gڬ_Mʛ傡O/xmgi/r$c8 RTvZmWWU*<}-Ram-ZLZN1e€{Q]FJwx}:ˣ% RG2rOַ-}]vTIoVyuoZRA4BSw M&bSYq̙hz$҈jPq҅`O1JwLJM 9"Kʹ[zV-1 ꙱hJ77˿Z: uB^;.BR Joʲ\TKQsgrkUPigR rs.+i$<Ε\eU`뮡G]?uB'=QҹɑqS!d2 'ru߮]5b+ӗpru:*[ OjmӊŤ#č WSyE8vkv,qS-Ї&%¤`lt?тI2\ Vr>+ʻZd!3gR26#aJ_ yVL(2?S^c67K)w<'85oVMa"[$p63ibd`n x5(糛o_Bgs\t#舓ko),Rw'}hN[y s@@;՚6'UE B# BzQj Yev7L􆮹iZF@2ԡJ蟞7ҥFhj߲;5W/;aO6w)ˇ[(\ Nq 6Ee+DhY&Kub2VwL'qi0Ql"{?5ԝD4$^d=4HHl4+ H c4Uu_:ΤbA*\[|aXj~`ƔS#2&qҤ#knJ))mJW>_j n':#tZ}qc=}v>DZCNUeE#*Tfq(T7>6K89wQiEj%׈e r]3WH%ХC3d򀔜Iyt9]T}%Y>Qm馻 |􄨡n:J_E[H[py,CNƋt[9#9#yvNV (Njtp`<bq/ܹ6Kӷ{ iE+eaJL$+}Y֩gt ƝhSlj\?cP+T쾠ӣo$,*WotYT!28]8C+W/iE.\iXʐB\P&p\G)*W$ʿ&h?Vu]o[theͥ%i$ o]?hODtW1.ʸ20i># ksGE$ʕ! 2}~wDڲyY-)Bx,u`4x(9NnUx;k[߄]LS[qTփ(5~e.QXW2Gj 8m/jCՌv?u%mOzf:sfTOŔJmE#"k\<-Cs,p6*CZN[*ZFu$N}FZucRM}s5 @%ޥ%R%KVz$fUDNqo_U>3^XڼE8S{2^^Y!#=w5Zg#iTw6žj0R|c!.\[+NȂe-!Ƌ*m`[*XmFmipXVΥj>VAwږR1OMN6I95ݏ(XEn %4.dRpjtӨ ;64Ih('pUϮju.d[ ;A۔怦LCuj|:2,iN:䏹:T̤7In8,/=rBҒ@M/cׂNB=֠  )RhiPͿN]Ue u9TP %V 6ލq-*ss>շ*`{Q(48zaݾlE-ҽJIaa89dBŷ,d >ջJ8Vڞ G.zu#DF O=hVP]AO.p=kN5M+- `:T^^t΋*ˤR_=,LBڍlЪxaζxӲZBֈ\yg`=zִ P >q85V vrR{sj̎a!7@FdK;Co 8 oj0"mRnu(a)oa֡!$Cb,ye;?^Tyl>ϫmn"oQSט>ub 9 @Xu#ml5xAtQ!)G9BrT 9H$g-m\-%@N?j{"Gg-\S(ؓXbS-krĶb##zǸ,qċ K8yNvQb?L{}< -cKJNGt,|;W[F>qx3ueSٳ+Q9G ojr|[Kui?ʲ˒36d]GDd,[!+[x9 g?*3ыE xz3qYl6 Դk<ǥ:bƆ ;>ZZni?WX5ŭFKpmɄPJ};$98`?@6~@vlnиA֫-\xg:oF Xrqh/C5SuU3O<$3?^yk껥e#:VON9_ډ,—,Ex] .6h*qI qoqWc ng 3XZYPvbt( (Rᮦܱ\!K̓$%%A֪lrr=A'#Ĵ:tk-ָު<ok+a}W}v-brN_!|ܩO5]{[4([x|tHqj^uox:ZonYY`T|(uָKͿڤ2 ,r0Gbinh,Sm3b9 p+OZ` ~V[+{ȹ98*JFXlr{zF )+lj 𽙬qZ3G4BZ9z?8}Dx-Z''o^,d8h(RS$G,ә(WG u ?.xuV]k )A \v}UE1R?J #-Za[pNamȷU-]Q>SQtx & [tRY"_WJP{֩:jKcyp"ǖ&*KmIZAI$g^iђFrdC\imgh-RkGV46mrҐRN>DhqVk쾗M{<`0:=R#Vӂ4ȶC  JB:naLdJq~nN*yQHqw%)Sdv^\'v rM6 cg&pX@914䄕_EWINdpQo=@]e-B )JR{>䞵ZMzw>bN xÝ.ulXLH. $6|Օ9\t:SˎI~puq]aoj.]yS(H=+wEn丗 W7O: HUZf<^-x_]nN5rLEAdfNIJ7 fwVISl* gn=*uڔ#Pj{՚[^]]' BJSJGҼZSj&aj\H9٬ΖJ5+y%F(TX'07X*=AN02Ks>.8CۈHѠdj1@\=)6Aߨ!Gt8 A3_h~YT?QQi -x5)Jmɐy*N`MM2M$&Dq CW[D%Lp9F Bă+[A֝7Υ|"LYs-U+]%)C)Cn%*6c@VY^6$ rXu>]O2$JII%]03M9+56]N<^KsS%)RR2Od:wDv<. zTqWhA<(/kNlfEڟG/;$(t'# I\:K-/oBMT{N4h=%xc/wp;[[rNZtcҴu^Du ᇶ>$kt"I}Sې9)۔)zԖY[X{o~5p>.Gж÷yqd]iQp2@g##P ^ג&am:Ғ (z:,gZzېDzjãuDG|Ym 8@-w;5jGW4xᵮTk+ /(c@ޱ[n\2.DIocNHIt2?mRxޮkrp~u4r~ T&-Gjy=6aeg뗸Я)T0?’N#IkN>LLHʛzpYO M?!=^r1k[VOk™R[b;R|GnQF/+X'Eo?^ۿWD|suPSMܖbZiヶ)52-5{Zd9$-C=XG*{hc $XzPq;Lo--).l!$cbOZ mR-?:zUIB/+fh⢘g?R[Vٟ{,ϴn&' wĤsj,{L˳Ru~EmٺaiEmC"yn<J`p?DY+D[NݱnȎVSn1z׸ELrG>~)_|z@+RCh=RN2:U5:&' pʔL/%+=W}kMHG%E ˿k"~ XBK; D ==MqVj'a?gp%$&=B@rrp,eq]Dbpcjq^YAoE;?wGI:5&trRi^#pIRS%u^%IKNS}6޴H#|1mk#iYUa MOJm k,dϻ|޴)֩n8feRj#)L$QQJMH (ZVW R'EĖe`mVWv{Ng\%՞hG z ^Yճ5DgUoՅEf8c/%AC]}6QʔS9mYD xs+~'qbmlg'8ơKc9:(y~3l8k)Fk/(Ia35uI6O|4l)^!#$ {󧗄yfIb) sq/IxB#"wёy!yԊm$X0?U6_t]\o_DW[YkbrKaڝE]P  Ddn {֭:َ){k"1<׹J] wjԷkR̢9<\xk oi 'rn")-5yX:-Px8ƷV,)y>:N +Pb`uʆjm3k#_A*N**Ku/>2 ]?:$h M|Sh9!FpdqXxh 锪S䌡~s!K[ [Q%!= lr)B Ijz@RZ Cү<=)ܐX)CrGאW~ެ%*D|* H^yqջP v a!yMN9b@-O*IʺXg% 9MM`~i7, e-1ڋluFTHmOd|s!CMW*5qREwATYv5ZX(ym>uN[ *-:ʳVߥBQzd}dvt lPEh?ڔ.dar(#6$˪ڂV2*._V)\W>~.hdK]ڥ%# FKkbؾ+$noΡBO:q.Koqq@ܸpfקeqb̄7ĭB?AONw3C$5x >T~tKy]tlJkPJ~KiZNp>iq42%pɴH oQH~ZjRMYS] 󙸍Q9KAHZtzt샭 >|\kdٱf|>RW ;bGCvqGUj9&ˊ;:Zd1_]A8'ڹ i-CLX΋TTz;yJM(+@ۨު*w#R)F9Xx13hڄ:yT~ej;UTl4gi)0:[_Qv+!h5g}`\nu+m@R6FR!.?P@]^sIsuDgԨ\ޡeq r_>@~>p'dl]SO΅KQg|p*9ʚĢ_*59O kowVw 80b4i|eJJlv23XCTДp*M<0+}Y߽z.$l/lvX4E3) CcPUhr"%N$*X2 G(p/aH-H.G}! ;GR6j ;Bަs*K'4:;-eDsl(d+!z7n=vz7?\]kIZ=M%rJ`5pP09PGsfҕ=&xH!!+Dd~F9E)11#'ڤ&#7Ȉ((\ۭVri&Xe+Z _&_ (cʮ:B9=j)9*R8''Eln<+#|HtPq#tt%J9hZl]Qz!!Juhq}O<˶?p9J$cحV :'ʵ]I\x_(=:M)Jk [t)DC1EmޮD=6_ g@BT@ T,J8|g nA'#I#SVq&dϳ]r"Fϵ[j=TNesHuӉ#t@nƫYq;J}-lTa'oZϯw'=Pm|!")nT'g9=w7Պ-)ՊMkQ0uNe:JR^gֶm>Qk ˃xZu|v+bĐ̶նB_tkkb-Γ&:@O/8ʴDVXȽ$,˚J Rƞةy F4bNӐ\Izs)$쥤mFQ&9t;6Oit]Iƾd1.V@̒)>ms5 ỏ\xao.8v9_5re],4}b<𣅂*X{P-l ƽBI߮+ kW> NId-J%X(v(үqyVţ|AĔ9[V[cAtl=NkUpZKr%|;z د%tn4t`dʕ ]С3x\SW""C ZBG31-*2y|8s)IWխks䦞<#x#yd?0<#q 7heCmB8,dzX77ɫ YxVHJFmlQ4֣ru_kNFbY%|Okl'QOZ0[g8hBI;{2~OrH60W)k.+h?՛}bx'qm-RY8G97>oKaɑVMGҲ:;BH eS¡ՋJ՗8%v{<T?pTn)d`n9L-;wIyJa\II336@kTe,JRRrzu]-ĦP|Zc6.F@^9JRFH(`YICO qPP7qg•0=w7OFs:;;O &۷WoQ-NLva3&9; 6GzkTi8;}&it]h*:w[u!RyUU_FSOBk*9FZ<+ȌM$r$mYs"YbMCZ+Wjj})k4Mrit}1wS׽p"Jm?O,{ GnɩK^W$0Lkl?)j@*2Z&BG]bmv<ſi>gUҒ|Vhr,+xm\Xn$J}>Н>S1J*KGB18w&,YR"p-:,c>";]Rqgwd7ۋݽ+qwϫ ~˫ZT\!K=N0[ ]iw5 IO=cLV-S!c;%Ņr:r t9<մؙpŏM1 \$hbuReRD Ԯ\s|@'ppZ.-%wI*xVGDlnfYY*Z+9B9I[ќ2gٺLwSxǥlŅyyUNۍ=+ϽEƼRz{}­gtYr]Ґi6v܅g#޼>(]G2i9 Ͷ}ShYRڒS`d^mKulUPB 3 i-9yaqIЖÂ%>lVܮ*S3.-"hj );QuLu>P|8M]Ts-ҖHRNc5-v@!SDrWv[+aa`"O]Y8,)EeDhY*U$ >%ˊZBن2O\>[4}0P-.RN{J2 t|2IKH^P7 RǨQޓpdYvHqtJ2۽4?5=my^mJ{~7CHv-k:+!ח\E5RI9Z~)$RFst_kSC|޾꣡.RA|I1*֋{SىYA Nzhd+$pRjĥ*nLM^3*aT↔(fxaŸubg/jsx'zb~Q HLl)\\T=*Ihp| )oiGu!^-%!%J#ku X[kK;*vCp,% e,zJ:y`5$n:g0Am}p-C=;UI]RxBYdrK۽ PkF?b&}J>RN]Pbg ^\Hj;\ JҊ:B;׵;4`oWrit癔(cN*˅CץSY^ + c3Zlx`EՊ;%2A*qHʔVMHM7%LxI}|d 밥)/#6(]J|pJM?3ķ(䕨nGkvֶZ;#rҵ:WN/)0kny G5Jj9 `S͟|I(}< PXǘ$ʔi<5JK+- WsZ)a+,(VH+㚾%.qU澺{XEyƾcDB=LD\M{[kn%9) {P9TRHҡ rYqۚn.Í!RZmEV^hzfmQHSa Q JPF{g+:ϼ<܎Ƭa~i2yHPa%<456Bb&maKSq!2w<% SxdԓwߓςRGA؜>2ˀjV62}H )JUp:}P]dr_ZJF@R^RPB@ϥ2QkȊ>7ɧY4Ʃw8/$8'5v3jiVt2r z:QHjPVLvmFzZ#>t)Nѐ)*sj'2sե`S8Kj/ߠrKs(Ss$s, {Ao%IrL/ya>R(;giZ՛P/K;ik.?"vNfуOPzG3IU|E>s u +\c\48x!AijQW!ZRҿ75STsu[l_?=R+EڊqccjkT!|7))ʚ.)m+?g=7;Ugxso8DGg[Q񉦧+.8![$Ǐk* ? ~l$־t2hPՎ[oyl}FMN#4wο\$35x]y~')[-Gjjs&OBqle<ۭe\TJ<9?ƒY 7}4Ѩڊf}# aԨS޵YԹdgַ?pYeWIF0퓝u4=aM`ǫyėGּwҖ>) C=H7wURШюQ_&I[t@ZP*:ﴗQ8r Sk20dm?ZJr~,uJ>kt5:$-Jbs xj2믢N5륿u{)/fx6dKzC)q8P9^kPg s*|*u1А~OYrسm3ǰSPn|lv~R,ᎈ{|?Ҳ*GE!~l iYN|2^2~ϨbiƐ|\a+8>5:U)y8kX%iՄ! {FJkk."V yĥ+(w].s2ItPKڮ=Nf.- 9É8V=U*1FVM $8yjYs+=j8.++Uȋp:kKKTVL{i !^9IGL%;'%҂B21iMrxἝyv5.0-5fn!.rFSGZoPr$Z*{lxSHaQ/T( 4e BTדS0U\h˨m)O7ӗ>HSSX@a%n:Y 0ݯ^ʅ$̽I웓GG\sfɷTuN*tu޵|S7-H= GKp؛rJJ6u^vvK{ K4[4"y%ӑ?)[EUy(OCqάBd˞JyRL zfbXwpVwŞ&-< ntmԽU4~9ko=3 eqfZ#]#NqC#lO0`_SfS! 5QiuWTRmG~99)pVc&)(7 5:<&n)$Ys>(x7::en8Srp78f{u5(`:.× }ߪm[>[ːK')X%IQT-ZR&oaU7o?1} 8xgNh ­ˊ$}Pm* _6ueVݴ֥]9_%.Sf2qJ*'<Ĝ9x5Zb9$s*!RI+%G)IqX@D~2ڊC3} x:f蒛]3{WH st.X͂7Foʡt>okQCd*~%S#jɺFxDrMJ}Kؒ%ڙQQjZ`~iۏbiDmG"/i;pRQZN@鷧ykYGZ莠‡0򬻊^K0UKeN2{VqQpY?q>Z4M]c#8`9v[JMy5#WY+%k#Ӷ8OCrH\ 1VMwQ!Sr7]#dV•hmOJo4W- v+weHJv*Ki QH;sc5Gкdg:k s 4w^2ڴ>ԡ,VV=]Z>ƌa $%]p"|B> ྡྷ+ 5# 2i.f0N팕'dw>FelizQN)e}FW gZa/qJ[zDv-))V~ʏ?5Վw^NJDx9m뭣Py"Ϗ)75i ҟ^OEMtW$/Z#S)wmGV>}+"pczDլhI%ԫ>P)=ZBqI x0/w.ifR&Fn]Te%(wW &ˍ6qoVď D-3A>ubC2/_{1@!a^[jhceFMyS'[ J1$Sះ--!W__f\**$Ҕ[[iу%N/.# NV}^{T5AnhWкM憱sR2KRܓqu[r!J ,lSȝ9'5_c-r)pa? :j-uFl1zH+>t?gMYxyy%G# ΄u=L~5'F[ߏ !q2]prOֻjR9WRM%x&?8CǶGnxRQgQNuȰ!K6JBN;|,ˣ\W~9j$ /%eq$2Fݶ=;֖a Z|^g~WڛÆoZP^;]}1vꌸIO6Oں}6r7nPl7PO"z,(mw5YBYA'5>"fONt:&RIz궤۲2Vg:nZʝm9 >zcpl" <9;,펣ҹʑKrmr/xyu 9m(' Nr~]h)Jk[x:rN})ahe mH_*kyJ4񓁾˗%ە̇)e gX(18~(./VXPH m>bVc%Vk8"]ƎCS>mH%@oli]mL跔{8M*<1u +׭dud7JLO%; `O0UeS2)IKwk8|J}!R=0Q׼<3z OEJ6%)vmG(w!q婧)- F(j+ է! PK9CJ)7ov#ˇ)cKJyg/'J/]@*0u\ʡiD m\=vnB5}μ#Jq3ڜF=I |C?HG$oG|8Q !*[d3HF>pV|Gn?CmMrA#SBRh3h9PZj2m2Bzq^j5%NFHH-$4pVq[piTT`kjjKP%J}ADjOI5 rgIfN258S`>9|Jl9S?Hʔ~}+JbS37* M$gp|FxE6&}(h"-Txe??d[{ ,$ӓQl4*d9C=QsS-PH0fᨰ")c)WCPbVFbMImN@4b{`^uBC-^$d(vۡ*q"]Ibpr6".,iot`s7Tܓ&sunN[d*R  TqJu.1* Dq 5o +47/ -,QڏeXjj/'EkbR/ל̅Fj FD+yNCBx5=FSe%N=>* #hYpKZ&|ˣ= a Ҵ!c'l[HN.sW"LuEJ'jʣSud+]U@J*_˥)ZHoor6ӞCP}*E6D)2PZ*W_qW .nx7!r*>b-/UI6-B'22`iW8Q›EdhòAmqkRyjtq|Re:xu\ÊӌV`x_ o CKz"ho9Ԡ`NĀ+SC:+#]K(2kFfEٸ \Ƌ~ܦo_[A 1x.g=9i,2\Crj*^I4I?g{iF|iAmP)8J-L|ۭEeGVnRm?e4W8ތ.Ө.6ܨ(DRN' O^]48m󤜣 88@^q#l2ؾN 7rMUZNvE^T}+vnfFF.sgl-teË>9x{)ĔmZGE*;*Z:FlVn.~zJT"ZQEi?hEb(KoJv+fO 5rYq׏ky# $a!C#|w:s$}F֔`ehֲ]IKد0KO6PN7=s]$BKN~֡uSHHQKki $z o+8wn$=Iiޯ-Ub[ODg9 [jx,h<s'sJ\Dԋ-J9lT& !g eKڊ㞅: 鐴g==M{%Jm("^CETD^~@#Zq7CϻqmRPDk=3%1h"ˉ>YHJ|q:G0t'zRmJyӡeHmKؑcJ_Eo 6\+ғ`(Z`:xm(9DTBKK!.ڶ-j9pUq96e?n4O$'}kݏ],$Ze8#ce9Ey/%d JVw scFsI. '_'@#9c?[UXW7S./Mz[8<ʈ\x Js#BAk5 %<젔ȓ".?o^3qg`8ܝڔJHc8 ti|:vZ}QtP"_K*J|d'vӺ@8OCQ{L:y~OljT0r;xPP8w]ge3"zN \箫hڷi]m t'I‡9}CkIA/RZVdIkޙ6- svz+QPv߽>S̺.I#'q2=2}jr^2n6*9jT#kMh9>Tby[## HUv"I3aM?w Dͱח_8)u%F4ZB2qXjK#^-*^P(K<y]}|ֵu__ڎO6BUfhG|4qњզIMܷ~1O䬫;gtֵ9NMacJCmh> 8'NޭLK3^,̊ɴi<돶]}F4ez4@L+ifV`{]wVuW{yivdm1%I¥ʏ6z5* UjEȗ"@\+VmceӦ3Eϛ9{/z5J4ؼ%/0i/¤̥U M@sh0l~>\IAtRFGh^Jj{{IǼ+ =?RH1qR/&)~շk>u.N&m˃ Aּ\Ӳ+⎣E^hGLz$ɶP1 d,+jo֣yu@zLDnnCj fSR\KU\Lᮽ?:o ßHLʼnn !KjZ:!zקH͝Htcbyy!xoŊхd73"u:*oϷ+ $%~RH;qS,OUk?ju2srAUYYE,ң/! 5^L'7yrRF}^VM.MZ_Lbuǃ j[ܱDu6y|!!r>Tg4A_Tmb(`)-c?J=>A%Z/4O-`e@%e!n(ķx "GjzҤem7)5{jvK9#ri@b"4@I< F'u l/'$ ji}n> B% Կ#B9Lu Ͷ~%Q/r9"hz"&,)znV_U+)dzjjCb!SrȢ.Q#Opq6*- >tOr#`QlTE1%JNRFx> dR9K}Dz/# aX)-'?Z:($,ڹJPX5:Z/.ZuPYRL%D֮Ud}M^N`|NOe܅(pqwҠYnSyʐ8&( FT˱ %EYN@Dtfo]9$9I$?LI,>y{ֲIVO(Y2}JP89Pn(YyG YQ XHq]_=Mʳ'iT#-+j1,Ԃ~^ZI;(Ji1\ҙRc *OÊم(ϩIgtm* yQ#cзAky-hl8 %'#lQiժ@)xh94NpZvkl˹J m7~g2|j ї˹UpVeÆ;n)Ȫu%ꢠvTf4:7*lxy yTŁӗ9o`]$̹O(}8Q2H |_Mc9&iYT ҲxanBR7籠˦IIuco(ڛ-tO 8Im:YLٷ9 O.I )YN:ޥ7M5Ȇ+!# Z,AjKo8) ?:NP98vo#Ŧ:.N?Muo/)m,꒟))=)j1#FYzZT:yTїH9>F\j!$Ë/!$:hMT\!(!*”udj׷U \ 35\)t?Z߷KeEȩQA0qըK3| "X-JS\ڬနV2=zS_+$)}A89'Y.|wD;?OY!k uўKe(Q v3t؎Lb^oRTJ{QIaAROivJ*Rf"dǯb&ۊCknb{ZjLӊ3D]($-6?**WEQqxa2Kj67pw֩ViQj:}o E ҚZHfX Zճ&B3-,)<,|֌,˩Swc'O. 3dUm''۲"[*Xp~X:_)u|up{mIK`6:aG+QAV5jRat5` Wڇç#Hjc}8&$S}Peq=3ה#޻=&8UH)7/ϵ9 B]1|ӹFZRn=`49ǯZ+J<DzڹmJm7h7Uj $2HuڰgvhP&"Ka|JܝǧjĹF80۹EZ'a&ѷ \r_?"m"RyT($|׭zNGRpD:j0JuGNOηka3ȌWWҦuI^Ӣ#+[x JDWo$F7.W Sw9HRPRCB,`CJ\ia ߩ[o /=7RZ!ITZHtGn0ny9>ggX_b ,)X9*^ٶaQ%nʴk^ hA4yJCgPa?qQzZjgruv%ĶYZPr@Q !M A=kRh׌,z~/s^ r<=p?_qSDĴV:%kqdrVZ>Hiո19xaۉ7 =b>ьH Hy$HO:SBA9D8i=NqH[pm۴mn1r R=ߝtzuRu.e,gPp)ENglu?JLcT_}'# :=sCƝ99=-k- [ X7Lʸ"Υ_r]eF#O" Al?ע*pZq)D huX:WHV:$`1۩O ˗2F[?k=#HIWkִjPo_ui_S rOݼxejXR SJG,Wꫯ9G-ҤJR $gh8ˆpwt'X}7&#ˍ!([d[T5j9OQH 'x+fืmRLq\}BR?K JEynR68Oɞ*[ u.sJ=5=fr%R B i ޺URi% .KQ؎g)VyFaWj͞a<JRǷGJd$=8 gI*2zZTuKVc,Lv24c!. * T||\=~m]C-9~L5Pe!jsMTѫNOvw{G\5.d'}$:tj̭2ڛܖN&,#=.qlpVDi8:[(gqS]Rm)S1ڟ+苏5LXGHC #\*"II(mxAz'NWqy Nޝia$b%ц~= ++#ʺ ɲ;F4 )I'aO5?m/n%E؎d+S}+'YZICCeKRB s[,m4Zy*Ļ5b$yBVۡ@tOD%%eiۮ{W7Jv1@Tq.HsoڟPKqc'SNO8V)x"m.XdlMԔ_{;tI|~Ҷd%OZyC&v%*;np(L*q jZ}G6mt N(Bsgjeo$o٩Ǩ4GR L79>J2ެXwqqa|[~No}`6u P|ۍht WNjtĔ{>]DkiI.Y5OV@fɄCOt0V.ΣAjˇ"fE[҂[iHRT:GC@ t%!IZWxyVh KVRYv(SBJsڃBjyo!C!\F6ȼ6,w:ZmH-+f$H5t?ziJyR1_5cM^djȖNs4 Q!%}VKe?̍j| ' bjz䌮\# iIJvڪդeuaQbKGDd7qu_ pi8Sl;N,AX Am,NU9-CˇJ.iMqbrZ6~(^'T(_JCt$8U} j'l}kyEcn}JTJ8MdjQwBL30?x`ѨŊGl&Dv'Җ<)+mhi,)#ڹj.2dhGOHMOmCav1E97_Oyy7)_N ]Tp3"%VvN>x"maE3+}Yv1 Bu^+dUNpT]u!76h;v:tXlO4TޯKV|,yZme\߇+f1*o'aZ[ (٪W2W=[\-k^9GeI)DCe=~ZJHp)b>V+NA߶Ao]9<-ʧOvI 1Sy^p8#?@>Uk+׊\:fg+)Y{:1CvHf} mJR.dd?1cNz9VJlE}l:H4L|lS䷤K2W\_j/ciRD{KQqgX@tZs7*mDԉzyl䧛c?{נiPpչ|Zt̩j>gNldsw޶%^X NM%AN}k.Z'IAGqy2,_dB]hԠF]d*JVRFNyqk)}RizXT猃{:,q!Ҟt]9(q9r)r_4q![ҰT%M졏ֶ=xČLjU̶Cam'~Ebj0 ]14;mRtlGqeB9& F9c+Uyp]u5kSܧZ <"SY!-$\Y(NďB2v8%z9L#ǟ ص=D0*N> V%aW2\1HEq8lb;n[u6I%j*BOh.ЯIY5ѷVke;pja!.Ύ^gKe@̀FZl\tN|iNG> ]аO R:V$j˦BmGIʔv,Id%(Xy!kldBnZ޷5$:H 0N`,W{6]xDlsh]I`D៌cT)p|mGR!ie ! U;3+i]L$zZ&zk$1jl?mҠO\E1x4+n䏝K 11A'F {.V%A* isx k_n_吿Zd M2˦D4RGUciy(m<鷛CZG)#w qkXIVOB\C%A=~ng?Q屾0 nl͸F= Je,vqo>Q9!$x5]y 'M?k{Hc֧ Flkx!Ԃ̤܂2>)[Sxccs)HIdʲtNM: [k 3))*jPۢ,6B|o\ˏ-HR3c9~yhtM]4sYٴv'-ZdҔr֣7/&oFiqu]th-}TOnhU4>oQiٞ ̂O* (|@W\4A&/cuD#xt\-f$*VG~BqXyK ݫW^UiAt3l1^,Cd0:UCqQiSh"0 V焏^^ LdoSfEz;)w}aip.IRZ k'$nӁ7K2X_PONɯ6}b>&"YK|ꓽsڿRiާ\1g4TR8H#r§[C~?bveM08іZ S1%1;\<䉞38DF۟1Zu<2i(-D49OJ0V@-sK?Kb)XشO'VqH?![Ɖ}?<>Q'.㡜7nzL'=Żr;!J=VD넃W-c>m!(5mwN$q⤶ۡҕNz>F-mSczz_?QAzlI.V HW[Nc\y /,`(#<;(SQ È6XpdE}|˱ΖˡEø߾¹OSjT%:"pO_a\liG[RBl)%[O)JzWngi/Mo{+WX#JHƩ{N**fDDhnA][?Ѷ>>3햋 <8`8pJÀ$i?ۈ(n蟧v3GI\j,dHa_>ݥ)!XgG\u*]ލZbS_ɾC cjا'qֵK[3I.9:eyō9ej(N w'^B89AǙ[`D6uԅ8ά&T+TLw i,$%)튧>_%wCjǛ撲Mj4sM:kL%M%~1ۊhfo!?j^S }]H@mg^mBMԩ0;޹ԠlC;`3JRTⱼmi.4a915I˜$nP@H$g޸-MBJA?4>*v:5iܐѺy5o2d*'|t 鱡KܨwsSlz ,֚L \ut >:eNWEJcoZJe,@J>^6 1*E9$-]ŝ=h⾨`ҋJK(DJAV wSYɷ4g]*^1p%Kb' m! (܃{ڽ7_9OtaM( [e3*㭭* @Ձ,t<5Ju2,GJ8~U՗ٔlH Q [Uy6D|)i#E-ٰ~g^ kq{-e|YD'0go]Mrl=R=m|&y)[sJRO1J 8ޝQOAY6~~I'FM o㐔He|$$zfI0-} u%J0 Cǐ0zsR%䲙o4Š %%9 >1^n1SV*9Q-Q.#aZt#F!X/sZ67.'e [=$j,nOHq6e2! SJ+laI J閿iQ6w[k4?zˇ5E:6RAJphqPT_V$[j5f7trAA"dD,SU 3Oe U^Sb&nN@k%>QN')ŘV[#>kGg/۵lZҼt^٬-lWJg <[<XP5HSsN䚊fE'䓔qiTSLEr1% I*KDޝdxOUW\4v)Ŭ!7Ɲ&վT+VyzͬIN,jlo<Ԅ5ϐ{RF%(-2TҲ`0kCJ;&ČC0%ڰ3^IN+yNT1֮B[P sb,r9OY^f ͷ nNCZ?BOˌР_Jo"tqk5r++Q<,9yRQc < Y&4=b-] 5)>BY5 r]y(J>*~9Ƥ'iЛ6'OI&ﯡ6 ?'j> +Or> Ni=vcqא&3y)>l&9s[TkR_s=6sn|*÷ȻD8`'\U\KFV$B?xs w*PԮ|4p-_n~>4nM! -:)fUjw>S`Se *Ӊ xڶlZH.qhS2GO9c}YCƌe< ƻI7#V΄הIS!3ҘClW$'7!y4HO`/q%g5y1}KOI^T~~ QSԈ@eT}I ܳ8/FsoҗO ڗo()z-͢:Q<`5qAjk.?gQIWa֦qOr5&Hf:*j{h5SؤM/v_c{1^gK9n&d]XԘc7栬R#~XuRRIJ@5+]qIT<NG5zƟ!n=Y]n]pW2srti$U;>p?UeX<[Qi1[m/(@3YR5Ex^ SC_R~XsmW3Mȳ4.G.Y'w@wt C+ EZm^Q-@(H<ŽHѻ.)* kY\ yV8b GLJ&87nתmF<|\G/T~$ yNع>GLm:Yj Ͳv)iP6U_} NyH@kӹIv<^5JZ)VMOx[i=$rU[XLOQ:wšfuv{y_>2[ɼ\ﳦHXQ)..BJI܍/PR'x6}~M D ǥsGqJ?֐%wVy`RF7Y^C7N`)POP!1 Cd8t) Y~Zej7N9tIyՏ"zxM#BK 'tL.͠,@[#Hm̀7@k2ڋt{f8QuFk gbN<"IwqK-BpT]fgfMZǒ$%Aa7%8Z2di%™.s`9&ԻHԮUowAEy -%aH% A:}q@88ZjCc$GlB>DjB7T n {ffn2C#XkG@7lwm83ї90zS:tO] tr~% i# ׇ/*m(tt4QB9pYѪ<Ok"<7aܸjSG_j^5eG:QtIfpN9b22=HtZqG*+ECKxwan?Ҭ䭷/4.~e_XkPX}vol\W`?hQ6.LP5O|KMnv#&伍3TdэJGF D97FK=/2OWeI~ Iersgph.\G:?\TJJкB"tv!QV&R'?@=j~p3\J^ Tʫڼ;tWXG49b#m')&i !Y?SQ?fLr#,lc|P7C-!b;u)JCːBĹC)iPRGb}TlJ+2FدRNv Q 2xie\EVˬ<(PBT#}v9՚? e%Im6: ٵR\E‡BRV1Jŕ*IK,;M}:4:B3KOߧ&Si4d$vʹJ} II&]K+RP)2ߥs@T֣_?DeF.!qOǻK|QtIprt+ӔPY|r kFk]?,jh[T$` ܷ^ro'C}ԳP.u\i8EŅ$5x2B9zTQv."HF5Zi19T #::q}%۞֬JlH$=ڋJTMsLxnBE*Ba7<)~W2~UJ)r׍;Ԗ>w-j$*`B蜊rFqd^1n=Wrk5ck\kO6=0j P9-ltH#GZw&njF1y!;o[v"՞E'!'z j-ˉk2sR09RP*{XqO)nb33DK.;ۚeK=LT 듽f׭^#a#`j38 m! |zžhޅ._aHhc`=*{u GFr{w:웊31qڝN<1z Q{xЗWI $% ԡ !(!F*Jm'9ImPNx4?$b r6aNQsR,Z+$24ޕt{m败^OjcN9 ~cX^59  n 5GCu?N|Slrdڔ(rHu=O:g阮VHh5?DGfʽDbL9t/ *4ETZ慔w\I# )V}>5l䶢Q(/#߹!SxKԧ(YBfhULڹs}Һ]VSQo*c#I;ҴgJ\$W5/GJ%O!IJ z& 40< ʺ$oZm:dy0o>slVmm@N6w>XzvcMF\ ZT=sU72ShƱ޸ݗ}0T޳jQ' ,Bx5.mLV~zR `#UjMal KgכzQvZM)>>&xkTƝcIS(!JwSH I,Eru/3J BZRZHt v5֚Y8۝sxvcK8g s0\p\>ZŸXsbֻsoJNrv H(4EP[n(g#՝Hݎ]l,+?BUY$/Y UّJZ:L0_ /SLYL/$!A={\bpj[cxN܏ۍ-bV6 Qu=Y׋ M9!ĩɫ4-3Y$ZNgC՗kn5e-qlՙΚ)"2xKIR- J̹SԲQ_=5/:ݳ¹}dB\QN}oR*7!wY9,gmDJQ۴4baO=p+M]ٵ`jSHGmMC|G4?ķTwK!=WGn4/Cfv7=bu:Ґ͋Hhua!4*)ЇvL|V||ogKn=~ůF32.%¡ߝ/6 @֚=+ .5͚r?|n_ܯ6H\鱯7$mۈ?DT׿av.[ ]qm'|%ʈϽ=+o^7DϯmׇLS:>: B40~'=Oe\櫷L^Se.0GpGT縭*4%4\9/ -J[rlwIi7>cz-bLSmB[T W뢔N3`Ib1۳/-,H8/Z_*FYoKp(8I@<3&O ֐Is#ki f,ms*j ?nEƤɽŷ+ڹqόzƾ,.CԚ鯄&p8KÎpAߡ3nrmHߞ i Sas/'+Vmv݂mZN<݅ )PlV7/R70uDSg+4XԟlѹVBo7d%^4eQ4) q`1(E-Ff <{ZMUP= ^eQ>YYBRV0V[FTm렕ȏ At g (0MKiФU^ROEh}W=)f:\35է%dJAfߨQK9HQ,ja59JH)!NE9lHHg?ڽvH}]kDY4}V~bLᣃċ=Šq6,8ӊ6F͚u2`$sH| %fqp=kBGmG2[q|BR)]q6G0T["[B%R!l%\* ۓR?i\,xuVCָ֢"-H]f}hUpmh2ĊsSx`Ek17imRM&zxR AF#lhۂ>ezs^, xr9Z"ۤnyWW;Ia.vW[ińU6D^5=]B65g2 5q5b唍4\4Mo̽o-yJ/jbEJįqoOXVֵ2S^B< KqJJ܆'>X+%7K,)KBtС嵂;M?Uc?O@Z[GIfLd-*tץjXzQ8uMa2rƽ.VZU>>)#({]r\so&$}U.\&UuMEpN9. yZ?`sYW?kr.q!Ӫ\th\4kQ;ƻM#Pjg3KXĎ)N6Iqp\=65iHl%-ˎZ6Pz =TOH0rTKH ƿֹ:6>}7-4(ŭ`ʯ,}qBކˠF ,:HR P)`WCڽlƾgafzR(w! _گVvUHĭP:-O8!ԩ*''p8)^&CYnIBRd\K6%%*ğ& Gh ]9~AQʔ6$ð^Vj7l55| |s\jTG@+Pdŷ_ 79ph;o[WԱx] IpB9s)vm_$8{dj>jI=#t+m%X Sy''Y.d%?o[.!WI! 9 W.S;cU!wp'/'ҥ(Y|\6RqoPJ;xA"=6Ĥr- 4+l ǖ@$cnz-qxgo)Tnɴ'O_w6N2V 1Z-$f ~]\ountz>06P-y?J$+MkwM{Qv^87C}>t +eBޛ)mh{#+i'>*)"#̓tZFsZ.MKykz~γ'U3CrQm<-$lsW-Yrk/nVN,KTkvAi .6؞Ӫ)8 8={:Q'Ϛ?Qkd0TxX%\eA*yjX8"I>C _K<d.K S.+O޲zY b{44)|W)*H@&@׶=E$rZ'duWo-ݮEOړ3 8 x`$ 8mRtavG=LuΡ%O]&M)/(mQIcև4$1ᝊ{pŸ%;$9G&܎S8$ie- VzO= k$Rʣ:n az7rqyIVt -c;M-;TL(حK 83a7$ek^߆[qSі \Xj~EmM"ٟstV?ޝ,Ц\pL#YI:+".2|<* y=qJ‚Tprw!!)߾JFKfV< I;zQ(wRvR9N2%,2P } ΁Za(~7G=}KpӃdy,XnV{a8 Dt%+I{zҖ, /&w?5\[SXu;jYW,]qk#.^E.McE>)paI175pm0|8߱'ni82o,7C zjM) PRGJi8/K+C eEW9iރV:/x8Lτ^qv*YD|%'& DȰm((Jމ'Ji @#c 撊"7vIIt2H# 4쓂\^`/`?J %@%.ŕK@NLiQ14jN# 胧"xW9#c Uq욎9bA\$i/HP${S2p๞kvnxK܁V)VLHKhQkppu/I;ne7gl"X'CnAjĠq0W)Sk>ɑBSfѣ>II8U @ޙG%'V$)N*X8+m!6};yҏ,1W˓z4bWBNTԧ۴[5ŗP<[R8@=OoiN9gzr%-pZEmmEKmMǦ EuIǡh9S[mNz ѡa/c)ggJn¾ɽ[RNGu$g#|3jzLF]OO!YؑM8s#*N:t#],L%xt|׏v=7Rryf{yOL>Պޥ˫CC}E.#xM/]4ts!hf{^g'$oY#UHhw-lAū[nY<)W޴ R87¯~N?GlǗb}˸j0!,2H^!H@-gdWBUV:qKg4L[$$aF6ܨK'*R'&3OcwUNB+g*)ndC9@njZ+g L`!}i`,Wu,b#P;c-+L>ĻFqɄK)l'LD#O [qIK̵nW"$\ˌ@W -zOxG/dxrn]"-6`4q͜`Uzh[S̑ƧRڅrsy.,hR^_ܷSz6D2-,-<ĥD2(.^gn=\n'PHj 8qi\4 A mPT}j?CYBNJR,O18isq>pbJb:}j_*@^0 mk.vzqEciRp;`뜜[xC̍BTH9=}>] +CߙԏiGQN|~OGîa_<dm]'gB}Ȉi~3q[MsXB}>՟mN f'&Ζ%j?qWGNX4- ^IҎI"8٦۵4fVd"A'?|` =smi_w^څ^ HRW{"LW]n%`ݱYQ!m9EiiRuV߹J 8^W@'ڽKPL*$"_+kXnoHR򮊔 lЍ"}fUI}^iMͯg+"pU1zwP[ĉ 03I޴}MiqJD\v-N!+iAZHo)um֛ 5D ZKY>Z{nqP Sr*J+T1_vaHin秽*k-՟H?Z\ve\uRaKd`괸2k|Ba{#@NU)zFaL2GN.N JOLnj?JV3eJC?#$ )&`I c?ϒ IN3(a h QiQ, ^R; &cېWSQves@ͽ*JOF֢. k_N鞸8,C!e@ۭ O,@Mqq").roze7"ip1Epȥ>E\rC=  &BHX6AZl&R/rs#)eo$[. "ssexs9qPɾIW$+6JMT=A' Ӎ5]fGBJq?|K D7W޴ 3-pP72+?IVG$VY/o.h0lϷdT&+8*o*<4Yq@:.jZ-]2ڍ(xW)zp}1Y^ߐPfp?;P9H,)(]~͘<vd!d,-ʻj?hl'z{,coUVKRh}R\8e8/PE8hojcMpfG5lG }>'YVUk~j(ElFQ\ -EUo5-;w\FZstuI?Ӓތ 2 ğu;(N2K-3#_MHjajo}S`)9)8ڥy#(#yX jM/dA:!P9'z7M6LR5=+m|ͱyvSTcko)x;_':)yjok747U[7*ledf )mJ%Bq\HRR9ʤhywpv[by~Bw@d09Q9Pm tH S^.4i$x浨{Ix* 1A!ùrSΠQ/rROG٧L&zxS2҇[XzRU?v]n짭A8&%'S)\KLds8 RGێ-wpwcuڒ'!iS+WJiVjO%0$X+E .Rq`nNL㠫4>OUT  >%j%:$WKP+z˽_<锜-Zl0ũ˗ c+I/d~ªm=_L^ r$2YP<x#y67fB]e*qJJ ,q1.(ImA${ VIq 8[ b6xN9eQ܌3m% $ik)0'#ҭ=>^)mJKÎ:G᧏eB)Ǔ/#Yθ*4TxI$/$oʻ"/oFe=",K{ve5i$% c95ևAY7_ ynlTsqUa-擩UTdEݡٵ VŇpAJEg+KkR@-ƈ\e2,ǜmIh=h1K.#6D(ݭ*AaR{,5RrIpiJbZ}6ꩋP|3nE)G(QZ:ذqWp(sg'QRisӕɫ[chyؼYUSu [#$JcN=Êޗ~ǕLMw+zy]$SnLXRۺ%H- 󪲼hq6OĤQ?ց;_@)@b77$y .BTR垦\'!3 M3ːF)ǭNLjM&JrPEV/5Ii&J4K銃'I:Q7&{-YIJ^E(>.R!Fv"W("Dۭ4ŽR`unGHQRHg{rTc`jж}`J5A<36Zzpt·[ m)#A1Ts t/+!8i>R4m0\JTq=T(P_e$q) z? M_`m1[֗QZaG-:2[n҈PP厕sS%.p觚:]~#]3iudLsV[ۺ(C?0s6i^ |h=ej|GrNW9 Da @n8y@Zz/aLyXCd5{ jb"C9'T@fEsZIvdA^Jzέ*݃&V+ Z;M>]Ma(-iq;yh_2f?W^w ͜e-i) d{n7Ԋ\#'nBJH0U.r*cbϻo8c-IRw?p7mA!(JO #@ELYJ;R/ʲ,l6mŕ8gvT{5ftb^FI_v,\R?:&~K:R8-=W*z ]j25"3Ҥ !Q1(ofx4*Ҭ'9 n)_9| rkiK\#w.[ A p}ixCXXIV:ˏ,d}:c&8TB,T71{S9&6DBPA cD)N=P##OQ^>x~v{|9/B+(-) V68瀐p 8+UEvƄUxM̰~{hsPMG%:k(Rேts <S!z쒾kR6# 7,<"ʼn 3 %H JG+KWBŌ) JKlN}|ZxZ>mflIТd sH`hWhrƻb 't-!b̓ÿrn+ _TV[s({ѕ04f1/p-WCfZ)1dp sB*td ]N/8o~(6w~A^D˻A'VپL#99ީւ|ּGϸmMJ?\@Ӎ5RO ˊCJΡj!X$ըEq|% R䊗? A.[W,&fV gkŽ6stI$!E6+%@V=|Cwxjŋ#sdjT~ӊ;bRT ?ߑRQYeq&pm~.^tڀe}E'NT^Mv[2Q"?ĥ|קSJ1<ʢl&IuP[`$l344+"Y[AO)Ťl~ NI(kHo#dC?\2ǐs)&%O, )V嬞^G|¤+ (V=j.?Lau2?wn>b08om"6]i[G%qZ*Obୟ|ANᆥm\r ?J+b )74qn]nDgItR0TUWꕷTgQ9 XN 7+H"a IyIJ֥gZwpdz= O05r!wD_> m.yNrl:pOM5lѮmî4k'U.}Z p5Ǥoa !y_.{/Q(;!T?)K,4g=UWylpwhZ&gnATaw8>tg>Ywu)ԋr FAia/jSreq GҕĎF{t7&ݡe9 TH G~ \`RQO/:︰Qt`02z)MBbR%,/RjwRPnH`VHz>rUUˆ|{)rbz1k&2Ly``W"=Zl* ҷV%*M5nK"~Ub4)4? [Rb6%Y#MPl7$in= Ԍmm-[!8yOCVUVotMk\9I QCϱy1m_ABkR>ܑN[2te?!Ik @\`9 ^T!·MmZРz\v4a$lIJ1ҖAuĜJ%]=qD h󩳌OzrQ3Ie@|'n߂A RΫL,V|zp=rL2~F VRʣ)!Y9)lecEC>Fvc ; (EmlsIT\4$+ 9aڤ鴲6Y$6 'Rkޣ>^wةa$8Mh,|21}vG|Ikn.ݙSڣHt-e}C~q]"#,7ڨpfq釬Ra;cRm_h=K"Y)i +!5rړOe]>Jm@ܵNܐ[~O"SRIsXIlT힕}} | Q-^z-ɉ75> h.O"I*)Q4%r (ǮB薫Džzo9@RR( G0;Pkʔy l>F[+R؍pqeI UIjQOo7[K".m丒9ոʀD&(.7WG5y⯉@6 W)V^w<2pWМE-(Rz|bekB$|HnZW*?JOWL-> #Qxz5ՠ BRR{U |:5o 5Q;؅{}@pLZx|ިӅS. >c <jK4&xKӉ4i׸H!)HhtXդo_DŽǘrjfC^ Vs? hT,8esڗrh91@d=tg4֪f2̎IfU9ҀuA(4*H_j"@7<F?jj BS$&8PRyGn8P}RƎ$g_8 HYƛ0!kASFK'}+t+?n<_YU*uD{ qJ) *{t P!e\Qtjm|Ԩ#̥`SC 1ܰn!%w7JP)):|Ooɮ]Td4҉T QT9͡$_6Ⅾ,vqeJ'A)Ŭc%q2ÉQJ:.QfDVr4KQFRwj2%1/\CȌ}S/- I>j*:"M<55JvRQzny-ԧFOi7zuΤhCrnFO[#s^5W8<_'dajmm8ŏ 1s/-Ou~9i}"[?RBrm侹.ܱ܈"3-S#;s\;|KzcU<'d'ڸڲHi9x[xlnE(q׃$PIW:VxyFצ"r޸t7(:ݹ;c`ݺc^}[Yկ97A(OxmawZ&CԄAP1'w}1a'?QkQHV'-5ʑKs|r27Ԯ=*} @ڣ۳R0@UN)?r~] + J ;Ѷ Yh@;nqJs,n0!V]t%)JSk''IK==Jʁ*M)lc"^9{6n-ߵ:9“<R]_R^'rQ ۰`䶊\cK`J[W\^..M2Aæ%jRdV瑟 (&*)(Y'+\1n+hp=)-UlW6:j<2kP\Ih1czfYL[hO9G][3ZA@vKMzU<#>9-s2?M l)zRB9wҫQmFUKvV|v"TaB$rF@!]LR%)}\[R K9Jz`kZl{(I_*BW5dFTTd3ȚOΘpZ)2a*A$rIk.4[Z:T䚖K+C7MOy0]GWSy&-L\[nC"Dku`saDTx@ֻPmSݪjMt3 È\0?SoCOBMv*x7N uWrE%_ t`+ ZT.Nmᨴ ծ6ѧcHDkա k)*NK/'#zwTĝ*a\P#zR ֲ҆-b H(q D׀a,|)̔_,8UcҚSY AHH==SB[[VTު$N9v7OzMM8FrHHȦk)/I$|b$ARBRmTUX9.59#UUzkZ[ACJa?c(?Ǯ E>HԪEj/Fut5\CGBTo*۵s6''٩ѾO37%dǹ_Lc)rY %I iWzUV >YV\mV: Yl!B: ԑ) G"9I~HWN?#P"co(''mFixk +'|b9Bm6,l2mBR‚hr ;DAJ*;ڧRd}p>9kb_l8s4Si7߭[1*1xqx[suú]~7<~Nhpxe 8pC./=kp28R]8pZq HE83C+C$l-YfR3zcЍzV<)\iW֯zzS@XkѭBdJ^qZL{ﲌe+_OҸn|k|X7-BI*;U|%NE=uiԐڑKnv?үSAG</!s$)Pi|t)5~}>uɤ+%7LK%QR$~Wmk=e<"B]r:A< H篽{E%8H9eވ"G.5I$߿҆ Km?؎aΆi_+ye%`o}?Z"WɔPS%6`3= 5&גI6Xve!pRJG=2~IǶ&ML&$*'PKYp"D$%*drw2 fOZ˄-n\o-%?CBXz-sk0ŢQK^zԿ%Co\/gCCLK5" [^`:מiϓJ ͖ۡзY1M8€JNvk苚*~˓}YkR^ _xϊk붻⭪ڴ:Q63S<72;װznnT`"+հq!G~!?vOjqhCR[YԨPmPIv֕&0h-vEѥ͔}ra,l\)jUVo-ɟliBƝ5$Xfh%Y*}^MQ7˫[`}nYE$^,rRO£+?YIiiw#jo-wtCo┬m6\k%f؄w,ORP.42TrI\ZN׆J8wCvn;scډ%-d}K8H}:~ʔj;897ނ+a6e_2hJK5;?lx&hO[N&E|P1{\`I`]yON=D|F&f>BRgk=E:M<[dx!)HYT8=k4ZλF u:᭹ЀoR(XU'a8 &KGX4jlig!$]]\b~,=3YE%JȻܧ% olf 4eE'2"xP^FDi/-OpaM:R~YJZI8ڴI * wU#YxN$ɚP?DMFM'G"b̋NVHj(qH䠘➃h{ ӐAwtrIMm+p 5b}"]woklHTMVS3w(hwۙCrnERZ#-(ӡ;w5+%n}wԯĊR|ҔܽQ8nKoEPH 5J\ToH6WwۘN7ډRΚѿq7uqo)֜*8(pjͫo i|Kn~>tqht> 5lIJǵX-<%-O+u$V(8+^2ˍtjHu%<ʓHH{(c AR@HJ*7^) ,zbH^jȞ< Zn (S!MSK)6;G=Mk&N B㼅U9~uz3o& u\OÌIc&BUnCu JI'F|Qc7.2S+8I=M)TOƥg+r}78#(&%zRc&&JXIsRwq,4GRmhkmV[ZY tlGa6Anx3k"hW6agp[ZѯKd8f5>ѿ4k\:ᮆ+6Lhk c.?2f6F8]x;o&0hd}gz'a\fWXIOx^H]/n,JjN쑹eQ\b^4OlA2S$yIVU"ti/T : X nu2J=PO@3YeMc8^z=q7 39Kr`1찯,lqkQ(&eE*reczE[wRaj29c(=&p8?.՝]:wyT.oYu}0_ZfH*?Ué vIo6))P8jǵ%)ycˣt",%b#R3)qJJ UPmH% ~D֤tJխPp-p IRQ%b 27VCsQVZԉƵ=,|5=fXvԹ96kќqm@2#GJ \dgƆu*魴W uHbոxn%'˿T0R%*kQj\#*v{^P\ݯN{}P5GmsA.pnTR?$ s 65\[kHn Ɨ?/'U׉{DKec9գF+ $E׉5\Vh.`sZ4&R.郚2${5Bǽ*E=\--W[*q%$nTUz-aV]{G|h|+O(J67ue yr,z$9;TiӔ7otãlqbo2h?9h$rSΦ c.mvqksiO\}U)qSuv(G;̡V\( ?8([-JH !!8'8~JC4"m8T/ڶVN!F^) C YBN2wjZ%Kk8G5zs >- ~sٯ7JqZsNiϐᲟqF~W:Wu VYs_˚¡FU_I2xnF^"jUK%${6V4Զ/$zQ-} &4k+ljCrS*bwSi/I?W"6<uԴ#pVo1I'YKXm'i4UhiV0H/BPvH k>ѷ*v2U"9 $ZJ<#y&G禥j^=bjC!Oт?' kNc;OGTo'q/)C|#}6ҹNS:_EsQ3B@l^G? =F+-I4tVW0+pK QsGlPvqf-_Rσi.IǨTecȰ1 X`!砩tGQf͡hoHr.7 ZPH\0vߐWhQjby¼h4-*J+;Wg4H}wNdJ[>S#Ziʏj$/ g 3 > Hh9};*t:G᜹Rvڿ[a)nkiNoqM3]c\uMPp'F}T!~qPA\#IռepuR[Н5Gij0o<^x[O6U% ?WpTXɕXl`bIE#AN fm˄PʦN'JQ|+6: :24q_I!$:wt-ܙsoTq6Xj<|?l[5In$^T |]ˈw&ʁ%@$vTm d(:=ַ랚Go䴤/;p@&Byؚu Xf#A!WQYb#H*^qkhDPD垞#N;mx_x_xIǗ"8kezh$7,`NHzod䡴)zSSn< _rlO2ݮ(\DcpFj#S[JONڨ7 űaDJj]债{T&.sX:F\RYle!d~-޶)c+t%x?|U+cQr9W~T@)]I4rMІ~Z,TARIj蒒\'9{e,>Q%.9 %)OJ|FRy_GVw/D )_Tc*ӱ<05cY*N%+[ r0=jpڅ+X`O13xcVk0ڞ|)ߋ.p+QqF]kg}f﮵NM+8Ai4A'%i}/)aQ)ʤIG yIpo^N*dԒq_9@qv6(r4J* Tcڽ3SO]Ic<7~I6k+ !j  wTh>먊 *courёy'JB 9BOE5]rۉPZvufaOE{Zfec-Y|J+8exzݢoT^,-rPOJ\F}5/h 3^j?Ѝq3_S?m} ICP$w;ڂd| mȀf3G.coKwLwR9C9ӆ2$Jm ݂8$hOOcqwRw " rKo<~c O }MB';kRH$zbkYjš(VXMQJ/S?褓]J2M~oͭ d2d^GM(!u$kն=*vpUgΚ  g<ˋ=7%%Y #G֬RIdVӦlNŶ0)6]Nٮ-I)*ZPqJYQiִjgwx{&b움=prw NuM1Aođr)P? U/w[ XӋ'<:db)d*IRQ>TgQ/$6ՀA@63.7\ >ZJIB*RBGA֠}3Ȣgʹ}=Q\di'ͬ =%'Ef"5P4ڹRKs* uu)+'WێJ-ɴn:ya %k9#'錚 (& 9*;JqOT\ .婙q%Ŷ3eM ($o5oIaԏC}bxMJ2PG˜G:Q*KI]0]k8wsrf}s1퐔JP8{U(Pɥ^"Q ߬x LTÐd!>ހ֔a©'umZZ=@p:GkcX+֣NI w]Ab$)J8XË f5Kh}E ٙ<J#|֕I'WqR;3ꗴ*Fpz*t9\lJP~awI5TaHvOԪL캐U `:Xyf6npsĤ+Rk'NƇnxVaiMˆ!FQln޺/F35we2R_g̵igbӨRx?O/L Jם:|A`F2.&9O&Nb~ZBEqodU|mCIz8qȝ_B:ROO{V~_bCæ}-!C7:Õ̌}*k$eNk.Z~'\H1Ȩb[(VGJNyNFI=:}ra[\Xї]}-m|Pe.I[ЈT769Rk x ?oĎ+jIZ ZA򥱅'H=)Qp4E8sݟ%Q 箴:y&Yu1ܶI HdP.IRZ6hFK9'?^9ʵˉnq$)IRލorT_ep^9pw[]cK+ Ipj3E[-:b+4ͱq|tONJ{ק(%A3u4,ay)T򑅬+bOojv4r vZs59'lo|1pqkq'ӝr-07g2ȥW)\[YqYILu%=yzH5oE7CLeN甅+rvxWmԠw~r u_O%W"Mf=H?Sc)<6~rЋORߙrr>bZpiY+3ĭߌ:kC[$I[%g*Jp 5d=V3RZ}J $j0<_Xz$&̖#ҏv^Tˉ'--?sέi'BwxaښӧC"K\ϾjpG'޶|rECȸ*wd\U}G&b9dY`_uW%mhR\o2Mr(>ZlJ ;p 1ɳ߮6BԙQz(5B>Kq[3(%K"8V9 zi^;M8Ig3M2< 0y#e -PNtF=<-sߕ.oȱ#=Ӛoo izt9ZIR:kM9!|:mCEdL?fy!s>#g*Ҩ iG<;L X+JbAD[;8Elr) ?Svת1~4?4y}ƪ${`szl+f,g bےϡwx{BzWj hFBlв85)BE!׉1%YރGX[kyG);1hLJ|B1"xBͱP2ޭ;<.1laY4O/Jv&&p۽@kGnN\t|wo( ;דzOն5q%~<ߧH)pT\oP^7dW78'kN*t+ $nc4uonb!ԗ,)wp7½A8:1I1ڃV$$A&YK=^v sBIBqAN\zzJ!$%J $NbQ[HJRJ852{p?^CKE['9"@c'9RS"/2 mYoؠJuF]`))y{jAVOlT߻<~";arvW/JV <=ܤ:O]yzj)YkAyFb{ݪ2+撹]V].ukQʜIؒOS{|G(*lQLfs-I)82+5).tWzCCZV!L'iG+PT[Nc)`_Rթi # ZFrߘs)KۆvːIs3 ~(ud, W _!QROQG 61=}^TR󌖃KJjZot]rƴ]b?xݷQY4DN9Py9o6Pdܹ%#%6Vo9 *Vo˒'#`LH\Zze\ZK*ᛠ\@B0yҏbXEztcpTܐjtgAܩ܅G~+\SlVk Rf"=I#ں1irbi]xp,[q[5g%~F+m|ZafU _MJ)K)VG]XF櫓a.<+ip%TGBF9j-z "]+mOYt)tcn+OI:6}S}^q?QſJIILiI0aou7B⼒_j3FWSBZCQpR::㘮Gѡ6Lɕ~%j uo5s\/:/f$-!!iXyIBsFX)Dã#jkm.$S!"Lel<=bB*cVޯѾ$8UICeSX15n !-x]MBwN?/l:㥒GbN0YrsrmܫeDptG1ʫ͘ߦ[ʖ>5UjJO[B L?>k8At,]:X@N/QwQ'cGCW fU}?(*LG؟ƦB0"|xC;6# M%^=)TS'NhuˎFd]G%Y4Fڢ;>Z!iZmR H'QͿI.`ZUB\-v#|3x*^7 '=6?rZDqC^պT%)IRG2r`dSTԶq=xIƬɑ.W#xQF䫳fԑ8@bSXzv/==GϏTR\WU?8`ʼg:yExpˮ])Z0 ֥܇\ݡ! O:;]U:ȽYHUjl1F9(#tg:n~ɽRދ)U+V)ѕ8&b_`ĭ$$ zxL]z(j,v%?Lg4d>J2rҠT2}}ZiK.* #<)W]%.FLrlK`'m='Q*\n!C!M9#q늄]Y|}V[ [ΐYH|Ujg/BTMqK J#yHQZ>-ygM_#}Uu.u5ɧKN QQ^SM[E`fuvsg, ƒ(2hGO)RO,tp&Kb2B#g$)<֥#c/%iClM. 䃬`OFSBdJo#lbY\oԺa8[ fPnTl #䃞Rpo7n,jqcz|r #(+uvJRO8H+R-کI.[ozrII.[o(tG nyZX&e>["E6.RdZt_,ƨ ?tETL8Y*R=qGhF"\ qŸJN3:$Lt:2 '(rkSOYI1BѢxcEoW5s9>tEZCU9c&Aa(rCKUzY4YuՒaC@s r2ʇRz5;mp&?%ߓB1ϵIG^W:Uγ`xՒcI*PݩFIԓowL_m <.Hb1Ztf#M$_{E?{;ѥ?P͒qtuʰhIÅ=y.F:PBJBe0NhbRSLFv>8Sg[Q|+EMpz5}:FORnRd)[ ݮB0y`$%XeUMrgl57tsLJ#J6r#X? rYwv/&m+;VSnO1Xny(Aq%GD,PmEAXЫ6T+ J#|U nF➄o*cS9͂A 2?yWImY7ŵ[ഈљm-4F9:豹@O]t.SLdW)iʁ\%^dǻA]c9V%mNI.~~lx3Iɪok௅=ju-7$hϚJ5gC.T`s~h=08Z[n5]@?LGZPNZ3VA]5r&QTj/*`sc<*Pj[SrHJ^ ӽVH8lZR*dGOj$Puke0riÅqTz"lMk9??8/xU?Wq;Oy!Rґ9;;(#Vc(t~)H!.Eziiޟ% @|Rھ<ըrŨBgn<%$x&'|f kG`3Z+SM]ZTdt5|לF8njLњCPm:AKIj)m(WeOӗI<WHW_54}t U z l~$"YPO.'PCcˊ{Gx)Q0d! v@ *PmT=S8D֛Ei^5je7筠9R'8NDgp1]oEw}霿WifgO'I]00ĕP!%Ԅ%D dI;YZU[)J{?U4$K_f^07;'RߴRCʰkT:^ +xaѭʓ%ˬ@JIJ`:sl:zUoVYp_hCQ۬eezNZC5pR_1 p$IUN"Ey\Ej.1i>\Hߛ)oYCSYŜ8'Uō{ĞɻY-YT͍…DՕy+Jy8TəuYDp1<8.hZ*$ۅ8ҙy%.4yTC=*ldU>;%:_ r=K)`u,y+rlDu1Ҥ͟m-.`h/4] H^3<=%KHM[ƸapҖwXo%i=Jjն5>ǘH}o-. T>mJ:ҨK7Z[XᖣQmE,|`9zyjP^r{[7?0).$$dWymQZP^ D2"@$Ý -ֵ82ڇ_Ξ9hg?w8|q<9* -uXuIaJr:R$`?!#}JDeVVq_ Ȉu@P*ۦ{tܗE43\OnL6yK̓VR]!g8% "2Y&,(lZyy%Cߓ_ET/NO%⟋."ےEDFUB[O5b=5Sf˶Hsds\EL]Uqkbj%Na9 OZצIzסҽ$_.ugsJ;Z”r1 N60+}I\tO#v͉9_þl )oaҼ[upɽqiq徉Kz/Ď$z%pU>P-$ڴm`&FlhV ll+ξG(?M^yq'K6Z86{y9d\8lC&R_枸۵'֪iEehT }mo~#i;¨W1#m}F+#ے۽|w>"A6/ʒnv= -u8etVwЮ2X8&8%AZu|RP7PcmqL2|̝=AmhG)X -'e'U]9 k<. ]<󫜒ski9bA g1 ~$ES]~ڴbmz(58% cnlug)IHN 0`֐Y}[yRYʂa!Gdwt;xp 5tV\m_nOPoJϵ_ ƒt%ga zcK 0!N pAſ 3 T # C&G9.FVO[dHR*'u?rX]Д'V=riƞiMsOBvKUzE N!MsacU qVcFީ׏^MdPqW$;3C\&]9(h:Ga(d[ ҆dIm0}O:a#mSM7y} `sOqRpIT_A-Fc7 cKJԗFm*[,l\bcHGHf{FiHqs7x鰬 ^[]3iѪIgLbώx'mHrKk@^w* SJ鎭jַ-ץKv)UݶMgw/\3¦I..;%YMgD?>qZoIf6K✶j^R+RO8fn[:y -pM%qZ/b)zY*+X]Z{9W*W֔>jp  ozjA4ey';sNL9O#c2i ӥQ'9tWOGjs[8~oQϦ)nmlds)gڐ_O.AjJIuo.+m:fprj<.^Eɵ⟽-I., :9xX7ƻ1+Vi39: N+r> D 4!G  (-0אrL2`g&'-qZn}mJh ;-;r<t!XTJN9a‹:ַ0GPndzS%I*rI<+aKm<8P'Dp1IѷT+r~Ry J'H!5Feϥժ /ۃ7t륩no%|{C%%#-)VQG 9>; uN?pK^C%~nS̓2?+m`0A8Zk(owml*Jåffd=rZIRR`b:R9Nhs1\PSc98t sc ,uN@8#Zw=J,!㤂)A~Z1*J}*n%IP{:veǖ%)HJܒ*P'* I :Ƴq͒KyZ^2fqCٖ )r Ѹ=9KlK՜+OdW|>i$,3 e $ YzֻIiҋM 汼H&\HmdZHWCk[LTcVity!:locWDHnkuGni|!Dzf_\^$&*wIs[N1XK1/ w}F0y 'zǣ8\k=3Ȯ$&S-Fg-? !|Fx'Fk.A `R$ʳJNM:A;$jmS eה k vޫNmNJfl͵oLXͩ 7.yNqz>Tq(=o{um]`ǾÁ nܮmƟ}XKvqD$EWԭ4/=o% N.?{xe~|*5[-i[1nD 9Q'+=0Fӓ;š~8 l8lVZ_09VDu)Eʫ.N ^jϔU:ZTN;zuV4f)o]9wM)PݛRvIVcc}+:pݴegn-L]/Im\ +.ĤnS7&K착Et }@ځEi*]2J,ޮ#جR/C=]dw5>қXǽ`/<ϤII^UE*U6,m$L(cn^KZO?]J$Zm :ӞZ‡P2qrԖE(>J(lc}>֪)-/gQp m/w O[lWRjm'p9z,yB*L Gs;ڿH궶mZ3OlR?GڥY\Jhv߁'ԤnzEꂐANҌ[.KRT~tRB X54'sN_ߪ5gtژ_6 GЃ^'/WSJIz 5N>䴗]iIp!a֞U()/FQ: U/JyjQZVN_zգ(A:i 9) yOl%/sMOOeW(6qĩ<Q*I딫*wT.ssCaI٤CW=>3^{M~<;בPW) h9W* d)%[wFVOU "䆼K!Z%|'١bgcժRX+f9cڏ 3 *7(W3$(loJI2i2d"pi'eDAQMe r#[~%Tx.XB 9#fkGjSvx) RߔI|,'ZRފ:8GbeEZl;:ڋ-I?~{-Y9nrL+ln]-˳B6ox^k)&skNꛧ8+Jd=ON1[ yLmLuV`A#nkfެ|3 њH_IOP;۳25b|S\G*ds ҺF ji*Pk*J5S 'S8ז%J nA]Gl'$0H3O,Ѻg5sP+^޴h5% jףM%|p*4[n4cp RqEJk}fU|wRnJr@+(lY/$Y:mࢣ偅cv56ŚJ*\F^Nrm(PTʎ@)2\mNÒ2脸JДFjWljQJH?PPH[!5Ĩ$~9*yL\0;I.D.$)5K&x:պylϏc]bp⃕FpJTT_Bk7v_ b`s:Ojq>ԅP[)?7*KPWs iI1IWևEGn1AU{ l [N8B 7e2KWR[INaxv88D_]`9=O\f$.COzzQ B;[ rLRt;Z5Y,IǂOs* ;P#vߓR)E x9ʀRxhC"4ջ%j<{Q9aܠIE#{B i VBJڝcgh݂zgqUmÎ'>նgO,#zk05`S(FTP,g\RHՔ2їwќ2۵l~srdRI$ҚM(iu ѯ9-kRrNwڶ`!i%=ED<$B74 oHFn qH@5szRUHF!Dd!=iR0mHFԶ6;!ӨŖ!J~J#ImZҪ$cM:Fy{z|} ӇIKt 9  d"98byRK2:}R"ߜv{HtH큁TA7)!PT Ug'\H )u|D}:TkL |wY&Hڏ˥N=xAnïVP2\m#3aZ4Q =7!VmOK*\)[Q p%:J#kPQQ]6JVVR3ӮX$1N}X|!M%*IVdenCoFu"4;r%@;YrW>|BFxi:ryߣZRL :үNqā8z3YG/,sBnR)wgb8NIfڟ*gnӦ,F2܂Bsݴn+97,󀺋KiauKQ7 fUnSȐ?4J,x8ox`\p+Qpgǽ0KZ ˠEX9o:ŝN7Fq.Ta&\n!J[m7 1YOHhVT` !'җO[Ԡ̑ '' SDގsIb(,%w왍gӺ?ǟX/:%)EJT7'l`OعI50u 0jqc%Ǭ~Lڑ- [R y[KT(9g-NM cʂ HB>1}5|t'ȷ7qb5ׄ[\~N{m \ 'M^g/VXrn\%^&n趗Ӷ˳ɛ<)ӫ[ 1G-Kh^>^bi xݙL%ձI:W^!Y:9?i'S|KS6\P' _spH#5Fʽ(/mNo#>,G]mL Yʜ%E8T1YۉF_˼S>:.i:qOIanŐаO*ݾZd̫$|f?\W⾘>†lL:z0BsJڔy>8}cGm#5 E}s-|)0Iֺ%nޛ9^myQyP9Jʊy~g#[ZEZ.qmOJTRBnX*sݓ.iLo. Wf'@=]?+B2V)N׺MVNq$bF*̫&jCDKk/ɀGL*JKr>ƹaO-ˁV-AqSQѡ*!&H{h%s\$޹}n/-%`LonkcBО}ֹIaY\BO"|ʹqy)o(7=ҾtV%RY=Jտ%j-.--Uƽ<ֲf"3x:ҝ**vg=sһsǃǵSC13+˱e8*fY:KQlyVԨ쓌oG,` `jklXLƑdfS.e[P%sC>QiroF9zsOg굒GVzSmb-3a@c]7 6сRIƒPP K $ɯ =^NN|Cxw!\+3L=B䆗@q p;Wm)=bT`de Xԙj%? |5ZSjKqy:lu|[VYMB>{WYQC.!9׷IKTH+,'# +I:ʙ+_O}PORduze0Az5Pې-)jld%+==)FGW,ypX(p{gNkL8pGm˿/>J/7-!}= *@=~#U*kspMTk%!*JOr:]E$,"r8#5i̶-!:壗l|^Qax9ɿ]]R &. O ,2~(92GҙT2}ʥLw}*&QmZA<iQʐTJpm 04uTg | gMJ|g/pMA>>跒b>MG#dcMyy(zH AFww߂j݇($ZVRQQ/"Wgܗ? 2@gڰ@-y~K`%‚ uӳc:R!9`92Y2Yci wpқAygޣSˎUgTe%$ة :󃰫їs[  ڧ*- 0KZǨ vhBi)]QڢLQDzȐėZyJ.:] 2rh%Ctr1Qc !L#?6C`^,[NivƔ,M)qPؒ@]mL@aN/dU[w 5ei[6 ^?viJ HjwƗF9m2 mjItV UnFۭX/`ǥ46Gm2mc\ 1W4 .NX"VNiUmVHn1#J[L t `ˑz|ȋ % wRKo J[D%A@8@8=/og%{.),z%F:y!YÎ*qd IK RB=dNL¹yJ)ȳVpn۵ҍ%; !P> ˪x@%Y8TƒJ[/Fa\"KMÉZH"QM` jն,7: dgxP.Nɟ޻bRx}s8-p(6m!)yV-ǎ/P)<zUĂfޘN@V<|p[zG[[ӹPmxo歸P./oL_6^WVj=~6+ӂW+ ȺYV.H1xm< d:.Ct2sí)T23޻$ss4-OӖ{us6RJyr*zjx] ݪu9 pR`\P#B`t\TOzS Z}gt2s}H|sJGQrk^r-x|[]@AydNw'֏[W8ɰb\IRm3ܧHkw2\fK%h^;RLH v)K3u.H\%<2e͍GD gxW(/vWF} 3]5]|c_2;j6= FD9~8\!_Vxl:,/cKsraOLYۂdFpw qGIO1{SK]R>!_uV;1vKxwjԅ4[I#Hj7m 00Օ֫N1W3>4~laRpnRRIKHj1$|GttjIE$JyRw[d2eJJFwS I&s\.ܥqY떨&ԴA 2,de[aBm6B3b3EmQC0=jI# pʥ.ƈnN\ZMRʶ=~4!UZ%5m?q#e1FZU>32Zq-8܂(WLe ;nk%M/[d*P ҄ T㠩k<0qqq r:cP$ˊV jsȰ,$\P%e$RHՎ`gV&m+eJ_IRlhBZm9jd0Ke?rg Hd\Jh`;RB ʥ`F xȅ:{e@Wi"> .we sy)WZ< ׊Fӈבѫd|xgn\=w$RʹܙW'Ass k$e#2qEjܜsI,0k@Sg֓Yl46dnUԓkt.ѭWP>c|-ܜ) j.Mڐ-o3baWd!m*y)HP$r{9ȃ: @HH)$U ޭ|(~XQXΒbڥFd(2NFZ\]amKm ^)9gέ*4]E<0ǔڙ.ርC{?h7̷r`|{jU?%K@{jУ@s*VqU# mF|ormdAZiXRp ~AΜtuk9ߍkuKx KW'q$ VQۇ+Q؍w# $El7ڙ,Ɓ:_l6߳rӀ:oe’SMr:i Hw$e _fxTD OUx+y3)a"Niw<1c$+OjΫz- J8$EU?dG>A9ϥM3M ~BǧZ2JYg 0]!{)Ĕ)*OcO$~Hq\ri.;huYet u2+N8 0fLw̖Rڧ8&!ٟ]KqM8HCGLc5QЄ^Y7Wu=DܝHq)Sh'rADucQmvӚ 2Xh/ ;@7x!76gqZ'a=p* L_1vx}#9樸HRऒ!/qg͚d ӘvBG>6ERQqf.MQ5OuPHЯ9qѭJR /H|fR>ًܐNN~ sڥBZo8pEf"\cosDHpIvݣ3LIJoc |D)(rK>khoA82 ѫm'M Ŏ< _Jjt<Ě'Z[5vKNBmeeĬ ^cg~0X#Ԛ%|rRB1lduGcd~sNLۼ+rܴ=n-8қ-AIu8YiKnҧ7;jz;)H|tQAa36s"1!hF/9#܍sȲ=3Hُ#9QP=Ii8ぼ\tku\e_.MbCe8Pr3^qsStDKf/SKj2q o%\y|N%DB6W$ERP9[*QK~P ꬣCѣ?$ x5[ѝ[([A<_^b[|h괕M8/EIxԋzċ}_0u=HzclX7IaVPE VVccS]c&QSꕃ>0𙪦N>?#Lv3CS =6ȃrGz5iv!0>I{CPdCj?FQBTEuZ8o2Z%:bO)SxVXDM ξj~BIJ\9[N2TjĒX5C]Efj"93֨,}10%I.w5b5DaE5Bd‹#!Emb\R2}@!X('ҫH tY]\ҐpNrR5?bҕszO=\Rq:J/Ԅ{ʤ!p ! cpT)Ɛ1Ġ!JB3CK8!#L'O^ۚ7`I.:zh1Tt,'\v+)n1l gF8 %/BŀK!;)Dnh_xk[sHԣQFLg!$%őj~;F~^EJUWd'!C(Q) ~V(5pcK2HGP3Nh2cPH)0ЖBTП]:*G:gRkH8&$%ʞT}s3_6Rl-i9.i:LE\.0e)gˈ;)IF? QɤZg'Viw(!5[% /Gc_=؈)lk6Z}?!p.%%a+؍yd+vYmJ@ZSD{be.H ;W]RHu3ۈj)2$=@~EpR44c&OKLg9^_J =aOKFb[—r%X >ߵj~ɕ},|a4OXxצc& 2$_G"NF*9ۍeR ECfɬ;۬,$_&d]aZȉ-YPIʰ3ˌU}Q[)?5xPFzQ2H N l83fN)$^zw#n4IA8&S.Xd RJqL\>sPj,T:gP>kW Ivo]?SҔyg$5UO pU#]+bڌ\z\6:is\i HN@\ϓQJ| %iJGw2nޚ O ڻ.@3_'=EfCZiŎ |'q7fHY(rr8a|MJvog挽]øIRT 2٪~O,G$88%yﺎpbTH6(Q@Y¹ҝ-Jf+Q _M'eF# ^7(Pz cÞ$*-jMHi*2Np;u SJ\n:oZz&GbJ%8꒥ڹw'85c;:{=-(X 4blx8 Fܪ#28Pu 6'lwҺiy5+!IVCiH9nڕ~j2sȅ;cp)Ԓ:zNK>uH(k4 и8ЦHy&3ɒuQX|F )*Jѣ-(gG:9C2JՒl;qJꪋf2U&*x908o[d>^VcQEUdʍ>@p~y5ue˂1KIow&$GCc>?/_]2sDcUuz]$|\[ĞMZն2sgW/8`O0L61WS k8()1ή $(ṴG W %(H']E{ T VFOU&XqO嚵lCw_}C ^ʴ x$#N64& %J)3xb[[' uQbCFY$f1HF1:Rr0W#s^P˽!!QnlR?6=Bڢ\ps'}MQ{>frPsTc Э?t8VQZ^Bh6=A1]ǭsu6J){'Dy%,mvγ]T3/,v7!c8 Py kRu>XQDsqnXAIF\GRYB B1^y}Wv/6K%- X@Kg8k(]ҷO<1YB|ĵ+cj<]3\HTJM%#.#Q{M}5LjJRHNVӆiSfypEÊcF֯6vO-q^u~7_:Iig ڦ%OsQܔTyyfSk:VEɧ.9KNVȔ'a)H$YV꒪,*v1i, 3}l2X)P#!@}TTokҫ7Gş{NºyK'4AaI)F I8kc&5V^ fujAYܬ$=-^y=Miܯ# IYt:z#&췷jLgKo'l|3c4 N%S^$2T ҥ`IE1î|E]z4脩ؘ!src | I56BK=uiZ*- '+Eѻ+϶Pʌ$u:QB6TnCAAe[] NnnBT~V9q0O̚QD+HGR4 -Uj )fçGDKT%V+-)î=iiu~eiz+eRCdzS-M$*YIpZYߤAk)ҒibKx)@Q=.3e zz}~~]mL^!`:IJqٮ2*B[e"rp#wmuXm4r2d.]*JVc>0z5?vW,}7 #{֖⹺jN;/MmN0rҋ~[an=R>y lfc\]Pڃ"|@u^.w# ӵbE#)cU- џ ԙGK. n:uާUq$dkG\?OsY{mZÞsBYOn^bJҧ<Gn᷈}6N^mmsHBC2AJq|#[]g}8YJlmY56iZ nzZG #(!z;&ZW>x;T7O1(}xk)Wb]c$$7rV*~:OǐGg=z|i5nU  P'?Ê%k+;zL-LRQSF|c;4PQ:7")GL?Vhqiʌ~&ft횶]r!ͦKd̎p\#NRJ{u|-7.L\|2K] WXȿ%Zt|륱Em8VAJԁ܌}+-mhFH,;պ $?2te Ԡ$}vSr,ZӔGlH8[>й0KBRt)O5c^I{n Au#Rp:c-rlUT53i೬E~Һ/_}yWi=+T;"ٺ[ٖҠO+V6-֮Ԭ(G{OS{V!xA=-=)kO*))mJGiNRNzvyBC贜pV?Oo);E]:ym/q36Y +g(O. M/gQEŕ4m2bԅ٧K  Ss⥷*)ֹJOɡfnޜɼ$/zR4jظ%9T+'fR=nmYJfJۊR^(c.ߞ~}$ddsvlNϰiRy/k|SQ :GJ*d<N tFY[8ʎ^Qvڷo.*ne+?c7ĭPr%%cVw2,[͹rJ;>b`2)8Gzso:gtӡİ %bHMrʋ6p6ІO;Q"|hYu(qml۲JrS(=b n[%(G&yM>Xj :Z'ㄅ뜫O (jxHHx=} ;M5Nj9#ͼMHQ]|O.ժTVrFI@[W"=¥IByIXjKNʖKl.-\\s8ߦ(ryy DsẎ|ND!́qHGDf@$bqHFd!: eTxq6!zc.w؊B2F3ң.;vf;e-#逝Zg$1Rm(STp Q)4RO#I8>|@3 tWI Ipn-'WScrs4Nlg J6r{`a5!an3s+ E_ŏ(6~gd$]syaETWgݨʦ\Euv0qw@b"NK W7:V6>inx8pqÅRKcʺ{_[|2kzno m@)}6BO励W#F?DjU]VB wuoh~R|F}ӽOO⡿'G)TNbxW-|Rv̇m͆?"j?Zh^X3Q@ "w8W}4͜<9]m$!{$jz]3 oJXZlVT:ppA*?I^y* ۳ӫ*7bqR2@;g) Uԉy m#loBBYR\eyŲ)' g|ؐPBX'9*lo.$ 6i9`C4Mĵp %IpLUz $(*bf*9BqUYߵEAO4lK\Qԇ_ .8 tԦ5ۄ#WU?ɊPK ӰtbwKD}7n,F)2$nsFౖKBv 7Hnir.po;g+6~ FD?!q506 (1*J9ܶRZ܎Se]49|4B>u6%Ŭ&; AKI}5 ;zO*/ތ6YEaHrU8tk 31ҕ!S*?ĕ9Q?_: 8Ȟx=i?Bq#YXR}EiZǔZ<[Y_ᣉ6ǭ-5aXv3/945k?Wa_ظ&MGF҈qIf8m)*?SFӿU6nfqyWM$h7m][me@ZWm]g~NVs ]xҹ%T*zCKIуjl\6ɘy^\#R+bqO^QPV5dɫd<`N@k%ͫY7j+_:=*Z/N*K}ØN'#^o \ jn qXҐY5Xǜ!Xè:4/E%ܜ+U-s9hM\"LOܷ:|"ac=9gn:{s֞쐝vB~I'O |y|>Gk[> ,*Z\ǚPFީ$zi캆 +#Kpwk%|RCGea^8up|c\&4jI O*7wvNF @Ri՗my(Q VkS K[џ-[.b+$Y[b9Ye!G8 R+ 2hm0ܸa[TMWpU!%>ΎޞWfki6,s\mN~ibH=A*yp=xsHqYkTepXi~k7) w;IŴk4֕S<'˓v"یw$yK8郚𺾫+u/%Fv{[^M:ca{YJr 7 5 n|BH ;|xO$[-;И瞠 UJIIDK$U\Kzq,)SpjP;;qOՂXKd _ANh /-u*-||At휍JXՋ덛2m)R0*2&cо̨!- xfYy[SQ93C9]Zqs|)nwx)ӪS*RԬ (g_TWzv8]V`3SगT_?G-Źuj:H,<]D9W3ϼs$+Ijq/Zxi\>Zgd35g+_NʎJt|D0̐댱-␕%']ԔZ\ RMv[O9AfIP %%F t y{fK/ F*8)v* /:鄄J5eȉ[J3zsD8pta7mLeSaZ^CNQrNQk"A*BRsV(O yBJUpYblPrJ}|&-8P Ph(E_LBƞ6YW*U˒Q} yBtǝSDu\Ip3@3 iaI+8ܚ+qIsdFJ̥>AS]%Ϋ!D$ӈ>҇N05D-sFΫ)cy9dZA,5Q?Na[}:<F2w T anfG@o=ʟ$6r4I;Gi4ritWB> ]抜9z)<&9oaoi֐+NTQiF0!v?1HGNZB= R;M.<d1!pQV<ӥswRJybHUAYm5$4IMBN"Ji/&F# y'M}̱53 }1RVTngM)䔪KzV"Y؋JIk.櫑I8KmZRùbMBv(s-"\(RҮ_a?1['!7$wb.:w@5:FIgBTJ~"%NH['RWyf#-QqbjqsJ³݆::I`,6XZ5 Ceeڊ|֗֝#BӫJ̈4p ('#uv*iw^X{vTť\߬nIvz[~+I!\g4*QL%,DŽi.E޺2+H>kLYOyByy^WS*-Ӄ/UĮp uYlv)DY)GC+ Bg$`A5ޙRo(HLJWK{j@g'Ŗx#'n n8K5"Lu[,ya*QO"ZJSī$oKӭ#$~~:">Ce8J $n_I(L1DÒh;iglUZXnqeTNIQ 4x *Z{9צNO\pI]LVTr#*n#ԃ+qݓr0fc ·-RJWN۩'.!SKSZz<$st,)#5ALĠcfһ<P_dwT"YT+T>m5WaʲAڏEa} V;ɘ1ETcڥRo5%i;JLno1%8s#;Jd&eju[DTH . |RW)0lfݍV֢.dωHC!_>pCVNf,7w6w`%2QvoSnGc[y"Ϗkf$zӸf55ZyD`=ە)KKF!an%'UON2[Nf<6hGڗ* e)<$լ kTN1UZͺܗ9quep { ъ]y"$>$ ^#Cʺ2w{}Փk p_RyYq`av.d};d&}?ei.65 $tA?T{J)d!%E_L@ *FBtE6*K4-䟉 ryҐ6=i5g!BA!' Pl!韕! URO9>?6$-ep/ HV>BRwVAM5kTJTrkF,cj'}qZZﱫ{ Fca(@AK`QI> T8I#aͶgUl&Hñ bU*nag͖lzZE[ M`r nYu&4|hIx,ʦW$xM6yJ: l1[bOv)&$,8\#3~u[UIa aO";m-P-%C!'rS#lD.md"UטH wMy3r63]WIhsRWY-fdҒRYQoUu-Vu#Y]ϸYHj$q\ܜr'k*MR-\SM2Ww6A۔|+N2MᙵiJQ@H:N nFPR7 ~o? &HZT #q)S( `QGygnnF0S4۫XIO*޳p\3`ib[msyFʾJ!]vf>\=*%NAA@>{%Mtz޻q#Z ԓIIyO7VL]\^Bh[ꐴ%N06UT,ݮ- Y%_@ 0wTknSOޜiUL zSC4:eFN3)/5y Xtܟ"(Jۜm20`>U7MBU#/_-G֩*-HHAZH|~uh4;9_4g CRn,yMOsⶸ1N)\_]Oz>ϣn.'_X :09!'eו@v$.KHߑCn∼>R 9[2\C0٠y GλYg+s5)p(\-Z;tjyrV5INàDIH@/CD8ӃRXd7;V . `ָ}Z#Ԗ$656$MqAm#W=iEʪeA/lNǿwq^`<,?bRJ?reY[)`Р^@ S lVm )r(x0mZ$G0E{8N'y$XpӮ}mp)a*>\witZm64Sy3{3zVqkj_+;R۵y5Ɣ?OFU\R[/١Kk]\ܘs0*=uE]3[トJpt\Nɗa)s$ rSS"L)X# r T| җ7J%?ڼ5WArG HzQʏ7Widڣ,}qn ?R,s>gpjq.+owNOzM8BNYX֚O$iG7)DtFՙqS ncU&!$kkR=J洿g xJ`P ھiApyj2| Σq(5d[s8GHJ˚(| z_nb.ׂRPDN IK"sZ\Jq8**MG^[Y!E()pn9}M[I¸ )(m)@nFOIa%I/wGnG%!M5k@SFu9MK]d+mܸ)?GI>\&]{&zhM6Bi-;oy> PZfZHZV_=Jqg5t5^2ZIv[hP$['볈6^i ZHCl%Z?֩㒽ZI0RŷJ\%C]a%E]>_** y+Sv\]J7zZ7FkÝӸ95{kS":qcr?*q3m>WsQP#oe\}MW. rtd*PɾJYD1+e`iI?jЧ&\*;pk[y '5|mP4M S+Q`Fp p.Mk*#j9 ecch* riɋ8A9 Y~C}[5c%&3]f1Q)aldZ-D#!R)vXQ+N%cuK)znqTZ~"o΂}q(@$֊66@./`_*:p:r$B$`",.v<-lrOV!JM++e.'z"Qw(J ޫVF:3ٯ1 .}cɥo#,4{ ΐV V t!K |$L T=IU:{&rO tNsf{p*F`)J)gbhEbW6H>l쒬)()搅-ʔIUJ+;j$6[t8@(V :5Jh#4#$Э(tP, pHp2IZBde~is!'y88#~y#89bB a >#&@՗ ?b\ \vhE`4R!+J$giPv廀Ҷu@Mi$۹[QJ` t5yu=(.).#-PH;vvy(XJ~ڎQoMd3~ ً ʺ;MF)pB4W5;QƔ̰yG/LΞӺ9&orb2Ԅ%ѐN-2MrAK밞w?q09 HV|S\`MR'[\tg/90T" P璵(>FB&P5! Wi<.Kɺ~jS0$Ve:-"q`Әdk1I/q.S2_{*bzsn1ottX!Ҳ19B85XZ:1xm%??4p WEt:+> Zyz"S(mDZRZrr:Pi[=& Ftd9 8B8)$c 95h7B{}i`--4T'*ǯ8G.Y Lrp{ڥ: ITyfۥn 3s?Pdr_횫R[Tt-%J pJc8"GD݄IZg|0eʾWj>|$-7,-ݿf4OcO?hzyb=‡3VJ0JPs(׀p4w#~ 8H0p .)!PuG.)J5Ya#O=UVЄ<mfRU'.xeIr<*+CzKvҦVzOR##y˓7Pk5Q[a<(A[b:zm}l\T*.^|D'Ul( OCMpQzNђz^I=kV8#UmQbA)qyC &qAء=M-.嘡_\0=ʐb52TF~hTlmBy@֏ eWI J93ɜf/-ѧ,)cZI4HQ;)KFFlLXJ;ҩW>FZ,셛io֞]ۊÜ$%i#`0yԈ&Ӄcw]IX^";-ӱ`>Սy96Z,sy\DÛqQ/C7+Ź34I*E8:ԷsLGL+$f5Y2P'v.wg4x k]qe{a,7巕$r<=jV$w!X\Vw}'\[׸d[%$%!AO_:k%NtizuU:@P҇\S={+$aW,i|JM|ZV8Opc^j>ݷ!%ppcqzVeiMlMJTG *GBl4g`H =:t߂KzPTN >N]+)wz%, Уiv$$ROc)")ki\JI}R3]h;\ jmn8EhD z{4!&PR W)8.6DszsjR0e)ڪ7'R^Bes|XPY~GkչԦ$#t- nm2 RգJ/?߰YZyI> 宆qٷt% 22O֕;J1A* S>b'>w`]ʇ"6̨+ H9CC9BopX=( WqҐ.'h8)5G"C#sb(I 0nb_U 7Yp!|Dt$mvJpZ#%#pIL'z{B-lKii2u.(%#lvEE njDo 'qHAkۤc)PRP #`#HF ?:B=dAqHF\nRvˡś #7 Cӏk*8FBuֹ3iYUr@*MSZJBڴUqCo#'V1$e,noH|R,RKC(gI?mTk) . X^K Ǹ+RjIB30$e@"=SyCH9pl~_f^ B۵+uV{q/qZv.gDAI@S瑲 ʎp#{;{:`LbQC F uɎ^gpn = X鑔SJ뎺T}iJrlQ] 96BTfVs$RyIVv4lLNrsH@e)EԚB7EZuO0OmpҐR c`opx&1W1mҒ\o!";K>KQQ )/"'ncv@Js*w=~umZ=&AФX?U`Fq(7]H=}k22,s\} wwGRm]FJ%-GRzvu@GoSߥ3J>I8'&u[@i5pګ\X[!uv^*pp=6K rwv?>ooyeT'S^w6ֶx]<0CMO,-i6- j!@:zRYGokuug~֫-ǥFYbhnDkwJq6셨v~R(w4 $i(R\zdօ 'e'pEAaD%8@V=-.\Z%kŦ^FeT;@*"F=,aw=T x, HQ*NSK rք#;R40֖7 TȚB=I zBv[PSʨ䂴ޙ2G;4y חڄjA  4=ic \egl{3D7tmISjR3uW+e)!?J]/*+I gOȹ}l^|(q\u@|]1]gA\u G1mQWP$BG= tCA{w6tךּΫo,ԣD'ҌR軿w,FV8oHF, +9)-yqj.mzB ١VP/ x6lݪsSE -q.;FN1l?EgZ%)%Z)kNע0ӮwVO_J28[oP -% 0pzUJ"x&^f\.hxʵ]3JU',%QFYBNHO?G6b?$&Xt*0dr}_SQQHXr.$jt%$uzgShM1c_SHP,DKefGZp|OQXGOZnY p2<)E;4|q=چ]eI9pG!LU i$ij\a:Vt$/d#^2^/k^up;0yqvr;=i=N+?f՚y>XFNzrԼ2(3-;5EDLru |Vs5Os}> bK5dܑ*jԓGuk'yAVq{OmC8{<lsq@vY?ҺcrG's)q⦢@Q6wں5*E{h^yN"ORe\I yqՒϐw1oD~?j  ޠ]L6ed~ FNWuBI$Gq#ɰ t1Gӣf?Mq#K9cn.tsaM٬3q;myRI$ҫIYi"eջOqfBJx ^|{Х8QcƸğ"ҶH1LvNs?U ?9IgAiIBEj?\*t #qҾtEY޵l8ǐ3 uZbGƵiH[lj#$8I>pEīlʓ*3Jpq؏]@yIOKy!ӁC!}g*1J~2f}KjL$(JϦMHc@Ce弡)'$m#4 `o#ԐwB~z>Y4d:g?ijB1TAp=)۝}(9HBM#}I*y [OEoڪ\ՒXBHl:m$dfyadL<) Qh0r <.omj/"AunyҌ~[7!mZ`M)a$+d&m̐ݶʎqBzeo(> vbjM5KWOJ=t[8/wTJJ) :؝D=Y8yvS>+u婶O¨RݖQ+Ē8rsrT[BU{֕s䔟SbBhN ڎ'Z07Ey-et;ժ ȌX I@zΓgiF< )\mr1ڃ5z/&R4#< cJygyK(|zsd ӄ>5|HLLMD!HeFJ1еo,ۺyϘwr ɻK 9;i$.Mx> %U%Aɚ.I'Wo"#`#$glXP^\WNPI ҋ*hVX̛HH98hʂ}'\s3-:̂ u澆:gO[+OƊ5;ngv P T^ 2]aJ~ CZQJ}AY0&YBԁqF |{S:Ï֔9yV2)MNO3wXiju6RrjQx\0dIXCOo `g4X@8dʀ';V )9L[Yh/|RJ 4<$!R@=jBZ}.=y2QqrRq '.O[V}A>E|6:htQ`)4fhmr^Ny'1SW*rqH@=j#*V?QB<$|)W3{nHHF2 Gv!JZB6,@xnAA$dO9LI<|$zoPź:k sryTRqVmtHWl?_[Xq7CDw-Q$`%x8VoMG3vIpcG.zft7^`'|dP%8XY"HoᮨvnV[So[!CX I cU}Z49?( =:Y(xjr{ַе69Jk`ōEx)c[9[rf|trqjV94Eԗ崶yL,bR9ev< #zYeYyҖ[XmG3;YYW#=i3OJKȒ%.TҩM8 m3BT4)ɛ&[>a( JП-<>AZ6։9=Vja?5WiF֚oud8OzիEG6ZR[*CQ،-Zo-5m&-_b:dJΫm,kT.5ehB\"J VOj Mx4)S#vշJ uXf1@(BORv%.8>C =#Uom=Դjմ^FnpE#5E.mՋt}')²1Wy-]}gI.r:]@|47"TT=/3;,=7U!=HiJ9?HF>\y®H@E䓇7#ܑ4l 1HG'ڐyh!\R{RK?Břpr}Ho!ኈ 'ը,ywm 8T(\eGY_2SE C@mvTRrzRUdej\/RSr*3+ x)<ѴUCcm`#PP7V?aeˆTԐ wr"HcoԷ"jHCF=3R~ R$HFDRFsHG|3ZB=H3HB 6mZBuNd[)IHr{uHI!FR%T~`!IRS)ZB=9i^#|YJ@QHA댵29)9iMdU'zB>#|B>P i>3JRKSUH@0AM!9:{K !W(`=^m5Zr9z;~pA=qtwPfiRS$9۝m z$aZ(>L똸Y 1y CH Z\IHYiCp`օyJ씿tkE=)^~ S|I֛ :2t)P؏j7~H[#ɢ4SL~&NP#k.K\e/k j&]̙wk++q 7 0j7+8fAE/vaQM蒒Qɱ syEE\O{@U}ޭn YXm }2+4Jm=+7./t)}`Ĝ;)"ʨb\J5Y2s5!w P5c⽲^'!jJSkwN2$V›zmsnR/R|46x,yL{( *q\y ̼FsM3A.-¬3nA 0cԢ}i!MjS̞T?䃁@0X &`JgzB $8zGzd|!S֐Cq~,:2ڜ9?0֐9[)d"Q6F:} "FC#ސ$e$X+uQ;Eu[ {ra޸={_{iٳ\Zdƨ` DFZBiHSkd#LRl$#q׵}utösݫ.lԷYm}[@[lT]vfM$Qʆ~F@6&ބ5gtʚK+&)t}QiA+Mƒ.t<÷θsM/5jcqsk{ gJC+(|ca\ⷤfhYA=}UY6JynHYs꫗PK_<sښ{ u$Mi,dZo٫V!]F!kXAhsOY,eīM!VbW u ل%p"+umi0FH!2HF8yHG oHG! $+ye]sBP]Rp_NX>OzYt'DBU w(["<IRC.'lBGJTH@XC` =Ȥ!a4TʛqJcڑ Oދai5oAq[œ쏐[pɕ+jnYoBTrj$ើG$T *;;tTzF djB>9sHGRNu! s_H#ILCTNs̭tǭN>ƙŕ(@ {qڐm/?:B0 )#8JB1*jB={,HF8w lIUf{OzB>[X '1HF 蓚B0A*H@J"-Y-[;o#cj%+9sHD.szT8zHIܫcnדSO 8,I'$Fz䳩Z&!LxQJd)'5JQےx #n ')ex^r)9ChU(Kr(Reb ,%ip'SRy%V']EdU33BJ[6mLJD)I82,ǧúAÅ9\޲k)>MRj9HZ~rkD-_8UlMNJr5!KIRTPGӃG"&Gg4ĻgcRwѦoEarbS;: l#hE'9l.ns'(;Cmw.,W"$c=G".nq W=ۭ!,ҝ.(*eXYG(x-\3PU> DHبj+>Vʞ'ف^w0X)G,P,$56Z}Qݓtv rimҖIߑ#~jVhR.ÆV~:R2[BmH1J0 府RnR::K OҎ"/4j5w* #[ jOK_Wc, /a!6B帩 $ m'?uc}/Ie!wrG`mRNS׾1Z r)_X”Ы6ݓxO<GuPyoP95vG2 S-N(82q{b|R|XjRiUE(F灰2 RV(5A,O@K,ti)|E6#WHr-|48g,%rg}E0nS֐HG ##t;! ␃zrm8p}j2CAs:pm#N:ZV j}S̜ڦu9!B zR%MTH)H@U䑂)Fw#4pR$~ca!97FF 9GH=iiOzB>MGÉ|PEr#'܊ +avtmgtnӚn ( 6%'5j5sR~JW3gq;ҾaOy8#S+J(&9'ڀke7q֐7H QR!ačib55cX]-*m/"_Yqkhofp`9r)OC<ۀأI" `|N0*B62I(:{ZGmC!Oʩ]]F!j,Viio촍p7Ҝt|ٛӺ9-*|)9VMOjL<;RMKoԩn|i"u*F IU.wNh hjuG>h+'ԆZOמjff!Rg><(퓌}1^y^kvEEr5kM4Ȝn*ZZv PYFێEq¿^lW]Wik|wV%gxReA=V]&CSitU%K5EprIVJsRd4 N6ܨIHCkܻ'+fldWwic:0M+m.,@iGY[-#5bxHΕwNK&|(z m̭-I sU-cJ4jҕojK.vy!KIBPGB>uZF$yv{:uۉ)8yNjuojEHp'WVӏʙwOTI&d+B@VU9|%>zŮ-Ǩu؅A)[K중W)y*ªĄ%v3u.M0J:#Z=7O9QG snO2ϑiʣۂ} AdAl1 6pSں^2:cD# zK*cJ2$ҠO`'?^vej8r.&v67\Du)ke~?Q\%MFHcQ-/]w J?\EJ|Bj:U_tw3MuN2.ΔåYI~[FJ^Q)XlZkDQkXȏomJ_/ڊ҃[j|8rZq9?ڬ|x3Ƌ%MMtSr3])duY9AǓϑ; wyGyU.4%|RjGv5.>cHIۯ\\cd%IvZyR"Mb*TTTv_ѵ>yH5zT81N)I**9SQ5KKRsYMJ0ODL`)H(.r' gcIx B5V18`Ŝ^fO/]6 \AyksDᅑ709:A[ܭjQI6bcFq{(h>K+rZS7A؊: ЕoNj:TR2j.k9A*J[l8t.JY%-hUc(68$MOjTO UywA_/*FΧךZє3X 6bc68'?*B>iސ HBJH֙#I pH8*j s=\\s/7 >6$RQDw嶉x;ajYSB[Ti9JqG5% Ƒl%}vMXp<]/&cÅ{hlt={N8qZ?0{glq%Ľ%89;oSVєY]Ռ:\/ 9UziJQdwmzXMSES U@A=)h?ZB=8##ͱHGö1֐[HB`YdA2 K/ ~0/Sd~[JG$iK8*s4zO(e1Nz!)$R0 !Q•B6+ ? HF E!*4`F)펧HGJ)R$ КB0Sn+  \-JJci %58wԄj'N!힧#s!#nRpE~ P )d\ K\ntpn?UR.NucR#rK.(l8],s2mVޖ%$dqҷ,\#QB;궮QWP΅IKO޴WRv!n=&B@ uI;_xؗqm~་~ۛiL.s^`Ogm?73}ȉe42S\̌`mֺ7v uSpSDJMKe*uZMk}eHgP؜TeuF~ 6=JF-L7qOphK_@7- e)R}sVɾԏ%O.H.Ԩ&Шxp8$gSUbHtV4 jO0$];!nIHAޗ5qpeO?csO аĆ_NL -O:aC8Oq|/"HlvPG`uȤ!eY_"Yu㜹 #TAԞ Qᝂ%-ta[І~ujسkH̲ d%v=ͷ]I1kim,P+f:Y[j98˷b 1E9ɭ`@/_v6T"\w+kM8:JdW$$~ŷ9LF `(+ +3pN;lì:TI|!#&e;yOk[NNςhCmRIyJRMG9Vma3]bF=i'7ΐ܌407 ?< #$r`cUkF۬%JֹxJGKK3`Ύg*,-NYNUmK,=q`Tw5_|qfg@ڂs נihzy€JNAޯD<>Fыj\YAe4?ҹSAYe.M ^t/ki!XQ.1eD%IO_Jm5HV_Ƚfb㺗sY*84S6?1(p,m$((l}V(\J( Z{jnY2Tː~qZ:(Ht%.3th :ў*ٖA 1ÏR- 4~ Þ2!$/2FSVcz3ɇ,G- *q,mʈ ?jB;ң$' 6uyA9?ÜI7Ra & 7 `{fep|(*'")1?9 5xcI'Ιn"jVAF;o.2*;?$0ӎ`#Upq^KК|R~߻dzϹ ⦮BeiRWdzɻeذ` QZHF|H? ;j.!18pFQ~IX`H ovLj)o\UOt }K.nwNZ$*~%ipţϔ9bK)/V+.̌RTfDJƇ*@Y9SgFSN@xy+`+u\b'csߎ:+*o8wp<֎dU0߾x؛tj(+ w:B=;lsB<dQ! |çkք ay}({0>п\QRYd[_V~4Z9gc*SIfH|v#{l)u8@%#޲D2)Yc,;`x6t+%k(J\RP 䱏&y11MKy }nrcwD㾨<ט*_?vԵ*$rD[ح׆.$K$靫"V]ɝ 6[P S;m踨X?MIxے(joI^1c^䑐U :g|BAHP:d-u#ΧY<>zH"KVԶ839y!id^y8K?A5y5,hM:X߄|IHϘ4X0X .9qj)άE5)ch%!ԇL[-kTǂpEx' --2Qʼ4-|1:uƛQZ~~b1L4eRPN@u~0U,kP@RQEmz됱7+d盥E`*"vr{UZydrb=`ҌO4@vC# ;cHFRFNE!8 cHG#sʐLY$_:aCI_SmSq #Gͦѩ'Fm'4bf;+ڐSB5 RTq)Osi

ZB 5?p-o,!.+vYub%VS ;Z$%)ySR@)[9fUSgJUlmڸO \Gf9@ީƳh6QHqZJj2Y|SɾCeGe lPD=]X %EExGS(>N<Z )RNZcW*_r%t>y=3Yظ=3] `,>SG\ z 3 ^w$zU.ZqjC+CQh1ˏe1}dAI˽!Xeo8B*@$7>OM.[I0ՙv&9xqTx}|R*ImogRu<I"ie` !# `R~YGgR#9G7͟\QhRgǒM9mv)z8SlƷQ)Z[~Pg[{Y^RQ/JV;\lYKˣW*TUK |RԒ .1%j989I,e>W}6rN.U}%i MH~e-8TI&Ĕ' Fʷ@95M ~JlHqu0T/'Pc+Ђ?#4$-C1?.L vv6gf< 9Owviy Gԓ]R6%̫)) jV6IsI$f<[~*g%mxPN}*[hpF=1QCnF9=TpiEaN51@ SԾ9R8l)<С M:o$dΌgJ{Ԝ-P2\ J1ڪ\I6hF`HA´yj {U dj5c=gF8? 5:rC( E&dHFτ98HFo~b9!)ڐa_֐! *4ivB3OʐBsHF%tRSHF*RB~}͑iȂڐ6sX镒0'0s7,[CCwRC)I 1J#v*<9=)B2h$j*@v/"u|qcLJN?PW΢AD]`ZBKKwVˋ:l\ ^?=rH]99Z_LyH}!*@ZD-ʾ,B7򡴜lHF-4R-BR7'Qc4ͿL]P6 lcRY);Z}^I*?Nߙ:jJ[fSLW9r?ݪBLhP IO(Ji;40dm2,! }=X#)88(o\J\D 9{BF_K 7/ʉ$ʋF"ZJªV]Jޟ=K4iu1ZU x)$Y$H'KސӚB\#XPYW_P9EyޥRSmF&*n8~l?AW?JJqWG*̞o# ;lh>U22/.R eܮ9ז]qd)?YkZ~TiR H#!y@R`'S1 nL9~ $ufi['sN8c7N)mҢ}ꥼ3/eF-yp\8FPr(d!C F=rqUz^(<NOJk5S*wH8zgF!9"JS !;搁mϵ. IAC$)'AB3X'N$Ė*f6+}0ʉ?2,|Jd8 2JoGUFYLt8svS.tՕЙJ@iI8Rn^h&IN5+M`tʄ<9 +j{fnH;įUI<\ip#xHz:+jrLky.BmmepR)6=?*S<> ya %D3;Ѩc8V2}BUzK1*s7q/.,mYee'Pj9Y!Am I=ћs0ɷ2mRmT+Ǒ#b3Mu,Awo~i$ ${kd2n F_ I_MO& ŽY,_'x,BEέ)6|qsL8e>3InrA<p *0-EDSQuBK,ب; Rbt>@9 uȪqBՖU3Fg# I# :,(e#Z`q} !;TʊKjS79[η[,rRGK4IVy(QB/- S Ƈ7 Шejp+N֤qM.^F<[Z8_KQMuJs*}1rpMkTO~'OANzgmjޠ9v$5zw)?vtZߚl,ZXXIs1dWpdԨxNy!VIoR/H>}sc1 OAx L%9=GR\H!=~t(K;%kK Xc=~,t-hHdqt*k%8@_*VFOCZqQ@jAg`z>)?wIB;өERsJsm蒭!#\RݱQU^-dT*I],pJA9.3B4rސ3֐N?:B>‚p˥!UiIJ[B$v9]ЀeNO3 o杴? YC<򰓶I!@Uސ; B1 pq#QN:HFIgB>tkXRRJ-"9!!PA !#FFQ%J##ZTz~yR;muoYKq*B@D(kʘŬ}jas ,ym Jv&׏2ל|4K]BQx}kpX-m[m,6y1Rsֺ]T',Գ f(Vvmm H.XutT+k%"JAqDd*Zl^vh•Xo5\QЏ<[iedc;j ai9dr qW̟ιBK0!&a!A;3L%H+t:R| &L -\OJXfˍ4,$g|c,|_Gds+8J_b1$g3'/.I*Z RAFRy1祜~R߶q{͜i/\ Ə¾$*ګT-]MRC/GGpGE CN4ï^_<@f{OnեF+n/9c;y2.sL-e#)׊ذY-eW.$lq|;|:;nCG-,3 DIZkZ ZNΟ;;t.UT!45VY)*BK)q9ߝA@_uhm>KES\Q g5֤="~fRYIjRp$^Rh%kE^8|Q듸bjY :K541Cnd܍|DN^T|Q*8=kSy:[X.BbjmEÈRmS:8/"@u 4xn\>,#jz \KaH8QIP~T {WIB.dP?q${52)K {W(5qTEZ"-?c'zQ5X5`xAHFd"H8R M!i 8c7YhqGKYZ5,D v8"laYaվ(?zQgL]JPUg IPI ZC,ku4v,iN9M0E,g|z:P/<0/ l(he-%N֛o=!n)W(9۱4ZZĊwKk{u޷m=%9)#ؤ+V֤!>Xu }4r6#[֚L.T{s\G:7•=k:HՌ#|hdTUh7<[*KcXTHQ\r3a-)V^r^,HU `.Ęa%KV:$IOPi}V/Za]J %,(ʾX<+>SQ';j+F`'$%W> y B葧IdF_)+"nĚZؗZHPiJ9…9R,"ͮgT[)>&)d۸{) D$HVQ-60($sr>+uME_b3րO*Q {֝Dz]";- iCaԯNr 2)ѡʗ6 2om#=I>ТEMhpydclzGOUP K7"! vN;fk/LtAx;[CM̘X>%EG֮Ƃ]"3fHlj襂ZB/֪9Vpv#O"OB5(ccR$B6@X pi/ta g׭!71ސҜ8O B7-))$(@I4 _B@%ԏ:H>$`Īϡn)1%Ãhd5.)8)Ͼ5!IiO[c Դ $l7KI!Qm1d2R9?ʂymխ'*#ӥq 2cP>K $7SEQhE,6wSF=ɦ "%!I#d'4(eqҒRH@TG9I>K[c|SM%y ƇO5-wc$F5y]%:4倝̒P{£DeK n|{@vId( } /t5!^U N#Cg=jimc'.[ԣ-N#lZ֝GNQ{H(\8qjYQUeutr,2*ltBQ|j1ߴqLU+zbS`РW~cca5 Ez|!FHq cAaBXKQ7o!)]ٴ,|J5yT|_de*b_(|חm!x BUe!׺T1n'^Izu.iޟ>S=Źq,-$OμS{:t(Iڵh*R ZC)'R@>!O>M} ⑬tQ?|oNY i0ZJ1Sr86A(*$cԋJ_3KA'$cJKi8sӜv=:T_$GyS Q*ފmrT \ p\vH)$e'ސ$HGg"N2%XHCdXU!JHO&}FAծPJ!F"#DeY Q™ސҠ=iރ#8!g`>x Ŵ=)P!8INB4`P`|_:B60  4<A4qcWΐ`%Y~[$'ZB=u!%(s3==[hayec'ߵR Jcքlr~UE_TM %G=(R[͘))YC;g϶;[bJzu)`(-V>oޝ9c$ O6@9EoB2HtnbYkھI,7i*+F p@ii& ?ДX@א<(<fXikECVSZNo TY] H?~fu*,`pq,BWM: V!±}Jv< ?{5ȿiCzPOC3_i%J8֣;J?,V:R~!(^n3hag9'փ:s]-v M[d>)>$~!SSq䏰 fIآ15uqzVݕxRBr>'їK y): S@2T}qt[ :CH+u'ndP䗔 [/G]Hy8=B>t JsiY։Ͼ;rRqԣ,q\(<"|D2O*Fp=EUٞ0]<zr,% cbj,4bzqڎCt*z7 J֫ F%#|) jJLBՒ6MZ"DDc-A )8Loj1\ 6FT2mEE*t+~c˨IZBjTPe* o*TiM$tZlxkKY -RzK[1ɗKΓ1Lf cfhHH[O(`zu}Z,0~4 9~XSȢYFjHye`B7)AZ܃no.+۩Wi\ż"'.z/)l!AAۚk,V? K"jʸ4߾z\ԍ.J1]G^?3G)N Z)Xno}SrE)1]O!RQHR;$Y2]UnT7&8)("j hөkb}S_m:rUtE QS̬IO FNJ5o5dm{|έye+eĜ)*N2#0]B<1AM#m ERrI=Tr^ or*<V؏QykB.C+Lt杍P(2%"8EjAs!%J2Q%]> }"[ %{R{V8hӶnMEnG|ktIAZk.\HqZ9I`Nf:Ac\u<QK*Mn EcݫB^L|'W](qq^m~|p57;!Ey#n+tcUpbaC!~;W$)tʙ.*Hseje2e'GKQ$JIᣔ5Azݳ؈j I9³$zlS8[)7S$OSY_.Ɯ*;}l`P"٤tubYm8:-, qN 0YCS#ШjuxR϶&{4LKkN %A$֒re?Co1t)8!G^QNe#ot{4C+LzTNuf$=I.jk2JItz]+д~ef;Qbq@)O~vU)q7tPp(<#>T1n\E`b9dZ Bԏ@3VSrK_l<t@v.Zs |]H1C̅z`jޯ$E-4yMÖt󷄁%k r'^QkkXF L7*|46XQg5^֏*9:K{XC|薤]oW;THA+$c459[\r ۓۦ"1/!7 ͌VXvqZ3^C'E)[hUO87^:,} l=# v5 V@g ܫl}iܟ,`Qmiǔ(TyyzVŶNQW*qf/)'!eH#6#8Dwe i-O),-rICpwmď>D{'}AIړXe }jIfvbP@Q֏DN>$GvqN#R2ΐBғ#g0sHGXœ|% {`/bCRv"=G!PP}d$RZH!2y~]))Gq~B" ݱ_Ziٯ 0-QqEyr>gp%|䤀?:`Qos1.ơzȹnG l6r?SKэ!P06硥, )VOmyNJ$fɼ]mG?֟ <*3~i.,{JOtSXB8ќ`d~"zlDjáW)'|{MN(bͱACM~:)e$E)o֝%.Yy=#3%R8s'zTFS*$jX"I;57y~fu~Ґx;l!ڿA=JXC` #)ЌDUNEŧ9пeM{]1OW)pFY#?ҥMw5}QEiz{Iem 8{4Z4vT2b[e C4Y*l6?11_48l03zTe,.u-%J6 1xZo]BŮ8)#,W)u KxbBBv5^ ;ovyAm+v؞*,A".v )qzJIR V Td}̚nm 2[-aiM-\ y!<-]9jiwxln(TJVyoMx W'8Q[@q|%$ʙG= (q# H$ $)deMcK vzSJFKr[_+ nFX`Ip#Pf80]өY&(orWojmkvzZ9';hDFk;!X)xU7>L2y72?B~UyB8UR퐃jwR2D9VN bTKzWXxĦs#6Ҧ*mTf6~u M7a-%jS$$==GTS_DLk5 ϼ\,bSc_a\SXaik=݅Z/u-LB\U+E(aR^Ըk ”۩ ؂7}>M=Vp_Hp^>QZjzHpy8*%%$ ʀmԅ#4OH&rĬ%) =ֵ\<[DJDJfK IHH>U~:#wFOB e2Vgu 6gװD-:T@Y+! |$}MOKжOt?@#ncKuJ@iR DbrEWUk"G;M͸@c򨪀tmD Qm}~U87ΏXS3C Rcb^ IƗѳDO5wTK('s^(/-Eזy5 B/- Jwu$ׂQX JCrPZxˌ9x6ԇۀ (ʢh$e;G# g(Ü۩He &c r9A)ѥrد r)`Y 70U܌d+wQ4tK T됣 !#TH\tE·5vQ61N %Yci+ #]&+VbӾ2gHb*R v튩9a%Ye+*$X~0 9D[4.)$bubܖ$!vL<ٞSiymVKwQfRve|:e&,`P3:ڟf\~PPmS'b2iXt~&i` Qu)>uRTz♹v4g2*NJ-KMgAˍbSl=j\'Zymqd'Ij%.ƌ_a|1jVyHpB~YЏ*t]Ҽ1iޡ$%j`ǹSGR_4aq䴞jOS!+\+*u£g|$|P2KhkRFVی^!k^E-PdxrMZɽ jZA̅g04& F[}cV1J.IDe1jԪx :*BcobNptJRPtS!V|ZX8eI| 'Qx2cfV.')%,Vzv>aFMK2`+5m3D툍1B[ (čZt drOhb : e{bZƓ享㠔hTt @?#*olͫ˨$b+1I"R tfЫ. ʰygV6U#f<3 vOVzh%-F{sUM Rq*u2Mr$E7ְQq}'YJhA"ytwz K(Hj52SBR^hQT*i~<8ebrHozϕ)FqdFbR!X<ڋPiŮͩu-qƍ#9gȵZY ZSqp@J@{Qi`QQ6BIzV5ARmn/RO)'y+CpzZYE#]$"[tYPQ]L5KNȐE庬AJXFK!o|V燩-.:GP7S*hGtgҝLFt\u/,T}܍MN, kzT>7ML\ڝfP6ۚ'k! H֩9GYp(9$Du\{.$%O~K}uԲc SwB֜Dq8&xh[4.֣%Ea֚@HP҇ԗ-mBd*Z0+:vEg$ >7vje4fgOe$Q֧KA: GMÞe;*>m Ԍѥy^D:x85LVhn jŔҬ-6WQX)<J|ឲ4O-jMvxjeԆȒ>$4wR Ajc.48q1t|ܓYCNBt8EMt:ZiTSΐF;u>AΜ[B.YmYhh%JM*ڜ o4 Ϛ2$$9ϓ쓽\RJU!nS%QVr9`K)HnK>Ng 9HFI^qΐ8%[mh V@u;MtՑV2>uA=QM9lyOG6j>87 SͶJuW֞Dp|0jasXRXIHG:JSѧDkI> Yy7?* &'qR`ԅmjiԫ*IIb1ՈM)E5Oh_6-m-AR:BC2L pE|X'N#QbFE)BYCM|ʓD7i6kAJX8 ЏJ ƌpیzE&y&ЮFOԧwȪ-/Mv N{G z)TR"-0ˇ)9 ?j.e1c׼9kks.!;2q:g%98Y/U2Ր޿'+l`O# ;%~j%*K1YmȌyH!C;ޞvj,o0IoZ˻) GZ%:^XԦ\%,3hXPAKN7ߥgWgP1˔Jcxr;)LpYtCza$HgTuZ^m2GY$vʴqϫm Kޚ%"dF3.|󫑻_&eZ/8HoXD$,KV:+D "hS:70;s{-i^a.$v #: +SNݣ!Cq<#քK13ڥN|ү3Em|zbh$5) !Y"1L3]&ZC^q.GO ˊfb @=}ǵeVQeu%DR@w5#`et$ y9yl/[ԒC* {] )iU"E hzB)N:}jE AݫhѶg\\չX6)/9:柌6~"˃oڲ.Ya" PB77O-7M0(Sp) T!KriBP).b1Pp: 0 ݣu+$TU-t,̵`$)&R2Q# @2n J[? ['jUaoDU}ݑit'k2b\%ȍjV1ԜzdSK1MZ>DÇCM۴ C$N WZj}˼ =X=TRG5;( C2/Tve$i# J4)D␍'m|I4niG9/ΐx-_i ELwv EOH5f Jq RH؊$VK(E^,p +q5Z\i#J=zTw A*OBqSG-[!r( RȌԍ!%a[-i rnKFR:Bc`:UIJCg4*c.8KȲk8ϾR:˸(=:Ǭ,F8Y 4S!HRzvZ]?i[#tV\j+2 J}c Mc D|(mOŸ[@uRB*r2Bm3e>(B:Wx|pA6Aնp.OX?P{ERQX }W{˷]<ۺ bdx;%? 7E^[dRI*#iiUIdEHyyT:EU^z@dp]ֶ_5F,FBxW zVΎ5m56&X8aXRS\[QPB*[ iյϘPG-%281O%=;uSa_Κ}EYCJL'IlZ 55f$FJaE< VrR@"Jʞyy MlZD5WnHUrsw%?gVڜe]%? G]Ά8 PcArJ2g+d'#(5+.(%^5TƪS7&gC(ݟA* NouXkU,FQۛBեne{lvDM]C{g*H<\ A(sր }cTR%7S-BI% p xf 8<88j{F$\dب nr@E IRa>5, "H7T*rX@(hX@f2%q\GL4BJΞvecnޅ7>vJ aZ+m ֝Q0mrHm9+H շ5SxD7< aK4*}"hp'. > OIڒ%XoLT=.$-QdY%hnlCrEKC {dXi82AW>͜u4<e-6)H9<'zrGb TpO(-LXj"R\PP*ūN]&/3ݸKy\Q'ЂQ1EJIr' HGۍސ !ZB6ǵ![, cW 8QymXK4ޝ,im+M#x0Tbc>)6nK/dއRtNj MԗXglN$.%_r:`IUhq~"u1z#r?Ҕh?#f"y 9N chYh4m7[bU$rRWs]BY@"3IP?NCfPEj 'ZW9:aDarO.3]'"@425RSB(d| ~IOXm2ͼ20juJ{T0թ)H$$g衵YRF“S'&κ2J0gB3\ŁP%'^<ݵԓp'aJčd6%ŷ{v487LI9_-2ϐFiX;>USqHR[R"Q**Iz|Yi$GY-(r${V`g++ EJN WP=nG*|pN1[!(HUwM>º&8SqCjy`uO“(4JTR՘vJb҆pSӇWi'YN3cRoMG#d8cMCh-]OT|0#Q*O(ڌ Z/!#xmCmBq_,ȸD>n7N>^eQԿ<Ԛ|&ǯH9۔/)\JyNSڲr' kGtcVAVòKsF*Y 2rUkٵY>&5~'ys$8wu=yR}Q(юyR-q \m1LT2x%i8Q|&heAtۭCS@7O2SZQi.Q:,! Qd]Ac$Ef]V]Ҷ'/x\`DfrnK?xxrkٵJR/foMjЮPIyߛ6L2i"?jFS芕T}1$^P*AY~ |WUEc)ZkQiSue$r^O^n\dt?/./ 7TX!\';PFrhNMy6DGjE JCRxnMAmmah")X%ivU8,ۉɈcqsD Eam˃B[E- !)'~ʟ5Av`3ڍeU*~4 t EE262VR2v'Y1m$;M r}E ؜M6Ҟ<<R9SE޼l8%*Pdav?\BHO_3Qǜ&Jj%J;RX]Q$4V Ԡ6U5τGҞ3o/a,4`oj_Fϝ>Xkū\xRZGkXE7s,jZ#4&GH! czB=Ϩi@#8*+a^ :!ő*9QNh޹k>T:-B3_.Ȼ~G-V* =Pl( (f'ˋTI v+N> lS[k>3MFTZd#Zʬ+-:\ԫ ,>8ŧoqm+ۥ%EHr9CN(0Թf%ޜ=Cɗ *e_J#G*Ҫ2q/ >\:.:yk*m';, KUF1l {g-HWXE-{}1٠)O@H_R>ݳMcy&j9YR=2CFR">ukNyņ#871UnBIvI&Z3 Xu"#u~(Wzv 탵<m0Ew$FhSHX"K $cLlyQʏRErt! ={W5uB3%丼}+5Hҧ7;`]%|JAY)=BYDVPr%#Ƣ jr㔏@zQ#v٠vȐFw;եyVkpy`9hLh+6JRej 3슡&Eҵ.NT92έ).Y5F-[jX)v&`uR Jt;ӌ9$_BcA(c̭Z{5[}A+ƾΓbߞL+j?nF5XZJO]d2ʐ,.wB싷-ApSts+8[H K{C Ā+8 +4o(meMD]))RvMm {W7aiKJv1%&2RGsұ)Mԗ&kk,%qA]%8B2zVX]?[~UW Jr?zY5 Mqq˄&Qg\ˮ#`]U5O]Z-iލXYPFXF:8_!-ŝsNsAoYZZf3I ~(Gu((KtKE=/Ù{GlzL'UGgoNU뚯Z.XR]1~di6s|TW m(5 (_a" |wB>*'Ozjn#arSv >&0ԧdoҝGmLkudYGPgsrmh c!IZR\d%6ӃV!셾s8Or,&$ k.y,. Xs@!=j c> 4BA ld3B¦8AN3Zg6&ɱ!k $$~-]LK m3<R1B\ʥtۥ'Pa"6rH㠨ӎ_dA[-y+QapFTaRG}Vcha5)E *鑌|cJ *Rh|©}x$ :Rs~ 90s%(7.Nԣ M}nrT S0ZhJޡi<\dd!J kRηte J̣+t< pO#!r!3HGΐ !r1HG\(|ð!H? ֐9psHFnNes#i؃#0neHF8rUB6N'*B5tu@g&6u\#NsL!#:=N#pZ%Kt#rMȁ)i(}ʻa[b0a ^b2l!EiXS"pV@*$ tMu+XVh!pZJ  S?Q$|4,t߈]y©QB.cRv-eiN}Qx,K{h.&i+XΥ LG*<QN?mn3홿.F{J/yn+kRIqq5ϒYHHZ]-UdpjesbǙSE\.kI4;qD,:Ω֦қC7:-ņw$*f:F7l! {)to-UJBc|{a.y%OIS/| PCVbp*QIIrBg W^ |g1D&Őh}( l7479l3_clDO"ud})iwʙ^o`J˞¥ĎWwP ҳnc Z{?Md=rf =8ږmGnd#n XmKőb󦭗m7'YhuVx}pG9-ui=cZN3iR4 iHʚ{G/hњ|FUQC!J :9nj^4N$B-.<$QC5S4xOmQVHVCF:tM>GIvh'-ȒC1$6F{u7ZRDP:i,) @R7Jz(t"lI2"/mޝ&9RaO% ,4N9\¥61{MƜ$d @9sjFIXwSTe/ %A)½QL*:d}{נ*~µ  ܇il6ټ*%j=ʟޏM"/>X%0NʸP7S]-]D5VT-')lBt̍,TcS9.*?78 (-1t6-BoxJhu-b%ZR&l qJQ5FZ5$hCb3&zg}#hcUgG7 ޮ07- D"%$Ta1yoPͬdboc /"=s lVנzzy8}f`s&#([Y]MAF;bJS;l+sw(Tiw 4r-Y̒Gt\ǓZX]J \6A&3c}qjsuFjమp[5!sՋqZ8e6dۄ-ɶA]>הzNZ=xVB%َ)ꥨ:(㙏RϦ}wb"$'d' } JgG9m5*LWbhH끜UJI%K>I$_SVN+4[]ctYk*i!iXA~s*=mE)vb8`YN%|Hjq>uc NǓIdV{"&")+ (?-Z;P9l 5}wc Wo*>:pGE- *ِVsn=pF6+jZ)M͠%Y#4ocX!eL4J=({]<ÙG'&:ˀnw5u!)s ut FOJ97Qk#XI$}A% Bp4G/rm)A:{'I pSF e`p=EFR^Մ*砎kUηpO}dym'* {"I)j mSY/c8%ϼ`6TskN\d̺o [CB֐GE {R =i3HF`o鸤#cސNA.|9 !Q #9#h·PR>[wY7#W(Wm!WH'n:Rq3zHF%?TkBB>!cվH9!6"x0:#0@|X4dN')Cg)Z ɭA19S!Ooeejj<;d<XioMcI܏W(ۙJ X&[4kkS K@0=[ 1#QAP5ŕ_) aX؏{b^ԋXf(I< vrkZQq#sOttdFsVAh.#uܧjR@_ckn4*:|P e1mq^ӳ HqK%zBxc4c$֭QGw#9'zk?BE$>9BH"J^H9&3:QRK(mYR@uj["F7VMZnl)jNQȇJiklO"w7ަcV=y7ҍ<>KHOCg}g%n'BrТʮq(}eCׂH_"ǃz6[[p Jq[%,l{BNQj/ɭچ{%ڮvJI僽Th4rgx63mwn46TJ2vժ'8c޳) .TH - 擄 rFMНw)^Lb57 wPPKku/0(p5R&9h$=hPd1<| }(QhmFjqC6yl>}sHJ %6ğJ5%/`ޑt ovG.~"ʣ(ZTp ך׆ڢ-Em1շ? }qRDbU 0X0*iCSHK{=*Ҫ0S&m6T,wFcSYm8_BzJ:U> о]1۱jx^Kl<хw(4mYTp+)'(>!T@e'UZtcdfܬjߨ| 4*mIx#߇﹢)w 8%'w'#l{`єc 38Aq7&A_B},Gg< M#lv ۰iɧhA56z?v;'޺k*Nǃ"q8Lț(eSΟwѧ 㳙-R %`]°=:P*\YrpwMZ5q̞OJK#+cV?Nۣ},Tb1N w?Nˈ[ B O;]VeuZv ~@JeL.OuFeEI̫M[BEe)*W}E>׶>iG 9/#UhFry%.X_^{yH$ )߽^ S P) )B)Qi?nD`QjRd)!J939p\Qr촶$g~ƥ&"qOO=x(MͨTŽRO_n ǽiϲwR'#T1!@RlzB1;a {R~{B1JB>=HG |9R$ʡҐ瓌i&8B2 sHFԻcu)ܸ +iI## ;u#R!Q#ҥg{R# N$R}qHGg!PM! l}YurA=¤R%|n[%<7^?ڧ+ni+8%,=. MeĞgd~U:a>iH܏"K6rddTen+ X9 SOH#jk,8l|C+[~q98RUP d`"F%=gu_Y-W5BV63''+\ AK`(gz]i;7J"JPzc^]Jv"pdyT=v!#Siè:%YA]c<זxg}-)nO1@"o'vYդ[i'8zc&؞N0K(ZUA]ONCܭ$`DLI ;'%{s$*i =&BiNLeÙ@Ok3GFRV?RQ#<uů5A_Κ~1%+z9usO6v J$rT֬Oe°L6{؃ox1.C&oA[Z0ە!}ă1VjBX8a%瞳ޘr~))2hw kS-hy"R>4+ZH6dQmyle6~W FHi4xqj1ZjRTШC6ռ̳̌g_ ?X9O$ǂ8zX+msʼ6ʞPx28QY?h')$L-i'iӝi]){a^U8?x`*~y vMd³hҍJ'nj9tԭKM yv %Rh;D*FY#Aj0ՒLI$Hnsdߺң_g:x1 /}yO˴H3Z$%II픒*XojfvyAUoEAJ=ͥ y9mO< ׃H}* GD5oϐUD]Ć#Q6;}IP|fL\-ɼ;{ vnCU*ϗp>|*~#0GЫ9=;]ff&DbD ^He={W71s+y5o7jA6/]^9ԣj/ˤRip FZ7$ |Y޵ޢaų)"~%S$w%%;)M!}CHꯕP;D/kMkeW襶 ÀI鑃Z5b`#>H-HPP8#ե$A[ԢK/psqޔbLMY~OҐ2$Oppic&$uڐ7'ސp3G!|{N}ɤ#>SZB0.N?|r}i|X#0TSHF!eI-ܚB='ϭ!!rvRAzB<;vҬn)WiJo[܁U?kYVhygM%,qlz8V-9GJMXC*›SQrs*1S(lG [B8iՄIi\|^QM#W@CN(qoaSB|Uga)pJ{z!#6;[ƹC9SN㸭JRmrT%r ,)@mE ^HN[Oک]ǀԤ%*̠BӔJ$6#]!R N$) I go&C)'zQ)OBQәI;d$]gbGqjagX$Գte8.WezlÏB_UNHIJ wki>E<J2?רuu{iw86VCi :lw72HC-fkOymo8&Fda/U=Ʉu-u)8$Ы1De+aġy=n2oG( O҇Q`OUK6rFʕ`onEpJ >;pFh:b9yO.O<=K(R1%`dI:{P<4%G9J(lR~uMy Vp-:OT}PʛOD'+9k6Q=Yd\ǃyypn,mdl,lնGB*y+J JXQ=VZO2BOQUAy6c-(WπJNrr쏐}̺)̟8%-ChV>:\P (lx+lǗ)PqH=#5r=hL~3Ti,+);ߥu/nr˄YGXf㡾D>>R'k$5lF/|dn)mYaœKئڵDNmn(5z+iM^rMUal&fRMc{.JS l.ֶPQZ3/92<ˎ-EeG'9h,X4̄WC⧷>ԃ6f떺*JK8:, );=*j!Q垗pPԒ)=1 d)[ 2}rK 9j,>s$`Cߒ&޴ kMch)e0R'LmAB'z. XC%];A#EhtUY>8tHhYֳfA 8Om*}aO!II$l* g)b=XmXQ+Qޢ85$fg$GH'n'.QҝZ3ߠ:X''Oeo*| ~ܷpL\q) in 8MF6ygޛ+EW¹.o8,EeK%\pr}XQI >)/(2)e9Y;SǔIɦr#(B>/t!UiG_dyk^_NQB8S>rÛUB< *|!+$ZBzB=!)82~|NGLiv8)nNy@#݇RIԒ~x9}RyrS)qp?!!m1I#,g#HG)Ԅxa#|v!uԜNHa]e)JcP F~% UzY!%򳭦F9ͰYYI!"El򒰦en@IP6徆i*+OMވd%(nZe9tv#$6`K5lڎcJy0ńR +)\TWdд,˰5fTIE^eFDmNPNF۟SWgSwEJp|9pRVRVߔ\SDˉ27&4΄r6"?s 4≿YwX).ŖYzVTzf&fF,HHOS֛k&ERRddqjff<[Ĕs3R$Ⳅ7\ BXRSN:xJvzyQh{dxG E0E- -̖dx.96g-EH N: bBkБ(NpaYɏTot(6\q; lj9М#q\&Em,6+(8}%;$R@hR ߩ%)dGA Yinݨ0}2Iކ| p$zQd\0 m`ڀQ ϧWO2e- )(MZ(<54"%#5$,j>M*}J(W(ؓDO * ir^E}hiHg)z:&,퍆~R'e9(R=.>a8e$EͦW۹݊u+l3=( OHY* H8CITevjB6dd=itސB7$H ;)RA*bvI#\RVF!{֐lB>߷ΐIIg#:`RǶ|0HFa~y#ܓ>d @4`:CސB$y2p4I1(2u$-)RP.Vbk?0 VdԋQ!LÈ%X88&!Gg 1w<%RXk5l`=IZ%)!y5]B%m%+e]!+ B)Yh6'SZIw&]K>=(o}Is ҅Vi".9$Ȩ$$~YRAņ=]k+m5’c+=N5V=[Jv>̺!̌RqצM^R\DK[j0v*):zqtIB>׭\g-Uinm l:dѤ\ r&$HKnulvc m% \uy7AYٟJ*' ̹6m,87 >ILrI9ɪ̝.Luc9,:vDeZb܋')Tm_-Mp1(ާAH.i{Sߑ'8OqW}ݪ3(81=g.3aQJފJB2@9r8yERD- QeC lzUz.1&cIC-/oX`EMb[݉h¡CqRʕ>IIRܲg9:O3ZPJfsG;2 ֙+(Ep|QU*QKElsCI$#NI Oy$S#Bd H:4fExűN?jud1jovύRnYSَ$%s]Q%OT\ %FmYDNGczt6?5r$&FaU%L/w)M"K}pjn+_u)vs:aIc0LG} W9HB% 6ܵB*7X'B8_p-C{JMvf A;Q;ҥtAIFA_*Az\y&qҖ[H@I % <<<+=vO!G; z5$ J%E>EX C)TzdkX*[1G.9;zf qe 8ޠ s--ip$!8v0*,e cKQnARD5Tw)X8ϩ䌢p1cUH\"CT(溈. kSr`)N* mMJXږN9#'QGlpnߥ`T)]sU>II$6VS(zո.pE8z!pΐTHF':B>)8! r=3Ґpʾy;|d?:BҷypzEHqŃA *a9'xdgK%IgJI褓֌j>ӋعT%A;>N7#o,.kI}ŕ($Yw8D)$Y~]Ko,)A8Iڪj%MVXAtP͙ yZԣ(ŦJE[Xp6#Be8꜐i%!8Ȯ*4hJ}<%R+y8dZ'6C&fR&#or7^N}+v8TWo/fJ?kQ+u /0H;~t\U VRPz@pyt>&.t-vKuVf /tICQU|jjKL̴Y j/`Ip'?ߗ?*4jfKNm0l׽5)n,4ݹjַMWC B4CHGH aY8R3vuP=oS L.K9UV<"J{77qck(AÐ.z$sPo Sc!)3$hoΕNrN?ro>J+J叱kGdfi bSy4Okd-`OϭMTbql {}jnTߑ=MB;NN~\Т܉{-,Z=dl^x%!z`nNխml#:k48զ`fsNuci՞Ȟɤit,r].R Nz?dR} ?SNkAq'uԫq6-Jp~/eThkƛp*eI&S_OUt ,1{pyvd+ST#mlflt4'0n+ ZhGNj: GQj& ,ɽG`P gޅMHU%aE*k ~w',Tf3mWd\_*NQa)PfuZش_Q3CN^d/#q& қ*7\kjLX?%d[ | Cd!2yOOb;V]jiN p\$E;KOaPS}),tk4qDjyV)Y)"H ;LsPK[8@=N1 *t<;T} k,G[* S\'oCl ZOI=ҍ䴗€-V6>Dts>SI?b7O r5o V́Z:|ۗEa puQ39''419N) Q)J3p)>}ԆRIRypuu^ګJ6R\)]%*CH&Km ʏHcZRddn)ĬM!(?:B<^HFałw#b^#sHFa)!=L,\!E]0)GHF5HFU+'۵!!n}XHGZB<ܑHG!`N)L!{R9aHCIKomzS RJK#VIRQ1-(bWyG1O@=MsTTM`ވ |]OjPS6~HѫWq2J$G+VYR[R#TF&I9=튐&ܙ-FO}HKKiC= gIAb* ީ#B2m.3*%$ΠD9EAبT[cVI#iO0Obf7ܲmY.:9P>:j|`0*)r|2|XE)m}*[6Nۅ741䋇.Η..Ʒ~l67+TdZHSJ΄%.xK nK*asDecҞhPЃp%#++R{h.pqvixqfM(3ia .GIH/_Q9O9$QnElX:v)<a2rjp G7VH=ZblI( yNm({ӠrN<꨷ۤ9^qYUҎm$JSl ompόI+ rҭS bup҇yzU+8 ]N}>o-=u+:e li, ʐ)Nw$[Ɲ/V^;O"^l鍣 %hd1YhIg$[:l@JՍ]v#, )q߼,£|I/Qq*t81JB ('doOf]ro/þD]yP<~ɟod )d$Qz򦶾d:7T`VmwR!#qZ6JB{h5̶ւNI5V2PJ],{[$ˀ-*1{?wQ.›\3ʗأG=lj )]4 2 N`yH^+{y|&mQwRWz@nW6J5iEHgc~M)R^ %%4N$E;H}̆XBR6[[_ڝR5g kXrm->ޓWs] %ņXSWn%IҜ˾3E*+~BL ?un2hphIb%7I#n J:S,DȪln,D%n#$xѦQӧb.>{eG麒 %.K)yWF:y KsZ$G{pŶo2xlGl g=sww2z/4rjI%Χrsq£vu̜?:дKCf1KXvP[pe:;^5IG)QuȞOA}OE)a,#UYvpBpU5C8YԐA2[!D)jP@ J%4 Ew%p;)TW? l(1X 9> IpOZd!%G!d+?V{SB-3n_Z wK'pO0d+'E5H̅}ZgEiiJr{|cMY89xBg6m>@ ]/A].$LId)";Cãn|'Ag(cVv8re%x@Cޜ:PO-&-$d<>nܸh*X1]`;w>N%DwP8ک% ( w&c.oRFIQP^GQO ypaC{y-' tʊK2RDU%!JΟ(' 'HArI8v`<̞B@#40$) (:B$Ը9Zl@7k-A^!&*N % F٤#Rei HFd$')֤ss֐rTs) ب Rn0iCdHF DdT);$B5sB>QsZB29$HFXB##v#&p{)Ȅc $|tvڝ=/3@HBTiGm3VWUZMg$Yԗ# EsLӅ5OXa G9ނOk;m g C[AJ<TF8-t'Hqq;+aFN tV }Q*/#F~2١R1]m?8K;(]%?o(T0Kb03RDQMt[U1/vױϡoL]HR6R ޝ<vΥaLr vpEE]')')81Mq_+;r FU.B;)!XmXTR m{Tq쒧%TGy!,JzΒ}BpߵRuړa Glos4xiZoKZc=ģ#Pi\I:Z2ks9*;U?' 755p"rl-q*dHa h+Z%RiWeͻB:V1~{c\f4uPAQ!*R \rJ (ern&i녎 oBV TJV܎Յʋ6Z޽D2 rf?}sW;h+"ACsn5x cQpl-j[EԺ̾PPt5jI9k=kUbDIv,p А}ՍZ4bZW|2pkBL;FޙJ8'cꇨֶ,m~*kQѩ u~I&d-ȾM| T$I=}Oʽ'Ij qyܑI@~I'zݕ$|uaE1P=[Q'c]1I,,d9q-HS LZmsV:FSϐPm6l6 8܏巓C 2r2#@[ZBBQ|6q>tf㐐HRGr3RAQZCܓܘq%ؑʅ~~Ͼ1QU^x_x01@GҔ6(5D$,f0=IK:oɉc?/Kf :g]F?u۵=:r(t1Z W>A< vt'O\ʒ :.^4KyJTKt[9A;R+18>T;y\HUcM1taWˢg#Xpўɬ:qXP T%Y剩Nq>ƽHg~iim\@%yTj[Fxd[ko~31ԗ!Be:o2uT6ڨVPV)j{YjޛBZB^*#lg=EԣlZy@rqފ0ˎrPJ)BI()>9 %KFv $=BdJIN;T#91E?wy8Q<mL< `eDMF:Q'QFpCARyO]-:spnӋk! 0%*օBF/>0uƉ(liE#Kт^[UIFC &iTTTڞPypL [ >ehH)soOA<>ƈXm.1?=XR$,sw Z!fO.@=3h_juOѵIpozv2*W1 :2Ƶ؉p+r9fc@M'msT=󬛪d,7< (YaM,|H{o t$2\eGyM;T'!iAzUIG> PRm5uɍ{mPW3aj9؂q|˙~f%8O@qڴ'?"|a<'>fo8,F[⭮lmG|ֵLmR eh^#4iCZ)w Vl_˲I`hj 6A~YlGk(OhGH-Jqm7#% \Mgj4ZҜwO$JҔ[i+yA O1-7s&nըɩOI3&BԵJT(*#" K $z I}ƙ-s+q % )^6QZ^C΋PcAl+-؎oIr!}@'>q* RN;zTg@@TC/JM*9 HRpON 7V' h2̀Ym-(VBgVanj*az$Le*2CjDzVWOę2r\IH EX(Rk4ٲŢQd~)I9??LUiS~ ƺO\[gEL,巐>]1lrt2V˻kqŏ1ŌludU VǕaSa(cݲ3P[J],@z˿.e'j+INR|&eZLhվɮ<-o~eYw<ͻ+-ZS^ vLAFԮ*6I<蒑_w*CT 2.b  wâ* v3lG<΋gJ4U/)!_u-# ʧ fl~d:K TT9>i',2jH-%kF_^헗@Ow8Z,g9'6w˺ËZt@PU@G QH9ϥ_@l {P2< ʫUX؃`G(~kUwQ FUH wk;Q]Q{iƟq P$EV>h6o<̅<;6ۭJS:Zօ-+6TUY,pMIh_(JEiN$rH6FREC,K(P-duq^/JN@y q()B1t-hF6Nu9aLφ3$zE\U\ w9kM%L ÓST2眐/MC\Y[OfƔTO9r=~t(CN(#PIQ(HFKlI?֐k2ϥ!Tړ3!4A9+.TNp;R@nFԄcT#%8IHGS#(U#oI#1B2*HX(iW'p|sC2GiYy)Fme,ÌRVrH77-!{HZOUAOE Ci+#ڣ.:-(y>#=GzyG1AMdps%4~qoM8Kӎ'Q'̭J\79o!+zӨgpρɎbKKZtQm?dT"\X2p?:Զ̊Yz88VdJZ gr ќ"bCQMWF'd~Q7J[S.2\AQڨ;Ite8  L5A'9qRQL񂓒BSޝ"\ P_*B:ip94ձ aχVBJwԐdH19(k)mev 1PG(Z62:khFj2|t'!Ec9qXա6Pw73 !yBpN{P?Bjf.5.knKBy  ڄO 6}˄FT ڂWR3$}MB)Kr:5G*hn5vK'zV|#&Z}D8j~KQ/.2iG;ո[ jH[~bquՖJsC-wt-WxITh&BTye#AǡRFly'-\+<$ZҥˏD:4- -T'! U \n &}^jb<@?Jӄ4-R0ܩcZ zP sysJrrJ1u6b:!%] k: ĜFD)fU>cFV {dqiami81ӡ!n)f; MZ)cڕeF+D1 9N0H4MLҹ%hu+"M(#irY*:C_IyfdWVC?%*EM0؟o.V 17Ww(o1Sf cT[0eM?QJTS%\5I\T*ڊم,-@ȕ| DO\Ur+J:Y1@#(&Ń1s1Q 4aQCr ։f}R;|F/$cueW!#xXe3҅Hy0Kcjr9CHy{9`/r,xiED:.tn2>$)NQծZh+Vh (a)BmP0);5:XV4d0i̤D@oƯZ|\WCq:X59_u`C'e'JG50ciW$J?{w%dIr/~Ko)AdF{mډ x6Xmmt (0p:CqGrL2d2›k{b&^e-[Z>ZH*q& oۉh0Gն#=ylÔed{V]hO=D#XؚQS**}4ma:̷TR#kS'57 <>U6y Fڥ^dD% "(Si)TS '_VB+b`8bDa]D2yO*QYJRsd)KZ:{94&k^L$8^_"AG_M/}tn] @$zQ7<Qrw!c%iqNRHG 9֐˕$+*A#I9ʀAҐ(m) PBF#br1HFJ PHFB5ڐTz!!qѫ ,-) l1PF>GRѾ;-PoR*thD O0qE~ .sz9l(3-8)2e2dÌb)J(LZKrm'.d> O+$uT3AM3C |E8Ռ%H% lrUj<}* AC$o` ) $;pшu\%'ʉ.czyUH/@XPZqj4(+GAv]FS?O*^iWNQdF60sZ:o]Ë|U+ %@~Us@fG4GRV23QB$rm qmX苊cüeqa!*ɨ›d!豹.ޅVkkPr[4;ToȕByI c cU#cҔ%R,2_Q*׳<ЄTN"qO"ʤ&;p* r/~҆,`Yȫg"T ̷$R6mαj(KړyB!ErZԣ(\V&'VG<11Q.FFᱺ[9>՟UF2NR1$#JK'KYsSiFXY.^aOSHYz$eRzL8ȐQ$g;|9SYɯ(RӲVèu$~} 0<?նC)ӑV!)\;YЂJNc+FF zuo&8”SOJM`zQ$@$%ɧ;}(ȼn}Vw+~'CFm[!ihi X>4+waPLۼpgmagick-0.7.2/LICENSE0000644000076500000240000000204613153230470015331 0ustar hattori-hstaff00000000000000Copyright (c) 2010-2017 Hideo Hattori Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pgmagick-0.7.2/Makefile0000644000076500000240000000145313153230470015765 0ustar hattori-hstaff00000000000000LIBS=-lboost_python -lGraphicsMagick++ SRC_DIR=src all: cd $(SRC_DIR) && make cp -p src/*.so pgmagick/ fastbuild: cd $(SRC_DIR) && make CC="ccache g++" cp -p src/*.so pgmagick/ TEST_DIR=test .PHONY: test test: cd $(TEST_DIR) && make profile_pg: cd example && python -m cProfile -o test.cprof pgmagick_prof.py cd example && pyprof2html test.cprof && mv html html_pg && rm test.cprof profile_im: cd example && python -m cProfile -o test.cprof pythonmagick_prof.py cd example && pyprof2html test.cprof && mv html html_im && rm test.cprof profile_4: cd example && sh profile.sh pypireg: python setup.py register python setup.py sdist upload clean: rm -rf pgmagick.* build dist temp cd $(SRC_DIR) && make clean rm -rf pgmagick/_pgmagick.so rm -rf pgmagick/*.pyc rm -rf test/*.png test/*.jpg pgmagick-0.7.2/MANIFEST.in0000644000076500000240000000016513200337321016056 0ustar hattori-hstaff00000000000000include Makefile include src/Makefile include LICENSE include README.rst include src/*.h recursive-include example * pgmagick-0.7.2/pgmagick/0000755000076500000240000000000013200337770016110 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/pgmagick/__init__.py0000644000076500000240000001666113153230470020227 0ustar hattori-hstaff00000000000000from pgmagick import _pgmagick def __init(): _pgmagick.InitializeMagick("./") __init() class Blob(_pgmagick.Blob): def __init__(self, *args): if len(args) == 1 and isinstance(args[0], (str, bytes)): _pgmagick.Blob.__init__(self) self.update(args[0]) else: _pgmagick.Blob.__init__(self, *args) data = property(_pgmagick.get_blob_data, _pgmagick.Blob.update) ChannelType = _pgmagick.ChannelType class Color(_pgmagick.Color): pass class ColorGray(_pgmagick.ColorGray): pass class ColorHSL(_pgmagick.ColorHSL): pass class ColorMono(_pgmagick.ColorMono): pass class ColorRGB(_pgmagick.ColorRGB): pass class ColorYUV(_pgmagick.ColorYUV): pass ColorspaceType = _pgmagick.ColorspaceType CompositeOperator = _pgmagick.CompositeOperator CompressionType = _pgmagick.CompressionType class Coordinate(_pgmagick.Coordinate): pass class CoordinateList(_pgmagick.CoordinateList): pass DecorationType = _pgmagick.DecorationType class Drawable(_pgmagick.Drawable): pass class DrawableAffine(_pgmagick.DrawableAffine): pass class DrawableArc(_pgmagick.DrawableArc): pass class DrawableBezier(_pgmagick.DrawableBezier): pass class DrawableCircle(_pgmagick.DrawableCircle): pass class DrawableClipPath(_pgmagick.DrawableClipPath): pass class DrawableColor(_pgmagick.DrawableColor): pass class DrawableCompositeImage(_pgmagick.DrawableCompositeImage): pass class DrawableDashArray(_pgmagick.DrawableDashArray): pass class DrawableDashOffset(_pgmagick.DrawableDashOffset): pass class DrawableEllipse(_pgmagick.DrawableEllipse): pass class DrawableFillColor(_pgmagick.DrawableFillColor): pass class DrawableFillOpacity(_pgmagick.DrawableFillOpacity): pass class DrawableFillRule(_pgmagick.DrawableFillRule): pass class DrawableFont(_pgmagick.DrawableFont): pass class DrawableGravity(_pgmagick.DrawableGravity): pass class DrawableLine(_pgmagick.DrawableLine): pass class DrawableList(_pgmagick.DrawableList): pass class DrawableMatte(_pgmagick.DrawableMatte): pass class DrawableMiterLimit(_pgmagick.DrawableMiterLimit): pass class DrawablePath(_pgmagick.DrawablePath): pass class DrawablePoint(_pgmagick.DrawablePoint): pass class DrawablePointSize(_pgmagick.DrawablePointSize): pass class DrawablePolygon(_pgmagick.DrawablePolygon): pass class DrawablePolyline(_pgmagick.DrawablePolyline): pass class DrawablePopClipPath(_pgmagick.DrawablePopClipPath): pass class DrawablePopGraphicContext(_pgmagick.DrawablePopGraphicContext): pass class DrawablePopPattern(_pgmagick.DrawablePopPattern): pass class DrawablePushClipPath(_pgmagick.DrawablePushClipPath): pass class DrawablePushGraphicContext(_pgmagick.DrawablePushGraphicContext): pass class DrawablePushPattern(_pgmagick.DrawablePushPattern): pass class DrawableRectangle(_pgmagick.DrawableRectangle): pass class DrawableRotation(_pgmagick.DrawableRotation): pass class DrawableRoundRectangle(_pgmagick.DrawableRoundRectangle): pass class DrawableScaling(_pgmagick.DrawableScaling): pass class DrawableSkewX(_pgmagick.DrawableSkewX): pass class DrawableSkewY(_pgmagick.DrawableSkewY): pass class DrawableStrokeAntialias(_pgmagick.DrawableStrokeAntialias): pass class DrawableStrokeColor(_pgmagick.DrawableStrokeColor): pass class DrawableStrokeLineCap(_pgmagick.DrawableStrokeLineCap): pass class DrawableStrokeLineJoin(_pgmagick.DrawableStrokeLineJoin): pass class DrawableStrokeOpacity(_pgmagick.DrawableStrokeOpacity): pass class DrawableStrokeWidth(_pgmagick.DrawableStrokeWidth): pass class DrawableText(_pgmagick.DrawableText): pass class DrawableTextAntialias(_pgmagick.DrawableTextAntialias): pass class DrawableTextDecoration(_pgmagick.DrawableTextDecoration): pass class DrawableTextUnderColor(_pgmagick.DrawableTextUnderColor): pass class DrawableTranslation(_pgmagick.DrawableTranslation): pass class DrawableViewbox(_pgmagick.DrawableViewbox): pass EndianType = _pgmagick.EndianType class MagickException(_pgmagick.Exception): """Exception Class""" pass FillRule = _pgmagick.FillRule FilterTypes = _pgmagick.FilterTypes class Geometry(_pgmagick.Geometry): pass GravityType = _pgmagick.GravityType class Image(_pgmagick.Image): pass class ImageList(_pgmagick.ImageList): pass ImageType = _pgmagick.ImageType InterlaceType = _pgmagick.InterlaceType LineCap = _pgmagick.LineCap LineJoin = _pgmagick.LineJoin class Montage(_pgmagick.Montage): pass class MontageFramed(_pgmagick.MontageFramed): pass NoiseType = _pgmagick.NoiseType if hasattr(_pgmagick, "OrientationType"): OrientationType = _pgmagick.OrientationType PaintMethod = _pgmagick.PaintMethod class PathArcAbs(_pgmagick.PathArcAbs): pass class PathArcArgs(_pgmagick.PathArcArgs): pass class PathArcArgsList(_pgmagick.PathArcArgsList): pass class PathArcRel(_pgmagick.PathArcRel): pass class PathClosePath(_pgmagick.PathClosePath): pass class PathCurveToArgsList(_pgmagick.PathCurveToArgsList): pass class PathCurvetoAbs(_pgmagick.PathCurvetoAbs): pass class PathCurvetoArgs(_pgmagick.PathCurvetoArgs): pass class PathCurvetoRel(_pgmagick.PathCurvetoRel): pass class PathLinetoAbs(_pgmagick.PathLinetoAbs): pass class PathLinetoHorizontalAbs(_pgmagick.PathLinetoHorizontalAbs): pass class PathLinetoHorizontalRel(_pgmagick.PathLinetoHorizontalRel): pass class PathLinetoRel(_pgmagick.PathLinetoRel): pass class PathLinetoVerticalAbs(_pgmagick.PathLinetoVerticalAbs): pass class PathLinetoVerticalRel(_pgmagick.PathLinetoVerticalRel): pass class PathMovetoAbs(_pgmagick.PathMovetoAbs): pass class PathMovetoRel(_pgmagick.PathMovetoRel): pass class PathQuadraticCurvetoAbs(_pgmagick.PathQuadraticCurvetoAbs): pass class PathQuadraticCurvetoArgs(_pgmagick.PathQuadraticCurvetoArgs): pass class PathQuadraticCurvetoArgsList(_pgmagick.PathQuadraticCurvetoArgsList): pass class PathQuadraticCurvetoRel(_pgmagick.PathQuadraticCurvetoRel): pass class PathSmoothCurvetoAbs(_pgmagick.PathSmoothCurvetoAbs): pass class PathSmoothCurvetoRel(_pgmagick.PathSmoothCurvetoRel): pass class PathSmoothQuadraticCurvetoAbs(_pgmagick.PathSmoothQuadraticCurvetoAbs): pass class PathSmoothQuadraticCurvetoRel(_pgmagick.PathSmoothQuadraticCurvetoRel): pass class Pixels(_pgmagick.Pixels): pass class PixelPacket(_pgmagick.PixelPacket): pass if hasattr(_pgmagick, "SparseColorMethod"): SparseColorMethod = _pgmagick.SparseColorMethod if hasattr(_pgmagick, "DistortImageMethod"): DistortImageMethod = _pgmagick.DistortImageMethod if hasattr(_pgmagick, "QuantumOperator"): QuantumOperator = _pgmagick.QuantumOperator QuantumType = _pgmagick.QuantumType RenderingIntent = _pgmagick.RenderingIntent ResolutionType = _pgmagick.ResolutionType StorageType = _pgmagick.StorageType StretchType = _pgmagick.StretchType StyleType = _pgmagick.StyleType class TypeMetric(_pgmagick.TypeMetric): pass if hasattr(_pgmagick, "VirtualPixelMethod"): VirtualPixelMethod = _pgmagick.VirtualPixelMethod class VPath(_pgmagick.VPath): pass class VPathList(_pgmagick.VPathList): pass class gminfo: version = _pgmagick.get_version() library = _pgmagick.get_library() pgmagick-0.7.2/pgmagick/_version.py0000644000076500000240000000002613200337674020307 0ustar hattori-hstaff00000000000000__version__ = '0.7.2' pgmagick-0.7.2/pgmagick/api.py0000644000076500000240000007072713200030361017232 0ustar hattori-hstaff00000000000000import sys import pgmagick _EXIF_TAGS = [ "ImageWidth", "ImageLength", "BitsPerSample", "Compression", "PhotometricInterpretation", "ImageDescription", "Make", "Model", "StripOffsets", "Orientation", "SamplesPerPixel", "RowsPerStrip", "StripByteCounts", "XResolution", "YResolution", "PlanarConfiguration", "ResolutionUnit", "TransferFunction", "CreatorTool", "ModifyDate", "Artist", "WhitePoint", "PrimaryChromaticities", "JPEGInterchangeFormat", "JPEGInterchangeFormatLength", "YCbCrCoefficients", "YCbCrSubSampling", "YCbCrPositioning", "ReferenceBlackWhite", "Copyright", "ExposureTime", "FNumber", "ExifIFDPointer", "ExposureProgram", "SpectralSensitivity", "GPSInfoIFDPointer", "ISOSpeedRatings", "OECF", "ExifVersion", "DateTimeOriginal", "MetadataDate", "ComponentsConfiguration", "CompressedBitsPerPixel", "ShutterSpeedValue", "ApertureValue", "BrightnessValue", "ExposureBiasValue", "MaxApertureValue", "SubjectDistance", "MeteringMode", "LightSource", "Flash", "FocalLength", "SubjectArea", "MakerNote", "UserComment", "SubSecTime", "SubSecTimeOriginal", "SubSecTimeDegitized", "FlashpixVersion", "ColorSpace", "PixelXDimension", "PixelYDimension", "RelatedSoundFile", "InteroperabilityIFDPointer", "FlashEnergy", "SpatialFrequencyResponse", "FocalPlaneXResolution", "FocalPlaneYResolution", "FocalPlaneResolutionUnit", "SubjectLocation", "ExposureIndex", "SensingMethod", "FileSource", "SceneType", "CFAPattern", "CustomRendered", "ExposureMode", "WhiteBalance", "DigitalZoomRatio", "FocalLengthIn35mmFilm", "SceneCaptureType", "GainControl", "Contrast", "Saturation", "Sharpness", "DeviceSettingDescription", "SubjectDistanceRange", "0xa420", "0xa500", "DNGVersion", "DNGBackwardVersion", "DNGUniqueCameraModel", "DNGLocalizedCameraModel", "DNGCFAPlaneColor", "DNGCFALayout", "DNGLinearizationTable", "DNGBlackLevelRepeatDim", "DNGBlackLevel", "DNGBlackLevelDeltaH", "DNGBlackLevelDeltaV", "DNGWhiteLevel", "DNGDefaultscale", "DNGDefaultCropOrigin", "DNGDefaultCropSize", "DNGColorMatrix1", "DNGColorMatrix2", "DNGCameraCalibration1", "DNGCameraCalibration2", "DNGReductionMatrix1", "DNGReductionMatrix2", "DNGAnalogBalance", "DNGAsShotNeutral", "DNGAsShotWhiteXY", "DNGBaselineExposure", "DNGBaselineNoise", "DNGBaselineSharpness", "DNGBayerGreenSplit", "DNGLinearResponseLimit", "DNGCameraSerialNumber", "DNGLensInfo", "DNGChromaBlurRadius", "DNGAntiAliasStrength", "DNGShadowScale", "DNGPrivateData", "DNGMakerNoteSafety", "DNGCalibrationIlluminant1", "DNGCalibrationIlluminant2", "DNGBestQualityScale", "DNGRawDataUniqueID", "DNGOriginalRawFileName", "DNGOriginalRawFileData", "DNGActiveArea", "DNGMaskedArea", "DNGAsShotICCProfile", "DNGAsShotPreProfileMatrix", "DNGCurrentICCProfile", "DNGCurrentPreProfileMatrix", "GPSVersionID", "GPSLatitudeRef", "GPSLatitude", "GPSLongitudeRef", "GPSLongitude", "GPSAltitudeRef", "GPSAltitude", "GPSTimeStamp", "GPSSatellites", "GPSStatus", "GPSMessureMode", "GPSDOP", "GPSSpeedRef", "GPSSpeed", "GPSTrackRef", "GPSTrack", "GPSImgDirectionRef", "GPSImgDirection", "GPSMapDatum", "GPSDestLatitudeRef", "GPSDestLatitude", "GPSDestLongitudeRef", "GPSDestLongitude", "GPSDestBearingRef", "GPSDestBearing", "GPSDestDistanceRef", "GPSDestDistance", "GPSProcessingMethod", "GPSAreaInformation", "GPSDateStamp", "GPSDifferential", "InteroperabilityIndex", "CRSRawFileName", "CRSVersion", "CRSWhiteBalance", "CRSTemperature", "CRSTint", "CRSShadowTint", "CRSExposure", "CRSShadows", "CRSBrightness", "CRSContrast", "CRSSaturation", "CRSRedSaturation", "CRSGreenSaturation", "CRSBlueSaturation", "CRSSharpness", "CRSLuminanceSmoothing", "CRSRedHue", "CRSGreenHue", "CRSBlueHue", "CRSColorNoiseReduction", "CRSChromaticAberrationR", "CRSChromaticAberrationB", "CRSVignetteAmount", "CRSLens", "CRSSerialNumber", "CRSAutoBrightness", "CRSAutoShadows", "CRSAutoContrast", "CRSAutoExposure", "OLSpecialMode", "OLJpegQuality", "OLMacro", "OLDigitalZoom", "OLSoftwareRelease", "OLpictInfo", "OLCameraID", "OLDataDump", "OLFlashMode", "OLExposureBias", "OLFocusMode", "OLFocusDistance", "OLZoom", "OLMacroFocus", "OLSharpness", "OLColourMatrix", "OLBlackLevel", "OLWhiteBalance", "OLRedBias", "OLBlueBias", "OLSerialNumber", "OLFlashBias", "OLContrast", "OLSharpnessFactor", "OLColourControl", "OLValidBits", "OLCoringFilter", "OLImageWidth", "OLImageHeight", "OLCompressionRatio", "PXExposureTime", "PXFNumber", "PXISOSpeed", "PXExposureBias", "PXWhiteBalance", "PXLensID", "PXImageTone", "EXThumbInfo", "EXThumbSize", "EXThumbOffset", "EXQualityMode", "EXImageSize", "EXISOSensitivity", "EXWhiteBalance", "EXFocalLength", "EXSaturation", "EXContrast", "EXSharpness", "EXPIM", "EXThumbnail", "EXWBBias", "EXFlash", "EXObjectDistance", "EXFlashDistance", "EXRecordMode", "EXSelfTimer", "EXQuality", "EXFocusMode", "EXTimeZone", "EXBestshotMode", "EXCCDSensitivity", "EXColorMode", "EXColorEnhance", "EXFilter", "PXOCaptureMode", "PXOQualityLevel", "PXOFocusMode", "PXOFlashMode", "PXOWhiteBalance", "PXODigitalZoom", "PXOSharpness", "PXOContrast", "PXOSaturation", "PXOISOSpeed", "PXOColorMode", "PXOTimeZone", "PXODaylightSavings", "NKISOSetting", "NKColorMode", "NKQuality", "NKWhitebalance", "NKSharpness", "NKFocusMode", "NKFlashSetting", "NKFlashMode", "NKWhiteBalanceOffset", "NKISOselection", "NKThumbnailIFDOffset", "NKImageAdjustment", "NKContrastSetting", "NKAdapter", "NKLensSetting", "NKLensInfo", "NKManualFocusDistance", "NKDigitalZoom", "NKAFFocusPoint", "NKShutterMode", "NKColorSpace", "NKColorOffset", "NKNoiseReduction", "NKLendID", "NKShotCount", "NKFinishSetting", "NKDigitalImgProg", "NKEQuality", "NKEColorMode", "NKEImageAdjustment", "NKECCDSensitivity", "NKEWhiteBalance", "NKEFocus", "NKEDigitalZoom", "NKEConverter", "MLTMakerNoteVersion", "MLTCameraSettingsOld", "MLTExposureMode", "MLTFlashMode", "MLTWhiteBalance", "MLTImageSize", "MLTImageQuality", "MLTDriveMode", "MLTMeteringMode", "MLTFilmSpeed", "MLTShutterSpeed", "MLTAperture", "MLTMacroMode", "MLTDigitalZoom", "MLTExposureCompensation", "MLTBracketStep", "MLTunknown16", "MLTIntervalLength", "MLTIntervalNumber", "MLTFocalLength", "MLTFocusDistance", "MLTFlashFired", "MLTDate", "MLTTime", "MLTMaxAperture", "MLTFileNumberMemory", "MLTLastFileNumber", "MLTWhiteBalanceRed", "MLTWhiteBalanceGreen", "MLTWhiteBalanceBlue", "MLTSaturation", "MLTContrast", "MLTSharpness", "MLTSubjectProgram", "MLTFlashCompensation", "MLTISOSetting", "MLTCameraModel", "MLTIntervalMode", "MLTFolderName", "MLTColorMode", "MLTColorFilter", "MLTBWFilter", "MLTInternalFlash", "MLTBrightnessValue", "MLTSpotFocusPointX", "MLTSpotFocusPointY", "MLTWideFocusZone", "MLTFocusMode", "MLTFocusArea", "MLTDECPosition", "MLTComppressImageSize", "MLTThumbnail", "MLTThumbnailOffset", "MLTThumbnailLength", "MLTLensID", "MLTPIMInformation", "MLTCameraSettings", "SGSerialID", "SGDriveMode", "SGImageSize", "SGAFMode", "SGFocusMode", "SGWhiteBalance", "SGExposureMode", "SGMeteringMode", "SGFocalLength", "SGColorSpace", "SGExposure", "SGContrast", "SGShadow", "SGHighlight", "SGSaturation", "SGSharpness", "SGX3FillLight", "SGColorCoordination", "SGCustomSettingMode", "SGJpegQuality", "SGFirmware", "SGSoftware", "SGAutoBlacket", "CNMacroMode", "CNSelfTimer", "CNFlash", "CNDriveMode", "CNFocusMode", "CNImageSize", "CNImageSelect", "CNDigitalZoom", "CNContrast", "CNSaturation", "CNSharpness", "CNISOSensitive", "CNMeteringMode", "CNFocusType", "CNAFPoint", "CNExposurePorgram", "CNLensID", "CNLensMaximum", "CNLensMinimum", "CNLensUnit", "CNFlashDetailed", "CNFocusSetting", "CNImageStabilization", "CNImageEffect", "CNHueBias", "CNWhitebalance", "CNImageNumber", "CNAFPointUsed", "CNFlashBias", "CNAperture", "CNExposure", "CNNDFilter", "CNImageType", "CNFirmware", "CNUser", "CNSerial", "CNNoiseReduction", "CNButtunFunction", "CNMirrorLockUp", "CNShutterStep", "CNAFSupliment", "CNApexPriority", "CNAEFunction", "CNShutterSynchro", "CNAFStopButton", "CNFlashMemLimit", "CNMenuPosition", "CNSETFunction", "CNSensorCleaning", "CNColorTemp", "CNColorSpace", "FJVersion", "FJQuality", "FJSharpness", "FJWhiteBalance", "FJColor", "FJFlashMode", "FJFlashStrength", "FJMacro", "FJFocusMode", "FJSlowSync", "FJPictureMode", "FJContBlacket", "FJBlurWarning", "FJFocusWarning", "FJAEWarning", "KCMode", ] def _convert_colorobj(input_obj): if isinstance(input_obj, (list, tuple)): r, g, b = int(input_obj[0]), int(input_obj[1]), int(input_obj[2]) color = pgmagick.Color(r, g, b) elif isinstance(input_obj, str): color = pgmagick.Color(input_obj) else: color = input_obj assert isinstance(color, pgmagick.Color) return color def _convert_coordinatelist(input_obj): """convert from 'list' or 'tuple' object to pgmagick.CoordinateList. :type input_obj: list or tuple """ cdl = pgmagick.CoordinateList() for obj in input_obj: cdl.append(pgmagick.Coordinate(obj[0], obj[1])) return cdl def _convert_paintmethod(input_obj): if isinstance(input_obj, pgmagick.PaintMethod): return input_obj pm = pgmagick.PaintMethod() if input_obj.lower() == 'filltoborder': paint_method = pm.FillToBorderMethod else: paint_method = getattr(pm, "%sMethod" % input_obj.title()) return paint_method def _convert_vpathlist(input_obj): """convert from 'list' or 'tuple' object to pgmagick.VPathList. :type input_obj: list or tuple """ vpl = pgmagick.VPathList() for obj in input_obj: # FIXME obj = pgmagick.PathMovetoAbs(pgmagick.Coordinate(obj[0], obj[1])) vpl.append(obj) return vpl class Image(object): @property def height(self): return self.img.rows() @property def width(self): return self.img.columns() def __init__(self, filename=None, color=None, *args, **kargs): self.img = None if sys.version_info >= (3, ) and isinstance(filename, (str)): self.img = pgmagick.Image(str(filename)) elif sys.version_info < (3, ) and isinstance(filename, (unicode, str)): self.img = pgmagick.Image(str(filename)) elif isinstance(filename, (list, tuple)): size = filename geometry = pgmagick.Geometry(int(size[0]), int(size[1])) if isinstance(color, (list, tuple)): r, g, b = int(color[0]), int(color[1]), int(color[2]) color = pgmagick.Color(r, g, b) self.img = pgmagick.Image(geometry, color) elif isinstance(color, str): if color.find('gradient') == 0 or color.find('plasma') == 0: self.img = pgmagick.Image(geometry, pgmagick.Color()) self.img.read(color) else: color = pgmagick.Color(color) self.img = pgmagick.Image(geometry, color) else: self.img = pgmagick.Image(geometry, pgmagick.Color()) self.img.write(pgmagick.Blob(), 'MIFF') else: self.img = pgmagick.Image() def write(self, filename): self.img.write(str(filename)) # API of Manipulate An Image def adaptive_threshold(self, width, height, offset=0): # TODO: not implemented pass def add_noise(self, noise_type): # TODO: not implemented pass def add_noise_channel(self, channel, noise_type): # TODO: not implemented pass def affine_transform(self, affine): # TODO: not implemented pass def annotate(self, string, position=(0, 0), gravity='center', angle=0): position = pgmagick.Geometry(int(position[0]), int(position[1])) gravity = getattr(pgmagick.GravityType, "%sGravity" % gravity.title()) self.img.annotate(string, position, gravity, angle) def blur(self, radius=0.0, sigma=1.0): # TODO: not implemented pass def blur_channel(self, channel, radius=0.0, sigma=1.0): if isinstance(channel, str): channel = getattr(pgmagick.ChannelType, "%sChannel" % channel.title()) self.img.blurChannel(channel, radius, sigma) def border(self, geometry=None): # TODO: not implemented pass def channel(self, channel): # TODO: not implemented pass def channel_depth(self, channel, depth=None): # TODO: not implemented pass def charcoal(self, radius=0.0, sigma=1.0): # TODO: not implemented pass def chop(self, geometry): # TODO: not implemented pass def colorize(self, opacity_rgb, color): # TODO: not implemented pass def color_matrix(self, order, color_matrix): # TODO: not implemented pass def comment(self, comment): # TODO: not implemented pass def compare(self, reference): # TODO: not implemented pass def composite(self, composite_img, offset, compose=pgmagick.CompositeOperator.InCompositeOp): img = composite_img.img if type(composite_img) == Image else composite_img if isinstance(offset, (list, tuple)): x = int(offset[0]) y = int(offset[1]) offset = pgmagick.Geometry(x, y) elif isinstance(offset, pgmagick.Geometry): pass elif isinstance(offset, str): # is gravity (string) offset = getattr(pgmagick.GravityType, "%sGravity" % offset.title()) else: # is gravity (pgmagick.GravityType) pass if isinstance(compose, pgmagick.CompositeOperator): pass elif compose.lower() in ('copyblue', 'copygreen', 'copyopacity', 'copyred', 'copycyan', 'copymagenta', 'copyyellow', 'copyblack'): color = compose.lower().split('copy')[1].title() compose = getattr(pgmagick.CompositeOperator, "Copy%sCompositeOp" % color) else: # other string compose = getattr(pgmagick.CompositeOperator, "%sCompositeOp" % compose.title()) self.img.composite(img, offset, compose) def contrast(self, sharpen): # TODO: not implemented pass def convolve(self, order, kernel): # TODO: not implemented pass def crop(self, *geometry): if len(geometry) == 4: width, height = geometry[0], geometry[1] x, y = geometry[2], geometry[3] g = pgmagick.Geometry(x, y, width, height) elif len(geometry) == 1 and isinstance(geometry[0], pgmagick.Geometry): g = geometry[0] else: raise Exception("not support object", geometry) self.img.crop(g) def cycle_colormap(self, amount): # TODO: not implemented pass def draw(self, draw_obj): if isinstance(draw_obj, (list, tuple)): draw = pgmagick.DrawableList() for d in draw_obj: draw.append(d) elif isinstance(draw_obj, Draw): draw = draw_obj.drawer else: draw = draw_obj self.img.draw(draw) def edge(self, radius=0.0): # TODO: not implemented pass def emboss(self, radius=0.0, sigma=1.0): # TODO: not implemented pass def floodfill_color(self, point, fill_color): # TODO: not implemented pass def floodfill_opacity(self, point, opacity, method): # TODO: not implemented pass def floodfill_texture(self, point, texture): # TODO: not implemented pass def font(self, font=None): if font: self.img.font(font) else: return self.img.font() def scale(self, size, filter_type=None): if isinstance(size, float): scaled_height = self.img.rows() * size scaled_width = self.img.columns() * size size = "%dx%d" % (int(scaled_width), int(scaled_height)) elif isinstance(size, (list, tuple)): scaled_width, scaled_height = int(size[0]), int(size[1]) size = "%dx%d" % (int(scaled_width), int(scaled_height)) geometry = pgmagick.Geometry(size) if filter_type: filter_type = getattr(pgmagick.FilterTypes, "%sFilter" % filter_type.title()) self.img.filterType(filter_type) self.img.zoom(geometry) else: self.img.scale(geometry) # API of Set/Get Image def font_pointsize(self, point_size=None): if point_size: point_size = float(point_size) self.img.fontPointsize(point_size) else: return self.img.fontPointsize() # extra def get_exif_info(self): """return exif-tag dict """ _dict = {} for tag in _EXIF_TAGS: ret = self.img.attribute("EXIF:%s" % tag) if ret and ret != 'unknown': _dict[tag] = ret return _dict class Draw(object): def __init__(self): self.drawer = pgmagick.DrawableList() def affine(self, sx, sy, rx, ry, tx, ty): affine = pgmagick.DrawableAffine(float(sx), float(sy), float(rx), float(ry), float(tx), float(ty)) self.drawer.append(affine) def arc(self, start_x, start_y, end_x, end_y, start_degrees, end_degrees): arc = pgmagick.DrawableArc(float(start_x), float(start_y), float(end_x), float(end_y), float(start_degrees), float(end_degrees)) self.drawer.append(arc) def bezier(self, points): """Draw a Bezier-curve. :param points: ex.) ((5, 5), (6, 6), (7, 7)) :type points: list """ coordinates = pgmagick.CoordinateList() for point in points: x, y = float(point[0]), float(point[1]) coordinates.append(pgmagick.Coordinate(x, y)) self.drawer.append(pgmagick.DrawableBezier(coordinates)) def circle(self, origin_x, origin_y, perim_x, perim_y): circle = pgmagick.DrawableCircle(float(origin_x), float(origin_y), float(perim_x), float(perim_y)) self.drawer.append(circle) def color(self, x, y, paint_method): """ :param paint_method: 'point' or 'replace' or 'floodfill' or 'filltoborder' or 'reset' :type paint_method: str or pgmagick.PaintMethod """ paint_method = _convert_paintmethod(paint_method) color = pgmagick.DrawableColor(x, y, paint_method) self.drawer.append(color) def composite(self, x, y, width, height, image, op=pgmagick.CompositeOperator.OverCompositeOp): if type(image) == Image: img = image.img else: img = image if width == 0 or height == 0: composite = pgmagick.DrawableCompositeImage(float(x), float(y), img) else: composite = pgmagick.DrawableCompositeImage(float(x), float(y), float(width), float(height), img, op) self.drawer.append(composite) def ellipse(self, org_x, org_y, radius_x, radius_y, arc_start, arc_end): """ :param org_x: origination x axis :param org_y: origination y axis :param radius_x: radius x axis :param radius_y: radius y axis :param arc_start: arc start angle :param arc_end: arc end angle """ ellipse = pgmagick.DrawableEllipse(float(org_x), float(org_y), float(radius_x), float(radius_y), float(arc_start), float(arc_end)) self.drawer.append(ellipse) def fill_color(self, color): color = _convert_colorobj(color) fill_color = pgmagick.DrawableFillColor(color) self.drawer.append(fill_color) def fill_rule(self, rule='evenodd'): if rule.lower() == 'evenodd': fill_rule = pgmagick.FillRule.EvenOddRule elif rule.lower() == 'nonzero': fill_rule = pgmagick.FillRule.NonZeroRule else: fill_rule = rule fill_rule = pgmagick.DrawableFillRule(fill_rule) self.drawer.append(fill_rule) def fill_opacity(self, opacity): """ :param opacity: 0.0 ~ 1.0 """ opacity = pgmagick.DrawableFillOpacity(float(opacity)) self.drawer.append(opacity) def font(self, family, style='normal', weight=400, stretch='normal'): style = getattr(pgmagick.StyleType, "%sStyle" % style.title()) stretch = stretch.lower() if 'condensed' in stretch: tmp = stretch.split('condensed')[0] stretch = "%sCondensedStretch" % tmp.title() elif 'expanded' in stretch: tmp = stretch.split('expanded')[0] stretch = "%sExpandedStretch" % tmp.title() else: stretch = "%sStretch" % stretch.title() stretch = getattr(pgmagick.StretchType, "%s" % stretch) if weight is 'bold': weight = 800 font = pgmagick.DrawableFont(family, style, weight, stretch) self.drawer.append(font) def gravity(self, gravity_type): if isinstance(gravity_type, str): gravity = getattr(pgmagick.GravityType, "%sGravity" % gravity_type.title()) else: gravity = gravity_type gravity_type = pgmagick.DrawableGravity(gravity) self.drawer.append(gravity_type) def line(self, start_x, start_y, end_x, end_y): line = pgmagick.DrawableLine(start_x, start_y, end_x, end_y) self.drawer.append(line) def matte(self, x, y, paint_method): """ :param paint_method: 'point' or 'replace' or 'floodfill' or 'filltoborder' or 'reset' :type paint_method: str or pgmagick.PaintMethod """ paint_method = _convert_paintmethod(paint_method) self.drawer.append(pgmagick.DrawableMatte(x, y, paint_method)) def miterlimit(self, miterlimit): # FIXME self.drawer.append(pgmagick.DrawableMiterLimit(miterlimit)) def path(self, vpath): # FIXME if isinstance(vpath, pgmagick.VPathList): vpath = vpath elif isinstance(vpath, (list, tuple)): vpath = _convert_vpathlist(vpath) self.drawer.append(pgmagick.DrawablePath(vpath)) def point(self, x, y): self.drawer.append(pgmagick.DrawablePoint(x, y)) def pointsize(self, pointsize): pointsize = pgmagick.DrawablePointSize(pointsize) self.drawer.append(pointsize) def polygon(self, coordinates): if isinstance(coordinates, pgmagick.CoordinateList): obj = coordinates elif isinstance(coordinates, (list, tuple)): obj = _convert_coordinatelist(coordinates) self.drawer.append(pgmagick.DrawablePolygon(obj)) def polyline(self, coordinates): if isinstance(coordinates, pgmagick.CoordinateList): obj = coordinates elif isinstance(coordinates, (list, tuple)): obj = _convert_coordinatelist(coordinates) self.drawer.append(pgmagick.DrawablePolyline(obj)) def rectangle(self, upperleft_x, upperleft_y, lowerright_x, lowerright_y): r = pgmagick.DrawableRectangle(upperleft_x, upperleft_y, lowerright_x, lowerright_y) self.drawer.append(r) def rotation(self, angle): self.drawer.append(pgmagick.DrawableRotation(angle)) def round_rectangle(self, center_x, center_y, width, height, corner_width, corner_height): rr = pgmagick.DrawableRoundRectangle(center_x, center_y, width, height, corner_width, corner_height) self.drawer.append(rr) def scaling(self, x, y): """Scaling Draw Object :param x: 0.0 ~ 1.0 :param y: 0.0 ~ 1.0 """ self.drawer.append(pgmagick.DrawableScaling(float(x), float(y))) def skewx(self, angle): self.drawer.append(pgmagick.DrawableSkewX(float(angle))) def skewy(self, angle): self.drawer.append(pgmagick.DrawableSkewY(float(angle))) def stroke_antialias(self, flag=True): """stroke antialias :param flag: True or False. (default is True) :type flag: bool """ antialias = pgmagick.DrawableStrokeAntialias(flag) self.drawer.append(antialias) def stroke_color(self, color): color = _convert_colorobj(color) color = pgmagick.DrawableStrokeColor(color) self.drawer.append(color) def stroke_linecap(self, linecap): """set to stroke linecap. :param linecap: 'undefined', 'butt', 'round', 'square' :type linecap: str """ linecap = getattr(pgmagick.LineCap, "%sCap" % linecap.title()) linecap = pgmagick.DrawableStrokeLineCap(linecap) self.drawer.append(linecap) def stroke_linejoin(self, linejoin): """set to stroke linejoin. :param linejoin: 'undefined', 'miter', 'round', 'bevel' :type linejoin: str """ linejoin = getattr(pgmagick.LineJoin, "%sJoin" % linejoin.title()) linejoin = pgmagick.DrawableStrokeLineJoin(linejoin) self.drawer.append(linejoin) def stroke_opacity(self, opacity): self.drawer.append(pgmagick.DrawableStrokeOpacity(float(opacity))) def stroke_width(self, width): width = float(width) width = pgmagick.DrawableStrokeWidth(width) self.drawer.append(width) def text(self, x, y, string, encoding=None): # TODO: unable encoding text = pgmagick.DrawableText(x, y, string) self.drawer.append(text) def text_antialias(self, flag=True): """text antialias :param flag: True or False. (default is True) :type flag: bool """ antialias = pgmagick.DrawableTextAntialias(flag) self.drawer.append(antialias) def text_decoration(self, decoration): """text decoration :param decoration: 'no', 'underline', 'overline', 'linethrough' :type decoration: str """ if decoration.lower() == 'linethrough': d = pgmagick.DecorationType.LineThroughDecoration else: decoration_type_string = "%sDecoration" % decoration.title() d = getattr(pgmagick.DecorationType, "%s" % decoration_type_string) decoration = pgmagick.DrawableTextDecoration(d) self.drawer.append(decoration) def text_undercolor(self, color): color = _convert_colorobj(color) undercolor = pgmagick.DrawableTextUnderColor(color) self.drawer.append(undercolor) def translate(self, x, y): self.drawer.append(pgmagick.DrawableTranslation(float(x), float(y))) pgmagick-0.7.2/pgmagick.egg-info/0000755000076500000240000000000013200337770017602 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/pgmagick.egg-info/dependency_links.txt0000644000076500000240000000000113200337770023650 0ustar hattori-hstaff00000000000000 pgmagick-0.7.2/pgmagick.egg-info/PKG-INFO0000644000076500000240000001523613200337770020706 0ustar hattori-hstaff00000000000000Metadata-Version: 1.1 Name: pgmagick Version: 0.7.2 Summary: Yet Another Python wrapper for GraphicsMagick Home-page: https://github.com/hhatto/pgmagick Author: Hideo Hattori Author-email: hhatto.jp@gmail.com License: MIT Description-Content-Type: UNKNOWN Description: About ===== .. image:: https://travis-ci.org/hhatto/pgmagick.svg?branch=master :target: https://travis-ci.org/hhatto/pgmagick :alt: Build status pgmagick is a yet another boost.python based wrapper for GraphicsMagick. Installation ============ install to:: $ pip install pgmagick Requirements ============ Python2.5++, GraphicsMagick and Boost.Python. package install on Ubuntu(test on Ubuntu10.04+):: ### Ubuntu11.10+ ### $ apt-get install python-pgmagick ### Ubuntu10.04+ ### $ apt-get install libgraphicsmagick++1-dev $ apt-get install libboost-python1.40-dev package install on Fedora:: $ yum install GraphicsMagick-c++-devel $ yum install boost-devel GraphicsMagick from source package:: $ ./configure --enable-shared=yes $ make && make install MacOSX ------ via homebrew-cask(homebrew-pgmagick) with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ use `homebrew-pgmagick`_ :: $ brew tap hhatto/pgmagick $ brew install pgmagick .. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick via homebrew-cask(homebrew-pgmagick) with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ with `--with-python3` option:: $ brew install pgmagick --with-python3 via homebrew and pip with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python --with-python3 $ pip install pgmagick via homebrew and pip with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *update 2017.05.17* on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python $ pip install pgmagick *update 2014.05.12* on MacOSX 10.9.2 (add ARCHFLAGS):: $ brew install graphicsmagick $ brew install boost --with-python $ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install pgmagick Windows ------- Now, not official support. However, *unofficial* binary packages exists. - http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick ImageMagick support ------------------- pgmagick is supported to ImageMagick library. (*version:0.4+*) package install on Ubuntu(test on Ubuntu10.04+):: $ apt-get install libmagick++-dev show library name and version:: >>> from pgmagick import gminfo >>> gminfo.library 'GraphicsMagick' # or 'ImageMagick' >>> gminfo.version '1.3.x' >>> Usage ===== scale example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.quality(100) >>> im.scale('100x100') >>> im.sharpen(1.0) >>> im.write('output.jpg') resize example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.filterType(FilterTypes.SincFilter) >>> im.resize('100x100') >>> im.write('output.jpg') composite example:: >>> from pgmagick import Image, CompositeOperator as co >>> base = Image('base.png') >>> layer = Image('layer_one.png') >>> base.composite(layer, 100, 100, co.OverCompositeOp) >>> im.write('output.png') draw example:: >>> from pgmagick import Image, DrawableCircle, DrawableText, Geometry, Color >>> im = Image(Geometry(300, 300), Color("yellow")) >>> circle = DrawableCircle(100, 100, 20, 20) >>> im.draw(circle) >>> im.fontPointsize(65) >>> text = DrawableText(30, 250, "Hello pgmagick") >>> im.draw(text) >>> im.write('hoge.png') blob access:: >>> from pgmagick import Image, Blob, Geometry >>> blob = Blob(open('filename.jpg').read()) >>> blob.update(open('filename2.jpg').read()) >>> img = Image(blob, Geometry(600, 480)) >>> img.scale('300x200') >>> img.write('out.jpg') create animated-GIF:: from pgmagick import Image, ImageList, Geometry, Color imgs = ImageList() for color in ('red', 'blue', 'green', 'black', 'yellow'): imgs.append(Image(Geometry(200, 200), Color(color))) imgs.animationDelayImages(100) imgs.scaleImages(Geometry(100, 100)) imgs.writeImages('output.gif') more API detail... read to `Magick++ API for GraphicsMagick`_ document. .. _`Magick++ API for GraphicsMagick`: http://www.graphicsmagick.org/Magick++/ Python APIs(*NOTICE!! this api is alpha version!!*):: >>> from pgmagick.api import Image >>> img = Image((300, 300), "gradient:#ffffff-#000000") >>> img.scale(0.8) >>> img.write('out.png') Links ===== * PyPI_ * `Project Page`_ * `Project Page (Old)`_ .. _PyPI: http://pypi.python.org/pypi/pgmagick/ .. _`Project Page`: https://github.com/hhatto/pgmagick/ .. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/ Keywords: GraphicsMagick ImageMagick graphics boost image Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: POSIX Classifier: Programming Language :: C++ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Multimedia :: Graphics pgmagick-0.7.2/pgmagick.egg-info/SOURCES.txt0000644000076500000240000000751613200337770021477 0ustar hattori-hstaff00000000000000LICENSE MANIFEST.in Makefile README.rst setup.py ./src/_ArrayProxy.h ./src/_Blob.cpp ./src/_ChannelType.cpp ./src/_Color.cpp ./src/_ColorspaceType.cpp ./src/_CompositeOperator.cpp ./src/_CompressionType.cpp ./src/_Coordinate.cpp ./src/_DecorationType.cpp ./src/_DistortImageMethod.cpp ./src/_Drawable.cpp ./src/_DrawableAffine.cpp ./src/_DrawableArc.cpp ./src/_DrawableBezier.cpp ./src/_DrawableCircle.cpp ./src/_DrawableClipPath.cpp ./src/_DrawableColor.cpp ./src/_DrawableCompositeImage.cpp ./src/_DrawableDashArray.cpp ./src/_DrawableDashOffset.cpp ./src/_DrawableEllipse.cpp ./src/_DrawableFillColor.cpp ./src/_DrawableFillOpacity.cpp ./src/_DrawableFillRule.cpp ./src/_DrawableFont.cpp ./src/_DrawableGravity.cpp ./src/_DrawableLine.cpp ./src/_DrawableMatte.cpp ./src/_DrawableMiterLimit.cpp ./src/_DrawablePath.cpp ./src/_DrawablePoint.cpp ./src/_DrawablePointSize.cpp ./src/_DrawablePolygon.cpp ./src/_DrawablePolyline.cpp ./src/_DrawablePopClipPath.cpp ./src/_DrawablePopGraphicContext.cpp ./src/_DrawablePopPattern.cpp ./src/_DrawablePushClipPath.cpp ./src/_DrawablePushGraphicContext.cpp ./src/_DrawablePushPattern.cpp ./src/_DrawableRectangle.cpp ./src/_DrawableRotation.cpp ./src/_DrawableRoundRectangle.cpp ./src/_DrawableScaling.cpp ./src/_DrawableSkewX.cpp ./src/_DrawableSkewY.cpp ./src/_DrawableStrokeAntialias.cpp ./src/_DrawableStrokeColor.cpp ./src/_DrawableStrokeLineCap.cpp ./src/_DrawableStrokeLineJoin.cpp ./src/_DrawableStrokeOpacity.cpp ./src/_DrawableStrokeWidth.cpp ./src/_DrawableText.cpp ./src/_DrawableTextAntialias.cpp ./src/_DrawableTextDecoration.cpp ./src/_DrawableTextUnderColor.cpp ./src/_DrawableTranslation.cpp ./src/_DrawableViewbox.cpp ./src/_EndianType.cpp ./src/_Exception.cpp ./src/_FillRule.cpp ./src/_FilterTypes.cpp ./src/_Geometry.cpp ./src/_GravityType.cpp ./src/_Image.cpp ./src/_ImageType.cpp ./src/_InterlaceType.cpp ./src/_LineCap.cpp ./src/_LineJoin.cpp ./src/_Montage.cpp ./src/_NoiseType.cpp ./src/_OrientationType.cpp ./src/_PaintMethod.cpp ./src/_PathArcAbs.cpp ./src/_PathArcArgs.cpp ./src/_PathArcRel.cpp ./src/_PathClosePath.cpp ./src/_PathCurvetoAbs.cpp ./src/_PathCurvetoArgs.cpp ./src/_PathCurvetoRel.cpp ./src/_PathLinetoAbs.cpp ./src/_PathLinetoHorizontalAbs.cpp ./src/_PathLinetoHorizontalRel.cpp ./src/_PathLinetoRel.cpp ./src/_PathLinetoVerticalAbs.cpp ./src/_PathLinetoVerticalRel.cpp ./src/_PathMovetoAbs.cpp ./src/_PathMovetoRel.cpp ./src/_PathQuadraticCurvetoAbs.cpp ./src/_PathQuadraticCurvetoArgs.cpp ./src/_PathQuadraticCurvetoRel.cpp ./src/_PathSmoothCurvetoAbs.cpp ./src/_PathSmoothCurvetoRel.cpp ./src/_PathSmoothQuadraticCurvetoAbs.cpp ./src/_PathSmoothQuadraticCurvetoRel.cpp ./src/_Pixels.cpp ./src/_Pixels.h ./src/_QuantumOperator.cpp ./src/_QuantumType.cpp ./src/_RenderingIntent.cpp ./src/_ResolutionType.cpp ./src/_STL.cpp ./src/_SparseColorMethod.cpp ./src/_StorageType.cpp ./src/_StretchType.cpp ./src/_StyleType.cpp ./src/_TypeMetric.cpp ./src/_VPath.cpp ./src/_VirtualPixelMethod.cpp ./src/_gminfo.cpp ./src/_main.cpp example/X.jpg example/bezier.py example/blob.py example/draw.py example/drawablelist.py example/example.png example/gm.sh example/gradient.py example/gravity.py example/im.sh example/image_from_storage.py example/imagelist.py example/pgmagick_prof.py example/pixels.py example/profile.sh example/pythonmagick_prof.py example/resize.py example/writeimages_with_blob.py example/docs/japanese-text.py pgmagick/__init__.py pgmagick/_version.py pgmagick/api.py pgmagick.egg-info/PKG-INFO pgmagick.egg-info/SOURCES.txt pgmagick.egg-info/dependency_links.txt pgmagick.egg-info/top_level.txt src/Makefile src/_ArrayProxy.h src/_Pixels.h test/test_cookbook.py test/test_pgmagick_api.py test/test_pgmagick_blob.py test/test_pgmagick_color.py test/test_pgmagick_geometry.py test/test_pgmagick_image.py test/test_pgmagick_imagelist.py test/test_pgmagick_libinfo.py test/test_pgmagick_montage.py test/test_pgmagick_pixel.pypgmagick-0.7.2/pgmagick.egg-info/top_level.txt0000644000076500000240000000001113200337770022324 0ustar hattori-hstaff00000000000000pgmagick pgmagick-0.7.2/PKG-INFO0000644000076500000240000001523613200337770015432 0ustar hattori-hstaff00000000000000Metadata-Version: 1.1 Name: pgmagick Version: 0.7.2 Summary: Yet Another Python wrapper for GraphicsMagick Home-page: https://github.com/hhatto/pgmagick Author: Hideo Hattori Author-email: hhatto.jp@gmail.com License: MIT Description-Content-Type: UNKNOWN Description: About ===== .. image:: https://travis-ci.org/hhatto/pgmagick.svg?branch=master :target: https://travis-ci.org/hhatto/pgmagick :alt: Build status pgmagick is a yet another boost.python based wrapper for GraphicsMagick. Installation ============ install to:: $ pip install pgmagick Requirements ============ Python2.5++, GraphicsMagick and Boost.Python. package install on Ubuntu(test on Ubuntu10.04+):: ### Ubuntu11.10+ ### $ apt-get install python-pgmagick ### Ubuntu10.04+ ### $ apt-get install libgraphicsmagick++1-dev $ apt-get install libboost-python1.40-dev package install on Fedora:: $ yum install GraphicsMagick-c++-devel $ yum install boost-devel GraphicsMagick from source package:: $ ./configure --enable-shared=yes $ make && make install MacOSX ------ via homebrew-cask(homebrew-pgmagick) with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ use `homebrew-pgmagick`_ :: $ brew tap hhatto/pgmagick $ brew install pgmagick .. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick via homebrew-cask(homebrew-pgmagick) with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ with `--with-python3` option:: $ brew install pgmagick --with-python3 via homebrew and pip with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python --with-python3 $ pip install pgmagick via homebrew and pip with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *update 2017.05.17* on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python $ pip install pgmagick *update 2014.05.12* on MacOSX 10.9.2 (add ARCHFLAGS):: $ brew install graphicsmagick $ brew install boost --with-python $ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install pgmagick Windows ------- Now, not official support. However, *unofficial* binary packages exists. - http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick ImageMagick support ------------------- pgmagick is supported to ImageMagick library. (*version:0.4+*) package install on Ubuntu(test on Ubuntu10.04+):: $ apt-get install libmagick++-dev show library name and version:: >>> from pgmagick import gminfo >>> gminfo.library 'GraphicsMagick' # or 'ImageMagick' >>> gminfo.version '1.3.x' >>> Usage ===== scale example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.quality(100) >>> im.scale('100x100') >>> im.sharpen(1.0) >>> im.write('output.jpg') resize example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.filterType(FilterTypes.SincFilter) >>> im.resize('100x100') >>> im.write('output.jpg') composite example:: >>> from pgmagick import Image, CompositeOperator as co >>> base = Image('base.png') >>> layer = Image('layer_one.png') >>> base.composite(layer, 100, 100, co.OverCompositeOp) >>> im.write('output.png') draw example:: >>> from pgmagick import Image, DrawableCircle, DrawableText, Geometry, Color >>> im = Image(Geometry(300, 300), Color("yellow")) >>> circle = DrawableCircle(100, 100, 20, 20) >>> im.draw(circle) >>> im.fontPointsize(65) >>> text = DrawableText(30, 250, "Hello pgmagick") >>> im.draw(text) >>> im.write('hoge.png') blob access:: >>> from pgmagick import Image, Blob, Geometry >>> blob = Blob(open('filename.jpg').read()) >>> blob.update(open('filename2.jpg').read()) >>> img = Image(blob, Geometry(600, 480)) >>> img.scale('300x200') >>> img.write('out.jpg') create animated-GIF:: from pgmagick import Image, ImageList, Geometry, Color imgs = ImageList() for color in ('red', 'blue', 'green', 'black', 'yellow'): imgs.append(Image(Geometry(200, 200), Color(color))) imgs.animationDelayImages(100) imgs.scaleImages(Geometry(100, 100)) imgs.writeImages('output.gif') more API detail... read to `Magick++ API for GraphicsMagick`_ document. .. _`Magick++ API for GraphicsMagick`: http://www.graphicsmagick.org/Magick++/ Python APIs(*NOTICE!! this api is alpha version!!*):: >>> from pgmagick.api import Image >>> img = Image((300, 300), "gradient:#ffffff-#000000") >>> img.scale(0.8) >>> img.write('out.png') Links ===== * PyPI_ * `Project Page`_ * `Project Page (Old)`_ .. _PyPI: http://pypi.python.org/pypi/pgmagick/ .. _`Project Page`: https://github.com/hhatto/pgmagick/ .. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/ Keywords: GraphicsMagick ImageMagick graphics boost image Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: POSIX Classifier: Programming Language :: C++ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Multimedia :: Graphics pgmagick-0.7.2/README.rst0000644000076500000240000001101513153230470016007 0ustar hattori-hstaff00000000000000About ===== .. image:: https://travis-ci.org/hhatto/pgmagick.svg?branch=master :target: https://travis-ci.org/hhatto/pgmagick :alt: Build status pgmagick is a yet another boost.python based wrapper for GraphicsMagick. Installation ============ install to:: $ pip install pgmagick Requirements ============ Python2.5++, GraphicsMagick and Boost.Python. package install on Ubuntu(test on Ubuntu10.04+):: ### Ubuntu11.10+ ### $ apt-get install python-pgmagick ### Ubuntu10.04+ ### $ apt-get install libgraphicsmagick++1-dev $ apt-get install libboost-python1.40-dev package install on Fedora:: $ yum install GraphicsMagick-c++-devel $ yum install boost-devel GraphicsMagick from source package:: $ ./configure --enable-shared=yes $ make && make install MacOSX ------ via homebrew-cask(homebrew-pgmagick) with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ use `homebrew-pgmagick`_ :: $ brew tap hhatto/pgmagick $ brew install pgmagick .. _`homebrew-pgmagick`: https://github.com/hhatto/homebrew-pgmagick via homebrew-cask(homebrew-pgmagick) with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ with `--with-python3` option:: $ brew install pgmagick --with-python3 via homebrew and pip with Python3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python --with-python3 $ pip install pgmagick via homebrew and pip with Python2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *update 2017.05.17* on MacOSX 10.11.6:: $ brew install graphicsmagick $ brew install boost-python $ pip install pgmagick *update 2014.05.12* on MacOSX 10.9.2 (add ARCHFLAGS):: $ brew install graphicsmagick $ brew install boost --with-python $ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install pgmagick Windows ------- Now, not official support. However, *unofficial* binary packages exists. - http://www.lfd.uci.edu/~gohlke/pythonlibs/#pgmagick ImageMagick support ------------------- pgmagick is supported to ImageMagick library. (*version:0.4+*) package install on Ubuntu(test on Ubuntu10.04+):: $ apt-get install libmagick++-dev show library name and version:: >>> from pgmagick import gminfo >>> gminfo.library 'GraphicsMagick' # or 'ImageMagick' >>> gminfo.version '1.3.x' >>> Usage ===== scale example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.quality(100) >>> im.scale('100x100') >>> im.sharpen(1.0) >>> im.write('output.jpg') resize example:: >>> from pgmagick import Image >>> im = Image('input.jpg') >>> im.filterType(FilterTypes.SincFilter) >>> im.resize('100x100') >>> im.write('output.jpg') composite example:: >>> from pgmagick import Image, CompositeOperator as co >>> base = Image('base.png') >>> layer = Image('layer_one.png') >>> base.composite(layer, 100, 100, co.OverCompositeOp) >>> im.write('output.png') draw example:: >>> from pgmagick import Image, DrawableCircle, DrawableText, Geometry, Color >>> im = Image(Geometry(300, 300), Color("yellow")) >>> circle = DrawableCircle(100, 100, 20, 20) >>> im.draw(circle) >>> im.fontPointsize(65) >>> text = DrawableText(30, 250, "Hello pgmagick") >>> im.draw(text) >>> im.write('hoge.png') blob access:: >>> from pgmagick import Image, Blob, Geometry >>> blob = Blob(open('filename.jpg').read()) >>> blob.update(open('filename2.jpg').read()) >>> img = Image(blob, Geometry(600, 480)) >>> img.scale('300x200') >>> img.write('out.jpg') create animated-GIF:: from pgmagick import Image, ImageList, Geometry, Color imgs = ImageList() for color in ('red', 'blue', 'green', 'black', 'yellow'): imgs.append(Image(Geometry(200, 200), Color(color))) imgs.animationDelayImages(100) imgs.scaleImages(Geometry(100, 100)) imgs.writeImages('output.gif') more API detail... read to `Magick++ API for GraphicsMagick`_ document. .. _`Magick++ API for GraphicsMagick`: http://www.graphicsmagick.org/Magick++/ Python APIs(*NOTICE!! this api is alpha version!!*):: >>> from pgmagick.api import Image >>> img = Image((300, 300), "gradient:#ffffff-#000000") >>> img.scale(0.8) >>> img.write('out.png') Links ===== * PyPI_ * `Project Page`_ * `Project Page (Old)`_ .. _PyPI: http://pypi.python.org/pypi/pgmagick/ .. _`Project Page`: https://github.com/hhatto/pgmagick/ .. _`Project Page (Old)`: https://bitbucket.org/hhatto/pgmagick/ pgmagick-0.7.2/setup.cfg0000644000076500000240000000004613200337770016147 0ustar hattori-hstaff00000000000000[egg_info] tag_build = tag_date = 0 pgmagick-0.7.2/setup.py0000644000076500000240000002133713200337160016037 0ustar hattori-hstaff00000000000000from setuptools import setup, find_packages, Extension from distutils.sysconfig import get_python_inc import glob import os import re import sys import ast import io GMCPP_PC = 'GraphicsMagick++.pc' IMCPP_PC = 'ImageMagick++.pc' LIBRARY = 'GraphicsMagick' # default value include_dirs = [get_python_inc()] library_dirs = [] search_include_dirs = ['/usr/local/include/GraphicsMagick/', '/usr/include/GraphicsMagick/'] search_library_dirs = ['/usr/local/lib64/', '/usr/lib64/', '/usr/local/lib/', '/usr/lib/'] search_pkgconfig_dirs = ['/usr/local/lib/pkgconfig/', '/usr/local/lib64/pkgconfig/', '/usr/lib/pkgconfig/', '/usr/lib64/pkgconfig'] if sys.platform.lower() == 'darwin': if os.path.exists('/opt/local/include'): include_dirs.append('/opt/local/include/') else: include_dirs.append('/usr/local/include/') search_include_dirs.extend(['/opt/local/include/GraphicsMagick/', '/opt/local/include/', '/usr/local/Cellar/graphicsmagick']) search_library_dirs.extend(['/opt/local/lib/', '/usr/local/Cellar/graphicsmagick']) # for ImageMagick search_include_dirs.extend(['/usr/local/include/ImageMagick/', '/usr/include/ImageMagick/']) if sys.platform.lower() == 'darwin': search_include_dirs.append('/opt/local/include/ImageMagick/') if 'MAGICK_HOME' in os.environ: extra_include_dir = os.path.join(os.environ['MAGICK_HOME'], 'include') print('adding extra include directory %s' % extra_include_dir) search_include_dirs.insert(0, extra_include_dir) extra_library_dir = os.path.join(os.environ['MAGICK_HOME'], 'lib') print('adding extra library directory %s' % extra_library_dir) search_library_dirs.insert(0, extra_library_dir) extra_pkgconfig_dir = os.path.join(extra_library_dir, 'pkgconfig') print('adding extra pkgconfig directory %s' % extra_pkgconfig_dir) search_pkgconfig_dirs.insert(0, extra_pkgconfig_dir) def _grep(regex, filename): for line in open(filename): if re.search(regex, line): return line def get_version_from_devheaders(search_dirs): target_api_name = "addNoiseChannel" for dirname in search_dirs: for root, dirs, files in os.walk(dirname): for f in files: if f == 'Image.h': if _grep(target_api_name, os.path.join(root, 'Image.h')): return '1.2.0' def get_version_from_pc(search_dirs, target): """similar to 'pkg-config --modversion GraphicsMagick++'""" for dirname in search_dirs: for root, dirs, files in os.walk(dirname): for f in files: if f == target: file_path = os.path.join(root, target) _tmp = _grep("Version: ", file_path) version = _tmp.split()[1] print("Found version %s in file %s" % (version, file_path)) return version def find_file(filename, search_dirs): for dirname in search_dirs: for root, dirs, files in os.walk(dirname): for f in files: if filename in f: return root for d in dirs: if filename in d: return root if filename in root: return root return False def library_supports_api(library_version, api_version, different_major_breaks_support=True): """ Returns whether api_version is supported by given library version. E. g. library_version (1,3,21) returns True for api_version (1,3,21), (1,3,19), (1,3,'x'), (1,2,'x'), (1, 'x') False for (1,3,24), (1,4,'x'), (2,'x') different_major_breaks_support - if enabled and library and api major versions are different always return False ex) with library_version (2,0,0) and for api_version(1,3,24) returns False if enabled, True if disabled """ assert isinstance(library_version, (tuple, list)) # won't work with e.g. generators assert len(library_version) == 3 sequence_type = type(library_version) # assure we will compare same types api_version = sequence_type(0 if num == 'x' else num for num in api_version) if different_major_breaks_support and library_version[0] != api_version[0]: return False assert len(api_version) <= 3 # otherwise following comparision won't work as intended, e.g. (2, 0, 0) > (2, 0, 0, 0) return library_version >= api_version # find to header path header_path = find_file('Magick++.h', search_include_dirs) if not header_path: raise Exception("Magick++ not found") print("include header path: %s" % header_path) include_dirs.append(header_path) # find to library path for boost_python # TODO: only test on Ubuntu11.10 _python_version = sys.version_info boost_lib_target_files = [] if _python_version >= (3, ): boost_lib_target_files.append("boost_python-py%s%s" % (_python_version[0], _python_version[1])) # ArchLinux uses boost_python3 boost_lib_target_files.append("boost_python3") boost_lib_target_files.append("boost_python3-mt") boost_lib_target_files.append("boost_python-mt-py%s%s" % (_python_version[0], _python_version[1])) # gentoo appends the python version numbers to the boost_python libraries boost_lib_target_files.append("boost_python-%s.%s" % (_python_version[0], _python_version[1])) boost_lib_target_files.append("boost_python-mt") for boost_lib in boost_lib_target_files: lib_path = find_file('lib' + boost_lib, search_library_dirs) if lib_path: break if not lib_path: boost_lib = "boost_python" print("boost lib: %s" % boost_lib) libraries = [boost_lib] # find to library path for Magick lib_path = find_file('libGraphicsMagick++', search_library_dirs) if lib_path: libraries.append('GraphicsMagick++') print("library path: %s" % (os.path.join(lib_path, "libGraphicsMagick++"))) else: lib_path = find_file('libMagick++', search_library_dirs) if lib_path: LIBRARY = 'ImageMagick' libraries.append('Magick++') print("library path: %s" % (os.path.join(lib_path, "libMagick++"))) else: raise Exception("libGraphicsMagick++ (or libMagick++) not found") library_dirs.append(lib_path) # get version and extra compile argument ext_compile_args = [] if LIBRARY == 'GraphicsMagick': _version = get_version_from_pc(search_pkgconfig_dirs + search_include_dirs, GMCPP_PC) else: _version = get_version_from_pc(search_pkgconfig_dirs + search_include_dirs, IMCPP_PC) if not _version: _version = get_version_from_devheaders(include_dirs) if _version: _str_version = _version print("%s version: %s" % (LIBRARY, _version)) _version = list(map(int, _version.split('.'))) if len(_version) == 2: # ex) 1.2 -> 1.2.0 _version.append(0) if LIBRARY == 'GraphicsMagick': # 1.3.6 for not Ubuntu10.04 _tested_api_versions = ((1,3,26), (1,3,24), (1,3,22), (1,3,20), (1,3,19), (1,3,6), (1,3,'x')) _supported_api_versions = (v for v in _tested_api_versions if library_supports_api(_version, v)) ext_compile_args = ["-DPGMAGICK_LIB_GRAPHICSMAGICK_" + '_'.join(map(str, version)) for version in _supported_api_versions] elif LIBRARY == 'ImageMagick': ext_compile_args = ["-DPGMAGICK_LIB_IMAGEMAGICK"] ext_compile_args.append("-D_LIBRARY_VERSION=\"%s\"" % (_str_version)) else: _version = '%s version: ???' % (LIBRARY) def version(): """Return version string.""" with io.open('pgmagick/_version.py') as input_file: for line in input_file: if line.startswith('__version__'): return ast.parse(line).body[0].value.s setup(name='pgmagick', version=version(), description="Yet Another Python wrapper for GraphicsMagick", long_description=open('README.rst').read(), author='Hideo Hattori', author_email='hhatto.jp@gmail.com', url='https://github.com/hhatto/pgmagick', license='MIT', packages=find_packages(), ext_modules=[ Extension('pgmagick._pgmagick', sources=glob.glob('./src/*.cpp'), include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries, extra_compile_args=ext_compile_args)], classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: POSIX', 'Programming Language :: C++', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Topic :: Multimedia :: Graphics'], keywords="GraphicsMagick ImageMagick graphics boost image") pgmagick-0.7.2/src/0000755000076500000240000000000013200337770015115 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/src/_ArrayProxy.h0000644000076500000240000000337313200030361017535 0ustar hattori-hstaff00000000000000#ifndef __ARRAY_PROXY__ #define __ARRAY_PROXY__ #include /** Type that proxies to an C array. * Optionally converts to another type on element access and holds reference to buffer's parent object. * @param value_type buffer element type * @param ItemType returned object type for element access * @param Parent type of parent copy held by proxy (use void* if not needed and NULL as parent in constructor) */ template class ArrayProxy { public: // Types typedef value_type* iterator; typedef value_type& reference; typedef std::size_t size_type; /** @brief Default constructor * @param buffer C-style array to be proxied * @param length number of elements in buffer (size in bytes / sizeof(value_type)) * @param parent buffer's parent object. We hold copy-constructed value for managing lifetime */ ArrayProxy(iterator buffer, size_type length, const Parent &parent) : data(buffer), length(length), parent(parent) {} size_type size() const { return length; } ItemType get_item(size_type index) const { return ItemType(get_item_reference(index)); } void set_item(reference item, size_type index) { get_item_reference(index) = item; } private: value_type *data; std::size_t length; Parent parent; size_type checkIndex(size_type index) const { // Adjust negative index. if (index < 0) index += length; // Boundary check. if (index < 0 || index >= length) { PyErr_SetString(PyExc_IndexError, "Index out of range"); boost::python::throw_error_already_set(); } return index; } reference get_item_reference(size_t index) const { return data[checkIndex(index)]; } }; #endif // __ARRAY_PROXY__ pgmagick-0.7.2/src/_Blob.cpp0000644000076500000240000000337713153230470016644 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; static void updateNoCopy_wrapper(Magick::Blob& blob, std::string& data) { // NOTE: this is valid? std::string str; char* w = new char[data.size() + 1]; std::copy(str.begin(), str.end(), w); w[str.size()] = '\0'; blob.updateNoCopy(w,data.size(),Magick::Blob::NewAllocator); } static void update_wrapper(Magick::Blob& blob, const std::string& data) { blob.update(data.c_str(),data.size()); } #if PY_MAJOR_VERSION >= 3 static object get_blob_data(const Magick::Blob& blob) { const char* data = static_cast(blob.data()); size_t length = blob.length(); return object(handle<>(PyBytes_FromStringAndSize(data, length))); } #else static std::string get_blob_data(const Magick::Blob& blob) { const char* data = static_cast(blob.data()); size_t length = blob.length(); return std::string(data,data+length); } #endif void __Blob() { scope* Magick_Blob_scope = new scope( class_< Magick::Blob >("Blob", init< >()) .def("__init__", &update_wrapper) // NOTE: valid? .def(init< const Magick::Blob& >()) .def("base64", (void (Magick::Blob::*)(const std::string) )&Magick::Blob::base64) .def("base64", (std::string (Magick::Blob::*)() )&Magick::Blob::base64) .def("update", &update_wrapper) .def("updateNoCopy", &updateNoCopy_wrapper) .def("length", &Magick::Blob::length) ); enum_< Magick::Blob::Allocator >("Allocator") .value("NewAllocator", Magick::Blob::NewAllocator) .value("MallocAllocator", Magick::Blob::MallocAllocator) ; delete Magick_Blob_scope; def("get_blob_data", &get_blob_data); } pgmagick-0.7.2/src/_ChannelType.cpp0000644000076500000240000000172513153230470020173 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __ChannelType() { enum_< Magick::ChannelType >("ChannelType") .value("UndefinedChannel", Magick::UndefinedChannel) .value("RedChannel", Magick::RedChannel) .value("CyanChannel", Magick::CyanChannel) .value("GreenChannel", Magick::GreenChannel) .value("MagentaChannel", Magick::MagentaChannel) .value("BlueChannel", Magick::BlueChannel) .value("YellowChannel", Magick::YellowChannel) .value("OpacityChannel", Magick::OpacityChannel) .value("BlackChannel", Magick::BlackChannel) .value("MatteChannel", Magick::MatteChannel) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("AllChannels", Magick::AllChannels) .value("GrayChannel", Magick::GrayChannel) #endif #ifdef PGMAGICK_LIB_IMAGEMAGICK .value("AllChannels", Magick::AllChannels) #endif ; } pgmagick-0.7.2/src/_Color.cpp0000644000076500000240000001207513153230470017037 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __Color() { class_< Magick::Color >("Color", init< >()) .def(init< Magick::Quantum, Magick::Quantum, Magick::Quantum >()) .def(init< Magick::Quantum, Magick::Quantum, Magick::Quantum, Magick::Quantum >()) .def(init< const std::string& >()) .def(init< const char* >()) .def(init< const Magick::Color& >()) .def(init< const Magick::PixelPacket& >()) .def("redQuantum", (void (Magick::Color::*)(Magick::Quantum) )&Magick::Color::redQuantum) .def("redQuantum", (Magick::Quantum (Magick::Color::*)() const)&Magick::Color::redQuantum) .def("greenQuantum", (void (Magick::Color::*)(Magick::Quantum) )&Magick::Color::greenQuantum) .def("greenQuantum", (Magick::Quantum (Magick::Color::*)() const)&Magick::Color::greenQuantum) .def("blueQuantum", (void (Magick::Color::*)(Magick::Quantum) )&Magick::Color::blueQuantum) .def("blueQuantum", (Magick::Quantum (Magick::Color::*)() const)&Magick::Color::blueQuantum) .def("alphaQuantum", (void (Magick::Color::*)(Magick::Quantum) )&Magick::Color::alphaQuantum) .def("alphaQuantum", (Magick::Quantum (Magick::Color::*)() const)&Magick::Color::alphaQuantum) .def("alpha", (void (Magick::Color::*)(double) )&Magick::Color::alpha) .def("alpha", (double (Magick::Color::*)() const)&Magick::Color::alpha) .def("isValid", (void (Magick::Color::*)(bool) )&Magick::Color::isValid) .def("isValid", (bool (Magick::Color::*)() const)&Magick::Color::isValid) .def("intensity", &Magick::Color::intensity) .def("scaleDoubleToQuantum", &Magick::Color::scaleDoubleToQuantum) .def("scaleQuantumToDouble", (double (*)(const Magick::Quantum))&Magick::Color::scaleQuantumToDouble) .def("scaleQuantumToDouble", (double (*)(const double))&Magick::Color::scaleQuantumToDouble) .staticmethod("scaleDoubleToQuantum") .staticmethod("scaleQuantumToDouble") .def( self > self ) .def( self < self ) .def( self == self ) .def( self != self ) .def( self <= self ) .def( self >= self ) .def("to_std_string", &Magick::Color::operator std::string) .def("to_Magick_PixelPacket", &Magick::Color::operator Magick::PixelPacket) ; class_< Magick::ColorHSL, bases >("ColorHSL", init< >()) .def(init< double, double, double >()) .def(init< const Magick::Color& >()) .def("hue", (double (Magick::ColorHSL::*)() const)&Magick::ColorHSL::hue) .def("hue", (void (Magick::ColorHSL::*)(double) )&Magick::ColorHSL::hue) .def("saturation", (double (Magick::ColorHSL::*)() const)&Magick::ColorHSL::saturation) .def("saturation", (void (Magick::ColorHSL::*)(double) )&Magick::ColorHSL::saturation) .def("luminosity", (double (Magick::ColorHSL::*)() const)&Magick::ColorHSL::luminosity) .def("luminosity", (void (Magick::ColorHSL::*)(double) )&Magick::ColorHSL::luminosity) ; class_< Magick::ColorGray, bases >("ColorGray", init< >()) .def(init< double >()) .def(init< const Magick::Color& >()) .def("shade", (double (Magick::ColorGray::*)() const)&Magick::ColorGray::shade) .def("shade", (void (Magick::ColorGray::*)(double) )&Magick::ColorGray::shade) ; class_< Magick::ColorMono, bases >("ColorMono", init< >()) .def(init< bool >()) .def(init< const Magick::Color& >()) .def("mono", (void (Magick::ColorMono::*)(bool) )&Magick::ColorMono::mono) .def("mono", (bool (Magick::ColorMono::*)() const)&Magick::ColorMono::mono) ; class_< Magick::ColorRGB, bases >("ColorRGB", init< >()) .def(init< double, double, double >()) .def(init< const Magick::Color& >()) .def("red", (void (Magick::ColorRGB::*)(double) )&Magick::ColorRGB::red) .def("red", (double (Magick::ColorRGB::*)() const)&Magick::ColorRGB::red) .def("green", (void (Magick::ColorRGB::*)(double) )&Magick::ColorRGB::green) .def("green", (double (Magick::ColorRGB::*)() const)&Magick::ColorRGB::green) .def("blue", (void (Magick::ColorRGB::*)(double) )&Magick::ColorRGB::blue) .def("blue", (double (Magick::ColorRGB::*)() const)&Magick::ColorRGB::blue) ; class_< Magick::ColorYUV, bases >("ColorYUV", init< >()) .def(init< double, double, double >()) .def(init< const Magick::Color& >()) .def("u", (void (Magick::ColorYUV::*)(double) )&Magick::ColorYUV::u) .def("u", (double (Magick::ColorYUV::*)() const)&Magick::ColorYUV::u) .def("v", (void (Magick::ColorYUV::*)(double) )&Magick::ColorYUV::v) .def("v", (double (Magick::ColorYUV::*)() const)&Magick::ColorYUV::v) .def("y", (void (Magick::ColorYUV::*)(double) )&Magick::ColorYUV::y) .def("y", (double (Magick::ColorYUV::*)() const)&Magick::ColorYUV::y) ; implicitly_convertible(); } pgmagick-0.7.2/src/_ColorspaceType.cpp0000644000076500000240000000267013153230470020715 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __ColorspaceType() { enum_< Magick::ColorspaceType >("ColorspaceType") .value("UndefinedColorspace", Magick::UndefinedColorspace) .value("RGBColorspace", Magick::RGBColorspace) .value("GRAYColorspace", Magick::GRAYColorspace) .value("TransparentColorspace", Magick::TransparentColorspace) .value("OHTAColorspace", Magick::OHTAColorspace) .value("XYZColorspace", Magick::XYZColorspace) .value("YCbCrColorspace", Magick::YCbCrColorspace) .value("YCCColorspace", Magick::YCCColorspace) .value("YIQColorspace", Magick::YIQColorspace) .value("YPbPrColorspace", Magick::YPbPrColorspace) .value("YUVColorspace", Magick::YUVColorspace) .value("CMYKColorspace", Magick::CMYKColorspace) .value("sRGBColorspace", Magick::sRGBColorspace) .value("HSLColorspace", Magick::HSLColorspace) .value("HWBColorspace", Magick::HWBColorspace) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("LABColorspace", Magick::LABColorspace) .value("CineonLogRGBColorspace", Magick::CineonLogRGBColorspace) .value("Rec601LumaColorspace", Magick::Rec601LumaColorspace) .value("Rec709LumaColorspace", Magick::Rec709LumaColorspace) .value("Rec709YCbCrColorspace", Magick::Rec709YCbCrColorspace) #endif ; } pgmagick-0.7.2/src/_CompositeOperator.cpp0000644000076500000240000000512613153230470021436 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __CompositeOperator() { enum_< Magick::CompositeOperator >("CompositeOperator") .value("AddCompositeOp", Magick::AddCompositeOp) .value("AtopCompositeOp", Magick::AtopCompositeOp) .value("BumpmapCompositeOp", Magick::BumpmapCompositeOp) .value("ClearCompositeOp", Magick::ClearCompositeOp) .value("ColorizeCompositeOp", Magick::ColorizeCompositeOp) .value("CopyBlueCompositeOp", Magick::CopyBlueCompositeOp) .value("CopyCompositeOp", Magick::CopyCompositeOp) .value("CopyGreenCompositeOp", Magick::CopyGreenCompositeOp) .value("CopyOpacityCompositeOp", Magick::CopyOpacityCompositeOp) .value("CopyRedCompositeOp", Magick::CopyRedCompositeOp) .value("DarkenCompositeOp", Magick::DarkenCompositeOp) .value("DifferenceCompositeOp", Magick::DifferenceCompositeOp) .value("DisplaceCompositeOp", Magick::DisplaceCompositeOp) .value("DissolveCompositeOp", Magick::DissolveCompositeOp) .value("HueCompositeOp", Magick::HueCompositeOp) .value("InCompositeOp", Magick::InCompositeOp) .value("LightenCompositeOp", Magick::LightenCompositeOp) .value("LuminizeCompositeOp", Magick::LuminizeCompositeOp) .value("MinusCompositeOp", Magick::MinusCompositeOp) .value("ModulateCompositeOp", Magick::ModulateCompositeOp) .value("MultiplyCompositeOp", Magick::MultiplyCompositeOp) .value("NoCompositeOp", Magick::NoCompositeOp) .value("OutCompositeOp", Magick::OutCompositeOp) .value("OverCompositeOp", Magick::OverCompositeOp) .value("OverlayCompositeOp", Magick::OverlayCompositeOp) .value("PlusCompositeOp", Magick::PlusCompositeOp) .value("SaturateCompositeOp", Magick::SaturateCompositeOp) .value("ScreenCompositeOp", Magick::ScreenCompositeOp) .value("SubtractCompositeOp", Magick::SubtractCompositeOp) .value("ThresholdCompositeOp", Magick::ThresholdCompositeOp) .value("UndefinedCompositeOp", Magick::UndefinedCompositeOp) .value("XorCompositeOp", Magick::XorCompositeOp) .value("CopyCyanCompositeOp", Magick::CopyCyanCompositeOp) .value("CopyMagentaCompositeOp", Magick::CopyMagentaCompositeOp) .value("CopyYellowCompositeOp", Magick::CopyYellowCompositeOp) .value("CopyBlackCompositeOp", Magick::CopyBlackCompositeOp) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("DivideCompositeOp", Magick::DivideCompositeOp) #endif ; } pgmagick-0.7.2/src/_CompressionType.cpp0000644000076500000240000000135213153230470021120 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __CompressionType() { enum_< Magick::CompressionType >("CompressionType") .value("UndefinedCompression", Magick::UndefinedCompression) .value("NoCompression", Magick::NoCompression) .value("BZipCompression", Magick::BZipCompression) .value("FaxCompression", Magick::FaxCompression) .value("Group4Compression", Magick::Group4Compression) .value("JPEGCompression", Magick::JPEGCompression) .value("LZWCompression", Magick::LZWCompression) .value("RLECompression", Magick::RLECompression) .value("ZipCompression", Magick::ZipCompression) ; } pgmagick-0.7.2/src/_Coordinate.cpp0000644000076500000240000000140113153230470020037 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __Coordinate() { class_< Magick::Coordinate, boost::noncopyable >("Coordinate", init< >()) .def(init< double, double >()) .def("x", (void (Magick::Coordinate::*)(double) )&Magick::Coordinate::x) .def("x", (double (Magick::Coordinate::*)() const)&Magick::Coordinate::x) .def("y", (void (Magick::Coordinate::*)(double) )&Magick::Coordinate::y) .def("y", (double (Magick::Coordinate::*)() const)&Magick::Coordinate::y) .def( self >= self ) .def( self <= self ) .def( self > self ) .def( self < self ) .def( self == self ) .def( self != self ) ; } pgmagick-0.7.2/src/_DecorationType.cpp0000644000076500000240000000072213153230470020706 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __DecorationType() { enum_< Magick::DecorationType >("DecorationType") .value("NoDecoration", Magick::NoDecoration) .value("UnderlineDecoration", Magick::UnderlineDecoration) .value("OverlineDecoration", Magick::OverlineDecoration) .value("LineThroughDecoration", Magick::LineThroughDecoration) ; } pgmagick-0.7.2/src/_DistortImageMethod.cpp0000644000076500000240000000236513153230470021516 0ustar hattori-hstaff00000000000000#include #include using namespace boost::python; void __DistortImageMethod() { #ifdef PGMAGICK_LIB_IMAGEMAGICK enum_< Magick::DistortImageMethod >("DistortImageMethod") .value("UndefinedDistortion", Magick::UndefinedDistortion) .value("AffineDistortion", Magick::AffineDistortion) .value("AffineProjectionDistortion", Magick::AffineProjectionDistortion) .value("ScaleRotateTranslateDistortion", Magick::ScaleRotateTranslateDistortion) .value("PerspectiveDistortion", Magick::PerspectiveDistortion) .value("PerspectiveProjectionDistortion", Magick::PerspectiveProjectionDistortion) .value("BilinearDistortion", Magick::BilinearDistortion) .value("PolynomialDistortion", Magick::PolynomialDistortion) .value("ArcDistortion", Magick::ArcDistortion) .value("PolarDistortion", Magick::PolarDistortion) .value("DePolarDistortion", Magick::DePolarDistortion) .value("BarrelDistortion", Magick::BarrelDistortion) .value("BarrelInverseDistortion", Magick::BarrelInverseDistortion) .value("ShepardsDistortion", Magick::ShepardsDistortion) .value("SentinelDistortion", Magick::SentinelDistortion) ; #endif } pgmagick-0.7.2/src/_Drawable.cpp0000644000076500000240000001303513153230470017477 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost; using namespace boost::python; void __Drawable() { implicitly_convertible< Magick::DrawableBase, Magick::Drawable >(); class_< Magick::DrawableBase, noncopyable >("DrawableBase", no_init) ; class_< Magick::Drawable >("Drawable", init< >()) .def(init< const Magick::DrawableBase& >()) .def(init< const Magick::Drawable& >()) .def( self != self ) .def( self == self ) .def( self < self ) .def( self > self ) .def( self <= self ) .def( self >= self ) ; class_< Magick::DrawableList >("DrawableList", init< >()) .def(init< const Magick::DrawableList& >()) .def("push_back", static_cast::*)(const Magick::Drawable&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::Drawable&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; class_< Magick::CoordinateList >("CoordinateList", init< >()) .def(init< const Magick::CoordinateList& >()) .def("push_back", static_cast::*)(const Magick::Coordinate&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::Coordinate&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; class_< Magick::VPathList >("VPathList", init< >()) .def(init< const Magick::VPathList& >()) .def("push_back", static_cast::*)(const Magick::VPath&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::VPath&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; class_< Magick::PathArcArgsList >("PathArcArgsList", init< >()) .def(init< const Magick::PathArcArgsList& >()) .def("push_back", static_cast::*)(const Magick::PathArcArgs&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::PathArcArgs&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; class_< Magick::PathCurveToArgsList >("PathCurveToArgsList", init< >()) .def(init< const Magick::PathCurveToArgsList& >()) .def("push_back", static_cast::*)(const Magick::PathCurvetoArgs&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::PathCurvetoArgs&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; class_< Magick::PathQuadraticCurvetoArgsList >("PathQuadraticCurvetoArgsList", init< >()) .def(init< const Magick::PathQuadraticCurvetoArgsList& >()) .def("push_back", static_cast::*)(const Magick::PathQuadraticCurvetoArgs&)>(&std::list::push_back)) .def("append", static_cast::*)(const Magick::PathQuadraticCurvetoArgs&)>(&std::list::push_back)) .def("pop_back", &std::list::pop_back) .def("pop", &std::list::pop_back) .def("remove", &std::list::remove) .def("reverse", &std::list::reverse) .def("count", &std::list::size) .def("__len__", &std::list::size) ; } pgmagick-0.7.2/src/_DrawableAffine.cpp0000644000076500000240000000363613153230470020616 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableAffine_Wrapper: Magick::DrawableAffine { Magick_DrawableAffine_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, double p4, double p5): Magick::DrawableAffine(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} Magick_DrawableAffine_Wrapper(PyObject* py_self_): Magick::DrawableAffine(), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableAffine() { class_< Magick::DrawableAffine, bases, boost::noncopyable, Magick_DrawableAffine_Wrapper >("DrawableAffine", init< >()) .def(init< double, double, double, double, double, double >()) .def("sx", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::sx) .def("sx", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::sx) .def("sy", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::sy) .def("sy", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::sy) .def("rx", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::rx) .def("rx", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::rx) .def("ry", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::ry) .def("ry", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::ry) .def("tx", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::tx) .def("tx", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::tx) .def("ty", (void (Magick::DrawableAffine::*)(const double) )&Magick::DrawableAffine::ty) .def("ty", (double (Magick::DrawableAffine::*)() const)&Magick::DrawableAffine::ty) ; } pgmagick-0.7.2/src/_DrawableArc.cpp0000644000076500000240000000341213153230470020123 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableArc_Wrapper: Magick::DrawableArc { Magick_DrawableArc_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, double p4, double p5): Magick::DrawableArc(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableArc() { class_< Magick::DrawableArc, bases, boost::noncopyable, Magick_DrawableArc_Wrapper >("DrawableArc", init< double, double, double, double, double, double >()) .def("startX", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::startX) .def("startX", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::startX) .def("startY", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::startY) .def("startY", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::startY) .def("endX", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::endX) .def("endX", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::endX) .def("endY", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::endY) .def("endY", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::endY) .def("startDegrees", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::startDegrees) .def("startDegrees", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::startDegrees) .def("endDegrees", (void (Magick::DrawableArc::*)(double) )&Magick::DrawableArc::endDegrees) .def("endDegrees", (double (Magick::DrawableArc::*)() const)&Magick::DrawableArc::endDegrees) ; } pgmagick-0.7.2/src/_DrawableBezier.cpp0000644000076500000240000000143013153230470020634 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableBezier_Wrapper: Magick::DrawableBezier { Magick_DrawableBezier_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::DrawableBezier(p0), py_self(py_self_) {} Magick_DrawableBezier_Wrapper(PyObject* py_self_, const Magick::DrawableBezier& p0): Magick::DrawableBezier(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableBezier() { class_< Magick::DrawableBezier, bases, Magick_DrawableBezier_Wrapper >("DrawableBezier", init< const Magick::CoordinateList& >()) .def(init< const Magick::DrawableBezier& >()) ; } pgmagick-0.7.2/src/_DrawableCircle.cpp0000644000076500000240000000263613153230470020626 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableCircle_Wrapper: Magick::DrawableCircle { Magick_DrawableCircle_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3): Magick::DrawableCircle(p0, p1, p2, p3), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableCircle() { class_< Magick::DrawableCircle, bases, boost::noncopyable, Magick_DrawableCircle_Wrapper >("DrawableCircle", init< double, double, double, double >()) .def("originX", (void (Magick::DrawableCircle::*)(double) )&Magick::DrawableCircle::originX) .def("originX", (double (Magick::DrawableCircle::*)() const)&Magick::DrawableCircle::originX) .def("originY", (void (Magick::DrawableCircle::*)(double) )&Magick::DrawableCircle::originY) .def("originY", (double (Magick::DrawableCircle::*)() const)&Magick::DrawableCircle::originY) .def("perimX", (void (Magick::DrawableCircle::*)(double) )&Magick::DrawableCircle::perimX) .def("perimX", (double (Magick::DrawableCircle::*)() const)&Magick::DrawableCircle::perimX) .def("perimY", (void (Magick::DrawableCircle::*)(double) )&Magick::DrawableCircle::perimY) .def("perimY", (double (Magick::DrawableCircle::*)() const)&Magick::DrawableCircle::perimY) ; } pgmagick-0.7.2/src/_DrawableClipPath.cpp0000644000076500000240000000200613153230470021120 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableClipPath_Wrapper: Magick::DrawableClipPath { Magick_DrawableClipPath_Wrapper(PyObject* py_self_, const std::string& p0): Magick::DrawableClipPath(p0), py_self(py_self_) {} Magick_DrawableClipPath_Wrapper(PyObject* py_self_, const Magick::DrawableClipPath& p0): Magick::DrawableClipPath(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableClipPath() { class_< Magick::DrawableClipPath, bases, Magick_DrawableClipPath_Wrapper >("DrawableClipPath", init< const std::string& >()) .def(init< const Magick::DrawableClipPath& >()) .def("clip_path", (void (Magick::DrawableClipPath::*)(const std::string&) )&Magick::DrawableClipPath::clip_path) .def("clip_path", (std::string (Magick::DrawableClipPath::*)() const)&Magick::DrawableClipPath::clip_path) ; } pgmagick-0.7.2/src/_DrawableColor.cpp0000644000076500000240000000230413153230470020473 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableColor_Wrapper: Magick::DrawableColor { Magick_DrawableColor_Wrapper(PyObject* py_self_, double p0, double p1, Magick::PaintMethod p2): Magick::DrawableColor(p0, p1, p2), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableColor() { class_< Magick::DrawableColor, bases, boost::noncopyable, Magick_DrawableColor_Wrapper >("DrawableColor", init< double, double, Magick::PaintMethod >()) .def("x", (void (Magick::DrawableColor::*)(double) )&Magick::DrawableColor::x) .def("x", (double (Magick::DrawableColor::*)() const)&Magick::DrawableColor::x) .def("y", (void (Magick::DrawableColor::*)(double) )&Magick::DrawableColor::y) .def("y", (double (Magick::DrawableColor::*)() const)&Magick::DrawableColor::y) .def("paintMethod", (void (Magick::DrawableColor::*)(Magick::PaintMethod) )&Magick::DrawableColor::paintMethod) .def("paintMethod", (Magick::PaintMethod (Magick::DrawableColor::*)() const)&Magick::DrawableColor::paintMethod) ; } pgmagick-0.7.2/src/_DrawableCompositeImage.cpp0000644000076500000240000001037113153230470022325 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableCompositeImage_Wrapper: Magick::DrawableCompositeImage { Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, const std::string& p2): Magick::DrawableCompositeImage(p0, p1, p2), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, const Magick::Image& p2): Magick::DrawableCompositeImage(p0, p1, p2), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, const std::string& p4): Magick::DrawableCompositeImage(p0, p1, p2, p3, p4), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, const Magick::Image& p4): Magick::DrawableCompositeImage(p0, p1, p2, p3, p4), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, const std::string& p4, Magick::CompositeOperator p5): Magick::DrawableCompositeImage(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, const Magick::Image& p4, Magick::CompositeOperator p5): Magick::DrawableCompositeImage(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} Magick_DrawableCompositeImage_Wrapper(PyObject* py_self_, const Magick::DrawableCompositeImage& p0): Magick::DrawableCompositeImage(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableCompositeImage() { class_< Magick::DrawableCompositeImage, bases, Magick_DrawableCompositeImage_Wrapper >("DrawableCompositeImage", init< const Magick::DrawableCompositeImage& >()) .def(init< double, double, const std::string& >()) .def(init< double, double, const Magick::Image& >()) .def(init< double, double, double, double, const std::string& >()) .def(init< double, double, double, double, const Magick::Image& >()) .def(init< double, double, double, double, const std::string&, Magick::CompositeOperator >()) .def(init< double, double, double, double, const Magick::Image&, Magick::CompositeOperator >()) .def("composition", (void (Magick::DrawableCompositeImage::*)(Magick::CompositeOperator) )&Magick::DrawableCompositeImage::composition) .def("composition", (Magick::CompositeOperator (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::composition) .def("filename", (void (Magick::DrawableCompositeImage::*)(const std::string&) )&Magick::DrawableCompositeImage::filename) .def("filename", (std::string (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::filename) .def("x", (void (Magick::DrawableCompositeImage::*)(double) )&Magick::DrawableCompositeImage::x) .def("x", (double (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::x) .def("y", (void (Magick::DrawableCompositeImage::*)(double) )&Magick::DrawableCompositeImage::y) .def("y", (double (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::y) .def("width", (void (Magick::DrawableCompositeImage::*)(double) )&Magick::DrawableCompositeImage::width) .def("width", (double (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::width) .def("height", (void (Magick::DrawableCompositeImage::*)(double) )&Magick::DrawableCompositeImage::height) .def("height", (double (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::height) .def("image", (void (Magick::DrawableCompositeImage::*)(const Magick::Image&) )&Magick::DrawableCompositeImage::image) .def("image", (Magick::Image (Magick::DrawableCompositeImage::*)() const)&Magick::DrawableCompositeImage::image) .def("magick", (void (Magick::DrawableCompositeImage::*)(std::string) )&Magick::DrawableCompositeImage::magick) .def("magick", (std::string (Magick::DrawableCompositeImage::*)() )&Magick::DrawableCompositeImage::magick) ; } pgmagick-0.7.2/src/_DrawableDashArray.cpp0000644000076500000240000000224313153230470021275 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableDashArray_Wrapper: Magick::DrawableDashArray { Magick_DrawableDashArray_Wrapper(PyObject* py_self_, const double* p0): Magick::DrawableDashArray(p0), py_self(py_self_) {} #ifdef PGMAGICK_LIB_IMAGEMAGICK Magick_DrawableDashArray_Wrapper(PyObject* py_self_, const size_t* p0): #else Magick_DrawableDashArray_Wrapper(PyObject* py_self_, const unsigned int* p0): #endif Magick::DrawableDashArray(p0), py_self(py_self_) {} Magick_DrawableDashArray_Wrapper(PyObject* py_self_, const Magick::DrawableDashArray& p0): Magick::DrawableDashArray(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableDashArray() { class_< Magick::DrawableDashArray, bases, Magick_DrawableDashArray_Wrapper >("DrawableDashArray", init< const double* >()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def(init< const size_t* >()) #else .def(init< const unsigned int* >()) #endif .def(init< const Magick::DrawableDashArray& >()) ; } pgmagick-0.7.2/src/_DrawableDashOffset.cpp0000644000076500000240000000147613153230470021454 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableDashOffset_Wrapper: Magick::DrawableDashOffset { Magick_DrawableDashOffset_Wrapper(PyObject* py_self_, const double p0): Magick::DrawableDashOffset(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableDashOffset() { class_< Magick::DrawableDashOffset, bases, boost::noncopyable, Magick_DrawableDashOffset_Wrapper >("DrawableDashOffset", init< const double >()) .def("offset", (void (Magick::DrawableDashOffset::*)(const double) )&Magick::DrawableDashOffset::offset) .def("offset", (double (Magick::DrawableDashOffset::*)() const)&Magick::DrawableDashOffset::offset) ; } pgmagick-0.7.2/src/_DrawableEllipse.cpp0000644000076500000240000000361213153230470021015 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableEllipse_Wrapper: Magick::DrawableEllipse { Magick_DrawableEllipse_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, double p4, double p5): Magick::DrawableEllipse(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableEllipse() { class_< Magick::DrawableEllipse, bases, boost::noncopyable, Magick_DrawableEllipse_Wrapper >("DrawableEllipse", init< double, double, double, double, double, double >()) .def("originX", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::originX) .def("originX", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::originX) .def("originY", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::originY) .def("originY", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::originY) .def("radiusX", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::radiusX) .def("radiusX", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::radiusX) .def("radiusY", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::radiusY) .def("radiusY", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::radiusY) .def("arcStart", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::arcStart) .def("arcStart", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::arcStart) .def("arcEnd", (void (Magick::DrawableEllipse::*)(double) )&Magick::DrawableEllipse::arcEnd) .def("arcEnd", (double (Magick::DrawableEllipse::*)() const)&Magick::DrawableEllipse::arcEnd) ; } pgmagick-0.7.2/src/_DrawableFillColor.cpp0000644000076500000240000000201613153230470021302 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableFillColor_Wrapper: Magick::DrawableFillColor { Magick_DrawableFillColor_Wrapper(PyObject* py_self_, const Magick::Color& p0): Magick::DrawableFillColor(p0), py_self(py_self_) {} Magick_DrawableFillColor_Wrapper(PyObject* py_self_, const Magick::DrawableFillColor& p0): Magick::DrawableFillColor(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableFillColor() { class_< Magick::DrawableFillColor, bases, Magick_DrawableFillColor_Wrapper >("DrawableFillColor", init< const Magick::Color& >()) .def(init< const Magick::DrawableFillColor& >()) .def("color", (void (Magick::DrawableFillColor::*)(const Magick::Color&) )&Magick::DrawableFillColor::color) .def("color", (Magick::Color (Magick::DrawableFillColor::*)() const)&Magick::DrawableFillColor::color) ; } pgmagick-0.7.2/src/_DrawableFillOpacity.cpp0000644000076500000240000000147413153230470021643 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableFillOpacity_Wrapper: Magick::DrawableFillOpacity { Magick_DrawableFillOpacity_Wrapper(PyObject* py_self_, double p0): Magick::DrawableFillOpacity(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableFillOpacity() { class_< Magick::DrawableFillOpacity, bases, boost::noncopyable, Magick_DrawableFillOpacity_Wrapper >("DrawableFillOpacity", init< double >()) .def("opacity", (void (Magick::DrawableFillOpacity::*)(double) )&Magick::DrawableFillOpacity::opacity) .def("opacity", (double (Magick::DrawableFillOpacity::*)() const)&Magick::DrawableFillOpacity::opacity) ; } pgmagick-0.7.2/src/_DrawableFillRule.cpp0000644000076500000240000000152613153230470021140 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableFillRule_Wrapper: Magick::DrawableFillRule { Magick_DrawableFillRule_Wrapper(PyObject* py_self_, const Magick::FillRule p0): Magick::DrawableFillRule(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableFillRule() { class_< Magick::DrawableFillRule, bases, boost::noncopyable, Magick_DrawableFillRule_Wrapper >("DrawableFillRule", init< const Magick::FillRule >()) .def("fillRule", (void (Magick::DrawableFillRule::*)(const Magick::FillRule) )&Magick::DrawableFillRule::fillRule) .def("fillRule", (Magick::FillRule (Magick::DrawableFillRule::*)() const)&Magick::DrawableFillRule::fillRule) ; } pgmagick-0.7.2/src/_DrawableFont.cpp0000644000076500000240000000237013153230470020326 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableFont_Wrapper: Magick::DrawableFont { Magick_DrawableFont_Wrapper(PyObject* py_self_, const std::string& p0): Magick::DrawableFont(p0), py_self(py_self_) {} Magick_DrawableFont_Wrapper(PyObject* py_self_, const std::string& p0, Magick::StyleType p1, const long unsigned int p2, Magick::StretchType p3): Magick::DrawableFont(p0, p1, p2, p3), py_self(py_self_) {} Magick_DrawableFont_Wrapper(PyObject* py_self_, const Magick::DrawableFont& p0): Magick::DrawableFont(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableFont() { class_< Magick::DrawableFont, bases, Magick_DrawableFont_Wrapper >("DrawableFont", init< const std::string& >()) .def(init< const std::string&, Magick::StyleType, const long unsigned int, Magick::StretchType >()) .def(init< const Magick::DrawableFont& >()) .def("font", (void (Magick::DrawableFont::*)(const std::string&) )&Magick::DrawableFont::font) .def("font", (std::string (Magick::DrawableFont::*)() const)&Magick::DrawableFont::font) ; } pgmagick-0.7.2/src/_DrawableGravity.cpp0000644000076500000240000000150013153230470021037 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableGravity_Wrapper: Magick::DrawableGravity { Magick_DrawableGravity_Wrapper(PyObject* py_self_, Magick::GravityType p0): Magick::DrawableGravity(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableGravity() { class_< Magick::DrawableGravity, bases, boost::noncopyable, Magick_DrawableGravity_Wrapper >("DrawableGravity", init< Magick::GravityType >()) .def("gravity", (void (Magick::DrawableGravity::*)(Magick::GravityType) )&Magick::DrawableGravity::gravity) .def("gravity", (Magick::GravityType (Magick::DrawableGravity::*)() const)&Magick::DrawableGravity::gravity) ; } pgmagick-0.7.2/src/_DrawableLine.cpp0000644000076500000240000000252613153230470020312 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableLine_Wrapper: Magick::DrawableLine { Magick_DrawableLine_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3): Magick::DrawableLine(p0, p1, p2, p3), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableLine() { class_< Magick::DrawableLine, bases, boost::noncopyable, Magick_DrawableLine_Wrapper >("DrawableLine", init< double, double, double, double >()) .def("startX", (void (Magick::DrawableLine::*)(double) )&Magick::DrawableLine::startX) .def("startX", (double (Magick::DrawableLine::*)() const)&Magick::DrawableLine::startX) .def("startY", (void (Magick::DrawableLine::*)(double) )&Magick::DrawableLine::startY) .def("startY", (double (Magick::DrawableLine::*)() const)&Magick::DrawableLine::startY) .def("endX", (void (Magick::DrawableLine::*)(double) )&Magick::DrawableLine::endX) .def("endX", (double (Magick::DrawableLine::*)() const)&Magick::DrawableLine::endX) .def("endY", (void (Magick::DrawableLine::*)(double) )&Magick::DrawableLine::endY) .def("endY", (double (Magick::DrawableLine::*)() const)&Magick::DrawableLine::endY) ; } pgmagick-0.7.2/src/_DrawableMatte.cpp0000644000076500000240000000230413153230470020467 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableMatte_Wrapper: Magick::DrawableMatte { Magick_DrawableMatte_Wrapper(PyObject* py_self_, double p0, double p1, Magick::PaintMethod p2): Magick::DrawableMatte(p0, p1, p2), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableMatte() { class_< Magick::DrawableMatte, bases, boost::noncopyable, Magick_DrawableMatte_Wrapper >("DrawableMatte", init< double, double, Magick::PaintMethod >()) .def("x", (void (Magick::DrawableMatte::*)(double) )&Magick::DrawableMatte::x) .def("x", (double (Magick::DrawableMatte::*)() const)&Magick::DrawableMatte::x) .def("y", (void (Magick::DrawableMatte::*)(double) )&Magick::DrawableMatte::y) .def("y", (double (Magick::DrawableMatte::*)() const)&Magick::DrawableMatte::y) .def("paintMethod", (void (Magick::DrawableMatte::*)(Magick::PaintMethod) )&Magick::DrawableMatte::paintMethod) .def("paintMethod", (Magick::PaintMethod (Magick::DrawableMatte::*)() const)&Magick::DrawableMatte::paintMethod) ; } pgmagick-0.7.2/src/_DrawableMiterLimit.cpp0000644000076500000240000000260613153230470021501 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableMiterLimit_Wrapper: Magick::DrawableMiterLimit { #ifdef PGMAGICK_LIB_IMAGEMAGICK Magick_DrawableMiterLimit_Wrapper(PyObject* py_self_, size_t p0): #else Magick_DrawableMiterLimit_Wrapper(PyObject* py_self_, unsigned int p0): #endif Magick::DrawableMiterLimit(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableMiterLimit() { #ifdef PGMAGICK_LIB_IMAGEMAGICK class_< Magick::DrawableMiterLimit, bases, boost::noncopyable, Magick_DrawableMiterLimit_Wrapper >("DrawableMiterLimit", init< size_t >()) .def("miterlimit", (void (Magick::DrawableMiterLimit::*)(size_t) )&Magick::DrawableMiterLimit::miterlimit) .def("miterlimit", (size_t (Magick::DrawableMiterLimit::*)() const)&Magick::DrawableMiterLimit::miterlimit) ; #else class_< Magick::DrawableMiterLimit, bases, boost::noncopyable, Magick_DrawableMiterLimit_Wrapper >("DrawableMiterLimit", init< unsigned int >()) .def("miterlimit", (void (Magick::DrawableMiterLimit::*)(unsigned int) )&Magick::DrawableMiterLimit::miterlimit) .def("miterlimit", (unsigned int (Magick::DrawableMiterLimit::*)() const)&Magick::DrawableMiterLimit::miterlimit) ; #endif } pgmagick-0.7.2/src/_DrawablePath.cpp0000644000076500000240000000136613153230470020320 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePath_Wrapper: Magick::DrawablePath { Magick_DrawablePath_Wrapper(PyObject* py_self_, const Magick::VPathList& p0): Magick::DrawablePath(p0), py_self(py_self_) {} Magick_DrawablePath_Wrapper(PyObject* py_self_, const Magick::DrawablePath& p0): Magick::DrawablePath(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePath() { class_< Magick::DrawablePath, bases, Magick_DrawablePath_Wrapper >("DrawablePath", init< const Magick::VPathList& >()) .def(init< const Magick::DrawablePath& >()) ; } pgmagick-0.7.2/src/_DrawablePoint.cpp0000644000076500000240000000164213153230470020512 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePoint_Wrapper: Magick::DrawablePoint { Magick_DrawablePoint_Wrapper(PyObject* py_self_, double p0, double p1): Magick::DrawablePoint(p0, p1), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePoint() { class_< Magick::DrawablePoint, bases, boost::noncopyable, Magick_DrawablePoint_Wrapper >("DrawablePoint", init< double, double >()) .def("x", (void (Magick::DrawablePoint::*)(double) )&Magick::DrawablePoint::x) .def("x", (double (Magick::DrawablePoint::*)() const)&Magick::DrawablePoint::x) .def("y", (void (Magick::DrawablePoint::*)(double) )&Magick::DrawablePoint::y) .def("y", (double (Magick::DrawablePoint::*)() const)&Magick::DrawablePoint::y) ; } pgmagick-0.7.2/src/_DrawablePointSize.cpp0000644000076500000240000000145413153230470021346 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePointSize_Wrapper: Magick::DrawablePointSize { Magick_DrawablePointSize_Wrapper(PyObject* py_self_, double p0): Magick::DrawablePointSize(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePointSize() { class_< Magick::DrawablePointSize, bases, boost::noncopyable, Magick_DrawablePointSize_Wrapper >("DrawablePointSize", init< double >()) .def("pointSize", (void (Magick::DrawablePointSize::*)(double) )&Magick::DrawablePointSize::pointSize) .def("pointSize", (double (Magick::DrawablePointSize::*)() const)&Magick::DrawablePointSize::pointSize) ; } pgmagick-0.7.2/src/_DrawablePolygon.cpp0000644000076500000240000000144413153230470021050 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePolygon_Wrapper: Magick::DrawablePolygon { Magick_DrawablePolygon_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::DrawablePolygon(p0), py_self(py_self_) {} Magick_DrawablePolygon_Wrapper(PyObject* py_self_, const Magick::DrawablePolygon& p0): Magick::DrawablePolygon(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePolygon() { class_< Magick::DrawablePolygon, bases, Magick_DrawablePolygon_Wrapper >("DrawablePolygon", init< const Magick::CoordinateList& >()) .def(init< const Magick::DrawablePolygon& >()) ; } pgmagick-0.7.2/src/_DrawablePolyline.cpp0000644000076500000240000000146013153230470021212 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePolyline_Wrapper: Magick::DrawablePolyline { Magick_DrawablePolyline_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::DrawablePolyline(p0), py_self(py_self_) {} Magick_DrawablePolyline_Wrapper(PyObject* py_self_, const Magick::DrawablePolyline& p0): Magick::DrawablePolyline(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePolyline() { class_< Magick::DrawablePolyline, bases, Magick_DrawablePolyline_Wrapper >("DrawablePolyline", init< const Magick::CoordinateList& >()) .def(init< const Magick::DrawablePolyline& >()) ; } pgmagick-0.7.2/src/_DrawablePopClipPath.cpp0000644000076500000240000000111213153230470021574 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePopClipPath_Wrapper: Magick::DrawablePopClipPath { Magick_DrawablePopClipPath_Wrapper(PyObject* py_self_): Magick::DrawablePopClipPath(), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePopClipPath() { class_< Magick::DrawablePopClipPath, bases, boost::noncopyable, Magick_DrawablePopClipPath_Wrapper >("DrawablePopClipPath", init< >()) ; } pgmagick-0.7.2/src/_DrawablePopGraphicContext.cpp0000644000076500000240000000117213153230470023020 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePopGraphicContext_Wrapper: Magick::DrawablePopGraphicContext { Magick_DrawablePopGraphicContext_Wrapper(PyObject* py_self_): Magick::DrawablePopGraphicContext(), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePopGraphicContext() { class_< Magick::DrawablePopGraphicContext, bases, boost::noncopyable, Magick_DrawablePopGraphicContext_Wrapper >("DrawablePopGraphicContext", init< >()) ; } pgmagick-0.7.2/src/_DrawablePopPattern.cpp0000644000076500000240000000110213153230470021504 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePopPattern_Wrapper: Magick::DrawablePopPattern { Magick_DrawablePopPattern_Wrapper(PyObject* py_self_): Magick::DrawablePopPattern(), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePopPattern() { class_< Magick::DrawablePopPattern, bases, boost::noncopyable, Magick_DrawablePopPattern_Wrapper >("DrawablePopPattern", init< >()) ; } pgmagick-0.7.2/src/_DrawablePushClipPath.cpp0000644000076500000240000000151213153230470021761 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePushClipPath_Wrapper: Magick::DrawablePushClipPath { Magick_DrawablePushClipPath_Wrapper(PyObject* py_self_, const std::string& p0): Magick::DrawablePushClipPath(p0), py_self(py_self_) {} Magick_DrawablePushClipPath_Wrapper(PyObject* py_self_, const Magick::DrawablePushClipPath& p0): Magick::DrawablePushClipPath(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePushClipPath() { class_< Magick::DrawablePushClipPath, bases, Magick_DrawablePushClipPath_Wrapper >("DrawablePushClipPath", init< const std::string& >()) .def(init< const Magick::DrawablePushClipPath& >()) ; } pgmagick-0.7.2/src/_DrawablePushGraphicContext.cpp0000644000076500000240000000120213153230470023173 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePushGraphicContext_Wrapper: Magick::DrawablePushGraphicContext { Magick_DrawablePushGraphicContext_Wrapper(PyObject* py_self_): Magick::DrawablePushGraphicContext(), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePushGraphicContext() { class_< Magick::DrawablePushGraphicContext, bases, boost::noncopyable, Magick_DrawablePushGraphicContext_Wrapper >("DrawablePushGraphicContext", init< >()) ; } pgmagick-0.7.2/src/_DrawablePushPattern.cpp0000644000076500000240000000165213153230470021677 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawablePushPattern_Wrapper: Magick::DrawablePushPattern { Magick_DrawablePushPattern_Wrapper(PyObject* py_self_, const std::string& p0, long int p1, long int p2, long int p3, long int p4): Magick::DrawablePushPattern(p0, p1, p2, p3, p4), py_self(py_self_) {} Magick_DrawablePushPattern_Wrapper(PyObject* py_self_, const Magick::DrawablePushPattern& p0): Magick::DrawablePushPattern(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawablePushPattern() { class_< Magick::DrawablePushPattern, bases, Magick_DrawablePushPattern_Wrapper >("DrawablePushPattern", init< const Magick::DrawablePushPattern& >()) .def(init< const std::string&, long int, long int, long int, long int >()) ; } pgmagick-0.7.2/src/_DrawableRectangle.cpp0000644000076500000240000000304613153230470021325 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableRectangle_Wrapper: Magick::DrawableRectangle { Magick_DrawableRectangle_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3): Magick::DrawableRectangle(p0, p1, p2, p3), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableRectangle() { class_< Magick::DrawableRectangle, bases, boost::noncopyable, Magick_DrawableRectangle_Wrapper >("DrawableRectangle", init< double, double, double, double >()) .def("upperLeftX", (void (Magick::DrawableRectangle::*)(double) )&Magick::DrawableRectangle::upperLeftX) .def("upperLeftX", (double (Magick::DrawableRectangle::*)() const)&Magick::DrawableRectangle::upperLeftX) .def("upperLeftY", (void (Magick::DrawableRectangle::*)(double) )&Magick::DrawableRectangle::upperLeftY) .def("upperLeftY", (double (Magick::DrawableRectangle::*)() const)&Magick::DrawableRectangle::upperLeftY) .def("lowerRightX", (void (Magick::DrawableRectangle::*)(double) )&Magick::DrawableRectangle::lowerRightX) .def("lowerRightX", (double (Magick::DrawableRectangle::*)() const)&Magick::DrawableRectangle::lowerRightX) .def("lowerRightY", (void (Magick::DrawableRectangle::*)(double) )&Magick::DrawableRectangle::lowerRightY) .def("lowerRightY", (double (Magick::DrawableRectangle::*)() const)&Magick::DrawableRectangle::lowerRightY) ; } pgmagick-0.7.2/src/_DrawableRotation.cpp0000644000076500000240000000142013153230470021212 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableRotation_Wrapper: Magick::DrawableRotation { Magick_DrawableRotation_Wrapper(PyObject* py_self_, double p0): Magick::DrawableRotation(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableRotation() { class_< Magick::DrawableRotation, bases, boost::noncopyable, Magick_DrawableRotation_Wrapper >("DrawableRotation", init< double >()) .def("angle", (void (Magick::DrawableRotation::*)(double) )&Magick::DrawableRotation::angle) .def("angle", (double (Magick::DrawableRotation::*)() const)&Magick::DrawableRotation::angle) ; } pgmagick-0.7.2/src/_DrawableRoundRectangle.cpp0000644000076500000240000000417613153230470022342 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableRoundRectangle_Wrapper: Magick::DrawableRoundRectangle { Magick_DrawableRoundRectangle_Wrapper(PyObject* py_self_, double p0, double p1, double p2, double p3, double p4, double p5): Magick::DrawableRoundRectangle(p0, p1, p2, p3, p4, p5), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableRoundRectangle() { class_< Magick::DrawableRoundRectangle, bases, boost::noncopyable, Magick_DrawableRoundRectangle_Wrapper >("DrawableRoundRectangle", init< double, double, double, double, double, double >()) .def("centerX", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::centerX) .def("centerX", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::centerX) .def("centerY", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::centerY) .def("centerY", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::centerY) .def("width", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::width) .def("width", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::width) .def("hight", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::hight) .def("hight", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::hight) .def("cornerWidth", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::cornerWidth) .def("cornerWidth", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::cornerWidth) .def("cornerHeight", (void (Magick::DrawableRoundRectangle::*)(double) )&Magick::DrawableRoundRectangle::cornerHeight) .def("cornerHeight", (double (Magick::DrawableRoundRectangle::*)() const)&Magick::DrawableRoundRectangle::cornerHeight) ; } pgmagick-0.7.2/src/_DrawableScaling.cpp0000644000076500000240000000170213153230470020776 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableScaling_Wrapper: Magick::DrawableScaling { Magick_DrawableScaling_Wrapper(PyObject* py_self_, double p0, double p1): Magick::DrawableScaling(p0, p1), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableScaling() { class_< Magick::DrawableScaling, bases, boost::noncopyable, Magick_DrawableScaling_Wrapper >("DrawableScaling", init< double, double >()) .def("x", (void (Magick::DrawableScaling::*)(double) )&Magick::DrawableScaling::x) .def("x", (double (Magick::DrawableScaling::*)() const)&Magick::DrawableScaling::x) .def("y", (void (Magick::DrawableScaling::*)(double) )&Magick::DrawableScaling::y) .def("y", (double (Magick::DrawableScaling::*)() const)&Magick::DrawableScaling::y) ; } pgmagick-0.7.2/src/_DrawableSkewX.cpp0000644000076500000240000000135413153230470020462 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableSkewX_Wrapper: Magick::DrawableSkewX { Magick_DrawableSkewX_Wrapper(PyObject* py_self_, double p0): Magick::DrawableSkewX(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableSkewX() { class_< Magick::DrawableSkewX, bases, boost::noncopyable, Magick_DrawableSkewX_Wrapper >("DrawableSkewX", init< double >()) .def("angle", (void (Magick::DrawableSkewX::*)(double) )&Magick::DrawableSkewX::angle) .def("angle", (double (Magick::DrawableSkewX::*)() const)&Magick::DrawableSkewX::angle) ; } pgmagick-0.7.2/src/_DrawableSkewY.cpp0000644000076500000240000000135413153230470020463 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableSkewY_Wrapper: Magick::DrawableSkewY { Magick_DrawableSkewY_Wrapper(PyObject* py_self_, double p0): Magick::DrawableSkewY(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableSkewY() { class_< Magick::DrawableSkewY, bases, boost::noncopyable, Magick_DrawableSkewY_Wrapper >("DrawableSkewY", init< double >()) .def("angle", (void (Magick::DrawableSkewY::*)(double) )&Magick::DrawableSkewY::angle) .def("angle", (double (Magick::DrawableSkewY::*)() const)&Magick::DrawableSkewY::angle) ; } pgmagick-0.7.2/src/_DrawableStrokeAntialias.cpp0000644000076500000240000000153013153230470022512 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeAntialias_Wrapper: Magick::DrawableStrokeAntialias { Magick_DrawableStrokeAntialias_Wrapper(PyObject* py_self_, bool p0): Magick::DrawableStrokeAntialias(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeAntialias() { class_< Magick::DrawableStrokeAntialias, bases, boost::noncopyable, Magick_DrawableStrokeAntialias_Wrapper >("DrawableStrokeAntialias", init< bool >()) .def("flag", (void (Magick::DrawableStrokeAntialias::*)(bool) )&Magick::DrawableStrokeAntialias::flag) .def("flag", (bool (Magick::DrawableStrokeAntialias::*)() const)&Magick::DrawableStrokeAntialias::flag) ; } pgmagick-0.7.2/src/_DrawableStrokeColor.cpp0000644000076500000240000000205613153230470021667 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeColor_Wrapper: Magick::DrawableStrokeColor { Magick_DrawableStrokeColor_Wrapper(PyObject* py_self_, const Magick::Color& p0): Magick::DrawableStrokeColor(p0), py_self(py_self_) {} Magick_DrawableStrokeColor_Wrapper(PyObject* py_self_, const Magick::DrawableStrokeColor& p0): Magick::DrawableStrokeColor(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeColor() { class_< Magick::DrawableStrokeColor, bases, Magick_DrawableStrokeColor_Wrapper >("DrawableStrokeColor", init< const Magick::Color& >()) .def(init< const Magick::DrawableStrokeColor& >()) .def("color", (void (Magick::DrawableStrokeColor::*)(const Magick::Color&) )&Magick::DrawableStrokeColor::color) .def("color", (Magick::Color (Magick::DrawableStrokeColor::*)() const)&Magick::DrawableStrokeColor::color) ; } pgmagick-0.7.2/src/_DrawableStrokeLineCap.cpp0000644000076500000240000000157013153230470022124 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeLineCap_Wrapper: Magick::DrawableStrokeLineCap { Magick_DrawableStrokeLineCap_Wrapper(PyObject* py_self_, Magick::LineCap p0): Magick::DrawableStrokeLineCap(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeLineCap() { class_< Magick::DrawableStrokeLineCap, bases, boost::noncopyable, Magick_DrawableStrokeLineCap_Wrapper >("DrawableStrokeLineCap", init< Magick::LineCap >()) .def("linecap", (void (Magick::DrawableStrokeLineCap::*)(Magick::LineCap) )&Magick::DrawableStrokeLineCap::linecap) .def("linecap", (Magick::LineCap (Magick::DrawableStrokeLineCap::*)() const)&Magick::DrawableStrokeLineCap::linecap) ; } pgmagick-0.7.2/src/_DrawableStrokeLineJoin.cpp0000644000076500000240000000161413153230470022317 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeLineJoin_Wrapper: Magick::DrawableStrokeLineJoin { Magick_DrawableStrokeLineJoin_Wrapper(PyObject* py_self_, Magick::LineJoin p0): Magick::DrawableStrokeLineJoin(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeLineJoin() { class_< Magick::DrawableStrokeLineJoin, bases, boost::noncopyable, Magick_DrawableStrokeLineJoin_Wrapper >("DrawableStrokeLineJoin", init< Magick::LineJoin >()) .def("linejoin", (void (Magick::DrawableStrokeLineJoin::*)(Magick::LineJoin) )&Magick::DrawableStrokeLineJoin::linejoin) .def("linejoin", (Magick::LineJoin (Magick::DrawableStrokeLineJoin::*)() const)&Magick::DrawableStrokeLineJoin::linejoin) ; } pgmagick-0.7.2/src/_DrawableStrokeOpacity.cpp0000644000076500000240000000152413153230470022220 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeOpacity_Wrapper: Magick::DrawableStrokeOpacity { Magick_DrawableStrokeOpacity_Wrapper(PyObject* py_self_, double p0): Magick::DrawableStrokeOpacity(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeOpacity() { class_< Magick::DrawableStrokeOpacity, bases, boost::noncopyable, Magick_DrawableStrokeOpacity_Wrapper >("DrawableStrokeOpacity", init< double >()) .def("opacity", (void (Magick::DrawableStrokeOpacity::*)(double) )&Magick::DrawableStrokeOpacity::opacity) .def("opacity", (double (Magick::DrawableStrokeOpacity::*)() const)&Magick::DrawableStrokeOpacity::opacity) ; } pgmagick-0.7.2/src/_DrawableStrokeWidth.cpp0000644000076500000240000000146413153230470021672 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableStrokeWidth_Wrapper: Magick::DrawableStrokeWidth { Magick_DrawableStrokeWidth_Wrapper(PyObject* py_self_, double p0): Magick::DrawableStrokeWidth(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableStrokeWidth() { class_< Magick::DrawableStrokeWidth, bases, boost::noncopyable, Magick_DrawableStrokeWidth_Wrapper >("DrawableStrokeWidth", init< double >()) .def("width", (void (Magick::DrawableStrokeWidth::*)(double) )&Magick::DrawableStrokeWidth::width) .def("width", (double (Magick::DrawableStrokeWidth::*)() const)&Magick::DrawableStrokeWidth::width) ; } pgmagick-0.7.2/src/_DrawableText.cpp0000644000076500000240000000325413153230470020346 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableText_Wrapper: Magick::DrawableText { Magick_DrawableText_Wrapper(PyObject* py_self_, const double p0, const double p1, const std::string& p2): Magick::DrawableText(p0, p1, p2), py_self(py_self_) {} Magick_DrawableText_Wrapper(PyObject* py_self_, const double p0, const double p1, const std::string& p2, const std::string& p3): Magick::DrawableText(p0, p1, p2, p3), py_self(py_self_) {} Magick_DrawableText_Wrapper(PyObject* py_self_, const Magick::DrawableText& p0): Magick::DrawableText(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableText() { class_< Magick::DrawableText, bases, Magick_DrawableText_Wrapper >("DrawableText", init< const Magick::DrawableText& >()) .def(init< const double, const double, const std::string& >()) .def(init< const double, const double, const std::string&, const std::string& >()) .def("encoding", &Magick::DrawableText::encoding) .def("x", (void (Magick::DrawableText::*)(double) )&Magick::DrawableText::x) .def("x", (double (Magick::DrawableText::*)() const)&Magick::DrawableText::x) .def("y", (void (Magick::DrawableText::*)(double) )&Magick::DrawableText::y) .def("y", (double (Magick::DrawableText::*)() const)&Magick::DrawableText::y) .def("text", (void (Magick::DrawableText::*)(const std::string&) )&Magick::DrawableText::text) .def("text", (std::string (Magick::DrawableText::*)() const)&Magick::DrawableText::text) ; } pgmagick-0.7.2/src/_DrawableTextAntialias.cpp0000644000076500000240000000202113153230470022163 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableTextAntialias_Wrapper: Magick::DrawableTextAntialias { Magick_DrawableTextAntialias_Wrapper(PyObject* py_self_, bool p0): Magick::DrawableTextAntialias(p0), py_self(py_self_) {} Magick_DrawableTextAntialias_Wrapper(PyObject* py_self_, const Magick::DrawableTextAntialias& p0): Magick::DrawableTextAntialias(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableTextAntialias() { class_< Magick::DrawableTextAntialias, bases, Magick_DrawableTextAntialias_Wrapper >("DrawableTextAntialias", init< bool >()) .def(init< const Magick::DrawableTextAntialias& >()) .def("flag", (void (Magick::DrawableTextAntialias::*)(bool) )&Magick::DrawableTextAntialias::flag) .def("flag", (bool (Magick::DrawableTextAntialias::*)() const)&Magick::DrawableTextAntialias::flag) ; } pgmagick-0.7.2/src/_DrawableTextDecoration.cpp0000644000076500000240000000220113153230470022345 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableTextDecoration_Wrapper: Magick::DrawableTextDecoration { Magick_DrawableTextDecoration_Wrapper(PyObject* py_self_, Magick::DecorationType p0): Magick::DrawableTextDecoration(p0), py_self(py_self_) {} Magick_DrawableTextDecoration_Wrapper(PyObject* py_self_, const Magick::DrawableTextDecoration& p0): Magick::DrawableTextDecoration(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableTextDecoration() { class_< Magick::DrawableTextDecoration, bases, Magick_DrawableTextDecoration_Wrapper >("DrawableTextDecoration", init< Magick::DecorationType >()) .def(init< const Magick::DrawableTextDecoration& >()) .def("decoration", (void (Magick::DrawableTextDecoration::*)(Magick::DecorationType) )&Magick::DrawableTextDecoration::decoration) .def("decoration", (Magick::DecorationType (Magick::DrawableTextDecoration::*)() const)&Magick::DrawableTextDecoration::decoration) ; } pgmagick-0.7.2/src/_DrawableTextUnderColor.cpp0000644000076500000240000000213613153230470022341 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableTextUnderColor_Wrapper: Magick::DrawableTextUnderColor { Magick_DrawableTextUnderColor_Wrapper(PyObject* py_self_, const Magick::Color& p0): Magick::DrawableTextUnderColor(p0), py_self(py_self_) {} Magick_DrawableTextUnderColor_Wrapper(PyObject* py_self_, const Magick::DrawableTextUnderColor& p0): Magick::DrawableTextUnderColor(p0), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableTextUnderColor() { class_< Magick::DrawableTextUnderColor, bases, Magick_DrawableTextUnderColor_Wrapper >("DrawableTextUnderColor", init< const Magick::Color& >()) .def(init< const Magick::DrawableTextUnderColor& >()) .def("color", (void (Magick::DrawableTextUnderColor::*)(const Magick::Color&) )&Magick::DrawableTextUnderColor::color) .def("color", (Magick::Color (Magick::DrawableTextUnderColor::*)() const)&Magick::DrawableTextUnderColor::color) ; } pgmagick-0.7.2/src/_DrawableTranslation.cpp0000644000076500000240000000200213153230470021706 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableTranslation_Wrapper: Magick::DrawableTranslation { Magick_DrawableTranslation_Wrapper(PyObject* py_self_, double p0, double p1): Magick::DrawableTranslation(p0, p1), py_self(py_self_) {} PyObject* py_self; }; } void __DrawableTranslation() { class_< Magick::DrawableTranslation, bases, boost::noncopyable, Magick_DrawableTranslation_Wrapper >("DrawableTranslation", init< double, double >()) .def("x", (void (Magick::DrawableTranslation::*)(double) )&Magick::DrawableTranslation::x) .def("x", (double (Magick::DrawableTranslation::*)() const)&Magick::DrawableTranslation::x) .def("y", (void (Magick::DrawableTranslation::*)(double) )&Magick::DrawableTranslation::y) .def("y", (double (Magick::DrawableTranslation::*)() const)&Magick::DrawableTranslation::y) ; } pgmagick-0.7.2/src/_DrawableViewbox.cpp0000644000076500000240000000532113153230470021042 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_DrawableViewbox_Wrapper: Magick::DrawableViewbox { #ifdef PGMAGICK_LIB_IMAGEMAGICK Magick_DrawableViewbox_Wrapper(PyObject* py_self_, ::ssize_t p0, ::ssize_t p1, ::ssize_t p2, ::ssize_t p3): Magick::DrawableViewbox(p0, p1, p2, p3), py_self(py_self_) {} #else Magick_DrawableViewbox_Wrapper(PyObject* py_self_, long unsigned int p0, long unsigned int p1, long unsigned int p2, long unsigned int p3): Magick::DrawableViewbox(p0, p1, p2, p3), py_self(py_self_) {} #endif PyObject* py_self; }; } void __DrawableViewbox() { #ifdef PGMAGICK_LIB_IMAGEMAGICK class_< Magick::DrawableViewbox, bases, boost::noncopyable, Magick_DrawableViewbox_Wrapper >("DrawableViewbox", init< ::ssize_t, ::ssize_t, ::ssize_t, ::ssize_t >()) .def("x1", (void (Magick::DrawableViewbox::*)(::ssize_t) )&Magick::DrawableViewbox::x1) .def("x1", (::ssize_t (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::x1) .def("y1", (void (Magick::DrawableViewbox::*)(::ssize_t) )&Magick::DrawableViewbox::y1) .def("y1", (::ssize_t (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::y1) .def("x2", (void (Magick::DrawableViewbox::*)(::ssize_t) )&Magick::DrawableViewbox::x2) .def("x2", (::ssize_t (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::x2) .def("y2", (void (Magick::DrawableViewbox::*)(::ssize_t) )&Magick::DrawableViewbox::y2) .def("y2", (::ssize_t (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::y2) #else class_< Magick::DrawableViewbox, bases, boost::noncopyable, Magick_DrawableViewbox_Wrapper >("DrawableViewbox", init< long unsigned int, long unsigned int, long unsigned int, long unsigned int >()) .def("x1", (void (Magick::DrawableViewbox::*)(unsigned long) )&Magick::DrawableViewbox::x1) .def("x1", (unsigned long (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::x1) .def("y1", (void (Magick::DrawableViewbox::*)(unsigned long) )&Magick::DrawableViewbox::y1) .def("y1", (unsigned long (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::y1) .def("x2", (void (Magick::DrawableViewbox::*)(unsigned long) )&Magick::DrawableViewbox::x2) .def("x2", (unsigned long (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::x2) .def("y2", (void (Magick::DrawableViewbox::*)(unsigned long) )&Magick::DrawableViewbox::y2) .def("y2", (unsigned long (Magick::DrawableViewbox::*)() const)&Magick::DrawableViewbox::y2) #endif ; } pgmagick-0.7.2/src/_EndianType.cpp0000644000076500000240000000053713153230470020021 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __EndianType() { enum_< Magick::EndianType >("EndianType") .value("UndefinedEndian", Magick::UndefinedEndian) .value("LSBEndian", Magick::LSBEndian) .value("MSBEndian", Magick::MSBEndian) ; } pgmagick-0.7.2/src/_Exception.cpp0000644000076500000240000000202313153230470017707 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; namespace { struct Magick_Exception_Wrapper: Magick::Exception { Magick_Exception_Wrapper(PyObject* py_self_, const std::string& p0): Magick::Exception(p0), py_self(py_self_) {} Magick_Exception_Wrapper(PyObject* py_self_, const Magick::Exception& p0): Magick::Exception(p0), py_self(py_self_) {} const char* what() const throw() { return call_method< const char* >(py_self, "what"); } const char* default_what() const { return Magick::Exception::what(); } PyObject* py_self; }; } void __Exception() { class_< Magick::Exception, Magick_Exception_Wrapper >("Exception", init< const std::string& >()) .def(init< const Magick::Exception& >()) .def("what", (const char* (Magick::Exception::*)() const throw())&Magick::Exception::what, (const char* (Magick_Exception_Wrapper::*)() const)&Magick_Exception_Wrapper::default_what) ; } pgmagick-0.7.2/src/_FillRule.cpp0000644000076500000240000000053513153230470017475 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __FillRule() { enum_< Magick::FillRule >("FillRule") .value("UndefinedRule", Magick::UndefinedRule) .value("EvenOddRule", Magick::EvenOddRule) .value("NonZeroRule", Magick::NonZeroRule) ; } pgmagick-0.7.2/src/_FilterTypes.cpp0000644000076500000240000000205713153230470020232 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __FilterTypes() { enum_< Magick::FilterTypes >("FilterTypes") .value("UndefinedFilter", Magick::UndefinedFilter) .value("PointFilter", Magick::PointFilter) .value("BoxFilter", Magick::BoxFilter) .value("TriangleFilter", Magick::TriangleFilter) .value("HermiteFilter", Magick::HermiteFilter) .value("HanningFilter", Magick::HanningFilter) .value("HammingFilter", Magick::HammingFilter) .value("BlackmanFilter", Magick::BlackmanFilter) .value("GaussianFilter", Magick::GaussianFilter) .value("QuadraticFilter", Magick::QuadraticFilter) .value("CubicFilter", Magick::CubicFilter) .value("CatromFilter", Magick::CatromFilter) .value("MitchellFilter", Magick::MitchellFilter) .value("LanczosFilter", Magick::LanczosFilter) .value("BesselFilter", Magick::BesselFilter) .value("SincFilter", Magick::SincFilter) ; } pgmagick-0.7.2/src/_Geometry.cpp0000644000076500000240000000654413153230470017560 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __Geometry() { class_< Magick::Geometry >("Geometry", init< >()) .def(init< unsigned int, unsigned int, optional< unsigned int, unsigned int, bool, bool > >()) .def(init< const std::string& >()) .def(init< const char* >()) .def(init< const Magick::Geometry& >()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("width", (void (Magick::Geometry::*)(size_t) )&Magick::Geometry::width) .def("width", (size_t (Magick::Geometry::*)() const)&Magick::Geometry::width) .def("height", (void (Magick::Geometry::*)(size_t) )&Magick::Geometry::height) .def("height", (size_t (Magick::Geometry::*)() const)&Magick::Geometry::height) .def("xOff", (void (Magick::Geometry::*)(::ssize_t) )&Magick::Geometry::xOff) .def("xOff", (::ssize_t (Magick::Geometry::*)() const)&Magick::Geometry::xOff) .def("yOff", (void (Magick::Geometry::*)(::ssize_t) )&Magick::Geometry::yOff) .def("yOff", (::ssize_t (Magick::Geometry::*)() const)&Magick::Geometry::yOff) #else .def("width", (void (Magick::Geometry::*)(unsigned int) )&Magick::Geometry::width) .def("width", (unsigned int (Magick::Geometry::*)() const)&Magick::Geometry::width) .def("height", (void (Magick::Geometry::*)(unsigned int) )&Magick::Geometry::height) .def("height", (unsigned int (Magick::Geometry::*)() const)&Magick::Geometry::height) .def("xOff", (void (Magick::Geometry::*)(unsigned int) )&Magick::Geometry::xOff) .def("xOff", (unsigned int (Magick::Geometry::*)() const)&Magick::Geometry::xOff) .def("yOff", (void (Magick::Geometry::*)(unsigned int) )&Magick::Geometry::yOff) .def("yOff", (unsigned int (Magick::Geometry::*)() const)&Magick::Geometry::yOff) #endif .def("xNegative", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::xNegative) .def("xNegative", (bool (Magick::Geometry::*)() const)&Magick::Geometry::xNegative) .def("yNegative", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::yNegative) .def("yNegative", (bool (Magick::Geometry::*)() const)&Magick::Geometry::yNegative) .def("percent", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::percent) .def("percent", (bool (Magick::Geometry::*)() const)&Magick::Geometry::percent) .def("aspect", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::aspect) .def("aspect", (bool (Magick::Geometry::*)() const)&Magick::Geometry::aspect) .def("greater", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::greater) .def("greater", (bool (Magick::Geometry::*)() const)&Magick::Geometry::greater) .def("less", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::less) .def("less", (bool (Magick::Geometry::*)() const)&Magick::Geometry::less) .def("isValid", (void (Magick::Geometry::*)(bool) )&Magick::Geometry::isValid) .def("isValid", (bool (Magick::Geometry::*)() const)&Magick::Geometry::isValid) .def( self <= self ) .def( self == self ) .def( self > self ) .def( self != self ) .def( self < self ) .def( self >= self ) .def("to_std_string", &Magick::Geometry::operator std::string) ; implicitly_convertible(); } pgmagick-0.7.2/src/_gminfo.cpp0000644000076500000240000000075613153230470017243 0ustar hattori-hstaff00000000000000#include using namespace boost::python; #define _LIB_NAME "GraphicsMagick" #ifndef _LIBRARY_VERSION #define _LIBRARY_VERSION "0.0.0" #ifdef PGMAGICK_LIB_IMAGEMAGICK #undef _LIB_NAME #define _LIB_NAME "ImageMagick" #endif #endif const char* get_version(void) { return _LIBRARY_VERSION; } const char* get_library(void) { return _LIB_NAME; } void __gminfo() { def("get_version", get_version); def("get_library", get_library); } pgmagick-0.7.2/src/_GravityType.cpp0000644000076500000240000000146213153230470020246 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __GravityType() { enum_< Magick::GravityType >("GravityType") .value("ForgetGravity", Magick::ForgetGravity) .value("NorthWestGravity", Magick::NorthWestGravity) .value("NorthGravity", Magick::NorthGravity) .value("NorthEastGravity", Magick::NorthEastGravity) .value("WestGravity", Magick::WestGravity) .value("CenterGravity", Magick::CenterGravity) .value("EastGravity", Magick::EastGravity) .value("SouthWestGravity", Magick::SouthWestGravity) .value("SouthGravity", Magick::SouthGravity) .value("SouthEastGravity", Magick::SouthEastGravity) .value("StaticGravity", Magick::StaticGravity) ; } pgmagick-0.7.2/src/_Image.cpp0000644000076500000240000012515413200030361016774 0ustar hattori-hstaff00000000000000#include #include #include #include #include #include #include "_Pixels.h" using namespace boost::python; namespace { BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_blur_overloads_0_2, blur, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_blurChannel_overloads_1_3, blurChannel, 1, 3) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_border_overloads_0_1, border, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_charcoal_overloads_0_2, charcoal, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_composite_overloads_3_4, composite, 3, 4) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_composite_overloads_2_3, composite, 2, 3) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_edge_overloads_0_1, edge, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_emboss_overloads_0_2, emboss, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_frame_overloads_0_1, frame, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_frame_overloads_2_4, frame, 2, 4) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_map_overloads_1_2, map, 1, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_medianFilter_overloads_0_1, medianFilter, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_negate_overloads_0_1, negate, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_oilPaint_overloads_0_1, oilPaint, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_quantize_overloads_0_1, quantize, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_raise_overloads_0_2, raise, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_segment_overloads_0_2, segment, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_shade_overloads_0_3, shade, 0, 3) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_sharpen_overloads_0_2, sharpen, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_sharpenChannel_overloads_1_3, sharpenChannel, 1, 3) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_solarize_overloads_0_1, solarize, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_spread_overloads_0_1, spread, 0, 1) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_wave_overloads_0_2, wave, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_signature_overloads_0_1, signature, 0, 1) #ifndef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_22 BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_adaptiveThreshold_overloads_2_3, adaptiveThreshold, 2, 3) #endif #ifdef PGMAGICK_LIB_IMAGEMAGICK BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_adaptiveBlur_overloads_0_2, adaptiveBlur, 0, 2) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_distort_overloads_3_4, distort, 3, 4) BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_Image_sigmoidalContrast_overloads_2_3, sigmoidalContrast, 2, 3) #endif } PixelPacketConstArrayProxy get_const_pixels(const Magick::Image* image, int x, int y, unsigned int columns, unsigned int rows) { const Magick::PixelPacket* cache = image->getConstPixels(x, y, columns, rows); return PixelPacketConstArrayProxy(cache, columns*rows, *image); } PixelPacketArrayProxy get_pixels(Magick::Image* image, int x, int y, unsigned int columns, unsigned int rows) { Magick::PixelPacket* cache = image->getPixels(x, y, columns, rows); return PixelPacketArrayProxy(cache, columns*rows, *image); } PixelPacketArrayProxy set_pixels(Magick::Image* image, int x, int y, unsigned int columns, unsigned int rows) { Magick::PixelPacket* cache = image->setPixels(x, y, columns, rows); return PixelPacketArrayProxy(cache, columns*rows, *image); } std::map get_color_histogram(const Magick::Image image) { std::map histogram; colorHistogram( &histogram, image ); return histogram; } void __Image() { def("InitializeMagick", Magick::InitializeMagick); class_ >("ColorHistogram") .def(boost::python::map_indexing_suite >()) ; class_< Magick::Image >("Image", init< >()) .def(init< const std::string& >()) .def(init< const Magick::Geometry&, const Magick::Color& >()) .def(init< const Magick::Blob& >()) .def(init< const Magick::Blob&, const Magick::Geometry& >()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def(init< const Magick::Blob&, const Magick::Geometry&, const size_t >()) .def(init< const Magick::Blob&, const Magick::Geometry&, const size_t, const std::string& >()) #else .def(init< const Magick::Blob&, const Magick::Geometry&, const unsigned int >()) .def(init< const Magick::Blob&, const Magick::Geometry&, const unsigned int, const std::string& >()) #endif .def(init< const Magick::Blob&, const Magick::Geometry&, const std::string& >()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def(init< const size_t, const size_t, const std::string&, const Magick::StorageType, const char* >()) #else .def(init< const unsigned int, const unsigned int, const std::string&, const Magick::StorageType, const char* >()) #endif .def(init< const Magick::Image& >()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("adaptiveBlur", &Magick::Image::adaptiveBlur, Magick_Image_adaptiveBlur_overloads_0_2()) #endif #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_22 .def("adaptiveThreshold", (void (Magick::Image::*)(const unsigned int, const unsigned int, const double) )&Magick::Image::adaptiveThreshold) #else .def("adaptiveThreshold", &Magick::Image::adaptiveThreshold, Magick_Image_adaptiveThreshold_overloads_2_3()) #endif .def("addNoise", &Magick::Image::addNoise) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("addNoiseChannel", &Magick::Image::addNoiseChannel) #endif .def("affineTransform", &Magick::Image::affineTransform) .def("annotate", (void (Magick::Image::*)(const std::string&, const Magick::Geometry&) )&Magick::Image::annotate) .def("annotate", (void (Magick::Image::*)(const std::string&, const Magick::Geometry&, const Magick::GravityType) )&Magick::Image::annotate) .def("annotate", (void (Magick::Image::*)(const std::string&, const Magick::Geometry&, const Magick::GravityType, const double) )&Magick::Image::annotate) .def("annotate", (void (Magick::Image::*)(const std::string&, const Magick::GravityType) )&Magick::Image::annotate) .def("blur", &Magick::Image::blur, Magick_Image_blur_overloads_0_2()) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("blurChannel", &Magick::Image::blurChannel, Magick_Image_blurChannel_overloads_1_3()) #endif .def("border", &Magick::Image::border, Magick_Image_border_overloads_0_1()) .def("channel", &Magick::Image::channel) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("channelDepth", (void (Magick::Image::*)(const Magick::ChannelType, const size_t) )&Magick::Image::channelDepth) .def("channelDepth", (size_t (Magick::Image::*)(const Magick::ChannelType) )&Magick::Image::channelDepth) #else .def("channelDepth", (void (Magick::Image::*)(const Magick::ChannelType, const unsigned int) )&Magick::Image::channelDepth) .def("channelDepth", (unsigned int (Magick::Image::*)(const Magick::ChannelType) )&Magick::Image::channelDepth) #endif .def("charcoal", &Magick::Image::charcoal, Magick_Image_charcoal_overloads_0_2()) .def("chop", &Magick::Image::chop) .def("colorize", (void (Magick::Image::*)(const unsigned int, const unsigned int, const unsigned int, const Magick::Color&) )&Magick::Image::colorize) .def("colorize", (void (Magick::Image::*)(const unsigned int, const Magick::Color&) )&Magick::Image::colorize) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_6 .def("colorMatrix", (void (Magick::Image::*)(const unsigned int, const double*) )&Magick::Image::colorMatrix) #endif .def("comment", (void (Magick::Image::*)(const std::string&) )&Magick::Image::comment) .def("compare", &Magick::Image::compare) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("composite", (void (Magick::Image::*)(const Magick::Image&, const ::ssize_t, const ::ssize_t, const Magick::CompositeOperator))&Magick::Image::composite, Magick_Image_composite_overloads_3_4()) #else .def("composite", (void (Magick::Image::*)(const Magick::Image&, const int, const int, const Magick::CompositeOperator))&Magick::Image::composite, Magick_Image_composite_overloads_3_4()) #endif .def("composite", (void (Magick::Image::*)(const Magick::Image&, const Magick::Geometry&, Magick::CompositeOperator))&Magick::Image::composite, Magick_Image_composite_overloads_2_3()) .def("composite", (void (Magick::Image::*)(const Magick::Image&, const Magick::GravityType, Magick::CompositeOperator))&Magick::Image::composite, Magick_Image_composite_overloads_2_3()) .def("contrast", &Magick::Image::contrast) .def("convolve", &Magick::Image::convolve) .def("crop", &Magick::Image::crop) .def("cycleColormap", &Magick::Image::cycleColormap) .def("despeckle", &Magick::Image::despeckle) .def("display", &Magick::Image::display) #ifdef PGMAGICK_LIB_IMAGEMAGICK // FIXME: not worked .def("distort", (void (Magick::Image::*)(const Magick::DistortImageMethod, const size_t, const double*, const bool))&Magick::Image::distort) #endif .def("draw", (void (Magick::Image::*)(const Magick::Drawable&) )&Magick::Image::draw) .def("draw", (void (Magick::Image::*)(const std::list >&) )&Magick::Image::draw) .def("edge", &Magick::Image::edge, Magick_Image_edge_overloads_0_1()) .def("emboss", &Magick::Image::emboss, Magick_Image_emboss_overloads_0_2()) .def("enhance", &Magick::Image::enhance) .def("equalize", &Magick::Image::equalize) .def("erase", &Magick::Image::erase) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("extent", (void (Magick::Image::*)(const Magick::Geometry&))&Magick::Image::extent) .def("extent", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Color&))&Magick::Image::extent) .def("extent", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::GravityType))&Magick::Image::extent) .def("extent", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Color&, const Magick::GravityType))&Magick::Image::extent) #endif .def("flip", &Magick::Image::flip) .def("floodFillColor", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Color&) )&Magick::Image::floodFillColor) .def("floodFillColor", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Color&, const Magick::Color&) )&Magick::Image::floodFillColor) .def("floodFillOpacity", &Magick::Image::floodFillOpacity) .def("floodFillTexture", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Image&) )&Magick::Image::floodFillTexture) .def("floodFillTexture", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Image&, const Magick::Color&) )&Magick::Image::floodFillTexture) .def("flop", &Magick::Image::flop) .def("frame", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::frame, Magick_Image_frame_overloads_0_1()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("frame", (void (Magick::Image::*)(const size_t, const size_t, const ::ssize_t, const ::ssize_t) )&Magick::Image::frame, Magick_Image_frame_overloads_2_4()) #else .def("frame", (void (Magick::Image::*)(const unsigned int, const unsigned int, const int, const int) )&Magick::Image::frame, Magick_Image_frame_overloads_2_4()) #endif .def("gamma", (void (Magick::Image::*)(const double) )&Magick::Image::gamma) .def("gamma", (void (Magick::Image::*)(const double, const double, const double) )&Magick::Image::gamma) .def("gaussianBlur", &Magick::Image::gaussianBlur) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("gaussianBlurChannel", &Magick::Image::gaussianBlurChannel) #endif #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_6 .def("haldClut", &Magick::Image::haldClut) #endif #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("haldClut", &Magick::Image::haldClut) #endif .def("implode", &Magick::Image::implode) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("inverseFourierTransform", (void (Magick::Image::*)(const Magick::Image&))&Magick::Image::inverseFourierTransform) .def("inverseFourierTransform", (void (Magick::Image::*)(const Magick::Image&, const bool))&Magick::Image::inverseFourierTransform) #endif .def("label", (void (Magick::Image::*)(const std::string&) )&Magick::Image::label) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("level", &Magick::Image::level) .def("levelChannel", &Magick::Image::levelChannel) #endif .def("magnify", &Magick::Image::magnify) .def("map", &Magick::Image::map, Magick_Image_map_overloads_1_2()) .def("matteFloodfill", &Magick::Image::matteFloodfill) .def("medianFilter", &Magick::Image::medianFilter, Magick_Image_medianFilter_overloads_0_1()) .def("minify", &Magick::Image::minify) .def("modulate", &Magick::Image::modulate) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("motionBlur", &Magick::Image::motionBlur) #endif .def("negate", &Magick::Image::negate, Magick_Image_negate_overloads_0_1()) .def("normalize", &Magick::Image::normalize) .def("oilPaint", &Magick::Image::oilPaint, Magick_Image_oilPaint_overloads_0_1()) .def("opacity", &Magick::Image::opacity) .def("opaque", &Magick::Image::opaque) .def("ping", (void (Magick::Image::*)(const std::string&) )&Magick::Image::ping) .def("ping", (void (Magick::Image::*)(const Magick::Blob&) )&Magick::Image::ping) .def("quantize", &Magick::Image::quantize, Magick_Image_quantize_overloads_0_1()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("quantumOperator", (void (Magick::Image::*)(const Magick::ChannelType, const Magick::MagickEvaluateOperator, double))&Magick::Image::quantumOperator) .def("quantumOperator", (void (Magick::Image::*)(const ::ssize_t, const ::ssize_t, const size_t, const size_t, const Magick::ChannelType, const Magick::MagickEvaluateOperator, const double))&Magick::Image::quantumOperator) #else .def("quantumOperator", (void (Magick::Image::*)(const Magick::ChannelType, const Magick::QuantumOperator, const double))&Magick::Image::quantumOperator) .def("quantumOperator", (void (Magick::Image::*)(const int, const int, const unsigned int, const unsigned int, const Magick::ChannelType, const Magick::QuantumOperator, const double))&Magick::Image::quantumOperator) #endif .def("process", &Magick::Image::process) .def("raiseEdge", &Magick::Image::raise, Magick_Image_raise_overloads_0_2()) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("randomThreshold", &Magick::Image::randomThreshold) .def("randomThresholdChannel", &Magick::Image::randomThresholdChannel) #endif .def("read", (void (Magick::Image::*)(const std::string&) )&Magick::Image::read) .def("read", (void (Magick::Image::*)(const Magick::Geometry&, const std::string&) )&Magick::Image::read) .def("read", (void (Magick::Image::*)(const Magick::Blob&) )&Magick::Image::read) .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&) )&Magick::Image::read) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&, const size_t) )&Magick::Image::read) .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&, const size_t, const std::string&) )&Magick::Image::read) #else .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&, const unsigned int) )&Magick::Image::read) .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&, const unsigned int, const std::string&) )&Magick::Image::read) #endif .def("read", (void (Magick::Image::*)(const Magick::Blob&, const Magick::Geometry&, const std::string&) )&Magick::Image::read) .def("reduceNoise", (void (Magick::Image::*)() )&Magick::Image::reduceNoise) .def("reduceNoise", (void (Magick::Image::*)(const double) )&Magick::Image::reduceNoise) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_22 // from 1.3.21 .def("resize", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::FilterTypes, const double) )&Magick::Image::resize) .def("resize", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::FilterTypes) )&Magick::Image::resize) .def("resize", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::resize) #endif .def("roll", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::roll) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("roll", (void (Magick::Image::*)(const size_t, const size_t) )&Magick::Image::roll) #else .def("roll", (void (Magick::Image::*)(const unsigned int, const unsigned int) )&Magick::Image::roll) #endif .def("rotate", &Magick::Image::rotate) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_19 .def("thumbnail", &Magick::Image::thumbnail) #endif .def("sample", &Magick::Image::sample) .def("scale", &Magick::Image::scale) .def("segment", &Magick::Image::segment, Magick_Image_segment_overloads_0_2()) .def("shade", &Magick::Image::shade, Magick_Image_shade_overloads_0_3()) .def("sharpen", &Magick::Image::sharpen, Magick_Image_sharpen_overloads_0_2()) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("sharpenChannel", &Magick::Image::sharpenChannel, Magick_Image_sharpenChannel_overloads_1_3()) #endif .def("shave", &Magick::Image::shave) .def("shear", &Magick::Image::shear) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("sigmoidalContrast", &Magick::Image::sigmoidalContrast, Magick_Image_sigmoidalContrast_overloads_2_3()) #endif .def("solarize", &Magick::Image::solarize, Magick_Image_solarize_overloads_0_1()) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("splice", &Magick::Image::splice) #endif .def("spread", &Magick::Image::spread, Magick_Image_spread_overloads_0_1()) #ifdef PGMAGICK_LIB_IMAGEMAGICK // FIXME: not worked .def("sparseColor", &Magick::Image::sparseColor) #endif .def("stegano", &Magick::Image::stegano) .def("stereo", &Magick::Image::stereo) .def("swirl", &Magick::Image::swirl) .def("texture", &Magick::Image::texture) .def("threshold", &Magick::Image::threshold) .def("transform", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::transform) .def("transform", (void (Magick::Image::*)(const Magick::Geometry&, const Magick::Geometry&) )&Magick::Image::transform) .def("transparent", &Magick::Image::transparent) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("transparentChroma", &Magick::Image::transparentChroma) #endif .def("trim", &Magick::Image::trim) .def("type", (void (Magick::Image::*)(const Magick::ImageType))&Magick::Image::type) .def("unsharpmask", &Magick::Image::unsharpmask) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("unsharpmaskChannel", &Magick::Image::unsharpmaskChannel) #endif #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("unsharpmaskChannel", &Magick::Image::unsharpmaskChannel) #endif .def("wave", &Magick::Image::wave, Magick_Image_wave_overloads_0_2()) .def("write", (void (Magick::Image::*)(const std::string&) )&Magick::Image::write) .def("write", (void (Magick::Image::*)(Magick::Blob*) )&Magick::Image::write) .def("write", (void (Magick::Image::*)(Magick::Blob*, const std::string&) )&Magick::Image::write) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("write", (void (Magick::Image::*)(Magick::Blob*, const std::string&, const size_t) )&Magick::Image::write) #else .def("write", (void (Magick::Image::*)(Magick::Blob*, const std::string&, const unsigned int) )&Magick::Image::write) #endif .def("zoom", &Magick::Image::zoom) .def("adjoin", (void (Magick::Image::*)(const bool) )&Magick::Image::adjoin) .def("adjoin", (bool (Magick::Image::*)() const)&Magick::Image::adjoin) .def("antiAlias", (void (Magick::Image::*)(const bool) )&Magick::Image::antiAlias) .def("antiAlias", (bool (Magick::Image::*)() )&Magick::Image::antiAlias) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("animationDelay", (void (Magick::Image::*)(const size_t) )&Magick::Image::animationDelay) .def("animationDelay", (size_t (Magick::Image::*)() const)&Magick::Image::animationDelay) .def("animationIterations", (void (Magick::Image::*)(const size_t) )&Magick::Image::animationIterations) .def("animationIterations", (size_t (Magick::Image::*)() const)&Magick::Image::animationIterations) #else .def("animationDelay", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::animationDelay) .def("animationDelay", (unsigned int (Magick::Image::*)() const)&Magick::Image::animationDelay) .def("animationIterations", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::animationIterations) .def("animationIterations", (unsigned int (Magick::Image::*)() const)&Magick::Image::animationIterations) #endif #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_26 .def("attribute", (void (Magick::Image::*)(const std::string, const char*) )&Magick::Image::attribute) #else .def("attribute", (void (Magick::Image::*)(const std::string, const std::string) )&Magick::Image::attribute) #endif .def("attribute", (std::string (Magick::Image::*)(const std::string) )&Magick::Image::attribute) .def("backgroundColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::backgroundColor) .def("backgroundColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::backgroundColor) .def("backgroundTexture", (void (Magick::Image::*)(const std::string&) )&Magick::Image::backgroundTexture) .def("backgroundTexture", (std::string (Magick::Image::*)() const)&Magick::Image::backgroundTexture) .def("baseColumns", &Magick::Image::baseColumns) .def("baseFilename", &Magick::Image::baseFilename) .def("baseRows", &Magick::Image::baseRows) .def("borderColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::borderColor) .def("borderColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::borderColor) .def("boundingBox", &Magick::Image::boundingBox) .def("boxColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::boxColor) .def("boxColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::boxColor) .def("cacheThreshold", &Magick::Image::cacheThreshold) .def("chromaBluePrimary", (void (Magick::Image::*)(const double, const double) )&Magick::Image::chromaBluePrimary) .def("chromaBluePrimary", (void (Magick::Image::*)(double*, double*) const)&Magick::Image::chromaBluePrimary) .def("chromaGreenPrimary", (void (Magick::Image::*)(const double, const double) )&Magick::Image::chromaGreenPrimary) .def("chromaGreenPrimary", (void (Magick::Image::*)(double*, double*) const)&Magick::Image::chromaGreenPrimary) .def("chromaRedPrimary", (void (Magick::Image::*)(const double, const double) )&Magick::Image::chromaRedPrimary) .def("chromaRedPrimary", (void (Magick::Image::*)(double*, double*) const)&Magick::Image::chromaRedPrimary) .def("chromaWhitePoint", (void (Magick::Image::*)(const double, const double) )&Magick::Image::chromaWhitePoint) .def("chromaWhitePoint", (void (Magick::Image::*)(double*, double*) const)&Magick::Image::chromaWhitePoint) .def("classType", (void (Magick::Image::*)(const Magick::ClassType) )&Magick::Image::classType) .def("classType", (Magick::ClassType (Magick::Image::*)() const)&Magick::Image::classType) .def("clipMask", (void (Magick::Image::*)(const Magick::Image&) )&Magick::Image::clipMask) .def("clipMask", (Magick::Image (Magick::Image::*)() const)&Magick::Image::clipMask) .def("colorFuzz", (void (Magick::Image::*)(const double) )&Magick::Image::colorFuzz) .def("colorFuzz", (double (Magick::Image::*)() const)&Magick::Image::colorFuzz) .def("colorHistogram", &get_color_histogram) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("colorMap", (void (Magick::Image::*)(const size_t, const Magick::Color&) )&Magick::Image::colorMap) .def("colorMap", (Magick::Color (Magick::Image::*)(const size_t) const)&Magick::Image::colorMap) .def("colorMapSize", (void (Magick::Image::*)(const size_t) )&Magick::Image::colorMapSize) .def("colorMapSize", (size_t (Magick::Image::*)() )&Magick::Image::colorMapSize) #else .def("colorMap", (void (Magick::Image::*)(const unsigned int, const Magick::Color&) )&Magick::Image::colorMap) .def("colorMap", (Magick::Color (Magick::Image::*)(const unsigned int) const)&Magick::Image::colorMap) .def("colorMapSize", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::colorMapSize) .def("colorMapSize", (unsigned int (Magick::Image::*)() )&Magick::Image::colorMapSize) #endif .def("colorSpace", (void (Magick::Image::*)(const Magick::ColorspaceType))&Magick::Image::colorSpace) .def("colorSpace", (Magick::ColorspaceType (Magick::Image::*)() const)&Magick::Image::colorSpace) .def("columns", &Magick::Image::columns) .def("comment", (std::string (Magick::Image::*)() const)&Magick::Image::comment) .def("compose", (void (Magick::Image::*)(const Magick::CompositeOperator))&Magick::Image::compose) .def("compose", (Magick::CompositeOperator (Magick::Image::*)() const)&Magick::Image::compose) .def("compressType", (void (Magick::Image::*)(const Magick::CompressionType))&Magick::Image::compressType) .def("compressType", (Magick::CompressionType (Magick::Image::*)() const)&Magick::Image::compressType) .def("debug", (void (Magick::Image::*)(const bool) )&Magick::Image::debug) .def("debug", (bool (Magick::Image::*)() const)&Magick::Image::debug) .def("defineValue", (void (Magick::Image::*)(const std::string&, const std::string&, const std::string&) )&Magick::Image::defineValue) .def("defineValue", (std::string (Magick::Image::*)(const std::string&, const std::string&) const)&Magick::Image::defineValue) .def("defineSet", (void (Magick::Image::*)(const std::string&, const std::string&, bool) )&Magick::Image::defineSet) .def("defineSet", (bool (Magick::Image::*)(const std::string&, const std::string&) const)&Magick::Image::defineSet) .def("density", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::density) .def("density", (Magick::Geometry (Magick::Image::*)() const)&Magick::Image::density) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("depth", (void (Magick::Image::*)(const size_t) )&Magick::Image::depth) .def("depth", (size_t (Magick::Image::*)() const)&Magick::Image::depth) #else .def("depth", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::depth) .def("depth", (unsigned int (Magick::Image::*)() const)&Magick::Image::depth) #endif .def("directory", &Magick::Image::directory) .def("endian", (void (Magick::Image::*)(const Magick::EndianType))&Magick::Image::endian) .def("endian", (Magick::EndianType (Magick::Image::*)() const)&Magick::Image::endian) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("exifProfile", (void (Magick::Image::*)(const Magick::Blob&))&Magick::Image::exifProfile) .def("exifProfile", (Magick::Blob (Magick::Image::*)() const)&Magick::Image::exifProfile) #endif .def("fileName", (void (Magick::Image::*)(const std::string&) )&Magick::Image::fileName) .def("fileName", (std::string (Magick::Image::*)() const)&Magick::Image::fileName) .def("fileSize", &Magick::Image::fileSize) .def("fillColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::fillColor) .def("fillColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::fillColor) .def("fillRule", (void (Magick::Image::*)(const Magick::FillRule&))&Magick::Image::fillRule) .def("fillRule", (Magick::FillRule (Magick::Image::*)(void) const)&Magick::Image::fillRule) .def("fillPattern", (void (Magick::Image::*)(const Magick::Image&) )&Magick::Image::fillPattern) .def("fillPattern", (Magick::Image (Magick::Image::*)() const)&Magick::Image::fillPattern) .def("filterType", (void (Magick::Image::*)(const Magick::FilterTypes) )&Magick::Image::filterType) .def("filterType", (Magick::FilterTypes (Magick::Image::*)(void) const)&Magick::Image::filterType) .def("font", (void (Magick::Image::*)(const std::string&) )&Magick::Image::font) .def("font", (std::string (Magick::Image::*)() const)&Magick::Image::font) .def("fontPointsize", (void (Magick::Image::*)(const double) )&Magick::Image::fontPointsize) .def("fontPointsize", (double (Magick::Image::*)() const)&Magick::Image::fontPointsize) .def("fontTypeMetrics", &Magick::Image::fontTypeMetrics) .def("format", &Magick::Image::format) .def("gamma", (double (Magick::Image::*)() const)&Magick::Image::gamma) .def("geometry", &Magick::Image::geometry) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("gifDisposeMethod", (void (Magick::Image::*)(const size_t) )&Magick::Image::gifDisposeMethod) .def("gifDisposeMethod", (size_t (Magick::Image::*)() const)&Magick::Image::gifDisposeMethod) #else .def("gifDisposeMethod", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::gifDisposeMethod) .def("gifDisposeMethod", (unsigned int (Magick::Image::*)() const)&Magick::Image::gifDisposeMethod) #endif .def("iccColorProfile", (void (Magick::Image::*)(const Magick::Blob&) )&Magick::Image::iccColorProfile) .def("iccColorProfile", (Magick::Blob (Magick::Image::*)() const)&Magick::Image::iccColorProfile) .def("interlaceType", (void (Magick::Image::*)(const Magick::InterlaceType))&Magick::Image::interlaceType) .def("interlaceType", (Magick::InterlaceType (Magick::Image::*)() const)&Magick::Image::interlaceType) .def("iptcProfile", (void (Magick::Image::*)(const Magick::Blob&) )&Magick::Image::iptcProfile) .def("iptcProfile", (Magick::Blob (Magick::Image::*)() const)&Magick::Image::iptcProfile) .def("isValid", (void (Magick::Image::*)(const bool) )&Magick::Image::isValid) .def("isValid", (bool (Magick::Image::*)() const)&Magick::Image::isValid) .def("label", (std::string (Magick::Image::*)() const)&Magick::Image::label) .def("lineWidth", (void (Magick::Image::*)(const double) )&Magick::Image::lineWidth) .def("lineWidth", (double (Magick::Image::*)() const)&Magick::Image::lineWidth) .def("magick", (void (Magick::Image::*)(const std::string&) )&Magick::Image::magick) .def("magick", (std::string (Magick::Image::*)() const)&Magick::Image::magick) .def("matte", (void (Magick::Image::*)(const bool) )&Magick::Image::matte) .def("matte", (bool (Magick::Image::*)() const)&Magick::Image::matte) .def("matteColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::matteColor) .def("matteColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::matteColor) .def("meanErrorPerPixel", &Magick::Image::meanErrorPerPixel) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("modulusDepth", (void (Magick::Image::*)(const size_t) )&Magick::Image::modulusDepth) .def("modulusDepth", (size_t (Magick::Image::*)() const)&Magick::Image::modulusDepth) #else .def("modulusDepth", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::modulusDepth) .def("modulusDepth", (unsigned int (Magick::Image::*)() const)&Magick::Image::modulusDepth) #endif .def("montageGeometry", &Magick::Image::montageGeometry) .def("monochrome", (void (Magick::Image::*)(const bool) )&Magick::Image::monochrome) .def("monochrome", (bool (Magick::Image::*)() const)&Magick::Image::monochrome) .def("normalizedMaxError", &Magick::Image::normalizedMaxError) .def("normalizedMeanError", &Magick::Image::normalizedMeanError) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .def("orientation", (void (Magick::Image::*)(const Magick::OrientationType))&Magick::Image::orientation) .def("orientation", (Magick::OrientationType (Magick::Image::*)() const)&Magick::Image::orientation) #endif .def("page", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::page) .def("page", (Magick::Geometry (Magick::Image::*)() const)&Magick::Image::page) .def("penColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::penColor) .def("penColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::penColor) .def("penTexture", (void (Magick::Image::*)(const Magick::Image&) )&Magick::Image::penTexture) .def("penTexture", (Magick::Image (Magick::Image::*)() const)&Magick::Image::penTexture) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("pixelColor", (void (Magick::Image::*)(const ::ssize_t, const ::ssize_t, const Magick::Color&))&Magick::Image::pixelColor) .def("pixelColor", (Magick::Color (Magick::Image::*)(const ::ssize_t, const ::ssize_t) const)&Magick::Image::pixelColor) #else .def("pixelColor", (void (Magick::Image::*)(const unsigned int, const unsigned int, const Magick::Color&))&Magick::Image::pixelColor) .def("pixelColor", (Magick::Color (Magick::Image::*)(const unsigned int, const unsigned int) const)&Magick::Image::pixelColor) #endif .def("profile", (void (Magick::Image::*)(const std::string, const Magick::Blob&))&Magick::Image::profile) .def("profile", (Magick::Blob (Magick::Image::*)(const std::string) const)&Magick::Image::profile) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("quality", (void (Magick::Image::*)(const size_t) )&Magick::Image::quality) .def("quality", (size_t (Magick::Image::*)() const)&Magick::Image::quality) .def("quantizeColors", (void (Magick::Image::*)(const size_t) )&Magick::Image::quantizeColors) .def("quantizeColors", (size_t (Magick::Image::*)() const)&Magick::Image::quantizeColors) #else .def("quality", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::quality) .def("quality", (unsigned int (Magick::Image::*)() const)&Magick::Image::quality) .def("quantizeColors", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::quantizeColors) .def("quantizeColors", (unsigned int (Magick::Image::*)() const)&Magick::Image::quantizeColors) #endif .def("quantizeColorSpace", (void (Magick::Image::*)(const Magick::ColorspaceType) )&Magick::Image::quantizeColorSpace) .def("quantizeColorSpace", (Magick::ColorspaceType (Magick::Image::*)() const)&Magick::Image::quantizeColorSpace) .def("quantizeDither", (void (Magick::Image::*)(const bool) )&Magick::Image::quantizeDither) .def("quantizeDither", (bool (Magick::Image::*)() const)&Magick::Image::quantizeDither) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("quantizeTreeDepth", (void (Magick::Image::*)(const size_t) )&Magick::Image::quantizeTreeDepth) .def("quantizeTreeDepth", (size_t (Magick::Image::*)() const)&Magick::Image::quantizeTreeDepth) #else .def("quantizeTreeDepth", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::quantizeTreeDepth) .def("quantizeTreeDepth", (unsigned int (Magick::Image::*)() const)&Magick::Image::quantizeTreeDepth) #endif .def("renderingIntent", (void (Magick::Image::*)(const Magick::RenderingIntent) )&Magick::Image::renderingIntent) .def("renderingIntent", (Magick::RenderingIntent (Magick::Image::*)() const)&Magick::Image::renderingIntent) .def("resolutionUnits", (void (Magick::Image::*)(const Magick::ResolutionType) )&Magick::Image::resolutionUnits) .def("resolutionUnits", (Magick::ResolutionType (Magick::Image::*)() const)&Magick::Image::resolutionUnits) .def("rows", &Magick::Image::rows) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("scene", (void (Magick::Image::*)(const size_t) )&Magick::Image::scene) .def("scene", (size_t (Magick::Image::*)() const)&Magick::Image::scene) #else .def("scene", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::scene) .def("scene", (unsigned int (Magick::Image::*)() const)&Magick::Image::scene) #endif .def("signature", &Magick::Image::signature, Magick_Image_signature_overloads_0_1()) .def("size", (void (Magick::Image::*)(const Magick::Geometry&) )&Magick::Image::size) .def("size", (Magick::Geometry (Magick::Image::*)() const)&Magick::Image::size) .def("statistics", &Magick::Image::statistics) .def("strokeAntiAlias", (void (Magick::Image::*)(const bool) )&Magick::Image::strokeAntiAlias) .def("strokeAntiAlias", (bool (Magick::Image::*)() const)&Magick::Image::strokeAntiAlias) .def("strokeColor", (void (Magick::Image::*)(const Magick::Color&) )&Magick::Image::strokeColor) .def("strokeColor", (Magick::Color (Magick::Image::*)() const)&Magick::Image::strokeColor) .def("strokeDashArray", (void (Magick::Image::*)(const double*) )&Magick::Image::strokeDashArray) #if 0 .def("strokeDashArray", (const double* (Magick::Image::*)() const)&Magick::Image::strokeDashArray) #endif .def("strokeDashOffset", (void (Magick::Image::*)(const double) )&Magick::Image::strokeDashOffset) .def("strokeDashOffset", (double (Magick::Image::*)() const)&Magick::Image::strokeDashOffset) .def("strokeLineCap", (void (Magick::Image::*)(const Magick::LineCap) )&Magick::Image::strokeLineCap) .def("strokeLineCap", (Magick::LineCap (Magick::Image::*)() const)&Magick::Image::strokeLineCap) .def("strokeLineJoin", (void (Magick::Image::*)(const Magick::LineJoin) )&Magick::Image::strokeLineJoin) .def("strokeLineJoin", (Magick::LineJoin (Magick::Image::*)() const)&Magick::Image::strokeLineJoin) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("strokeMiterLimit", (void (Magick::Image::*)(const size_t) )&Magick::Image::strokeMiterLimit) .def("strokeMiterLimit", (size_t (Magick::Image::*)() const)&Magick::Image::strokeMiterLimit) #else .def("strokeMiterLimit", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::strokeMiterLimit) .def("strokeMiterLimit", (unsigned int (Magick::Image::*)() const)&Magick::Image::strokeMiterLimit) #endif .def("strokePattern", (void (Magick::Image::*)(const Magick::Image&) )&Magick::Image::strokePattern) .def("strokePattern", (Magick::Image (Magick::Image::*)() const)&Magick::Image::strokePattern) .def("strokeWidth", (void (Magick::Image::*)(const double) )&Magick::Image::strokeWidth) .def("strokeWidth", (double (Magick::Image::*)() const)&Magick::Image::strokeWidth) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("subImage", (void (Magick::Image::*)(const size_t) )&Magick::Image::subImage) .def("subImage", (size_t (Magick::Image::*)() const)&Magick::Image::subImage) .def("subRange", (void (Magick::Image::*)(const size_t) )&Magick::Image::subRange) .def("subRange", (size_t (Magick::Image::*)() const)&Magick::Image::subRange) #else .def("subImage", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::subImage) .def("subImage", (unsigned int (Magick::Image::*)() const)&Magick::Image::subImage) .def("subRange", (void (Magick::Image::*)(const unsigned int) )&Magick::Image::subRange) .def("subRange", (unsigned int (Magick::Image::*)() const)&Magick::Image::subRange) #endif .def("textEncoding", (void (Magick::Image::*)(const std::string&) )&Magick::Image::textEncoding) .def("textEncoding", (std::string (Magick::Image::*)() const)&Magick::Image::textEncoding) .def("tileName", (void (Magick::Image::*)(const std::string&) )&Magick::Image::tileName) .def("tileName", (std::string (Magick::Image::*)() const)&Magick::Image::tileName) .def("totalColors", &Magick::Image::totalColors) .def("transformOrigin", &Magick::Image::transformOrigin) .def("transformRotation", &Magick::Image::transformRotation) .def("transformReset", &Magick::Image::transformReset) .def("transformScale", &Magick::Image::transformScale) .def("transformSkewX", &Magick::Image::transformSkewX) .def("transformSkewY", &Magick::Image::transformSkewY) .def("type", (Magick::ImageType (Magick::Image::*)() const)&Magick::Image::type) .def("verbose", (void (Magick::Image::*)(const bool) )&Magick::Image::verbose) .def("verbose", (bool (Magick::Image::*)() const)&Magick::Image::verbose) .def("view", (void (Magick::Image::*)(const std::string&) )&Magick::Image::view) .def("view", (std::string (Magick::Image::*)() const)&Magick::Image::view) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("virtualPixelMethod", (void (Magick::Image::*)(const Magick::VirtualPixelMethod))&Magick::Image::virtualPixelMethod) .def("virtualPixelMethod", (Magick::VirtualPixelMethod (Magick::Image::*)() const)&Magick::Image::virtualPixelMethod) #endif .def("x11Display", (void (Magick::Image::*)(const std::string&) )&Magick::Image::x11Display) .def("x11Display", (std::string (Magick::Image::*)() const)&Magick::Image::x11Display) #if defined(PGMAGICK_LIB_GRAPHICSMAGICK_1_3_24) .def("xResolution", (void (Magick::Image::*)(const double) )&Magick::Image::xResolution) .def("xResolution", (double (Magick::Image::*)() const)&Magick::Image::xResolution) .def("yResolution", (void (Magick::Image::*)(const double) )&Magick::Image::yResolution) .def("yResolution", (double (Magick::Image::*)() const)&Magick::Image::yResolution) #else .def("xResolution", &Magick::Image::xResolution) .def("yResolution", &Magick::Image::yResolution) #endif #if 0 .def("getIndexes",) .def("getConstIndexes",) #endif .def("getConstPixels", get_const_pixels) .def("getPixels", get_pixels) .def("setPixels", set_pixels) .def("syncPixels", &Magick::Image::syncPixels) .def("readPixels", &Magick::Image::readPixels) .def("writePixels", &Magick::Image::writePixels) /* no user-serviceable parts */ .def("modifyImage", &Magick::Image::modifyImage) #if !defined(PGMAGICK_LIB_GRAPHICSMAGICK_1_3_20) .def("throwImageException", &Magick::Image::throwImageException) #endif .def("registerId", &Magick::Image::registerId) .def("unregisterId", &Magick::Image::unregisterId) .staticmethod("cacheThreshold") .def( self == self ) .def( self != self ) .def( self > self ) .def( self < self ) .def( self >= self ) .def( self <= self ) ; } pgmagick-0.7.2/src/_ImageType.cpp0000644000076500000240000000152213153230470017640 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __ImageType() { enum_< Magick::ImageType >("ImageType") .value("UndefinedType", Magick::UndefinedType) .value("BilevelType", Magick::BilevelType) .value("GrayscaleType", Magick::GrayscaleType) .value("GrayscaleMatteType", Magick::GrayscaleMatteType) .value("PaletteType", Magick::PaletteType) .value("PaletteMatteType", Magick::PaletteMatteType) .value("TrueColorType", Magick::TrueColorType) .value("TrueColorMatteType", Magick::TrueColorMatteType) .value("ColorSeparationType", Magick::ColorSeparationType) .value("ColorSeparationMatteType", Magick::ColorSeparationMatteType) .value("OptimizeType", Magick::OptimizeType) ; } pgmagick-0.7.2/src/_InterlaceType.cpp0000644000076500000240000000076413153230470020533 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __InterlaceType() { enum_< Magick::InterlaceType >("InterlaceType") .value("UndefinedInterlace", Magick::UndefinedInterlace) .value("NoInterlace", Magick::NoInterlace) .value("LineInterlace", Magick::LineInterlace) .value("PlaneInterlace", Magick::PlaneInterlace) .value("PartitionInterlace", Magick::PartitionInterlace) ; } pgmagick-0.7.2/src/_LineCap.cpp0000644000076500000240000000057113153230470017272 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __LineCap() { enum_< Magick::LineCap >("LineCap") .value("UndefinedCap", Magick::UndefinedCap) .value("ButtCap", Magick::ButtCap) .value("RoundCap", Magick::RoundCap) .value("SquareCap", Magick::SquareCap) ; } pgmagick-0.7.2/src/_LineJoin.cpp0000644000076500000240000000060413153230470017463 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __LineJoin() { enum_< Magick::LineJoin >("LineJoin") .value("UndefinedJoin", Magick::UndefinedJoin) .value("MiterJoin", Magick::MiterJoin) .value("RoundJoin", Magick::RoundJoin) .value("BevelJoin", Magick::BevelJoin) ; } pgmagick-0.7.2/src/_main.cpp0000644000076500000240000001272613153230470016710 0ustar hattori-hstaff00000000000000#include #include void __Blob(); void __ChannelType(); void __Color(); void __ColorspaceType(); void __CompositeOperator(); void __CompressionType(); void __Coordinate(); void __DecorationType(); void __DistortImageMethod(); void __Drawable(); void __DrawableAffine(); void __DrawableArc(); void __DrawableBezier(); void __DrawableCircle(); void __DrawableClipPath(); void __DrawableColor(); void __DrawableCompositeImage(); void __DrawableDashArray(); void __DrawableDashOffset(); void __DrawableEllipse(); void __DrawableFillColor(); void __DrawableFillOpacity(); void __DrawableFillRule(); void __DrawableFont(); void __DrawableGravity(); void __DrawableLine(); void __DrawableMatte(); void __DrawableMiterLimit(); void __DrawablePath(); void __DrawablePoint(); void __DrawablePointSize(); void __DrawablePolygon(); void __DrawablePolyline(); void __DrawablePopClipPath(); void __DrawablePopGraphicContext(); void __DrawablePopPattern(); void __DrawablePushClipPath(); void __DrawablePushGraphicContext(); void __DrawablePushPattern(); void __DrawableRectangle(); void __DrawableRotation(); void __DrawableRoundRectangle(); void __DrawableScaling(); void __DrawableSkewX(); void __DrawableSkewY(); void __DrawableStrokeAntialias(); void __DrawableStrokeColor(); void __DrawableStrokeLineCap(); void __DrawableStrokeLineJoin(); void __DrawableStrokeOpacity(); void __DrawableStrokeWidth(); void __DrawableText(); void __DrawableTextAntialias(); void __DrawableTextDecoration(); void __DrawableTextUnderColor(); void __DrawableTranslation(); void __DrawableViewbox(); void __EndianType(); void __Exception(); void __FillRule(); void __FilterTypes(); void __Geometry(); void __GravityType(); void __Image(); void __ImageType(); void __InterlaceType(); void __LineCap(); void __LineJoin(); void __Montage(); void __NoiseType(); void __OrientationType(); void __PaintMethod(); void __PathArcAbs(); void __PathArcArgs(); void __PathArcRel(); void __PathClosePath(); void __PathCurvetoAbs(); void __PathCurvetoArgs(); void __PathCurvetoRel(); void __PathLinetoAbs(); void __PathLinetoHorizontalAbs(); void __PathLinetoHorizontalRel(); void __PathLinetoRel(); void __PathLinetoVerticalAbs(); void __PathLinetoVerticalRel(); void __PathMovetoAbs(); void __PathMovetoRel(); void __PathQuadraticCurvetoAbs(); void __PathQuadraticCurvetoArgs(); void __PathQuadraticCurvetoRel(); void __PathSmoothCurvetoAbs(); void __PathSmoothCurvetoRel(); void __PathSmoothQuadraticCurvetoAbs(); void __PathSmoothQuadraticCurvetoRel(); void __Pixels(); void __QuantumOperator(); void __QuantumType(); void __RenderingIntent(); void __ResolutionType(); void __SparseColorMethod(); void __StorageType(); void __StretchType(); void __StyleType(); void __STL(); void __TypeMetric(); void __VirtualPixelMethod(); void __VPath(); void __gminfo(); BOOST_PYTHON_MODULE(_pgmagick) { __Blob(); __ChannelType(); __Color(); __ColorspaceType(); __CompositeOperator(); __CompressionType(); __Coordinate(); __DecorationType(); __DistortImageMethod(); __VPath(); __Drawable(); __DrawableAffine(); __DrawableArc(); __DrawableBezier(); __DrawableCircle(); __DrawableClipPath(); __DrawableColor(); __DrawableCompositeImage(); __DrawableDashArray(); __DrawableDashOffset(); __DrawableEllipse(); __DrawableFillColor(); __DrawableFillOpacity(); __DrawableFillRule(); __DrawableFont(); __DrawableGravity(); __DrawableLine(); __DrawableMatte(); __DrawableMiterLimit(); __DrawablePath(); __DrawablePoint(); __DrawablePointSize(); __DrawablePolygon(); __DrawablePolyline(); __DrawablePopClipPath(); __DrawablePopGraphicContext(); __DrawablePopPattern(); __DrawablePushClipPath(); __DrawablePushGraphicContext(); __DrawablePushPattern(); __DrawableRectangle(); __DrawableRotation(); __DrawableRoundRectangle(); __DrawableScaling(); __DrawableSkewX(); __DrawableSkewY(); __DrawableStrokeAntialias(); __DrawableStrokeColor(); __DrawableStrokeLineCap(); __DrawableStrokeLineJoin(); __DrawableStrokeOpacity(); __DrawableStrokeWidth(); __DrawableText(); __DrawableTextAntialias(); __DrawableTextDecoration(); __DrawableTextUnderColor(); __DrawableTranslation(); __DrawableViewbox(); __EndianType(); __Exception(); __FillRule(); __FilterTypes(); __Geometry(); __GravityType(); __Image(); __ImageType(); __InterlaceType(); __LineCap(); __LineJoin(); __Montage(); __NoiseType(); __OrientationType(); __PaintMethod(); __PathArcAbs(); __PathArcArgs(); __PathArcRel(); __PathClosePath(); __PathCurvetoAbs(); __PathCurvetoArgs(); __PathCurvetoRel(); __PathLinetoAbs(); __PathLinetoHorizontalAbs(); __PathLinetoHorizontalRel(); __PathLinetoRel(); __PathLinetoVerticalAbs(); __PathLinetoVerticalRel(); __PathMovetoAbs(); __PathMovetoRel(); __PathQuadraticCurvetoAbs(); __PathQuadraticCurvetoArgs(); __PathQuadraticCurvetoRel(); __PathSmoothCurvetoAbs(); __PathSmoothCurvetoRel(); __PathSmoothQuadraticCurvetoAbs(); __PathSmoothQuadraticCurvetoRel(); __Pixels(); __QuantumOperator(); __QuantumType(); __RenderingIntent(); __ResolutionType(); __SparseColorMethod(); __StorageType(); __StretchType(); __StyleType(); __STL(); __TypeMetric(); __VirtualPixelMethod(); __gminfo(); } pgmagick-0.7.2/src/_Montage.cpp0000644000076500000240000001203013153230470017342 0ustar hattori-hstaff00000000000000#include #include using namespace boost::python; void __Montage() { class_< Magick::Montage >("Montage", init< >()) .def("backgroundColor", (void (Magick::Montage::*)(const Magick::Color&)) &Magick::Montage::backgroundColor) .def("backgroundColor", (Magick::Color (Magick::Montage::*)() const) &Magick::Montage::backgroundColor) .def("compose", (void (Magick::Montage::*)(const Magick::CompositeOperator)) &Magick::Montage::compose) .def("compose", (Magick::CompositeOperator (Magick::Montage::*)() const) &Magick::Montage::compose) .def("fileName", (void (Magick::Montage::*)(const std::string&)) &Magick::Montage::fileName) .def("fileName", (std::string (Magick::Montage::*)() const) &Magick::Montage::fileName) .def("fillColor", (void (Magick::Montage::*)(const Magick::Color&)) &Magick::Montage::fillColor) .def("fillColor", (Magick::Color (Magick::Montage::*)() const) &Magick::Montage::fillColor) .def("geometry", (void (Magick::Montage::*)(const Magick::Geometry&)) &Magick::Montage::geometry) .def("geometry", (Magick::Geometry (Magick::Montage::*)() const) &Magick::Montage::geometry) .def("gravity", (void (Magick::Montage::*)(const Magick::GravityType)) &Magick::Montage::gravity) .def("gravity", (Magick::GravityType (Magick::Montage::*)() const) &Magick::Montage::gravity) .def("label", (void (Magick::Montage::*)(const std::string&)) &Magick::Montage::label) .def("label", (std::string (Magick::Montage::*)() const) &Magick::Montage::label) .def("penColor", (void (Magick::Montage::*)(const Magick::Color&)) &Magick::Montage::penColor) .def("penColor", (Magick::Color (Magick::Montage::*)() const) &Magick::Montage::penColor) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("pointSize", (void (Magick::Montage::*)(size_t)) &Magick::Montage::pointSize) .def("pointSize", (size_t (Magick::Montage::*)() const) &Magick::Montage::pointSize) #else .def("pointSize", (void (Magick::Montage::*)(unsigned int)) &Magick::Montage::pointSize) .def("pointSize", (unsigned int (Magick::Montage::*)() const) &Magick::Montage::pointSize) #endif .def("shadow", (void (Magick::Montage::*)(const bool)) &Magick::Montage::shadow) .def("shadow", (bool (Magick::Montage::*)() const) &Magick::Montage::shadow) .def("strokeColor", (void (Magick::Montage::*)(const Magick::Color&)) &Magick::Montage::strokeColor) .def("strokeColor", (Magick::Color (Magick::Montage::*)() const) &Magick::Montage::strokeColor) .def("texture", (void (Magick::Montage::*)(const std::string&)) &Magick::Montage::texture) .def("texture", (std::string (Magick::Montage::*)() const) &Magick::Montage::texture) .def("title", (void (Magick::Montage::*)(const std::string&)) &Magick::Montage::title) .def("title", (std::string (Magick::Montage::*)() const) &Magick::Montage::title) .def("transparentColor", (void (Magick::Montage::*)(const Magick::Color&)) &Magick::Montage::transparentColor) .def("transparentColor", (Magick::Color (Magick::Montage::*)() const) &Magick::Montage::transparentColor) ; class_< Magick::MontageFramed >("MontageFramed", init< >()) .def("borderColor", (void (Magick::MontageFramed::*)(const Magick::Color&)) &Magick::MontageFramed::borderColor) .def("borderColor", (Magick::Color (Magick::MontageFramed::*)() const) &Magick::MontageFramed::borderColor) #ifdef PGMAGICK_LIB_IMAGEMAGICK .def("borderWidth", (void (Magick::MontageFramed::*)(size_t)) &Magick::MontageFramed::borderWidth) .def("borderWidth", (size_t (Magick::MontageFramed::*)() const) &Magick::MontageFramed::borderWidth) #else .def("borderWidth", (void (Magick::MontageFramed::*)(unsigned int)) &Magick::MontageFramed::borderWidth) .def("borderWidth", (unsigned int (Magick::MontageFramed::*)() const) &Magick::MontageFramed::borderWidth) #endif .def("frameGeometry", (void (Magick::MontageFramed::*)(const Magick::Geometry&)) &Magick::MontageFramed::geometry) .def("frameGeometry", (Magick::Geometry (Magick::MontageFramed::*)() const) &Magick::MontageFramed::geometry) .def("matteColor", (void (Magick::MontageFramed::*)(const Magick::Color&)) &Magick::MontageFramed::matteColor) .def("matteColor", (Magick::Color (Magick::MontageFramed::*)() const) &Magick::MontageFramed::matteColor) ; } pgmagick-0.7.2/src/_NoiseType.cpp0000644000076500000240000000104413153230470017672 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __NoiseType() { enum_< Magick::NoiseType >("NoiseType") .value("UniformNise", Magick::UniformNoise) .value("GaussianNoise", Magick::GaussianNoise) .value("MultiplicativeGaussianNoise", Magick::MultiplicativeGaussianNoise) .value("ImpulseNoise", Magick::ImpulseNoise) .value("LaplacianNoise", Magick::LaplacianNoise) .value("PoissonNoise", Magick::PoissonNoise) ; } pgmagick-0.7.2/src/_OrientationType.cpp0000644000076500000240000000156213153230470021115 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __OrientationType() { #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x enum_< Magick::OrientationType >("OrientationType") .value("UndefinedOrientation", Magick::UndefinedOrientation) .value("TopLeftOrientation", Magick::TopLeftOrientation) .value("TopRightOrientation", Magick::TopRightOrientation) .value("BottomRightOrientation", Magick::BottomRightOrientation) .value("BottomLeftOrientation", Magick::BottomLeftOrientation) .value("LeftTopOrientation", Magick::LeftTopOrientation) .value("RightTopOrientation", Magick::RightTopOrientation) .value("RightBottomOrientation", Magick::RightBottomOrientation) .value("LeftBottomOrientation", Magick::LeftBottomOrientation) ; #endif } pgmagick-0.7.2/src/_PaintMethod.cpp0000644000076500000240000000074213153230470020173 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __PaintMethod() { enum_< Magick::PaintMethod >("PaintMethod") .value("PointMethod", Magick::PointMethod) .value("ReplaceMethod", Magick::ReplaceMethod) .value("FloodfillMethod", Magick::FloodfillMethod) .value("FillToBorderMethod", Magick::FillToBorderMethod) .value("ResetMethod", Magick::ResetMethod) ; } pgmagick-0.7.2/src/_PathArcAbs.cpp0000644000076500000240000000164313153230470017730 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathArcAbs_Wrapper: Magick::PathArcAbs { Magick_PathArcAbs_Wrapper(PyObject* py_self_, const Magick::PathArcArgs& p0): Magick::PathArcAbs(p0), py_self(py_self_) {} Magick_PathArcAbs_Wrapper(PyObject* py_self_, const Magick::PathArcArgsList& p0): Magick::PathArcAbs(p0), py_self(py_self_) {} Magick_PathArcAbs_Wrapper(PyObject* py_self_, const Magick::PathArcAbs& p0): Magick::PathArcAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathArcAbs() { class_< Magick::PathArcAbs, bases, Magick_PathArcAbs_Wrapper >("PathArcAbs", init< const Magick::PathArcArgs& >()) .def(init< const Magick::PathArcArgsList& >()) .def(init< const Magick::PathArcAbs& >()) ; } pgmagick-0.7.2/src/_PathArcArgs.cpp0000644000076500000240000000351413153230470020116 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; void __PathArcArgs() { class_< Magick::PathArcArgs >("PathArcArgs", init< >()) .def(init< double, double, double, bool, bool, double, double >()) .def(init< const Magick::PathArcArgs& >()) .def("radiusX", (void (Magick::PathArcArgs::*)(double) )&Magick::PathArcArgs::radiusX) .def("radiusX", (double (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::radiusX) .def("radiusY", (void (Magick::PathArcArgs::*)(double) )&Magick::PathArcArgs::radiusY) .def("radiusY", (double (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::radiusY) .def("xAxisRotation", (void (Magick::PathArcArgs::*)(double) )&Magick::PathArcArgs::xAxisRotation) .def("xAxisRotation", (double (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::xAxisRotation) .def("largeArcFlag", (void (Magick::PathArcArgs::*)(bool) )&Magick::PathArcArgs::largeArcFlag) .def("largeArcFlag", (bool (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::largeArcFlag) .def("sweepFlag", (void (Magick::PathArcArgs::*)(bool) )&Magick::PathArcArgs::sweepFlag) .def("sweepFlag", (bool (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::sweepFlag) .def("x", (void (Magick::PathArcArgs::*)(double) )&Magick::PathArcArgs::x) .def("x", (double (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::x) .def("y", (void (Magick::PathArcArgs::*)(double) )&Magick::PathArcArgs::y) .def("y", (double (Magick::PathArcArgs::*)() const)&Magick::PathArcArgs::y) .def( self != self ) .def( self > self ) .def( self <= self ) .def( self >= self ) .def( self < self ) .def( self == self ) ; } pgmagick-0.7.2/src/_PathArcRel.cpp0000644000076500000240000000164313153230470017745 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathArcRel_Wrapper: Magick::PathArcRel { Magick_PathArcRel_Wrapper(PyObject* py_self_, const Magick::PathArcArgs& p0): Magick::PathArcRel(p0), py_self(py_self_) {} Magick_PathArcRel_Wrapper(PyObject* py_self_, const Magick::PathArcArgsList& p0): Magick::PathArcRel(p0), py_self(py_self_) {} Magick_PathArcRel_Wrapper(PyObject* py_self_, const Magick::PathArcRel& p0): Magick::PathArcRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathArcRel() { class_< Magick::PathArcRel, bases, Magick_PathArcRel_Wrapper >("PathArcRel", init< const Magick::PathArcArgs& >()) .def(init< const Magick::PathArcArgsList& >()) .def(init< const Magick::PathArcRel& >()) ; } pgmagick-0.7.2/src/_PathClosePath.cpp0000644000076500000240000000077613153230470020465 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathClosePath_Wrapper: Magick::PathClosePath { Magick_PathClosePath_Wrapper(PyObject* py_self_): Magick::PathClosePath(), py_self(py_self_) {} PyObject* py_self; }; } void __PathClosePath() { class_< Magick::PathClosePath, boost::noncopyable, Magick_PathClosePath_Wrapper >("PathClosePath", init< >()) ; } pgmagick-0.7.2/src/_PathCurvetoAbs.cpp0000644000076500000240000000175313153230470020654 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathCurvetoAbs_Wrapper: Magick::PathCurvetoAbs { Magick_PathCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathCurvetoArgs& p0): Magick::PathCurvetoAbs(p0), py_self(py_self_) {} Magick_PathCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathCurveToArgsList& p0): Magick::PathCurvetoAbs(p0), py_self(py_self_) {} Magick_PathCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathCurvetoAbs& p0): Magick::PathCurvetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathCurvetoAbs() { class_< Magick::PathCurvetoAbs, bases, Magick_PathCurvetoAbs_Wrapper >("PathCurvetoAbs", init< const Magick::PathCurvetoArgs& >()) .def(init< const Magick::PathCurveToArgsList& >()) .def(init< const Magick::PathCurvetoAbs& >()) ; } pgmagick-0.7.2/src/_PathCurvetoArgs.cpp0000644000076500000240000000317513153230470021043 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; void __PathCurvetoArgs() { class_< Magick::PathCurvetoArgs >("PathCurvetoArgs", init< >()) .def(init< double, double, double, double, double, double >()) .def(init< const Magick::PathCurvetoArgs& >()) .def("x1", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::x1) .def("x1", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::x1) .def("y1", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::y1) .def("y1", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::y1) .def("x2", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::x2) .def("x2", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::x2) .def("y2", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::y2) .def("y2", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::y2) .def("x", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::x) .def("x", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::x) .def("y", (void (Magick::PathCurvetoArgs::*)(double) )&Magick::PathCurvetoArgs::y) .def("y", (double (Magick::PathCurvetoArgs::*)() const)&Magick::PathCurvetoArgs::y) .def( self <= self ) .def( self < self ) .def( self >= self ) .def( self != self ) .def( self > self ) .def( self == self ) ; } pgmagick-0.7.2/src/_PathCurvetoRel.cpp0000644000076500000240000000175313153230470020671 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathCurvetoRel_Wrapper: Magick::PathCurvetoRel { Magick_PathCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathCurvetoArgs& p0): Magick::PathCurvetoRel(p0), py_self(py_self_) {} Magick_PathCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathCurveToArgsList& p0): Magick::PathCurvetoRel(p0), py_self(py_self_) {} Magick_PathCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathCurvetoRel& p0): Magick::PathCurvetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathCurvetoRel() { class_< Magick::PathCurvetoRel, bases, Magick_PathCurvetoRel_Wrapper >("PathCurvetoRel", init< const Magick::PathCurvetoArgs& >()) .def(init< const Magick::PathCurveToArgsList& >()) .def(init< const Magick::PathCurvetoRel& >()) ; } pgmagick-0.7.2/src/_PathLinetoAbs.cpp0000644000076500000240000000171113153230470020451 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoAbs_Wrapper: Magick::PathLinetoAbs { Magick_PathLinetoAbs_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathLinetoAbs(p0), py_self(py_self_) {} Magick_PathLinetoAbs_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathLinetoAbs(p0), py_self(py_self_) {} Magick_PathLinetoAbs_Wrapper(PyObject* py_self_, const Magick::PathLinetoAbs& p0): Magick::PathLinetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoAbs() { class_< Magick::PathLinetoAbs, bases, Magick_PathLinetoAbs_Wrapper >("PathLinetoAbs", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathLinetoAbs& >()) ; } pgmagick-0.7.2/src/_PathLinetoHorizontalAbs.cpp0000644000076500000240000000147013153230470022525 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoHorizontalAbs_Wrapper: Magick::PathLinetoHorizontalAbs { Magick_PathLinetoHorizontalAbs_Wrapper(PyObject* py_self_, double p0): Magick::PathLinetoHorizontalAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoHorizontalAbs() { class_< Magick::PathLinetoHorizontalAbs, boost::noncopyable, Magick_PathLinetoHorizontalAbs_Wrapper >("PathLinetoHorizontalAbs", init< double >()) .def("x", (void (Magick::PathLinetoHorizontalAbs::*)(double) )&Magick::PathLinetoHorizontalAbs::x) .def("x", (double (Magick::PathLinetoHorizontalAbs::*)() const)&Magick::PathLinetoHorizontalAbs::x) ; } pgmagick-0.7.2/src/_PathLinetoHorizontalRel.cpp0000644000076500000240000000147013153230470022542 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoHorizontalRel_Wrapper: Magick::PathLinetoHorizontalRel { Magick_PathLinetoHorizontalRel_Wrapper(PyObject* py_self_, double p0): Magick::PathLinetoHorizontalRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoHorizontalRel() { class_< Magick::PathLinetoHorizontalRel, boost::noncopyable, Magick_PathLinetoHorizontalRel_Wrapper >("PathLinetoHorizontalRel", init< double >()) .def("x", (void (Magick::PathLinetoHorizontalRel::*)(double) )&Magick::PathLinetoHorizontalRel::x) .def("x", (double (Magick::PathLinetoHorizontalRel::*)() const)&Magick::PathLinetoHorizontalRel::x) ; } pgmagick-0.7.2/src/_PathLinetoRel.cpp0000644000076500000240000000171113153230470020466 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoRel_Wrapper: Magick::PathLinetoRel { Magick_PathLinetoRel_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathLinetoRel(p0), py_self(py_self_) {} Magick_PathLinetoRel_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathLinetoRel(p0), py_self(py_self_) {} Magick_PathLinetoRel_Wrapper(PyObject* py_self_, const Magick::PathLinetoRel& p0): Magick::PathLinetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoRel() { class_< Magick::PathLinetoRel, bases, Magick_PathLinetoRel_Wrapper >("PathLinetoRel", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathLinetoRel& >()) ; } pgmagick-0.7.2/src/_PathLinetoVerticalAbs.cpp0000644000076500000240000000144013153230470022142 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoVerticalAbs_Wrapper: Magick::PathLinetoVerticalAbs { Magick_PathLinetoVerticalAbs_Wrapper(PyObject* py_self_, double p0): Magick::PathLinetoVerticalAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoVerticalAbs() { class_< Magick::PathLinetoVerticalAbs, boost::noncopyable, Magick_PathLinetoVerticalAbs_Wrapper >("PathLinetoVerticalAbs", init< double >()) .def("y", (void (Magick::PathLinetoVerticalAbs::*)(double) )&Magick::PathLinetoVerticalAbs::y) .def("y", (double (Magick::PathLinetoVerticalAbs::*)() const)&Magick::PathLinetoVerticalAbs::y) ; } pgmagick-0.7.2/src/_PathLinetoVerticalRel.cpp0000644000076500000240000000144013153230470022157 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathLinetoVerticalRel_Wrapper: Magick::PathLinetoVerticalRel { Magick_PathLinetoVerticalRel_Wrapper(PyObject* py_self_, double p0): Magick::PathLinetoVerticalRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathLinetoVerticalRel() { class_< Magick::PathLinetoVerticalRel, boost::noncopyable, Magick_PathLinetoVerticalRel_Wrapper >("PathLinetoVerticalRel", init< double >()) .def("y", (void (Magick::PathLinetoVerticalRel::*)(double) )&Magick::PathLinetoVerticalRel::y) .def("y", (double (Magick::PathLinetoVerticalRel::*)() const)&Magick::PathLinetoVerticalRel::y) ; } pgmagick-0.7.2/src/_PathMovetoAbs.cpp0000644000076500000240000000171113153230470020470 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathMovetoAbs_Wrapper: Magick::PathMovetoAbs { Magick_PathMovetoAbs_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathMovetoAbs(p0), py_self(py_self_) {} Magick_PathMovetoAbs_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathMovetoAbs(p0), py_self(py_self_) {} Magick_PathMovetoAbs_Wrapper(PyObject* py_self_, const Magick::PathMovetoAbs& p0): Magick::PathMovetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathMovetoAbs() { class_< Magick::PathMovetoAbs, bases, Magick_PathMovetoAbs_Wrapper >("PathMovetoAbs", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathMovetoAbs& >()) ; } pgmagick-0.7.2/src/_PathMovetoRel.cpp0000644000076500000240000000171113153230470020505 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathMovetoRel_Wrapper: Magick::PathMovetoRel { Magick_PathMovetoRel_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathMovetoRel(p0), py_self(py_self_) {} Magick_PathMovetoRel_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathMovetoRel(p0), py_self(py_self_) {} Magick_PathMovetoRel_Wrapper(PyObject* py_self_, const Magick::PathMovetoRel& p0): Magick::PathMovetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathMovetoRel() { class_< Magick::PathMovetoRel, bases, Magick_PathMovetoRel_Wrapper >("PathMovetoRel", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathMovetoRel& >()) ; } pgmagick-0.7.2/src/_PathQuadraticCurvetoAbs.cpp0000644000076500000240000000221513153230470022504 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathQuadraticCurvetoAbs_Wrapper: Magick::PathQuadraticCurvetoAbs { Magick_PathQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoArgs& p0): Magick::PathQuadraticCurvetoAbs(p0), py_self(py_self_) {} Magick_PathQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoArgsList& p0): Magick::PathQuadraticCurvetoAbs(p0), py_self(py_self_) {} Magick_PathQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoAbs& p0): Magick::PathQuadraticCurvetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathQuadraticCurvetoAbs() { class_< Magick::PathQuadraticCurvetoAbs, bases, Magick_PathQuadraticCurvetoAbs_Wrapper >("PathQuadraticCurvetoAbs", init< const Magick::PathQuadraticCurvetoArgs& >()) .def(init< const Magick::PathQuadraticCurvetoArgsList& >()) .def(init< const Magick::PathQuadraticCurvetoAbs& >()) ; } pgmagick-0.7.2/src/_PathQuadraticCurvetoArgs.cpp0000644000076500000240000000265313153230470022701 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; void __PathQuadraticCurvetoArgs() { class_< Magick::PathQuadraticCurvetoArgs >("PathQuadraticCurvetoArgs", init< >()) .def(init< double, double, double, double >()) .def(init< const Magick::PathQuadraticCurvetoArgs& >()) .def("x1", (void (Magick::PathQuadraticCurvetoArgs::*)(double) )&Magick::PathQuadraticCurvetoArgs::x1) .def("x1", (double (Magick::PathQuadraticCurvetoArgs::*)() const)&Magick::PathQuadraticCurvetoArgs::x1) .def("y1", (void (Magick::PathQuadraticCurvetoArgs::*)(double) )&Magick::PathQuadraticCurvetoArgs::y1) .def("y1", (double (Magick::PathQuadraticCurvetoArgs::*)() const)&Magick::PathQuadraticCurvetoArgs::y1) .def("x", (void (Magick::PathQuadraticCurvetoArgs::*)(double) )&Magick::PathQuadraticCurvetoArgs::x) .def("x", (double (Magick::PathQuadraticCurvetoArgs::*)() const)&Magick::PathQuadraticCurvetoArgs::x) .def("y", (void (Magick::PathQuadraticCurvetoArgs::*)(double) )&Magick::PathQuadraticCurvetoArgs::y) .def("y", (double (Magick::PathQuadraticCurvetoArgs::*)() const)&Magick::PathQuadraticCurvetoArgs::y) .def( self < self ) .def( self > self ) .def( self != self ) .def( self == self ) .def( self <= self ) .def( self >= self ) ; } pgmagick-0.7.2/src/_PathQuadraticCurvetoRel.cpp0000644000076500000240000000221513153230470022521 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathQuadraticCurvetoRel_Wrapper: Magick::PathQuadraticCurvetoRel { Magick_PathQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoArgs& p0): Magick::PathQuadraticCurvetoRel(p0), py_self(py_self_) {} Magick_PathQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoArgsList& p0): Magick::PathQuadraticCurvetoRel(p0), py_self(py_self_) {} Magick_PathQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathQuadraticCurvetoRel& p0): Magick::PathQuadraticCurvetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathQuadraticCurvetoRel() { class_< Magick::PathQuadraticCurvetoRel, bases, Magick_PathQuadraticCurvetoRel_Wrapper >("PathQuadraticCurvetoRel", init< const Magick::PathQuadraticCurvetoArgs& >()) .def(init< const Magick::PathQuadraticCurvetoArgsList& >()) .def(init< const Magick::PathQuadraticCurvetoRel& >()) ; } pgmagick-0.7.2/src/_PathSmoothCurvetoAbs.cpp0000644000076500000240000000205313153230470022040 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathSmoothCurvetoAbs_Wrapper: Magick::PathSmoothCurvetoAbs { Magick_PathSmoothCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathSmoothCurvetoAbs(p0), py_self(py_self_) {} Magick_PathSmoothCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathSmoothCurvetoAbs(p0), py_self(py_self_) {} Magick_PathSmoothCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathSmoothCurvetoAbs& p0): Magick::PathSmoothCurvetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathSmoothCurvetoAbs() { class_< Magick::PathSmoothCurvetoAbs, bases, Magick_PathSmoothCurvetoAbs_Wrapper >("PathSmoothCurvetoAbs", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathSmoothCurvetoAbs& >()) ; } pgmagick-0.7.2/src/_PathSmoothCurvetoRel.cpp0000644000076500000240000000205313153230470022055 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathSmoothCurvetoRel_Wrapper: Magick::PathSmoothCurvetoRel { Magick_PathSmoothCurvetoRel_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathSmoothCurvetoRel(p0), py_self(py_self_) {} Magick_PathSmoothCurvetoRel_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathSmoothCurvetoRel(p0), py_self(py_self_) {} Magick_PathSmoothCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathSmoothCurvetoRel& p0): Magick::PathSmoothCurvetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathSmoothCurvetoRel() { class_< Magick::PathSmoothCurvetoRel, bases, Magick_PathSmoothCurvetoRel_Wrapper >("PathSmoothCurvetoRel", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathSmoothCurvetoRel& >()) ; } pgmagick-0.7.2/src/_PathSmoothQuadraticCurvetoAbs.cpp0000644000076500000240000000225113153230470023676 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathSmoothQuadraticCurvetoAbs_Wrapper: Magick::PathSmoothQuadraticCurvetoAbs { Magick_PathSmoothQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathSmoothQuadraticCurvetoAbs(p0), py_self(py_self_) {} Magick_PathSmoothQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathSmoothQuadraticCurvetoAbs(p0), py_self(py_self_) {} Magick_PathSmoothQuadraticCurvetoAbs_Wrapper(PyObject* py_self_, const Magick::PathSmoothQuadraticCurvetoAbs& p0): Magick::PathSmoothQuadraticCurvetoAbs(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathSmoothQuadraticCurvetoAbs() { class_< Magick::PathSmoothQuadraticCurvetoAbs, bases, Magick_PathSmoothQuadraticCurvetoAbs_Wrapper >("PathSmoothQuadraticCurvetoAbs", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathSmoothQuadraticCurvetoAbs& >()) ; } pgmagick-0.7.2/src/_PathSmoothQuadraticCurvetoRel.cpp0000644000076500000240000000225113153230470023713 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { struct Magick_PathSmoothQuadraticCurvetoRel_Wrapper: Magick::PathSmoothQuadraticCurvetoRel { Magick_PathSmoothQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::Coordinate& p0): Magick::PathSmoothQuadraticCurvetoRel(p0), py_self(py_self_) {} Magick_PathSmoothQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::CoordinateList& p0): Magick::PathSmoothQuadraticCurvetoRel(p0), py_self(py_self_) {} Magick_PathSmoothQuadraticCurvetoRel_Wrapper(PyObject* py_self_, const Magick::PathSmoothQuadraticCurvetoRel& p0): Magick::PathSmoothQuadraticCurvetoRel(p0), py_self(py_self_) {} PyObject* py_self; }; } void __PathSmoothQuadraticCurvetoRel() { class_< Magick::PathSmoothQuadraticCurvetoRel, bases, Magick_PathSmoothQuadraticCurvetoRel_Wrapper >("PathSmoothQuadraticCurvetoRel", init< const Magick::Coordinate& >()) .def(init< const Magick::CoordinateList& >()) .def(init< const Magick::PathSmoothQuadraticCurvetoRel& >()) ; } pgmagick-0.7.2/src/_Pixels.cpp0000644000076500000240000000322313200030361017206 0ustar hattori-hstaff00000000000000#include #include #include "_Pixels.h" using namespace boost::python; void __Pixels() { class_< Magick::Pixels, boost::noncopyable >("Pixels", init< Magick::Image& >()) .def("sync", &Magick::Pixels::sync) .def("x", &Magick::Pixels::x) .def("y", &Magick::Pixels::y) .def("columns", &Magick::Pixels::columns) .def("rows", &Magick::Pixels::rows) ; class_< Magick::PixelPacket>("PixelPacket", init()) .def_readwrite("red", &Magick::PixelPacket::red) .def_readwrite("green", &Magick::PixelPacket::green) .def_readwrite("blue", &Magick::PixelPacket::blue) .def_readwrite("opacity", &Magick::PixelPacket::opacity) ; class_< PixelPacketProxy >("PixelPacketProxy", init< Magick::PixelPacket& >()) .add_property("red", &PixelPacketProxy::get_red, &PixelPacketProxy::set_red) .add_property("green", &PixelPacketProxy::get_green, &PixelPacketProxy::set_green) .add_property("blue", &PixelPacketProxy::get_blue, &PixelPacketProxy::set_blue) .add_property("opacity", &PixelPacketProxy::get_opacity, &PixelPacketProxy::set_opacity) ; class_< PixelPacketConstArrayProxy >("PixelPacketConstArrayProxy", no_init) .def("__getitem__", &PixelPacketConstArrayProxy::get_item) .def("__len__", &PixelPacketConstArrayProxy::size) ; class_< PixelPacketArrayProxy >("PixelPacketArrayProxy", no_init) .def("__getitem__", &PixelPacketArrayProxy::get_item) .def("__setitem__", &PixelPacketArrayProxy::set_item) .def("__len__", &PixelPacketArrayProxy::size) ; } pgmagick-0.7.2/src/_Pixels.h0000644000076500000240000000211213200030361016647 0ustar hattori-hstaff00000000000000#ifndef _PIXELS_HEADER_ #define _PIXELS_HEADER_ #include #include "_ArrayProxy.h" // Holds reference to C++ PixelPacket alowing it to be changed via this proxy from python class PixelPacketProxy { public: Magick::PixelPacket& packet; explicit PixelPacketProxy(Magick::PixelPacket& packet) : packet(packet) {} Magick::Quantum get_red() const { return packet.red; } Magick::Quantum get_green() const { return packet.green; } Magick::Quantum get_blue() const { return packet.blue; } Magick::Quantum get_opacity() const { return packet.opacity; } void set_red(Magick::Quantum value) { packet.red = value; } void set_green(Magick::Quantum value) { packet.green = value; } void set_blue(Magick::Quantum value) { packet.blue = value; } void set_opacity(Magick::Quantum value) { packet.opacity = value; } }; typedef ArrayProxy PixelPacketArrayProxy; typedef ArrayProxy PixelPacketConstArrayProxy; #endif //_PIXELS_HEADER_ pgmagick-0.7.2/src/_QuantumOperator.cpp0000644000076500000240000000373713153230470021134 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __QuantumOperator() { #ifndef PGMAGICK_LIB_IMAGEMAGICK enum_< Magick::QuantumOperator >("QuantumOperator") .value("AddQuantumOp", Magick::AddQuantumOp) .value("AndQuantumOp", Magick::AndQuantumOp) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("AssignQuantumOp", Magick::AssignQuantumOp) #endif .value("DivideQuantumOp", Magick::DivideQuantumOp) .value("LShiftQuantumOp", Magick::LShiftQuantumOp) .value("MultiplyQuantumOp", Magick::MultiplyQuantumOp) .value("OrQuantumOp", Magick::OrQuantumOp) .value("RShiftQuantumOp", Magick::RShiftQuantumOp) .value("SubtractQuantumOp", Magick::SubtractQuantumOp) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("ThresholdQuantumOp", Magick::ThresholdQuantumOp) .value("ThresholdBlackQuantumOp", Magick::ThresholdBlackQuantumOp) .value("ThresholdWhiteQuantumOp", Magick::ThresholdWhiteQuantumOp) #endif .value("XorQuantumOp", Magick::XorQuantumOp) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("NoiseGaussianQuantumOp", Magick::NoiseGaussianQuantumOp) .value("NoiseImpulseQuantumOp", Magick::NoiseImpulseQuantumOp) .value("NoiseLaplacianQuantumOp", Magick::NoiseLaplacianQuantumOp) .value("NoiseMultiplicativeQuantumOp", Magick::NoiseMultiplicativeQuantumOp) .value("NoisePoissonQuantumOp", Magick::NoisePoissonQuantumOp) .value("NoiseUniformQuantumOp", Magick::NoiseUniformQuantumOp) .value("NegateQuantumOp", Magick::NegateQuantumOp) .value("GammaQuantumOp", Magick::GammaQuantumOp) .value("DepthQuantumOp", Magick::DepthQuantumOp) .value("LogQuantumOp", Magick::LogQuantumOp) .value("MaxQuantumOp", Magick::MaxQuantumOp) .value("MinQuantumOp", Magick::MinQuantumOp) .value("PowQuantumOp", Magick::PowQuantumOp) #endif #endif ; } pgmagick-0.7.2/src/_QuantumType.cpp0000644000076500000240000000220413153230470020246 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __QuantumType() { enum_< Magick::QuantumType >("QuantumType") .value("IndexQuantum", Magick::IndexQuantum) .value("GrayQuantum", Magick::GrayQuantum) .value("IndexAlphaQuantum", Magick::IndexAlphaQuantum) .value("GrayAlphaQuantum", Magick::GrayAlphaQuantum) .value("RedQuantum", Magick::RedQuantum) .value("CyanQuantum", Magick::CyanQuantum) .value("GreenQuantum", Magick::GreenQuantum) .value("YellowQuantum", Magick::YellowQuantum) .value("BlueQuantum", Magick::BlueQuantum) .value("MagentaQuantum", Magick::MagentaQuantum) .value("AlphaQuantum", Magick::AlphaQuantum) .value("BlackQuantum", Magick::BlackQuantum) .value("RGBQuantum", Magick::RGBQuantum) .value("RGBAQuantum", Magick::RGBAQuantum) .value("CMYKQuantum", Magick::CMYKQuantum) #ifdef PGMAGICK_LIB_GRAPHICSMAGICK_1_3_x .value("CIEYQuantum", Magick::CIEYQuantum) .value("CIEXYZQuantum", Magick::CIEXYZQuantum) #endif ; } pgmagick-0.7.2/src/_RenderingIntent.cpp0000644000076500000240000000077413153230470021063 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __RenderingIntent() { enum_< Magick::RenderingIntent >("RenderingIntent") .value("UndefinedIntent", Magick::UndefinedIntent) .value("SaturationIntent", Magick::SaturationIntent) .value("PerceptualIntent", Magick::PerceptualIntent) .value("AbsoluteIntent", Magick::AbsoluteIntent) .value("RelativeIntent", Magick::RelativeIntent) ; } pgmagick-0.7.2/src/_ResolutionType.cpp0000644000076500000240000000066713153230470020772 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __ResolutionType() { enum_< Magick::ResolutionType >("ResolutionType") .value("UndefinedResolution", Magick::UndefinedResolution) .value("PixelsPerInchResolution", Magick::PixelsPerInchResolution) .value("PixelsPerCentimeterResolution", Magick::PixelsPerCentimeterResolution) ; } pgmagick-0.7.2/src/_SparseColorMethod.cpp0000644000076500000240000000127513153230470021356 0ustar hattori-hstaff00000000000000#include #include using namespace boost::python; void __SparseColorMethod() { #ifdef PGMAGICK_LIB_IMAGEMAGICK enum_< Magick::SparseColorMethod >("SparseColorMethod") .value("UndefinedColorInterpolate", Magick::UndefinedColorInterpolate) .value("BarycentricColorInterpolate", Magick::BarycentricColorInterpolate) .value("BilinearColorInterpolate", Magick::BilinearColorInterpolate) .value("PolynomialColorInterpolate", Magick::PolynomialColorInterpolate) .value("ShepardsColorInterpolate", Magick::ShepardsColorInterpolate) .value("VoronoiColorInterpolate", Magick::VoronoiColorInterpolate) ; #endif } pgmagick-0.7.2/src/_STL.cpp0000644000076500000240000000754213153230470016426 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost::python; namespace { BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Magick_ImageList__writeImages_overloads_1_2, _writeImages, 1, 2) } class _ImageList { public: _ImageList(void); _ImageList(const std::string&); int _length(void); Magick::Image _get(const unsigned int); std::list::iterator _begin(void); std::list::iterator _end(void); void _append(Magick::Image); void _appendImages(Magick::Image*); void _coalesceImages(void); void _readImages(const std::string&); void _readImages(Magick::Blob&); void _writeImages(const std::string&, bool); void _writeImages(Magick::Blob*, bool); void _animationDelayImage(const unsigned int); void _scaleImage(const Magick::Geometry&); std::list::iterator _it; private: std::list _images; }; /* _ImageList class implementation */ _ImageList::_ImageList(void) { } _ImageList::_ImageList(const std::string &imageSpec) { Magick::readImages(&_images, imageSpec); } int _ImageList::_length(void) { return _images.size(); } Magick::Image _ImageList::_get(const unsigned int item_no) { std::list::iterator it = _images.begin(); std::advance(it, item_no); return *it; } std::list::iterator _ImageList::_begin(void) { return _images.begin(); } std::list::iterator _ImageList::_end(void) { return _images.end(); } void _ImageList::_append(Magick::Image _image) { _images.push_back(_image); } void _ImageList::_appendImages(Magick::Image *_image) { Magick::appendImages(_image, _images.begin(), _images.end()); } void _ImageList::_coalesceImages(void) { Magick::coalesceImages(&_images, _images.begin(), _images.end()); } void _ImageList::_readImages(const std::string &imageSpec) { Magick::readImages(&_images, imageSpec); } void _ImageList::_readImages(Magick::Blob &blob) { Magick::readImages(&_images, blob); } void _ImageList::_writeImages(const std::string &imageSpec, bool adjoin=true) { Magick::writeImages(_images.begin(), _images.end(), imageSpec, adjoin); } void _ImageList::_writeImages(Magick::Blob *blob, bool adjoin=true) { Magick::writeImages(_images.begin(), _images.end(), blob, adjoin); } void _ImageList::_animationDelayImage(const unsigned int delay) { for_each(_images.begin(), _images.end(), Magick::animationDelayImage(delay)); } void _ImageList::_scaleImage(const Magick::Geometry &geometry) { for_each(_images.begin(), _images.end(), Magick::scaleImage(geometry)); } void __STL() { class_< _ImageList >("ImageList", init< >()) .def("__len__", &_ImageList::_length) .def("__getitem__", (Magick::Image (_ImageList::*)(const unsigned int))&_ImageList::_get) .def("__iter__", range(&_ImageList::_begin, &_ImageList::_end)) .def("append", (void (_ImageList::*)(Magick::Image))&_ImageList::_append) .def("appendImages", (void (_ImageList::*)(Magick::Image*))&_ImageList::_appendImages) .def("coalesceImags", (void (_ImageList::*)(void))&_ImageList::_coalesceImages) .def("readImages", (void (_ImageList::*)(const std::string&))&_ImageList::_readImages) .def("readImages", (void (_ImageList::*)(Magick::Blob&))&_ImageList::_readImages) .def("writeImages", (void (_ImageList::*)(const std::string&, bool))&_ImageList::_writeImages, Magick_ImageList__writeImages_overloads_1_2()) .def("writeImages", (void (_ImageList::*)(Magick::Blob*, bool))&_ImageList::_writeImages, Magick_ImageList__writeImages_overloads_1_2()) .def("animationDelayImages", (void (_ImageList::*)(const unsigned int))&_ImageList::_animationDelayImage) .def("scaleImages", (void (_ImageList::*)(const Magick::Geometry&))&_ImageList::_scaleImage) ; } pgmagick-0.7.2/src/_StorageType.cpp0000644000076500000240000000070213153230470020221 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __StorageType() { enum_< Magick::StorageType >("StorageType") .value("CharPixel", Magick::CharPixel) .value("ShortPixel", Magick::ShortPixel) .value("IntegerPixel", Magick::IntegerPixel) .value("FloatPixel", Magick::FloatPixel) .value("DoublePixel", Magick::DoublePixel) ; } pgmagick-0.7.2/src/_StretchType.cpp0000644000076500000240000000151113153230470020230 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __StretchType() { enum_< Magick::StretchType >("StretchType") .value("NormalStretch", Magick::NormalStretch) .value("UltraCondensedStretch", Magick::UltraCondensedStretch) .value("ExtraCondensedStretch", Magick::ExtraCondensedStretch) .value("CondensedStretch", Magick::CondensedStretch) .value("SemiCondensedStretch", Magick::SemiCondensedStretch) .value("SemiExpandedStretch", Magick::SemiExpandedStretch) .value("ExpandedStretch", Magick::ExpandedStretch) .value("ExtraExpandedStretch", Magick::ExtraExpandedStretch) .value("UltraExpandedStretch", Magick::UltraExpandedStretch) .value("AnyStretch", Magick::AnyStretch) ; } pgmagick-0.7.2/src/_StyleType.cpp0000644000076500000240000000061313153230470017716 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __StyleType() { enum_< Magick::StyleType >("StyleType") .value("NormalStyle", Magick::NormalStyle) .value("ItalicStyle", Magick::ItalicStyle) .value("ObliqueStyle", Magick::ObliqueStyle) .value("AnyStyle", Magick::AnyStyle) ; } pgmagick-0.7.2/src/_TypeMetric.cpp0000644000076500000240000000103213153230470020035 0ustar hattori-hstaff00000000000000#include #include #include using namespace boost::python; void __TypeMetric() { class_< Magick::TypeMetric, boost::noncopyable >("TypeMetric", init< >()) .def("ascent", &Magick::TypeMetric::ascent) .def("descent", &Magick::TypeMetric::descent) .def("textWidth", &Magick::TypeMetric::textWidth) .def("textHeight", &Magick::TypeMetric::textHeight) .def("maxHorizontalAdvance", &Magick::TypeMetric::maxHorizontalAdvance) ; } pgmagick-0.7.2/src/_VirtualPixelMethod.cpp0000644000076500000240000000313313153230470021545 0ustar hattori-hstaff00000000000000#include #include using namespace boost::python; void __VirtualPixelMethod() { #ifdef PGMAGICK_LIB_IMAGEMAGICK enum_< Magick::VirtualPixelMethod >("VirtualPixelMethod") .value("UndefinedVirtualPixelMethod", Magick::UndefinedVirtualPixelMethod) .value("BackgroundVirtualPixelMethod", Magick::BackgroundVirtualPixelMethod) .value("DitherVirtualPixelMethod", Magick::DitherVirtualPixelMethod) .value("EdgeVirtualPixelMethod", Magick::EdgeVirtualPixelMethod) .value("MirrorVirtualPixelMethod", Magick::MirrorVirtualPixelMethod) .value("RandomVirtualPixelMethod", Magick::RandomVirtualPixelMethod) .value("TileVirtualPixelMethod", Magick::TileVirtualPixelMethod) .value("TransparentVirtualPixelMethod", Magick::TransparentVirtualPixelMethod) .value("MaskVirtualPixelMethod", Magick::MaskVirtualPixelMethod) .value("BlackVirtualPixelMethod", Magick::BlackVirtualPixelMethod) .value("GrayVirtualPixelMethod", Magick::GrayVirtualPixelMethod) .value("WhiteVirtualPixelMethod", Magick::WhiteVirtualPixelMethod) .value("HorizontalTileVirtualPixelMethod", Magick::HorizontalTileVirtualPixelMethod) .value("VerticalTileVirtualPixelMethod", Magick::VerticalTileVirtualPixelMethod) .value("HorizontalTileEdgeVirtualPixelMethod", Magick::HorizontalTileEdgeVirtualPixelMethod) .value("VerticalTileEdgeVirtualPixelMethod", Magick::VerticalTileEdgeVirtualPixelMethod) .value("CheckerTileVirtualPixelMethod", Magick::CheckerTileVirtualPixelMethod) ; #endif } pgmagick-0.7.2/src/_VPath.cpp0000644000076500000240000000121113153230470016771 0ustar hattori-hstaff00000000000000#include #include #include #include using namespace boost; using namespace boost::python; void __VPath() { implicitly_convertible< Magick::VPathBase, Magick::VPath >(); class_< Magick::VPathBase, noncopyable >("VPathBase", no_init) ; class_< Magick::VPath >("VPath", init< >()) .def(init< const Magick::VPathBase& >()) .def(init< const Magick::VPath& >()) .def( self == self ) .def( self != self ) .def( self > self ) .def( self < self ) .def( self >= self ) .def( self <= self ) ; } pgmagick-0.7.2/src/Makefile0000644000076500000240000000652713153230470016563 0ustar hattori-hstaff00000000000000CC = g++ FLAGS = -Wall INCS = -I/usr/include/python2.7 -I/usr/include/GraphicsMagick SO = _pgmagick.so LIBS = -lboost_python -lGraphicsMagick++ LINK_FLAGS = -fPIC -shared #LINK_FLAGS = -bundle -undefined dynamic_lookup # for macOS OBJS = _Blob.o \ _ChannelType.o \ _Color.o \ _ColorspaceType.o \ _CompositeOperator.o \ _CompressionType.o \ _Coordinate.o \ _DecorationType.o \ _DistortImageMethod.o \ _Drawable.o \ _DrawableAffine.o \ _DrawableArc.o \ _DrawableBezier.o \ _DrawableCircle.o \ _DrawableClipPath.o \ _DrawableColor.o \ _DrawableCompositeImage.o \ _DrawableDashArray.o \ _DrawableDashOffset.o \ _DrawableEllipse.o \ _DrawableFillColor.o \ _DrawableFillOpacity.o \ _DrawableFillRule.o \ _DrawableFont.o \ _DrawableGravity.o \ _DrawableLine.o \ _DrawableMatte.o \ _DrawableMiterLimit.o \ _DrawablePath.o \ _DrawablePoint.o \ _DrawablePointSize.o \ _DrawablePolygon.o \ _DrawablePolyline.o \ _DrawablePopClipPath.o \ _DrawablePopGraphicContext.o \ _DrawablePopPattern.o \ _DrawablePushClipPath.o \ _DrawablePushGraphicContext.o \ _DrawablePushPattern.o \ _DrawableRectangle.o \ _DrawableRotation.o \ _DrawableRoundRectangle.o \ _DrawableScaling.o \ _DrawableSkewX.o \ _DrawableSkewY.o \ _DrawableStrokeAntialias.o \ _DrawableStrokeColor.o \ _DrawableStrokeLineCap.o \ _DrawableStrokeLineJoin.o \ _DrawableStrokeOpacity.o \ _DrawableStrokeWidth.o \ _DrawableText.o \ _DrawableTextAntialias.o \ _DrawableTextDecoration.o \ _DrawableTextUnderColor.o \ _DrawableTranslation.o \ _DrawableViewbox.o \ _Exception.o \ _EndianType.o \ _FillRule.o \ _FilterTypes.o \ _Geometry.o \ _GravityType.o \ _Image.o \ _ImageType.o \ _InterlaceType.o \ _LineCap.o \ _LineJoin.o \ _Montage.o \ _NoiseType.o \ _OrientationType.o \ _PaintMethod.o \ _PathArcAbs.o \ _PathArcArgs.o \ _PathArcRel.o \ _PathClosePath.o \ _PathCurvetoAbs.o \ _PathCurvetoArgs.o \ _PathCurvetoRel.o \ _PathLinetoAbs.o \ _PathLinetoHorizontalAbs.o \ _PathLinetoHorizontalRel.o \ _PathLinetoRel.o \ _PathLinetoVerticalAbs.o \ _PathLinetoVerticalRel.o \ _PathMovetoAbs.o \ _PathMovetoRel.o \ _PathQuadraticCurvetoAbs.o \ _PathQuadraticCurvetoArgs.o \ _PathQuadraticCurvetoRel.o \ _PathSmoothCurvetoAbs.o \ _PathSmoothCurvetoRel.o \ _PathSmoothQuadraticCurvetoAbs.o \ _PathSmoothQuadraticCurvetoRel.o \ _Pixels.o \ _QuantumOperator.o \ _QuantumType.o \ _RenderingIntent.o \ _ResolutionType.o \ _SparseColorMethod.o \ _StorageType.o \ _StretchType.o \ _StyleType.o \ _STL.o \ _TypeMetric.o \ _VirtualPixelMethod.o \ _VPath.o \ _gminfo.o \ _main.o .SUFFIXES: .cpp .o $(SO): $(OBJS) $(CC) $(LIBS) $(LINK_FLAGS) -o $(SO) $^ .cpp.o: $(CC) $(FLAGS) $(INCS) -o $@ -c $< clean: rm -rf $(OBJS) $(SO) pgmagick-0.7.2/test/0000755000076500000240000000000013200337770015305 5ustar hattori-hstaff00000000000000pgmagick-0.7.2/test/test_cookbook.py0000644000076500000240000000644313153230470020527 0ustar hattori-hstaff00000000000000# coding: utf-8 import os.path import sys import unittest from pgmagick import api from pgmagick import Image, Geometry, Blob class TestCookbook(unittest.TestCase): def setUp(self): self.tmp_filename_jpg = "_cookbook_test.jpg" self.tmp_filename_png = "_cookbook_test.png" def tearDown(self): if os.path.exists(self.tmp_filename_jpg): os.remove(self.tmp_filename_jpg) if os.path.exists(self.tmp_filename_png): os.remove(self.tmp_filename_png) def test_red_background_jpeg_image(self): img = api.Image((300, 200), 'red') img.write(self.tmp_filename_jpg) def test_transparent_png_image(self): img = api.Image((300, 200), 'transparent') img.write(self.tmp_filename_png) def test_gradient_png_image(self): img = api.Image((300, 200), 'gradient:#ffffff-#000000') img.write(self.tmp_filename_png) def test_annotate(self): img = api.Image((300, 200)) if sys.platform.lower() == 'darwin': img.font("/Library/Fonts/Arial.ttf") img.annotate('Hello World') img.write(self.tmp_filename_png) def test_annotate_with_angle45(self): img = api.Image((300, 200)) if sys.platform.lower() == 'darwin': img.font("/Library/Fonts/Arial.ttf") img.annotate('Hello World', angle=45) img.write(self.tmp_filename_png) def test_annotate_with_japanese_font(self): img = api.Image((300, 200)) if sys.platform.lower() == 'darwin': img.font("/System/Library/Fonts/Hiragino Sans GB W3.ttc") else: # TODO: not support windows img.font("/usr/share/fonts/truetype/ttf-japanese-gothic.ttf") img.annotate('ようこそpgmagickへ!!') img.write(self.tmp_filename_png) def test_scale(self): img = api.Image((300, 200), 'blue') img.write(self.tmp_filename_png) img2 = api.Image(self.tmp_filename_png) img2.scale(0.5) img2.write(self.tmp_filename_png) self.assertEqual(img2.width, 150) self.assertEqual(img2.height, 100) def test_scale_with_lanczos(self): img = api.Image((300, 200), 'blue') img.write(self.tmp_filename_png) img2 = api.Image(self.tmp_filename_png) img2.scale((150, 100), 'lanczos') img2.write(self.tmp_filename_png) self.assertEqual(img2.width, 150) self.assertEqual(img2.height, 100) @unittest.skipIf(sys.version_info[0] == 3, "not support python3.x") def test_scale_jpeg(self): img = api.Image((400, 400), 'blue') img.write(self.tmp_filename_jpg) with open(self.tmp_filename_jpg, 'rb') as fp: b = Blob(str(fp.read())) img2 = Image(b, Geometry(200, 200)) if sys.platform.lower() == 'darwin': # NOTE: error occur when use '200x200' param # ----------------------------------------------------- # RuntimeError: Magick: Application transferred too few # scanlines (x.jpg) reported by coders/jpeg.c:344 (JPEGErrorHandler) img2.scale('199x199') else: img2.scale('200x200') img2.write(self.tmp_filename_jpg) if __name__ == '__main__': unittest.main() pgmagick-0.7.2/test/test_pgmagick_api.py0000644000076500000240000003352313200030361021321 0ustar hattori-hstaff00000000000000from __future__ import print_function import hashlib import sys import unittest import pgmagick from pgmagick.api import Image, Draw print(pgmagick.gminfo().version) LIBGM_VERSION = [int(v) for v in pgmagick.gminfo().version.split('.')] class ImageTestCase(unittest.TestCase): def setUp(self): self.img = Image((600, 400), 'red') def test_unicodefilename(self): self.img.write('unicode.png') img = Image(u'unicode.png') img.scale(0.5) img.write(u'unicode.jpg') def test_nonarg(self): Image() def test_arg(self): Image((600, 400), 'red') def test_arg_float(self): Image((600.5, 400.4), 'red') def test_blur(self): self.img.blur(2, 2.3) self.img.write('t.jpg') def test_blur_channel(self): self.img.blur_channel('cyan') self.img.write('t.jpg') def test_scale(self): img = Image((600, 400), 'gradient:#ffffff-#000000') img.scale(0.6) img.write('t.jpg') def test_scale_with_filtertype(self): img = Image((600, 400), 'gradient:#ffffff-#000000') img.scale(0.6, 'Catrom') img.write('t.jpg') m = hashlib.md5() with open('t.jpg', 'rb') as fp: m.update(fp.read()) scale_with_filtertype_catrom_digest = m.hexdigest() img = Image((600, 400), 'gradient:#ffffff-#000000') img.scale(0.6, 'Cubic') img.write('t.jpg') m = hashlib.md5() with open('t.jpg', 'rb') as fp: m.update(fp.read()) scale_with_filtertype_cubic_digest = m.hexdigest() img = Image((600, 400), 'gradient:#ffffff-#000000') img.scale(0.6) img.write('t.jpg') m = hashlib.md5() with open('t.jpg', 'rb') as fp: m.update(fp.read()) scale_digest = m.hexdigest() self.assertNotEqual(scale_with_filtertype_catrom_digest, scale_digest) self.assertNotEqual(scale_with_filtertype_catrom_digest, scale_with_filtertype_cubic_digest) def test_composite_arg_list(self): base = Image((300, 200), 'green') layer = Image((300, 200), 'transparent') drawer = Draw() drawer.circle(50, 50, 50, 100) layer.draw(drawer) base.composite(layer, (10, 10), 'over') base.write('t.png') def test_composite_arg_gravity(self): base = Image((300, 200), 'green') layer = Image((150, 100), 'transparent') drawer = Draw() drawer.circle(50, 50, 20, 20) layer.draw(drawer) base.composite(layer, 'center', 'over') base.write('t.png') def test_crop(self): img = Image((300, 200), 'gradient:#ffff00-#00ffff') img.crop(20, 20, 50, 100) img.write('t.png') def test_fontpointsize(self): img = Image((300, 200), 'red') img.font_pointsize(60) self.assertEqual(60, img.font_pointsize()) self.assertEqual(float, type(img.font_pointsize())) if sys.platform.lower() == 'darwin': img.font("/Library/Fonts/Arial.ttf") img.annotate("hello", (100, 100)) img.write('t.png') def test_size_property(self): img = Image((500, 300), 'red') self.assertEqual(img.width, 500) self.assertEqual(img.height, 300) img.scale(0.5) self.assertEqual(img.width, 250) self.assertEqual(img.height, 150) class DrawTestCase(unittest.TestCase): def setUp(self): self.img = Image((600, 400), 'red') self.d = Draw() def test_affine(self): self.d.affine(10, 10, 20, 20, 40, 40) self.img.draw(self.d.drawer) self.img.write('t.jpg') def test_arc(self): self.d.arc(30, 30, 40, 40, 40, 40) self.img.draw(self.d.drawer) self.img.write('t.jpg') def test_bezier(self): points = ((30, 30), (50, 75), (200, 100)) self.d.bezier(points) self.img.draw(self.d.drawer) self.img.write('t.png') def test_circle(self): self.d.circle(40, 40, 50, 100) self.img.draw(self.d.drawer) self.img.write('t.png') def test_color(self): self.d.color(40, 40, 'point') self.img.draw(self.d.drawer) self.img.write('t.png') def test_composite(self): img1 = Image((20, 20), 'plasma:blue') self.d.composite(10, 10, 0, 0, img1) self.img.draw(self.d) self.img.write('t.png') def test_draw_for_draw_class(self): self.d.color(40, 40, 'point') self.d.circle(100, 100, 50, 100) self.img.draw(self.d) self.img.write('t.png') def test_ellipse(self): self.d.ellipse(150, 150, 120, 120, 0, 120) self.img.draw(self.d) self.img.write('t.png') def test_fill_color(self): self.d.fill_color('#f09060') self.d.ellipse(150, 150, 120, 120, 0, 120) self.img.draw(self.d) self.img.write('t.png') def test_fill_rule(self): self.d.fill_rule('evenodd') self.d.circle(150, 150, 50, 180) self.d.fill_rule('nonzero') self.d.circle(350, 150, 250, 180) self.img.draw(self.d.drawer) self.img.write('t.png') def test_fill_opacity(self): self.im = Image((600, 400), 'transparent') self.d.fill_color('red') self.d.fill_opacity(0.5) self.d.circle(150, 150, 50, 180) self.d.fill_color('green') self.d.fill_opacity(0.8) self.d.circle(160, 160, 50, 180) self.img.draw(self.d.drawer) self.img.write('t.png') def test_font_style_italic(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', 'italic') self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_font_style_oblique(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', 'oblique') self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_font_stretch_ultracondensed(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', 'oblique', stretch='ultracondensed') self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_font_stretch_extraexpanded(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', 'oblique', stretch='extraexpanded') self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_font_weight100(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', weight=100) self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_font_bold(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('vera.ttf', weight='bold') self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_gravity(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.gravity('center') self.d.text(0, 0, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_line(self): self.d.line(10, 10, 40, 200) self.img.draw(self.d) self.img.write('t.png') def test_matte(self): self.d.matte(30, 30, 'filltoborder') self.img.draw(self.d) self.img.write('t.png') def test_miterlimit(self): self.d.miterlimit(1) self.d.stroke_color('black') self.d.stroke_width(3) self.d.line(10, 200, 100, 10) self.d.line(100, 10, 210, 200) self.img.draw(self.d) self.d = Draw() self.d.miterlimit(18) self.d.stroke_color('black') self.d.stroke_width(3) self.d.stroke_opacity(0.5) self.d.fill_opacity(0.5) self.d.line(210, 200, 300, 10) self.d.line(300, 10, 410, 200) self.img.draw(self.d) self.img.write('t.png') def test_path(self): paths = ((40, 30),) self.d.path(paths) self.img.draw(self.d.drawer) self.img.write('t.png') def test_point(self): for i in range(50): self.d.point(i, i + 10) for i in range(50, 200, 2): self.d.point(i, i + 10) self.img.draw(self.d.drawer) self.img.write('t.png') def test_pointsize(self): self.d.pointsize(10) self.d.pointsize(30.) self.d.circle(150, 150, 50, 180) self.img.draw(self.d.drawer) self.img.write('t.png') def test_polygon(self): coordinate = ((10, 10), (20, 30), (40, 50)) self.d.polygon(coordinate) coordinate = [(100, 100), (150, 100), [150, 150], (100, 150)] self.d.polygon(coordinate) self.img.draw(self.d) self.img.write('t.png') def test_polyline(self): coordinate = ((10, 10), (20, 30), (40, 50)) self.d.polyline(coordinate) coordinate = [(100, 100), (150, 100), [150, 150], (100, 150)] self.d.polyline(coordinate) self.img.draw(self.d) self.img.write('t.png') def test_rectangle(self): self.d.rectangle(50, 50, 100, 100) self.img.draw(self.d) self.img.write('t.png') def test_rotation(self): self.d.rectangle(150, 150, 200, 200) self.d.rotation(40) self.img.draw(self.d) self.d = Draw() self.d.fill_opacity(0.8) self.d.rectangle(150, 150, 200, 200) self.d.rotation(20) self.img.draw(self.d) self.d = Draw() self.d.fill_opacity(0.6) self.d.rectangle(150, 150, 200, 200) self.img.draw(self.d) self.img.write('t.png') def test_round_rectangle(self): self.d = Draw() self.d.round_rectangle(20, 20, 30, 30, 150, 150) self.img.draw(self.d) self.img.write('t.png') def test_scaling(self): self.d.scaling(0.4, 0.4) self.d.circle(150, 150, 150, 200) self.img.draw(self.d) self.d = Draw() self.d.fill_opacity(0.6) self.d.circle(150, 150, 150, 200) self.img.draw(self.d) self.img.write('t.png') def test_skew(self): self.d = Draw() self.d.fill_opacity(0.6) self.d.circle(50, 50, 50, 100) self.img.draw(self.d) self.d = Draw() self.d.fill_opacity(0.6) self.d.circle(50, 50, 50, 100) self.d.skewx(40) self.img.draw(self.d) self.d = Draw() self.d.fill_opacity(0.6) self.d.circle(50, 50, 50, 100) self.d.skewy(40) self.img.draw(self.d) self.img.write('t.png') def test_stroke_antialias(self): self.d.stroke_color('black') self.d.stroke_width(20) self.d.stroke_antialias(True) self.d.line(10, 10, 40, 200) self.d.stroke_antialias(False) self.d.line(50, 10, 80, 200) self.img.draw(self.d) self.img.write('t.png') def test_stroke_linecap(self): self.d.stroke_color('lime') self.d.stroke_linecap('butt') self.d.stroke_linecap('round') self.d.stroke_linecap('square') self.d.line(10, 10, 40, 200) self.img.draw(self.d) self.img.write('t.png') @unittest.skipIf(LIBGM_VERSION <= [1, 3, 18], "bug in gm version: %s" % str(LIBGM_VERSION)) def test_stroke_linejoin(self): self.d.stroke_color('lime') self.d.stroke_linejoin('round') self.d.stroke_linejoin('bevel') self.d.stroke_linejoin('miter') self.d.line(10, 10, 40, 200) self.img.draw(self.d) self.img.write('t.png') def test_stroke_color(self): self.d.stroke_color('lime') self.d.line(10, 10, 40, 200) self.img.draw(self.d) self.img.write('t.png') def test_stroke_width(self): self.d.stroke_width(20) self.d.line(20, 20, 50, 210) self.img.draw(self.d) self.img.write('t.png') def test_text(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.text(30, 30, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_text_antialias(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.font('courier', weight='bold') self.d.pointsize(70) self.d.text_antialias(False) self.d.text(30, 100, "hello pgmagick") self.d.text_antialias(True) self.d.text(30, 200, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_text_decoration(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.pointsize(70) self.d.text_decoration('overline') self.d.text(30, 100, "hello pgmagick") self.d.text_decoration('linethrough') self.d.text(30, 200, "hello pgmagick") self.d.text_decoration('underline') self.d.text(30, 300, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_text_undercolor(self): if sys.platform.lower() == 'darwin': self.skipTest("DrawableFont() is broken") self.d.pointsize(70) self.d.text_undercolor('lime') self.d.text(30, 100, "hello pgmagick") self.img.draw(self.d) self.img.write('t.png') def test_translate(self): self.d.translate(10, 200) self.img.draw(self.d) self.img.write('t.png') unittest.main() pgmagick-0.7.2/test/test_pgmagick_blob.py0000644000076500000240000000012213153230470021465 0ustar hattori-hstaff00000000000000import sys sys.path.append('../') sys.path.append('./') from pgmagick import Blob pgmagick-0.7.2/test/test_pgmagick_color.py0000644000076500000240000000035313153230470021673 0ustar hattori-hstaff00000000000000import sys sys.path.append('../') sys.path.append('./') from pgmagick import Color from pgmagick import ColorHSL from pgmagick import ColorGray from pgmagick import ColorMono from pgmagick import ColorRGB from pgmagick import ColorYUV pgmagick-0.7.2/test/test_pgmagick_geometry.py0000644000076500000240000000012613153230470022406 0ustar hattori-hstaff00000000000000import sys sys.path.append('../') sys.path.append('./') from pgmagick import Geometry pgmagick-0.7.2/test/test_pgmagick_image.py0000644000076500000240000001363513200030361021634 0ustar hattori-hstaff00000000000000import unittest import pgmagick from pgmagick import Blob, Image, Geometry, Color, LineJoin, StorageType, FilterTypes from pgmagick import ChannelType from pgmagick import gminfo if gminfo.library == 'ImageMagick': from pgmagick import DistortImageMethod, SparseColorMethod libgm_version = [int(v) for v in pgmagick.gminfo().version.split('.')] class TestImage(unittest.TestCase): def test_noarg_init(self): im = Image() self.assertEqual(type(im), Image) def test_fromfile_init_error(self): self.assertRaises(RuntimeError, Image, "xXxX.jpg") def test_size_and_color_init(self): im = Image(Geometry(300, 200), Color('transparent')) size = im.size() self.assertEqual(300, size.width()) self.assertEqual(200, size.height()) def test_stroke_linejoin(self): im = Image(Geometry(300, 200), Color('transparent')) im.strokeLineJoin(LineJoin.MiterJoin) im.strokeLineJoin(LineJoin.RoundJoin) im.strokeLineJoin(LineJoin.BevelJoin) def getpixels_test_template(self, use_const): img = Image(Geometry(300, 200), Color('transparent')) getPixelsMethod = img.getConstPixels if use_const else img.getPixels pixels = getPixelsMethod(40, 50, 10, 10) self.assertEqual(10 * 10, len(pixels)) with self.assertRaises(IndexError): pixels[2000] colorMax = Color.scaleDoubleToQuantum(1.0) self.assertEqual(0, pixels[0].red) self.assertEqual(0, pixels[0].blue) self.assertEqual(0, pixels[0].green) self.assertEqual(colorMax, pixels[0].opacity) return pixels def test_image_getpixels(self): self.getpixels_test_template(use_const=False) def test_image_getconstpixels(self): pixels = self.getpixels_test_template(use_const=True) # either throw AttributeError (write to readonly field) # or at least don't update original data (elements returned by indexing are cloned) try: pixels[0].red = 50 self.assertEqual(pixels[0].red, 0) except AttributeError: pass def test_image_setpixels(self): img = Image(Geometry(300, 200), Color('transparent')) pixels = img.setPixels(40, 50, 5, 5) for pixel in pixels: pixel.red = 50 img.syncPixels() for pixel in img.getPixels(40, 50, 5, 5): self.assertEqual(50, pixel.red) def test_image_init_storagetype(self): data = ["0" for i in range(10000)] img = Image(100, 100, "RGB", StorageType.CharPixel, "".join(data)) del(img) #def test_haldClut(self): # img = Image() # if hasattr(img, "haldClut"): # clutimg = Image(Geometry(400, 300), Color("transparent")) # clutimg.read("gradient:white-black") # img.haldClut(clutimg) @unittest.skipIf(libgm_version < [1, 3, 19], "not support gm version: %s" % str(libgm_version)) def test_image_thumbnail(self): im = Image(Geometry(300, 200), Color('transparent')) g = Geometry(150, 100) im.thumbnail(g) @unittest.skipIf(libgm_version < [1, 3, 22], "not support gm version: %s" % str(libgm_version)) def test_image_resize(self): im = Image(Geometry(300, 200), Color('transparent')) g = Geometry(150, 100) ft = FilterTypes.BlackmanFilter blur = 0.5 im.resize(g, ft, blur) im.resize(g, ft) im.resize(g) def test_color_histogram(self): redColor = Color('red') im = Image(Geometry(30, 20), redColor) histogram = im.colorHistogram() self.assertEqual(1, len(histogram)) # test in, __getitem__ self.assertIn(redColor, histogram) self.assertEqual(30 * 20, histogram[redColor]) # iteration example for packet in histogram: color, count = packet.key(), packet.data() self.assertEqual(redColor, color) self.assertEqual(30 * 20, count) class TestIMImage(unittest.TestCase): def setUp(self): self.img = Image() self.is_imagemagick = False if gminfo.library == 'ImageMagick': self.is_imagemagick = True def test_adaptiveBlur(self): if self.is_imagemagick: self.img.adaptiveBlur() def test_distort(self): if self.is_imagemagick: self.img.distort(DistortImageMethod.ScaleRotateTranslateDistortion, 1, 1.0, True) def test_extent(self): if self.is_imagemagick: self.img.extent(Geometry(100, 100)) def test_inverseFourierTransform(self): if self.is_imagemagick: phase = Image() self.img.inverseFourierTransform(phase) def test_sigmoidalContrast(self): if self.is_imagemagick: self.img.sigmoidalContrast(2, 2.) def test_splice(self): if self.is_imagemagick: self.img.splice(Geometry(100, 100)) def test_sparseColor(self): if self.is_imagemagick: self.img.sparseColor(ChannelType.RedChannel, SparseColorMethod.PolynomialColorInterpolate, 1, 1.) def test_exif_profile(self): if self.is_imagemagick: ret = self.img.exifProfile() self.assertEqual(type(ret), type(pgmagick._pgmagick.Blob())) def test_virtualPixelMethod(self): if self.is_imagemagick: ret = self.img.virtualPixelMethod() self.assertEqual(type(ret), type(pgmagick._pgmagick.VirtualPixelMethod())) class TestImageWithBlob(unittest.TestCase): def test_fromblob(self): with open('../example/X.jpg', 'rb') as f: data = f.read() self.assertEqual(True, type(data) in (bytes, str)) b = Blob(data) img = Image(b) img.write('X2.jpg') self.assertEqual(type(img), Image) unittest.main() pgmagick-0.7.2/test/test_pgmagick_imagelist.py0000644000076500000240000000032013153230470022525 0ustar hattori-hstaff00000000000000import unittest from pgmagick import ImageList class TestImageList(unittest.TestCase): def test_noarg(self): imgs = ImageList() self.assertEqual(type(imgs), ImageList) unittest.main() pgmagick-0.7.2/test/test_pgmagick_libinfo.py0000644000076500000240000000021313153230470022172 0ustar hattori-hstaff00000000000000from __future__ import print_function from pgmagick import gminfo as info libinfo = info() print(libinfo.version) print(libinfo.library) pgmagick-0.7.2/test/test_pgmagick_montage.py0000644000076500000240000000012513153230470022204 0ustar hattori-hstaff00000000000000import sys sys.path.append('../') sys.path.append('./') from pgmagick import Montage pgmagick-0.7.2/test/test_pgmagick_pixel.py0000644000076500000240000000016613153230470021700 0ustar hattori-hstaff00000000000000import sys sys.path.append('../') sys.path.append('./') from pgmagick import Pixels from pgmagick import PixelPacket