From b019d7530afc6f44f0190d706449c2f2a2af5661 Mon Sep 17 00:00:00 2001 From: Roger Abelenda Date: Sat, 4 Nov 2017 17:07:18 -0300 Subject: [PATCH] Add functional script for generating sprites and listing, and generated resources --- README.md | 54 +++++++++++++ pngs/activemq.png | Bin 0 -> 1136 bytes pngs/ai.png | Bin 0 -> 1085 bytes pngs/aliyun.png | Bin 0 -> 712 bytes pngs/apache.png | Bin 0 -> 1137 bytes pngs/bearychat.png | Bin 0 -> 795 bytes pngs/bell.png | Bin 0 -> 746 bytes pngs/bi.png | Bin 0 -> 1021 bytes pngs/cacti.png | Bin 0 -> 500 bytes pngs/cassandra.png | Bin 0 -> 1177 bytes pngs/ci-large.png | Bin 0 -> 1112 bytes pngs/ci.png | Bin 0 -> 992 bytes pngs/cog.png | Bin 0 -> 1144 bytes pngs/copy.png | Bin 0 -> 481 bytes pngs/couchbase.png | Bin 0 -> 825 bytes pngs/couchdb.png | Bin 0 -> 837 bytes pngs/ct.png | Bin 0 -> 995 bytes pngs/dashboard.png | Bin 0 -> 1168 bytes pngs/desktop.png | Bin 0 -> 476 bytes pngs/disable.png | Bin 0 -> 1241 bytes pngs/docker.png | Bin 0 -> 686 bytes pngs/download.png | Bin 0 -> 591 bytes pngs/edit.png | Bin 0 -> 1030 bytes pngs/elasticsearch.png | Bin 0 -> 1046 bytes pngs/exit.png | Bin 0 -> 660 bytes pngs/file.png | Bin 0 -> 405 bytes pngs/gearman.png | Bin 0 -> 1160 bytes pngs/gunicorn.png | Bin 0 -> 1267 bytes pngs/haproxy.png | Bin 0 -> 1378 bytes pngs/hdfs.png | Bin 0 -> 1610 bytes pngs/iis.png | Bin 0 -> 768 bytes pngs/java.png | Bin 0 -> 1128 bytes pngs/jianliao.png | Bin 0 -> 1168 bytes pngs/kafka.png | Bin 0 -> 1270 bytes pngs/left.png | Bin 0 -> 649 bytes pngs/linux.png | Bin 0 -> 1503 bytes pngs/listalt.png | Bin 0 -> 514 bytes pngs/loading.png | Bin 0 -> 1021 bytes pngs/memcached.png | Bin 0 -> 877 bytes pngs/mesos.png | Bin 0 -> 1183 bytes pngs/mi.png | Bin 0 -> 992 bytes pngs/mongodb.png | Bin 0 -> 663 bytes pngs/mysql.png | Bin 0 -> 998 bytes pngs/nagios.png | Bin 0 -> 617 bytes pngs/nginx.png | Bin 0 -> 838 bytes pngs/nodejs.png | Bin 0 -> 1346 bytes pngs/onealert.png | Bin 0 -> 689 bytes pngs/oneapmlogo.png | Bin 0 -> 1199 bytes pngs/openstack.png | Bin 0 -> 962 bytes pngs/overview.png | Bin 0 -> 788 bytes pngs/pause.png | Bin 0 -> 312 bytes pngs/php.png | Bin 0 -> 1028 bytes pngs/php_fpm.png | Bin 0 -> 780 bytes pngs/play.png | Bin 0 -> 607 bytes pngs/plus.png | Bin 0 -> 983 bytes pngs/point.png | Bin 0 -> 596 bytes pngs/postgresql.png | Bin 0 -> 1157 bytes pngs/pubu.png | Bin 0 -> 600 bytes pngs/python.png | Bin 0 -> 873 bytes pngs/question.png | Bin 0 -> 1304 bytes pngs/rabbitmq.png | Bin 0 -> 415 bytes pngs/redis.png | Bin 0 -> 822 bytes pngs/remove-sign.png | Bin 0 -> 1098 bytes pngs/right.png | Bin 0 -> 674 bytes pngs/ruby.png | Bin 0 -> 1635 bytes pngs/server.png | Bin 0 -> 441 bytes pngs/singlePage.png | Bin 0 -> 380 bytes pngs/snmp.png | Bin 0 -> 429 bytes pngs/solr.png | Bin 0 -> 1201 bytes pngs/sqlserver.png | Bin 0 -> 1854 bytes pngs/supervisord.png | Bin 0 -> 917 bytes pngs/tomcat.png | Bin 0 -> 1153 bytes pngs/tongzhi.png | Bin 0 -> 615 bytes pngs/trash.png | Bin 0 -> 519 bytes pngs/user.png | Bin 0 -> 650 bytes pngs/windows.png | Bin 0 -> 454 bytes pngs/x.png | Bin 0 -> 721 bytes pngs/yanjing.png | Bin 0 -> 1172 bytes pngs/zookeeper.png | Bin 0 -> 1095 bytes sprites-list.md | 82 ++++++++++++++++++++ sprites/activemq.puml | 52 +++++++++++++ sprites/ai.puml | 52 +++++++++++++ sprites/aliyun.puml | 52 +++++++++++++ sprites/apache.puml | 52 +++++++++++++ sprites/bearychat.puml | 52 +++++++++++++ sprites/bell.puml | 52 +++++++++++++ sprites/bi.puml | 52 +++++++++++++ sprites/cacti.puml | 52 +++++++++++++ sprites/cassandra.puml | 52 +++++++++++++ sprites/ci-large.puml | 52 +++++++++++++ sprites/ci.puml | 52 +++++++++++++ sprites/cog.puml | 52 +++++++++++++ sprites/copy.puml | 52 +++++++++++++ sprites/couchbase.puml | 52 +++++++++++++ sprites/couchdb.puml | 52 +++++++++++++ sprites/ct.puml | 52 +++++++++++++ sprites/dashboard.puml | 52 +++++++++++++ sprites/desktop.puml | 52 +++++++++++++ sprites/disable.puml | 52 +++++++++++++ sprites/docker.puml | 52 +++++++++++++ sprites/download.puml | 52 +++++++++++++ sprites/edit.puml | 52 +++++++++++++ sprites/elasticsearch.puml | 52 +++++++++++++ sprites/exit.puml | 52 +++++++++++++ sprites/file.puml | 52 +++++++++++++ sprites/gearman.puml | 52 +++++++++++++ sprites/gunicorn.puml | 52 +++++++++++++ sprites/haproxy.puml | 52 +++++++++++++ sprites/hdfs.puml | 52 +++++++++++++ sprites/iis.puml | 52 +++++++++++++ sprites/java.puml | 52 +++++++++++++ sprites/jianliao.puml | 52 +++++++++++++ sprites/kafka.puml | 52 +++++++++++++ sprites/left.puml | 52 +++++++++++++ sprites/linux.puml | 52 +++++++++++++ sprites/listalt.puml | 52 +++++++++++++ sprites/loading.puml | 52 +++++++++++++ sprites/memcached.puml | 52 +++++++++++++ sprites/mesos.puml | 52 +++++++++++++ sprites/mi.puml | 52 +++++++++++++ sprites/mongodb.puml | 52 +++++++++++++ sprites/mysql.puml | 52 +++++++++++++ sprites/nagios.puml | 52 +++++++++++++ sprites/nginx.puml | 52 +++++++++++++ sprites/nodejs.puml | 52 +++++++++++++ sprites/onealert.puml | 52 +++++++++++++ sprites/oneapmlogo.puml | 52 +++++++++++++ sprites/openstack.puml | 52 +++++++++++++ sprites/overview.puml | 52 +++++++++++++ sprites/pause.puml | 52 +++++++++++++ sprites/php.puml | 52 +++++++++++++ sprites/php_fpm.puml | 52 +++++++++++++ sprites/play.puml | 52 +++++++++++++ sprites/plus.puml | 52 +++++++++++++ sprites/point.puml | 52 +++++++++++++ sprites/postgresql.puml | 52 +++++++++++++ sprites/pubu.puml | 52 +++++++++++++ sprites/python.puml | 52 +++++++++++++ sprites/question.puml | 52 +++++++++++++ sprites/rabbitmq.puml | 52 +++++++++++++ sprites/redis.puml | 52 +++++++++++++ sprites/remove-sign.puml | 52 +++++++++++++ sprites/right.puml | 52 +++++++++++++ sprites/ruby.puml | 52 +++++++++++++ sprites/server.puml | 52 +++++++++++++ sprites/singlePage.puml | 52 +++++++++++++ sprites/snmp.puml | 52 +++++++++++++ sprites/solr.puml | 52 +++++++++++++ sprites/sqlserver.puml | 52 +++++++++++++ sprites/supervisord.puml | 52 +++++++++++++ sprites/tomcat.puml | 52 +++++++++++++ sprites/tongzhi.puml | 52 +++++++++++++ sprites/trash.puml | 52 +++++++++++++ sprites/user.puml | 52 +++++++++++++ sprites/windows.puml | 52 +++++++++++++ sprites/x.puml | 52 +++++++++++++ sprites/yanjing.puml | 52 +++++++++++++ sprites/zookeeper.puml | 52 +++++++++++++ svgFont2plantUmlSprites.groovy | 133 +++++++++++++++++++++++++++++++++ 159 files changed, 4325 insertions(+) create mode 100644 README.md create mode 100644 pngs/activemq.png create mode 100644 pngs/ai.png create mode 100644 pngs/aliyun.png create mode 100644 pngs/apache.png create mode 100644 pngs/bearychat.png create mode 100644 pngs/bell.png create mode 100644 pngs/bi.png create mode 100644 pngs/cacti.png create mode 100644 pngs/cassandra.png create mode 100644 pngs/ci-large.png create mode 100644 pngs/ci.png create mode 100644 pngs/cog.png create mode 100644 pngs/copy.png create mode 100644 pngs/couchbase.png create mode 100644 pngs/couchdb.png create mode 100644 pngs/ct.png create mode 100644 pngs/dashboard.png create mode 100644 pngs/desktop.png create mode 100644 pngs/disable.png create mode 100644 pngs/docker.png create mode 100644 pngs/download.png create mode 100644 pngs/edit.png create mode 100644 pngs/elasticsearch.png create mode 100644 pngs/exit.png create mode 100644 pngs/file.png create mode 100644 pngs/gearman.png create mode 100644 pngs/gunicorn.png create mode 100644 pngs/haproxy.png create mode 100644 pngs/hdfs.png create mode 100644 pngs/iis.png create mode 100644 pngs/java.png create mode 100644 pngs/jianliao.png create mode 100644 pngs/kafka.png create mode 100644 pngs/left.png create mode 100644 pngs/linux.png create mode 100644 pngs/listalt.png create mode 100644 pngs/loading.png create mode 100644 pngs/memcached.png create mode 100644 pngs/mesos.png create mode 100644 pngs/mi.png create mode 100644 pngs/mongodb.png create mode 100644 pngs/mysql.png create mode 100644 pngs/nagios.png create mode 100644 pngs/nginx.png create mode 100644 pngs/nodejs.png create mode 100644 pngs/onealert.png create mode 100644 pngs/oneapmlogo.png create mode 100644 pngs/openstack.png create mode 100644 pngs/overview.png create mode 100644 pngs/pause.png create mode 100644 pngs/php.png create mode 100644 pngs/php_fpm.png create mode 100644 pngs/play.png create mode 100644 pngs/plus.png create mode 100644 pngs/point.png create mode 100644 pngs/postgresql.png create mode 100644 pngs/pubu.png create mode 100644 pngs/python.png create mode 100644 pngs/question.png create mode 100644 pngs/rabbitmq.png create mode 100644 pngs/redis.png create mode 100644 pngs/remove-sign.png create mode 100644 pngs/right.png create mode 100644 pngs/ruby.png create mode 100644 pngs/server.png create mode 100644 pngs/singlePage.png create mode 100644 pngs/snmp.png create mode 100644 pngs/solr.png create mode 100644 pngs/sqlserver.png create mode 100644 pngs/supervisord.png create mode 100644 pngs/tomcat.png create mode 100644 pngs/tongzhi.png create mode 100644 pngs/trash.png create mode 100644 pngs/user.png create mode 100644 pngs/windows.png create mode 100644 pngs/x.png create mode 100644 pngs/yanjing.png create mode 100644 pngs/zookeeper.png create mode 100644 sprites-list.md create mode 100644 sprites/activemq.puml create mode 100644 sprites/ai.puml create mode 100644 sprites/aliyun.puml create mode 100644 sprites/apache.puml create mode 100644 sprites/bearychat.puml create mode 100644 sprites/bell.puml create mode 100644 sprites/bi.puml create mode 100644 sprites/cacti.puml create mode 100644 sprites/cassandra.puml create mode 100644 sprites/ci-large.puml create mode 100644 sprites/ci.puml create mode 100644 sprites/cog.puml create mode 100644 sprites/copy.puml create mode 100644 sprites/couchbase.puml create mode 100644 sprites/couchdb.puml create mode 100644 sprites/ct.puml create mode 100644 sprites/dashboard.puml create mode 100644 sprites/desktop.puml create mode 100644 sprites/disable.puml create mode 100644 sprites/docker.puml create mode 100644 sprites/download.puml create mode 100644 sprites/edit.puml create mode 100644 sprites/elasticsearch.puml create mode 100644 sprites/exit.puml create mode 100644 sprites/file.puml create mode 100644 sprites/gearman.puml create mode 100644 sprites/gunicorn.puml create mode 100644 sprites/haproxy.puml create mode 100644 sprites/hdfs.puml create mode 100644 sprites/iis.puml create mode 100644 sprites/java.puml create mode 100644 sprites/jianliao.puml create mode 100644 sprites/kafka.puml create mode 100644 sprites/left.puml create mode 100644 sprites/linux.puml create mode 100644 sprites/listalt.puml create mode 100644 sprites/loading.puml create mode 100644 sprites/memcached.puml create mode 100644 sprites/mesos.puml create mode 100644 sprites/mi.puml create mode 100644 sprites/mongodb.puml create mode 100644 sprites/mysql.puml create mode 100644 sprites/nagios.puml create mode 100644 sprites/nginx.puml create mode 100644 sprites/nodejs.puml create mode 100644 sprites/onealert.puml create mode 100644 sprites/oneapmlogo.puml create mode 100644 sprites/openstack.puml create mode 100644 sprites/overview.puml create mode 100644 sprites/pause.puml create mode 100644 sprites/php.puml create mode 100644 sprites/php_fpm.puml create mode 100644 sprites/play.puml create mode 100644 sprites/plus.puml create mode 100644 sprites/point.puml create mode 100644 sprites/postgresql.puml create mode 100644 sprites/pubu.puml create mode 100644 sprites/python.puml create mode 100644 sprites/question.puml create mode 100644 sprites/rabbitmq.puml create mode 100644 sprites/redis.puml create mode 100644 sprites/remove-sign.puml create mode 100644 sprites/right.puml create mode 100644 sprites/ruby.puml create mode 100644 sprites/server.puml create mode 100644 sprites/singlePage.puml create mode 100644 sprites/snmp.puml create mode 100644 sprites/solr.puml create mode 100644 sprites/sqlserver.puml create mode 100644 sprites/supervisord.puml create mode 100644 sprites/tomcat.puml create mode 100644 sprites/tongzhi.puml create mode 100644 sprites/trash.puml create mode 100644 sprites/user.puml create mode 100644 sprites/windows.puml create mode 100644 sprites/x.puml create mode 100644 sprites/yanjing.puml create mode 100644 sprites/zookeeper.puml create mode 100755 svgFont2plantUmlSprites.groovy diff --git a/README.md b/README.md new file mode 100644 index 0000000..256ca14 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Cloudinsight PlantUML sprites + +This repository contains PlantUML sprites generated from [Cloudinsight icons](https://github.com/cloudinsight/cicon), which can easily be used in PlantUML diagrams for nice visual representation of popular technologies. + +This project is inspired in other PlantUML sprites repositories like [AWS-PlantUML](https://github.com/milo-minderbinder/AWS-PlantUML) and [PlantUML Icon-Font Sprites](https://github.com/tupadr3/plantuml-icon-font-sprites). + +## Usage + +Just import the proper sprite into your PlantUML diagram and use it like any other sprite. + +Example: + +``` +@startuml + +!define SPRITESURL https://raw.githubusercontent.com/rabelenda/cicon-plantuml-sprites/v1.0/sprites +!includeurl SPRITESURL/tomcat.puml +!includeurl SPRITESURL/kafka.puml +!includeurl SPRITESURL/java.puml +!includeurl SPRITESURL/cassandra.puml + +title Cloudinsight sprites example + +skinparam monochrome true + +rectangle "<$tomcat>\nwebapp" as webapp +queue "<$kafka>" as kafka +rectangle "<$java>\ndaemon" as daemon +database "<$cassandra>" as cassandra + +webapp -> kafka +kafka -> daemon +daemon --> cassandra + +@enduml +``` + +![Example](https://www.planttext.com/plantuml/img/XL7BJiCm4BpxAzoAQv8xGb4bn0690shXXeGszZPnunVsclBvs4vKbGDmMNbsnpCxzYuI14f6CxQHU5GM-U5v__ZoS7X_tJ_nYSZ7swuBS6v7HLCQKiGWd2Mqr0fdycH0ZLP29rJkDrw3BNfDz44Hniv090pT2jb6MQ6Jn1JqjLD7pWYWrfTLVkFCS9pXRye9FlzX28WHh0mhZP4YZVnUkoILZMgSYA-xSlm2upKo5cTbFGGmt3Zhn1ISGKuXvL50GM37BB6zkrb2z6-Mdt40xxSS8b-Qx2DXggIQeg-ZUlmfKG8K0GcOlIghj9W4WW5YvLmYB2eNcCDKBzxqgtIj1LQDKdYJqTMDNVwx-WwCVGC0) + +The list of available sprites is [here](sprites-list.md). + +You can play around and test ideas with [PlantText](https://www.planttext.com/). + +## Build + +Sprites are built with provided [svgFont2plantUmlSprites.groovy](svgFont2plantUmlSprites.groovy) script. To update sprites from icons in [Cloudinsight icons](https://github.com/cloudinsight/cicon) just re-run: + +```bash +./svgFont2plantUmlSprites.groovy https://raw.githubusercontent.com/cloudinsight/cicon/master/iconfont.svg +``` + +## Note + +* All logo icons are the registered trademarks of their respective owners. \ No newline at end of file diff --git a/pngs/activemq.png b/pngs/activemq.png new file mode 100644 index 0000000000000000000000000000000000000000..75923cb4f2318c782133d105326c0193cf015fe0 GIT binary patch literal 1136 zcmV-$1dscPP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000BW zNkl37OHVX-nCpXRS*$f zg;+?GRFs57XxL#Zqp}m($)vL#EQ(AjN{o6xcz^gAX7^u_e|J{)g9n$L-F4piPVbE4 zq#_lm7`Ks;3@14u!utooQxHg20k=RNs7Y1WTl+dVFOU@zDn;n)tahYfohOx2EU0*CxCM*nf{dqoBNp_?PN zUh`ElbtbZOg6tzj4tq)7|7<%0lKPLXM%F`0WC81XtIKYf;tQC=zt%D^0w!_pNAgis z^h6!B-xUUjt70+-!cqPoYhFmM{;MciaF~HIUQL-?O&%uk0=TXj#9m@G1FB3u8Sagx zftNEAU2N()mxvW~u3_#Gu^GQO1f(aP+sc57Q!y+qF>%XyGICO9v^}C{U^;h5fi}HX zgA+C~prR90dMq|~xrueSLgUxU{>kA!DJLahCi_4|6)nmKTLPq%&T*q=8AOOr>Swte zW>YUTGD^?jKeTQWG?;9@f=v}H7tDSea~8={R650r2C zY!U5)+#6h?9hduwd0G_v?mpop8hgJU*GAwiGt6mz(Q zZ3$3ul_e6QZH^W)akjAZuJH;tv-V3oE`l`sdyZUd0vyisX4;OBAsZ7oUN?h3yu$4q z(U}~r`uD42aj#<)pe#oxPbOp-waQ~vvb6fS{MvXSW>AQV8aja-_jIU7;H zhMmtnQ5a!UhiUc({3ak;DJd&HpgkN&MJiG;9^*fVl+HhfZmrG$0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000A& zNkl33-NZivSfW(_2o8z@q?#yP>SB)}c=OSKlVGv+3it!Kno8)T#yA}F zNw{81ChP}T^;(vw4xh+Sp=C?=dnnm-xQx9^<+CCApdaA;ag+Y(@HzM@mAp3dtOPuy zcosGiCUsAKn~zbCcTkAQItb8i2FSQ&reiuo2}Z<6mpOVUXgKT*n$&`n3lq$}VbaVK z$x*K><`^Q@ig`0YGd;;fgBbP0vZm%DHleCTrvus&J2i+@{E2@Z*wl!mnR&93Cbt6z z0|-#DXqPIQiEN6AE<1#iiMX`ud4&KI)GCU#zFz_GJF}+HvgzQnBB3~tlUOd|Hq&+l zC}%4sB?ImZ5zF4~Av3wY!*E((A(O)-G|@06}FDYi-X z@(~DdkAzs#4?Ol5R8X{^@)68F4Z&*xn&lm?p?U5Rx3f(9$wjU{=7TdK3XpMj-;m0P zDoHlX44PqtL$lkYuurZw>I%tpmiUz16F*SwR#8#ZRTy$n=WPg!$GmY#zG*Vq^BA*> zwK`(1MnAxvKg-R*oeNC^Z)s@253qXu5?~x^`K0mtl$zZDRW*9s_wsW{!(62#HXfQ~h;(FpBU6ksJ| z`EOr#&?r^Qk9=*k%V;VaNGoxn7DC70Z?w=t3z6a%loY`;iv!kX00000NkvXXu0mjf D54hGO literal 0 HcmV?d00001 diff --git a/pngs/aliyun.png b/pngs/aliyun.png new file mode 100644 index 0000000000000000000000000000000000000000..1454735b69efe02ed5214f79fa4baba80eb6d81e GIT binary patch literal 712 zcmV;(0yq7MP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0006X zNklBPdv? zSZHZuA^u=tK*2&mP&9=_z!VlKf&}p`j1uGR-tFE=ROZ1)NOstrncJPciOB*668xDo|xG1ZFfR zEr3(74Hm%}c$L_S-w(kJD1v&>sIk^Z!VhGJcm+%;CJ>8WQzkFz^WJ44X`zFiq-~o3 zQJaJ{Q?dAVh-Lde2S&*GlFwU-O0!2)29*IR3;PI-=d8|vtSU|0R2Sb51eMm=Q+9f( z!5vlfGJszz4xrWw{=l3mx;bUqbGpB46+qJFCg1<<0nG9l-~j$%0KvZ!Kv`n9;IcIKCe7_!3$B}E!xLES}&~Vx%09BM6)rWSSUt}(f3kCe~{Ja z58BA#BsrbX*rs2)I={sexvOs5G&P{;i^cqp^geH@ZVEzr2GTCKMZaP!?$Y_?O6O%& zNMvuAnhF#37zSsjRjXS*ATfRb8=!&qYe-|ECaNG-6>T20Ys^)qKMX`ixCGv+4g4C7 ux6WPgBncp@nT&#$FMcc*i^XEGyw*GKHf5Mv^ts^x0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000BX zNkl3ui%wP$TkVS-+5Rnkuq(mY^!bD0$L@XjI%Akvah`Q*epsS)H zx{9!<5HYBTrNY7v+R^N!W(Ug7Sq52lAR_GWe((Ge!IY-;+sz)5<>J>mKDj5zq-D;5Zmfq<}Ps^Y=iQ zH#}-lRz=KNup4wITL=|_Z9FaqEno$hq+F8$rhz6<0bYTZ$s%ASsN}J9wM8e3rtqdtp*2@p^W|o%c7jC zWIpt;#5O8(l~kPx44n+-kwK8TEUh zg27k}g6R(DB}_gz?2RRXtLTZVOzH-ch=rV7JK0Cx@w>xhP?rY`JLaNsNnFq8%}Ao2 zRQkwmFu-GZFAwA^-Fy?+rNaY;b%1J%#%2yT86CQK!zY+O@|j#^we#7bRS#8hZW`1j zK-_(X9W~2Agv?2A7%m5y)U#bAcO5fT!+w*kXk}9T@=#H z)h_0%*-F?`x^)RK>@v8*xj)g7MrGNj@E7BG0r~gi4Mm4|NJKN@ok*9(M5r zq=LJ(5w37M6F0!|+^^(OJ&QrFP60-Rim(ipx$s7SNiM};h#ra1Be@i!7K0%+KWzdG zlNxS3mJhoS5@dcDPc!;ib0mYbn8pMH}SUd2(w&3}DlvfaT(Xv|t`z!Ywl;x0hlU&tyiV&%$nxL(GQz2K-_ zV~eK%tI{e7JDoXG$kkRym0@~fU95I+o_Xe(XR)<^y6Vj6?A#yH00000NkvXXu0mjf Dg-`m+ literal 0 HcmV?d00001 diff --git a/pngs/bearychat.png b/pngs/bearychat.png new file mode 100644 index 0000000000000000000000000000000000000000..b717ea944668d795fad22264cce610ada406f3db GIT binary patch literal 795 zcmV+$1LXXPP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0007V zNkl;t(pu;07R01>!gK@Bk=%Zw6uo zD(9USKpY6fCrHu6Orj+&K)f4>#b}WEL9rSG#21117A-sg3i<6o%tymg5mbT&0r5^C zenyN2CK5silxzg(P_%PE?GmA83@im=D>~Lspa4^Y7PS<|fCCjv8&W_3F~u`69;hF{ zmO?$H9?+nmlA;Cx*=;~5*W&{bL|O!D8g!zGl>@N{S`(rWi7x@f%ZV^M9AA@zPz<<} zPzjxZR&FrNgQawV$^9Xr!U`cb20(HaBt*9ew0VIqIl|-@K-)mX02Qd`e~=mjI)kX$ zuR~4}k{LuEkRitdB7?{S0+co-1}(tnfj5K5ogc{Yz>`7bfhXj6;L0HKz!h@pfj`j7 z$%KSZQbgi+qg6tniYpSz{(_~V!)NXfa+?xciSz)dy;1{ZH$crrFU3GjhXf=(Kan0- zLP=X_1(B^$1EfY5$OE&nGy)aKY}u})q&0ejj3JL4w2-C*9AF?Yc0^2%>>-H`a-(AX zk_f~PDDBXILSYSw9dl}cCB(!&6SYEu%HRcB-+|&z{VyQi3&e3i%tm9!gNjT~1|r9X zNEsJ;1;nSJ<2GzGbbKff?;}(4AdVZdI1gjeWYk&Cc`37Ow5Ij+h|cS z!}>FjFr)|rBX)QlTYnccf)Nev!xC!SEMXWV6CAke0Rw2;2Yrg^2DBkJ3P!;w7zM)w Z0064lXiKplxxWAa002ovPDHLkV1mo0CZhlV literal 0 HcmV?d00001 diff --git a/pngs/bell.png b/pngs/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8df079664425c42ed017ae282a935b67bf0c8b GIT binary patch literal 746 zcmV004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0006( zNkl*B85oMpsB>dB8cDxq7VoY1OovZ!NRLdY3ZM! zpc2GF#E6Kfot21%rIlDJ1Q8YS8<=2NVs>_S=4AtU@FS3HcIKOR%%y2eeOB?&~lpY&E2V5k%jB@hr*DZprT55x%s^r#dtNFbnJrGNy1fTSt`x?T6W*p?b91f-qJ zlnyPULO@odvvJu1A}+U%b}cPBANXy!G(;#MD7rWB3nuSo6V_=3kz^JTP$Zgx>kVAd zt$>u|&ASsX3_BITM!iH>I{&j$qs@Mxf&0!tuLt%lVP2IEwK|7i^#pW-OVH<`jTiF( zJHa~vuT~*6OSEKgvP#W}T?_#-cYIf49W cTiYn@7xlqRe+7P>f&c&j07*qoM6N<$g187R$N&HU literal 0 HcmV?d00001 diff --git a/pngs/bi.png b/pngs/bi.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae2590aeefd6370a9d1602babe1818e92d2623b GIT binary patch literal 1021 zcmV004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000A2 zNklQF?aRB@@O zs3=%bpGFdz$F0*{2;!Zm1DE`o1d8L$hy2_En~@h}F# z{wTLHF@Pp}9Xtnas8h0`_~-&l;TtUmtNsBz1g@=Pw%pFiVHEshYCtFWnuE0wuoc`0 zj++>894yq)WuidY?k(4m3X;M@6r_(=IZ#bObGon2twr#)PvH6nRu5aiui%Wd1EUS- zHWJQCE_A_hMfHgsd&{x`m=Nt$4ahf8x-`Y!gc8k%t7wuUIM3;eKL1wkuVXcu zG*Lp{Jg3j->B1`XKClrSFir6joC zF=;{%HSc!Pha|as@_|<@z{(yCNCy@b_bRwa`CXA)!>Og>qJX-qCt#1{zo8b?Y6ooO z!hq)9H8xPiQ^A0jj&@)nDQWB)Fd(e%j7Jw*2x>VI&}jEB%C)pWw|nK5Et`- za>U`PkfjWsDe!TMT5IAOP?>j92{u=l3SDPBxliTzC25)OC6u^8eG7e`_hi6(wGxkU zzBb89-NJWte)ExnDx9amD;_4l$aQ8#E}!6TtQv+52O-ya=1C;pWg}Mf0|m!}^svTp z4GQ=hQbY4xZI(4?6PSvq*j)*Or^*X{XtK{4a9a6}MBVKw)jJLb zIo1+UrxFi@EMkgwJ`iXXw7&}sah6Ny3@Gy|+A7GjpzCK1T~mi!;CX3Y(zy_2qrMsj z%S6-&8La!^-6OR;p6cTn2`>U4j~V&F-`U5P@G+t?A4ovT)P<7|D2 z{WPqFvW5#m$>SauO5<^D8k%lpRZ~3J6jK`bw4ngpZIe7~3>c2_EM=sVLRKm|3UY6M rvo7_$y)5wNxHFp;Cf`I8P1JzDibSP@ee*p&00000NkvXXu0mjfwhy+t literal 0 HcmV?d00001 diff --git a/pngs/cacti.png b/pngs/cacti.png new file mode 100644 index 0000000000000000000000000000000000000000..09fa6cd6949dea80d8871416359e66ee95c296c8 GIT binary patch literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>cze1yhE&{2PLN<-oN$3jRAZTD!ji_B zW)6EKIz$)z5q6N_Ji?#xkTFebwmQ?1-;EJ$o;*j&7$4nq_|tz&E@9E8N;wCeM%Nhj z4&Dqw<}2SCnB*+wqAD6%d2DSiO!&uiguUShd+W1{SDB?8Y9wY|b9}%gV9oTgy;19x zhp*F7kG}MVWv^#6>a6zs+Q8K}Dg8u6!Ue`@jGN3EG%eS$JQ7p*XB=X~uu3>g`DQGC zY0c>XPbbC*rgN1VPZ_6O^s#x>7|74Fjwh7==wd^ISBy#rS{J@+j8oWWJj2G}+zJ-< zE%FB%UG?NTgg+d)$DXlWc<<{(R{<;U004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000B< zNklN?9AMI&-XdA zE|&ub4jede;K0F>hdYILJeh2~Y=MQ&MX*9c5g*UoTr2L>)~?guvwo|0z2+gy7eMgC zLccH~ydXR(+$F3NZW68(o)Eqi)(FGG%ffEqZ()gWQn+4N$(}LcUg5BLSk62Ny^(`= z3y)*gcn*tuvM|71;U)GtNVq7=mm_Et4=Ilv5a!{P z=d4vZ6V6Ff@D|~e@HSSd%|Zd?fi2o^m7vw+jbFRpE-V)23mb%kgx!ErAeHi_7ItEl zvzF@wrxUCRs1e40bz;?kwv#B46q0*ZxPlI8LM7n@3Kr3%3bf}f7{C>0 z?RmPgkAyA2AhYp0aTP)jWiapba%id;AT*;k&#Gx+H-t?nUqS)#;fbi}0p;HBREu;m z#|*RD7{=nEo$?yBDH?Z#%@{?=GENx3CTxCac{`^opz3iz_zSn0GtOEL_$U4}C0+^N zF&b>PDGtMQ-D@_bxCSGvLWX|!Y}59i)vo94LMRUl`mw+oEjhhZrU2bDL^}`CuuSB# zmk(h>#uVx0c?BWkfqLO6C7cJ7xir;LLJ9Sm5SXCEjlvmX^BZ{-(VC4H<0u1cr9uT* z6UJcMg!L%2gEiAA*KaniOckid8X*$aqm8zo5z>udKCQftaNqK5Gv5Ubbk%D1=pww- z*!;vO$-~*s`uWDx={J(^F*W)PijL#4Zmg-+{$vd9Bz)?O@@=8XreS$p3y4y!8J1H5 zt>LR!d)AAR_ffh~duHXARhCN^^F!UOU3;;x+whQ!Y1DeZ(qT1#SM7exW*XH8yQy@9n9q-T)yzKG^avLp@?q_I(s*ymZcJEAcoHO=kA`R= r@W1`3<+V}BfddB)95`^`U@71amSE+004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000B8 zNklkTE+{Z-<`v6XC&frLq*d=C(phyhVfg$`B&}bdk`^6rSv>aV6_K9B6D9+=6 zQAAXVbzE-~2d#dBv|THDm?YzDcP>K6R)~a^@lxNO3{ zfh?4=?5o(|Mn`Eso(l(FGk^e%He_gcG^w;$rP75;82cLDH+yE}Kpm)O zCU0`EWTP+#;AjT&r}o3eH0*b~g2-tQDhz)sZ&T+=p-kt1>1YMn!JL}I#B_3Y^e;Pn z&Iui)X3C~aH%Z|O__e5?3fD|<(hPnFrNTTs4O(f{t0YUvFrD0ot&CGhIt*FwdFr94 z3o)<=|EGK_)y;cJt2z!^CA*ioQdGl1s^@4vCGbMuEX}k!FemO4K48|+fGLfq@Xl+} z@o5H{vcfNdou_WjkR}e!9@_JqkMbMGu`&w4`PQ=(*W=8XhtgR`nq{rza9RR&8S?r> zD%RO)>iiZ4Xxb}g@Nv$Mm@nQRvLatumFv8Bjn(O(Qhqp;o1zSx$6LzYel~W#6=q2* z1bX{vtJi0Dp4qIY+_qP#mJ+==jqNWt$E^>OfG>ul6lbP`#mr0+hl@E)Q&ybLVrGl7 z{G5Hl=B&2%#c*an@tY5ypqGUn5yuq_s-0Od+!Y@g{0HisSK^zPOSXAT+1qTBSsjQAtTmV6@s0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0009w zNklJp6B4;;Nalk;Nalkuu>5b#)VsibHZ8Sk7cmCR+tpl39E%U;f!#88EjYMbCdcU zVq-VXyEc+4ne6P4HmEH@TT$Qr5(7PNmp!J|+N< zV6QOWAGkWdUwA=S%Wu=dJpr;!p$?PS7s6Yt%bOY~ght_g0#e*0ki0cVGx`*rE3WF1 z3Ky;5nsNM{@Tc|rMPU~*Q|Gr)f3_Uc)*L;}!~FfHh=XtrL&iuer?Q&>YmmtioHR&q zGA1~6@&Fk$&^j3=SsL^y;RyPkVqDQf0t?nmRfz!J3*XXFRJRY1z;!Y?Dcmaj>XX$Q zoX_I?I^-}Y{KdTQRsb82p{{*R0(5;lLFI$mXxO&sv0)3JhlIxp7}u8k66ZIPxi1vB zp2AoG`(0=~O1o{hTRC5(xckYJ zxybGb?^=D|zEL}|AG5UI9dO&Xkx0`-26&2O>;SZ7ouQpISc^v})Le)5I8 literal 0 HcmV?d00001 diff --git a/pngs/cog.png b/pngs/cog.png new file mode 100644 index 0000000000000000000000000000000000000000..d343763dd2fb85ad195b096284c116bf34aebcd1 GIT binary patch literal 1144 zcmV-;1c&>HP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Be zNklR;DnzKzLzGa0ID_B9Qu5xLw{JI12fjl$FK>5d zXTJI7rLovNw*?XHn;>)$()c@1xJM{Paib_~3*qLhYwW~u*f)wtqlsKJD$=so+6U>XijR(91~!U z5(>T%bSX7vxalw)sI!m&9|`Bc+l4YxqKR;duwJkiYo~5g4N5xkdBR4)x?V_yH-s6* zo8&Hjhp?QmK_GJ$5uUizKtdROe)t1rqOMBGLxc-LVVH1nAR~|moHoY;6lpi=L}y8b zG}oq(r%PC;oDkH>QKU@}`zj!ZHW0vK1Z$>T5hozrn&ENEf^9||sB#QNT5nj_2wcKg zngdG}y*F@>@QBbrSYq)2F9^3C`F@R{p#9mw47P{xgYYWu6J|kdGK7ZpGvN2qQ4aML zv$#*&2abZHEerU)yuXNhp?9+AfKrXW32O@u4rDAP${>n(R5g*M;6xS=Xrj^Gn5u#p zGs|-!S>$k^yr~cT;p!&bC%i?)>#QDYO933X3$3NIRzeq=Uct5#k3!b!jA`w9fQLVe zH((n6hh4-RAAPJwf6!S2IC@-jT;jLWP^~6=h*J?KHTsTlMDVt_UbaCVeABGqblWc! zeS1wAAU$61gEF*faHHs!9#v)plEH5SAPDDyrpA)$*lJ_{e;;tMCiI!S>rC8kA@0Jo zq$CIu2Ri3aDI7M<(Iy94Eb}&OOPk(8yo#gm*)d(M>Kx#_Un@AbarxoSJKUW%5JFv$ zKERUVC1EE{2R!2m>I{Z>9)cbqLMttXp#qvz76Z{O!Y{(QSwgaeDRIK34|u;3Ft_tT zYmY+rBtW-A26}FVJW%b?fz++V+L16CSsE!L5o}N4v`STOw&*3siBCF_-S2P! literal 0 HcmV?d00001 diff --git a/pngs/copy.png b/pngs/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..b52ffb6b8496504227f1f47748d394cc467dfcf3 GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>Sa`ZPhE&{2PLN<-+@N&8V^I~O!a2qy zF{|Ch%mVQT)ErkiGd1j}WMGPt>k!`PX~6qc#pG3EBioW^jiwGY4Ser*`D^pnG(Nhh z;?l2jgz<=CiN@#s4yS+GU-@>RM8R)Cu!9*>A@kPB6PV^|uew;3aD{oX+=4>i8m5l= zfRk|no9{HtlZ#+FvN42j&s~Q%MzdNvLd2PmXgOPQHZ~m1&@_3)_-V4hilsN0kJztF z(YI%w>So?y%JAfemlpdx76JDQ+MF)~cE%rYTzgG#W8WvnN5?~S+$8^>c#5|qk7gcJi4?nrl(0N&L*T}55ty>Wzj;H7#^KpJhKAiEQzlSJ0CEc zY8h2AxtjdzUihq${fdWEKAW@9!X--HsSD1R2%Y%2m1l8+2oDbfgI}ZCyV^&KHGl!j N;OXk;vd$@?2>_iwu4@1Q literal 0 HcmV?d00001 diff --git a/pngs/couchbase.png b/pngs/couchbase.png new file mode 100644 index 0000000000000000000000000000000000000000..86e9c142ddcfb1b98121108dde372c77309bf77c GIT binary patch literal 825 zcmV-91IGM`P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0007z zNkl~om#ip@oL)7dO>VRdNQ|!==go~w zAEs1BWeh9?F*SB6R1Z-K)m04q36X)Cih**743t$2oLj8UZ#?cm%}VB_%0s-*t7YqN zXru8JT=T#8<2*2ZU|cvS>R8191$Sn$jMELKeN3N%lX-mewOtp;*`TR^pTmBz+2= zHu7U`T6ebwXd3sxFnI29@KpWsF3Pc#0fR^5J8v_S9*%sTO&GcjG)?SqYn;{`{7*0f zZe;%SC||F)uH+B)1BY27*8IejF?{;O6e&`qNWtnqXK;TdJQX%U00000NkvXXu0mjf D!gE-_ literal 0 HcmV?d00001 diff --git a/pngs/couchdb.png b/pngs/couchdb.png new file mode 100644 index 0000000000000000000000000000000000000000..1847ed3fed11e2bdfda187f7864eab0c7278d0e7 GIT binary patch literal 837 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 i+DNh6i~s=w5dHvb<<4@Y9qU}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>7<;-nhE&{2PLN<-oRGrorjsP)Aj5Fv zl*1V#k2^n^JM@`8GHFOJXLsO>=Q|?PY;qu_C}7Q_RQ_qgD@J(@IbSEBDo?o|##d|$k~?<%WY*)~ z!}v(n`2aKbM9VW7lNM|YG*=LlZsB8B{b;9<$Ns3^z|l>n%lAX5oCQNhNOY6OR#}HV zlU+VLdj4VED0)-UD62$H=&HPg&(REqPB{-n<+jXci~$+fCa-X3=s3;Z&92iB(auwA zxFx4|5|hKvRDOZg6IQIBnkdrK6llQZcF=*D!R?dMx$SwW%Yk9a;OXk;vd$@?2>_>^ BpxFQb literal 0 HcmV?d00001 diff --git a/pngs/disable.png b/pngs/disable.png new file mode 100644 index 0000000000000000000000000000000000000000..d958cf4f834f892a9b9783da98f92feb5fb66b6c GIT binary patch literal 1241 zcmV;~1Sb25P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Cq zNklBXX}vq6JJ+NGA2@qwcK4fe=Db!R zCb%SM&Ra_e6J8U(Pc#CxgoA`-gb?AvL?dvN5X9fvgu8@pjdhiT+k`!YK0@nw5lANF zO5;U@dcw~rYnW&QApjH-8VNmq6NuNCbAZq(jb{_8Jk|v9;_9_=(ZC?#IbpR#I0rlW zPMMoW*iI-Rq$$7g`I!mL^~Bl>b;Ao~V9dLlNjN6WVN%U7w=|b~@U_K+a>7!=D?(SS z2nZa=GD0H8DTKF##~8mM%z^!TNeHevozUcQo_r(ll`sj1*pY>V6ZlQQLv12V)x0Nb zu^0!w-!=i37Q%9PCIM~mp+1i>zr-iJl&;JmEFhdB{IX4eAMk{*UOLd3N^D@0DgZHE zVRIZH+_K?DRq2FhlBHg8liNm-a_qv{u&Mz8FH)pjOTrG`z?j|Z4|pA2nGDj+wl%OK z$__@P@nOO}!+RIS!h}*sxSoi_PmaJ9F6QRtm8=tpW~ULv3P&Ci>J083hy?*JIizT5 zAA+0}F(r_sF^9cTwKVP}?DY8=RtY#2T!}P3N4TQ7HrXZtli*aN#D)qfI6r_iLoSXsd≫n*_3jx#Xb0cZ8$! zalf8nLLg|WUP-Ez!?~OAA&QwM+aQoXnn)>;ua(C9@~fhlQh^Nu8^#zki%<(Yat-mp zP1g8LAY`&D9%)9RG~R(o?WS$5c%WMkl#M3Ub&=^XrzWWc?Q^+zJgUE|erO;`2}om= zN~Lb7L)NOwRvj%QXsSKW=Oi+WZiZ9DKY*6wl?si!8;xTj5Wx=lop$riek0tGN>J`j z%yW7EburY|H#VVU@uxv+L-s3m1E<_CUFJ1JE20vj*gYS#3}H_K&_sijX1rI@a3_Z3 zqxaOWLm(BMfv~VIyg^S1&oJ&l>fzQHF2;H2^)jK7F{BKmks2j7j8r%9JFV2wK(`p) z#I-GIZ1_m{B8EPS$ik$y5I%bm;E6Yp70xnz8D7hul2Q!UMQ|3J1g{l#@7$*isZ6`N zFwV!FiJ-| zIYmhrc{8;BBOp%v8%21K|lJL3p8D@juCLmV(Iw&C+G600000NkvXXu0mjf D6oDa6 literal 0 HcmV?d00001 diff --git a/pngs/docker.png b/pngs/docker.png new file mode 100644 index 0000000000000000000000000000000000000000..1a073cae6b00d236c195f66a467f8e1acf3daa5d GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GP!>FtK{NIEGZ*N=}eqU7R4&(-dgH)n<^e zWK-qo#v4q&Z#V^RUpmFC6JqAi)FJvplG(@EmXo)Vf5U_Yer+73G9e|`<+G|7p8WV- z!WAN`5XXOHr9(}EhT6iD4r`c>%x=7qvZ9hfr0~NgqQ7ulsxs zIlc~enKM3FH_Tx-TkJZSRWv&^hhYk5zQRY>2}YWBU%4AAcm?Vm{o)mT?MnD^IW^Q+ z!Warw7FIc=2yDN~@r+$9qdnQ6N!OvK<;JojvmKvR1ZW0(c-22Rqwv{5SKz+lQD$rQ ziH{u{Z#rl7=df`;Dj$DbiJ?81(VrbQ;k$%b!i1$JLNDQtUT);H0eYzE1K)~rXaFPyg^ zwE6|hm50TRKg3np422|QXYk}I25~n;P1t)OYMNHVjE#W-r?*Jldhl4mxc7Xk)i18C ziziJv7#nckjG^P|!lP@MX0_jQ=ynRY{YvS|Mt3&PzeZec2Q|QP&f~|xVErx3x;kf4 RE-;lac)I$ztaD0e0szbc`+@)f literal 0 HcmV?d00001 diff --git a/pngs/download.png b/pngs/download.png new file mode 100644 index 0000000000000000000000000000000000000000..b0f698a5a13a69f12c0913fcee0f16f63e06fc95 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>Ec0}645_%4oFKuvI6XolDGrz4^WYc(>*~(#0v4F+A1?n4~ zGBPXN<2|C}ktFL-Q_LVUkLQTlk54Shf_?v)jx2Kclgwbl;Klj8aR%#j^@s~5PZnFs zvE(rn9$`?M&+f3MN$iB3!ybm&>>C(`73SGTyk=asFm7URRl*hK#c~o~4;)|;lbR99 zbtIc(g(c4sqvos3`3ttH+kHqk;q0wqFt0GYV*4T4g!AG`kt(Jm)hB$Mgc~Cme05}R zl`fgh?(pq|Z?e_AA16ELR%cM9rM9@}H_ou$?!9VQS26NrU!0 zwyEq93r;fIsyRIUS69^SU3LA4g8v$~Pb?Zo`i&Rx1@Qh_#sbvN7!cJg=i6y-^5IC8 z)Q;c$>m(v9SZ?Jj9G7n_yzrb|j`3rp!n7m_n_}h@3?>(3c#k}na6700ik1KdhDVQ_ VStafS_W+}j!PC{xWt~$(69B>y&wl^_ literal 0 HcmV?d00001 diff --git a/pngs/edit.png b/pngs/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1f2efeab796af815b45fb26d477064175c6571 GIT binary patch literal 1030 zcmV+h1o``kP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000AB zNkllK;6cH6v1S?jo zL{Z5>!GJ9aRaCSf*rJDmIS3Z@C>TK`2Ps91c*vpO=sXx6oBd1P?qvr)l5BRf-#0rm zZ{EbR5=*QtOSL$@9w_juN&61G;#Vh20|P*o&s+8quobuhZ0C!kvh%>WcB}_@4Q%Gm zM1B|WUY^t?-X8;|fj+>FI1=syA6>|kWq^agJn%z*0!84igV%ooD+Y;Eh@J%|#j$SS zjYeKt1K0-CRgC3;ibno6a1;1q*z;L-k~DJIqKkkW3*12>x;S(S;)G$~8n6^W=={+_ zgvk8@Uhvb|)Z#h{u_0iV1eAew{6!5Ii>V^c02i42l1~x6l&t;Y;A{-U)11UZOqh~4 z&)=1RdoI`JY%TU15tGlbr;FlPo@3mPh||nBWvJURkXJGP5*X!0bj0IYBEP@YkH!)6k9>Gu+PKzkL@Ge{yh^}|Px6!8 zty*yi$nYXn5S}k_%kGE#4Q}?VI0Wcn^O(b?%>9>_QA2skYi&v!B;QWh5c%VNZe&Lg z^JLcpk{=6lGt=bBKKQ(sZ_k@}0;(|^6s`H+0FJ7LY2|H0F~7h&roBRh7x_|{X0lTP z9tiS_f;f#r_IQX0O}>)?)c&>3qYt^yopTZ4ME)pmZmc+}P~BmZu0)J#$EF;}pW|wE zBCaY#gR!q-I8YOlgwr0LKLcC}Q}#N&faS$|MV_kDMs4$=$NcWFb=#Envxth;%ZE;!saB2Q)ZNYE!P|6(E$^e@eCV2$;E_D(GInn5h42Hvj+t07*qoM6N<$f(Z!B Axc~qF literal 0 HcmV?d00001 diff --git a/pngs/elasticsearch.png b/pngs/elasticsearch.png new file mode 100644 index 0000000000000000000000000000000000000000..72d73981a1dec5604dc63be7387d90a07b156a1b GIT binary patch literal 1046 zcmV+x1nK*UP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000AR zNklMG&kgh^T{zXCw)Ige;+lP$N_cvp8O}1P&1{5&H4ssx?94CgIImBG5~? zM;O+aQzD#2WV%WqMR-j}E9YzQ@(Ll2l*%aAd?6elRJuig)8sv2yEs=STtlifl4?IYf8pL}Gn_1UPN>i}4iUB;g(MUA1MxbHZoBAYlWXkRv<}n*cxbE+K~TG~tYk z*WGN9@QrW;^S2T{5I%N_0DE~4UfL#nC5%CB*p>)~3EwsD$x+%&*oiS8Kk_m$uKDt( z2@k}$h~gX)=k6HlJJ-r6-e~~NskfUH(|pK<77JBMjGq~%AuH6J7-u^X0ULi`5e}j_ z^U6z9eALo{5CT@S`Jf}<*ju42(g}5+V(>%Pxv>BgNalOOAgabs=6UX+E{k(ly%w-eE3pr$VZl3-gkLVj z{8Q+75_2}9PL`Eua_{p5jhx&UjJe#~cRQU!b2f@GcbQLHTsxz*7E*3&@OsikZn@(g72p>MOS5)-5!eU}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>y!Lc)45_%4oFKuvI6u5$zQ+zZN{Plsq+Ufvb?y zw-?e`P~@7;wclNV$Jk% z;=)NS4o5!~W_;|75vpYR*tu{Ld&q)$8yr6$;f=a-mby&ml*6xzh`y9qc5o|*2Rgxz+crZkL r3|P(gliAlyU&8I61}JV%Ffz=L4tC#hpgkU#78pET{an^LB{Ts5820k( literal 0 HcmV?d00001 diff --git a/pngs/file.png b/pngs/file.png new file mode 100644 index 0000000000000000000000000000000000000000..27ec2dc810487338f4f01fc60e8207dd3d0c753e GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO2*-*~z>hE&{oduuQ6Ap-%{gyf)<29YTj z0*yGh4TWoG@f_q(ILIL)A~MHSSW&v;{i8h|@0YC3x%n?Awr+~W@fl`f_P4?(ZGBiX zeNw~TCl@6y%-8SveSz=A{x^HRKC*wTaRY!R4`$^&7|J~><@M1q{b}isnc=MgP`z_fr Z_Aqp%Ny$_*@_~Yf!PC{xWt~$(69B>vjw%2E literal 0 HcmV?d00001 diff --git a/pngs/gearman.png b/pngs/gearman.png new file mode 100644 index 0000000000000000000000000000000000000000..723a57e0a3c82fa5ca643fd9cc12445f3fb9e9dc GIT binary patch literal 1160 zcmV;31b6$1P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Bu zNkl z2MCt}6s-ZPJt53`7ZU-Scs(B^U4(6f3PZ2|COn5jbjP`c&@Ooc9I*F7@P288V>2J* zAR!Ze6P=P6NIUVAv^0pvz&3G{jMRV}sB$Jo%1;p*!?4f<;hiwJ3N7r&^@R6+iwVum zY{31HM$Dk%93f1)sI!Vt7c%JC^IHhRrkS{(u!?Y4uvrc?cU2KXTqYbLvvk+b<`!a~h+D+%3x2~27LXV`-R^6Hro;OVPyjM>ez0NYBAx;s7*e}VmZ!jkeora7)4H?1yzy4ThDiVOm7he zQaC0<26Q=tfQ>3w;JlzX;~r$K&-ct|4M|vU!u5leGWJx2M!z+QV`3sB7L(Oy!}}_d z5i;$hMFWiAr0u5upG#8JZ)#+*MLo)*81T{X-lY}|s4_jqNnO{kklKjdn7clzGrad~ z5gM3hQ05mhWFBcnlU@wNUq&?G80sQbz8UuD#brw~;jXTnet>#KRZ6V($&^xI3V-FO z2WA5(IgD87k!C%GqReC}QGt7P)4skaG}S`di! zcwSb~6O`c0_n=hPNiXU&Z8aJsJTbdy&{7VdJn*)ZwFYCG{b;H}8<3w>&UI7I(m=Qw z<_N_}d6umx9YO&2y-QY|%L%!$`j&aIco0H(kWVJFoX^xzPU zeV4En>j)FX86=ry3aZ?MMAwbc2ggjgqyK>;Ke=mx1DNN(B2a@8D-XCXgiU0R1B_tL z^Q`hUKF@+3xNh1YC@Y3xeAYFv`b7ASsx;{{`8cJjWpw;I?i#sd;I+{Lobg_iE&L;2 z4Ge5SQgloWU}<-Je%dLJJO%!*p4g^L39gxrvjNuy*Yw%k(Dr|;j3MZk_>{|&XajHC a-0&|9ILCFVmkqf90000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000C^ zNklDqo758gT*#dlAZ4&JOu@h5E6C*;37LksBy7lE2^~d>8xBI(kv|6 z$oSem6`!ZWJfPDsRy+?YGJw^PT7eVD_35y?U?t&N(4tYMw*}=Q|1SZ5FKB77})%c-NvA)PR-~vH>vLEY}#9M8|Ew>hJ@eKt5ar6RohQ zZnMx^E&%~NqnyxB_%0K`Z``Qvt|OS3-&7+yWd&r!SE$R^xM!seS;DDv9rJ!dIyHix zzv(qMts*WXJkv-cUd{^;VBBp>@2b zN8Eka<7AHuc(YLuvRleZ$cLar@LZ60K#e_u_nbpFu2LNy^lCLwQ76i=KL|($JPL`d zKJYTK2v+GZnpXwb$dA<+kgWl}>Anr+c?A#jq9Dy|E9kZml-hT38C`yEjrJ6 zzYE>7Sy1Q=!`V1KAE9=B$rf=vqPN3RM?i;Vm`}u(X~_7PEDHr4aJ~hNs8X3aY8P#Y z()uO!|8|?sH$isu9%7H=Tsd|Fs5KE}ipfb^Cs<_I;)%wn-2kd=y!l)~rZGFElirW2 z&96+a^~>Ints%@xrpb9e*t%gifL912pt$qtD&`c3l7f002ovPDHLkV1iVeD69Yg literal 0 HcmV?d00001 diff --git a/pngs/haproxy.png b/pngs/haproxy.png new file mode 100644 index 0000000000000000000000000000000000000000..1791e9067f6cbbec439eb689bb5240d764bb5b3c GIT binary patch literal 1378 zcmV-o1)chdP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000EJ zNklT5MOPv2#I?*%7;UGIHJHx!Urh{BPl}zB`u4LqCzEm5c@+|Sd72P9a7ualk1K|Wg zB}@?>5N;4&z@g;?7hw3!5rznx z2-7+`BZM(R0e0dSoHZ@+HW{A+uv{@Xq^(l??+W)tb~+%W+k}1>KD|zHK+ZVdOy~<8 z)hQ16r0aAO`fKqy1KP5wbN^aRQvC5ss8XPsDo#zOzD9 zgkuTpk);>!8qss$7~y<~#zXL$DI8b@@m`EiI<{aUI>_90ph~On04t)rp zbX3zc&4Y$u{D_4s&y7xoRL!3d2C>syv2Y@j@lMpoA%;J~dp2qt4A*N7t8qO5y%`JR z{WKzg+!jaMrTlt!u`gPK6WeUKt!C(S ziZVBp_32bzcHp5zr+IgFo16og6%Q6uG(eM9H#BY(v|Nd^7g|X0Y@bTZViyuIg>WOJ z#&nzzIvEI$1WYJw>Bu6H0_=u}+j@{PH_lI<6mBv(JF1wQpGIY@;>C`L-eC~`=Qgg97u^I3)$s>T*R_X=;ugv!7&a9Cn^nwWkpi#w>cq=3i+V?8>uHD zBXxm#XpL_|4H!p83Ts?r_irT{(5{MX!!w_Epc^^T$_Fqg3%jpy%8xzDBIQHTa6mNT k+MnC_l)0bVL_DJW1B*r!yzVtsd;kCd07*qoM6N<$f}BcMWdHyG literal 0 HcmV?d00001 diff --git a/pngs/hdfs.png b/pngs/hdfs.png new file mode 100644 index 0000000000000000000000000000000000000000..737b88859c6ceef278a82613f2c080a191735359 GIT binary patch literal 1610 zcmV-Q2DSN#P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000G{ zNklU=a&WD7vvC6)I+~up*8zn5b;9ibyxK&fs*G zZLY;hs8gD<7CWk}WrI#OFhZqDs}5FKk%hX;FMsD=Usvwg1DenP!@b7 zm=aWO76Up3mjz3LM^W;5!CpZdisl7HK}66lCEQCk3wy(t=T9;AKIt;77sd zMw&c9s-1`PZt^t_R`K(J;C+m~Lh|WWF?Ky!NCoHPf^B#u#PhQ(Hc$3R<2_TN7xOF@{rqEhW&f@A7kuugBEU~xr<4Bj{>SSF8m@SRG7Lq@80QlqK`9ItL%dqfezT1v>c2jwyTG~_wuV`Ff z2Fj!7Q9eM?Yv*0es0B&ZbR^6B2ZMO+0E5*ea|E5U{mR2BicAtug`rA_f|b`=g#nCl zWW7-X%8Z+XYL4{5^*rl^`8EP{sp6Ck%79Be*v_PF7?mUwr11I$ZGwaB(gPUlaC_QN z-g*9uOB{`&m|CwN`czpnz`UbWa<@P)I0jUymWSbV5l^-JHUAo`Idj~3gh;)NDtp$X^_!JvxA7I#w2lnj#kYDu(#ZOgOh zdC@FnFM@9bUwI79ursQt-N{4+pM|j2xuojT5eN8ty2bM0isjwYP-&l5alNF?GG8lk zHwn%B$Ry5KP!zKnVDrW*IeOM|Pzge{ZCYS%G){p%j8|#NB+4XEADsc-jL-s7ES*e-hkA?~^cE=@pv+MWQ@YgSRQD za+jZJYpi3f>sc-$T&}-bY*xMp0N0=Qjs!hV`?B+kr+|`5hB)@o|Q2Bh`iR z@FE3q!9v4b6v_bKce#AC31jQJl?dUTD*TOG4jgJL?-#s)$I5K&tdDH6SlwEBs*iQwfFe19@jfz=l22&Mf3CMUs35tfb%X6t zDQp>Y(u0DNH4gsQF!)a`>%=r8d`pYbB2Z4Jr7& z3-XGAJSpuE++1LL=ShPFk0SM(_AUrDY?XN{bFc8-4c!i!gO3x8b1dTAu*EG(DL#Ko z`m9o=@3LI_cGbvkH+(lb#ts}tsfb4#kV4^UtzF(^$y(i1+vC~+CCiRXHPV0pm2fAD zop-sE>gC>NmP`_{%oW1eUajpI)GiV#jotyX*_w8FzMJ1uT0YNG6Z(ytjx)qciTREg zbEVhPfF(|6r^)wO8o996)amC0bwThM?e<10b(I!9UC*_7qYS8UBhi7^Q%1K~HjGV^ z-|wX_3UOJR53G?~&*g3mYAkD4D!L5Pspe_9Gl8Zw<>r;Y0h>yN;q&rWDF6Tf07*qo IM6N<$g0^Ys?*IS* literal 0 HcmV?d00001 diff --git a/pngs/iis.png b/pngs/iis.png new file mode 100644 index 0000000000000000000000000000000000000000..df351fb439bcff32f22a5ca693056afb16a1a13b GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GP!>Fok=%IEGZ*dK;nd;p`}3|D2nY99~GIAza zJz(U0WNOIC=GgmVNknmn_mRk?Hi_U9TRTLPI(KO1r3L&mSzuHuVc>p;Z^v_=M2D`5 zKIt2Ld{2Unm`f5EPq|y~^l+K{>2SrPi+=h`UUR+?tgg9s|A1Q4Ea^M%(;cSn=zd>& zWRJ_W*#F1UJtJlxS5(>&uac0*|#9ddYMGPmrUIm{zvzHJl3JdY_V+O-9rl95}h*> z81lJ_k91D(SMGFLahGA^ydFXK4)+%^w-w*-nsoRKW4`P)*7^6FPM;8HJrmn9v(qT5 zD`~dQ(xa_E4o+rFjrYx2UOmAx&#-aj9g8-#z}7Aa<~=R^oM-2VOI}#JB=yA3O^+wp zK0YLO&u))*P?DJF_MWfuN#<3HH0OWZ)Hmbj?9S=VeN&oWm>lkzV)>A*w&aJ1c>X zB^NhXlub3)?cK)wKH+=oL9f}2cb@Yb%7 literal 0 HcmV?d00001 diff --git a/pngs/java.png b/pngs/java.png new file mode 100644 index 0000000000000000000000000000000000000000..828ee6fb32a887a3d1fd8c1b56275a31e2fba706 GIT binary patch literal 1128 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 i$N$)b2oWO0;^H6izS9sC-`wK>0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000C{ zNklD7eGKsPuOfuNW2MLMo$M9h>As;Lj+GLB)fp6$A++E$-?zj(o;KR8ycV^GI z_xyb4>To0_DRIfPIN#q$*iI-Qq!9)P_XsBmp+q;Jjj$uavwp&I!l-TordxdP5MjR< z`w5>39)c5p^9VNye{>q)vhWVON`n~hCY&dP2}OiXLI$B6c%st)r-gS6e|JE+Rw&Qn zBQ%M*OLe=D6$8BD`iIG1m#3BV@1!5l0TZdx~&O#FN%E`VNYgVw_4y7dy(kv_YXv z3!#xPLy--6N3sYVb{N3YO?X6@MaU5We4Mb0Fs`WDr^T2v*bS_{7slrj2C+ce4PY52 zyd~_#m{O1dy*4a@wmPsLEORou*9+fI5&j>oXfX{hAp~{pfCtqzRor`k zBE;F`3luht%fdA)egK(=cV@2Q+s_GWF;`n9<|1@LjCX=cOPNP_C48E*OQDHF6%$rr z4%3nz7!Z!t9bygQC8q6eSIptY<|usGf!-jbaIM~{Aajyw`l76uFUosU%0|PJ+&x#6 z_omcd%IM2?8L08aGkaWIezmvp1q>C(-GhQQf>!iYISvCD*Qgoo%0 zg5W|mh#8h;gr}&w9N^Dz%IAa;=j@=No|Q-W3mUm27(lv@D7hu|g^ zBJ;e6@SQQtA9cj>PY^3vNcwEg1dKHykJlwn$&cU~a+MR#0H4S%m8Nqcuc>G5(QSa$ zzMkdycWllEt%#Kt*lB004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0005t zNkl^I-;-d+?11Ox>9SImN2x;Gggq4;ZX z8jQiCvNswVv3Q0i_zpf)!N44NnG+xBny5P-`OYumIrhQCR|Cb^6p?|8bo~=*j$+eM z5Pw(Z=Cvw|w>^zA@uvdueQ;ezyiEfv^B01qWa3xACm$Cw9vhK(7Ms+>!|IMR&tsFC zdZ5V)G{6&ycq6f~VStVN742)Bi8p0{$0l}>dDH7aLo!vqk@#m@bG43vWy#3Dg7b8> zhO)EJfO8@~%4`q~3Uq_lTx(gu);KZq&_ j_GxJ+3J3@Ys62iE=rM6Tj>F;y00000NkvXXu0mjfB3ubr literal 0 HcmV?d00001 diff --git a/pngs/linux.png b/pngs/linux.png new file mode 100644 index 0000000000000000000000000000000000000000..2065a0a0bbf962a143489dae7191c76c853398a8 GIT binary patch literal 1503 zcmV<51t9u~P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Fx zNklPn2Pwwh*6*Y`?D7xK~gRye(*DY*^4Em=@%5 z-VEPm@Q31ZYrtdUdTkU88RLD}elK(0a~yY^XkeOCJisQ88ROH?>lDwrAn0}}fC~-$ zCCCz-S_E@~7X-%{&)~p!mhpq8YS6$O0csZxtAY#|sf0$}os8dO-J7ij0j4mOF~O)c z?mO}@bUSF>d%NJ{$D4X+bybn;JqZy3xlF zY=CH-MKDeNZZlGfqe<(8v>H&8d0+4)OtTpZ?Iox^4=yu*3`)I4a1&!U2>!GPV95kH zgdHnY{wDYkw)u{+a+|t<$(jDAH2fAcykr7w;N{I*Yx;wLNk1gEViChWISe#ok)N#KHE`ye+m*P8UC|PaM<{6 z8^w-u0XA`BO{je`B@Lf8YUZp#qjf}YrvkKD_I}tw6gM6CA*;OH5rvUf#5A8-BchHu z5Mb8Ww9@D~D}&9u5+FlX>F4gFp1U5W*=Drcl6SchU@wdN8u;B|SzEH|YtKqCQVWnZ zI&Z&v?ysUzS2UN2_^H$BJS?HtbyQw1TjXbmFDGEP4PJ1EJ5@cy0@lNzqdY&;V1+kS1$~`B}kNUb+_* z&%kOcIT-tT&ZwOeJ8{-18GXih5VrV&ke~GO{psm4CV7rpBNJv$wG|S!b(Dnt6e}~v z_w#K2QA$WP1?~0!8&iP$abR8hdraplDazycLkH^@qYCgOOi)LOI8cV0J!)L-GOWh| z*HVnk#Sma40;u3Wde^$zLyXNE7Sa>s2jxsiQ{>|~P>}t-PGRC_r)Lv%M8aN<`0v%a zqiWzPYKz*ZIg1}O&|QdHO=;e9BMesznfrm@5%zV_GUxwkpg=DtPFJp<&z^|)v{U%U zd4>wG&%5>-H_(Kd5(KxS-a-R6EcAC^>m@W$iYdsIut?mUAkWuL{7fy|#r-2Zun{}Y zk?*${ezpd#54#$1_&Wrzh6$iAAzn&YS)HOp+#g}S{_J3@x6p#GMP)f2RzSFs3IcV|E1HB=E@7|# zRCsPDrnSXtsWihn1#jW)X5ba|#~!Q67Vjf6juL&RVU_LJ=aGn+svgQOoa{a{r-!DU z>X!wtM0M~azgF>c_D)W0gojSVTqh4Lwi?Z@zPNp+{{Xu1H!@vc6xRR%002ovPDHLk FV1gZ}ww(X~ literal 0 HcmV?d00001 diff --git a/pngs/listalt.png b/pngs/listalt.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2b5a5e1095f87c22ed2ae7743a873876c77ecf GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>M0&b7hE&{o8+qF6h=YJkd9lFBE+>{& zoi*-%CH5cOFTg+VlXO%4mN#clb2Uxmoza}YC-?RMi`rav&$6hr8(JDnb7gj=uUf6% z3G_`x@8WsYf`%n3=i`&iwlq{HIrYd!znSyHqsFZH^Ry@N9n1MvJ#DFQ|D&>Q^@ASU zDHRI8qxy`O{k+l4q*uDGm&xfV{~sTxFdj7{8U7_g3Sfg-^U| zUOzta(4*tAH-G<>9VU-&zrgTxayZDjagZi ypU%IQekA>|Y(?*1(NA#P@Xdb6Mw<&;$UxsntdR literal 0 HcmV?d00001 diff --git a/pngs/loading.png b/pngs/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..5be0e96f725642104b2dca020322040c6cd87c5d GIT binary patch literal 1021 zcmV004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000A2 zNkl1j2!c8YIyeLjI5;RMv{0c)(IOI5 zs6)|03JM(@B6JWPbZ9n*1gbPy9}>5TTg3Oo*TfCtPSO{r65JaQ%fySs656iVB(4za z#KGSZz@s`#oFnGOG=n@7%fvgbLRe{M7Hqvs z>>INdVr>+Nr(t#yA>Q#I>P!SNraBaD9u*Z&8(1++W$Zp^s{UtPE&{tV3=4mX%#lEI@k9o=ree zu>cwJv{^t)96Y61z%kKo`G_xuVww&r?0g<^n~5e1*s*NU=M)M!D}qjr7&@bUV8xQ$ z=M;55i+tV0BQv4l`ut~+cg`sia7hd(M+=Wl0lWs5EjMY{)Oau##IZU|e^*svNd!xM zFXmU13B*4=(Y`rqq(%1sm3S2Dt`XlTF`*B{y1br_BDP)2#2wg+{gawMc3 zujeZ9b8K{9up53$*zqa2$vU3Pj-(m&W|wbdytqGkyFbWvu_M-Eso=9;RTCX1bNiBro?|E*n*(GVIDbjnnU6f-p>U!)7uPPMl~wb9N%%*Wdn`#SA!5DDq`xB?zVLdP{-xQRKmr_W%=_7MxLF(69i_l>anRYjbI)k r4#CDl*n41@Mi*=&3v9ZMwhi9_)rX}8wNtGf00000NkvXXu0mjf*Nd;? literal 0 HcmV?d00001 diff --git a/pngs/memcached.png b/pngs/memcached.png new file mode 100644 index 0000000000000000000000000000000000000000..1eed609bd6ff4954603140b7dc36a21c63a8502f GIT binary patch literal 877 zcmV-z1CsoSP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0008S zNkl0afQVd8?Z>Rh40|IFbwnY&djbh^T5M#JF_$M%=JM{Z9i&H04*ozq$rWgihvwtA;u&z)j1+e**3q#;}QPEAf)h z(I}zLSKy50%Va27DEczz3f2TTYV=fn_*_rMRpj-q_12p4Jt z`@k=RG&pXk^9?8DPZ2SodifvzZln2K@gLX}+O$d}CIP0b!OXwoA)twtj5HJBwGIpr z2GPQqbipsd8o38C1wD)jTU-c!AG_?BU4!_Q@c*ZSfDK|_6(0dHvC)p{;2}xFm%_8x zMOeTlHd+?%w^g|NEs(iUN?3XGICm5x;5L$9 zbaf@UpL}?aTowrfCNyOW_?vJ6nrbZb<~aoD%$``D-fBg;P?GbFg$lYuPv6G^iDrc? zqZRmlJUhsb0ndP^l7s#{@CLYUVS)RiTqyJHJMQKoJG`?C;g8Yd?J@(qo;>GrJ=;$F z;4B#zQxJ zm@@dMxUbLZ%RWq0F%G)I6-vWk1)mQn0RaI40eU#>a4~00000NkvXXu0mjf D1lW9f literal 0 HcmV?d00001 diff --git a/pngs/mesos.png b/pngs/mesos.png new file mode 100644 index 0000000000000000000000000000000000000000..62060c59ec5e8e9071c79542fde7f42e620cb61e GIT binary patch literal 1183 zcmV;Q1YrA#P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000B_ zNkl7e4cscnP;Bau$u)EU%h0U`kRfqn*NE`$7zi9fvs2!Dqd?84ue z*#g9o^?=Wy27KWUb4(VHi$L7KUoYRwqrZYovyez}x2WY9ceO$Bd;m0o zuiT+h6Q6l}?-e+p;V;37PlB^NVZWU;nzmKki4Jg3k=Aa5!%U3<3k9r5$6pJ59h3E! zWwCNrlO!nzbrvUY{G+OsFfMR$i{UFU5N3~&+$Z6ziQ^sXaN(PXg3Q{k1F-4 zZ4eZLN(P|1RSE|Xxm}S)-L!tDS)ZakvDHe5Kz_;wOY|>G4ElOICfejp4Ai)6 zh4)(+ppvD&p4UdFt&45N2Q8^M)eCizpbHBKvO1qPx&vo=0>kVYCm2lcB zkXk^3IuGzRRyspPEQj4_E#uQ;;Bbx}DxRAl$APE=bqje7vUFdGAqEl8v9efry z`3G$}Y*Ha-OF`Vm;BDr8z(36sPcfM5eFlH_noTN6{aprEbdJ~!OK{u~r|N*{$JekA xYISkqqulXcw|B^mxX7OYnR@1#XP*7<_7C8+_!fFXo$vqv002ovPDHLkV1mJZ6A1tS literal 0 HcmV?d00001 diff --git a/pngs/mi.png b/pngs/mi.png new file mode 100644 index 0000000000000000000000000000000000000000..0bec3ea34cc9c880fc1bb10fb983a9a630342a32 GIT binary patch literal 992 zcmV<610Vc}P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0009w zNklKxgwxQAOTZY1QZFFLNH*86j4(|2#6p^AfQ)B6cG#; z5lNGvf)WJ_4^J?lg&4^NEh1bIFkq9;Q&Ob3Lg9)lPVpajE8}DKcII~HcE$VQBiX&# zx%Xz?ym_;iO10J2|E(RC`t1XQpa&cPUBHz-uYof73Q9yRP6vdMNqe# z-gc&vB{2)D;G1{DQ8W^Zbg{(?)kODX+xQIhg7;ugf~yCytA7C-su_5mz_3y2vMPkG zM7*QgR6p^@0ay0wAJMSvz(|79rLK;rq}6=Zr_namB0r^jr>Nr8)jaqiUGE1MrRyU2 zC|&QSaPA1`SJ>dX@^mP40W2$Olh2xqy+{R_YKQj*Ay0kE8rO)3jL1k1{gY`>r*oC5 zX4lbzLBCC%LmWCind&yE2eesN%wE(=yG`!6o1j1?ho7!%I4N|9g-hCCFX{?YE-X;2 zs`@BV{Ojl%(Tplih;*wi^VzaXxxU=w zMz%r54zmSrqE$s2)p0=Bz2!)wpnIqoWA|nPVt>lwF|+PD@Xp}D8!Ti>^iIc%eL3@p z66J^`2j0lF(6VOA^D4nn#l9dr;%VCAE0>qD0~N)WH&TwxLXqAY)LE@EV99}ba^kP^ zK;EE(KE)=s&93iQI+lurb60hsDJYCESqrjG5H>XFjXrmvCVQr#URtDn&e_lmudnzB z-UpWq3cN+dNv^|E?28w^v-~D^piWb?q8Yy#i=n~?Hmk~%s`o-78(mGvv9V6JWc|{- z+aOJ)V>Z4-C&JA}jT(i?Esb-jEuEu{DsXcRit}1b4it17Ix&YyHDoy-`1^qB3qMh4 zb!%oSQF6a#_x6HEl(N^uI1uJXK5=dxq&=gD{<@0tV#zDK+G?w<==B?wl$X3f5SWJm O0000J2 literal 0 HcmV?d00001 diff --git a/pngs/mongodb.png b/pngs/mongodb.png new file mode 100644 index 0000000000000000000000000000000000000000..d8313a3aad6c086e52d1d8f65e9246863f350629 GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>yz_K%45_%4oFKuvIN?H*l)|*eO_dp` zoWi|l=JFjm>u`qYsXtp%-@-?YYzpTZHYN6LV|a9S%LkUNwhToTwnFhtUi%r6#1-cC zifA{VV`g)>;Qgh^)be^3yexr9k9V>#RZagwS4_$U=C$q;Y~Ab$l12iWTPDiZvUKvE+A_6yp=lSdOyjX5{9BeC z3tD1iKe5Zy;%o!E!0ZK`rUn-ZR&`EONZnAD(ZR^aGa*uP;=)&qtQo1_(pFSGVAGZL v=jY#(u;9}YxxKa@T2IaWA85d}f|ucEZs6-HJ@2LflLLdNtDnm{r-UW|m3H=k literal 0 HcmV?d00001 diff --git a/pngs/mysql.png b/pngs/mysql.png new file mode 100644 index 0000000000000000000000000000000000000000..e5cbf52ab37b5be81733c9d609a19ac44da7bfb9 GIT binary patch literal 998 zcmV004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0009$ zNklf7ioz#7QaKj3&SO8?o5(Z*gBUmivS0}q1I4){Kqi|5yFni~2^MF_$w1ch+-xDt^-% z=m(F%*B}X);KX7s+AabIz)vt76aiu>u-0XJSz5hd5sG#NLB_nqIIN2<0gL;kST~U?o_i*1GNNfsiSYnZWDeAh*impbi6R&r+{Tu zGE*HpN+G@psMq3LO1=n4REW?f71|NM1QZ=v>IU${@JQ|PL%^8w{0eiNQ-@yJhS}w^^mJN;0uF;DYluR#1XxuHlqn9}Z%{L+mS!Ka zEMGTEKsEae-hiETidew3J;B3b#w!70Bdno&>l9(#r*U8lSjdK~wvO348@B1cJFAUQBg_kS)rl`~mBV2ZY|EIKNE%Vd<0R(=Y UcH^0goB#j-07*qoM6N<$f=TPDga7~l literal 0 HcmV?d00001 diff --git a/pngs/nagios.png b/pngs/nagios.png new file mode 100644 index 0000000000000000000000000000000000000000..bed3c305b0ad600c34c3bf1d4191ef6e345a1164 GIT binary patch literal 617 zcmV-v0+#)WP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0005N zNklyMe;BS_>%_#HlYxJsz6jw0a$B_sWu6~YLYjR0a#Dud1Qc;+?!?|k^& zC_NMOf#!_-jtnr7`Y=WXU=3sCp)7!Cc_hz6&b)^3XG5ea_3>%06q^5WB?}xu8#~5dI)lVHX}(Q=WCO@00000NkvXXu0mjf Dc5U@P literal 0 HcmV?d00001 diff --git a/pngs/nginx.png b/pngs/nginx.png new file mode 100644 index 0000000000000000000000000000000000000000..d1da7df51b2faef640fdb2f5f12d4b3807208f53 GIT binary patch literal 838 zcmV-M1G)T(P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0007= zNkl2?hGG0S6#n3d9FU z(ZociW&KokJPcHms(~C2xKKIipqp(%OAoL>L!Xu)nwB0&0b(5*dmsUb1!&;`Q0N!a zp=1O(K7$sePz4aH;E|sI#2ZO4FB^zMaLC02aSssxp_T^(2!#FzAZ~=xq?G$UK+J(f zP6Jx3?x9u^DkqRGYe{rG2s{De4S3|!sg(yn$)*60{0$(UL1uby#FI=wu_HkZ5A@@R zW?~#c2!K4l1cw|4v_zsP4}dBx4?OZafOrjsrOrfXddCLbfw+T`#@ulNwXPu$Ul_>N zD83}*L%{Jf2HNrXk`PF|8;`yp(6o=wToY&kz=Ee}79hc`pi*lNu^z~Qmc_ULsFHbs zC*RB`pr0I2NJ1LFHoJxo+^{0C?U=LfkpF{s$e$J2>P!O{^2H4V-{o65>)>Omp-7Kv|< zrxpf*PC|`DVun>bprMS*vmnQsk{QC6@dOSi)MW`IW1^xN)ZW>GM;=sRMUdh600Q09 z9zu>Mr9V(gAanMUSgR5m9QXh&M5xxKyaUY-8F-4-dJ?*nHdsn9^b(M$4iYItiz3i8 zON)vMJ@gfc^#CbF-5X+~l|nFwlOfwHK zK#SB9G)ntZsM#YU)HeS!kZGUPViX;mfL1ir9Hpj50Wk_j!6+C7qW~2E0M?asH)|9_ Q?f?J)07*qoM6N<$f)F)A1ONa4 literal 0 HcmV?d00001 diff --git a/pngs/nodejs.png b/pngs/nodejs.png new file mode 100644 index 0000000000000000000000000000000000000000..5715687f87012efaff7af6cbc1b530a3cb732434 GIT binary patch literal 1346 zcmV-I1-<%-P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000D; zNklCM>*`J9JTeH-LHK&cA_)Xw)$5A* zm`DCtDOQ0HOnhE3HUoFDJ1JFT&Q`_PG-4}VNP!B;&$(ISSopH$tkgr121THcAsJ?j z6!-+U;r=)Ty31;L!et-A5@9J>KGRs#%Sq{DshKek(?pOzLYONBtivtxiSUNc zQUdgA{6&efD%CjcibN(Ryhu2z$l9{3BNNAptyHZlP{T?L*_u-ZG;BnnB2jh_juk`E zeuw;aM6vjF1ZG-VbTw04`1lLLVY7_qgaVadG@14;*APaoK=hmRuMkxiNQ!I3n@D53f&lgeDTVltT2yapCX1t66oq6`7`;at2i2*Rr z6p~}T*A~!sbsPwSCWTw=#oqv)@eD26GOr2yP-=Ll06%)B433CZ*!?KtMYl);N_f{5 zSe25JI7QttL7|gywGXVk@FWK006bKrm5hGJRRxmL>*gW?vQaf!2+@__$XJEF-Iquya9+$?prwz3gQ*Dr6Ks9W@(_QWoz1fgLiw6K)ka%Q`K7 z9FD%SAYV{fAO=%6OIkW&8A?%jYx?qq~XejLg zw~w)dN54(27_s2Tuzrwj&|PfkFa4n}Pj%Q2J~!h+2{gj2o~89UIk`MV<1Odnq)>ZZ z6k2-6*q^5aXf&HS4K_-L4RuPc zrBia3B9=t$3JCdK> z|Ljo#X6cj8x7;G*n)RDa#}tscy$4p&;3mU16o)zT7kbJSg-kLadjJ3c07*qoM6N<$ Ef_o)Q{Qv*} literal 0 HcmV?d00001 diff --git a/pngs/onealert.png b/pngs/onealert.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd7794a3214fb56f321573ea88cd39ec95db72a GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GP!>FmZUgIEGZ*dOKyWc59%_as77%>@SyD zOYltjG|51M=U(0)&MwAE$pEot5zb~$BQK%mqY5rTB8vjpk_Hu3ry27ID0M=axJ2u^Pj$Xtbz_ab8^A=Zo@duMmihsJ| zVy-a#A9J+EA%}iPWerBz1YVP7&kHBB!ka}doLZ3XpkI;Bcx_%GrkO_zuq4kKeVg->ur}W$}PdB{q4&k#n;3{ze~}?@hMc<{YxtU*q<RpQy6=|>8AXM`3DJ<-xn(B=Mk~9sO_8i27S`^Hve8f zukSO0Q-Qa^KoNrRDzSn2jMj=4C+R1x(eg=I<)ZTEhO4 S{X8(CFnGH9xvX004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000CA zNklGD6yIbHdl2%lhYbt_6+8s(LCC1cgHcgIkb!}bQc?J;Rsd zAVShBm=sFE^C_W#X`NK^7*elwHr6Qn>R z#s@WiKNI`U5l-QJ327-E=b43ynrkyq-uBcz!5(&G(x{adTz|(V)iUe6@)@Hp4qW$R zz?x>0SsXi|Tm{NWxr#C16X7emYzb24A_LX1DalWfqL_o{iUwtg)=)ce8k4 zPB77=xF>~LxsN?EXli{L9s0t&4~$?0$TLQfh5M0kLv(BVg{L0x1iCL4H(6geY|!Pr z+nnTPKoQ(rVjY@y&OGwBA`BSv&=6A&_bEC)%N!T#rGA;cT22WAb|cKI5r5h1_WH%n z&nVHN8Lra8$f(5g=SDvU004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0009S zNklKlEN;PTG$8?S2!iYr4b8@6c!08`o8{+n|1egcmD3&?t@2)%gp{a^Z(4B z`BR~6uopZA9tMZOy8Lx~|I-6qunWEgm%%UE4_6dzcY&9{7T7fGgT*`sJK$Ga0&3t@ zF}{}33~q>s>)?7`0@xj|q~x0elC3)Cgdgc?j+y``8Jd12@4}CIZ;_+hCOjixc2a@I@K{qcZY?Hr~T=**m&P z1aQDU2X|Akz=QfMxL;I5mdg1Ymq`sc4xh*dy3OFA-^VSL3*cH#Mh?m96NRSO*bWm= zlT9kl_;CxP-A}}2@PX$_eiyoyz;)Iv7$5fywsATb1MF85R31!tgY5~JENI~N%Y-NW zG0;+Ub|A)Q<6^33*!Da)(6RsuyztihsxBb%d?*V+TdhS37W9(r6*5c?Ku5_}y$NQcoY;*QG@!rH z->S{F(o@*&G*8ca@Jzwd?J)`|bVSt$xUBQNKsOd#y?hk*L%#|QtKBSs2sVBu>c_Ym z8H;!Wo}$3Lyd|F>iyHZ)0z7x(+k+$Eev7NkN$OMFOC!JwY4hS;Q#;t07*qoM6N<$f`yx)ivR!s literal 0 HcmV?d00001 diff --git a/pngs/overview.png b/pngs/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..3a63b62eb907ca1d00071c3598400fc1daebadf8 GIT binary patch literal 788 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 G2~7a?lt?E4 literal 0 HcmV?d00001 diff --git a/pngs/play.png b/pngs/play.png new file mode 100644 index 0000000000000000000000000000000000000000..1aecd8ef496cd2736c98a3cb4806b6f601a0dccf GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>Z1Z$+45_&FcE(_)d)FCey9T(SwUR$M@k9qcz@ULvOVq4EQp98hqP z(|p$C2aJ2Xj2DQ~WYa^7IZY2vGGUIAO_-J4GAqG#7USBw4d>=BFHC;g#JDzbUB7>U?nQ=`vOXU( zf;yrC^tzVakvqwjq?@UyCBOBi=JB{ad}fY%uXxuP6EZbeX^x1B*v-;$t?(~38;%5I&x004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0009n zNkl z>C;5m$=n9+13%Ls5SQXIA{`6u+FXUpl~fpsVw6L32^&m`lKP3V~%DI0JkG zKE^@d5Gh|xF*+836ZE-cLVzj%S~IdFAqRp;6aviV9k6M{xr&ka>SslNiC+KY4@H4eDu4^1xcaGuJ4QmNf`0+uV`ph?|0W3<6Hk;x>Kg16hmx+EWWVqfS~1OF(z5 zQOpp50Z%~JwkJ~xk#)@}#&Abna-5*PcaFlXDw3=KJw>C`4A}WgnkW5PG>I;i6Dq0D zXhkJw6$Gl()Wjh@(TSZLW#UyY)ba#g<%qyDSr~OvN>p*kf{XwQOAm9PeAjbeSt7e* z#W=f9NIHCPZA()4-Hh-4LQp9&Yv>EAB-Ah@Fe6SjWTVC3z!%_D#2?vVZHxk0nES<* zAXC5tU`xbx7lB*iA654QCeyjNg=PNzGRsg6ciH{bv}RqBq_9Hs2qiBo41qtuODZqM zN2vTsYGtjk1iS^F1N(rjBT{}*^-w``p?NCArc!Exn9c9i>Awph7JUPJ0(JwN6YPf{ zSsR0^b)6TYT(h#0x=j(P9HZioDa-c4yl8UK%{nJGXgwWbsv!!y*nSa3@i++ZT@<@I zYLT-y6erUs`*x@#UNNn`#uBn+@1H&Rj?X3Zt^e{*{sLmKlbhUm5oZ7Z002ovPDHLk FV1k_SoFD)I literal 0 HcmV?d00001 diff --git a/pngs/point.png b/pngs/point.png new file mode 100644 index 0000000000000000000000000000000000000000..ee123672b1a7855d8d2baec616a259401ec9c706 GIT binary patch literal 596 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 O0000U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO2*zj?YihE&{2PLN<-oFLNE6zIU1pyJfa zDzH6S@IA{T*@z>e4HZ@b#S1$1Sst-o`NqI4m?g%%k&CZgD@kxYTN1y{Bfc#k7=)+V zcy?CJs!j-K4&?8tO1Q$jSWe>Wffej+CJUC_n$Gx0NTIG-a585aMcvKp0r1S{5%2k7MH87Yg_i+KI3fbtA&pk*%kKL&SH17HF(t+$Uh;3 qE0n457sJkc&BGcHKQcuzG4!sNT7PxxnvcK`VDNPHb6Mw<&;$UV^NRui literal 0 HcmV?d00001 diff --git a/pngs/redis.png b/pngs/redis.png new file mode 100644 index 0000000000000000000000000000000000000000..6049a918e52721d6d4e10fb3806088473b095883 GIT binary patch literal 822 zcmV-61Ihe}P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0007w zNklhj48Wt7| z0}X-*24TU0f@NW0fgP;S3(nz5Dat?tM>qAAD@=-o2gg-gC}9=Z=sN zAwq=k6Fr=91DFQJfrFZDGl5lL2Kebl05$#zIO6jn*MT$m`Uky?FYX4wc!D+@I1RD{ zOa#c)$K41J@%a|;T7!TAr-6va2N!|+zy)9*XKoeA!zge{)BrC6et=mFt{lb;3wOXh zf#;@V1oV0kkO#iw`wL*xkKhp90qW~tn2+CpAHYk?cmucuoWy`LkkOzBpoY&{R=gAL zk!|d-(qFeA>OwRZmn6=GRe_k$DxfXmQ9#5N@VpBdPDv0`vJVm!ETFTycUA66AG2;9x+#D*E;ka54hvb!4mR-& zQ7+&?;*@3WQUx0zD`;;~RxRLLVs3*mw&}1C8Px)YB<4mLO;4GzYXy}8<|NW?qQhq< zrcJ`x9aEJ613N7q`mral<3u3am;wpFQyM+RDwK6F(uOD2p{G6*{0%yXM^aq3k~oMm8C=k8}_tBEmZQOm}_tv_z2N=0c^T)p(+UuYHkGV6Nf() zG^5Tsm)>o5FrAIU+D{cNCX;lrT_o{07*qoM6N<$g65l0 Az5oCK literal 0 HcmV?d00001 diff --git a/pngs/remove-sign.png b/pngs/remove-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..19a945e3534b59efa6770c8cdf966e7abca86b87 GIT binary patch literal 1098 zcmV-Q1hxB#P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000A_ zNklQB{6Z^MY5gmTf-dYrDu@f$q6k$G zM7k(qDk&{gkz&;@TogZ`P*MDpEV8Ijq<$8nK|=LhJOe|Ryt(gXlDNo)L(}BWn|tQn zcYhO$)ubjR$-IcxNdU`<1i$+Z%mUN@BY}EgJ+KMb3^e-;FBBp25_kv<1KDa4SOoL{ zr}^1MgvE19Gk{bT9!hITn*T9rPN8DowxD^t|6O8qZ3IcKJ7X7hBnY0o#u02FA zt0YTlg?1mTTud^92Oj-@iycqOCT|0B49h_ z7-u2pGEs0LkvGkj;#^cKDH@+E!EJ3xWK8!H0&kVOV5)`u2YWH9OI(xaVxx4tV{*6b&@>!cvdy4k+m4`+EV#)^p8| z0ZoY{wF3$Q7wNjHj_jKvQ+gy`@o>ri_YF_l(|=DA^{iBnDvX!W%E7RJQ8<}<#$Gf` za_qLG$l9n3g=q_Yku&VkV>Sem>_e+D6Y`6U8aHTiO^G^0!(NxC^j1%<#1_rg$YP?d&lO2Vg%+G8rN2cM2=5BWqYA%ye>_-Op5<7 zGL`FKXF0)mI)K`%Z@RE}Bvpo^GmE@31v48K$N)ngXtX_%G z#=qLvPZ=h&K~}(#NU1Nng-jD?OOj<*_|A%y0$+d+G&mEB;I(Q^Y7(*h1*AmD48@pf QSO5S307*qoM6N<$f`sAM8UO$Q literal 0 HcmV?d00001 diff --git a/pngs/right.png b/pngs/right.png new file mode 100644 index 0000000000000000000000000000000000000000..220df4c7a93808f71007c353562d03c9cf1f2a03 GIT binary patch literal 674 zcmV;T0$u%yP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0005` zNklBP7JOgeVUCM@fpvX+@}A$w_jMkeei> zv>C>d1uV~KJSdY-};{3>7D2E{CMXb&vSBea>`P^fjySt0Dk$40E_TC zJO`g<0igph1#iNga2GtA1%$8BHd_?Dlz>=(FX6{L0~FysxHn`?09D`dTaScD@5kTl2KBSwgYOt@;LU02Jy~R{Qw$m+qpGN>$i95Q6dl3+0@G4yv6RThe zU;ti=d1i&G^(zIIf)|&*!HD$_xCZa1*_<0d3~nPP_zAd~_63{(CCdB|SMZ!O&`+5! z$Mk$t_eC8{!JjEIFHV{Hv^~$=LbB&o!B3mWJO@CDf*)2qvt%-OlK@2;*s>z?BKW%L zehn-IKLa0eoE8N`!H+18O19v20g?n?;|yN6g&KmTtM){{ufEMCP|Wi!yPHZhYIT?m0O*IsGer0rTv0U`U8DQUCw|07*qo IM6N<$f}a-=tN;K2 literal 0 HcmV?d00001 diff --git a/pngs/ruby.png b/pngs/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..74b6c9ba0853f64caf6c50aaee6bdd37587d121f GIT binary patch literal 1635 zcmV-p2AuhcP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000HL zNklPByh!!o!5u2#=xvW~*|c zUCTS~;;KwYI(5}SfgGUZBEs}2R(}L5l$t=89W#kP#15;3cj8+};Viksy zlGu;vP{5A+L&&?lsriH_#cvPbTVKrdeIdcYB#&Ss*q8oncRKA`eqY53HbhdlC)xo_ zZAU~V#&5VUA^jMRu!K|ud@Xg5-*VdVRtkr_iB(uc$gRf-qpmU}LhhWFq@~@Yu3-ZD z;8TTm5O`6`JSRnj@~}zG3ulfiym7vYTx`LWL{|dysfpBqkB_H>=?tbMQH39{@+% zq62k8vqh3&5lTxDBythsE+Zmk;S&dw5*QTi?;}Fxl9n12LrCNt#@@gYH9$Wl6M$F$}@LZ_(>7A+?~*zHql=lD{;t1pl0~ED9mRS8LNw|Vdm=MjO`RvEV2!AY9PuD znoMXf!Lc!F`HzT+DZmU02?%7Nbb#pgABir9@Tm?Y(+LJ<5>F%5P$X_4Ft|t$>Q;Ag zD(n?0(DA5TNLJ@=gp^lYmj5tjttd9BQz7{oA6ZYp-fcSGi6Rgc`{T$C;`%(op^u7( zzT5MPzhf}7Cia>sIC2JlW+jkCT}V$I(nt+Hu?P|}-S_||k~I)7A5-M}MayLMZFc&HLnNs{`KUv>A~7o_@Kflb z%9;J5e$}uMctN~$Gvs_Qh6-KYphy{c({fDnQ|0~7y?_6A^H50R5dH<>36Zk@Zx&UW z`>0?!W2lt%!{Lq^h_Aunr&FXHO5R5m@I3CB(ETEW-q8tUMD)pMsRP^LNz8bkHjw&b zdn)9VmQ*HjRV2=eXt-%BY~{oYIpiv%h7h<4rKi1=mF1WuGEoGijV~B-k}7t|t%M56 zqOYo@`j{Y99DWd2AJNR$s(`zm_Mcr;C5;{CA~u~o231G8ZlMeh_KmqSfZNA<^aM&;{t4$7s%v>OL(wevrfZw%eruPHOIXt#qs%?GG hVW66q;@^~Z$UnxAabph^L<|4`002ovPDHLkV1hoq<@5jm literal 0 HcmV?d00001 diff --git a/pngs/server.png b/pngs/server.png new file mode 100644 index 0000000000000000000000000000000000000000..111f657e8a00ac851208f0f3f8856a6073efff7a GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>2za_UhE&{o8|lc`WFX*jxtX0$&Zgpt z<_Grohxq?6{u27|#5gLR$^XL(-c<)%OjOv)*6x1kXVkvT^Je1d5~)QV3LMhf>3d{7 zB>NllHPSz&L<)%)Y_zFo%YGN#v6ta%s$KE1S+g0MGXw-org=_?=4cWrTzfW%QS`yW zSx)Rl8w1bFW;C9A%)C~`;Z&xH>$d&z2YR;eoFx!oRPoX6lE!q6hjq$#d$wjDvErY$ z@x4xn!t+%TmtOdUbY#Ds#+AXqe^#?ZK~VbZ9mc~8(u6rVmS3D+EYo?tMt1(EtV5+M zj=!u9P%r%3f0#4afl*+B;U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO2*FMGN;hE&{2PLN<-oFLNE6lgGsQJJw) zQehoilDx+3c@KC6)-yixQ>b(3V;5=oVIknnQ=m}KkmRkfuhDlBXaBK(jt?pX1R8d= zHiqy=@GM%A=hVlp!ZwlJ<;2GW6BriDNn{*wI%?H?>%spFA*rtiRdXK@=)z4*}Q$iB}J~Dj7 literal 0 HcmV?d00001 diff --git a/pngs/snmp.png b/pngs/snmp.png new file mode 100644 index 0000000000000000000000000000000000000000..5a40140f946d8f16b1bfffc013b4a81cfb3067dd GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>uz0#ShE&{oJJXQwkO7ZtrX$BfKAF~u z%7!H`P8v`nDRO-nDK{~Km!BIf!1vjJ6AHq zOnLol%90aaHQb>U)*GaDGrW!NY&XmN*qHlk%bDZzXE3lRFfjg;J|I4A@`{sR{+>@g zrvHBN$GsQS?(n7jWHs5_nVD~VZT@lrMh*uCCXl%vIm_?2em%qeNPhRs&GRZ9|0GAB zsCvfwv7a&G{2qmWHmw{E4f1Roz%mTijP*O}*9b*}Wb~gU8mwzz|C0s`BnD4cKbLh* G2~7axYoQMS literal 0 HcmV?d00001 diff --git a/pngs/solr.png b/pngs/solr.png new file mode 100644 index 0000000000000000000000000000000000000000..09b054ff71d1a3802f79352c399d67d21d6bc361 GIT binary patch literal 1201 zcmV;i1Wx;jP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000CC zNkl|-6Lxv0;0zEK8!GIMCDt3sVLqV~HiY+))s9;gCr9v$tDhg3l zid3l`#1;h=3ymOHsL+BA1yktIp+bfX9ZtxQp+koZ8T=mn4n98a-o0FUjlzBKBX_xX z@4nynzJKqACmbiF2yM9EB@_wvze=E!&`&sz>!f(D2plC$6EcJ^ zgpY*ny|7j@l7SM7gsf)VbCBxAH@gTA319JSBd7ug1HPx+;{#zF_i4>oW&QUU8yChK zApFA0B=?IzCq6nvSjUG`n(vZ z3Nni$whw_ZD1O~weichM2#*?B2~z^fO}+``x8UEM9`C3CT_p?~__qq;6NCu__p)hB zm=egjWSKSmwtKwu0@lCdGxvAG8NwyRLJZ%U*-HY-LUr-qx+Vh^Kyb*%#TEz`Fm6U< zDYbH^_kw_$wCYlHimVpMv^k0E3C+AJwO%Hi)mVGHSppW?0w<$zDYG#$ZEmAzc@?*3 zgb`Tyv!F60)#>iHb5W#&<&t{`Z$E-Bg1jTOrA7&?qS{)*O)M6`M?~7RSktB~*n@19Flf1zao)hqEOfgA(D75y z{lEx<&5_?C>!gv-of>fybCyt`%D7)aU`wepHz|T>o-k_KO85~d!ZJx%dR44QidkRz z_f@!84~kz5me08abpe~1E$A@{_p?0q6oGeSldyCdN^xJDXVxFam_DZbTagAUaFaQ< zKkkLqyEHnKn<20z#+5|RF}vv zW9A|?tl+*LY{`vKUenh*ZMu!$KjOa9ijz5KC8nUb?V;eNM~k3pK{qP)g077Sn?Tj? zpd9-L! zH+GqUYMNRimG43EG?K8hklO}H?XizB7mBl5a*nm?EtNzAq;e>J=^!5pYXx$sxEWZs zgcNGCon6J$&s*g}adfD8VO<+3a=sB?Z)FT5K%@$V%Z33RNhFa(@*l`w^bGJV)<4w6 P00000NkvXXu0mjf*rpDy literal 0 HcmV?d00001 diff --git a/pngs/sqlserver.png b/pngs/sqlserver.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4c117c1763fee9ccee2a011b669a377f4e61d2 GIT binary patch literal 1854 zcmV-E2f_G>P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000J+ zNkl07mrU?oJ4+(|@^@4suwqRtk1eh^_@1zSJ z7lZ_R1+9WXn>7Zfs|7X-HlX2Mf-b?RZI53N6nsD3EYN~`)C!ge$^>)f<8f!;E*7hI0!tn%eES81^eIz-}7jFo<1;bMzfUdU% zsj!i1xS2yP7L>qHTWtA36Wr?0_gf#@E`|S#q}IqGmpcoJFO#b{-gvsANDd=1Umj3hSS1uf#8VXgcrq} z4@QYVmumKWT;yS%YngE;TDR8If(qkv7M2Milv?c~!5>hty5S3g=bhLqUJIN-OWz6J zHiEE#y)W{2zj4o6CAe74 z|NO645VFNh3v5Me_oJysK5xX|>uG|TNMbvQ4b36%LcJM$uMkGF6cePz%Ei+2ar<$4 zk+@?Zld?Jytt+=bi}ve?i)LJ?%*G;Xuv`T$p@PlAf~m$k`$(GoPOWOZ0&IfQ!wBMs zU3NjC4xJTRqmp=Z#tYWpZYAEf5VWX~|ksLXJoB>HLB1egeo7Sj`7MGrg*>_wW`1RFB9lxBvomgQ76TDA&himIxGI0Qn zr*mCpOy>d)96f530m?Khndl`=g#ZE4e-@dulAyHempY0zGssQeFDF^;<6V|8j9bnj)9`t#2Oc6{q>;cTO@Iul%RZ8ib@+TZy}{U9iIpt>-)-C< zFy1$5!`)*3u1B-WNLW#Px!yJsNycrgfmav{*(ckP$q--z$;aaBKBIU`#gDfdTCJjV zK8}E8G>YBeph9H!Z>=7B`2!d6?d8O5J-uto#IG$KHlURYV_eV*?m)7LXkJx0g& zxiM~W-2&T4KK4xM$B)a=@QqB?%tFmifX+3(*9|fW@^l3A#Dxm*-<5_>7n8Vx#<+Zh zJ@zSDHdBRRhx@s(Qpo4>uQv&{p=}hGD50A=iN>1n@pW`Y1(d)MTR&S(N9CuHU&0_* zTfxf_X0@BcUDE;~GG?sGM$8vTE!P^vi>P}v27YAU0)|Z&uzw-^|C3?OM;QR`c3XfM4wu${!Tox1i*{Qf7s5(@n*J5Ui>DUwF-dF1+{MseD+lZ$4#wHLkp`y0 z_Kqm`uOnZaB6F|xd9a*1vM3a(mbjGUrBwJW!(6L;sI<*`)Wsg5thfS!)jF3!0-pSO ze>P3MmC%;LKsrskn`CA+?#TqSRa(bv!{5bja(_Hii69B>dYC81IHmnRinI*kXOGXL s74Kv&0QIIAxgn+a07*qoM6N<$f004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0008) zNklC?p2wN-?BuI)ScrKiQ;WF#ayq9@S@eUl4c`&o@%-qkp zF9;qx%n&Lb+E_a-Y#%AxC(pNtXiFfTL>d5jW8;t_Q(8;D*H75cm*$;VOhKs5dD;d;t8D;ocbv*sk(s zBX~P+C@nD*Fr==}=S)NiwZp2UM(V2+CLmeg1=HZ9!E=6skJVb$g@ASHdfK88yiwPy zT_kas@NzH!39LO4aFKIJgQ(W_Z3W#m= z8Sos~XOO^RtFPJ22#Yljglt0F`1fBkfrfaevz!k~F_8(n={#dWgBk7_HYuqcfgAKv z$S#)LR>{93uOsbrBtXpDcUB~^;qNFy7l0MugE9(emB12en^jjI%V^7u1c;H_OY0CZ zd1owyOn@g6BdM6nXLPECc%dqXkr?;EBNhVUQ;K9x004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Bn zNklCn1b77&f>zMuaK0@1G&lhsfRAn~u!LlQGVmF+ z+nk#Xo`N~R51xZ(>HxnB3XD^JOBkI8Gi`eAJ_sq-Mrj8HT~HuH=h|Lyffmlv#C8Pq zf~lItM?K=Y0($Q#Bu*tqd%=wmN^#pdW}y(`oNiD6HiHgu9JH8ZkwH~pDOk--)uC8* zxssn{%ym%C7*?exf$NPpRiKJv%5@ep34}F@%C+g>hjRU00u|_XqQH7CWT(OXBCryS zRi5)wXWWYfD)7y&0x1leSr*nfXyc_)wEiV1y}>q{wzXg$y(s&p8tmg9i6^DjJK4lRht@A;bMgoN5D{*G0yIZ319t~8r1 zu4JldCS!JiOJENb4aFGyO?o$sy3qkJ7c`rAr~;hREAJXf26^m#K7eI0bO4eG+ngvM z8D>8_#{nIyH?u{yn_0$yPoM_;b=U_L$52eA+qQOaFbz_ zXS4Dy2H%Yam?`j@8?%=GcY{iXL@bibQ&}y;NqVFi7IUNnxMw!NOo2b3j;@o9x-9{@ zd>AMOcc@4&n?k)%luduk>VZ~A%IM5C#XOl9;lPJo-NPSfLbGN#>@udK`$sla30-Y!SQ6p;qwRd2P7^6%+nVGX8j@oWR@FXFJn_U6PvVjPL!ru@ T*6F;P00000NkvXXu0mjf+FSy5 literal 0 HcmV?d00001 diff --git a/pngs/tongzhi.png b/pngs/tongzhi.png new file mode 100644 index 0000000000000000000000000000000000000000..cde52fe76e27c14e8a9b380c06163547fef0c0b7 GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>?DKSS45_%4oFKuvI6?{d z`SD1?M}|%68S^?X9+XnhQ=M?k^CQb$+XswC)J#m~Ka+dV_=u75%7+8u3U$uQ;sm{H z{dxIi7$5l=eVyh!`9VX~f#x9h3%8inO8g%4Wt{xXquOgJuW--D;jCjadFIn(OiG^jwRCbrf3M+y3gu)g^(a9J16#Q5oJ$6{*aMp)MOUrqo z+zelhloL9Aj;6n46#hA%4&t~{V!`m$g+bKWR4Ih9sQHe)0n6R1YZ-$)k1`&ad4;F6 zs?@?^<3p~kkNMZ?EOej$gI||d-e>NwK>nVpge%M@dT#G8-^?`v1{J@`wnGf8pZL9O uHZa{U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>#Cf_nhE&{2PLN<-oFLNE)X35kVse_H zqq#Antzp+EID&Nk7ZhN=D5Q->VJ)aElG3JKrYHPo#6eb^uMFzTet zW7w!GV6R}#$-CsS9L7x~{|IPx_k$-dzSYtVF|$~~X?x72gLHscb|WPi0x>(V0sKTO>c z`#$=L89mLI*7D84x$jy6w`SK&&w$^29rnx{xp_bHWz0~M?bv@&iT^+Yr@(Jxfq7m^ ptPRU%>oI*4%Gf6b2}?yL2HjjEp6iQN%K(F)!PC{xWt~$(6963a literal 0 HcmV?d00001 diff --git a/pngs/user.png b/pngs/user.png new file mode 100644 index 0000000000000000000000000000000000000000..e6a664a0ff40f16981416526b8cad87f3b203e77 GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lwe7B^mSxl*w|O|J8&|P&sZGf?!>U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>JoI#N45_%4oFKuvI3a~OO=`wT<|BI@ z{>XQ{=W*q?VEm|}(8u^lL}429qjrZsZDMi>OBO}yIOH%LdFmk3;3_8~?cG?xD-bW~ zBe#L^(NPB-=C3S<4_E~BSsqDFi8|-P%D;kPBNJyIJ0rJ3-ZD3yfWyp2DX)YVI_QVm zD)=?V^&Wh{=q00QC}HE!seGoribsNH3%iSlPVI$8zSdtWA2E70Ff9Gq5XAq2r$A2X zgTw+0`G8lA>LDKv^f!JvAf{mFoXD_7@+`tr zHyrR)x?&P^*(r;6b%(=e2ib{7pI0jUGl_6hb$D$5S7lrGK88Z|EgFA~0^}HaUCyv4 zv2%U)Roh~;WH!5lbNf|?In1fS%rXp*f{Jd1E~z@e+>sufY{A0LV5*ztxl*~~E5nM* zhO!;C8gH3|W}b9Z4dvg`wB!c!f+d%D-u}BNe5X-uHSd$E158o7A`EzRZZIC1xF{T^;DHPc-U(r4GCBy52Y)@6f6=vnT%sLgfzOu8;jLtXe fX$myp0w$ZweqJe$7r)m6rT_*{S3j3^P6U}oXkrghb_t5 z-G$*l2rk&W93;(I;1OBOz`%C|gc+x5^GO4>$a=ashE&{oJIj#kkby{B@XHI#B03Tq zqGfGb#EXhWO3F(MzG&Dst$y&})w>5TxK%z#d5KKgqWQ=EkBM*QuYF52Ro2h+h!@?N z7We6M&XWgR;RRL|%afR%toeSX&@XP|E~6vPHAkwwCf$G1y>FYkd=h`+zs28|Y|}Dd zlM@s1eJf9bz)FYmstj$hlDon&lY$u34HM5EIl>BbE&}xImfOLW^Zwka?FVw5J-u>Q z%P?>Ip0fU|oAoalj-6jGMloF69{NENRnwkp%;^_>KX^WzUneV)kbPB@=g5-KP_bg& zU7FWY7;Qq%ZEV RTIrf%Q~loCIIvDq@Dl( literal 0 HcmV?d00001 diff --git a/pngs/x.png b/pngs/x.png new file mode 100644 index 0000000000000000000000000000000000000000..f292c29ec0f91b6cd657c15e1f22fbdcbd5689f3 GIT binary patch literal 721 zcmV;?0xtcDP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0006g zNklh%15k4<(i} zQ^5mOKwJdGOeA{R3W#q5@g+(uXQF}!tSQjzOsVD6@Bqg^W@09WAr3}8FzSI(4~%+X zU;zuBc8v`X3*gWLY6>i&vRe{>SOJIJ2O!=8#CM4Cz+@oKAkeNkKm!lN1F-`h`EDSd z0mP-y0L1Enb|B6n(c+yz{D4eHA0;uhfZV16#GcqZ07@1k8D0Yni7AY-8*W7Eyz7Ba$?{G zk$R3mlNAUwL;DewfHTl;BB-R>L1blm0h)LN{7C^OKwJwA{iQ^B zU=Okfkdx34XtDW)$mC-|1;@im6j&_ofQ~@m3;9%hnRo*bYXWf!5X)mR;3`t3=1j%( z?+*=GP~bHJu|8UH39|DnbR^^lp;8Exz8i?J)Q5^5KrW^y(4#{Gsv~r$=m8UQD@$@c zpg=)?8du&T%RF*tDOsQuj|`POu!jaU`zRO%BLV;bPpws0tQxkk00000NkvXXu0mjf Di#P@) literal 0 HcmV?d00001 diff --git a/pngs/yanjing.png b/pngs/yanjing.png new file mode 100644 index 0000000000000000000000000000000000000000..b20c344c85bfc969020d6f7b7546f3f3966e2257 GIT binary patch literal 1172 zcmV;F1Z(?=P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000B) zNkl--yqC!kWq(y`V zE-H*#7!oQGDHa<2pde%r(qf1yrjVG0go|0s!bRu6cj0h*@7?P-V@2Vnz*01kr=}>C$R7ziDSfZ;vf|J zBMOug&k^Iqq8!(lC3X|<5tEChKpF8Sv4I$J_&p7>Kp8v>!80ZJzmsPk5wAe0f+)a3 zTq8DV7Uz$T5(kJA#DpQv%Mog)h&9?;EPOMuE8hyR)%u84;#me(yG=~x7((oki^NM> z-mpQ=z>^DBfUPx*s-nPxU$^;yCBg{HxCl!&O06k3ObTovJ{RS17M2+_{4WY`MIcZL zmB*B*98$gT3}c44mpGY=0-SWO#bOC8mNJCeE#fhk1ZTxB7}kiuXfdJ0CO74mdbsqJ zs2E(kcMyLVyu}Jv5`!-9tV5W*Cw}!Pt-bKZD&h*_LE;lp)r<-}ByPhschB7h;bX{? z67iq=#5Uq%SbQ}Mvz&MYMd7E*dRhElhc(0SOrMPcr-?VjLWhV`hS(iIc~li-D{%;J zPr@?~h#TMqR$>h-9q>@%1LWawT#x(D@};0dt#1+c%}73*gjJS5?Br@ZJ1OG-fKb{E z6KHM<9eQpB9jqV4HD`XOMG2G%+wUU0RH8@A8xy*O5u=dNQGpP;tU{~hnkI~t{A|t5HH0|QP#if?(_#&=%TD-qmTu)odDf6;jMuzTz9?>u= zP_s?w7YjCc>;=@`LB{Zy#rkoPD@iSfep6shi?+Uz!nsbiId7%f7WJWD<1pHb}A z67vyeAqQKWa916yIN#ZcJNX?`tQY!du?8ET3RpViakQ91H5x)U&Mf5Pg*eYq_RP}cN0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000A? zNklrs@0|NsC0|SG!F)Kss6bUPY#n3M-5RM4Pg;8NxIBL6=QvvgZHNpU|t$jq3yJO(PPhrE z6h5a|XBw6W%Y{#bzvBrgBKVRib`tgMTj6_~cQtEsG9W?|yo_!&;S_KX+e`&oFNF-P z?}+IT&Lx9-{g&`9-Y!q0#{49?$63T5P&gTkF^rU7XnP|BI?ijau$nLKMxfT&AZxr7 z`qD_&I@bG}0dI<}?HN|P%{28Bkk-v&KG(*&=LlGZoF&jcTfbi}JRrQpwU69amcq`o zGr?m8wwn_buV(84K}X4GGq$kbqdTw^QCB!(SWw?Cu)QzDwzVWBNI*Uka-B1k+l>YMP5@H0a6%=1vVjo>}>_6N+IQ^I?! zuLXLV0qTaY!WY&KbaBR6g;kCVTRE`3N^LgPqVdLWtZcJVrvQNQf4BCxWcC ztNE+f4r4uElBV&G*BbC`m@V&1P}pj>YZPw?0X|!1t$K-Yt%`N(gujIE_KFkmQt2q{RNAt3wu^KkwbLGlZB_6hTW9icPXqV63aB8Ue(S?2 zPRbxb1bCfFUswO1B)BG$S7dv7t73u=(hXyoekOKgd2 zyoa1@2#EJQZME#m1lBr(&l_z6bXtFvNEh0TwkCM$8=#1X+!n~su>cM34qe7az2w=f zw~@2g@Jtn8L0j}qI?YeobP0b~aMbwkP|O@EGrvC?7#J8B7#K_w{s4<@*dzZ?%~=2d N002ovPDHLkV1lDM', stopAtNonOption: false, footer: 'Usage example: ./svgFont2plantUmlSprites.groovy https://raw.githubusercontent.com/cloudinsight/cicon/master/iconfont.svg') +cli.s(longOpt: 'size', args: 1, argName: 'size', "Size (width and height) in pixels of generated sprites. Default value: $DEFAULT_SIZE") +def options = cli.parse(args) +!options && System.exit(1) +if (!options.arguments()) { + println "error: Missing required svg URL" + cli.usage() + System.exit(1) +} +if (options.arguments().size() > 1) { + println "error: Only one svg URL is supported" + cli.usage() + System.exit(1) +} +def svgUrl = options.arguments()[0] +def size = options.s ?: DEFAULT_SIZE + +def fontSvg = url2File(svgUrl, TMP_DIR) +def charsSvgs = fontSvg2CharsSvgs(fontSvg, size, TMP_DIR) +def charsPngs = charsSvgs.collect { + charSvg2Png(it, PNGS_DIR) +} +charsPngs.each { + png2PlantUmlSprite(it, SPRITES_DIR) +} +buildSpritesListing(charsPngs, PNGS_DIR, SPRITES_LIST_FILE) + +def url2File(url, workDir) { + def svgFile = new File("$workDir/font.svg") + svgFile.delete() + svgFile << new URL(url).text + return svgFile +} + +def fontSvg2CharsSvgs(fontSvg, charSize, workDir) { + def parser = new XmlSlurper() + parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false) + parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) + + def font = parser.parseText(fontSvg.text).defs.font + def defaultWidth = font.@'horiz-adv-x'.text() as Integer + def maxY = font.'font-face'.@ascent.text() as Integer + def minY = font.'font-face'.@descent.text() as Integer + def height = maxY - minY + def mirrorYTranslate = maxY + minY + + font.glyph + .findAll { it.@'glyph-name'.text() && it.@d.text() } + .collect { glyph -> + def width = glyph.@'horiz-adv-x'.text() ?: defaultWidth + def svgFile = new File("$workDir/${glyph.@'glyph-name'.text()}.svg") + svgFile.delete() + StringWriter writer = new StringWriter() + MarkupBuilder xml = new MarkupBuilder(writer) + xml.svg(width: charSize, height: charSize, viewBox: "0 $minY $width $height", xmlns: "http://www.w3.org/2000/svg") { + path(d: glyph.@d.text(), transform: "translate(0, $mirrorYTranslate) scale(1, -1)") + } + svgFile << writer.toString() + } +} + +def charSvg2Png(charSvg, workDir) { + def fileName = charSvg.name.replace(".svg",".png") + pngFile = new File("$workDir/$fileName") + pngFile.delete() + OutputStream pngOut = new FileOutputStream(pngFile) + new PNGTranscoder().transcode(new TranscoderInput(charSvg.toURI().toString()), new TranscoderOutput(pngOut)) + pngOut.flush() + pngOut.close() + return pngFile +} + +def png2PlantUmlSprite(charPng, outputDir) { + BufferedImage im = ImageIO.read(charPng) + removeAlpha(im) + String spriteName = charPng.name.replace(".png","") + def spriteFile = new File("$outputDir/${spriteName}.puml") + spriteFile.delete() + spriteFile << "@startuml\n" + SpriteUtils.encode(im, spriteName, SpriteGrayLevel.GRAY_16) + "@enduml\n" +} + +def removeAlpha(im) { + Graphics2D graphics = im.createGraphics() + try { + graphics.setComposite(AlphaComposite.DstOver) + graphics.setPaint(Color.WHITE) + graphics.fillRect(0, 0, im.getWidth(), im.getHeight()) + } + finally { + graphics.dispose() + } +} + +def buildSpritesListing(pngs, pngsPath, listFile) { + listFile.delete() + listFile << '''# Sprites list + +| Sprite | Icon | +|--------|------| +''' + pngs.each { + def spriteName = it.name.replace('.png','.puml') + listFile << "|$spriteName|![$spriteName]($pngsPath/$it.name)|\n" + } +}