From fc258f11cde006b38aef2686a72cdc58edd0e725 Mon Sep 17 00:00:00 2001 From: kicer Date: Sat, 31 Jan 2026 17:34:38 +0800 Subject: [PATCH] add more cn chars --- src/rom/app.py | 2 +- utils/assets/cn-words.txt | 1 + utils/assets/images/0.png | Bin 0 -> 1544 bytes utils/assets/images/1.png | Bin 0 -> 1771 bytes utils/assets/images/2.png | Bin 0 -> 1903 bytes utils/assets/images/3.png | Bin 0 -> 1383 bytes utils/assets/images/4.png | Bin 0 -> 1131 bytes utils/assets/images/5.png | Bin 0 -> 2020 bytes utils/assets/images/6.png | Bin 0 -> 1089 bytes utils/assets/images/7.png | Bin 0 -> 1371 bytes utils/assets/images/ap.png | Bin 0 -> 710 bytes utils/assets/images/t.png | Bin 0 -> 429 bytes utils/assets/pyfont/romand.py | 364 ++++++++++++++++++++++++++++++ utils/assets/pyfont/vga1_16x32.py | 104 +++++++++ utils/assets/pyfont/vga1_8x16.py | 104 +++++++++ utils/convert_assets.sh | 67 +++--- utils/download.sh | 9 +- 17 files changed, 619 insertions(+), 32 deletions(-) create mode 100644 utils/assets/cn-words.txt create mode 100644 utils/assets/images/0.png create mode 100644 utils/assets/images/1.png create mode 100644 utils/assets/images/2.png create mode 100644 utils/assets/images/3.png create mode 100644 utils/assets/images/4.png create mode 100644 utils/assets/images/5.png create mode 100644 utils/assets/images/6.png create mode 100644 utils/assets/images/7.png create mode 100644 utils/assets/images/ap.png create mode 100644 utils/assets/images/t.png create mode 100644 utils/assets/pyfont/romand.py create mode 100644 utils/assets/pyfont/vga1_16x32.py create mode 100644 utils/assets/pyfont/vga1_8x16.py diff --git a/src/rom/app.py b/src/rom/app.py index 28ac493..ba52276 100644 --- a/src/rom/app.py +++ b/src/rom/app.py @@ -217,7 +217,7 @@ def cb_progress(data): def start(): # 初始化液晶屏 - display.init_display(config.get("bl_mode")=="pwm", 5120) + display.init_display(config.get("bl_mode")=="pwm", 7000) display.brightness(int(config.get("brightness", 10))) cb_progress("WiFi connect ...") diff --git a/utils/assets/cn-words.txt b/utils/assets/cn-words.txt new file mode 100644 index 0000000..ddcd84d --- /dev/null +++ b/utils/assets/cn-words.txt @@ -0,0 +1 @@ +一丁七万丈三上下不与丑专且世丘丙业丛东丝丢两严丧个中丰串临丸丹为主丽举乃久么义之乌乍乎乏乐乒乓乔乖乘乙九乞也习乡书买乱乳乾了予争事二于亏云互五井亚些亡交亦产亨亩享京亭亮亲亳人亿什仁仅仆仇今介仍从仑仓仔他仗付仙代令以仪们仰仲件价任份仿企伊伍伏伐休众优伙会伞伟传伤伦伪伯估伴伶伸似伽但位低住体何余佛作你佣佩佳使侄例侍供依侦侧侨侮侯侵便促俊俗俘保信俩俭修俯俱倍倒倘候倚借倡倦债值倾偃假偏做停健偶偷偿傅傍储催傲傻像僚僵僻儋儿允元兄充兆先光克免兔兖党入全八公六兰共关兴兵其具典养兼兽冀内冈册再冒冕写军农冠冤冬冰冲决况冶冷冻净准凉凌减凑凝几凡凤凭凯凰凳凶出击刀刃分切刊刑划列刘则刚创初删判利别刮到制刷券刺刻剂剃削前剑剖剥剧剩剪副割劈力劝办功加务劣动助努劫励劲劳势勃勇勉勐勒勤勺勾勿匀包匆化北匙匠匪匹区医十千升午半华协卓单卖南博卜占卡卢卧卫印危即却卵卷卸厂厅历厉压厌厕厘厚原厢厦厨去县参又叉及友双反发叔取受变叙叛叠口古句另叨只叫召叮可台史右叶号司叹叼吃各合吉吊同名后吐向吓吕吗君吞否吧吨吩含听启吴吵吸吹吼吾呀呆呈告员呜呢周味呼命和咏咐咬咱咳咸咽哀品哄哈响哑哗哥哨哪哭哲唇唉唐唤售唯唱啄商啊啦喀喂善喇喉喊喘喜喝喷嗓嗽嘉嘎嘱嘴器噶嚷嚼囊四回因团园困围固国图圆圈土圣在圩地圳场圾址坂均坊坎坏坐坑块坚坛坜坝坟坡坤坦坪坻垂垃垄型垒垣垦垫垮埇埋城埔埕埗域埠培基堂堆堡堤堪堰堵塌塑塔塘塞填境墅墓墙增墨壁壤士壮声壳壶处备复夏夕外多夜够大天太夫央失头夷夸夹夺奇奈奉奋奎奏奔奖套奥女奴奶奸她好如妃妄妇妈妖妙妥妨妹妻始姐姑姓委姚姜姥姨姻姿威娃娄娇娘娱婆婚婶婺嫁嫂嫌嫩子孔孕字存孙孚孜孝孟季孤学孩宁它宅宇守安宋完宏宕宗官宙定宛宜宝实审客宣室宪宫宰害宴宵家容宽宾宿寄密寇富寒察寨寮寸对寺寻导寿封射将尉尊小少尔尖尘尚尝尤尧就尸尺尼尽尾尿局层居屈届屋屏屑展属屠屡屯山屿岁岂岐岑岔岗岚岛岢岩岫岭岱岳岷岸峄峒峙峡峦峨峪峰峻崂崃崆崇崎崖崭嵊嵩巍川州巡巢工左巧巨巩巫差己已巴巷巾币市布帅帆师希帐帕帖帘帜帝带席帮常帽幅幕干平年并幸幻幼广庄庆床序庐库应底店庙府废度座庭庵康庸廉廊延建开异弃弄弊弋式弓引弟张弥弦弯弱弹强归当录彝形彦彩彬彭彰影役彻彼往征径待很律徐徒得御循微德徽心必忆忌忍志忘忙忠忧快念忻忽怀态怎怒怕怖怜思怠急性怨怪总恋恐恒恢恨恩恭息恰恳恶恼悄悉悔悟悠患悦您悬悲悼情惊惑惕惜惠惧惨惩惭惯惰想惹愁愈愉意愚感愤愧愿慈慌慎慕慢慧慨慰懂懒戈戏成我戒或战戚截戴户房所扁扇手才扎扑扒打扔托扛扣执扩扫扬扭扮扯扰扶批找承技抄把抓投抖抗折抚抛抢护报披抬抱抵抹押抽担拆拉拌拍拐拒拔拖拘招拜拢拣拥拦拨择括拱拳拴拼拾拿持挂指按挎挑挖挠挡挣挤挥挨挪振挺挽捆捉捎捏捐捕捞损捡换捧据捷掀掇授掉掌掏排掖掘掠探接控推掩措揉描提插握揪揭援搁搂搅搏搜搞搬搭携摄摆摇摊摔摘摧摩摸撇撑撒撕撞撤播操擦攀支收攸改攻放政故效敌敏救敖教敞敢散敦敬数敲整文斑斗料斜斤斥斧斩断斯新方施旁旅旋旌族旗无既日旦旧旨早旬旱时旷旺昂昆昌明昏易昔星映春昨昭是昼显晃晋晌晏晒晓晕晖晚晨普景晰晴晶智晾暂暑暖暗暨暮暴曙曲更曹曼曾替最月有朋服朐朔朗望朝期朦木未末本札术朱朴朵机朽杀杂权杆杉李杏材村杜杞束杠条来杨杭杯杰松板极构析枕林果枝枞枣枪枯架柄柏某染柔柘柜柞查柯柱柳柴柿标栋栏树栖栗校株样核根格栽栾桂桃框案桌桐桑桓档桥桦桨桶梁梅梓梢梦梧梨梯械梳检棉棋棍棒棕棚棠棣森棱棵椅植椒楚楞楠楼概榆榕榜榨榴槐槽樊樟模横樱橘橙橡欠次欢欣欧欲欺款歇歉歌歙止正此步武歪死歼殃殊残殖段殷殿毁毅母每毒比毕毙毛毫毯氏民气氧氮水永氹汀汁求汇汉汐汕汗汝江池污汤汨汪汶汽汾沁沂沃沅沈沉沐沙沛沟没沧沫沭河沸油治沽沾沿泄泉泊泌法泗泛泡波泥注泪泰泳泸泻泼泽泾洁洋洒洗洛洞津洪洮洱洲活洼洽派流浅浆浇浈浉浊测济浏浑浓浔浙浚浠浦浩浪浮浴海浸涂消涉涌涛涝涞涟涡润涧涨涪涯液涵涿淀淄淅淇淋淖淘淞淡淮深淳混淹添清渌渐渑渔渗渝渠渡渣温渭港渴游湄湖湘湛湟湾湿溆溉源溜溧溪滁滋滑滔滕滚满滤滥滦滨滩滴漂漆漏演漠漫漯漳漾潍潘潜潞潢潭潮潼澄澎澜澡澧澳激濂濉濞濠濮瀍灌灞火灭灯灰灵灶灾灿炉炊炎炒炕炭炮炸点炼烂烈烘烛烟烤烦烧烫热烽焉焦焰然煌煎煤照煮熄熊熔熟燃燕燥爆爪爬爱父爷爸爹爽片版牌牙牛牟牡牢牧物牲牵特牺犁犍犬犯状犹狂狐狗狠狡独狭狮狱狸狼猇猎猗猛猜猪猫献猴猾玄率玉王玛玩环现玻珍珙珠班珲球琅理琊琴琼瑞瑶璃璧瓜瓣瓦瓮瓯瓶甘甚甜生用甩田由甲申电男甸画畅界畏留畜略番畴疆疏疑疗疤疫疮疯疲疼疾病症痒痕痛痰瘦登白百皂的皆皇皋皮皱盂盆盈益盏盐监盒盖盗盘盛盟目盯盱盲直相盼盾省眉看眙真眠眨眯眼着睁睛睡睢督睬瞎瞒瞧瞬矛知矩短矮石矿砀码砌砍研砖砚破础硕硚硫硬确碇碌碍碎碑碗碚碧碰碱碳碾磁磐磨磴示礼社祁祖祝神祥票祸禁禄禅福禹禺离禽禾秀私秃秆秉秋种科秒秘租秤秦秧秩秭积称移稀程稍税稠稳稷稻稼稿穆穗穴究穷空穿突窃窄窑窗窜窝立竖站竞竟章童竭端竹竿笋笑笔笛符笨第笼等筋筐筑筒答策筛筝筠筹签简算管箩箭箱篇篮籍米类粉粒粗粘粥粪粮粱精糊糕糖糟糠系素索紧紫累絮綦繁纠红纤约级纪纯纱纲纳纵纷纸纹纺纽线练组细织终绍经绑绒结绕绘给绛络绝绞统绢绣绥继绩绪续绳维绵绸绿缎缓编缘缙缝缠缩缭缴缸缺罐网罕罗罘罚罢罩罪置羊羌美羞羡群羽翁翅翔翠翻翼耀老考者耆而耍耐耒耕耗耳耻耽耿聂聊聋职联聚聪肃肆肇肉肌肚肝肠股肢肤肥肩肯育肺肾肿胀胁胃胆背胖胜胞胡胧胳胶胸能脂脆脉脊脏脑脖脚脱脸脾腊腐腔腥腰腹腾腿膀膊膏膛膜膝膨臂臣自臭至致舅舆舌舍舒舞舟航般舰舱船艇艘良艰色艳艺节芒芗芙芜芝芦芬芮花芳芷芹芽苍苏苑苓苗若苦英苹茂范茄茅茌茎茧茫茶荃荆草荐荒荔荡荣荥荫药荷莆莎莒莘莞莫莱莲获莺菊菌菏菜菠萄萌萍萝萣营萧萨落著葛葡董葫葬葱葵蒗蒙蒜蒲蒸蓄蓉蓝蓟蓥蓬蔑蔚蔡蔬蔺蔽蕉蕲蕴薄薛薪薯藁藏藤虎虏虑虚虞虫虹虽虾蚀蚁蚂蚊蚌蚕蛇蛋蛙蛛蛟蛮蛾蜀蜂蜓蜘蜜蜡蜻蝇蝴蝶融螺蠡蠢血行衔街衡衢衣补表衫衬衰袁袄袋袍袖袜被袭裁裂装裕裙裤裳裹襄西要覃覆见观规视览觉角解触言誉誓警计订认讨让训议讯记讲讷许论讽设访证评识诉诊词诏译试诗诚话诞询该详语误诱说诵请诸诺读课谁调谅谈谊谋谎谜谟谢谣谦谨谯谱谷豆象豪豫貌贝贞负贡财责贤败货质贩贪贫购贯贱贴贵贷贸费贺贼贾贿资赉赌赏赔赖赚赛赞赠赢赣赤赫走赴赵赶起趁超越趋趟趣足趴跃跌跑距跟跨跪路跳践踏踢踩踪蹄蹈蹦蹲躁身躬躲躺车轧轨转轮软轰轻载轿较辅辆辈辉输辖辛辜辞辟辣辨辩辫辰辱边辽达迁迅过迈迎运近返还这进远违连迟迦迪迫迭述迷迹追退送适逃逆选逊透逐递途逗通逝速造逢逮逼遂遇遍道遗遣遥遭遮遵避邀邑邓邕邗邛邡邢那邪邮邯邱邳邵邹邺邻郁郊郎郏郑郓郧部郫郭郯郴郸都郾鄂鄄鄙鄞鄠鄢鄯鄱酉配酒酬酱酷酸酿醉醋醒醴采释里重野量金鉴针钉钓钞钟钢钥钦钩钱钳钻铁铃铅铜铲银铸铺链销锁锄锅锈锋锐错锡锣锤锦键锯锹锻镇镜镰镶长门闪闭问闯闲间闵闷闸闹闻闽阀阁阅阆阎阔阜队阡防阳阴阵阶阻阿陀陂附际陆陇陈陉降限陕陟陡院除险陪陵陶陷隅隆随隐隔隙障隰隶难雀雁雄雅集雍雕雨雪零雷雹雾需霄震霉霍霜霞露霸霾青靖静非靠面革鞋鞍鞠鞭韩音韵韶页顶顷项顺须顽顾顿颂预领颈颍颗题颜额颠颤风飓飘飞食餐饥饭饮饰饱饲饶饺饼饿馅馆馋馒首香马驰驱驳驴驶驻驼驾驿骂骄骅骆验骑骗骡骤骨高鬼魂魄魏魔鱼鲁鲅鲜鲤鸟鸠鸡鸣鸦鸭鸽鹅鹊鹤鹰鹿麒麓麟麦麻黄黎黑黔默黟鼎鼓鼠鼻齐齿龄龙龟 \ No newline at end of file diff --git a/utils/assets/images/0.png b/utils/assets/images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..e73f2801c48342cde9244d5c20f5ff5e6099153d GIT binary patch literal 1544 zcmV+j2KV`iP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHa!Eu%RA>e5nM-I~RT#(Tl_oVB zbyI77)TUr-v1u|%ZBf+d!ftE>E=0O;qo!^`wTP$-5e0Qud?2<}Ay$iz8W6#aim|9^ zNM{lgFbj#rBC%qjW}<15$>jR`GWQJkJ@++nGY8I`bH3;QJLlZ*oO>scsF(T-M4EwQ zByEdw_qW|mg_gq2kZ;kF+BVweq?TNu{fjyUZK`R$>Fm($LzfuGQX&V?KH7d$x|Hq% z+&&PsQd3osY4Fb>|32;8quJ5vD)OG}&;fMhJMLz74`N+_r#-#6GnZfuVCRioSMGav zF?UYj06NcfUb~!HK7rG2ceBActjJ($Iklfa{s^KSC;)xdKf=NKAWj0vo+prp*jC^9 z)v2~$%XYLxGMmdj&8&X|p;q9<*Lv|Gz7qH>JNN$eCB)1h!|4#19x~@-k9G-aIRR2M>1M&4=qVKz_dprIXbE z3%pw8j z3ylkBCfX)0Dmj_O%u=SklrG)Jwm1a6QSp4Viw(tw8;5rf|7n%YSP3#-$}IKL1Ozrrs zyb$0^iuN0Ts0cPw08UwGvq%Oh09j{{_XNZWv?^KjN~-U(wPCZZKr)%!tgWoJPm_oN zY7cu_oz{CjG#ANG{fduXx9a<81)Ei_vPXr{_ETFksqP=EP)uXF2==k}C&k|O@$FZW z8h@r6=yFIlx_o@c_`hO9ifIKf*y^xv%aS2~nYG^&%ZWogxSuK$awepTsjnCZ0x$Z4 zk!C{rQcTYP57_l(a%{hci|OK4BY1AM8`(wzUeajb!nV7?sAO6J-fas6VdO{Yf6R7~ z6L+P^`7(RO>=Qg+FFqgpF?(?Ykikx$$y>yMb^C}p(-zY0=OX&4rMeB9Eda96yC5jWfMOOKaylQO z7Gkhh)UlaN*#h8JIgP}CNh;i6KWX#;^>NgD! zTYG8km#QDOb;INsfV@?qFc#LC=*?U?Q@NJUT{ib%6kCEtFge+lC z1!>X$kOQojHccMAD~PT|wj@|Aw93$Q8?8|F4te|;f_TMBU(GS#pJn!6b@S;NfPA0K z=Ckth?RCd@vmFQhi+ncU!&g$Yw<9Ti!br%$DH>w;9!Aw-vf|e zqc%FQqmbm!z=Iroa&r4FzE;3!O&l;oJE46*T{QAS_KRdX`O9i&Q1Id}@Cq0~@)2Mi zZ*h|A<+^a4k>{g-0huF!f6M8L;6r~!BvJs%iT=8HFXOEMYNeIWA5u3_Wvj_YS@{|v uUm>KON5~w2L1zPsmjB;ezx%d0000;P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NIRY^oaRA>e5nQMquRTO~NzUr7x z)623nqc9(%w4tdxi#jRFY?(th|u^hZP#g-~HnGO;isiHhn^NFjs<8IJnS0JXuY1mn|7OdcyZ3tSwf5S3t+kILy{&f#y0rr)FSp$# zbyAQg;lEsp@}_B${aIw$cDY5YEEOXircs{C!rLRXcDFo0x8;7?w#hPUQ75I@?a~jP z7w8v!{CB0W#i9$bm^6fyNj{Q+sQ!ku%O<-|hWX%uA-g_W>SY_i<@CzhMy3S_GfXN% zGB7#Pf;2_2+$k5N6-6Jc#sOQ(k@+6@lxiIF<_K6#pj4N~Nx}Uc;BJb;17FV`FOhT7 zNBYUTD1Ub>t&!c_gR!yr1VkjsKrAO+$hXiu#X0P){H@mqHgp=Q~1m z(ukxq<#n;k=xNF;U0?o<(LvUh&j1^F{5mmwp@NfKgmT3mD)s zX}dfD-E6ulJCvTaX-TmaV|Nf)esIhMnTTQ<|7X%iI9Rqn|3cn|%yop@SNyC&1NO*t z7X8LgkYU`3lFtxJR_Sip&BT>!<$Ct*tZA0tR1O=|M|R6&D6)cS{|vJIq;t#|`N{(X z??6FLc!-R@y4zDwekJ9^Vv^kFa-IBzq8*rVg!u{jXW$l?vGTH`6+D!${p@E8ct8;> zw3eSGexj7|LDJ876m1~$z6WhuVfG)2%!G$&>L>~lnB7ZmrbOQc8h^m?yd7h&a`RIvXw4Yd9OgtNhj9u7_WM_)92*&d<%v#&452wc9)4|0q-jb{^$5{gJ zLXJ+H4#{q3hj*gj2VuEDsNo&l$jC^1EkIMQsXSR>p7+hD@;YIhgT#73v99hHne8a6 z|5&-kfr@gd8kJ#w+|hcn!i;n6PPrlsu0RqE;DWB^lHFV(4~!-I_dj|Su65yXa_;&#x;=@G`t$ae#yssJ=@&E~JAw;z(ud;@q z!0SY-qj>Bd=Cxet1Oh2sRrN0_g!qDhEvUak6A~W2k?ivhusbrz_lS!!36GZ^O2C2!=tVg%p90UD zU3F((q;H|bZZQ*xF|_h`qzMdfqc5j7(DO7sb~DTfIp#434Df(%mx6ELW^no~sLrFQ z;a98KU(0m*G!5Oi1R3YRwbQj0YsFiwZahYQ;k9QOceO|Zy0E^1dm;{&QTVKxz5>)} zAG#-odr|Far|dD=Yvxen*3kOaK;uZt0^69h@uBv17V238xI^THb+zi_(PeR~$D>aj zb#2eKoHFwnP&$)6Yd}t!`3$&l5j>DnW-bHFcuD|~!znH}1%64n>o}<$F3U`!iNxhH zpe#v4TU^^p#+}Hed`r8IA>0~A3_M9z0$aA&TrDW-BJ0y{IT_nA~yOLPc z^Ds(Q^?H%>{2mBjx?M!4>FoGRB%9DD8U5U-IHf@otw1X+EUSV`8Fj}1ePC!_I745> zF`448QR3EhG|)Pp67M0tpKgkyzv%E<{%<%=iSF>m$?S#q?m)&J_#aB5niN#{vHJi3 N002ovPDHLkV1hPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NI*-1n}RA>e5S$k|#RTw|#^flx$ zS-UYFMnDD{+*rGbFieD?Vd9I#7sSXbl7Pe)@>nNo6JVW4P&8^lLxg}2L@-E1{lj1g zh|sk#oMJL?gb31hW4yMtYwz)Q#@cmv_uj5u*@)RmntRXp{?2#4?|kQ$klxX|0$o}G zs>RJYr{!+{D}<7Mfgs!9m|(uFMK5qpxBme=9_14GxU|r6G9G3D5r~C@zr))W{whVDq&1Z80Ey)hUdd6rTekMWgA`G z&;}=Djmu{Xq@`8F7%$MH9EWQM#M0e}cTER4A$c;Tpy&2F=KrFG z-CZ(TVl;(v<*-!G^>GBs9f*(@P{!S+WB&7Sa%2Q3e=@EU{0HUmRL)f+u;#>tK~R*X zp{x(`L)Cb}#|c+k01dH;p;R5vhx92>PE#O5+aXm4BrbJbIp?{e6l3EPCPB^Rs z>s90?45m)E&jqfr_@%|;hB03<##T3t%lOklsT84iRC)Uuo7fAK@)E!XM&KIHGr(06 zN>|yfmZKVUaZ$nn*cEs9u)vG#HuE>@T<0v!%yd5`QjtWtiE&m%8L3#2Z#m+utRF~1 z%^yPAthf?EfFv(3wPo2mL#sv;uZ#-5t2#-VIQ+Dw##!Ngy_wQC36YG#YaCp{2!ghO zl)3#sl5pd~z@_ZjrgVQg(9;F8)?kEP(!zHJr?_w1F>>GebPy71Eg|Di+|1FO2F|HXG>=1IK@2li=j{$MZ2+=Oj53yVENgRT|D z&5VS04rm?}Cjo#y>|c+62IYLWoS!o?Ce2{<2Li!b zIZkuV`A7DGti@|R-kb(v@TIbB%JsH5Ab{8=pX1T4dX!i#qFJ+HIJ8Ym+5ytxv%Snhv1|oVMsA@*|A)QXzylh-H&XwdwTM|>!UnU|f=1fO*GI*RR zKM@G(UKB*QPdp#i(`pzm?i34Qyy#AcifxA9OytS?p|Ji;na8&@*%SNv7OL>hL$AMC zD2*K`pQ9Q=dY{QCiIX!Ltymh_``Iv~6GNfk#WZTz-nqn&O8BC0|N41}CN^^(y)Y8T z{D!EQn3u4Q+FGxX@k(L~7Y??^R_0s&F*3ut1dSK`v#wpa^^+L&oqEMd>_@-O(f25h zih$KJKF#BshH!tcNYMuT1y{()IP8jXUTBr(HV%b1O35P zaEM~1L=LDLFT@w5x%~@DY+3t|cpDY;ML{@~KW&*%x+w}w;)Qdv7sej~>l?_OS25q- z%#0_U?%F4m#KrA}V0az!qgXUut(W}wAjl#UcFEM#G&o=|4kkKwN`_0-R6?RpmVZ=e zt3oPj5W)OgqI0JJ0^1wU{U4rx$zV9hb#6ef|M z6>O+PyId6JhT)PVeFp&}6ll5wbTDAz#i~h61Exv^EBu6p9=}%C80M0+s|Sr2rcE*i z=(nm4l-@f)bfD*CPHeGT2iF+W`@RMEXc?~Cr&z$Lst&YT(=G}Uq5B+F+=z0vq}#1k zQK;zv`k7bF8yqJq^RX`{!z!g>PKZOWOvQN?0h`)IE pPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NG(Md!>RA>e5SzTycRS=#zo2_ZO ztwsEKjTN+1!JiE%LL~v&G~3L?NYg@nP(%bDBoO>fuywP$_c*h;yFKUr?!8%)1^2+^&U`ax=9_cRIrk5s(>f!t zsu94by@!p_4NGEUvI?*hC2m8+zf6RmV$!@^IFy}@8aHge&;?|TGd(4N?@*#=>F9P% zDB+?IaI}!ieCBFzAsDKF)RD0yfcz8y?`VdD1bDw}ZhCpz7^tZJdyap;dGV^aZraHH zs^U@PrVB{rzql17UMBL1kcmze4`ufD8>hE!!1${YF@+#$AVAPyEKs})H2qFY<#rcB z#;v(GRe)g_Vn*~$Q;(fdk`T!pk={#J6^;@@u00}sD-_Ij~g@?G`z z0BfvQmJ(OC%)au()p}m-3W!SS&bpyZ&t03YB<@zZX$43r!#*mjvDQRJS>2*0(h3kF z{;g_kN7>F%D`4u4UGqemk9KYI7RLrZtpG-8RZlgnZ6>&Ja}-cAB|V4mt6sY`xv;`b z=jAAXU$p53<^^&yb=P&(Oy=bF5x`LZ(>(iT_Ot}?5Q#soD{V?n)8=P-$r)fyZd|k* zncboG4Jan|)AsrRIr5i;Z7VVDo~_p90s?+b&p=F*SsX-gEC?BUiVF+sH2I?sc z;pG~XjTf4%OuWIuO^l7j;V z7QnBVMEfN9)~6et<;fM?ozvjq@khv#R;+0YQ=n^NlpOWmfd$Np3-&r#EvX8CxS~eT(9m^|+8o;-J zA!A|(&6gc&hq}x-+v|G$On+uPKLoqkqU5OO;mT!yc*{0k`N(&uPICvAN!RZgzhZB_xV5kh}o9j!{)*rv5e zIg|*#Q;7YR&BWt0u6erDKak3o|2z6t`3&KE*lusdk<1JV`5=vKk!(wJ{6lw;57De{ pXPe!h^{_eIVsx<12>f41;9nY#foUM9O3MHM002ovPDHLkV1nWwiKYMm literal 0 HcmV?d00001 diff --git a/utils/assets/images/4.png b/utils/assets/images/4.png new file mode 100644 index 0000000000000000000000000000000000000000..33be903f6ab34451885b57887b37579e1c5f31e4 GIT binary patch literal 1131 zcmV-x1eE)UP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NF)k#D_RA>e5S<6dRK^Xsy-Y7#` z6ciEB3yL6mAVpG(vNR05Z7RatMXM<2@dvbTQCYNU5tS4zN=r&84HuEN=|Rg17a2h+ z7`>$QPQST%uczZVXCCJqBe(;HJM(=r-}n2znfc9}bAeJRWgu1tM6A({gXKPy<1^|Z zQ9~0?@C%Pc55`=~Wn2cu86)el3?sNt8>@?UGPuS1fnwXDGOaTpcVHvR&_R3)d>ADJ zR)~k__sO-*GHs89IxzE%1m8n*e(=hJKn~-oVq2yq09l74T<>iJH#-F2ID;Dw(M5_= z4L~xp%={T5xX7nG6p27Pm(RCQeS{*lO)MKQle}_`ncpAbzo2R`8OwvtwVAkVE79rzw) zSf9~KZ2t$~73M{RzAg&9(&+<`_^30Il0HXtLps~q07MsF&`7J!P~v)lR$jB;=-Wpy(*b9m5_Oa-i0V`3GFcD|oAiC+BB*)a-0XQZI#rLLQG6=M*t{XY2KQ>u4swtY>n*?~}E!Gm^ zXOy)()?OLG26poy8to{%Rlp`)cItq4rAbA86BdW1-JnKGEP6 zP1dFjUIpqFfWT5UIHa6Uk|slZ6vb{!D2poI)CXu~PSKL0Ny*z}7tVQPsaKt5K-|L@ xa(Xk-_3;_!)5&(-bc0VlJ0%CD4EzTf_zifp)J8r=9UlMy002ovPDHLkV1i>M;kN() literal 0 HcmV?d00001 diff --git a/utils/assets/images/5.png b/utils/assets/images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..a211e37176a5545129e8fa70d3125c9737438765 GIT binary patch literal 2020 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 Xlt|4Lk)<3-00000NkvXXu0mjf0|&qz literal 0 HcmV?d00001 diff --git a/utils/assets/pyfont/romand.py b/utils/assets/pyfont/romand.py new file mode 100644 index 0000000..5c61539 --- /dev/null +++ b/utils/assets/pyfont/romand.py @@ -0,0 +1,364 @@ +WIDTH = 32 +HEIGHT = 32 +FIRST = 0x20 +LAST = 0x7f + +_font =\ +b'\x00\x4a\x5a\x17\x4d\x58\x52\x46\x52\x54\x53\x54\x20\x52\x52'\ +b'\x46\x53\x46\x53\x54\x20\x52\x52\x58\x51\x59\x51\x5a\x52\x5b'\ +b'\x53\x5b\x54\x5a\x54\x59\x53\x58\x52\x58\x20\x52\x52\x59\x52'\ +b'\x5a\x53\x5a\x53\x59\x52\x59\x15\x49\x5b\x4e\x46\x4d\x47\x4d'\ +b'\x4d\x20\x52\x4e\x47\x4d\x4d\x20\x52\x4e\x46\x4f\x47\x4d\x4d'\ +b'\x20\x52\x57\x46\x56\x47\x56\x4d\x20\x52\x57\x47\x56\x4d\x20'\ +b'\x52\x57\x46\x58\x47\x56\x4d\x0b\x48\x5d\x53\x42\x4c\x62\x20'\ +b'\x52\x59\x42\x52\x62\x20\x52\x4c\x4f\x5a\x4f\x20\x52\x4b\x55'\ +b'\x59\x55\x32\x49\x5c\x52\x42\x52\x5f\x53\x5f\x20\x52\x52\x42'\ +b'\x53\x42\x53\x5f\x20\x52\x57\x49\x59\x49\x57\x47\x54\x46\x51'\ +b'\x46\x4e\x47\x4c\x49\x4c\x4b\x4d\x4d\x4e\x4e\x56\x52\x57\x53'\ +b'\x58\x55\x58\x57\x57\x59\x54\x5a\x51\x5a\x4f\x59\x4e\x58\x20'\ +b'\x52\x57\x49\x56\x48\x54\x47\x51\x47\x4e\x48\x4d\x49\x4d\x4b'\ +b'\x4e\x4d\x56\x51\x58\x53\x59\x55\x59\x57\x58\x59\x57\x5a\x54'\ +b'\x5b\x51\x5b\x4e\x5a\x4c\x58\x4e\x58\x20\x52\x58\x58\x55\x5a'\ +b'\x1f\x46\x5e\x5b\x46\x49\x5b\x20\x52\x4e\x46\x50\x48\x50\x4a'\ +b'\x4f\x4c\x4d\x4d\x4b\x4d\x49\x4b\x49\x49\x4a\x47\x4c\x46\x4e'\ +b'\x46\x50\x47\x53\x48\x56\x48\x59\x47\x5b\x46\x20\x52\x57\x54'\ +b'\x55\x55\x54\x57\x54\x59\x56\x5b\x58\x5b\x5a\x5a\x5b\x58\x5b'\ +b'\x56\x59\x54\x57\x54\x30\x46\x5f\x5b\x4e\x5a\x4f\x5b\x50\x5c'\ +b'\x4f\x5c\x4e\x5b\x4d\x5a\x4d\x59\x4e\x58\x50\x56\x55\x54\x58'\ +b'\x52\x5a\x50\x5b\x4d\x5b\x4a\x5a\x49\x58\x49\x55\x4a\x53\x50'\ +b'\x4f\x52\x4d\x53\x4b\x53\x49\x52\x47\x50\x46\x4e\x47\x4d\x49'\ +b'\x4d\x4b\x4e\x4e\x50\x51\x55\x58\x57\x5a\x5a\x5b\x5b\x5b\x5c'\ +b'\x5a\x5c\x59\x20\x52\x4d\x5b\x4b\x5a\x4a\x58\x4a\x55\x4b\x53'\ +b'\x4d\x51\x20\x52\x4d\x4b\x4e\x4d\x56\x58\x58\x5a\x5a\x5b\x0a'\ +b'\x4e\x57\x53\x46\x52\x47\x52\x4d\x20\x52\x53\x47\x52\x4d\x20'\ +b'\x52\x53\x46\x54\x47\x52\x4d\x13\x4b\x59\x56\x42\x54\x44\x52'\ +b'\x47\x50\x4b\x4f\x50\x4f\x54\x50\x59\x52\x5d\x54\x60\x56\x62'\ +b'\x20\x52\x54\x44\x52\x48\x51\x4b\x50\x50\x50\x54\x51\x59\x52'\ +b'\x5c\x54\x60\x13\x4b\x59\x4e\x42\x50\x44\x52\x47\x54\x4b\x55'\ +b'\x50\x55\x54\x54\x59\x52\x5d\x50\x60\x4e\x62\x20\x52\x50\x44'\ +b'\x52\x48\x53\x4b\x54\x50\x54\x54\x53\x59\x52\x5c\x50\x60\x26'\ +b'\x4a\x5a\x52\x46\x51\x47\x53\x51\x52\x52\x20\x52\x52\x46\x52'\ +b'\x52\x20\x52\x52\x46\x53\x47\x51\x51\x52\x52\x20\x52\x4d\x49'\ +b'\x4e\x49\x56\x4f\x57\x4f\x20\x52\x4d\x49\x57\x4f\x20\x52\x4d'\ +b'\x49\x4d\x4a\x57\x4e\x57\x4f\x20\x52\x57\x49\x56\x49\x4e\x4f'\ +b'\x4d\x4f\x20\x52\x57\x49\x4d\x4f\x20\x52\x57\x49\x57\x4a\x4d'\ +b'\x4e\x4d\x4f\x0f\x46\x5f\x52\x49\x52\x5a\x53\x5a\x20\x52\x52'\ +b'\x49\x53\x49\x53\x5a\x20\x52\x4a\x51\x5b\x51\x5b\x52\x20\x52'\ +b'\x4a\x51\x4a\x52\x5b\x52\x17\x4d\x58\x54\x5a\x53\x5b\x52\x5b'\ +b'\x51\x5a\x51\x59\x52\x58\x53\x58\x54\x59\x54\x5c\x53\x5e\x51'\ +b'\x5f\x20\x52\x52\x59\x52\x5a\x53\x5a\x53\x59\x52\x59\x20\x52'\ +b'\x53\x5b\x54\x5c\x20\x52\x54\x5a\x53\x5e\x02\x45\x5f\x49\x52'\ +b'\x5b\x52\x0f\x4d\x58\x52\x58\x51\x59\x51\x5a\x52\x5b\x53\x5b'\ +b'\x54\x5a\x54\x59\x53\x58\x52\x58\x20\x52\x52\x59\x52\x5a\x53'\ +b'\x5a\x53\x59\x52\x59\x07\x47\x5e\x5b\x42\x49\x62\x4a\x62\x20'\ +b'\x52\x5b\x42\x5c\x42\x4a\x62\x29\x48\x5c\x51\x46\x4e\x47\x4c'\ +b'\x4a\x4b\x4f\x4b\x52\x4c\x57\x4e\x5a\x51\x5b\x53\x5b\x56\x5a'\ +b'\x58\x57\x59\x52\x59\x4f\x58\x4a\x56\x47\x53\x46\x51\x46\x20'\ +b'\x52\x4f\x47\x4d\x4a\x4c\x4f\x4c\x52\x4d\x57\x4f\x5a\x20\x52'\ +b'\x4e\x59\x51\x5a\x53\x5a\x56\x59\x20\x52\x55\x5a\x57\x57\x58'\ +b'\x52\x58\x4f\x57\x4a\x55\x47\x20\x52\x56\x48\x53\x47\x51\x47'\ +b'\x4e\x48\x0b\x48\x5c\x4e\x4a\x50\x49\x53\x46\x53\x5b\x20\x52'\ +b'\x4e\x4a\x4e\x4b\x50\x4a\x52\x48\x52\x5b\x53\x5b\x21\x48\x5c'\ +b'\x4c\x4b\x4c\x4a\x4d\x48\x4e\x47\x50\x46\x54\x46\x56\x47\x57'\ +b'\x48\x58\x4a\x58\x4c\x57\x4e\x55\x51\x4c\x5b\x20\x52\x4c\x4b'\ +b'\x4d\x4b\x4d\x4a\x4e\x48\x50\x47\x54\x47\x56\x48\x57\x4a\x57'\ +b'\x4c\x56\x4e\x54\x51\x4b\x5b\x20\x52\x4c\x5a\x59\x5a\x59\x5b'\ +b'\x20\x52\x4b\x5b\x59\x5b\x2f\x48\x5c\x4d\x46\x58\x46\x51\x4f'\ +b'\x20\x52\x4d\x46\x4d\x47\x57\x47\x20\x52\x57\x46\x50\x4f\x20'\ +b'\x52\x51\x4e\x53\x4e\x56\x4f\x58\x51\x59\x54\x59\x55\x58\x58'\ +b'\x56\x5a\x53\x5b\x50\x5b\x4d\x5a\x4c\x59\x4b\x57\x4c\x57\x20'\ +b'\x52\x50\x4f\x53\x4f\x56\x50\x58\x53\x20\x52\x54\x4f\x57\x51'\ +b'\x58\x54\x58\x55\x57\x58\x54\x5a\x20\x52\x58\x56\x56\x59\x53'\ +b'\x5a\x50\x5a\x4d\x59\x4c\x57\x20\x52\x4f\x5a\x4c\x58\x11\x48'\ +b'\x5c\x55\x49\x55\x5b\x56\x5b\x20\x52\x56\x46\x56\x5b\x20\x52'\ +b'\x56\x46\x4b\x56\x5a\x56\x20\x52\x55\x49\x4c\x56\x20\x52\x4c'\ +b'\x55\x5a\x55\x5a\x56\x34\x48\x5c\x4d\x46\x4c\x4f\x20\x52\x4e'\ +b'\x47\x4d\x4e\x20\x52\x4d\x46\x57\x46\x57\x47\x20\x52\x4e\x47'\ +b'\x57\x47\x20\x52\x4d\x4e\x50\x4d\x53\x4d\x56\x4e\x58\x50\x59'\ +b'\x53\x59\x55\x58\x58\x56\x5a\x53\x5b\x50\x5b\x4d\x5a\x4c\x59'\ +b'\x4b\x57\x4c\x57\x20\x52\x4c\x4f\x4d\x4f\x4f\x4e\x53\x4e\x56'\ +b'\x4f\x58\x52\x20\x52\x54\x4e\x57\x50\x58\x53\x58\x55\x57\x58'\ +b'\x54\x5a\x20\x52\x58\x56\x56\x59\x53\x5a\x50\x5a\x4d\x59\x4c'\ +b'\x57\x20\x52\x4f\x5a\x4c\x58\x3d\x48\x5c\x56\x47\x57\x49\x58'\ +b'\x49\x57\x47\x54\x46\x52\x46\x4f\x47\x4d\x4a\x4c\x4f\x4c\x54'\ +b'\x4d\x58\x4f\x5a\x52\x5b\x53\x5b\x56\x5a\x58\x58\x59\x55\x59'\ +b'\x54\x58\x51\x56\x4f\x53\x4e\x52\x4e\x4f\x4f\x4d\x51\x20\x52'\ +b'\x57\x48\x54\x47\x52\x47\x4f\x48\x20\x52\x50\x47\x4e\x4a\x4d'\ +b'\x4f\x4d\x54\x4e\x58\x51\x5a\x20\x52\x4d\x56\x4f\x59\x52\x5a'\ +b'\x53\x5a\x56\x59\x58\x56\x20\x52\x54\x5a\x57\x58\x58\x55\x58'\ +b'\x54\x57\x51\x54\x4f\x20\x52\x58\x53\x56\x50\x53\x4f\x52\x4f'\ +b'\x4f\x50\x4d\x53\x20\x52\x51\x4f\x4e\x51\x4d\x54\x0b\x48\x5c'\ +b'\x4b\x46\x59\x46\x4f\x5b\x20\x52\x4b\x46\x4b\x47\x58\x47\x20'\ +b'\x52\x58\x46\x4e\x5b\x4f\x5b\x43\x48\x5c\x50\x46\x4d\x47\x4c'\ +b'\x49\x4c\x4b\x4d\x4d\x4e\x4e\x50\x4f\x54\x50\x56\x51\x57\x52'\ +b'\x58\x54\x58\x57\x57\x59\x54\x5a\x50\x5a\x4d\x59\x4c\x57\x4c'\ +b'\x54\x4d\x52\x4e\x51\x50\x50\x54\x4f\x56\x4e\x57\x4d\x58\x4b'\ +b'\x58\x49\x57\x47\x54\x46\x50\x46\x20\x52\x4e\x47\x4d\x49\x4d'\ +b'\x4b\x4e\x4d\x50\x4e\x54\x4f\x56\x50\x58\x52\x59\x54\x59\x57'\ +b'\x58\x59\x57\x5a\x54\x5b\x50\x5b\x4d\x5a\x4c\x59\x4b\x57\x4b'\ +b'\x54\x4c\x52\x4e\x50\x50\x4f\x54\x4e\x56\x4d\x57\x4b\x57\x49'\ +b'\x56\x47\x20\x52\x57\x48\x54\x47\x50\x47\x4d\x48\x20\x52\x4c'\ +b'\x58\x4f\x5a\x20\x52\x55\x5a\x58\x58\x3d\x48\x5c\x57\x50\x55'\ +b'\x52\x52\x53\x51\x53\x4e\x52\x4c\x50\x4b\x4d\x4b\x4c\x4c\x49'\ +b'\x4e\x47\x51\x46\x52\x46\x55\x47\x57\x49\x58\x4d\x58\x52\x57'\ +b'\x57\x55\x5a\x52\x5b\x50\x5b\x4d\x5a\x4c\x58\x4d\x58\x4e\x5a'\ +b'\x20\x52\x57\x4d\x56\x50\x53\x52\x20\x52\x57\x4e\x55\x51\x52'\ +b'\x52\x51\x52\x4e\x51\x4c\x4e\x20\x52\x50\x52\x4d\x50\x4c\x4d'\ +b'\x4c\x4c\x4d\x49\x50\x47\x20\x52\x4c\x4b\x4e\x48\x51\x47\x52'\ +b'\x47\x55\x48\x57\x4b\x20\x52\x53\x47\x56\x49\x57\x4d\x57\x52'\ +b'\x56\x57\x54\x5a\x20\x52\x55\x59\x52\x5a\x50\x5a\x4d\x59\x1f'\ +b'\x4d\x58\x52\x4d\x51\x4e\x51\x4f\x52\x50\x53\x50\x54\x4f\x54'\ +b'\x4e\x53\x4d\x52\x4d\x20\x52\x52\x4e\x52\x4f\x53\x4f\x53\x4e'\ +b'\x52\x4e\x20\x52\x52\x58\x51\x59\x51\x5a\x52\x5b\x53\x5b\x54'\ +b'\x5a\x54\x59\x53\x58\x52\x58\x20\x52\x52\x59\x52\x5a\x53\x5a'\ +b'\x53\x59\x52\x59\x27\x4d\x58\x52\x4d\x51\x4e\x51\x4f\x52\x50'\ +b'\x53\x50\x54\x4f\x54\x4e\x53\x4d\x52\x4d\x20\x52\x52\x4e\x52'\ +b'\x4f\x53\x4f\x53\x4e\x52\x4e\x20\x52\x54\x5a\x53\x5b\x52\x5b'\ +b'\x51\x5a\x51\x59\x52\x58\x53\x58\x54\x59\x54\x5c\x53\x5e\x51'\ +b'\x5f\x20\x52\x52\x59\x52\x5a\x53\x5a\x53\x59\x52\x59\x20\x52'\ +b'\x53\x5b\x54\x5c\x20\x52\x54\x5a\x53\x5e\x03\x46\x5e\x5a\x49'\ +b'\x4a\x52\x5a\x5b\x0f\x46\x5f\x4a\x4d\x5b\x4d\x5b\x4e\x20\x52'\ +b'\x4a\x4d\x4a\x4e\x5b\x4e\x20\x52\x4a\x55\x5b\x55\x5b\x56\x20'\ +b'\x52\x4a\x55\x4a\x56\x5b\x56\x03\x46\x5e\x4a\x49\x5a\x52\x4a'\ +b'\x5b\x39\x49\x5c\x4c\x4b\x4c\x4a\x4d\x48\x4e\x47\x51\x46\x54'\ +b'\x46\x57\x47\x58\x48\x59\x4a\x59\x4c\x58\x4e\x57\x4f\x55\x50'\ +b'\x52\x51\x20\x52\x4c\x4b\x4d\x4b\x4d\x4a\x4e\x48\x51\x47\x54'\ +b'\x47\x57\x48\x58\x4a\x58\x4c\x57\x4e\x55\x4f\x52\x50\x20\x52'\ +b'\x4d\x49\x50\x47\x20\x52\x55\x47\x58\x49\x20\x52\x58\x4d\x54'\ +b'\x50\x20\x52\x52\x50\x52\x54\x53\x54\x53\x50\x20\x52\x52\x58'\ +b'\x51\x59\x51\x5a\x52\x5b\x53\x5b\x54\x5a\x54\x59\x53\x58\x52'\ +b'\x58\x20\x52\x52\x59\x52\x5a\x53\x5a\x53\x59\x52\x59\x37\x45'\ +b'\x60\x57\x4e\x56\x4c\x54\x4b\x51\x4b\x4f\x4c\x4e\x4d\x4d\x50'\ +b'\x4d\x53\x4e\x55\x50\x56\x53\x56\x55\x55\x56\x53\x20\x52\x51'\ +b'\x4b\x4f\x4d\x4e\x50\x4e\x53\x4f\x55\x50\x56\x20\x52\x57\x4b'\ +b'\x56\x53\x56\x55\x58\x56\x5a\x56\x5c\x54\x5d\x51\x5d\x4f\x5c'\ +b'\x4c\x5b\x4a\x59\x48\x57\x47\x54\x46\x51\x46\x4e\x47\x4c\x48'\ +b'\x4a\x4a\x49\x4c\x48\x4f\x48\x52\x49\x55\x4a\x57\x4c\x59\x4e'\ +b'\x5a\x51\x5b\x54\x5b\x57\x5a\x59\x59\x5a\x58\x20\x52\x58\x4b'\ +b'\x57\x53\x57\x55\x58\x56\x13\x48\x5c\x52\x46\x4a\x5b\x20\x52'\ +b'\x52\x49\x4b\x5b\x4a\x5b\x20\x52\x52\x49\x59\x5b\x5a\x5b\x20'\ +b'\x52\x52\x46\x5a\x5b\x20\x52\x4d\x55\x57\x55\x20\x52\x4c\x56'\ +b'\x58\x56\x2b\x48\x5c\x4c\x46\x4c\x5b\x20\x52\x4d\x47\x4d\x5a'\ +b'\x20\x52\x4c\x46\x54\x46\x57\x47\x58\x48\x59\x4a\x59\x4d\x58'\ +b'\x4f\x57\x50\x54\x51\x20\x52\x4d\x47\x54\x47\x57\x48\x58\x4a'\ +b'\x58\x4d\x57\x4f\x54\x50\x20\x52\x4d\x50\x54\x50\x57\x51\x58'\ +b'\x52\x59\x54\x59\x57\x58\x59\x57\x5a\x54\x5b\x4c\x5b\x20\x52'\ +b'\x4d\x51\x54\x51\x57\x52\x58\x54\x58\x57\x57\x59\x54\x5a\x4d'\ +b'\x5a\x25\x48\x5d\x5a\x4b\x59\x49\x57\x47\x55\x46\x51\x46\x4f'\ +b'\x47\x4d\x49\x4c\x4b\x4b\x4e\x4b\x53\x4c\x56\x4d\x58\x4f\x5a'\ +b'\x51\x5b\x55\x5b\x57\x5a\x59\x58\x5a\x56\x20\x52\x5a\x4b\x59'\ +b'\x4b\x58\x49\x57\x48\x55\x47\x51\x47\x4f\x48\x4d\x4b\x4c\x4e'\ +b'\x4c\x53\x4d\x56\x4f\x59\x51\x5a\x55\x5a\x57\x59\x58\x58\x59'\ +b'\x56\x5a\x56\x1f\x48\x5d\x4c\x46\x4c\x5b\x20\x52\x4d\x47\x4d'\ +b'\x5a\x20\x52\x4c\x46\x53\x46\x56\x47\x58\x49\x59\x4b\x5a\x4e'\ +b'\x5a\x53\x59\x56\x58\x58\x56\x5a\x53\x5b\x4c\x5b\x20\x52\x4d'\ +b'\x47\x53\x47\x56\x48\x57\x49\x58\x4b\x59\x4e\x59\x53\x58\x56'\ +b'\x57\x58\x56\x59\x53\x5a\x4d\x5a\x1a\x49\x5c\x4d\x46\x4d\x5b'\ +b'\x20\x52\x4e\x47\x4e\x5a\x20\x52\x4d\x46\x59\x46\x20\x52\x4e'\ +b'\x47\x59\x47\x59\x46\x20\x52\x4e\x50\x54\x50\x54\x51\x20\x52'\ +b'\x4e\x51\x54\x51\x20\x52\x4e\x5a\x59\x5a\x59\x5b\x20\x52\x4d'\ +b'\x5b\x59\x5b\x14\x49\x5b\x4d\x46\x4d\x5b\x20\x52\x4e\x47\x4e'\ +b'\x5b\x4d\x5b\x20\x52\x4d\x46\x59\x46\x20\x52\x4e\x47\x59\x47'\ +b'\x59\x46\x20\x52\x4e\x50\x54\x50\x54\x51\x20\x52\x4e\x51\x54'\ +b'\x51\x2b\x48\x5d\x5a\x4b\x59\x49\x57\x47\x55\x46\x51\x46\x4f'\ +b'\x47\x4d\x49\x4c\x4b\x4b\x4e\x4b\x53\x4c\x56\x4d\x58\x4f\x5a'\ +b'\x51\x5b\x55\x5b\x57\x5a\x59\x58\x5a\x56\x5a\x52\x55\x52\x20'\ +b'\x52\x5a\x4b\x59\x4b\x58\x49\x57\x48\x55\x47\x51\x47\x4f\x48'\ +b'\x4e\x49\x4d\x4b\x4c\x4e\x4c\x53\x4d\x56\x4e\x58\x4f\x59\x51'\ +b'\x5a\x55\x5a\x57\x59\x58\x58\x59\x56\x59\x53\x55\x53\x55\x52'\ +b'\x15\x47\x5d\x4b\x46\x4b\x5b\x20\x52\x4b\x46\x4c\x46\x4c\x5b'\ +b'\x4b\x5b\x20\x52\x59\x46\x58\x46\x58\x5b\x59\x5b\x20\x52\x59'\ +b'\x46\x59\x5b\x20\x52\x4c\x50\x58\x50\x20\x52\x4c\x51\x58\x51'\ +b'\x07\x4e\x57\x52\x46\x52\x5b\x53\x5b\x20\x52\x52\x46\x53\x46'\ +b'\x53\x5b\x13\x4a\x5b\x56\x46\x56\x56\x55\x59\x53\x5a\x51\x5a'\ +b'\x4f\x59\x4e\x56\x4d\x56\x20\x52\x56\x46\x57\x46\x57\x56\x56'\ +b'\x59\x55\x5a\x53\x5b\x51\x5b\x4f\x5a\x4e\x59\x4d\x56\x15\x48'\ +b'\x5d\x4c\x46\x4c\x5b\x4d\x5b\x20\x52\x4c\x46\x4d\x46\x4d\x5b'\ +b'\x20\x52\x5a\x46\x59\x46\x4d\x52\x20\x52\x5a\x46\x4d\x53\x20'\ +b'\x52\x50\x4f\x59\x5b\x5a\x5b\x20\x52\x51\x4f\x5a\x5b\x0d\x49'\ +b'\x5a\x4d\x46\x4d\x5b\x20\x52\x4d\x46\x4e\x46\x4e\x5a\x20\x52'\ +b'\x4e\x5a\x59\x5a\x59\x5b\x20\x52\x4d\x5b\x59\x5b\x19\x46\x5e'\ +b'\x4a\x46\x4a\x5b\x20\x52\x4b\x4b\x4b\x5b\x4a\x5b\x20\x52\x4b'\ +b'\x4b\x52\x5b\x20\x52\x4a\x46\x52\x58\x20\x52\x5a\x46\x52\x58'\ +b'\x20\x52\x59\x4b\x52\x5b\x20\x52\x59\x4b\x59\x5b\x5a\x5b\x20'\ +b'\x52\x5a\x46\x5a\x5b\x13\x47\x5d\x4b\x46\x4b\x5b\x20\x52\x4c'\ +b'\x49\x4c\x5b\x4b\x5b\x20\x52\x4c\x49\x59\x5b\x20\x52\x4b\x46'\ +b'\x58\x58\x20\x52\x58\x46\x58\x58\x20\x52\x58\x46\x59\x46\x59'\ +b'\x5b\x27\x47\x5d\x50\x46\x4e\x47\x4c\x49\x4b\x4b\x4a\x4e\x4a'\ +b'\x53\x4b\x56\x4c\x58\x4e\x5a\x50\x5b\x54\x5b\x56\x5a\x58\x58'\ +b'\x59\x56\x5a\x53\x5a\x4e\x59\x4b\x58\x49\x56\x47\x54\x46\x50'\ +b'\x46\x20\x52\x51\x47\x4e\x48\x4c\x4b\x4b\x4e\x4b\x53\x4c\x56'\ +b'\x4e\x59\x51\x5a\x53\x5a\x56\x59\x58\x56\x59\x53\x59\x4e\x58'\ +b'\x4b\x56\x48\x53\x47\x51\x47\x1a\x48\x5c\x4c\x46\x4c\x5b\x20'\ +b'\x52\x4d\x47\x4d\x5b\x4c\x5b\x20\x52\x4c\x46\x55\x46\x57\x47'\ +b'\x58\x48\x59\x4a\x59\x4d\x58\x4f\x57\x50\x55\x51\x4d\x51\x20'\ +b'\x52\x4d\x47\x55\x47\x57\x48\x58\x4a\x58\x4d\x57\x4f\x55\x50'\ +b'\x4d\x50\x2f\x47\x5d\x50\x46\x4e\x47\x4c\x49\x4b\x4b\x4a\x4e'\ +b'\x4a\x53\x4b\x56\x4c\x58\x4e\x5a\x50\x5b\x54\x5b\x56\x5a\x58'\ +b'\x58\x59\x56\x5a\x53\x5a\x4e\x59\x4b\x58\x49\x56\x47\x54\x46'\ +b'\x50\x46\x20\x52\x51\x47\x4e\x48\x4c\x4b\x4b\x4e\x4b\x53\x4c'\ +b'\x56\x4e\x59\x51\x5a\x53\x5a\x56\x59\x58\x56\x59\x53\x59\x4e'\ +b'\x58\x4b\x56\x48\x53\x47\x51\x47\x20\x52\x53\x58\x58\x5d\x59'\ +b'\x5d\x20\x52\x53\x58\x54\x58\x59\x5d\x21\x48\x5c\x4c\x46\x4c'\ +b'\x5b\x20\x52\x4d\x47\x4d\x5b\x4c\x5b\x20\x52\x4c\x46\x54\x46'\ +b'\x57\x47\x58\x48\x59\x4a\x59\x4d\x58\x4f\x57\x50\x54\x51\x4d'\ +b'\x51\x20\x52\x4d\x47\x54\x47\x57\x48\x58\x4a\x58\x4d\x57\x4f'\ +b'\x54\x50\x4d\x50\x20\x52\x52\x51\x58\x5b\x59\x5b\x20\x52\x53'\ +b'\x51\x59\x5b\x2a\x48\x5c\x59\x49\x57\x47\x54\x46\x50\x46\x4d'\ +b'\x47\x4b\x49\x4b\x4b\x4c\x4d\x4d\x4e\x4f\x4f\x54\x51\x56\x52'\ +b'\x57\x53\x58\x55\x58\x58\x57\x59\x54\x5a\x50\x5a\x4e\x59\x4d'\ +b'\x58\x4b\x58\x20\x52\x59\x49\x57\x49\x56\x48\x54\x47\x50\x47'\ +b'\x4d\x48\x4c\x49\x4c\x4b\x4d\x4d\x4f\x4e\x54\x50\x56\x51\x58'\ +b'\x53\x59\x55\x59\x58\x57\x5a\x54\x5b\x50\x5b\x4d\x5a\x4b\x58'\ +b'\x0e\x4a\x5b\x52\x47\x52\x5b\x20\x52\x53\x47\x53\x5b\x52\x5b'\ +b'\x20\x52\x4c\x46\x59\x46\x59\x47\x20\x52\x4c\x46\x4c\x47\x59'\ +b'\x47\x17\x47\x5d\x4b\x46\x4b\x55\x4c\x58\x4e\x5a\x51\x5b\x53'\ +b'\x5b\x56\x5a\x58\x58\x59\x55\x59\x46\x20\x52\x4b\x46\x4c\x46'\ +b'\x4c\x55\x4d\x58\x4e\x59\x51\x5a\x53\x5a\x56\x59\x57\x58\x58'\ +b'\x55\x58\x46\x59\x46\x0d\x48\x5c\x4a\x46\x52\x5b\x20\x52\x4a'\ +b'\x46\x4b\x46\x52\x58\x20\x52\x5a\x46\x59\x46\x52\x58\x20\x52'\ +b'\x5a\x46\x52\x5b\x19\x45\x5f\x47\x46\x4d\x5b\x20\x52\x47\x46'\ +b'\x48\x46\x4d\x58\x20\x52\x52\x46\x4d\x58\x20\x52\x52\x49\x4d'\ +b'\x5b\x20\x52\x52\x49\x57\x5b\x20\x52\x52\x46\x57\x58\x20\x52'\ +b'\x5d\x46\x5c\x46\x57\x58\x20\x52\x5d\x46\x57\x5b\x0f\x48\x5c'\ +b'\x4b\x46\x58\x5b\x59\x5b\x20\x52\x4b\x46\x4c\x46\x59\x5b\x20'\ +b'\x52\x59\x46\x58\x46\x4b\x5b\x20\x52\x59\x46\x4c\x5b\x4b\x5b'\ +b'\x10\x49\x5c\x4b\x46\x52\x50\x52\x5b\x53\x5b\x20\x52\x4b\x46'\ +b'\x4c\x46\x53\x50\x20\x52\x5a\x46\x59\x46\x52\x50\x20\x52\x5a'\ +b'\x46\x53\x50\x53\x5b\x13\x48\x5c\x58\x46\x4b\x5b\x20\x52\x59'\ +b'\x46\x4c\x5b\x20\x52\x4b\x46\x59\x46\x20\x52\x4b\x46\x4b\x47'\ +b'\x58\x47\x20\x52\x4c\x5a\x59\x5a\x59\x5b\x20\x52\x4b\x5b\x59'\ +b'\x5b\x0b\x4b\x59\x4f\x42\x4f\x62\x20\x52\x50\x42\x50\x62\x20'\ +b'\x52\x4f\x42\x56\x42\x20\x52\x4f\x62\x56\x62\x02\x4b\x59\x4b'\ +b'\x46\x59\x5e\x0b\x4b\x59\x54\x42\x54\x62\x20\x52\x55\x42\x55'\ +b'\x62\x20\x52\x4e\x42\x55\x42\x20\x52\x4e\x62\x55\x62\x07\x47'\ +b'\x5d\x4a\x54\x52\x4f\x5a\x54\x20\x52\x4a\x54\x52\x50\x5a\x54'\ +b'\x02\x48\x5c\x48\x62\x5c\x62\x06\x4c\x58\x50\x46\x55\x4c\x20'\ +b'\x52\x50\x46\x4f\x47\x55\x4c\x23\x48\x5c\x57\x4d\x57\x5b\x58'\ +b'\x5b\x20\x52\x57\x4d\x58\x4d\x58\x5b\x20\x52\x57\x50\x55\x4e'\ +b'\x53\x4d\x50\x4d\x4e\x4e\x4c\x50\x4b\x53\x4b\x55\x4c\x58\x4e'\ +b'\x5a\x50\x5b\x53\x5b\x55\x5a\x57\x58\x20\x52\x57\x50\x53\x4e'\ +b'\x50\x4e\x4e\x4f\x4d\x50\x4c\x53\x4c\x55\x4d\x58\x4e\x59\x50'\ +b'\x5a\x53\x5a\x57\x58\x23\x48\x5c\x4c\x46\x4c\x5b\x4d\x5b\x20'\ +b'\x52\x4c\x46\x4d\x46\x4d\x5b\x20\x52\x4d\x50\x4f\x4e\x51\x4d'\ +b'\x54\x4d\x56\x4e\x58\x50\x59\x53\x59\x55\x58\x58\x56\x5a\x54'\ +b'\x5b\x51\x5b\x4f\x5a\x4d\x58\x20\x52\x4d\x50\x51\x4e\x54\x4e'\ +b'\x56\x4f\x57\x50\x58\x53\x58\x55\x57\x58\x56\x59\x54\x5a\x51'\ +b'\x5a\x4d\x58\x1f\x49\x5b\x58\x50\x56\x4e\x54\x4d\x51\x4d\x4f'\ +b'\x4e\x4d\x50\x4c\x53\x4c\x55\x4d\x58\x4f\x5a\x51\x5b\x54\x5b'\ +b'\x56\x5a\x58\x58\x20\x52\x58\x50\x57\x51\x56\x4f\x54\x4e\x51'\ +b'\x4e\x4f\x4f\x4e\x50\x4d\x53\x4d\x55\x4e\x58\x4f\x59\x51\x5a'\ +b'\x54\x5a\x56\x59\x57\x57\x58\x58\x23\x48\x5c\x57\x46\x57\x5b'\ +b'\x58\x5b\x20\x52\x57\x46\x58\x46\x58\x5b\x20\x52\x57\x50\x55'\ +b'\x4e\x53\x4d\x50\x4d\x4e\x4e\x4c\x50\x4b\x53\x4b\x55\x4c\x58'\ +b'\x4e\x5a\x50\x5b\x53\x5b\x55\x5a\x57\x58\x20\x52\x57\x50\x53'\ +b'\x4e\x50\x4e\x4e\x4f\x4d\x50\x4c\x53\x4c\x55\x4d\x58\x4e\x59'\ +b'\x50\x5a\x53\x5a\x57\x58\x23\x49\x5b\x4d\x54\x58\x54\x58\x51'\ +b'\x57\x4f\x56\x4e\x54\x4d\x51\x4d\x4f\x4e\x4d\x50\x4c\x53\x4c'\ +b'\x55\x4d\x58\x4f\x5a\x51\x5b\x54\x5b\x56\x5a\x58\x58\x20\x52'\ +b'\x4d\x53\x57\x53\x57\x51\x56\x4f\x54\x4e\x51\x4e\x4f\x4f\x4e'\ +b'\x50\x4d\x53\x4d\x55\x4e\x58\x4f\x59\x51\x5a\x54\x5a\x56\x59'\ +b'\x57\x57\x58\x58\x17\x4c\x5a\x57\x46\x55\x46\x53\x47\x52\x4a'\ +b'\x52\x5b\x53\x5b\x20\x52\x57\x46\x57\x47\x55\x47\x53\x48\x20'\ +b'\x52\x54\x47\x53\x4a\x53\x5b\x20\x52\x4f\x4d\x56\x4d\x56\x4e'\ +b'\x20\x52\x4f\x4d\x4f\x4e\x56\x4e\x2f\x48\x5c\x58\x4d\x57\x4d'\ +b'\x57\x5c\x56\x5f\x55\x60\x53\x61\x51\x61\x4f\x60\x4e\x5f\x4c'\ +b'\x5f\x20\x52\x58\x4d\x58\x5c\x57\x5f\x55\x61\x53\x62\x50\x62'\ +b'\x4e\x61\x4c\x5f\x20\x52\x57\x50\x55\x4e\x53\x4d\x50\x4d\x4e'\ +b'\x4e\x4c\x50\x4b\x53\x4b\x55\x4c\x58\x4e\x5a\x50\x5b\x53\x5b'\ +b'\x55\x5a\x57\x58\x20\x52\x57\x50\x53\x4e\x50\x4e\x4e\x4f\x4d'\ +b'\x50\x4c\x53\x4c\x55\x4d\x58\x4e\x59\x50\x5a\x53\x5a\x57\x58'\ +b'\x18\x48\x5c\x4c\x46\x4c\x5b\x4d\x5b\x20\x52\x4c\x46\x4d\x46'\ +b'\x4d\x5b\x20\x52\x4d\x51\x50\x4e\x52\x4d\x55\x4d\x57\x4e\x58'\ +b'\x51\x58\x5b\x20\x52\x4d\x51\x50\x4f\x52\x4e\x54\x4e\x56\x4f'\ +b'\x57\x51\x57\x5b\x58\x5b\x17\x4e\x57\x52\x46\x51\x47\x51\x48'\ +b'\x52\x49\x53\x49\x54\x48\x54\x47\x53\x46\x52\x46\x20\x52\x52'\ +b'\x47\x52\x48\x53\x48\x53\x47\x52\x47\x20\x52\x52\x4d\x52\x5b'\ +b'\x53\x5b\x20\x52\x52\x4d\x53\x4d\x53\x5b\x17\x4e\x57\x52\x46'\ +b'\x51\x47\x51\x48\x52\x49\x53\x49\x54\x48\x54\x47\x53\x46\x52'\ +b'\x46\x20\x52\x52\x47\x52\x48\x53\x48\x53\x47\x52\x47\x20\x52'\ +b'\x52\x4d\x52\x62\x53\x62\x20\x52\x52\x4d\x53\x4d\x53\x62\x15'\ +b'\x48\x5b\x4c\x46\x4c\x5b\x4d\x5b\x20\x52\x4c\x46\x4d\x46\x4d'\ +b'\x5b\x20\x52\x58\x4d\x57\x4d\x4d\x57\x20\x52\x58\x4d\x4d\x58'\ +b'\x20\x52\x50\x54\x56\x5b\x58\x5b\x20\x52\x51\x53\x58\x5b\x07'\ +b'\x4e\x57\x52\x46\x52\x5b\x53\x5b\x20\x52\x52\x46\x53\x46\x53'\ +b'\x5b\x29\x43\x62\x47\x4d\x47\x5b\x48\x5b\x20\x52\x47\x4d\x48'\ +b'\x4d\x48\x5b\x20\x52\x48\x51\x4b\x4e\x4d\x4d\x50\x4d\x52\x4e'\ +b'\x53\x51\x53\x5b\x20\x52\x48\x51\x4b\x4f\x4d\x4e\x4f\x4e\x51'\ +b'\x4f\x52\x51\x52\x5b\x53\x5b\x20\x52\x53\x51\x56\x4e\x58\x4d'\ +b'\x5b\x4d\x5d\x4e\x5e\x51\x5e\x5b\x20\x52\x53\x51\x56\x4f\x58'\ +b'\x4e\x5a\x4e\x5c\x4f\x5d\x51\x5d\x5b\x5e\x5b\x18\x48\x5c\x4c'\ +b'\x4d\x4c\x5b\x4d\x5b\x20\x52\x4c\x4d\x4d\x4d\x4d\x5b\x20\x52'\ +b'\x4d\x51\x50\x4e\x52\x4d\x55\x4d\x57\x4e\x58\x51\x58\x5b\x20'\ +b'\x52\x4d\x51\x50\x4f\x52\x4e\x54\x4e\x56\x4f\x57\x51\x57\x5b'\ +b'\x58\x5b\x23\x49\x5c\x51\x4d\x4f\x4e\x4d\x50\x4c\x53\x4c\x55'\ +b'\x4d\x58\x4f\x5a\x51\x5b\x54\x5b\x56\x5a\x58\x58\x59\x55\x59'\ +b'\x53\x58\x50\x56\x4e\x54\x4d\x51\x4d\x20\x52\x51\x4e\x4f\x4f'\ +b'\x4e\x50\x4d\x53\x4d\x55\x4e\x58\x4f\x59\x51\x5a\x54\x5a\x56'\ +b'\x59\x57\x58\x58\x55\x58\x53\x57\x50\x56\x4f\x54\x4e\x51\x4e'\ +b'\x23\x48\x5c\x4c\x4d\x4c\x62\x4d\x62\x20\x52\x4c\x4d\x4d\x4d'\ +b'\x4d\x62\x20\x52\x4d\x50\x4f\x4e\x51\x4d\x54\x4d\x56\x4e\x58'\ +b'\x50\x59\x53\x59\x55\x58\x58\x56\x5a\x54\x5b\x51\x5b\x4f\x5a'\ +b'\x4d\x58\x20\x52\x4d\x50\x51\x4e\x54\x4e\x56\x4f\x57\x50\x58'\ +b'\x53\x58\x55\x57\x58\x56\x59\x54\x5a\x51\x5a\x4d\x58\x23\x48'\ +b'\x5c\x57\x4d\x57\x62\x58\x62\x20\x52\x57\x4d\x58\x4d\x58\x62'\ +b'\x20\x52\x57\x50\x55\x4e\x53\x4d\x50\x4d\x4e\x4e\x4c\x50\x4b'\ +b'\x53\x4b\x55\x4c\x58\x4e\x5a\x50\x5b\x53\x5b\x55\x5a\x57\x58'\ +b'\x20\x52\x57\x50\x53\x4e\x50\x4e\x4e\x4f\x4d\x50\x4c\x53\x4c'\ +b'\x55\x4d\x58\x4e\x59\x50\x5a\x53\x5a\x57\x58\x14\x4b\x59\x4f'\ +b'\x4d\x4f\x5b\x50\x5b\x20\x52\x4f\x4d\x50\x4d\x50\x5b\x20\x52'\ +b'\x50\x53\x51\x50\x53\x4e\x55\x4d\x58\x4d\x20\x52\x50\x53\x51'\ +b'\x51\x53\x4f\x55\x4e\x58\x4e\x58\x4d\x31\x4a\x5b\x58\x50\x57'\ +b'\x4e\x54\x4d\x51\x4d\x4e\x4e\x4d\x50\x4e\x52\x50\x53\x55\x55'\ +b'\x57\x56\x20\x52\x56\x55\x57\x57\x57\x58\x56\x5a\x20\x52\x57'\ +b'\x59\x54\x5a\x51\x5a\x4e\x59\x20\x52\x4f\x5a\x4e\x58\x4d\x58'\ +b'\x20\x52\x58\x50\x57\x50\x56\x4e\x20\x52\x57\x4f\x54\x4e\x51'\ +b'\x4e\x4e\x4f\x20\x52\x4f\x4e\x4e\x50\x4f\x52\x20\x52\x4e\x51'\ +b'\x50\x52\x55\x54\x57\x55\x58\x57\x58\x58\x57\x5a\x54\x5b\x51'\ +b'\x5b\x4e\x5a\x4d\x58\x0f\x4d\x58\x52\x46\x52\x5b\x53\x5b\x20'\ +b'\x52\x52\x46\x53\x46\x53\x5b\x20\x52\x4f\x4d\x56\x4d\x56\x4e'\ +b'\x20\x52\x4f\x4d\x4f\x4e\x56\x4e\x18\x48\x5c\x4c\x4d\x4c\x57'\ +b'\x4d\x5a\x4f\x5b\x52\x5b\x54\x5a\x57\x57\x20\x52\x4c\x4d\x4d'\ +b'\x4d\x4d\x57\x4e\x59\x50\x5a\x52\x5a\x54\x59\x57\x57\x20\x52'\ +b'\x57\x4d\x57\x5b\x58\x5b\x20\x52\x57\x4d\x58\x4d\x58\x5b\x0d'\ +b'\x4a\x5a\x4c\x4d\x52\x5b\x20\x52\x4c\x4d\x4d\x4d\x52\x59\x20'\ +b'\x52\x58\x4d\x57\x4d\x52\x59\x20\x52\x58\x4d\x52\x5b\x19\x46'\ +b'\x5e\x49\x4d\x4e\x5b\x20\x52\x49\x4d\x4a\x4d\x4e\x58\x20\x52'\ +b'\x52\x4d\x4e\x58\x20\x52\x52\x50\x4e\x5b\x20\x52\x52\x50\x56'\ +b'\x5b\x20\x52\x52\x4d\x56\x58\x20\x52\x5b\x4d\x5a\x4d\x56\x58'\ +b'\x20\x52\x5b\x4d\x56\x5b\x0f\x49\x5b\x4c\x4d\x57\x5b\x58\x5b'\ +b'\x20\x52\x4c\x4d\x4d\x4d\x58\x5b\x20\x52\x58\x4d\x57\x4d\x4c'\ +b'\x5b\x20\x52\x58\x4d\x4d\x5b\x4c\x5b\x10\x4a\x5a\x4c\x4d\x52'\ +b'\x5b\x20\x52\x4c\x4d\x4d\x4d\x52\x59\x20\x52\x58\x4d\x57\x4d'\ +b'\x52\x59\x4e\x62\x20\x52\x58\x4d\x52\x5b\x4f\x62\x4e\x62\x13'\ +b'\x49\x5b\x56\x4e\x4c\x5b\x20\x52\x58\x4d\x4e\x5a\x20\x52\x4c'\ +b'\x4d\x58\x4d\x20\x52\x4c\x4d\x4c\x4e\x56\x4e\x20\x52\x4e\x5a'\ +b'\x58\x5a\x58\x5b\x20\x52\x4c\x5b\x58\x5b\x03\x4b\x59\x55\x42'\ +b'\x4e\x52\x55\x62\x02\x4e\x56\x52\x42\x52\x62\x03\x4b\x59\x4f'\ +b'\x42\x56\x52\x4f\x62\x17\x46\x5e\x49\x55\x49\x53\x4a\x50\x4c'\ +b'\x4f\x4e\x4f\x50\x50\x54\x53\x56\x54\x58\x54\x5a\x53\x5b\x51'\ +b'\x20\x52\x49\x53\x4a\x51\x4c\x50\x4e\x50\x50\x51\x54\x54\x56'\ +b'\x55\x58\x55\x5a\x54\x5b\x51\x5b\x4f\x22\x4a\x5a\x4a\x46\x4a'\ +b'\x5b\x4b\x5b\x4b\x46\x4c\x46\x4c\x5b\x4d\x5b\x4d\x46\x4e\x46'\ +b'\x4e\x5b\x4f\x5b\x4f\x46\x50\x46\x50\x5b\x51\x5b\x51\x46\x52'\ +b'\x46\x52\x5b\x53\x5b\x53\x46\x54\x46\x54\x5b\x55\x5b\x55\x46'\ +b'\x56\x46\x56\x5b\x57\x5b\x57\x46\x58\x46\x58\x5b\x59\x5b\x59'\ +b'\x46\x5a\x46\x5a\x5b' + +_index =\ +b'\x00\x00\x03\x00\x34\x00\x61\x00\x7a\x00\xe1\x00\x22\x01\x85'\ +b'\x01\x9c\x01\xc5\x01\xee\x01\x3d\x02\x5e\x02\x8f\x02\x96\x02'\ +b'\xb7\x02\xc8\x02\x1d\x03\x36\x03\x7b\x03\xdc\x03\x01\x04\x6c'\ +b'\x04\xe9\x04\x02\x05\x8b\x05\x08\x06\x49\x06\x9a\x06\xa3\x06'\ +b'\xc4\x06\xcd\x06\x42\x07\xb3\x07\xdc\x07\x35\x08\x82\x08\xc3'\ +b'\x08\xfa\x08\x25\x09\x7e\x09\xab\x09\xbc\x09\xe5\x09\x12\x0a'\ +b'\x2f\x0a\x64\x0a\x8d\x0a\xde\x0a\x15\x0b\x76\x0b\xbb\x0b\x12'\ +b'\x0c\x31\x0c\x62\x0c\x7f\x0c\xb4\x0c\xd5\x0c\xf8\x0c\x21\x0d'\ +b'\x3a\x0d\x41\x0d\x5a\x0d\x6b\x0d\x72\x0d\x81\x0d\xca\x0d\x13'\ +b'\x0e\x54\x0e\x9d\x0e\xe6\x0e\x17\x0f\x78\x0f\xab\x0f\xdc\x0f'\ +b'\x0d\x10\x3a\x10\x4b\x10\xa0\x10\xd3\x10\x1c\x11\x65\x11\xae'\ +b'\x11\xd9\x11\x3e\x12\x5f\x12\x92\x12\xaf\x12\xe4\x12\x05\x13'\ +b'\x28\x13\x51\x13\x5a\x13\x61\x13\x6a\x13\x9b\x13' + +INDEX = memoryview(_index) +FONT = memoryview(_font) diff --git a/utils/assets/pyfont/vga1_16x32.py b/utils/assets/pyfont/vga1_16x32.py new file mode 100644 index 0000000..849069d --- /dev/null +++ b/utils/assets/pyfont/vga1_16x32.py @@ -0,0 +1,104 @@ +WIDTH = 16 +HEIGHT = 32 +FIRST = 0x20 +LAST = 0x7f +_FONT = \ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x7f\xfe\x7f\xfe\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x7f\xfe\x7f\xfe\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x01\x80\x01\x80\x0f\xf0\x0f\xf0\x39\x9c\x39\x9c\x71\x8e\x71\x8e\x71\x80\x71\x80\x39\x80\x39\x80\x0f\xf0\x0f\xf0\x01\x9c\x01\x9c\x01\x8e\x01\x8e\x71\x8e\x71\x8e\x39\x9c\x39\x9c\x0f\xf0\x0f\xf0\x01\x80\x01\x80\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x1c\x1e\x1c\x1e\x38\x1e\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x0e\x3c\x0e\x3c\x1c\x3c\x1c\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xc0\x07\xc0\x1c\x70\x1c\x70\x38\x38\x38\x38\x1c\x70\x1c\x70\x07\xc0\x07\xc0\x0f\xce\x0f\xce\x38\xfc\x38\xfc\x70\x78\x70\x78\x70\x78\x70\x78\x38\xfc\x38\xfc\x0f\xce\x0f\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x38\x0e\x38\x03\xe0\x03\xe0\x3f\xfe\x3f\xfe\x03\xe0\x03\xe0\x0e\x38\x0e\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x3f\xfe\x3f\xfe\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xc0\x03\xc0\x03\xc0\x03\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfe\x3f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xc0\x03\xc0\x03\xc0\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1c\x00\x38\x00\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xe0\x07\xe0\x1c\x38\x1c\x38\x38\x3c\x38\x3c\x38\x7c\x38\x7c\x38\xdc\x38\xdc\x39\x9c\x39\x9c\x3b\x1c\x3b\x1c\x3e\x1c\x3e\x1c\x3c\x1c\x3c\x1c\x1c\x38\x1c\x38\x07\xe0\x07\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x03\xc0\x03\xc0\x0f\xc0\x0f\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf0\x0f\xf0\x38\x1c\x38\x1c\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x00\x70\x00\x70\x01\xc0\x01\xc0\x07\x00\x07\x00\x1c\x00\x1c\x00\x38\x00\x38\x00\x3f\xfe\x3f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf0\x0f\xf0\x38\x1c\x38\x1c\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x01\xf0\x01\xf0\x00\x1c\x00\x1c\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x38\x1c\x38\x1c\x0f\xf0\x0f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xf0\x01\xf0\x03\xf0\x03\xf0\x07\x70\x07\x70\x0e\x70\x0e\x70\x1c\x70\x1c\x70\x38\x70\x38\x70\x3f\xfc\x3f\xfc\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfe\x3f\xfe\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xf0\x3f\xf0\x00\x1c\x00\x1c\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x38\x1c\x38\x1c\x0f\xf0\x0f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x00\x1c\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf8\x3f\xf8\x00\x38\x00\x38\x00\x38\x00\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x0e\x1c\x0e\x07\xfe\x07\xfe\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x0f\xf0\x0f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x03\x80\x03\x80\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x03\x80\x03\x80\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x03\x80\x03\x80\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x80\x03\x80\x03\x80\x03\x80\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x00\x0e\x00\x0e\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfc\x3f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfc\x3f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\x70\x00\x70\x00\x38\x00\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xe0\x07\xe0\x1c\x38\x1c\x38\x38\x1c\x38\x1c\x00\x38\x00\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf0\x0f\xf0\x38\x1c\x38\x1c\x70\x0e\x70\x0e\x71\xfe\x71\xfe\x73\x8e\x73\x8e\x73\x8e\x73\x8e\x73\x8e\x73\x8e\x71\xfc\x71\xfc\x70\x00\x70\x00\x38\x00\x38\x00\x0f\xfc\x0f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x03\xc0\x03\xc0\x07\xe0\x07\xe0\x0e\x70\x0e\x70\x1c\x38\x1c\x38\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x3f\xfc\x3f\xfc\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfc\x3f\xfc\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xe0\x3f\xe0\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xfc\x3f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfc\x3f\xfc\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xe0\x3f\xe0\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x3e\x38\x3e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x3f\xfe\x3f\xfe\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x1c\x1c\x1c\x1c\x0e\x38\x0e\x38\x03\xe0\x03\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x38\x1c\x38\x1c\x70\x1c\x70\x1c\xe0\x1c\xe0\x1d\xc0\x1d\xc0\x1f\x80\x1f\x80\x1f\x80\x1f\x80\x1d\xc0\x1d\xc0\x1c\xe0\x1c\xe0\x1c\x70\x1c\x70\x1c\x38\x1c\x38\x1c\x1c\x1c\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xfc\x3f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x78\x1e\x78\x1e\x7c\x3e\x7c\x3e\x7e\x7e\x7e\x7e\x77\xee\x77\xee\x73\xce\x73\xce\x71\x8e\x71\x8e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x3c\x0e\x3c\x0e\x3e\x0e\x3e\x0e\x3f\x0e\x3f\x0e\x3b\x8e\x3b\x8e\x39\xce\x39\xce\x38\xee\x38\xee\x38\x7e\x38\x7e\x38\x3e\x38\x3e\x38\x1e\x38\x1e\x38\x0e\x38\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\xee\x38\xee\x1c\x7c\x1c\x7c\x07\xf8\x07\xf8\x00\x1c\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x38\xe0\x38\xe0\x38\x70\x38\x70\x38\x38\x38\x38\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf0\x0f\xf0\x38\x1c\x38\x1c\x70\x0e\x70\x0e\x70\x00\x70\x00\x38\x00\x38\x00\x0f\xf0\x0f\xf0\x00\x1c\x00\x1c\x00\x0e\x00\x0e\x70\x0e\x70\x0e\x38\x1c\x38\x1c\x0f\xf0\x0f\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfe\x3f\xfe\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x1c\x38\x1c\x38\x0e\x70\x0e\x70\x07\xe0\x07\xe0\x03\xc0\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x70\x0e\x71\x8e\x71\x8e\x73\xce\x73\xce\x77\xee\x77\xee\x3e\x7c\x3e\x7c\x1c\x38\x1c\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x1c\x38\x1c\x38\x0e\x70\x0e\x70\x07\xe0\x07\xe0\x03\xc0\x03\xc0\x07\xe0\x07\xe0\x0e\x70\x0e\x70\x1c\x38\x1c\x38\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x0e\x38\x0e\x38\x07\x70\x07\x70\x03\xe0\x03\xe0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfe\x3f\xfe\x00\x1c\x00\x1c\x00\x38\x00\x38\x00\x70\x00\x70\x00\xe0\x00\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x00\x3f\xfe\x3f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1c\x00\x0e\x00\x0e\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\x70\x00\x70\x00\x38\x00\x38\x00\x1c\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x03\xc0\x03\xc0\x07\xe0\x07\xe0\x0e\x70\x0e\x70\x1c\x38\x1c\x38\x38\x1c\x38\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x07\x00\x07\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf8\x0f\xf8\x00\x0e\x00\x0e\x0f\xfe\x0f\xfe\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x0f\xfe\x0f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x3f\xf8\x3f\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf8\x0f\xf8\x38\x0e\x38\x0e\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x0e\x38\x0e\x0f\xf8\x0f\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x07\xfe\x07\xfe\x1c\x0e\x1c\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x0f\xfe\x0f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf8\x0f\xf8\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x3f\xfe\x3f\xfe\x38\x00\x38\x00\x38\x00\x38\x00\x0f\xfc\x0f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\xf8\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x0f\xf0\x0f\xf0\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xf8\x0f\xf8\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x0f\xfe\x0f\xfe\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x1f\xf8\x1f\xf8\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x3b\xf8\x3b\xf8\x3c\x0e\x3c\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x00\x00\x00\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\xe0\x00\xe0\x0f\x80\x0f\x80\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x38\x0e\x38\x0e\x70\x0e\x70\x0e\xe0\x0e\xe0\x0f\xc0\x0f\xc0\x0e\xe0\x0e\xe0\x0e\x70\x0e\x70\x0e\x38\x0e\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x78\x3e\x78\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x39\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xe0\x3f\xe0\x38\x38\x38\x38\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xf0\x07\xf0\x1c\x1c\x1c\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x07\xf0\x07\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x1c\x38\x1c\x3f\xf0\x3f\xf0\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xfe\x07\xfe\x1c\x0e\x1c\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x1c\x0e\x1c\x0e\x07\xfe\x07\xfe\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xf0\x3f\xf0\x38\x1c\x38\x1c\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xfc\x0f\xfc\x38\x00\x38\x00\x38\x00\x38\x00\x0f\xf8\x0f\xf8\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x1f\xf8\x1f\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x1f\xfc\x1f\xfc\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x38\x1c\x0f\xfc\x0f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x0e\x70\x0e\x38\x1c\x38\x1c\x1c\x38\x1c\x38\x0e\x70\x0e\x70\x07\xe0\x07\xe0\x03\xc0\x03\xc0\x01\x80\x01\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x38\x0e\x39\xce\x39\xce\x3b\xee\x3b\xee\x1f\x7c\x1f\x7c\x0e\x38\x0e\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x38\x1c\x38\x0e\x70\x0e\x70\x07\xe0\x07\xe0\x03\xc0\x03\xc0\x07\xe0\x07\xe0\x0e\x70\x0e\x70\x1c\x38\x1c\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x0e\x38\x0e\x1c\x1c\x1c\x1c\x0e\x38\x0e\x38\x07\x70\x07\x70\x03\xe0\x03\xe0\x01\xc0\x01\xc0\x03\x80\x03\x80\x07\x00\x07\x00\x0e\x00\x0e\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xfe\x3f\xfe\x00\x1c\x00\x1c\x00\x70\x00\x70\x01\xc0\x01\xc0\x07\x00\x07\x00\x1c\x00\x1c\x00\x3f\xfe\x3f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\xf8\x01\xc0\x01\xc0\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x1e\x00\x1e\x00\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x03\x80\x01\xc0\x01\xc0\x00\xf8\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x1f\x00\x03\x80\x03\x80\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x00\x78\x00\x78\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x03\x80\x03\x80\x1f\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\x9e\x07\x9e\x3c\xf0\x3c\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\x01\xc0\x07\x70\x07\x70\x1c\x1c\x1c\x1c\x70\x07\x70\x07\x70\x07\x70\x07\x7f\xff\x7f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ + +FONT = memoryview(_FONT) + diff --git a/utils/assets/pyfont/vga1_8x16.py b/utils/assets/pyfont/vga1_8x16.py new file mode 100644 index 0000000..73ca5ae --- /dev/null +++ b/utils/assets/pyfont/vga1_8x16.py @@ -0,0 +1,104 @@ +"""converted from vga_8x16.bin """ +WIDTH = 8 +HEIGHT = 16 +FIRST = 0x20 +LAST = 0x7f +_FONT =\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x18\x3c\x3c\x3c\x18\x18\x18\x00\x18\x18\x00\x00\x00\x00'\ +b'\x00\x66\x66\x66\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x6c\x6c\xfe\x6c\x6c\x6c\xfe\x6c\x6c\x00\x00\x00\x00'\ +b'\x18\x18\x7c\xc6\xc2\xc0\x7c\x06\x06\x86\xc6\x7c\x18\x18\x00\x00'\ +b'\x00\x00\x00\x00\xc2\xc6\x0c\x18\x30\x60\xc6\x86\x00\x00\x00\x00'\ +b'\x00\x00\x38\x6c\x6c\x38\x76\xdc\xcc\xcc\xcc\x76\x00\x00\x00\x00'\ +b'\x00\x30\x30\x30\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x0c\x18\x30\x30\x30\x30\x30\x30\x18\x0c\x00\x00\x00\x00'\ +b'\x00\x00\x30\x18\x0c\x0c\x0c\x0c\x0c\x0c\x18\x30\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x66\x3c\xff\x3c\x66\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x18\x18\x7e\x18\x18\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x18\x18\x30\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x18\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x02\x06\x0c\x18\x30\x60\xc0\x80\x00\x00\x00\x00'\ +b'\x00\x00\x38\x6c\xc6\xc6\xd6\xd6\xc6\xc6\x6c\x38\x00\x00\x00\x00'\ +b'\x00\x00\x18\x38\x78\x18\x18\x18\x18\x18\x18\x7e\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\x06\x0c\x18\x30\x60\xc0\xc6\xfe\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\x06\x06\x3c\x06\x06\x06\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x0c\x1c\x3c\x6c\xcc\xfe\x0c\x0c\x0c\x1e\x00\x00\x00\x00'\ +b'\x00\x00\xfe\xc0\xc0\xc0\xfc\x06\x06\x06\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x38\x60\xc0\xc0\xfc\xc6\xc6\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\xfe\xc6\x06\x06\x0c\x18\x30\x30\x30\x30\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\xc6\x7c\xc6\xc6\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\xc6\x7e\x06\x06\x06\x0c\x78\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x18\x18\x00\x00\x00\x18\x18\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x18\x18\x00\x00\x00\x18\x18\x30\x00\x00\x00\x00'\ +b'\x00\x00\x00\x06\x0c\x18\x30\x60\x30\x18\x0c\x06\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x7e\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x60\x30\x18\x0c\x06\x0c\x18\x30\x60\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\x0c\x18\x18\x18\x00\x18\x18\x00\x00\x00\x00'\ +b'\x00\x00\x00\x7c\xc6\xc6\xde\xde\xde\xdc\xc0\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x10\x38\x6c\xc6\xc6\xfe\xc6\xc6\xc6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\xfc\x66\x66\x66\x7c\x66\x66\x66\x66\xfc\x00\x00\x00\x00'\ +b'\x00\x00\x3c\x66\xc2\xc0\xc0\xc0\xc0\xc2\x66\x3c\x00\x00\x00\x00'\ +b'\x00\x00\xf8\x6c\x66\x66\x66\x66\x66\x66\x6c\xf8\x00\x00\x00\x00'\ +b'\x00\x00\xfe\x66\x62\x68\x78\x68\x60\x62\x66\xfe\x00\x00\x00\x00'\ +b'\x00\x00\xfe\x66\x62\x68\x78\x68\x60\x60\x60\xf0\x00\x00\x00\x00'\ +b'\x00\x00\x3c\x66\xc2\xc0\xc0\xde\xc6\xc6\x66\x3a\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xc6\xc6\xc6\xfe\xc6\xc6\xc6\xc6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\x3c\x18\x18\x18\x18\x18\x18\x18\x18\x3c\x00\x00\x00\x00'\ +b'\x00\x00\x1e\x0c\x0c\x0c\x0c\x0c\xcc\xcc\xcc\x78\x00\x00\x00\x00'\ +b'\x00\x00\xe6\x66\x66\x6c\x78\x78\x6c\x66\x66\xe6\x00\x00\x00\x00'\ +b'\x00\x00\xf0\x60\x60\x60\x60\x60\x60\x62\x66\xfe\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xee\xfe\xfe\xd6\xc6\xc6\xc6\xc6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xe6\xf6\xfe\xde\xce\xc6\xc6\xc6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\xc6\xc6\xc6\xc6\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\xfc\x66\x66\x66\x7c\x60\x60\x60\x60\xf0\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\xc6\xc6\xc6\xc6\xd6\xde\x7c\x0c\x0e\x00\x00'\ +b'\x00\x00\xfc\x66\x66\x66\x7c\x6c\x66\x66\x66\xe6\x00\x00\x00\x00'\ +b'\x00\x00\x7c\xc6\xc6\x60\x38\x0c\x06\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x7e\x7e\x5a\x18\x18\x18\x18\x18\x18\x3c\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xc6\xc6\xc6\xc6\xc6\xc6\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xc6\xc6\xc6\xc6\xc6\xc6\x6c\x38\x10\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xc6\xc6\xc6\xd6\xd6\xd6\xfe\xee\x6c\x00\x00\x00\x00'\ +b'\x00\x00\xc6\xc6\x6c\x7c\x38\x38\x7c\x6c\xc6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\x66\x66\x66\x66\x3c\x18\x18\x18\x18\x3c\x00\x00\x00\x00'\ +b'\x00\x00\xfe\xc6\x86\x0c\x18\x30\x60\xc2\xc6\xfe\x00\x00\x00\x00'\ +b'\x00\x00\x3c\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x80\xc0\xe0\x70\x38\x1c\x0e\x06\x02\x00\x00\x00\x00'\ +b'\x00\x00\x3c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x3c\x00\x00\x00\x00'\ +b'\x10\x38\x6c\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00'\ +b'\x00\x30\x18\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x78\x0c\x7c\xcc\xcc\xcc\x76\x00\x00\x00\x00'\ +b'\x00\x00\xe0\x60\x60\x78\x6c\x66\x66\x66\x66\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x7c\xc6\xc0\xc0\xc0\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x1c\x0c\x0c\x3c\x6c\xcc\xcc\xcc\xcc\x76\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x7c\xc6\xfe\xc0\xc0\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x1c\x36\x32\x30\x78\x30\x30\x30\x30\x78\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x76\xcc\xcc\xcc\xcc\xcc\x7c\x0c\xcc\x78\x00'\ +b'\x00\x00\xe0\x60\x60\x6c\x76\x66\x66\x66\x66\xe6\x00\x00\x00\x00'\ +b'\x00\x00\x18\x18\x00\x38\x18\x18\x18\x18\x18\x3c\x00\x00\x00\x00'\ +b'\x00\x00\x06\x06\x00\x0e\x06\x06\x06\x06\x06\x06\x66\x66\x3c\x00'\ +b'\x00\x00\xe0\x60\x60\x66\x6c\x78\x78\x6c\x66\xe6\x00\x00\x00\x00'\ +b'\x00\x00\x38\x18\x18\x18\x18\x18\x18\x18\x18\x3c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xec\xfe\xd6\xd6\xd6\xd6\xc6\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xdc\x66\x66\x66\x66\x66\x66\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x7c\xc6\xc6\xc6\xc6\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xdc\x66\x66\x66\x66\x66\x7c\x60\x60\xf0\x00'\ +b'\x00\x00\x00\x00\x00\x76\xcc\xcc\xcc\xcc\xcc\x7c\x0c\x0c\x1e\x00'\ +b'\x00\x00\x00\x00\x00\xdc\x76\x66\x60\x60\x60\xf0\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x7c\xc6\x60\x38\x0c\xc6\x7c\x00\x00\x00\x00'\ +b'\x00\x00\x10\x30\x30\xfc\x30\x30\x30\x30\x36\x1c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xcc\xcc\xcc\xcc\xcc\xcc\x76\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xc6\xc6\xc6\xc6\xc6\x6c\x38\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xc6\xc6\xd6\xd6\xd6\xfe\x6c\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xc6\x6c\x38\x38\x38\x6c\xc6\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\xc6\xc6\xc6\xc6\xc6\xc6\x7e\x06\x0c\xf8\x00'\ +b'\x00\x00\x00\x00\x00\xfe\xcc\x18\x30\x60\xc6\xfe\x00\x00\x00\x00'\ +b'\x00\x00\x0e\x18\x18\x18\x70\x18\x18\x18\x18\x0e\x00\x00\x00\x00'\ +b'\x00\x00\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x00\x00\x00\x00'\ +b'\x00\x00\x70\x18\x18\x18\x0e\x18\x18\x18\x18\x70\x00\x00\x00\x00'\ +b'\x00\x76\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x10\x38\x6c\xc6\xc6\xc6\xfe\x00\x00\x00\x00\x00'\ + +FONT = memoryview(_FONT) diff --git a/utils/convert_assets.sh b/utils/convert_assets.sh index 9614e2a..7aaebc9 100755 --- a/utils/convert_assets.sh +++ b/utils/convert_assets.sh @@ -1,49 +1,60 @@ #!/bin/bash # -*- coding: utf-8 -*- -CN_TEXT='天气北京市区邹城怀柔呼和浩特月日星期一二三四五六七八九十腊冬晴多云转雷雨雪雾霾风南东西级末优良中差污恶能见度配置设备网络连接热点自动进入页面0123456789 abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ!%*+,-./()[]\"<>=?℃' +# switch to local path +cd "$(dirname "$0")" || exit 1 + TIME_TEXT='0123456789: .-' +CN_TEXT='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~' +CN_TEXT="${CN_TEXT} '℃,。()" +CN_TEXT="${CN_TEXT}0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + SRC_DIR=./assets DST_DIR=../src/rom/fonts -README=$DST_DIR/README.md +README="$DST_DIR/README.md" # 中文黑体源字体 -CN_OTF_FONT=$SRC_DIR/STHeiti.ttc +CN_OTF_FONT="$SRC_DIR/fonts/STHeiti.ttc" # 英文时间源字体 -TIME_OTF_FONT=$SRC_DIR/BloodWaxItalic.otf +TIME_OTF_FONT="$SRC_DIR/fonts/BloodWaxItalic.otf" -echo "# 字体文件说明" > $README -echo "" >>$README +# 追加中文常用汉字列表 +CN_TEXT="${CN_TEXT}$(< $SRC_DIR/cn-words.txt)" -echo "1. en0.rfont/en1.rfont 英文字体" >> $README -echo "> 顺序排列,相等大小、可快速定位" >> $README -echo "" >>$README -python3 pyfont_to_bin.py $SRC_DIR/vga1_8x16.py $DST_DIR/en0.rfont -python3 pyfont_to_bin.py $SRC_DIR/vga1_16x32.py $DST_DIR/en1.rfont +echo "# 字体文件说明" > "$README" +echo "" >>"$README" -echo "2. en.hfont 矢量英文字体" >> $README -echo "> 顺序排列,带索引表,只画线无背景色,可自由缩放,显示速度快" >> $README -echo "" >>$README -python3 pyfont_to_bin.py $SRC_DIR/romand.py $DST_DIR/en.hfont +echo "1. en0.rfont/en1.rfont 英文字体" >> "$README" +echo "> 顺序排列,相等大小、可快速定位" >> "$README" +echo "" >>"$README" +python3 pyfont_to_bin.py "$SRC_DIR/pyfont/vga1_8x16.py" "$DST_DIR/en0.rfont" +python3 pyfont_to_bin.py "$SRC_DIR/pyfont/vga1_16x32.py" "$DST_DIR/en1.rfont" -echo "3. cn.bfont 中文字体" >> $README -echo "> 有字符MAP表(当前顺序查找、需实现二叉树查找)" >> $README -echo "" >>$README -python3 font2bitmap.py -s "$CN_TEXT" $CN_OTF_FONT 22 > $SRC_DIR/cn.py -python3 pyfont_to_bin.py $SRC_DIR/cn.py $DST_DIR/cn.bfont +echo "2. en.hfont 矢量英文字体" >> "$README" +echo "> 顺序排列,带索引表,只画线无背景色,可自由缩放,显示速度快" >> "$README" +echo "" >>"$README" +python3 pyfont_to_bin.py "$SRC_DIR/pyfont/romand.py" "$DST_DIR/en.hfont" -echo "4. time.bfont 时间字体" >> $README -echo "> 有字符MAP表(当前顺序查找、需实现二叉树查找)" >> $README -echo "" >>$README -python3 font2bitmap.py -s "$TIME_TEXT" $TIME_OTF_FONT 48 > $SRC_DIR/time.py -python3 pyfont_to_bin.py $SRC_DIR/time.py $DST_DIR/time.bfont +echo "3. cn.bfont 中文字体" >> "$README" +echo "> 有字符MAP表,二叉树查找" >> "$README" +echo "" >>"$README" +SORTED_TEXT=$(python3 -c "text = '''$CN_TEXT''';sorted_unique = ''.join(sorted(set(text), key=lambda c: ord(c)));print(sorted_unique, end='')") +python3 font2bitmap.py -s "$SORTED_TEXT" "$CN_OTF_FONT" 20 > "$SRC_DIR/pyfont/cn.py" +python3 pyfont_to_bin.py "$SRC_DIR/pyfont/cn.py" "$DST_DIR/cn.bfont" + +echo "4. time.bfont 时间字体" >> "$README" +echo "> 有字符MAP表,二叉树查找" >> "$README" +echo "" >>"$README" +SORTED_TEXT=$(python3 -c "text = '''$TIME_TEXT''';sorted_unique = ''.join(sorted(set(text), key=lambda c: ord(c)));print(sorted_unique, end='')") +python3 font2bitmap.py -s "$SORTED_TEXT" "$TIME_OTF_FONT" 48 > "$SRC_DIR/pyfont/time.py" +python3 pyfont_to_bin.py "$SRC_DIR/pyfont/time.py" "$DST_DIR/time.bfont" # 开始转换图片文件 -SRC_DIR=./assets +SRC_DIR=./assets/images DST_DIR=../src/rom/images # 透明色转换成黑色背景,质量95% -python3 png_to_jpg.py -d $SRC_DIR/ --color black --quality 100 -cp -v $SRC_DIR/*.jpg $DST_DIR/ +python3 png_to_jpg.py -d "$SRC_DIR/" --color black --quality 100 +mv -v "$SRC_DIR"/*.jpg "$DST_DIR/" diff --git a/utils/download.sh b/utils/download.sh index 4f15d80..309cac9 100755 --- a/utils/download.sh +++ b/utils/download.sh @@ -1,13 +1,16 @@ -#!/bin/sh +#!/bin/bash + +# switch to local path +cd "$(dirname "$0")" || exit 1 # 连接并打印文件列表 mpremote ls # 生成romfs文件系统并上传 -mpremote romfs deploy src/rom +mpremote romfs deploy ../src/rom # 复制文件 -for file in src/*.py; do +for file in ../src/*.py; do if [ -f "$file" ]; then mpremote fs cp "$file" : fi