From 006128186174718b0fd19fdef3317b9063ab8fde Mon Sep 17 00:00:00 2001 From: deadprogram Date: Thu, 23 Apr 2026 11:28:20 +0200 Subject: [PATCH] cmd/fontpreview: add tool with generated font previews Add a font preview generator that renders sample PNGs for each bundled font. Signed-off-by: deadprogram --- cmd/fontpreview/main.go | 189 +++++++++++++++++++++++++++++++++++++++ images/freemono.png | Bin 0 -> 3018 bytes images/freesans.png | Bin 0 -> 3611 bytes images/freeserif.png | Bin 0 -> 3525 bytes images/gophers.png | Bin 0 -> 3111 bytes images/notoemoji.png | Bin 0 -> 890 bytes images/notosans.png | Bin 0 -> 1555 bytes images/org_01.png | Bin 0 -> 1091 bytes images/picopixel.png | Bin 0 -> 996 bytes images/proggy.png | Bin 0 -> 1509 bytes images/shnm.png | Bin 0 -> 1269 bytes images/tiny3x3a2pt7b.png | Bin 0 -> 968 bytes images/tomthumb.png | Bin 0 -> 958 bytes 13 files changed, 189 insertions(+) create mode 100644 cmd/fontpreview/main.go create mode 100644 images/freemono.png create mode 100644 images/freesans.png create mode 100644 images/freeserif.png create mode 100644 images/gophers.png create mode 100644 images/notoemoji.png create mode 100644 images/notosans.png create mode 100644 images/org_01.png create mode 100644 images/picopixel.png create mode 100644 images/proggy.png create mode 100644 images/shnm.png create mode 100644 images/tiny3x3a2pt7b.png create mode 100644 images/tomthumb.png diff --git a/cmd/fontpreview/main.go b/cmd/fontpreview/main.go new file mode 100644 index 0000000..c7f19e3 --- /dev/null +++ b/cmd/fontpreview/main.go @@ -0,0 +1,189 @@ +// fontpreview renders a sample of each tinyfont font to a PNG in the images/ directory. +// Run from the repo root: go run ./cmd/fontpreview +package main + +import ( + "fmt" + "image" + "image/color" + "image/png" + "os" + "path/filepath" + + "tinygo.org/x/tinyfont" + "tinygo.org/x/tinyfont/freemono" + "tinygo.org/x/tinyfont/freesans" + "tinygo.org/x/tinyfont/freeserif" + "tinygo.org/x/tinyfont/gophers" + "tinygo.org/x/tinyfont/notoemoji" + "tinygo.org/x/tinyfont/notosans" + "tinygo.org/x/tinyfont/proggy" + "tinygo.org/x/tinyfont/shnm" +) + +// imgDisplay is an in-memory display backed by an image.RGBA. +type imgDisplay struct { + img *image.RGBA +} + +func (d *imgDisplay) SetPixel(x, y int16, c color.RGBA) { + b := d.img.Bounds() + if int(x) >= 0 && int(x) < b.Max.X && int(y) >= 0 && int(y) < b.Max.Y { + d.img.SetRGBA(int(x), int(y), c) + } +} + +func (d *imgDisplay) Size() (int16, int16) { + b := d.img.Bounds() + return int16(b.Max.X), int16(b.Max.Y) +} + +func (d *imgDisplay) Display() error { return nil } + +// measureWidth returns the pixel width of text rendered in font. +func measureWidth(font tinyfont.Fonter, text string) int { + w := 0 + for _, r := range text { + g := font.GetGlyph(r) + w += int(g.Info().XAdvance) + } + return w +} + +// scaleImage returns a nearest-neighbour upscaled copy of src. +func scaleImage(src *image.RGBA, scale int) *image.RGBA { + b := src.Bounds() + dst := image.NewRGBA(image.Rect(0, 0, b.Max.X*scale, b.Max.Y*scale)) + for y := 0; y < b.Max.Y; y++ { + for x := 0; x < b.Max.X; x++ { + c := src.RGBAAt(x, y) + for dy := 0; dy < scale; dy++ { + for dx := 0; dx < scale; dx++ { + dst.SetRGBA(x*scale+dx, y*scale+dy, c) + } + } + } + } + return dst +} + +// renderFontRows renders multiple rows of text in font and saves a PNG to outDir/name.png. +// Small fonts are scaled up so they remain visible at a reasonable size. +func renderFontRows(name string, font tinyfont.Fonter, rows []string, outDir string, extraBottomPadding int) error { + const padding = 4 + const fgVal = 0x00 + const bg = 0xFF + + yAdv := int(font.GetYAdvance()) + if yAdv == 0 { + yAdv = 16 + } + + // Calculate max width and total height. + maxW := 0 + for _, row := range rows { + w := measureWidth(font, row) + if w > maxW { + maxW = w + } + } + + w := maxW + padding*2 + h := len(rows)*yAdv + padding*2 + extraBottomPadding + + img := image.NewRGBA(image.Rect(0, 0, w, h)) + // White background. + white := color.RGBA{bg, bg, bg, 0xFF} + for y := 0; y < h; y++ { + for x := 0; x < w; x++ { + img.SetRGBA(x, y, white) + } + } + + d := &imgDisplay{img} + fgColor := color.RGBA{fgVal, fgVal, fgVal, 0xFF} + for i, row := range rows { + y := int16(padding + i*yAdv + yAdv) + tinyfont.WriteLine(d, font, int16(padding), y, row, fgColor) + } + + // Scale up small fonts so the image is at least ~48px tall. + scale := 1 + switch { + case h <= 16: + scale = 5 + case h <= 24: + scale = 4 + case h <= 48: + scale = 2 + } + if scale > 1 { + img = scaleImage(img, scale) + } + + path := filepath.Join(outDir, name+".png") + f, err := os.Create(path) + if err != nil { + return err + } + defer f.Close() + return png.Encode(f, img) +} + +func main() { + const outDir = "images" + + asciiRows := []string{ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "abcdefghijklmnopqrstuvwxyz", + "0123456789", + "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + } + + // Gophers font only shows uppercase. + gophersRows := []string{ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + } + + // A selection of emoji known to exist in the 12pt NotoEmoji font. + emojiRows := []string{ + "☀♠♥♦⭐❤✅✨🎉🎊🔥💡", + } + + // Japanese hiragana characters for shnm font. + japaneseRows := []string{ + "あいうえおかきくけこ", + "さしすせそたちつてと", + "なにぬねのはひふへほ", + } + + type fontEntry struct { + name string + font tinyfont.Fonter + rows []string + extraBottomPadding int + } + + fonts := []fontEntry{ + {"freemono", &freemono.Regular12pt7b, asciiRows, 8}, + {"freesans", &freesans.Regular12pt7b, asciiRows, 8}, + {"freeserif", &freeserif.Regular12pt7b, asciiRows, 8}, + {"gophers", &gophers.Regular32pt, gophersRows, 0}, + {"notoemoji", ¬oemoji.NotoEmojiRegular12pt, emojiRows, 0}, + {"notosans", ¬osans.Notosans12pt, asciiRows, 0}, + {"proggy", &proggy.TinySZ8pt7b, asciiRows, 0}, + {"shnm", &shnm.Shnmk12, japaneseRows, 0}, + {"org_01", &tinyfont.Org01, asciiRows, 4}, + {"picopixel", &tinyfont.Picopixel, asciiRows, 4}, + {"tiny3x3a2pt7b", &tinyfont.Tiny3x3a2pt7b, asciiRows, 0}, + {"tomthumb", &tinyfont.TomThumb, asciiRows, 4}, + } + + for _, fe := range fonts { + if err := renderFontRows(fe.name, fe.font, fe.rows, outDir, fe.extraBottomPadding); err != nil { + fmt.Fprintf(os.Stderr, "error rendering %s: %v\n", fe.name, err) + } else { + fmt.Printf("rendered %s → %s/%s.png\n", fe.name, outDir, fe.name) + } + } +} diff --git a/images/freemono.png b/images/freemono.png new file mode 100644 index 0000000000000000000000000000000000000000..6000823f51de17f2f8129c8ae541eefe81457550 GIT binary patch literal 3018 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 literal 0 HcmV?d00001 diff --git a/images/freesans.png b/images/freesans.png new file mode 100644 index 0000000000000000000000000000000000000000..63ae2694b24e73a1a4d466449e503a301dd384a5 GIT binary patch literal 3611 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 YZyT1HPM~R}e**@y>u}?8Lzk$30gNU1YybcN literal 0 HcmV?d00001 diff --git a/images/freeserif.png b/images/freeserif.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b184a4ee5b62547558af3a9646a625850d5b6b GIT binary patch literal 3525 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 X%ROcudiM8w1~50VGA_C0`q#ezK}+|b literal 0 HcmV?d00001 diff --git a/images/gophers.png b/images/gophers.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef534f0533e16f2a6ae4ef65bfda8758880df16 GIT binary patch literal 3111 zcmbtWYg7{07UoXV+bMfkQD&v7Gm<)K=4hf#`N}4{sX_T_X2MWYDGimER;y-N5{9Ox zsI0`MR30TNAtFtUZQ4z?yKdMe8&n70BoE-<@;k;ddcKSXYbIVhk$qOeI_HL zoA0++WFKkfeq0I=@x zt*-%q{eOPF6#%$t{{I~;sy=PNFU~6jCd{}>%3DiV4Y=uE<(fec&Et;4`x3eQtLrgC zL2Lf{>S1BbeulT}C;g;Xa$l=r@Y(3MGiR)&ze5i4wdH&qV2Pdgn`B#?K0wE_E ztp@;Jzg^?HZY36mEFGjQ^j z1{5ea9QK8pi>+2|#sp-NRb$$jnb`HTaBzf}%NK%>3$BP+?EoK%FEhxj+$P~`927+X zYApae>=UKT|6JMqQ zgAuq4Kw0shH-__?Ra0c9p_|*o@^0!R5*v=rS7v z@7PM@IzJ7ke=_O}jFgyq$wm9G&@@31O{aZJx6ojk8R1?9mmD{HK=T4yoI~b@y;*_l zDIRYM8VJ~nl zb#~O_3D+e33__KU6FPM%l4++@biE>QTn6`v5^evI#qqY|Ym#I3Y9xF2I#RYU*j~Tf z{Z_o_S*v-`oK~zRd!}bTJ#mbYt+MSlHqw}_yzlI3UZ{lb$n{F?gydQ8R85VzTumc0 zYn0S(LY*;qM0iZ5w@?rsJYuuP;+s_4&d<>E13>YFY$1=vS>}iT9MD?Upgbmf8Z&vv zG&q#&@|QyH+;MqmQIqJX-E|yUMiFOmzQnc#?wD$x{)09)5%gzo@U%Ip6GiY> zyOf2x$Ah~)?GZ7)OHSbTJG){gs?-HQ;F~u0Sf@OZP8p$7Bmj93gLev|NNG!cat1P8 z+cP__RyWS3RM??x7KK2)s!=#$)I}Q_{N$U67hC#=M^+FCbY109crx44%>j}2o^J5y z*ErWf`dKBSxE(pSp;@M8*-yj^=f>_+88;E_ov*2|TdB?46&-@C<2f1STTJ7?9Kh?G%Gkvu*m6!s`t{@$*R#CoqK5wpD!;58mQ z>pILAH4o?{-aZU?AeQ{j!7&NvGw8O;5|!C#r)7p6MRQ%~mz55+{oZWjta$13yQ|xTRXi5u+Z7~})4hZ!F0;d(a^qN+oaA1sv zd|)f9X=sn@D|!4VlCV_AbHesT;vJfNXyKM%o6T6`WZJCTEJgiEku~Ql)>MwzV8)x9 z^>BQjeX=C5h{&W;Gf@bu8lLCR)ATIM{`mGr%f8TH$pJ%kkzp#@1F9*lXBmN0*z>5! zBWXUZDHpX&YNLHfUV8UYMu1p7GR$#EtUaHmmaGuS47T5<+n1^7$SR%m#GLlB*)F=* zuoXDb8fINbySACC%$%4f(|K!U#*U&=Gs@wf&)o$ZFjb6Jjgnct#C|1`jwVqV~ zN%A6nY4w)s95Wa;xMZgrp8$gSTH2@*rpDs(cQB@6Ymq9a-|-0(953}f>n-nuPPg-r z5|Uz4rN;%OVhAlpX4-kbpvT#N1Ykq=<-Xj*<5?ZZm4Rh2yC=cIQLGgrEK{)*o0{ZT zS6}7fv~Vnh$f>viuUL_w6F0tN_v+Y({X&+JekkUShcByf}7)h zVtF#j;@1ogzZoG(FMO(P5>^^ttvc!0QV-A}>K(TCN>XIgGuYhYed`FgHH~p~57p zkFzd3c&U+A47*@*%qrX_&=JJ>A3V;ICeOo{hC5D{F-}z^fn0>5s7v<-K17TE&UfkJ zy-Nfu^=u#C$f3xfaF>UaDb(+V0kT=DaZ-wQ_fOtypvb#lb+V!h&(U!8I1y$wc`7A! zDoytTJ886XUekF|<)J{6GH4KjVO+h@k@wCHse5h&k`2?BPV0Yg-PZ18;#;XafNJ6w zuL?`wJVsCdaG&j2GF+&p8Z+=whjXvS3FNln@b>iFh^58>Xt-iLX#fm#o=OwiQJ+5q z@0v=P(=BNwarvs5XTqD4*4n`F>pkj73;+EoiAeuai0<)F*W;+n6)X$N-h|t?Kz?zG z?&6-Av!?V<-}!9cRgL0}c{&y-D$|#Sw{4HB6nTsEaREwmK~_^#7u-r1H{|J7DRXDm zAQl_H_?l#G!U&`cMG9C^*@tH@mRUGMT4~Y$lka|L+6VxcOc;N+1&Vn$dU@;tPWc7< J(og(+``=>lekT9` literal 0 HcmV?d00001 diff --git a/images/notoemoji.png b/images/notoemoji.png new file mode 100644 index 0000000000000000000000000000000000000000..7908eb8746af549bb4f0a7b2633f1d652bfafa56 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0y~yU{(OK12~v~WZsRoWT1efr;B4q#hf>HFLph)5@5M7 z`}Cjx`swk!n;A1>bIYxt+vxcyWo}t^LFCi<-+%w{Gc?Tk|6Y!P;lO2%2nL2kCNTzw z84auq0%{423@w}#3*9(>m$_kc-1_VB|Ns82i?t2b{KUy*yUXZo@qTg-R8m3&~Xj^gfXyP8W)HkN<&{2KFamvYvrJ-bT7tiELK zx~qNdZFxz^-*>0){=Ja+pJBh{L7013bQl^oOez-)D`8qy&98kw^yAN~uZ?4m?y)Kf zyOVF?ee|>X*O}ViZ`|}Qutl{j?9#y|<8^N)$KI^GHFvt*wY{r;`)I!}xU-ji^`p;? z^^Z~g?PV2lwf_42itkrXeV;e;`l(opKV?tjqJFNMdhg7;^L4Y0U*CTyw{mLr#h~}v zSB^JX`GEop`_wj0*Y59$BEGCQtt|CK^LZQCVXALnfRU43)z z=_#cRopVs)^2X~^-`6kQxB8dyd!wgy>vvm8uH0E7@qgy-?sXx5|35la>ATXn~=*?{ zJGpajyXNBZ^GGCsc8eXzNVtw)TCueS0o$s#pee>$z_Ci$S r?zwU>2%xzL9*l@&_>YBw;s1Y^`s~jBDu#)`JjLMY>gTe~DWM4fK-+id literal 0 HcmV?d00001 diff --git a/images/notosans.png b/images/notosans.png new file mode 100644 index 0000000000000000000000000000000000000000..b56ca4e6c6c0ed4d8dc000044d10bb002111d505 GIT binary patch literal 1555 zcmV+u2JHEXP)uxhE3`~#u{;!-PeUT9IWf%a+LE-WB3OPqI~lY0Ge@Xkydra2+EL+}WsA-0{i{oB^i z&OT-xfb2^pxgJ5|XnuDv=LEz) zbdJmdM3*sA7_o(>9K^jo&q};F6c&?;?%5REaMa4ml+GK^bCLHRMEbYVdUQQPuxpp1=9=ojc-09`O)X z4kMjf(qBCe-+4OM(OgIYV@LEVDCXy&2ZV`~`~10{?lrdP>i$$8O;6t>NJ>hM7eRU( zZ-(tcA!fQ{*cu~QNSo6f(JAm+Q> z$wo)>UR?H)Jt#)r*t_rn@KyLmja#B6qv_$${(PBid~-tv%=#N`7E{K+{w3(po|j`4 z?$Jy(BZBUcwS27z+LkO;_xgGF(=b-3={R=mP?*mqXEl7OBsVlJ~~ zccl=*x#72T`VtZi0U*2J;eeksnf5~y&N93RSRI>#j;*}N( znX%IlaaV{rrolYly_N!xn$A|5Oh)A^9K^Qtjal3jmJ#@&1+rD5r{7!%oldW9GA;J( zh~NQ(3e92$0q@beM&(QA3v?151C+Svukuhq&*UkK)(LI2@w{@f%k z{*KWx?QDvmckGh=Y=A7d_0qPCbH=LcQrj1z3{l4@-j4(by|k}PXFRMyy<2-+3AVky z9uGr;CRy*5BP2Tx{=M=Ju|teehDaWWp6A3YaWqUDI_BV8(}aEh|&CWd5sJSL*%_52HN|Hf@v%$7Oz8jyF+J>tXF z@yOP(7MT7gVKhCM$76 z#!HI@Si^-FU;kpe&*;MyuE*`(e0ARxUK!5){{sL3|NkA`JEWgZKLh{(002ovPDHLk FV1jR)?9BiG literal 0 HcmV?d00001 diff --git a/images/org_01.png b/images/org_01.png new file mode 100644 index 0000000000000000000000000000000000000000..6424a1a79edcd7b8bc63cfa085032d0738811892 GIT binary patch literal 1091 zcmeAS@N?(olHy`uVBq!ia0y~yVDtd812~v~FeH3kM2E>9Q7kcv5P?p~a zI{J7e79}&c;pf&Z61SUw{z2~XSsPZIsXTgv@9UYVJJ(fP|KA^Ue#g_BxxLpPuDx%c zuVcJ@{$it3`(NLds$a*^$t%Gn{98aaaEj6M|KVY^_ruS}NbYSbT=Yuy{O_`Lt$|f8 zZ+GT>*G*j%K6Uf#-7h8AT`4y8`@{^?_e*)>)MV#xKcWI9d($U7{(KW#c4Fq5b$^Y& zo0r|F?C;$i<@xoLoZ3c4=k8-SVyljyf4q3{r<=#W{4J2>e?P~yJ%{`2X5FXZQ?1V} z-*xQRbFs8y>#R^Qh{2*$*StP;X5E(+R|KBsh8S7Zxu=Hp8He}HzrMv~y|3rRV%t;S zqfh?d`F`#ZHlEsV@~0V3C;=@h$vGe(D{Wx%b9KdgpVDpH-qhq@&q>KYoBt(u{`b8e zIR^r&Y_}PGUbDtwT~2tW=eDh$|%9*xtugRrS^kuRy_b`18i8pH9`}*J@9l zG_}ej?M)ld&cd}82^~QCA|!+_$gkeLC^Y6~x{=E(?OjuTC)k$eU*4Eg{i-}*XR_(+ zeff)L{y()h@5}S{H{agg?*(e~44-5_ML}89ujx9e^P3Ix4&V7a|J5u1MN;$k zyL?Sqf8+A}^hHY^ZJp<}=vBRO75CR$-`s)D^t#^lT6w0%?ajwypY~mz`ptdq+V$S@ z*UjwIgU%H$ns%ml`*W|f;6TgSFLEF5ta*QR!fsGVcP`J3(@cKz(c@Fp?0t4??6|tl znSK#`d}rI2NjG=0)&9To-rl(G`YFRKv+C#P8t%0Mo!EN4>%8ijQUY!43?}Bd^xAD(3(I literal 0 HcmV?d00001 diff --git a/images/picopixel.png b/images/picopixel.png new file mode 100644 index 0000000000000000000000000000000000000000..0842c5b2a2ea1050dfd0d4fbb9d7bfb12f7110dc GIT binary patch literal 996 zcmeAS@N?(olHy`uVBq!ia0vp^pMW@kg9%8kxwl`8fq{9or;B4q#hf>DF7|D<;%T|P zxb}beyNUnqDY%v$FI!OZr8a!^8eyL-HfNcCaqF)$AL#zS?=8cDI*x3EmJMvqL{R@e z)!WZMfBbRbnorf+_e8G#f9=29x8vVV*u5{^a{hncxr|HUlE(87zgqL|m*}d^<;T{n zt6#s**J16!2?1+AXNT;6}B7kBdJIhwmvHnri+w#V!W<~icR!ZR=$=)gTIq`49)qY)kJ^OcAFIU*xuRrfR zJ%7_b5@gwv%I(`{2o#>*e(pO9(AZf!O=I}2);0sRKiyFGZ*jT7-t|e6H`ly9F1Gi2 z{>Rt<-m`)%5BadyQh#-D*2LBS-c%j0Nw3;!a=qA1cPmpCZ(B=N?A`l?IsI-OI-fs& zj@o%IZ^|B9tLg9GWnFxI>-ysQ?B}PquhIzw`!iha`Y$U#lYNiQFS(Z-E_&o%tnN>p zr(4Z;&$trwdhuL#pm9A~Kl(I8Yj*w3lI*>#e2S_3rB|tXN8C)=vk`S}UHPYK-S%^@ zy%)Fg<_c4ZPt2k!N0=PLG+3gk7j*yes1`^x{z>< zsd1sd_sGrxMan1hA0@qSGMBGgKe5RFmHYu_kjnK&ucnrG{r1YAQ?pg)yUZVuLSF0h zQ@IkBvYDSh`uyv`*A@@BfX=JAA-j0LVL(|~i2IAmptbXu?SX;XGE2Y!6q?Y)G|N=+ z*S~F7-Cl0Zp7VO=vG$+eJ*Qlae=6Qt6YLiD%Ap$M#*C>OcOAEg%I?W2YMoKP{&7xf zXy1wu_h+SjSKm*5;7$9ch__wO9ub3LVX$M-iaz<9hQ9;`g&j#bsUw^#3no($c;D)dy~r*C)IZMTQj z%)Wm9jg!4s9s6Zl7oe#x_m;NIi+-*lC6+n$-<$QTWBtR!ru+#yzgATKQ~7~km2=%o zw}$&zndM?}XC3ODY&uP*?|E}21<_z*a;e7PuKQP1o|8IHew`sh_ R#uGpegQu&X%Q~loCIEAd_2d8m literal 0 HcmV?d00001 diff --git a/images/proggy.png b/images/proggy.png new file mode 100644 index 0000000000000000000000000000000000000000..153359641d84a679f4b4251ce95c4aca795e02a4 GIT binary patch literal 1509 zcmZ`(X;4#F6n-#T0ZUO7X+Z@=Ff21DQ9u!p3JB4#nGhP5NJYQ^6%A_wNfib~Hbo;K zO9nwuLkJdv>~TSXKuIAaV%S9qOAteVCu{m%JDu@Q|Gc^H-gD3WzVCeJq+>qg(6`CD+7bXZSGYPlVB!j-L!DQph;7MZpH;aEQ_3#8txnr8 z2Qk;$MGBTtc=}|gOFTfQQfV{-FgnU@+yVe5ZazSG80|7h~&7vCK; z11zlrm8xET|3j$voaeyRMKXt8y+IxJ!Uqhrax=1`BiJ=PZ35lblkMa8dC$lZ zAD%6)cm~W(N`$q?iWy;@U8@O~^S?&hs>9ih1K-T!vTGT`1Y;aML9=H{)x~`i$>50v z7|)4_St>~&dHW=q*|O}nK+zc*s$o$^PURo(6yiE}1aF#W!ycd z6n*n95T%`6fm5azDVax)7sbtnYqXh$2qk+#!I?DEVWv1}CwOS3VK;Z5>1~MckNr1< z=QtnA+S!^*VhMQtBIeJi1&dc|Gr`EyIL+AJbGg0F%Yz->xC4+V4XVr-ZuT&3*0V|K z$Mr4b;z?~{1-hN4)|_lDmLL`8H}60>eOge~R;P|MwBfjFLZh@Wd)}V-cZU%M1v4z- zE;B)haJ7kiLL$joi`~eFF~r%+PpH4x{;k>u98?{d;X*a<5_YT-79KpL<;J%n;pB+^ z8_^Gt@}AI6(MI!BK)?3JCKy`Fp}<+I2L9d`yEUOwdZ9sPy&8kJ?!l9$ZzMFtp(EbR zJoO*XZ>&~`X%oM-M)P+_Ga?t{UU(CCK|Pq4gvu`pDT{{h>S=nn=#;j+Mzr9k`Q`b{ znxnW+UW9squSm3=z0yQnO{H{Wu=at`K5UeZO?mh9Fu!1F(bCvh#2HgawUsociwi%$}h48U;!>b zZc~m2-vBGr9$1(fP5=hk*RHp>U@Kb?{1f|DLP|ut~`7Ha9 zW+hn`?tM%-OYc!^#Tu{BOE|j5+xELQjIh_PqEPF}I7Z8!6Fvhp?FPSP_Y?qEwnpTWLo%K!Rq?qBQx~Pg-qjjcWrUCT1#2Pg`0Vx zH{%*>-ENX7xjCdjpM=<#=m$=57-aXtpAvh|u8oik2xF>YY1od#^7Qs40iSPG7`Y{s zU5m$dUv-4SFD&oApIt0AExj7yxl#|J9yV15s0+h1Zmm`8P!cmm#)1I^8>1IL=Rd^7 zO_B$@Jm=>+9*aRoMzu&%=nAn9#~WhOgAtF`n;XB-uXwXA9q&dV@ zJCaVTq{YD6mL_94b0-1}!xh9RR+ZI!qxYvJz5}LXySu3;Jimu6BUO>bKKWMuR4{Lh&nyvM0O$N-^{U NxH`ExR{nhc`rj3~_LBer literal 0 HcmV?d00001 diff --git a/images/shnm.png b/images/shnm.png new file mode 100644 index 0000000000000000000000000000000000000000..03eaf9f5e8eedaf378fe4357ed2a5b0c0c36f255 GIT binary patch literal 1269 zcma)6dsGru9KN8=qCECMmpD&WXI7S-j1?ydFdvkguTo5NrVFQ=rJ|_#z^S!#t%nuO zwG^>5Gw=~PP8p<~nmQ8XSolChQZh~fnlf;Rj$O~`?CSx4zT1gVCVC#Ro*% zkkW-tUj4SL)rZWR$9tCku~;mQ{=bw&-~nwN5;SZA{+Ry(48UB9sKl=2E_O)6eHewN zx7RDSfy2h)(XySg;&R5^Pbyl|1D1C7mPW~o(VFh(1q+5E!Iho{pqV($>|S@ZxTEDo zN_rJ0{Vn6^$#3#*blS|E;CgaP?UP<43cO?%vyt|yS9@{)yKAmZDU z2NC`^6VXWrrYhTdANkmQ%U#o+P)HREDJGs^@64AxwC0mlTcB`F6Ed!F_fC$Xf5GBi zp?a3?XTERtR{Q7%o0f#hHZtU}lDP6RWxw9y`D!XV^_=pDg|3ckRRd*id8f?S6{oZy*!Qd@(4ESf;xITqy^THG-yX;NzeC zd^NFetAV@`5}_yU8DlSDx8TP9puE;!+zuZOF~OX_wmx7_MJj#y&jQ}Mj+{;yPY_5x zw8!@;?-`Wu0K5`4ZLh{U-+s;_Y?VvUb;t4Jp`4B)THsX_+zdrU=2i&K#=5>E?vND* zQ1>0O7T~d>eN>$N!t{asc}Ey?REEf?o}eDH>x z`2_czpn{jNhPL{VW|=@R5MZ#$oz~CnQC~)uesNg~s@(Z_v1I#kdftN^7u_gRjh1Jm zF*Yo-dwdX|UCM}&SfdIu{!}~jPY=(Nu07-oY)menb->e!HQ|qeE`2QgEXSu> zsk>F=Qsw~{6@G55!l=3OaEXLvZ&kM_)b|QyB|w(;%;W7IsM z+0km$aCh~4SG#eiCt-;V9#jzJl0ec|3GS7W=d+x&`@*NtUTdhC0|MO`KLU5edfF?ae+lf-owW0y_415XS(SheS0r|)Za{bQe(Bc z4tJ%Vtc}k7pr);_qn5xnP%frBGQ2KtZq4;DWKz-B9Bmy5p3cDF2dwUFTOpw@t- GGyej<=U{#S literal 0 HcmV?d00001 diff --git a/images/tiny3x3a2pt7b.png b/images/tiny3x3a2pt7b.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0e25c2d3b685cc66cc95320ac54e6d2e18517c GIT binary patch literal 968 zcmeAS@N?(olHy`uVBq!ia0y~yV0;5)CvY$U$pGJL3JeU){hlt4Ar*7p+`X75Y$(7Q z(Ddv7ewjFdQ{4v-SC~~_E}kcFt0Go??yzwO7p__#yYk*@uUoI$y6x2r zYrnPW&n=$@m;TAx`)SI#S>eauuX&zzCR5n-^*I@}ccrhYcZ-xE0^rR@&#j6L?~nP( zD9jLmIA-fS;rN}OZeG$pKC|xJmyrLG-y)qa-Ry*i+XnCRH`aV}z4`KU!7H6pyXW>= z-gQq(k`22aUwJkwPq_BL{Zh4*(zR;me4pAOIrPRxW3%@UCcmn({(8#K*ZA+6L+8pl zSI>Wa#d5{+b1iQyLW}nwu0DGo$s&WlN9teC@s5=JzkBV@c?RDTbM5=*BH}Ik>XG*s zwx>J|+27$eziaBNKh~dD_VK4|L<-Zj_cWLPs`mL3c5h~V=<<7ee^r*pRX?vYJy4Bg z&4wc1Kd1H`UVhHw&lRaJe)X@yHSNVWoJR_gm+E{1XOQ?)=L^?|zFl1O>VJ4~#n#U; zKaW)Q3)^1v|C;l%r+#VY*Om8Phn)W&{QmCBdB2zcJNKAx{`T^}eREDtew7`L6e1C; z)$9^?-T(e7ZtguD>*5vH-m6tzdGn=frk!$0`k7b1LXO|r8J<4Z`unUG`N4bhpMU_S#W5A3?{z*s^-qf*2_w1WhHloQJD2DFUcE-;+{|jPpE^jvV_*tQoJc7K hEz7(K2WHCu|4XjCThs9H#sVOR!PC{xWt~$(69BR%*R=ou literal 0 HcmV?d00001 diff --git a/images/tomthumb.png b/images/tomthumb.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3349ade193cd3f220b7df34816d0c30b4b788a GIT binary patch literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^pMcndg9%7FN83MOU|??bba4!+nDb`t!M@iDJg&Ew z|NI|6Z~F;0&YOFWP4HZQE;95A>!d>cV-|Dg-@kufyg~f`zbYn%-v`$o6u2YBgO&Pu z@_ya^`|Gb~+jQ=U(t9R+>gU}PbvgZSKKu86yZCy={GYF;T>pE1-QDxC-{be^FOPp- zKizJHsf5s~(sfq5R=Ivlu1=9Z>+U!+bbe&@qHpK^zPa!ceblZ z*uBr49=mQe@7q7??fFKqDl4V_rN^cL9X9`M`l?+PQGJWoznp1zK4V+;^+p@{n!LF; zw_1g!N3#O0yyt%+mFW$Lb!ua2y83Rhi|gL5S-n+e^Vy@{*QK4ejNBuCMT+NVfN)XZ z)k8mnz23U07hhUwHnY0p+i$OZe_TZ4w%VRzstkYIyWm=a$BJu@zpn{)6syht{OyFB z{nsnW?_v#K+|%0g!tTsx#hgz=`~I2XJmlBuv@XUXw~*ItuWi}Q|B*Py?wx*#oIRJ^R=#JeZSxBv~^!^ zf3jFP^eLNqK(@h>nEbi(Rn}hp75aAd);ce13sC5F`_JnSIsakR%}G1wzuFP_{{a`s zfcpDZ+xG;_lMJltxEEUCBrEwx6d0|aQcV>ZxPXkHfB7uGHdh61xqH%6Tlrn>B>nW< zDSoW;>rSn{;r{s5-|}bkud}|aGXi=0_NQxsr{`45<(AA1o>#TTu6NV)ny)9K-9BY^ z+O4+PIO+Vh%m01yR?as&V;uOe36yx!oK}6DFBI)=tNn5QqJ!B}?-b|nN=@H-@#Ts- zyS(Rj|AoHUD(|@V-~|5tua+!uce<+8rxj?j^7x& z6VL@g_pH=US%l4Be6lp^tMVs~JC saF{A4Z~z100g#zT3iXGdf#LuEj@B7PH~RLS2j)u#Pgg&ebxsLQ0IC1(^#A|> literal 0 HcmV?d00001